diff options
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | arm9/arm9.lcf | 63 | ||||
-rw-r--r-- | arm9/global.inc | 27 | ||||
-rw-r--r-- | arm9/modules/00/asm/module_00_dummy.s | 2 | ||||
-rw-r--r-- | arm9/modules/02/asm/module_02_dummy.s | 2 | ||||
-rw-r--r-- | arm9/modules/03/asm/module_03_dummy.s | 4 | ||||
-rw-r--r-- | arm9/modules/07/asm/module_07.s | 5275 |
7 files changed, 5368 insertions, 9 deletions
@@ -33,4 +33,6 @@ arm*/baserom.* *.lcf.template # Working files -arm9/modules/module_*.{s,sbin,cfg} +arm9/modules/module_*.s +arm9/modules/module_*.sbin +arm9/modules/module_*.cfg diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index b595e5f4..a76bb2c1 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -10,14 +10,14 @@ MEMORY { .ewram (RWX) : ORIGIN=0x023E0000, LENGTH=0 .dtcm (RW) : ORIGIN=0x027E0000, LENGTH=0 .overlay (RX) : ORIGIN=0, LENGTH=0 - MODULE_00 (RWX) : ORIGIN=0, LENGTH=0 + MODULE_00 (RWX) : ORIGIN=0x021D74E0, LENGTH=0 MODULE_01 (RWX) : ORIGIN=0x021D74E0, LENGTH=0 - MODULE_02 (RWX) : ORIGIN=0, LENGTH=0 - MODULE_03 (RWX) : ORIGIN=0, LENGTH=0 + MODULE_02 (RWX) : ORIGIN=0x021D7520, LENGTH=0 + MODULE_03 (RWX) : ORIGIN=0x01FF8700, LENGTH=0 MODULE_04 (RWX) : ORIGIN=0x021D74E0, LENGTH=0 MODULE_05 (RWX) : ORIGIN=0x021D74E0, LENGTH=0 MODULE_06 (RWX) : ORIGIN=0x022396A0, LENGTH=0 - MODULE_07 (RWX) : ORIGIN=0, LENGTH=0 + MODULE_07 (RWX) : ORIGIN=0x02211E60, LENGTH=0 MODULE_08 (RWX) : ORIGIN=0, LENGTH=0 MODULE_09 (RWX) : ORIGIN=0, LENGTH=0 MODULE_10 (RWX) : ORIGIN=0, LENGTH=0 @@ -340,7 +340,17 @@ SECTIONS { OVERLAY_TABLE(SDK_MODULE_86, 86) } > .overlay - OVERLAY_FILE(00, 0x108400, FILE_10C400.o) + .MODULE.00 : AT (0x108400) + { + module_00_dummy.o (.text) + module_00_dummy.o (.sdata) + module_00_dummy.o (.data) + } > MODULE_00 + .MODULE.00.bss : + { + module_00_dummy.o (.sbss) + module_00_dummy.o (.bss) + } >> MODULE_00 .MODULE.01 : AT (0x108600) { @@ -354,13 +364,36 @@ SECTIONS { module_01.o (.bss) } >> MODULE_01 - OVERLAY_FILE(02, 0x108800, FILE_10C800.o) - OVERLAY_FILE(03, 0x108A00, FILE_10CA00.o) + .MODULE.02 : AT (0x108800) + { + module_02_dummy.o (.text) + module_02_dummy.o (.sdata) + module_02_dummy.o (.data) + } > MODULE_02 + .MODULE.02.bss : + { + module_02_dummy.o (.sbss) + module_02_dummy.o (.bss) + } >> MODULE_02 + + .MODULE.03 : AT (0x108A00) + { + module_03_dummy.o (.text) + module_03_dummy.o (.sdata) + module_03_dummy.o (.data) + } > MODULE_03 + .MODULE.03.bss : + { + module_03_dummy.o (.sbss) + module_03_dummy.o (.bss) + } >> MODULE_03 .MODULE.04 : AT (0x108C00) { thumb_04.o (.text) arm_04.o (.text) + thumb_04.o (.sdata) + arm_04.o (.sdata) thumb_04.o (.data) arm_04.o (.data) } > MODULE_04 @@ -375,6 +408,7 @@ SECTIONS { .MODULE.05 : AT (0x141400) { module_05.o (.text) + module_05.o (.sdata) module_05.o (.data) } > MODULE_05 .MODULE.05.bss : @@ -386,6 +420,7 @@ SECTIONS { .MODULE.06 : AT (0x167600) { module_06.o (.text) + module_06.o (.sdata) module_06.o (.data) } > MODULE_06 .MODULE.06.bss : @@ -394,7 +429,19 @@ SECTIONS { module_06.o (.bss) } >> MODULE_06 - OVERLAY_FILE(07, 0x180400, FILE_184400.o) + .MODULE.07 : AT (0x180400) + { + module_07.o (.text) + module_07.o (.sdata) + module_07.o (.data) + } > MODULE_07 + + .MODULE.07.bss : + { + module_07.o (.sbss) + module_07.o (.bss) + } >> MODULE_07 + OVERLAY_FILE(08, 0x183800, FILE_187800.o) OVERLAY_FILE(09, 0x19F000, FILE_1A3000.o) OVERLAY_FILE(10, 0x1A9200, FILE_1AD200.o) diff --git a/arm9/global.inc b/arm9/global.inc index 37a16c3e..73a17530 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -4303,3 +4303,30 @@ .extern MTX_RotY43_
.extern thunk_FUN_020ae84c
.extern VEC_MultAdd
+.extern FUN_0200C334
+.extern FUN_0200C5C0
+.extern FUN_0200CA40
+.extern FUN_02011744
+.extern FUN_020117BC
+.extern FUN_020117E8
+.extern FUN_02011870
+.extern FUN_020118C4
+.extern FUN_020119D0
+.extern FUN_02011A60
+.extern FUN_020190EC
+.extern FUN_0202930C
+.extern FUN_0202934C
+.extern FUN_0202938C
+.extern FUN_020293EC
+.extern FUN_020294B4
+.extern FUN_020313CC
+.extern FUN_0206AE00
+.extern FUN_0206B6D4
+.extern FUN_0206B888
+.extern FUN_0206B890
+.extern FUN_0206B89C
+.extern FUN_020724D4
+.extern FUN_02079A0C
+.extern FUN_02079A54
+.extern FUN_02079A70
+.extern FUN_0207C2D4
diff --git a/arm9/modules/00/asm/module_00_dummy.s b/arm9/modules/00/asm/module_00_dummy.s new file mode 100644 index 00000000..e8a42167 --- /dev/null +++ b/arm9/modules/00/asm/module_00_dummy.s @@ -0,0 +1,2 @@ + .section .data + .space 32 diff --git a/arm9/modules/02/asm/module_02_dummy.s b/arm9/modules/02/asm/module_02_dummy.s new file mode 100644 index 00000000..e8a42167 --- /dev/null +++ b/arm9/modules/02/asm/module_02_dummy.s @@ -0,0 +1,2 @@ + .section .data + .space 32 diff --git a/arm9/modules/03/asm/module_03_dummy.s b/arm9/modules/03/asm/module_03_dummy.s new file mode 100644 index 00000000..70f9f9c2 --- /dev/null +++ b/arm9/modules/03/asm/module_03_dummy.s @@ -0,0 +1,4 @@ + .section .data + .space 32 + .section .bss + .space 32 diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s new file mode 100644 index 00000000..39869410 --- /dev/null +++ b/arm9/modules/07/asm/module_07.s @@ -0,0 +1,5275 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD07_02211E60 +MOD07_02211E60: ; 0x02211E60 + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, _02211E88 ; =FUN_02211E94 + ldr r1, _02211E8C ; =0x00000B84 + ldr r3, [r5, #0x24] + mov r2, #0x64 + bl FUN_020061E8 + bl FUN_0201B6C8 + ldr r2, _02211E8C ; =0x00000B84 + mov r1, #0 + add r4, r0, #0 + bl Call_FillMemWithValue + ldr r0, _02211E90 ; =0x00000B7F + str r5, [r4] + mov r1, #0 + strb r1, [r4, r0] + pop {r3, r4, r5, pc} + .align 2, 0 +_02211E88: .word FUN_02211E94 +_02211E8C: .word 0x00000B84 +_02211E90: .word 0x00000B7F + + thumb_func_start FUN_02211E94 +FUN_02211E94: ; 0x02211E94 + push {r4, r5, r6, lr} + ldr r2, _02211F0C ; =0x00000B7F + add r5, r1, #0 + ldrb r2, [r5, r2] + cmp r2, #0 + beq _02211EAA + cmp r2, #1 + beq _02211EB6 + cmp r2, #2 + beq _02211ED8 + b _02211EE0 +_02211EAA: + add r0, r5, #0 + bl FUN_02211F34 + ldr r1, _02211F0C ; =0x00000B7F + strb r0, [r5, r1] + b _02211EE0 +_02211EB6: + mov r4, #0x2e + lsl r4, r4, #6 + add r6, r4, #0 +_02211EBC: + ldrb r1, [r5, r6] + ldr r2, [r5, #4] + add r0, r5, #0 + lsl r1, r1, #2 + ldr r1, [r2, r1] + blx r1 + cmp r0, #0 + beq _02211ED2 + ldrb r1, [r5, r4] + add r1, r1, #1 + strb r1, [r5, r4] +_02211ED2: + cmp r0, #2 + beq _02211EBC + b _02211EE0 +_02211ED8: + bl FUN_02212B64 + cmp r0, #1 + beq _02211F0A +_02211EE0: + mov r0, #0x2e + lsl r0, r0, #6 + ldrb r0, [r5, r0] + cmp r0, #0 + beq _02211EFA + add r0, r5, #0 + bl FUN_02212D30 + mov r0, #0x65 + lsl r0, r0, #2 + ldr r0, [r5, r0] + bl FUN_0200BC1C +_02211EFA: + ldr r0, [r5] + add r0, #0x28 + ldrb r0, [r0] + cmp r0, #0 + beq _02211F0A + ldr r0, _02211F10 ; =0x04000540 + mov r1, #1 + str r1, [r0] +_02211F0A: + pop {r4, r5, r6, pc} + .align 2, 0 +_02211F0C: .word 0x00000B7F +_02211F10: .word 0x04000540 + + thumb_func_start FUN_02211F14 +FUN_02211F14: ; 0x02211F14 + push {r4, lr} + sub sp, #0x28 + ldr r4, _02211F30 ; =0x02214AD8 + add r3, sp, #0 + mov r2, #5 +_02211F1E: + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + sub r2, r2, #1 + bne _02211F1E + add r0, sp, #0 + bl FUN_0201E66C + add sp, #0x28 + pop {r4, pc} + .align 2, 0 +_02211F30: .word 0x02214AD8 + + thumb_func_start FUN_02211F34 +FUN_02211F34: ; 0x02211F34 + push {r4, lr} + ldr r1, _02211FE0 ; =0x04000050 + add r4, r0, #0 + mov r0, #0 + strh r0, [r1] + add r1, r0, #0 + bl FUN_02015F10 + bl FUN_02015F1C + bl FUN_0201E6D8 + bl FUN_0201E740 + mov r0, #1 + lsl r0, r0, #0x1a + ldr r2, [r0] + ldr r1, _02211FE4 ; =0xFFFFE0FF + ldr r3, _02211FE8 ; =0x04001000 + and r2, r1 + str r2, [r0] + ldr r2, [r3] + add r0, #0x50 + and r1, r2 + str r1, [r3] + mov r1, #0 + strh r1, [r0] + add r3, #0x50 + strh r1, [r3] + bl FUN_02211F14 + ldr r0, [r4] + ldr r0, [r0, #0x24] + bl FUN_02016B94 + str r0, [r4, #0xc] + ldr r0, [r4] + ldr r0, [r0, #0x24] + bl FUN_02002FD0 + str r0, [r4, #8] + ldr r3, [r4] + mov r1, #0 + ldr r3, [r3, #0x24] + mov r2, #0x60 + bl FUN_02003008 + ldr r0, _02211FEC ; =0x00000B82 + mov r3, #0 + strb r3, [r4, r0] + sub r1, r0, #1 + mov r2, #8 + strb r2, [r4, r1] + sub r0, r0, #2 + strb r3, [r4, r0] + ldr r1, [r4] + add r0, r1, #0 + add r0, #0x28 + ldrb r0, [r0] + cmp r0, #0 + beq _02211FB8 + cmp r0, #1 + beq _02211FBE + cmp r0, #2 + beq _02211FC4 + b _02211FDA +_02211FB8: + ldr r0, _02211FF0 ; =0x022149A0 + str r0, [r4, #4] + b _02211FDA +_02211FBE: + ldr r0, _02211FF4 ; =0x022149B4 + str r0, [r4, #4] + b _02211FDA +_02211FC4: + add r1, #0x2a + ldrb r0, [r1] + cmp r0, #3 + bne _02211FD0 + ldr r0, _02211FF8 ; =0x02214B00 + b _02211FD2 +_02211FD0: + ldr r0, _02211FFC ; =0x02214B64 +_02211FD2: + str r0, [r4, #4] + ldr r0, [r4] + bl FUN_02214720 +_02211FDA: + mov r0, #1 + pop {r4, pc} + nop +_02211FE0: .word 0x04000050 +_02211FE4: .word 0xFFFFE0FF +_02211FE8: .word 0x04001000 +_02211FEC: .word 0x00000B82 +_02211FF0: .word 0x022149A0 +_02211FF4: .word 0x022149B4 +_02211FF8: .word 0x02214B00 +_02211FFC: .word 0x02214B64 + + thumb_func_start FUN_02212000 +FUN_02212000: ; 0x02212000 + push {r4, lr} + ldr r1, _02212074 ; =0x00000B82 + add r4, r0, #0 + ldrb r2, [r4, r1] + cmp r2, #0 + beq _02212016 + cmp r2, #1 + beq _02212022 + cmp r2, #2 + beq _0221202E + b _02212068 +_02212016: + bl FUN_02213858 + add r0, r4, #0 + bl FUN_02213924 + b _02212068 +_02212022: + bl FUN_02213D30 + add r0, r4, #0 + bl FUN_02213F28 + b _02212068 +_0221202E: + mov r2, #0 + strb r2, [r4, r1] + mov r2, #0x20 + sub r1, r1, #1 + strb r2, [r4, r1] + bl FUN_022139BC + add r0, r4, #0 + bl FUN_0221424C + add r0, r4, #0 + bl FUN_0221469C + add r0, r4, #0 + bl FUN_02213AEC + bl FUN_02033E74 + ldr r1, [r4] + mov r0, #0 + ldr r1, [r1, #0x24] + bl FUN_02079A70 + ldr r0, _02212078 ; =FUN_02212D68 + add r1, r4, #0 + bl FUN_02015F10 + mov r0, #1 + pop {r4, pc} +_02212068: + ldr r0, _02212074 ; =0x00000B82 + ldrb r1, [r4, r0] + add r1, r1, #1 + strb r1, [r4, r0] + mov r0, #0 + pop {r4, pc} + .align 2, 0 +_02212074: .word 0x00000B82 +_02212078: .word FUN_02212D68 + + thumb_func_start FUN_0221207C +FUN_0221207C: ; 0x0221207C + push {r4, lr} + ldr r1, _022120F4 ; =0x00000B82 + add r4, r0, #0 + ldrb r1, [r4, r1] + cmp r1, #0 + beq _02212092 + cmp r1, #1 + beq _022120A2 + cmp r1, #2 + beq _022120B8 + b _022120E6 +_02212092: + bl FUN_02212D98 + add r0, r4, #0 + bl FUN_02212E90 + bl FUN_02212F2C + b _022120E6 +_022120A2: + bl FUN_022133B4 + add r0, r4, #0 + bl FUN_02212F44 + bl FUN_02033E74 + add r0, r4, #0 + bl FUN_022136B4 + b _022120E6 +_022120B8: + ldr r1, [r4] + mov r0, #0 + ldr r1, [r1, #0x24] + bl FUN_02079A70 + ldr r0, _022120F8 ; =FUN_02212D68 + add r1, r4, #0 + bl FUN_02015F10 + ldr r1, _022120F4 ; =0x00000B82 + mov r0, #0 + strb r0, [r4, r1] + mov r2, #8 + sub r0, r1, #6 + strb r2, [r4, r0] + sub r0, r1, #5 + mov r2, #4 + strb r2, [r4, r0] + mov r0, #0x10 + sub r1, #0xe + str r0, [r4, r1] + mov r0, #1 + pop {r4, pc} +_022120E6: + ldr r0, _022120F4 ; =0x00000B82 + ldrb r1, [r4, r0] + add r1, r1, #1 + strb r1, [r4, r0] + mov r0, #0 + pop {r4, pc} + nop +_022120F4: .word 0x00000B82 +_022120F8: .word FUN_02212D68 + + thumb_func_start FUN_022120FC +FUN_022120FC: ; 0x022120FC + push {r4, lr} + ldr r1, _0221216C ; =0x00000B82 + add r4, r0, #0 + ldrb r1, [r4, r1] + cmp r1, #0 + beq _02212112 + cmp r1, #1 + beq _02212122 + cmp r1, #2 + beq _02212132 + b _02212160 +_02212112: + bl FUN_02212D98 + add r0, r4, #0 + bl FUN_02212E90 + bl FUN_02212F2C + b _02212160 +_02212122: + bl FUN_022133B4 + add r0, r4, #0 + bl FUN_02213484 + bl FUN_02033E74 + b _02212160 +_02212132: + ldr r1, [r4] + mov r0, #0 + ldr r1, [r1, #0x24] + bl FUN_02079A70 + ldr r0, _02212170 ; =FUN_02212D68 + add r1, r4, #0 + bl FUN_02015F10 + ldr r1, _0221216C ; =0x00000B82 + mov r0, #0 + strb r0, [r4, r1] + mov r2, #4 + sub r0, r1, #6 + strb r2, [r4, r0] + sub r0, r1, #5 + mov r2, #2 + strb r2, [r4, r0] + mov r0, #0xc + sub r1, #0xe + str r0, [r4, r1] + mov r0, #1 + pop {r4, pc} +_02212160: + ldr r0, _0221216C ; =0x00000B82 + ldrb r1, [r4, r0] + add r1, r1, #1 + strb r1, [r4, r0] + mov r0, #0 + pop {r4, pc} + .align 2, 0 +_0221216C: .word 0x00000B82 +_02212170: .word FUN_02212D68 + + thumb_func_start FUN_02212174 +FUN_02212174: ; 0x02212174 + push {r4, lr} + add r4, r0, #0 + bl FUN_0200E308 + cmp r0, #0 + bne _02212184 + mov r0, #0 + pop {r4, pc} +_02212184: + ldr r1, _022121A8 ; =0x00000B81 + add r0, r1, #1 + ldrb r2, [r4, r1] + ldrb r0, [r4, r0] + cmp r2, r0 + bne _0221219A + mov r2, #0 + add r0, r1, #1 + strb r2, [r4, r0] + mov r0, #1 + pop {r4, pc} +_0221219A: + add r0, r1, #1 + ldrb r0, [r4, r0] + add r2, r0, #1 + add r0, r1, #1 + strb r2, [r4, r0] + mov r0, #0 + pop {r4, pc} + .align 2, 0 +_022121A8: .word 0x00000B81 + + thumb_func_start FUN_022121AC +FUN_022121AC: ; 0x022121AC + push {r3, r4, r5, lr} + add r4, r0, #0 + ldr r0, [r4, #0xc] + mov r1, #3 + bl FUN_02017B48 + cmp r0, #0x18 + bgt _02212248 + ldr r1, _02212370 ; =0x00000B82 + mov r2, #0 + add r0, r1, #0 + strb r2, [r4, r1] + sub r0, #0xa + strh r2, [r4, r0] + sub r1, #8 + strh r2, [r4, r1] + ldr r0, [r4, #0xc] + mov r1, #3 + mov r3, #0x18 + bl FUN_0201AEE4 + mov r2, #0 + add r3, r2, #0 + ldr r0, [r4, #0xc] + mov r1, #2 + sub r3, #0x18 + bl FUN_0201AEE4 + mov r1, #0 + add r0, r4, #0 + add r2, r1, #0 + add r3, r1, #0 + bl FUN_0221309C + mov r2, #0 + add r0, r4, #0 + mov r1, #1 + add r3, r2, #0 + bl FUN_0221309C + mov r2, #0 + add r0, r4, #0 + mov r1, #2 + add r3, r2, #0 + bl FUN_0221309C + mov r2, #0 + add r0, r4, #0 + mov r1, #3 + add r3, r2, #0 + bl FUN_0221309C + mov r1, #0 + add r0, r4, #0 + add r2, r1, #0 + add r3, r1, #0 + bl FUN_02213354 + mov r2, #0 + add r0, r4, #0 + mov r1, #1 + add r3, r2, #0 + bl FUN_02213354 + mov r2, #0 + add r0, r4, #0 + mov r1, #2 + add r3, r2, #0 + bl FUN_02213354 + mov r2, #0 + add r0, r4, #0 + mov r1, #3 + add r3, r2, #0 + bl FUN_02213354 + mov r0, #1 + pop {r3, r4, r5, pc} +_02212248: + ldr r3, _02212374 ; =0x00000B74 + ldr r0, [r4, #0xc] + ldr r3, [r4, r3] + mov r1, #3 + mov r2, #2 + bl FUN_0201AEE4 + ldr r3, _02212374 ; =0x00000B74 + ldr r0, [r4, #0xc] + ldr r3, [r4, r3] + mov r1, #2 + mov r2, #1 + bl FUN_0201AEE4 + ldr r3, _02212370 ; =0x00000B82 + mov r1, #0 + ldrb r0, [r4, r3] + add r2, r3, #0 + sub r2, #0xe + add r0, r0, #1 + strb r0, [r4, r3] + ldr r5, [r4, r2] + ldrb r2, [r4, r3] + add r3, r5, #0 + add r0, r4, #0 + mul r3, r2 + mov r2, #1 + lsl r2, r2, #8 + sub r2, r3, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + add r3, r1, #0 + bl FUN_0221309C + ldr r2, _02212374 ; =0x00000B74 + mov r1, #1 + ldr r3, [r4, r2] + add r2, #0xe + add r5, r3, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + mov r3, #0 + mul r5, r2 + add r2, r1, #0 + add r2, #0xff + sub r2, r5, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _02212374 ; =0x00000B74 + mov r1, #2 + ldr r3, [r4, r2] + add r2, #0xe + add r5, r3, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + mov r3, #0 + mul r5, r2 + add r2, r1, #0 + add r2, #0xfe + sub r2, r2, r5 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _02212374 ; =0x00000B74 + mov r1, #3 + ldr r3, [r4, r2] + add r2, #0xe + add r5, r3, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + mov r3, #0 + mul r5, r2 + add r2, r1, #0 + add r2, #0xfd + sub r2, r2, r5 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _02212374 ; =0x00000B74 + mov r1, #0 + ldr r3, [r4, r2] + add r2, #0xe + add r5, r3, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + add r3, r1, #0 + mul r5, r2 + mov r2, #1 + lsl r2, r2, #8 + sub r2, r5, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r2, _02212374 ; =0x00000B74 + mov r1, #1 + ldr r3, [r4, r2] + add r2, #0xe + add r5, r3, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + mov r3, #0 + mul r5, r2 + add r2, r1, #0 + add r2, #0xff + sub r2, r5, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r2, _02212374 ; =0x00000B74 + mov r1, #2 + ldr r3, [r4, r2] + add r2, #0xe + add r5, r3, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + mov r3, #0 + mul r5, r2 + add r2, r1, #0 + add r2, #0xfe + sub r2, r2, r5 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r2, _02212374 ; =0x00000B74 + add r0, r4, #0 + ldr r3, [r4, r2] + add r2, #0xe + ldrb r2, [r4, r2] + add r4, r3, #0 + mov r1, #3 + mul r4, r2 + add r2, r1, #0 + add r2, #0xfd + sub r2, r2, r4 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + mov r3, #0 + bl FUN_02213354 + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 +_02212370: .word 0x00000B82 +_02212374: .word 0x00000B74 + + thumb_func_start FUN_02212378 +FUN_02212378: ; 0x02212378 + push {r4, r5, r6, lr} + add r5, r0, #0 + bl FUN_022137A4 + cmp r0, #0 + bne _02212394 + ldr r0, _02212574 ; =0x00000B82 + ldrb r1, [r5, r0] + cmp r1, #0x18 + bls _02212394 + mov r1, #0 + strb r1, [r5, r0] + mov r0, #1 + pop {r4, r5, r6, pc} +_02212394: + ldr r0, _02212574 ; =0x00000B82 + ldrb r0, [r5, r0] + cmp r0, #0 + bne _022123B4 + ldr r0, [r5] + add r0, #0x28 + ldrb r0, [r0] + cmp r0, #1 + bne _022123AE + ldr r0, _02212578 ; =0x00000715 + bl FUN_020054C8 + b _022123B4 +_022123AE: + ldr r0, _0221257C ; =0x00000852 + bl FUN_020054C8 +_022123B4: + ldr r0, _02212574 ; =0x00000B82 + ldrb r1, [r5, r0] + cmp r1, #0x18 + bne _02212450 + ldr r0, [r5, #0xc] + mov r1, #3 + mov r2, #0 + mov r3, #0x18 + bl FUN_0201AEE4 + mov r2, #0 + add r3, r2, #0 + ldr r0, [r5, #0xc] + mov r1, #2 + sub r3, #0x18 + bl FUN_0201AEE4 + mov r1, #3 + ldr r0, [r5, #0xc] + add r2, r1, #0 + mov r3, #0 + bl FUN_0201AEE4 + ldr r0, [r5, #0xc] + mov r1, #2 + mov r2, #3 + mov r3, #0 + bl FUN_0201AEE4 + mov r1, #0 + add r0, r5, #0 + add r2, r1, #0 + add r3, r1, #0 + bl FUN_0221309C + mov r2, #0 + add r0, r5, #0 + mov r1, #1 + add r3, r2, #0 + bl FUN_0221309C + mov r2, #0 + add r0, r5, #0 + mov r1, #2 + add r3, r2, #0 + bl FUN_0221309C + mov r2, #0 + add r0, r5, #0 + mov r1, #3 + add r3, r2, #0 + bl FUN_0221309C + mov r1, #0 + add r0, r5, #0 + add r2, r1, #0 + add r3, r1, #0 + bl FUN_02213354 + mov r2, #0 + add r0, r5, #0 + mov r1, #1 + add r3, r2, #0 + bl FUN_02213354 + mov r2, #0 + add r0, r5, #0 + mov r1, #2 + add r3, r2, #0 + bl FUN_02213354 + mov r2, #0 + add r0, r5, #0 + mov r1, #3 + add r3, r2, #0 + bl FUN_02213354 + b _02212568 +_02212450: + blo _02212454 + b _02212568 +_02212454: + sub r0, r0, #6 + ldrsb r4, [r5, r0] + bl FUN_0201B9EC + add r1, r4, #0 + bl _s32_div_f + lsr r0, r4, #0x1f + add r0, r4, r0 + asr r0, r0, #1 + sub r0, r1, r0 + lsl r0, r0, #0x10 + asr r6, r0, #0x10 + ldr r0, _02212580 ; =0x00000B7D + ldrsb r4, [r5, r0] + bl FUN_0201B9EC + add r1, r4, #0 + bl _s32_div_f + lsr r0, r4, #0x1f + add r0, r4, r0 + asr r0, r0, #1 + sub r0, r1, r0 + lsl r0, r0, #0x10 + asr r4, r0, #0x10 + cmp r6, #0 + bge _02212494 + ldr r0, _02212584 ; =0x00000B78 + ldrsh r0, [r5, r0] + cmp r0, #0 + blt _022124A0 +_02212494: + cmp r6, #0 + ble _022124AA + ldr r0, _02212584 ; =0x00000B78 + ldrsh r0, [r5, r0] + cmp r0, #0 + ble _022124AA +_022124A0: + mov r0, #0 + mvn r0, r0 + mul r0, r6 + lsl r0, r0, #0x10 + asr r6, r0, #0x10 +_022124AA: + cmp r4, #0 + bge _022124B6 + ldr r0, _02212588 ; =0x00000B7A + ldrsh r0, [r5, r0] + cmp r0, #0 + blt _022124C2 +_022124B6: + cmp r4, #0 + ble _022124CC + ldr r0, _02212588 ; =0x00000B7A + ldrsh r0, [r5, r0] + cmp r0, #0 + ble _022124CC +_022124C2: + mov r0, #0 + mvn r0, r0 + mul r0, r4 + lsl r0, r0, #0x10 + asr r4, r0, #0x10 +_022124CC: + add r3, r6, #0 + ldr r0, [r5, #0xc] + mov r1, #3 + mov r2, #0 + add r3, #0x18 + bl FUN_0201AEE4 + add r3, r6, #0 + ldr r0, [r5, #0xc] + mov r1, #2 + mov r2, #0 + sub r3, #0x18 + bl FUN_0201AEE4 + mov r1, #3 + ldr r0, [r5, #0xc] + add r2, r1, #0 + add r3, r4, #0 + bl FUN_0201AEE4 + ldr r0, [r5, #0xc] + mov r1, #2 + mov r2, #3 + add r3, r4, #0 + bl FUN_0201AEE4 + add r0, r5, #0 + mov r1, #0 + add r2, r6, #0 + add r3, r4, #0 + bl FUN_0221309C + add r0, r5, #0 + mov r1, #1 + add r2, r6, #0 + add r3, r4, #0 + bl FUN_0221309C + add r0, r5, #0 + mov r1, #2 + add r2, r6, #0 + add r3, r4, #0 + bl FUN_0221309C + add r0, r5, #0 + mov r1, #3 + add r2, r6, #0 + add r3, r4, #0 + bl FUN_0221309C + add r0, r5, #0 + mov r1, #0 + add r2, r6, #0 + add r3, r4, #0 + bl FUN_02213354 + add r0, r5, #0 + mov r1, #1 + add r2, r6, #0 + add r3, r4, #0 + bl FUN_02213354 + add r0, r5, #0 + mov r1, #2 + add r2, r6, #0 + add r3, r4, #0 + bl FUN_02213354 + add r0, r5, #0 + mov r1, #3 + add r2, r6, #0 + add r3, r4, #0 + bl FUN_02213354 + ldr r0, _02212584 ; =0x00000B78 + strh r6, [r5, r0] + add r0, r0, #2 + strh r4, [r5, r0] +_02212568: + ldr r0, _02212574 ; =0x00000B82 + ldrb r1, [r5, r0] + add r1, r1, #1 + strb r1, [r5, r0] + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 +_02212574: .word 0x00000B82 +_02212578: .word 0x00000715 +_0221257C: .word 0x00000852 +_02212580: .word 0x00000B7D +_02212584: .word 0x00000B78 +_02212588: .word 0x00000B7A + + thumb_func_start FUN_0221258C +FUN_0221258C: ; 0x0221258C + push {r3, r4, lr} + sub sp, #0xc + add r4, r0, #0 + ldr r0, _022126A4 ; =0x00000B82 + ldrb r0, [r4, r0] + cmp r0, #8 + bne _022125B4 + mov r0, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r4] + ldr r3, _022126A8 ; =0x00007FFF + ldr r0, [r0, #0x24] + str r0, [sp, #8] + mov r0, #0 + add r1, r0, #0 + add r2, r0, #0 + bl FUN_0200E1D0 +_022125B4: + ldr r0, _022126A4 ; =0x00000B82 + ldrb r0, [r4, r0] + cmp r0, #8 + blo _022125D0 + bl FUN_0200E308 + cmp r0, #1 + bne _022125D0 + ldr r0, _022126AC ; =0x00000B7F + mov r1, #2 + strb r1, [r4, r0] + add sp, #0xc + mov r0, #1 + pop {r3, r4, pc} +_022125D0: + ldr r0, _022126A4 ; =0x00000B82 + ldrb r0, [r4, r0] + cmp r0, #0 + bne _022125DE + ldr r0, _022126B0 ; =0x00000719 + bl FUN_020054C8 +_022125DE: + ldr r0, [r4, #0xc] + mov r1, #3 + mov r2, #1 + mov r3, #0x10 + bl FUN_0201AEE4 + mov r1, #2 + ldr r0, [r4, #0xc] + add r2, r1, #0 + mov r3, #0x10 + bl FUN_0201AEE4 + ldr r2, _022126A4 ; =0x00000B82 + mov r1, #0 + ldrb r0, [r4, r2] + add r3, r1, #0 + add r0, r0, #1 + strb r0, [r4, r2] + ldrb r2, [r4, r2] + add r0, r4, #0 + lsl r2, r2, #4 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _022126A4 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #1 + mov r3, #0 + lsl r2, r2, #4 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _022126A4 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #2 + mov r3, #0 + lsl r2, r2, #0x14 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _022126A4 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #3 + mov r3, #0 + lsl r2, r2, #0x14 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _022126A4 ; =0x00000B82 + mov r1, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + add r3, r1, #0 + lsl r2, r2, #4 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r2, _022126A4 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #1 + mov r3, #0 + lsl r2, r2, #4 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r2, _022126A4 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #2 + mov r3, #0 + lsl r2, r2, #0x14 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r2, _022126A4 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #3 + mov r3, #0 + lsl r2, r2, #0x14 + asr r2, r2, #0x10 + bl FUN_02213354 + mov r0, #0 + add sp, #0xc + pop {r3, r4, pc} + nop +_022126A4: .word 0x00000B82 +_022126A8: .word 0x00007FFF +_022126AC: .word 0x00000B7F +_022126B0: .word 0x00000719 + + thumb_func_start FUN_022126B4 +FUN_022126B4: ; 0x022126B4 + ldr r1, _022126C0 ; =0x00000B81 + mov r2, #0x10 + strb r2, [r0, r1] + mov r0, #2 + bx lr + nop +_022126C0: .word 0x00000B81 + + thumb_func_start FUN_022126C4 +FUN_022126C4: ; 0x022126C4 + push {r4, lr} + add r4, r0, #0 + bl FUN_02212BD4 + cmp r0, #1 + ldr r0, [r4] + bne _022126E8 + add r0, #0x2a + ldrb r0, [r0] + cmp r0, #1 + ldr r0, _02212700 ; =0x00000B7E + bne _022126E2 + mov r1, #0 + strb r1, [r4, r0] + b _022126FC +_022126E2: + mov r1, #1 + strb r1, [r4, r0] + b _022126FC +_022126E8: + add r0, #0x2a + ldrb r0, [r0] + cmp r0, #1 + ldr r0, _02212700 ; =0x00000B7E + bne _022126F8 + mov r1, #1 + strb r1, [r4, r0] + b _022126FC +_022126F8: + mov r1, #0 + strb r1, [r4, r0] +_022126FC: + mov r0, #2 + pop {r4, pc} + .align 2, 0 +_02212700: .word 0x00000B7E + + thumb_func_start FUN_02212704 +FUN_02212704: ; 0x02212704 + push {r3, lr} + ldr r1, _0221271C ; =0x00000B7E + ldrb r1, [r0, r1] + cmp r1, #0 + bne _02212714 + bl FUN_02212720 + pop {r3, pc} +_02212714: + bl FUN_02212824 + pop {r3, pc} + nop +_0221271C: .word 0x00000B7E + + thumb_func_start FUN_02212720 +FUN_02212720: ; 0x02212720 + push {r3, r4, r5, lr} + ldr r3, _02212814 ; =0x00000B82 + add r4, r0, #0 + ldrb r3, [r4, r3] + mov r1, #2 + ldr r0, [r4, #0xc] + lsl r5, r3, #1 + ldr r3, _02212818 ; =0x02214960 + add r2, r1, #0 + ldrb r3, [r3, r5] + bl FUN_0201AEE4 + ldr r3, _02212814 ; =0x00000B82 + ldr r0, [r4, #0xc] + ldrb r3, [r4, r3] + mov r1, #3 + mov r2, #2 + lsl r5, r3, #1 + ldr r3, _02212818 ; =0x02214960 + ldrb r3, [r3, r5] + bl FUN_0201AEE4 + ldr r2, _02212814 ; =0x00000B82 + mov r1, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + lsl r3, r2, #1 + ldr r2, _0221281C ; =0x02214961 + ldrb r2, [r2, r3] + add r3, r1, #0 + bl FUN_0221309C + ldr r2, _02212814 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #1 + lsl r3, r2, #1 + ldr r2, _0221281C ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + bl FUN_0221309C + ldr r2, _02212814 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #2 + lsl r3, r2, #1 + ldr r2, _0221281C ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + bl FUN_0221309C + ldr r2, _02212814 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #3 + lsl r3, r2, #1 + ldr r2, _0221281C ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + bl FUN_0221309C + ldr r2, _02212814 ; =0x00000B82 + mov r1, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + lsl r3, r2, #1 + ldr r2, _0221281C ; =0x02214961 + ldrb r2, [r2, r3] + add r3, r1, #0 + bl FUN_02213354 + ldr r2, _02212814 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #1 + lsl r3, r2, #1 + ldr r2, _0221281C ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + bl FUN_02213354 + ldr r2, _02212814 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #2 + lsl r3, r2, #1 + ldr r2, _0221281C ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + bl FUN_02213354 + ldr r2, _02212814 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #3 + lsl r3, r2, #1 + ldr r2, _0221281C ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + bl FUN_02213354 + ldr r0, _02212814 ; =0x00000B82 + ldrb r0, [r4, r0] + cmp r0, #0 + bne _022127FA + ldr r0, _02212820 ; =0x00000853 + bl FUN_020054C8 +_022127FA: + ldr r0, _02212814 ; =0x00000B82 + ldrb r1, [r4, r0] + cmp r1, #5 + bne _0221280A + mov r1, #0 + strb r1, [r4, r0] + mov r0, #1 + pop {r3, r4, r5, pc} +_0221280A: + add r1, r1, #1 + strb r1, [r4, r0] + mov r0, #0 + pop {r3, r4, r5, pc} + nop +_02212814: .word 0x00000B82 +_02212818: .word 0x02214960 +_0221281C: .word 0x02214961 +_02212820: .word 0x00000853 + + thumb_func_start FUN_02212824 +FUN_02212824: ; 0x02212824 + push {r3, r4, r5, lr} + ldr r3, _02212948 ; =0x00000B82 + add r4, r0, #0 + ldrb r3, [r4, r3] + ldr r0, [r4, #0xc] + mov r1, #2 + lsl r5, r3, #1 + ldr r3, _0221294C ; =0x02214960 + mov r2, #1 + ldrb r3, [r3, r5] + bl FUN_0201AEE4 + ldr r3, _02212948 ; =0x00000B82 + ldr r0, [r4, #0xc] + ldrb r3, [r4, r3] + mov r1, #3 + mov r2, #1 + lsl r5, r3, #1 + ldr r3, _0221294C ; =0x02214960 + ldrb r3, [r3, r5] + bl FUN_0201AEE4 + ldr r2, _02212948 ; =0x00000B82 + mov r1, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + lsl r3, r2, #1 + ldr r2, _02212950 ; =0x02214961 + ldrb r2, [r2, r3] + add r3, r1, #0 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _02212948 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #1 + lsl r3, r2, #1 + ldr r2, _02212950 ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _02212948 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #2 + lsl r3, r2, #1 + ldr r2, _02212950 ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _02212948 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #3 + lsl r3, r2, #1 + ldr r2, _02212950 ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0221309C + ldr r2, _02212948 ; =0x00000B82 + mov r1, #0 + ldrb r2, [r4, r2] + add r0, r4, #0 + lsl r3, r2, #1 + ldr r2, _02212950 ; =0x02214961 + ldrb r2, [r2, r3] + add r3, r1, #0 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r2, _02212948 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #1 + lsl r3, r2, #1 + ldr r2, _02212950 ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r2, _02212948 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #2 + lsl r3, r2, #1 + ldr r2, _02212950 ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r2, _02212948 ; =0x00000B82 + add r0, r4, #0 + ldrb r2, [r4, r2] + mov r1, #3 + lsl r3, r2, #1 + ldr r2, _02212950 ; =0x02214961 + ldrb r2, [r2, r3] + mov r3, #0 + neg r2, r2 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_02213354 + ldr r0, _02212948 ; =0x00000B82 + ldrb r0, [r4, r0] + cmp r0, #0 + bne _0221292E + ldr r0, _02212954 ; =0x00000853 + bl FUN_020054C8 +_0221292E: + ldr r0, _02212948 ; =0x00000B82 + ldrb r1, [r4, r0] + cmp r1, #5 + bne _0221293E + mov r1, #0 + strb r1, [r4, r0] + mov r0, #1 + pop {r3, r4, r5, pc} +_0221293E: + add r1, r1, #1 + strb r1, [r4, r0] + mov r0, #0 + pop {r3, r4, r5, pc} + nop +_02212948: .word 0x00000B82 +_0221294C: .word 0x02214960 +_02212950: .word 0x02214961 +_02212954: .word 0x00000853 + + thumb_func_start FUN_02212958 +FUN_02212958: ; 0x02212958 + ldr r1, _02212964 ; =0x00000B81 + mov r2, #0x10 + strb r2, [r0, r1] + mov r0, #2 + bx lr + nop +_02212964: .word 0x00000B81 + + thumb_func_start FUN_02212968 +FUN_02212968: ; 0x02212968 + push {r4, r5, r6, lr} + add r4, r0, #0 + ldr r0, _022129F0 ; =0x00000B82 + ldrb r0, [r4, r0] + cmp r0, #0 + bne _022129AC + mov r0, #2 + mov r1, #1 + bl FUN_0201E6E4 + mov r0, #1 + lsl r0, r0, #0x1a + add r3, r0, #0 + ldr r2, [r0] + ldr r1, _022129F4 ; =0xFFFF1FFF + add r3, #0x48 + and r2, r1 + lsr r1, r0, #0xd + orr r1, r2 + str r1, [r0] + ldrh r5, [r3] + mov r2, #0x3f + mov r1, #0x1f + bic r5, r2 + orr r5, r1 + mov r1, #0x20 + orr r1, r5 + strh r1, [r3] + add r0, #0x4a + ldrh r3, [r0] + mov r1, #0x1d + bic r3, r2 + orr r1, r3 + strh r1, [r0] +_022129AC: + ldr r3, _022129F0 ; =0x00000B82 + ldrb r1, [r4, r3] + cmp r1, #0x10 + bne _022129CC + mov r0, #0 + mov r1, #0x20 + strb r0, [r4, r3] + sub r0, r3, #1 + strb r1, [r4, r0] + lsl r2, r1, #0x15 + ldr r1, [r2] + ldr r0, _022129F4 ; =0xFFFF1FFF + and r0, r1 + str r0, [r2] + mov r0, #1 + pop {r4, r5, r6, pc} +_022129CC: + mov r2, #0x5f + sub r2, r2, r1 + add r1, #0x60 + lsl r1, r1, #0x18 + mov r6, #0xff + ldr r0, _022129F8 ; =0x04000040 + lsl r5, r2, #8 + lsl r2, r6, #8 + and r2, r5 + lsr r1, r1, #0x18 + strh r6, [r0] + orr r1, r2 + strh r1, [r0, #4] + ldrb r0, [r4, r3] + add r0, r0, #1 + strb r0, [r4, r3] + mov r0, #0 + pop {r4, r5, r6, pc} + .align 2, 0 +_022129F0: .word 0x00000B82 +_022129F4: .word 0xFFFF1FFF +_022129F8: .word 0x04000040 + + thumb_func_start FUN_022129FC +FUN_022129FC: ; 0x022129FC + push {r4, lr} + add r4, r0, #0 + ldr r0, _02212A34 ; =0x0000071A + bl FUN_020054C8 + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_0200C644 + mov r0, #0x73 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_0200C644 + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_0200C5C0 + ldr r0, _02212A38 ; =0x00000B81 + mov r1, #0x20 + strb r1, [r4, r0] + mov r0, #1 + pop {r4, pc} + .align 2, 0 +_02212A34: .word 0x0000071A +_02212A38: .word 0x00000B81 + + thumb_func_start FUN_02212A3C +FUN_02212A3C: ; 0x02212A3C + push {r4, lr} + add r4, r0, #0 + ldr r0, _02212A5C ; =0x0000071A + bl FUN_020054C8 + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_0200C644 + ldr r0, _02212A60 ; =0x00000B81 + mov r1, #0x40 + strb r1, [r4, r0] + mov r0, #1 + pop {r4, pc} + .align 2, 0 +_02212A5C: .word 0x0000071A +_02212A60: .word 0x00000B81 + + thumb_func_start FUN_02212A64 +FUN_02212A64: ; 0x02212A64 + push {r3, r4, lr} + sub sp, #0xc + add r4, r0, #0 + bl FUN_02212BD4 + cmp r0, #1 + ldr r0, [r4] + bne _02212AA8 + add r0, #0x2a + ldrb r0, [r0] + cmp r0, #1 + bne _02212A92 + mov r3, #0 + str r3, [sp] + mov r0, #4 + str r0, [sp, #4] + str r3, [sp, #8] + ldr r0, [r4, #8] + mov r1, #1 + mov r2, #2 + bl FUN_02003210 + b _02212ADA +_02212A92: + mov r3, #0 + str r3, [sp] + mov r0, #4 + str r0, [sp, #4] + str r3, [sp, #8] + mov r1, #1 + ldr r0, [r4, #8] + add r2, r1, #0 + bl FUN_02003210 + b _02212ADA +_02212AA8: + add r0, #0x2a + ldrb r0, [r0] + cmp r0, #1 + bne _02212AC6 + mov r3, #0 + str r3, [sp] + mov r0, #4 + str r0, [sp, #4] + str r3, [sp, #8] + mov r1, #1 + ldr r0, [r4, #8] + add r2, r1, #0 + bl FUN_02003210 + b _02212ADA +_02212AC6: + mov r3, #0 + str r3, [sp] + mov r0, #4 + str r0, [sp, #4] + str r3, [sp, #8] + ldr r0, [r4, #8] + mov r1, #1 + mov r2, #2 + bl FUN_02003210 +_02212ADA: + ldr r0, _02212AEC ; =0x0000071B + bl FUN_020054C8 + ldr r0, _02212AF0 ; =0x00000B81 + mov r1, #0x40 + strb r1, [r4, r0] + mov r0, #1 + add sp, #0xc + pop {r3, r4, pc} + .align 2, 0 +_02212AEC: .word 0x0000071B +_02212AF0: .word 0x00000B81 + + thumb_func_start FUN_02212AF4 +FUN_02212AF4: ; 0x02212AF4 + push {r4, lr} + add r4, r0, #0 + ldr r0, _02212B40 ; =0x00000B82 + ldrb r0, [r4, r0] + cmp r0, #0 + bne _02212B06 + ldr r0, _02212B44 ; =0x00000719 + bl FUN_020054C8 +_02212B06: + ldr r1, _02212B40 ; =0x00000B82 + ldrb r0, [r4, r1] + cmp r0, #0x10 + bne _02212B1C + mov r0, #0 + strb r0, [r4, r1] + mov r2, #0x40 + sub r0, r1, #1 + strb r2, [r4, r0] + mov r0, #1 + pop {r4, pc} +_02212B1C: + add r0, r0, #1 + strb r0, [r4, r1] + ldrb r2, [r4, r1] + mov r1, #0x10 + add r0, r4, #0 + sub r1, r1, r2 + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + bl FUN_022141CC + ldr r1, _02212B40 ; =0x00000B82 + add r0, r4, #0 + ldrb r1, [r4, r1] + bl FUN_02213B20 + mov r0, #0 + pop {r4, pc} + nop +_02212B40: .word 0x00000B82 +_02212B44: .word 0x00000719 + + thumb_func_start FUN_02212B48 +FUN_02212B48: ; 0x02212B48 + push {r4, lr} + add r4, r0, #0 + ldr r1, [r4] + mov r0, #1 + ldr r1, [r1, #0x24] + bl FUN_02079A70 + ldr r0, _02212B60 ; =0x00000B7F + mov r1, #2 + strb r1, [r4, r0] + mov r0, #1 + pop {r4, pc} + .align 2, 0 +_02212B60: .word 0x00000B7F + + thumb_func_start FUN_02212B64 +FUN_02212B64: ; 0x02212B64 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + bl FUN_0200E308 + cmp r0, #0 + bne _02212B76 + mov r0, #0 + pop {r3, r4, r5, pc} +_02212B76: + mov r0, #0 + add r1, r0, #0 + bl FUN_02015F10 + ldr r0, [r4] + add r0, #0x28 + ldrb r0, [r0] + cmp r0, #0 + beq _02212B9C + add r0, r4, #0 + bl FUN_02212E64 + add r0, r4, #0 + bl FUN_022137DC + add r0, r4, #0 + bl FUN_02213380 + b _02212BA8 +_02212B9C: + add r0, r4, #0 + bl FUN_022138F8 + add r0, r4, #0 + bl FUN_02214274 +_02212BA8: + add r0, r4, #0 + bl FUN_02212CEC + bl FUN_0201C29C + ldr r0, [r4, #8] + mov r1, #0 + bl FUN_02003038 + ldr r0, [r4, #8] + bl FUN_02002FEC + ldr r0, [r4] + mov r1, #1 + add r0, #0x2b + strb r1, [r0] + add r0, r5, #0 + bl FUN_0200621C + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 + + thumb_func_start FUN_02212BD4 +FUN_02212BD4: ; 0x02212BD4 + push {r3, lr} + bl FUN_02031190 + bl FUN_020313CC + cmp r0, #3 + bhi _02212BFE + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02212BEE: ; jump table + .short _02212BF6 - _02212BEE - 2 ; case 0 + .short _02212BFA - _02212BEE - 2 ; case 1 + .short _02212BF6 - _02212BEE - 2 ; case 2 + .short _02212BFA - _02212BEE - 2 ; case 3 +_02212BF6: + mov r0, #1 + pop {r3, pc} +_02212BFA: + mov r0, #0 + pop {r3, pc} +_02212BFE: + mov r0, #0 + pop {r3, pc} + .align 2, 0 + + thumb_func_start FUN_02212C04 +FUN_02212C04: ; 0x02212C04 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x38 + add r5, r0, #0 + str r1, [sp] + ldr r1, [r5] + mov r0, #0x40 + ldr r1, [r1, #0x24] + add r4, r2, #0 + bl FUN_0201C24C + ldr r0, [r5] + ldr r0, [r0, #0x24] + bl FUN_0200BB14 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [r5, r1] + ldr r0, [r5, r1] + bl FUN_0200BB34 + mov r1, #0x65 + lsl r1, r1, #2 + add r2, sp, #0x18 + ldr r3, _02212C9C ; =0x02214AB8 + str r0, [r5, r1] + ldmia r3!, {r0, r1} + add r6, r2, #0 + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldr r3, _02212CA0 ; =0x0221498C + add r2, sp, #4 + ldmia r3!, {r0, r1} + add r7, r2, #0 + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldr r0, [r3] + add r1, r6, #0 + str r0, [r2] + mov r0, #0x65 + lsl r0, r0, #2 + str r4, [sp, #4] + sub r0, r0, #4 + ldr r0, [r5, r0] + add r2, r7, #0 + mov r3, #0x10 + bl FUN_0200BB6C + mov r1, #0x19 + lsl r1, r1, #4 + ldr r0, [r5, r1] + add r1, r1, #4 + ldr r1, [r5, r1] + add r2, r4, #0 + bl FUN_0200BBF0 + mov r1, #0x19 + lsl r1, r1, #4 + ldr r0, [r5, r1] + add r1, r1, #4 + ldr r1, [r5, r1] + ldr r2, [sp] + bl FUN_0200BF60 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E6E4 + add sp, #0x38 + pop {r3, r4, r5, r6, r7, pc} + nop +_02212C9C: .word 0x02214AB8 +_02212CA0: .word 0x0221498C + + thumb_func_start FUN_02212CA4 +FUN_02212CA4: ; 0x02212CA4 + push {lr} + sub sp, #0x34 + add r2, r0, #0 + mov r0, #0 + add r3, sp, #0 + strh r0, [r3] + strh r0, [r3, #2] + strh r0, [r3, #4] + strh r0, [r3, #6] + ldr r3, [r1, #0x14] + str r3, [sp, #8] + ldr r3, [r1, #0x18] + str r3, [sp, #0xc] + mov r3, #1 + str r3, [sp, #0x10] + ldr r3, [r1] + str r3, [sp, #0x14] + ldr r3, [r1, #4] + str r3, [sp, #0x18] + ldr r3, [r1, #8] + str r3, [sp, #0x1c] + ldr r3, [r1, #0xc] + str r3, [sp, #0x20] + ldr r1, [r1, #0x10] + str r1, [sp, #0x2c] + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #0x30] + ldr r0, [r2, r1] + add r1, r1, #4 + ldr r1, [r2, r1] + add r2, sp, #0 + bl FUN_0200C154 + add sp, #0x34 + pop {pc} + + thumb_func_start FUN_02212CEC +FUN_02212CEC: ; 0x02212CEC + push {r3, r4, r5, r6, r7, lr} + add r6, r0, #0 + mov r0, #0x21 + lsl r0, r0, #4 + ldr r0, [r6, r0] + mov r4, #0 + cmp r0, #0 + bls _02212D16 + mov r7, #0x21 + add r5, r6, #0 + lsl r7, r7, #4 +_02212D02: + mov r0, #0x66 + lsl r0, r0, #2 + ldr r0, [r5, r0] + bl FUN_0200C3DC + ldr r0, [r6, r7] + add r4, r4, #1 + add r5, r5, #4 + cmp r4, r0 + blo _02212D02 +_02212D16: + mov r1, #0x19 + lsl r1, r1, #4 + ldr r0, [r6, r1] + add r1, r1, #4 + ldr r1, [r6, r1] + bl FUN_0200C398 + mov r0, #0x19 + lsl r0, r0, #4 + ldr r0, [r6, r0] + bl FUN_0200BD04 + pop {r3, r4, r5, r6, r7, pc} + + thumb_func_start FUN_02212D30 +FUN_02212D30: ; 0x02212D30 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + mov r0, #0x21 + lsl r0, r0, #4 + ldr r0, [r5, r0] + mov r4, #0 + cmp r0, #0 + bls _02212D64 + mov r7, #0x66 + lsl r7, r7, #2 + add r6, r7, #0 + add r6, #0x78 +_02212D48: + lsl r0, r4, #2 + add r0, r5, r0 + ldr r0, [r0, r7] + mov r1, #1 + ldr r0, [r0] + lsl r1, r1, #0xc + bl FUN_020201E4 + add r0, r4, #1 + lsl r0, r0, #0x10 + lsr r4, r0, #0x10 + ldr r0, [r5, r6] + cmp r4, r0 + blo _02212D48 +_02212D64: + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + + thumb_func_start FUN_02212D68 +FUN_02212D68: ; 0x02212D68 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0xc] + bl FUN_0201AB60 + ldr r0, [r4, #8] + bl FUN_0200372C + bl FUN_0201C30C + bl FUN_0200BC30 + ldr r3, _02212D90 ; =0x027E0000 + ldr r1, _02212D94 ; =0x00003FF8 + mov r0, #1 + ldr r2, [r3, r1] + orr r0, r2 + str r0, [r3, r1] + pop {r4, pc} + nop +_02212D90: .word 0x027E0000 +_02212D94: .word 0x00003FF8 + + thumb_func_start FUN_02212D98 +FUN_02212D98: ; 0x02212D98 + push {r4, r5, lr} + sub sp, #0x64 + ldr r5, _02212E54 ; =0x0221496C + add r3, sp, #0x54 + add r4, r0, #0 + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl FUN_02016BBC + ldr r5, _02212E58 ; =0x02214A2C + add r3, sp, #0x38 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #3 + str r0, [r3] + ldr r0, [r4, #0xc] + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + mov r1, #3 + bl FUN_02018744 + mov r1, #3 + add r3, r1, #0 + ldr r0, [r4, #0xc] + mov r2, #0 + add r3, #0xfd + bl FUN_0201AEE4 + ldr r5, _02212E5C ; =0x02214A48 + add r3, sp, #0x1c + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #2 + str r0, [r3] + ldr r0, [r4, #0xc] + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + mov r1, #2 + bl FUN_02018744 + mov r3, #0xff + ldr r0, [r4, #0xc] + mov r1, #2 + mov r2, #0 + mvn r3, r3 + bl FUN_0201AEE4 + ldr r5, _02212E60 ; =0x02214A64 + add r3, sp, #0 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #1 + str r0, [r3] + ldr r0, [r4, #0xc] + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + mov r1, #1 + bl FUN_02018744 + mov r0, #2 + mov r1, #0 + bl FUN_0201E6E4 + add sp, #0x64 + pop {r4, r5, pc} + nop +_02212E54: .word 0x0221496C +_02212E58: .word 0x02214A2C +_02212E5C: .word 0x02214A48 +_02212E60: .word 0x02214A64 + + thumb_func_start FUN_02212E64 +FUN_02212E64: ; 0x02212E64 + push {r4, lr} + add r4, r0, #0 + mov r0, #0x1f + mov r1, #0 + bl FUN_0201E6E4 + ldr r0, [r4, #0xc] + mov r1, #3 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #2 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #1 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + bl FUN_02016A18 + pop {r4, pc} + + thumb_func_start FUN_02212E90 +FUN_02212E90: ; 0x02212E90 + push {r4, lr} + sub sp, #0x10 + mov r1, #0 + str r1, [sp] + str r1, [sp, #4] + add r4, r0, #0 + str r1, [sp, #8] + ldr r0, [r4] + mov r3, #1 + ldr r0, [r0, #0x24] + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x6c + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #4 + ldr r0, [r0, #0x24] + mov r3, #1 + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x6c + bl FUN_020068C8 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #2 + ldr r0, [r0, #0x24] + add r3, r1, #0 + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x6c + bl FUN_020068C8 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, [r4] + mov r1, #3 + ldr r0, [r0, #0x24] + add r3, r1, #0 + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x6c + bl FUN_020068C8 + mov r2, #0 + str r2, [sp] + ldr r0, [r4] + mov r1, #1 + ldr r0, [r0, #0x24] + add r3, r2, #0 + str r0, [sp, #4] + mov r0, #0x6c + bl FUN_02006930 + mov r1, #0 + ldr r0, [r4, #8] + add r2, r1, #0 + mov r3, #0x60 + bl FUN_02003108 + ldr r1, _02212F28 ; =0x000018C6 + mov r0, #1 + bl FUN_02017FE4 + add sp, #0x10 + pop {r4, pc} + .align 2, 0 +_02212F28: .word 0x000018C6 + + thumb_func_start FUN_02212F2C +FUN_02212F2C: ; 0x02212F2C + push {r3, lr} + mov r0, #8 + str r0, [sp] + ldr r0, _02212F40 ; =0x04000050 + mov r1, #3 + mov r2, #0x1c + mov r3, #0x17 + bl G2x_SetBlendAlpha_ + pop {r3, pc} + .align 2, 0 +_02212F40: .word 0x04000050 + + thumb_func_start FUN_02212F44 +FUN_02212F44: ; 0x02212F44 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + ldr r4, _02213014 ; =0x022149E0 + add r3, sp, #0 + add r6, r0, #0 + add r2, r3, #0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + add r1, r2, #0 + add r0, r6, #0 + mov r2, #0x15 + bl FUN_02212C04 + add r0, r6, #0 + bl FUN_0221301C + ldr r4, _02213018 ; =0x02214C64 + mov r7, #0 + add r5, r6, #0 +_02212F72: + add r0, r6, #0 + add r1, r4, #0 + bl FUN_02212CA4 + mov r1, #0x66 + lsl r1, r1, #2 + str r0, [r5, r1] + add r7, r7, #1 + add r4, #0x1c + add r5, r5, #4 + cmp r7, #0xc + blo _02212F72 + mov r1, #0 + mov r2, #0xff + add r0, r6, #0 + mvn r2, r2 + add r3, r1, #0 + bl FUN_0221309C + mov r2, #0xff + add r0, r6, #0 + mov r1, #1 + mvn r2, r2 + mov r3, #0 + bl FUN_0221309C + mov r1, #2 + add r2, r1, #0 + add r0, r6, #0 + add r2, #0xfe + mov r3, #0 + bl FUN_0221309C + mov r1, #3 + add r2, r1, #0 + add r0, r6, #0 + add r2, #0xfd + mov r3, #0 + bl FUN_0221309C + add r0, r6, #0 + bl FUN_022131C0 + mov r0, #0x21 + mov r1, #0xc + lsl r0, r0, #4 + str r1, [r6, r0] + add r0, r6, #0 + bl FUN_022132CC + mov r1, #0 + mov r2, #0xff + add r0, r6, #0 + mvn r2, r2 + add r3, r1, #0 + bl FUN_02213354 + mov r2, #0xff + add r0, r6, #0 + mov r1, #1 + mvn r2, r2 + mov r3, #0 + bl FUN_02213354 + mov r1, #2 + add r2, r1, #0 + add r0, r6, #0 + add r2, #0xfe + mov r3, #0 + bl FUN_02213354 + mov r1, #3 + add r2, r1, #0 + add r0, r6, #0 + add r2, #0xfd + mov r3, #0 + bl FUN_02213354 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + nop +_02213014: .word 0x022149E0 +_02213018: .word 0x02214C64 + + thumb_func_start FUN_0221301C +FUN_0221301C: ; 0x0221301C + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #1 + str r0, [sp] + str r0, [sp, #4] + ldr r0, _02213098 ; =0x0000B807 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #8] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x1b + mov r3, #0x90 + bl FUN_0200C00C + mov r0, #0 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + ldr r0, _02213098 ; =0x0000B807 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #0xc] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x6c + mov r3, #8 + bl FUN_0200C06C + mov r0, #1 + str r0, [sp] + ldr r0, _02213098 ; =0x0000B807 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x1b + mov r3, #0x8f + bl FUN_0200C124 + mov r0, #1 + str r0, [sp] + ldr r0, _02213098 ; =0x0000B807 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x1b + mov r3, #0x91 + bl FUN_0200C13C + add sp, #0x10 + pop {r4, pc} + .align 2, 0 +_02213098: .word 0x0000B807 + + thumb_func_start FUN_0221309C +FUN_0221309C: ; 0x0221309C + push {r4, r5, r6, r7, lr} + sub sp, #0xc + ldr r4, _022130F8 ; =0x02214950 + str r2, [sp] + ldrb r5, [r4] + str r3, [sp, #4] + add r3, sp, #8 + strb r5, [r3] + ldrb r5, [r4, #1] + add r2, sp, #8 + mov r7, #0 + strb r5, [r3, #1] + ldrb r5, [r4, #2] + ldrb r4, [r4, #3] + add r6, r0, r1 + strb r5, [r3, #2] + strb r4, [r3, #3] + ldrb r2, [r2, r1] + add r4, r7, #0 + lsl r2, r2, #2 + add r5, r0, r2 +_022130C6: + ldr r1, _022130FC ; =0x00000B64 + mov r0, #0x66 + ldrb r1, [r6, r1] + lsl r0, r0, #2 + ldr r0, [r5, r0] + add r2, r1, r4 + ldr r1, [sp] + add r1, r1, r2 + ldr r2, _02213100 ; =0x00000B68 + lsl r1, r1, #0x10 + ldrb r3, [r6, r2] + ldr r2, [sp, #4] + asr r1, r1, #0x10 + add r2, r2, r3 + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + bl FUN_0200C714 + add r7, r7, #1 + add r4, #0x13 + add r5, r5, #4 + cmp r7, #3 + blo _022130C6 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_022130F8: .word 0x02214950 +_022130FC: .word 0x00000B64 +_02213100: .word 0x00000B68 + + thumb_func_start FUN_02213104 +FUN_02213104: ; 0x02213104 + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r6, r0, #0 + add r0, r1, #0 + str r1, [sp] + str r2, [sp, #4] + add r7, r3, #0 + bl FUN_0206B9AC + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + mov r5, #0 + ldr r0, [sp, #4] + add r4, r5, #0 + cmp r0, #0 + ble _022131BC + lsl r0, r7, #2 + add r6, r6, r0 +_0221312A: + lsl r0, r4, #2 + add r1, r6, r0 + mov r0, #0x66 + lsl r0, r0, #2 + ldr r0, [r1, r0] + mov r1, #0 + bl FUN_0200C5C0 + ldr r0, [sp, #8] + cmp r0, r4 + bls _022131B0 + ldr r0, [sp] + add r1, r4, #0 + bl FUN_0206B9B0 + mov r1, #5 + mov r2, #0 + add r7, r0, #0 + bl FUN_020671BC + cmp r0, #0 + beq _022131B0 + add r0, r7, #0 + mov r1, #0x4c + mov r2, #0 + bl FUN_020671BC + cmp r0, #0 + bne _022131B0 + add r0, r7, #0 + bl FUN_0207C2D4 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + cmp r0, #6 + bne _02213184 + lsl r0, r5, #2 + add r1, r6, r0 + mov r0, #0x66 + lsl r0, r0, #2 + ldr r0, [r1, r0] + mov r1, #3 + bl FUN_0200C5C0 + b _022131AA +_02213184: + cmp r0, #7 + beq _0221319A + lsl r0, r5, #2 + add r1, r6, r0 + mov r0, #0x66 + lsl r0, r0, #2 + ldr r0, [r1, r0] + mov r1, #2 + bl FUN_0200C5C0 + b _022131AA +_0221319A: + lsl r0, r5, #2 + add r1, r6, r0 + mov r0, #0x66 + lsl r0, r0, #2 + ldr r0, [r1, r0] + mov r1, #1 + bl FUN_0200C5C0 +_022131AA: + add r0, r5, #1 + lsl r0, r0, #0x18 + lsr r5, r0, #0x18 +_022131B0: + add r0, r4, #1 + lsl r0, r0, #0x18 + lsr r4, r0, #0x18 + ldr r0, [sp, #4] + cmp r4, r0 + blt _0221312A +_022131BC: + add sp, #0xc + pop {r4, r5, r6, r7, pc} + + thumb_func_start FUN_022131C0 +FUN_022131C0: ; 0x022131C0 + push {r4, lr} + add r4, r0, #0 + ldr r2, [r4] + add r1, r2, #0 + add r1, #0x29 + ldrb r1, [r1] + cmp r1, #0 + ldr r1, [r2, #4] + bne _022131EA + mov r2, #6 + mov r3, #0 + bl FUN_02213104 + ldr r1, [r4] + mov r2, #6 + ldr r1, [r1, #8] + add r0, r4, #0 + add r3, r2, #0 + bl FUN_02213104 + pop {r4, pc} +_022131EA: + mov r2, #3 + mov r3, #0 + bl FUN_02213104 + ldr r1, [r4] + mov r2, #3 + ldr r1, [r1, #0xc] + add r0, r4, #0 + add r3, r2, #0 + bl FUN_02213104 + ldr r1, [r4] + add r0, r4, #0 + ldr r1, [r1, #8] + mov r2, #3 + mov r3, #6 + bl FUN_02213104 + ldr r1, [r4] + add r0, r4, #0 + ldr r1, [r1, #0x10] + mov r2, #3 + mov r3, #9 + bl FUN_02213104 + pop {r4, pc} + .align 2, 0 + + thumb_func_start FUN_02213220 +FUN_02213220: ; 0x02213220 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x40 + add r4, r0, #0 + mov r0, #0 + add r5, r4, #0 + str r0, [sp] + str r0, [sp, #4] + add r7, r2, #0 + add r5, #0x10 + add r6, r1, #0 + ldr r0, [r4, #0xc] + add r1, r5, #0 + mov r2, #8 + mov r3, #2 + bl FUN_020190EC + mov r1, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + mov r0, #0xc1 + lsl r0, r0, #0xa + str r0, [sp, #8] + add r0, r5, #0 + add r2, r7, #0 + add r3, r1, #0 + str r1, [sp, #0xc] + bl FUN_0201BDE0 + ldr r0, _022132C0 ; =0x00000B44 + ldr r0, [r4, r0] + str r0, [sp, #0x10] + mov r0, #0x65 + str r5, [sp, #0x14] + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl FUN_0200CA40 + str r0, [sp, #0x18] + mov r0, #0x65 + lsl r0, r0, #2 + ldr r0, [r4, r0] + ldr r1, _022132C4 ; =0x0000B807 + bl FUN_0200C334 + mov r1, #0x3e + lsl r2, r6, #4 + lsl r1, r1, #4 + sub r1, r1, r2 + lsl r1, r1, #5 + str r0, [sp, #0x1c] + mov r0, #0 + str r1, [sp, #0x24] + mov r1, #2 + str r0, [sp, #0x20] + str r0, [sp, #0x28] + str r0, [sp, #0x2c] + str r0, [sp, #0x34] + mov r0, #1 + str r1, [sp, #0x30] + str r0, [sp, #0x38] + ldr r0, [r4] + lsl r6, r6, #2 + ldr r0, [r0, #0x24] + str r0, [sp, #0x3c] + ldr r0, _022132C8 ; =0x00000B48 + add r4, r4, r0 + add r0, sp, #0x10 + bl FUN_020117E8 + str r0, [r4, r6] + ldr r0, [r4, r6] + mov r1, #0 + bl FUN_02011A60 + add r0, r5, #0 + bl FUN_02019178 + add sp, #0x40 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022132C0: .word 0x00000B44 +_022132C4: .word 0x0000B807 +_022132C8: .word 0x00000B48 + + thumb_func_start FUN_022132CC +FUN_022132CC: ; 0x022132CC + push {r4, lr} + add r4, r0, #0 + ldr r1, [r4] + mov r0, #8 + ldr r1, [r1, #0x24] + bl FUN_02011744 + ldr r1, _02213348 ; =0x00000B44 + str r0, [r4, r1] + ldr r2, [r4] + add r0, r4, #0 + ldr r2, [r2, #0x14] + mov r1, #0 + bl FUN_02213220 + ldr r2, [r4] + add r0, r4, #0 + ldr r2, [r2, #0x18] + mov r1, #2 + bl FUN_02213220 + ldr r2, [r4] + add r0, r2, #0 + add r0, #0x29 + ldrb r0, [r0] + cmp r0, #1 + bne _0221331A + ldr r2, [r2, #0x1c] + add r0, r4, #0 + mov r1, #1 + bl FUN_02213220 + ldr r2, [r4] + add r0, r4, #0 + ldr r2, [r2, #0x20] + mov r1, #3 + bl FUN_02213220 + pop {r4, pc} +_0221331A: + ldr r2, [r2, #0x14] + add r0, r4, #0 + mov r1, #1 + bl FUN_02213220 + ldr r2, [r4] + add r0, r4, #0 + ldr r2, [r2, #0x18] + mov r1, #3 + bl FUN_02213220 + ldr r0, _0221334C ; =0x00000B4C + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020119D0 + ldr r0, _02213350 ; =0x00000B54 + mov r1, #0 + ldr r0, [r4, r0] + bl FUN_020119D0 + pop {r4, pc} + nop +_02213348: .word 0x00000B44 +_0221334C: .word 0x00000B4C +_02213350: .word 0x00000B54 + + thumb_func_start FUN_02213354 +FUN_02213354: ; 0x02213354 + push {r3, r4, r5, lr} + add r5, r1, #0 + add r1, r2, #0 + add r2, r3, #0 + add r4, r0, #0 + lsl r0, r5, #2 + add r0, r4, r0 + ldr r3, _0221337C ; =0x00000B48 + add r4, r4, r5 + add r5, r3, #0 + ldr r0, [r0, r3] + add r5, #0x24 + add r3, #0x28 + ldrb r5, [r4, r5] + ldrb r3, [r4, r3] + add r1, r1, r5 + add r2, r2, r3 + bl FUN_020118C4 + pop {r3, r4, r5, pc} + .align 2, 0 +_0221337C: .word 0x00000B48 + + thumb_func_start FUN_02213380 +FUN_02213380: ; 0x02213380 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + ldr r0, [r7] + add r0, #0x28 + ldrb r0, [r0] + cmp r0, #0 + beq _022133AA + ldr r6, _022133AC ; =0x00000B48 + mov r4, #0 + add r5, r7, #0 +_02213394: + ldr r0, [r5, r6] + bl FUN_02011870 + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #4 + blo _02213394 + ldr r0, _022133B0 ; =0x00000B44 + ldr r0, [r7, r0] + bl FUN_020117BC +_022133AA: + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022133AC: .word 0x00000B48 +_022133B0: .word 0x00000B44 + + thumb_func_start FUN_022133B4 +FUN_022133B4: ; 0x022133B4 + push {r3, r4} + ldr r1, [r0] + add r1, #0x29 + ldrb r1, [r1] + cmp r1, #1 + ldr r1, _02213480 ; =0x00000B64 + bne _02213432 + mov r2, #0x18 + strb r2, [r0, r1] + mov r3, #0x8c + add r2, r1, #4 + strb r3, [r0, r2] + mov r3, #0x55 + add r2, r1, #1 + strb r3, [r0, r2] + mov r3, #0xa4 + add r2, r1, #5 + strb r3, [r0, r2] + mov r3, #0x84 + add r2, r1, #2 + strb r3, [r0, r2] + mov r3, #0x2c + add r2, r1, #6 + strb r3, [r0, r2] + mov r3, #0xc1 + add r2, r1, #3 + strb r3, [r0, r2] + mov r3, #0x44 + add r2, r1, #7 + strb r3, [r0, r2] + add r2, r1, #0 + mov r3, #0xf + add r2, #8 + strb r3, [r0, r2] + add r2, r1, #0 + mov r3, #0x72 + add r2, #0xc + strb r3, [r0, r2] + add r2, r1, #0 + mov r3, #0x4c + add r2, #9 + strb r3, [r0, r2] + add r2, r1, #0 + mov r3, #0x8a + add r2, #0xd + strb r3, [r0, r2] + add r2, r1, #0 + mov r3, #0x7b + add r2, #0xa + strb r3, [r0, r2] + add r2, r1, #0 + mov r3, #0x12 + add r2, #0xe + strb r3, [r0, r2] + add r2, r1, #0 + mov r3, #0xb8 + add r2, #0xb + strb r3, [r0, r2] + mov r2, #0x2a + add r1, #0xf + strb r2, [r0, r1] + pop {r3, r4} + bx lr +_02213432: + mov r2, #0x18 + strb r2, [r0, r1] + mov r4, #0xa0 + add r2, r1, #4 + strb r4, [r0, r2] + mov r3, #0x51 + add r2, r1, #1 + strb r3, [r0, r2] + add r2, r1, #5 + strb r4, [r0, r2] + mov r3, #0x88 + add r2, r1, #2 + strb r3, [r0, r2] + mov r4, #0x30 + add r2, r1, #6 + strb r4, [r0, r2] + mov r3, #0xc1 + add r2, r1, #3 + strb r3, [r0, r2] + add r2, r1, #7 + strb r4, [r0, r2] + add r2, r1, #0 + mov r3, #0xf + add r2, #8 + strb r3, [r0, r2] + add r2, r1, #0 + mov r3, #0x86 + add r2, #0xc + strb r3, [r0, r2] + add r2, r1, #0 + mov r3, #0x80 + add r2, #0xa + strb r3, [r0, r2] + mov r2, #0x16 + add r1, #0xe + strb r2, [r0, r1] + pop {r3, r4} + bx lr + nop +_02213480: .word 0x00000B64 + + thumb_func_start FUN_02213484 +FUN_02213484: ; 0x02213484 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + ldr r4, _02213560 ; =0x022149C8 + add r3, sp, #0 + add r6, r0, #0 + add r2, r3, #0 + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r4!, {r0, r1} + stmia r3!, {r0, r1} + add r1, r2, #0 + add r0, r6, #0 + mov r2, #0x17 + bl FUN_02212C04 + add r0, r6, #0 + bl FUN_0221301C + add r0, r6, #0 + bl FUN_02213568 + ldr r4, _02213564 ; =0x02214C64 + mov r7, #0 + add r5, r6, #0 +_022134B8: + add r0, r6, #0 + add r1, r4, #0 + bl FUN_02212CA4 + mov r1, #0x66 + lsl r1, r1, #2 + str r0, [r5, r1] + add r7, r7, #1 + add r4, #0x1c + add r5, r5, #4 + cmp r7, #0xe + blo _022134B8 + mov r1, #0 + mov r2, #0xff + add r0, r6, #0 + mvn r2, r2 + add r3, r1, #0 + bl FUN_0221309C + mov r2, #0xff + add r0, r6, #0 + mov r1, #1 + mvn r2, r2 + mov r3, #0 + bl FUN_0221309C + mov r1, #2 + add r2, r1, #0 + add r0, r6, #0 + add r2, #0xfe + mov r3, #0 + bl FUN_0221309C + mov r1, #3 + add r2, r1, #0 + add r0, r6, #0 + add r2, #0xfd + mov r3, #0 + bl FUN_0221309C + add r0, r6, #0 + bl FUN_022131C0 + add r0, r6, #0 + bl FUN_022135C8 + add r0, r6, #0 + bl FUN_022132CC + mov r1, #0 + mov r2, #0xff + add r0, r6, #0 + mvn r2, r2 + add r3, r1, #0 + bl FUN_02213354 + mov r2, #0xff + add r0, r6, #0 + mov r1, #1 + mvn r2, r2 + mov r3, #0 + bl FUN_02213354 + mov r1, #2 + add r2, r1, #0 + add r0, r6, #0 + add r2, #0xfe + mov r3, #0 + bl FUN_02213354 + mov r1, #3 + add r2, r1, #0 + add r0, r6, #0 + add r2, #0xfd + mov r3, #0 + bl FUN_02213354 + mov r0, #0x21 + mov r1, #0xe + lsl r0, r0, #4 + str r1, [r6, r0] + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + nop +_02213560: .word 0x022149C8 +_02213564: .word 0x02214C64 + + thumb_func_start FUN_02213568 +FUN_02213568: ; 0x02213568 + push {r3, r4, lr} + sub sp, #0xc + add r4, r0, #0 + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _022135C4 ; =0x0000B808 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #8] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x6c + mov r3, #5 + bl FUN_0200C00C + mov r0, #0 + str r0, [sp] + ldr r0, _022135C4 ; =0x0000B808 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x6c + mov r3, #6 + bl FUN_0200C124 + mov r0, #0 + str r0, [sp] + ldr r0, _022135C4 ; =0x0000B808 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x6c + mov r3, #7 + bl FUN_0200C13C + add sp, #0xc + pop {r3, r4, pc} + .align 2, 0 +_022135C4: .word 0x0000B808 + + thumb_func_start FUN_022135C8 +FUN_022135C8: ; 0x022135C8 + push {r4, lr} + add r4, r0, #0 + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_0200C644 + mov r0, #0x73 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_0200C644 + ldr r0, [r4] + add r0, #0x2a + ldrb r0, [r0] + cmp r0, #3 + bne _0221360A + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0x80 + mov r2, #0x60 + bl FUN_0200C714 + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #2 + bl FUN_0200C5C0 + pop {r4, pc} +_0221360A: + bl FUN_02212BD4 + cmp r0, #1 + ldr r0, [r4] + bne _02213658 + add r0, #0x2a + ldrb r0, [r0] + cmp r0, #1 + bne _0221363A + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0x30 + mov r2, #0x60 + bl FUN_0200C714 + mov r0, #0x73 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0xd0 + mov r2, #0x60 + bl FUN_0200C714 + b _0221369A +_0221363A: + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0xd0 + mov r2, #0x60 + bl FUN_0200C714 + mov r0, #0x73 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0x30 + mov r2, #0x60 + bl FUN_0200C714 + b _0221369A +_02213658: + add r0, #0x2a + ldrb r0, [r0] + cmp r0, #1 + bne _0221367E + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0xd0 + mov r2, #0x60 + bl FUN_0200C714 + mov r0, #0x73 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0x30 + mov r2, #0x60 + bl FUN_0200C714 + b _0221369A +_0221367E: + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0x30 + mov r2, #0x60 + bl FUN_0200C714 + mov r0, #0x73 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0xd0 + mov r2, #0x60 + bl FUN_0200C714 +_0221369A: + mov r0, #0x72 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl FUN_0200C5C0 + mov r0, #0x73 + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl FUN_0200C5C0 + pop {r4, pc} + + thumb_func_start FUN_022136B4 +FUN_022136B4: ; 0x022136B4 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + mov r0, #2 + mov r1, #0 + str r0, [sp] + str r1, [sp, #4] + ldr r0, [r4] + mov r2, #4 + ldr r0, [r0, #0x24] + add r3, r1, #0 + bl FUN_02022318 + ldr r1, _0221378C ; =0x00000B58 + ldr r2, _02213790 ; =0x04000060 + str r0, [r4, r1] + ldrh r1, [r2] + ldr r0, _02213794 ; =0xFFFFCFFF + and r1, r0 + mov r0, #8 + orr r0, r1 + strh r0, [r2] + bl FUN_02012CC8 + ldr r0, [r4] + mov r1, #0x12 + ldr r0, [r0, #0x24] + lsl r1, r1, #0xa + bl FUN_02016998 + mov r2, #0xb6 + lsl r2, r2, #4 + str r0, [r4, r2] + mov r0, #1 + str r0, [sp] + ldr r0, [r4] + mov r3, #0x12 + ldr r0, [r0, #0x24] + ldr r1, _02213798 ; =FUN_02213834 + str r0, [sp, #4] + ldr r0, _0221379C ; =FUN_02213810 + ldr r2, [r4, r2] + lsl r3, r3, #0xa + bl FUN_02012CDC + ldr r1, _022137A0 ; =0x00000B5C + str r0, [r4, r1] + ldr r0, [r4, r1] + bl FUN_0201343C + add r2, r0, #0 + mov r0, #1 + mov r1, #0xe1 + lsl r0, r0, #0xc + lsl r1, r1, #0xe + bl FUN_0201EC94 + ldr r2, [r4] + mov r0, #0x3d + ldr r2, [r2, #0x24] + mov r1, #2 + bl FUN_0201318C + add r1, r0, #0 + ldr r0, _022137A0 ; =0x00000B5C + mov r2, #0xa + ldr r0, [r4, r0] + mov r3, #1 + bl FUN_02013194 + mov r1, #0 + ldr r0, _022137A0 ; =0x00000B5C + add r2, r1, #0 + ldr r0, [r4, r0] + add r3, r1, #0 + bl FUN_020133AC + ldr r0, _022137A0 ; =0x00000B5C + mov r2, #0 + ldr r0, [r4, r0] + mov r1, #1 + add r3, r2, #0 + bl FUN_020133AC + ldr r0, _022137A0 ; =0x00000B5C + mov r2, #0 + ldr r0, [r4, r0] + mov r1, #2 + add r3, r2, #0 + bl FUN_020133AC + ldr r0, _022137A0 ; =0x00000B5C + mov r2, #0 + ldr r0, [r4, r0] + mov r1, #3 + add r3, r2, #0 + bl FUN_020133AC + ldr r0, _022137A0 ; =0x00000B5C + mov r2, #0 + ldr r0, [r4, r0] + mov r1, #4 + add r3, r2, #0 + bl FUN_020133AC + add sp, #8 + pop {r4, pc} + nop +_0221378C: .word 0x00000B58 +_02213790: .word 0x04000060 +_02213794: .word 0xFFFFCFFF +_02213798: .word FUN_02213834 +_0221379C: .word FUN_02213810 +_022137A0: .word 0x00000B5C + + thumb_func_start FUN_022137A4 +FUN_022137A4: ; 0x022137A4 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4] + add r0, #0x28 + ldrb r0, [r0] + cmp r0, #1 + beq _022137B6 + mov r0, #0 + pop {r4, pc} +_022137B6: + bl FUN_020222AC + ldr r0, _022137D8 ; =0x00000B5C + ldr r0, [r4, r0] + bl FUN_020133C8 + cmp r0, #0 + bne _022137CA + mov r0, #0 + pop {r4, pc} +_022137CA: + bl FUN_02013364 + bl FUN_02013388 + mov r0, #1 + pop {r4, pc} + nop +_022137D8: .word 0x00000B5C + + thumb_func_start FUN_022137DC +FUN_022137DC: ; 0x022137DC + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4] + add r0, #0x28 + ldrb r0, [r0] + cmp r0, #1 + bne _02213804 + ldr r0, _02213808 ; =0x00000B5C + ldr r0, [r4, r0] + bl FUN_02012DE4 + mov r0, #0xb6 + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl FUN_02016A18 + ldr r0, _0221380C ; =0x00000B58 + ldr r0, [r4, r0] + bl FUN_020223BC +_02213804: + pop {r4, pc} + nop +_02213808: .word 0x00000B5C +_0221380C: .word 0x00000B58 + + thumb_func_start FUN_02213810 +FUN_02213810: ; 0x02213810 + push {r4, lr} + ldr r3, _02213830 ; =0x021064B8 + mov r2, #0 + ldr r3, [r3] + blx r3 + add r4, r0, #0 + bl FUN_0201327C + cmp r4, #0 + bne _02213828 + bl ErrorHandling +_02213828: + lsl r0, r4, #0x10 + lsr r0, r0, #0xd + pop {r4, pc} + nop +_02213830: .word 0x021064B8 + + thumb_func_start FUN_02213834 +FUN_02213834: ; 0x02213834 + push {r4, lr} + ldr r3, _02213854 ; =0x021064C0 + mov r2, #1 + ldr r3, [r3] + blx r3 + add r4, r0, #0 + bl FUN_020132BC + cmp r4, #0 + bne _0221384C + bl ErrorHandling +_0221384C: + lsl r0, r4, #0x10 + lsr r0, r0, #0xd + pop {r4, pc} + nop +_02213854: .word 0x021064C0 + + thumb_func_start FUN_02213858 +FUN_02213858: ; 0x02213858 + push {r4, r5, lr} + sub sp, #0x64 + ldr r5, _022138E8 ; =0x0221497C + add r3, sp, #0x54 + add r4, r0, #0 + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r0, r2, #0 + bl FUN_02016BBC + ldr r5, _022138EC ; =0x02214A9C + add r3, sp, #0x38 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #1 + str r0, [r3] + ldr r0, [r4, #0xc] + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + mov r1, #1 + bl FUN_02018744 + ldr r5, _022138F0 ; =0x02214A10 + add r3, sp, #0x1c + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #2 + str r0, [r3] + ldr r0, [r4, #0xc] + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + mov r1, #2 + bl FUN_02018744 + ldr r5, _022138F4 ; =0x02214A80 + add r3, sp, #0 + ldmia r5!, {r0, r1} + add r2, r3, #0 + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r5] + mov r1, #3 + str r0, [r3] + ldr r0, [r4, #0xc] + mov r3, #0 + bl FUN_02016C18 + add sp, #0x64 + pop {r4, r5, pc} + nop +_022138E8: .word 0x0221497C +_022138EC: .word 0x02214A9C +_022138F0: .word 0x02214A10 +_022138F4: .word 0x02214A80 + + thumb_func_start FUN_022138F8 +FUN_022138F8: ; 0x022138F8 + push {r4, lr} + add r4, r0, #0 + mov r0, #0x1e + mov r1, #0 + bl FUN_0201E6E4 + ldr r0, [r4, #0xc] + mov r1, #3 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #2 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #1 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + bl FUN_02016A18 + pop {r4, pc} + + thumb_func_start FUN_02213924 +FUN_02213924: ; 0x02213924 + push {r4, r5, lr} + sub sp, #0x14 + add r5, r0, #0 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, [r5] + mov r1, #0xf + ldr r0, [r0, #0x24] + mov r3, #3 + str r0, [sp, #0xc] + ldr r2, [r5, #0xc] + mov r0, #0x14 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, [r5] + mov r1, #0x11 + ldr r0, [r0, #0x24] + mov r3, #3 + str r0, [sp, #0xc] + ldr r2, [r5, #0xc] + mov r0, #0x14 + bl FUN_020068C8 + ldr r2, [r5] + mov r0, #0x14 + ldr r2, [r2, #0x24] + mov r1, #0x10 + bl LoadFromNarc_2 + add r1, sp, #0x10 + add r4, r0, #0 + bl FUN_020B0138 + ldr r2, [sp, #0x10] + mov r0, #3 + ldr r1, [r2, #0xc] + ldr r2, [r2, #8] + mov r3, #0 + lsl r2, r2, #0x10 + lsr r2, r2, #0x10 + bl FUN_02017FB4 + ldr r1, [sp, #0x10] + ldr r0, _022139B4 ; =0x000004E4 + ldr r1, [r1, #0xc] + add r0, r5, r0 + add r1, #0x60 + mov r2, #0x60 + bl memcpy + add r0, r4, #0 + bl FUN_02016A18 + ldr r0, [r5] + mov r2, #0xa9 + lsl r2, r2, #2 + ldr r3, _022139B8 ; =0x00000424 + add r1, r5, r2 + add r2, #0xc0 + ldr r0, [r0, #0x24] + add r2, r5, r2 + add r3, r5, r3 + bl FUN_020724D4 + add sp, #0x14 + pop {r4, r5, pc} + .align 2, 0 +_022139B4: .word 0x000004E4 +_022139B8: .word 0x00000424 + + thumb_func_start FUN_022139BC +FUN_022139BC: ; 0x022139BC + push {r4, r5, r6, r7, lr} + sub sp, #0x1c + add r5, r0, #0 + ldr r6, _02213A90 ; =0x02214954 + mov r4, #0 + add r7, r5, #0 +_022139C8: + cmp r4, #0 + beq _022139D0 + cmp r4, #3 + bne _022139D8 +_022139D0: + mov r0, #0xa9 + lsl r0, r0, #2 + add r1, r5, r0 + b _022139EE +_022139D8: + mov r0, #0x86 + lsl r0, r0, #2 + ldrh r0, [r7, r0] + cmp r0, #0 + bne _022139E8 + ldr r0, _02213A94 ; =0x00000424 + add r1, r5, r0 + b _022139EE +_022139E8: + mov r0, #0xd9 + lsl r0, r0, #2 + add r1, r5, r0 +_022139EE: + mov r0, #0x10 + str r0, [sp] + mov r0, #6 + str r0, [sp, #4] + str r1, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + str r0, [sp, #0x10] + mov r0, #0x10 + str r0, [sp, #0x14] + mov r0, #6 + str r0, [sp, #0x18] + ldrb r2, [r6] + ldrb r3, [r6, #1] + ldr r0, [r5, #0xc] + mov r1, #2 + bl FUN_02018170 + mov r0, #0x86 + lsl r0, r0, #2 + ldrh r0, [r7, r0] + cmp r0, #0 + beq _02213A7A + mov r0, #0x10 + str r0, [sp] + mov r0, #6 + str r0, [sp, #4] + add r0, r4, #3 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #8] + ldrb r2, [r6] + ldrb r3, [r6, #1] + ldr r0, [r5, #0xc] + mov r1, #2 + bl FUN_020186B4 + cmp r4, #3 + bhs _02213A46 + ldr r0, [r5] + add r0, #0x29 + ldrb r0, [r0] + cmp r0, #1 + beq _02213A54 +_02213A46: + cmp r4, #3 + blo _02213A68 + ldr r0, [r5] + add r0, #0x29 + ldrb r0, [r0] + cmp r0, #0 + bne _02213A68 +_02213A54: + ldr r1, _02213A98 ; =0x00000504 + add r3, r4, #3 + lsl r3, r3, #0x15 + mov r0, #2 + add r1, r5, r1 + mov r2, #0x20 + lsr r3, r3, #0x10 + bl FUN_02017FB4 + b _02213A7A +_02213A68: + ldr r1, _02213A9C ; =0x000004E4 + add r3, r4, #3 + lsl r3, r3, #0x15 + mov r0, #2 + add r1, r5, r1 + mov r2, #0x20 + lsr r3, r3, #0x10 + bl FUN_02017FB4 +_02213A7A: + add r4, r4, #1 + add r7, #0x18 + add r6, r6, #2 + cmp r4, #6 + blo _022139C8 + ldr r0, [r5, #0xc] + mov r1, #2 + bl FUN_0201AC68 + add sp, #0x1c + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_02213A90: .word 0x02214954 +_02213A94: .word 0x00000424 +_02213A98: .word 0x00000504 +_02213A9C: .word 0x000004E4 + + thumb_func_start FUN_02213AA0 +FUN_02213AA0: ; 0x02213AA0 + push {r3, r4, r5, r6, r7, lr} + add r4, r0, #0 + ldr r0, [r4, #0xc] + str r1, [sp] + add r1, r2, #0 + bl FUN_0201886C + add r6, r0, #0 + ldr r0, [r4] + add r0, #0x29 + ldrb r0, [r0] + cmp r0, #0 + bne _02213ABE + mov r7, #0x10 + b _02213AC0 +_02213ABE: + mov r7, #0 +_02213AC0: + mov r5, #0 +_02213AC2: + lsl r0, r5, #5 + add r0, r7, r0 + lsl r4, r0, #1 + ldr r0, [sp] + lsl r1, r5, #5 + add r0, r0, r1 + add r1, r6, r4 + mov r2, #0x20 + bl memcpy + add r0, r6, r4 + mov r1, #0 + mov r2, #0x20 + bl Call_FillMemWithValue + add r0, r5, #1 + lsl r0, r0, #0x10 + lsr r5, r0, #0x10 + cmp r5, #0x18 + blo _02213AC2 + pop {r3, r4, r5, r6, r7, pc} + + thumb_func_start FUN_02213AEC +FUN_02213AEC: ; 0x02213AEC + push {r4, lr} + ldr r1, _02213B18 ; =0x00000544 + add r4, r0, #0 + add r1, r4, r1 + mov r2, #1 + bl FUN_02213AA0 + ldr r1, _02213B1C ; =0x00000844 + add r0, r4, #0 + add r1, r4, r1 + mov r2, #2 + bl FUN_02213AA0 + ldr r0, [r4, #0xc] + mov r1, #1 + bl FUN_0201AC68 + ldr r0, [r4, #0xc] + mov r1, #2 + bl FUN_0201AC68 + pop {r4, pc} + .align 2, 0 +_02213B18: .word 0x00000544 +_02213B1C: .word 0x00000844 + + thumb_func_start FUN_02213B20 +FUN_02213B20: ; 0x02213B20 + push {r3, r4, r5, r6, lr} + sub sp, #0x1c + add r5, r0, #0 + ldr r0, [r5] + add r4, r1, #0 + add r0, #0x29 + ldrb r0, [r0] + cmp r0, #0 + bne _02213B80 + mov r0, #0x20 + sub r6, r0, r4 + ldr r1, _02213BE4 ; =0x00000544 + str r4, [sp] + mov r0, #0x18 + str r0, [sp, #4] + add r1, r5, r1 + str r1, [sp, #8] + mov r3, #0 + str r3, [sp, #0xc] + lsl r2, r6, #0x18 + str r3, [sp, #0x10] + mov r1, #0x10 + str r1, [sp, #0x14] + str r0, [sp, #0x18] + ldr r0, [r5, #0xc] + mov r1, #1 + lsr r2, r2, #0x18 + bl FUN_02018170 + ldr r0, _02213BE8 ; =0x00000844 + lsl r2, r6, #0x18 + str r4, [sp] + mov r1, #0x18 + str r1, [sp, #4] + add r0, r5, r0 + str r0, [sp, #8] + mov r3, #0 + str r3, [sp, #0xc] + str r3, [sp, #0x10] + mov r0, #0x10 + str r0, [sp, #0x14] + str r1, [sp, #0x18] + ldr r0, [r5, #0xc] + mov r1, #2 + lsr r2, r2, #0x18 + bl FUN_02018170 + b _02213BCE +_02213B80: + ldr r2, _02213BE4 ; =0x00000544 + mov r0, #0x10 + str r4, [sp] + mov r1, #0x18 + sub r6, r0, r4 + str r1, [sp, #4] + add r2, r5, r2 + str r2, [sp, #8] + lsl r2, r6, #0x18 + lsr r2, r2, #0x18 + str r2, [sp, #0xc] + mov r2, #0 + str r2, [sp, #0x10] + str r0, [sp, #0x14] + str r1, [sp, #0x18] + ldr r0, [r5, #0xc] + mov r1, #1 + add r3, r2, #0 + bl FUN_02018170 + ldr r1, _02213BE8 ; =0x00000844 + mov r2, #0 + str r4, [sp] + mov r0, #0x18 + str r0, [sp, #4] + add r1, r5, r1 + str r1, [sp, #8] + lsl r1, r6, #0x18 + lsr r1, r1, #0x18 + str r1, [sp, #0xc] + str r2, [sp, #0x10] + mov r1, #0x10 + str r1, [sp, #0x14] + str r0, [sp, #0x18] + ldr r0, [r5, #0xc] + mov r1, #2 + add r3, r2, #0 + bl FUN_02018170 +_02213BCE: + ldr r0, [r5, #0xc] + mov r1, #1 + bl FUN_0201AC68 + ldr r0, [r5, #0xc] + mov r1, #2 + bl FUN_0201AC68 + add sp, #0x1c + pop {r3, r4, r5, r6, pc} + nop +_02213BE4: .word 0x00000544 +_02213BE8: .word 0x00000844 + + thumb_func_start FUN_02213BEC +FUN_02213BEC: ; 0x02213BEC + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r4, r0, #0 + add r0, r1, #0 + str r1, [sp] + add r5, r2, #0 + bl FUN_0206B9AC + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #8] + mov r0, #0x18 + mul r0, r5 + add r0, r4, r0 + mov r6, #0 + str r0, [sp, #4] +_02213C0C: + ldr r0, [sp, #8] + cmp r0, r6 + bhi _02213C2E + mov r0, #0 + add r1, r0, #0 + add r2, r0, #0 + bl FUN_0206B6D4 + mov r1, #0x18 + add r2, r6, #0 + mul r2, r1 + ldr r1, [sp, #4] + add r2, r1, r2 + mov r1, #0x85 + lsl r1, r1, #2 + str r0, [r2, r1] + b _02213D08 +_02213C2E: + ldr r0, [sp] + add r1, r6, #0 + bl FUN_0206B9B0 + mov r1, #0x18 + add r2, r6, #0 + mul r2, r1 + ldr r1, [sp, #4] + add r4, r0, #0 + add r7, r1, r2 + bl FUN_0206B6C8 + mov r1, #0x85 + lsl r1, r1, #2 + str r0, [r7, r1] + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl FUN_020671BC + mov r1, #0x86 + lsl r1, r1, #2 + strh r0, [r7, r1] + add r0, r1, #0 + ldrh r0, [r7, r0] + cmp r0, #0 + beq _02213D08 + mov r0, #0x18 + add r1, r6, #0 + mul r1, r0 + ldr r0, [sp, #4] + mov r2, #0 + add r5, r0, r1 + add r0, r4, #0 + mov r1, #0x4c + bl FUN_020671BC + ldr r1, _02213D18 ; =0x00000223 + mov r2, #0 + strb r0, [r5, r1] + add r0, r4, #0 + mov r1, #0xa2 + bl FUN_020671BC + ldr r1, _02213D1C ; =0x0000021A + mov r2, #0 + strh r0, [r5, r1] + add r0, r4, #0 + mov r1, #0xa3 + bl FUN_020671BC + mov r1, #0x87 + lsl r1, r1, #2 + strh r0, [r5, r1] + add r0, r4, #0 + mov r1, #0xa0 + mov r2, #0 + bl FUN_020671BC + mov r1, #0x22 + lsl r1, r1, #4 + strb r0, [r5, r1] + add r0, r4, #0 + mov r1, #6 + mov r2, #0 + bl FUN_020671BC + ldr r1, _02213D20 ; =0x0000021E + mov r2, #0 + strh r0, [r5, r1] + add r0, r4, #0 + mov r1, #0xa1 + bl FUN_020671BC + mov r1, #0x89 + lsl r1, r1, #2 + strb r0, [r5, r1] + add r0, r4, #0 + mov r1, #0x70 + mov r2, #0 + bl FUN_020671BC + ldr r1, _02213D24 ; =0x00000225 + mov r2, #0 + strb r0, [r5, r1] + add r0, r4, #0 + mov r1, #0xaf + bl FUN_020671BC + cmp r0, #1 + bne _02213CE8 + mov r1, #0 + b _02213CEA +_02213CE8: + mov r1, #1 +_02213CEA: + ldr r0, _02213D28 ; =0x00000222 + strb r1, [r7, r0] + add r0, r4, #0 + bl FUN_020689E0 + ldr r1, _02213D2C ; =0x00000221 + strb r0, [r5, r1] + add r0, r4, #0 + bl FUN_0207C2D4 + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + mov r0, #0x8a + lsl r0, r0, #2 + str r1, [r5, r0] +_02213D08: + add r0, r6, #1 + lsl r0, r0, #0x10 + lsr r6, r0, #0x10 + cmp r6, #3 + bhs _02213D14 + b _02213C0C +_02213D14: + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_02213D18: .word 0x00000223 +_02213D1C: .word 0x0000021A +_02213D20: .word 0x0000021E +_02213D24: .word 0x00000225 +_02213D28: .word 0x00000222 +_02213D2C: .word 0x00000221 + + thumb_func_start FUN_02213D30 +FUN_02213D30: ; 0x02213D30 + push {r4, lr} + add r4, r0, #0 + mov r0, #0x85 + lsl r0, r0, #2 + add r0, r4, r0 + mov r1, #0 + mov r2, #0x90 + bl Call_FillMemWithValue + ldr r1, [r4] + add r0, r4, #0 + ldr r1, [r1, #4] + mov r2, #0 + bl FUN_02213BEC + ldr r1, [r4] + add r0, r4, #0 + ldr r1, [r1, #0xc] + mov r2, #3 + bl FUN_02213BEC + pop {r4, pc} + + thumb_func_start FUN_02213D5C +FUN_02213D5C: ; 0x02213D5C + push {r4, lr} + add r3, r0, #0 + add r2, r1, #0 + mov r0, #0x18 + mul r2, r0 + ldr r1, _02213DC0 ; =0x0000021A + add r4, r3, r2 + ldrh r0, [r4, r1] + cmp r0, #0 + bne _02213D74 + mov r0, #0 + pop {r4, pc} +_02213D74: + add r1, #0xe + ldr r1, [r4, r1] + cmp r1, #7 + beq _02213D84 + cmp r1, #0 + beq _02213D84 + mov r0, #5 + pop {r4, pc} +_02213D84: + mov r1, #0x87 + add r2, r3, r2 + lsl r1, r1, #2 + ldrh r1, [r2, r1] + mov r2, #0x30 + bl FUN_02079A54 + cmp r0, #4 + bhi _02213DBC + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02213DA2: ; jump table + .short _02213DBC - _02213DA2 - 2 ; case 0 + .short _02213DB8 - _02213DA2 - 2 ; case 1 + .short _02213DB4 - _02213DA2 - 2 ; case 2 + .short _02213DB0 - _02213DA2 - 2 ; case 3 + .short _02213DAC - _02213DA2 - 2 ; case 4 +_02213DAC: + mov r0, #1 + pop {r4, pc} +_02213DB0: + mov r0, #2 + pop {r4, pc} +_02213DB4: + mov r0, #3 + pop {r4, pc} +_02213DB8: + mov r0, #4 + pop {r4, pc} +_02213DBC: + mov r0, #0 + pop {r4, pc} + .align 2, 0 +_02213DC0: .word 0x0000021A + + thumb_func_start FUN_02213DC4 +FUN_02213DC4: ; 0x02213DC4 + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r5, r0, #0 + mov r0, #0 + str r0, [sp, #8] + str r1, [sp] + add r0, r1, #0 + lsl r1, r0, #2 + ldr r0, [sp] + ldr r2, _02213F1C ; =0x02214B28 + add r7, r0, r1 + lsl r0, r7, #2 + add r4, r5, r0 + ldr r0, [sp] + mov r1, #0xa + mul r1, r0 + str r4, [sp, #4] + add r6, r2, r1 +_02213DE8: + mov r1, #0x1c + add r2, r7, #0 + mul r2, r1 + ldr r1, _02213F20 ; =0x02214DEC + add r0, r5, #0 + add r1, r1, r2 + bl FUN_02212CA4 + mov r1, #0x66 + lsl r1, r1, #2 + str r0, [r4, r1] + add r0, r1, #0 + ldrb r1, [r6] + ldrb r2, [r6, #1] + ldr r0, [r4, r0] + bl FUN_0200C714 + ldr r0, [sp, #8] + add r7, r7, #1 + add r0, r0, #1 + add r4, r4, #4 + add r6, r6, #2 + str r0, [sp, #8] + cmp r0, #5 + blo _02213DE8 + ldr r0, [sp] + mov r3, #0x86 + mov r1, #0x18 + add r6, r0, #0 + mul r6, r1 + add r2, r5, r6 + lsl r3, r3, #2 + ldrh r0, [r2, r3] + cmp r0, #0 + bne _02213E50 + mov r5, #0 + add r4, r3, #0 + add r6, r5, #0 + sub r4, #0x80 +_02213E36: + ldr r0, [sp, #4] + add r1, r6, #0 + ldr r0, [r0, r4] + bl FUN_0200C644 + ldr r0, [sp, #4] + add r5, r5, #1 + add r0, r0, #4 + str r0, [sp, #4] + cmp r5, #5 + blo _02213E36 + add sp, #0xc + pop {r4, r5, r6, r7, pc} +_02213E50: + ldr r1, [sp] + mov r4, #0x14 + mul r4, r1 + add r1, r3, #0 + sub r1, #0x80 + add r7, r5, r1 + add r1, r3, #0 + add r1, #0xd + add r3, #0xb + ldrb r1, [r2, r1] + ldrb r2, [r2, r3] + bl FUN_0206B7BC + add r1, r0, #0 + ldr r0, [r7, r4] + bl FUN_0200C66C + ldr r1, [sp] + add r0, r5, #0 + bl FUN_02213D5C + add r1, r0, #0 + ldr r0, [r7, r4] + bl FUN_0200C5C0 + ldr r1, _02213F24 ; =0x0000021E + add r0, r5, r6 + ldrh r0, [r0, r1] + cmp r0, #0 + bne _02213E9A + add r0, r5, r4 + sub r1, #0x82 + ldr r0, [r0, r1] + mov r1, #0 + bl FUN_0200C644 + b _02213EC0 +_02213E9A: + bl FUN_0206EA98 + cmp r0, #1 + bne _02213EB2 + mov r0, #0x67 + add r1, r5, r4 + lsl r0, r0, #2 + ldr r0, [r1, r0] + mov r1, #1 + bl FUN_0200C5C0 + b _02213EC0 +_02213EB2: + mov r0, #0x67 + add r1, r5, r4 + lsl r0, r0, #2 + ldr r0, [r1, r0] + mov r1, #0 + bl FUN_0200C5C0 +_02213EC0: + mov r0, #0x89 + add r1, r5, r6 + lsl r0, r0, #2 + ldrb r1, [r1, r0] + cmp r1, #0 + bne _02213EDA + add r1, r5, r4 + sub r0, #0x84 + ldr r0, [r1, r0] + mov r1, #0 + bl FUN_0200C644 + b _02213EE6 +_02213EDA: + add r1, r5, r4 + sub r0, #0x84 + ldr r0, [r1, r0] + mov r1, #2 + bl FUN_0200C5C0 +_02213EE6: + mov r3, #0x8a + add r0, r5, r6 + lsl r3, r3, #2 + ldr r0, [r0, r3] + cmp r0, #7 + bne _02213F02 + add r0, r5, r4 + sub r3, #0x84 + ldr r0, [r0, r3] + mov r1, #0 + bl FUN_0200C644 + add sp, #0xc + pop {r4, r5, r6, r7, pc} +_02213F02: + add r0, r3, #0 + add r1, r5, r4 + sub r0, #0x84 + ldr r0, [r1, r0] + ldr r1, [sp, #8] + mov r2, #0x18 + mul r2, r1 + add r1, r5, r2 + ldr r1, [r1, r3] + bl FUN_0200C5C0 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_02213F1C: .word 0x02214B28 +_02213F20: .word 0x02214DEC +_02213F24: .word 0x0000021E + + thumb_func_start FUN_02213F28 +FUN_02213F28: ; 0x02213F28 + push {r3, r4, r5, lr} + sub sp, #0x18 + ldr r5, _02213F88 ; =0x022149F8 + add r3, sp, #0 + add r4, r0, #0 + add r2, r3, #0 + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + ldmia r5!, {r0, r1} + stmia r3!, {r0, r1} + add r1, r2, #0 + add r0, r4, #0 + mov r2, #0x1f + bl FUN_02212C04 + add r0, r4, #0 + bl FUN_02213F8C + add r0, r4, #0 + bl FUN_02214034 + add r0, r4, #0 + bl FUN_022140BC + add r0, r4, #0 + bl FUN_02214144 + mov r5, #0 +_02213F64: + add r0, r4, #0 + add r1, r5, #0 + bl FUN_02213DC4 + add r5, r5, #1 + cmp r5, #6 + blo _02213F64 + add r0, r4, #0 + mov r1, #0x10 + bl FUN_022141CC + mov r0, #0x21 + mov r1, #0x1e + lsl r0, r0, #4 + str r1, [r4, r0] + add sp, #0x18 + pop {r3, r4, r5, pc} + nop +_02213F88: .word 0x022149F8 + + thumb_func_start FUN_02213F8C +FUN_02213F8C: ; 0x02213F8C + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r5, r0, #0 + bl FUN_0206B888 + add r3, r0, #0 + mov r0, #0 + str r0, [sp] + mov r0, #3 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + ldr r0, _0221402C ; =0x0000B808 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #0xc] + ldr r0, [r5, r1] + add r1, r1, #4 + ldr r1, [r5, r1] + mov r2, #0x13 + bl FUN_0200C06C + bl FUN_0206B890 + add r3, r0, #0 + mov r0, #0 + str r0, [sp] + ldr r0, _02214030 ; =0x0000B809 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r5, r1] + add r1, r1, #4 + ldr r1, [r5, r1] + mov r2, #0x13 + bl FUN_0200C124 + bl FUN_0206B89C + add r3, r0, #0 + mov r0, #0 + str r0, [sp] + ldr r0, _02214030 ; =0x0000B809 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r5, r1] + add r1, r1, #4 + ldr r1, [r5, r1] + mov r2, #0x13 + bl FUN_0200C13C + mov r4, #0 + add r6, r5, #0 + add r7, r4, #0 +_02213FFA: + str r7, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _02214030 ; =0x0000B809 + mov r1, #0x65 + add r0, r4, r0 + str r0, [sp, #8] + mov r0, #0x19 + mov r3, #0x85 + lsl r0, r0, #4 + lsl r1, r1, #2 + lsl r3, r3, #2 + ldr r0, [r5, r0] + ldr r1, [r5, r1] + ldr r3, [r6, r3] + mov r2, #0x13 + bl FUN_0200C00C + add r4, r4, #1 + add r6, #0x18 + cmp r4, #6 + blo _02213FFA + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + nop +_0221402C: .word 0x0000B808 +_02214030: .word 0x0000B809 + + thumb_func_start FUN_02214034 +FUN_02214034: ; 0x02214034 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _022140B0 ; =0x0000B80F + mov r1, #0x19 + mov r2, #0x14 + lsl r1, r1, #4 + str r0, [sp, #8] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + add r3, r2, #0 + bl FUN_0200C00C + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, _022140B4 ; =0x0000B809 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #0xc] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x14 + mov r3, #0x15 + bl FUN_0200C06C + mov r0, #0 + str r0, [sp] + ldr r0, _022140B8 ; =0x0000B80A + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x14 + mov r3, #0x13 + bl FUN_0200C124 + mov r0, #0 + str r0, [sp] + ldr r0, _022140B8 ; =0x0000B80A + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x14 + mov r3, #0x12 + bl FUN_0200C13C + add sp, #0x10 + pop {r4, pc} + .align 2, 0 +_022140B0: .word 0x0000B80F +_022140B4: .word 0x0000B809 +_022140B8: .word 0x0000B80A + + thumb_func_start FUN_022140BC +FUN_022140BC: ; 0x022140BC + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _02214138 ; =0x0000B810 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #8] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x27 + mov r3, #0x40 + bl FUN_0200C00C + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + str r0, [sp, #8] + ldr r0, _0221413C ; =0x0000B80A + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #0xc] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x27 + mov r3, #0x41 + bl FUN_0200C06C + mov r0, #0 + str r0, [sp] + ldr r0, _02214140 ; =0x0000B80B + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x27 + mov r3, #0x3f + bl FUN_0200C124 + mov r0, #0 + str r0, [sp] + ldr r0, _02214140 ; =0x0000B80B + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x27 + mov r3, #0x3e + bl FUN_0200C13C + add sp, #0x10 + pop {r4, pc} + .align 2, 0 +_02214138: .word 0x0000B810 +_0221413C: .word 0x0000B80A +_02214140: .word 0x0000B80B + + thumb_func_start FUN_02214144 +FUN_02214144: ; 0x02214144 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, _022141C0 ; =0x0000B811 + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #8] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x14 + mov r3, #2 + bl FUN_0200C00C + mov r0, #0 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + ldr r0, _022141C4 ; =0x0000B80B + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #0xc] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x14 + mov r3, #8 + bl FUN_0200C06C + mov r0, #0 + str r0, [sp] + ldr r0, _022141C8 ; =0x0000B80C + mov r1, #0x19 + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x14 + mov r3, #1 + bl FUN_0200C124 + mov r3, #0 + mov r1, #0x19 + ldr r0, _022141C8 ; =0x0000B80C + str r3, [sp] + lsl r1, r1, #4 + str r0, [sp, #4] + ldr r0, [r4, r1] + add r1, r1, #4 + ldr r1, [r4, r1] + mov r2, #0x14 + bl FUN_0200C13C + add sp, #0x10 + pop {r4, pc} + .align 2, 0 +_022141C0: .word 0x0000B811 +_022141C4: .word 0x0000B80B +_022141C8: .word 0x0000B80C + + thumb_func_start FUN_022141CC +FUN_022141CC: ; 0x022141CC + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + str r0, [sp] + ldr r0, [r0] + add r7, r1, #0 + add r0, #0x29 + ldrb r0, [r0] + cmp r0, #0 + bne _022141E6 + mov r0, #3 + str r0, [sp, #8] + lsl r0, r7, #0x13 + b _022141F0 +_022141E6: + mov r0, #0 + str r0, [sp, #8] + lsl r0, r7, #3 + neg r0, r0 + lsl r0, r0, #0x10 +_022141F0: + asr r7, r0, #0x10 + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [sp, #8] + mov r1, #0xa + ldr r2, _02214248 ; =0x02214B28 + mul r1, r0 + add r0, r2, r1 + str r0, [sp, #4] +_02214202: + ldr r1, [sp, #8] + ldr r0, [sp, #0xc] + ldr r4, [sp, #4] + add r1, r1, r0 + lsl r0, r1, #2 + add r0, r1, r0 + lsl r1, r0, #2 + ldr r0, [sp] + mov r6, #0 + add r5, r0, r1 +_02214216: + ldrb r1, [r4] + mov r0, #0x66 + lsl r0, r0, #2 + add r1, r7, r1 + lsl r1, r1, #0x10 + ldrb r2, [r4, #1] + ldr r0, [r5, r0] + asr r1, r1, #0x10 + bl FUN_0200C714 + add r6, r6, #1 + add r4, r4, #2 + add r5, r5, #4 + cmp r6, #5 + blt _02214216 + ldr r0, [sp, #4] + add r0, #0xa + str r0, [sp, #4] + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + cmp r0, #3 + blt _02214202 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02214248: .word 0x02214B28 + + thumb_func_start FUN_0221424C +FUN_0221424C: ; 0x0221424C + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + add r5, r7, #0 + ldr r4, _02214270 ; =0x02214BA4 + mov r6, #0 + add r5, #0x10 +_02214258: + ldr r0, [r7, #0xc] + add r1, r5, #0 + add r2, r4, #0 + bl FUN_02019150 + add r6, r6, #1 + add r4, #8 + add r5, #0x10 + cmp r6, #0x18 + blo _02214258 + pop {r3, r4, r5, r6, r7, pc} + nop +_02214270: .word 0x02214BA4 + + thumb_func_start FUN_02214274 +FUN_02214274: ; 0x02214274 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r4, #0 + add r5, #0x10 +_0221427C: + add r0, r5, #0 + bl FUN_02019178 + add r4, r4, #1 + add r5, #0x10 + cmp r4, #0x18 + blo _0221427C + pop {r3, r4, r5, pc} + + thumb_func_start FUN_0221428C +FUN_0221428C: ; 0x0221428C + push {r4, r5, r6, r7, lr} + sub sp, #0x24 + ldr r4, [sp, #0x3c] + add r5, r0, #0 + add r7, r5, #0 + lsl r0, r4, #6 + add r7, #0x10 + str r0, [sp, #0x1c] + str r1, [sp, #0x10] + str r3, [sp, #0x14] + ldr r6, [sp, #0x38] + cmp r4, #3 + ldr r0, [r5] + bhs _022142B4 + ldr r0, [r0, #4] + add r1, r4, #0 + bl FUN_0206B9B0 + str r0, [sp, #0x18] + b _022142BE +_022142B4: + ldr r0, [r0, #0xc] + sub r1, r4, #3 + bl FUN_0206B9B0 + str r0, [sp, #0x18] +_022142BE: + add r1, r4, #0 + ldr r0, [sp, #0x10] + add r1, #8 + bl FUN_0200A914 + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + bl FUN_020690E4 + add r2, r0, #0 + ldr r0, [sp, #0x14] + mov r1, #0 + bl FUN_0200ACF8 + ldr r0, [sp, #0x14] + ldr r2, [sp, #0x20] + add r1, r6, #0 + bl FUN_0200B7B8 + ldr r0, [sp, #0x20] + bl FUN_02021A20 + mov r1, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02214370 ; =0x000F0E00 + add r2, r6, #0 + str r0, [sp, #8] + ldr r0, [sp, #0x1c] + add r3, r1, #0 + add r0, r7, r0 + str r1, [sp, #0xc] + bl FUN_0201BDE0 + mov r0, #0x18 + mul r0, r4 + add r2, r5, r0 + ldr r0, _02214374 ; =0x00000222 + ldrb r1, [r2, r0] + cmp r1, #0 + bne _0221436C + sub r0, r0, #1 + ldrb r0, [r2, r0] + cmp r0, #0 + bne _02214344 + ldr r0, [sp, #0x10] + mov r1, #0x1b + add r2, r6, #0 + bl FUN_0200A8E0 + mov r1, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + mov r0, #0xc1 + lsl r0, r0, #0xa + str r0, [sp, #8] + ldr r0, [sp, #0x1c] + add r2, r6, #0 + add r0, r7, r0 + mov r3, #0x40 + str r1, [sp, #0xc] + bl FUN_0201BDE0 + add sp, #0x24 + pop {r4, r5, r6, r7, pc} +_02214344: + cmp r0, #1 + bne _0221436C + ldr r0, [sp, #0x10] + mov r1, #0x1c + add r2, r6, #0 + bl FUN_0200A8E0 + mov r1, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _02214378 ; =0x00050600 + add r2, r6, #0 + str r0, [sp, #8] + ldr r0, [sp, #0x1c] + mov r3, #0x40 + add r0, r7, r0 + str r1, [sp, #0xc] + bl FUN_0201BDE0 +_0221436C: + add sp, #0x24 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_02214370: .word 0x000F0E00 +_02214374: .word 0x00000222 +_02214378: .word 0x00050600 + + thumb_func_start FUN_0221437C +FUN_0221437C: ; 0x0221437C + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r6, r0, #0 + ldr r0, [sp, #0x2c] + add r5, r6, #0 + lsl r0, r0, #2 + add r0, r0, #1 + lsl r4, r0, #4 + mov r0, #5 + add r7, r1, #0 + str r3, [sp, #0x10] + str r0, [sp] + add r5, #0x10 + add r0, r2, #0 + mov r1, #1 + add r2, r5, r4 + mov r3, #0 + bl FUN_0200B9A8 + ldr r1, [sp, #0x2c] + add r0, r7, #0 + add r1, r1, #2 + bl FUN_0200A914 + mov r1, #0 + add r7, r0, #0 + ldr r3, [sp, #0x2c] + mov r2, #0x18 + mul r2, r3 + add r3, r6, r2 + mov r2, #0x22 + str r1, [sp] + mov r0, #1 + str r0, [sp, #4] + lsl r2, r2, #4 + ldrb r2, [r3, r2] + ldr r0, [sp, #0x10] + mov r3, #3 + bl FUN_0200AD38 + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x28] + add r2, r7, #0 + bl FUN_0200B7B8 + add r0, r7, #0 + bl FUN_02021A20 + mov r1, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _022143F8 ; =0x000F0E00 + ldr r2, [sp, #0x28] + str r0, [sp, #8] + add r0, r5, r4 + mov r3, #0x10 + str r1, [sp, #0xc] + bl FUN_0201BDE0 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_022143F8: .word 0x000F0E00 + + thumb_func_start FUN_022143FC +FUN_022143FC: ; 0x022143FC + push {r4, r5, r6, r7, lr} + sub sp, #0x2c + ldr r5, [sp, #0x44] + add r7, r0, #0 + str r0, [sp, #0x10] + lsl r0, r5, #2 + add r0, r0, #2 + lsl r0, r0, #4 + str r0, [sp, #0x28] + str r1, [sp, #0x14] + add r0, r1, #0 + add r1, r5, #0 + add r1, #0x14 + str r3, [sp, #0x18] + ldr r4, [sp, #0x40] + add r7, #0x10 + bl FUN_0200A914 + str r0, [sp, #0x20] + mov r0, #0x18 + mul r0, r5 + str r0, [sp, #0x1c] + mov r1, #0 + ldr r3, [sp, #0x10] + ldr r2, [sp, #0x1c] + str r1, [sp] + mov r0, #1 + add r3, r3, r2 + str r0, [sp, #4] + ldr r2, _02214508 ; =0x0000021A + ldr r0, [sp, #0x18] + ldrh r2, [r3, r2] + mov r3, #3 + bl FUN_0200AD38 + ldr r0, [sp, #0x18] + ldr r2, [sp, #0x20] + add r1, r4, #0 + bl FUN_0200B7B8 + ldr r0, [sp, #0x20] + bl FUN_02021A20 + mov r0, #0 + add r1, r4, #0 + add r2, r0, #0 + bl FUN_02002E14 + mov ip, r0 + mov r1, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _0221450C ; =0x000F0E00 + mov r6, ip + str r0, [sp, #8] + ldr r0, [sp, #0x28] + mov r3, #0x1c + add r0, r7, r0 + add r2, r4, #0 + sub r3, r3, r6 + str r1, [sp, #0xc] + bl FUN_0201BDE0 + ldr r0, [sp, #0x14] + mov r1, #0x1a + add r2, r4, #0 + bl FUN_0200A8E0 + mov r1, #0 + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _0221450C ; =0x000F0E00 + add r2, r4, #0 + str r0, [sp, #8] + ldr r0, [sp, #0x28] + mov r3, #0x1c + add r0, r7, r0 + str r1, [sp, #0xc] + bl FUN_0201BDE0 + mov r0, #0 + add r1, r4, #0 + add r2, r0, #0 + bl FUN_02002E14 + str r0, [sp, #0x24] + add r5, #0xe + ldr r0, [sp, #0x14] + add r1, r5, #0 + bl FUN_0200A914 + add r5, r0, #0 + ldr r3, [sp, #0x10] + ldr r2, [sp, #0x1c] + mov r1, #0 + add r3, r3, r2 + mov r2, #0x87 + str r1, [sp] + mov r0, #1 + str r0, [sp, #4] + lsl r2, r2, #2 + ldrh r2, [r3, r2] + ldr r0, [sp, #0x18] + mov r3, #3 + bl FUN_0200AD38 + ldr r0, [sp, #0x18] + add r1, r4, #0 + add r2, r5, #0 + bl FUN_0200B7B8 + add r0, r5, #0 + bl FUN_02021A20 + mov r1, #0 + ldr r3, [sp, #0x24] + str r1, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r0, _0221450C ; =0x000F0E00 + add r3, #0x1c + str r0, [sp, #8] + ldr r0, [sp, #0x28] + add r2, r4, #0 + add r0, r7, r0 + str r1, [sp, #0xc] + str r3, [sp, #0x24] + bl FUN_0201BDE0 + add sp, #0x2c + pop {r4, r5, r6, r7, pc} + nop +_02214508: .word 0x0000021A +_0221450C: .word 0x000F0E00 + + thumb_func_start FUN_02214510 +FUN_02214510: ; 0x02214510 + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r5, r0, #0 + lsl r0, r1, #2 + add r2, r5, #0 + add r0, r0, #3 + add r2, #0x10 + lsl r0, r0, #4 + add r4, r2, r0 + mov r0, #0x18 + add r6, r1, #0 + mul r6, r0 + mov r0, #0x87 + lsl r0, r0, #2 + add r7, r5, r0 + sub r0, r0, #2 + add r0, r5, r0 + str r0, [sp, #8] + ldrh r0, [r0, r6] + ldrh r1, [r7, r6] + mov r2, #0x30 + bl FUN_02079A54 + cmp r0, #4 + bhi _0221459E + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_0221454E: ; jump table + .short _0221459E - _0221454E - 2 ; case 0 + .short _02214588 - _0221454E - 2 ; case 1 + .short _02214570 - _0221454E - 2 ; case 2 + .short _02214558 - _0221454E - 2 ; case 3 + .short _02214558 - _0221454E - 2 ; case 4 +_02214558: + ldrb r3, [r4, #9] + ldr r1, _022145F4 ; =0x000004F6 + mov r0, #1 + lsl r3, r3, #4 + add r3, #9 + lsl r3, r3, #0x11 + add r1, r5, r1 + mov r2, #4 + lsr r3, r3, #0x10 + bl FUN_02017FB4 + b _0221459E +_02214570: + ldrb r3, [r4, #9] + ldr r1, _022145F8 ; =0x00000516 + mov r0, #1 + lsl r3, r3, #4 + add r3, #9 + lsl r3, r3, #0x11 + add r1, r5, r1 + mov r2, #4 + lsr r3, r3, #0x10 + bl FUN_02017FB4 + b _0221459E +_02214588: + ldrb r3, [r4, #9] + ldr r1, _022145FC ; =0x00000536 + mov r0, #1 + lsl r3, r3, #4 + add r3, #9 + lsl r3, r3, #0x11 + add r1, r5, r1 + mov r2, #4 + lsr r3, r3, #0x10 + bl FUN_02017FB4 +_0221459E: + ldr r0, [sp, #8] + ldrh r1, [r7, r6] + ldrh r0, [r0, r6] + mov r2, #0x30 + bl FUN_02079A0C + add r5, r0, #0 + lsl r0, r5, #0x10 + lsr r0, r0, #0x10 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + add r0, r4, #0 + mov r1, #0xa + mov r2, #0 + mov r3, #2 + bl FUN_020196F4 + lsl r0, r5, #0x10 + lsr r0, r0, #0x10 + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + add r0, r4, #0 + mov r1, #9 + mov r2, #0 + mov r3, #3 + bl FUN_020196F4 + lsl r0, r5, #0x10 + lsr r0, r0, #0x10 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + add r0, r4, #0 + mov r1, #0xa + mov r2, #0 + mov r3, #5 + bl FUN_020196F4 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + nop +_022145F4: .word 0x000004F6 +_022145F8: .word 0x00000516 +_022145FC: .word 0x00000536 + + thumb_func_start FUN_02214600 +FUN_02214600: ; 0x02214600 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r7, r0, #0 + ldr r6, [sp, #0x2c] + add r5, r7, #0 + str r1, [sp, #8] + add r5, #0x10 + lsl r4, r6, #6 + add r0, r5, r4 + mov r1, #0 + str r2, [sp, #0xc] + str r3, [sp, #0x10] + bl FUN_02019620 + add r0, r5, r4 + add r0, #0x10 + mov r1, #0 + bl FUN_02019620 + add r0, r5, r4 + add r0, #0x20 + mov r1, #0 + bl FUN_02019620 + add r0, r5, r4 + add r0, #0x30 + mov r1, #0 + bl FUN_02019620 + ldr r0, [sp, #0x28] + ldr r1, [sp, #8] + str r0, [sp] + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x10] + add r0, r7, #0 + str r6, [sp, #4] + bl FUN_0221428C + ldr r0, [sp, #0x28] + ldr r1, [sp, #8] + str r0, [sp] + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x10] + add r0, r7, #0 + str r6, [sp, #4] + bl FUN_0221437C + ldr r0, [sp, #0x28] + ldr r1, [sp, #8] + str r0, [sp] + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x10] + add r0, r7, #0 + str r6, [sp, #4] + bl FUN_022143FC + add r0, r7, #0 + add r1, r6, #0 + bl FUN_02214510 + add r0, r5, r4 + bl FUN_02019220 + add r0, r5, r4 + add r0, #0x10 + bl FUN_02019220 + add r0, r5, r4 + add r0, #0x20 + bl FUN_02019220 + add r0, r5, r4 + add r0, #0x30 + bl FUN_02019220 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + + thumb_func_start FUN_0221469C +FUN_0221469C: ; 0x0221469C + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r6, r0, #0 + ldr r3, [r6] + ldr r2, _0221471C ; =0x00000192 + ldr r3, [r3, #0x24] + mov r0, #0 + mov r1, #0x1a + bl FUN_0200A86C + ldr r3, [r6] + str r0, [sp, #0x10] + ldr r3, [r3, #0x24] + mov r0, #0xf + mov r1, #0xe + mov r2, #0 + bl FUN_0200B870 + str r0, [sp, #0xc] + ldr r0, [r6] + ldr r0, [r0, #0x24] + bl FUN_0200AA80 + ldr r1, [r6] + str r0, [sp, #8] + ldr r1, [r1, #0x24] + mov r0, #0x20 + bl FUN_020219F4 + add r7, r0, #0 + mov r4, #0 + add r5, r6, #0 +_022146DC: + mov r0, #0x86 + lsl r0, r0, #2 + ldrh r0, [r5, r0] + cmp r0, #0 + beq _022146F6 + ldr r1, [sp, #0x10] + str r7, [sp] + ldr r2, [sp, #0xc] + ldr r3, [sp, #8] + add r0, r6, #0 + str r4, [sp, #4] + bl FUN_02214600 +_022146F6: + add r4, r4, #1 + add r5, #0x18 + cmp r4, #6 + blo _022146DC + add r0, r7, #0 + bl FUN_02021A20 + ldr r0, [sp, #0x10] + bl FUN_0200A8B8 + ldr r0, [sp, #0xc] + bl FUN_0200B990 + ldr r0, [sp, #8] + bl FUN_0200AB18 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + nop +_0221471C: .word 0x00000192 + + thumb_func_start FUN_02214720 +FUN_02214720: ; 0x02214720 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x20 + add r4, r0, #0 + ldr r0, [r4] + cmp r0, #0 + beq _022147A4 + bl FUN_02031190 + lsl r0, r0, #0x18 + lsr r5, r0, #0x18 + add r0, r4, #0 + add r0, #0x2a + ldrb r0, [r0] + ldr r1, [r4] + sub r0, r0, #1 + lsl r0, r0, #0x18 + lsr r6, r0, #0x18 + mov r0, #0x57 + lsl r0, r0, #2 + ldr r0, [r1, r0] + bl FUN_02034998 + cmp r0, #1 + bne _0221479C + mov r0, #1 + add r7, r5, #0 + eor r7, r0 + mov r0, #0x34 + ldr r1, [r4] + mul r0, r7 + add r0, r1, r0 + add r0, #0x29 + ldrb r0, [r0] + bl FUN_0206AE00 + str r0, [sp, #0x10] + ldr r0, [r4, #0x24] + mov r1, #0x10 + bl FUN_02016998 + add r5, r0, #0 + add r0, r7, #0 + bl FUN_020313CC + lsl r0, r0, #2 + add r0, r4, r0 + ldr r0, [r0, #0x14] + add r1, r5, #0 + mov r2, #8 + bl FUN_02021EF0 + ldr r1, [sp, #0x10] + ldr r3, [r4, #0x24] + add r0, r5, #0 + add r2, r6, #0 + bl FUN_020294B4 + add r6, r0, #0 + add r0, r5, #0 + bl FUN_02016A18 + b _0221493A +_0221479C: + bl FUN_02033534 + cmp r0, #4 + bls _022147A6 +_022147A4: + b _0221494A +_022147A6: + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_022147B2: ; jump table + .short _02214936 - _022147B2 - 2 ; case 0 + .short _022147BC - _022147B2 - 2 ; case 1 + .short _02214808 - _022147B2 - 2 ; case 2 + .short _02214854 - _022147B2 - 2 ; case 3 + .short _022148A0 - _022147B2 - 2 ; case 4 +_022147BC: + mov r0, #1 + add r7, r5, #0 + eor r7, r0 + mov r0, #0x34 + ldr r1, [r4] + mul r0, r7 + add r0, r1, r0 + add r0, #0x29 + ldrb r0, [r0] + bl FUN_0206AE00 + str r0, [sp, #0x14] + ldr r0, [r4, #0x24] + mov r1, #0x10 + bl FUN_02016998 + add r5, r0, #0 + add r0, r7, #0 + bl FUN_020313CC + lsl r0, r0, #2 + add r0, r4, r0 + ldr r0, [r0, #0x14] + add r1, r5, #0 + mov r2, #8 + bl FUN_02021EF0 + ldr r1, [sp, #0x14] + ldr r3, [r4, #0x24] + add r0, r5, #0 + add r2, r6, #0 + bl FUN_0202930C + add r6, r0, #0 + add r0, r5, #0 + bl FUN_02016A18 + b _0221493A +_02214808: + mov r0, #1 + add r7, r5, #0 + eor r7, r0 + mov r0, #0x34 + ldr r1, [r4] + mul r0, r7 + add r0, r1, r0 + add r0, #0x29 + ldrb r0, [r0] + bl FUN_0206AE00 + str r0, [sp, #0x18] + ldr r0, [r4, #0x24] + mov r1, #0x10 + bl FUN_02016998 + add r5, r0, #0 + add r0, r7, #0 + bl FUN_020313CC + lsl r0, r0, #2 + add r0, r4, r0 + ldr r0, [r0, #0x14] + add r1, r5, #0 + mov r2, #8 + bl FUN_02021EF0 + ldr r1, [sp, #0x18] + ldr r3, [r4, #0x24] + add r0, r5, #0 + add r2, r6, #0 + bl FUN_0202934C + add r6, r0, #0 + add r0, r5, #0 + bl FUN_02016A18 + b _0221493A +_02214854: + mov r0, #1 + add r7, r5, #0 + eor r7, r0 + mov r0, #0x34 + ldr r1, [r4] + mul r0, r7 + add r0, r1, r0 + add r0, #0x29 + ldrb r0, [r0] + bl FUN_0206AE00 + str r0, [sp, #0x1c] + ldr r0, [r4, #0x24] + mov r1, #0x10 + bl FUN_02016998 + add r5, r0, #0 + add r0, r7, #0 + bl FUN_020313CC + lsl r0, r0, #2 + add r0, r4, r0 + ldr r0, [r0, #0x14] + add r1, r5, #0 + mov r2, #8 + bl FUN_02021EF0 + ldr r1, [sp, #0x1c] + ldr r3, [r4, #0x24] + add r0, r5, #0 + add r2, r6, #0 + bl FUN_020293EC + add r6, r0, #0 + add r0, r5, #0 + bl FUN_02016A18 + b _0221493A +_022148A0: + ldr r0, [r4, #0x24] + mov r1, #0x10 + bl FUN_02016998 + add r5, r0, #0 + ldr r0, [r4, #0x24] + mov r1, #0x10 + bl FUN_02016998 + add r7, r0, #0 + bl FUN_02212BD4 + cmp r0, #1 + ldr r0, [r4] + bne _022148EA + add r0, #0x5d + ldrb r0, [r0] + bl FUN_0206AE00 + str r0, [sp, #8] + ldr r0, [r4] + add r0, #0xc5 + ldrb r0, [r0] + bl FUN_0206AE00 + str r0, [sp, #0xc] + ldr r0, [r4, #0x18] + add r1, r5, #0 + mov r2, #8 + bl FUN_02021EF0 + ldr r0, [r4, #0x20] + add r1, r7, #0 + mov r2, #8 + bl FUN_02021EF0 + b _02214914 +_022148EA: + add r0, #0x29 + ldrb r0, [r0] + bl FUN_0206AE00 + str r0, [sp, #8] + ldr r0, [r4] + add r0, #0x91 + ldrb r0, [r0] + bl FUN_0206AE00 + str r0, [sp, #0xc] + ldr r0, [r4, #0x14] + add r1, r5, #0 + mov r2, #8 + bl FUN_02021EF0 + ldr r0, [r4, #0x1c] + add r1, r7, #0 + mov r2, #8 + bl FUN_02021EF0 +_02214914: + str r6, [sp] + ldr r0, [r4, #0x24] + add r1, r7, #0 + str r0, [sp, #4] + ldr r2, [sp, #8] + ldr r3, [sp, #0xc] + add r0, r5, #0 + bl FUN_0202938C + add r6, r0, #0 + add r0, r5, #0 + bl FUN_02016A18 + add r0, r7, #0 + bl FUN_02016A18 + b _0221493A +_02214936: + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} +_0221493A: + mov r0, #0x52 + ldr r1, [r4] + lsl r0, r0, #2 + ldr r0, [r1, r0] + add r1, r6, #0 + mov r2, #4 + bl FUN_02028AD4 +_0221494A: + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} + .balign 4, 0 + + .section .data + ; 0x02214950 + .incbin "baserom.nds", 0x186EF0, 0x7F0 |