1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-03 14:34:32 +00:00

Document eventChkInf usage of frogs played songs flags (#1211)

* Document `eventChkInf` usage of frogs played songs flags

* Prettify frogs flags defines

* Friendlier macro names
This commit is contained in:
Dragorn421 2022-05-08 23:52:35 +02:00 committed by GitHub
parent 0c0d1f4a4b
commit 2dfccbb919
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 65 additions and 58 deletions

View file

@ -388,28 +388,28 @@ typedef enum {
#define EVENTCHKINF_C9 0xC9 #define EVENTCHKINF_C9 0xC9
// 0xD0-0xD6 // 0xD0-0xD6
#define EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX 13 #define EVENTCHKINF_SONGS_FOR_FROGS_INDEX 13
#define EVENTCHKINF_D0_SHIFT 0 #define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT 0
#define EVENTCHKINF_D1_SHIFT 1 #define EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT 1
#define EVENTCHKINF_D2_SHIFT 2 #define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT 2
#define EVENTCHKINF_D3_SHIFT 3 #define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT 3
#define EVENTCHKINF_D4_SHIFT 4 #define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT 4
#define EVENTCHKINF_D5_SHIFT 5 #define EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT 5
#define EVENTCHKINF_D6_SHIFT 6 #define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT 6
#define EVENTCHKINF_D0_MASK (1 << EVENTCHKINF_D0_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT)
#define EVENTCHKINF_D1_MASK (1 << EVENTCHKINF_D1_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_ZL_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT)
#define EVENTCHKINF_D2_MASK (1 << EVENTCHKINF_D2_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_EPONA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT)
#define EVENTCHKINF_D3_MASK (1 << EVENTCHKINF_D3_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_SUNS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT)
#define EVENTCHKINF_D4_MASK (1 << EVENTCHKINF_D4_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_SARIA_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT)
#define EVENTCHKINF_D5_MASK (1 << EVENTCHKINF_D5_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_SOT_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT)
#define EVENTCHKINF_D6_MASK (1 << EVENTCHKINF_D6_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_STORMS_MASK (1 << EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT)
#define EVENTCHKINF_D0 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D0_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_CHOIR ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_CHOIR_SHIFT)
#define EVENTCHKINF_D1 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D1_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_ZL ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_ZL_SHIFT)
#define EVENTCHKINF_D2 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D2_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_EPONA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_EPONA_SHIFT)
#define EVENTCHKINF_D3 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D3_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_SUNS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SUNS_SHIFT)
#define EVENTCHKINF_D4 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D4_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_SARIA ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SARIA_SHIFT)
#define EVENTCHKINF_D5 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D5_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_SOT ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_SOT_SHIFT)
#define EVENTCHKINF_D6 ((EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX << 4) | EVENTCHKINF_D6_SHIFT) #define EVENTCHKINF_SONGS_FOR_FROGS_STORMS ((EVENTCHKINF_SONGS_FOR_FROGS_INDEX << 4) | EVENTCHKINF_SONGS_FOR_FROGS_STORMS_SHIFT)
// 0xDA-0xDE // 0xDA-0xDE
#define EVENTCHKINF_DA_DB_DC_DD_DE_INDEX 13 #define EVENTCHKINF_DA_DB_DC_DD_DE_INDEX 13

View file

@ -105,13 +105,26 @@ static EnFrPointers sEnFrPointers = {
}, },
}; };
static u16 sSongIndex[] = { #define FROG_HAS_SONG_BEEN_PLAYED(frogSongIndex) \
EVENTCHKINF_D1_MASK, EVENTCHKINF_D2_MASK, EVENTCHKINF_D4_MASK, EVENTCHKINF_D3_MASK, (gSaveContext.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] & \
EVENTCHKINF_D5_MASK, EVENTCHKINF_D6_MASK, EVENTCHKINF_D0_MASK, 0, 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 sFrogToFrogSongIndex[] = {
static u8 sFrogToSongIndex[] = {
FROG_SARIA, FROG_SUNS, FROG_SOT, FROG_ZL, FROG_EPONA, 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); this->actor.home.pos.z, 255, 255, 255, -1);
// Check to see if the song for a particular frog has been played. // 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 // If it has, the frog is larger. If not, the frog is smaller
this->scale = this->scale = FROG_HAS_SONG_BEEN_PLAYED(sFrogToFrogSongIndex[frogIndex]) ? 270.0f : 150.0f;
gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] & sSongIndex[sFrogToSongIndex[frogIndex]]
? 270.0f
: 150.0f;
// When the frogs are not active (link doesn't have his ocarina out), // When the frogs are not active (link doesn't have his ocarina out),
// Then shrink the frogs down by a factor of 10,000 // Then shrink the frogs down by a factor of 10,000
Actor_SetScale(&this->actor, this->scale * 0.0001f); 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) { void EnFr_ActivateCheckFrogSong(EnFr* this, GlobalContext* globalCtx) {
if (sEnFrPointers.flags == 11) { if (sEnFrPointers.flags == 11) {
// Check if all 6 child songs have been played for the frogs // Check if all 6 child songs have been played for the frogs
if (GET_EVENTCHKINF(EVENTCHKINF_D1) // ZL if (GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_ZL) && GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_EPONA) &&
&& GET_EVENTCHKINF(EVENTCHKINF_D2) // Epona GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_SARIA) && GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_SUNS) &&
&& GET_EVENTCHKINF(EVENTCHKINF_D4) // Saria GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_SOT) && GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_STORMS)) {
&& GET_EVENTCHKINF(EVENTCHKINF_D3) // Suns
&& GET_EVENTCHKINF(EVENTCHKINF_D5) // SoT
&& GET_EVENTCHKINF(EVENTCHKINF_D6)) { // SoS
this->actionFunc = EnFr_TalkBeforeFrogSong; this->actionFunc = EnFr_TalkBeforeFrogSong;
this->songIndex = FROG_CHOIR_SONG; this->songIndex = FROG_CHOIR_SONG;
Message_StartTextbox(globalCtx, 0x40AB, &this->actor); Message_StartTextbox(globalCtx, 0x40AB, &this->actor);
@ -727,7 +734,7 @@ void EnFr_ChildSong(EnFr* this, GlobalContext* globalCtx) {
if (songIndex == FROG_STORMS) { if (songIndex == FROG_STORMS) {
this->actor.textId = 0x40AA; this->actor.textId = 0x40AA;
EnFr_SetupReward(this, globalCtx, false); 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]]; frog = sEnFrPointers.frogs[sSongToFrog[songIndex]];
func_80078884(NA_SE_SY_CORRECT_CHIME); func_80078884(NA_SE_SY_CORRECT_CHIME);
if (frog->actionFunc == EnFr_ChooseJumpFromLogSpot) { if (frog->actionFunc == EnFr_ChooseJumpFromLogSpot) {
@ -801,7 +808,7 @@ void EnFr_DeactivateButterfly() {
} }
u8 EnFr_GetNextNoteFrogSong(u8 ocarinaNoteIndex) { u8 EnFr_GetNextNoteFrogSong(u8 ocarinaNoteIndex) {
if (!GET_EVENTCHKINF(EVENTCHKINF_D0)) { if (!GET_EVENTCHKINF(EVENTCHKINF_SONGS_FOR_FROGS_CHOIR)) {
return gFrogsSongPtr[ocarinaNoteIndex]; return gFrogsSongPtr[ocarinaNoteIndex];
} else { } else {
return sOcarinaNotes[(s32)Rand_ZeroFloat(60.0f) % 5]; return sOcarinaNotes[(s32)Rand_ZeroFloat(60.0f) % 5];
@ -940,22 +947,22 @@ void EnFr_SetReward(EnFr* this, GlobalContext* globalCtx) {
this->actionFunc = EnFr_Deactivate; this->actionFunc = EnFr_Deactivate;
this->reward = GI_NONE; this->reward = GI_NONE;
if ((songIndex >= FROG_ZL) && (songIndex <= FROG_SOT)) { if ((songIndex >= FROG_ZL) && (songIndex <= FROG_SOT)) {
if (!(gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] & sSongIndex[songIndex])) { if (!FROG_HAS_SONG_BEEN_PLAYED(songIndex)) {
gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] |= sSongIndex[songIndex]; FROG_SET_SONG_PLAYED(songIndex);
this->reward = GI_RUPEE_PURPLE; this->reward = GI_RUPEE_PURPLE;
} else { } else {
this->reward = GI_RUPEE_BLUE; this->reward = GI_RUPEE_BLUE;
} }
} else if (songIndex == FROG_STORMS) { } else if (songIndex == FROG_STORMS) {
if (!(gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] & sSongIndex[songIndex])) { if (!FROG_HAS_SONG_BEEN_PLAYED(songIndex)) {
gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] |= sSongIndex[songIndex]; FROG_SET_SONG_PLAYED(songIndex);
this->reward = GI_HEART_PIECE; this->reward = GI_HEART_PIECE;
} else { } else {
this->reward = GI_RUPEE_BLUE; this->reward = GI_RUPEE_BLUE;
} }
} else if (songIndex == FROG_CHOIR_SONG) { } else if (songIndex == FROG_CHOIR_SONG) {
if (!(gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] & sSongIndex[songIndex])) { if (!FROG_HAS_SONG_BEEN_PLAYED(songIndex)) {
gSaveContext.eventChkInf[EVENTCHKINF_D0_D1_D2_D3_D4_D5_D6_INDEX] |= sSongIndex[songIndex]; FROG_SET_SONG_PLAYED(songIndex);
this->reward = GI_HEART_PIECE; this->reward = GI_HEART_PIECE;
} else { } else {
this->reward = GI_RUPEE_PURPLE; this->reward = GI_RUPEE_PURPLE;

View file

@ -10,22 +10,22 @@ typedef void (*EnFrActionFunc)(struct EnFr*, GlobalContext*);
typedef void (*EnFrBlinkFunc)(struct EnFr*); typedef void (*EnFrBlinkFunc)(struct EnFr*);
typedef enum { typedef enum {
/* 00 */ FROG_YELLOW, // Middle /* 0 */ FROG_YELLOW, // Middle
/* 01 */ FROG_BLUE, // Front Left /* 1 */ FROG_BLUE, // Front Left
/* 02 */ FROG_RED, // Front Right /* 2 */ FROG_RED, // Front Right
/* 03 */ FROG_PURPLE, // Back Left /* 3 */ FROG_PURPLE, // Back Left
/* 04 */ FROG_WHITE // Back Right /* 4 */ FROG_WHITE // Back Right
} FrogType; } FrogType;
typedef enum { typedef enum {
/* 00 */ FROG_ZL, /* 0 */ FROG_ZL,
/* 01 */ FROG_EPONA, /* 1 */ FROG_EPONA,
/* 02 */ FROG_SARIA, /* 2 */ FROG_SARIA,
/* 03 */ FROG_SUNS, /* 3 */ FROG_SUNS,
/* 04 */ FROG_SOT, /* 4 */ FROG_SOT,
/* 05 */ FROG_STORMS, /* 5 */ FROG_STORMS,
/* 06 */ FROG_CHOIR_SONG, /* 6 */ FROG_CHOIR_SONG,
/* 07 */ FROG_NO_SONG /* 7 */ FROG_NO_SONG
} FrogSongType; } FrogSongType;
typedef struct EnFr { typedef struct EnFr {