mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-04 15:04:31 +00:00
Match some audio functions (#896)
* cleanups * Improve Audio_SequencePlayerProcessSequence * cleanup * labeling * progress on func_800E5000 * func_800F6268 * func_800ECDF8 * Improve func_800F2464 * reorder variables * labelling * non-equivalent func_800EEA50 * minor doc * func_800E6590 * minor doc * Reformat abi.h * Very slight improvements * func_800DC384 * func_800E1618 * formatting Co-authored-by: zelda2774 <zelda2774@invalid>
This commit is contained in:
parent
1b1487a504
commit
a0d2cceeca
23 changed files with 1321 additions and 1813 deletions
|
@ -45,8 +45,8 @@ void Audio_ResetLoadStatus(void) {
|
|||
}
|
||||
|
||||
for (i = 0; i < 0x80; i++) {
|
||||
if (gAudioContext.seqLoadstatus[i] != 5) {
|
||||
gAudioContext.seqLoadstatus[i] = 0;
|
||||
if (gAudioContext.seqLoadStatus[i] != 5) {
|
||||
gAudioContext.seqLoadStatus[i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -207,7 +207,7 @@ void func_800DE4B0(s32 poolIdx) {
|
|||
switch (poolIdx) {
|
||||
case 0:
|
||||
loadedPool = &gAudioContext.seqLoadedPool;
|
||||
table = gAudioContext.seqLoadstatus;
|
||||
table = gAudioContext.seqLoadStatus;
|
||||
break;
|
||||
case 1:
|
||||
loadedPool = &gAudioContext.bankLoadedPool;
|
||||
|
@ -304,7 +304,7 @@ void* Audio_AllocBankOrSeq(s32 poolIdx, s32 size, s32 arg2, s32 id) {
|
|||
switch (poolIdx) {
|
||||
case 0:
|
||||
loadedPool = &gAudioContext.seqLoadedPool;
|
||||
table = gAudioContext.seqLoadstatus;
|
||||
table = gAudioContext.seqLoadStatus;
|
||||
break;
|
||||
case 1:
|
||||
loadedPool = &gAudioContext.bankLoadedPool;
|
||||
|
|
|
@ -74,19 +74,19 @@ void func_800E11F0(void) {
|
|||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_load/func_800E12DC.s")
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
void func_800E1618(s32 arg0) {
|
||||
SampleDmaReq* temp_s0;
|
||||
s32 i;
|
||||
s32 t2;
|
||||
s32 j;
|
||||
|
||||
gAudioContext.unk_288C = gAudioContext.unk_2874;
|
||||
gAudioContext.sampleDmaReqs =
|
||||
Audio_Alloc(&gAudioContext.notesAndBuffersPool,
|
||||
(gAudioContext.maxSimultaneousNotes * 0x40) * gAudioContext.audioBufferParameters.presetUnk4);
|
||||
t2 = gAudioContext.maxSimultaneousNotes * 3 * gAudioContext.audioBufferParameters.presetUnk4;
|
||||
4 * gAudioContext.maxSimultaneousNotes * sizeof(SampleDmaReq) * gAudioContext.audioBufferParameters.presetUnk4);
|
||||
t2 = 3 * gAudioContext.maxSimultaneousNotes * gAudioContext.audioBufferParameters.presetUnk4;
|
||||
for (i = 0; i < t2; i++) {
|
||||
SampleDmaReq* temp_s0 = &gAudioContext.sampleDmaReqs[gAudioContext.sampleDmaReqCnt];
|
||||
temp_s0 = &gAudioContext.sampleDmaReqs[gAudioContext.sampleDmaReqCnt];
|
||||
temp_s0->ramAddr = func_800DE2B0(&gAudioContext.notesAndBuffersPool, gAudioContext.unk_288C);
|
||||
if (temp_s0->ramAddr == NULL) {
|
||||
break;
|
||||
|
@ -115,8 +115,8 @@ void func_800E1618(s32 arg0) {
|
|||
gAudioContext.unk_2624 = gAudioContext.sampleDmaReqCnt;
|
||||
gAudioContext.unk_288C = gAudioContext.unk_2878;
|
||||
|
||||
for (i = 0; i < gAudioContext.maxSimultaneousNotes; i++) {
|
||||
SampleDmaReq* temp_s0 = &gAudioContext.sampleDmaReqs[gAudioContext.sampleDmaReqCnt];
|
||||
for (j = 0; j < gAudioContext.maxSimultaneousNotes; j++) {
|
||||
temp_s0 = &gAudioContext.sampleDmaReqs[gAudioContext.sampleDmaReqCnt];
|
||||
temp_s0->ramAddr = func_800DE2B0(&gAudioContext.notesAndBuffersPool, gAudioContext.unk_288C);
|
||||
if (temp_s0->ramAddr == NULL) {
|
||||
break;
|
||||
|
@ -132,9 +132,8 @@ void func_800E1618(s32 arg0) {
|
|||
}
|
||||
|
||||
for (i = gAudioContext.unk_2624; i < gAudioContext.sampleDmaReqCnt; i++) {
|
||||
SampleDmaReq* temp_s0 = &gAudioContext.sampleDmaReqs[i + gAudioContext.unk_2624];
|
||||
gAudioContext.unk_272C[i - gAudioContext.unk_2624] = gAudioContext.unk_2624;
|
||||
temp_s0->unk_0D = i - gAudioContext.unk_2624;
|
||||
gAudioContext.unk_272C[i - gAudioContext.unk_2624] = i;
|
||||
gAudioContext.sampleDmaReqs[i].unk_0D = i - gAudioContext.unk_2624;
|
||||
}
|
||||
|
||||
for (i = gAudioContext.sampleDmaReqCnt; i < 0x100; i++) {
|
||||
|
@ -144,9 +143,6 @@ void func_800E1618(s32 arg0) {
|
|||
gAudioContext.unk_282D = 0;
|
||||
gAudioContext.unk_282F = gAudioContext.sampleDmaReqCnt - gAudioContext.unk_2624;
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_load/func_800E1618.s")
|
||||
#endif
|
||||
|
||||
s32 Audio_IsBankLoadComplete(s32 bankId) {
|
||||
if (bankId == 0xFF) {
|
||||
|
@ -162,10 +158,10 @@ s32 Audio_IsBankLoadComplete(s32 bankId) {
|
|||
|
||||
s32 Audio_IsSeqLoadComplete(s32 seqId) {
|
||||
if (seqId == 0xFF) {
|
||||
return 1;
|
||||
} else if (gAudioContext.seqLoadstatus[seqId] >= 2) {
|
||||
return 1;
|
||||
} else if (gAudioContext.seqLoadstatus[Audio_GetTableIndex(SEQUENCE_TABLE, seqId)] >= 2) {
|
||||
return true;
|
||||
} else if (gAudioContext.seqLoadStatus[seqId] >= 2) {
|
||||
return true;
|
||||
} else if (gAudioContext.seqLoadStatus[Audio_GetTableIndex(SEQUENCE_TABLE, seqId)] >= 2) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
@ -191,8 +187,8 @@ void Audio_SetBankLoadStatus(s32 bankId, s32 status) {
|
|||
}
|
||||
|
||||
void Audio_SetSeqLoadStatus(s32 seqId, s32 status) {
|
||||
if ((seqId != 0xFF) && (gAudioContext.seqLoadstatus[seqId] != 5)) {
|
||||
gAudioContext.seqLoadstatus[seqId] = status;
|
||||
if ((seqId != 0xFF) && (gAudioContext.seqLoadStatus[seqId] != 5)) {
|
||||
gAudioContext.seqLoadStatus[seqId] = status;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -208,7 +204,7 @@ void func_800E1A78(s32 arg0, s32 arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
void Aduio_SetAudtabLoadstatus(s32 tabId, s32 status) {
|
||||
void Audio_SetAudtabLoadStatus(s32 tabId, s32 status) {
|
||||
if ((tabId != 0xFF) && (gAudioContext.audioTableLoadStatus[tabId] != 5)) {
|
||||
gAudioContext.audioTableLoadStatus[tabId] = status;
|
||||
}
|
||||
|
@ -451,7 +447,7 @@ u8* func_800E22C4(s32 seqId) {
|
|||
s32 pad;
|
||||
s32 sp20;
|
||||
|
||||
if (gAudioContext.seqLoadstatus[Audio_GetTableIndex(0, seqId)] == 1) {
|
||||
if (gAudioContext.seqLoadStatus[Audio_GetTableIndex(0, seqId)] == 1) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -472,7 +468,7 @@ u32 func_800E2338(u32 arg0, u32* arg1, s32 arg2) {
|
|||
audioTable = Audio_GetLoadTable(2);
|
||||
if (temp_v0 = func_800E27A4(2, temp_s0), temp_v0 != NULL) {
|
||||
if (gAudioContext.audioTableLoadStatus[temp_s0] != 1) {
|
||||
Aduio_SetAudtabLoadstatus(temp_s0, 2);
|
||||
Audio_SetAudtabLoadStatus(temp_s0, 2);
|
||||
}
|
||||
*arg1 = 0;
|
||||
return temp_v0;
|
||||
|
@ -829,7 +825,7 @@ void* Audio_AsyncLoadInner(s32 tableType, s32 arg1, s32 arg2, s32 arg3, OSMesgQu
|
|||
sp34 = Audio_GetTableIndex(tableType, arg1);
|
||||
switch (tableType) {
|
||||
case SEQUENCE_TABLE:
|
||||
if (gAudioContext.seqLoadstatus[sp34] == 1) {
|
||||
if (gAudioContext.seqLoadStatus[sp34] == 1) {
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
|
@ -991,9 +987,9 @@ void Audio_ContextInit(void* heap, u32 heapSize) {
|
|||
gAudioContext.rspTask[0].task.t.data_size = 0;
|
||||
gAudioContext.rspTask[1].task.t.data_size = 0;
|
||||
osCreateMesgQueue(&gAudioContext.unk_25E8, &gAudioContext.unk_2600, 1);
|
||||
osCreateMesgQueue(&gAudioContext.unk_1ED0, &gAudioContext.unk_1EE8, 0x40);
|
||||
osCreateMesgQueue(&gAudioContext.unk_1E20, &gAudioContext.unk_1E38, 0x10);
|
||||
osCreateMesgQueue(&gAudioContext.unk_1E78, &gAudioContext.unk_1E90, 0x10);
|
||||
osCreateMesgQueue(&gAudioContext.unk_1ED0, gAudioContext.unk_1EE8, 0x40);
|
||||
osCreateMesgQueue(&gAudioContext.unk_1E20, gAudioContext.unk_1E38, 0x10);
|
||||
osCreateMesgQueue(&gAudioContext.unk_1E78, gAudioContext.unk_1E90, 0x10);
|
||||
gAudioContext.sampleIoReqIdx = 0;
|
||||
gAudioContext.sampleDmaReqCnt = 0;
|
||||
gAudioContext.cartHandle = osCartRomInit();
|
||||
|
|
|
@ -121,7 +121,7 @@ void Audio_SequenceChannelInit(SequenceChannel* seqChannel) {
|
|||
seqChannel->largeNotes = false;
|
||||
seqChannel->bookOffset = 0;
|
||||
seqChannel->reverbBits.asByte = 0;
|
||||
seqChannel->changes.asByte = 0xff;
|
||||
seqChannel->changes.asByte = 0xFF;
|
||||
seqChannel->scriptState.depth = 0;
|
||||
seqChannel->newPan = 0x40;
|
||||
seqChannel->panChannelWeight = 0x80;
|
||||
|
@ -135,7 +135,7 @@ void Audio_SequenceChannelInit(SequenceChannel* seqChannel) {
|
|||
seqChannel->someOtherPriority = 1;
|
||||
seqChannel->delay = 0;
|
||||
seqChannel->adsr.envelope = gDefaultEnvelope;
|
||||
seqChannel->adsr.releaseRate = 0xf0;
|
||||
seqChannel->adsr.releaseRate = 0xF0;
|
||||
seqChannel->adsr.sustain = 0;
|
||||
seqChannel->vibratoRateTarget = 0x800;
|
||||
seqChannel->vibratoRateStart = 0x800;
|
||||
|
@ -200,7 +200,7 @@ s32 Audio_SeqChannelSetLayer(SequenceChannel* seqChannel, s32 layerIdx) {
|
|||
layer->freqScale = 1.0f;
|
||||
layer->unk_34 = 1.0f;
|
||||
layer->velocitySquare2 = 0.0f;
|
||||
layer->instOrWave = 0xff;
|
||||
layer->instOrWave = 0xFF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -287,7 +287,7 @@ void Audio_SequencePlayerDisableAsFinished(SequencePlayer* seqPlayer) {
|
|||
}
|
||||
|
||||
void Audio_SequencePlayerDisable(SequencePlayer* seqPlayer) {
|
||||
Audio_SequencePlayerDisableChannels(seqPlayer, 0xffff);
|
||||
Audio_SequencePlayerDisableChannels(seqPlayer, 0xFFFF);
|
||||
Audio_NotePoolClear(&seqPlayer->notePool);
|
||||
if (!seqPlayer->enabled) {
|
||||
return;
|
||||
|
@ -363,7 +363,7 @@ s16 Audio_M64ReadS16(M64ScriptState* state) {
|
|||
u16 Audio_M64ReadCompressedU16(M64ScriptState* state) {
|
||||
u16 ret = *(state->pc++);
|
||||
if (ret & 0x80) {
|
||||
ret = (ret << 8) & 0x7f00;
|
||||
ret = (ret << 8) & 0x7F00;
|
||||
ret = *(state->pc++) | ret;
|
||||
}
|
||||
return ret;
|
||||
|
@ -1640,9 +1640,9 @@ void Audio_SequencePlayerProcessSequence(SequencePlayer* seqPlayer) {
|
|||
case 0xCE:
|
||||
command = Audio_M64ReadU8(seqScript);
|
||||
if (command == 0) {
|
||||
seqScript->value = gAudioContext.audioRandom / 4;
|
||||
seqScript->value = (gAudioContext.audioRandom >> 2) & 0xFF;
|
||||
} else {
|
||||
seqScript->value = (gAudioContext.audioRandom / 4) % command;
|
||||
seqScript->value = (gAudioContext.audioRandom >> 2) % command;
|
||||
}
|
||||
break;
|
||||
case 0xCD: {
|
||||
|
|
|
@ -12,6 +12,8 @@ Acmd* func_800DDB64(Acmd* cmd, NoteSubEu* noteSubEu, NoteSynthesisState* synthSt
|
|||
Acmd* func_800DD6CC(Acmd* cmd, NoteSubEu* noteSubEu, NoteSynthesisState* synthState, s32 aiBufLen, u16, s32, s32);
|
||||
Acmd* func_800DD62C(Acmd* cmd, NoteSynthesisState* synthState, s32 count, u16 pitch, u16 inpDmem, s32 resampleFlags);
|
||||
extern s16 D_8012FBAA[];
|
||||
|
||||
// 4 nops, part of ucode_disas?
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_synthesis/pad_800DACB0.s")
|
||||
|
||||
void AudioSynth_InitNextRingBuf(s32 chunkSize, s32 bufIdx, s32 reverbIdx) {
|
||||
|
@ -512,29 +514,26 @@ Acmd* func_800DC2DC(Acmd* cmd, SynthesisReverb* reverb, s16 bufIdx) {
|
|||
return cmd;
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
Acmd* func_800DC384(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updateIdx) {
|
||||
NoteSubEu* phi_v0;
|
||||
u8 sp9C[88];
|
||||
u8 sp9C[0x5C];
|
||||
s16 phi_s2;
|
||||
s16 phi_s4;
|
||||
s32 t;
|
||||
s32 useReverb;
|
||||
SynthesisReverb* temp_t8;
|
||||
u8 t2;
|
||||
s32 useReverb;
|
||||
s32 t;
|
||||
s32 i;
|
||||
NoteSubEu* phi_v0;
|
||||
NoteSubEu* phi_v0_2;
|
||||
s32 unk14;
|
||||
|
||||
t = gAudioContext.maxSimultaneousNotes * updateIdx;
|
||||
phi_s2 = 0;
|
||||
if (gAudioContext.numSynthesisReverbs == 0) {
|
||||
for (i = 0; i < gAudioContext.maxSimultaneousNotes; i++) {
|
||||
phi_v0 = &gAudioContext.noteSubsEu[t + i];
|
||||
if (phi_v0->bitField0.s.enabled) {
|
||||
if (gAudioContext.noteSubsEu[t + i].bitField0.s.enabled) {
|
||||
sp9C[phi_s2++] = i;
|
||||
}
|
||||
}
|
||||
i = 0;
|
||||
} else {
|
||||
for (phi_s4 = 0; phi_s4 < gAudioContext.numSynthesisReverbs; phi_s4++) {
|
||||
for (i = 0; i < gAudioContext.maxSimultaneousNotes; i++) {
|
||||
|
@ -551,10 +550,10 @@ Acmd* func_800DC384(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updateIdx) {
|
|||
sp9C[phi_s2++] = i;
|
||||
}
|
||||
}
|
||||
i = 0;
|
||||
}
|
||||
|
||||
aClearBuffer(cmd++, 0x940, 0x340);
|
||||
i = 0;
|
||||
for (phi_s4 = 0; phi_s4 < gAudioContext.numSynthesisReverbs; phi_s4++) {
|
||||
temp_t8 = &gAudioContext.synthesisReverbs[phi_s4];
|
||||
useReverb = temp_t8->useReverb;
|
||||
|
@ -582,10 +581,10 @@ Acmd* func_800DC384(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updateIdx) {
|
|||
}
|
||||
|
||||
while (i < phi_s2) {
|
||||
phi_v0 = &gAudioContext.noteSubsEu[sp9C[i] + t];
|
||||
if (phi_v0->bitField1.s.reverbIndex == phi_s4) {
|
||||
cmd = func_800DC910(sp9C[i], phi_v0, &gAudioContext.notes[sp9C[i]].synthesisState, aiBuf, aiBufLen, cmd,
|
||||
updateIdx);
|
||||
phi_v0_2 = &gAudioContext.noteSubsEu[sp9C[i] + t];
|
||||
if (phi_v0_2->bitField1.s.reverbIndex == phi_s4) {
|
||||
cmd = func_800DC910(sp9C[i], phi_v0_2, &gAudioContext.notes[sp9C[i]].synthesisState, aiBuf, aiBufLen,
|
||||
cmd, updateIdx);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
@ -619,9 +618,6 @@ Acmd* func_800DC384(s16* aiBuf, s32 aiBufLen, Acmd* cmd, s32 updateIdx) {
|
|||
|
||||
return cmd;
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audio_synthesis/func_800DC384.s")
|
||||
#endif
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
Acmd* func_800DC910(s32 noteIdx, NoteSubEu* noteSubEu, NoteSynthesisState* synthState, s16* aiBuf, s32 aiBufLen,
|
||||
|
@ -1151,18 +1147,18 @@ Acmd* func_800DDB64(Acmd* cmd, NoteSubEu* noteSubEu, NoteSynthesisState* synthSt
|
|||
|
||||
switch (arg5) {
|
||||
case 1:
|
||||
phi_t0 = 0x940;
|
||||
phi_v1 = noteSubEu->headsetPanRight;
|
||||
phi_v0 = synthState->prevHeadsetPanRight;
|
||||
synthState->prevHeadsetPanLeft = 0;
|
||||
synthState->prevHeadsetPanRight = noteSubEu->headsetPanRight;
|
||||
phi_t0 = 0x940;
|
||||
synthState->prevHeadsetPanRight = phi_v1;
|
||||
break;
|
||||
case 2:
|
||||
phi_t0 = 0xAE0;
|
||||
phi_v1 = noteSubEu->headsetPanLeft;
|
||||
phi_v0 = synthState->prevHeadsetPanLeft;
|
||||
synthState->prevHeadsetPanLeft = noteSubEu->headsetPanLeft;
|
||||
synthState->prevHeadsetPanLeft = phi_v1;
|
||||
synthState->prevHeadsetPanRight = 0;
|
||||
phi_t0 = 0xAE0;
|
||||
break;
|
||||
default:
|
||||
return cmd;
|
||||
|
@ -1170,26 +1166,26 @@ Acmd* func_800DDB64(Acmd* cmd, NoteSubEu* noteSubEu, NoteSynthesisState* synthSt
|
|||
|
||||
if (arg4 != 1) {
|
||||
if (phi_v0 != phi_v1) {
|
||||
aSetBuffer(cmd++, 0, 0x5C0, 0x3C0, (arg3 + phi_v1) - phi_v0);
|
||||
aResampleZOH(cmd++, (u16)((((arg3 << 0xF) / 2) - 1) / ((((arg3 + phi_v1) - phi_v0) - 2) / 2)), 0);
|
||||
aSetBuffer(cmd++, 0, 0x5C0, 0x3C0, arg3 + phi_v1 - phi_v0);
|
||||
aResampleZOH(cmd++, (u16)((((arg3 << 0xF) / 2) - 1) / ((arg3 + phi_v1 - phi_v0 - 2) / 2)), 0);
|
||||
} else {
|
||||
aDMEMMove(cmd++, 0x5C0, 0x3C0, arg3);
|
||||
}
|
||||
|
||||
if (phi_v0 != 0) {
|
||||
aLoadBuffer(cmd++, &synthState->synthesisBuffers->panResampleState[0x8], 0x5C0, ALIGN16(phi_v0));
|
||||
aDMEMMove(cmd++, 0x3C0, phi_v0 + 0x5C0, (arg3 + phi_v1) - phi_v0);
|
||||
aDMEMMove(cmd++, 0x3C0, 0x5C0 + phi_v0, arg3 + phi_v1 - phi_v0);
|
||||
} else {
|
||||
aDMEMMove(cmd++, 0x3C0, 0x5C0, (arg3 + phi_v1));
|
||||
aDMEMMove(cmd++, 0x3C0, 0x5C0, arg3 + phi_v1);
|
||||
}
|
||||
} else {
|
||||
aDMEMMove(cmd++, 0x5C0, 0x3C0, arg3);
|
||||
aClearBuffer(cmd++, 0x5C0, phi_v1);
|
||||
aDMEMMove(cmd++, 0x3C0, phi_v1 + 0x5C0, arg3);
|
||||
aDMEMMove(cmd++, 0x3C0, 0x5C0 + phi_v1, arg3);
|
||||
}
|
||||
|
||||
if (phi_v1 != 0) {
|
||||
aSaveBuffer(cmd++, arg3 + 0x5C0, &synthState->synthesisBuffers->panResampleState[0x8], ALIGN16(phi_v1));
|
||||
aSaveBuffer(cmd++, 0x5C0 + arg3, &synthState->synthesisBuffers->panResampleState[0x8], ALIGN16(phi_v1));
|
||||
}
|
||||
aAddMixer(cmd++, ((arg3 + 0x3F) & ~0x3F), 0x5C0, phi_t0, 0x7FFF);
|
||||
return cmd;
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
#include "global.h"
|
||||
|
||||
#define SAMPLES_TO_OVERPRODUCE 0x10
|
||||
#define EXTRA_BUFFERED_AI_SAMPLES_TARGET 0x80
|
||||
|
||||
typedef enum {
|
||||
CHAN_UPD_UNK_0, // 0
|
||||
CHAN_UPD_VOL_SCALE, // 1
|
||||
|
@ -32,90 +35,50 @@ AudioTask* func_800E4FE0(void) {
|
|||
return func_800E5000();
|
||||
}
|
||||
|
||||
u32 D_801304E0 = 0x80;
|
||||
AudioTask* D_801304E4 = NULL;
|
||||
extern u64 rspAspMainDataStart[];
|
||||
extern u64 rspAspMainDataEnd[];
|
||||
|
||||
extern u8 D_80155C70[];
|
||||
#ifdef NON_EQUIVALENT
|
||||
// haven't verified Equivalency yet.
|
||||
#ifdef NON_MATCHING
|
||||
AudioTask* func_800E5000(void) {
|
||||
u32 sp6C;
|
||||
static s32 sMaxAbiCmdCnt = 0x80;
|
||||
static AudioTask* sWaitingAudioTask = NULL;
|
||||
u32 samplesRemainingInAi;
|
||||
s32 abiCmdCnt;
|
||||
s32 pad;
|
||||
s32 j;
|
||||
s32 sp5C;
|
||||
s16* sp58;
|
||||
s16* currAiBuffer; // sp58
|
||||
OSTask_t* task;
|
||||
s32 index;
|
||||
u32 sp4C;
|
||||
s32 sp48;
|
||||
void* sp3C;
|
||||
void* sp34;
|
||||
OSTask_t* temp_v1_10;
|
||||
OSMesgQueue* temp_s1;
|
||||
s16 temp_a0_2;
|
||||
s16 temp_v0_2;
|
||||
s16 temp_v1;
|
||||
s16 temp_v1_2;
|
||||
s16 temp_v1_9;
|
||||
s32 temp_a0;
|
||||
s32 temp_a3;
|
||||
s32 temp_a3_2;
|
||||
s32 temp_hi;
|
||||
s32 temp_s0;
|
||||
s32 temp_s0_2;
|
||||
s32 temp_s0_3;
|
||||
s32 temp_s0_4;
|
||||
s32 temp_s0_5;
|
||||
s32 temp_t4;
|
||||
s32 temp_t6;
|
||||
s32 temp_t7;
|
||||
s32 temp_v1_6;
|
||||
s32 temp_v1_7;
|
||||
s32 temp_v1_8;
|
||||
u32 temp_t3;
|
||||
u32 temp_t4_2;
|
||||
void* temp_t0;
|
||||
void* temp_v1_3;
|
||||
void* temp_v1_4;
|
||||
void* temp_v1_5;
|
||||
s16 phi_v1;
|
||||
s32 phi_a0;
|
||||
void* phi_v1_2;
|
||||
s32 phi_s0;
|
||||
s32 phi_v1_3;
|
||||
void* phi_v1_4;
|
||||
s32 phi_s0_2;
|
||||
s32 phi_v1_5;
|
||||
s32 phi_s0_3;
|
||||
s32 phi_s0_4;
|
||||
void* phi_v1_6;
|
||||
s32 phi_s0_5;
|
||||
s32 i;
|
||||
|
||||
gAudioContext.totalTaskCnt++;
|
||||
if (gAudioContext.totalTaskCnt % (gAudioContext.audioBufferParameters.presetUnk4) != 0) {
|
||||
if (D_801755D0 != 0) {
|
||||
if (D_801755D0 != NULL) {
|
||||
D_801755D0();
|
||||
}
|
||||
|
||||
if (gAudioContext.audioBufferParameters.presetUnk4 ==
|
||||
((gAudioContext.totalTaskCnt % (gAudioContext.audioBufferParameters.presetUnk4)) + 1)) {
|
||||
return D_801304E4;
|
||||
if ((gAudioContext.totalTaskCnt % gAudioContext.audioBufferParameters.presetUnk4) + 1 ==
|
||||
gAudioContext.audioBufferParameters.presetUnk4) {
|
||||
return sWaitingAudioTask;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
osSendMesg(gAudioContext.taskStartQueueP, gAudioContext.totalTaskCnt, 0);
|
||||
temp_t4 = gAudioContext.curAIBufIdx + 1;
|
||||
temp_t6 = (gAudioContext.curAIBufIdx + 1) % 3;
|
||||
osSendMesg(gAudioContext.taskStartQueueP, gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
|
||||
gAudioContext.rspTaskIdx ^= 1;
|
||||
gAudioContext.curAIBufIdx++;
|
||||
gAudioContext.curAIBufIdx %= 3;
|
||||
temp_hi = (gAudioContext.curAIBufIdx - 2 + 3) % 3;
|
||||
sp6C = osAiGetLength() / 4;
|
||||
index = (gAudioContext.curAIBufIdx - 2 + 3) % 3;
|
||||
samplesRemainingInAi = osAiGetLength() / 4;
|
||||
|
||||
if (gAudioContext.resetTimer < 16) {
|
||||
if (gAudioContext.aiBufLengths[temp_hi] != 0) {
|
||||
sp34 = &gAudioContext + (temp_hi * 4);
|
||||
sp3C = &gAudioContext + (temp_hi * 2);
|
||||
osAiSetNextBuffer(gAudioContext.aiBuffers[temp_hi], gAudioContext.aiBufLengths[temp_hi] * 4);
|
||||
if (gAudioContext.aiBufLengths[index] != 0) {
|
||||
// &gAudioContext + index*{2,4} should be saved across here
|
||||
osAiSetNextBuffer(gAudioContext.aiBuffers[index], gAudioContext.aiBufLengths[index] * 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -125,105 +88,124 @@ AudioTask* func_800E5000(void) {
|
|||
|
||||
sp5C = gAudioContext.sampleIoReqIdx;
|
||||
for (i = 0; i < gAudioContext.sampleIoReqIdx; i++) {
|
||||
if (osRecvMesg(&gAudioContext.unk_1ED0, NULL, 0) == 0) {
|
||||
if (osRecvMesg(&gAudioContext.unk_1ED0, NULL, OS_MESG_NOBLOCK) == 0) {
|
||||
sp5C--;
|
||||
}
|
||||
}
|
||||
|
||||
if (sp5C != 0) {
|
||||
for (i = 0; i < sp5C; i++) {
|
||||
osRecvMesg(&gAudioContext.unk_1ED0, NULL, 1);
|
||||
osRecvMesg(&gAudioContext.unk_1ED0, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
sp48 = gAudioContext.unk_1ED0.validCount;
|
||||
if (gAudioContext.unk_1ED0.validCount != 0) {
|
||||
if (sp48 != 0) {
|
||||
for (i = 0; i < sp48; i++) {
|
||||
osRecvMesg(&gAudioContext.unk_1ED0, NULL, 0);
|
||||
osRecvMesg(&gAudioContext.unk_1ED0, NULL, OS_MESG_NOBLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
gAudioContext.sampleIoReqIdx = 0;
|
||||
func_800E11F0();
|
||||
Audio_ProcessLoads(gAudioContext.resetStatus);
|
||||
func_800E4F58();
|
||||
if ((gAudioContext.resetStatus != 0) && (Audio_ResetStep() == 0)) {
|
||||
if (gAudioContext.resetStatus == 0) {
|
||||
osSendMesg(gAudioContext.audioResetQueueP, gAudioContext.audioResetPresetIdToLoad, 0);
|
||||
}
|
||||
|
||||
D_801304E4 = NULL;
|
||||
return NULL;
|
||||
if (gAudioContext.resetStatus != 0) {
|
||||
if (Audio_ResetStep() == 0) {
|
||||
if (gAudioContext.resetStatus == 0) {
|
||||
osSendMesg(gAudioContext.audioResetQueueP, gAudioContext.audioResetPresetIdToLoad, OS_MESG_NOBLOCK);
|
||||
}
|
||||
|
||||
sWaitingAudioTask = NULL;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (gAudioContext.resetTimer > 16) {
|
||||
return NULL;
|
||||
} else if (gAudioContext.resetTimer != 0) {
|
||||
}
|
||||
if (gAudioContext.resetTimer != 0) {
|
||||
gAudioContext.resetTimer++;
|
||||
}
|
||||
|
||||
gAudioContext.currTask = &gAudioContext.rspTask[gAudioContext.rspTaskIdx];
|
||||
gAudioContext.curAbiCmdBuf = gAudioContext.abiCmdBufs[gAudioContext.rspTaskIdx];
|
||||
gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx] =
|
||||
(s16)((((gAudioContext.audioBufferParameters.samplesPerFrameTarget - sp6C) + 0x80) & 0xFFF0) + 0x10);
|
||||
if (gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx] < gAudioContext.audioBufferParameters.minAiBufferLength) {
|
||||
gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx] = gAudioContext.audioBufferParameters.minAiBufferLength;
|
||||
|
||||
index = gAudioContext.curAIBufIdx;
|
||||
currAiBuffer = gAudioContext.aiBuffers[index];
|
||||
|
||||
gAudioContext.aiBufLengths[index] =
|
||||
(s16)((((gAudioContext.audioBufferParameters.samplesPerFrameTarget - samplesRemainingInAi) +
|
||||
EXTRA_BUFFERED_AI_SAMPLES_TARGET) &
|
||||
~0xF) +
|
||||
SAMPLES_TO_OVERPRODUCE);
|
||||
if (gAudioContext.aiBufLengths[index] < gAudioContext.audioBufferParameters.minAiBufferLength) {
|
||||
gAudioContext.aiBufLengths[index] = gAudioContext.audioBufferParameters.minAiBufferLength;
|
||||
}
|
||||
|
||||
if (gAudioContext.audioBufferParameters.maxAiBufferLength < gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx]) {
|
||||
gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx] = gAudioContext.audioBufferParameters.maxAiBufferLength;
|
||||
if (gAudioContext.aiBufLengths[index] > gAudioContext.audioBufferParameters.maxAiBufferLength) {
|
||||
gAudioContext.aiBufLengths[index] = gAudioContext.audioBufferParameters.maxAiBufferLength;
|
||||
}
|
||||
|
||||
j = 0;
|
||||
if (gAudioContext.resetStatus == 0) {
|
||||
i = 0;
|
||||
// msg = 0000RREE R = read pos, E = End Pos
|
||||
while (osRecvMesg(gAudioContext.cmdProcQueueP, &sp4C, 0) != -1) {
|
||||
while (osRecvMesg(gAudioContext.cmdProcQueueP, (OSMesg*)&sp4C, OS_MESG_NOBLOCK) != -1) {
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
if (1) {}
|
||||
Audio_ProcessCmds(sp4C);
|
||||
i++;
|
||||
j++;
|
||||
}
|
||||
if ((i == 0) && (gAudioContext.cmdQueueFinished)) {
|
||||
if ((j == 0) && (gAudioContext.cmdQueueFinished)) {
|
||||
Audio_ScheduleProcessCmds();
|
||||
}
|
||||
}
|
||||
|
||||
gAudioContext.curAbiCmdBuf =
|
||||
AudioSynth_Update(gAudioContext.curAbiCmdBuf, &abiCmdCnt, gAudioContext.aiBuffers[gAudioContext.curAIBufIdx],
|
||||
gAudioContext.aiBufLengths[gAudioContext.curAIBufIdx]);
|
||||
gAudioContext.audioRandom = osGetCount() * (gAudioContext.audioRandom + gAudioContext.totalTaskCnt);
|
||||
gAudioContext.audioRandom = gAudioContext.aiBuffers[gAudioContext.curAIBufIdx][gAudioContext.totalTaskCnt & 0xFF] +
|
||||
gAudioContext.audioRandom;
|
||||
;
|
||||
gWaveSamples[8] = (s16*)((((u8*)func_800E4FE0)) + (gAudioContext.audioRandom & 0xFFF0));
|
||||
AudioSynth_Update(gAudioContext.curAbiCmdBuf, &abiCmdCnt, currAiBuffer, gAudioContext.aiBufLengths[index]);
|
||||
gAudioContext.audioRandom = (gAudioContext.audioRandom + gAudioContext.totalTaskCnt) * osGetCount();
|
||||
gAudioContext.audioRandom =
|
||||
gAudioContext.aiBuffers[index][gAudioContext.totalTaskCnt & 0xFF] + gAudioContext.audioRandom;
|
||||
gWaveSamples[8] = (s16*)(((u8*)func_800E4FE0) + (gAudioContext.audioRandom & 0xFFF0));
|
||||
|
||||
index = gAudioContext.rspTaskIdx;
|
||||
gAudioContext.currTask->taskQueue = NULL;
|
||||
gAudioContext.currTask->unk_44 = NULL;
|
||||
temp_v1_10 = &gAudioContext.currTask->task.t;
|
||||
temp_v1_10->type = 2U;
|
||||
temp_v1_10->flags = 0U;
|
||||
temp_v1_10->ucode_boot = D_801120C0;
|
||||
temp_v1_10->ucode_boot_size = 0x1000;
|
||||
temp_v1_10->ucode_data_size = (((s32)(D_80155F50 - D_80155C70) >> 3) * 8) - 1;
|
||||
temp_v1_10->ucode = D_801120C0;
|
||||
temp_v1_10->ucode_data = D_80155C70;
|
||||
temp_v1_10->ucode_size = 0x1000;
|
||||
temp_v1_10->dram_stack = NULL;
|
||||
temp_v1_10->dram_stack_size = 0;
|
||||
temp_v1_10->output_buff = NULL;
|
||||
temp_v1_10->output_buff_size = NULL;
|
||||
temp_v1_10->data_ptr = gAudioContext.abiCmdBufs[gAudioContext.rspTaskIdx];
|
||||
temp_v1_10->yield_data_ptr = NULL;
|
||||
temp_v1_10->yield_data_size = 0;
|
||||
temp_v1_10->data_size = abiCmdCnt * sizeof(ACmd);
|
||||
|
||||
if (D_801304E0 < abiCmdCnt) {
|
||||
D_801304E0 = abiCmdCnt;
|
||||
task = &gAudioContext.currTask->task.t;
|
||||
task->type = M_AUDTASK;
|
||||
task->flags = 0;
|
||||
task->ucode_boot = D_801120C0;
|
||||
task->ucode_boot_size = 0x1000;
|
||||
task->ucode_data_size = ((rspAspMainDataEnd - rspAspMainDataStart) * sizeof(u64)) - 1;
|
||||
task->ucode = D_801120C0;
|
||||
task->ucode_data = rspAspMainDataStart;
|
||||
task->ucode_size = 0x1000;
|
||||
task->dram_stack = NULL;
|
||||
task->dram_stack_size = 0;
|
||||
task->output_buff = NULL;
|
||||
task->output_buff_size = NULL;
|
||||
task->data_ptr = (u64*)gAudioContext.abiCmdBufs[index];
|
||||
task->data_size = abiCmdCnt * sizeof(Acmd);
|
||||
task->yield_data_ptr = NULL;
|
||||
task->yield_data_size = 0;
|
||||
|
||||
if (sMaxAbiCmdCnt < abiCmdCnt) {
|
||||
sMaxAbiCmdCnt = abiCmdCnt;
|
||||
}
|
||||
|
||||
if (gAudioContext.audioBufferParameters.presetUnk4 == 1) {
|
||||
return gAudioContext.currTask;
|
||||
} else {
|
||||
sWaitingAudioTask = gAudioContext.currTask;
|
||||
return NULL;
|
||||
}
|
||||
D_801304E4 = gAudioContext.currTask;
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
s32 sMaxAbiCmdCnt = 0x80;
|
||||
AudioTask* sWaitingAudioTask = NULL;
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/code_800E4FE0/func_800E5000.s")
|
||||
#endif
|
||||
|
||||
|
@ -271,7 +253,7 @@ void func_800E5584(AudioCmd* cmd) {
|
|||
if (cmd->asUInt == 1) {
|
||||
for (i = 0; i < gAudioContext.maxSimultaneousNotes; i++) {
|
||||
Note* note = &gAudioContext.notes[i];
|
||||
NoteSubEu* subEu = ¬e->noteSubEu.bitField0;
|
||||
NoteSubEu* subEu = ¬e->noteSubEu;
|
||||
if (subEu->bitField0.s.enabled && note->playbackState.unk_04 == 0) {
|
||||
if (note->playbackState.parentLayer->seqChannel->muteBehavior & 8) {
|
||||
subEu->bitField0.s.finished = 1;
|
||||
|
@ -310,7 +292,7 @@ void func_800E5584(AudioCmd* cmd) {
|
|||
gAudioContext.audioResetPresetIdToLoad = cmd->asUInt;
|
||||
return;
|
||||
case 0xFB:
|
||||
D_801755D0 = cmd->asUInt;
|
||||
D_801755D0 = (void (*)(void))cmd->asUInt;
|
||||
return;
|
||||
case 0xE0:
|
||||
case 0xE1:
|
||||
|
@ -503,7 +485,7 @@ void Audio_ProcessCmds(u32 msg) {
|
|||
u32 func_800E5E20(u32* arg0) {
|
||||
u32 sp1C;
|
||||
|
||||
if (osRecvMesg(&gAudioContext.unk_1E20, &sp1C, 0) == -1) {
|
||||
if (osRecvMesg(&gAudioContext.unk_1E20, (OSMesg*)&sp1C, OS_MESG_NOBLOCK) == -1) {
|
||||
*arg0 = 0;
|
||||
return 0;
|
||||
}
|
||||
|
@ -524,7 +506,7 @@ s32 func_800E5EDC(void) {
|
|||
s32 pad;
|
||||
s32 sp18;
|
||||
|
||||
if (osRecvMesg(gAudioContext.audioResetQueueP, &sp18, OS_MESG_NOBLOCK) == -1) {
|
||||
if (osRecvMesg(gAudioContext.audioResetQueueP, (OSMesg*)&sp18, OS_MESG_NOBLOCK) == -1) {
|
||||
return 0;
|
||||
} else if (gAudioContext.audioResetPresetIdToLoad != sp18) {
|
||||
return -1;
|
||||
|
@ -536,7 +518,7 @@ s32 func_800E5EDC(void) {
|
|||
void func_800E5F34(void) {
|
||||
// macro?
|
||||
// clang-format off
|
||||
s32 chk = -1; s32 sp28; do { } while (osRecvMesg(gAudioContext.audioResetQueueP, &sp28, 0) != chk);
|
||||
s32 chk = -1; s32 sp28; do {} while (osRecvMesg(gAudioContext.audioResetQueueP, (OSMesg*)&sp28, OS_MESG_NOBLOCK) != chk);
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
|
@ -745,47 +727,45 @@ void Audio_WaitForAudioTask(void) {
|
|||
osRecvMesg(gAudioContext.taskStartQueueP, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
s32 func_800E6590(s32 arg0, s32 arg1, s32 arg2) {
|
||||
u32 temp_v1_2;
|
||||
AudioBankSound* temp_a0;
|
||||
Note* temp_a0_2;
|
||||
SequenceChannelLayer* temp_v0;
|
||||
SequenceChannel* temp_v1;
|
||||
SequencePlayer* seqPlayer;
|
||||
SequenceChannelLayer* layer;
|
||||
Note* note;
|
||||
AudioBankSound* sound;
|
||||
s32 loopEnd;
|
||||
s32 samplePos;
|
||||
|
||||
seqPlayer = &gAudioContext.seqPlayers[arg0];
|
||||
if (seqPlayer->enabled && seqPlayer->channels[arg1]->enabled) {
|
||||
temp_v0 = seqPlayer->channels[arg1]->layers[arg2];
|
||||
if (temp_v0 == NULL) {
|
||||
layer = seqPlayer->channels[arg1]->layers[arg2];
|
||||
if (layer == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (temp_v0->enabled) {
|
||||
temp_a0_2 = temp_v0->note;
|
||||
if (temp_a0_2 == NULL) {
|
||||
if (layer->enabled) {
|
||||
if (layer->note == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!temp_v0->bit3) {
|
||||
if (!layer->bit3) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (temp_v0 == temp_a0_2->playbackState.parentLayer) {
|
||||
temp_a0 = temp_a0_2->noteSubEu.sound.audioBankSound;
|
||||
if (temp_a0 == 0) {
|
||||
note = layer->note;
|
||||
if (layer == note->playbackState.parentLayer) {
|
||||
sound = note->noteSubEu.sound.audioBankSound;
|
||||
if (sound == NULL) {
|
||||
return 0;
|
||||
}
|
||||
return temp_a0->sample->loop->end - temp_a0_2->synthesisState.samplePosInt;
|
||||
loopEnd = sound->sample->loop->end;
|
||||
samplePos = note->synthesisState.samplePosInt;
|
||||
return loopEnd - samplePos;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/code_800E4FE0/func_800E6590.s")
|
||||
#endif
|
||||
|
||||
s32 func_800E6680(void) {
|
||||
return func_800E66C0(0);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -18,27 +18,20 @@ typedef struct {
|
|||
/* 0x0C */ u16 unk_C;
|
||||
} Struct_800F8EA0; // size = 0x10
|
||||
|
||||
u8 D_80133340[4] = {
|
||||
0x53,
|
||||
0x45,
|
||||
0x00,
|
||||
0x00,
|
||||
};
|
||||
// rodata for func_800F7680 (this file)
|
||||
char D_80133340[] = "SE";
|
||||
|
||||
// rodata for func_800F7CEC (this file)
|
||||
char D_80133344[] = VT_COL(RED, WHITE) "<INAGAKI CHECK> dist over! flag:%04X ptr:%08X pos:%f-%f-%f" VT_RST "\n";
|
||||
|
||||
// file padding
|
||||
s32 D_8013338C = 0;
|
||||
|
||||
UNK_TYPE D_80133390[] = {
|
||||
0x53455120,
|
||||
0x48000000,
|
||||
};
|
||||
|
||||
UNK_TYPE D_80133398[] = {
|
||||
0x20202020,
|
||||
0x4C000000,
|
||||
};
|
||||
// rodata for Audio_ProcessSeqCmd (code_800F9280.c)
|
||||
char D_80133390[] = "SEQ H";
|
||||
char D_80133398[] = " L";
|
||||
|
||||
// data
|
||||
u8 D_801333A0 = 0;
|
||||
|
||||
u8 D_801333A4 = 0;
|
||||
|
@ -114,6 +107,8 @@ void Audio_ClearBGMMute(u8 arg0) {
|
|||
}
|
||||
}
|
||||
|
||||
// a3 = freq scale factor for ocarina
|
||||
// a5 = reverb add
|
||||
void Audio_PlaySoundGeneral(u16 sfxId, Vec3f* a1, u8 a2, f32* a3, f32* a4, s8* a5) {
|
||||
u8 i;
|
||||
Struct_800F738C* phi_v0;
|
||||
|
@ -559,7 +554,7 @@ void func_800F87A0(u8 bankId) {
|
|||
}
|
||||
bankIndex = gSoundBanks[bankId][0].next;
|
||||
}
|
||||
sp48.unk_28 = bankId << 0xC;
|
||||
sp48.unk_28 = bankId << 12;
|
||||
func_800F74E0(0, &sp48);
|
||||
}
|
||||
|
||||
|
@ -588,7 +583,7 @@ void func_800F89A0(u8 bankId, Vec3f* pos) {
|
|||
SoundBankEntry sp18;
|
||||
|
||||
func_800F8884(bankId, pos);
|
||||
sp18.unk_28 = bankId << 0xC;
|
||||
sp18.unk_28 = bankId << 12;
|
||||
sp18.posX = &pos->x;
|
||||
func_800F74E0(1, &sp18);
|
||||
}
|
||||
|
|
|
@ -48,7 +48,6 @@ void func_800F9280(u8 seqIdx, u8 seqId, u8 arg2, u16 fadeTimer) {
|
|||
}
|
||||
}
|
||||
#else
|
||||
void func_800F9280(u8 seqIdx, u8 seqId, u8 arg2, u16 fadeTimer);
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/code_800F9280/func_800F9280.s")
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue