summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/unk_020030E8.s1424
-rw-r--r--arm9/src/unk_020030E8.c708
-rw-r--r--include/unk_02002F08.h69
-rw-r--r--include/unk_020030E8.h32
4 files changed, 793 insertions, 1440 deletions
diff --git a/arm9/asm/unk_020030E8.s b/arm9/asm/unk_020030E8.s
deleted file mode 100644
index d304b14a..00000000
--- a/arm9/asm/unk_020030E8.s
+++ /dev/null
@@ -1,1424 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .text
-
- thumb_func_start FUN_02003108
-FUN_02003108: ; 0x02003108
- push {r3-r7, lr}
- add r4, r1, #0x0
- mov r1, #0x14
- add r6, r0, #0x0
- mul r1, r4
- add r5, r2, #0x0
- add r1, r6, r1
- add r7, r3, #0x0
- lsl r0, r5, #0x1
- ldr r1, [r1, #0x8]
- add r0, r7, r0
- cmp r0, r1
- bls _02003126
- bl GF_AssertFail
-_02003126:
- cmp r4, #0x3
- bhi _0200315E
- add r0, r4, r4
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_02003136: ; jump table (using 16-bit offset)
- .short _0200313E - _02003136 - 2; case 0
- .short _02003146 - _02003136 - 2; case 1
- .short _0200314E - _02003136 - 2; case 2
- .short _02003156 - _02003136 - 2; case 3
-_0200313E:
- bl FUN_020222E8
- add r1, r0, #0x0
- b _02003164
-_02003146:
- bl FUN_020222F8
- add r1, r0, #0x0
- b _02003164
-_0200314E:
- bl FUN_02022308
- add r1, r0, #0x0
- b _02003164
-_02003156:
- bl FUN_02022310
- add r1, r0, #0x0
- b _02003164
-_0200315E:
- bl GF_AssertFail
- pop {r3-r7, pc}
-_02003164:
- lsl r0, r7, #0x10
- lsr r0, r0, #0x10
- lsl r2, r5, #0x1
- str r0, [sp, #0x0]
- add r1, r1, r2
- add r0, r6, #0x0
- add r2, r4, #0x0
- add r3, r5, #0x0
- bl FUN_02003054
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_0200317C
-FUN_0200317C: ; 0x0200317C
- push {r3-r5, lr}
- add r4, r2, #0x0
- add r5, r3, #0x0
- add r2, sp, #0x0
- add r3, r4, #0x0
- bl GfGfxLoader_GetPlttData
- add r4, r0, #0x0
- bne _02003192
- bl GF_AssertFail
-_02003192:
- cmp r5, #0x0
- bne _0200319A
- ldr r0, [sp, #0x0]
- ldr r5, [r0, #0x8]
-_0200319A:
- ldr r0, [sp, #0x0]
- add r2, r5, #0x0
- ldr r1, [r0, #0xc]
- add r0, sp, #0x0
- ldrh r0, [r0, #0x10]
- lsl r0, r0, #0x1
- add r0, r1, r0
- ldr r1, [sp, #0x14]
- bl MIi_CpuCopy16
- add r0, r4, #0x0
- bl FreeToHeap
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_020031B8
-FUN_020031B8: ; 0x020031B8
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, sp, #0x10
- add r5, r0, #0x0
- add r0, r1, #0x0
- ldrh r1, [r4, #0x14]
- add r6, r3, #0x0
- str r1, [sp, #0x0]
- ldrh r1, [r4, #0x10]
- lsl r4, r2, #0x1
- ldr r2, [sp, #0x0]
- lsl r7, r1, #0x1
- mov r1, #0x14
- mul r6, r1
- mul r1, r0
- ldr r0, [r5, r1]
- str r1, [sp, #0x4]
- ldr r1, [r5, r6]
- add r0, r0, r4
- add r1, r1, r7
- bl MIi_CpuCopy16
- ldr r0, [sp, #0x4]
- add r1, r5, r6
- ldr r0, [r5, r0]
- ldr r1, [r1, #0x4]
- ldr r2, [sp, #0x0]
- add r0, r0, r4
- add r1, r1, r7
- bl MIi_CpuCopy16
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020031FC
-FUN_020031FC: ; 0x020031FC
- mov r2, #0x14
- mul r2, r1
- ldr r0, [r0, r2]
- bx lr
-
- thumb_func_start FUN_02003204
-FUN_02003204: ; 0x02003204
- mov r2, #0x14
- mul r2, r1
- add r0, r0, r2
- ldr r0, [r0, #0x4]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02003210
-FUN_02003210: ; 0x02003210
- push {r0-r3}
- push {r3-r7, lr}
- sub sp, #0x10
- str r3, [sp, #0x8]
- add r5, r0, #0x0
- ldr r0, [sp, #0x38]
- mov r6, #0x0
- str r0, [sp, #0x38]
- ldr r0, [sp, #0x3c]
- add r7, r1, #0x0
- str r0, [sp, #0x3c]
- ldr r0, [sp, #0x40]
- add r4, r6, #0x0
- str r0, [sp, #0x40]
- add r0, sp, #0x28
- ldrh r0, [r0, #0x8]
- str r0, [sp, #0xc]
-_02003232:
- add r0, r7, #0x0
- add r1, r4, #0x0
- bl FUN_02003314
- cmp r0, #0x1
- bne _020032A6
- mov r0, #0x46
- lsl r0, r0, #0x2
- ldrh r0, [r5, r0]
- add r1, r4, #0x0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x12
- bl FUN_02003314
- cmp r0, #0x0
- bne _020032A6
- mov r0, #0x14
- add r6, r4, #0x0
- mul r6, r0
- add r0, r4, #0x0
- add r1, r5, r6
- add r2, sp, #0x30
- bl FUN_02003368
- ldr r0, [sp, #0x3c]
- add r1, sp, #0x28
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x40]
- str r0, [sp, #0x4]
- add r0, r5, r6
- ldrh r1, [r1, #0x8]
- ldr r2, [sp, #0x8]
- ldr r3, [sp, #0x38]
- add r0, #0xc
- bl FUN_020033A4
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02003328
- cmp r4, #0x4
- blo _02003294
- mov r2, #0x1
- add r0, r5, #0x0
- add r1, r4, #0x0
- lsl r2, r2, #0x8
- bl FUN_0200359C
- b _0200329E
-_02003294:
- add r0, r5, #0x0
- add r1, r4, #0x0
- mov r2, #0x10
- bl FUN_0200359C
-_0200329E:
- ldr r1, [sp, #0xc]
- add r0, sp, #0x28
- strh r1, [r0, #0x8]
- mov r6, #0x1
-_020032A6:
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- cmp r4, #0xe
- blo _02003232
- cmp r6, #0x1
- bne _02003300
- mov r0, #0x46
- lsl r0, r0, #0x2
- ldrh r2, [r5, r0]
- ldr r1, _0200330C ; =0xFFFF0003
- and r1, r2
- lsl r2, r2, #0x10
- lsr r2, r2, #0x12
- orr r2, r7
- lsl r2, r2, #0x12
- lsr r2, r2, #0x10
- orr r1, r2
- strh r1, [r5, r0]
- add r1, r0, #0x2
- ldrh r1, [r5, r1]
- lsl r1, r1, #0x11
- lsr r1, r1, #0x1f
- bne _02003300
- add r1, r0, #0x2
- ldrh r2, [r5, r1]
- mov r1, #0x1
- lsl r1, r1, #0xe
- orr r2, r1
- add r1, r0, #0x2
- strh r2, [r5, r1]
- ldrh r2, [r5, r0]
- mov r1, #0x3
- bic r2, r1
- mov r1, #0x1
- orr r1, r2
- strh r1, [r5, r0]
- mov r2, #0x0
- add r0, r0, #0x4
- strb r2, [r5, r0]
- ldr r0, _02003310 ; =FUN_02003464
- add r1, r5, #0x0
- sub r2, r2, #0x2
- bl FUN_0200CA44
-_02003300:
- add r0, r6, #0x0
- add sp, #0x10
- pop {r3-r7}
- pop {r3}
- add sp, #0x10
- bx r3
- .balign 4
-_0200330C: .word 0xFFFF0003
-_02003310: .word FUN_02003464
-
- thumb_func_start FUN_02003314
-FUN_02003314: ; 0x02003314
- mov r3, #0x1
- add r2, r3, #0x0
- lsl r2, r1
- tst r0, r2
- bne _02003320
- mov r3, #0x0
-_02003320:
- lsl r0, r3, #0x18
- lsr r0, r0, #0x18
- bx lr
- .balign 4
-
- thumb_func_start FUN_02003328
-FUN_02003328: ; 0x02003328
- push {r4-r6, lr}
- add r5, r0, #0x0
- ldr r0, _02003360 ; =0x0000011A
- add r4, r1, #0x0
- ldrh r0, [r5, r0]
- lsl r0, r0, #0x12
- lsr r0, r0, #0x12
- bl FUN_02003314
- cmp r0, #0x1
- beq _0200335E
- ldr r3, _02003360 ; =0x0000011A
- ldr r1, _02003364 ; =0xFFFFC000
- ldrh r2, [r5, r3]
- add r0, r2, #0x0
- lsl r2, r2, #0x12
- lsr r6, r2, #0x12
- mov r2, #0x1
- lsl r2, r4
- orr r2, r6
- lsl r2, r2, #0x10
- and r0, r1
- lsr r2, r2, #0x10
- lsr r1, r1, #0x12
- and r1, r2
- orr r0, r1
- strh r0, [r5, r3]
-_0200335E:
- pop {r4-r6, pc}
- .balign 4
-_02003360: .word 0x0000011A
-_02003364: .word 0xFFFFC000
-
- thumb_func_start FUN_02003368
-FUN_02003368: ; 0x02003368
- push {r4-r5}
- cmp r0, #0x4
- ldr r0, [r1, #0x8]
- bge _02003374
- lsl r0, r0, #0x13
- b _02003378
-_02003374:
- lsr r0, r0, #0x9
- lsl r0, r0, #0x18
-_02003378:
- mov r4, #0x0
- lsr r0, r0, #0x18
- add r5, r4, #0x0
- cmp r0, #0x0
- bls _02003398
- mov r3, #0x1
-_02003384:
- add r1, r3, #0x0
- lsl r1, r5
- add r1, r4, r1
- lsl r1, r1, #0x10
- lsr r4, r1, #0x10
- add r1, r5, #0x1
- lsl r1, r1, #0x18
- lsr r5, r1, #0x18
- cmp r5, r0
- blo _02003384
-_02003398:
- ldrh r0, [r2, #0x0]
- and r0, r4
- strh r0, [r2, #0x0]
- pop {r4-r5}
- bx lr
- .balign 4
-
- thumb_func_start FUN_020033A4
-FUN_020033A4: ; 0x020033A4
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r4, r3, #0x0
- cmp r2, #0x0
- bge _020033D4
- add r0, r2, #0x0
- bl abs
- add r0, r0, #0x2
- ldrh r1, [r5, #0x6]
- mov r2, #0xf
- lsl r0, r0, #0x10
- bic r1, r2
- lsr r2, r0, #0x10
- mov r0, #0xf
- and r0, r2
- orr r0, r1
- strh r0, [r5, #0x6]
- ldrh r1, [r5, #0x2]
- mov r0, #0x3f
- bic r1, r0
- strh r1, [r5, #0x2]
- b _020033F2
-_020033D4:
- ldrh r1, [r5, #0x6]
- mov r0, #0xf
- bic r1, r0
- mov r0, #0x2
- orr r0, r1
- strh r0, [r5, #0x6]
- ldrh r0, [r5, #0x2]
- mov r1, #0x3f
- bic r0, r1
- lsl r1, r2, #0x10
- lsr r2, r1, #0x10
- mov r1, #0x3f
- and r1, r2
- orr r0, r1
- strh r0, [r5, #0x2]
-_020033F2:
- strh r6, [r5, #0x0]
- ldrh r1, [r5, #0x2]
- ldr r0, _02003454 ; =0xFFFFF83F
- add r3, sp, #0x0
- and r1, r0
- lsl r0, r4, #0x1b
- lsr r0, r0, #0x15
- orr r0, r1
- strh r0, [r5, #0x2]
- ldrh r1, [r5, #0x2]
- ldr r0, _02003458 ; =0xFFFF07FF
- add r2, r1, #0x0
- ldrb r1, [r3, #0x10]
- and r2, r0
- lsl r0, r1, #0x1b
- lsr r0, r0, #0x10
- orr r0, r2
- strh r0, [r5, #0x2]
- ldrh r0, [r5, #0x4]
- ldr r2, _0200345C ; =0xFFFF8000
- ldrh r6, [r3, #0x14]
- lsr r3, r2, #0x11
- and r0, r2
- and r3, r6
- orr r0, r3
- strh r0, [r5, #0x4]
- ldrh r3, [r5, #0x6]
- ldr r0, _02003460 ; =0xFFFFFC0F
- and r0, r3
- ldrh r3, [r5, #0x2]
- lsl r3, r3, #0x1a
- lsr r3, r3, #0x1a
- lsl r3, r3, #0x1a
- lsr r3, r3, #0x16
- orr r0, r3
- strh r0, [r5, #0x6]
- cmp r4, r1
- ldrh r1, [r5, #0x4]
- bhs _02003448
- sub r0, r2, #0x1
- and r0, r1
- strh r0, [r5, #0x4]
- pop {r4-r6, pc}
-_02003448:
- mov r0, #0x2
- lsl r0, r0, #0xe
- orr r0, r1
- strh r0, [r5, #0x4]
- pop {r4-r6, pc}
- nop
-_02003454: .word 0xFFFFF83F
-_02003458: .word 0xFFFF07FF
-_0200345C: .word 0xFFFF8000
-_02003460: .word 0xFFFFFC0F
-
- thumb_func_start FUN_02003464
-FUN_02003464: ; 0x02003464
- push {r4-r6, lr}
- add r4, r1, #0x0
- mov r1, #0x47
- lsl r1, r1, #0x2
- ldrb r2, [r4, r1]
- add r5, r0, #0x0
- cmp r2, #0x1
- bne _020034A4
- mov r2, #0x0
- strb r2, [r4, r1]
- sub r2, r1, #0x2
- ldrh r3, [r4, r2]
- ldr r2, _020034F4 ; =0xFFFFC000
- add r5, r3, #0x0
- and r5, r2
- sub r3, r1, #0x2
- strh r5, [r4, r3]
- sub r3, r1, #0x4
- ldrh r5, [r4, r3]
- ldr r3, _020034F8 ; =0xFFFF0003
- sub r2, r2, #0x1
- and r5, r3
- sub r3, r1, #0x4
- strh r5, [r4, r3]
- sub r3, r1, #0x2
- ldrh r3, [r4, r3]
- sub r1, r1, #0x2
- and r2, r3
- strh r2, [r4, r1]
- bl FUN_0200CAB4
- pop {r4-r6, pc}
-_020034A4:
- sub r0, r1, #0x4
- ldrh r2, [r4, r0]
- lsl r0, r2, #0x1e
- lsr r0, r0, #0x1e
- cmp r0, #0x1
- bne _020034F0
- sub r0, r1, #0x2
- ldrh r0, [r4, r0]
- ldr r3, _020034F4 ; =0xFFFFC000
- lsl r2, r2, #0x10
- lsr r6, r2, #0x12
- lsr r2, r3, #0x12
- and r0, r3
- and r2, r6
- orr r2, r0
- sub r0, r1, #0x2
- strh r2, [r4, r0]
- add r0, r4, #0x0
- bl FUN_02003500
- add r0, r4, #0x0
- bl FUN_02003520
- mov r1, #0x46
- lsl r1, r1, #0x2
- ldrh r0, [r4, r1]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x12
- bne _020034F0
- add r0, r1, #0x2
- ldrh r2, [r4, r0]
- ldr r0, _020034FC ; =0xFFFFBFFF
- and r2, r0
- add r0, r1, #0x2
- strh r2, [r4, r0]
- add r0, r5, #0x0
- bl FUN_0200CAB4
-_020034F0:
- pop {r4-r6, pc}
- nop
-_020034F4: .word 0xFFFFC000
-_020034F8: .word 0xFFFF0003
-_020034FC: .word 0xFFFFBFFF
-
- thumb_func_start FUN_02003500
-FUN_02003500: ; 0x02003500
- push {r4-r6, lr}
- add r5, r0, #0x0
- mov r4, #0x0
- mov r6, #0x10
-_02003508:
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl FUN_02003540
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- cmp r4, #0x4
- blo _02003508
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02003520
-FUN_02003520: ; 0x02003520
- push {r4-r6, lr}
- mov r4, #0x4
- add r6, r4, #0x0
- add r5, r0, #0x0
- add r6, #0xfc
-_0200352A:
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl FUN_02003540
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- cmp r4, #0xe
- blo _0200352A
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02003540
-FUN_02003540: ; 0x02003540
- push {r4-r6, lr}
- add r5, r0, #0x0
- mov r0, #0x46
- lsl r0, r0, #0x2
- ldrh r0, [r5, r0]
- add r4, r1, #0x0
- add r6, r2, #0x0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x12
- bl FUN_02003314
- cmp r0, #0x0
- beq _02003594
- mov r0, #0x14
- mul r0, r4
- add r2, r5, r0
- ldrh r0, [r2, #0x12]
- ldrh r3, [r2, #0xe]
- lsl r1, r0, #0x16
- lsl r3, r3, #0x1a
- lsr r1, r1, #0x1a
- lsr r3, r3, #0x1a
- cmp r1, r3
- bhs _02003584
- ldr r3, _02003598 ; =0xFFFFFC0F
- and r3, r0
- add r0, r1, #0x1
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1a
- lsr r0, r0, #0x16
- orr r0, r3
- strh r0, [r2, #0x12]
- pop {r4-r6, pc}
-_02003584:
- ldr r1, _02003598 ; =0xFFFFFC0F
- and r0, r1
- strh r0, [r2, #0x12]
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl FUN_0200359C
-_02003594:
- pop {r4-r6, pc}
- nop
-_02003598: .word 0xFFFFFC0F
-
- thumb_func_start FUN_0200359C
-FUN_0200359C: ; 0x0200359C
- push {r4-r7, lr}
- sub sp, #0xc
- str r1, [sp, #0x4]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x4]
- mov r1, #0x14
- mul r1, r0
- ldr r0, [sp, #0x0]
- mov r6, #0x0
- add r5, r0, r1
- add r0, r5, #0x0
- str r0, [sp, #0x8]
- add r0, #0xc
- add r7, r2, #0x0
- add r4, r6, #0x0
- str r0, [sp, #0x8]
-_020035BC:
- ldrh r0, [r5, #0xc]
- lsl r1, r6, #0x10
- lsr r1, r1, #0x10
- bl FUN_02003314
- cmp r0, #0x0
- beq _020035DC
- ldr r0, [r5, #0x0]
- lsl r1, r4, #0x1
- ldr r2, [r5, #0x4]
- add r0, r0, r1
- add r1, r2, r1
- ldr r2, [sp, #0x8]
- add r3, r7, #0x0
- bl FUN_020035F8
-_020035DC:
- add r6, r6, #0x1
- add r4, r4, r7
- cmp r6, #0x10
- blo _020035BC
- ldr r1, [sp, #0x4]
- add r5, #0xc
- lsl r1, r1, #0x18
- ldr r0, [sp, #0x0]
- lsr r1, r1, #0x18
- add r2, r5, #0x0
- bl FUN_02003684
- add sp, #0xc
- pop {r4-r7, pc}
-
- thumb_func_start FUN_020035F8
-FUN_020035F8: ; 0x020035F8
- push {r3-r7, lr}
- sub sp, #0x8
- str r0, [sp, #0x4]
- mov r0, #0x0
- add r6, r1, #0x0
- mov r12, r0
- str r2, [sp, #0x0]
- mov lr, r3
- add r0, r3, #0x0
- beq _02003680
-_0200360C:
- ldr r0, [sp, #0x4]
- mov r1, #0x1f
- ldrh r0, [r0, #0x0]
- asr r2, r0, #0x5
- add r5, r2, #0x0
- and r5, r1
- ldr r1, [sp, #0x0]
- asr r4, r0, #0xa
- ldrh r1, [r1, #0x4]
- lsl r1, r1, #0x11
- lsr r3, r1, #0x11
- ldr r1, [sp, #0x0]
- ldrh r1, [r1, #0x2]
- lsl r1, r1, #0x15
- lsr r2, r1, #0x1b
- mov r1, #0x1f
- and r1, r4
- mov r4, #0x1f
- and r0, r4
- and r4, r3
- sub r4, r4, r0
- mul r4, r2
- asr r4, r4, #0x4
- add r0, r0, r4
- lsl r0, r0, #0x18
- lsr r7, r0, #0x18
- asr r4, r3, #0xa
- mov r0, #0x1f
- and r0, r4
- sub r0, r0, r1
- mul r0, r2
- asr r0, r0, #0x4
- add r0, r1, r0
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- asr r3, r3, #0x5
- mov r1, #0x1f
- and r1, r3
- sub r1, r1, r5
- mul r1, r2
- asr r1, r1, #0x4
- add r1, r5, r1
- lsl r1, r1, #0x18
- lsl r0, r0, #0xa
- lsr r1, r1, #0x13
- orr r0, r1
- orr r0, r7
- strh r0, [r6, #0x0]
- ldr r0, [sp, #0x4]
- add r6, r6, #0x2
- add r0, r0, #0x2
- str r0, [sp, #0x4]
- mov r0, r12
- add r1, r0, #0x1
- mov r0, lr
- mov r12, r1
- cmp r1, r0
- blo _0200360C
-_02003680:
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02003684
-FUN_02003684: ; 0x02003684
- push {r4-r5}
- ldrh r4, [r2, #0x2]
- lsl r3, r4, #0x10
- lsl r4, r4, #0x15
- lsr r3, r3, #0x1b
- lsr r4, r4, #0x1b
- cmp r4, r3
- bne _020036BE
- mov r3, #0x46
- lsl r3, r3, #0x2
- ldrh r4, [r0, r3]
- mov r2, #0x1
- lsl r2, r1
- lsl r1, r4, #0x10
- lsr r5, r1, #0x12
- add r1, r5, #0x0
- tst r1, r2
- beq _0200371E
- eor r2, r5
- lsl r2, r2, #0x10
- ldr r1, _02003724 ; =0xFFFF0003
- lsr r2, r2, #0x10
- lsl r2, r2, #0x12
- and r1, r4
- lsr r2, r2, #0x10
- orr r1, r2
- strh r1, [r0, r3]
- pop {r4-r5}
- bx lr
-_020036BE:
- ldrh r0, [r2, #0x4]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x1f
- bne _020036F4
- lsl r0, r4, #0x10
- asr r1, r0, #0x10
- ldrh r0, [r2, #0x6]
- lsl r0, r0, #0x1c
- lsr r0, r0, #0x1c
- add r0, r1, r0
- lsl r0, r0, #0x10
- asr r4, r0, #0x10
- cmp r4, r3
- ble _020036DE
- lsl r0, r3, #0x10
- asr r4, r0, #0x10
-_020036DE:
- ldrh r1, [r2, #0x2]
- ldr r0, _02003728 ; =0xFFFFF83F
- and r1, r0
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x15
- orr r0, r1
- strh r0, [r2, #0x2]
- pop {r4-r5}
- bx lr
-_020036F4:
- lsl r0, r4, #0x10
- asr r1, r0, #0x10
- ldrh r0, [r2, #0x6]
- lsl r0, r0, #0x1c
- lsr r0, r0, #0x1c
- sub r0, r1, r0
- lsl r0, r0, #0x10
- asr r4, r0, #0x10
- cmp r4, r3
- bge _0200370C
- lsl r0, r3, #0x10
- asr r4, r0, #0x10
-_0200370C:
- ldrh r1, [r2, #0x2]
- ldr r0, _02003728 ; =0xFFFFF83F
- and r1, r0
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x15
- orr r0, r1
- strh r0, [r2, #0x2]
-_0200371E:
- pop {r4-r5}
- bx lr
- nop
-_02003724: .word 0xFFFF0003
-_02003728: .word 0xFFFFF83F
-
- thumb_func_start FUN_0200372C
-FUN_0200372C: ; 0x0200372C
- push {r3-r7, lr}
- add r6, r0, #0x0
- ldr r0, _020038DC ; =0x0000011A
- ldrh r1, [r6, r0]
- lsl r1, r1, #0x10
- lsr r1, r1, #0x1f
- bne _02003748
- sub r0, r0, #0x2
- ldrh r0, [r6, r0]
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x1e
- cmp r0, #0x1
- beq _02003748
- b _020038DA
-_02003748:
- mov r7, #0x2
- mov r5, #0x0
- add r4, r6, #0x0
- lsl r7, r7, #0xc
-_02003750:
- ldr r0, _020038DC ; =0x0000011A
- ldrh r1, [r6, r0]
- lsl r0, r1, #0x10
- lsr r0, r0, #0x1f
- bne _02003770
- ldr r0, [r4, #0x4]
- cmp r0, #0x0
- beq _0200377C
- lsl r0, r1, #0x12
- lsl r1, r5, #0x10
- lsr r0, r0, #0x12
- lsr r1, r1, #0x10
- bl FUN_02003314
- cmp r0, #0x0
- beq _0200377C
-_02003770:
- ldr r0, [r4, #0x4]
- ldr r1, [r4, #0x8]
- bl DC_FlushRange
- cmp r5, #0xd
- bls _0200377E
-_0200377C:
- b _020038A4
-_0200377E:
- add r0, r5, r5
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_0200378A: ; jump table (using 16-bit offset)
- .short _020037A6 - _0200378A - 2; case 0
- .short _020037B2 - _0200378A - 2; case 1
- .short _020037BE - _0200378A - 2; case 2
- .short _020037CA - _0200378A - 2; case 3
- .short _020037D6 - _0200378A - 2; case 4
- .short _020037EA - _0200378A - 2; case 5
- .short _020037FE - _0200378A - 2; case 6
- .short _02003814 - _0200378A - 2; case 7
- .short _0200382A - _0200378A - 2; case 8
- .short _0200383E - _0200378A - 2; case 9
- .short _02003852 - _0200378A - 2; case 10
- .short _02003868 - _0200378A - 2; case 11
- .short _0200387E - _0200378A - 2; case 12
- .short _02003892 - _0200378A - 2; case 13
-_020037A6:
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- bl GX_LoadBGPltt
- b _020038A4
-_020037B2:
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- bl GXS_LoadBGPltt
- b _020038A4
-_020037BE:
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- bl GX_LoadOBJPltt
- b _020038A4
-_020037CA:
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- bl GXS_LoadOBJPltt
- b _020038A4
-_020037D6:
- bl GX_BeginLoadBGExtPltt
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- bl GX_LoadBGExtPltt
- bl GX_EndLoadBGExtPltt
- b _020038A4
-_020037EA:
- bl GX_BeginLoadBGExtPltt
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- add r1, r7, #0x0
- bl GX_LoadBGExtPltt
- bl GX_EndLoadBGExtPltt
- b _020038A4
-_020037FE:
- bl GX_BeginLoadBGExtPltt
- mov r1, #0x1
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- lsl r1, r1, #0xe
- bl GX_LoadBGExtPltt
- bl GX_EndLoadBGExtPltt
- b _020038A4
-_02003814:
- bl GX_BeginLoadBGExtPltt
- mov r1, #0x6
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- lsl r1, r1, #0xc
- bl GX_LoadBGExtPltt
- bl GX_EndLoadBGExtPltt
- b _020038A4
-_0200382A:
- bl GXS_BeginLoadBGExtPltt
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- bl GXS_LoadBGExtPltt
- bl GXS_EndLoadBGExtPltt
- b _020038A4
-_0200383E:
- bl GXS_BeginLoadBGExtPltt
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- add r1, r7, #0x0
- bl GXS_LoadBGExtPltt
- bl GXS_EndLoadBGExtPltt
- b _020038A4
-_02003852:
- bl GXS_BeginLoadBGExtPltt
- mov r1, #0x1
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- lsl r1, r1, #0xe
- bl GXS_LoadBGExtPltt
- bl GXS_EndLoadBGExtPltt
- b _020038A4
-_02003868:
- bl GXS_BeginLoadBGExtPltt
- mov r1, #0x6
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- lsl r1, r1, #0xc
- bl GXS_LoadBGExtPltt
- bl GXS_EndLoadBGExtPltt
- b _020038A4
-_0200387E:
- bl GX_BeginLoadOBJExtPltt
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- bl GX_LoadOBJExtPltt
- bl GX_EndLoadOBJExtPltt
- b _020038A4
-_02003892:
- bl GXS_BeginLoadOBJExtPltt
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- bl GXS_LoadOBJExtPltt
- bl GXS_EndLoadOBJExtPltt
-_020038A4:
- add r5, r5, #0x1
- add r4, #0x14
- cmp r5, #0xe
- bge _020038AE
- b _02003750
-_020038AE:
- ldr r3, _020038DC ; =0x0000011A
- ldr r1, _020038E0 ; =0xFFFFC000
- sub r2, r3, #0x2
- ldrh r2, [r6, r2]
- ldrh r0, [r6, r3]
- lsl r2, r2, #0x10
- and r0, r1
- lsr r2, r2, #0x12
- lsr r1, r1, #0x12
- and r1, r2
- orr r0, r1
- strh r0, [r6, r3]
- ldrh r0, [r6, r3]
- lsl r0, r0, #0x12
- lsr r0, r0, #0x12
- bne _020038DA
- sub r0, r3, #0x2
- ldrh r1, [r6, r0]
- mov r0, #0x3
- bic r1, r0
- sub r0, r3, #0x2
- strh r1, [r6, r0]
-_020038DA:
- pop {r3-r7, pc}
- .balign 4
-_020038DC: .word 0x0000011A
-_020038E0: .word 0xFFFFC000
-
- thumb_func_start FUN_020038E4
-FUN_020038E4: ; 0x020038E4
- mov r1, #0x46
- lsl r1, r1, #0x2
- ldrh r0, [r0, r1]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x12
- bx lr
-
- thumb_func_start FUN_020038F0
-FUN_020038F0: ; 0x020038F0
- push {r3-r4}
- ldr r3, _0200390C ; =0x0000011A
- lsl r1, r1, #0x10
- ldrh r4, [r0, r3]
- ldr r2, _02003910 ; =0xFFFF7FFF
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1f
- and r2, r4
- lsr r1, r1, #0x10
- orr r1, r2
- strh r1, [r0, r3]
- pop {r3-r4}
- bx lr
- nop
-_0200390C: .word 0x0000011A
-_02003910: .word 0xFFFF7FFF
-
- thumb_func_start FUN_02003914
-FUN_02003914: ; 0x02003914
- push {r3-r7, lr}
- sub sp, #0x8
- add r6, r0, #0x0
- str r3, [sp, #0x0]
- mov r0, #0x14
- add r4, r1, #0x0
- mul r4, r0
- add r0, sp, #0x10
- ldrh r0, [r0, #0x14]
- add r7, r2, #0x0
- ldr r5, [sp, #0x20]
- str r0, [sp, #0x4]
- lsl r1, r0, #0x1
- add r0, r6, r4
- ldr r0, [r0, #0x8]
- cmp r1, r0
- bls _0200393A
- bl GF_AssertFail
-_0200393A:
- sub r0, r7, #0x1
- cmp r0, #0x1
- bhi _02003952
- ldr r2, [r6, r4]
- lsl r1, r5, #0x1
- add r1, r2, r1
- ldr r2, [sp, #0x4]
- ldr r0, [sp, #0x0]
- sub r2, r2, r5
- lsl r2, r2, #0x1
- bl MIi_CpuClear16
-_02003952:
- cmp r7, #0x0
- beq _0200395A
- cmp r7, #0x2
- bne _0200396E
-_0200395A:
- add r1, r6, r4
- ldr r2, [r1, #0x4]
- lsl r1, r5, #0x1
- add r1, r2, r1
- ldr r2, [sp, #0x4]
- ldr r0, [sp, #0x0]
- sub r2, r2, r5
- lsl r2, r2, #0x1
- bl MIi_CpuClear16
-_0200396E:
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02003974
-FUN_02003974: ; 0x02003974
- push {r4-r7, lr}
- sub sp, #0xc
- str r0, [sp, #0x0]
- add r0, sp, #0x10
- ldrh r0, [r0, #0x10]
- str r1, [sp, #0x4]
- add r7, r2, #0x0
- lsl r1, r0, #0x1b
- lsr r1, r1, #0x1b
- mov r12, r1
- lsl r1, r0, #0x16
- lsl r0, r0, #0x11
- lsr r1, r1, #0x1b
- lsr r0, r0, #0x1b
- mov r2, #0x0
- mov lr, r1
- str r0, [sp, #0x8]
- cmp r7, #0x0
- bls _020039E2
-_0200399A:
- ldr r0, [sp, #0x0]
- lsl r6, r2, #0x1
- ldrh r4, [r0, r6]
- lsl r0, r4, #0x1b
- lsr r1, r0, #0x1b
- lsl r0, r4, #0x16
- lsl r4, r4, #0x11
- lsr r5, r4, #0x1b
- ldr r4, [sp, #0x8]
- lsr r0, r0, #0x1b
- sub r4, r4, r5
- mul r4, r3
- asr r4, r4, #0x4
- add r4, r5, r4
- lsl r5, r4, #0xa
- mov r4, r12
- sub r4, r4, r1
- mul r4, r3
- asr r4, r4, #0x4
- add r1, r1, r4
- mov r4, lr
- sub r4, r4, r0
- mul r4, r3
- asr r4, r4, #0x4
- add r0, r0, r4
- lsl r0, r0, #0x5
- orr r0, r1
- add r1, r5, #0x0
- orr r1, r0
- ldr r0, [sp, #0x4]
- strh r1, [r0, r6]
- add r0, r2, #0x1
- lsl r0, r0, #0x10
- lsr r2, r0, #0x10
- cmp r2, r7
- blo _0200399A
-_020039E2:
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020039E8
-FUN_020039E8: ; 0x020039E8
- push {r3-r7, lr}
- sub sp, #0x8
- add r7, r2, #0x0
- add r5, r0, #0x0
- mov r2, #0x14
- add r6, r1, #0x0
- mul r6, r2
- str r3, [sp, #0x4]
- ldr r1, [r5, r6]
- mov r0, #0x0
- add r4, r5, r6
- cmp r1, #0x0
- beq _02003A0A
- ldr r1, [r4, #0x4]
- cmp r1, #0x0
- beq _02003A0A
- mov r0, #0x1
-_02003A0A:
- cmp r0, #0x0
- bne _02003A12
- bl GF_AssertFail
-_02003A12:
- add r3, sp, #0x10
- ldrh r0, [r3, #0x14]
- add r2, r5, r6
- lsl r1, r7, #0x1
- str r0, [sp, #0x0]
- ldr r0, [r4, #0x0]
- ldr r2, [r2, #0x4]
- add r0, r0, r1
- add r1, r2, r1
- ldrb r3, [r3, #0x10]
- ldr r2, [sp, #0x4]
- bl FUN_02003974
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02003A30
-FUN_02003A30: ; 0x02003A30
- push {r3-r7, lr}
- sub sp, #0x8
- str r3, [sp, #0x4]
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r4, r2, #0x0
- ldr r7, [sp, #0x20]
- beq _02003A60
-_02003A40:
- mov r0, #0x1
- tst r0, r4
- beq _02003A54
- str r7, [sp, #0x0]
- ldr r3, [sp, #0x4]
- add r0, r5, #0x0
- add r1, r6, #0x0
- mov r2, #0x10
- bl FUN_02003974
-_02003A54:
- lsl r0, r4, #0xf
- lsr r4, r0, #0x10
- add r6, #0x20
- add r5, #0x20
- cmp r4, #0x0
- bne _02003A40
-_02003A60:
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02003A64
-FUN_02003A64: ; 0x02003A64
- push {r4-r7, lr}
- sub sp, #0xc
- str r3, [sp, #0x8]
- add r6, r0, #0x0
- add r7, r1, #0x0
- ldr r0, [sp, #0x20]
- add r5, r2, #0x0
- mov r1, #0x14
- add r2, r7, #0x0
- str r0, [sp, #0x20]
- mul r2, r1
- mov r4, #0x0
- ldr r1, [r6, r2]
- add r0, r4, #0x0
- cmp r1, #0x0
- beq _02003A8E
- add r1, r6, r2
- ldr r1, [r1, #0x4]
- cmp r1, #0x0
- beq _02003A8E
- mov r0, #0x1
-_02003A8E:
- cmp r0, #0x0
- bne _02003A96
- bl GF_AssertFail
-_02003A96:
- cmp r5, #0x0
- beq _02003AC0
-_02003A9A:
- mov r0, #0x1
- tst r0, r5
- beq _02003AB6
- ldr r0, [sp, #0x8]
- lsl r2, r4, #0x10
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x20]
- add r1, r7, #0x0
- str r0, [sp, #0x4]
- add r0, r6, #0x0
- lsr r2, r2, #0x10
- mov r3, #0x10
- bl FUN_020039E8
-_02003AB6:
- lsl r0, r5, #0xf
- lsr r5, r0, #0x10
- add r4, #0x10
- cmp r5, #0x0
- bne _02003A9A
-_02003AC0:
- add sp, #0xc
- pop {r4-r7, pc}
-
- thumb_func_start FUN_02003AC4
-FUN_02003AC4: ; 0x02003AC4
- push {r3-r7, lr}
- mov lr, r1
- mov r12, r2
- add r7, r3, #0x0
- mov r4, #0x0
- cmp r1, #0x0
- ble _02003B3C
- ldr r6, [sp, #0x18]
-_02003AD4:
- ldrh r3, [r0, #0x0]
- mov r1, #0x1f
- add r2, r3, #0x0
- asr r5, r3, #0xa
- and r2, r1
- and r5, r1
- mov r1, #0x1d
- mul r1, r5
- mov r5, #0x4c
- mul r5, r2
- asr r3, r3, #0x5
- mov r2, #0x1f
- and r3, r2
- mov r2, #0x97
- mul r2, r3
- add r2, r5, r2
- add r1, r1, r2
- asr r3, r1, #0x8
- mov r1, r12
- add r2, r1, #0x0
- mul r2, r3
- lsl r1, r2, #0x10
- lsr r1, r1, #0x10
- asr r2, r1, #0x8
- add r1, r7, #0x0
- mul r1, r3
- mul r3, r6
- lsl r1, r1, #0x10
- lsl r3, r3, #0x10
- lsr r1, r1, #0x10
- lsr r3, r3, #0x10
- asr r1, r1, #0x8
- asr r3, r3, #0x8
- cmp r2, #0x1f
- ble _02003B1C
- mov r2, #0x1f
-_02003B1C:
- cmp r1, #0x1f
- ble _02003B22
- mov r1, #0x1f
-_02003B22:
- cmp r3, #0x1f
- ble _02003B28
- mov r3, #0x1f
-_02003B28:
- lsl r3, r3, #0xa
- lsl r1, r1, #0x5
- orr r1, r3
- orr r1, r2
- strh r1, [r0, #0x0]
- add r4, r4, #0x1
- mov r1, lr
- add r0, r0, #0x2
- cmp r4, r1
- blt _02003AD4
-_02003B3C:
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02003B40
-FUN_02003B40: ; 0x02003B40
- push {r3-r5, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- add r0, r1, #0x0
- add r1, r2, #0x0
- add r2, sp, #0x4
- bl GfGfxLoader_GetPlttData
- add r4, r0, #0x0
- bne _02003B58
- bl GF_AssertFail
-_02003B58:
- ldr r0, [sp, #0x1c]
- cmp r0, #0x0
- bne _02003B64
- ldr r0, [sp, #0x4]
- ldr r0, [r0, #0x8]
- str r0, [sp, #0x1c]
-_02003B64:
- ldr r0, [sp, #0x2c]
- ldr r2, [sp, #0x24]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x4]
- ldr r3, [sp, #0x28]
- ldr r0, [r0, #0xc]
- mov r1, #0x10
- bl FUN_02003AC4
- ldr r0, [sp, #0x1c]
- add r3, sp, #0x8
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x0]
- ldr r1, [sp, #0x4]
- ldrh r3, [r3, #0x18]
- ldr r1, [r1, #0xc]
- ldr r2, [sp, #0x18]
- add r0, r5, #0x0
- bl FUN_02003054
- add r0, r4, #0x0
- bl FreeToHeap
- add sp, #0x8
- pop {r3-r5, pc}
diff --git a/arm9/src/unk_020030E8.c b/arm9/src/unk_020030E8.c
new file mode 100644
index 00000000..771faab2
--- /dev/null
+++ b/arm9/src/unk_020030E8.c
@@ -0,0 +1,708 @@
+#include "global.h"
+#include "MI_memory.h"
+#include "unk_02002F08.h"
+#include "unk_0200CA44.h"
+#include "unk_020030E8.h"
+
+
+
+
+extern void *FUN_020222E8();
+extern void *FUN_020222F8();
+extern void *FUN_02022308();
+extern void *FUN_02022310();
+extern int abs(int);
+
+
+THUMB_FUNC void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3)
+{
+ GF_ASSERT(param2 * 2 + param3 <= param0->unk000[param1].unk08);
+
+ u16 *r1;
+ switch (param1)
+ {
+ case 0:
+ r1 = FUN_020222E8();
+ break;
+ case 1:
+ r1 = FUN_020222F8();
+ break;
+ case 2:
+ r1 = FUN_02022308();
+ break;
+ case 3:
+ r1 = FUN_02022310();
+ break;
+ default:
+ GF_ASSERT(FALSE);
+ return;
+ }
+
+ FUN_02003054(param0, r1 + param2, param1, param2, (u16)param3);
+}
+
+THUMB_FUNC void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest)
+{
+ NNSG2dPaletteData *pltData;
+
+ void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id);
+ GF_ASSERT(ptr != NULL);
+
+ if (size == 0)
+ {
+ size = pltData->szByte;
+ }
+
+ MI_CpuCopy16(pltData->pRawData + offset * 2, dest, size);
+
+ FreeToHeap(ptr);
+}
+
+THUMB_FUNC void FUN_020031B8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5)
+{
+
+ MI_CpuCopy16(param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk00 + param4, param5);
+ MI_CpuCopy16(param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk04 + param4, param5);
+}
+
+THUMB_FUNC u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1)
+{
+ return param0->unk000[param1].unk00;
+}
+
+THUMB_FUNC u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1)
+{
+ return param0->unk000[param1].unk04;
+}
+
+
+
+
+
+
+
+
+THUMB_FUNC u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u16 param1, u16 param2, s16 param3, u8 param6, u8 param7, u16 param8)
+{
+
+ u16 stc = param2;
+ u32 r6 = 0;
+
+ for (u8 r4 = 0; r4 < 14; r4++)
+ {
+ if (FUN_02003314(param1, r4) != 1)
+ {
+ continue;
+ }
+
+ if (FUN_02003314(param0->unk118_2, r4) != 0)
+ {
+ continue;
+ }
+
+ FUN_02003368(r4, &param0->unk000[r4], &param2);
+
+ FUN_020033A4(&param0->unk000[r4].unk0c, param2, param3, param6, param7, param8);
+
+ FUN_02003328(param0, r4);
+
+ if (r4 >= 4)
+ {
+ FUN_0200359C(param0, r4, 0x100);
+ }
+ else
+ {
+ FUN_0200359C(param0, r4, 0x10);
+ }
+
+ param2 = stc;
+ r6 = 1;
+ }
+
+ if (r6 == 1)
+ {
+ param0->unk118_2 |= param1;
+ if (param0->unk11a_e == 0)
+ {
+ param0->unk11a_e = 1;
+
+ param0->unk118_0 = 1;
+ param0->unk11c = 0;
+
+ //wtf is that?
+ FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, (struct TextPrinter *)param0, (u32)(-2));
+ }
+ }
+
+ return r6;
+}
+
+THUMB_FUNC u8 FUN_02003314(u16 param0, u16 param1)
+{
+ u32 r3 = 1;
+ if ((param0 & (1 << param1)) == 0)
+ {
+ r3 = 0;
+ }
+
+ return (u8)r3;
+}
+
+THUMB_FUNC void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1)
+{
+ if (FUN_02003314(param0->unk11a_0, param1) != 1)
+ {
+ param0->unk11a_0 |= 1 << param1;
+ }
+}
+
+THUMB_FUNC void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, u16 *param2)
+{
+ u8 r0;
+ if (param0 < 4)
+ {
+ r0 = (u8)(param1->unk08 >> 5);
+ }
+ else
+ {
+ r0 = (u8)(param1->unk08 >> 9);
+ }
+
+ u16 r4 = 0;
+ for (u8 i = 0; i < r0; i++)
+ {
+ r4 += 1 << i;
+ }
+
+ *param2 &= r4;
+}
+
+
+
+THUMB_FUNC void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, u16 param1, s16 param2, u8 param3, u8 param4, u16 param5)
+{
+ if (param2 < 0)
+ {
+ param0->unk06_0 = abs(param2) + 2;
+ param0->unk02_0 = 0;
+ }
+ else
+ {
+ param0->unk06_0 = 2;
+ param0->unk02_0 = param2;
+ }
+
+ param0->unk00 = param1;
+ param0->unk02_6 = param3;
+ param0->unk02_b = param4;
+ param0->unk04_0 = param5;
+
+ param0->unk06_4 = param0->unk02_0;
+
+ if (param3 < param4)
+ {
+ param0->unk04_f = 0;
+ return;
+ }
+ param0->unk04_f = 1;
+}
+
+
+
+
+THUMB_FUNC void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1)
+{
+ if (param1->unk11c == 1)
+ {
+ param1->unk11c = 0;
+ param1->unk11a_0 = 0;
+ param1->unk118_2 = 0;
+ param1->unk11a_e = 0;
+ FUN_0200CAB4((s32)param0);
+ return;
+ }
+
+ if (param1->unk118_0 == 1)
+ {
+ param1->unk11a_0 = param1->unk118_2;
+ FUN_02003500(param1);
+ FUN_02003520(param1);
+
+ if (param1->unk118_2 == 0)
+ {
+ param1->unk11a_e = 0;
+ FUN_0200CAB4((s32)param0);
+ }
+ }
+}
+
+
+
+THUMB_FUNC void FUN_02003500(struct UnkStruct_02002F08 *param0)
+{
+ for (u8 i = 0; i < 4; i++)
+ {
+ FUN_02003540(param0, i, 0x10);
+ }
+}
+
+THUMB_FUNC void FUN_02003520(struct UnkStruct_02002F08 *param0)
+{
+ for (u8 i = 4; i < 14; i++)
+ {
+ FUN_02003540(param0, i, 0x100);
+ }
+}
+
+THUMB_FUNC void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 param2)
+{
+ if (FUN_02003314(param0->unk118_2, param1) != 0)
+ {
+ if (param0->unk000[param1].unk0c.unk06_4 < param0->unk000[param1].unk0c.unk02_0)
+ {
+ param0->unk000[param1].unk0c.unk06_4++;
+ return;
+ }
+
+ param0->unk000[param1].unk0c.unk06_4 = 0;
+ FUN_0200359C(param0, param1, param2);
+ }
+}
+
+
+
+
+THUMB_FUNC void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2)
+{
+
+ for (u32 r6 = 0; r6 < 0x10; r6++)
+ {
+ if (FUN_02003314(param0->unk000[param1].unk0c.unk00, (u16)r6) != 0)
+ {
+ FUN_020035F8(param0->unk000[param1].unk00 + param2 * r6, param0->unk000[param1].unk04 + param2 * r6, &param0->unk000[param1].unk0c, param2);
+ }
+ }
+
+ FUN_02003684(param0, (u8)param1, &param0->unk000[param1].unk0c);
+}
+
+THUMB_FUNC void FUN_020035F8(u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3)
+{
+ for (u32 i = 0; i < param3; i++)
+ {
+ u8 lo = (u8)((param0[i] & 0x1f) + ((((param2->unk04_0 & 0x1f) - (param0[i] & 0x1f)) * param2->unk02_6) >> 4));
+
+ u8 hi = (u8)(((param0[i] >> 10) & 0x1f) + (((((param2->unk04_0 >> 10) & 0x1f) - ((param0[i] >> 10) & 0x1f)) * param2->unk02_6) >> 4));
+ u8 mid = (u8)(((param0[i] >> 5) & 0x1f) + (((((param2->unk04_0 >> 5) & 0x1f) - ((param0[i] >> 5) & 0x1f)) * param2->unk02_6) >> 4));
+
+ param1[i] = (u16)((hi << 10) | (mid << 5) | lo);
+ }
+}
+
+THUMB_FUNC void FUN_02003684(struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2)
+{
+ s16 r4;
+ if (param2->unk02_6 == param2->unk02_b)
+ {
+ if ((param0->unk118_2 & (1 << param1)) == 0)
+ {
+ return;
+ }
+
+ param0->unk118_2 ^= (1 << param1);
+
+ return;
+ }
+
+ if (param2->unk04_f == 0)
+ {
+ r4 = (s16)param2->unk02_6;
+ r4 += param2->unk06_0;
+ if (r4 > param2->unk02_b)
+ {
+ r4 = (s16)param2->unk02_b;
+ }
+
+ param2->unk02_6 = r4;
+ return;
+ }
+
+ r4 = (s16)param2->unk02_6;
+ r4 -= param2->unk06_0;
+ if (r4 < param2->unk02_b)
+ {
+ r4 = (s16)param2->unk02_b;
+ }
+
+ param2->unk02_6 = r4;
+}
+
+THUMB_FUNC void FUN_0200372C(struct UnkStruct_02002F08 *param0)
+{
+ if (param0->unk11a_f == 0 && param0->unk118_0 != 1)
+ {
+ return;
+ }
+
+ for (s32 r5 = 0; r5 < 14; r5++)
+ {
+ if (param0->unk11a_f != 0 || (param0->unk000[r5].unk04 != 0 && FUN_02003314(param0->unk11a_0, (u16)r5) != 0))
+ {
+ DC_FlushRange(param0->unk000[r5].unk04, param0->unk000[r5].unk08);
+
+ switch (r5)
+ {
+ case 0:
+ GX_LoadBGPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
+ break;
+ case 1:
+ GXS_LoadBGPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
+ break;
+ case 2:
+ GX_LoadOBJPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
+ break;
+ case 3:
+ GXS_LoadOBJPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
+ break;
+ case 4:
+ GX_BeginLoadBGExtPltt();
+ GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
+ GX_EndLoadBGExtPltt();
+ break;
+ case 5:
+ GX_BeginLoadBGExtPltt();
+ GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x2000, param0->unk000[r5].unk08);
+ GX_EndLoadBGExtPltt();
+ break;
+ case 6:
+ GX_BeginLoadBGExtPltt();
+ GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x4000, param0->unk000[r5].unk08);
+ GX_EndLoadBGExtPltt();
+ break;
+ case 7:
+ GX_BeginLoadBGExtPltt();
+ GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x6000, param0->unk000[r5].unk08);
+ GX_EndLoadBGExtPltt();
+ break;
+ case 8:
+ GXS_BeginLoadBGExtPltt();
+ GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
+ GXS_EndLoadBGExtPltt();
+ break;
+ case 9:
+ GXS_BeginLoadBGExtPltt();
+ GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x2000, param0->unk000[r5].unk08);
+ GXS_EndLoadBGExtPltt();
+ break;
+ case 10:
+ GXS_BeginLoadBGExtPltt();
+ GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x4000, param0->unk000[r5].unk08);
+ GXS_EndLoadBGExtPltt();
+ break;
+ case 11:
+ GXS_BeginLoadBGExtPltt();
+ GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x6000, param0->unk000[r5].unk08);
+ GXS_EndLoadBGExtPltt();
+ break;
+ case 12:
+ GX_BeginLoadOBJExtPltt();
+ GX_LoadOBJExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
+ GX_EndLoadOBJExtPltt();
+ break;
+ case 13:
+ GXS_BeginLoadOBJExtPltt();
+ GXS_LoadOBJExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
+ GXS_EndLoadOBJExtPltt();
+ break;
+ }
+ }
+ }
+
+ param0->unk11a_0 = param0->unk118_2;
+ if (param0->unk11a_0 == 0)
+ {
+ param0->unk118_0 = 0;
+ }
+}
+
+THUMB_FUNC u16 FUN_020038E4(struct UnkStruct_02002F08 *param0)
+{
+ return param0->unk118_2;
+}
+
+THUMB_FUNC void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1)
+{
+ param0->unk11a_f = param1;
+}
+
+THUMB_FUNC void FUN_02003914(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5)
+{
+ GF_ASSERT(param5 * 2 <= param0->unk000[param1].unk08);
+ if (param2 - 1 <= 1)
+ {
+ MI_CpuFill16(&param0->unk000[param1].unk00[param4], param3, (u32)((param5 - param4) * 2));
+ }
+
+ if (param2 == 0 || param2 == 2)
+ {
+ MI_CpuFill16(&param0->unk000[param1].unk04[param4], param3, (u32)((param5 - param4) * 2));
+ }
+}
+
+#ifdef NONMATCHING
+THUMB_FUNC void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4)
+{
+ s32 r12 = ((u32)(param4 << 0x1b)) >> 0x1b;
+ s32 lr = ((u32)(param4 << 0x16)) >> 0x1b;
+ s32 st8 = ((u32)(param4 << 0x11)) >> 0x1b;
+ s32 lo, mid, hi;
+
+ for (u16 i = 0; i < param2; i++)
+ {
+ lo = (((u32)(param0[i] << 0x1b)) >> 0x1b);
+ mid = (((u32)(param0[i] << 0x16)) >> 0x1b);
+ hi = (((u32)(param0[i] << 0x11)) >> 0x1b);
+
+ param1[i] = (lo + ((r12 - lo) * param3) >> 4) | (mid + ((lr - mid) * param3) >> 4) << 5 | (hi + ((st8 - hi) * param3) >> 4) << 10;
+ }
+}
+#else
+asm void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4)
+{
+ // clang-format off
+ push {r4-r7, lr}
+ sub sp, #0xc
+ str r0, [sp, #0x0]
+ add r0, sp, #0x10
+ ldrh r0, [r0, #0x10]
+ str r1, [sp, #0x4]
+ add r7, r2, #0x0
+ lsl r1, r0, #0x1b
+ lsr r1, r1, #0x1b
+ mov r12, r1
+ lsl r1, r0, #0x16
+ lsl r0, r0, #0x11
+ lsr r1, r1, #0x1b
+ lsr r0, r0, #0x1b
+ mov r2, #0x0
+ mov lr, r1
+ str r0, [sp, #0x8]
+ cmp r7, #0x0
+ bls _020039E2
+_0200399A:
+ ldr r0, [sp, #0x0]
+ lsl r6, r2, #0x1
+ ldrh r4, [r0, r6]
+ lsl r0, r4, #0x1b
+ lsr r1, r0, #0x1b
+ lsl r0, r4, #0x16
+ lsl r4, r4, #0x11
+ lsr r5, r4, #0x1b
+ ldr r4, [sp, #0x8]
+ lsr r0, r0, #0x1b
+ sub r4, r4, r5
+ mul r4, r3
+ asr r4, r4, #0x4
+ add r4, r5, r4
+ lsl r5, r4, #0xa
+ mov r4, r12
+ sub r4, r4, r1
+ mul r4, r3
+ asr r4, r4, #0x4
+ add r1, r1, r4
+ mov r4, lr
+ sub r4, r4, r0
+ mul r4, r3
+ asr r4, r4, #0x4
+ add r0, r0, r4
+ lsl r0, r0, #0x5
+ orr r0, r1
+ add r1, r5, #0x0
+ orr r1, r0
+ ldr r0, [sp, #0x4]
+ strh r1, [r0, r6]
+ add r0, r2, #0x1
+ lsl r0, r0, #0x10
+ lsr r2, r0, #0x10
+ cmp r2, r7
+ blo _0200399A
+_020039E2:
+ add sp, #0xc
+ pop {r4-r7, pc}
+ // clang-format on
+}
+#endif
+
+THUMB_FUNC void FUN_020039E8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5)
+{
+ BOOL r0 = FALSE;
+ if (param0->unk000[param1].unk00 != 0 && param0->unk000[param1].unk04 != 0)
+ {
+ r0 = TRUE;
+ }
+
+ GF_ASSERT(r0);
+
+ FUN_02003974(param0->unk000[param1].unk00 + param2, param0->unk000[param1].unk04 + param2, param3, param4, param5);
+}
+
+THUMB_FUNC void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4)
+{
+ while (param2 != 0)
+ {
+ if ((param2 & 1) != 0)
+ {
+ FUN_02003974(param0, param1, 0x10, param3, param4);
+ }
+
+ param2 >>= 1;
+ param1 += 0x10;
+ param0 += 0x10;
+ }
+}
+
+THUMB_FUNC void FUN_02003A64(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4)
+{
+ u32 r4 = 0;
+ BOOL r0 = FALSE;
+ if (param0->unk000[param1].unk00 != 0 && param0->unk000[param1].unk04 != 0)
+ {
+ r0 = TRUE;
+ }
+
+ GF_ASSERT(r0);
+
+ while (param2 != 0)
+ {
+ if ((param2 & 1) != 0)
+ {
+ FUN_020039E8(param0, param1, (u16)r4, 0x10, param3, param4);
+ }
+
+ param2 >>= 1;
+ r4 += 0x10;
+ }
+}
+
+#ifdef NONMATCHING
+THUMB_FUNC void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4)
+{
+ s32 r4, lo, mid, hi, add;
+ for (r4 = 0; r4 < param1; r4++)
+ {
+ lo = ((param0[r4]) & 0x1f);
+ mid = ((param0[r4] >> 5) & 0x1f);
+ hi = ((param0[r4] >> 10) & 0x1f);
+
+ add = (lo * 0x4c + mid * 0x97 + hi * 0x1d) >> 8;
+
+ lo = (u16)(add * param2) >> 8;
+ mid = (u16)(add * param3) >> 8;
+ hi = (u16)(add * param4) >> 8;
+
+ if (lo > 0x1f)
+ {
+ lo = 0x1f;
+ }
+ if (mid > 0x1f)
+ {
+ mid = 0x1f;
+ }
+ if (hi > 0x1f)
+ {
+ hi = 0x1f;
+ }
+
+ param0[r4] = (hi << 10) | (mid << 5) | lo;
+ }
+}
+#else
+asm void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4)
+{
+ // clang-format off
+ push {r3-r7, lr}
+ mov lr, r1
+ mov r12, r2
+ add r7, r3, #0x0
+ mov r4, #0x0
+ cmp r1, #0x0
+ ble _02003B3C
+ ldr r6, [sp, #0x18]
+_02003AD4:
+ ldrh r3, [r0, #0x0]
+ mov r1, #0x1f
+ add r2, r3, #0x0
+ asr r5, r3, #0xa
+ and r2, r1
+ and r5, r1
+ mov r1, #0x1d
+ mul r1, r5
+ mov r5, #0x4c
+ mul r5, r2
+ asr r3, r3, #0x5
+ mov r2, #0x1f
+ and r3, r2
+ mov r2, #0x97
+ mul r2, r3
+ add r2, r5, r2
+ add r1, r1, r2
+ asr r3, r1, #0x8
+ mov r1, r12
+ add r2, r1, #0x0
+ mul r2, r3
+ lsl r1, r2, #0x10
+ lsr r1, r1, #0x10
+ asr r2, r1, #0x8
+ add r1, r7, #0x0
+ mul r1, r3
+ mul r3, r6
+ lsl r1, r1, #0x10
+ lsl r3, r3, #0x10
+ lsr r1, r1, #0x10
+ lsr r3, r3, #0x10
+ asr r1, r1, #0x8
+ asr r3, r3, #0x8
+ cmp r2, #0x1f
+ ble _02003B1C
+ mov r2, #0x1f
+_02003B1C:
+ cmp r1, #0x1f
+ ble _02003B22
+ mov r1, #0x1f
+_02003B22:
+ cmp r3, #0x1f
+ ble _02003B28
+ mov r3, #0x1f
+_02003B28:
+ lsl r3, r3, #0xa
+ lsl r1, r1, #0x5
+ orr r1, r3
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ add r4, r4, #0x1
+ mov r1, lr
+ add r0, r0, #0x2
+ cmp r4, r1
+ blt _02003AD4
+_02003B3C:
+ pop {r3-r7, pc}
+ // clang-format on
+}
+#endif
+
+THUMB_FUNC void FUN_02003B40(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 param5, u16 param6, u32 param7, u32 param8, u32 param9)
+{
+ NNSG2dPaletteData *pltData;
+ void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id);
+ GF_ASSERT(ptr != NULL);
+
+ if (param5 == 0)
+ {
+ param5 = pltData->szByte;
+ }
+
+ FUN_02003AC4(pltData->pRawData, 0x10, param7, param8, param9);
+ FUN_02003054(param0, pltData->pRawData, param4, param6, (u16)param5);
+
+ FreeToHeap(ptr);
+}
diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h
index 773d9246..755fe05b 100644
--- a/include/unk_02002F08.h
+++ b/include/unk_02002F08.h
@@ -6,19 +6,41 @@
#include "string16.h"
+struct UnkStruct_02002F08_sub_sub {
+ u16 unk00;
+
+ u16 unk02_0: 6;
+ u16 unk02_6: 5;
+ u16 unk02_b: 5;
+
+ u16 unk04_0: 15;
+ u16 unk04_f: 1;
+
+ u16 unk06_0: 4;
+ u16 unk06_4: 6;
+ u16 unk06_a: 6;
+};
+
+struct UnkStruct_02002F08_sub
+{
+ u16 *unk00;
+ u16 *unk04;
+ u32 unk08;
+ struct UnkStruct_02002F08_sub_sub unk0c;
+};
+
struct UnkStruct_02002F08
{
- struct
- {
- u16 *unk00;
- u16 *unk04;
- u32 unk08;
- u32 unk0c;
- u32 unk10;
- } unk000[14];
-
- u32 unk118;
- u32 unk11c;
+ struct UnkStruct_02002F08_sub unk000[14];
+
+ u16 unk118_0 : 2;
+ u16 unk118_2 : 14;
+ u16 unk11a_0 : 14;
+ u16 unk11a_e : 1;
+ u16 unk11a_f : 1;
+ u8 unk11c;
+ u8 unk11d;
+ u16 unk11e;
};
s32 FUN_02002F08(u32 param0, struct String *str, u32 param2);
@@ -28,11 +50,26 @@ u32 FUN_02002F90(struct String *str);
s32 FUN_02002F9C(u32 param0, struct String *str);
struct UnkStruct_02002F08 *FUN_02002FD0(u32 heap_id);
void FUN_02002FEC(struct UnkStruct_02002F08 *ptr);
-void FUN_02002FF4(struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size);
+void FUN_02002FF4(
+ struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size);
void FUN_02003008(struct UnkStruct_02002F08 *param0, u32 param1, u32 size, u32 heap_id);
void FUN_02003038(struct UnkStruct_02002F08 *param0, u32 param1);
-void FUN_02003054(struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size);
-void FUN_02003084(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset, u16 param7);
-void FUN_020030E8(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset);
+void FUN_02003054(
+ struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size);
+void FUN_02003084(struct UnkStruct_02002F08 *param0,
+ NarcId narcId,
+ s32 memberId,
+ u32 heap_id,
+ u32 param4,
+ u32 size,
+ u16 offset,
+ u16 param7);
+void FUN_020030E8(struct UnkStruct_02002F08 *param0,
+ NarcId narcId,
+ s32 memberId,
+ u32 heap_id,
+ u32 param4,
+ u32 size,
+ u16 offset);
-#endif //POKEDIAMOND_UNK_02002F08_H
+#endif // POKEDIAMOND_UNK_02002F08_H
diff --git a/include/unk_020030E8.h b/include/unk_020030E8.h
new file mode 100644
index 00000000..3b5ff7f4
--- /dev/null
+++ b/include/unk_020030E8.h
@@ -0,0 +1,32 @@
+#include "global.h"
+#include "filesystem.h"
+#include "unk_02002F08.h"
+
+
+void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3);
+void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest);
+void FUN_020031B8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5);
+u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1);
+u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1);
+u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u16 param1, u16 param2, s16 param3, u8 param6, u8 param7, u16 param8);
+u8 FUN_02003314(u16 param0, u16 param1);
+void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1);
+void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, u16 *param2);
+void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, u16 param1, s16 param2, u8 param3, u8 param4, u16 param5);
+void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1);
+void FUN_02003500(struct UnkStruct_02002F08 *param0);
+void FUN_02003520(struct UnkStruct_02002F08 *param0);
+void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 param2);
+void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2);
+void FUN_020035F8(u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3);
+void FUN_02003684(struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2);
+void FUN_0200372C(struct UnkStruct_02002F08 *param0);
+u16 FUN_020038E4(struct UnkStruct_02002F08 *param0);
+void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1);
+void FUN_02003914(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5);
+void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4);
+void FUN_020039E8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5);
+void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4);
+void FUN_02003A64(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4);
+void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4);
+void FUN_02003B40(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 param5, u16 param6, u32 param7, u32 param8, u32 param9);