diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/scrcmd_sound.c | 7 | ||||
-rw-r--r-- | arm9/src/sound.c | 4 | ||||
-rw-r--r-- | arm9/src/unk_020040F4.c | 1365 | ||||
-rw-r--r-- | arm9/src/unk_0204AEA8.c | 2 |
4 files changed, 1368 insertions, 10 deletions
diff --git a/arm9/src/scrcmd_sound.c b/arm9/src/scrcmd_sound.c index 1251c612..ae20b5a4 100644 --- a/arm9/src/scrcmd_sound.c +++ b/arm9/src/scrcmd_sound.c @@ -1,14 +1,13 @@ #include "scrcmd.h" +#include "unk_020040F4.h" extern void* Sav2_Chatot_get(struct SaveBlock2* sav2); extern u32 FUN_02005D20(void *); extern void FUN_02005E6C(void *); -extern void FUN_0200433C(u32, u32, u32); extern u32 FUN_02005E28(void); extern void FUN_02005E64(void); extern BOOL FUN_02005CBC(void); extern void PlaySound(u16); -extern u32 FUN_02004124(u16); extern void FUN_0204AB20(struct UnkSavStruct80 *ctx, u16); extern u16 FUN_0204ABA8(struct UnkSavStruct80 *ctx, u32); extern void FUN_0200521C(u16); @@ -20,13 +19,9 @@ extern BOOL FUN_02005404(void); extern u16 FUN_02005410(u16); extern void PlaySE(u16); extern void FUN_020054F0(u16, u32); -extern void FUN_020047C8(u8, u8); -extern void FUN_020040F4(u8); extern BOOL FUN_02005508(u16); extern void FUN_02005578(u16); extern BOOL FUN_02005670(void); -extern void FUN_0200488C(u16, u16); - THUMB_FUNC BOOL ScrCmd_Unk02AE(struct ScriptContext *ctx) { diff --git a/arm9/src/sound.c b/arm9/src/sound.c index a5228dab..bc30b97a 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -2,6 +2,7 @@ #include "sound.h" #include "SPI_mic.h" #include "SPI_pm.h" +#include "unk_020040F4.h" #pragma thumb on @@ -18,9 +19,6 @@ void FUN_020040A4(struct SoundData *); void FUN_02003CE8(int); void FUN_020040DC(void); -extern BOOL FUN_020048BC(int); -extern void FUN_02004D60(u32); -extern BOOL FUN_02004D94(void); extern void FUN_0200521C(int); extern void FUN_0200538C(int, int, int); extern BOOL FUN_02005404(void); diff --git a/arm9/src/unk_020040F4.c b/arm9/src/unk_020040F4.c new file mode 100644 index 00000000..d8624329 --- /dev/null +++ b/arm9/src/unk_020040F4.c @@ -0,0 +1,1365 @@ +#include "global.h" +#include "unk_020040F4.h" +#include "OS_cache.h" +#include "sound.h" +#include "unk_0202F150.h" + +u32 UNK_021C3DD8[2]; + +u8 UNK_021C3DE0[0x7d0]; + +const u8 UNK_020ECB8C[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + +extern void FUN_02005454(); +extern void FUN_0200541C(); +extern void FUN_0200521C(int); +extern void FUN_0200538C(u32, u16, u32); +extern void NNS_SndPlayerPause(u32 *, u8); +extern void NNS_SndPlayerMoveVolume(u32 *, u32, u32); +extern void NNS_SndPlayerSetInitialVolume(u32 *, s32); +extern void *NNS_SndArcGetSeqParam(u32); +extern void NNS_SndArcPlayerStartSeqEx(u32 *, u32, s32, s32, u32); +extern BOOL NNS_SndPlayerCountPlayingSeqByPlayerNo(int); +extern u32 NNS_SndPlayerGetSeqNo(u32 *); +extern u32 NNS_SndArcGetBankInfo(u32); +extern u32 MIC_StartAutoSampling(u32); +extern u32 MIC_StopAutoSampling(); +extern u32 MIC_DoSamplingAsync(u32 param0, u32 param1, u32 param2, u32 param3); +extern u32 NNS_SndWaveOutAllocChannel(u32); +extern void NNS_SndWaveOutFreeChannel(u32); +extern u32 NNS_SndWaveOutStart(u32, u32, void *, u32, u32, u32, u32, s32, u32, u32); +extern void NNS_SndWaveOutStop(u32); +extern void NNS_SndWaveOutIsPlaying(u32); +extern void NNS_SndWaveOutSetPan(u32, u32); +extern void NNS_SndWaveOutSetSpeed(u32, u32); +extern void NNS_SndWaveOutSetVolume(u32, s32); +extern struct WaveArcInfo *NNS_SndArcGetWaveArcInfo(u32); +extern u32 NNS_SndArcGetFileSize(u32); +extern s32 NNS_SndArcReadFile(u32, void *, u32, u32); +extern BOOL NNS_SndCaptureIsActive(); +extern u32 NNS_SndCaptureStartReverb(void *, u32, u32, u32, u32); +extern void NNS_SndCaptureStopReverb(u32); +extern void NNS_SndCaptureSetReverbVolume(); +extern u32 NNS_SndCaptureStartEffect(void *, u32, u32, u32, u32, void (*)(), void *); +extern void NNS_SndCaptureStopEffect(); +extern void NNS_SndPlayerSetTrackPitch(u32 *, u32, u32); +extern void NNS_SndPlayerSetTrackPan(u32 *, u32, u32); +extern void NNS_SndSetMonoFlag(u32 param0); +extern void FUN_02003CE8(u32); +extern void FUN_020053CC(u32, u32); +extern u32 NNS_SndArcGetFileAddress(u32); +extern u32 SND_GetWaveDataAddress(u32, u32); +extern u32 NNS_SndPlayerGetTick(u32 *); +extern void NNS_SndPlayerSetAllocatableChannel(u32, u32); +extern BOOL FUN_02005404(void); +extern void NNS_SndPlayerSetPlayerVolume(u32, u8); + +THUMB_FUNC void FUN_020040F4(u8 param0) +{ + u8 *ptr = FUN_02003D38(5); + *ptr = param0; +} + +THUMB_FUNC u8 FUN_02004104() +{ + u8 *ptr = FUN_02003D38(5); + + return *ptr; +} + +THUMB_FUNC void FUN_02004110(u16 param0) +{ + u16 *ptr = FUN_02003D38(9); + *ptr = param0; + + FUN_02004130(0); +} + +THUMB_FUNC u16 FUN_02004124() +{ + u16 *ptr = FUN_02003D38(9); + + return *ptr; +} + +THUMB_FUNC void FUN_02004130(u16 param0) +{ + u16 *ptr = FUN_02003D38(10); + *ptr = param0; +} + +THUMB_FUNC u16 FUN_02004140() +{ + u16 *ptr = FUN_02003D38(10); + + return *ptr; +} + +THUMB_FUNC void FUN_0200414C(u16 param0) +{ + u16 *ptr = FUN_02003D38(31); + *ptr = param0; +} + +THUMB_FUNC void FUN_0200415C(u8 param0) +{ + u8 *ptr = FUN_02003D38(20); + u8 *ptr2 = FUN_02003D38(21); + + if (param0 < 51) + { + *ptr = param0; + *ptr2 = 0; + } + else + { + *ptr2 = param0; + } +} + +THUMB_FUNC BOOL FUN_02004180(s32 param0) +{ + BOOL res; + switch (param0) + { + case 1: + case 9: + case 10: + case 14: + res = GF_Snd_LoadGroup(1); + break; + case 2: + case 13: + res = GF_Snd_LoadGroup(2); + break; + case 3: + res = GF_Snd_LoadGroup(13); + break; + case 4: + res = GF_Snd_LoadGroup(1); + break; + case 5: + res = GF_Snd_LoadGroup(2); + break; + case 11: + res = GF_Snd_LoadGroup(1); + break; + case 6: + res = GF_Snd_LoadGroup(11); + break; + case 8: + res = GF_Snd_LoadGroup(1); + break; + case 12: + res = GF_Snd_LoadGroup(14); + break; + case 51: + res = GF_Snd_LoadGroup(3); + break; + case 66: + res = GF_Snd_LoadGroup(6); + break; + case 52: + res = GF_Snd_LoadGroup(5); + break; + case 7: + case 53: + res = GF_Snd_LoadGroup(9); + break; + case 54: + res = GF_Snd_LoadGroup(10); + break; + case 55: + case 67: + res = GF_Snd_LoadBank(0x5e5); + res = GF_Snd_LoadWaveArc(0x5e5); + break; + case 56: + res = GF_Snd_LoadGroup(12); + break; + case 57: + res = GF_Snd_LoadGroup(7); + break; + case 58: + res = GF_Snd_LoadGroup(8); + break; + case 59: + res = GF_Snd_LoadGroup(15); + break; + case 60: + res = GF_Snd_LoadGroup(3); + break; + case 61: + res = GF_Snd_LoadGroup(5); + break; + case 62: + res = GF_Snd_LoadGroup(15); + break; + case 63: + res = GF_Snd_LoadGroup(4); + break; + case 64: + res = GF_Snd_LoadBank(0x5ed); + res = GF_Snd_LoadWaveArc(0x5ed); + break; + case 65: + res = GF_Snd_LoadBank(0x5ec); + res = GF_Snd_LoadWaveArc(0x5ec); + break; + } + + return res; +} + +THUMB_FUNC u32 FUN_0200433C(u8 param0, int param1, u32 param2) +{ + u8 *st0 = FUN_02003D38(20); + u8 *st4 = FUN_02003D38(21); + u16 *r7 = FUN_02003D38(13); + + if (param0 < 51) + { + if (*st0 == param0) + { + return 0; + } + } + else + { + if (*st4 == param0) + { + return 0; + } + } + + FUN_0200415C(param0); + + switch (param0) + { + case 4: + FUN_0200516C(0); + FUN_020044D4(param1, param2); + *r7 = 0; + break; + case 5: + FUN_02004648(param1, param2); + break; + case 11: + FUN_02004680(param1, param2); + break; + case 6: + FUN_020046A0(param1, param2); + break; + case 7: + FUN_020046C4(param1, param2); + break; + case 57: + case 53: + case 51: + case 52: + case 54: + case 55: + case 56: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 65: + case 66: + case 67: + FUN_020046E8(param0); + break; + case 1: + FUN_0200516C(1); + FUN_02004704(param0, param1, param2); + break; + case 14: + FUN_0200516C(2); + FUN_02004704(param0, param1, param2); + break; + case 2: + FUN_0200516C(0); + FUN_02004704(param0, param1, param2); + break; + case 3: + case 8: + case 9: + case 10: + case 12: + case 13: + FUN_02004704(param0, param1, param2); + break; + } + + return 1; +} + +THUMB_FUNC void FUN_020044A8(s32 param0) +{ + int *ptr = FUN_02003D38(23); + GF_Snd_RestoreState(*ptr); + + int *ptr2 = FUN_02003D38(24); + GF_Snd_SaveState(ptr2); + + FUN_02004180(param0); + + int *ptr3 = FUN_02003D38(25); + GF_Snd_SaveState(ptr3); +} + +THUMB_FUNC void FUN_020044D4(int param0, u32 param1) +{ +#pragma unused(param1) + + u8 *ptr = FUN_02003D38(11); + + FUN_02003D38(23); + FUN_02003D38(31); + u32 r4 = FUN_020048EC(FUN_02003FF4(0)); + + if (*ptr == 0 && r4 == param0 && FUN_02004140() != 1152) + { + return; + } + + FUN_02004DBC(1); + FUN_02005454(); + + if (r4 != param0) + { + FUN_020047C8(1, 0); + FUN_0200541C(); + } + + if (*ptr == 1) + { + GF_Snd_RestoreState(FUN_02004748(2)); + FUN_02004180(4); + GF_Snd_SaveState((int *)FUN_02003D38(25)); + + if (r4 != param0) + { + FUN_020047C8(1, 0); + } + FUN_02004568(param0, (u16)r4); + return; + } + + FUN_0200521C(param0); +} + +THUMB_FUNC void FUN_02004568(int seqNo, u16 param1) +{ +#pragma unused(param1) + + u16 *ptr = FUN_02003D38(31); + + u32 r0 = FUN_02004900(*ptr); + if (r0 != 1001 && r0 != 1003) + { + GF_Snd_LoadSeqEx(seqNo, 4); + GF_ASSERT(FALSE); + } + else + { + GF_Snd_LoadSeqEx(*ptr, 6); + } + + GF_Snd_SaveState((int *)FUN_02003D38(26)); + FUN_020047C8(1, 0); + FUN_0200538C(0x7f, 0x28, 0); + FUN_02004DBC(0); +} + +THUMB_FUNC void FUN_020045C4(int param0, u32 param1) +{ + u8 *ptr = FUN_02003D38(18); + u16 *ptr2 = FUN_02003D38(31); + + if (*ptr != 1 && param1 != 0) + { + return; + } + + GF_Snd_RestoreState(FUN_02004748(1)); + GF_Snd_LoadSeqEx(*ptr2, 2); + GF_Snd_SaveState((int *)FUN_02003D38(24)); + + FUN_02004180(4); + GF_Snd_SaveState((int *)FUN_02003D38(25)); + + u32 r0 = FUN_02004900(*ptr2); + if (r0 != 1001 && r0 != 1003) + { + GF_Snd_LoadSeqEx(param0, 4); + GF_ASSERT(FALSE); + } + else + { + GF_Snd_LoadSeqEx(*ptr2, 4); + } + + GF_Snd_SaveState((int *)FUN_02003D38(26)); +} + +THUMB_FUNC void FUN_02004648(int param0, u32 param1) +{ +#pragma unused(param1) + FUN_02003D38(23); + FUN_020051AC(); + + GF_Snd_RestoreState(FUN_02004748(2)); + FUN_02004180(5); + GF_Snd_SaveState((int *)FUN_02003D38(25)); + FUN_02004DBC(1); + FUN_0200521C(param0); +} + +THUMB_FUNC void FUN_02004680(int param0, u32 param1) +{ +#pragma unused(param1) + FUN_02003D38(23); + FUN_0200541C(); + FUN_02004810(); + FUN_020044A8(4); + FUN_0200521C(param0); +} + +THUMB_FUNC void FUN_020046A0(int param0, u32 param1) +{ +#pragma unused(param1) + FUN_02003D38(23); + FUN_0200541C(); + FUN_020044A8(6); + FUN_02004DBC(1); + FUN_0200521C(param0); +} + +THUMB_FUNC void FUN_020046C4(int param0, u32 param1) +{ +#pragma unused(param1) + FUN_02003D38(23); + FUN_0200541C(); + FUN_020044A8(7); + FUN_02004DBC(1); + FUN_0200521C(param0); +} + +THUMB_FUNC void FUN_020046E8(s32 param0) +{ + FUN_02004738(); + FUN_02004180(param0); + GF_Snd_SaveState((int *)FUN_02003D38(27)); +} + +THUMB_FUNC void FUN_02004704(s32 param0, int param1, u32 param2) +{ +#pragma unused(param2) + FUN_02003D38(23); + FUN_0200541C(); + FUN_020044A8(param0); + FUN_0200521C(param1); +} + +THUMB_FUNC void FUN_02004724(int param0) +{ + GetSoundDataPointer(); + FUN_020051AC(); + FUN_0200521C(param0); +} + +THUMB_FUNC void FUN_02004738() +{ + GF_Snd_RestoreState(FUN_02004748(4)); +} + +THUMB_FUNC int FUN_02004748(s32 param0) +{ + GetSoundDataPointer(); + + if (param0 >= 7) + { + GF_AssertFail(); + return *(int *)FUN_02003D38(26); + } + + int *r5; + switch (param0) + { + case 0: + r5 = FUN_02003D38(22); + break; + case 1: + r5 = FUN_02003D38(23); + break; + case 2: + r5 = FUN_02003D38(24); + break; + case 3: + r5 = FUN_02003D38(25); + break; + case 4: + r5 = FUN_02003D38(26); + break; + case 5: + r5 = FUN_02003D38(27); + break; + case 6: + r5 = FUN_02003D38(28); + break; + } + + return *r5; +} + +THUMB_FUNC void FUN_020047C8(u8 param0, u8 param1) +{ + u8 *ptr; + int r4; + if (param0 == 1) + { + ptr = FUN_02003D38(11); + r4 = 0; + } + else + { + if (param0 != 7) + { + return; + } + + ptr = FUN_02003D38(12); + r4 = 7; + } + + if (param1 == 0) + { + FUN_02004110((u16)FUN_020048EC(FUN_02003FF4(r4))); + } + + NNS_SndPlayerPause(FUN_02003FF4(r4), param1); + *ptr = param1; +} + +THUMB_FUNC void FUN_02004810() +{ + u8 *ptr = FUN_02003D38(11); + u8 *ptr2 = FUN_02003D38(12); + *ptr = 0; + *ptr2 = 0; +} + +THUMB_FUNC void FUN_02004828(int param0, u32 param1, u32 param2) +{ + NNS_SndPlayerMoveVolume(FUN_02003FF4(param0), param1, param2); +} + +THUMB_FUNC void FUN_0200483C(int param0, s32 param1) +{ + if (param1 < 0) + { + param1 = 0; + } + + if (param1 > 127) + { + param1 = 127; + } + + NNS_SndPlayerSetInitialVolume(FUN_02003FF4(param0), param1); +} + +THUMB_FUNC void FUN_02004858(u32 param0, int param1) +{ + u8 *ret = NNS_SndArcGetSeqParam(param0); + u8 r4; + if (param1 == 1 || param1 == 8) + { + r4 = 127; + } + else + { + if (ret == NULL) + { + return; + } + + r4 = ret[2]; + } + + if (FUN_020313EC() == 1) + { + FUN_0200483C(param1, r4 / 5); + } +} + +THUMB_FUNC void FUN_0200488C(u16 param0, u16 param1) +{ + FUN_0200483C((int)FUN_02004018(FUN_020048D0(param0)), param1); +} + +THUMB_FUNC void FUN_020048A0(int param0, u32 param1, u32 param2) +{ + NNS_SndArcPlayerStartSeqEx(FUN_02003FF4(param0), param1, -1, -1, param2); +} + +THUMB_FUNC BOOL FUN_020048BC(int param0) +{ + GF_ASSERT(param0 >= 0); + + return NNS_SndPlayerCountPlayingSeqByPlayerNo(param0); +} + +THUMB_FUNC u8 FUN_020048D0(u16 param0) +{ + if (param0 == 0) + { + return 0xff; + } + + u8 *ptr = NNS_SndArcGetSeqParam(param0); + if (ptr == NULL) + { + return 0xff; + } + + return ptr[5]; +} + +THUMB_FUNC u32 FUN_020048EC(u32 *param0) +{ + return NNS_SndPlayerGetSeqNo(param0); +} + +THUMB_FUNC u32 FUN_020048F4(u16 param0) +{ + return NNS_SndArcGetBankInfo(FUN_02004900(param0)); +} + +THUMB_FUNC u16 FUN_02004900(u16 param0) +{ + u16 *ptr = NNS_SndArcGetSeqParam(param0); + if (ptr == NULL) + { + return 0; + } + + return *ptr; +} + +THUMB_FUNC u32 FUN_02004914(u32 param0) +{ + return MIC_StartAutoSampling(param0); +} + +THUMB_FUNC u32 FUN_0200491C(u32 param0) +{ +#pragma unused(param0) + GetSoundDataPointer(); + return MIC_StopAutoSampling(); +} + +THUMB_FUNC u32 FUN_02004928(u32 param0, u32 param1, u32 param2, u32 param3) +{ + return MIC_DoSamplingAsync(param0, param1, param2, param3); +} + +THUMB_FUNC void *FUN_02004930(u32 param0) +{ + GetSoundDataPointer(); + u8 *ptr = FUN_02003D38(15); + u8 *ptr2 = FUN_02003D38(16); + GF_ASSERT(param0 == 14 || param0 == 15); + GF_ASSERT(param0 != 14 || *ptr != 0); + GF_ASSERT(param0 != 15 || *ptr2 != 0); + + if (param0 == 14) + { + return FUN_02003D38(0); + } + + return FUN_02003D38(1); +} + +THUMB_FUNC u32 FUN_02004984(u32 param0) +{ + GetSoundDataPointer(); + u8 *ptr = FUN_02003D38(15); + u8 *ptr2 = FUN_02003D38(16); + GF_ASSERT(param0 == 14 || param0 == 15); + + if (param0 == 14) + { + if (*ptr == 0) + { + u32 *r4 = FUN_02003D38(0); + *r4 = NNS_SndWaveOutAllocChannel(param0); + if (*r4 == 0) + { + return 0; + } + *ptr = 1; + } + else + { + GF_AssertFail(); + } + } + else + { + if (*ptr2 == 0) + { + u32 *r6 = FUN_02003D38(1); + *r6 = NNS_SndWaveOutAllocChannel(param0); + if (*r6 == 0) + { + return 0; + } + + *ptr2 = 1; + } + else + { + GF_AssertFail(); + } + } + + return 1; +} + +THUMB_FUNC void FUN_02004A04(u32 param0) +{ + GetSoundDataPointer(); + u8 *ptr = FUN_02003D38(15); + u8 *ptr2 = FUN_02003D38(16); + if (param0 != 14 && param0 != 15) + { + GF_AssertFail(); + return; + } + + if (param0 == 14) + { + if (*ptr == 1) + { + NNS_SndWaveOutFreeChannel(*(u32 *)FUN_02004930(param0)); + *ptr = 0; + return; + } + else + { + GF_AssertFail(); + return; + } + } + + if (*ptr2 == 1) + { + NNS_SndWaveOutFreeChannel(*(u32 *)FUN_02004930(param0)); + *ptr2 = 0; + return; + } + else + { + GF_AssertFail(); + } +} + +THUMB_FUNC u32 FUN_02004A6C(struct UnkStruct_020040F4_1 *param0, u32 param1) +{ + u32 res = NNS_SndWaveOutStart(*(u32 *)param0->unk00, + param0->unk04, + param0->unk08, + param0->unk0c, + param0->unk10, + param0->unk14, + param0->unk18, + param0->unk1c, + param0->unk20, + param0->unk24); + if (res == 0) + { + FUN_02004A04(param1); + } + + return res; +} + +THUMB_FUNC void FUN_02004AAC(u32 param0) +{ + NNS_SndWaveOutStop(*(u32 *)FUN_02004930(param0)); +} + +THUMB_FUNC void FUN_02004ABC(u32 param0) +{ + NNS_SndWaveOutIsPlaying(*(u32 *)FUN_02004930(param0)); +} + +THUMB_FUNC void FUN_02004ACC(u32 param0, u32 param1) +{ + if (param1 > 127) + { + param1 = 127; + } + + NNS_SndWaveOutSetPan(*(u32 *)FUN_02004930(param0), param1); +} + +THUMB_FUNC void FUN_02004AE4(u32 param0, u32 param1) +{ + NNS_SndWaveOutSetSpeed(*(u32 *)FUN_02004930(param0), param1); +} + +THUMB_FUNC void FUN_02004AF8(u32 param0, s32 param1) +{ + if (FUN_020313EC() == 1) + { + NNS_SndWaveOutSetVolume(*(u32 *)FUN_02004930(param0), param1 / 5); + return; + } + + NNS_SndWaveOutSetVolume(*(u32 *)FUN_02004930(param0), param1); +} + +THUMB_FUNC u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4) +{ + GetSoundDataPointer(); + + void **r4 = FUN_02003D38(33); + GF_ASSERT(param3 == 14 || param3 == 15); + + struct WaveArcInfo *r7 = NNS_SndArcGetWaveArcInfo(param0); + if (r7 == 0) + { + GF_AssertFail(); + return 0; + } + + u32 r6 = NNS_SndArcGetFileSize(r7->unk00); + if (r6 == 0) + { + GF_AssertFail(); + return 0; + } + + if (param3 == 14) + { + void *ptr = AllocFromHeap(param4, r6); + *r4 = ptr; + if (ptr == NULL) + { + GF_AssertFail(); + return 0; + } + + memset(ptr, 0, r6); + if (NNS_SndArcReadFile(r7->unk00, *r4, r6, 0) == -1) + { + GF_AssertFail(); + return 0; + } + + FUN_02004C1C(*r4, r6); + } + + void *res = FUN_02004930(param3); + + struct UnkStruct_020040F4_1 st8; + st8.unk04 = 0; + st8.unk00 = res; + st8.unk08 = *r4; + st8.unk0c = 0; + st8.unk18 = 0x3443; + st8.unk10 = 0; + st8.unk1c = param1; + st8.unk20 = 0x6000; + st8.unk24 = param2; + st8.unk14 = r6; + + u32 ret = FUN_02004A6C(&st8, param3); + FUN_02004AF8(param3, param1); + u8 *r0 = FUN_02003D38(14); + *r0 = 1; + + return ret; +} + +THUMB_FUNC void FUN_02004C1C(u8 *param0, u32 param1) +{ + for (u32 r5 = 0; r5 < param1 / 2; r5++) + { + u8 r4 = param0[r5]; + param0[r5] = param0[param1 - 1 - r5]; + param0[param1 - 1 - r5] = r4; + } +} + +THUMB_FUNC void FUN_02004C3C(u32 param0) +{ + GetSoundDataPointer(); + u8 *ptr = FUN_02003D38(14); + void **ptr2 = FUN_02003D38(33); + + GF_ASSERT(param0 == 14 || param0 == 15); + + FUN_02004AAC(param0); + + if (*ptr == 1) + { + *ptr = 0; + FreeToHeap(*ptr2); + } +} + +THUMB_FUNC BOOL FUN_02004C78() +{ + return NNS_SndCaptureIsActive(); +} + +THUMB_FUNC u32 FUN_02004C80(u32 param0) +{ + GetSoundDataPointer(); + + return NNS_SndCaptureStartReverb(FUN_02003D38(3), 0x1000, 0, 0x3E80, param0); +} + +THUMB_FUNC void FUN_02004CA4(u32 param0) +{ + NNS_SndCaptureStopReverb(param0); +} + +THUMB_FUNC void FUN_02004CAC() +{ + NNS_SndCaptureSetReverbVolume(); +} + +THUMB_FUNC void FUN_02004CB4() +{ + GetSoundDataPointer(); + + MI_CpuFill8(FUN_02003D38(4), 0, 0x1c); + + void *r4 = FUN_02003D38(3); + void *st8 = FUN_02003D38(4); + + NNS_SndCaptureStartEffect(r4, 0x1000, 0, 0x55F0, 2, FUN_02005068, st8); +} + +THUMB_FUNC void FUN_02004CFC() +{ + NNS_SndCaptureStopEffect(); +} + +THUMB_FUNC void FUN_02004D04(s32 param0) +{ + u8 *ptr = FUN_02003D38(19); + + if (param0 > 8) + { + param0 = 8; + } + else if (param0 < 0) + { + param0 = 0; + } + + *ptr = (u8)param0; +} + +THUMB_FUNC void FUN_02004D20(int param0, u32 param1, u32 param2) +{ + NNS_SndPlayerSetTrackPitch(FUN_02003FF4(param0), param1, param2); +} + +THUMB_FUNC void FUN_02004D34(u16 param0, u32 param1, u32 param2) +{ + FUN_02004D20((int)FUN_02004018(FUN_020048D0(param0)), param1, param2); +} + +THUMB_FUNC void FUN_02004D4C(int param0, u32 param1, u32 param2) +{ + NNS_SndPlayerSetTrackPan(FUN_02003FF4(param0), param1, param2); +} + +THUMB_FUNC void FUN_02004D60(u32 param0) +{ + NNS_SndSetMonoFlag(param0); + UNK_021C3DD8[0] = param0; +} + +THUMB_FUNC void FUN_02004D74(u32 param0) +{ + *(u32 *)FUN_02003D38(6) = param0; +} + +THUMB_FUNC void FUN_02004D84(u32 param0) +{ + *(u32 *)FUN_02003D38(7) = param0; +} + +THUMB_FUNC u16 FUN_02004D94() +{ + u16 *ptr = FUN_02003D38(7); + + if (*ptr == 0) + { + *ptr = 0; + return 0; + } + + return --(*ptr); +} + +THUMB_FUNC u8 *FUN_02004DB4() +{ + return UNK_021C3DE0; +} + +THUMB_FUNC void FUN_02004DBC(u8 param0) +{ + *(u8 *)FUN_02003D38(18) = param0; +} + +THUMB_FUNC u32 FUN_02004DCC(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5) +{ + u8 *ptr = FUN_02003D38(21); + + FUN_02004E44(param0, param1, param2, param3, param4, param5); + + *ptr = 0; + FUN_02003CE8(5); + return 1; +} + +THUMB_FUNC u32 FUN_02004E08( + u32 param0, u16 param1, u32 param2, u32 param3, u32 param35, u8 param4, u32 param5) +{ + u32 *ptr = FUN_02003D38(8); + + FUN_02004E44(param0, param1, param2, param3, param4, param5); + + *ptr = param35; + FUN_02003CE8(6); + return 1; +} + +THUMB_FUNC void FUN_02004E44(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5) +{ +#pragma unused(param0) +#pragma unused(param5) + u32 *ptr = FUN_02003D38(2); + + FUN_020053CC(0, param2); + FUN_02004110(0); + FUN_02004130(param1); + FUN_02004D84(param3); + *ptr = FUN_020048F4(param1); + + FUN_02004DBC(param4); +} + +THUMB_FUNC u32 FUN_02004E80(u32 param0) +{ + if (param0 == 0) + { + return 0; + } + + return param0 + 12; +} + +THUMB_FUNC u32 FUN_02004E8C(u32 *param0) +{ + if (param0 == NULL) + { + return 0; + } + + return param0[2]; +} + +THUMB_FUNC u32 FUN_02004E98(s32 param0) +{ + GF_Snd_RestoreState(FUN_02004748(5)); + + u16 r4 = (u16)param0; + + if (r4 != 0x1B9 && (param0 > 0x1ef || param0 == 0)) + { + r4 = 1; + } + + GF_Snd_LoadWaveArc(r4); + return FUN_02004ED0(r4); +} + +THUMB_FUNC u32 FUN_02004ED0(s32 param0) +{ + u32 *ptr = FUN_02003D38(32); + + u16 r4 = (u16)param0; + + if (r4 != 0x1B9 && (param0 > 0x1ef || param0 == 0)) + { + r4 = 1; + } + + struct WaveArcInfo *info = NNS_SndArcGetWaveArcInfo(r4); + if (info == NULL) + { + GF_AssertFail(); + return 0; + } + + u32 address = NNS_SndArcGetFileAddress(info->unk00); + if (address == 0) + { + GF_AssertFail(); + return 0; + } + + *ptr = SND_GetWaveDataAddress(address, 0); + return *ptr; +} + +THUMB_FUNC u32 FUN_02004F28(u32 param0, struct UnkStruct_020040F4_2 *param1, s32 param2) +{ +#pragma unused(param0) + u32 r4 = FUN_02004F64(1); + u32 r5 = param1->unk08; + + s32 r1 = (param2 / (3 * 0x100)) << 1; + if (r1 < 0) + { + r1 = 32 / r1; + r1 = -r1; + } + else if (r1 == 0) + { + r1 = 32; + } + else + { + r1 = 32 * r1; + } + + u32 r0 = r4 * r1; + if (r0 >= r5) + { + r0 = 0; + } + + return r0; +} + +THUMB_FUNC u32 FUN_02004F64(int param0) +{ + return NNS_SndPlayerGetTick(FUN_02003FF4(param0)); +} + +THUMB_FUNC void FUN_02004F70( + struct UnkStruct_020040F4_2 *param0, u8 *param1, int param2, s32 param3) +{ + int r0; + s32 r1; + int i, j; + u32 r12 = FUN_02004F28(1, param0, param3); + r1 = (s32)r12 - 100; + if (r1 < 0) + { + r1 = 0; + } + + int r3 = 0; + int r7 = 0; + s8 r5; + if (param0->unk0c[r1] < 0x80) + { + r5 = 1; + } + else + { + r5 = -1; + } + r5 = (s8)(s32)r5; + + for (i = r1; i < r12; i += 2) + { + r0 = 0; + if (r5 > 0) + { + if (param0->unk0c[i] > 0x80) + { + r0 = 1; + } + else + { + r3++; + } + } + else + { + if (param0->unk0c[i] < 0x80) + { + r0 = 1; + } + else + { + r3++; + } + } + + if (r0 == 1) + { + for (j = 0; j < 9; j++) + { + if (r3 < UNK_020ECB8C[j]) + { + r7 = j; + break; + } + } + + if (r7 >= param2) + { + r7 = param2 - 1; + } + + if (r3 != 0) + { + param1[param2 - 1 - r7]++; + } + + r3 = 0; + r0 = 0; + if (param0->unk0c[i] < 0x80) + { + r5 = 1; + } + else + { + r5 = -1; + } + r5 = (s8)(s32)r5; + } + } + + for (i = 0; i < param2; i++) + { + if (param1[i] >= 10) + { + param1[i] = 9; + } + } + + for (i = 0; i < param2 - 1; i++) + { + if (param1[i] == 0 && param1[i + 1] != 0) + { + param1[i] = (u8)(param1[i + 1] / 2); + return; + } + } +} + +THUMB_FUNC void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, void *param4) +{ + s16 st10[8][2]; + s16(*st0)[2] = param4; + u8 *r7 = FUN_02003D38(19); + + int r0; + int i, j; + + if (param3 != 1) + { + param2 /= 2; + } + + if (*r7 == 0) + { + return; + } + + for (i = 0; i < *r7; i++) + { + st10[i][0] = param0[param2 - (*r7) + i]; + st10[i][1] = param1[param2 - (*r7) + i]; + } + + for (i = (int)param2 - 1; i >= *r7 - 1; i--) + { + r0 = 0; + for (j = 0; j < *r7; j++) + { + r0 += param0[i - j]; + } + + param0[i] = (s16)(r0 / (*r7)); + + r0 = 0; + for (j = 0; j < *r7; j++) + { + r0 += param1[i - j]; + } + + param1[i] = (s16)(r0 / (*r7)); + } + + for (i = 0; i < *r7; i++) + { + st0[i][0] = st10[i][0]; + st0[i][1] = st10[i][1]; + } + + DC_FlushRange(param0, param2); + DC_FlushRange(param1, param2); +} + +THUMB_FUNC void FUN_02005160(u32 param0) +{ + NNS_SndPlayerSetAllocatableChannel(7, param0); +} + +THUMB_FUNC void FUN_0200516C(u32 param0) +{ + if (param0 == 0) + { + FUN_02005160(0x7ff); + FUN_02004CA4(0); + } + else if (param0 == 1) + { + FUN_02005160(0x7fff); + FUN_02004C80(30); + } + else + { + FUN_02005160(0x7fff); + FUN_02004C80(15); + } + + FUN_02004C78(); +} + +THUMB_FUNC void FUN_020051AC() +{ + if (FUN_02005404() == FALSE && FUN_020048EC(FUN_02003FF4(0)) != -1 && FUN_02004124() != 0x47e) + { + + FUN_02005454(); + FUN_020047C8(1, 1); + return; + } + + FUN_0200541C(); +} + +THUMB_FUNC void FUN_020051EC(u32 param0, u8 param1) +{ + NNS_SndPlayerSetPlayerVolume(param0, param1); +} diff --git a/arm9/src/unk_0204AEA8.c b/arm9/src/unk_0204AEA8.c index a2b2dd71..54deef4d 100644 --- a/arm9/src/unk_0204AEA8.c +++ b/arm9/src/unk_0204AEA8.c @@ -2,9 +2,9 @@ #include "heap.h" #include "unk_0204639C.h" #include "unk_0204AEA8.h" +#include "unk_020040F4.h" extern void MOD05_021E3444(u32, struct UnkSavStruct80 *, u32); -extern void FUN_0200433C(u32, u16, u32); THUMB_FUNC BOOL FUN_0204AEA8(struct UnkStruct_0204639C *a0) { |