Savestates, more AudioOcarina serialization (#6954)

This commit is contained in:
djevangelia
2026-07-22 15:48:10 +02:00
committed by GitHub
parent d62c5879aa
commit fb657cc5d5
2 changed files with 116 additions and 41 deletions
+4 -4
View File
@@ -59,7 +59,7 @@ extern "C" void Camera_SaveState(SaveStateCtx* ctx);
extern "C" void OnePointCutscene_SaveState(SaveStateCtx* ctx);
extern "C" void Environment_SaveState(SaveStateCtx* ctx);
extern "C" void MapExp_SaveState(SaveStateCtx* ctx);
extern "C" void AudioOca_SaveState(SaveStateCtx* ctx);
extern "C" void AudioOcarina_SaveState(SaveStateCtx* ctx);
extern "C" void MessagePAL_SaveState(SaveStateCtx* ctx);
static void SaveOverlayState(std::unique_ptr<uint8_t[]>& buf, void (*fn)(SaveStateCtx*)) {
@@ -112,7 +112,7 @@ typedef struct SaveStateInfo {
std::unique_ptr<uint8_t[]> onePointCutsceneState;
std::unique_ptr<uint8_t[]> environmentState;
std::unique_ptr<uint8_t[]> mapExpState;
std::unique_ptr<uint8_t[]> audioOcaState;
std::unique_ptr<uint8_t[]> audioOcarinaState;
std::unique_ptr<uint8_t[]> messagePalState;
// Overlay static data
@@ -249,7 +249,7 @@ void SaveState::SaveOverlayStaticData(void) {
SaveOverlayState(info->onePointCutsceneState, OnePointCutscene_SaveState);
SaveOverlayState(info->environmentState, Environment_SaveState);
SaveOverlayState(info->mapExpState, MapExp_SaveState);
SaveOverlayState(info->audioOcaState, AudioOca_SaveState);
SaveOverlayState(info->audioOcarinaState, AudioOcarina_SaveState);
SaveOverlayState(info->messagePalState, MessagePAL_SaveState);
SaveOverlayState(info->bgDdanKdState, BgDdanKd_SaveState);
SaveOverlayState(info->bgDodoagoState, BgDodoago_SaveState);
@@ -295,7 +295,7 @@ void SaveState::LoadOverlayStaticData(void) {
LoadOverlayState(info->onePointCutsceneState, OnePointCutscene_SaveState);
LoadOverlayState(info->environmentState, Environment_SaveState);
LoadOverlayState(info->mapExpState, MapExp_SaveState);
LoadOverlayState(info->audioOcaState, AudioOca_SaveState);
LoadOverlayState(info->audioOcarinaState, AudioOcarina_SaveState);
LoadOverlayState(info->messagePalState, MessagePAL_SaveState);
LoadOverlayState(info->bgDdanKdState, BgDdanKd_SaveState);
LoadOverlayState(info->bgDodoagoState, BgDodoago_SaveState);
+112 -37
View File
@@ -1313,44 +1313,119 @@ u32 sDebugPadPress; // decomp: debug only
s32 sAudioUpdateTaskStart; // decomp: debug only
s32 sAudioUpdateTaskEnd; // decomp: debug only
#define AUDIO_OCA_SHIP_SAVESTATE_FIELDS(F) \
F(sIsOcarinaInputEnabled) \
F(sOcarinaInstrumentId) \
F(sCurOcarinaPitch) \
F(sPrevOcarinaPitch) \
F(sCurOcarinaButtonIndex) \
F(sMusicStaffPrevPitch) \
F(sCurOcarinaBendFreq) \
F(sRelativeOcarinaVolume) \
F(sCurOcarinaBendIndex) \
F(sCurOcarinaVolume) \
F(sCurOcarinaVibrato) \
F(sPlaybackState) \
F(sOcarinaFlags) \
F(sPlaybackNoteTimer) \
F(sPlaybackNotePos) \
F(sPlaybackStaffPos) \
F(sOcarinaInputButtonCur) \
F(sOcarinaInputButtonStart) \
F(sOcarinaInputButtonPrev) \
F(sOcarinaInputButtonPress) \
F(D_8016BA1C) \
F(sCurOcarinaSongWithoutMusicStaff) \
F(sOcarinaWithoutMusicStaffPos) \
F(sOcarinaHasStartedSong) \
F(sFirstOcarinaSongIndex) \
F(sLastOcarinaSongIndex) \
F(sAvailOcarinaSongFlags) \
F(sStaffOcarinaPlayingPos) \
F(sMusicStaffPos) \
F(sMusicStaffCurHeldLength) \
F(sMusicStaffExpectedLength) \
F(sMusicStaffExpectedPitch) \
F(sScarecrowsLongSongSecondNote) \
F(sIsMalonSinging) \
F(sMalonSingingDist) \
#define AUDIOOCARINA_SHIP_SAVESTATE_FIELDS(F) \
F(sOcarinaSongNotes[OCARINA_SONG_MEMORY_GAME]) \
F(sOcarinaSongNotes[OCARINA_SONG_SCARECROW_SPAWN]) \
F(sOcaMemoryGameAppendPos) \
F(sOcaMemoryGameEndPos) \
F(D_801305B0) \
F(D_801305B4) \
F(D_801305B8) \
F(D_801305BC) \
F(D_801305C0) \
F(sAudioIncreasingTranspose) \
F(sPrevChargeLevel) \
F(sSfxSwordChargeFreq) \
F(sEnterGanonsTowerTimer) \
F(D_80130608) \
F(sAudioCutsceneFlag) \
F(sSpecReverb) \
F(sAudioEnvReverb) \
F(sAudioCodeReverb) \
F(sPrevSeqMode) \
F(sAudioEnemyDist) \
F(sAudioEnemyVol) \
F(sPrevMainBgmSeqId) \
F(sSeqResumePoint) \
F(sPrevSceneSeqId) \
F(sNumFramesStill) \
F(sNumFramesMoving) \
F(sAudioBaseFilter) \
F(sAudioExtraFilter) \
F(sAudioBaseFilter2) \
F(sAudioExtraFilter2) \
F(sSariaBgmPtr) \
F(D_80130650) \
F(D_8016B7A8) \
F(D_8016B7AC) \
F(D_8016B7B0) \
F(D_8016B7B4) \
F(sRiverFreqScaleLerp) \
F(sWaterfallFreqScaleLerp) \
F(D_8016B7D8) \
F(D_8016B7DC) \
F(D_8016B7E0) \
F(sRiverSoundMainBgmVol) \
F(sRiverSoundMainBgmCurrentVol) \
F(sRiverSoundMainBgmLower) \
F(sRiverSoundMainBgmRestore) \
F(sGanonsTowerVol) \
F(sSfxChannelState) \
F(sMalonSingingTimer) \
F(sMalonSingingDisabled) \
F(D_8016B9F3) \
F(sFanfareStartTimer) \
F(sFanfareSeqId) \
F(sRecordingState) \
F(sRecordSongPos) \
F(sOcarinaRecordTaskStart) \
F(sRecordOcarinaPitch) \
F(sRecordOcarinaVolume) \
F(sRecordOcarinaVibrato) \
F(sRecordOcarinaBendIndex) \
F(sRecordOcarinaButtonIndex) \
F(sPlayedOcarinaSongIndexPlusOne) \
F(sMusicStaffNumNotesPerTest) \
F(sOcarinaDropInputTimer) \
F(sPlayingStaff) \
F(sPlaybackStaff) \
F(sRecordingStaff) \
F(sNotePlaybackVolume) \
F(sNotePlaybackVibrato) \
F(sNotePlaybackBend) \
F(sRelativeNotePlaybackBend) \
F(sRelativeNotePlaybackVolume) \
F(sOcarinaPlaybackTaskStart) \
F(sPrevOcarinaWithMusicStaffFlags) \
F(sOcarinaUpdateTaskStart) \
F(sOcarinaInputStickAdj) \
F(sIsOcarinaInputEnabled) \
F(sOcarinaInstrumentId) \
F(sCurOcarinaPitch) \
F(sPrevOcarinaPitch) \
F(sCurOcarinaButtonIndex) \
F(sMusicStaffPrevPitch) \
F(sCurOcarinaBendFreq) \
F(sRelativeOcarinaVolume) \
F(sCurOcarinaBendIndex) \
F(sCurOcarinaVolume) \
F(sCurOcarinaVibrato) \
F(sPlaybackState) \
F(sOcarinaFlags) \
F(sPlaybackNoteTimer) \
F(sPlaybackNotePos) \
F(sPlaybackStaffPos) \
F(sOcarinaInputButtonCur) \
F(sOcarinaInputButtonStart) \
F(sOcarinaInputButtonPrev) \
F(sOcarinaInputButtonPress) \
F(D_8016BA1C) \
F(sCurOcarinaSongWithoutMusicStaff) \
F(sOcarinaWithoutMusicStaffPos) \
F(sOcarinaHasStartedSong) \
F(sFirstOcarinaSongIndex) \
F(sLastOcarinaSongIndex) \
F(sAvailOcarinaSongFlags) \
F(sStaffOcarinaPlayingPos) \
F(sMusicStaffPos) \
F(sMusicStaffCurHeldLength) \
F(sMusicStaffExpectedLength) \
F(sMusicStaffExpectedPitch) \
F(sScarecrowsLongSongSecondNote) \
F(sIsMalonSinging) \
F(sMalonSingingDist) \
F(sPlaybackPitch)
SHIP_SAVESTATE_DEFINE(AudioOca, AUDIO_OCA_SHIP_SAVESTATE_FIELDS)
SHIP_SAVESTATE_DEFINE(AudioOcarina, AUDIOOCARINA_SHIP_SAVESTATE_FIELDS)
void PadMgr_RequestPadData(PadMgr* padmgr, Input* inputs, s32 mode);