summaryrefslogtreecommitdiff
path: root/arm9/modules/04/asm/mod04_021DEB90.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/modules/04/asm/mod04_021DEB90.s')
-rw-r--r--arm9/modules/04/asm/mod04_021DEB90.s2044
1 files changed, 2044 insertions, 0 deletions
diff --git a/arm9/modules/04/asm/mod04_021DEB90.s b/arm9/modules/04/asm/mod04_021DEB90.s
new file mode 100644
index 00000000..f0917879
--- /dev/null
+++ b/arm9/modules/04/asm/mod04_021DEB90.s
@@ -0,0 +1,2044 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ arm_func_start MOD04_021DEB90
+MOD04_021DEB90: ; 0x021DEB90
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ bl MOD04_021FD43C
+ bl MOD04_021EFB28
+ ldr r2, _021DEBCC ; =UNK04_02210540
+ ldr r1, _021DEBD0 ; =0xFFFE8515
+ str r0, [r2]
+ mov r0, #9
+ bl MOD04_021DD6B0
+ ldr r0, _021DEBD4 ; =UNK04_0221053C
+ mov r1, #0
+ ldr r0, [r0]
+ str r1, [r0]
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021DEBCC: .word UNK04_02210540
+_021DEBD0: .word 0xFFFE8515
+_021DEBD4: .word UNK04_0221053C
+ arm_func_end MOD04_021DEB90
+
+ arm_func_start MOD04_021DEBD8
+MOD04_021DEBD8: ; 0x021DEBD8
+ ldr ip, _021DEBE0 ; =MOD04_021EAC1C
+ bx ip
+ .align 2, 0
+_021DEBE0: .word MOD04_021EAC1C
+ arm_func_end MOD04_021DEBD8
+
+ arm_func_start MOD04_021DEBE4
+MOD04_021DEBE4: ; 0x021DEBE4
+ stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
+ sub sp, sp, #0xc
+ mov r7, #0
+ mov fp, r0
+ mov sb, r1
+ mov sl, r7
+ bl MOD04_021E852C
+ cmp r0, #0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ cmp sb, #4
+ addls pc, pc, sb, lsl #2
+ b _021DEC48
+_021DEC18: ; jump table
+ b _021DEC2C ; case 0
+ b _021DEC2C ; case 1
+ b _021DEC34 ; case 2
+ b _021DEC34 ; case 3
+ b _021DEC40 ; case 4
+_021DEC2C:
+ mov r4, r7
+ b _021DEC48
+_021DEC34:
+ mov r4, #6
+ ldr r6, _021DEF4C ; =0xFFFFE250
+ b _021DEC48
+_021DEC40:
+ ldr r6, _021DEF50 ; =0xFFFFE24F
+ mov r4, #9
+_021DEC48:
+ cmp r4, #0
+ bne _021DED00
+ mov r0, fp
+ bl MOD04_021FD3C4
+ movs r7, r0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ ldrb r8, [r7, #1]
+ ldr r1, [r0]
+ mov r5, #1
+ mov r0, r5,lsl r8
+ ldr r1, [r1, #0x644]
+ ands r0, r1, r0
+ mov r0, r8
+ moveq r5, #0
+ bl MOD04_021EA9D8
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldrb r0, [r1, #0x369]
+ cmp r0, #2
+ bne _021DECA8
+ cmp sb, #0
+ beq _021DECBC
+_021DECA8:
+ ldrb r0, [r1, #0x369]
+ cmp r0, #3
+ bne _021DECC0
+ cmp r8, #0
+ bne _021DECC0
+_021DECBC:
+ mov sl, #1
+_021DECC0:
+ mov r0, r8
+ bl MOD04_021DF56C
+ ldr r1, _021DEF54 ; =UNK04_0221053C
+ ldrb r7, [r7]
+ ldr r2, _021DEF58 ; =UNK04_02210544
+ mov fp, #0
+ ldr r3, [r1]
+ str fp, [r2, r7, lsl #2]
+ ldrb r2, [r3, #0x361]
+ mov r7, r0
+ sub r0, r2, #1
+ strb r0, [r3, #0x361]
+ ldr r1, [r1]
+ ldrb r0, [r1, #0x368]
+ sub r0, r0, #1
+ strb r0, [r1, #0x368]
+_021DED00:
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldrb r0, [r1, #0x2d]
+ cmp r0, #0
+ bne _021DED58
+ ldr r0, [r1, #0x24]
+ cmp r0, #6
+ bne _021DED58
+ cmp r5, #0
+ bne _021DED58
+ ldrb r0, [r1, #0x369]
+ cmp r0, #2
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ cmp r4, #0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ bl MOD04_021E85D4
+ mov r0, r7
+ bl MOD04_021E8A50
+ add sp, sp, #0xc
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021DED58:
+ mov r0, r4
+ mov r1, r6
+ mov r2, r7
+ bl MOD04_021E8A74
+ cmp r0, #0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ cmp r4, #0
+ beq _021DED90
+ mov r0, r4
+ mov r1, r6
+ bl MOD04_021DD6B0
+ add sp, sp, #0xc
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021DED90:
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldrb r0, [r1, #0x2d]
+ cmp r0, #0
+ bne _021DEE04
+ ldrb r0, [r1, #0x369]
+ cmp r0, #2
+ beq _021DEDBC
+ ldrb r0, [r1, #0x369]
+ cmp r0, #3
+ bne _021DEE04
+_021DEDBC:
+ ldr r2, _021DEF54 ; =UNK04_0221053C
+ ldr r1, [r2]
+ ldrb r0, [r1, #0x361]
+ add r6, r0, #2
+ add r3, r1, r6, lsl #2
+ ldr r3, [r3, #0x448]
+ cmp r3, #0
+ beq _021DEE04
+ add r3, r1, r6
+ ldrb r3, [r3, #0x624]
+ add r0, r0, #1
+ add r0, r1, r0
+ strb r3, [r0, #0x624]
+ ldr r0, [r2]
+ ldrb r1, [r0, #0x361]
+ add r0, r1, #1
+ add r1, r1, #3
+ bl MOD04_021E8830
+_021DEE04:
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldrb r0, [r1, #0x369]
+ cmp r0, #2
+ bne _021DEE4C
+ ldrb r0, [r1, #0x2d]
+ cmp r0, #0
+ bne _021DEE2C
+ bl MOD04_021E85D4
+ b _021DEE68
+_021DEE2C:
+ ldrb r0, [r1, #0x361]
+ cmp r0, #0
+ bne _021DEE68
+ ldr r1, _021DEF5C ; =UNK04_0220D334
+ mov r0, #1
+ mov r2, #0
+ bl MOD04_021E1E30
+ b _021DEE68
+_021DEE4C:
+ ldrb r0, [r1, #0x361]
+ cmp r0, #0
+ bne _021DEE68
+ ldr r1, _021DEF5C ; =UNK04_0220D334
+ mov r0, #1
+ mov r2, #0
+ bl MOD04_021E1E30
+_021DEE68:
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldrb r0, [r1, #0x369]
+ cmp r0, #0
+ beq _021DEE88
+ ldrb r0, [r1, #0x369]
+ cmp r0, #1
+ bne _021DEEA4
+_021DEE88:
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ ldr r2, [r0]
+ ldrb r1, [r2, #0x368]
+ strb r1, [r2, #0x36a]
+ ldr r0, [r0]
+ ldr r0, [r0, #0x364]
+ bl MOD04_02202308
+_021DEEA4:
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ ldr r6, [r0]
+ ldr r0, [r6, #0x90]
+ cmp r0, #0
+ beq _021DEF00
+ cmp r5, #0
+ beq _021DEF00
+ cmp sb, #0
+ moveq r5, #1
+ mov r0, r7
+ movne r5, #0
+ bl MOD04_021E1F18
+ str r0, [sp]
+ ldr r1, [r6, #0x94]
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ str r1, [sp, #4]
+ ldr r1, [r0]
+ mov r0, r4
+ ldr r4, [r1, #0x90]
+ mov r1, r5
+ mov r2, sl
+ mov r3, r8
+ blx r4
+_021DEF00:
+ ldr r0, _021DEF54 ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldrb r0, [r1, #0x2d]
+ cmp r0, #0
+ bne _021DEF24
+ ldrb r0, [r1, #0x369]
+ cmp r0, #2
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+_021DEF24:
+ ldrb r0, [r1, #0x361]
+ cmp r0, #0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ bl MOD04_02200D6C
+ bl MOD04_021E8DC0
+ mov r0, #3
+ bl MOD04_021DF5CC
+ add sp, sp, #0xc
+ ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
+ .align 2, 0
+_021DEF4C: .word 0xFFFFE250
+_021DEF50: .word 0xFFFFE24F
+_021DEF54: .word UNK04_0221053C
+_021DEF58: .word UNK04_02210544
+_021DEF5C: .word UNK04_0220D334
+ arm_func_end MOD04_021DEBE4
+
+ arm_func_start MOD04_021DEF60
+MOD04_021DEF60: ; 0x021DEF60
+ ldr ip, _021DEF68 ; =MOD04_021EAC5C
+ bx ip
+ .align 2, 0
+_021DEF68: .word MOD04_021EAC5C
+ arm_func_end MOD04_021DEF60
+
+ arm_func_start MOD04_021DEF6C
+MOD04_021DEF6C: ; 0x021DEF6C
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #0xc
+ add r4, sp, #0
+ mov r3, #0
+ strb r3, [r4]
+ strb r3, [r4, #1]
+ strb r3, [r4, #2]
+ strb r3, [r4, #3]
+ strb r3, [r4, #4]
+ strb r3, [r4, #5]
+ strb r3, [r4, #6]
+ strb r3, [r4, #7]
+ strb r3, [r4, #8]
+ strb r3, [r4, #9]
+ strb r3, [r4, #0xa]
+ mov r5, r1
+ strb r3, [r4, #0xb]
+ ldr r4, [r5, #8]
+ mov r6, r0
+ bl MOD04_021E2068
+ cmp r0, #0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, pc}
+ ldr r0, _021DF0C8 ; =UNK04_0220D338
+ bl strlen
+ mov r2, r0
+ ldr r1, _021DF0C8 ; =UNK04_0220D338
+ mov r0, r4
+ bl memcmp
+ cmp r0, #0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, pc}
+ ldr r0, _021DF0C8 ; =UNK04_0220D338
+ bl strlen
+ add r4, r4, r0
+ mov r0, r4
+ mov r1, #0x76
+ bl strchr
+ sub r7, r0, r4
+ add r0, sp, #0
+ mov r1, r4
+ mov r2, r7
+ bl strncpy
+ cmp r7, #0xa
+ addhi sp, sp, #0xc
+ ldmhiia sp!, {r4, r5, r6, r7, pc}
+ add r0, sp, #0
+ mov r1, #0
+ mov r2, #0xa
+ bl strtoul
+ cmp r0, #3
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, pc}
+ ldr r0, _021DF0CC ; =UNK04_0220D340
+ add r1, r7, #1
+ add r4, r4, r1
+ bl strlen
+ mov r2, r0
+ ldr r1, _021DF0CC ; =UNK04_0220D340
+ mov r0, r4
+ bl memcmp
+ cmp r0, #0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, pc}
+ ldr r0, _021DF0D0 ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldr r0, [r1, #0x24]
+ cmp r0, #5
+ beq _021DF0A8
+ cmp r0, #6
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, pc}
+ ldrb r0, [r1, #0x369]
+ cmp r0, #2
+ beq _021DF0A8
+ ldrb r0, [r1, #0x369]
+ cmp r0, #3
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, pc}
+_021DF0A8:
+ ldr r0, _021DF0CC ; =UNK04_0220D340
+ bl strlen
+ add r2, r4, r0
+ ldr r1, [r5]
+ mov r0, r6
+ bl MOD04_021E8EF4
+ add sp, sp, #0xc
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_021DF0C8: .word UNK04_0220D338
+_021DF0CC: .word UNK04_0220D340
+_021DF0D0: .word UNK04_0221053C
+ arm_func_end MOD04_021DEF6C
+
+ arm_func_start MOD04_021DF0D4
+MOD04_021DF0D4: ; 0x021DF0D4
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, [r1, #4]
+ ldr r0, _021DF120 ; =0x00000603
+ cmp r1, r0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ ldr r0, _021DF124 ; =0x00000901
+ cmp r1, r0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ ldr r0, _021DF128 ; =0x00000B01
+ cmp r1, r0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ mov r0, #3
+ bl MOD04_021DF414
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021DF120: .word 0x00000603
+_021DF124: .word 0x00000901
+_021DF128: .word 0x00000B01
+ arm_func_end MOD04_021DF0D4
+
+ arm_func_start MOD04_021DF12C
+MOD04_021DF12C: ; 0x021DF12C
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #0xc
+ movs r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bne _021DF174
+ cmp r6, #0
+ beq _021DF174
+ ldr r0, _021DF2AC ; =UNK04_0221053C
+ ldr r0, [r0]
+ ldr r0, [r0, #0x4f4]
+ cmp r0, #0
+ bne _021DF1D8
+ bl MOD04_021E8DC0
+ mov r0, #3
+ bl MOD04_021DF5CC
+ b _021DF1D8
+_021DF174:
+ cmp r7, #0
+ bne _021DF1D8
+ mov r0, #6
+ bl MOD04_021DF5CC
+ ldr r1, _021DF2AC ; =UNK04_0221053C
+ mov r0, #0
+ ldr r3, [r1]
+ ldrb r1, [r3, #0x361]
+ cmp r1, #0
+ blt _021DF1D8
+ ldr r2, [r3, #0x64]
+_021DF1A0:
+ add r1, r3, r0, lsl #2
+ ldr r1, [r1, #0x448]
+ cmp r2, r1
+ bne _021DF1C8
+ ldr r1, _021DF2AC ; =UNK04_0221053C
+ ldr r1, [r1]
+ add r0, r1, r0
+ ldrb r0, [r0, #0x624]
+ strb r0, [r1, #0x2c]
+ b _021DF1D8
+_021DF1C8:
+ ldrb r1, [r3, #0x361]
+ add r0, r0, #1
+ cmp r0, r1
+ ble _021DF1A0
+_021DF1D8:
+ ldr r1, _021DF2AC ; =UNK04_0221053C
+ ldr r0, _021DF2B0 ; =0x00000624
+ ldr r2, [r1]
+ ldrb r1, [r2, #0x361]
+ add r0, r2, r0
+ add r1, r1, #1
+ bl MOD04_021DF530
+ ldr r1, _021DF2AC ; =UNK04_0221053C
+ ldr r1, [r1]
+ str r0, [r1, #0x644]
+ bl MOD04_021E8780
+ ldr r0, _021DF2AC ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldrb r0, [r1, #0x369]
+ cmp r0, #2
+ beq _021DF224
+ ldrb r0, [r1, #0x369]
+ cmp r0, #3
+ bne _021DF258
+_021DF224:
+ ldr r0, _021DF2AC ; =UNK04_0221053C
+ ldr r1, [sp, #0x20]
+ ldr r3, [r0]
+ mov r0, r7
+ str r1, [sp]
+ ldr r2, [r3, #0x8c]
+ mov r1, r6
+ str r2, [sp, #4]
+ ldr r6, [r3, #0x88]
+ mov r2, r5
+ mov r3, r4
+ blx r6
+ b _021DF26C
+_021DF258:
+ ldr r2, [r1, #0x84]
+ ldr r3, [r1, #0x80]
+ mov r0, r7
+ mov r1, r6
+ blx r3
+_021DF26C:
+ cmp r7, #0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ ldr r0, _021DF2AC ; =UNK04_0221053C
+ ldr r0, [r0]
+ cmp r0, #0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4, r5, r6, r7, pc}
+ ldr r0, [r0, #0x24]
+ cmp r0, #5
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4, r5, r6, r7, pc}
+ mov r0, #3
+ bl MOD04_021DF5CC
+ add sp, sp, #0xc
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_021DF2AC: .word UNK04_0221053C
+_021DF2B0: .word 0x00000624
+ arm_func_end MOD04_021DF12C
+
+ arm_func_start MOD04_021DF2B4
+MOD04_021DF2B4: ; 0x021DF2B4
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ ldr r2, _021DF300 ; =UNK04_0221053C
+ mov r5, r0
+ ldr r0, [r2]
+ mov r4, r1
+ ldr r0, [r0, #0x28]
+ cmp r0, #4
+ beq _021DF2DC
+ bl MOD04_021DF5CC
+_021DF2DC:
+ ldr r1, _021DF300 ; =UNK04_0221053C
+ mov r0, r5
+ ldr r3, [r1]
+ mov r1, r4
+ ldr r2, [r3, #0x7c]
+ ldr r3, [r3, #0x78]
+ blx r3
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_021DF300: .word UNK04_0221053C
+ arm_func_end MOD04_021DF2B4
+
+ arm_func_start MOD04_021DF304
+MOD04_021DF304: ; 0x021DF304
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ movs r5, r0
+ mov r4, r1
+ bne _021DF334
+ ldr r1, _021DF36C ; =UNK04_0221053C
+ mov r0, #3
+ ldr r1, [r1]
+ str r4, [r1, #0x64]
+ bl MOD04_021DF5CC
+ bl MOD04_021E1ED4
+ b _021DF33C
+_021DF334:
+ mov r0, #0
+ bl MOD04_021DF5CC
+_021DF33C:
+ ldr r0, _021DF36C ; =UNK04_0221053C
+ ldr r0, [r0]
+ ldr r3, [r0, #0x70]
+ cmp r3, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {r4, r5, pc}
+ ldr r2, [r0, #0x74]
+ mov r0, r5
+ mov r1, r4
+ blx r3
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, pc}
+ .align 2, 0
+_021DF36C: .word UNK04_0221053C
+ arm_func_end MOD04_021DF304
+
+ arm_func_start MOD04_021DF370
+MOD04_021DF370: ; 0x021DF370
+ stmdb sp!, {r4, lr}
+ movs r4, r0
+ moveq r0, #0
+ ldmeqia sp!, {r4, pc}
+ cmp r4, #7
+ addls pc, pc, r4, lsl #2
+ b _021DF3F4
+_021DF38C: ; jump table
+ b _021DF3F4 ; case 0
+ b _021DF3AC ; case 1
+ b _021DF3B8 ; case 2
+ b _021DF3C8 ; case 3
+ b _021DF3D4 ; case 4
+ b _021DF3B8 ; case 5
+ b _021DF3E0 ; case 6
+ b _021DF3EC ; case 7
+_021DF3AC:
+ mov r0, #9
+ mvn r2, #0
+ b _021DF3F4
+_021DF3B8:
+ mov r0, #0
+ mov r2, r0
+ mov r4, r0
+ b _021DF3F4
+_021DF3C8:
+ mov r0, #6
+ mvn r2, #9
+ b _021DF3F4
+_021DF3D4:
+ mov r0, #6
+ mvn r2, #0x1d
+ b _021DF3F4
+_021DF3E0:
+ mov r0, #6
+ mvn r2, #0x45
+ b _021DF3F4
+_021DF3EC:
+ mov r0, #6
+ mvn r2, #0x4f
+_021DF3F4:
+ cmp r0, #0
+ beq _021DF408
+ ldr r1, _021DF410 ; =0xFFFEFA48
+ add r1, r2, r1
+ bl MOD04_021E0EAC
+_021DF408:
+ mov r0, r4
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021DF410: .word 0xFFFEFA48
+ arm_func_end MOD04_021DF370
+
+ arm_func_start MOD04_021DF414
+MOD04_021DF414: ; 0x021DF414
+ stmdb sp!, {r4, r5, r6, lr}
+ movs r6, r0
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, pc}
+ cmp r6, #4
+ addls pc, pc, r6, lsl #2
+ b _021DF470
+_021DF430: ; jump table
+ b _021DF470 ; case 0
+ b _021DF444 ; case 1
+ b _021DF450 ; case 2
+ b _021DF45C ; case 3
+ b _021DF468 ; case 4
+_021DF444:
+ mov r4, #9
+ mvn r5, #0
+ b _021DF470
+_021DF450:
+ mov r4, #9
+ mvn r5, #1
+ b _021DF470
+_021DF45C:
+ mov r4, #6
+ mvn r5, #9
+ b _021DF470
+_021DF468:
+ mov r4, #6
+ mvn r5, #0x13
+_021DF470:
+ ldr r0, _021DF51C ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldr r0, [r1, #0x24]
+ cmp r0, #5
+ addls pc, pc, r0, lsl #2
+ b _021DF500
+_021DF488: ; jump table
+ b _021DF500 ; case 0
+ b _021DF4A0 ; case 1
+ b _021DF4B8 ; case 2
+ b _021DF500 ; case 3
+ b _021DF4F4 ; case 4
+ b _021DF4DC ; case 5
+_021DF4A0:
+ ldr r1, _021DF520 ; =0xFFFF11B8
+ mov r0, r4
+ add r5, r5, r1
+ mov r1, r5
+ bl MOD04_021E0EAC
+ b _021DF508
+_021DF4B8:
+ ldr r1, [r1, #0x9c]
+ ldr r0, _021DF520 ; =0xFFFF11B8
+ cmp r1, #1
+ add r5, r5, r0
+ bge _021DF508
+ mov r0, r4
+ mov r1, r5
+ bl MOD04_021E0EAC
+ b _021DF508
+_021DF4DC:
+ ldr r1, _021DF524 ; =0xFFFEC398
+ mov r0, r4
+ add r5, r5, r1
+ mov r1, r5
+ bl MOD04_021E8E08
+ b _021DF508
+_021DF4F4:
+ ldr r0, _021DF528 ; =0xFFFEEAA8
+ add r5, r5, r0
+ b _021DF508
+_021DF500:
+ ldr r0, _021DF52C ; =0xFFFE9C88
+ add r5, r5, r0
+_021DF508:
+ mov r0, r4
+ mov r1, r5
+ bl MOD04_021E2114
+ mov r0, r6
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021DF51C: .word UNK04_0221053C
+_021DF520: .word 0xFFFF11B8
+_021DF524: .word 0xFFFEC398
+_021DF528: .word 0xFFFEEAA8
+_021DF52C: .word 0xFFFE9C88
+ arm_func_end MOD04_021DF414
+
+ arm_func_start MOD04_021DF530
+MOD04_021DF530: ; 0x021DF530
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ mov lr, #0
+ mov ip, lr
+ cmp r1, #0
+ ble _021DF560
+ mov r3, #1
+_021DF54C:
+ ldrb r2, [r0, ip]
+ add ip, ip, #1
+ cmp ip, r1
+ orr lr, lr, r3, lsl r2
+ blt _021DF54C
+_021DF560:
+ mov r0, lr
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ arm_func_end MOD04_021DF530
+
+ arm_func_start MOD04_021DF56C
+MOD04_021DF56C: ; 0x021DF56C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl MOD04_021E874C
+ mov r1, r0
+ cmp r1, #0
+ mov r0, #0
+ ble _021DF5B0
+ ldr r3, [sp]
+_021DF594:
+ ldrb r2, [r3]
+ cmp r4, r2
+ beq _021DF5B0
+ add r0, r0, #1
+ cmp r0, r1
+ add r3, r3, #1
+ blt _021DF594
+_021DF5B0:
+ cmp r0, r1
+ addeq sp, sp, #8
+ moveq r0, #0
+ ldmeqia sp!, {r4, pc}
+ bl MOD04_021E8830
+ add sp, sp, #8
+ ldmia sp!, {r4, pc}
+ arm_func_end MOD04_021DF56C
+
+ arm_func_start MOD04_021DF5CC
+MOD04_021DF5CC: ; 0x021DF5CC
+ ldr r1, _021DF5E8 ; =UNK04_0221053C
+ ldr r3, [r1]
+ ldr r2, [r3, #0x24]
+ str r2, [r3, #0x28]
+ ldr r1, [r1]
+ str r0, [r1, #0x24]
+ bx lr
+ .align 2, 0
+_021DF5E8: .word UNK04_0221053C
+ arm_func_end MOD04_021DF5CC
+
+ arm_func_start MOD04_021DF5EC
+MOD04_021DF5EC: ; 0x021DF5EC
+ bx lr
+ arm_func_end MOD04_021DF5EC
+
+ arm_func_start MOD04_021DF5F0
+MOD04_021DF5F0: ; 0x021DF5F0
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, #0
+ ldr r4, _021DF634 ; =UNK04_02210544
+_021DF600:
+ ldr r0, [r4, r5, lsl #2]
+ cmp r0, #0
+ beq _021DF620
+ bl MOD04_021FD3C4
+ ldrb r0, [r0, #1]
+ cmp r6, r0
+ moveq r0, #1
+ ldmeqia sp!, {r4, r5, r6, pc}
+_021DF620:
+ add r5, r5, #1
+ cmp r5, #0x20
+ blt _021DF600
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021DF634: .word UNK04_02210544
+ arm_func_end MOD04_021DF5F0
+
+ arm_func_start MOD04_021DF638
+MOD04_021DF638: ; 0x021DF638
+ ldr r1, _021DF644 ; =UNK04_022105C4
+ add r0, r1, r0, lsl #3
+ bx lr
+ .align 2, 0
+_021DF644: .word UNK04_022105C4
+ arm_func_end MOD04_021DF638
+
+ arm_func_start MOD04_021DF648
+MOD04_021DF648: ; 0x021DF648
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ cmp r1, #0
+ mov ip, #0
+ ble _021DF684
+ ldr r2, _021DF6B8 ; =UNK04_0221053C
+ ldr r3, [r2]
+_021DF664:
+ add r2, r3, ip, lsl #2
+ ldr r2, [r2, #0x448]
+ cmp r0, r2
+ beq _021DF684
+ add r2, ip, #1
+ and ip, r2, #0xff
+ cmp ip, r1
+ blt _021DF664
+_021DF684:
+ cmp ip, r1
+ addge sp, sp, #4
+ movge r0, #0
+ ldmgeia sp!, {pc}
+ ldr r0, _021DF6B8 ; =UNK04_0221053C
+ ldr r0, [r0]
+ add r0, r0, ip
+ ldrb r0, [r0, #0x624]
+ bl MOD04_021DF760
+ bl MOD04_021DF730
+ bl MOD04_021DF6BC
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021DF6B8: .word UNK04_0221053C
+ arm_func_end MOD04_021DF648
+
+ arm_func_start MOD04_021DF6BC
+MOD04_021DF6BC: ; 0x021DF6BC
+ ldr r1, _021DF6C8 ; =UNK04_02210544
+ add r0, r1, r0, lsl #2
+ bx lr
+ .align 2, 0
+_021DF6C8: .word UNK04_02210544
+ arm_func_end MOD04_021DF6BC
+
+ arm_func_start MOD04_021DF6CC
+MOD04_021DF6CC: ; 0x021DF6CC
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _021DF6FC ; =UNK04_02210544
+ mov r0, #0
+ mov r2, #0x80
+ bl MIi_CpuClear32
+ ldr r1, _021DF700 ; =UNK04_022105C4
+ mov r0, #0
+ mov r2, #0x100
+ bl MIi_CpuClear32
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021DF6FC: .word UNK04_02210544
+_021DF700: .word UNK04_022105C4
+ arm_func_end MOD04_021DF6CC
+
+ arm_func_start MOD04_021DF704
+MOD04_021DF704: ; 0x021DF704
+ ldr r2, _021DF72C ; =UNK04_02210544
+ mov r0, #0
+_021DF70C:
+ ldr r1, [r2, r0, lsl #2]
+ cmp r1, #0
+ bxeq lr
+ add r0, r0, #1
+ cmp r0, #0x20
+ blt _021DF70C
+ mvn r0, #0
+ bx lr
+ .align 2, 0
+_021DF72C: .word UNK04_02210544
+ arm_func_end MOD04_021DF704
+
+ arm_func_start MOD04_021DF730
+MOD04_021DF730: ; 0x021DF730
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ bl MOD04_021FD3C4
+ ldrb r0, [r0]
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ arm_func_end MOD04_021DF730
+
+ arm_func_start MOD04_021DF748
+MOD04_021DF748: ; 0x021DF748
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ bl MOD04_021FD3C4
+ ldrb r0, [r0, #1]
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ arm_func_end MOD04_021DF748
+
+ arm_func_start MOD04_021DF760
+MOD04_021DF760: ; 0x021DF760
+ stmdb sp!, {r4, r5, r6, lr}
+ ldr r1, _021DF7BC ; =UNK04_0221053C
+ mov r6, r0
+ ldr r0, [r1]
+ cmp r0, #0
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, pc}
+ ldr r4, _021DF7C0 ; =UNK04_02210544
+ mov r5, #0
+_021DF784:
+ ldr r0, [r4, r5, lsl #2]
+ cmp r0, #0
+ beq _021DF7A8
+ bl MOD04_021FD3C4
+ ldrb r0, [r0, #1]
+ cmp r6, r0
+ ldreq r0, _021DF7C0 ; =UNK04_02210544
+ ldreq r0, [r0, r5, lsl #2]
+ ldmeqia sp!, {r4, r5, r6, pc}
+_021DF7A8:
+ add r5, r5, #1
+ cmp r5, #0x20
+ blt _021DF784
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021DF7BC: .word UNK04_0221053C
+_021DF7C0: .word UNK04_02210544
+ arm_func_end MOD04_021DF760
+
+ arm_func_start MOD04_021DF7C4
+MOD04_021DF7C4: ; 0x021DF7C4
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ ldr r0, _021DF87C ; =UNK04_0221053C
+ ldr r0, [r0]
+ ldr r0, [r0]
+ cmp r0, #0
+ addne sp, sp, #8
+ movne r0, #0
+ ldmneia sp!, {r4, pc}
+ mov r0, #0x4000
+ bl MOD04_021DE8C8
+ add r0, r0, #0xc000
+ mov r1, r0, lsl #0x10
+ ldr r3, _021DF87C ; =UNK04_0221053C
+ mov r0, #0
+ mov r2, r0
+ mov r1, r1, lsr #0x10
+ ldr r4, [r3]
+ bl MOD04_021FFEB0
+ ldr r1, _021DF880 ; =MOD04_021DEB90
+ ldr r2, _021DF87C ; =UNK04_0221053C
+ str r1, [sp]
+ mov r1, r0
+ ldr r0, [r2]
+ ldr r2, [r4, #0x14]
+ ldr r3, [r4, #0x18]
+ bl MOD04_021FD71C
+ mov r4, r0
+ bl MOD04_021DF370
+ cmp r0, #0
+ addne sp, sp, #8
+ movne r0, r4
+ ldmneia sp!, {r4, pc}
+ ldr r0, _021DF87C ; =UNK04_0221053C
+ ldr r1, _021DF884 ; =MOD04_021E9204
+ ldr r0, [r0]
+ ldr r0, [r0]
+ bl MOD04_021FD6C8
+ ldr r0, _021DF87C ; =UNK04_0221053C
+ ldr r1, _021DF888 ; =MOD04_021E9464
+ ldr r0, [r0]
+ ldr r0, [r0]
+ bl MOD04_021FD434
+ mov r0, r4
+ add sp, sp, #8
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021DF87C: .word UNK04_0221053C
+_021DF880: .word MOD04_021DEB90
+_021DF884: .word MOD04_021E9204
+_021DF888: .word MOD04_021E9464
+ arm_func_end MOD04_021DF7C4
+
+ arm_func_start MOD04_021DF88C
+MOD04_021DF88C: ; 0x021DF88C
+ ldr r0, _021DF8A4 ; =UNK04_0221053C
+ ldr r0, [r0]
+ cmp r0, #0
+ ldrne r0, [r0, #0x24]
+ moveq r0, #0
+ bx lr
+ .align 2, 0
+_021DF8A4: .word UNK04_0221053C
+ arm_func_end MOD04_021DF88C
+
+ arm_func_start MOD04_021DF8A8
+MOD04_021DF8A8: ; 0x021DF8A8
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _021DF8F0 ; =UNK04_0221053C
+ ldr r2, [r1]
+ cmp r2, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {pc}
+ mov r1, #1
+ mov r1, r1,lsl r0
+ ldr r2, [r2, #0x644]
+ ands r1, r2, r1
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {pc}
+ bl MOD04_021DF5F0
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021DF8F0: .word UNK04_0221053C
+ arm_func_end MOD04_021DF8A8
+
+ arm_func_start MOD04_021DF8F4
+MOD04_021DF8F4: ; 0x021DF8F4
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r2, _021DF954 ; =UNK04_0221053C
+ ldr r3, [r2]
+ cmp r3, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {pc}
+ ldr r1, _021DF958 ; =0x00000624
+ add r1, r3, r1
+ str r1, [r0]
+ ldr r2, [r2]
+ ldrb r1, [r2, #0x369]
+ cmp r1, #2
+ beq _021DF93C
+ ldrb r1, [r2, #0x369]
+ cmp r1, #3
+ bne _021DF948
+_021DF93C:
+ bl MOD04_021E86A4
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+_021DF948:
+ bl MOD04_021E874C
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021DF954: .word UNK04_0221053C
+_021DF958: .word 0x00000624
+ arm_func_end MOD04_021DF8F4
+
+ arm_func_start MOD04_021DF95C
+MOD04_021DF95C: ; 0x021DF95C
+ ldr r0, _021DF974 ; =UNK04_0221053C
+ ldr r0, [r0]
+ cmp r0, #0
+ ldrneb r0, [r0, #0x2c]
+ moveq r0, #0
+ bx lr
+ .align 2, 0
+_021DF974: .word UNK04_0221053C
+ arm_func_end MOD04_021DF95C
+
+ arm_func_start MOD04_021DF978
+MOD04_021DF978: ; 0x021DF978
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _021DF9D0 ; =UNK04_0221053C
+ ldr r1, [r0]
+ cmp r1, #0
+ addeq sp, sp, #4
+ moveq r0, #0
+ ldmeqia sp!, {pc}
+ ldrb r0, [r1, #0x369]
+ cmp r0, #2
+ beq _021DF9B0
+ ldrb r0, [r1, #0x369]
+ cmp r0, #3
+ bne _021DF9C0
+_021DF9B0:
+ bl MOD04_021E87D8
+ add sp, sp, #4
+ add r0, r0, #1
+ ldmfd sp!, {pc}
+_021DF9C0:
+ bl MOD04_021E8804
+ add r0, r0, #1
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021DF9D0: .word UNK04_0221053C
+ arm_func_end MOD04_021DF978
+
+ arm_func_start MOD04_021DF9D4
+MOD04_021DF9D4: ; 0x021DF9D4
+ stmdb sp!, {r4, lr}
+ ldr r1, _021DFA3C ; =UNK04_0221053C
+ mov r4, r0
+ ldr r0, [r1]
+ cmp r0, #0
+ beq _021DFA14
+ bl MOD04_021DD6D4
+ cmp r0, #0
+ bne _021DFA14
+ ldr r0, _021DFA3C ; =UNK04_0221053C
+ ldr r0, [r0]
+ ldr r0, [r0, #0x24]
+ cmp r0, #5
+ beq _021DFA1C
+ cmp r0, #6
+ beq _021DFA1C
+_021DFA14:
+ mvn r0, #0
+ ldmia sp!, {r4, pc}
+_021DFA1C:
+ mov r0, r4
+ bl MOD04_021DF760
+ cmp r0, #0
+ mvneq r0, #1
+ ldmeqia sp!, {r4, pc}
+ bl MOD04_021FD488
+ mov r0, #0
+ ldmia sp!, {r4, pc}
+ .align 2, 0
+_021DFA3C: .word UNK04_0221053C
+ arm_func_end MOD04_021DF9D4
+
+ arm_func_start MOD04_021DFA40
+MOD04_021DFA40: ; 0x021DFA40
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _021DFAF0 ; =UNK04_0221053C
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _021DFA80
+ bl MOD04_021DD6D4
+ cmp r0, #0
+ bne _021DFA80
+ ldr r0, _021DFAF0 ; =UNK04_0221053C
+ ldr r2, [r0]
+ ldr r0, [r2, #0x24]
+ cmp r0, #5
+ beq _021DFA8C
+ cmp r0, #6
+ beq _021DFA8C
+_021DFA80:
+ add sp, sp, #4
+ mvn r0, #0
+ ldmfd sp!, {pc}
+_021DFA8C:
+ ldrb r0, [r2, #0x361]
+ cmp r0, #0
+ bne _021DFAC0
+ ldr r1, _021DFAF4 ; =UNK04_0220D334
+ mov r0, #1
+ mov r2, #0
+ bl MOD04_021E1E30
+ bl MOD04_02200D6C
+ mov r0, #3
+ bl MOD04_021DF5CC
+ add sp, sp, #4
+ mov r0, #1
+ ldmfd sp!, {pc}
+_021DFAC0:
+ mov r1, #1
+ ldr r0, _021DFAF0 ; =UNK04_0221053C
+ strb r1, [r2, #0x2d]
+ ldr r0, [r0]
+ ldr r0, [r0]
+ bl MOD04_021FD45C
+ ldr r1, _021DFAF0 ; =UNK04_0221053C
+ mov r0, #0
+ ldr r1, [r1]
+ strb r0, [r1, #0x2d]
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021DFAF0: .word UNK04_0221053C
+_021DFAF4: .word UNK04_0220D334
+ arm_func_end MOD04_021DFA40
+
+ arm_func_start MOD04_021DFAF8
+MOD04_021DFAF8: ; 0x021DFAF8
+ ldr r2, _021DFB1C ; =UNK04_0221053C
+ ldr r3, [r2]
+ cmp r3, #0
+ moveq r0, #0
+ strne r0, [r3, #0x90]
+ ldrne r2, [r2]
+ movne r0, #1
+ strne r1, [r2, #0x94]
+ bx lr
+ .align 2, 0
+_021DFB1C: .word UNK04_0221053C
+ arm_func_end MOD04_021DFAF8
+
+ arm_func_start MOD04_021DFB20
+MOD04_021DFB20: ; 0x021DFB20
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #0x224
+ mvn ip, #0
+ mov r7, r0
+ mov r6, r1
+ mov r4, r2
+ mov r5, r3
+ str ip, [sp, #8]
+ bl MOD04_021DD6D4
+ cmp r0, #0
+ bne _021DFB60
+ ldr r0, _021DFD04 ; =UNK04_0221053C
+ ldr r0, [r0]
+ ldr r0, [r0, #0x24]
+ cmp r0, #3
+ beq _021DFB6C
+_021DFB60:
+ add sp, sp, #0x224
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, pc}
+_021DFB6C:
+ bl MOD04_021DF6CC
+ ldr r1, _021DFD04 ; =UNK04_0221053C
+ mov r0, #5
+ ldr r2, [r1]
+ str r6, [r2, #0x88]
+ ldr r1, [r1]
+ str r4, [r1, #0x8c]
+ bl MOD04_021DF5CC
+ mov r0, r7
+ bl MOD04_021E1F84
+ movs r4, r0
+ beq _021DFBB8
+ ldr r0, _021DFD04 ; =UNK04_0221053C
+ mov r1, r4
+ ldr r0, [r0]
+ add r0, r0, #0x1c
+ bl MOD04_021F05F4
+ cmp r0, #0
+ bne _021DFBC0
+_021DFBB8:
+ mov r5, #0xb
+ b _021DFC8C
+_021DFBC0:
+ ldr r0, _021DFD04 ; =UNK04_0221053C
+ add r2, sp, #8
+ ldr r0, [r0]
+ mov r1, r4
+ add r0, r0, #0x1c
+ bl MOD04_021F0664
+ ldr r0, _021DFD04 ; =UNK04_0221053C
+ ldr r1, [sp, #8]
+ ldr r0, [r0]
+ add r2, sp, #0x10
+ add r0, r0, #0x1c
+ bl MOD04_021F06E4
+ ldr r0, [sp, #0x14]
+ cmp r0, #6
+ movne r5, #0xb
+ bne _021DFC8C
+ ldr r0, _021DFD08 ; =UNK04_0220D344
+ mov r6, #0x30
+ add r1, sp, #0xc
+ add r2, sp, #0x18
+ mov r3, #0x2f
+ strb r6, [sp, #0xc]
+ bl MOD04_021DE9F4
+ add r0, sp, #0xc
+ mov r1, #0
+ mov r2, #0xa
+ bl strtoul
+ and r6, r0, #0xff
+ ldr r0, _021DFD0C ; =UNK04_0220D348
+ add r1, sp, #0xc
+ add r2, sp, #0x18
+ mov r3, #0x2f
+ bl MOD04_021DE9F4
+ add r0, sp, #0xc
+ mov r1, #0
+ mov r2, #0xa
+ bl strtoul
+ and r0, r0, #0xff
+ cmp r0, r6
+ moveq r5, #0xd
+ beq _021DFC8C
+ ldr r6, [sp, #0x238]
+ ldr r1, _021DFD10 ; =MOD04_021DF12C
+ mov r0, r4
+ mov r3, r5
+ mov r2, #0
+ str r6, [sp]
+ bl MOD04_021E9FD0
+ add sp, sp, #0x224
+ mov r0, #1
+ ldmia sp!, {r4, r5, r6, r7, pc}
+_021DFC8C:
+ mov r0, r5
+ mov r1, #0
+ bl MOD04_021DD6B0
+ ldr r0, _021DFD04 ; =UNK04_0221053C
+ mov r1, #0
+ ldr r4, [r0]
+ mov r0, r5
+ str r1, [sp]
+ ldr r2, [r4, #0x8c]
+ mov r3, r1
+ str r2, [sp, #4]
+ ldr r4, [r4, #0x88]
+ mov r2, #1
+ blx r4
+ ldr r0, _021DFD04 ; =UNK04_0221053C
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _021DFCF8
+ ldr r0, [r0, #0x24]
+ cmp r0, #5
+ bne _021DFCF8
+ mov r0, #3
+ bl MOD04_021DF5CC
+ ldr r1, _021DFD14 ; =UNK04_0220D334
+ mov r0, #1
+ mov r2, #0
+ bl MOD04_021E1E30
+_021DFCF8:
+ mov r0, #1
+ add sp, sp, #0x224
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_021DFD04: .word UNK04_0221053C
+_021DFD08: .word UNK04_0220D344
+_021DFD0C: .word UNK04_0220D348
+_021DFD10: .word MOD04_021DF12C
+_021DFD14: .word UNK04_0220D334
+ arm_func_end MOD04_021DFB20
+
+ arm_func_start MOD04_021DFD18
+MOD04_021DFD18: ; 0x021DFD18
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl MOD04_021DD6D4
+ cmp r0, #0
+ bne _021DFD50
+ ldr r0, _021DFDB4 ; =UNK04_0221053C
+ ldr r0, [r0]
+ ldr r0, [r0, #0x24]
+ cmp r0, #3
+ beq _021DFD5C
+_021DFD50:
+ add sp, sp, #4
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, r7, pc}
+_021DFD5C:
+ bl MOD04_021DF6CC
+ ldr r1, _021DFDB4 ; =UNK04_0221053C
+ mov r2, #0
+ ldr r3, [r1]
+ mov r0, #5
+ str r6, [r3, #0x88]
+ ldr r3, [r1]
+ str r5, [r3, #0x8c]
+ ldr r1, [r1]
+ strb r2, [r1, #0x2c]
+ bl MOD04_021DF5CC
+ sub r0, r7, #1
+ ldr r5, [sp, #0x18]
+ ldr r1, _021DFDB8 ; =MOD04_021DF12C
+ mov r3, r4
+ and r0, r0, #0xff
+ mov r2, #0
+ str r5, [sp]
+ bl MOD04_021EA138
+ mov r0, #1
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, pc}
+ .align 2, 0
+_021DFDB4: .word UNK04_0221053C
+_021DFDB8: .word MOD04_021DF12C
+ arm_func_end MOD04_021DFD18
+
+ arm_func_start MOD04_021DFDBC
+MOD04_021DFDBC: ; 0x021DFDBC
+ stmdb sp!, {r4, r5, r6, lr}
+ sub sp, sp, #0x10
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl MOD04_021DD6D4
+ cmp r0, #0
+ bne _021DFDF8
+ ldr r0, _021DFE5C ; =UNK04_0221053C
+ ldr r2, [r0]
+ ldr r1, [r2, #0x24]
+ cmp r1, #3
+ blt _021DFDF8
+ cmp r1, #4
+ bne _021DFE04
+_021DFDF8:
+ add sp, sp, #0x10
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, pc}
+_021DFE04:
+ str r6, [r2, #0x78]
+ ldr r1, [r0]
+ mov r0, #4
+ str r5, [r1, #0x7c]
+ bl MOD04_021DF5CC
+ ldr r0, _021DFE5C ; =UNK04_0221053C
+ ldr r1, [sp, #0x20]
+ ldr r3, [r0]
+ ldr r0, [sp, #0x24]
+ str r4, [sp]
+ str r1, [sp, #4]
+ ldr r4, [sp, #0x28]
+ str r0, [sp, #8]
+ ldr r2, _021DFE60 ; =MOD04_021DF2B4
+ add r0, r3, #0xe0
+ add r1, r3, #0x1e0
+ mov r3, #0
+ str r4, [sp, #0xc]
+ bl MOD04_021E2174
+ mov r0, #1
+ add sp, sp, #0x10
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021DFE5C: .word UNK04_0221053C
+_021DFE60: .word MOD04_021DF2B4
+ arm_func_end MOD04_021DFDBC
+
+ arm_func_start MOD04_021DFE64
+MOD04_021DFE64: ; 0x021DFE64
+ stmdb sp!, {r4, r5, r6, lr}
+ movs r4, r0
+ mov r6, r2
+ mov r5, r3
+ moveq r0, #0
+ ldmeqia sp!, {r4, r5, r6, pc}
+ bl MOD04_021DD6D4
+ cmp r0, #0
+ bne _021DFE9C
+ ldr r0, _021DFF6C ; =UNK04_0221053C
+ ldr r2, [r0]
+ ldr r1, [r2, #0x24]
+ cmp r1, #0
+ beq _021DFEA4
+_021DFE9C:
+ mov r0, #0
+ ldmia sp!, {r4, r5, r6, pc}
+_021DFEA4:
+ str r6, [r2, #0x70]
+ ldr r1, [r0]
+ cmp r4, #0
+ str r5, [r1, #0x74]
+ beq _021DFEC4
+ ldrh r1, [r4]
+ cmp r1, #0
+ bne _021DFECC
+_021DFEC4:
+ mov r5, #0
+ b _021DFF18
+_021DFECC:
+ ldr r1, [r0]
+ mov r0, #0
+ add r1, r1, #0x2e
+ mov r2, #0x34
+ bl MIi_CpuClear16
+ mov r0, r4
+ bl MOD04_021DE89C
+ cmp r0, #0x19
+ movhi r5, #0x19
+ bhi _021DFF00
+ mov r0, r4
+ bl MOD04_021DE89C
+ mov r5, r0
+_021DFF00:
+ ldr r1, _021DFF6C ; =UNK04_0221053C
+ mov r0, r4
+ ldr r1, [r1]
+ mov r2, r5, lsl #1
+ add r1, r1, #0x2e
+ bl MIi_CpuCopy16
+_021DFF18:
+ ldr r0, _021DFF6C ; =UNK04_0221053C
+ mov r1, #0
+ ldr r0, [r0]
+ add r0, r0, r5, lsl #1
+ strh r1, [r0, #0x2e]
+ bl MOD04_021DDC1C
+ cmp r0, #4
+ beq _021DFF4C
+ ldr r1, _021DFF70 ; =0xFFFF1596
+ mov r0, #2
+ bl MOD04_021E0EAC
+ mov r0, #1
+ ldmia sp!, {r4, r5, r6, pc}
+_021DFF4C:
+ mov r0, #1
+ bl MOD04_021DF5CC
+ ldr r0, _021DFF6C ; =UNK04_0221053C
+ ldr r0, [r0]
+ ldr r0, [r0, #0x68]
+ bl MOD04_021EE898
+ mov r0, #1
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021DFF6C: .word UNK04_0221053C
+_021DFF70: .word 0xFFFF1596
+ arm_func_end MOD04_021DFE64
+
+ arm_func_start MOD04_021DFF74
+MOD04_021DFF74: ; 0x021DFF74
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ bl MOD04_021DD984
+ cmp r0, #0
+ beq _021DFF8C
+ bl MOD04_021DF5EC
+_021DFF8C:
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ ldr r0, [r0]
+ cmp r0, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ ldr r0, [r0, #0x24]
+ cmp r0, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ bl MOD04_021DD6D4
+ cmp r0, #0
+ addne sp, sp, #4
+ ldmneia sp!, {pc}
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ ldr r0, [r0]
+ ldr r0, [r0, #0x24]
+ cmp r0, #6
+ addls pc, pc, r0, lsl #2
+ b _021E0194
+_021DFFD8: ; jump table
+ b _021E0194 ; case 0
+ b _021DFFF4 ; case 1
+ b _021E0124 ; case 2
+ b _021E012C ; case 3
+ b _021E012C ; case 4
+ b _021E013C ; case 5
+ b _021E014C ; case 6
+_021DFFF4:
+ bl MOD04_021EE6A0
+ cmp r0, #1
+ beq _021E0014
+ cmp r0, #2
+ beq _021E00FC
+ cmp r0, #3
+ beq _021E0110
+ b _021E0194
+_021E0014:
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ mov r2, #0
+ ldr r0, [r0]
+ ldr r1, [r0, #0xa0]
+ add r0, r0, #0x1c
+ bl MOD04_021F0F94
+ bl MOD04_021DF414
+ cmp r0, #0
+ addne sp, sp, #4
+ ldmneia sp!, {pc}
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ mov r1, #0
+ ldr r0, [r0]
+ ldr r2, _021E01E8 ; =MOD04_021DF0D4
+ mov r3, r1
+ add r0, r0, #0x1c
+ bl MOD04_021F0EB0
+ bl MOD04_021DF414
+ cmp r0, #0
+ addne sp, sp, #4
+ ldmneia sp!, {pc}
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ ldr r2, _021E01EC ; =MOD04_021DEF6C
+ ldr r0, [r0]
+ mov r1, #3
+ add r0, r0, #0x1c
+ mov r3, #0
+ bl MOD04_021F0EB0
+ bl MOD04_021DF414
+ cmp r0, #0
+ addne sp, sp, #4
+ ldmneia sp!, {pc}
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ ldr r2, _021E01F0 ; =MOD04_021E20C8
+ ldr r0, [r0]
+ mov r1, #1
+ add r0, r0, #0x1c
+ mov r3, #0
+ bl MOD04_021F0EB0
+ bl MOD04_021DF414
+ cmp r0, #0
+ addne sp, sp, #4
+ ldmneia sp!, {pc}
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ ldr r2, _021E01F4 ; =MOD04_021E1FE4
+ ldr r0, [r0]
+ mov r1, #2
+ add r0, r0, #0x1c
+ mov r3, #0
+ bl MOD04_021F0EB0
+ bl MOD04_021DF414
+ cmp r0, #0
+ addne sp, sp, #4
+ ldmneia sp!, {pc}
+ mov r0, #2
+ bl MOD04_021DF5CC
+ bl MOD04_021E1034
+ b _021E0194
+_021E00FC:
+ ldr r1, _021E01F8 ; =0xFFFFB172
+ mov r0, #3
+ bl MOD04_021E0EAC
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+_021E0110:
+ ldr r1, _021E01FC ; =0xFFFFB17B
+ mov r0, #4
+ bl MOD04_021E0EAC
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+_021E0124:
+ bl MOD04_021E0F1C
+ b _021E0194
+_021E012C:
+ bl MOD04_021E2228
+ mov r0, #0
+ bl MOD04_021E9568
+ b _021E0194
+_021E013C:
+ mov r0, #1
+ bl MOD04_021E9568
+ bl MOD04_021E2228
+ b _021E0194
+_021E014C:
+ bl MOD04_021EAA64
+ bl MOD04_021E2228
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldrb r0, [r1, #0x369]
+ cmp r0, #2
+ beq _021E0174
+ ldrb r0, [r1, #0x369]
+ cmp r0, #3
+ bne _021E0180
+_021E0174:
+ mov r0, #1
+ bl MOD04_021E9568
+ b _021E0194
+_021E0180:
+ ldr r0, [r1]
+ cmp r0, #0
+ beq _021E0194
+ mov r0, #0
+ bl MOD04_021E9568
+_021E0194:
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ ldr r1, [r0]
+ ldrb r0, [r1, #0x36c]
+ cmp r0, #1
+ addne sp, sp, #4
+ ldmneia sp!, {pc}
+ ldr r0, [r1, #0x364]
+ cmp r0, #0
+ beq _021E01CC
+ bl MOD04_02202280
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ mov r1, #0
+ ldr r0, [r0]
+ str r1, [r0, #0x364]
+_021E01CC:
+ ldr r0, _021E01E4 ; =UNK04_0221053C
+ mov r1, #0
+ ldr r0, [r0]
+ strb r1, [r0, #0x36c]
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021E01E4: .word UNK04_0221053C
+_021E01E8: .word MOD04_021DF0D4
+_021E01EC: .word MOD04_021DEF6C
+_021E01F0: .word MOD04_021E20C8
+_021E01F4: .word MOD04_021E1FE4
+_021E01F8: .word 0xFFFFB172
+_021E01FC: .word 0xFFFFB17B
+ arm_func_end MOD04_021DFF74
+
+ arm_func_start MOD04_021E0200
+MOD04_021E0200: ; 0x021E0200
+ stmdb sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ ldr r0, [r0]
+ cmp r0, #0
+ addeq sp, sp, #4
+ ldmeqia sp!, {pc}
+ ldr r0, [r0, #0x364]
+ cmp r0, #0
+ beq _021E023C
+ bl MOD04_02202280
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ mov r1, #0
+ ldr r0, [r0]
+ str r1, [r0, #0x364]
+_021E023C:
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ mov r2, #0
+ ldr r1, [r0]
+ strb r2, [r1, #0x36c]
+ ldr r0, [r0]
+ ldr r0, [r0, #0x438]
+ cmp r0, #0
+ beq _021E0270
+ bl MOD04_02203E80
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ mov r1, #0
+ ldr r0, [r0]
+ str r1, [r0, #0x438]
+_021E0270:
+ bl MOD04_02200D6C
+ bl MOD04_021FBE7C
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ ldr ip, [r0]
+ ldr r0, [ip, #0x1c]
+ cmp r0, #0
+ beq _021E0324
+ mov r1, #0
+ mov r2, r1
+ mov r3, r1
+ add r0, ip, #0x1c
+ bl MOD04_021F0EB0
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ mov r2, #0
+ ldr r0, [r0]
+ mov r3, r2
+ add r0, r0, #0x1c
+ mov r1, #3
+ bl MOD04_021F0EB0
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ mov r2, #0
+ ldr r0, [r0]
+ mov r3, r2
+ add r0, r0, #0x1c
+ mov r1, #1
+ bl MOD04_021F0EB0
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ mov r2, #0
+ ldr r0, [r0]
+ mov r1, #2
+ add r0, r0, #0x1c
+ mov r3, r2
+ bl MOD04_021F0EB0
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ ldr r0, [r0]
+ add r0, r0, #0x1c
+ bl MOD04_021F0F18
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ ldr r0, [r0]
+ add r0, r0, #0x1c
+ bl MOD04_021F0F64
+ mov r1, #0
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ ldr r0, [r0]
+ str r1, [r0, #0x1c]
+_021E0324:
+ bl MOD04_021E0E48
+ bl MOD04_021E1D90
+ bl MOD04_021E854C
+ bl MOD04_021EA9C4
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ ldr r0, [r0]
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _021E035C
+ bl MOD04_021FD704
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ mov r1, #0
+ ldr r0, [r0]
+ str r1, [r0]
+_021E035C:
+ ldr r0, _021E0370 ; =UNK04_0221053C
+ mov r1, #0
+ str r1, [r0]
+ add sp, sp, #4
+ ldmfd sp!, {pc}
+ .align 2, 0
+_021E0370: .word UNK04_0221053C
+ arm_func_end MOD04_021E0200
+
+ arm_func_start MOD04_021E0374
+MOD04_021E0374: ; 0x021E0374
+ stmdb sp!, {r4, r5, r6, lr}
+ sub sp, sp, #0x10
+ ldr ip, _021E05D8 ; =UNK04_0221053C
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ str r0, [ip]
+ bl MOD04_021DD6F0
+ ldr r0, _021E05D8 ; =UNK04_0221053C
+ mov r2, #0
+ ldr r1, [r0]
+ ldr r3, _021E05DC ; =MOD04_021E8F80
+ str r2, [r1]
+ ldr r1, [r0]
+ ldr r2, _021E05E0 ; =MOD04_021DEF60
+ str r3, [r1, #4]
+ ldr r1, [r0]
+ ldr ip, [sp, #0x24]
+ str r2, [r1, #8]
+ cmp ip, #0
+ ldr r2, [r0]
+ ldr r3, _021E05E4 ; =MOD04_021DEBE4
+ ldr r1, _021E05E8 ; =MOD04_021DEBD8
+ str r3, [r2, #0xc]
+ ldr r0, [r0]
+ ldr r3, [sp, #0x28]
+ str r1, [r0, #0x10]
+ ldr r0, _021E05D8 ; =UNK04_0221053C
+ moveq ip, #0x2000
+ ldr r0, [r0]
+ cmp r3, #0
+ str ip, [r0, #0x14]
+ moveq r3, #0x2000
+ ldr r1, _021E05D8 ; =UNK04_0221053C
+ mov r0, #0
+ ldr r2, [r1]
+ ldr ip, _021E05EC ; =UNK04_02210F94
+ str r3, [r2, #0x18]
+ ldr r2, [r1]
+ ldr r3, _021E05F0 ; =UNK04_02211094
+ str r0, [r2, #0x1c]
+ ldr r2, [r1]
+ str r6, [r2, #0x20]
+ ldr r2, [r1]
+ str r0, [r2, #0x24]
+ ldr r2, [r1]
+ str r0, [r2, #0x28]
+ ldr r2, [r1]
+ strb r0, [r2, #0x2c]
+ ldr r2, [r1]
+ strb r0, [r2, #0x2d]
+ ldr r2, [r1]
+ str r0, [r2, #0x64]
+ ldr r2, [r1]
+ str ip, [r2, #0x68]
+ ldr r2, [r1]
+ str r3, [r2, #0x6c]
+ ldr r2, [r1]
+ str r0, [r2, #0x70]
+ ldr r2, [r1]
+ str r0, [r2, #0x74]
+ ldr r2, [r1]
+ str r0, [r2, #0x78]
+ ldr r2, [r1]
+ str r0, [r2, #0x7c]
+ ldr r2, [r1]
+ str r0, [r2, #0x80]
+ ldr r2, [r1]
+ str r0, [r2, #0x84]
+ ldr r2, [r1]
+ str r0, [r2, #0x88]
+ ldr r2, [r1]
+ str r0, [r2, #0x8c]
+ ldr r2, [r1]
+ str r0, [r2, #0x90]
+ ldr r1, [r1]
+ str r0, [r1, #0x94]
+ bl MOD04_021DF6CC
+ ldr r0, _021E05D8 ; =UNK04_0221053C
+ mov r3, r5
+ ldr r2, [r0]
+ ldr r1, [r6, #0x24]
+ ldr r0, _021E05F4 ; =MOD04_021DF304
+ str r1, [sp]
+ add r1, r2, #0x2e
+ str r1, [sp, #4]
+ str r0, [sp, #8]
+ mov r5, #0
+ add r0, r2, #0x98
+ mov r1, r6
+ add r2, r2, #0x1c
+ str r5, [sp, #0xc]
+ bl MOD04_021E1074
+ ldr r0, _021E05D8 ; =UNK04_0221053C
+ ldr r2, [sp, #0x30]
+ ldr r5, [r0]
+ ldr r3, [sp, #0x2c]
+ str r2, [sp]
+ add r0, r5, #0x2f8
+ add r1, r5, #0x1c
+ add r2, r5, #0x2e
+ bl MOD04_021E234C
+ ldr r0, _021E05D8 ; =UNK04_0221053C
+ ldr r1, _021E05EC ; =UNK04_02210F94
+ ldr r2, [r0]
+ ldr r0, _021E05F0 ; =UNK04_02211094
+ str r1, [sp]
+ str r0, [sp, #4]
+ ldr r1, [sp, #0x2c]
+ ldr r0, [sp, #0x30]
+ str r1, [sp, #8]
+ str r0, [sp, #0xc]
+ add r0, r2, #0x354
+ add r1, r2, #0x1c
+ add r3, r2, #4
+ bl MOD04_021EA368
+ ldr r1, _021E05D8 ; =UNK04_0221053C
+ ldr r0, _021E05F8 ; =0x000007D8
+ ldr r1, [r1]
+ add r0, r1, r0
+ bl MOD04_021EACB4
+ mov r0, r4
+ bl strlen
+ cmp r0, #0x100
+ movhs r5, #0xff
+ bhs _021E0578
+ mov r0, r4
+ bl strlen
+ mov r5, r0
+_021E0578:
+ ldr r1, _021E05EC ; =UNK04_02210F94
+ mov r0, r4
+ mov r2, r5
+ bl MI_CpuCopy8
+ ldr r0, [sp, #0x20]
+ ldr r1, _021E05EC ; =UNK04_02210F94
+ mov r2, #0
+ strb r2, [r1, r5]
+ bl strlen
+ cmp r0, #0x100
+ movhs r4, #0xff
+ bhs _021E05B4
+ ldr r0, [sp, #0x20]
+ bl strlen
+ mov r4, r0
+_021E05B4:
+ ldr r0, [sp, #0x20]
+ ldr r1, _021E05F0 ; =UNK04_02211094
+ mov r2, r4
+ bl MI_CpuCopy8
+ ldr r0, _021E05F0 ; =UNK04_02211094
+ mov r1, #0
+ strb r1, [r0, r4]
+ add sp, sp, #0x10
+ ldmia sp!, {r4, r5, r6, pc}
+ .align 2, 0
+_021E05D8: .word UNK04_0221053C
+_021E05DC: .word MOD04_021E8F80
+_021E05E0: .word MOD04_021DEF60
+_021E05E4: .word MOD04_021DEBE4
+_021E05E8: .word MOD04_021DEBD8
+_021E05EC: .word UNK04_02210F94
+_021E05F0: .word UNK04_02211094
+_021E05F4: .word MOD04_021DF304
+_021E05F8: .word 0x000007D8
+ arm_func_end MOD04_021E0374
+
+ .section .data
+
+ .global UNK04_0220D334
+UNK04_0220D334: ; 0x0220D334
+ .byte 0x00, 0x00, 0x00, 0x00
+
+ .global UNK04_0220D338
+UNK04_0220D338: ; 0x0220D338
+ .asciz "GPCM"
+
+ .balign 4, 0
+ .global UNK04_0220D340
+UNK04_0220D340: ; 0x0220D340
+ .asciz "MAT"
+
+ .balign 4, 0
+ .global UNK04_0220D344
+UNK04_0220D344: ; 0x0220D344
+ .asciz "SCM"
+
+ .balign 4, 0
+ .global UNK04_0220D348
+UNK04_0220D348: ; 0x0220D348
+ .asciz "SCN"
+
+ .balign 4, 0
+ .section .bss
+
+ .global UNK04_0221053C
+UNK04_0221053C: ; 0x0221053C
+ .space 0x4
+
+ .global UNK04_02210540
+UNK04_02210540: ; 0x02210540
+ .space 0x4
+
+ .global UNK04_02210544
+UNK04_02210544: ; 0x02210544
+ .space 0x80
+
+ .global UNK04_022105C4
+UNK04_022105C4: ; 0x022105C4
+ .space 0x100