z_kaleido_scope_NES.c: Pause Pages (#1149)

* import kaleido wip

* PR review 1

* small fix

* missed one
This commit is contained in:
engineer124 2023-05-19 00:57:54 +10:00 committed by GitHub
parent 180227e7bb
commit 1be7517f3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 1602 additions and 279 deletions

View File

@ -1343,7 +1343,7 @@ void* func_801068FC(PlayState* play, void* arg1, size_t size);
void func_80108AF8(PlayState* play);
s32 func_801090B0(s32 arg0);
s32 func_80109124(s16 arg0);
// void func_801091F0(void);
void func_801091F0(PlayState* play);
void func_80109428(PlayState* play);
// void func_801094A0(void);
// void func_801094C8(void);

View File

@ -261,11 +261,11 @@ typedef struct {
/* 0x188 */ Vtx* questPageVtx;
/* 0x18C */ Vtx* maskPageVtx;
/* 0x190 */ Vtx* itemVtx;
/* 0x194 */ Vtx* mapVtx;
/* 0x194 */ Vtx* mapVtx; // inferred
/* 0x198 */ Vtx* questVtx;
/* 0x19C */ Vtx* maskVtx;
/* 0x1A0 */ Vtx* unk_1A0;
/* 0x1A4 */ Vtx* unk_1A4;
/* 0x1A0 */ Vtx* promptPageVtx;
/* 0x1A4 */ Vtx* infoPanelVtx;
/* 0x1A8 */ Vtx* cursorVtx;
/* 0x1AC */ OcarinaStaff* ocarinaStaff;
/* 0x1B0 */ UNK_TYPE1 unk_1B0[0x20];
@ -281,10 +281,10 @@ typedef struct {
/* 0x206 */ u16 switchPageTimer;
/* 0x208 */ u16 savePromptState;
/* 0x20C */ f32 unk_20C;
/* 0x210 */ f32 itemPageRoll; // rotation (-z) of the item page into the screen
/* 0x214 */ f32 mapPageRoll; // rotation (+x) of the map page into the screen
/* 0x218 */ f32 questPageRoll; // rotation (+z) of the quest page into the screen
/* 0x21C */ f32 maskPageRoll; // rotation (-z) of the mask page into the screen
/* 0x210 */ f32 itemPageRoll; // rotation (-z) of the item page into the screen
/* 0x214 */ f32 mapPageRoll; // rotation (+x) of the map page into the screen
/* 0x218 */ f32 questPageRoll; // rotation (+z) of the quest page into the screen
/* 0x21C */ f32 maskPageRoll; // rotation (-z) of the mask page into the screen
/* 0x220 */ f32 roll;
/* 0x224 */ u16 alpha;
/* 0x226 */ s16 offsetY;

View File

@ -136,7 +136,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_QUEST] * 4, pauseCtx->questVtx);
KaleidoScope_SetCursorVtxPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_QUEST] * 4, pauseCtx->questVtx);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
@ -394,7 +394,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) {
POLY_OPA_DISP, sOcarinaButtonTextures[sQuestSongPlayedOcarinaButtons[i]], 16, 16, 0);
}
}
} else if (IS_PAUSE_MAIN_STATE_SAVE_PROMPT || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) {
} else if (IS_PAUSE_MAIN_STATE_SONG_PROMPT || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) {
// Draw the buttons for playing a song
sp1C8 = pauseCtx->ocarinaSongIndex;
sp1CA = gOcarinaSongButtons[sp1C8].numButtons;

View File

@ -15,7 +15,7 @@ s16 sEquipMagicArrowSlotHoldTimer = 0;
// Number of frames to move icon from slot to target position when equipping.
s16 sEquipAnimTimer = 10;
u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][NUM_ITEM_SLOTS] = {
u8 gPlayerFormSlotRestrictions[PLAYER_FORM_MAX][ITEM_NUM_SLOTS] = {
// Fierce Deity
{
false, // SLOT_OCARINA
@ -236,9 +236,9 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx,
CLOSE_DISPS(gfxCtx);
}
void KaleidoScope_SetCursorVtx(PauseContext* pauseCtx, u16 index, Vtx* vtx) {
pauseCtx->cursorVtx[0].v.ob[0] = vtx[index].v.ob[0];
pauseCtx->cursorVtx[0].v.ob[1] = vtx[index].v.ob[1];
void KaleidoScope_SetCursorVtxPos(PauseContext* pauseCtx, u16 vtxIndex, Vtx* vtx) {
pauseCtx->cursorVtx[0].v.ob[0] = vtx[vtxIndex].v.ob[0];
pauseCtx->cursorVtx[0].v.ob[1] = vtx[vtxIndex].v.ob[1];
}
static s16 sMagicArrowEffectsR[] = { 255, 100, 255 };
@ -258,9 +258,9 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
// Loop over c-buttons (i) and vtx offset (j)
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
for (i = 0, j = NUM_ITEM_SLOTS * 4; i < 3; i++, j += 4) {
for (i = 0, j = ITEM_NUM_SLOTS * 4; i < 3; i++, j += 4) {
if (GET_CUR_FORM_BTN_ITEM(i + 1) != ITEM_NONE) {
if (GET_CUR_FORM_BTN_SLOT(i + 1) < NUM_ITEM_SLOTS) {
if (GET_CUR_FORM_BTN_SLOT(i + 1) < ITEM_NUM_SLOTS) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j], 4, 0);
POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0);
}
@ -272,7 +272,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
// Draw the item icons
// Loop over slots (i) and vtx offset (j)
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
for (j = 0, i = 0; i < NUM_ITEM_SLOTS; i++, j += 4) {
for (j = 0, i = 0; i < ITEM_NUM_SLOTS; i++, j += 4) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
if (((void)0, gSaveContext.save.saveInfo.inventory.items[i]) != ITEM_NONE) {
@ -323,7 +323,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
// Loop over slots (i) and ammoIndex (j)
for (j = 0, i = 0; i < NUM_ITEM_SLOTS; i++) {
for (j = 0, i = 0; i < ITEM_NUM_SLOTS; i++) {
if (gAmmoItems[i] != ITEM_NONE) {
if (((void)0, gSaveContext.save.saveInfo.inventory.items[i]) != ITEM_NONE) {
KaleidoScope_DrawAmmoCount(pauseCtx, play->state.gfxCtx,
@ -398,7 +398,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
pauseCtx->cursorPoint[PAUSE_ITEM] =
pauseCtx->cursorXIndex[PAUSE_ITEM] + (pauseCtx->cursorYIndex[PAUSE_ITEM] * 6);
if (pauseCtx->cursorPoint[PAUSE_ITEM] >= NUM_ITEM_SLOTS) {
if (pauseCtx->cursorPoint[PAUSE_ITEM] >= ITEM_NUM_SLOTS) {
pauseCtx->cursorPoint[PAUSE_ITEM] = pauseCtx->cursorXIndex[PAUSE_ITEM];
}
@ -429,7 +429,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) {
pauseCtx->cursorPoint[PAUSE_ITEM] =
pauseCtx->cursorXIndex[PAUSE_ITEM] + (pauseCtx->cursorYIndex[PAUSE_ITEM] * 6);
if (pauseCtx->cursorPoint[PAUSE_ITEM] >= NUM_ITEM_SLOTS) {
if (pauseCtx->cursorPoint[PAUSE_ITEM] >= ITEM_NUM_SLOTS) {
pauseCtx->cursorPoint[PAUSE_ITEM] = pauseCtx->cursorXIndex[PAUSE_ITEM];
}
@ -737,7 +737,7 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) {
}
if (sEquipState == EQUIP_STATE_MAGIC_ARROW_MOVE_TO_BOW_SLOT) {
bowItemVtx = &pauseCtx->itemVtx[4];
bowItemVtx = &pauseCtx->itemVtx[SLOT_BOW * 4];
offsetX = ABS_ALT(pauseCtx->equipAnimX - bowItemVtx->v.ob[0] * 10) / sEquipAnimTimer;
offsetY = ABS_ALT(pauseCtx->equipAnimY - bowItemVtx->v.ob[1] * 10) / sEquipAnimTimer;
} else {
@ -761,13 +761,13 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) {
// Update coordinates of item icon while being equipped
if (sEquipState == EQUIP_STATE_MAGIC_ARROW_MOVE_TO_BOW_SLOT) {
// target is the bow slot
if (pauseCtx->equipAnimX >= (pauseCtx->itemVtx[4].v.ob[0] * 10)) {
if (pauseCtx->equipAnimX >= (pauseCtx->itemVtx[SLOT_BOW * 4].v.ob[0] * 10)) {
pauseCtx->equipAnimX -= offsetX;
} else {
pauseCtx->equipAnimX += offsetX;
}
if (pauseCtx->equipAnimY >= (pauseCtx->itemVtx[4].v.ob[1] * 10)) {
if (pauseCtx->equipAnimY >= (pauseCtx->itemVtx[SLOT_BOW * 4].v.ob[1] * 10)) {
pauseCtx->equipAnimY -= offsetY;
} else {
pauseCtx->equipAnimY += offsetY;

View File

@ -10,14 +10,8 @@
#include "interface/icon_item_dungeon_static/icon_item_dungeon_static.h"
#include "interface/icon_item_jpn_static/icon_item_jpn_static.h"
extern s16 D_8082B7F0[];
extern s16 D_8082B838[];
extern TexturePtr D_09007500; // gPlayerFaceIcon
#define WORLD_MAP_IMAGE_TEX_WIDTH 216
#define WORLD_MAP_IMAGE_TEX_HEIGHT 128
void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) {
s16 counterDigits[2];
s16 rectLeft;
@ -142,8 +136,8 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
j = 72 + (pauseCtx->cursorSlot[PAUSE_MAP] * 4);
KaleidoScope_SetCursorVtx(pauseCtx, j, pauseCtx->mapPageVtx);
j = (QUAD_MAP_PAGE_DUNGEON_MAP + pauseCtx->cursorSlot[PAUSE_MAP]) * 4;
KaleidoScope_SetCursorVtxPos(pauseCtx, j, pauseCtx->mapPageVtx);
pauseCtx->cursorItem[PAUSE_MAP] = PAUSE_ITEM_NONE;
if (pauseCtx->cursorSpecialPos == 0) {
@ -153,11 +147,19 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_MAP];
}
// Set vertices for:
// QUAD_MAP_PAGE_DUNGEON_TITLE,
// QUAD_MAP_PAGE_DUNGEON_BOSS_KEY,
// QUAD_MAP_PAGE_DUNGEON_COMPASS,
// QUAD_MAP_PAGE_DUNGEON_MAP
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60], 16, 0);
// Dungeon Title
gDPPipeSync(POLY_OPA_DISP++);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA);
// QUAD_MAP_PAGE_DUNGEON_TITLE
POLY_OPA_DISP =
Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sDungeonTitleTextures[((void)0, gSaveContext.dungeonIndex)], 128, 16, 0);
@ -211,6 +213,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
// QUAD_MAP_PAGE_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE
pauseCtx->mapPageVtx[76].v.ob[0] = pauseCtx->mapPageVtx[78].v.ob[0] = -16;
pauseCtx->mapPageVtx[77].v.ob[0] = pauseCtx->mapPageVtx[79].v.ob[0] =
@ -221,7 +224,8 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
pauseCtx->mapPageVtx[78].v.ob[1] = pauseCtx->mapPageVtx[79].v.ob[1] =
pauseCtx->mapPageVtx[76].v.ob[1] - 24;
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[76], 4, 0);
gSPVertex(POLY_OPA_DISP++,
&pauseCtx->mapPageVtx[QUAD_MAP_PAGE_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE * 4], 4, 0);
POLY_OPA_DISP =
Gfx_DrawTexQuad4b(POLY_OPA_DISP, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0);
@ -258,6 +262,9 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) {
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
// QUAD_MAP_PAGE_DUNGEON_BOSS_KEY
// QUAD_MAP_PAGE_DUNGEON_COMPASS
// QUAD_MAP_PAGE_DUNGEON_MAP
gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0);
}
}
@ -486,6 +493,7 @@ s16 sWorldMapDotPrimColors[][3] = {
{ 0, 0, 255 },
{ 255, 255, 0 },
};
s16 sWorldMapDotEnvColors[][3] = {
{ 255, 255, 0 },
{ 0, 0, 255 },
@ -537,7 +545,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx);
KaleidoScope_SetCursorVtxPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MAP] * 4, pauseCtx->mapPageVtx);
// Draw the world map image
if ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->state == PAUSE_STATE_MAIN) &&
@ -561,12 +569,12 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
// Process the 128 rows of pixels for gWorldMapImageTex, 8 rows at a time over 16 iterations
// Loop over yPos (t), textureIndex (j)
for (t = 62, j = 0; j < 16; j++, t += 8) {
gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + j * (WORLD_MAP_IMAGE_TEX_WIDTH * 8),
G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 8, 0, G_TX_NOMIRROR | G_TX_WRAP,
gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + j * (WORLD_MAP_IMAGE_WIDTH * 8), G_IM_FMT_CI,
G_IM_SIZ_8b, WORLD_MAP_IMAGE_WIDTH, 8, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
rectLeft = 51 << 2;
rectRight = rectLeft + (WORLD_MAP_IMAGE_TEX_WIDTH << 2);
rectRight = rectLeft + (WORLD_MAP_IMAGE_WIDTH << 2);
gSPTextureRectangle(POLY_OPA_DISP++, rectLeft, t << 2, rectRight, (t << 2) + (8 << 2), G_TX_RENDERTILE, 0,
0, 1 << 10, 1 << 10);
}
@ -593,36 +601,39 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
// Set the vertices for the first 8 quads attached to the world map texture.
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[204], 8 * 4, 0);
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[QUAD_MAP_PAGE_WORLD_IMAGE_FIRST * 4], 8 * 4, 0);
// Process the first 72 rows of pixels for gWorldMapImageTex, 9 rows at a time over 8 iterations
// Loop over quadIndex of this loop (i), quadIndex of the entire texture (k), vtxIndex (j)
for (i = 0, k = 0, j = 0; i < 8; i++, k++, j += 4) {
gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_TEX_WIDTH * 9),
G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 9, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(
POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_WIDTH * WORLD_MAP_IMAGE_FRAG_HEIGHT),
G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_WIDTH, WORLD_MAP_IMAGE_FRAG_HEIGHT, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0);
}
// Set the vertices for the last 7 quads attached to the world map texture:
// 6 quads with a height of 9, 1 quad with a height of 2
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[236], (6 + 1) * 4, 0);
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(QUAD_MAP_PAGE_WORLD_IMAGE_FIRST + 8) * 4], (6 + 1) * 4, 0);
// Process the next 54 rows of pixels for gWorldMapImageTex, 9 rows at a time over 6 iterations
// Loop over quadIndex of this loop (i), quadIndex of the entire texture (k), vtxIndex (j)
for (i = 0, j = 0; i < 6; i++, k++, j += 4) {
gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_TEX_WIDTH * 9),
G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 9, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(
POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_WIDTH * WORLD_MAP_IMAGE_FRAG_HEIGHT),
G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_WIDTH, WORLD_MAP_IMAGE_FRAG_HEIGHT, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0);
}
// Process the last 2 rows of pixels for gWorldMapImageTex
gDPLoadTextureBlock(POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_TEX_WIDTH * 9), G_IM_FMT_CI,
G_IM_SIZ_8b, WORLD_MAP_IMAGE_TEX_WIDTH, 2, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTextureBlock(
POLY_OPA_DISP++, (u8*)gWorldMapImageTex + k * (WORLD_MAP_IMAGE_WIDTH * WORLD_MAP_IMAGE_FRAG_HEIGHT),
G_IM_FMT_CI, G_IM_SIZ_8b, WORLD_MAP_IMAGE_WIDTH, WORLD_MAP_IMAGE_HEIGHT % WORLD_MAP_IMAGE_FRAG_HEIGHT, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0);
}
@ -641,12 +652,13 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
// Draw clouds over the world map
// Iterate over cloud bits (n)
for (n = 0; n < 15; n++) {
for (n = 0; n < WORLD_MAP_NUM_CLOUDS; n++) {
if (!(((void)0, gSaveContext.save.saveInfo.worldMapCloudVisibility) & gBitFlags[n])) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60 + n * 4], 4, 0);
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(QUAD_MAP_PAGE_WORLD_CLOUDS_FIRST + n) * 4], 4, 0);
POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sCloudTextures[n], D_8082B7F0[n], D_8082B838[n], 0);
POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, sCloudTextures[n], gVtxPageMapWorldQuadsWidth[n],
gVtxPageMapWorldQuadsHeight[n], 0);
}
}
@ -676,6 +688,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
if (R_PAUSE_DBG_MAP_CLOUD_ON) {
gSaveContext.save.saveInfo.worldMapCloudVisibility |= (u16)~0x8000;
// QUAD_MAP_PAGE_WORLD_REGION_FIRST
pauseCtx->mapPageVtx[120].v.ob[0] = pauseCtx->mapPageVtx[122].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X;
pauseCtx->mapPageVtx[121].v.ob[0] = pauseCtx->mapPageVtx[123].v.ob[0] =
@ -690,7 +703,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
// Loop over RegionId (i), unused vtxIndex (j), unused (k)
for (i = 0, j = 0; i < REGION_MAX; i++, k++, j += 4) {
if (pauseCtx->worldMapPoints[i]) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[120 + i * 4], 4, 0);
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(QUAD_MAP_PAGE_WORLD_REGION_FIRST + i) * 4], 4, 0);
gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
}
}
@ -708,6 +721,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
if (R_PAUSE_DBG_MAP_CLOUD_ON) {
gSaveContext.save.saveInfo.worldMapCloudVisibility |= (u16)~0x8000;
// QUAD_MAP_PAGE_WORLD_WARP_FIRST
pauseCtx->mapPageVtx[164].v.ob[0] = pauseCtx->mapPageVtx[166].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X;
pauseCtx->mapPageVtx[165].v.ob[0] = pauseCtx->mapPageVtx[167].v.ob[0] =
@ -722,7 +736,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) {
// Loop over OwlWarpId (i), unused vtxIndex (j), unused (k)
for (i = 0, j = 0; i < OWL_WARP_ENTRANCE; i++, k++, j += 4) {
if (pauseCtx->worldMapPoints[i]) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[164 + i * 4], 4, 0);
gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[(QUAD_MAP_PAGE_WORLD_WARP_FIRST + i) * 4], 4, 0);
gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0);
}
}

View File

@ -15,7 +15,7 @@ s16 sMaskEquipMagicArrowSlotHoldTimer = 0;
// Number of frames to move icon from slot to target position when equipping.
s16 sMaskEquipAnimTimer = 10;
u8 gMaskPlayerFormSlotRestrictions[PLAYER_FORM_MAX][NUM_MASK_SLOTS] = {
u8 gMaskPlayerFormSlotRestrictions[PLAYER_FORM_MAX][MASK_NUM_SLOTS] = {
// Fierce Deity
{
false, // SLOT_MASK_POSTMAN
@ -196,7 +196,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx);
KaleidoScope_SetCursorVtx(pauseCtx, pauseCtx->cursorSlot[PAUSE_MASK] * 4, pauseCtx->maskVtx);
KaleidoScope_SetCursorVtxPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MASK] * 4, pauseCtx->maskVtx);
func_8012C8AC(play->state.gfxCtx);
@ -204,9 +204,9 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
// Loop over c-buttons (i) and vtx offset (j)
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
for (i = 0, j = NUM_MASK_SLOTS * 4; i < 3; i++, j += 4) {
for (i = 0, j = MASK_NUM_SLOTS * 4; i < 3; i++, j += 4) {
if (GET_CUR_FORM_BTN_ITEM(i + 1) != ITEM_NONE) {
if (GET_CUR_FORM_BTN_SLOT(i + 1) >= NUM_ITEM_SLOTS) {
if (GET_CUR_FORM_BTN_SLOT(i + 1) >= ITEM_NUM_SLOTS) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j], 4, 0);
POLY_OPA_DISP = Gfx_DrawTexQuadIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0);
}
@ -218,10 +218,10 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
// Draw the item icons
// Loop over slots (i) and vtx offset (j)
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
for (j = 0, i = 0; i < NUM_MASK_SLOTS; i++, j += 4) {
for (j = 0, i = 0; i < MASK_NUM_SLOTS; i++, j += 4) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
if (((void)0, gSaveContext.save.saveInfo.inventory.items[i + NUM_ITEM_SLOTS]) != ITEM_NONE) {
if (((void)0, gSaveContext.save.saveInfo.inventory.items[i + ITEM_NUM_SLOTS]) != ITEM_NONE) {
if (!CHECK_GIVEN_MASK_ON_MOON(i)) {
if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->pageIndex == PAUSE_MASK) &&
(pauseCtx->cursorSpecialPos == 0) &&
@ -259,7 +259,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j + 0], 4, 0);
KaleidoScope_DrawTexQuadRGBA32(
play->state.gfxCtx,
gItemIcons[((void)0, gSaveContext.save.saveInfo.inventory.items[i + NUM_ITEM_SLOTS])], 32, 32, 0);
gItemIcons[((void)0, gSaveContext.save.saveInfo.inventory.items[i + ITEM_NUM_SLOTS])], 32, 32, 0);
}
}
}
@ -324,7 +324,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
pauseCtx->cursorPoint[PAUSE_MASK] =
pauseCtx->cursorXIndex[PAUSE_MASK] + (pauseCtx->cursorYIndex[PAUSE_MASK] * 6);
if (pauseCtx->cursorPoint[PAUSE_MASK] >= NUM_MASK_SLOTS) {
if (pauseCtx->cursorPoint[PAUSE_MASK] >= MASK_NUM_SLOTS) {
pauseCtx->cursorPoint[PAUSE_MASK] = pauseCtx->cursorXIndex[PAUSE_MASK];
}
@ -354,7 +354,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
pauseCtx->cursorPoint[PAUSE_MASK] =
pauseCtx->cursorXIndex[PAUSE_MASK] + (pauseCtx->cursorYIndex[PAUSE_MASK] * 6);
if (pauseCtx->cursorPoint[PAUSE_MASK] >= NUM_MASK_SLOTS) {
if (pauseCtx->cursorPoint[PAUSE_MASK] >= MASK_NUM_SLOTS) {
pauseCtx->cursorPoint[PAUSE_MASK] = pauseCtx->cursorXIndex[PAUSE_MASK];
}
@ -372,7 +372,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) {
cursorItem =
gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + ITEM_NUM_SLOTS];
if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) {
cursorItem = ITEM_NONE;
}
@ -388,7 +388,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// Search for slot to move to
while (true) {
// Check if current cursor has an item in its slot
if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) &&
if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + ITEM_NUM_SLOTS] != ITEM_NONE) &&
!CHECK_GIVEN_MASK_ON_MOON(cursorPoint)) {
pauseCtx->cursorPoint[PAUSE_MASK] = cursorPoint;
pauseCtx->cursorXIndex[PAUSE_MASK] = cursorXIndex;
@ -429,7 +429,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// Search for slot to move to
while (true) {
// Check if current cursor has an item in its slot
if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) &&
if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + ITEM_NUM_SLOTS] != ITEM_NONE) &&
!CHECK_GIVEN_MASK_ON_MOON(cursorPoint)) {
pauseCtx->cursorPoint[PAUSE_MASK] = cursorPoint;
pauseCtx->cursorXIndex[PAUSE_MASK] = cursorXIndex;
@ -502,13 +502,13 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) {
cursorItem =
gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + ITEM_NUM_SLOTS];
if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) {
cursorItem = ITEM_NONE;
}
} else if (moveCursorResult != PAUSE_CURSOR_RESULT_SPECIAL_POS) {
cursorItem =
gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS];
gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + ITEM_NUM_SLOTS];
if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) {
cursorItem = ITEM_NONE;
}
@ -571,8 +571,8 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
if ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) &&
(Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE) &&
((cursorSlot == (SLOT_MASK_DEKU - NUM_ITEM_SLOTS)) ||
(cursorSlot == (SLOT_MASK_GORON - NUM_ITEM_SLOTS)))) {
((cursorSlot == (SLOT_MASK_DEKU - ITEM_NUM_SLOTS)) ||
(cursorSlot == (SLOT_MASK_GORON - ITEM_NUM_SLOTS)))) {
play_sound(NA_SE_SY_ERROR);
return;
}
@ -587,7 +587,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) {
// Equip item to the C buttons
pauseCtx->equipTargetItem = cursorItem;
pauseCtx->equipTargetSlot = cursorSlot + NUM_ITEM_SLOTS;
pauseCtx->equipTargetSlot = cursorSlot + ITEM_NUM_SLOTS;
pauseCtx->mainState = PAUSE_MAIN_STATE_EQUIP_MASK;
vtxIndex = cursorSlot * 4;
pauseCtx->equipAnimX = pauseCtx->maskVtx[vtxIndex].v.ob[0] * 10;
@ -659,7 +659,10 @@ void KaleidoScope_UpdateMaskEquip(PlayState* play) {
}
if (sMaskEquipState == EQUIP_STATE_MAGIC_ARROW_MOVE_TO_BOW_SLOT) {
bowItemVtx = &pauseCtx->itemVtx[12];
//! Note: Copied from OoT when `SLOT_BOW` was still valued at 3.
// Due to a shift, `SLOT_ARROW_ICE` now occupies slot 3 but this value was not updated
// Block is never reached as you can not equip magic arrows from the mask page
bowItemVtx = &pauseCtx->itemVtx[SLOT_ARROW_ICE * 4];
offsetX = ABS_ALT(pauseCtx->equipAnimX - bowItemVtx->v.ob[0] * 10) / sMaskEquipAnimTimer;
offsetY = ABS_ALT(pauseCtx->equipAnimY - bowItemVtx->v.ob[1] * 10) / sMaskEquipAnimTimer;
} else {

View File

@ -14,7 +14,7 @@ void KaleidoScope_UpdatePrompt(PlayState* play) {
static s16 sPromptAlphaTimer = 10;
PauseContext* pauseCtx = &play->pauseCtx;
Input* input = CONTROLLER1(&play->state);
s8 relStickX = input->rel.stick_x;
s8 stickAdjX = input->rel.stick_x;
s16 alphaStep;
if (((pauseCtx->state == PAUSE_STATE_SAVEPROMPT) && (pauseCtx->savePromptState == PAUSE_SAVEPROMPT_STATE_1)) ||
@ -22,11 +22,11 @@ void KaleidoScope_UpdatePrompt(PlayState* play) {
(pauseCtx->state == PAUSE_STATE_GAMEOVER_CONTINUE_PROMPT)) {
// Move the prompt
if ((pauseCtx->promptChoice == PAUSE_PROMPT_YES) && (relStickX >= 30)) {
if ((pauseCtx->promptChoice == PAUSE_PROMPT_YES) && (stickAdjX >= 30)) {
// Move right to the no prompt
play_sound(NA_SE_SY_CURSOR);
pauseCtx->promptChoice = PAUSE_PROMPT_NO;
} else if ((pauseCtx->promptChoice != PAUSE_PROMPT_YES) && (relStickX <= -30)) {
} else if ((pauseCtx->promptChoice != PAUSE_PROMPT_YES) && (stickAdjX <= -30)) {
// Move left to the yes prompt
play_sound(NA_SE_SY_CURSOR);
pauseCtx->promptChoice = PAUSE_PROMPT_YES;

View File

@ -92,7 +92,7 @@ typedef enum {
#define IS_PAUSE_STATE_OWLWARP \
((pauseCtx->state >= PAUSE_STATE_OWLWARP_2) && (pauseCtx->state <= PAUSE_STATE_OWLWARP_6))
#define IS_PAUSE_MAIN_STATE_SAVE_PROMPT \
#define IS_PAUSE_MAIN_STATE_SONG_PROMPT \
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && \
(pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_DONE))
@ -125,6 +125,184 @@ typedef enum {
/* 5 */ PAUSE_BG_PRERENDER_MAX
} PauseBgPreRenderState;
typedef enum {
/* 0 */ VTX_PAGE_MASK,
/* 1 */ VTX_PAGE_ITEM,
/* 2 */ VTX_PAGE_MAP_DUNGEON,
/* 3 */ VTX_PAGE_QUEST,
/* 4 */ VTX_PAGE_MAP_WORLD,
/* 5 */ VTX_PAGE_PROMPT,
/* 6 */ VTX_PAGE_MAX
} VtxPage;
#define VTX_PAGE_MASK_QUADS 0 // VTX_PAGE_MASK
#define VTX_PAGE_ITEM_QUADS 0 // VTX_PAGE_ITEM
#define VTX_PAGE_MAP_DUNGEON_QUADS 6 // VTX_PAGE_MAP_DUNGEON
#define VTX_PAGE_QUEST_QUADS 0 // VTX_PAGE_QUEST
#define VTX_PAGE_MAP_WORLD_QUADS 36 // VTX_PAGE_MAP_WORLD
#define VTX_PAGE_SAVE_QUADS 5 // VTX_PAGE_PROMPT
#define PAGE_BG_COLS 3
#define PAGE_BG_ROWS 5
#define PAGE_BG_QUADS (PAGE_BG_COLS * PAGE_BG_ROWS)
#define PAGE_BG_QUAD_WIDTH 80
#define PAGE_BG_QUAD_HEIGHT 32
#define PAGE_BG_QUAD_TEX_WIDTH 80
#define PAGE_BG_QUAD_TEX_HEIGHT 32
// === ITEM === //
#define ITEM_GRID_ROWS 4
#define ITEM_GRID_COLS 6
#define ITEM_GRID_CELL_WIDTH 32
#define ITEM_GRID_CELL_HEIGHT 32
#define ITEM_GRID_QUAD_MARGIN 2
#define ITEM_GRID_QUAD_WIDTH (ITEM_GRID_CELL_WIDTH - (2 * ITEM_GRID_QUAD_MARGIN))
#define ITEM_GRID_QUAD_HEIGHT (ITEM_GRID_CELL_HEIGHT - (2 * ITEM_GRID_QUAD_MARGIN))
#define ITEM_GRID_QUAD_TEX_SIZE 32 // both width and height
#define ITEM_GRID_QUAD_ENLARGE_OFFSET 2
#define ITEM_GRID_SELECTED_QUAD_MARGIN (-2)
#define ITEM_GRID_SELECTED_QUAD_WIDTH (ITEM_GRID_QUAD_WIDTH - (2 * ITEM_GRID_SELECTED_QUAD_MARGIN))
#define ITEM_GRID_SELECTED_QUAD_HEIGHT (ITEM_GRID_QUAD_HEIGHT - (2 * ITEM_GRID_SELECTED_QUAD_MARGIN))
#define ITEM_GRID_SELECTED_QUAD_TEX_SIZE 32 // both width and height
#define ITEM_NUM_SLOTS (ITEM_GRID_ROWS * ITEM_GRID_COLS)
typedef enum {
// 0..59 are the 15 background textures
/* 0 */ QUAD_ITEM_PAGE_BG_FIRST,
/* 14 */ QUAD_ITEM_PAGE_BG_LAST = PAGE_BG_QUADS - 1,
// VTX_PAGE_ITEM_QUADS is 0
/* 15 */ QUAD_ITEM_PAGE_MAX
} ItemPageQuad;
typedef enum {
// 0..23 are the ITEM_GRID_ROWS*ITEM_GRID_COLS item grid
// The values follow the `InventorySlot` enum
/* 0 */ QUAD_ITEM_GRID_FIRST,
/* 23 */ QUAD_ITEM_GRID_LAST = ITEM_GRID_ROWS * ITEM_GRID_COLS - 1,
// White-box Markers indicating the currently equipped items
/* 24 */ QUAD_ITEM_GRID_SELECTED_C_LEFT,
/* 25 */ QUAD_ITEM_GRID_SELECTED_C_DOWN,
/* 26 */ QUAD_ITEM_GRID_SELECTED_C_RIGHT,
/* 27 */ QUAD_ITEM_MAX
} ItemQuad;
// === MASK === //
#define MASK_GRID_ROWS 4
#define MASK_GRID_COLS 6
#define MASK_GRID_CELL_WIDTH 32
#define MASK_GRID_CELL_HEIGHT 32
#define MASK_GRID_QUAD_MARGIN 2
#define MASK_GRID_QUAD_WIDTH (MASK_GRID_CELL_WIDTH - (2 * MASK_GRID_QUAD_MARGIN))
#define MASK_GRID_QUAD_HEIGHT (MASK_GRID_CELL_HEIGHT - (2 * MASK_GRID_QUAD_MARGIN))
#define MASK_GRID_QUAD_TEX_SIZE 32 // both width and height
#define MASK_GRID_QUAD_ENLARGE_OFFSET 2
#define MASK_GRID_SELECTED_QUAD_MARGIN (-2)
#define MASK_GRID_SELECTED_QUAD_WIDTH (MASK_GRID_QUAD_WIDTH - (2 * MASK_GRID_SELECTED_QUAD_MARGIN))
#define MASK_GRID_SELECTED_QUAD_HEIGHT (MASK_GRID_QUAD_HEIGHT - (2 * MASK_GRID_SELECTED_QUAD_MARGIN))
#define MASK_GRID_SELECTED_QUAD_TEX_SIZE 32 // both width and height
#define MASK_NUM_SLOTS (MASK_GRID_ROWS * MASK_GRID_COLS)
typedef enum {
// 0..59 are the 15 background textures
/* 0 */ QUAD_MASK_PAGE_BG_FIRST,
/* 14 */ QUAD_MASK_PAGE_BG_LAST = PAGE_BG_QUADS - 1,
// VTX_PAGE_MASK_QUADS is 0
/* 15 */ QUAD_MASK_PAGE_MAX
} MaskPageQuad;
typedef enum {
// 0..23 are the MASK_GRID_ROWS*MASK_GRID_COLS item grid
// The values follow the `InventorySlot` enum offset by ITEM_NUM_SLOTS
/* 0 */ QUAD_MASK_GRID_FIRST,
/* 23 */ QUAD_MASK_GRID_LAST = MASK_GRID_ROWS * MASK_GRID_COLS - 1,
// Markers indicating the currently equipped items
/* 24 */ QUAD_MASK_GRID_SELECTED_C_LEFT,
/* 25 */ QUAD_MASK_GRID_SELECTED_C_DOWN,
/* 26 */ QUAD_MASK_GRID_SELECTED_C_RIGHT,
/* 27 */ QUAD_MASK_MAX
} MaskQuad;
// === QUEST === //
typedef enum {
// 0..59 are the 15 background textures
/* 0 */ QUAD_QUEST_PAGE_BG_FIRST,
/* 14 */ QUAD_QUEST_PAGE_BG_LAST = PAGE_BG_QUADS - 1,
// VTX_PAGE_QUEST_QUADS is 0
/* 15 */ QUAD_QUEST_PAGE_MAX
} QuestPageQuad;
typedef enum {
// 0 to 24 matches the `QuestItem` enum
// Notes showing the correct song
/* 25 */ QUAD_QUEST_SONG_NOTE_A1 = QUEST_HEART_PIECE + 1,
/* 26 */ QUAD_QUEST_SONG_NOTE_A2,
/* 27 */ QUAD_QUEST_SONG_NOTE_A3,
/* 28 */ QUAD_QUEST_SONG_NOTE_A4,
/* 29 */ QUAD_QUEST_SONG_NOTE_A5,
/* 30 */ QUAD_QUEST_SONG_NOTE_A6,
/* 31 */ QUAD_QUEST_SONG_NOTE_A7,
/* 32 */ QUAD_QUEST_SONG_NOTE_A8,
// Notes appearing when playing
/* 33 */ QUAD_QUEST_SONG_NOTE_B1,
/* 34 */ QUAD_QUEST_SONG_NOTE_B2,
/* 35 */ QUAD_QUEST_SONG_NOTE_B3,
/* 36 */ QUAD_QUEST_SONG_NOTE_B4,
/* 37 */ QUAD_QUEST_SONG_NOTE_B5,
/* 38 */ QUAD_QUEST_SONG_NOTE_B6,
/* 39 */ QUAD_QUEST_SONG_NOTE_B7,
/* 40 */ QUAD_QUEST_SONG_NOTE_B8,
/* 41 */ QUAD_QUEST_MAX
} QuestQuad;
// === DUNGEON MAP === //
typedef enum {
// 0..59 are the 15 background textures
/* 0 */ QUAD_MAP_PAGE_DUNGEON_BG_FIRST,
/* 14 */ QUAD_MAP_PAGE_DUNGEON_BG_LAST = PAGE_BG_QUADS - 1,
/* 15 */ QUAD_MAP_PAGE_DUNGEON_TITLE,
/* 16 */ QUAD_MAP_PAGE_DUNGEON_BOSS_KEY,
/* 17 */ QUAD_MAP_PAGE_DUNGEON_COMPASS,
/* 18 */ QUAD_MAP_PAGE_DUNGEON_MAP,
/* 19 */ QUAD_MAP_PAGE_DUNGEON_STRAY_FAIRY_GLOWING_CIRCLE,
/* 20 */ QUAD_MAP_PAGE_DUNGEON_UNUSED,
/* 21 */ QUAD_MAP_PAGE_DUNGEON_MAX
} DungeonMapPageQuad;
// === WORLD MAP === //
#define WORLD_MAP_IMAGE_WIDTH 216
#define WORLD_MAP_IMAGE_HEIGHT 128
#define WORLD_MAP_IMAGE_FRAG_HEIGHT ((TMEM_SIZE / 2) / (WORLD_MAP_IMAGE_WIDTH * G_IM_SIZ_8b_BYTES))
#define WORLD_MAP_IMAGE_FRAG_NUM (((WORLD_MAP_IMAGE_HEIGHT - 1) / WORLD_MAP_IMAGE_FRAG_HEIGHT) + 1)
#define WORLD_MAP_NUM_CLOUDS 15
typedef enum {
// 0..59 are the 15 background textures
/* 0 */ QUAD_MAP_PAGE_WORLD_BG_FIRST,
/* 14 */ QUAD_MAP_PAGE_WORLD_BG_LAST = PAGE_BG_QUADS - 1,
// Clouds covering the world map
/* 15 */ QUAD_MAP_PAGE_WORLD_CLOUDS_FIRST,
/* 29 */ QUAD_MAP_PAGE_WORLD_CLOUDS_LAST = QUAD_MAP_PAGE_WORLD_CLOUDS_FIRST + WORLD_MAP_NUM_CLOUDS - 1,
// Markers for regions
/* 30 */ QUAD_MAP_PAGE_WORLD_REGION_FIRST,
/* 40 */ QUAD_MAP_PAGE_WORLD_REGION_LAST = QUAD_MAP_PAGE_WORLD_REGION_FIRST + REGION_MAX - 1,
// Markers for owl warps
/* 41 */ QUAD_MAP_PAGE_WORLD_WARP_FIRST,
/* 50 */ QUAD_MAP_PAGE_WORLD_WARP_LAST = QUAD_MAP_PAGE_WORLD_WARP_FIRST + OWL_WARP_ENTRANCE - 1,
// Fragments of the world map
/* 51 */ QUAD_MAP_PAGE_WORLD_IMAGE_FIRST,
/* 65 */ QUAD_MAP_PAGE_WORLD_IMAGE_LAST = QUAD_MAP_PAGE_WORLD_IMAGE_FIRST + WORLD_MAP_IMAGE_FRAG_NUM - 1,
/* 66 */ QUAD_MAP_PAGE_WORLD_MAX
} WorldMapPageQuad;
#define PAUSE_NAME_COLOR_SET_WHITE 0
#define PAUSE_NAME_COLOR_SET_GREY 1
@ -139,12 +317,27 @@ typedef enum {
/* 2 */ PAUSE_CURSOR_RESULT_SPECIAL_POS
} PauseMoveCursorResult;
#define NUM_ITEM_SLOTS 24
#define NUM_MASK_SLOTS 24
typedef enum {
/* 0 */ PAUSE_QUAD_CURSOR_0,
/* 1 */ PAUSE_QUAD_CURSOR_1,
/* 2 */ PAUSE_QUAD_CURSOR_2,
/* 3 */ PAUSE_QUAD_CURSOR_3,
/* 4 */ PAUSE_QUAD_CURSOR_4,
/* 5 */ PAUSE_QUAD_CURSOR_MAX
} PauseCursorQuad;
#define PAUSE_PROMPT_YES 0
#define PAUSE_PROMPT_NO 4
typedef enum {
/* 0 */ QUAD_PROMPT_MESSAGE,
/* 1 */ QUAD_PROMPT_CURSOR_LEFT,
/* 2 */ QUAD_PROMPT_CURSOR_RIGHT,
/* 3 */ QUAD_PROMPT_CHOICE_YES,
/* 4 */ QUAD_PROMPT_CHOICE_NO,
/* 5 */ QUAD_PROMPT_MAX
} PromptQuad;
// NES
void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos);
void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point);
@ -162,7 +355,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play);
void KaleidoScope_UpdateQuestCursor(PlayState* play);
// Item
void KaleidoScope_SetCursorVtx(PauseContext* pauseCtx, u16 index, Vtx* vtx);
void KaleidoScope_SetCursorVtxPos(PauseContext* pauseCtx, u16 vtxIndex, Vtx* vtx);
void KaleidoScope_DrawItemSelect(PlayState* play);
void KaleidoScope_UpdateItemCursor(PlayState* play);
void KaleidoScope_UpdateItemEquip(PlayState* play);
@ -179,4 +372,7 @@ void KaleidoScope_UpdatePrompt(PlayState* play);
void KaleidoScope_DrawInventoryEditor(PlayState* play);
void KaleidoScope_UpdateInventoryEditor(PlayState* play);
extern s16 gVtxPageMapWorldQuadsWidth[];
extern s16 gVtxPageMapWorldQuadsHeight[];
#endif

View File

@ -4205,7 +4205,7 @@
0x80819238:("KaleidoScope_DrawInventoryEditor",),
0x80819F04:("KaleidoScope_UpdateInventoryEditor",),
0x8081B240:("KaleidoScope_DrawAmmoCount",),
0x8081B6BC:("KaleidoScope_SetCursorVtx",),
0x8081B6BC:("KaleidoScope_SetCursorVtxPos",),
0x8081B6EC:("KaleidoScope_DrawItemSelect",),
0x8081BCA8:("KaleidoScope_UpdateItemCursor",),
0x8081C684:("KaleidoScope_UpdateItemEquip",),
@ -4226,17 +4226,17 @@
0x80821AD4:("KaleidoScope_DrawTexQuadRGBA32",),
0x80821CC4:("func_80821CC4",),
0x80821D84:("KaleidoScope_HandlePageToggles",),
0x80821F30:("func_80821F30",),
0x808221DC:("func_808221DC",),
0x80821F30:("KaleidoScope_DrawPageSections",),
0x808221DC:("KaleidoScope_DrawPages",),
0x80823350:("func_80823350",),
0x80824738:("KaleidoScope_UpdateNamePanel",),
0x808248D0:("func_808248D0",),
0x808248D0:("KaleidoScope_DrawOwlWarpMapPage",),
0x80824B90:("func_80824B90",),
0x808256E4:("KaleidoScope_UpdateOwlWarpNamePanel",),
0x8082585C:("KaleidoScope_UpdateSwitchPage",),
0x808259D4:("KaleidoScope_SetView",),
0x80825A50:("func_80825A50",),
0x80825E28:("func_80825E28",),
0x80825A50:("KaleidoScope_SetPageVertices",),
0x80825E28:("KaleidoScope_SetVertices",),
0x808274DC:("func_808274DC",),
0x80827A8C:("func_80827A8C",),
0x80827E08:("func_80827E08",),

View File

@ -4727,12 +4727,12 @@
0x8082B6F0:("sPromptAlphaTargets","UNK_TYPE1","",0x1),
0x8082B6F4:("sPromptAlphaTargetIndex","UNK_TYPE2","",0x2),
0x8082B6F8:("sPromptAlphaTimer","UNK_TYPE2","",0x2),
0x8082B700:("D_8082B700","UNK_TYPE1","",0x1),
0x8082B73C:("D_8082B73C","UNK_TYPE1","",0x1),
0x8082B778:("D_8082B778","UNK_TYPE1","",0x1),
0x8082B7B4:("D_8082B7B4","UNK_TYPE1","",0x1),
0x8082B7F0:("D_8082B7F0","UNK_TYPE2","",0x2),
0x8082B838:("D_8082B838","UNK_TYPE2","",0x2),
0x8082B700:("sMaskPageBgTextures","UNK_TYPE1","",0x1),
0x8082B73C:("sItemPageBgTextures","UNK_TYPE1","",0x1),
0x8082B778:("sMapPageBgTextures","UNK_TYPE1","",0x1),
0x8082B7B4:("sQuestPageBgTextures","UNK_TYPE1","",0x1),
0x8082B7F0:("gVtxPageMapWorldQuadsWidth","UNK_TYPE2","",0x2),
0x8082B838:("gVtxPageMapWorldQuadsHeight","UNK_TYPE2","",0x2),
0x8082B880:("sGameOverPrimR","UNK_TYPE2","",0x2),
0x8082B884:("sGameOverPrimG","UNK_TYPE2","",0x2),
0x8082B888:("sGameOverPrimB","UNK_TYPE2","",0x2),
@ -4759,10 +4759,10 @@
0x8082B920:("D_8082B920","UNK_TYPE2","",0x2),
0x8082B924:("D_8082B924","UNK_TYPE2","",0x2),
0x8082B944:("sGameOverRectPosY","UNK_TYPE2","",0x2),
0x8082B948:("D_8082B948","UNK_TYPE2","",0x2),
0x8082B96C:("D_8082B96C","UNK_TYPE2","",0x2),
0x8082B990:("D_8082B990","UNK_TYPE2","",0x2),
0x8082B994:("D_8082B994","UNK_TYPE2","",0x2),
0x8082B948:("sCursorPrimColorTarget","UNK_TYPE2","",0x2),
0x8082B96C:("sCursorEnvColorTarget","UNK_TYPE2","",0x2),
0x8082B990:("sCursorColorTimer","UNK_TYPE2","",0x2),
0x8082B994:("sCursorColorTargetIndex","UNK_TYPE2","",0x2),
0x8082B998:("D_8082B998","UNK_TYPE1","",0x1),
0x8082B9A8:("D_8082B9A8","UNK_TYPE1","",0x1),
0x8082B9B8:("D_8082B9B8","UNK_TYPE1","",0x1),
@ -4771,33 +4771,33 @@
0x8082B9D0:("D_8082B9D0","UNK_TYPE1","",0x1),
0x8082B9E0:("D_8082B9E0","UNK_TYPE2","",0x2),
0x8082B9E4:("D_8082B9E4","UNK_TYPE2","",0x2),
0x8082B9E8:("D_8082B9E8","UNK_TYPE1","",0x1),
0x8082B9EC:("D_8082B9EC","UNK_TYPE1","",0x1),
0x8082B9F0:("D_8082B9F0","UNK_TYPE1","",0x1),
0x8082B9FC:("D_8082B9FC","UNK_TYPE1","",0x1),
0x8082BA00:("D_8082BA00","UNK_TYPE1","",0x1),
0x8082BA48:("D_8082BA48","UNK_TYPE1","",0x1),
0x8082BA54:("D_8082BA54","UNK_TYPE1","",0x1),
0x8082BA58:("D_8082BA58","UNK_TYPE1","",0x1),
0x8082BA5C:("D_8082BA5C","UNK_TYPE1","",0x1),
0x8082BA68:("D_8082BA68","UNK_TYPE1","",0x1),
0x8082BA6C:("D_8082BA6C","UNK_TYPE1","",0x1),
0x8082BA78:("D_8082BA78","UNK_TYPE1","",0x1),
0x8082BA7C:("D_8082BA7C","UNK_TYPE1","",0x1),
0x8082BA80:("D_8082BA80","UNK_TYPE1","",0x1),
0x8082BA8C:("D_8082BA8C","UNK_TYPE1","",0x1),
0x8082BA90:("D_8082BA90","UNK_TYPE1","",0x1),
0x8082BAD8:("D_8082BAD8","UNK_TYPE1","",0x1),
0x8082BAE4:("D_8082BAE4","UNK_TYPE1","",0x1),
0x8082BAE8:("D_8082BAE8","UNK_TYPE1","",0x1),
0x8082BAEC:("D_8082BAEC","UNK_TYPE1","",0x1),
0x8082BAF8:("D_8082BAF8","UNK_TYPE1","",0x1),
0x8082BAFC:("D_8082BAFC","UNK_TYPE1","",0x1),
0x8082BB08:("D_8082BB08","UNK_PTR","",0x4),
0x8082BB20:("D_8082BB20","UNK_PTR","",0x4),
0x8082BB38:("D_8082BB38","UNK_PTR","",0x4),
0x8082BB50:("D_8082BB50","UNK_PTR","",0x4),
0x8082BB68:("D_8082BB68","UNK_TYPE2","",0x2),
0x8082B9E8:("sVtxPageMaskQuadsX","UNK_TYPE1","",0x1),
0x8082B9EC:("sVtxPageItemQuadsX","UNK_TYPE1","",0x1),
0x8082B9F0:("sVtxPageMapDungeonQuadsX","UNK_TYPE1","",0x1),
0x8082B9FC:("sVtxPageQuestQuadsX","UNK_TYPE1","",0x1),
0x8082BA00:("sVtxPageMapWorldQuadsX","UNK_TYPE1","",0x1),
0x8082BA48:("sVtxPagePromptQuadsX","UNK_TYPE1","",0x1),
0x8082BA54:("sVtxPageMaskQuadsWidth","UNK_TYPE1","",0x1),
0x8082BA58:("sVtxPageItemQuadsWidth","UNK_TYPE1","",0x1),
0x8082BA5C:("sVtxPageMapDungeonQuadsWidth","UNK_TYPE1","",0x1),
0x8082BA68:("sVtxPageQuestQuadsWidth","UNK_TYPE1","",0x1),
0x8082BA6C:("sVtxPagePromptQuadsWidth","UNK_TYPE1","",0x1),
0x8082BA78:("sVtxPageMaskQuadsY","UNK_TYPE1","",0x1),
0x8082BA7C:("sVtxPageItemQuadsY","UNK_TYPE1","",0x1),
0x8082BA80:("sVtxPageMapDungeonQuadsY","UNK_TYPE1","",0x1),
0x8082BA8C:("sVtxPageQuestQuadsY","UNK_TYPE1","",0x1),
0x8082BA90:("sVtxPageMapWorldQuadsY","UNK_TYPE1","",0x1),
0x8082BAD8:("sVtxPagePromptQuadsY","UNK_TYPE1","",0x1),
0x8082BAE4:("sVtxPageMaskQuadsHeight","UNK_TYPE1","",0x1),
0x8082BAE8:("sVtxPageItemQuadsHeight","UNK_TYPE1","",0x1),
0x8082BAEC:("sVtxPageMapDungeonQuadsHeight","UNK_TYPE1","",0x1),
0x8082BAF8:("sVtxPageQuestQuadsHeight","UNK_TYPE1","",0x1),
0x8082BAFC:("sVtxPagePromptQuadsHeight","UNK_TYPE1","",0x1),
0x8082BB08:("sVtxPageQuadsX","UNK_PTR","",0x4),
0x8082BB20:("sVtxPageQuadsWidth","UNK_PTR","",0x4),
0x8082BB38:("sVtxPageQuadsY","UNK_PTR","",0x4),
0x8082BB50:("sVtxPageQuadsHeight","UNK_PTR","",0x4),
0x8082BB68:("sVtxPageGameOverSaveQuadsY","UNK_TYPE2","",0x2),
0x8082BB74:("sQuestVtxRectLeft","UNK_TYPE2","",0x2),
0x8082BBC4:("sQuestVtxRectTop","UNK_TYPE2","",0x2),
0x8082BC14:("sQuestVtxWidths","UNK_TYPE2","",0x2),