summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/unk_020040F4.s2288
-rw-r--r--arm9/src/scrcmd_sound.c7
-rw-r--r--arm9/src/sound.c4
-rw-r--r--arm9/src/unk_020040F4.c1365
-rw-r--r--arm9/src/unk_0204AEA8.c2
-rw-r--r--include/unk_020040F4.h111
6 files changed, 1479 insertions, 2298 deletions
diff --git a/arm9/asm/unk_020040F4.s b/arm9/asm/unk_020040F4.s
deleted file mode 100644
index cfd9551f..00000000
--- a/arm9/asm/unk_020040F4.s
+++ /dev/null
@@ -1,2288 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .bss
- .global UNK_021C3DD8
-UNK_021C3DD8: ; 0x021C3DD8
- .space 0x8
-
- .global UNK_021C3DE0
-UNK_021C3DE0: ; 0x021C3DE0
- .space 0x7d0
-
- .section .rodata
-
- .global UNK_020ECB8C
-UNK_020ECB8C: ; 0x020ECB8C
- .byte 2, 3, 4, 5, 6, 7, 8, 9, 10
-
- .text
-
- thumb_func_start FUN_020040F4
-FUN_020040F4: ; 0x020040F4
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x5
- bl FUN_02003D38
- strb r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004104
-FUN_02004104: ; 0x02004104
- push {r3, lr}
- mov r0, #0x5
- bl FUN_02003D38
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-
- thumb_func_start FUN_02004110
-FUN_02004110: ; 0x02004110
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x9
- bl FUN_02003D38
- strh r4, [r0, #0x0]
- mov r0, #0x0
- bl FUN_02004130
- pop {r4, pc}
-
- thumb_func_start FUN_02004124
-FUN_02004124: ; 0x02004124
- push {r3, lr}
- mov r0, #0x9
- bl FUN_02003D38
- ldrh r0, [r0, #0x0]
- pop {r3, pc}
-
- thumb_func_start FUN_02004130
-FUN_02004130: ; 0x02004130
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0xa
- bl FUN_02003D38
- strh r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004140
-FUN_02004140: ; 0x02004140
- push {r3, lr}
- mov r0, #0xa
- bl FUN_02003D38
- ldrh r0, [r0, #0x0]
- pop {r3, pc}
-
- thumb_func_start FUN_0200414C
-FUN_0200414C: ; 0x0200414C
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x1f
- bl FUN_02003D38
- strh r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_0200415C
-FUN_0200415C: ; 0x0200415C
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x14
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x15
- bl FUN_02003D38
- cmp r5, #0x33
- bhs _0200417A
- strb r5, [r4, #0x0]
- mov r1, #0x0
- strb r1, [r0, #0x0]
- pop {r3-r5, pc}
-_0200417A:
- strb r5, [r0, #0x0]
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02004180
-FUN_02004180: ; 0x02004180
- push {r3, lr}
- cmp r0, #0x39
- bgt _020041DE
- blt _0200418A
- b _020042C8
-_0200418A:
- cmp r0, #0x35
- bgt _020041CC
- blt _02004192
- b _0200429A
-_02004192:
- cmp r0, #0x33
- bgt _020041C6
- bge _0200427C
- cmp r0, #0xe
- bhi _020041CA
- add r2, r0, r0
- add r2, pc
- ldrh r2, [r2, #0x6]
- lsl r2, r2, #0x10
- asr r2, r2, #0x10
- add pc, r2
-_020041A8: ; jump table (using 16-bit offset)
- .short _0200432C - _020041A8 - 2; case 0
- .short _02004222 - _020041A8 - 2; case 1
- .short _0200422C - _020041A8 - 2; case 2
- .short _02004236 - _020041A8 - 2; case 3
- .short _02004240 - _020041A8 - 2; case 4
- .short _0200424A - _020041A8 - 2; case 5
- .short _0200425E - _020041A8 - 2; case 6
- .short _0200429A - _020041A8 - 2; case 7
- .short _02004268 - _020041A8 - 2; case 8
- .short _02004222 - _020041A8 - 2; case 9
- .short _02004222 - _020041A8 - 2; case 10
- .short _02004254 - _020041A8 - 2; case 11
- .short _02004272 - _020041A8 - 2; case 12
- .short _0200422C - _020041A8 - 2; case 13
- .short _02004222 - _020041A8 - 2; case 14
-_020041C6:
- cmp r0, #0x34
- beq _02004290
-_020041CA:
- b _0200432C
-_020041CC:
- cmp r0, #0x37
- bgt _020041D8
- bge _020042AE
- cmp r0, #0x36
- beq _020042A4
- b _0200432C
-_020041D8:
- cmp r0, #0x38
- beq _020042BE
- b _0200432C
-_020041DE:
- cmp r0, #0x3d
- bgt _020041F8
- blt _020041E6
- b _020042F0
-_020041E6:
- cmp r0, #0x3b
- bgt _020041F2
- bge _020042DC
- cmp r0, #0x3a
- beq _020042D2
- b _0200432C
-_020041F2:
- cmp r0, #0x3c
- beq _020042E6
- b _0200432C
-_020041F8:
- cmp r0, #0x3f
- bgt _02004206
- blt _02004200
- b _02004304
-_02004200:
- cmp r0, #0x3e
- beq _020042FA
- b _0200432C
-_02004206:
- sub r0, #0x40
- cmp r0, #0x3
- bls _0200420E
- b _0200432C
-_0200420E:
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_0200421A: ; jump table (using 16-bit offset)
- .short _0200430E - _0200421A - 2; case 0
- .short _0200431E - _0200421A - 2; case 1
- .short _02004286 - _0200421A - 2; case 2
- .short _020042AE - _0200421A - 2; case 3
-_02004222:
- mov r0, #0x1
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_0200422C:
- mov r0, #0x2
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_02004236:
- mov r0, #0xd
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_02004240:
- mov r0, #0x1
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_0200424A:
- mov r0, #0x2
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_02004254:
- mov r0, #0x1
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_0200425E:
- mov r0, #0xb
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_02004268:
- mov r0, #0x1
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_02004272:
- mov r0, #0xe
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_0200427C:
- mov r0, #0x3
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_02004286:
- mov r0, #0x6
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_02004290:
- mov r0, #0x5
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_0200429A:
- mov r0, #0x9
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_020042A4:
- mov r0, #0xa
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_020042AE:
- ldr r0, _02004330 ; =0x000005E5
- bl GF_Snd_LoadBank
- ldr r0, _02004330 ; =0x000005E5
- bl GF_Snd_LoadWaveArc
- add r1, r0, #0x0
- b _0200432C
-_020042BE:
- mov r0, #0xc
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_020042C8:
- mov r0, #0x7
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_020042D2:
- mov r0, #0x8
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_020042DC:
- mov r0, #0xf
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_020042E6:
- mov r0, #0x3
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_020042F0:
- mov r0, #0x5
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_020042FA:
- mov r0, #0xf
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_02004304:
- mov r0, #0x4
- bl GF_Snd_LoadGroup
- add r1, r0, #0x0
- b _0200432C
-_0200430E:
- ldr r0, _02004334 ; =0x000005ED
- bl GF_Snd_LoadBank
- ldr r0, _02004334 ; =0x000005ED
- bl GF_Snd_LoadWaveArc
- add r1, r0, #0x0
- b _0200432C
-_0200431E:
- ldr r0, _02004338 ; =0x000005EC
- bl GF_Snd_LoadBank
- ldr r0, _02004338 ; =0x000005EC
- bl GF_Snd_LoadWaveArc
- add r1, r0, #0x0
-_0200432C:
- add r0, r1, #0x0
- pop {r3, pc}
- .balign 4
-_02004330: .word 0x000005E5
-_02004334: .word 0x000005ED
-_02004338: .word 0x000005EC
-
- thumb_func_start FUN_0200433C
-FUN_0200433C: ; 0x0200433C
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- mov r0, #0x14
- add r5, r1, #0x0
- add r6, r2, #0x0
- bl FUN_02003D38
- str r0, [sp, #0x0]
- mov r0, #0x15
- bl FUN_02003D38
- str r0, [sp, #0x4]
- mov r0, #0xd
- bl FUN_02003D38
- add r7, r0, #0x0
- cmp r4, #0x33
- bhs _02004370
- ldr r0, [sp, #0x0]
- ldrb r0, [r0, #0x0]
- cmp r0, r4
- bne _0200437E
- add sp, #0x8
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004370:
- ldr r0, [sp, #0x4]
- ldrb r0, [r0, #0x0]
- cmp r0, r4
- bne _0200437E
- add sp, #0x8
- mov r0, #0x0
- pop {r3-r7, pc}
-_0200437E:
- add r0, r4, #0x0
- bl FUN_0200415C
- cmp r4, #0x39
- bgt _020043DC
- bge _02004458
- cmp r4, #0x35
- bgt _020043CA
- bge _02004458
- cmp r4, #0x33
- bgt _020043C4
- bge _02004458
- cmp r4, #0xe
- bhi _020043C8
- add r0, r4, r4
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_020043A6: ; jump table (using 16-bit offset)
- .short _020044A0 - _020043A6 - 2; case 0
- .short _02004460 - _020043A6 - 2; case 1
- .short _02004484 - _020043A6 - 2; case 2
- .short _02004496 - _020043A6 - 2; case 3
- .short _0200441C - _020043A6 - 2; case 4
- .short _02004430 - _020043A6 - 2; case 5
- .short _02004444 - _020043A6 - 2; case 6
- .short _0200444E - _020043A6 - 2; case 7
- .short _02004496 - _020043A6 - 2; case 8
- .short _02004496 - _020043A6 - 2; case 9
- .short _02004496 - _020043A6 - 2; case 10
- .short _0200443A - _020043A6 - 2; case 11
- .short _02004496 - _020043A6 - 2; case 12
- .short _02004496 - _020043A6 - 2; case 13
- .short _02004472 - _020043A6 - 2; case 14
-_020043C4:
- cmp r4, #0x34
- beq _02004458
-_020043C8:
- b _020044A0
-_020043CA:
- cmp r4, #0x37
- bgt _020043D6
- bge _02004458
- cmp r4, #0x36
- beq _02004458
- b _020044A0
-_020043D6:
- cmp r4, #0x38
- beq _02004458
- b _020044A0
-_020043DC:
- cmp r4, #0x3d
- bgt _020043F4
- bge _02004458
- cmp r4, #0x3b
- bgt _020043EE
- bge _02004458
- cmp r4, #0x3a
- beq _02004458
- b _020044A0
-_020043EE:
- cmp r4, #0x3c
- beq _02004458
- b _020044A0
-_020043F4:
- cmp r4, #0x3f
- bgt _02004400
- bge _02004458
- cmp r4, #0x3e
- beq _02004458
- b _020044A0
-_02004400:
- add r0, r4, #0x0
- sub r0, #0x40
- cmp r0, #0x3
- bhi _020044A0
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_02004414: ; jump table (using 16-bit offset)
- .short _02004458 - _02004414 - 2; case 0
- .short _02004458 - _02004414 - 2; case 1
- .short _02004458 - _02004414 - 2; case 2
- .short _02004458 - _02004414 - 2; case 3
-_0200441C:
- mov r0, #0x0
- bl FUN_0200516C
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_020044D4
- mov r0, #0x0
- strh r0, [r7, #0x0]
- b _020044A0
-_02004430:
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_02004648
- b _020044A0
-_0200443A:
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_02004680
- b _020044A0
-_02004444:
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_020046A0
- b _020044A0
-_0200444E:
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_020046C4
- b _020044A0
-_02004458:
- add r0, r4, #0x0
- bl FUN_020046E8
- b _020044A0
-_02004460:
- mov r0, #0x1
- bl FUN_0200516C
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r6, #0x0
- bl FUN_02004704
- b _020044A0
-_02004472:
- mov r0, #0x2
- bl FUN_0200516C
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r6, #0x0
- bl FUN_02004704
- b _020044A0
-_02004484:
- mov r0, #0x0
- bl FUN_0200516C
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r6, #0x0
- bl FUN_02004704
- b _020044A0
-_02004496:
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r6, #0x0
- bl FUN_02004704
-_020044A0:
- mov r0, #0x1
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020044A8
-FUN_020044A8: ; 0x020044A8
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- ldr r0, [r0, #0x0]
- bl GF_Snd_RestoreState
- mov r0, #0x18
- bl FUN_02003D38
- bl GF_Snd_SaveState
- add r0, r4, #0x0
- bl FUN_02004180
- mov r0, #0x19
- bl FUN_02003D38
- bl GF_Snd_SaveState
- pop {r4, pc}
-
- thumb_func_start FUN_020044D4
-FUN_020044D4: ; 0x020044D4
- push {r4-r6, lr}
- add r5, r0, #0x0
- mov r0, #0xb
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- mov r0, #0x1f
- bl FUN_02003D38
- mov r0, #0x0
- bl FUN_02003FF4
- bl FUN_020048EC
- add r4, r0, #0x0
- ldrb r0, [r6, #0x0]
- cmp r0, #0x0
- bne _0200450E
- cmp r4, r5
- bne _0200450E
- bl FUN_02004140
- mov r1, #0x12
- lsl r1, r1, #0x6
- cmp r0, r1
- bne _02004566
-_0200450E:
- mov r0, #0x1
- bl FUN_02004DBC
- bl FUN_02005454
- cmp r4, r5
- beq _02004528
- mov r0, #0x1
- mov r1, #0x0
- bl FUN_020047C8
- bl FUN_0200541C
-_02004528:
- ldrb r0, [r6, #0x0]
- cmp r0, #0x1
- bne _02004560
- mov r0, #0x2
- bl FUN_02004748
- bl GF_Snd_RestoreState
- mov r0, #0x4
- bl FUN_02004180
- mov r0, #0x19
- bl FUN_02003D38
- bl GF_Snd_SaveState
- cmp r4, r5
- beq _02004554
- mov r0, #0x1
- mov r1, #0x0
- bl FUN_020047C8
-_02004554:
- lsl r1, r4, #0x10
- add r0, r5, #0x0
- lsr r1, r1, #0x10
- bl FUN_02004568
- pop {r4-r6, pc}
-_02004560:
- add r0, r5, #0x0
- bl FUN_0200521C
-_02004566:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004568
-FUN_02004568: ; 0x02004568
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x1f
- bl FUN_02003D38
- add r4, r0, #0x0
- ldrh r0, [r4, #0x0]
- bl FUN_02004900
- ldr r1, _020045C0 ; =0x000003E9
- cmp r0, r1
- beq _02004594
- add r1, r1, #0x2
- cmp r0, r1
- beq _02004594
- add r0, r5, #0x0
- mov r1, #0x4
- bl GF_Snd_LoadSeqEx
- bl GF_AssertFail
- b _0200459C
-_02004594:
- ldrh r0, [r4, #0x0]
- mov r1, #0x6
- bl GF_Snd_LoadSeqEx
-_0200459C:
- mov r0, #0x1a
- bl FUN_02003D38
- bl GF_Snd_SaveState
- mov r0, #0x1
- mov r1, #0x0
- bl FUN_020047C8
- mov r0, #0x7f
- mov r1, #0x28
- mov r2, #0x0
- bl FUN_0200538C
- mov r0, #0x0
- bl FUN_02004DBC
- pop {r3-r5, pc}
- .balign 4
-_020045C0: .word 0x000003E9
-
- thumb_func_start FUN_020045C4
-FUN_020045C4: ; 0x020045C4
- push {r3-r7, lr}
- add r7, r0, #0x0
- mov r0, #0x12
- add r5, r1, #0x0
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x1f
- bl FUN_02003D38
- add r4, r0, #0x0
- ldrb r0, [r6, #0x0]
- cmp r0, #0x1
- beq _020045E4
- cmp r5, #0x0
- bne _02004642
-_020045E4:
- mov r0, #0x1
- bl FUN_02004748
- bl GF_Snd_RestoreState
- ldrh r0, [r4, #0x0]
- mov r1, #0x2
- bl GF_Snd_LoadSeqEx
- mov r0, #0x18
- bl FUN_02003D38
- bl GF_Snd_SaveState
- mov r0, #0x4
- bl FUN_02004180
- mov r0, #0x19
- bl FUN_02003D38
- bl GF_Snd_SaveState
- ldrh r0, [r4, #0x0]
- bl FUN_02004900
- ldr r1, _02004644 ; =0x000003E9
- cmp r0, r1
- beq _02004630
- add r1, r1, #0x2
- cmp r0, r1
- beq _02004630
- add r0, r7, #0x0
- mov r1, #0x4
- bl GF_Snd_LoadSeqEx
- bl GF_AssertFail
- b _02004638
-_02004630:
- ldrh r0, [r4, #0x0]
- mov r1, #0x4
- bl GF_Snd_LoadSeqEx
-_02004638:
- mov r0, #0x1a
- bl FUN_02003D38
- bl GF_Snd_SaveState
-_02004642:
- pop {r3-r7, pc}
- .balign 4
-_02004644: .word 0x000003E9
-
- thumb_func_start FUN_02004648
-FUN_02004648: ; 0x02004648
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- bl FUN_020051AC
- mov r0, #0x2
- bl FUN_02004748
- bl GF_Snd_RestoreState
- mov r0, #0x5
- bl FUN_02004180
- mov r0, #0x19
- bl FUN_02003D38
- bl GF_Snd_SaveState
- mov r0, #0x1
- bl FUN_02004DBC
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004680
-FUN_02004680: ; 0x02004680
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- bl FUN_0200541C
- bl FUN_02004810
- mov r0, #0x4
- bl FUN_020044A8
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
-
- thumb_func_start FUN_020046A0
-FUN_020046A0: ; 0x020046A0
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- bl FUN_0200541C
- mov r0, #0x6
- bl FUN_020044A8
- mov r0, #0x1
- bl FUN_02004DBC
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_020046C4
-FUN_020046C4: ; 0x020046C4
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- bl FUN_0200541C
- mov r0, #0x7
- bl FUN_020044A8
- mov r0, #0x1
- bl FUN_02004DBC
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_020046E8
-FUN_020046E8: ; 0x020046E8
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02004738
- add r0, r4, #0x0
- bl FUN_02004180
- mov r0, #0x1b
- bl FUN_02003D38
- bl GF_Snd_SaveState
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004704
-FUN_02004704: ; 0x02004704
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x17
- add r4, r1, #0x0
- bl FUN_02003D38
- bl FUN_0200541C
- add r0, r5, #0x0
- bl FUN_020044A8
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02004724
-FUN_02004724: ; 0x02004724
- push {r4, lr}
- add r4, r0, #0x0
- bl GetSoundDataPointer
- bl FUN_020051AC
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
-
- thumb_func_start FUN_02004738
-FUN_02004738: ; 0x02004738
- push {r3, lr}
- mov r0, #0x4
- bl FUN_02004748
- bl GF_Snd_RestoreState
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004748
-FUN_02004748: ; 0x02004748
- push {r3-r5, lr}
- add r4, r0, #0x0
- bl GetSoundDataPointer
- cmp r4, #0x7
- blt _02004762
- bl GF_AssertFail
- mov r0, #0x1a
- bl FUN_02003D38
- ldr r0, [r0, #0x0]
- pop {r3-r5, pc}
-_02004762:
- cmp r4, #0x6
- bhi _020047C4
- add r0, r4, r4
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_02004772: ; jump table (using 16-bit offset)
- .short _02004780 - _02004772 - 2; case 0
- .short _0200478A - _02004772 - 2; case 1
- .short _02004794 - _02004772 - 2; case 2
- .short _0200479E - _02004772 - 2; case 3
- .short _020047A8 - _02004772 - 2; case 4
- .short _020047B2 - _02004772 - 2; case 5
- .short _020047BC - _02004772 - 2; case 6
-_02004780:
- mov r0, #0x16
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_0200478A:
- mov r0, #0x17
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_02004794:
- mov r0, #0x18
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_0200479E:
- mov r0, #0x19
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_020047A8:
- mov r0, #0x1a
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_020047B2:
- mov r0, #0x1b
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_020047BC:
- mov r0, #0x1c
- bl FUN_02003D38
- add r5, r0, #0x0
-_020047C4:
- ldr r0, [r5, #0x0]
- pop {r3-r5, pc}
-
- thumb_func_start FUN_020047C8
-FUN_020047C8: ; 0x020047C8
- push {r4-r6, lr}
- add r5, r1, #0x0
- cmp r0, #0x1
- bne _020047DC
- mov r0, #0xb
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r4, #0x0
- b _020047EA
-_020047DC:
- cmp r0, #0x7
- bne _0200480E
- mov r0, #0xc
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r4, #0x7
-_020047EA:
- cmp r5, #0x0
- bne _02004800
- add r0, r4, #0x0
- bl FUN_02003FF4
- bl FUN_020048EC
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- bl FUN_02004110
-_02004800:
- add r0, r4, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- bl NNS_SndPlayerPause
- strb r5, [r6, #0x0]
-_0200480E:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004810
-FUN_02004810: ; 0x02004810
- push {r4, lr}
- mov r0, #0xb
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0xc
- bl FUN_02003D38
- mov r1, #0x0
- strb r1, [r4, #0x0]
- strb r1, [r0, #0x0]
- pop {r4, pc}
-
- thumb_func_start FUN_02004828
-FUN_02004828: ; 0x02004828
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- add r2, r4, #0x0
- bl NNS_SndPlayerMoveVolume
- pop {r3-r5, pc}
-
- thumb_func_start FUN_0200483C
-FUN_0200483C: ; 0x0200483C
- push {r4, lr}
- add r4, r1, #0x0
- bpl _02004844
- mov r4, #0x0
-_02004844:
- cmp r4, #0x7f
- ble _0200484A
- mov r4, #0x7f
-_0200484A:
- bl FUN_02003FF4
- add r1, r4, #0x0
- bl NNS_SndPlayerSetInitialVolume
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004858
-FUN_02004858: ; 0x02004858
- push {r3-r5, lr}
- add r5, r1, #0x0
- bl NNS_SndArcGetSeqParam
- cmp r5, #0x1
- beq _02004868
- cmp r5, #0x8
- bne _0200486C
-_02004868:
- mov r4, #0x7f
- b _02004872
-_0200486C:
- cmp r0, #0x0
- beq _0200488A
- ldrb r4, [r0, #0x2]
-_02004872:
- bl FUN_020313EC
- cmp r0, #0x1
- bne _0200488A
- add r0, r4, #0x0
- mov r1, #0x5
- bl _s32_div_f
- add r1, r0, #0x0
- add r0, r5, #0x0
- bl FUN_0200483C
-_0200488A:
- pop {r3-r5, pc}
-
- thumb_func_start FUN_0200488C
-FUN_0200488C: ; 0x0200488C
- push {r4, lr}
- add r4, r1, #0x0
- bl FUN_020048D0
- bl FUN_02004018
- add r1, r4, #0x0
- bl FUN_0200483C
- pop {r4, pc}
-
- thumb_func_start FUN_020048A0
-FUN_020048A0: ; 0x020048A0
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_02003FF4
- mov r2, #0x0
- mvn r2, r2
- add r1, r5, #0x0
- add r3, r2, #0x0
- str r4, [sp, #0x0]
- bl NNS_SndArcPlayerStartSeqEx
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_020048BC
-FUN_020048BC: ; 0x020048BC
- push {r4, lr}
- add r4, r0, #0x0
- bpl _020048C6
- bl GF_AssertFail
-_020048C6:
- add r0, r4, #0x0
- bl NNS_SndPlayerCountPlayingSeqByPlayerNo
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_020048D0
-FUN_020048D0: ; 0x020048D0
- push {r3, lr}
- cmp r0, #0x0
- bne _020048DA
- mov r0, #0xff
- pop {r3, pc}
-_020048DA:
- bl NNS_SndArcGetSeqParam
- cmp r0, #0x0
- bne _020048E6
- mov r0, #0xff
- pop {r3, pc}
-_020048E6:
- ldrb r0, [r0, #0x5]
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_020048EC
-FUN_020048EC: ; 0x020048EC
- ldr r3, _020048F0 ; =NNS_SndPlayerGetSeqNo
- bx r3
- .balign 4
-_020048F0: .word NNS_SndPlayerGetSeqNo
-
- thumb_func_start FUN_020048F4
-FUN_020048F4: ; 0x020048F4
- push {r3, lr}
- bl FUN_02004900
- bl NNS_SndArcGetBankInfo
- pop {r3, pc}
-
- thumb_func_start FUN_02004900
-FUN_02004900: ; 0x02004900
- push {r3, lr}
- bl NNS_SndArcGetSeqParam
- cmp r0, #0x0
- bne _0200490E
- mov r0, #0x0
- pop {r3, pc}
-_0200490E:
- ldrh r0, [r0, #0x0]
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004914
-FUN_02004914: ; 0x02004914
- ldr r3, _02004918 ; =MIC_StartAutoSampling
- bx r3
- .balign 4
-_02004918: .word MIC_StartAutoSampling
-
- thumb_func_start FUN_0200491C
-FUN_0200491C: ; 0x0200491C
- push {r3, lr}
- bl GetSoundDataPointer
- bl MIC_StopAutoSampling
- pop {r3, pc}
-
- thumb_func_start FUN_02004928
-FUN_02004928: ; 0x02004928
- push {r3, lr}
- bl MIC_DoSamplingAsync
- pop {r3, pc}
-
- thumb_func_start FUN_02004930
-FUN_02004930: ; 0x02004930
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl GetSoundDataPointer
- mov r0, #0xf
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r4, r0, #0x0
- cmp r5, #0xe
- beq _02004954
- cmp r5, #0xf
- beq _02004954
- bl GF_AssertFail
-_02004954:
- cmp r5, #0xe
- bne _02004962
- ldrb r0, [r6, #0x0]
- cmp r0, #0x0
- bne _02004962
- bl GF_AssertFail
-_02004962:
- cmp r5, #0xf
- bne _02004970
- ldrb r0, [r4, #0x0]
- cmp r0, #0x0
- bne _02004970
- bl GF_AssertFail
-_02004970:
- cmp r5, #0xe
- bne _0200497C
- mov r0, #0x0
- bl FUN_02003D38
- pop {r4-r6, pc}
-_0200497C:
- mov r0, #0x1
- bl FUN_02003D38
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004984
-FUN_02004984: ; 0x02004984
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl GetSoundDataPointer
- mov r0, #0xf
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r4, r0, #0x0
- cmp r5, #0xe
- beq _020049A8
- cmp r5, #0xf
- beq _020049A8
- bl GF_AssertFail
-_020049A8:
- cmp r5, #0xe
- bne _020049D6
- ldrb r0, [r6, #0x0]
- cmp r0, #0x0
- bne _020049D0
- mov r0, #0x0
- bl FUN_02003D38
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl NNS_SndWaveOutAllocChannel
- str r0, [r4, #0x0]
- cmp r0, #0x0
- bne _020049CA
- mov r0, #0x0
- pop {r4-r6, pc}
-_020049CA:
- mov r0, #0x1
- strb r0, [r6, #0x0]
- b _020049FE
-_020049D0:
- bl GF_AssertFail
- b _020049FE
-_020049D6:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x0
- bne _020049FA
- mov r0, #0x1
- bl FUN_02003D38
- add r6, r0, #0x0
- add r0, r5, #0x0
- bl NNS_SndWaveOutAllocChannel
- str r0, [r6, #0x0]
- cmp r0, #0x0
- bne _020049F4
- mov r0, #0x0
- pop {r4-r6, pc}
-_020049F4:
- mov r0, #0x1
- strb r0, [r4, #0x0]
- b _020049FE
-_020049FA:
- bl GF_AssertFail
-_020049FE:
- mov r0, #0x1
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02004A04
-FUN_02004A04: ; 0x02004A04
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl GetSoundDataPointer
- mov r0, #0xf
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r4, r0, #0x0
- cmp r5, #0xe
- beq _02004A2A
- cmp r5, #0xf
- beq _02004A2A
- bl GF_AssertFail
- pop {r4-r6, pc}
-_02004A2A:
- cmp r5, #0xe
- bne _02004A4C
- ldrb r0, [r6, #0x0]
- cmp r0, #0x1
- bne _02004A46
- add r0, r5, #0x0
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- bl NNS_SndWaveOutFreeChannel
- mov r0, #0x0
- strb r0, [r6, #0x0]
- pop {r4-r6, pc}
-_02004A46:
- bl GF_AssertFail
- pop {r4-r6, pc}
-_02004A4C:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x1
- bne _02004A64
- add r0, r5, #0x0
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- bl NNS_SndWaveOutFreeChannel
- mov r0, #0x0
- strb r0, [r4, #0x0]
- pop {r4-r6, pc}
-_02004A64:
- bl GF_AssertFail
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02004A6C
-FUN_02004A6C: ; 0x02004A6C
- push {r3-r5, lr}
- sub sp, #0x18
- add r3, r0, #0x0
- ldr r0, [r3, #0x10]
- add r4, r1, #0x0
- str r0, [sp, #0x0]
- ldr r0, [r3, #0x14]
- str r0, [sp, #0x4]
- ldr r0, [r3, #0x18]
- str r0, [sp, #0x8]
- ldr r0, [r3, #0x1c]
- str r0, [sp, #0xc]
- ldr r0, [r3, #0x20]
- str r0, [sp, #0x10]
- ldr r0, [r3, #0x24]
- str r0, [sp, #0x14]
- ldr r0, [r3, #0x0]
- ldr r1, [r3, #0x4]
- ldr r2, [r3, #0x8]
- ldr r0, [r0, #0x0]
- ldr r3, [r3, #0xc]
- bl NNS_SndWaveOutStart
- add r5, r0, #0x0
- bne _02004AA4
- add r0, r4, #0x0
- bl FUN_02004A04
-_02004AA4:
- add r0, r5, #0x0
- add sp, #0x18
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02004AAC
-FUN_02004AAC: ; 0x02004AAC
- push {r3, lr}
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- bl NNS_SndWaveOutStop
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004ABC
-FUN_02004ABC: ; 0x02004ABC
- push {r3, lr}
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- bl NNS_SndWaveOutIsPlaying
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004ACC
-FUN_02004ACC: ; 0x02004ACC
- push {r4, lr}
- add r4, r1, #0x0
- cmp r4, #0x7f
- bls _02004AD6
- mov r4, #0x7f
-_02004AD6:
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- add r1, r4, #0x0
- bl NNS_SndWaveOutSetPan
- pop {r4, pc}
-
- thumb_func_start FUN_02004AE4
-FUN_02004AE4: ; 0x02004AE4
- push {r4, lr}
- add r4, r1, #0x0
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- add r1, r4, #0x0
- bl NNS_SndWaveOutSetSpeed
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004AF8
-FUN_02004AF8: ; 0x02004AF8
- push {r3-r5, lr}
- add r4, r0, #0x0
- add r5, r1, #0x0
- bl FUN_020313EC
- cmp r0, #0x1
- bne _02004B20
- add r0, r4, #0x0
- bl FUN_02004930
- add r4, r0, #0x0
- add r0, r5, #0x0
- mov r1, #0x5
- bl _s32_div_f
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- bl NNS_SndWaveOutSetVolume
- pop {r3-r5, pc}
-_02004B20:
- add r0, r4, #0x0
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- add r1, r5, #0x0
- bl NNS_SndWaveOutSetVolume
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02004B30
-FUN_02004B30: ; 0x02004B30
- push {r3-r7, lr}
- sub sp, #0x30
- add r6, r0, #0x0
- str r1, [sp, #0x0]
- str r2, [sp, #0x4]
- add r5, r3, #0x0
- bl GetSoundDataPointer
- mov r0, #0x21
- bl FUN_02003D38
- add r4, r0, #0x0
- cmp r5, #0xe
- beq _02004B54
- cmp r5, #0xf
- beq _02004B54
- bl GF_AssertFail
-_02004B54:
- add r0, r6, #0x0
- bl NNS_SndArcGetWaveArcInfo
- add r7, r0, #0x0
- bne _02004B68
- bl GF_AssertFail
- add sp, #0x30
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004B68:
- ldr r0, [r7, #0x0]
- lsl r0, r0, #0x8
- lsr r0, r0, #0x8
- bl NNS_SndArcGetFileSize
- add r6, r0, #0x0
- bne _02004B80
- bl GF_AssertFail
- add sp, #0x30
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004B80:
- cmp r5, #0xe
- bne _02004BCE
- ldr r0, [sp, #0x48]
- add r1, r6, #0x0
- bl AllocFromHeap
- str r0, [r4, #0x0]
- cmp r0, #0x0
- bne _02004B9C
- bl GF_AssertFail
- add sp, #0x30
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004B9C:
- mov r1, #0x0
- add r2, r6, #0x0
- bl memset
- ldr r0, [r7, #0x0]
- ldr r1, [r4, #0x0]
- lsl r0, r0, #0x8
- lsr r0, r0, #0x8
- add r2, r6, #0x0
- mov r3, #0x0
- bl NNS_SndArcReadFile
- mov r1, #0x0
- mvn r1, r1
- cmp r0, r1
- bne _02004BC6
- bl GF_AssertFail
- add sp, #0x30
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004BC6:
- ldr r0, [r4, #0x0]
- add r1, r6, #0x0
- bl FUN_02004C1C
-_02004BCE:
- add r0, r5, #0x0
- bl FUN_02004930
- mov r1, #0x0
- str r1, [sp, #0xc]
- str r0, [sp, #0x8]
- ldr r0, [r4, #0x0]
- str r0, [sp, #0x10]
- ldr r0, _02004C18 ; =0x00003443
- str r1, [sp, #0x14]
- str r0, [sp, #0x20]
- ldr r0, [sp, #0x0]
- str r1, [sp, #0x18]
- str r0, [sp, #0x24]
- mov r0, #0x6
- lsl r0, r0, #0xc
- str r0, [sp, #0x28]
- ldr r0, [sp, #0x4]
- add r1, r5, #0x0
- str r0, [sp, #0x2c]
- add r0, sp, #0x8
- str r6, [sp, #0x1c]
- bl FUN_02004A6C
- add r4, r0, #0x0
- ldr r1, [sp, #0x0]
- add r0, r5, #0x0
- bl FUN_02004AF8
- mov r0, #0xe
- bl FUN_02003D38
- mov r1, #0x1
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- add sp, #0x30
- pop {r3-r7, pc}
- .balign 4
-_02004C18: .word 0x00003443
-
- thumb_func_start FUN_02004C1C
-FUN_02004C1C: ; 0x02004C1C
- push {r3-r6}
- mov r5, #0x0
- lsr r6, r1, #0x1
- beq _02004C36
- sub r2, r1, #0x1
-_02004C26:
- sub r3, r2, r5
- ldrb r4, [r0, r5]
- ldrb r1, [r0, r3]
- strb r1, [r0, r5]
- add r5, r5, #0x1
- strb r4, [r0, r3]
- cmp r5, r6
- blo _02004C26
-_02004C36:
- pop {r3-r6}
- bx lr
- .balign 4
-
- thumb_func_start FUN_02004C3C
-FUN_02004C3C: ; 0x02004C3C
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl GetSoundDataPointer
- mov r0, #0xe
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x21
- bl FUN_02003D38
- add r6, r0, #0x0
- cmp r5, #0xe
- beq _02004C60
- cmp r5, #0xf
- beq _02004C60
- bl GF_AssertFail
-_02004C60:
- add r0, r5, #0x0
- bl FUN_02004AAC
- ldrb r0, [r4, #0x0]
- cmp r0, #0x1
- bne _02004C76
- mov r0, #0x0
- strb r0, [r4, #0x0]
- ldr r0, [r6, #0x0]
- bl FreeToHeap
-_02004C76:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004C78
-FUN_02004C78: ; 0x02004C78
- ldr r3, _02004C7C ; =NNS_SndCaptureIsActive
- bx r3
- .balign 4
-_02004C7C: .word NNS_SndCaptureIsActive
-
- thumb_func_start FUN_02004C80
-FUN_02004C80: ; 0x02004C80
- push {r3-r4, lr}
- sub sp, #0x4
- add r4, r0, #0x0
- bl GetSoundDataPointer
- mov r0, #0x3
- bl FUN_02003D38
- mov r1, #0x1
- mov r3, #0xfa
- lsl r1, r1, #0xc
- mov r2, #0x0
- lsl r3, r3, #0x6
- str r4, [sp, #0x0]
- bl NNS_SndCaptureStartReverb
- add sp, #0x4
- pop {r3-r4, pc}
-
- thumb_func_start FUN_02004CA4
-FUN_02004CA4: ; 0x02004CA4
- ldr r3, _02004CA8 ; =NNS_SndCaptureStopReverb
- bx r3
- .balign 4
-_02004CA8: .word NNS_SndCaptureStopReverb
-
- thumb_func_start FUN_02004CAC
-FUN_02004CAC: ; 0x02004CAC
- ldr r3, _02004CB0 ; =NNS_SndCaptureSetReverbVolume
- bx r3
- .balign 4
-_02004CB0: .word NNS_SndCaptureSetReverbVolume
-
- thumb_func_start FUN_02004CB4
-FUN_02004CB4: ; 0x02004CB4
- push {r3-r4, lr}
- sub sp, #0xc
- bl GetSoundDataPointer
- mov r0, #0x4
- bl FUN_02003D38
- mov r1, #0x0
- mov r2, #0x1c
- bl MI_CpuFill8
- mov r0, #0x3
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x4
- bl FUN_02003D38
- mov r2, #0x2
- ldr r1, _02004CF4 ; =FUN_02005068
- str r2, [sp, #0x0]
- str r1, [sp, #0x4]
- str r0, [sp, #0x8]
- lsl r1, r2, #0xb
- ldr r3, _02004CF8 ; =0x000055F0
- add r0, r4, #0x0
- mov r2, #0x0
- bl NNS_SndCaptureStartEffect
- add sp, #0xc
- pop {r3-r4, pc}
- nop
-_02004CF4: .word FUN_02005068
-_02004CF8: .word 0x000055F0
-
- thumb_func_start FUN_02004CFC
-FUN_02004CFC: ; 0x02004CFC
- ldr r3, _02004D00 ; =NNS_SndCaptureStopEffect
- bx r3
- .balign 4
-_02004D00: .word NNS_SndCaptureStopEffect
-
- thumb_func_start FUN_02004D04
-FUN_02004D04: ; 0x02004D04
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x13
- bl FUN_02003D38
- cmp r4, #0x8
- ble _02004D16
- mov r4, #0x8
- b _02004D1C
-_02004D16:
- cmp r4, #0x0
- bge _02004D1C
- mov r4, #0x0
-_02004D1C:
- strb r4, [r0, #0x0]
- pop {r4, pc}
-
- thumb_func_start FUN_02004D20
-FUN_02004D20: ; 0x02004D20
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- add r2, r4, #0x0
- bl NNS_SndPlayerSetTrackPitch
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02004D34
-FUN_02004D34: ; 0x02004D34
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_020048D0
- bl FUN_02004018
- add r1, r5, #0x0
- add r2, r4, #0x0
- bl FUN_02004D20
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02004D4C
-FUN_02004D4C: ; 0x02004D4C
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- add r2, r4, #0x0
- bl NNS_SndPlayerSetTrackPan
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02004D60
-FUN_02004D60: ; 0x02004D60
- push {r4, lr}
- add r4, r0, #0x0
- bl NNS_SndSetMonoFlag
- ldr r0, _02004D70 ; =UNK_021C3DD8
- str r4, [r0, #0x0]
- pop {r4, pc}
- nop
-_02004D70: .word UNK_021C3DD8
-
- thumb_func_start FUN_02004D74
-FUN_02004D74: ; 0x02004D74
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x6
- bl FUN_02003D38
- str r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004D84
-FUN_02004D84: ; 0x02004D84
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x7
- bl FUN_02003D38
- str r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004D94
-FUN_02004D94: ; 0x02004D94
- push {r3, lr}
- mov r0, #0x7
- bl FUN_02003D38
- ldrh r1, [r0, #0x0]
- cmp r1, #0x0
- bne _02004DAA
- mov r1, #0x0
- strh r1, [r0, #0x0]
- add r0, r1, #0x0
- pop {r3, pc}
-_02004DAA:
- sub r1, r1, #0x1
- strh r1, [r0, #0x0]
- ldrh r0, [r0, #0x0]
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004DB4
-FUN_02004DB4: ; 0x02004DB4
- ldr r0, _02004DB8 ; =UNK_021C3DE0
- bx lr
- .balign 4
-_02004DB8: .word UNK_021C3DE0
-
- thumb_func_start FUN_02004DBC
-FUN_02004DBC: ; 0x02004DBC
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x12
- bl FUN_02003D38
- strb r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004DCC
-FUN_02004DCC: ; 0x02004DCC
- push {r4-r7, lr}
- sub sp, #0xc
- add r5, r0, #0x0
- mov r0, #0x15
- add r6, r1, #0x0
- add r7, r2, #0x0
- str r3, [sp, #0x8]
- bl FUN_02003D38
- add r4, r0, #0x0
- add r0, sp, #0x10
- ldrb r0, [r0, #0x10]
- ldr r3, [sp, #0x8]
- add r1, r6, #0x0
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x24]
- add r2, r7, #0x0
- str r0, [sp, #0x4]
- add r0, r5, #0x0
- bl FUN_02004E44
- mov r0, #0x0
- strb r0, [r4, #0x0]
- mov r0, #0x5
- bl FUN_02003CE8
- mov r0, #0x1
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02004E08
-FUN_02004E08: ; 0x02004E08
- push {r4-r7, lr}
- sub sp, #0xc
- add r5, r0, #0x0
- mov r0, #0x8
- add r6, r1, #0x0
- add r7, r2, #0x0
- str r3, [sp, #0x8]
- bl FUN_02003D38
- add r4, r0, #0x0
- add r0, sp, #0x10
- ldrb r0, [r0, #0x14]
- ldr r3, [sp, #0x8]
- add r1, r6, #0x0
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x28]
- add r2, r7, #0x0
- str r0, [sp, #0x4]
- add r0, r5, #0x0
- bl FUN_02004E44
- ldr r0, [sp, #0x20]
- str r0, [r4, #0x0]
- mov r0, #0x6
- bl FUN_02003CE8
- mov r0, #0x1
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02004E44
-FUN_02004E44: ; 0x02004E44
- push {r3-r7, lr}
- add r6, r2, #0x0
- mov r0, #0x2
- add r5, r1, #0x0
- add r7, r3, #0x0
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x0
- add r1, r6, #0x0
- bl FUN_020053CC
- mov r0, #0x0
- bl FUN_02004110
- add r0, r5, #0x0
- bl FUN_02004130
- add r0, r7, #0x0
- bl FUN_02004D84
- add r0, r5, #0x0
- bl FUN_020048F4
- str r0, [r4, #0x0]
- add r0, sp, #0x8
- ldrb r0, [r0, #0x10]
- bl FUN_02004DBC
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02004E80
-FUN_02004E80: ; 0x02004E80
- cmp r0, #0x0
- bne _02004E88
- mov r0, #0x0
- bx lr
-_02004E88:
- add r0, #0xc
- bx lr
-
- thumb_func_start FUN_02004E8C
-FUN_02004E8C: ; 0x02004E8C
- cmp r0, #0x0
- bne _02004E94
- mov r0, #0x0
- bx lr
-_02004E94:
- ldr r0, [r0, #0x8]
- bx lr
-
- thumb_func_start FUN_02004E98
-FUN_02004E98: ; 0x02004E98
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x5
- bl FUN_02004748
- bl GF_Snd_RestoreState
- lsl r0, r5, #0x10
- lsr r4, r0, #0x10
- ldr r0, _02004ECC ; =0x000001B9
- cmp r4, r0
- beq _02004EBC
- add r0, #0x36
- cmp r5, r0
- bgt _02004EBA
- cmp r5, #0x0
- bne _02004EBC
-_02004EBA:
- mov r4, #0x1
-_02004EBC:
- add r0, r4, #0x0
- bl GF_Snd_LoadWaveArc
- add r0, r4, #0x0
- bl FUN_02004ED0
- pop {r3-r5, pc}
- nop
-_02004ECC: .word 0x000001B9
-
- thumb_func_start FUN_02004ED0
-FUN_02004ED0: ; 0x02004ED0
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x20
- bl FUN_02003D38
- add r4, r0, #0x0
- lsl r0, r5, #0x10
- ldr r1, _02004F24 ; =0x000001B9
- lsr r0, r0, #0x10
- cmp r0, r1
- beq _02004EF2
- add r1, #0x36
- cmp r5, r1
- bgt _02004EF0
- cmp r5, #0x0
- bne _02004EF2
-_02004EF0:
- mov r0, #0x1
-_02004EF2:
- bl NNS_SndArcGetWaveArcInfo
- cmp r0, #0x0
- bne _02004F02
- bl GF_AssertFail
- mov r0, #0x0
- pop {r3-r5, pc}
-_02004F02:
- ldr r0, [r0, #0x0]
- lsl r0, r0, #0x8
- lsr r0, r0, #0x8
- bl NNS_SndArcGetFileAddress
- cmp r0, #0x0
- bne _02004F18
- bl GF_AssertFail
- mov r0, #0x0
- pop {r3-r5, pc}
-_02004F18:
- mov r1, #0x0
- bl SND_GetWaveDataAddress
- str r0, [r4, #0x0]
- pop {r3-r5, pc}
- nop
-_02004F24: .word 0x000001B9
-
- thumb_func_start FUN_02004F28
-FUN_02004F28: ; 0x02004F28
- push {r4-r6, lr}
- mov r0, #0x1
- add r5, r1, #0x0
- add r6, r2, #0x0
- bl FUN_02004F64
- mov r1, #0x3
- add r4, r0, #0x0
- add r0, r6, #0x0
- lsl r1, r1, #0x8
- ldr r5, [r5, #0x8]
- bl _s32_div_f
- lsl r1, r0, #0x1
- bpl _02004F50
- mov r0, #0x20
- bl _s32_div_f
- neg r0, r0
- b _02004F5A
-_02004F50:
- cmp r1, #0x0
- bne _02004F58
- mov r0, #0x20
- b _02004F5A
-_02004F58:
- lsl r0, r1, #0x5
-_02004F5A:
- mul r0, r4
- cmp r0, r5
- blo _02004F62
- mov r0, #0x0
-_02004F62:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004F64
-FUN_02004F64: ; 0x02004F64
- push {r3, lr}
- bl FUN_02003FF4
- bl NNS_SndPlayerGetTick
- pop {r3, pc}
-
- thumb_func_start FUN_02004F70
-FUN_02004F70: ; 0x02004F70
- push {r3-r7, lr}
- sub sp, #0x8
- str r0, [sp, #0x0]
- add r4, r1, #0x0
- add r6, r2, #0x0
- ldr r1, [sp, #0x0]
- mov r0, #0x1
- add r2, r3, #0x0
- bl FUN_02004F28
- add r1, r0, #0x0
- mov r12, r0
- sub r1, #0x64
- bpl _02004F8E
- mov r1, #0x0
-_02004F8E:
- ldr r0, [sp, #0x0]
- mov r3, #0x0
- add r0, r0, r1
- ldrb r0, [r0, #0xc]
- add r7, r3, #0x0
- cmp r0, #0x80
- bhs _02004FA0
- mov r0, #0x1
- b _02004FA2
-_02004FA0:
- sub r0, r3, #0x1
-_02004FA2:
- lsl r0, r0, #0x18
- asr r5, r0, #0x18
- mov r0, r12
- cmp r1, r0
- bhs _02005022
-_02004FAC:
- mov r0, #0x0
- cmp r5, #0x0
- ble _02004FC6
- ldr r2, [sp, #0x0]
- add r2, r2, r1
- str r2, [sp, #0x4]
- ldrb r2, [r2, #0xc]
- cmp r2, #0x80
- bls _02004FC2
- mov r0, #0x1
- b _02004FD8
-_02004FC2:
- add r3, r3, #0x1
- b _02004FD8
-_02004FC6:
- ldr r2, [sp, #0x0]
- add r2, r2, r1
- str r2, [sp, #0x4]
- ldrb r2, [r2, #0xc]
- cmp r2, #0x80
- bhs _02004FD6
- mov r0, #0x1
- b _02004FD8
-_02004FD6:
- add r3, r3, #0x1
-_02004FD8:
- cmp r0, #0x1
- bne _0200501A
- ldr r5, _02005064 ; =UNK_020ECB8C
- mov r2, #0x0
-_02004FE0:
- ldrb r0, [r5, #0x0]
- cmp r3, r0
- bge _02004FEA
- add r7, r2, #0x0
- b _02004FF2
-_02004FEA:
- add r2, r2, #0x1
- add r5, r5, #0x1
- cmp r2, #0x9
- blt _02004FE0
-_02004FF2:
- cmp r7, r6
- blt _02004FF8
- sub r7, r6, #0x1
-_02004FF8:
- cmp r3, #0x0
- beq _02005006
- sub r0, r6, #0x1
- sub r0, r0, r7
- ldrb r2, [r4, r0]
- add r2, r2, #0x1
- strb r2, [r4, r0]
-_02005006:
- ldr r0, [sp, #0x4]
- mov r3, #0x0
- ldrb r0, [r0, #0xc]
- cmp r0, #0x80
- bhs _02005014
- mov r0, #0x1
- b _02005016
-_02005014:
- sub r0, r3, #0x1
-_02005016:
- lsl r0, r0, #0x18
- asr r5, r0, #0x18
-_0200501A:
- add r1, r1, #0x2
- mov r0, r12
- cmp r1, r0
- blo _02004FAC
-_02005022:
- mov r2, #0x0
- cmp r6, #0x0
- ble _02005038
- mov r0, #0x9
-_0200502A:
- ldrb r1, [r4, r2]
- cmp r1, #0xa
- blo _02005032
- strb r0, [r4, r2]
-_02005032:
- add r2, r2, #0x1
- cmp r2, r6
- blt _0200502A
-_02005038:
- sub r2, r6, #0x1
- mov r3, #0x0
- cmp r2, #0x0
- ble _02005060
-_02005040:
- ldrb r0, [r4, r3]
- add r1, r4, r3
- cmp r0, #0x0
- bne _0200505A
- ldrb r0, [r1, #0x1]
- cmp r0, #0x0
- beq _0200505A
- add r0, r3, #0x1
- ldrb r0, [r4, r0]
- add sp, #0x8
- lsr r0, r0, #0x1
- strb r0, [r1, #0x0]
- pop {r3-r7, pc}
-_0200505A:
- add r3, r3, #0x1
- cmp r3, r2
- blt _02005040
-_02005060:
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_02005064: .word UNK_020ECB8C
-
- thumb_func_start FUN_02005068
-FUN_02005068: ; 0x02005068
- push {r3-r7, lr}
- sub sp, #0x30
- add r5, r0, #0x0
- ldr r0, [sp, #0x48]
- add r6, r1, #0x0
- str r0, [sp, #0xc]
- mov r0, #0x13
- str r2, [sp, #0x0]
- add r4, r3, #0x0
- bl FUN_02003D38
- add r7, r0, #0x0
- cmp r4, #0x1
- beq _0200508A
- ldr r0, [sp, #0x0]
- lsr r0, r0, #0x1
- str r0, [sp, #0x0]
-_0200508A:
- ldrb r2, [r7, #0x0]
- cmp r2, #0x0
- beq _0200515A
- mov r0, #0x0
- cmp r2, #0x0
- ble _020050BC
- add r1, sp, #0x10
-_02005098:
- ldr r3, [sp, #0x0]
- sub r2, r3, r2
- add r2, r0, r2
- lsl r2, r2, #0x1
- ldrsh r2, [r5, r2]
- strh r2, [r1, #0x0]
- ldrb r3, [r7, #0x0]
- ldr r2, [sp, #0x0]
- sub r2, r2, r3
- add r2, r0, r2
- lsl r2, r2, #0x1
- ldrsh r2, [r6, r2]
- add r0, r0, #0x1
- strh r2, [r1, #0x2]
- ldrb r2, [r7, #0x0]
- add r1, r1, #0x4
- cmp r0, r2
- blt _02005098
-_020050BC:
- ldr r0, [sp, #0x0]
- sub r4, r0, #0x1
- sub r0, r2, #0x1
- cmp r4, r0
- blt _02005126
- lsl r1, r4, #0x1
- add r0, r5, r1
- str r0, [sp, #0x8]
- add r0, r6, r1
- str r0, [sp, #0x4]
-_020050D0:
- mov r0, #0x0
- add r1, r0, #0x0
- cmp r2, #0x0
- ble _020050E6
-_020050D8:
- sub r3, r4, r1
- lsl r3, r3, #0x1
- ldrsh r3, [r5, r3]
- add r1, r1, #0x1
- add r0, r0, r3
- cmp r1, r2
- blt _020050D8
-_020050E6:
- add r1, r2, #0x0
- bl _s32_div_f
- ldr r1, [sp, #0x8]
- strh r0, [r1, #0x0]
- mov r0, #0x0
- ldrb r1, [r7, #0x0]
- add r2, r0, #0x0
- cmp r1, #0x0
- ble _02005108
-_020050FA:
- sub r3, r4, r2
- lsl r3, r3, #0x1
- ldrsh r3, [r6, r3]
- add r2, r2, #0x1
- add r0, r0, r3
- cmp r2, r1
- blt _020050FA
-_02005108:
- bl _s32_div_f
- ldr r1, [sp, #0x4]
- sub r4, r4, #0x1
- strh r0, [r1, #0x0]
- ldr r0, [sp, #0x8]
- ldrb r2, [r7, #0x0]
- sub r0, r0, #0x2
- str r0, [sp, #0x8]
- add r0, r1, #0x0
- sub r0, r0, #0x2
- str r0, [sp, #0x4]
- sub r0, r2, #0x1
- cmp r4, r0
- bge _020050D0
-_02005126:
- mov r1, #0x0
- cmp r2, #0x0
- ble _0200514A
- add r0, sp, #0x10
- mov r4, #0x2
-_02005130:
- mov r2, #0x0
- ldrsh r3, [r0, r2]
- ldr r2, [sp, #0xc]
- add r1, r1, #0x1
- strh r3, [r2, #0x0]
- ldrsh r3, [r0, r4]
- add r0, r0, #0x4
- strh r3, [r2, #0x2]
- add r2, r2, #0x4
- str r2, [sp, #0xc]
- ldrb r2, [r7, #0x0]
- cmp r1, r2
- blt _02005130
-_0200514A:
- ldr r1, [sp, #0x0]
- add r0, r5, #0x0
- bl DC_FlushRange
- ldr r1, [sp, #0x0]
- add r0, r6, #0x0
- bl DC_FlushRange
-_0200515A:
- add sp, #0x30
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02005160
-FUN_02005160: ; 0x02005160
- ldr r3, _02005168 ; =NNS_SndPlayerSetAllocatableChannel
- add r1, r0, #0x0
- mov r0, #0x7
- bx r3
- .balign 4
-_02005168: .word NNS_SndPlayerSetAllocatableChannel
-
- thumb_func_start FUN_0200516C
-FUN_0200516C: ; 0x0200516C
- push {r3, lr}
- cmp r0, #0x0
- bne _02005180
- ldr r0, _020051A4 ; =0x000007FF
- bl FUN_02005160
- mov r0, #0x0
- bl FUN_02004CA4
- b _0200519C
-_02005180:
- cmp r0, #0x1
- ldr r0, _020051A8 ; =0x00007FFF
- bne _02005192
- bl FUN_02005160
- mov r0, #0x1e
- bl FUN_02004C80
- b _0200519C
-_02005192:
- bl FUN_02005160
- mov r0, #0xf
- bl FUN_02004C80
-_0200519C:
- bl FUN_02004C78
- pop {r3, pc}
- nop
-_020051A4: .word 0x000007FF
-_020051A8: .word 0x00007FFF
-
- thumb_func_start FUN_020051AC
-FUN_020051AC: ; 0x020051AC
- push {r3, lr}
- bl FUN_02005404
- cmp r0, #0x0
- bne _020051E0
- mov r0, #0x0
- bl FUN_02003FF4
- bl FUN_020048EC
- mov r1, #0x0
- mvn r1, r1
- cmp r0, r1
- beq _020051E0
- bl FUN_02004124
- ldr r1, _020051E8 ; =0x0000047E
- cmp r0, r1
- beq _020051E0
- bl FUN_02005454
- mov r0, #0x1
- add r1, r0, #0x0
- bl FUN_020047C8
- pop {r3, pc}
-_020051E0:
- bl FUN_0200541C
- pop {r3, pc}
- nop
-_020051E8: .word 0x0000047E
-
- thumb_func_start FUN_020051EC
-FUN_020051EC: ; 0x020051EC
- ldr r3, _020051F0 ; =NNS_SndPlayerSetPlayerVolume
- bx r3
- .balign 4
-_020051F0: .word NNS_SndPlayerSetPlayerVolume
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)
{
diff --git a/include/unk_020040F4.h b/include/unk_020040F4.h
new file mode 100644
index 00000000..4169aca5
--- /dev/null
+++ b/include/unk_020040F4.h
@@ -0,0 +1,111 @@
+#include "global.h"
+
+struct WaveArcInfo
+{
+ u32 unk00 : 24;
+};
+
+struct UnkStruct_020040F4_1
+{
+ void *unk00;
+ u32 unk04;
+ void *unk08;
+ u32 unk0c;
+ u32 unk10;
+ u32 unk14;
+ u32 unk18;
+ s32 unk1c;
+ u32 unk20;
+ u32 unk24;
+};
+
+struct UnkStruct_020040F4_2
+{
+ u32 unk00;
+ u32 unk04;
+ u32 unk08;
+ u8 unk0c[9];
+};
+
+void FUN_020040F4(u8 param0);
+u8 FUN_02004104();
+void FUN_02004110(u16 param0);
+u16 FUN_02004124();
+void FUN_02004130(u16 param0);
+u16 FUN_02004140();
+void FUN_0200414C(u16 param0);
+void FUN_0200415C(u8 param0);
+BOOL FUN_02004180(s32 param0);
+u32 FUN_0200433C(u8 param0, int param1, u32 param2);
+void FUN_020044A8(s32 param0);
+void FUN_020044D4(int param0, u32 param1);
+void FUN_02004568(int seqNo, u16 param1);
+void FUN_020045C4(int param0, u32 param1);
+void FUN_02004648(int param0, u32 param1);
+void FUN_02004680(int param0, u32 param1);
+void FUN_020046A0(int param0, u32 param1);
+void FUN_020046C4(int param0, u32 param1);
+void FUN_020046E8(s32 param0);
+void FUN_02004704(s32 param0, int param1, u32 param2);
+void FUN_02004724(int param0);
+void FUN_02004738();
+int FUN_02004748(s32 param0);
+void FUN_020047C8(u8 param0, u8 param1);
+void FUN_02004810();
+void FUN_02004828(int param0, u32 param1, u32 param2);
+void FUN_0200483C(int param0, s32 param1);
+void FUN_02004858(u32 param0, int param1);
+void FUN_0200488C(u16 param0, u16 param1);
+void FUN_020048A0(int param0, u32 param1, u32 param2);
+BOOL FUN_020048BC(int param0);
+u8 FUN_020048D0(u16 param0);
+u32 FUN_020048EC(u32 *param0);
+u32 FUN_020048F4(u16 param0);
+u16 FUN_02004900(u16 param0);
+u32 FUN_02004914(u32 param0);
+u32 FUN_0200491C(u32 param0);
+u32 FUN_02004928(u32 param0, u32 param1, u32 param2, u32 param3);
+void *FUN_02004930(u32 param0);
+u32 FUN_02004984(u32 param0);
+void FUN_02004A04(u32 param0);
+u32 FUN_02004A6C(struct UnkStruct_020040F4_1 *param0, u32 param1);
+void FUN_02004AAC(u32 param0);
+void FUN_02004ABC(u32 param0);
+void FUN_02004ACC(u32 param0, u32 param1);
+void FUN_02004AE4(u32 param0, u32 param1);
+void FUN_02004AF8(u32 param0, s32 param1);
+u32 FUN_02004B30(u32 param0, s32 param1, u32 param2, u32 param3, u32 param4);
+void FUN_02004C1C(u8 *param0, u32 param1);
+void FUN_02004C3C(u32 param0);
+BOOL FUN_02004C78();
+u32 FUN_02004C80(u32 param0);
+void FUN_02004CA4(u32 param0);
+void FUN_02004CAC();
+void FUN_02004CB4();
+void FUN_02004CFC();
+void FUN_02004D04(s32 param0);
+void FUN_02004D20(int param0, u32 param1, u32 param2);
+void FUN_02004D34(u16 param0, u32 param1, u32 param2);
+void FUN_02004D4C(int param0, u32 param1, u32 param2);
+void FUN_02004D60(u32 param0);
+void FUN_02004D74(u32 param0);
+void FUN_02004D84(u32 param0);
+u16 FUN_02004D94();
+u8 *FUN_02004DB4();
+void FUN_02004DBC(u8 param0);
+u32 FUN_02004DCC(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5);
+u32 FUN_02004E08(
+ u32 param0, u16 param1, u32 param2, u32 param3, u32 param35, u8 param4, u32 param5);
+void FUN_02004E44(u32 param0, u16 param1, u32 param2, u32 param3, u8 param4, u32 param5);
+u32 FUN_02004E80(u32 param0);
+u32 FUN_02004E8C(u32 *param0);
+u32 FUN_02004E98(s32 param0);
+u32 FUN_02004ED0(s32 param0);
+u32 FUN_02004F28(u32 param0, struct UnkStruct_020040F4_2 *param1, s32 param2);
+u32 FUN_02004F64(int param0);
+void FUN_02004F70(struct UnkStruct_020040F4_2 *param0, u8 *param1, int param2, s32 param3);
+void FUN_02005068(s16 *param0, s16 *param1, u32 param2, u32 param3, void *param4);
+void FUN_02005160(u32 param0);
+void FUN_0200516C(u32 param0);
+void FUN_020051AC();
+void FUN_020051EC(u32 param0, u8 param1);