From 6c77a9f82570529fc1421dd4b771cd8014af84e5 Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Mon, 31 Oct 2022 21:13:39 +0100 Subject: [PATCH] more equips page docs --- include/z64.h | 2 +- src/code/z_kaleido_setup.c | 4 +- .../ovl_kaleido_scope/z_kaleido_collect.c | 2 +- .../ovl_kaleido_scope/z_kaleido_equipment.c | 153 ++++++++++++------ .../misc/ovl_kaleido_scope/z_kaleido_scope.h | 8 +- .../ovl_kaleido_scope/z_kaleido_scope_PAL.c | 57 ++++--- 6 files changed, 141 insertions(+), 85 deletions(-) diff --git a/include/z64.h b/include/z64.h index cd334f240d..70784e921c 100644 --- a/include/z64.h +++ b/include/z64.h @@ -790,7 +790,7 @@ typedef enum { /* 4 */ PAUSE_MAIN_STATE_SONG_PROMPT_INIT, /* 5 */ PAUSE_MAIN_STATE_SONG_PROMPT, /* 6 */ PAUSE_MAIN_STATE_SONG_PROMPT_DONE, - /* 7 */ PAUSE_MAIN_STATE_7, + /* 7 */ PAUSE_MAIN_STATE_EQUIP_CHANGED, /* 8 */ PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG, /* 9 */ PAUSE_MAIN_STATE_SONG_PLAYBACK_START } PauseMainState; diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index 26f88734a2..d2a082ea2b 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -127,8 +127,8 @@ void KaleidoSetup_Init(PlayState* play) { pauseCtx->cursorY[PAUSE_MAP] = 0; pauseCtx->cursorX[PAUSE_QUEST] = temp; pauseCtx->cursorY[PAUSE_QUEST] = temp; - pauseCtx->cursorX[PAUSE_EQUIP] = 1; - pauseCtx->cursorY[PAUSE_EQUIP] = 0; + pauseCtx->cursorX[PAUSE_EQUIP] = EQUIP_VALUE_SWORD_KOKIRI; + pauseCtx->cursorY[PAUSE_EQUIP] = EQUIP_TYPE_SWORD; pauseCtx->cursorItem[PAUSE_ITEM] = PAUSE_ITEM_NONE; pauseCtx->cursorItem[PAUSE_MAP] = VREG(30) + 3; diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c index 1b08703866..65b1110c87 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c @@ -624,7 +624,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { // PAUSE_MAIN_STATE_SONG_PROMPT_INIT, PAUSE_MAIN_STATE_SONG_PROMPT, // PAUSE_MAIN_STATE_SONG_PROMPT_DONE if ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PLAYBACK) && - (pauseCtx->mainState < PAUSE_MAIN_STATE_7)) { + (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_DONE)) { pauseCtx->cursorColorSet = 0; } } diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c index be15c865a5..15db7c07ba 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c @@ -28,10 +28,34 @@ static u8 sAdultUpgradeItemBases[] = { ITEM_SCALE_SILVER, // QUAD_EQUIP_UPG_SCALE }; -static u8 sUpgradeItemOffsets[] = { 0x00, 0x03, 0x06, 0x09 }; +static u8 sUpgradeItemOffsets[] = { + 0, // unused + ITEM_BOMB_BAG_20 - ITEM_QUIVER_30, // UPG_BOMB_BAG + ITEM_BRACELET - ITEM_QUIVER_30, // UPG_STRENGTH + ITEM_SCALE_SILVER - ITEM_QUIVER_30, // UPG_SCALE +}; static u8 sEquipmentItemOffsets[] = { - 0x00, 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x00, 0x06, 0x07, 0x08, 0x00, 0x09, 0x0A, 0x0B, + // EQUIP_TYPE_SWORD + 0, // unused + ITEM_SWORD_KOKIRI - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SWORD_KOKIRI + ITEM_SWORD_MASTER - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SWORD_MASTER + ITEM_SWORD_BGS - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SWORD_BGS + // EQUIP_TYPE_SHIELD + 0, // unused + ITEM_SHIELD_DEKU - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SHIELD_DEKU + ITEM_SHIELD_HYLIAN - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SHIELD_HYLIAN + ITEM_SHIELD_MIRROR - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SHIELD_MIRROR + // EQUIP_TYPE_TUNIC + 0, // unused + ITEM_TUNIC_KOKIRI - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_TUNIC_KOKIRI + ITEM_TUNIC_GORON - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_TUNIC_GORON + ITEM_TUNIC_ZORA - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_TUNIC_ZORA + // EQUIP_TYPE_BOOTS + 0, // unused + ITEM_BOOTS_KOKIRI - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_BOOTS_KOKIRI + ITEM_BOOTS_IRON - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_BOOTS_IRON + ITEM_BOOTS_HOVER - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_BOOTS_HOVER }; static s16 sEquipTimer = 0; @@ -177,6 +201,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { oldCursorPoint = pauseCtx->cursorPoint[PAUSE_EQUIP]; pauseCtx->cursorColorSet = 0; + // Handle moving the cursor with stick input + if (pauseCtx->cursorSpecialPos == 0) { pauseCtx->nameColorSet = 0; @@ -192,12 +218,13 @@ void KaleidoScope_DrawEquipment(PlayState* play) { cursorMoveResult = 0; while (cursorMoveResult == 0) { if (pauseCtx->stickAdjX < -30) { - if (pauseCtx->cursorX[PAUSE_EQUIP] != 0) { + if (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG) { pauseCtx->cursorX[PAUSE_EQUIP] -= 1; pauseCtx->cursorPoint[PAUSE_EQUIP] -= 1; - if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) { - if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) { + if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) { + if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) { + //! @bug Assumes adult always has bullet bag (as adult this should rely on `UPG_QUIVER`) if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) { cursorMoveResult = 1; } @@ -238,7 +265,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { pauseCtx->cursorX[PAUSE_EQUIP] += 1; pauseCtx->cursorPoint[PAUSE_EQUIP] += 1; - if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) { + if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) { if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) { cursorMoveResult = 1; } @@ -286,17 +313,20 @@ void KaleidoScope_DrawEquipment(PlayState* play) { pauseCtx->cursorY[PAUSE_EQUIP] -= 1; pauseCtx->cursorPoint[PAUSE_EQUIP] -= 4; - if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) { - if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) { + if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) { + if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) { if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) { cursorMoveResult = 1; } - } else if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) { - cursorMoveResult = 1; + } else { + if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) { + cursorMoveResult = 1; + } + } + } else { + if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & gSaveContext.inventory.equipment) { + cursorMoveResult = 2; } - } else if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & - gSaveContext.inventory.equipment) { - cursorMoveResult = 2; } } else { pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; @@ -308,13 +338,14 @@ void KaleidoScope_DrawEquipment(PlayState* play) { pauseCtx->cursorY[PAUSE_EQUIP] += 1; pauseCtx->cursorPoint[PAUSE_EQUIP] += 4; - if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) { + if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) { if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) { cursorMoveResult = 1; } - } else if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & - gSaveContext.inventory.equipment) { - cursorMoveResult = 2; + } else { + if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & gSaveContext.inventory.equipment) { + cursorMoveResult = 2; + } } } else { pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; @@ -335,25 +366,29 @@ void KaleidoScope_DrawEquipment(PlayState* play) { cursorPoint = cursorX = cursorY = 0; while (true) { - if (cursorX == 0) { - if (cursorY == 0) { + if (cursorX == EQUIP_CURSOR_X_UPG) { + if (cursorY == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) { if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) { pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint; pauseCtx->cursorX[PAUSE_EQUIP] = cursorX; pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; break; } - } else if (CUR_UPG_VALUE(cursorY) != 0) { + } else { + if (CUR_UPG_VALUE(cursorY) != 0) { + pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint; + pauseCtx->cursorX[PAUSE_EQUIP] = cursorX; + pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; + break; + } + } + } else { + if (gBitFlags[cursorPoint - 1] & gSaveContext.inventory.equipment) { pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint; pauseCtx->cursorX[PAUSE_EQUIP] = cursorX; pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; break; } - } else if (gBitFlags[cursorPoint - 1] & gSaveContext.inventory.equipment) { - pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint; - pauseCtx->cursorX[PAUSE_EQUIP] = cursorX; - pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; - break; } cursorY = cursorY + 1; @@ -373,7 +408,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { break; } } - } else { + } else { // cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT if (pauseCtx->stickAdjX < -30) { pauseCtx->nameDisplayTimer = 0; pauseCtx->cursorSpecialPos = 0; @@ -383,18 +418,20 @@ void KaleidoScope_DrawEquipment(PlayState* play) { cursorPoint = cursorX = 3; cursorY = 0; while (true) { - if (cursorX == 0) { + if (cursorX == EQUIP_CURSOR_X_UPG) { if (CUR_UPG_VALUE(cursorY) != 0) { pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint; pauseCtx->cursorX[PAUSE_EQUIP] = cursorX; pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; break; } - } else if (gBitFlags[cursorPoint - 1] & gSaveContext.inventory.equipment) { - pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint; - pauseCtx->cursorX[PAUSE_EQUIP] = cursorX; - pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; - break; + } else { + if (gBitFlags[cursorPoint - 1] & gSaveContext.inventory.equipment) { + pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint; + pauseCtx->cursorX[PAUSE_EQUIP] = cursorX; + pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; + break; + } } cursorY = cursorY + 1; @@ -416,11 +453,14 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } } - if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) { + // set cursorItem + + if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) { pauseCtx->cursorColorSet = 0; if (LINK_AGE_IN_YEARS == YEARS_CHILD) { - if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0)) { + if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) && + (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0)) { cursorItem = ITEM_BULLET_BAG_30 + CUR_UPG_VALUE(UPG_BULLET_BAG) - 1; } else { cursorItem = ITEM_QUIVER_30 + sUpgradeItemOffsets[pauseCtx->cursorY[PAUSE_EQUIP]] + @@ -428,7 +468,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { osSyncPrintf("H_arrowcase_1 + non_equip_item_table = %d\n", cursorItem); } } else { - if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (CUR_UPG_VALUE(UPG_QUIVER) == 0)) { + if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) && + (CUR_UPG_VALUE(UPG_QUIVER) == 0)) { cursorItem = ITEM_BULLET_BAG_30 + CUR_UPG_VALUE(UPG_BULLET_BAG) - 1; } else { cursorItem = ITEM_QUIVER_30 + sUpgradeItemOffsets[pauseCtx->cursorY[PAUSE_EQUIP]] + @@ -445,7 +486,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } } - if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (pauseCtx->cursorX[PAUSE_EQUIP] == 3)) { + if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_TYPE_SWORD) && + (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_VALUE_SWORD_BGS)) { if (gSaveContext.bgsFlag) { cursorItem = ITEM_HEART_PIECE_2; } else if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)) { @@ -460,6 +502,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { osSyncPrintf("kscope->select_name[Display_Equipment] = %d\n", pauseCtx->cursorItem[PAUSE_EQUIP]); + // Handle age particularities + if (!CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) { pauseCtx->nameColorSet = 1; } @@ -472,7 +516,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } } - if ((pauseCtx->cursorX[PAUSE_EQUIP] == 0) && (pauseCtx->cursorY[PAUSE_EQUIP] == 0)) { + if ((pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) && + (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER)) { if (LINK_AGE_IN_YEARS != YEARS_CHILD) { if ((cursorItem >= ITEM_BULLET_BAG_30) && (cursorItem <= ITEM_BULLET_BAG_50)) { pauseCtx->nameColorSet = 1; @@ -484,20 +529,24 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } } + // Set cursor position + KaleidoScope_SetCursorPos(pauseCtx, cursorSlot * 4, pauseCtx->equipVtx); + // Handle input for changing equipment + if ((pauseCtx->cursorSpecialPos == 0) && (cursorItem != PAUSE_ITEM_NONE) && (pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && - CHECK_BTN_ALL(input->press.button, BTN_A) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0)) { + CHECK_BTN_ALL(input->press.button, BTN_A) && (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG)) { if (CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) { Inventory_ChangeEquipment(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]); - if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) { + if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_TYPE_SWORD) { gSaveContext.infTable[INFTABLE_1DX_INDEX] = 0; gSaveContext.equips.buttonItems[0] = cursorItem; - if ((pauseCtx->cursorX[PAUSE_EQUIP] == 3) && gSaveContext.bgsFlag) { + if ((pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_VALUE_SWORD_BGS) && gSaveContext.bgsFlag) { gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS; gSaveContext.swordHealth = 8; } else { @@ -515,7 +564,9 @@ void KaleidoScope_DrawEquipment(PlayState* play) { Audio_PlaySfxGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); - pauseCtx->mainState = PAUSE_MAIN_STATE_7; + + // Wait 10 frames before accepting input again + pauseCtx->mainState = PAUSE_MAIN_STATE_EQUIP_CHANGED; sEquipTimer = 10; } else { Audio_PlaySfxGeneral(NA_SE_SY_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, @@ -527,7 +578,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); } - } else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_7) && (pauseCtx->pageIndex == PAUSE_EQUIP)) { + } else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) && (pauseCtx->pageIndex == PAUSE_EQUIP)) { KaleidoScope_SetCursorPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_EQUIP] * 4, pauseCtx->equipVtx); pauseCtx->cursorColorSet = 8; @@ -537,21 +588,19 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } } + // Enlarge the equip item at the current cursor position, if it can be equipped + // for each row (one row per equip type) - // point = QUAD_EQUIP_SWORD_KOKIRI, QUAD_EQUIP_SHIELD_DEKU, QUAD_EQUIP_TUNIC_KOKIRI, QUAD_EQUIP_BOOTS_KOKIRI for (rowStart = 0, i = 0, point = QUAD_EQUIP_SWORD_KOKIRI * 4; i < EQUIP_TYPE_MAX; i++, rowStart += 4, point += 4 * 4) { // for each equip column - // j = QUAD_EQUIP_SWORD_KOKIRI, QUAD_EQUIP_SWORD_MASTER, QUAD_EQUIP_SWORD_BIGGORON - // j = QUAD_EQUIP_SHIELD_DEKU, QUAD_EQUIP_SHIELD_HYLIAN, QUAD_EQUIP_SHIELD_MIRROR - // j = QUAD_EQUIP_TUNIC_KOKIRI, QUAD_EQUIP_TUNIC_GORON, QUAD_EQUIP_TUNIC_ZORA - // j = QUAD_EQUIP_BOOTS_KOKIRI, QUAD_EQUIP_BOOTS_IRON, QUAD_EQUIP_BOOTS_HOVER for (k = 0, temp = rowStart + 1, bit = rowStart, j = point; k < 3; k++, bit++, j += 4, temp++) { if ((gBitFlags[bit] & gSaveContext.inventory.equipment) && (pauseCtx->cursorSpecialPos == 0)) { if (CHECK_AGE_REQ_EQUIP(i, k + 1)) { if (temp == cursorSlot) { + pauseCtx->equipVtx[j].v.ob[0] = pauseCtx->equipVtx[j + 2].v.ob[0] = pauseCtx->equipVtx[j].v.ob[0] - 2; pauseCtx->equipVtx[j + 1].v.ob[0] = pauseCtx->equipVtx[j + 3].v.ob[0] = @@ -566,6 +615,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } } + // Draw upgrades and equips + Gfx_SetupDL_42Opa(play->state.gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); @@ -619,13 +670,15 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } } + // Draw player to the player prerender buffer + KaleidoScope_DrawPlayerWork(play); - if ((pauseCtx->mainState == PAUSE_MAIN_STATE_7) && (sEquipTimer == 10)) { + if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) && (sEquipTimer == 10)) { KaleidoScope_SetupPlayerPreRender(play); } - if ((pauseCtx->mainState == PAUSE_MAIN_STATE_7) && (sEquipTimer == 9)) { + if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) && (sEquipTimer == 9)) { //! @bug: This function shouldn't take any arguments KaleidoScope_ProcessPlayerPreRender(play); } @@ -637,6 +690,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x0B, play->interfaceCtx.mapSegment); gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment); + // Draw player prerender onto the equip page + Gfx_SetupDL_42Opa(play->state.gfxCtx); KaleidoScope_DrawEquipmentImage(play, pauseCtx->playerSegment, PAUSE_EQUIP_PLAYER_WIDTH, PAUSE_EQUIP_PLAYER_HEIGHT); diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h index f86518e279..b0d71c3401 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h @@ -19,8 +19,9 @@ extern u8 gAreaGsFlags[]; #define CHECK_AGE_REQ_SLOT(slot) \ ((gSlotAgeReqs[slot] == AGE_REQ_NONE) || gSlotAgeReqs[slot] == ((void)0, gSaveContext.linkAge)) #define CHECK_AGE_REQ_EQUIP(y, x) \ - ((gEquipAgeReqs[y][x] == 9) || (gEquipAgeReqs[y][x] == ((void)0, gSaveContext.linkAge))) -#define CHECK_AGE_REQ_ITEM(item) ((gItemAgeReqs[item] == 9) || (gItemAgeReqs[item] == ((void)0, gSaveContext.linkAge))) + ((gEquipAgeReqs[y][x] == AGE_REQ_NONE) || (gEquipAgeReqs[y][x] == ((void)0, gSaveContext.linkAge))) +#define CHECK_AGE_REQ_ITEM(item) \ + ((gItemAgeReqs[item] == AGE_REQ_NONE) || (gItemAgeReqs[item] == ((void)0, gSaveContext.linkAge))) typedef enum { // 0 to 24 matches the `QuestItem` enum @@ -53,6 +54,9 @@ typedef enum { /* 47 */ QUAD_QUEST_MAX } QuestQuad; +#define EQUIP_CURSOR_X_UPG 0 +#define EQUIP_CURSOR_Y_BULLETBAG_QUIVER 0 + typedef enum { // Grid of upgrades and equips, left column is upgrades, others are equips, with one row per equip type // Row 0 diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c index 905402339b..101afd961a 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c @@ -474,35 +474,30 @@ u8 gSlotAgeReqs[] = { AGE_REQ_CHILD, // SLOT_TRADE_CHILD }; -// Not sure EQUIP_TYPE_MAX is really EQUIP_TYPE_MAX -u8 gEquipAgeReqs[EQUIP_TYPE_MAX][4] = { - // EQUIP_TYPE_SWORD +u8 gEquipAgeReqs[4][4] = { { - AGE_REQ_ADULT, // EQUIP_VALUE_SWORD_NONE - AGE_REQ_CHILD, // EQUIP_VALUE_SWORD_KOKIRI - AGE_REQ_ADULT, // EQUIP_VALUE_SWORD_MASTER - AGE_REQ_ADULT, // EQUIP_VALUE_SWORD_BGS + AGE_REQ_ADULT, // 0 UPG_QUIVER + AGE_REQ_CHILD, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_KOKIRI + AGE_REQ_ADULT, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_MASTER + AGE_REQ_ADULT, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_BGS }, - // EQUIP_TYPE_SHIELD { - AGE_REQ_NONE, // EQUIP_VALUE_SHIELD_NONE - AGE_REQ_CHILD, // EQUIP_VALUE_SHIELD_DEKU - AGE_REQ_NONE, // EQUIP_VALUE_SHIELD_HYLIAN - AGE_REQ_ADULT, // EQUIP_VALUE_SHIELD_MIRROR + AGE_REQ_NONE, // 0 UPG_BOMB_BAG + AGE_REQ_CHILD, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_DEKU + AGE_REQ_NONE, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_HYLIAN + AGE_REQ_ADULT, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_MIRROR }, - // EQUIP_TYPE_TUNIC { - AGE_REQ_ADULT, // EQUIP_VALUE_TUNIC_NONE - AGE_REQ_NONE, // EQUIP_VALUE_TUNIC_KOKIRI - AGE_REQ_ADULT, // EQUIP_VALUE_TUNIC_GORON - AGE_REQ_ADULT, // EQUIP_VALUE_TUNIC_ZORA + AGE_REQ_ADULT, // 0 UPG_STRENGTH + AGE_REQ_NONE, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_KOKIRI + AGE_REQ_ADULT, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_GORON + AGE_REQ_ADULT, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_ZORA }, - // EQUIP_TYPE_BOOTS { - AGE_REQ_NONE, // EQUIP_VALUE_BOOTS_NONE - AGE_REQ_NONE, // EQUIP_VALUE_BOOTS_KOKIRI - AGE_REQ_ADULT, // EQUIP_VALUE_BOOTS_IRON - AGE_REQ_ADULT, // EQUIP_VALUE_BOOTS_HOVER + AGE_REQ_NONE, // 0 UPG_SCALE + AGE_REQ_NONE, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_KOKIRI + AGE_REQ_ADULT, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_IRON + AGE_REQ_ADULT, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_HOVER }, }; @@ -668,7 +663,7 @@ void KaleidoScope_SetupPlayerPreRender(PlayState* play) { } void KaleidoScope_ProcessPlayerPreRender(void) { - Sleep_Msec(50); + Sleep_Msec(50); // TODO investigate if this is required PreRender_ApplyFilters(&sPlayerPreRender); PreRender_Destroy(&sPlayerPreRender); } @@ -1618,18 +1613,20 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) && (pauseCtx->nameDisplayTimer < R_PAUSE_NAME_DISPLAY_TIMER_THRESHOLD_) && (!pauseCtx->mainState /* PAUSE_MAIN_STATE_IDLE */ || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) || - ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && (pauseCtx->mainState <= PAUSE_MAIN_STATE_7) + ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && + (pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_CHANGED) /* PAUSE_MAIN_STATE_SONG_PROMPT_INIT, PAUSE_MAIN_STATE_SONG_PROMPT, - PAUSE_MAIN_STATE_SONG_PROMPT_DONE, PAUSE_MAIN_STATE_7 */ + PAUSE_MAIN_STATE_SONG_PROMPT_DONE, PAUSE_MAIN_STATE_EQUIP_CHANGED */ ) || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) && (pauseCtx->cursorSpecialPos == 0)) { if (!pauseCtx->mainState /* PAUSE_MAIN_STATE_IDLE */ || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) || - ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && (pauseCtx->mainState <= PAUSE_MAIN_STATE_7) + ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && + (pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_CHANGED) /* PAUSE_MAIN_STATE_SONG_PROMPT_INIT, PAUSE_MAIN_STATE_SONG_PROMPT, - PAUSE_MAIN_STATE_SONG_PROMPT_DONE, PAUSE_MAIN_STATE_7 */ + PAUSE_MAIN_STATE_SONG_PROMPT_DONE, PAUSE_MAIN_STATE_EQUIP_CHANGED */ ) || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) { @@ -1694,7 +1691,7 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { } } else if ((pauseCtx->mainState < PAUSE_MAIN_STATE_3) /* PAUSE_MAIN_STATE_IDLE, PAUSE_MAIN_STATE_SWITCHING_PAGE, PAUSE_MAIN_STATE_SONG_PLAYBACK */ - || (pauseCtx->mainState == PAUSE_MAIN_STATE_7) || + || (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) || (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) { pauseCtx->infoPanelVtx[20].v.ob[1] = pauseCtx->infoPanelVtx[21].v.ob[1] = y; @@ -1899,7 +1896,7 @@ void KaleidoScope_UpdateNamePanel(PlayState* play) { (pauseCtx->cursorSlot[PAUSE_QUEST] < QUEST_KOKIRI_EMERALD) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) || (pauseCtx->pageIndex == PAUSE_ITEM) || - ((pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0))) { + ((pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG))) { if (pauseCtx->namedItem != ITEM_SOLD_OUT) { pauseCtx->nameDisplayTimer++; if (pauseCtx->nameDisplayTimer > R_PAUSE_NAME_DISPLAY_TIMER_MAX_) { @@ -3766,7 +3763,7 @@ void KaleidoScope_Update(PlayState* play) { } break; - case PAUSE_MAIN_STATE_7: + case PAUSE_MAIN_STATE_EQUIP_CHANGED: break; case PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG: