diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-25 13:17:06 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-25 13:17:06 -0400 |
commit | f61b7cc024fd9be692960ee284bb078fb5f1f125 (patch) | |
tree | 4b6c5870add11dbe2910e4a27d56d902239cd7ed /arm9/src | |
parent | 40c3f6e85a2d25d3d98b2cfdaf1dd6872bbb4a6d (diff) |
sound.c
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/main.c | 8 | ||||
-rw-r--r-- | arm9/src/sound.c | 321 |
2 files changed, 325 insertions, 4 deletions
diff --git a/arm9/src/main.c b/arm9/src/main.c index 36e81d02..ec3c358c 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -6,6 +6,8 @@ #include "PAD_pad.h" #include "main.h" #include "poke_overlay.h" +#include "options.h" +#include "sound.h" FS_EXTERN_OVERLAY(MODULE_52); FS_EXTERN_OVERLAY(MODULE_63); @@ -31,9 +33,7 @@ extern void FUN_0201259C(void); extern void FUN_02002C14(void); extern void FUN_02002C50(int, int); extern struct UnkStruct_021C59C8 * FUN_0202254C(void); -extern void FUN_02003B98(int, int); -extern int FUN_02029EF8(struct UnkStruct_021C59C8 *); -extern int LoadPlayerDataAddress(struct UnkStruct_021C59C8 *); +extern u32 FUN_02029EF8(struct UnkStruct_021C59C8 *); extern void FUN_02020AFC(void); extern int FUN_020337E8(int); extern void FUN_02034188(int, int); @@ -75,7 +75,7 @@ THUMB_FUNC void NitroMain(void) FUN_02002C50(3, 3); gBacklightTop.unk18 = -1; gBacklightTop.unk20 = FUN_0202254C(); - FUN_02003B98(FUN_02029EF8(gBacklightTop.unk20), LoadPlayerDataAddress(gBacklightTop.unk20)); + InitSoundData(FUN_02029EF8(gBacklightTop.unk20), LoadPlayerDataAddress(gBacklightTop.unk20)); FUN_02020AFC(); if (FUN_020337E8(3) == 3) FUN_02034188(3, 0); diff --git a/arm9/src/sound.c b/arm9/src/sound.c new file mode 100644 index 00000000..a89d0f56 --- /dev/null +++ b/arm9/src/sound.c @@ -0,0 +1,321 @@ +#include "global.h" +#include "sound.h" +#include "SPI_mic.h" +#include "SPI_pm.h" + +#pragma thumb on + +static struct SoundData sSoundDataBuffer; +static u32 UNK_02107070[2]; + +void FUN_02003C40(void); +BOOL FUN_02003D04(void); +void FUN_020040C8(void); +void FUN_02004064(struct SoundData *); +void FUN_02004088(struct SoundData *); +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); +extern void FUN_02005CFC(void); + +void InitSoundData(u32 a0, struct Options * a1) +{ + struct SoundData * sdat = GetSoundDataPointer(); + FUN_020C01D0(); + FUN_020040C8(); + FUN_02004064(sdat); + sdat->unk_00090 = FUN_020C2A94(sdat->unk_00094, sizeof(sdat->unk_00094)); + FUN_020C26F8(&sdat->header, "data/sound/sound_data.sdat", sdat->unk_00090, 0); + FUN_020C39CC(sdat->unk_00090); + FUN_02004088(sdat); + FUN_020040A4(sdat); + UNK_02107070[1] = 0; + sdat->unk_BCD4C = a0; + FUN_02004D60(a1->unk0_4); +} + +void FUN_02003C10(void) +{ + struct SoundData * sdat = GetSoundDataPointer(); + if (!FUN_02003D04()) + { + if (sdat->unk_BCD00 > 0) + sdat->unk_BCD00--; + FUN_02003C40(); + } + FUN_02005CFC(); + FUN_020C01A0(); +} + +void FUN_02003C40(void) +{ + struct SoundData * sdat = GetSoundDataPointer(); + switch (UNK_02107070[0]) + { + case 1: + FUN_02003CE8(2); + break; + case 3: + if (!FUN_02005404()) + FUN_02003CE8(2); + break; + case 4: + if (!FUN_02005404()) + FUN_02003CE8(2); + break; + case 5: + if (!FUN_02005404() && !FUN_02004D94()) + { + FUN_020040DC(); + FUN_0200521C(sdat->unk_BCD0E); + } + break; + case 6: + if (!FUN_02005404() && !FUN_02004D94()) + { + FUN_020040DC(); + FUN_0200521C(sdat->unk_BCD0E); + FUN_0200538C(0x7F, (int)sdat->unk_BCD08, 0); + } + break; + } +} + +void FUN_02003CE8(int a0) +{ + struct SoundData * sdat = GetSoundDataPointer(); + sdat->unk_BCCFC = 0; + UNK_02107070[0] = (u32)a0; +} + +BOOL FUN_02003D04(void) +{ + struct SoundData * sdat = GetSoundDataPointer(); + if (FUN_020048BC(2)) + return TRUE; + return sdat->unk_BCD12 != 0; +} + +struct SoundData * GetSoundDataPointer(void) +{ + return &sSoundDataBuffer; +} + +void * FUN_02003D38(u32 a0) +{ + struct SoundData * sdat = GetSoundDataPointer(); + switch (a0) + { + case 5: + return &sdat->unk_BCCFE; + case 0: + return &sdat->unk_BBCB8; + case 1: + return &sdat->unk_BBCBC; + case 2: + return &sdat->unk_BBCC0; + case 3: + return &sdat->unk_BBCE0; + case 4: + return &sdat->unk_BCCE0; + case 6: + return &sdat->unk_BCD00; + case 7: + return &sdat->unk_BCD04; + case 8: + return &sdat->unk_BCD08; + case 9: + return &sdat->unk_BCD0C; + case 10: + return &sdat->unk_BCD0E; + case 11: + return &sdat->unk_BCD10; + case 12: + return &sdat->unk_BCD11; + case 13: + return &sdat->unk_BCD12; + case 14: + return &sdat->unk_BCD14; + case 15: + return &sdat->unk_BCD15; + case 16: + return &sdat->unk_BCD16; + case 17: + return &sdat->unk_BCD17; + case 18: + return &sdat->unk_BCD18; + case 19: + return &sdat->unk_BCD19; + case 20: + return &sdat->unk_BCD1A; + case 21: + return &sdat->unk_BCD1B; + case 22: + return &sdat->unk_BCD1C[0]; + case 23: + return &sdat->unk_BCD1C[1]; + case 24: + return &sdat->unk_BCD1C[2]; + case 25: + return &sdat->unk_BCD1C[3]; + case 26: + return &sdat->unk_BCD1C[4]; + case 27: + return &sdat->unk_BCD1C[5]; + case 28: + return &sdat->unk_BCD1C[6]; + case 29: + return &sdat->unk_BCD38; + case 30: + return &sdat->unk_BCD39; + case 31: + return &sdat->unk_BCD3A; + case 32: + return &sdat->unk_BCD3C; + case 33: + return &sdat->unk_BCD40; + case 34: + return &sdat->unk_BCD48; + case 35: + return &sdat->unk_BCD4C; + case 36: + return &sdat->unk_BCD50; + case 37: + return &sdat->unk_BCD54; + case 38: + return &sdat->unk_BCD58; + case 39: + return &sdat->unk_BCD5C; + default: + GF_ASSERT(0); + return NULL; + } +} + +int FUN_02003F3C(int * a0) +{ + struct SoundData * sdat = GetSoundDataPointer(); + int r4 = FUN_020C290C(sdat->unk_00090); + GF_ASSERT(r4 != -1); + if (a0 != NULL) + *a0 = r4; + return r4; +} + +void FUN_02003F64(int a0) +{ + struct SoundData * sdat = GetSoundDataPointer(); + FUN_020C2828(sdat->unk_00090, a0); +} + +BOOL FUN_02003F78(u32 * a0) +{ + struct SoundData * sdat = GetSoundDataPointer(); + return FUN_020C36A8(a0, sdat->unk_00090); +} + +BOOL FUN_02003F90(u32 * a0) +{ + struct SoundData * sdat = GetSoundDataPointer(); + return FUN_020C3674(a0, sdat->unk_00090); +} + +BOOL FUN_02003FA8(u32 * a0, u32 * a1) +{ + struct SoundData * sdat = GetSoundDataPointer(); + return FUN_020C35E0(a0, a1, sdat->unk_00090); +} + +BOOL FUN_02003FC4(u32 * a0) +{ + struct SoundData * sdat = GetSoundDataPointer(); + return FUN_020C360C(a0, sdat->unk_00090); +} + +BOOL FUN_02003FDC(u32 * a0) +{ + struct SoundData * sdat = GetSoundDataPointer(); + return FUN_020C3640(a0, sdat->unk_00090); +} + +u32 * FUN_02003FF4(int a0) +{ + struct SoundData * sdat = GetSoundDataPointer(); + if (a0 >= 9) + { + GF_ASSERT(0); + a0 = 0; + } + return &sdat->unk_BBC94[a0]; +} + +u32 FUN_02004018(u32 a0) +{ + switch (a0) + { + case 1: + return 0; + case 0: + return 1; + case 2: + return 2; + case 3: + return 3; + case 4: + return 4; + case 5: + return 5; + case 6: + return 6; + case 7: + return 7; + default: + GF_ASSERT(0); + return 3; + } +} + +void FUN_02004064(struct SoundData * sdat) +{ + int i; + memset(sdat, 0, sizeof(*sdat)); + for (i = 0; i < 7; i++) + sdat->unk_BCD1C[i] = i + 1; +} + +void FUN_02004088(struct SoundData * sdat) +{ + int i; + for (i = 0; i < 9; i++) + { + FUN_020C0F80(&sdat->unk_BBC94[i]); + } +} + +void FUN_020040A4(struct SoundData * sdat) +{ + FUN_02003F3C(&sdat->unk_BCD1C[0]); + FUN_02003F78(NULL); + FUN_02003F3C(&sdat->unk_BCD1C[1]); +} + +void FUN_020040C8(void) +{ + MIC_Init(); + PM_SetAmp(1); + PM_SetAmpGain(2); +} + +void FUN_020040DC(void) +{ + FUN_020C1040(7, 0); + FUN_02003FF4(7); + FUN_020C0F68(); +} |