summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/unk_02016B94.s2174
-rw-r--r--arm9/global.inc4
-rw-r--r--arm9/src/unk_02016B94_c.c2334
3 files changed, 2337 insertions, 2175 deletions
diff --git a/arm9/asm/unk_02016B94.s b/arm9/asm/unk_02016B94.s
index 5a654a24..b2ff6684 100644
--- a/arm9/asm/unk_02016B94.s
+++ b/arm9/asm/unk_02016B94.s
@@ -34,2180 +34,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- thumb_func_start FUN_02018540
-FUN_02018540: ; 0x02018540
- push {r4-r5, lr}
- sub sp, #0xc
- add r4, r2, #0x0
- add r2, r3, #0x0
- mov r3, #0x2c
- add r5, r1, #0x0
- mul r5, r3
- add r1, r0, r5
- ldrb r1, [r1, #0x1c]
- add r3, sp, #0x8
- cmp r1, #0x1
- beq _02018574
- ldrb r1, [r3, #0x14]
- add r0, #0x8
- add r0, r0, r5
- str r1, [sp, #0x0]
- ldrb r1, [r3, #0x18]
- str r1, [sp, #0x4]
- ldrb r1, [r3, #0x1c]
- str r1, [sp, #0x8]
- ldrb r3, [r3, #0x10]
- add r1, r4, #0x0
- bl FUN_02018590
- add sp, #0xc
- pop {r4-r5, pc}
-_02018574:
- ldrb r1, [r3, #0x14]
- add r0, #0x8
- add r0, r0, r5
- str r1, [sp, #0x0]
- ldrb r1, [r3, #0x18]
- str r1, [sp, #0x4]
- lsl r1, r4, #0x18
- ldrb r3, [r3, #0x10]
- lsr r1, r1, #0x18
- bl FUN_02018640
- add sp, #0xc
- pop {r4-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02018590
-FUN_02018590: ; 0x02018590
- push {r4-r7, lr}
- sub sp, #0x1c
- str r2, [sp, #0x4]
- str r3, [sp, #0x8]
- ldr r4, [r0, #0x0]
- add r7, r1, #0x0
- str r0, [sp, #0x0]
- ldr r6, [sp, #0x38]
- cmp r4, #0x0
- beq _0201863A
- ldrb r0, [r0, #0x15]
- add r1, sp, #0x18
- add r1, #0x1
- add r2, sp, #0x18
- bl FUN_02017850
- add r0, sp, #0x20
- ldrb r2, [r0, #0x14]
- ldr r1, [sp, #0x8]
- add r1, r1, r2
- ldr r2, [sp, #0x8]
- str r1, [sp, #0xc]
- cmp r2, r1
- bge _0201863A
- ldrb r2, [r0, #0x10]
- ldr r0, [sp, #0x4]
- lsl r1, r6, #0xc
- add r0, r0, r2
- add r1, r1, r7
- str r0, [sp, #0x10]
- lsl r0, r1, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x14]
-_020185D2:
- add r0, sp, #0x18
- ldrb r1, [r0, #0x0]
- ldr r0, [sp, #0x8]
- cmp r0, r1
- bhs _0201863A
- ldr r5, [sp, #0x4]
- ldr r0, [sp, #0x10]
- add r1, r5, #0x0
- cmp r1, r0
- bge _0201862A
-_020185E6:
- add r0, sp, #0x18
- ldrb r0, [r0, #0x1]
- cmp r5, r0
- bhs _0201862A
- ldr r2, [sp, #0x0]
- ldr r1, [sp, #0x8]
- ldrb r2, [r2, #0x15]
- add r0, r5, #0x0
- bl FUN_02017FFC
- cmp r6, #0x11
- bne _02018604
- lsl r0, r0, #0x1
- strh r7, [r4, r0]
- b _0201861E
-_02018604:
- cmp r6, #0x10
- bne _02018618
- lsl r0, r0, #0x1
- ldrh r2, [r4, r0]
- mov r1, #0xf
- lsl r1, r1, #0xc
- and r1, r2
- add r1, r7, r1
- strh r1, [r4, r0]
- b _0201861E
-_02018618:
- lsl r1, r0, #0x1
- ldr r0, [sp, #0x14]
- strh r0, [r4, r1]
-_0201861E:
- add r0, r5, #0x1
- lsl r0, r0, #0x18
- lsr r5, r0, #0x18
- ldr r0, [sp, #0x10]
- cmp r5, r0
- blt _020185E6
-_0201862A:
- ldr r0, [sp, #0x8]
- add r0, r0, #0x1
- lsl r0, r0, #0x18
- lsr r1, r0, #0x18
- ldr r0, [sp, #0xc]
- str r1, [sp, #0x8]
- cmp r1, r0
- blt _020185D2
-_0201863A:
- add sp, #0x1c
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02018640
-FUN_02018640: ; 0x02018640
- push {r4-r7, lr}
- sub sp, #0x14
- str r1, [sp, #0x0]
- add r7, r0, #0x0
- str r2, [sp, #0x4]
- ldr r0, [r7, #0x0]
- add r5, r3, #0x0
- str r0, [sp, #0xc]
- cmp r0, #0x0
- beq _020186B0
- ldrb r0, [r7, #0x15]
- add r1, sp, #0x10
- add r1, #0x1
- add r2, sp, #0x10
- bl FUN_02017850
- add r1, sp, #0x18
- ldrb r0, [r1, #0x14]
- add r0, r5, r0
- str r0, [sp, #0x8]
- cmp r5, r0
- bge _020186B0
- ldrb r1, [r1, #0x10]
- ldr r0, [sp, #0x4]
- add r6, r0, r1
-_02018672:
- add r0, sp, #0x10
- ldrb r0, [r0, #0x0]
- cmp r5, r0
- bhs _020186B0
- ldr r4, [sp, #0x4]
- add r0, r4, #0x0
- cmp r0, r6
- bge _020186A4
-_02018682:
- add r0, sp, #0x10
- ldrb r0, [r0, #0x1]
- cmp r4, r0
- bhs _020186A4
- ldrb r2, [r7, #0x15]
- add r0, r4, #0x0
- add r1, r5, #0x0
- bl FUN_02017FFC
- ldr r2, [sp, #0x0]
- ldr r1, [sp, #0xc]
- strb r2, [r1, r0]
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- cmp r4, r6
- blt _02018682
-_020186A4:
- add r0, r5, #0x1
- lsl r0, r0, #0x18
- lsr r5, r0, #0x18
- ldr r0, [sp, #0x8]
- cmp r5, r0
- blt _02018672
-_020186B0:
- add sp, #0x14
- pop {r4-r7, pc}
-
- thumb_func_start FUN_020186B4
-FUN_020186B4: ; 0x020186B4
- push {r4-r7, lr}
- sub sp, #0x14
- add r5, r0, #0x0
- mov r0, #0x2c
- add r7, r1, #0x0
- mul r7, r0
- str r2, [sp, #0x0]
- add r0, r5, r7
- ldr r4, [r0, #0x8]
- add r6, r3, #0x0
- cmp r4, #0x0
- beq _0201873C
- ldrb r0, [r0, #0x1d]
- add r1, sp, #0x10
- add r1, #0x1
- add r2, sp, #0x10
- bl FUN_02017850
- add r0, sp, #0x18
- ldrb r1, [r0, #0x14]
- add r1, r6, r1
- str r1, [sp, #0x4]
- cmp r6, r1
- bge _0201873C
- add r1, r5, r7
- str r1, [sp, #0xc]
- ldrb r1, [r0, #0x18]
- lsl r1, r1, #0xc
- str r1, [sp, #0x8]
- ldrb r1, [r0, #0x10]
- ldr r0, [sp, #0x0]
- add r7, r0, r1
-_020186F4:
- add r0, sp, #0x10
- ldrb r0, [r0, #0x0]
- cmp r6, r0
- bhs _0201873C
- ldr r5, [sp, #0x0]
- add r0, r5, #0x0
- cmp r0, r7
- bge _02018730
-_02018704:
- add r0, sp, #0x10
- ldrb r0, [r0, #0x1]
- cmp r5, r0
- bhs _02018730
- ldr r2, [sp, #0xc]
- add r0, r5, #0x0
- ldrb r2, [r2, #0x1d]
- add r1, r6, #0x0
- bl FUN_02017FFC
- lsl r0, r0, #0x1
- ldrh r2, [r4, r0]
- ldr r1, _02018740 ; =0x00000FFF
- and r2, r1
- ldr r1, [sp, #0x8]
- orr r1, r2
- strh r1, [r4, r0]
- add r0, r5, #0x1
- lsl r0, r0, #0x18
- lsr r5, r0, #0x18
- cmp r5, r7
- blt _02018704
-_02018730:
- add r0, r6, #0x1
- lsl r0, r0, #0x18
- lsr r6, r0, #0x18
- ldr r0, [sp, #0x4]
- cmp r6, r0
- blt _020186F4
-_0201873C:
- add sp, #0x14
- pop {r4-r7, pc}
- .balign 4
-_02018740: .word 0x00000FFF
-
- thumb_func_start FUN_02018744
-FUN_02018744: ; 0x02018744
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- mov r0, #0x2c
- mul r0, r4
- add r2, r5, r0
- ldr r1, [r2, #0x8]
- cmp r1, #0x0
- beq _02018766
- ldr r2, [r2, #0xc]
- mov r0, #0x0
- bl MIi_CpuClear16
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02017CD0
-_02018766:
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02018768
-FUN_02018768: ; 0x02018768
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- mov r0, #0x2c
- mul r0, r4
- add r3, r5, r0
- ldr r1, [r3, #0x8]
- cmp r1, #0x0
- beq _0201878A
- add r0, r2, #0x0
- ldr r2, [r3, #0xc]
- bl MIi_CpuClear16
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02017CD0
-_0201878A:
- pop {r3-r5, pc}
-
- thumb_func_start FUN_0201878C
-FUN_0201878C: ; 0x0201878C
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- mov r0, #0x2c
- mul r0, r4
- add r3, r5, r0
- ldr r1, [r3, #0x8]
- cmp r1, #0x0
- beq _020187AE
- add r0, r2, #0x0
- ldr r2, [r3, #0xc]
- bl MIi_CpuClear16
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_0201AC68
-_020187AE:
- pop {r3-r5, pc}
-
- thumb_func_start FUN_020187B0
-FUN_020187B0: ; 0x020187B0
- push {r3, lr}
- cmp r0, #0x7
- bhi _02018802
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_020187C2: ; jump table (using 16-bit offset)
- .short _020187D2 - _020187C2 - 2; case 0
- .short _020187D8 - _020187C2 - 2; case 1
- .short _020187DE - _020187C2 - 2; case 2
- .short _020187E4 - _020187C2 - 2; case 3
- .short _020187EA - _020187C2 - 2; case 4
- .short _020187F0 - _020187C2 - 2; case 5
- .short _020187F6 - _020187C2 - 2; case 6
- .short _020187FC - _020187C2 - 2; case 7
-_020187D2:
- bl G2_GetBG0CharPtr
- pop {r3, pc}
-_020187D8:
- bl G2_GetBG1CharPtr
- pop {r3, pc}
-_020187DE:
- bl G2_GetBG2CharPtr
- pop {r3, pc}
-_020187E4:
- bl G2_GetBG3CharPtr
- pop {r3, pc}
-_020187EA:
- bl G2S_GetBG0CharPtr
- pop {r3, pc}
-_020187F0:
- bl G2S_GetBG1CharPtr
- pop {r3, pc}
-_020187F6:
- bl G2S_GetBG2CharPtr
- pop {r3, pc}
-_020187FC:
- bl G2S_GetBG3CharPtr
- pop {r3, pc}
-_02018802:
- mov r0, #0x0
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02018808
-FUN_02018808: ; 0x02018808
- push {r4-r7}
- lsl r3, r3, #0x1c
- lsr r3, r3, #0x18
- mov r4, #0x0
- cmp r1, #0x0
- bls _02018842
- mov r5, #0xf
- add r6, r5, #0x0
-_02018818:
- ldrb r7, [r0, r4]
- and r7, r6
- strb r7, [r2, #0x0]
- ldrb r7, [r2, #0x0]
- cmp r7, #0x0
- beq _02018828
- add r7, r7, r3
- strb r7, [r2, #0x0]
-_02018828:
- ldrb r7, [r0, r4]
- asr r7, r7, #0x4
- and r7, r5
- strb r7, [r2, #0x1]
- ldrb r7, [r2, #0x1]
- cmp r7, #0x0
- beq _0201883A
- add r7, r7, r3
- strb r7, [r2, #0x1]
-_0201883A:
- add r4, r4, #0x1
- add r2, r2, #0x2
- cmp r4, r1
- blo _02018818
-_02018842:
- pop {r4-r7}
- bx lr
- .balign 4
-
- thumb_func_start FUN_02018848
-FUN_02018848: ; 0x02018848
- push {r3-r7, lr}
- add r5, r1, #0x0
- add r6, r0, #0x0
- add r0, r3, #0x0
- lsl r1, r5, #0x1
- add r7, r2, #0x0
- bl AllocFromHeap
- add r4, r0, #0x0
- add r0, r6, #0x0
- add r1, r5, #0x0
- add r2, r4, #0x0
- add r3, r7, #0x0
- bl FUN_02018808
- add r0, r4, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_0201886C
-FUN_0201886C: ; 0x0201886C
- mov r2, #0x2c
- mul r2, r1
- add r0, r0, r2
- ldr r0, [r0, #0x8]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02018878
-FUN_02018878: ; 0x02018878
- mov r2, #0x2c
- mul r2, r1
- add r0, r0, r2
- ldrh r0, [r0, #0x20]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02018884
-FUN_02018884: ; 0x02018884
- sub sp, #0x20
- cmp r1, #0x7
- bls _0201888C
- b _02018A38
-_0201888C:
- add r2, r1, r1
- add r2, pc
- ldrh r2, [r2, #0x6]
- lsl r2, r2, #0x10
- asr r2, r2, #0x10
- add pc, r2
-_02018898: ; jump table (using 16-bit offset)
- .short _020188A8 - _02018898 - 2; case 0
- .short _020188BC - _02018898 - 2; case 1
- .short _020188D0 - _02018898 - 2; case 2
- .short _02018920 - _02018898 - 2; case 3
- .short _02018970 - _02018898 - 2; case 4
- .short _02018984 - _02018898 - 2; case 5
- .short _02018998 - _02018898 - 2; case 6
- .short _020189E8 - _02018898 - 2; case 7
-_020188A8:
- ldr r0, _02018A40 ; =0x04000008
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x1e]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_020188BC:
- ldr r0, _02018A44 ; =0x0400000A
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x1c]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_020188D0:
- mov r2, #0x2c
- mul r2, r1
- add r0, r0, r2
- ldrb r0, [r0, #0x1c]
- cmp r0, #0x0
- beq _020188E4
- cmp r0, #0x1
- beq _020188F8
- cmp r0, #0x2
- beq _0201890C
-_020188E4:
- ldr r0, _02018A48 ; =0x0400000C
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x1a]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_020188F8:
- ldr r0, _02018A48 ; =0x0400000C
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x18]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_0201890C:
- ldr r0, _02018A48 ; =0x0400000C
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x16]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_02018920:
- mov r2, #0x2c
- mul r2, r1
- add r0, r0, r2
- ldrb r0, [r0, #0x1c]
- cmp r0, #0x0
- beq _02018934
- cmp r0, #0x1
- beq _02018948
- cmp r0, #0x2
- beq _0201895C
-_02018934:
- ldr r0, _02018A4C ; =0x0400000E
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x14]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_02018948:
- ldr r0, _02018A4C ; =0x0400000E
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x12]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_0201895C:
- ldr r0, _02018A4C ; =0x0400000E
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x10]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_02018970:
- ldr r0, _02018A50 ; =0x04001008
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0xe]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_02018984:
- ldr r0, _02018A54 ; =0x0400100A
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0xc]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_02018998:
- mov r2, #0x2c
- mul r2, r1
- add r0, r0, r2
- ldrb r0, [r0, #0x1c]
- cmp r0, #0x0
- beq _020189AC
- cmp r0, #0x1
- beq _020189C0
- cmp r0, #0x2
- beq _020189D4
-_020189AC:
- ldr r0, _02018A58 ; =0x0400100C
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0xa]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_020189C0:
- ldr r0, _02018A58 ; =0x0400100C
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x8]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_020189D4:
- ldr r0, _02018A58 ; =0x0400100C
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x6]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_020189E8:
- mov r2, #0x2c
- mul r2, r1
- add r0, r0, r2
- ldrb r0, [r0, #0x1c]
- cmp r0, #0x0
- beq _020189FC
- cmp r0, #0x1
- beq _02018A10
- cmp r0, #0x2
- beq _02018A24
-_020189FC:
- ldr r0, _02018A5C ; =0x0400100E
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x4]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_02018A10:
- ldr r0, _02018A5C ; =0x0400100E
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x2]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_02018A24:
- ldr r0, _02018A5C ; =0x0400100E
- ldrh r1, [r0, #0x0]
- add r0, sp, #0x0
- add sp, #0x20
- strh r1, [r0, #0x0]
- lsl r0, r1, #0x1e
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-_02018A38:
- mov r0, #0x0
- add sp, #0x20
- bx lr
- nop
-_02018A40: .word 0x04000008
-_02018A44: .word 0x0400000A
-_02018A48: .word 0x0400000C
-_02018A4C: .word 0x0400000E
-_02018A50: .word 0x04001008
-_02018A54: .word 0x0400100A
-_02018A58: .word 0x0400100C
-_02018A5C: .word 0x0400100E
-
- thumb_func_start FUN_02018A60
-FUN_02018A60: ; 0x02018A60
- push {r3-r7, lr}
- sub sp, #0x68
- str r2, [sp, #0x8]
- str r3, [sp, #0xc]
- add r2, sp, #0x70
- str r0, [sp, #0x0]
- ldrh r0, [r2, #0x10]
- str r1, [sp, #0x4]
- ldrh r2, [r2, #0x18]
- str r0, [sp, #0x10]
- add r0, r1, #0x0
- ldrh r1, [r0, #0x4]
- ldr r0, [sp, #0x10]
- sub r3, r1, r0
- cmp r3, r2
- bge _02018A88
- ldr r0, [sp, #0x8]
- add r0, r0, r3
- str r0, [sp, #0x50]
- b _02018A8E
-_02018A88:
- ldr r0, [sp, #0x8]
- add r0, r2, r0
- str r0, [sp, #0x50]
-_02018A8E:
- ldr r2, [sp, #0x4]
- add r3, sp, #0x70
- ldrh r0, [r3, #0x14]
- ldrh r2, [r2, #0x6]
- ldrh r3, [r3, #0x1c]
- sub r4, r2, r0
- cmp r4, r3
- bge _02018AA6
- ldr r2, [sp, #0xc]
- add r2, r2, r4
- str r2, [sp, #0x4c]
- b _02018AAC
-_02018AA6:
- ldr r2, [sp, #0xc]
- add r2, r3, r2
- str r2, [sp, #0x4c]
-_02018AAC:
- ldr r2, [sp, #0x0]
- mov r3, #0x7
- ldrh r4, [r2, #0x4]
- add r2, r4, #0x0
- and r2, r3
- add r2, r4, r2
- asr r2, r2, #0x3
- str r2, [sp, #0x48]
- add r2, r1, #0x0
- and r2, r3
- add r1, r1, r2
- asr r1, r1, #0x3
- str r1, [sp, #0x44]
- add r1, sp, #0x70
- ldrh r1, [r1, #0x20]
- ldr r2, _02018C98 ; =0x0000FFFF
- str r1, [sp, #0x38]
- cmp r1, r2
- bne _02018BB4
- ldr r2, [sp, #0xc]
- ldr r1, [sp, #0x4c]
- cmp r2, r1
- bge _02018ADE
- cmp r2, r1
- blt _02018AE0
-_02018ADE:
- b _02018C92
-_02018AE0:
- add r1, r2, #0x0
- lsl r1, r1, #0x2
- lsl r0, r0, #0x2
- str r1, [sp, #0x28]
- str r0, [sp, #0x24]
-_02018AEA:
- ldr r3, [sp, #0x8]
- ldr r0, [sp, #0x50]
- add r1, r3, #0x0
- ldr r4, [sp, #0x10]
- cmp r1, r0
- bge _02018B96
- cmp r1, r0
- bge _02018B96
- add r0, r3, #0x0
- lsl r5, r0, #0x2
- add r0, r4, #0x0
- lsl r6, r0, #0x2
- ldr r0, _02018C9C ; =0x00003FE0
- ldr r1, [sp, #0x28]
- ldr r2, [sp, #0x48]
- and r1, r0
- mul r2, r1
- str r2, [sp, #0x20]
- ldr r2, [sp, #0x28]
- mov r1, #0x1c
- and r2, r1
- str r2, [sp, #0x1c]
- ldr r2, [sp, #0x24]
- and r0, r2
- ldr r2, [sp, #0x44]
- mul r2, r0
- ldr r0, [sp, #0x24]
- str r2, [sp, #0x18]
- and r0, r1
- str r0, [sp, #0x14]
-_02018B26:
- ldr r0, [sp, #0x4]
- asr r2, r4, #0x1
- mov r1, #0x3
- ldr r0, [r0, #0x0]
- and r1, r2
- add r1, r0, r1
- ldr r0, _02018C9C ; =0x00003FE0
- and r0, r6
- add r1, r1, r0
- ldr r0, [sp, #0x18]
- add r6, r6, #0x4
- add r0, r1, r0
- str r0, [sp, #0x64]
- lsl r0, r4, #0x1f
- lsr r2, r0, #0x1d
- ldr r0, [sp, #0x0]
- asr r1, r3, #0x1
- ldr r7, [r0, #0x0]
- mov r0, #0x3
- and r0, r1
- ldr r1, _02018C9C ; =0x00003FE0
- add r4, r4, #0x1
- and r1, r5
- str r1, [sp, #0x54]
- add r1, r7, r0
- ldr r0, [sp, #0x54]
- add r5, r5, #0x4
- add r1, r0, r1
- ldr r0, [sp, #0x20]
- add r1, r0, r1
- ldr r0, [sp, #0x1c]
- ldrb r1, [r0, r1]
- lsl r0, r3, #0x1f
- lsr r0, r0, #0x1d
- asr r1, r0
- mov r0, #0xf
- and r0, r1
- add r7, r0, #0x0
- ldr r1, [sp, #0x14]
- ldr r0, [sp, #0x64]
- lsl r7, r2
- ldrb r0, [r0, r1]
- add r3, r3, #0x1
- str r0, [sp, #0x58]
- mov r0, #0xf0
- asr r0, r2
- ldr r1, [sp, #0x58]
- add r2, r7, #0x0
- and r0, r1
- orr r2, r0
- ldr r1, [sp, #0x14]
- ldr r0, [sp, #0x64]
- strb r2, [r0, r1]
- ldr r0, [sp, #0x50]
- cmp r3, r0
- blt _02018B26
-_02018B96:
- ldr r0, [sp, #0x28]
- add r0, r0, #0x4
- str r0, [sp, #0x28]
- ldr r0, [sp, #0xc]
- add r0, r0, #0x1
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x24]
- ldr r1, [sp, #0xc]
- add r0, r0, #0x4
- str r0, [sp, #0x24]
- ldr r0, [sp, #0x4c]
- cmp r1, r0
- blt _02018AEA
- add sp, #0x68
- pop {r3-r7, pc}
-_02018BB4:
- ldr r2, [sp, #0xc]
- ldr r1, [sp, #0x4c]
- cmp r2, r1
- bge _02018C92
- cmp r2, r1
- bge _02018C92
- add r1, r2, #0x0
- lsl r1, r1, #0x2
- lsl r0, r0, #0x2
- str r1, [sp, #0x40]
- str r0, [sp, #0x3c]
-_02018BCA:
- ldr r3, [sp, #0x8]
- ldr r0, [sp, #0x50]
- add r1, r3, #0x0
- ldr r4, [sp, #0x10]
- cmp r1, r0
- bge _02018C78
- cmp r1, r0
- bge _02018C78
- add r0, r3, #0x0
- lsl r1, r0, #0x2
- add r0, r4, #0x0
- lsl r2, r0, #0x2
- ldr r0, _02018C9C ; =0x00003FE0
- ldr r5, [sp, #0x40]
- ldr r6, [sp, #0x48]
- and r5, r0
- mul r6, r5
- str r6, [sp, #0x34]
- ldr r6, [sp, #0x40]
- mov r5, #0x1c
- and r6, r5
- str r6, [sp, #0x30]
- ldr r6, [sp, #0x3c]
- and r0, r6
- ldr r6, [sp, #0x44]
- mul r6, r0
- ldr r0, [sp, #0x3c]
- str r6, [sp, #0x2c]
- and r0, r5
- str r0, [sp, #0x60]
-_02018C06:
- ldr r0, [sp, #0x4]
- asr r6, r4, #0x1
- mov r5, #0x3
- and r5, r6
- ldr r0, [r0, #0x0]
- asr r6, r3, #0x1
- add r5, r0, r5
- ldr r0, _02018C9C ; =0x00003FE0
- and r0, r2
- add r5, r5, r0
- ldr r0, [sp, #0x2c]
- add r5, r5, r0
- ldr r0, [sp, #0x0]
- ldr r7, [r0, #0x0]
- mov r0, #0x3
- and r0, r6
- ldr r6, _02018C9C ; =0x00003FE0
- and r6, r1
- str r6, [sp, #0x5c]
- add r6, r7, r0
- ldr r0, [sp, #0x5c]
- add r6, r0, r6
- ldr r0, [sp, #0x34]
- add r6, r0, r6
- ldr r0, [sp, #0x30]
- ldrb r6, [r0, r6]
- lsl r0, r3, #0x1f
- lsr r0, r0, #0x1d
- asr r6, r0
- mov r0, #0xf
- and r0, r6
- ldr r6, [sp, #0x38]
- cmp r0, r6
- beq _02018C6A
- lsl r6, r4, #0x1f
- lsr r7, r6, #0x1d
- lsl r0, r7
- mov lr, r0
- ldr r0, [sp, #0x60]
- ldrb r0, [r5, r0]
- mov r12, r0
- mov r0, #0xf0
- add r6, r0, #0x0
- asr r6, r7
- mov r0, r12
- and r0, r6
- mov r6, lr
- orr r6, r0
- ldr r0, [sp, #0x60]
- strb r6, [r5, r0]
-_02018C6A:
- ldr r0, [sp, #0x50]
- add r3, r3, #0x1
- add r1, r1, #0x4
- add r2, r2, #0x4
- add r4, r4, #0x1
- cmp r3, r0
- blt _02018C06
-_02018C78:
- ldr r0, [sp, #0x40]
- add r0, r0, #0x4
- str r0, [sp, #0x40]
- ldr r0, [sp, #0xc]
- add r0, r0, #0x1
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x3c]
- ldr r1, [sp, #0xc]
- add r0, r0, #0x4
- str r0, [sp, #0x3c]
- ldr r0, [sp, #0x4c]
- cmp r1, r0
- blt _02018BCA
-_02018C92:
- add sp, #0x68
- pop {r3-r7, pc}
- nop
-_02018C98: .word 0x0000FFFF
-_02018C9C: .word 0x00003FE0
-
- thumb_func_start FUN_02018CA0
-FUN_02018CA0: ; 0x02018CA0
- push {r3-r7, lr}
- sub sp, #0x50
- str r2, [sp, #0x8]
- str r3, [sp, #0xc]
- add r2, sp, #0x58
- str r0, [sp, #0x0]
- ldrh r0, [r2, #0x10]
- str r1, [sp, #0x4]
- ldrh r2, [r2, #0x18]
- str r0, [sp, #0x10]
- add r0, r1, #0x0
- ldrh r1, [r0, #0x4]
- ldr r0, [sp, #0x10]
- sub r3, r1, r0
- cmp r3, r2
- bge _02018CC6
- ldr r0, [sp, #0x8]
- add r0, r0, r3
- b _02018CCA
-_02018CC6:
- ldr r0, [sp, #0x8]
- add r0, r2, r0
-_02018CCA:
- ldr r2, [sp, #0x4]
- add r3, sp, #0x58
- mov r12, r0
- ldrh r0, [r3, #0x14]
- ldrh r2, [r2, #0x6]
- ldrh r3, [r3, #0x1c]
- sub r4, r2, r0
- cmp r4, r3
- bge _02018CE2
- ldr r2, [sp, #0xc]
- add r2, r2, r4
- b _02018CE6
-_02018CE2:
- ldr r2, [sp, #0xc]
- add r2, r3, r2
-_02018CE6:
- mov lr, r2
- ldr r2, [sp, #0x0]
- mov r3, #0x7
- ldrh r4, [r2, #0x4]
- add r2, r4, #0x0
- and r2, r3
- add r2, r4, r2
- asr r2, r2, #0x3
- str r2, [sp, #0x4c]
- add r2, r1, #0x0
- and r2, r3
- add r1, r1, r2
- asr r1, r1, #0x3
- str r1, [sp, #0x48]
- add r1, sp, #0x58
- ldrh r1, [r1, #0x20]
- ldr r2, _02018E80 ; =0x0000FFFF
- str r1, [sp, #0x3c]
- cmp r1, r2
- bne _02018DC6
- ldr r2, [sp, #0xc]
- mov r1, lr
- cmp r2, r1
- bge _02018D1C
- mov r1, lr
- cmp r2, r1
- blt _02018D1E
-_02018D1C:
- b _02018E7C
-_02018D1E:
- add r1, r2, #0x0
- lsl r1, r1, #0x3
- lsl r0, r0, #0x3
- str r1, [sp, #0x28]
- str r0, [sp, #0x24]
-_02018D28:
- ldr r1, [sp, #0x8]
- mov r0, r12
- add r2, r1, #0x0
- ldr r7, [sp, #0x10]
- cmp r2, r0
- bge _02018DA8
- mov r0, r12
- cmp r2, r0
- bge _02018DA8
- add r0, r1, #0x0
- lsl r2, r0, #0x3
- add r0, r7, #0x0
- lsl r3, r0, #0x3
- ldr r6, _02018E84 ; =0x00007FC0
- ldr r0, [sp, #0x28]
- ldr r4, [sp, #0x4c]
- and r0, r6
- mul r4, r0
- str r4, [sp, #0x20]
- ldr r0, [sp, #0x28]
- mov r5, #0x38
- and r0, r5
- str r0, [sp, #0x1c]
- ldr r0, [sp, #0x24]
- ldr r4, [sp, #0x48]
- and r0, r6
- mul r4, r0
- ldr r0, [sp, #0x24]
- str r4, [sp, #0x18]
- and r0, r5
- str r0, [sp, #0x14]
-_02018D66:
- ldr r0, [sp, #0x0]
- add r5, r1, #0x0
- mov r4, #0x7
- and r5, r4
- ldr r0, [r0, #0x0]
- ldr r4, _02018E84 ; =0x00007FC0
- add r0, r0, r5
- and r4, r2
- add r4, r4, r0
- ldr r0, [sp, #0x20]
- add r5, r7, #0x0
- add r4, r0, r4
- ldr r0, [sp, #0x1c]
- add r1, r1, #0x1
- ldrb r6, [r0, r4]
- ldr r0, [sp, #0x4]
- mov r4, #0x7
- and r5, r4
- ldr r0, [r0, #0x0]
- ldr r4, _02018E84 ; =0x00007FC0
- add r0, r0, r5
- and r4, r3
- add r4, r4, r0
- ldr r0, [sp, #0x18]
- add r2, #0x8
- add r4, r0, r4
- ldr r0, [sp, #0x14]
- add r3, #0x8
- strb r6, [r0, r4]
- mov r0, r12
- add r7, r7, #0x1
- cmp r1, r0
- blt _02018D66
-_02018DA8:
- ldr r0, [sp, #0x28]
- add r0, #0x8
- str r0, [sp, #0x28]
- ldr r0, [sp, #0xc]
- add r0, r0, #0x1
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x24]
- ldr r1, [sp, #0xc]
- add r0, #0x8
- str r0, [sp, #0x24]
- mov r0, lr
- cmp r1, r0
- blt _02018D28
- add sp, #0x50
- pop {r3-r7, pc}
-_02018DC6:
- ldr r2, [sp, #0xc]
- mov r1, lr
- cmp r2, r1
- bge _02018E7C
- mov r1, lr
- cmp r2, r1
- bge _02018E7C
- add r1, r2, #0x0
- lsl r1, r1, #0x3
- lsl r0, r0, #0x3
- str r1, [sp, #0x44]
- str r0, [sp, #0x40]
-_02018DDE:
- ldr r2, [sp, #0x8]
- mov r0, r12
- add r1, r2, #0x0
- ldr r3, [sp, #0x10]
- cmp r1, r0
- bge _02018E62
- mov r0, r12
- cmp r1, r0
- bge _02018E62
- add r0, r2, #0x0
- lsl r6, r0, #0x3
- add r0, r3, #0x0
- lsl r1, r0, #0x3
- ldr r7, _02018E84 ; =0x00007FC0
- ldr r0, [sp, #0x44]
- ldr r4, [sp, #0x4c]
- and r0, r7
- mul r4, r0
- str r4, [sp, #0x38]
- ldr r0, [sp, #0x44]
- mov r5, #0x38
- and r0, r5
- str r0, [sp, #0x34]
- ldr r0, [sp, #0x40]
- ldr r4, [sp, #0x48]
- and r0, r7
- mul r4, r0
- ldr r0, [sp, #0x40]
- str r4, [sp, #0x30]
- and r0, r5
- str r0, [sp, #0x2c]
-_02018E1C:
- ldr r0, [sp, #0x4]
- mov r4, #0x7
- ldr r0, [r0, #0x0]
- and r4, r3
- add r0, r0, r4
- ldr r4, _02018E84 ; =0x00007FC0
- add r5, r2, #0x0
- and r4, r1
- add r4, r0, r4
- ldr r0, [sp, #0x30]
- add r7, r4, r0
- ldr r0, [sp, #0x0]
- mov r4, #0x7
- and r5, r4
- ldr r0, [r0, #0x0]
- ldr r4, _02018E84 ; =0x00007FC0
- add r0, r0, r5
- and r4, r6
- add r4, r4, r0
- ldr r0, [sp, #0x38]
- add r4, r0, r4
- ldr r0, [sp, #0x34]
- ldrb r0, [r0, r4]
- ldr r4, [sp, #0x3c]
- cmp r0, r4
- beq _02018E54
- ldr r4, [sp, #0x2c]
- strb r0, [r7, r4]
-_02018E54:
- add r2, r2, #0x1
- mov r0, r12
- add r6, #0x8
- add r1, #0x8
- add r3, r3, #0x1
- cmp r2, r0
- blt _02018E1C
-_02018E62:
- ldr r0, [sp, #0x44]
- add r0, #0x8
- str r0, [sp, #0x44]
- ldr r0, [sp, #0xc]
- add r0, r0, #0x1
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x40]
- ldr r1, [sp, #0xc]
- add r0, #0x8
- str r0, [sp, #0x40]
- mov r0, lr
- cmp r1, r0
- blt _02018DDE
-_02018E7C:
- add sp, #0x50
- pop {r3-r7, pc}
- .balign 4
-_02018E80: .word 0x0000FFFF
-_02018E84: .word 0x00007FC0
-
- thumb_func_start FUN_02018E88
-FUN_02018E88: ; 0x02018E88
- push {r4-r7, lr}
- sub sp, #0x14
- str r1, [sp, #0x4]
- str r2, [sp, #0x8]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x2c]
- str r0, [sp, #0x2c]
- ldr r0, [sp, #0x4]
- add r6, r0, r3
- ldr r0, [sp, #0x0]
- ldrh r0, [r0, #0x4]
- cmp r6, r0
- ble _02018EA4
- add r6, r0, #0x0
-_02018EA4:
- add r1, sp, #0x18
- ldrh r2, [r1, #0x10]
- ldr r1, [sp, #0x8]
- add r1, r1, r2
- mov r12, r1
- ldr r1, [sp, #0x0]
- ldrh r2, [r1, #0x6]
- mov r1, r12
- cmp r1, r2
- ble _02018EBA
- mov r12, r2
-_02018EBA:
- mov r1, #0x7
- and r1, r0
- add r0, r0, r1
- asr r0, r0, #0x3
- mov lr, r0
- ldr r1, [sp, #0x8]
- mov r0, r12
- cmp r1, r0
- bge _02018F44
- add r0, r1, #0x0
- lsl r0, r0, #0x2
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x2c]
- lsl r0, r0, #0x4
- str r0, [sp, #0x10]
-_02018ED8:
- ldr r1, [sp, #0x4]
- add r0, r1, #0x0
- cmp r0, r6
- bge _02018F32
- lsl r5, r0, #0x2
- ldr r2, _02018F48 ; =0x00003FE0
- ldr r0, [sp, #0xc]
- and r0, r2
- add r7, r0, #0x0
- mov r2, lr
- mul r7, r2
- ldr r0, [sp, #0xc]
- mov r2, #0x1c
- and r2, r0
-_02018EF4:
- ldr r0, [sp, #0x0]
- asr r3, r1, #0x1
- ldr r4, [r0, #0x0]
- mov r0, #0x3
- and r0, r3
- ldr r3, _02018F48 ; =0x00003FE0
- add r0, r4, r0
- and r3, r5
- add r0, r0, r3
- add r0, r0, r7
- mov r3, #0x1
- tst r3, r1
- ldrb r4, [r0, r2]
- beq _02018F1C
- mov r3, #0xf
- and r3, r4
- strb r3, [r0, r2]
- ldrb r4, [r0, r2]
- ldr r3, [sp, #0x10]
- b _02018F26
-_02018F1C:
- mov r3, #0xf0
- and r3, r4
- strb r3, [r0, r2]
- ldrb r4, [r0, r2]
- ldr r3, [sp, #0x2c]
-_02018F26:
- orr r3, r4
- add r1, r1, #0x1
- strb r3, [r0, r2]
- add r5, r5, #0x4
- cmp r1, r6
- blt _02018EF4
-_02018F32:
- ldr r0, [sp, #0xc]
- add r0, r0, #0x4
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x8]
- add r1, r0, #0x1
- mov r0, r12
- str r1, [sp, #0x8]
- cmp r1, r0
- blt _02018ED8
-_02018F44:
- add sp, #0x14
- pop {r4-r7, pc}
- .balign 4
-_02018F48: .word 0x00003FE0
-
- thumb_func_start FUN_02018F4C
-FUN_02018F4C: ; 0x02018F4C
- push {r4-r7, lr}
- sub sp, #0x14
- str r1, [sp, #0x4]
- str r2, [sp, #0x8]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x2c]
- str r0, [sp, #0x2c]
- ldr r0, [sp, #0x4]
- add r5, r0, r3
- ldr r0, [sp, #0x0]
- ldrh r0, [r0, #0x4]
- cmp r5, r0
- ble _02018F68
- add r5, r0, #0x0
-_02018F68:
- add r1, sp, #0x18
- ldrh r2, [r1, #0x10]
- ldr r1, [sp, #0x8]
- add r1, r1, r2
- mov lr, r1
- ldr r1, [sp, #0x0]
- ldrh r2, [r1, #0x6]
- mov r1, lr
- cmp r1, r2
- ble _02018F7E
- mov lr, r2
-_02018F7E:
- mov r1, #0x7
- and r1, r0
- add r0, r0, r1
- asr r0, r0, #0x3
- str r0, [sp, #0x10]
- ldr r1, [sp, #0x8]
- mov r0, lr
- cmp r1, r0
- bge _02018FEA
- add r0, r1, #0x0
- lsl r0, r0, #0x3
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x4]
- lsl r0, r0, #0x3
- mov r12, r0
-_02018F9C:
- ldr r2, [sp, #0x4]
- add r0, r2, #0x0
- cmp r0, r5
- bge _02018FD8
- ldr r1, [sp, #0xc]
- ldr r0, _02018FF0 ; =0x00007FC0
- mov r3, r12
- and r0, r1
- add r7, r0, #0x0
- ldr r1, [sp, #0x10]
- mov r0, #0x38
- mul r7, r1
- ldr r1, [sp, #0xc]
- add r6, r1, #0x0
- and r6, r0
-_02018FBA:
- ldr r0, [sp, #0x0]
- ldr r4, _02018FF0 ; =0x00007FC0
- ldr r1, [r0, #0x0]
- mov r0, #0x7
- and r0, r2
- and r4, r3
- add r0, r1, r0
- add r0, r4, r0
- add r1, r7, r0
- ldr r0, [sp, #0x2c]
- add r2, r2, #0x1
- strb r0, [r6, r1]
- add r3, #0x8
- cmp r2, r5
- blt _02018FBA
-_02018FD8:
- ldr r0, [sp, #0xc]
- add r0, #0x8
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x8]
- add r1, r0, #0x1
- mov r0, lr
- str r1, [sp, #0x8]
- cmp r1, r0
- blt _02018F9C
-_02018FEA:
- add sp, #0x14
- pop {r4-r7, pc}
- nop
-_02018FF0: .word 0x00007FC0
-
- thumb_func_start FUN_02018FF4
-FUN_02018FF4: ; 0x02018FF4
- push {r4-r6, lr}
- add r5, r1, #0x0
- lsl r1, r5, #0x4
- bl AllocFromHeap
- add r6, r0, #0x0
- mov r4, #0x0
- cmp r5, #0x0
- ble _02019018
-_02019006:
- lsl r0, r4, #0x4
- add r0, r6, r0
- bl FUN_0201901C
- add r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- cmp r4, r5
- blt _02019006
-_02019018:
- add r0, r6, #0x0
- pop {r4-r6, pc}
-
- thumb_func_start FUN_0201901C
-FUN_0201901C: ; 0x0201901C
- mov r3, #0x0
- str r3, [r0, #0x0]
- mov r1, #0xff
- strb r1, [r0, #0x4]
- strb r3, [r0, #0x5]
- strb r3, [r0, #0x6]
- strb r3, [r0, #0x7]
- strb r3, [r0, #0x8]
- strb r3, [r0, #0x9]
- ldrh r2, [r0, #0xa]
- ldr r1, _02019044 ; =0xFFFF8000
- and r2, r1
- strh r2, [r0, #0xa]
- str r3, [r0, #0xc]
- ldrh r2, [r0, #0xa]
- sub r1, r1, #0x1
- and r1, r2
- strh r1, [r0, #0xa]
- bx lr
- nop
-_02019044: .word 0xFFFF8000
-
- thumb_func_start FUN_02019048
-FUN_02019048: ; 0x02019048
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- beq _0201905A
- ldrb r1, [r0, #0x4]
- cmp r1, #0xff
- beq _0201905A
- ldr r0, [r0, #0xc]
- cmp r0, #0x0
- bne _0201905E
-_0201905A:
- mov r0, #0x0
- bx lr
-_0201905E:
- mov r0, #0x1
- bx lr
- .balign 4
-
- thumb_func_start FUN_02019064
-FUN_02019064: ; 0x02019064
- push {r3-r7, lr}
- add r6, r2, #0x0
- add r5, r0, #0x0
- mov r0, #0x2c
- add r7, r6, #0x0
- mul r7, r0
- add r4, r1, #0x0
- str r3, [sp, #0x0]
- add r1, r5, r7
- ldr r0, [r1, #0x8]
- cmp r0, #0x0
- beq _020190E0
- add r3, sp, #0x8
- ldrb r2, [r1, #0x1f]
- ldrb r1, [r3, #0x14]
- ldrb r3, [r3, #0x18]
- ldr r0, [r5, #0x0]
- mul r3, r1
- add r1, r2, #0x0
- mul r1, r3
- bl AllocFromHeap
- add r1, r0, #0x0
- beq _020190E0
- str r5, [r4, #0x0]
- strb r6, [r4, #0x4]
- ldr r0, [sp, #0x0]
- add r3, sp, #0x8
- strb r0, [r4, #0x5]
- ldrb r0, [r3, #0x10]
- ldr r2, _020190E4 ; =0xFFFF8000
- strb r0, [r4, #0x6]
- ldrb r0, [r3, #0x14]
- strb r0, [r4, #0x7]
- ldrb r0, [r3, #0x18]
- strb r0, [r4, #0x8]
- ldrb r0, [r3, #0x1c]
- strb r0, [r4, #0x9]
- ldrh r0, [r4, #0xa]
- ldrh r3, [r3, #0x20]
- and r0, r2
- lsr r2, r2, #0x11
- and r2, r3
- orr r0, r2
- strh r0, [r4, #0xa]
- str r1, [r4, #0xc]
- add r0, r5, r7
- ldrb r0, [r0, #0x1e]
- cmp r0, #0x0
- bne _020190CC
- mov r2, #0x0
- b _020190CE
-_020190CC:
- mov r2, #0x1
-_020190CE:
- ldrh r1, [r4, #0xa]
- ldr r0, _020190E8 ; =0xFFFF7FFF
- and r1, r0
- lsl r0, r2, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x10
- orr r0, r1
- strh r0, [r4, #0xa]
-_020190E0:
- pop {r3-r7, pc}
- nop
-_020190E4: .word 0xFFFF8000
-_020190E8: .word 0xFFFF7FFF
-
- thumb_func_start FUN_020190EC
-FUN_020190EC: ; 0x020190EC
- push {r3-r7, lr}
- sub sp, #0x8
- str r3, [sp, #0x0]
- add r5, r0, #0x0
- ldr r0, [sp, #0x24]
- add r6, r2, #0x0
- str r0, [sp, #0x24]
- ldr r0, [sp, #0x0]
- add r4, r1, #0x0
- mul r0, r6
- lsl r0, r0, #0x5
- str r0, [sp, #0x4]
- ldr r0, [r5, #0x0]
- ldr r1, [sp, #0x4]
- bl AllocFromHeap
- ldr r1, [sp, #0x24]
- add r7, r0, #0x0
- lsl r2, r1, #0x4
- orr r1, r2
- lsl r1, r1, #0x18
- ldr r2, [sp, #0x4]
- lsr r1, r1, #0x18
- bl memset
- cmp r7, #0x0
- beq _02019148
- str r5, [r4, #0x0]
- strb r6, [r4, #0x7]
- ldr r0, [sp, #0x0]
- strb r0, [r4, #0x8]
- ldrh r1, [r4, #0xa]
- ldr r0, _0201914C ; =0xFFFF8000
- add r3, r1, #0x0
- add r1, sp, #0x10
- ldrh r2, [r1, #0x10]
- lsr r1, r0, #0x11
- and r3, r0
- and r1, r2
- orr r1, r3
- strh r1, [r4, #0xa]
- str r7, [r4, #0xc]
- ldrh r1, [r4, #0xa]
- sub r0, r0, #0x1
- and r0, r1
- strh r0, [r4, #0xa]
-_02019148:
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_0201914C: .word 0xFFFF8000
-
- thumb_func_start FUN_02019150
-FUN_02019150: ; 0x02019150
- push {lr}
- sub sp, #0x14
- add r3, r2, #0x0
- ldrb r2, [r3, #0x2]
- str r2, [sp, #0x0]
- ldrb r2, [r3, #0x3]
- str r2, [sp, #0x4]
- ldrb r2, [r3, #0x4]
- str r2, [sp, #0x8]
- ldrb r2, [r3, #0x5]
- str r2, [sp, #0xc]
- ldrh r2, [r3, #0x6]
- str r2, [sp, #0x10]
- ldrb r2, [r3, #0x0]
- ldrb r3, [r3, #0x1]
- bl FUN_02019064
- add sp, #0x14
- pop {pc}
- .balign 4
-
- thumb_func_start FUN_02019178
-FUN_02019178: ; 0x02019178
- push {r4, lr}
- add r4, r0, #0x0
- ldr r0, [r4, #0xc]
- bl FreeToHeap
- mov r2, #0x0
- str r2, [r4, #0x0]
- mov r0, #0xff
- strb r0, [r4, #0x4]
- strb r2, [r4, #0x5]
- strb r2, [r4, #0x6]
- strb r2, [r4, #0x7]
- strb r2, [r4, #0x8]
- strb r2, [r4, #0x9]
- ldrh r1, [r4, #0xa]
- ldr r0, _020191A0 ; =0xFFFF8000
- and r0, r1
- strh r0, [r4, #0xa]
- str r2, [r4, #0xc]
- pop {r4, pc}
- .balign 4
-_020191A0: .word 0xFFFF8000
-
- thumb_func_start FUN_020191A4
-FUN_020191A4: ; 0x020191A4
- push {r4-r6, lr}
- add r6, r1, #0x0
- add r5, r0, #0x0
- mov r4, #0x0
- cmp r6, #0x0
- ble _020191C8
-_020191B0:
- lsl r0, r4, #0x4
- add r0, r5, r0
- ldr r0, [r0, #0xc]
- cmp r0, #0x0
- beq _020191BE
- bl FreeToHeap
-_020191BE:
- add r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- cmp r4, r6
- blt _020191B0
-_020191C8:
- add r0, r5, #0x0
- bl FreeToHeap
- pop {r4-r6, pc}
-
- thumb_func_start CopyWindowToVram
-CopyWindowToVram: ; 0x020191D0
- push {r4, lr}
- add r4, r0, #0x0
- bne _020191DA
- bl ErrorHandling
-_020191DA:
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- bne _020191E4
- bl ErrorHandling
-_020191E4:
- ldrb r0, [r4, #0x4]
- cmp r0, #0x8
- blo _020191EE
- bl ErrorHandling
-_020191EE:
- ldrb r1, [r4, #0x4]
- mov r0, #0x2c
- ldr r2, [r4, #0x0]
- mul r0, r1
- add r0, r2, r0
- ldrb r0, [r0, #0x1c]
- cmp r0, #0x3
- blo _02019202
- bl ErrorHandling
-_02019202:
- ldrb r2, [r4, #0x4]
- mov r1, #0x2c
- ldr r3, [r4, #0x0]
- mul r1, r2
- add r1, r3, r1
- ldrb r1, [r1, #0x1c]
- add r0, r4, #0x0
- lsl r2, r1, #0x2
- ldr r1, _0201921C ; =UNK_020EDB68
- ldr r1, [r1, r2]
- blx r1
- pop {r4, pc}
- nop
-_0201921C: .word UNK_020EDB68
-
- thumb_func_start FUN_02019220
-FUN_02019220: ; 0x02019220
- push {r4, lr}
- add r4, r0, #0x0
- bne _0201922A
- bl ErrorHandling
-_0201922A:
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- bne _02019234
- bl ErrorHandling
-_02019234:
- ldrb r0, [r4, #0x4]
- cmp r0, #0x8
- blo _0201923E
- bl ErrorHandling
-_0201923E:
- ldrb r1, [r4, #0x4]
- mov r0, #0x2c
- ldr r2, [r4, #0x0]
- mul r0, r1
- add r0, r2, r0
- ldrb r0, [r0, #0x1c]
- cmp r0, #0x3
- blo _02019252
- bl ErrorHandling
-_02019252:
- ldrb r2, [r4, #0x4]
- mov r1, #0x2c
- ldr r3, [r4, #0x0]
- mul r1, r2
- add r1, r3, r1
- ldrb r1, [r1, #0x1c]
- add r0, r4, #0x0
- lsl r2, r1, #0x2
- ldr r1, _0201926C ; =UNK_020EDB5C
- ldr r1, [r1, r2]
- blx r1
- pop {r4, pc}
- nop
-_0201926C: .word UNK_020EDB5C
-
- thumb_func_start FUN_02019270
-FUN_02019270: ; 0x02019270
- push {r3, lr}
- ldrb r2, [r0, #0x4]
- mov r1, #0x2c
- ldr r3, [r0, #0x0]
- mul r1, r2
- add r1, r3, r1
- ldrb r1, [r1, #0x1c]
- lsl r2, r1, #0x2
- ldr r1, _02019288 ; =UNK_020EDB38
- ldr r1, [r1, r2]
- blx r1
- pop {r3, pc}
- .balign 4
-_02019288: .word UNK_020EDB38
-
- thumb_func_start FUN_0201928C
-FUN_0201928C: ; 0x0201928C
- push {r4-r6, lr}
- add r5, r0, #0x0
- ldrb r6, [r5, #0x7]
- ldrb r4, [r5, #0x8]
- strb r1, [r5, #0x7]
- strb r2, [r5, #0x8]
- ldrb r3, [r5, #0x4]
- mov r2, #0x2c
- ldr r1, [r5, #0x0]
- mul r2, r3
- add r1, r1, r2
- ldrb r1, [r1, #0x1c]
- lsl r2, r1, #0x2
- ldr r1, _020192B4 ; =UNK_020EDB38
- ldr r1, [r1, r2]
- blx r1
- strb r6, [r5, #0x7]
- strb r4, [r5, #0x8]
- pop {r4-r6, pc}
- nop
-_020192B4: .word UNK_020EDB38
-
- thumb_func_start FUN_020192B8
-FUN_020192B8: ; 0x020192B8
- push {r3, lr}
- ldrb r2, [r0, #0x4]
- mov r1, #0x2c
- ldr r3, [r0, #0x0]
- mul r1, r2
- add r1, r3, r1
- ldrb r1, [r1, #0x1c]
- lsl r2, r1, #0x2
- ldr r1, _020192D0 ; =UNK_020EDB74
- ldr r1, [r1, r2]
- blx r1
- pop {r3, pc}
- .balign 4
-_020192D0: .word UNK_020EDB74
-
- thumb_func_start FUN_020192D4
-FUN_020192D4: ; 0x020192D4
- push {r3-r7, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- ldrb r1, [r5, #0x4]
- mov r0, #0x2c
- ldr r2, [r5, #0x0]
- mul r0, r1
- add r0, r2, r0
- ldr r0, [r0, #0x8]
- str r0, [sp, #0x4]
- cmp r0, #0x0
- beq _02019354
- ldrh r0, [r5, #0xa]
- ldrb r1, [r5, #0x5]
- lsl r0, r0, #0x11
- lsr r3, r0, #0x11
- ldrb r0, [r5, #0x7]
- add r7, r1, r0
- ldrb r0, [r5, #0x6]
- ldrb r1, [r5, #0x8]
- mov r12, r0
- add r0, r0, r1
- mov r1, r12
- mov lr, r0
- cmp r1, r0
- bhs _02019354
-_02019308:
- ldrb r2, [r5, #0x5]
- cmp r2, r7
- bhs _02019348
- mov r0, r12
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x16
- lsl r1, r0, #0x1
- ldr r0, [sp, #0x4]
- add r0, r0, r1
- mov r1, r12
- str r0, [sp, #0x0]
- mov r0, #0x20
- add r6, r1, #0x0
- and r6, r0
-_02019324:
- ldrb r0, [r5, #0x9]
- mov r4, #0x20
- add r1, r3, #0x0
- lsl r0, r0, #0xc
- and r4, r2
- orr r1, r0
- mov r0, #0x1f
- add r4, r6, r4
- and r0, r2
- lsl r4, r4, #0x5
- add r0, r0, r4
- lsl r4, r0, #0x1
- ldr r0, [sp, #0x0]
- add r2, r2, #0x1
- strh r1, [r0, r4]
- add r3, r3, #0x1
- cmp r2, r7
- blo _02019324
-_02019348:
- mov r0, r12
- add r1, r0, #0x1
- mov r0, lr
- mov r12, r1
- cmp r1, r0
- blo _02019308
-_02019354:
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02019358
-FUN_02019358: ; 0x02019358
- push {r4-r7}
- ldrb r3, [r0, #0x4]
- mov r1, #0x2c
- add r2, r3, #0x0
- mul r2, r1
- ldr r1, [r0, #0x0]
- add r1, r1, r2
- ldr r3, [r1, #0x8]
- cmp r3, #0x0
- beq _020193AC
- ldrb r2, [r1, #0x1d]
- ldr r1, _020193B0 ; =UNK_020EDB30
- ldrb r6, [r1, r2]
- ldrb r1, [r0, #0x6]
- add r2, r1, #0x0
- mul r2, r6
- add r2, r3, r2
- ldrb r1, [r0, #0x5]
- mov r3, #0x0
- add r4, r2, r1
- ldrh r1, [r0, #0xa]
- lsl r1, r1, #0x11
- lsr r5, r1, #0x11
- ldrb r1, [r0, #0x8]
- cmp r1, #0x0
- ble _020193AC
- add r1, r3, #0x0
-_0201938E:
- ldrb r7, [r0, #0x7]
- add r2, r1, #0x0
- cmp r7, #0x0
- ble _020193A2
-_02019396:
- strb r5, [r4, r2]
- ldrb r7, [r0, #0x7]
- add r2, r2, #0x1
- add r5, r5, #0x1
- cmp r2, r7
- blt _02019396
-_020193A2:
- ldrb r2, [r0, #0x8]
- add r3, r3, #0x1
- add r4, r4, r6
- cmp r3, r2
- blt _0201938E
-_020193AC:
- pop {r4-r7}
- bx lr
- .balign 4
-_020193B0: .word UNK_020EDB30
-
- thumb_func_start FUN_020193B4
-FUN_020193B4: ; 0x020193B4
- push {r4-r7, lr}
- sub sp, #0xc
- ldrb r2, [r0, #0x4]
- str r0, [sp, #0x0]
- mov r0, #0x2c
- add r1, r2, #0x0
- mul r1, r0
- ldr r0, [sp, #0x0]
- ldr r0, [r0, #0x0]
- add r1, r0, r1
- ldr r0, [r1, #0x8]
- str r0, [sp, #0x4]
- cmp r0, #0x0
- beq _0201943C
- ldrb r1, [r1, #0x1d]
- ldr r0, _02019440 ; =UNK_020EDB30
- ldrb r0, [r0, r1]
- str r0, [sp, #0x8]
- ldr r0, [sp, #0x0]
- ldrb r1, [r0, #0x5]
- ldrb r0, [r0, #0x7]
- add r2, r1, r0
- ldr r0, [sp, #0x0]
- ldrb r0, [r0, #0x6]
- mov r12, r0
- ldr r0, [sp, #0x0]
- ldrb r1, [r0, #0x8]
- mov r0, r12
- add r0, r0, r1
- mov r1, r12
- mov lr, r0
- cmp r1, r0
- bhs _0201943C
- mov r6, #0x0
- mov r7, #0x20
-_020193FA:
- ldr r0, [sp, #0x0]
- ldrb r1, [r0, #0x5]
- cmp r1, r2
- bhs _02019430
- mov r3, r12
- mov r0, #0x1f
- and r3, r0
- ldr r0, [sp, #0x8]
- mul r0, r3
- lsl r3, r0, #0x1
- ldr r0, [sp, #0x4]
- add r5, r0, r3
- mov r3, r12
- mov r0, #0x20
- and r3, r0
-_02019418:
- add r4, r1, #0x0
- and r4, r7
- mov r0, #0x1f
- add r4, r3, r4
- and r0, r1
- lsl r4, r4, #0x5
- add r0, r0, r4
- lsl r0, r0, #0x1
- add r1, r1, #0x1
- strh r6, [r5, r0]
- cmp r1, r2
- blo _02019418
-_02019430:
- mov r0, r12
- add r1, r0, #0x1
- mov r0, lr
- mov r12, r1
- cmp r1, r0
- blo _020193FA
-_0201943C:
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-_02019440: .word UNK_020EDB30
-
- thumb_func_start FUN_02019444
-FUN_02019444: ; 0x02019444
- push {r4-r7}
- ldrb r3, [r0, #0x4]
- mov r1, #0x2c
- add r2, r3, #0x0
- mul r2, r1
- ldr r1, [r0, #0x0]
- add r1, r1, r2
- ldr r3, [r1, #0x8]
- cmp r3, #0x0
- beq _02019492
- ldrb r2, [r1, #0x1d]
- ldr r1, _02019498 ; =UNK_020EDB30
- mov r4, #0x0
- ldrb r6, [r1, r2]
- ldrb r1, [r0, #0x6]
- add r2, r1, #0x0
- mul r2, r6
- ldrb r1, [r0, #0x5]
- add r2, r3, r2
- add r5, r2, r1
- ldrb r1, [r0, #0x8]
- cmp r1, #0x0
- ble _02019492
- add r1, r4, #0x0
- add r2, r4, #0x0
-_02019476:
- ldrb r7, [r0, #0x7]
- add r3, r2, #0x0
- cmp r7, #0x0
- ble _02019488
-_0201947E:
- strb r1, [r5, r3]
- ldrb r7, [r0, #0x7]
- add r3, r3, #0x1
- cmp r3, r7
- blt _0201947E
-_02019488:
- ldrb r3, [r0, #0x8]
- add r4, r4, #0x1
- add r5, r5, r6
- cmp r4, r3
- blt _02019476
-_02019492:
- pop {r4-r7}
- bx lr
- nop
-_02019498: .word UNK_020EDB30
-
thumb_func_start FUN_0201949C
FUN_0201949C: ; 0x0201949C
push {r3-r4, lr}
diff --git a/arm9/global.inc b/arm9/global.inc
index 71693178..12be8f10 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -8552,3 +8552,7 @@
.extern FUN_02017E84
.extern FUN_02017FFC
.extern FUN_02018068
+.extern FUN_02018808
+.extern FUN_02018848
+.extern FUN_02018CA0
+.extern FUN_02018E88
diff --git a/arm9/src/unk_02016B94_c.c b/arm9/src/unk_02016B94_c.c
index 67de1987..376e1271 100644
--- a/arm9/src/unk_02016B94_c.c
+++ b/arm9/src/unk_02016B94_c.c
@@ -358,7 +358,652 @@ THUMB_FUNC void FUN_02016C18(
FUN_020179E0(param0, param1, 3, param2->unk04);
}
#else
-GLOBAL_ASM("asm/nonmatchings/FUN_02016C18.s")
+THUMB_FUNC asm void FUN_02016C18(
+ struct UnkStruct2 *param0, u8 param1, struct UnkStruct1 *param2, u8 param3)
+{
+ // clang-format off
+ push {r3-r7, lr}
+ sub sp, #0x18
+ str r1, [sp, #0x4]
+ str r3, [sp, #0x8]
+ add r4, r2, #0x0
+ str r0, [sp, #0x0]
+ ldrb r0, [r4, #0x10]
+ ldr r1, [sp, #0x8]
+ bl FUN_020177DC
+ add r5, r0, #0x0
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x7
+ bls _02016C36
+ b _0201705A
+_02016C36:
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02016C42:
+ // jump table (using 16-bit offset)
+ // .short _02016C52 - _02016C42 - 2; case 0
+ // .short _02016CAA - _02016C42 - 2; case 1
+ // .short _02016D02 - _02016C42 - 2; case 2
+ // .short _02016DA4 - _02016C42 - 2; case 3
+ // .short _02016E46 - _02016C42 - 2; case 4
+ // .short _02016E9E - _02016C42 - 2; case 5
+ // .short _02016EF6 - _02016C42 - 2; case 6
+ // .short _02016F98 - _02016C42 - 2; case 7
+
+ lsl r6, r1, #0
+ lsl r6, r4, #1
+ lsl r6, r7, #2
+ lsl r0, r4, #5
+ lsl r2, r0, #8
+ lsl r2, r3, #9
+ lsl r2, r6, #10
+ lsl r4, r2, #13
+_02016C52:
+ mov r0, #0x1
+ add r1, r0, #0x0
+ bl GX_EngineAToggleLayers
+ ldrb r3, [r4, #0x14]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x11]
+ ldrb r2, [r4, #0x13]
+ lsl r6, r3, #0xd
+ lsl r0, r0, #0x7
+ lsl r3, r2, #0x2
+ str r0, [sp, #0xc]
+ ldr r2, =0x04000008
+ lsl r7, r1, #0x8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r1, r0
+ ldr r0, [sp, #0xc]
+ orr r0, r1
+ orr r0, r7
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r2, #0x0]
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x3
+ bic r1, r0
+ ldrb r0, [r4, #0x15]
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ beq _02016CA0
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ b _0201705A
+_02016CA0:
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ bic r1, r0
+ strh r1, [r2, #0x0]
+ b _0201705A
+_02016CAA:
+ mov r0, #0x2
+ mov r1, #0x1
+ bl GX_EngineAToggleLayers
+ ldrb r3, [r4, #0x14]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x11]
+ ldrb r2, [r4, #0x13]
+ lsl r6, r3, #0xd
+ lsl r0, r0, #0x7
+ lsl r3, r2, #0x2
+ str r0, [sp, #0x10]
+ ldr r2, =0x0400000A
+ lsl r7, r1, #0x8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r1, r0
+ ldr r0, [sp, #0x10]
+ orr r0, r1
+ orr r0, r7
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r2, #0x0]
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x3
+ bic r1, r0
+ ldrb r0, [r4, #0x15]
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ beq _02016CF8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ b _0201705A
+_02016CF8:
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ bic r1, r0
+ strh r1, [r2, #0x0]
+ b _0201705A
+_02016D02:
+ mov r0, #0x4
+ mov r1, #0x1
+ bl GX_EngineAToggleLayers
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02016D18
+ cmp r0, #0x1
+ beq _02016D3A
+ cmp r0, #0x2
+ beq _02016D5C
+_02016D18:
+ ldrb r1, [r4, #0x12]
+ ldr r7, =0x0400000C
+ ldrb r2, [r4, #0x13]
+ lsl r3, r1, #0x8
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrh r1, [r7, #0x0]
+ lsl r2, r0, #0x7
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016D7C
+_02016D3A:
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x16]
+ lsl r3, r2, #0x2
+ ldr r7, =0x0400000C
+ lsl r2, r1, #0x8
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016D7C
+_02016D5C:
+ ldrb r1, [r4, #0x12]
+ ldr r7, =0x0400000C
+ ldrb r0, [r4, #0x16]
+ lsl r3, r1, #0x8
+ ldrb r2, [r4, #0x13]
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ lsl r2, r2, #0x2
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+_02016D7C:
+ ldr r0, =0x0400000C
+ mov r1, #0x3
+ ldrh r2, [r0, #0x0]
+ bic r2, r1
+ ldrb r1, [r4, #0x15]
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _02016D9A
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ b _0201705A
+_02016D9A:
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ bic r2, r1
+ strh r2, [r0, #0x0]
+ b _0201705A
+_02016DA4:
+ mov r0, #0x8
+ mov r1, #0x1
+ bl GX_EngineAToggleLayers
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02016DBA
+ cmp r0, #0x1
+ beq _02016DDC
+ cmp r0, #0x2
+ beq _02016DFE
+_02016DBA:
+ ldrb r1, [r4, #0x12]
+ ldr r7, =0x0400000E
+ ldrb r2, [r4, #0x13]
+ lsl r3, r1, #0x8
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrh r1, [r7, #0x0]
+ lsl r2, r0, #0x7
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016E1E
+_02016DDC:
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x16]
+ lsl r3, r2, #0x2
+ ldr r7, =0x0400000E
+ lsl r2, r1, #0x8
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016E1E
+_02016DFE:
+ ldrb r1, [r4, #0x12]
+ ldr r7, =0x0400000E
+ ldrb r0, [r4, #0x16]
+ lsl r3, r1, #0x8
+ ldrb r2, [r4, #0x13]
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ lsl r2, r2, #0x2
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+_02016E1E:
+ ldr r0, =0x0400000E
+ mov r1, #0x3
+ ldrh r2, [r0, #0x0]
+ bic r2, r1
+ ldrb r1, [r4, #0x15]
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _02016E3C
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ b _0201705A
+_02016E3C:
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ bic r2, r1
+ strh r2, [r0, #0x0]
+ b _0201705A
+_02016E46:
+ mov r0, #0x1
+ add r1, r0, #0x0
+ bl GX_EngineBToggleLayers
+ ldrb r3, [r4, #0x14]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x11]
+ ldrb r2, [r4, #0x13]
+ lsl r6, r3, #0xd
+ lsl r0, r0, #0x7
+ lsl r3, r2, #0x2
+ str r0, [sp, #0x14]
+ ldr r2, =0x04001008
+ lsl r7, r1, #0x8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r1, r0
+ ldr r0, [sp, #0x14]
+ orr r0, r1
+ orr r0, r7
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r2, #0x0]
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x3
+ bic r1, r0
+ ldrb r0, [r4, #0x15]
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ beq _02016E94
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ b _0201705A
+_02016E94:
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ bic r1, r0
+ strh r1, [r2, #0x0]
+ b _0201705A
+_02016E9E:
+ mov r0, #0x2
+ mov r1, #0x1
+ bl GX_EngineBToggleLayers
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrb r3, [r4, #0x14]
+ lsl r0, r0, #0x7
+ mov r12, r0
+ ldr r2, =0x0400100A
+ lsl r7, r1, #0x8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x43
+ lsl r3, r3, #0xd
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ mov r1, r12
+ orr r0, r1
+ orr r0, r7
+ orr r0, r6
+ orr r0, r3
+ strh r0, [r2, #0x0]
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x3
+ bic r1, r0
+ ldrb r0, [r4, #0x15]
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ beq _02016EEC
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ b _0201705A
+_02016EEC:
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ bic r1, r0
+ strh r1, [r2, #0x0]
+ b _0201705A
+_02016EF6:
+ mov r0, #0x4
+ mov r1, #0x1
+ bl GX_EngineBToggleLayers
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02016F0C
+ cmp r0, #0x1
+ beq _02016F2E
+ cmp r0, #0x2
+ beq _02016F50
+_02016F0C:
+ ldrb r1, [r4, #0x12]
+ ldr r7, =0x0400100C
+ ldrb r2, [r4, #0x13]
+ lsl r3, r1, #0x8
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrh r1, [r7, #0x0]
+ lsl r2, r0, #0x7
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016F70
+_02016F2E:
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x16]
+ lsl r3, r2, #0x2
+ ldr r7, =0x0400100C
+ lsl r2, r1, #0x8
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016F70
+_02016F50:
+ ldrb r1, [r4, #0x12]
+ ldr r7, =0x0400100C
+ ldrb r0, [r4, #0x16]
+ lsl r3, r1, #0x8
+ ldrb r2, [r4, #0x13]
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ lsl r2, r2, #0x2
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+_02016F70:
+ ldr r0, =0x0400100C
+ mov r1, #0x3
+ ldrh r2, [r0, #0x0]
+ bic r2, r1
+ ldrb r1, [r4, #0x15]
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _02016F8E
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ b _0201705A
+_02016F8E:
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ bic r2, r1
+ strh r2, [r0, #0x0]
+ b _0201705A
+_02016F98:
+ mov r0, #0x8
+ mov r1, #0x1
+ bl GX_EngineBToggleLayers
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02016FAE
+ cmp r0, #0x1
+ beq _02016FF2
+ cmp r0, #0x2
+ beq _02017014
+_02016FAE:
+ ldrb r1, [r4, #0x12]
+ ldr r7, =0x0400100E
+ b _02016FD4
+_02016FD4:
+ ldrb r2, [r4, #0x13]
+ lsl r3, r1, #0x8
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrh r1, [r7, #0x0]
+ lsl r2, r0, #0x7
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02017034
+_02016FF2:
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x16]
+ lsl r3, r2, #0x2
+ ldr r7, =0x0400100E
+ lsl r2, r1, #0x8
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02017034
+_02017014:
+ ldrb r1, [r4, #0x12]
+ ldr r7, =0x0400100E
+ ldrb r0, [r4, #0x16]
+ lsl r3, r1, #0x8
+ ldrb r2, [r4, #0x13]
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ lsl r2, r2, #0x2
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+_02017034:
+ ldr r0, =0x0400100E
+ mov r1, #0x3
+ ldrh r2, [r0, #0x0]
+ bic r2, r1
+ ldrb r1, [r4, #0x15]
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _02017052
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ b _0201705A
+_02017052:
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ bic r2, r1
+ strh r2, [r0, #0x0]
+_0201705A:
+ ldr r0, [sp, #0x4]
+ mov r1, #0x2c
+ add r5, r0, #0x0
+ ldr r0, [sp, #0x0]
+ mul r5, r1
+ add r2, r0, r5
+ mov r3, #0x0
+ mov r0, #0x1
+ strh r3, [r2, #0x20]
+ lsl r0, r0, #0xc
+ str r0, [r2, #0x24]
+ str r0, [r2, #0x28]
+ str r3, [r2, #0x2c]
+ str r3, [r2, #0x30]
+ ldr r1, [r4, #0x8]
+ cmp r1, #0x0
+ beq _020170A2
+ ldr r0, [sp, #0x0]
+ ldr r6, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ add r6, #0x8
+ bl AllocFromHeap
+ str r0, [r6, r5]
+ ldr r1, [r6, r5]
+ ldr r2, [r4, #0x8]
+ mov r0, #0x0
+ bl MIi_CpuClear16
+ ldr r0, [sp, #0x0]
+ ldr r2, [r4, #0x8]
+ add r1, r0, r5
+ str r2, [r1, #0xc]
+ ldr r0, [r4, #0xc]
+ str r0, [r1, #0x10]
+ b _020170A8
+_020170A2:
+ str r3, [r2, #0x8]
+ str r3, [r2, #0xc]
+ str r3, [r2, #0x10]
+_020170A8:
+ ldr r0, [sp, #0x0]
+ ldrb r1, [r4, #0x10]
+ add r0, r0, r5
+ strb r1, [r0, #0x1d]
+ ldr r1, [sp, #0x8]
+ strb r1, [r0, #0x1c]
+ ldrb r1, [r4, #0x11]
+ strb r1, [r0, #0x1e]
+ ldr r1, [sp, #0x8]
+ cmp r1, #0x0
+ bne _020170CA
+ ldrb r1, [r4, #0x11]
+ cmp r1, #0x0
+ bne _020170CA
+ mov r1, #0x20
+ strb r1, [r0, #0x1f]
+ b _020170D2
+_020170CA:
+ ldr r0, [sp, #0x0]
+ mov r1, #0x40
+ add r0, r0, r5
+ strb r1, [r0, #0x1f]
+_020170D2:
+ ldr r0, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ ldr r3, [r4, #0x0]
+ mov r2, #0x0
+ bl FUN_020179E0
+ ldr r0, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ ldr r3, [r4, #0x4]
+ mov r2, #0x3
+ bl FUN_020179E0
+ add sp, #0x18
+ pop {r3-r7, pc}
+ // clang-format on
+}
#endif
#ifdef NONMATCHING
@@ -2549,3 +3194,1690 @@ THUMB_FUNC void FUN_020183DC(struct InnerStruct *param0,
}
}
}
+
+extern void FUN_02018590(
+ struct InnerStruct *param0, u16 param1, u8 param2, u8 param3, u8 param4, u8 param5, u8 param6);
+extern void FUN_02018640(
+ struct InnerStruct *param0, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5);
+
+THUMB_FUNC void FUN_02018540(struct UnkStruct2 *param0,
+ u32 param1,
+ u16 param2,
+ u8 param3,
+ u8 param4,
+ u8 param5,
+ u8 param6,
+ u8 param7)
+{
+ if (param0->unk08[param1].unk1c != 1)
+ {
+
+ FUN_02018590(&param0->unk08[param1], param2, param3, param4, param5, param6, param7);
+ }
+ else
+ {
+ FUN_02018640(&param0->unk08[param1], param2, param3, param4, param5, param6);
+ }
+}
+
+THUMB_FUNC void FUN_02018590(
+ struct InnerStruct *param0, u16 param1, u8 param2, u8 param3, u8 param4, u8 param5, u8 param6)
+{
+ void *r4 = param0->unk08;
+
+ if (r4 != 0)
+ {
+
+ u8 st19;
+ u8 st18;
+ FUN_02017850(param0->unk1d, &st19, &st18);
+
+ u8 i;
+ u8 j;
+ for (i = param3; i < param3 + param5; i++)
+ {
+ if (i >= st18)
+ {
+ break;
+ }
+
+ for (j = param2; j < param2 + param4; j++)
+ {
+ if (j >= st19)
+ {
+ break;
+ }
+
+ u16 idx = FUN_02017FFC(j, i, param0->unk1d);
+
+ if (param6 == 0x11)
+ {
+ ((u16 *)r4)[idx] = param1;
+ }
+ else if (param6 == 0x10)
+ {
+ ((u16 *)r4)[idx] = (((u16 *)r4)[idx] & 0xF000) + param1;
+ }
+ else
+ {
+ ((u16 *)r4)[idx] = (param6 << 0xc) + param1;
+ }
+ }
+ }
+ }
+}
+
+THUMB_FUNC void FUN_02018640(
+ struct InnerStruct *param0, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5)
+{
+ void *r4 = param0->unk08;
+
+ if (r4 != 0)
+ {
+
+ u8 st19;
+ u8 st18;
+ FUN_02017850(param0->unk1d, &st19, &st18);
+
+ u8 i;
+ u8 j;
+ for (i = param3; i < param3 + param5; i++)
+ {
+ if (i >= st18)
+ {
+ break;
+ }
+
+ for (j = param2; j < param2 + param4; j++)
+ {
+ if (j >= st19)
+ {
+ break;
+ }
+
+ ((u8 *)r4)[FUN_02017FFC(j, i, param0->unk1d)] = param1;
+ }
+ }
+ }
+}
+
+THUMB_FUNC void FUN_020186B4(
+ struct UnkStruct2 *param0, u32 param1, u8 param2, u8 param3, u8 param4, u8 param5, u8 param6)
+{
+ void *r4 = param0->unk08[param1].unk08;
+
+ if (r4 != NULL)
+ {
+ u8 st11;
+ u8 st10;
+ FUN_02017850(param0->unk08[param1].unk1d, &st11, &st10);
+
+ u8 i;
+ u8 j;
+ for (i = param3; i < param3 + param5; i++)
+ {
+ if (i >= st10)
+ {
+ break;
+ }
+
+ for (j = param2; j < param2 + param4; j++)
+ {
+ if (j >= st11)
+ {
+ break;
+ }
+
+ u16 idx = FUN_02017FFC(j, i, param0->unk08[param1].unk1d);
+ ((u16 *)r4)[idx] = (((u16 *)r4)[idx] & 0xfff) | (param6 << 0xc);
+ }
+ }
+ }
+}
+
+THUMB_FUNC void FUN_02018744(struct UnkStruct2 *param0, u32 param1)
+{
+ if (param0->unk08[param1].unk08 != NULL)
+ {
+ MIi_CpuClear16(0, param0->unk08[param1].unk08, param0->unk08[param1].unk0c);
+ FUN_02017CD0(param0, param1);
+ }
+}
+
+THUMB_FUNC void FUN_02018768(struct UnkStruct2 *param0, u32 param1, u16 param2)
+{
+ if (param0->unk08[param1].unk08 != NULL)
+ {
+ MIi_CpuClear16(param2, param0->unk08[param1].unk08, param0->unk08[param1].unk0c);
+ FUN_02017CD0(param0, param1);
+ }
+}
+
+extern void FUN_0201AC68(struct UnkStruct2 *param0, u32 param1);
+
+THUMB_FUNC void FUN_0201878C(struct UnkStruct2 *param0, u32 param1, u16 param2)
+{
+ if (param0->unk08[param1].unk08 != NULL)
+ {
+ MIi_CpuClear16(param2, param0->unk08[param1].unk08, param0->unk08[param1].unk0c);
+ FUN_0201AC68(param0, param1);
+ }
+}
+
+THUMB_FUNC void *FUN_020187B0(u32 param0)
+{
+ switch (param0)
+ {
+ case 0:
+ return G2_GetBG0CharPtr();
+ case 1:
+ return G2_GetBG1CharPtr();
+ case 2:
+ return G2_GetBG2CharPtr();
+ case 3:
+ return G2_GetBG3CharPtr();
+ case 4:
+ return G2S_GetBG0CharPtr();
+ case 5:
+ return G2S_GetBG1CharPtr();
+ case 6:
+ return G2S_GetBG2CharPtr();
+ case 7:
+ return G2S_GetBG3CharPtr();
+ }
+
+ return NULL;
+}
+
+THUMB_FUNC void FUN_02018808(u8 *param0, u32 param1, u8 (*param2)[2], u8 param3)
+{
+ param3 = param3 << 4;
+ for (int i = 0; i < param1; i++)
+ {
+ param2[i][0] = param0[i] & 0xf;
+ if (param2[i][0] != 0)
+ {
+ param2[i][0] += param3;
+ }
+
+ param2[i][1] = (param0[i] >> 4) & 0xf;
+ if (param2[i][1] != 0)
+ {
+ param2[i][1] += param3;
+ }
+ }
+}
+
+THUMB_FUNC u8 (*FUN_02018848(u8 *param0, u32 param1, u8 param2, u32 heap_id))[2]
+{
+ u8(*ptr)[2] = (u8(*)[2])AllocFromHeap(heap_id, param1 * 2);
+
+ FUN_02018808(param0, param1, ptr, param2);
+
+ return ptr;
+}
+
+THUMB_FUNC void *FUN_0201886C(struct UnkStruct2 *param0, u32 param1)
+{
+ return param0->unk08[param1].unk08;
+}
+
+THUMB_FUNC u16 FUN_02018878(struct UnkStruct2 *param0, u32 param1)
+{
+ return param0->unk08[param1].unk20;
+}
+
+#ifdef NONMATCHING
+THUMB_FUNC u8 FUN_02018884(struct UnkStruct2 *param0, u32 param1)
+{
+
+ // the compiler keeps optimizing the stack away :(
+ u16 st0[16];
+ switch (param1)
+ {
+ case 0:
+ st0[15] = reg_G2_BG0CNT;
+ return (u32)(st0[15] << 0x1e) >> 0x1e;
+ case 1:
+ st0[14] = reg_G2_BG1CNT;
+ return (u32)(st0[14] << 0x1e) >> 0x1e;
+
+ case 2:
+ switch (param0->unk08[param1].unk1c)
+ {
+ default:
+ case 0:
+ st0[13] = reg_G2_BG2CNT;
+ return (u32)(st0[13] << 0x1e) >> 0x1e;
+ case 1:
+ st0[12] = reg_G2_BG2CNT;
+ return (u32)(st0[12] << 0x1e) >> 0x1e;
+ case 2:
+ st0[11] = reg_G2_BG2CNT;
+ return (u32)(st0[11] << 0x1e) >> 0x1e;
+ }
+ break;
+ case 3:
+ switch (param0->unk08[param1].unk1c)
+ {
+ default:
+ case 0:
+ st0[10] = reg_G2_BG3CNT;
+ return (u32)(st0[10] << 0x1e) >> 0x1e;
+ case 1:
+ st0[9] = reg_G2_BG3CNT;
+ return (u32)(st0[9] << 0x1e) >> 0x1e;
+ case 2:
+ st0[8] = reg_G2_BG3CNT;
+ return (u32)(st0[8] << 0x1e) >> 0x1e;
+ }
+ break;
+
+ case 4:
+ st0[7] = reg_G2S_DB_BG0CNT;
+ return (u32)(st0[7] << 0x1e) >> 0x1e;
+ case 5:
+ st0[6] = reg_G2S_DB_BG1CNT;
+ return (u32)(st0[6] << 0x1e) >> 0x1e;
+
+ case 6:
+ switch (param0->unk08[param1].unk1c)
+ {
+ default:
+ case 0:
+ st0[5] = reg_G2S_DB_BG2CNT;
+ return (u32)(st0[5] << 0x1e) >> 0x1e;
+ case 1:
+ st0[4] = reg_G2S_DB_BG2CNT;
+ return (u32)(st0[4] << 0x1e) >> 0x1e;
+ case 2:
+ st0[3] = reg_G2S_DB_BG2CNT;
+ return (u32)(st0[3] << 0x1e) >> 0x1e;
+ }
+ break;
+ case 7:
+ switch (param0->unk08[param1].unk1c)
+ {
+ default:
+ case 0:
+ st0[2] = reg_G2S_DB_BG3CNT;
+ return (u32)(st0[2] << 0x1e) >> 0x1e;
+ case 1:
+ st0[1] = reg_G2S_DB_BG3CNT;
+ return (u32)(st0[1] << 0x1e) >> 0x1e;
+ case 2:
+ st0[0] = reg_G2S_DB_BG3CNT;
+ return (u32)(st0[0] << 0x1e) >> 0x1e;
+ }
+ break;
+ }
+
+ return 0;
+}
+#else
+THUMB_FUNC asm u8 FUN_02018884(struct UnkStruct2 *param0, u32 param1)
+{
+ // clang-format off
+ sub sp, #0x20
+ cmp r1, #0x7
+ bls _0201888C
+ b _02018A38
+_0201888C:
+ add r2, r1, r1
+ add r2, pc
+ ldrh r2, [r2, #0x6]
+ lsl r2, r2, #0x10
+ asr r2, r2, #0x10
+ add pc, r2
+_02018898:
+ // jump table (using 16-bit offset)
+ // .short _020188A8 - _02018898 - 2; case 0
+ // .short _020188BC - _02018898 - 2; case 1
+ // .short _020188D0 - _02018898 - 2; case 2
+ // .short _02018920 - _02018898 - 2; case 3
+ // .short _02018970 - _02018898 - 2; case 4
+ // .short _02018984 - _02018898 - 2; case 5
+ // .short _02018998 - _02018898 - 2; case 6
+ // .short _020189E8 - _02018898 - 2; case 7
+
+ lsl r6, r1, #0
+ lsl r2, r4, #0
+ lsl r6, r6, #0
+ lsl r6, r0, #2
+ lsl r6, r2, #3
+ lsl r2, r5, #3
+ lsl r6, r7, #3
+ lsl r6, r1, #5
+_020188A8:
+ ldr r0, =0x04000008
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x1e]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_020188BC:
+ ldr r0, =0x0400000A
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x1c]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_020188D0:
+ mov r2, #0x2c
+ mul r2, r1
+ add r0, r0, r2
+ ldrb r0, [r0, #0x1c]
+ cmp r0, #0x0
+ beq _020188E4
+ cmp r0, #0x1
+ beq _020188F8
+ cmp r0, #0x2
+ beq _0201890C
+_020188E4:
+ ldr r0, =0x0400000C
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x1a]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_020188F8:
+ ldr r0, =0x0400000C
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x18]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_0201890C:
+ ldr r0, =0x0400000C
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x16]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_02018920:
+ mov r2, #0x2c
+ mul r2, r1
+ add r0, r0, r2
+ ldrb r0, [r0, #0x1c]
+ cmp r0, #0x0
+ beq _02018934
+ cmp r0, #0x1
+ beq _02018948
+ cmp r0, #0x2
+ beq _0201895C
+_02018934:
+ ldr r0, =0x0400000E
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x14]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_02018948:
+ ldr r0, =0x0400000E
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x12]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_0201895C:
+ ldr r0, =0x0400000E
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x10]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_02018970:
+ ldr r0, =0x04001008
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0xe]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_02018984:
+ ldr r0, =0x0400100A
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0xc]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_02018998:
+ mov r2, #0x2c
+ mul r2, r1
+ add r0, r0, r2
+ ldrb r0, [r0, #0x1c]
+ cmp r0, #0x0
+ beq _020189AC
+ cmp r0, #0x1
+ beq _020189C0
+ cmp r0, #0x2
+ beq _020189D4
+_020189AC:
+ ldr r0, =0x0400100C
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0xa]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_020189C0:
+ ldr r0, =0x0400100C
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x8]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_020189D4:
+ ldr r0, =0x0400100C
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x6]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_020189E8:
+ mov r2, #0x2c
+ mul r2, r1
+ add r0, r0, r2
+ ldrb r0, [r0, #0x1c]
+ cmp r0, #0x0
+ beq _020189FC
+ cmp r0, #0x1
+ beq _02018A10
+ cmp r0, #0x2
+ beq _02018A24
+_020189FC:
+ ldr r0, =0x0400100E
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x4]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_02018A10:
+ ldr r0, =0x0400100E
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x2]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_02018A24:
+ ldr r0, =0x0400100E
+ ldrh r1, [r0, #0x0]
+ add r0, sp, #0x0
+ add sp, #0x20
+ strh r1, [r0, #0x0]
+ lsl r0, r1, #0x1e
+ lsr r0, r0, #0x1e
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+_02018A38:
+ mov r0, #0x0
+ add sp, #0x20
+ bx lr
+ // clang-format on
+}
+#endif
+
+#ifdef NONMATCHING
+THUMB_FUNC void FUN_02018A60(u16 *param0,
+ u16 *param1,
+ u16 param2,
+ u16 param3,
+ u16 param4,
+ u16 param5,
+ u16 param6,
+ u16 param7,
+ u16 param8)
+{
+
+ u8 *unk1;
+ u8 *unk2;
+
+ int st50;
+ if (param1[2] - param4 < param6)
+ {
+ st50 = param2 + param1[2] - param4;
+ }
+ else
+ {
+ st50 = param2 + param6;
+ }
+
+ int st4c;
+ if (param1[3] - param5 < param7)
+ {
+ st4c = param3 + param1[3] - param5;
+ }
+ else
+ {
+ st4c = param3 + param7;
+ }
+
+ int st48 = (param0[2] + (param0[2] & 7)) >> 3;
+
+ int st44 = (param1[2] + (param1[2] & 7)) >> 3;
+
+ u32 i, i1;
+ u32 j, j1;
+ if (param8 == 0xFFFF)
+ {
+ i1 = param5;
+ for (i = param3; i < st4c; i++)
+ {
+ j1 = param4;
+ for (j = param2; j < st50; j++)
+ {
+
+ unk1 =
+ *(u32 *)param1 + (j1 >> 1) &
+ 0x3 + ((j1 << 2) & 0x3fe0) + st44 * ((i1 << 2) & 0x3fe0) + ((i1 << 2) & 0x1c);
+ unk2 = *(u32 *)param0 + (j >> 1) &
+ 0x3 + ((j << 2) & 0x3fe0) + st48 * ((i << 2) & 0x3FE0) + ((i << 2) & 0x1c);
+
+ u8 r1 = *unk2;
+
+ u32 r2 = (j1 << 0x1f) >> 0x1d;
+ u32 r7 = ((r1 >> ((j << 0x1f) >> 0x1d)) & 0xf) << r2;
+
+ *unk1 = r7 | (*unk1 & (0xf0 >> r2));
+
+ j1++;
+ }
+ i1++;
+ }
+ }
+ else
+ {
+
+ i1 = param5;
+ for (i = param3; i < st4c; i++)
+ {
+ j1 = param4;
+ for (j = param2; j < st50; j++)
+ {
+
+ unk1 = *(u32 *)param1 + ((j1 >> 1) & 3) + ((j1 << 2) & 0x3fe0) +
+ st44 * ((i1 << 2) & 0x3fe0) + (i1 << 2) &
+ 0x1c;
+ unk2 = *(u32 *)param0 + ((j >> 1) & 3) + ((j << 2) & 0x3fe0) +
+ st48 * ((i << 2) & 0x3fe0) + ((i << 2) & 0x1c);
+ u8 r0 = ((*unk2) >> ((j << 0x1f) >> 0x1d)) & 0xf;
+
+ if (r0 != param8)
+ {
+ u32 r7 = ((j1 << 0x1f) >> 0x1d);
+ *unk1 = (r0 << r7) | (*unk1 & (0xf0 >> r7));
+ }
+
+ j1++;
+ }
+ i1++;
+ }
+ }
+}
+#else
+THUMB_FUNC asm void FUN_02018A60(u16 *param0,
+ u16 *param1,
+ u16 param2,
+ u16 param3,
+ u16 param4,
+ u16 param5,
+ u16 param6,
+ u16 param7,
+ u16 param8)
+{
+ // clang-format off
+ push {r3-r7, lr}
+ sub sp, #0x68
+ str r2, [sp, #0x8]
+ str r3, [sp, #0xc]
+ add r2, sp, #0x70
+ str r0, [sp, #0x0]
+ ldrh r0, [r2, #0x10]
+ str r1, [sp, #0x4]
+ ldrh r2, [r2, #0x18]
+ str r0, [sp, #0x10]
+ add r0, r1, #0x0
+ ldrh r1, [r0, #0x4]
+ ldr r0, [sp, #0x10]
+ sub r3, r1, r0
+ cmp r3, r2
+ bge _02018A88
+ ldr r0, [sp, #0x8]
+ add r0, r0, r3
+ str r0, [sp, #0x50]
+ b _02018A8E
+_02018A88:
+ ldr r0, [sp, #0x8]
+ add r0, r2, r0
+ str r0, [sp, #0x50]
+_02018A8E:
+ ldr r2, [sp, #0x4]
+ add r3, sp, #0x70
+ ldrh r0, [r3, #0x14]
+ ldrh r2, [r2, #0x6]
+ ldrh r3, [r3, #0x1c]
+ sub r4, r2, r0
+ cmp r4, r3
+ bge _02018AA6
+ ldr r2, [sp, #0xc]
+ add r2, r2, r4
+ str r2, [sp, #0x4c]
+ b _02018AAC
+_02018AA6:
+ ldr r2, [sp, #0xc]
+ add r2, r3, r2
+ str r2, [sp, #0x4c]
+_02018AAC:
+ ldr r2, [sp, #0x0]
+ mov r3, #0x7
+ ldrh r4, [r2, #0x4]
+ add r2, r4, #0x0
+ and r2, r3
+ add r2, r4, r2
+ asr r2, r2, #0x3
+ str r2, [sp, #0x48]
+ add r2, r1, #0x0
+ and r2, r3
+ add r1, r1, r2
+ asr r1, r1, #0x3
+ str r1, [sp, #0x44]
+ add r1, sp, #0x70
+ ldrh r1, [r1, #0x20]
+ ldr r2, =0x0000FFFF
+ str r1, [sp, #0x38]
+ cmp r1, r2
+ bne _02018BB4
+ ldr r2, [sp, #0xc]
+ ldr r1, [sp, #0x4c]
+ cmp r2, r1
+ bge _02018ADE
+ cmp r2, r1
+ blt _02018AE0
+_02018ADE:
+ b _02018C92
+_02018AE0:
+ add r1, r2, #0x0
+ lsl r1, r1, #0x2
+ lsl r0, r0, #0x2
+ str r1, [sp, #0x28]
+ str r0, [sp, #0x24]
+_02018AEA:
+ ldr r3, [sp, #0x8]
+ ldr r0, [sp, #0x50]
+ add r1, r3, #0x0
+ ldr r4, [sp, #0x10]
+ cmp r1, r0
+ bge _02018B96
+ cmp r1, r0
+ bge _02018B96
+ add r0, r3, #0x0
+ lsl r5, r0, #0x2
+ add r0, r4, #0x0
+ lsl r6, r0, #0x2
+ ldr r0, =0x00003FE0
+ ldr r1, [sp, #0x28]
+ ldr r2, [sp, #0x48]
+ and r1, r0
+ mul r2, r1
+ str r2, [sp, #0x20]
+ ldr r2, [sp, #0x28]
+ mov r1, #0x1c
+ and r2, r1
+ str r2, [sp, #0x1c]
+ ldr r2, [sp, #0x24]
+ and r0, r2
+ ldr r2, [sp, #0x44]
+ mul r2, r0
+ ldr r0, [sp, #0x24]
+ str r2, [sp, #0x18]
+ and r0, r1
+ str r0, [sp, #0x14]
+_02018B26:
+ ldr r0, [sp, #0x4]
+ asr r2, r4, #0x1
+ mov r1, #0x3
+ ldr r0, [r0, #0x0]
+ and r1, r2
+ add r1, r0, r1
+ ldr r0, =0x00003FE0
+ and r0, r6
+ add r1, r1, r0
+ ldr r0, [sp, #0x18]
+ add r6, r6, #0x4
+ add r0, r1, r0
+ str r0, [sp, #0x64]
+ lsl r0, r4, #0x1f
+ lsr r2, r0, #0x1d
+ ldr r0, [sp, #0x0]
+ asr r1, r3, #0x1
+ ldr r7, [r0, #0x0]
+ mov r0, #0x3
+ and r0, r1
+ ldr r1, =0x00003FE0
+ add r4, r4, #0x1
+ and r1, r5
+ str r1, [sp, #0x54]
+ add r1, r7, r0
+ ldr r0, [sp, #0x54]
+ add r5, r5, #0x4
+ add r1, r0, r1
+ ldr r0, [sp, #0x20]
+ add r1, r0, r1
+ ldr r0, [sp, #0x1c]
+ ldrb r1, [r0, r1]
+ lsl r0, r3, #0x1f
+ lsr r0, r0, #0x1d
+ asr r1, r0
+ mov r0, #0xf
+ and r0, r1
+ add r7, r0, #0x0
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x64]
+ lsl r7, r2
+ ldrb r0, [r0, r1]
+ add r3, r3, #0x1
+ str r0, [sp, #0x58]
+ mov r0, #0xf0
+ asr r0, r2
+ ldr r1, [sp, #0x58]
+ add r2, r7, #0x0
+ and r0, r1
+ orr r2, r0
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x64]
+ strb r2, [r0, r1]
+ ldr r0, [sp, #0x50]
+ cmp r3, r0
+ blt _02018B26
+_02018B96:
+ ldr r0, [sp, #0x28]
+ add r0, r0, #0x4
+ str r0, [sp, #0x28]
+ ldr r0, [sp, #0xc]
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x24]
+ ldr r1, [sp, #0xc]
+ add r0, r0, #0x4
+ str r0, [sp, #0x24]
+ ldr r0, [sp, #0x4c]
+ cmp r1, r0
+ blt _02018AEA
+ add sp, #0x68
+ pop {r3-r7, pc}
+_02018BB4:
+ ldr r2, [sp, #0xc]
+ ldr r1, [sp, #0x4c]
+ cmp r2, r1
+ bge _02018C92
+ cmp r2, r1
+ bge _02018C92
+ add r1, r2, #0x0
+ lsl r1, r1, #0x2
+ lsl r0, r0, #0x2
+ str r1, [sp, #0x40]
+ str r0, [sp, #0x3c]
+_02018BCA:
+ ldr r3, [sp, #0x8]
+ ldr r0, [sp, #0x50]
+ add r1, r3, #0x0
+ ldr r4, [sp, #0x10]
+ cmp r1, r0
+ bge _02018C78
+ cmp r1, r0
+ bge _02018C78
+ add r0, r3, #0x0
+ lsl r1, r0, #0x2
+ add r0, r4, #0x0
+ lsl r2, r0, #0x2
+ ldr r0, =0x00003FE0
+ ldr r5, [sp, #0x40]
+ ldr r6, [sp, #0x48]
+ and r5, r0
+ mul r6, r5
+ str r6, [sp, #0x34]
+ ldr r6, [sp, #0x40]
+ mov r5, #0x1c
+ and r6, r5
+ str r6, [sp, #0x30]
+ ldr r6, [sp, #0x3c]
+ and r0, r6
+ ldr r6, [sp, #0x44]
+ mul r6, r0
+ ldr r0, [sp, #0x3c]
+ str r6, [sp, #0x2c]
+ and r0, r5
+ str r0, [sp, #0x60]
+_02018C06:
+ ldr r0, [sp, #0x4]
+ asr r6, r4, #0x1
+ mov r5, #0x3
+ and r5, r6
+ ldr r0, [r0, #0x0]
+ asr r6, r3, #0x1
+ add r5, r0, r5
+ ldr r0, =0x00003FE0
+ and r0, r2
+ add r5, r5, r0
+ ldr r0, [sp, #0x2c]
+ add r5, r5, r0
+ ldr r0, [sp, #0x0]
+ ldr r7, [r0, #0x0]
+ mov r0, #0x3
+ and r0, r6
+ ldr r6, =0x00003FE0
+ and r6, r1
+ str r6, [sp, #0x5c]
+ add r6, r7, r0
+ ldr r0, [sp, #0x5c]
+ add r6, r0, r6
+ ldr r0, [sp, #0x34]
+ add r6, r0, r6
+ ldr r0, [sp, #0x30]
+ ldrb r6, [r0, r6]
+ lsl r0, r3, #0x1f
+ lsr r0, r0, #0x1d
+ asr r6, r0
+ mov r0, #0xf
+ and r0, r6
+ ldr r6, [sp, #0x38]
+ cmp r0, r6
+ beq _02018C6A
+ lsl r6, r4, #0x1f
+ lsr r7, r6, #0x1d
+ lsl r0, r7
+ mov lr, r0
+ ldr r0, [sp, #0x60]
+ ldrb r0, [r5, r0]
+ mov r12, r0
+ mov r0, #0xf0
+ add r6, r0, #0x0
+ asr r6, r7
+ mov r0, r12
+ and r0, r6
+ mov r6, lr
+ orr r6, r0
+ ldr r0, [sp, #0x60]
+ strb r6, [r5, r0]
+_02018C6A:
+ ldr r0, [sp, #0x50]
+ add r3, r3, #0x1
+ add r1, r1, #0x4
+ add r2, r2, #0x4
+ add r4, r4, #0x1
+ cmp r3, r0
+ blt _02018C06
+_02018C78:
+ ldr r0, [sp, #0x40]
+ add r0, r0, #0x4
+ str r0, [sp, #0x40]
+ ldr r0, [sp, #0xc]
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x3c]
+ ldr r1, [sp, #0xc]
+ add r0, r0, #0x4
+ str r0, [sp, #0x3c]
+ ldr r0, [sp, #0x4c]
+ cmp r1, r0
+ blt _02018BCA
+_02018C92:
+ add sp, #0x68
+ pop {r3-r7, pc}
+ // clang-format on
+}
+#endif
+
+#ifdef NONMATCHING
+THUMB_FUNC void FUN_02018CA0(u16 *param0,
+ u16 *param1,
+ u16 param2,
+ u16 param3,
+ u16 param4,
+ u16 param5,
+ u16 param6,
+ u16 param7,
+ u16 param8)
+{
+ // horrible for loops like the one above
+}
+#else
+THUMB_FUNC asm void FUN_02018CA0(u16 *param0,
+ u16 *param1,
+ u16 param2,
+ u16 param3,
+ u16 param4,
+ u16 param5,
+ u16 param6,
+ u16 param7,
+ u16 param8)
+{
+ // clang-format off
+ push {r3-r7, lr}
+ sub sp, #0x50
+ str r2, [sp, #0x8]
+ str r3, [sp, #0xc]
+ add r2, sp, #0x58
+ str r0, [sp, #0x0]
+ ldrh r0, [r2, #0x10]
+ str r1, [sp, #0x4]
+ ldrh r2, [r2, #0x18]
+ str r0, [sp, #0x10]
+ add r0, r1, #0x0
+ ldrh r1, [r0, #0x4]
+ ldr r0, [sp, #0x10]
+ sub r3, r1, r0
+ cmp r3, r2
+ bge _02018CC6
+ ldr r0, [sp, #0x8]
+ add r0, r0, r3
+ b _02018CCA
+_02018CC6:
+ ldr r0, [sp, #0x8]
+ add r0, r2, r0
+_02018CCA:
+ ldr r2, [sp, #0x4]
+ add r3, sp, #0x58
+ mov r12, r0
+ ldrh r0, [r3, #0x14]
+ ldrh r2, [r2, #0x6]
+ ldrh r3, [r3, #0x1c]
+ sub r4, r2, r0
+ cmp r4, r3
+ bge _02018CE2
+ ldr r2, [sp, #0xc]
+ add r2, r2, r4
+ b _02018CE6
+_02018CE2:
+ ldr r2, [sp, #0xc]
+ add r2, r3, r2
+_02018CE6:
+ mov lr, r2
+ ldr r2, [sp, #0x0]
+ mov r3, #0x7
+ ldrh r4, [r2, #0x4]
+ add r2, r4, #0x0
+ and r2, r3
+ add r2, r4, r2
+ asr r2, r2, #0x3
+ str r2, [sp, #0x4c]
+ add r2, r1, #0x0
+ and r2, r3
+ add r1, r1, r2
+ asr r1, r1, #0x3
+ str r1, [sp, #0x48]
+ add r1, sp, #0x58
+ ldrh r1, [r1, #0x20]
+ ldr r2, =0x0000FFFF
+ str r1, [sp, #0x3c]
+ cmp r1, r2
+ bne _02018DC6
+ ldr r2, [sp, #0xc]
+ mov r1, lr
+ cmp r2, r1
+ bge _02018D1C
+ mov r1, lr
+ cmp r2, r1
+ blt _02018D1E
+_02018D1C:
+ b _02018E7C
+_02018D1E:
+ add r1, r2, #0x0
+ lsl r1, r1, #0x3
+ lsl r0, r0, #0x3
+ str r1, [sp, #0x28]
+ str r0, [sp, #0x24]
+_02018D28:
+ ldr r1, [sp, #0x8]
+ mov r0, r12
+ add r2, r1, #0x0
+ ldr r7, [sp, #0x10]
+ cmp r2, r0
+ bge _02018DA8
+ mov r0, r12
+ cmp r2, r0
+ bge _02018DA8
+ add r0, r1, #0x0
+ lsl r2, r0, #0x3
+ add r0, r7, #0x0
+ lsl r3, r0, #0x3
+ ldr r6, =0x00007FC0
+ ldr r0, [sp, #0x28]
+ ldr r4, [sp, #0x4c]
+ and r0, r6
+ mul r4, r0
+ str r4, [sp, #0x20]
+ ldr r0, [sp, #0x28]
+ mov r5, #0x38
+ and r0, r5
+ str r0, [sp, #0x1c]
+ ldr r0, [sp, #0x24]
+ ldr r4, [sp, #0x48]
+ and r0, r6
+ mul r4, r0
+ ldr r0, [sp, #0x24]
+ str r4, [sp, #0x18]
+ and r0, r5
+ str r0, [sp, #0x14]
+_02018D66:
+ ldr r0, [sp, #0x0]
+ add r5, r1, #0x0
+ mov r4, #0x7
+ and r5, r4
+ ldr r0, [r0, #0x0]
+ ldr r4, =0x00007FC0
+ add r0, r0, r5
+ and r4, r2
+ add r4, r4, r0
+ ldr r0, [sp, #0x20]
+ add r5, r7, #0x0
+ add r4, r0, r4
+ ldr r0, [sp, #0x1c]
+ add r1, r1, #0x1
+ ldrb r6, [r0, r4]
+ ldr r0, [sp, #0x4]
+ mov r4, #0x7
+ and r5, r4
+ ldr r0, [r0, #0x0]
+ ldr r4, =0x00007FC0
+ add r0, r0, r5
+ and r4, r3
+ add r4, r4, r0
+ ldr r0, [sp, #0x18]
+ add r2, #0x8
+ add r4, r0, r4
+ ldr r0, [sp, #0x14]
+ add r3, #0x8
+ strb r6, [r0, r4]
+ mov r0, r12
+ add r7, r7, #0x1
+ cmp r1, r0
+ blt _02018D66
+_02018DA8:
+ ldr r0, [sp, #0x28]
+ add r0, #0x8
+ str r0, [sp, #0x28]
+ ldr r0, [sp, #0xc]
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x24]
+ ldr r1, [sp, #0xc]
+ add r0, #0x8
+ str r0, [sp, #0x24]
+ mov r0, lr
+ cmp r1, r0
+ blt _02018D28
+ add sp, #0x50
+ pop {r3-r7, pc}
+_02018DC6:
+ ldr r2, [sp, #0xc]
+ mov r1, lr
+ cmp r2, r1
+ bge _02018E7C
+ mov r1, lr
+ cmp r2, r1
+ bge _02018E7C
+ add r1, r2, #0x0
+ lsl r1, r1, #0x3
+ lsl r0, r0, #0x3
+ str r1, [sp, #0x44]
+ str r0, [sp, #0x40]
+_02018DDE:
+ ldr r2, [sp, #0x8]
+ mov r0, r12
+ add r1, r2, #0x0
+ ldr r3, [sp, #0x10]
+ cmp r1, r0
+ bge _02018E62
+ mov r0, r12
+ cmp r1, r0
+ bge _02018E62
+ add r0, r2, #0x0
+ lsl r6, r0, #0x3
+ add r0, r3, #0x0
+ lsl r1, r0, #0x3
+ ldr r7, =0x00007FC0
+ ldr r0, [sp, #0x44]
+ ldr r4, [sp, #0x4c]
+ and r0, r7
+ mul r4, r0
+ str r4, [sp, #0x38]
+ ldr r0, [sp, #0x44]
+ mov r5, #0x38
+ and r0, r5
+ str r0, [sp, #0x34]
+ ldr r0, [sp, #0x40]
+ ldr r4, [sp, #0x48]
+ and r0, r7
+ mul r4, r0
+ ldr r0, [sp, #0x40]
+ str r4, [sp, #0x30]
+ and r0, r5
+ str r0, [sp, #0x2c]
+_02018E1C:
+ ldr r0, [sp, #0x4]
+ mov r4, #0x7
+ ldr r0, [r0, #0x0]
+ and r4, r3
+ add r0, r0, r4
+ ldr r4, =0x00007FC0
+ add r5, r2, #0x0
+ and r4, r1
+ add r4, r0, r4
+ ldr r0, [sp, #0x30]
+ add r7, r4, r0
+ ldr r0, [sp, #0x0]
+ mov r4, #0x7
+ and r5, r4
+ ldr r0, [r0, #0x0]
+ ldr r4, =0x00007FC0
+ add r0, r0, r5
+ and r4, r6
+ add r4, r4, r0
+ ldr r0, [sp, #0x38]
+ add r4, r0, r4
+ ldr r0, [sp, #0x34]
+ ldrb r0, [r0, r4]
+ ldr r4, [sp, #0x3c]
+ cmp r0, r4
+ beq _02018E54
+ ldr r4, [sp, #0x2c]
+ strb r0, [r7, r4]
+_02018E54:
+ add r2, r2, #0x1
+ mov r0, r12
+ add r6, #0x8
+ add r1, #0x8
+ add r3, r3, #0x1
+ cmp r2, r0
+ blt _02018E1C
+_02018E62:
+ ldr r0, [sp, #0x44]
+ add r0, #0x8
+ str r0, [sp, #0x44]
+ ldr r0, [sp, #0xc]
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x40]
+ ldr r1, [sp, #0xc]
+ add r0, #0x8
+ str r0, [sp, #0x40]
+ mov r0, lr
+ cmp r1, r0
+ blt _02018DDE
+_02018E7C:
+ add sp, #0x50
+ pop {r3-r7, pc}
+ // clang-format on
+}
+#endif
+
+THUMB_FUNC void FUN_02018E88(u16 *param0, u16 param1, u16 param2, u16 param3, u16 param4, u8 param5)
+{
+
+ int r6 = param1 + param3;
+ if (r6 > param0[2])
+ {
+ r6 = param0[2];
+ }
+
+ int r12 = param2 + param4;
+ if (r12 > param0[3])
+ {
+ r12 = param0[3];
+ }
+
+ int lr = (((param0[2]) + (param0[2] & 7)) >> 3);
+
+ for (int i = param2; i < r12; i++)
+ {
+
+ for (int j = param1; j < r6; j++)
+ {
+
+ u8 *unk = (u8 *)(*(u8 **)param0 + ((j >> 1) & 3) + ((j << 2) & 0x3fe0) +
+ (((i << 2) & 0x3fe0) * lr) + ((i << 2) & 0x1c));
+
+ if ((j & 1) != 0)
+ {
+ *unk &= 0xf;
+ *unk |= (param5 << 4);
+ }
+ else
+ {
+ *unk &= 0xf0;
+ *unk |= param5;
+ }
+ }
+ }
+}
+
+THUMB_FUNC void FUN_02018F4C(u16 *param0, u16 param1, u16 param2, u16 param3, u16 param4, u8 param5)
+{
+
+ int r6 = param1 + param3;
+ if (r6 > param0[2])
+ {
+ r6 = param0[2];
+ }
+
+ int r12 = param2 + param4;
+ if (r12 > param0[3])
+ {
+ r12 = param0[3];
+ }
+
+ int lr = (((param0[2]) + (param0[2] & 7)) >> 3);
+
+ for (int i = param2; i < r12; i++)
+ {
+
+ for (int j = param1; j < r6; j++)
+ {
+
+ u8 *unk = (u8 *)(*(u8 **)param0 + (j & 7) + ((j << 3) & 0x7fc0) +
+ (((i << 3) & 0x7fc0) * lr) + ((i << 3) & 0x38));
+
+ *unk = param5;
+ }
+ }
+}
+
+struct Window
+{
+ struct UnkStruct2 *unk00;
+ u8 unk04;
+ u8 unk05;
+ u8 unk06;
+ u8 unk07;
+ u8 unk08;
+ u8 unk09;
+ u16 unk0a : 15;
+ u16 unk0b : 1;
+ void *unk0c;
+};
+
+extern void FUN_0201901C(struct Window *ptr);
+
+THUMB_FUNC void *FUN_02018FF4(u32 heap_id, s32 size)
+{
+ struct Window *ptr = AllocFromHeap(heap_id, size << 4);
+
+ for (u16 i = 0; i < size; i++)
+ {
+ FUN_0201901C(&ptr[i]);
+ }
+
+ return ptr;
+}
+
+THUMB_FUNC void FUN_0201901C(struct Window *param0)
+{
+ param0->unk00 = 0;
+ param0->unk04 = 0xff;
+ param0->unk05 = 0;
+ param0->unk06 = 0;
+ param0->unk07 = 0;
+ param0->unk08 = 0;
+ param0->unk09 = 0;
+
+ param0->unk0a = 0;
+ param0->unk0c = 0;
+
+ param0->unk0b = 0;
+}
+
+THUMB_FUNC BOOL FUN_02019048(struct Window *param0)
+{
+ if (param0->unk00 == 0 || param0->unk04 == 0xff || param0->unk0c == 0)
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+enum UnkEnum1
+{
+ UnkEnum1_0 = 0,
+ UnkEnum1_1 = 1
+};
+
+THUMB_FUNC void FUN_02019064(struct UnkStruct2 *param0,
+ struct Window *param1,
+ u8 param2,
+ u8 param3,
+ u8 param4,
+ u8 param5,
+ u8 param6,
+ u8 param7,
+ u16 param8)
+{
+ if (param0->unk08[param2].unk08 == NULL)
+ {
+ return;
+ }
+
+ void *ptr = AllocFromHeap(param0->unk00, param5 * param6 * param0->unk08[param2].unk1f);
+
+ if (ptr == NULL)
+ {
+ return;
+ }
+ param1->unk00 = param0;
+ param1->unk04 = param2;
+ param1->unk05 = param3;
+ param1->unk06 = param4;
+ param1->unk07 = param5;
+ param1->unk08 = param6;
+ param1->unk09 = param7;
+
+ param1->unk0a = param8;
+ param1->unk0c = ptr;
+
+ enum UnkEnum1 r2;
+ if (param0->unk08[param2].unk1e == 0)
+ {
+ r2 = UnkEnum1_0;
+ }
+ else
+ {
+ r2 = UnkEnum1_1;
+ }
+
+ param1->unk0b = r2;
+}
+
+THUMB_FUNC void FUN_020190EC(
+ struct UnkStruct2 *param0, struct Window *param1, u8 param2, u8 param3, u16 param4, u8 param5)
+{
+ u32 size = param2 * param3 * 32;
+
+ void *ptr = AllocFromHeap(param0->unk00, size);
+
+ param5 |= (param5 * 16);
+ memset(ptr, param5, size);
+
+ if (ptr != NULL)
+ {
+ param1->unk00 = param0;
+ param1->unk07 = param2;
+ param1->unk08 = param3;
+ param1->unk0a = param4;
+ param1->unk0c = ptr;
+ param1->unk0b = 0;
+ }
+}
+
+struct UnkStruct4
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ u8 unk4;
+ u8 unk5;
+ u16 unk6;
+};
+
+THUMB_FUNC void FUN_02019150(
+ struct UnkStruct2 *param0, struct Window *param1, struct UnkStruct4 *param2)
+{
+
+ FUN_02019064(param0,
+ param1,
+ param2->unk0,
+ param2->unk1,
+ param2->unk2,
+ param2->unk3,
+ param2->unk4,
+ param2->unk5,
+ param2->unk6);
+}
+
+THUMB_FUNC void FUN_02019178(struct Window *param0)
+{
+ FreeToHeap(param0->unk0c);
+
+ param0->unk00 = 0;
+ param0->unk04 = 0xff;
+ param0->unk05 = 0;
+ param0->unk06 = 0;
+ param0->unk07 = 0;
+ param0->unk08 = 0;
+ param0->unk09 = 0;
+ param0->unk0a = 0;
+ param0->unk0c = 0;
+}
+
+THUMB_FUNC void FUN_020191A4(struct Window *param0, int param1)
+{
+ for (u16 i = 0; i < param1; i++)
+ {
+ if (param0[i].unk0c != NULL)
+ {
+ FreeToHeap(param0[i].unk0c);
+ }
+ }
+
+ FreeToHeap(param0);
+}
+
+THUMB_FUNC void CopyWindowToVram(struct Window *param0)
+{
+
+ GF_ASSERT(param0);
+ GF_ASSERT(param0->unk00);
+ GF_ASSERT(param0->unk04 < 8);
+ GF_ASSERT(param0->unk00->unk08[param0->unk04].unk1c < 3);
+
+ UNK_020EDB68[param0->unk00->unk08[param0->unk04].unk1c](param0);
+}
+
+THUMB_FUNC void FUN_02019220(struct Window *param0)
+{
+
+ GF_ASSERT(param0);
+ GF_ASSERT(param0->unk00);
+ GF_ASSERT(param0->unk04 < 8);
+ GF_ASSERT(param0->unk00->unk08[param0->unk04].unk1c < 3);
+
+ UNK_020EDB5C[param0->unk00->unk08[param0->unk04].unk1c](param0);
+}
+
+THUMB_FUNC void FUN_02019270(struct Window *param0)
+{
+ UNK_020EDB38[param0->unk00->unk08[param0->unk04].unk1c](param0);
+}
+
+THUMB_FUNC void FUN_0201928C(struct Window *param0, u8 param1, u8 param2)
+{
+ u8 unk07 = param0->unk07;
+ u8 unk08 = param0->unk08;
+
+ param0->unk07 = param1;
+ param0->unk08 = param2;
+ UNK_020EDB38[param0->unk00->unk08[param0->unk04].unk1c](param0);
+
+ param0->unk07 = unk07;
+ param0->unk08 = unk08;
+}
+
+THUMB_FUNC void FUN_020192B8(struct Window *param0)
+{
+ UNK_020EDB74[param0->unk00->unk08[param0->unk04].unk1c](param0);
+}
+
+THUMB_FUNC void FUN_020192D4(struct Window *param0)
+{
+ u32 i, j;
+ u32 r3;
+ u32 iCount, jCount;
+ u16 *st4 = param0->unk00->unk08[param0->unk04].unk08;
+
+ if (st4 == NULL)
+ {
+ return;
+ }
+
+ r3 = param0->unk0a;
+ jCount = param0->unk05 + param0->unk07;
+ iCount = param0->unk06 + param0->unk08;
+
+ for (i = param0->unk06; i < iCount; i++)
+ {
+ for (j = param0->unk05; j < jCount; j++)
+ {
+ st4[((i & 0x20) * 32) + ((j & 0x20) * 32) + ((i & 0x1f) << 5) + (j & 0x1f)] =
+ (r3 | (param0->unk09 << 12));
+
+ r3++;
+ }
+ }
+}
+
+THUMB_FUNC void FUN_02019358(struct Window *param0)
+{
+ int j, i;
+ u8 *r4;
+
+ int r5;
+ int r6;
+
+ if (param0->unk00->unk08[param0->unk04].unk08 == NULL)
+ {
+ return;
+ }
+
+ r6 = UNK_020EDB30[param0->unk00->unk08[param0->unk04].unk1d];
+
+ r4 = param0->unk00->unk08[param0->unk04].unk08 + param0->unk06 * r6 + param0->unk05;
+ r5 = param0->unk0a;
+
+ for (i = 0; i < param0->unk08; i++)
+ {
+ for (j = 0; j < param0->unk07; j++)
+ {
+ r4[j] = r5;
+ r5++;
+ }
+ r4 += r6;
+ }
+}
+
+THUMB_FUNC void FUN_020193B4(struct Window *param0)
+{
+
+ u32 i, j;
+
+ u32 iCount, jCount;
+ u32 st8;
+
+ u16 *st4;
+
+ if (param0->unk00->unk08[param0->unk04].unk08 == NULL)
+ {
+ return;
+ }
+ st4 = param0->unk00->unk08[param0->unk04].unk08;
+
+ st8 = UNK_020EDB30[param0->unk00->unk08[param0->unk04].unk1d];
+ jCount = param0->unk05 + param0->unk07;
+ iCount = param0->unk06 + param0->unk08;
+
+ for (i = param0->unk06; i < iCount; i++)
+ {
+ for (j = param0->unk05; j < jCount; j++)
+ {
+ st4[((i & 0x20) * 32) + ((j & 0x20) * 32) + ((i & 0x1f) * st8) + (j & 0x1f)] = 0;
+ }
+ }
+}
+
+THUMB_FUNC void FUN_02019444(struct Window *param0)
+{
+
+ int j, i;
+ u8 *r5;
+
+ int r6;
+
+ if (param0->unk00->unk08[param0->unk04].unk08 == NULL)
+ {
+ return;
+ }
+
+
+ r6 = UNK_020EDB30[param0->unk00->unk08[param0->unk04].unk1d];
+ r5 = param0->unk00->unk08[param0->unk04].unk08 + param0->unk06 * r6 + param0->unk05;
+
+ for ( i = 0; i < param0->unk08; i++)
+ {
+ for ( j = 0; j < param0->unk07; j++)
+ {
+ r5[j] = 0;
+ }
+ r5 += r6;
+
+ }
+
+}