summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--arm9/arm9.lcf63
-rw-r--r--arm9/global.inc27
-rw-r--r--arm9/modules/00/asm/module_00_dummy.s2
-rw-r--r--arm9/modules/02/asm/module_02_dummy.s2
-rw-r--r--arm9/modules/03/asm/module_03_dummy.s4
-rw-r--r--arm9/modules/07/asm/module_07.s5275
7 files changed, 5368 insertions, 9 deletions
diff --git a/.gitignore b/.gitignore
index 16413467..9db5da34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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