diff --git a/soh/include/z64audio.h b/soh/include/z64audio.h index 6b4613fff..0e602f9d8 100644 --- a/soh/include/z64audio.h +++ b/soh/include/z64audio.h @@ -26,6 +26,8 @@ extern char* fontMap[256]; +#define MAX_AUTHENTIC_SEQID 110 + typedef enum { /* 0 */ ADSR_STATE_DISABLED, /* 1 */ ADSR_STATE_INITIAL, diff --git a/soh/soh/Enhancements/sfx-editor/SfxEditor.h b/soh/soh/Enhancements/sfx-editor/SfxEditor.h index a9a856515..526cd41f9 100644 --- a/soh/soh/Enhancements/sfx-editor/SfxEditor.h +++ b/soh/soh/Enhancements/sfx-editor/SfxEditor.h @@ -7,7 +7,6 @@ void SfxEditor_AddSequence(char *otrPath, uint16_t seqNum); #endif #define INSTRUMENT_OFFSET 0x81 -#define MAX_AUTHENTIC_SEQID 110 enum SeqType { SEQ_NOSHUFFLE = 0, diff --git a/soh/src/code/audio_load.c b/soh/src/code/audio_load.c index 354119cb2..ad6310157 100644 --- a/soh/src/code/audio_load.c +++ b/soh/src/code/audio_load.c @@ -78,6 +78,8 @@ void* sUnusedHandler = NULL; s32 gAudioContextInitalized = false; char* sequenceMap[MAX_SEQUENCES]; +// A map of authentic sequence IDs to their cache policies, for use with sequence swapping. +u8 seqCachePolicyMap[MAX_AUTHENTIC_SEQID]; char* fontMap[256]; uintptr_t fontStart; @@ -569,15 +571,20 @@ s32 AudioLoad_SyncInitSeqPlayerInternal(s32 playerIdx, s32 seqId, s32 arg2) { s32 index; s32 numFonts; s32 fontId; + s8 authCachePolicy = -1; // since 0 is a valid cache policy value AudioSeq_SequencePlayerDisable(seqPlayer); fontId = 0xFF; if (gAudioContext.seqReplaced[playerIdx]) { + authCachePolicy = seqCachePolicyMap[seqId]; seqId = gAudioContext.seqToPlay[playerIdx]; } SequenceData seqData2 = ResourceMgr_LoadSeqByName(sequenceMap[seqId]); + if (authCachePolicy != -1) { + seqData2.cachePolicy = authCachePolicy; + } for (int i = 0; i < seqData2.numFonts; i++) { @@ -1316,6 +1323,7 @@ void AudioLoad_Init(void* heap, size_t heapSize) { strcpy(str, seqList[i]); sequenceMap[sDat.seqNumber] = str; + seqCachePolicyMap[sDat.seqNumber] = sDat.cachePolicy; } free(seqList);