From 2dfccbb919226c48297bfdc13bbf5bb8f2c51eb6 Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Sun, 8 May 2022 23:52:35 +0200 Subject: [PATCH] Document `eventChkInf` usage of frogs played songs flags (#1211) * Document `eventChkInf` usage of frogs played songs flags * Prettify frogs flags defines * Friendlier macro names --- include/z64save.h | 44 ++++++++++---------- src/overlays/actors/ovl_En_Fr/z_en_fr.c | 53 ++++++++++++++----------- src/overlays/actors/ovl_En_Fr/z_en_fr.h | 26 ++++++------ 3 files changed, 65 insertions(+), 58 deletions(-) diff --git a/include/z64save.h b/include/z64save.h index 079cfa04a2..864b650a23 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -388,28 +388,28 @@ typedef enum { #define EVENTCHKINF_C9 0xC9 // 0xD0-0xD6 -#define EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX 13 -#define EVENTCHKINF_D0_SHIFT 0 -#define EVENTCHKINF_D1_SHIFT 1 -#define EVENTCHKINF_D2_SHIFT 2 -#define EVENTCHKINF_D3_SHIFT 3 -#define EVENTCHKINF_D4_SHIFT 4 -#define EVENTCHKINF_D5_SHIFT 5 -#define EVENTCHKINF_D6_SHIFT 6 -#define EVENTCHKINF_D0_MASK (1 << EVENTCHKINF_D0_SHIFT) -#define EVENTCHKINF_D1_MASK (1 << EVENTCHKINF_D1_SHIFT) -#define EVENTCHKINF_D2_MASK (1 << EVENTCHKINF_D2_SHIFT) -#define EVENTCHKINF_D3_MASK (1 << EVENTCHKINF_D3_SHIFT) -#define EVENTCHKINF_D4_MASK (1 << EVENTCHKINF_D4_SHIFT) -#define EVENTCHKINF_D5_MASK (1 << EVENTCHKINF_D5_SHIFT) -#define EVENTCHKINF_D6_MASK (1 << EVENTCHKINF_D6_SHIFT) -#define EVENTCHKINF_D0 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D0_SHIFT) -#define EVENTCHKINF_D1 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D1_SHIFT) -#define EVENTCHKINF_D2 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D2_SHIFT) -#define EVENTCHKINF_D3 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D3_SHIFT) -#define EVENTCHKINF_D4 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D4_SHIFT) -#define EVENTCHKINF_D5 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D5_SHIFT) -#define EVENTCHKINF_D6 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D6_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_INDEX 13 +#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT 0 +#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT 1 +#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT 2 +#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT 3 +#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT 4 +#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT 5 +#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT 6 +#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_ZL_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SOT_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_ZL ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_EPONA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SUNS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SARIA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_SOT ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT) +#define EVENTCHKINF_SONGS_FOR_FROGS_STORMS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT) // 0xDA-0xDE #define EVENTCHKINF_DA_DB_DC_DD_DE_INDEX 13 diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/src/overlays/actors/ovl_En_Fr/z_en_fr.c index ef54af09fc..a9efc555cf 100644 --- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c +++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c @@ -105,13 +105,26 @@ static EnFrPointers sEnFrPointers = { }, }; -static u16 sSongIndex[] = { - EVENTCHKINF_D1_MASK, EVENTCHKINF_D2_MASK, EVENTCHKINF_D4_MASK, EVENTCHKINF_D3_MASK, - EVENTCHKINF_D5_MASK, EVENTCHKINF_D6_MASK, EVENTCHKINF_D0_MASK, 0, +#define FROG_HAS_SONG_BEEN_PLAYED(frogSongIndex) \ + (gSaveContext.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] & \ + sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex]) + +#define FROG_SET_SONG_PLAYED(frogSongIndex) \ + gSaveContext.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] |= \ + sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex]; + +static u16 sFrogSongIndexToEventChkInfSongsForFrogsMask[] = { + EVENTCHKINF_SONGS_FOR_FROGS_ZL_MASK, // FROG_ZL + EVENTCHKINF_SONGS_FOR_FROGS_EPONA_MASK, // FROG_EPONA + EVENTCHKINF_SONGS_FOR_FROGS_SARIA_MASK, // FROG_SARIA + EVENTCHKINF_SONGS_FOR_FROGS_SUNS_MASK, // FROG_SUNS + EVENTCHKINF_SONGS_FOR_FROGS_SOT_MASK, // FROG_SOT + EVENTCHKINF_SONGS_FOR_FROGS_STORMS_MASK, // FROG_STORMS + EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_MASK, // FROG_CHOIR_SONG + 0, // FROG_NO_SONG }; -// Frog to Index for Song Flag (sSongIndex) Mapping -static u8 sFrogToSongIndex[] = { +static u8 sFrogToFrogSongIndex[] = { FROG_SARIA, FROG_SUNS, FROG_SOT, FROG_ZL, FROG_EPONA, }; @@ -281,10 +294,7 @@ void EnFr_Update(Actor* thisx, GlobalContext* globalCtx) { this->actor.home.pos.z, 255, 255, 255, -1); // Check to see if the song for a particular frog has been played. // If it has, the frog is larger. If not, the frog is smaller - this->scale = - gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] & sSongIndex[sFrogToSongIndex[frogIndex]] - ? 270.0f - : 150.0f; + this->scale = FROG_HAS_SONG_BEEN_PLAYED(sFrogToFrogSongIndex[frogIndex]) ? 270.0f : 150.0f; // When the frogs are not active (link doesn't have his ocarina out), // Then shrink the frogs down by a factor of 10,000 Actor_SetScale(&this->actor, this->scale * 0.0001f); @@ -632,12 +642,9 @@ void EnFr_Activate(EnFr* this, GlobalContext* globalCtx) { void EnFr_ActivateCheckFrogSong(EnFr* this, GlobalContext* globalCtx) { if (sEnFrPointers.flags == 11) { // Check if all 6 child songs have been played for the frogs - if (GET_EVENTCHKINF(EVENTCHKINF_D1) // ZL - && GET_EVENTCHKINF(EVENTCHKINF_D2) // Epona - && GET_EVENTCHKINF(EVENTCHKINF_D4) // Saria - && GET_EVENTCHKINF(EVENTCHKINF_D3) // Suns - && GET_EVENTCHKINF(EVENTCHKINF_D5) // SoT - && GET_EVENTCHKINF(EVENTCHKINF_D6)) { // SoS + if (GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_ZL) && GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_EPONA) && + GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_SARIA) && GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_SUNS) && + GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_SOT) && GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_STORMS)) { this->actionFunc = EnFr_TalkBeforeFrogSong; this->songIndex = FROG_CHOIR_SONG; Message_StartTextbox(globalCtx, 0x40AB, &this->actor); @@ -727,7 +734,7 @@ void EnFr_ChildSong(EnFr* this, GlobalContext* globalCtx) { if (songIndex == FROG_STORMS) { this->actor.textId = 0x40AA; EnFr_SetupReward(this, globalCtx, false); - } else if (!(gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] & sSongIndex[songIndex])) { + } else if (!FROG_HAS_SONG_BEEN_PLAYED(songIndex)) { frog = sEnFrPointers.frogs[sSongToFrog[songIndex]]; func_80078884(NA_SE_SY_CORRECT_CHIME); if (frog->actionFunc == EnFr_ChooseJumpFromLogSpot) { @@ -801,7 +808,7 @@ void EnFr_DeactivateButterfly() { } u8 EnFr_GetNextNoteFrogSong(u8 ocarinaNoteIndex) { - if (!GET_EVENTCHKINF(EVENTCHKINF_D0)) { + if (!GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_CHOIR)) { return gFrogsSongPtr[ocarinaNoteIndex]; } else { return sOcarinaNotes[(s32)Rand_ZeroFloat(60.0f) % 5]; @@ -940,22 +947,22 @@ void EnFr_SetReward(EnFr* this, GlobalContext* globalCtx) { this->actionFunc = EnFr_Deactivate; this->reward = GI_NONE; if ((songIndex >= FROG_ZL) && (songIndex <= FROG_SOT)) { - if (!(gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] & sSongIndex[songIndex])) { - gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] |= sSongIndex[songIndex]; + if (!FROG_HAS_SONG_BEEN_PLAYED(songIndex)) { + FROG_SET_SONG_PLAYED(songIndex); this->reward = GI_RUPEE_PURPLE; } else { this->reward = GI_RUPEE_BLUE; } } else if (songIndex == FROG_STORMS) { - if (!(gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] & sSongIndex[songIndex])) { - gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] |= sSongIndex[songIndex]; + if (!FROG_HAS_SONG_BEEN_PLAYED(songIndex)) { + FROG_SET_SONG_PLAYED(songIndex); this->reward = GI_HEART_PIECE; } else { this->reward = GI_RUPEE_BLUE; } } else if (songIndex == FROG_CHOIR_SONG) { - if (!(gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] & sSongIndex[songIndex])) { - gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] |= sSongIndex[songIndex]; + if (!FROG_HAS_SONG_BEEN_PLAYED(songIndex)) { + FROG_SET_SONG_PLAYED(songIndex); this->reward = GI_HEART_PIECE; } else { this->reward = GI_RUPEE_PURPLE; diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.h b/src/overlays/actors/ovl_En_Fr/z_en_fr.h index dff80cd9b3..0a1de60308 100644 --- a/src/overlays/actors/ovl_En_Fr/z_en_fr.h +++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.h @@ -10,22 +10,22 @@ typedef void (*EnFrActionFunc)(struct EnFr*, GlobalContext*); typedef void (*EnFrBlinkFunc)(struct EnFr*); typedef enum { - /* 00 */ FROG_YELLOW, // Middle - /* 01 */ FROG_BLUE, // Front Left - /* 02 */ FROG_RED, // Front Right - /* 03 */ FROG_PURPLE, // Back Left - /* 04 */ FROG_WHITE // Back Right + /* 0 */ FROG_YELLOW, // Middle + /* 1 */ FROG_BLUE, // Front Left + /* 2 */ FROG_RED, // Front Right + /* 3 */ FROG_PURPLE, // Back Left + /* 4 */ FROG_WHITE // Back Right } FrogType; typedef enum { - /* 00 */ FROG_ZL, - /* 01 */ FROG_EPONA, - /* 02 */ FROG_SARIA, - /* 03 */ FROG_SUNS, - /* 04 */ FROG_SOT, - /* 05 */ FROG_STORMS, - /* 06 */ FROG_CHOIR_SONG, - /* 07 */ FROG_NO_SONG + /* 0 */ FROG_ZL, + /* 1 */ FROG_EPONA, + /* 2 */ FROG_SARIA, + /* 3 */ FROG_SUNS, + /* 4 */ FROG_SOT, + /* 5 */ FROG_STORMS, + /* 6 */ FROG_CHOIR_SONG, + /* 7 */ FROG_NO_SONG } FrogSongType; typedef struct EnFr {