diff options
| author | Garrett Cox <garrettjcox@gmail.com> | 2023-12-28 20:12:39 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-28 20:12:39 +0000 |
| commit | 6c88d33b19a9d1ebbc22b656be70e747299c71ae (patch) | |
| tree | 373ed93ab5dfddd5b4c8af1a6bd645f1ff2e898f /soh/src/code | |
| parent | c860f7a73af9466c678f39258beaa46cd92ff550 (diff) | |
| parent | 81ec2805ee5b6c4fe28285750f8a174ac4691ff5 (diff) | |
Merge pull request #3756 from HarbourMasters/develop
develop -> develop-rando
Diffstat (limited to 'soh/src/code')
| -rw-r--r-- | soh/src/code/code_800EC960.c | 24 | ||||
| -rw-r--r-- | soh/src/code/code_800F9280.c | 321 | ||||
| -rw-r--r-- | soh/src/code/z_actor.c | 100 | ||||
| -rw-r--r-- | soh/src/code/z_frame_advance.c | 3 |
4 files changed, 256 insertions, 192 deletions
diff --git a/soh/src/code/code_800EC960.c b/soh/src/code/code_800EC960.c index c1528ec88..9310fa193 100644 --- a/soh/src/code/code_800EC960.c +++ b/soh/src/code/code_800EC960.c @@ -4735,7 +4735,7 @@ void Audio_SetSequenceMode(u8 seqMode) { seqMode = SEQ_MODE_IGNORE; } - seqId = D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254; + seqId = gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId; if (seqId == NA_BGM_FIELD_LOGIC && func_800FA0B4(SEQ_PLAYER_BGM_SUB) == (NA_BGM_ENEMY | 0x800)) { seqMode = SEQ_MODE_IGNORE; @@ -4746,10 +4746,10 @@ void Audio_SetSequenceMode(u8 seqMode) { if (seqMode != (sPrevSeqMode & 0x7F)) { if (seqMode == SEQ_MODE_ENEMY) { // Start playing enemy bgm - if (D_8016E750[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol < 0) { - volumeFadeInTimer = -(D_8016E750[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol); + if (gActiveSeqs[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol < 0) { + volumeFadeInTimer = -(gActiveSeqs[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol); } else { - volumeFadeInTimer = D_8016E750[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol; + volumeFadeInTimer = gActiveSeqs[SEQ_PLAYER_BGM_SUB].volScales[1] - sAudioEnemyVol; } Audio_SetVolScale(SEQ_PLAYER_BGM_SUB, 3, sAudioEnemyVol, volumeFadeInTimer); @@ -4812,11 +4812,11 @@ void Audio_SetBgmEnemyVolume(f32 dist) { sAudioEnemyVol = ((350.0f - adjDist) * 127.0f) / 350.0f; Audio_SetVolScale(SEQ_PLAYER_BGM_SUB, 3, sAudioEnemyVol, 10); - if (D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 != NA_BGM_NATURE_AMBIENCE) { + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) { Audio_SetVolScale(SEQ_PLAYER_BGM_MAIN, 3, (0x7F - sAudioEnemyVol), 10); } } - if (D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 != NA_BGM_NATURE_AMBIENCE) { + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) { Audio_SplitBgmChannels(sAudioEnemyVol); } } @@ -4973,7 +4973,7 @@ void Audio_SetExtraFilter(u8 filter) { sAudioExtraFilter2 = filter; sAudioExtraFilter = filter; - if (D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 == NA_BGM_NATURE_AMBIENCE) { + if (gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_NATURE_AMBIENCE) { for (i = 0; i < 16; i++) { t = i; // CHAN_UPD_SCRIPT_IO (seq player 0, all channels, slot 6) @@ -5097,7 +5097,7 @@ void Audio_SetNatureAmbienceChannelIO(u8 channelIdxRange, u8 port, u8 val) { u8 lastChannelIdx; u8 channelIdx; - if ((D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 != NA_BGM_NATURE_AMBIENCE) && func_800FA11C(1, 0xF00000FF)) { + if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId != NA_BGM_NATURE_AMBIENCE) && func_800FA11C(1, 0xF00000FF)) { sAudioNatureFailed = true; return; } @@ -5159,8 +5159,8 @@ void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId) { u8 port; u8 val; - if ((D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254 == NA_BGM_DISABLED) || - !(sSeqFlags[((u8)D_8016E750[SEQ_PLAYER_BGM_MAIN].unk_254) & 0xFF] & 0x80)) { + if ((gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId == NA_BGM_DISABLED) || + !(sSeqFlags[((u8)gActiveSeqs[SEQ_PLAYER_BGM_MAIN].seqId) & 0xFF] & 0x80)) { Audio_StartNatureAmbienceSequence(sNatureAmbienceDataIO[natureAmbienceId].playerIO, sNatureAmbienceDataIO[natureAmbienceId].channelMask); @@ -5202,12 +5202,12 @@ void func_800F71BC(s32 arg0) { func_800F6C34(); func_800EE930(); Audio_ResetSfxChannelState(); - func_800FADF8(); + Audio_ResetActiveSequences(); Audio_ResetSounds(); } void func_800F7208(void) { - func_800FADF8(); + Audio_ResetActiveSequences(); Audio_QueueCmdS32(0xF2000000, 1); func_800F6C34(); Audio_ResetSfxChannelState(); diff --git a/soh/src/code/code_800F9280.c b/soh/src/code/code_800F9280.c index 4b519dc77..4c604ec26 100644 --- a/soh/src/code/code_800F9280.c +++ b/soh/src/code/code_800F9280.c @@ -12,9 +12,9 @@ typedef struct { #define GET_PLAYER_IDX(cmd) (cmd & 0xF000000) >> 24 Struct_8016E320 D_8016E320[4][5]; -u8 D_8016E348[4]; +u8 sNumSeqRequests[4]; u32 sAudioSeqCmds[0x100]; -unk_D_8016E750 D_8016E750[4]; +ActiveSequence gActiveSeqs[4]; u8 sSeqCmdWrPos = 0; u8 sSeqCmdRdPos = 0; @@ -51,33 +51,33 @@ void func_800F9280(u8 playerIdx, u8 seqId, u8 arg2, u16 fadeTimer) { (fadeTimer * (u16)gAudioContext.audioBufferParameters.updatesPerFrame) / 4); } - D_8016E750[playerIdx].unk_254 = seqId | (arg2 << 8); - D_8016E750[playerIdx].unk_256 = seqId | (arg2 << 8); + gActiveSeqs[playerIdx].seqId = seqId | (arg2 << 8); + gActiveSeqs[playerIdx].prevSeqId = seqId | (arg2 << 8); - if (D_8016E750[playerIdx].volCur != 1.0f) { - Audio_QueueCmdF32(0x41000000 | _SHIFTL(playerIdx, 16, 8), D_8016E750[playerIdx].volCur); + if (gActiveSeqs[playerIdx].volCur != 1.0f) { + Audio_QueueCmdF32(0x41000000 | _SHIFTL(playerIdx, 16, 8), gActiveSeqs[playerIdx].volCur); } - D_8016E750[playerIdx].unk_28 = 0; - D_8016E750[playerIdx].unk_18 = 0; - D_8016E750[playerIdx].unk_14 = 0; + gActiveSeqs[playerIdx].tempoTimer = 0; + gActiveSeqs[playerIdx].tempoOriginal = 0; + gActiveSeqs[playerIdx].tempoCmd = 0; for (i = 0; i < 0x10; i++) { - D_8016E750[playerIdx].unk_50[i].unk_00 = 1.0f; - D_8016E750[playerIdx].unk_50[i].unk_0C = 0; - D_8016E750[playerIdx].unk_50[i].unk_10 = 1.0f; - D_8016E750[playerIdx].unk_50[i].unk_1C = 0; + gActiveSeqs[playerIdx].channelData[i].volCur = 1.0f; + gActiveSeqs[playerIdx].channelData[i].volTimer = 0; + gActiveSeqs[playerIdx].channelData[i].freqScaleCur = 1.0f; + gActiveSeqs[playerIdx].channelData[i].freqScaleTimer = 0; } - D_8016E750[playerIdx].unk_250 = 0; - D_8016E750[playerIdx].unk_252 = 0; + gActiveSeqs[playerIdx].freqScaleChannelFlags = 0; + gActiveSeqs[playerIdx].volChannelFlags = 0; } } void func_800F9474(u8 playerIdx, u16 arg1) { Audio_QueueCmdS32(0x83000000 | ((u8)playerIdx << 16), (arg1 * (u16)gAudioContext.audioBufferParameters.updatesPerFrame) / 4); - D_8016E750[playerIdx].unk_254 = NA_BGM_DISABLED; + gActiveSeqs[playerIdx].seqId = NA_BGM_DISABLED; } typedef enum { @@ -133,7 +133,7 @@ void Audio_ProcessSeqCmd(u32 cmd) { seqId = cmd & 0xFF; seqArgs = (cmd & 0xFF00) >> 8; fadeTimer = (cmd & 0xFF0000) >> 13; - if ((D_8016E750[playerIdx].unk_260 == 0) && (seqArgs < 0x80)) { + if ((gActiveSeqs[playerIdx].isWaitingForFonts == 0) && (seqArgs < 0x80)) { func_800F9280(playerIdx, seqId, seqArgs, fadeTimer); } break; @@ -150,7 +150,7 @@ void Audio_ProcessSeqCmd(u32 cmd) { seqArgs = (cmd & 0xFF00) >> 8; fadeTimer = (cmd & 0xFF0000) >> 13; new_var = seqArgs; - for (i = 0; i < D_8016E348[playerIdx]; i++) { + for (i = 0; i < sNumSeqRequests[playerIdx]; i++) { if (D_8016E320[playerIdx][i].unk_0 == seqId) { if (i == 0) { func_800F9280(playerIdx, seqId, seqArgs, fadeTimer); @@ -159,18 +159,18 @@ void Audio_ProcessSeqCmd(u32 cmd) { } } - found = D_8016E348[playerIdx]; - for (i = 0; i < D_8016E348[playerIdx]; i++) { + found = sNumSeqRequests[playerIdx]; + for (i = 0; i < sNumSeqRequests[playerIdx]; i++) { if (D_8016E320[playerIdx][i].unk_1 <= new_var) { found = i; - i = D_8016E348[playerIdx]; // "break;" + i = sNumSeqRequests[playerIdx]; // "break;" } } - if (D_8016E348[playerIdx] < 5) { - D_8016E348[playerIdx]++; + if (sNumSeqRequests[playerIdx] < 5) { + sNumSeqRequests[playerIdx]++; } - for (i = D_8016E348[playerIdx] - 1; i != found; i--) { + for (i = sNumSeqRequests[playerIdx] - 1; i != found; i--) { D_8016E320[playerIdx][i].unk_1 = D_8016E320[playerIdx][i - 1].unk_1; D_8016E320[playerIdx][i].unk_0 = D_8016E320[playerIdx][i - 1].unk_0; } @@ -187,25 +187,25 @@ void Audio_ProcessSeqCmd(u32 cmd) { seqId = cmd & 0xFF; fadeTimer = (cmd & 0xFF0000) >> 13; - found = D_8016E348[playerIdx]; - for (i = 0; i < D_8016E348[playerIdx]; i++) { + found = sNumSeqRequests[playerIdx]; + for (i = 0; i < sNumSeqRequests[playerIdx]; i++) { if (D_8016E320[playerIdx][i].unk_0 == seqId) { found = i; - i = D_8016E348[playerIdx]; // "break;" + i = sNumSeqRequests[playerIdx]; // "break;" } } - if (found != D_8016E348[playerIdx]) { - for (i = found; i < D_8016E348[playerIdx] - 1; i++) { + if (found != sNumSeqRequests[playerIdx]) { + for (i = found; i < sNumSeqRequests[playerIdx] - 1; i++) { D_8016E320[playerIdx][i].unk_1 = D_8016E320[playerIdx][i + 1].unk_1; D_8016E320[playerIdx][i].unk_0 = D_8016E320[playerIdx][i + 1].unk_0; } - D_8016E348[playerIdx]--; + sNumSeqRequests[playerIdx]--; } if (found == 0) { func_800F9474(playerIdx, fadeTimer); - if (D_8016E348[playerIdx] != 0) { + if (sNumSeqRequests[playerIdx] != 0) { func_800F9280(playerIdx, D_8016E320[playerIdx][0].unk_0, D_8016E320[playerIdx][0].unk_1, fadeTimer); } } @@ -218,11 +218,11 @@ void Audio_ProcessSeqCmd(u32 cmd) { if (duration == 0) { duration++; } - D_8016E750[playerIdx].volTarget = (f32)val / 127.0f; - if (D_8016E750[playerIdx].volCur != D_8016E750[playerIdx].volTarget) { - D_8016E750[playerIdx].unk_08 = - (D_8016E750[playerIdx].volCur - D_8016E750[playerIdx].volTarget) / (f32)duration; - D_8016E750[playerIdx].unk_0C = duration; + gActiveSeqs[playerIdx].volTarget = (f32)val / 127.0f; + if (gActiveSeqs[playerIdx].volCur != gActiveSeqs[playerIdx].volTarget) { + gActiveSeqs[playerIdx].volStep = + (gActiveSeqs[playerIdx].volCur - gActiveSeqs[playerIdx].volTarget) / (f32)duration; + gActiveSeqs[playerIdx].volTimer = duration; } break; @@ -235,12 +235,12 @@ void Audio_ProcessSeqCmd(u32 cmd) { } freqScale = (f32)val / 1000.0f; for (i = 0; i < 16; i++) { - D_8016E750[playerIdx].unk_50[i].unk_14 = freqScale; - D_8016E750[playerIdx].unk_50[i].unk_1C = duration; - D_8016E750[playerIdx].unk_50[i].unk_18 = - (D_8016E750[playerIdx].unk_50[i].unk_10 - freqScale) / (f32)duration; + gActiveSeqs[playerIdx].channelData[i].freqScaleTarget = freqScale; + gActiveSeqs[playerIdx].channelData[i].freqScaleTimer = duration; + gActiveSeqs[playerIdx].channelData[i].freqScaleStep = + (gActiveSeqs[playerIdx].channelData[i].freqScaleCur - freqScale) / (f32)duration; } - D_8016E750[playerIdx].unk_250 = 0xFFFF; + gActiveSeqs[playerIdx].freqScaleChannelFlags = 0xFFFF; break; case 0xD: @@ -252,11 +252,11 @@ void Audio_ProcessSeqCmd(u32 cmd) { duration++; } freqScale = (f32)val / 1000.0f; - D_8016E750[playerIdx].unk_50[chanIdx].unk_14 = freqScale; - D_8016E750[playerIdx].unk_50[chanIdx].unk_18 = - (D_8016E750[playerIdx].unk_50[chanIdx].unk_10 - freqScale) / (f32)duration; - D_8016E750[playerIdx].unk_50[chanIdx].unk_1C = duration; - D_8016E750[playerIdx].unk_250 |= 1 << chanIdx; + gActiveSeqs[playerIdx].channelData[chanIdx].freqScaleTarget = freqScale; + gActiveSeqs[playerIdx].channelData[chanIdx].freqScaleStep = + (gActiveSeqs[playerIdx].channelData[chanIdx].freqScaleCur - freqScale) / (f32)duration; + gActiveSeqs[playerIdx].channelData[chanIdx].freqScaleTimer = duration; + gActiveSeqs[playerIdx].freqScaleChannelFlags |= 1 << chanIdx; break; case 0x6: @@ -267,13 +267,13 @@ void Audio_ProcessSeqCmd(u32 cmd) { if (duration == 0) { duration++; } - D_8016E750[playerIdx].unk_50[chanIdx].unk_04 = (f32)val / 127.0f; - if (D_8016E750[playerIdx].unk_50[chanIdx].unk_00 != D_8016E750[playerIdx].unk_50[chanIdx].unk_04) { - D_8016E750[playerIdx].unk_50[chanIdx].unk_08 = - (D_8016E750[playerIdx].unk_50[chanIdx].unk_00 - D_8016E750[playerIdx].unk_50[chanIdx].unk_04) / + gActiveSeqs[playerIdx].channelData[chanIdx].volTarget = (f32)val / 127.0f; + if (gActiveSeqs[playerIdx].channelData[chanIdx].volCur != gActiveSeqs[playerIdx].channelData[chanIdx].volTarget) { + gActiveSeqs[playerIdx].channelData[chanIdx].volStep = + (gActiveSeqs[playerIdx].channelData[chanIdx].volCur - gActiveSeqs[playerIdx].channelData[chanIdx].volTarget) / (f32)duration; - D_8016E750[playerIdx].unk_50[chanIdx].unk_0C = duration; - D_8016E750[playerIdx].unk_252 |= 1 << chanIdx; + gActiveSeqs[playerIdx].channelData[chanIdx].volTimer = duration; + gActiveSeqs[playerIdx].volChannelFlags |= 1 << chanIdx; } break; @@ -289,7 +289,7 @@ void Audio_ProcessSeqCmd(u32 cmd) { chanIdx = (cmd & 0xF00) >> 8; port = (cmd & 0xFF0000) >> 16; val = cmd & 0xFF; - if ((D_8016E750[playerIdx].unk_258 & (1 << chanIdx)) == 0) { + if ((gActiveSeqs[playerIdx].channelPortMask & (1 << chanIdx)) == 0) { Audio_QueueCmdS8(0x06000000 | _SHIFTL(playerIdx, 16, 8) | _SHIFTL(chanIdx, 8, 8) | _SHIFTL(port, 0, 8), val); } @@ -297,7 +297,7 @@ void Audio_ProcessSeqCmd(u32 cmd) { case 0x9: // set channel mask for command 0x8 - D_8016E750[playerIdx].unk_258 = cmd & 0xFFFF; + gActiveSeqs[playerIdx].channelPortMask = cmd & 0xFFFF; break; case 0xA: @@ -319,22 +319,22 @@ void Audio_ProcessSeqCmd(u32 cmd) { case 0xB: // update tempo - D_8016E750[playerIdx].unk_14 = cmd; + gActiveSeqs[playerIdx].tempoCmd = cmd; break; case 0xC: // start sequence with setup commands subOp = (cmd & 0xF00000) >> 20; if (subOp != 0xF) { - if (D_8016E750[playerIdx].unk_4D < 7) { - found = D_8016E750[playerIdx].unk_4D++; + if (gActiveSeqs[playerIdx].setupCmdNum < 7) { + found = gActiveSeqs[playerIdx].setupCmdNum++; if (found < 8) { - D_8016E750[playerIdx].unk_2C[found] = cmd; - D_8016E750[playerIdx].unk_4C = 2; + gActiveSeqs[playerIdx].setupCmd[found] = cmd; + gActiveSeqs[playerIdx].setupCmdTimer = 2; } } } else { - D_8016E750[playerIdx].unk_4D = 0; + gActiveSeqs[playerIdx].setupCmdNum = 0; } break; @@ -400,7 +400,7 @@ u16 func_800FA0B4(u8 playerIdx) { if (!gAudioContext.seqPlayers[playerIdx].enabled) { return NA_BGM_DISABLED; } - return D_8016E750[playerIdx].unk_254; + return gActiveSeqs[playerIdx].seqId; } s32 func_800FA11C(u32 arg0, u32 arg1) { @@ -416,17 +416,17 @@ s32 func_800FA11C(u32 arg0, u32 arg1) { } void func_800FA174(u8 playerIdx) { - D_8016E348[playerIdx] = 0; + sNumSeqRequests[playerIdx] = 0; } void func_800FA18C(u8 playerIdx, u8 arg1) { u8 i; - for (i = 0; i < D_8016E750[playerIdx].unk_4D; i++) { - u8 unkb = (D_8016E750[playerIdx].unk_2C[i] & 0xF00000) >> 20; + for (i = 0; i < gActiveSeqs[playerIdx].setupCmdNum; i++) { + u8 unkb = (gActiveSeqs[playerIdx].setupCmd[i] & 0xF00000) >> 20; if (unkb == arg1) { - D_8016E750[playerIdx].unk_2C[i] = 0xFF000000; + gActiveSeqs[playerIdx].setupCmd[i] = 0xFF000000; } } } @@ -435,14 +435,14 @@ void Audio_SetVolScale(u8 playerIdx, u8 scaleIdx, u8 targetVol, u8 volFadeTimer) f32 volScale; u8 i; - D_8016E750[playerIdx].volScales[scaleIdx] = targetVol & 0x7F; + gActiveSeqs[playerIdx].volScales[scaleIdx] = targetVol & 0x7F; if (volFadeTimer != 0) { - D_8016E750[playerIdx].fadeVolUpdate = 1; - D_8016E750[playerIdx].volFadeTimer = volFadeTimer; + gActiveSeqs[playerIdx].fadeVolUpdate = 1; + gActiveSeqs[playerIdx].volFadeTimer = volFadeTimer; } else { for (i = 0, volScale = 1.0f; i < 4; i++) { - volScale *= D_8016E750[playerIdx].volScales[i] / 127.0f; + volScale *= gActiveSeqs[playerIdx].volScales[i] / 127.0f; } Audio_SetVolScaleNow(playerIdx, volFadeTimer, volScale); @@ -468,41 +468,41 @@ void func_800FA3DC(void) { u8 k; for (playerIdx = 0; playerIdx < 4; playerIdx++) { - if (D_8016E750[playerIdx].unk_260 != 0) { + if (gActiveSeqs[playerIdx].isWaitingForFonts != 0) { switch (func_800E5E20(&dummy)) { case 1: case 2: case 3: case 4: - D_8016E750[playerIdx].unk_260 = 0; - Audio_ProcessSeqCmd(D_8016E750[playerIdx].unk_25C); + gActiveSeqs[playerIdx].isWaitingForFonts = 0; + Audio_ProcessSeqCmd(gActiveSeqs[playerIdx].startSeqCmd); break; } } - if (D_8016E750[playerIdx].fadeVolUpdate) { + if (gActiveSeqs[playerIdx].fadeVolUpdate) { phi_f0 = 1.0f; for (j = 0; j < 4; j++) { - phi_f0 *= (D_8016E750[playerIdx].volScales[j] / 127.0f); + phi_f0 *= (gActiveSeqs[playerIdx].volScales[j] / 127.0f); } - Audio_SeqCmd4(playerIdx, D_8016E750[playerIdx].volFadeTimer, (u8)(phi_f0 * 127.0f)); - D_8016E750[playerIdx].fadeVolUpdate = 0; + Audio_SeqCmd4(playerIdx, gActiveSeqs[playerIdx].volFadeTimer, (u8)(phi_f0 * 127.0f)); + gActiveSeqs[playerIdx].fadeVolUpdate = 0; } - if (D_8016E750[playerIdx].unk_0C != 0) { - D_8016E750[playerIdx].unk_0C--; + if (gActiveSeqs[playerIdx].volTimer != 0) { + gActiveSeqs[playerIdx].volTimer--; - if (D_8016E750[playerIdx].unk_0C != 0) { - D_8016E750[playerIdx].volCur = D_8016E750[playerIdx].volCur - D_8016E750[playerIdx].unk_08; + if (gActiveSeqs[playerIdx].volTimer != 0) { + gActiveSeqs[playerIdx].volCur = gActiveSeqs[playerIdx].volCur - gActiveSeqs[playerIdx].volStep; } else { - D_8016E750[playerIdx].volCur = D_8016E750[playerIdx].volTarget; + gActiveSeqs[playerIdx].volCur = gActiveSeqs[playerIdx].volTarget; } - Audio_QueueCmdF32(0x41000000 | _SHIFTL(playerIdx, 16, 8), D_8016E750[playerIdx].volCur); + Audio_QueueCmdF32(0x41000000 | _SHIFTL(playerIdx, 16, 8), gActiveSeqs[playerIdx].volCur); } - if (D_8016E750[playerIdx].unk_14 != 0) { - temp_a1 = D_8016E750[playerIdx].unk_14; + if (gActiveSeqs[playerIdx].tempoCmd != 0) { + temp_a1 = gActiveSeqs[playerIdx].tempoCmd; phi_t0 = (temp_a1 & 0xFF0000) >> 15; phi_a2 = temp_a1 & 0xFFF; if (phi_t0 == 0) { @@ -525,8 +525,8 @@ void func_800FA3DC(void) { phi_a2 = temp_lo * (phi_a2 / 100.0f); break; case 4: - if (D_8016E750[playerIdx].unk_18) { - phi_a2 = D_8016E750[playerIdx].unk_18; + if (gActiveSeqs[playerIdx].tempoOriginal) { + phi_a2 = gActiveSeqs[playerIdx].tempoOriginal; } else { phi_a2 = temp_lo; } @@ -537,71 +537,71 @@ void func_800FA3DC(void) { phi_a2 = 300; } - if (D_8016E750[playerIdx].unk_18 == 0) { - D_8016E750[playerIdx].unk_18 = temp_lo; + if (gActiveSeqs[playerIdx].tempoOriginal == 0) { + gActiveSeqs[playerIdx].tempoOriginal = temp_lo; } - D_8016E750[playerIdx].unk_20 = phi_a2; - D_8016E750[playerIdx].unk_1C = gAudioContext.seqPlayers[playerIdx].tempo / 0x30; - D_8016E750[playerIdx].unk_24 = (D_8016E750[playerIdx].unk_1C - D_8016E750[playerIdx].unk_20) / phi_t0; - D_8016E750[playerIdx].unk_28 = phi_t0; - D_8016E750[playerIdx].unk_14 = 0; + gActiveSeqs[playerIdx].tempoTarget = phi_a2; + gActiveSeqs[playerIdx].tempoCur = gAudioContext.seqPlayers[playerIdx].tempo / 0x30; + gActiveSeqs[playerIdx].tempoStep = (gActiveSeqs[playerIdx].tempoCur - gActiveSeqs[playerIdx].tempoTarget) / phi_t0; + gActiveSeqs[playerIdx].tempoTimer = phi_t0; + gActiveSeqs[playerIdx].tempoCmd = 0; } } - if (D_8016E750[playerIdx].unk_28 != 0) { - D_8016E750[playerIdx].unk_28--; - if (D_8016E750[playerIdx].unk_28 != 0) { - D_8016E750[playerIdx].unk_1C = D_8016E750[playerIdx].unk_1C - D_8016E750[playerIdx].unk_24; + if (gActiveSeqs[playerIdx].tempoTimer != 0) { + gActiveSeqs[playerIdx].tempoTimer--; + if (gActiveSeqs[playerIdx].tempoTimer != 0) { + gActiveSeqs[playerIdx].tempoCur = gActiveSeqs[playerIdx].tempoCur - gActiveSeqs[playerIdx].tempoStep; } else { - D_8016E750[playerIdx].unk_1C = D_8016E750[playerIdx].unk_20; + gActiveSeqs[playerIdx].tempoCur = gActiveSeqs[playerIdx].tempoTarget; } // set tempo - Audio_QueueCmdS32(0x47000000 | _SHIFTL(playerIdx, 16, 8), D_8016E750[playerIdx].unk_1C); + Audio_QueueCmdS32(0x47000000 | _SHIFTL(playerIdx, 16, 8), gActiveSeqs[playerIdx].tempoCur); } - if (D_8016E750[playerIdx].unk_252 != 0) { + if (gActiveSeqs[playerIdx].volChannelFlags != 0) { for (k = 0; k < 0x10; k++) { - if (D_8016E750[playerIdx].unk_50[k].unk_0C != 0) { - D_8016E750[playerIdx].unk_50[k].unk_0C--; - if (D_8016E750[playerIdx].unk_50[k].unk_0C != 0) { - D_8016E750[playerIdx].unk_50[k].unk_00 -= D_8016E750[playerIdx].unk_50[k].unk_08; + if (gActiveSeqs[playerIdx].channelData[k].volTimer != 0) { + gActiveSeqs[playerIdx].channelData[k].volTimer--; + if (gActiveSeqs[playerIdx].channelData[k].volTimer != 0) { + gActiveSeqs[playerIdx].channelData[k].volCur -= gActiveSeqs[playerIdx].channelData[k].volStep; } else { - D_8016E750[playerIdx].unk_50[k].unk_00 = D_8016E750[playerIdx].unk_50[k].unk_04; - D_8016E750[playerIdx].unk_252 ^= (1 << k); + gActiveSeqs[playerIdx].channelData[k].volCur = gActiveSeqs[playerIdx].channelData[k].volTarget; + gActiveSeqs[playerIdx].volChannelFlags ^= (1 << k); } // CHAN_UPD_VOL_SCALE (playerIdx = seq, k = chan) Audio_QueueCmdF32(0x01000000 | _SHIFTL(playerIdx, 16, 8) | _SHIFTL(k, 8, 8), - D_8016E750[playerIdx].unk_50[k].unk_00); + gActiveSeqs[playerIdx].channelData[k].volCur); } } } - if (D_8016E750[playerIdx].unk_250 != 0) { + if (gActiveSeqs[playerIdx].freqScaleChannelFlags != 0) { for (k = 0; k < 0x10; k++) { - if (D_8016E750[playerIdx].unk_50[k].unk_1C != 0) { - D_8016E750[playerIdx].unk_50[k].unk_1C--; - if (D_8016E750[playerIdx].unk_50[k].unk_1C != 0) { - D_8016E750[playerIdx].unk_50[k].unk_10 -= D_8016E750[playerIdx].unk_50[k].unk_18; + if (gActiveSeqs[playerIdx].channelData[k].freqScaleTimer != 0) { + gActiveSeqs[playerIdx].channelData[k].freqScaleTimer--; + if (gActiveSeqs[playerIdx].channelData[k].freqScaleTimer != 0) { + gActiveSeqs[playerIdx].channelData[k].freqScaleCur -= gActiveSeqs[playerIdx].channelData[k].freqScaleStep; } else { - D_8016E750[playerIdx].unk_50[k].unk_10 = D_8016E750[playerIdx].unk_50[k].unk_14; - D_8016E750[playerIdx].unk_250 ^= (1 << k); + gActiveSeqs[playerIdx].channelData[k].freqScaleCur = gActiveSeqs[playerIdx].channelData[k].freqScaleTarget; + gActiveSeqs[playerIdx].freqScaleChannelFlags ^= (1 << k); } // CHAN_UPD_FREQ_SCALE Audio_QueueCmdF32(0x04000000 | _SHIFTL(playerIdx, 16, 8) | _SHIFTL(k, 8, 8), - D_8016E750[playerIdx].unk_50[k].unk_10); + gActiveSeqs[playerIdx].channelData[k].freqScaleCur); } } } - if (D_8016E750[playerIdx].unk_4D != 0) { + if (gActiveSeqs[playerIdx].setupCmdNum != 0) { if (func_800FA11C(0xF0000000, 0xF0000000) == 0) { - D_8016E750[playerIdx].unk_4D = 0; + gActiveSeqs[playerIdx].setupCmdNum = 0; return; } - if (D_8016E750[playerIdx].unk_4C != 0) { - D_8016E750[playerIdx].unk_4C--; + if (gActiveSeqs[playerIdx].setupCmdTimer != 0) { + gActiveSeqs[playerIdx].setupCmdTimer--; continue; } @@ -609,28 +609,28 @@ void func_800FA3DC(void) { continue; } - for (j = 0; j < D_8016E750[playerIdx].unk_4D; j++) { - temp_a0 = (D_8016E750[playerIdx].unk_2C[j] & 0x00F00000) >> 20; - temp_s1 = (D_8016E750[playerIdx].unk_2C[j] & 0x000F0000) >> 16; - temp_s0_3 = (D_8016E750[playerIdx].unk_2C[j] & 0xFF00) >> 8; - temp_a3_3 = D_8016E750[playerIdx].unk_2C[j] & 0xFF; + for (j = 0; j < gActiveSeqs[playerIdx].setupCmdNum; j++) { + temp_a0 = (gActiveSeqs[playerIdx].setupCmd[j] & 0x00F00000) >> 20; + temp_s1 = (gActiveSeqs[playerIdx].setupCmd[j] & 0x000F0000) >> 16; + temp_s0_3 = (gActiveSeqs[playerIdx].setupCmd[j] & 0xFF00) >> 8; + temp_a3_3 = gActiveSeqs[playerIdx].setupCmd[j] & 0xFF; switch (temp_a0) { case 0: Audio_SetVolScale(temp_s1, 1, 0x7F, temp_a3_3); break; case 7: - if (D_8016E348[playerIdx] == temp_a3_3) { + if (sNumSeqRequests[playerIdx] == temp_a3_3) { Audio_SetVolScale(temp_s1, 1, 0x7F, temp_s0_3); } break; case 1: - Audio_SeqCmd3(playerIdx, D_8016E750[playerIdx].unk_254); + Audio_SeqCmd3(playerIdx, gActiveSeqs[playerIdx].seqId); break; case 2: - Audio_StartSeq(temp_s1, 1, D_8016E750[temp_s1].unk_254); - D_8016E750[temp_s1].fadeVolUpdate = 1; - D_8016E750[temp_s1].volScales[1] = 0x7F; + Audio_StartSeq(temp_s1, 1, gActiveSeqs[temp_s1].seqId); + gActiveSeqs[temp_s1].fadeVolUpdate = 1; + gActiveSeqs[temp_s1].volScales[1] = 0x7F; break; case 3: Audio_SeqCmdB30(temp_s1, temp_s0_3, temp_a3_3); @@ -639,13 +639,13 @@ void func_800FA3DC(void) { Audio_SeqCmdB40(temp_s1, temp_a3_3, 0); break; case 5: - temp_v1 = D_8016E750[playerIdx].unk_2C[j] & 0xFFFF; - Audio_StartSeq(temp_s1, D_8016E750[temp_s1].unk_4E, temp_v1); + temp_v1 = gActiveSeqs[playerIdx].setupCmd[j] & 0xFFFF; + Audio_StartSeq(temp_s1, gActiveSeqs[temp_s1].setupFadeTimer, temp_v1); Audio_SetVolScale(temp_s1, 1, 0x7F, 0); - D_8016E750[temp_s1].unk_4E = 0; + gActiveSeqs[temp_s1].setupFadeTimer = 0; break; case 6: - D_8016E750[playerIdx].unk_4E = temp_s0_3; + gActiveSeqs[playerIdx].setupFadeTimer = temp_s0_3; break; case 8: Audio_SetVolScale(temp_s1, temp_s0_3, 0x7F, temp_a3_3); @@ -662,7 +662,7 @@ void func_800FA3DC(void) { } break; case 9: - temp_v1 = D_8016E750[playerIdx].unk_2C[j] & 0xFFFF; + temp_v1 = gActiveSeqs[playerIdx].setupCmd[j] & 0xFFFF; Audio_SeqCmdA(temp_s1, temp_v1); break; case 10: @@ -671,7 +671,7 @@ void func_800FA3DC(void) { } } - D_8016E750[playerIdx].unk_4D = 0; + gActiveSeqs[playerIdx].setupCmdNum = 0; } } } @@ -695,26 +695,29 @@ u8 func_800FAD34(void) { return D_80133418; } -void func_800FADF8(void) { - u8 playerIdx, j; - - for (playerIdx = 0; playerIdx < 4; playerIdx++) { - D_8016E348[playerIdx] = 0; - D_8016E750[playerIdx].unk_254 = NA_BGM_DISABLED; - D_8016E750[playerIdx].unk_256 = NA_BGM_DISABLED; - D_8016E750[playerIdx].unk_28 = 0; - D_8016E750[playerIdx].unk_18 = 0; - D_8016E750[playerIdx].unk_14 = 0; - D_8016E750[playerIdx].unk_258 = 0; - D_8016E750[playerIdx].unk_4D = 0; - D_8016E750[playerIdx].unk_4E = 0; - D_8016E750[playerIdx].unk_250 = 0; - D_8016E750[playerIdx].unk_252 = 0; - for (j = 0; j < 4; j++) { - D_8016E750[playerIdx].volScales[j] = 0x7F; +void Audio_ResetActiveSequences(void) { + u8 seqPlayerIndex; + u8 scaleIndex; + + for (seqPlayerIndex = 0; seqPlayerIndex < 4; seqPlayerIndex++) { + sNumSeqRequests[seqPlayerIndex] = 0; + + gActiveSeqs[seqPlayerIndex].seqId = NA_BGM_DISABLED; + gActiveSeqs[seqPlayerIndex].prevSeqId = NA_BGM_DISABLED; + gActiveSeqs[seqPlayerIndex].tempoTimer = 0; + gActiveSeqs[seqPlayerIndex].tempoOriginal = 0; + gActiveSeqs[seqPlayerIndex].tempoCmd = 0; + gActiveSeqs[seqPlayerIndex].channelPortMask = 0; + gActiveSeqs[seqPlayerIndex].setupCmdNum = 0; + gActiveSeqs[seqPlayerIndex].setupFadeTimer = 0; + gActiveSeqs[seqPlayerIndex].freqScaleChannelFlags = 0; + gActiveSeqs[seqPlayerIndex].volChannelFlags = 0; + for (scaleIndex = 0; scaleIndex < 4; scaleIndex++) { + gActiveSeqs[seqPlayerIndex].volScales[scaleIndex] = 0x7F; } - D_8016E750[playerIdx].volFadeTimer = 1; - D_8016E750[playerIdx].fadeVolUpdate = 1; + + gActiveSeqs[seqPlayerIndex].volFadeTimer = 1; + gActiveSeqs[seqPlayerIndex].fadeVolUpdate = true; } } @@ -722,12 +725,12 @@ void func_800FAEB4(void) { u8 playerIdx, j; for (playerIdx = 0; playerIdx < 4; playerIdx++) { - D_8016E750[playerIdx].volCur = 1.0f; - D_8016E750[playerIdx].unk_0C = 0; - D_8016E750[playerIdx].fadeVolUpdate = 0; + gActiveSeqs[playerIdx].volCur = 1.0f; + gActiveSeqs[playerIdx].volTimer = 0; + gActiveSeqs[playerIdx].fadeVolUpdate = 0; for (j = 0; j < 4; j++) { - D_8016E750[playerIdx].volScales[j] = 0x7F; + gActiveSeqs[playerIdx].volScales[j] = 0x7F; } } - func_800FADF8(); + Audio_ResetActiveSequences(); } diff --git a/soh/src/code/z_actor.c b/soh/src/code/z_actor.c index 3b68f1211..cd17e1756 100644 --- a/soh/src/code/z_actor.c +++ b/soh/src/code/z_actor.c @@ -662,26 +662,32 @@ s32 Flags_GetSwitch(PlayState* play, s32 flag) { * Sets current scene switch flag. */ void Flags_SetSwitch(PlayState* play, s32 flag) { - lusprintf(__FILE__, __LINE__, 2, "Switch Flag Set - %#x", flag); + u8 previouslyOff = !Flags_GetSwitch(play, flag); if (flag < 0x20) { play->actorCtx.flags.swch |= (1 << flag); } else { play->actorCtx.flags.tempSwch |= (1 << (flag - 0x20)); } - GameInteractor_ExecuteOnSceneFlagSet(play->sceneNum, FLAG_SCENE_SWITCH, flag); + if (previouslyOff) { + LUSLOG_INFO("Switch Flag Set - %#x", flag); + GameInteractor_ExecuteOnSceneFlagSet(play->sceneNum, FLAG_SCENE_SWITCH, flag); + } } /** * Unsets current scene switch flag. */ void Flags_UnsetSwitch(PlayState* play, s32 flag) { - lusprintf(__FILE__, __LINE__, 2, "Switch Flag Unset - %#x", flag); + u8 previouslyOn = Flags_GetSwitch(play, flag); if (flag < 0x20) { play->actorCtx.flags.swch &= ~(1 << flag); } else { play->actorCtx.flags.tempSwch &= ~(1 << (flag - 0x20)); } - GameInteractor_ExecuteOnSceneFlagUnset(play->sceneNum, FLAG_SCENE_SWITCH, flag); + if (previouslyOn) { + LUSLOG_INFO("Switch Flag Unset - %#x", flag); + GameInteractor_ExecuteOnSceneFlagUnset(play->sceneNum, FLAG_SCENE_SWITCH, flag); + } } /** @@ -728,9 +734,12 @@ s32 Flags_GetTreasure(PlayState* play, s32 flag) { * Sets current scene chest flag. */ void Flags_SetTreasure(PlayState* play, s32 flag) { - lusprintf(__FILE__, __LINE__, 2, "Treasure Flag Set - %#x", flag); + u8 previouslyOff = !Flags_GetTreasure(play, flag); play->actorCtx.flags.chest |= (1 << flag); - GameInteractor_ExecuteOnSceneFlagSet(play->sceneNum, FLAG_SCENE_TREASURE, flag); + if (previouslyOff) { + LUSLOG_INFO("Treasure Flag Set - %#x", flag); + GameInteractor_ExecuteOnSceneFlagSet(play->sceneNum, FLAG_SCENE_TREASURE, flag); + } } /** @@ -744,16 +753,24 @@ s32 Flags_GetClear(PlayState* play, s32 flag) { * Sets current scene clear flag. */ void Flags_SetClear(PlayState* play, s32 flag) { + u8 previouslyOff = !Flags_GetClear(play, flag); play->actorCtx.flags.clear |= (1 << flag); - GameInteractor_ExecuteOnSceneFlagSet(play->sceneNum, FLAG_SCENE_CLEAR, flag); + if (previouslyOff) { + LUSLOG_INFO("Clear Flag Set - %#x", flag); + GameInteractor_ExecuteOnSceneFlagSet(play->sceneNum, FLAG_SCENE_CLEAR, flag); + } } /** * Unsets current scene clear flag. */ void Flags_UnsetClear(PlayState* play, s32 flag) { + u8 previouslyOn = Flags_GetClear(play, flag); play->actorCtx.flags.clear &= ~(1 << flag); - GameInteractor_ExecuteOnSceneFlagUnset(play->sceneNum, FLAG_SCENE_CLEAR, flag); + if (previouslyOn) { + LUSLOG_INFO("Clear Flag Unset - %#x", flag); + GameInteractor_ExecuteOnSceneFlagUnset(play->sceneNum, FLAG_SCENE_CLEAR, flag); + } } /** @@ -792,7 +809,7 @@ s32 Flags_GetCollectible(PlayState* play, s32 flag) { * Sets current scene collectible flag. */ void Flags_SetCollectible(PlayState* play, s32 flag) { - lusprintf(__FILE__, __LINE__, 2, "Collectible Flag Set - %#x", flag); + u8 previouslyOff = !Flags_GetCollectible(play, flag); if (flag != 0) { if (flag < 0x20) { play->actorCtx.flags.collect |= (1 << flag); @@ -800,7 +817,10 @@ void Flags_SetCollectible(PlayState* play, s32 flag) { play->actorCtx.flags.tempCollect |= (1 << (flag - 0x20)); } } - GameInteractor_ExecuteOnSceneFlagSet(play->sceneNum, FLAG_SCENE_COLLECTIBLE, flag); + if (previouslyOff) { + LUSLOG_INFO("Collectible Flag Set - %#x", flag); + GameInteractor_ExecuteOnSceneFlagSet(play->sceneNum, FLAG_SCENE_COLLECTIBLE, flag); + } } void func_8002CDE4(PlayState* play, TitleCardContext* titleCtx) { @@ -4723,16 +4743,24 @@ s32 Flags_GetEventChkInf(s32 flag) { * Sets "eventChkInf" flag. */ void Flags_SetEventChkInf(s32 flag) { + u8 previouslyOff = !Flags_GetEventChkInf(flag); gSaveContext.eventChkInf[flag >> 4] |= (1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagSet(FLAG_EVENT_CHECK_INF, flag); + if (previouslyOff) { + LUSLOG_INFO("EventChkInf Flag Set - %#x", flag); + GameInteractor_ExecuteOnFlagSet(FLAG_EVENT_CHECK_INF, flag); + } } /** * Unsets "eventChkInf" flag. */ void Flags_UnsetEventChkInf(s32 flag) { + u8 previouslyOn = Flags_GetEventChkInf(flag); gSaveContext.eventChkInf[flag >> 4] &= ~(1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagUnset(FLAG_EVENT_CHECK_INF, flag); + if (previouslyOn) { + LUSLOG_INFO("EventChkInf Flag Unset - %#x", flag); + GameInteractor_ExecuteOnFlagUnset(FLAG_EVENT_CHECK_INF, flag); + } } /** @@ -4746,16 +4774,24 @@ s32 Flags_GetItemGetInf(s32 flag) { * Sets "itemGetInf" flag. */ void Flags_SetItemGetInf(s32 flag) { + u8 previouslyOff = !Flags_GetItemGetInf(flag); gSaveContext.itemGetInf[flag >> 4] |= (1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagSet(FLAG_ITEM_GET_INF, flag); + if (previouslyOff) { + LUSLOG_INFO("ItemGetInf Flag Set - %#x", flag); + GameInteractor_ExecuteOnFlagSet(FLAG_ITEM_GET_INF, flag); + } } /** * Unsets "itemGetInf" flag. */ void Flags_UnsetItemGetInf(s32 flag) { + u8 previouslyOn = Flags_GetItemGetInf(flag); gSaveContext.itemGetInf[flag >> 4] &= ~(1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagUnset(FLAG_ITEM_GET_INF, flag); + if (previouslyOn) { + LUSLOG_INFO("ItemGetInf Flag Unset - %#x", flag); + GameInteractor_ExecuteOnFlagUnset(FLAG_ITEM_GET_INF, flag); + } } /** @@ -4769,16 +4805,24 @@ s32 Flags_GetInfTable(s32 flag) { * Sets "infTable" flag. */ void Flags_SetInfTable(s32 flag) { + u8 previouslyOff = !Flags_GetInfTable(flag); gSaveContext.infTable[flag >> 4] |= (1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagSet(FLAG_INF_TABLE, flag); + if (previouslyOff) { + LUSLOG_INFO("InfTable Flag Set - %#x", flag); + GameInteractor_ExecuteOnFlagSet(FLAG_INF_TABLE, flag); + } } /** * Unsets "infTable" flag. */ void Flags_UnsetInfTable(s32 flag) { + u8 previouslyOn = Flags_GetInfTable(flag); gSaveContext.infTable[flag >> 4] &= ~(1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagUnset(FLAG_INF_TABLE, flag); + if (previouslyOn) { + LUSLOG_INFO("InfTable Flag Unset - %#x", flag); + GameInteractor_ExecuteOnFlagUnset(FLAG_INF_TABLE, flag); + } } /** @@ -4792,16 +4836,24 @@ s32 Flags_GetEventInf(s32 flag) { * Sets "eventInf" flag. */ void Flags_SetEventInf(s32 flag) { + u8 previouslyOff = !Flags_GetEventInf(flag); gSaveContext.eventInf[flag >> 4] |= (1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagSet(FLAG_EVENT_INF, flag); + if (previouslyOff) { + LUSLOG_INFO("EventInf Flag Set - %#x", flag); + GameInteractor_ExecuteOnFlagSet(FLAG_EVENT_INF, flag); + } } /** * Unsets "eventInf" flag. */ void Flags_UnsetEventInf(s32 flag) { + u8 previouslyOn = Flags_GetEventInf(flag); gSaveContext.eventInf[flag >> 4] &= ~(1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagUnset(FLAG_EVENT_INF, flag); + if (previouslyOn) { + LUSLOG_INFO("EventInf Flag Unset - %#x", flag); + GameInteractor_ExecuteOnFlagUnset(FLAG_EVENT_INF, flag); + } } /** @@ -4815,16 +4867,24 @@ s32 Flags_GetRandomizerInf(RandomizerInf flag) { * Sets "randomizerInf" flag. */ void Flags_SetRandomizerInf(RandomizerInf flag) { + u8 previouslyOff = !Flags_GetRandomizerInf(flag); gSaveContext.randomizerInf[flag >> 4] |= (1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagSet(FLAG_RANDOMIZER_INF, flag); + if (previouslyOff) { + LUSLOG_INFO("RandomizerInf Flag Set - %#x", flag); + GameInteractor_ExecuteOnFlagSet(FLAG_RANDOMIZER_INF, flag); + } } /** * Unsets "randomizerInf" flag. */ void Flags_UnsetRandomizerInf(RandomizerInf flag) { + u8 previouslyOn = Flags_GetRandomizerInf(flag); gSaveContext.randomizerInf[flag >> 4] &= ~(1 << (flag & 0xF)); - GameInteractor_ExecuteOnFlagUnset(FLAG_RANDOMIZER_INF, flag); + if (previouslyOn) { + LUSLOG_INFO("RandomizerInf Flag Unset - %#x", flag); + GameInteractor_ExecuteOnFlagUnset(FLAG_RANDOMIZER_INF, flag); + } } u32 func_80035BFC(PlayState* play, s16 arg1) { diff --git a/soh/src/code/z_frame_advance.c b/soh/src/code/z_frame_advance.c index 930db59b3..e48bd0c35 100644 --- a/soh/src/code/z_frame_advance.c +++ b/soh/src/code/z_frame_advance.c @@ -18,9 +18,10 @@ s32 FrameAdvance_Update(FrameAdvanceContext* frameAdvCtx, Input* input) { frameAdvCtx->enabled = !frameAdvCtx->enabled; } - if (!frameAdvCtx->enabled || (CHECK_BTN_ALL(input->cur.button, BTN_Z) && + if (!frameAdvCtx->enabled || CVarGetInteger("gFrameAdvance", 0) || (CHECK_BTN_ALL(input->cur.button, BTN_Z) && (CHECK_BTN_ALL(input->press.button, BTN_R) || (CHECK_BTN_ALL(input->cur.button, BTN_R) && (++frameAdvCtx->timer >= 9))))) { + CVarClear("gFrameAdvance"); frameAdvCtx->timer = 0; return true; } |
