diff --git a/include/regs.h b/include/regs.h index d521b01a7f..caeead072c 100644 --- a/include/regs.h +++ b/include/regs.h @@ -106,6 +106,7 @@ #define R_START_LABEL_DD(i) ZREG(48 + (i)) #define R_START_LABEL_Y(i) ZREG(51 + (i)) #define R_START_LABEL_X(i) ZREG(54 + (i)) +#define R_PAUSE_QUEST_MEDALLION_SHINE_TIME(i) ZREG(61 + (i)) // i = 0..3 (clashes with ZREG(62) and ZREG(63)) #define R_C_UP_BTN_X ZREG(62) #define R_C_UP_BTN_Y ZREG(63) #define R_START_BTN_X ZREG(68) diff --git a/src/code/z_construct.c b/src/code/z_construct.c index c54c57b1c5..b458f29e4e 100644 --- a/src/code/z_construct.c +++ b/src/code/z_construct.c @@ -309,10 +309,11 @@ void Regs_InitDataImpl(void) { R_START_LABEL_X(0) = 120; R_START_LABEL_X(1) = 119; R_START_LABEL_X(2) = 119; - ZREG(61) = 1; - R_C_UP_BTN_X = C_UP_BUTTON_X; - R_C_UP_BTN_Y = C_UP_BUTTON_Y; - ZREG(64) = 20; + R_PAUSE_QUEST_MEDALLION_SHINE_TIME(0) = 1; + //! @bug Overlapping reg usage + R_C_UP_BTN_X = C_UP_BUTTON_X; // R_PAUSE_QUEST_MEDALLION_SHINE_TIME(1) + R_C_UP_BTN_Y = C_UP_BUTTON_Y; // R_PAUSE_QUEST_MEDALLION_SHINE_TIME(2) + R_PAUSE_QUEST_MEDALLION_SHINE_TIME(3) = 20; ZREG(65) = 21; ZREG(66) = 122; R_ITEM_BTN_X(1) = C_LEFT_BUTTON_X; 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 0b374c33cc..51bdd3b808 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c @@ -14,9 +14,22 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { // Shining medallions static s16 sMedEnvColors[6 + 6][3] = { - { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, - { 0, 60, 0 }, { 90, 0, 0 }, { 0, 40, 110 }, { 80, 40, 0 }, { 70, 0, 90 }, { 90, 90, 0 }, + // Target env color when sMedEnvShineState == 0 + { 0, 0, 0 }, // QUEST_MEDALLION_FOREST + { 0, 0, 0 }, // QUEST_MEDALLION_FIRE + { 0, 0, 0 }, // QUEST_MEDALLION_WATER + { 0, 0, 0 }, // QUEST_MEDALLION_SPIRIT + { 0, 0, 0 }, // QUEST_MEDALLION_SHADOW + { 0, 0, 0 }, // QUEST_MEDALLION_LIGHT + // Target env color when sMedEnvShineState == 2 + { 0, 60, 0 }, // QUEST_MEDALLION_FOREST + { 90, 0, 0 }, // QUEST_MEDALLION_FIRE + { 0, 40, 110 }, // QUEST_MEDALLION_WATER + { 80, 40, 0 }, // QUEST_MEDALLION_SPIRIT + { 70, 0, 90 }, // QUEST_MEDALLION_SHADOW + { 90, 90, 0 }, // QUEST_MEDALLION_LIGHT }; + // Current (animated) env color for each medallion static s16 sMedEnvRed[6] = { 255, 255, 255, 255, 255, 255 }; static s16 sMedEnvGreen[6] = { 255, 255, 255, 255, 255, 255 }; static s16 sMedEnvBlue[6] = { 150, 150, 150, 150, 150, 150 }; @@ -48,13 +61,46 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { static s32 sUnused2 = 0; static s16 sSongsPrimRed[] = { - 150, 255, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 150, // QUEST_SONG_MINUET + 255, // QUEST_SONG_BOLERO + 100, // QUEST_SONG_SERENADE + 255, // QUEST_SONG_REQUIEM + 255, // QUEST_SONG_NOCTURNE + 255, // QUEST_SONG_PRELUDE + 255, // QUEST_SONG_LULLABY + 255, // QUEST_SONG_EPONA + 255, // QUEST_SONG_SARIA + 255, // QUEST_SONG_SUN + 255, // QUEST_SONG_TIME + 255, // QUEST_SONG_STORMS }; static s16 sSongsPrimGreen[] = { - 255, 80, 150, 160, 100, 240, 255, 255, 255, 255, 255, 255, + 255, // QUEST_SONG_MINUET + 80, // QUEST_SONG_BOLERO + 150, // QUEST_SONG_SERENADE + 160, // QUEST_SONG_REQUIEM + 100, // QUEST_SONG_NOCTURNE + 240, // QUEST_SONG_PRELUDE + 255, // QUEST_SONG_LULLABY + 255, // QUEST_SONG_EPONA + 255, // QUEST_SONG_SARIA + 255, // QUEST_SONG_SUN + 255, // QUEST_SONG_TIME + 255, // QUEST_SONG_STORMS }; static s16 sSongsPrimBlue[] = { - 100, 40, 255, 0, 255, 100, 255, 255, 255, 255, 255, 255, + 100, // QUEST_SONG_MINUET + 40, // QUEST_SONG_BOLERO + 255, // QUEST_SONG_SERENADE + 0, // QUEST_SONG_REQUIEM + 255, // QUEST_SONG_NOCTURNE + 100, // QUEST_SONG_PRELUDE + 255, // QUEST_SONG_LULLABY + 255, // QUEST_SONG_EPONA + 255, // QUEST_SONG_SARIA + 255, // QUEST_SONG_SUN + 255, // QUEST_SONG_TIME + 255, // QUEST_SONG_STORMS }; enum { @@ -390,7 +436,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { sMedEnvTimer--; - for (j = 0, bufI = 0; j < QUEST_SONG_MINUET - QUEST_MEDALLION_FOREST; j++, bufI += 4) { + for (j = 0, bufI = QUEST_MEDALLION_FOREST * 4; j < QUEST_SONG_MINUET - QUEST_MEDALLION_FOREST; j++, bufI += 4) { if ((sMedEnvShineState != 1) && (sMedEnvShineState != 3)) { targetColorIndex = (sMedEnvShineState != 0) ? j + 6 : j; @@ -431,7 +477,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { } if (sMedEnvTimer == 0) { - sMedEnvTimer = ZREG(61 + sMedEnvShineState); + sMedEnvTimer = R_PAUSE_QUEST_MEDALLION_SHINE_TIME(sMedEnvShineState); if (++sMedEnvShineState >= 4) { sMedEnvShineState = 0; } @@ -564,7 +610,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { gDPPipeSync(POLY_OPA_DISP++); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - bufI += 4; + bufI += (QUAD_QUEST_SONG_NOTE_A1 - QUEST_HEART_PIECE) * 4; // Update cursor color if ((pauseCtx->cursorSpecialPos == 0) && (cursor >= QUEST_SONG_MINUET) && (cursor < QUEST_KOKIRI_EMERALD)) { 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 6de93380ad..0354e74dd3 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h @@ -23,6 +23,7 @@ extern u8 gAreaGsFlags[]; #define CHECK_AGE_REQ_ITEM(item) ((gItemAgeReqs[item] == 9) || (gItemAgeReqs[item] == ((void)0, gSaveContext.linkAge))) 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,