diff options
-rw-r--r-- | arm9/arm9.lcf | 16 | ||||
-rw-r--r-- | arm9/global.inc | 19 | ||||
-rw-r--r-- | arm9/modules/15/asm/module_15.s | 8753 |
3 files changed, 8786 insertions, 2 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 27b64b23..7f8c3d74 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -25,7 +25,7 @@ MEMORY { MODULE_12 (RWX) : ORIGIN=0x0222D5C0, LENGTH=0 MODULE_13 (RWX) : ORIGIN=0x02211E60, LENGTH=0 MODULE_14 (RWX) : ORIGIN=0x021D74E0, LENGTH=0 - MODULE_15 (RWX) : ORIGIN=0, LENGTH=0 + MODULE_15 (RWX) : ORIGIN=0x021D74E0, LENGTH=0 MODULE_16 (RWX) : ORIGIN=0, LENGTH=0 MODULE_17 (RWX) : ORIGIN=0, LENGTH=0 MODULE_18 (RWX) : ORIGIN=0, LENGTH=0 @@ -551,7 +551,19 @@ SECTIONS { module_14.o (.bss) } >> MODULE_14 - OVERLAY_FILE(15, 0x233400, FILE_237400.o) + .MODULE.15 : AT (0x233400) + { + module_15.o (.text) + module_15.o (.sdata) + module_15.o (.data) + } > MODULE_15 + + .MODULE.15.bss : + { + module_15.o (.sbss) + module_15.o (.bss) + } >> MODULE_15 + OVERLAY_FILE(16, 0x237C00, FILE_23BC00.o) OVERLAY_FILE(17, 0x260200, FILE_264200.o) OVERLAY_FILE(18, 0x267200, FILE_26B200.o) diff --git a/arm9/global.inc b/arm9/global.inc index 4d3d2812..b86d7345 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -4979,6 +4979,25 @@ .extern FS_RegisterArchiveName
.extern FS_SetArchiveProc
.extern FS_UnloadArchiveTables
+.extern FUN_0200D06C
+.extern FUN_02013870
+.extern FUN_02013974
+.extern FUN_020139B0
+.extern FUN_02013A58
+.extern FUN_02021E8C
+.extern FUN_0208540C
+.extern FUN_02085424
+.extern FUN_02085428
+.extern FUN_0208545C
+.extern FUN_020854A0
+.extern FUN_02088F0C
+.extern FUN_02088F4C
+.extern FUN_020892C4
+.extern FUN_020892CC
+.extern FUN_020892EC
+.extern FUN_02089300
+.extern FUN_02089310
+.extern FUN_02089338
.extern FUN_02095324
.extern FUN_02095330
.extern FUN_02095AE0
diff --git a/arm9/modules/15/asm/module_15.s b/arm9/modules/15/asm/module_15.s new file mode 100644 index 00000000..bd9eb99a --- /dev/null +++ b/arm9/modules/15/asm/module_15.s @@ -0,0 +1,8753 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD15_021D74E0
+MOD15_021D74E0: ; 0x021D74E0
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ ldr r1, [r4]
+ add r5, r0, #0
+ cmp r1, #0
+ beq _021D74F2
+ cmp r1, #1
+ beq _021D752A
+ b _021D7552
+_021D74F2:
+ mov r1, #0
+ mov r0, #0x3e
+ add r2, r1, #0
+ bl FUN_0200433C
+ mov r2, #2
+ mov r0, #3
+ mov r1, #0x22
+ lsl r2, r2, #0xe
+ bl FUN_0201681C
+ mov r2, #0xa
+ mov r0, #3
+ mov r1, #0x23
+ lsl r2, r2, #0xe
+ bl FUN_0201681C
+ add r0, r5, #0
+ bl MOD15_021D7628
+ ldr r0, [r0, #0x14]
+ mov r1, #0
+ bl MOD15_021D8900
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ b _021D7552
+_021D752A:
+ bl FUN_02006278
+ add r4, r0, #0
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D7552
+ ldr r0, [r4, #4]
+ cmp r0, #2
+ bne _021D7548
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D9538
+ b _021D754A
+_021D7548:
+ mov r0, #0
+_021D754A:
+ add r4, #0x64
+ strb r0, [r4]
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_021D7552:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D7558
+MOD15_021D7558: ; 0x021D7558
+ push {r4, lr}
+ bl FUN_02006278
+ add r4, r0, #0
+ ldr r0, _021D7594 ; =0x021C48B8
+ ldr r1, [r0, #0x48]
+ strh r1, [r4, #0x30]
+ ldr r1, [r0, #0x44]
+ strh r1, [r4, #0x32]
+ ldr r0, [r0, #0x4c]
+ strh r0, [r4, #0x34]
+ ldr r0, [r4, #0x40]
+ bl FUN_02022144
+ ldr r2, [r4, #0x2c]
+ cmp r2, #0
+ beq _021D7586
+ add r0, r4, #0
+ add r4, #0x28
+ add r1, r4, #0
+ blx r2
+ mov r0, #0
+ pop {r4, pc}
+_021D7586:
+ add r1, r4, #0
+ ldr r2, [r4, #0x20]
+ add r0, r4, #0
+ add r1, #0x1c
+ blx r2
+ pop {r4, pc}
+ nop
+_021D7594: .word 0x021C48B8
+
+ thumb_func_start MOD15_021D7598
+MOD15_021D7598: ; 0x021D7598
+ push {r4, lr}
+ add r4, r2, #0
+ cmp r1, #3
+ bhi _021D7600
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_021D75AC: ; jump table
+ .short _021D75B4 - _021D75AC - 2 ; case 0
+ .short _021D75D4 - _021D75AC - 2 ; case 1
+ .short _021D75F6 - _021D75AC - 2 ; case 2
+ .short _021D75D4 - _021D75AC - 2 ; case 3
+_021D75B4:
+ str r0, [r4, #0x38]
+ cmp r0, #2
+ beq _021D75C0
+ cmp r0, #3
+ beq _021D75CA
+ pop {r4, pc}
+_021D75C0:
+ ldr r0, [r4, #0x14]
+ mov r1, #0x19
+ bl MOD15_021D8900
+ pop {r4, pc}
+_021D75CA:
+ ldr r0, [r4, #0x14]
+ mov r1, #0x1a
+ bl MOD15_021D8900
+ pop {r4, pc}
+_021D75D4:
+ cmp r0, #2
+ beq _021D75DE
+ cmp r0, #3
+ beq _021D75E8
+ b _021D75F0
+_021D75DE:
+ ldr r0, [r4, #0x14]
+ mov r1, #0x1b
+ bl MOD15_021D8900
+ b _021D75F0
+_021D75E8:
+ ldr r0, [r4, #0x14]
+ mov r1, #0x1c
+ bl MOD15_021D8900
+_021D75F0:
+ mov r0, #4
+ str r0, [r4, #0x38]
+ pop {r4, pc}
+_021D75F6:
+ sub r1, r0, #2
+ cmp r1, #1
+ bhi _021D7604
+ str r0, [r4, #0x38]
+ pop {r4, pc}
+_021D7600:
+ mov r0, #4
+ str r0, [r4, #0x38]
+_021D7604:
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D7608
+MOD15_021D7608: ; 0x021D7608
+ push {r4, lr}
+ add r4, r0, #0
+ bl FUN_02006278
+ add r1, r4, #0
+ bl MOD15_021D7774
+ mov r0, #0x22
+ bl FUN_020168D0
+ mov r0, #0x23
+ bl FUN_020168D0
+ mov r0, #1
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D7628
+MOD15_021D7628: ; 0x021D7628
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ mov r1, #0x68
+ mov r2, #0x22
+ bl FUN_02006268
+ add r4, r0, #0
+ add r0, r5, #0
+ bl FUN_0200628C
+ str r0, [r4]
+ bl FUN_0208540C
+ str r0, [r4, #4]
+ add r1, r4, #0
+ add r2, r4, #0
+ ldr r0, [r4]
+ add r1, #0x10
+ add r2, #8
+ bl FUN_02085428
+ ldr r0, [r4, #4]
+ cmp r0, #2
+ bne _021D7664
+ add r0, r4, #0
+ add r1, r4, #0
+ add r0, #0x60
+ add r1, #8
+ bl MOD15_021D76C4
+_021D7664:
+ ldr r1, [r4]
+ mov r0, #0x22
+ bl FUN_02088F0C
+ str r0, [r4, #0x18]
+ ldr r1, [r4, #0x18]
+ add r0, r4, #0
+ bl MOD15_021D87F8
+ str r0, [r4, #0x14]
+ mov r0, #0x22
+ str r0, [sp]
+ ldr r0, _021D76B4 ; =0x021DB880
+ ldr r2, _021D76B8 ; =MOD15_021D7598
+ mov r1, #5
+ add r3, r4, #0
+ bl FUN_020220C4
+ str r0, [r4, #0x40]
+ mov r1, #0
+ str r1, [r4, #0x44]
+ add r0, r4, #0
+ str r1, [r4, #0x48]
+ add r0, #0x65
+ strb r1, [r0]
+ str r1, [r4, #0x2c]
+ ldr r0, _021D76BC ; =MOD15_021D779C
+ str r1, [r4, #0x28]
+ str r0, [r4, #0x20]
+ add r0, r4, #0
+ str r1, [r4, #0x1c]
+ add r0, #0x4e
+ strh r1, [r0]
+ ldr r1, _021D76C0 ; =MOD15_021D83BC
+ add r0, r4, #0
+ bl MOD15_021D83AC
+ add r0, r4, #0
+ pop {r3, r4, r5, pc}
+ nop
+_021D76B4: .word 0x021DB880
+_021D76B8: .word MOD15_021D7598
+_021D76BC: .word MOD15_021D779C
+_021D76C0: .word MOD15_021D83BC
+
+ thumb_func_start MOD15_021D76C4
+MOD15_021D76C4: ; 0x021D76C4
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ add r0, r4, #0
+ bl FUN_02013920
+ strh r0, [r5]
+ mov r0, #0
+ ldrsh r0, [r5, r0]
+ bl FUN_02013974
+ strb r0, [r5, #3]
+ add r0, r4, #0
+ bl FUN_02013924
+ strb r0, [r5, #2]
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D76E8
+MOD15_021D76E8: ; 0x021D76E8
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ mov r0, #2
+ add r4, r1, #0
+ ldrsb r1, [r5, r0]
+ add r1, r1, #1
+ strb r1, [r5, #2]
+ ldrsb r1, [r5, r0]
+ mov r0, #3
+ ldrsb r0, [r5, r0]
+ cmp r1, r0
+ blt _021D771C
+ mov r1, #0
+ strb r1, [r5, #2]
+ ldrsh r0, [r5, r1]
+ add r0, r0, #1
+ strh r0, [r5]
+ ldrsh r0, [r5, r1]
+ cmp r0, #5
+ blt _021D7712
+ strh r1, [r5]
+_021D7712:
+ mov r0, #0
+ ldrsh r0, [r5, r0]
+ bl FUN_02013974
+ strb r0, [r5, #3]
+_021D771C:
+ mov r1, #0
+ mov r2, #2
+ ldrsh r1, [r5, r1]
+ ldrsb r2, [r5, r2]
+ add r0, r4, #0
+ bl FUN_02013980
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D772C
+MOD15_021D772C: ; 0x021D772C
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ mov r0, #2
+ add r4, r1, #0
+ ldrsb r1, [r5, r0]
+ sub r1, r1, #1
+ strb r1, [r5, #2]
+ ldrsb r0, [r5, r0]
+ cmp r0, #0
+ bge _021D7764
+ mov r0, #0
+ ldrsh r1, [r5, r0]
+ sub r1, r1, #1
+ strh r1, [r5]
+ ldrsh r0, [r5, r0]
+ cmp r0, #0
+ bge _021D7752
+ mov r0, #4
+ strh r0, [r5]
+_021D7752:
+ mov r0, #0
+ ldrsh r0, [r5, r0]
+ bl FUN_02013974
+ strb r0, [r5, #3]
+ mov r0, #3
+ ldrsb r0, [r5, r0]
+ sub r0, r0, #1
+ strb r0, [r5, #2]
+_021D7764:
+ mov r1, #0
+ mov r2, #2
+ ldrsh r1, [r5, r1]
+ ldrsb r2, [r5, r2]
+ add r0, r4, #0
+ bl FUN_02013980
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D7774
+MOD15_021D7774: ; 0x021D7774
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ ldr r0, [r5, #0x40]
+ add r4, r1, #0
+ bl FUN_0202212C
+ ldr r0, [r5, #0x14]
+ bl MOD15_021D8888
+ ldr r0, [r5, #0x18]
+ bl FUN_02088F4C
+ add r0, r4, #0
+ bl FUN_0200627C
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D7794
+MOD15_021D7794: ; 0x021D7794
+ str r1, [r0, #0x20]
+ mov r1, #0
+ str r1, [r0, #0x1c]
+ bx lr
+
+ thumb_func_start MOD15_021D779C
+MOD15_021D779C: ; 0x021D779C
+ push {r3, lr}
+ ldr r2, [r0, #4]
+ lsl r3, r2, #2
+ ldr r2, _021D77AC ; =0x021DB874
+ ldr r2, [r2, r3]
+ blx r2
+ pop {r3, pc}
+ nop
+_021D77AC: .word 0x021DB874
+
+ thumb_func_start MOD15_021D77B0
+MOD15_021D77B0: ; 0x021D77B0
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldr r0, [r4]
+ cmp r0, #0
+ beq _021D77C6
+ cmp r0, #1
+ beq _021D7850
+ cmp r0, #2
+ beq _021D7864
+ b _021D7876
+_021D77C6:
+ ldr r1, [r5, #0x38]
+ cmp r1, #0
+ bne _021D77D6
+ add r0, r5, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _021D77EC
+_021D77D6:
+ cmp r1, #1
+ bne _021D77E4
+ add r0, r5, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #1
+ bne _021D77EC
+_021D77E4:
+ ldrh r0, [r5, #0x30]
+ mov r1, #4
+ tst r1, r0
+ beq _021D77F6
+_021D77EC:
+ ldr r1, _021D787C ; =MOD15_021D8698
+ add r0, r5, #0
+ bl MOD15_021D83AC
+ b _021D7876
+_021D77F6:
+ mov r1, #0x88
+ tst r1, r0
+ beq _021D7818
+ ldr r0, _021D7880 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r5, #0
+ mov r1, #0
+ add r0, #0x4c
+ strh r1, [r0]
+ ldr r0, [r5, #0x14]
+ mov r1, #4
+ bl MOD15_021D8900
+ mov r0, #1
+ str r0, [r4]
+ b _021D7876
+_021D7818:
+ mov r1, #2
+ tst r1, r0
+ beq _021D782E
+ ldr r0, _021D7880 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r1, _021D7884 ; =MOD15_021D851C
+ add r0, r5, #0
+ bl MOD15_021D83AC
+ b _021D7876
+_021D782E:
+ mov r1, #1
+ tst r0, r1
+ beq _021D7876
+ ldr r0, _021D7880 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r5, #0
+ mov r1, #0
+ add r0, #0x50
+ strh r1, [r0]
+ ldr r0, [r5, #0x14]
+ mov r1, #6
+ bl MOD15_021D8900
+ mov r0, #2
+ str r0, [r4]
+ b _021D7876
+_021D7850:
+ ldr r0, [r5, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D7876
+ ldr r1, _021D7888 ; =MOD15_021D7BC8
+ add r0, r5, #0
+ bl MOD15_021D7794
+ b _021D7876
+_021D7864:
+ ldr r0, [r5, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D7876
+ ldr r1, _021D788C ; =MOD15_021D7D00
+ add r0, r5, #0
+ bl MOD15_021D7794
+_021D7876:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ nop
+_021D787C: .word MOD15_021D8698
+_021D7880: .word 0x000005DC
+_021D7884: .word MOD15_021D851C
+_021D7888: .word MOD15_021D7BC8
+_021D788C: .word MOD15_021D7D00
+
+ thumb_func_start MOD15_021D7890
+MOD15_021D7890: ; 0x021D7890
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldr r0, [r4]
+ cmp r0, #0
+ beq _021D78A6
+ cmp r0, #1
+ beq _021D7980
+ cmp r0, #2
+ beq _021D7994
+ b _021D79A6
+_021D78A6:
+ ldr r1, [r5, #0x38]
+ cmp r1, #0
+ bne _021D78B6
+ add r0, r5, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _021D78CC
+_021D78B6:
+ cmp r1, #1
+ bne _021D78C4
+ add r0, r5, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #1
+ bne _021D78CC
+_021D78C4:
+ ldrh r0, [r5, #0x30]
+ mov r1, #4
+ tst r1, r0
+ beq _021D78D6
+_021D78CC:
+ ldr r1, _021D79AC ; =MOD15_021D8698
+ add r0, r5, #0
+ bl MOD15_021D83AC
+ b _021D79A6
+_021D78D6:
+ mov r1, #0x88
+ tst r1, r0
+ beq _021D78F8
+ ldr r0, _021D79B0 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r5, #0
+ mov r1, #0
+ add r0, #0x4c
+ strh r1, [r0]
+ ldr r0, [r5, #0x14]
+ mov r1, #4
+ bl MOD15_021D8900
+ mov r0, #1
+ str r0, [r4]
+ b _021D79A6
+_021D78F8:
+ mov r1, #0x20
+ tst r1, r0
+ beq _021D7920
+ add r0, r5, #0
+ add r0, #0x4e
+ ldrh r0, [r0]
+ cmp r0, #0
+ beq _021D79A6
+ ldr r0, _021D79B0 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r5, #0
+ mov r1, #0
+ add r0, #0x4e
+ strh r1, [r0]
+ ldr r0, [r5, #0x14]
+ mov r1, #0xc
+ bl MOD15_021D8900
+ b _021D79A6
+_021D7920:
+ mov r1, #0x10
+ tst r1, r0
+ beq _021D7948
+ add r0, r5, #0
+ add r0, #0x4e
+ ldrh r0, [r0]
+ cmp r0, #0
+ bne _021D79A6
+ ldr r0, _021D79B0 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r5, #0
+ mov r1, #1
+ add r0, #0x4e
+ strh r1, [r0]
+ ldr r0, [r5, #0x14]
+ mov r1, #0xc
+ bl MOD15_021D8900
+ b _021D79A6
+_021D7948:
+ mov r1, #2
+ tst r1, r0
+ beq _021D795E
+ ldr r0, _021D79B0 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r1, _021D79B4 ; =MOD15_021D851C
+ add r0, r5, #0
+ bl MOD15_021D83AC
+ b _021D79A6
+_021D795E:
+ mov r1, #1
+ tst r0, r1
+ beq _021D79A6
+ ldr r0, _021D79B0 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r5, #0
+ mov r1, #0
+ add r0, #0x50
+ strh r1, [r0]
+ ldr r0, [r5, #0x14]
+ mov r1, #6
+ bl MOD15_021D8900
+ mov r0, #2
+ str r0, [r4]
+ b _021D79A6
+_021D7980:
+ ldr r0, [r5, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D79A6
+ ldr r1, _021D79B8 ; =MOD15_021D7BC8
+ add r0, r5, #0
+ bl MOD15_021D7794
+ b _021D79A6
+_021D7994:
+ ldr r0, [r5, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D79A6
+ ldr r1, _021D79BC ; =MOD15_021D7D00
+ add r0, r5, #0
+ bl MOD15_021D7794
+_021D79A6:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ nop
+_021D79AC: .word MOD15_021D8698
+_021D79B0: .word 0x000005DC
+_021D79B4: .word MOD15_021D851C
+_021D79B8: .word MOD15_021D7BC8
+_021D79BC: .word MOD15_021D7D00
+
+ thumb_func_start MOD15_021D79C0
+MOD15_021D79C0: ; 0x021D79C0
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r4, r0, #0
+ ldr r0, [r5]
+ cmp r0, #4
+ bhi _021D7A3C
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D79D8: ; jump table
+ .short _021D79E2 - _021D79D8 - 2 ; case 0
+ .short _021D79F2 - _021D79D8 - 2 ; case 1
+ .short _021D7B76 - _021D79D8 - 2 ; case 2
+ .short _021D7B88 - _021D79D8 - 2 ; case 3
+ .short _021D7B9C - _021D79D8 - 2 ; case 4
+_021D79E2:
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D9538
+ add r1, r4, #0
+ add r1, #0x64
+ strb r0, [r1]
+ mov r0, #1
+ str r0, [r5]
+_021D79F2:
+ ldr r1, [r4, #0x38]
+ cmp r1, #0
+ bne _021D7A02
+ add r0, r4, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _021D7A18
+_021D7A02:
+ cmp r1, #1
+ bne _021D7A10
+ add r0, r4, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #1
+ bne _021D7A18
+_021D7A10:
+ ldrh r0, [r4, #0x30]
+ mov r1, #4
+ tst r1, r0
+ beq _021D7A22
+_021D7A18:
+ ldr r1, _021D7BB4 ; =MOD15_021D8698
+ add r0, r4, #0
+ bl MOD15_021D83AC
+ b _021D7BAE
+_021D7A22:
+ mov r1, #0x40
+ tst r1, r0
+ beq _021D7A5C
+ add r0, r4, #0
+ add r0, #0x64
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _021D7A3C
+ add r0, r4, #0
+ add r0, #0x4e
+ ldrh r0, [r0]
+ cmp r0, #0
+ bne _021D7A3E
+_021D7A3C:
+ b _021D7BAE
+_021D7A3E:
+ ldr r0, _021D7BB8 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r4, #0
+ add r0, #0x4e
+ ldrh r0, [r0]
+ sub r1, r0, #1
+ add r0, r4, #0
+ add r0, #0x4e
+ strh r1, [r0]
+ ldr r0, [r4, #0x14]
+ mov r1, #0xc
+ bl MOD15_021D8900
+ b _021D7BAE
+_021D7A5C:
+ mov r1, #0x80
+ tst r0, r1
+ beq _021D7AAC
+ ldr r0, _021D7BB8 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r4, #0
+ add r0, #0x64
+ ldrb r2, [r0]
+ cmp r2, #0
+ beq _021D7A96
+ add r0, r4, #0
+ add r0, #0x4e
+ ldrh r1, [r0]
+ sub r0, r2, #1
+ cmp r1, r0
+ bge _021D7A96
+ add r0, r4, #0
+ add r0, #0x4e
+ ldrh r0, [r0]
+ add r1, r0, #1
+ add r0, r4, #0
+ add r0, #0x4e
+ strh r1, [r0]
+ ldr r0, [r4, #0x14]
+ mov r1, #0xc
+ bl MOD15_021D8900
+ b _021D7AAC
+_021D7A96:
+ add r0, r4, #0
+ mov r1, #0
+ add r0, #0x4c
+ strh r1, [r0]
+ ldr r0, [r4, #0x14]
+ mov r1, #4
+ bl MOD15_021D8900
+ mov r0, #3
+ str r0, [r5]
+ b _021D7BAE
+_021D7AAC:
+ ldrh r1, [r4, #0x30]
+ mov r0, #8
+ tst r0, r1
+ bne _021D7AC6
+ mov r0, #1
+ add r2, r1, #0
+ and r2, r0
+ beq _021D7AE2
+ add r0, r4, #0
+ add r0, #0x64
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _021D7AE2
+_021D7AC6:
+ ldr r0, _021D7BB8 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r4, #0
+ mov r1, #0
+ add r0, #0x4c
+ strh r1, [r0]
+ ldr r0, [r4, #0x14]
+ mov r1, #4
+ bl MOD15_021D8900
+ mov r0, #3
+ str r0, [r5]
+ b _021D7BAE
+_021D7AE2:
+ ldrh r0, [r4, #0x34]
+ mov r3, #0x20
+ tst r3, r0
+ beq _021D7B12
+ ldr r0, _021D7BB8 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r4, #0
+ mov r1, #0
+ add r0, #0x4e
+ strh r1, [r0]
+ add r0, r4, #0
+ add r1, r4, #0
+ add r0, #0x60
+ add r1, #8
+ bl MOD15_021D772C
+ ldr r0, [r4, #0x14]
+ mov r1, #3
+ bl MOD15_021D8900
+ mov r0, #2
+ str r0, [r5]
+ b _021D7BAE
+_021D7B12:
+ mov r3, #0x10
+ tst r0, r3
+ beq _021D7B40
+ ldr r0, _021D7BB8 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r4, #0
+ mov r1, #0
+ add r0, #0x4e
+ strh r1, [r0]
+ add r0, r4, #0
+ add r1, r4, #0
+ add r0, #0x60
+ add r1, #8
+ bl MOD15_021D76E8
+ ldr r0, [r4, #0x14]
+ mov r1, #3
+ bl MOD15_021D8900
+ mov r0, #2
+ str r0, [r5]
+ b _021D7BAE
+_021D7B40:
+ mov r0, #2
+ tst r0, r1
+ beq _021D7B56
+ ldr r0, _021D7BB8 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r1, _021D7BBC ; =MOD15_021D851C
+ add r0, r4, #0
+ bl MOD15_021D83AC
+ b _021D7BAE
+_021D7B56:
+ cmp r2, #0
+ beq _021D7BAE
+ ldr r0, _021D7BB8 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r4, #0
+ mov r1, #0
+ add r0, #0x50
+ strh r1, [r0]
+ ldr r0, [r4, #0x14]
+ mov r1, #6
+ bl MOD15_021D8900
+ mov r0, #4
+ str r0, [r5]
+ b _021D7BAE
+_021D7B76:
+ ldr r0, [r4, #0x14]
+ mov r1, #3
+ bl MOD15_021D8970
+ cmp r0, #0
+ beq _021D7BAE
+ mov r0, #0
+ str r0, [r5]
+ b _021D7BAE
+_021D7B88:
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D7BAE
+ ldr r1, _021D7BC0 ; =MOD15_021D7BC8
+ add r0, r4, #0
+ bl MOD15_021D7794
+ b _021D7BAE
+_021D7B9C:
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D7BAE
+ ldr r1, _021D7BC4 ; =MOD15_021D7D00
+ add r0, r4, #0
+ bl MOD15_021D7794
+_021D7BAE:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ nop
+_021D7BB4: .word MOD15_021D8698
+_021D7BB8: .word 0x000005DC
+_021D7BBC: .word MOD15_021D851C
+_021D7BC0: .word MOD15_021D7BC8
+_021D7BC4: .word MOD15_021D7D00
+
+ thumb_func_start MOD15_021D7BC8
+MOD15_021D7BC8: ; 0x021D7BC8
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r1, [r5]
+ add r4, r0, #0
+ cmp r1, #5
+ bls _021D7BD6
+ b _021D7CE8
+_021D7BD6:
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_021D7BE2: ; jump table
+ .short _021D7BEE - _021D7BE2 - 2 ; case 0
+ .short _021D7CB8 - _021D7BE2 - 2 ; case 1
+ .short _021D7CC4 - _021D7BE2 - 2 ; case 2
+ .short _021D7CD0 - _021D7BE2 - 2 ; case 3
+ .short _021D7CD0 - _021D7BE2 - 2 ; case 4
+ .short _021D7CD6 - _021D7BE2 - 2 ; case 5
+_021D7BEE:
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D7CE8
+ ldr r1, [r4, #0x38]
+ cmp r1, #0
+ bne _021D7C08
+ add r0, r4, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _021D7C1E
+_021D7C08:
+ cmp r1, #1
+ bne _021D7C16
+ add r0, r4, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #1
+ bne _021D7C1E
+_021D7C16:
+ ldrh r0, [r4, #0x30]
+ mov r1, #4
+ tst r1, r0
+ beq _021D7C28
+_021D7C1E:
+ ldr r1, _021D7CEC ; =MOD15_021D8698
+ add r0, r4, #0
+ bl MOD15_021D83AC
+ b _021D7CE8
+_021D7C28:
+ mov r1, #0x30
+ tst r1, r0
+ beq _021D7C4E
+ ldr r0, _021D7CF0 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r4, #0
+ add r0, #0x4c
+ ldrh r1, [r0]
+ mov r0, #1
+ eor r1, r0
+ add r0, r4, #0
+ add r0, #0x4c
+ strh r1, [r0]
+ ldr r0, [r4, #0x14]
+ mov r1, #0xd
+ bl MOD15_021D8900
+ b _021D7CE8
+_021D7C4E:
+ mov r1, #8
+ tst r1, r0
+ beq _021D7C6C
+ ldr r0, _021D7CF0 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r4, #0
+ mov r1, #0
+ add r0, #0x4c
+ strh r1, [r0]
+ ldr r0, [r4, #0x14]
+ mov r1, #0xd
+ bl MOD15_021D8900
+ b _021D7CE8
+_021D7C6C:
+ mov r1, #0x40
+ tst r1, r0
+ beq _021D7C86
+ ldr r0, _021D7CF0 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #0x14]
+ mov r1, #5
+ bl MOD15_021D8900
+ mov r0, #5
+ str r0, [r5]
+ b _021D7CE8
+_021D7C86:
+ mov r1, #1
+ tst r1, r0
+ beq _021D7CA6
+ ldr r0, _021D7CF0 ; =0x000005DC
+ bl FUN_020054C8
+ add r4, #0x4c
+ ldrh r0, [r4]
+ cmp r0, #0
+ bne _021D7CA0
+ mov r0, #1
+ str r0, [r5]
+ b _021D7CE8
+_021D7CA0:
+ mov r0, #2
+ str r0, [r5]
+ b _021D7CE8
+_021D7CA6:
+ mov r1, #2
+ tst r0, r1
+ beq _021D7CE8
+ ldr r0, _021D7CF0 ; =0x000005DC
+ bl FUN_020054C8
+ mov r0, #2
+ str r0, [r5]
+ b _021D7CE8
+_021D7CB8:
+ mov r1, #3
+ str r1, [r5]
+ ldr r1, _021D7CF4 ; =MOD15_021D83F0
+ bl MOD15_021D83AC
+ b _021D7CE8
+_021D7CC4:
+ mov r1, #4
+ str r1, [r5]
+ ldr r1, _021D7CF8 ; =MOD15_021D851C
+ bl MOD15_021D83AC
+ b _021D7CE8
+_021D7CD0:
+ mov r0, #0
+ str r0, [r5]
+ b _021D7CE8
+_021D7CD6:
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D7CE8
+ ldr r1, _021D7CFC ; =MOD15_021D779C
+ add r0, r4, #0
+ bl MOD15_021D7794
+_021D7CE8:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D7CEC: .word MOD15_021D8698
+_021D7CF0: .word 0x000005DC
+_021D7CF4: .word MOD15_021D83F0
+_021D7CF8: .word MOD15_021D851C
+_021D7CFC: .word MOD15_021D779C
+
+ thumb_func_start MOD15_021D7D00
+MOD15_021D7D00: ; 0x021D7D00
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldr r0, [r4]
+ cmp r0, #0
+ beq _021D7D18
+ cmp r0, #1
+ beq _021D7E0C
+ cmp r0, #2
+ bne _021D7D16
+ b _021D7E20
+_021D7D16:
+ b _021D7E30
+_021D7D18:
+ ldr r0, [r5, #0x14]
+ mov r1, #0xf
+ bl MOD15_021D8970
+ cmp r0, #0
+ bne _021D7D26
+ b _021D7E30
+_021D7D26:
+ ldr r1, [r5, #0x38]
+ cmp r1, #0
+ bne _021D7D36
+ add r0, r5, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _021D7D4C
+_021D7D36:
+ cmp r1, #1
+ bne _021D7D44
+ add r0, r5, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #1
+ bne _021D7D4C
+_021D7D44:
+ ldrh r0, [r5, #0x30]
+ mov r1, #4
+ tst r1, r0
+ beq _021D7D78
+_021D7D4C:
+ ldr r0, _021D7E34 ; =0x000005E4
+ bl FUN_020054C8
+ add r0, r5, #0
+ add r0, #0x65
+ ldrb r1, [r0]
+ mov r0, #1
+ eor r1, r0
+ add r0, r5, #0
+ add r0, #0x65
+ strb r1, [r0]
+ add r0, r5, #0
+ mov r1, #0
+ add r0, #0x50
+ strh r1, [r0]
+ ldr r0, [r5, #0x14]
+ mov r1, #0x18
+ bl MOD15_021D8900
+ mov r0, #2
+ str r0, [r4]
+ b _021D7E30
+_021D7D78:
+ mov r1, #2
+ tst r1, r0
+ beq _021D7D96
+ ldr r0, _021D7E38 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r5, #0x14]
+ mov r1, #7
+ bl MOD15_021D8900
+ ldr r0, _021D7E3C ; =MOD15_021D779C
+ str r0, [r5, #0x24]
+ mov r0, #1
+ str r0, [r4]
+ b _021D7E30
+_021D7D96:
+ mov r1, #1
+ tst r0, r1
+ beq _021D7DF2
+ add r0, r5, #0
+ add r0, #0x50
+ ldrh r0, [r0]
+ cmp r0, #0xfe
+ bne _021D7DBE
+ ldr r0, _021D7E38 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r5, #0x14]
+ mov r1, #7
+ bl MOD15_021D8900
+ ldr r0, _021D7E3C ; =MOD15_021D779C
+ str r0, [r5, #0x24]
+ mov r0, #1
+ str r0, [r4]
+ b _021D7E30
+_021D7DBE:
+ add r0, r5, #0
+ bl MOD15_021D7E48
+ cmp r0, #0
+ beq _021D7DEA
+ ldr r0, _021D7E38 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r5, #0
+ add r0, #0x54
+ add r1, r5, #0
+ bl MOD15_021D7FE4
+ ldr r0, _021D7E40 ; =MOD15_021D8044
+ mov r1, #8
+ str r0, [r5, #0x24]
+ ldr r0, [r5, #0x14]
+ bl MOD15_021D8900
+ mov r0, #1
+ str r0, [r4]
+ b _021D7E30
+_021D7DEA:
+ ldr r0, _021D7E44 ; =0x000005F2
+ bl FUN_020054C8
+ b _021D7E30
+_021D7DF2:
+ add r0, r5, #0
+ bl MOD15_021D7E80
+ cmp r0, #0
+ beq _021D7E30
+ ldr r0, _021D7E38 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r5, #0x14]
+ mov r1, #0xe
+ bl MOD15_021D8900
+ b _021D7E30
+_021D7E0C:
+ ldr r0, [r5, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D7E30
+ ldr r1, [r5, #0x24]
+ add r0, r5, #0
+ bl MOD15_021D7794
+ b _021D7E30
+_021D7E20:
+ ldr r0, [r5, #0x14]
+ mov r1, #0x18
+ bl MOD15_021D8970
+ cmp r0, #0
+ beq _021D7E30
+ mov r0, #0
+ str r0, [r4]
+_021D7E30:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D7E34: .word 0x000005E4
+_021D7E38: .word 0x000005DC
+_021D7E3C: .word MOD15_021D779C
+_021D7E40: .word MOD15_021D8044
+_021D7E44: .word 0x000005F2
+
+ thumb_func_start MOD15_021D7E48
+MOD15_021D7E48: ; 0x021D7E48
+ push {r3, lr}
+ add r1, r0, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #0
+ ldr r0, [r1, #0x18]
+ bne _021D7E6A
+ add r1, #0x50
+ ldrh r1, [r1]
+ bl FUN_020892C4
+ cmp r0, #0
+ beq _021D7E66
+ mov r0, #1
+ pop {r3, pc}
+_021D7E66:
+ mov r0, #0
+ pop {r3, pc}
+_021D7E6A:
+ add r1, #0x50
+ ldrh r1, [r1]
+ bl FUN_02089300
+ cmp r0, #0
+ beq _021D7E7A
+ mov r0, #1
+ pop {r3, pc}
+_021D7E7A:
+ mov r0, #0
+ pop {r3, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D7E80
+MOD15_021D7E80: ; 0x021D7E80
+ push {r3, lr}
+ add r1, r0, #0
+ add r1, #0x65
+ ldrb r1, [r1]
+ lsl r2, r1, #2
+ ldr r1, _021D7E94 ; =0x021DB86C
+ ldr r1, [r1, r2]
+ blx r1
+ pop {r3, pc}
+ nop
+_021D7E94: .word 0x021DB86C
+
+ thumb_func_start MOD15_021D7E98
+MOD15_021D7E98: ; 0x021D7E98
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, #0x50
+ ldrh r2, [r0]
+ add r1, r2, #0
+ cmp r2, #0xfe
+ bne _021D7EA8
+ mov r1, #0xc
+_021D7EA8:
+ cmp r2, #0xfe
+ beq _021D7F04
+ add r0, r4, #0
+ add r0, #0x52
+ strh r2, [r0]
+ ldrh r0, [r4, #0x34]
+ mov r2, #0x40
+ tst r2, r0
+ beq _021D7EC8
+ ldr r0, _021D7F40 ; =0x021DB894
+ lsl r1, r1, #2
+ ldrb r0, [r0, r1]
+ add r4, #0x50
+ strh r0, [r4]
+ mov r0, #1
+ pop {r4, pc}
+_021D7EC8:
+ mov r2, #0x80
+ tst r2, r0
+ beq _021D7EDC
+ ldr r0, _021D7F44 ; =0x021DB895
+ lsl r1, r1, #2
+ ldrb r0, [r0, r1]
+ add r4, #0x50
+ strh r0, [r4]
+ mov r0, #1
+ pop {r4, pc}
+_021D7EDC:
+ mov r2, #0x20
+ tst r2, r0
+ beq _021D7EF0
+ ldr r0, _021D7F48 ; =0x021DB896
+ lsl r1, r1, #2
+ ldrb r0, [r0, r1]
+ add r4, #0x50
+ strh r0, [r4]
+ mov r0, #1
+ pop {r4, pc}
+_021D7EF0:
+ mov r2, #0x10
+ tst r0, r2
+ beq _021D7F3C
+ ldr r0, _021D7F4C ; =0x021DB897
+ lsl r1, r1, #2
+ ldrb r0, [r0, r1]
+ add r4, #0x50
+ strh r0, [r4]
+ mov r0, #1
+ pop {r4, pc}
+_021D7F04:
+ ldrh r1, [r4, #0x34]
+ mov r0, #0x40
+ tst r0, r1
+ beq _021D7F22
+ add r0, r4, #0
+ add r0, #0x52
+ ldrh r0, [r0]
+ mov r1, #3
+ bl _s32_div_f
+ add r1, #9
+ add r4, #0x50
+ strh r1, [r4]
+ mov r0, #1
+ pop {r4, pc}
+_021D7F22:
+ mov r0, #0x80
+ tst r0, r1
+ beq _021D7F3C
+ add r0, r4, #0
+ add r0, #0x52
+ ldrh r0, [r0]
+ mov r1, #3
+ bl _s32_div_f
+ add r4, #0x50
+ strh r1, [r4]
+ mov r0, #1
+ pop {r4, pc}
+_021D7F3C:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+_021D7F40: .word 0x021DB894
+_021D7F44: .word 0x021DB895
+_021D7F48: .word 0x021DB896
+_021D7F4C: .word 0x021DB897
+
+ thumb_func_start MOD15_021D7F50
+MOD15_021D7F50: ; 0x021D7F50
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, #0x50
+ ldrh r0, [r0]
+ cmp r0, #0xfe
+ beq _021D7FAE
+ ldrh r1, [r4, #0x34]
+ mov r3, #0x40
+ mov r2, #0xff
+ tst r3, r1
+ beq _021D7F6E
+ bl MOD15_021DB7C4
+ add r2, r0, #0
+ b _021D7F96
+_021D7F6E:
+ mov r3, #0x80
+ tst r3, r1
+ beq _021D7F7C
+ bl MOD15_021DB7E0
+ add r2, r0, #0
+ b _021D7F96
+_021D7F7C:
+ mov r3, #0x10
+ tst r3, r1
+ beq _021D7F8A
+ bl MOD15_021DB818
+ add r2, r0, #0
+ b _021D7F96
+_021D7F8A:
+ mov r3, #0x20
+ tst r1, r3
+ beq _021D7F96
+ bl MOD15_021DB7FC
+ add r2, r0, #0
+_021D7F96:
+ cmp r2, #0xff
+ beq _021D7FE0
+ add r0, r4, #0
+ add r0, #0x50
+ ldrh r1, [r0]
+ add r0, r4, #0
+ add r0, #0x52
+ strh r1, [r0]
+ add r4, #0x50
+ strh r2, [r4]
+ mov r0, #1
+ pop {r4, pc}
+_021D7FAE:
+ ldrh r1, [r4, #0x34]
+ mov r0, #0x40
+ tst r0, r1
+ beq _021D7FC8
+ add r0, r4, #0
+ add r0, #0x52
+ ldrh r0, [r0]
+ bl MOD15_021DB850
+ add r4, #0x50
+ strh r0, [r4]
+ mov r0, #1
+ pop {r4, pc}
+_021D7FC8:
+ mov r0, #0x80
+ tst r0, r1
+ beq _021D7FE0
+ add r0, r4, #0
+ add r0, #0x52
+ ldrh r0, [r0]
+ bl MOD15_021DB834
+ add r4, #0x50
+ strh r0, [r4]
+ mov r0, #1
+ pop {r4, pc}
+_021D7FE0:
+ mov r0, #0
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D7FE4
+MOD15_021D7FE4: ; 0x021D7FE4
+ push {r4, lr}
+ add r4, r0, #0
+ mov r0, #0
+ strh r0, [r4]
+ strb r0, [r4, #6]
+ strb r0, [r4, #7]
+ add r0, r1, #0
+ bl MOD15_021D8744
+ strh r0, [r4, #4]
+ mov r0, #0
+ str r0, [r4, #8]
+ ldrh r2, [r4, #4]
+ cmp r2, #0xa
+ bls _021D8016
+ add r1, r2, #0
+ sub r1, #0xa
+ lsr r0, r1, #0x1f
+ add r0, r1, r0
+ asr r1, r0, #1
+ mov r0, #1
+ and r0, r2
+ add r0, r1, r0
+ strh r0, [r4, #2]
+ pop {r4, pc}
+_021D8016:
+ strh r0, [r4, #2]
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D801C
+MOD15_021D801C: ; 0x021D801C
+ ldrb r1, [r0, #6]
+ ldrb r0, [r0, #7]
+ lsl r0, r0, #1
+ add r0, r1, r0
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8028
+MOD15_021D8028: ; 0x021D8028
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD15_021D801C
+ ldrh r1, [r4]
+ lsl r1, r1, #1
+ add r0, r1, r0
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D8038
+MOD15_021D8038: ; 0x021D8038
+ ldr r0, [r0, #8]
+ bx lr
+
+ thumb_func_start MOD15_021D803C
+MOD15_021D803C: ; 0x021D803C
+ ldrh r0, [r0]
+ bx lr
+
+ thumb_func_start MOD15_021D8040
+MOD15_021D8040: ; 0x021D8040
+ ldrh r0, [r0, #2]
+ bx lr
+
+ thumb_func_start MOD15_021D8044
+MOD15_021D8044: ; 0x021D8044
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r4, r0, #0
+ ldr r0, [r5]
+ cmp r0, #3
+ bls _021D8052
+ b _021D81B4
+_021D8052:
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D805E: ; jump table
+ .short _021D8066 - _021D805E - 2 ; case 0
+ .short _021D8172 - _021D805E - 2 ; case 1
+ .short _021D8184 - _021D805E - 2 ; case 2
+ .short _021D819E - _021D805E - 2 ; case 3
+_021D8066:
+ ldr r0, [r4, #0x38]
+ cmp r0, #0
+ bne _021D8076
+ add r1, r4, #0
+ add r1, #0x65
+ ldrb r1, [r1]
+ cmp r1, #0
+ bne _021D808C
+_021D8076:
+ cmp r0, #1
+ bne _021D8084
+ add r1, r4, #0
+ add r1, #0x65
+ ldrb r1, [r1]
+ cmp r1, #1
+ bne _021D808C
+_021D8084:
+ ldrh r2, [r4, #0x30]
+ mov r1, #4
+ tst r1, r2
+ beq _021D80BC
+_021D808C:
+ ldr r0, _021D81B8 ; =0x000005E4
+ bl FUN_020054C8
+ add r0, r4, #0
+ mov r1, #0
+ add r0, #0x50
+ strh r1, [r0]
+ add r0, r4, #0
+ add r0, #0x65
+ ldrb r1, [r0]
+ mov r0, #1
+ eor r1, r0
+ add r0, r4, #0
+ add r0, #0x65
+ strb r1, [r0]
+ ldr r0, [r4, #0x14]
+ mov r1, #9
+ bl MOD15_021D8900
+ ldr r0, _021D81BC ; =MOD15_021D7D00
+ str r0, [r4, #0x24]
+ mov r0, #3
+ str r0, [r5]
+ b _021D81B4
+_021D80BC:
+ cmp r0, #2
+ bne _021D80CA
+ add r0, r4, #0
+ add r0, #0x54
+ bl MOD15_021D82A8
+ b _021D80E2
+_021D80CA:
+ cmp r0, #3
+ bne _021D80D8
+ add r0, r4, #0
+ add r0, #0x54
+ bl MOD15_021D82D0
+ b _021D80E2
+_021D80D8:
+ ldrh r1, [r4, #0x34]
+ add r0, r4, #0
+ add r0, #0x54
+ bl MOD15_021D81C8
+_021D80E2:
+ cmp r0, #1
+ beq _021D80F0
+ cmp r0, #2
+ beq _021D8102
+ cmp r0, #3
+ beq _021D8118
+ b _021D812E
+_021D80F0:
+ ldr r0, _021D81C0 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #0x14]
+ mov r1, #0xf
+ bl MOD15_021D8900
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_021D8102:
+ ldr r0, _021D81C0 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #0x14]
+ mov r1, #0x10
+ bl MOD15_021D8900
+ mov r0, #1
+ str r0, [r5]
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_021D8118:
+ ldr r0, _021D81C0 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #0x14]
+ mov r1, #0x10
+ bl MOD15_021D8900
+ mov r0, #2
+ str r0, [r5]
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_021D812E:
+ ldrh r1, [r4, #0x30]
+ mov r0, #2
+ tst r0, r1
+ beq _021D814E
+ ldr r0, _021D81C0 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #0x14]
+ mov r1, #9
+ bl MOD15_021D8900
+ ldr r0, _021D81BC ; =MOD15_021D7D00
+ str r0, [r4, #0x24]
+ mov r0, #3
+ str r0, [r5]
+ b _021D81B4
+_021D814E:
+ mov r0, #1
+ tst r0, r1
+ beq _021D81B4
+ ldr r0, _021D81C0 ; =0x000005DC
+ bl FUN_020054C8
+ add r0, r4, #0
+ bl MOD15_021D8310
+ ldr r0, _021D81C4 ; =MOD15_021D779C
+ mov r1, #0xa
+ str r0, [r4, #0x24]
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D8900
+ mov r0, #3
+ str r0, [r5]
+ b _021D81B4
+_021D8172:
+ ldr r0, [r4, #0x14]
+ mov r1, #0x10
+ bl MOD15_021D8970
+ cmp r0, #0
+ beq _021D81B4
+ mov r0, #0
+ str r0, [r5]
+ b _021D81B4
+_021D8184:
+ ldr r0, [r4, #0x14]
+ mov r1, #0x10
+ bl MOD15_021D8970
+ cmp r0, #0
+ beq _021D81B4
+ ldr r0, [r4, #0x14]
+ mov r1, #0xf
+ bl MOD15_021D8900
+ mov r0, #0
+ str r0, [r5]
+ b _021D81B4
+_021D819E:
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D81B4
+ ldr r1, [r4, #0x24]
+ add r0, r4, #0
+ bl MOD15_021D7794
+ mov r0, #0
+ str r0, [r5]
+_021D81B4:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D81B8: .word 0x000005E4
+_021D81BC: .word MOD15_021D7D00
+_021D81C0: .word 0x000005DC
+_021D81C4: .word MOD15_021D779C
+
+ thumb_func_start MOD15_021D81C8
+MOD15_021D81C8: ; 0x021D81C8
+ push {r3, r4, r5, lr}
+ mov r2, #0x80
+ add r4, r0, #0
+ tst r2, r1
+ beq _021D8232
+ ldrb r1, [r4, #7]
+ cmp r1, #4
+ bhs _021D8206
+ add r1, r1, #1
+ strb r1, [r4, #7]
+ bl MOD15_021D8028
+ ldrh r1, [r4, #4]
+ cmp r0, r1
+ bhs _021D81EA
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_021D81EA:
+ cmp r0, r1
+ bne _021D81FC
+ mov r1, #1
+ tst r0, r1
+ beq _021D81FC
+ mov r0, #0
+ strb r0, [r4, #6]
+ add r0, r1, #0
+ pop {r3, r4, r5, pc}
+_021D81FC:
+ ldrb r0, [r4, #7]
+ sub r0, r0, #1
+ strb r0, [r4, #7]
+ mov r0, #4
+ pop {r3, r4, r5, pc}
+_021D8206:
+ ldrh r2, [r4]
+ ldrh r1, [r4, #2]
+ cmp r2, r1
+ bhs _021D822E
+ mov r1, #1
+ str r1, [r4, #8]
+ ldrh r1, [r4]
+ add r1, r1, #1
+ strh r1, [r4]
+ bl MOD15_021D8028
+ ldrh r1, [r4, #4]
+ cmp r0, r1
+ bhs _021D8226
+ mov r0, #2
+ pop {r3, r4, r5, pc}
+_021D8226:
+ mov r0, #0
+ strb r0, [r4, #6]
+ mov r0, #3
+ pop {r3, r4, r5, pc}
+_021D822E:
+ mov r0, #4
+ pop {r3, r4, r5, pc}
+_021D8232:
+ mov r5, #0x40
+ add r2, r1, #0
+ tst r2, r5
+ beq _021D8260
+ ldrb r0, [r4, #7]
+ cmp r0, #0
+ beq _021D8248
+ sub r0, r0, #1
+ strb r0, [r4, #7]
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_021D8248:
+ ldrh r0, [r4]
+ cmp r0, #0
+ beq _021D825C
+ sub r5, #0x41
+ str r5, [r4, #8]
+ ldrh r0, [r4]
+ sub r0, r0, #1
+ strh r0, [r4]
+ mov r0, #2
+ pop {r3, r4, r5, pc}
+_021D825C:
+ mov r0, #4
+ pop {r3, r4, r5, pc}
+_021D8260:
+ mov r3, #0x30
+ add r2, r1, #0
+ tst r2, r3
+ beq _021D828A
+ ldrb r2, [r4, #6]
+ mov r1, #1
+ eor r1, r2
+ strb r1, [r4, #6]
+ bl MOD15_021D8028
+ ldrh r1, [r4, #4]
+ cmp r0, r1
+ bhs _021D827E
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_021D827E:
+ ldrb r1, [r4, #6]
+ mov r0, #1
+ eor r0, r1
+ strb r0, [r4, #6]
+ mov r0, #4
+ pop {r3, r4, r5, pc}
+_021D828A:
+ lsl r2, r5, #3
+ tst r2, r1
+ beq _021D8296
+ bl MOD15_021D82A8
+ pop {r3, r4, r5, pc}
+_021D8296:
+ add r3, #0xd0
+ tst r1, r3
+ beq _021D82A2
+ bl MOD15_021D82D0
+ pop {r3, r4, r5, pc}
+_021D82A2:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D82A8
+MOD15_021D82A8: ; 0x021D82A8
+ ldrh r1, [r0]
+ cmp r1, #0
+ beq _021D82CA
+ cmp r1, #5
+ blo _021D82BE
+ sub r1, r1, #5
+ strh r1, [r0]
+ mov r1, #4
+ mvn r1, r1
+ str r1, [r0, #8]
+ b _021D82C6
+_021D82BE:
+ neg r1, r1
+ str r1, [r0, #8]
+ mov r1, #0
+ strh r1, [r0]
+_021D82C6:
+ mov r0, #2
+ bx lr
+_021D82CA:
+ mov r0, #4
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D82D0
+MOD15_021D82D0: ; 0x021D82D0
+ push {r4, lr}
+ add r4, r0, #0
+ ldrh r2, [r4, #2]
+ ldrh r1, [r4]
+ cmp r1, r2
+ bhs _021D830C
+ add r0, r1, #5
+ cmp r0, r2
+ bgt _021D82EC
+ mov r0, #5
+ str r0, [r4, #8]
+ ldrh r0, [r4]
+ add r0, r0, #5
+ b _021D82F2
+_021D82EC:
+ sub r0, r2, r1
+ str r0, [r4, #8]
+ ldrh r0, [r4, #2]
+_021D82F2:
+ strh r0, [r4]
+ add r0, r4, #0
+ bl MOD15_021D8028
+ ldrh r1, [r4, #4]
+ cmp r0, r1
+ bhs _021D8304
+ mov r0, #2
+ pop {r4, pc}
+_021D8304:
+ mov r0, #0
+ strb r0, [r4, #6]
+ mov r0, #3
+ pop {r4, pc}
+_021D830C:
+ mov r0, #4
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D8310
+MOD15_021D8310: ; 0x021D8310
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, #0x54
+ bl MOD15_021D8028
+ add r2, r0, #0
+ add r0, r4, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #0
+ ldr r0, [r4, #0x18]
+ bne _021D8334
+ add r1, r4, #0
+ add r1, #0x50
+ ldrh r1, [r1]
+ bl FUN_020892EC
+ b _021D833E
+_021D8334:
+ add r1, r4, #0
+ add r1, #0x50
+ ldrh r1, [r1]
+ bl FUN_02089338
+_021D833E:
+ add r2, r0, #0
+ ldr r0, [r4, #4]
+ cmp r0, #0
+ beq _021D8350
+ cmp r0, #1
+ beq _021D8354
+ cmp r0, #2
+ beq _021D8362
+ b _021D8370
+_021D8350:
+ strh r2, [r4, #0x10]
+ b _021D8370
+_021D8354:
+ add r0, r4, #0
+ add r0, #0x4e
+ ldrh r0, [r0]
+ lsl r0, r0, #1
+ add r0, r4, r0
+ strh r2, [r0, #0x10]
+ b _021D8370
+_021D8362:
+ add r1, r4, #0
+ add r1, #0x4e
+ ldrh r1, [r1]
+ add r0, r4, #0
+ add r0, #8
+ bl FUN_02013998
+_021D8370:
+ add r0, r4, #0
+ bl MOD15_021D85EC
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D8378
+MOD15_021D8378: ; 0x021D8378
+ push {r4, lr}
+ add r4, r1, #0
+ ldr r1, [r4]
+ cmp r1, #0
+ beq _021D8388
+ cmp r1, #1
+ beq _021D8398
+ b _021D83A6
+_021D8388:
+ ldr r0, [r0, #0x14]
+ mov r1, #1
+ bl MOD15_021D8900
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ b _021D83A6
+_021D8398:
+ ldr r0, [r0, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D83A6
+ mov r0, #1
+ pop {r4, pc}
+_021D83A6:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D83AC
+MOD15_021D83AC: ; 0x021D83AC
+ str r1, [r0, #0x2c]
+ mov r1, #0
+ str r1, [r0, #0x28]
+ bx lr
+
+ thumb_func_start MOD15_021D83B4
+MOD15_021D83B4: ; 0x021D83B4
+ mov r1, #0
+ str r1, [r0, #0x2c]
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D83BC
+MOD15_021D83BC: ; 0x021D83BC
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldr r0, [r4]
+ cmp r0, #0
+ beq _021D83CE
+ cmp r0, #1
+ beq _021D83DE
+ pop {r3, r4, r5, pc}
+_021D83CE:
+ ldr r0, [r5, #0x14]
+ mov r1, #2
+ bl MOD15_021D8900
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ pop {r3, r4, r5, pc}
+_021D83DE:
+ ldr r0, [r5, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D83EE
+ add r0, r5, #0
+ bl MOD15_021D83B4
+_021D83EE:
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D83F0
+MOD15_021D83F0: ; 0x021D83F0
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r1, [r5]
+ add r4, r0, #0
+ cmp r1, #3
+ bls _021D83FE
+ b _021D850C
+_021D83FE:
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_021D840A: ; jump table
+ .short _021D8412 - _021D840A - 2 ; case 0
+ .short _021D8460 - _021D840A - 2 ; case 1
+ .short _021D84E6 - _021D840A - 2 ; case 2
+ .short _021D84FC - _021D840A - 2 ; case 3
+_021D8412:
+ bl MOD15_021D85D0
+ cmp r0, #0
+ bne _021D8424
+ ldr r0, [r4]
+ bl FUN_02085424
+ cmp r0, #0
+ beq _021D8456
+_021D8424:
+ add r0, r4, #0
+ bl MOD15_021D85EC
+ cmp r0, #0
+ beq _021D8448
+ add r0, r4, #0
+ add r0, #0x66
+ mov r1, #1
+ mov r2, #0
+ bl MOD15_021D8634
+ ldr r0, [r4, #0x14]
+ mov r1, #0x12
+ bl MOD15_021D8900
+ mov r0, #1
+ str r0, [r5]
+ pop {r3, r4, r5, pc}
+_021D8448:
+ ldr r0, [r4, #0x14]
+ mov r1, #0x14
+ bl MOD15_021D8900
+ mov r0, #2
+ str r0, [r5]
+ pop {r3, r4, r5, pc}
+_021D8456:
+ ldr r1, _021D8510 ; =MOD15_021D851C
+ add r0, r4, #0
+ bl MOD15_021D83AC
+ pop {r3, r4, r5, pc}
+_021D8460:
+ ldr r0, [r4, #0x14]
+ mov r1, #0x15
+ bl MOD15_021D8970
+ cmp r0, #0
+ beq _021D850C
+ ldrh r1, [r4, #0x30]
+ add r0, r4, #0
+ add r0, #0x66
+ bl MOD15_021D863C
+ add r0, r0, #3
+ cmp r0, #4
+ bhi _021D850C
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D8488: ; jump table
+ .short _021D8492 - _021D8488 - 2 ; case 0
+ .short _021D84A2 - _021D8488 - 2 ; case 1
+ .short _021D850C - _021D8488 - 2 ; case 2
+ .short _021D84B6 - _021D8488 - 2 ; case 3
+ .short _021D84A2 - _021D8488 - 2 ; case 4
+_021D8492:
+ ldr r0, _021D8514 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #0x14]
+ mov r1, #0x15
+ bl MOD15_021D8900
+ pop {r3, r4, r5, pc}
+_021D84A2:
+ ldr r0, _021D8514 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #0x14]
+ mov r1, #0x16
+ bl MOD15_021D8900
+ mov r0, #3
+ str r0, [r5]
+ pop {r3, r4, r5, pc}
+_021D84B6:
+ ldr r0, _021D8514 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #4]
+ cmp r0, #2
+ bne _021D84CA
+ add r0, r4, #0
+ add r0, #8
+ bl FUN_020139B0
+_021D84CA:
+ add r1, r4, #0
+ add r2, r4, #0
+ ldr r0, [r4]
+ add r1, #0x10
+ add r2, #8
+ bl FUN_020854A0
+ ldr r1, _021D8518 ; =MOD15_021D8378
+ add r0, r4, #0
+ bl MOD15_021D7794
+ mov r0, #3
+ str r0, [r5]
+ pop {r3, r4, r5, pc}
+_021D84E6:
+ ldrh r1, [r4, #0x30]
+ mov r0, #0xf3
+ tst r0, r1
+ beq _021D850C
+ ldr r0, [r4, #0x14]
+ mov r1, #0x11
+ bl MOD15_021D8900
+ mov r0, #3
+ str r0, [r5]
+ pop {r3, r4, r5, pc}
+_021D84FC:
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D850C
+ add r0, r4, #0
+ bl MOD15_021D83B4
+_021D850C:
+ pop {r3, r4, r5, pc}
+ nop
+_021D8510: .word MOD15_021D851C
+_021D8514: .word 0x000005DC
+_021D8518: .word MOD15_021D8378
+
+ thumb_func_start MOD15_021D851C
+MOD15_021D851C: ; 0x021D851C
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r4, r0, #0
+ ldr r0, [r5]
+ cmp r0, #0
+ beq _021D8532
+ cmp r0, #1
+ beq _021D854C
+ cmp r0, #2
+ beq _021D85B6
+ pop {r3, r4, r5, pc}
+_021D8532:
+ add r0, r4, #0
+ mov r1, #1
+ add r0, #0x66
+ add r2, r1, #0
+ bl MOD15_021D8634
+ ldr r0, [r4, #0x14]
+ mov r1, #0x13
+ bl MOD15_021D8900
+ mov r0, #1
+ str r0, [r5]
+ pop {r3, r4, r5, pc}
+_021D854C:
+ ldr r0, [r4, #0x14]
+ mov r1, #0x15
+ bl MOD15_021D8970
+ cmp r0, #0
+ beq _021D85C6
+ ldrh r1, [r4, #0x30]
+ add r0, r4, #0
+ add r0, #0x66
+ bl MOD15_021D863C
+ add r0, r0, #3
+ cmp r0, #4
+ bhi _021D85C6
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D8574: ; jump table
+ .short _021D857E - _021D8574 - 2 ; case 0
+ .short _021D858E - _021D8574 - 2 ; case 1
+ .short _021D85C6 - _021D8574 - 2 ; case 2
+ .short _021D85A2 - _021D8574 - 2 ; case 3
+ .short _021D858E - _021D8574 - 2 ; case 4
+_021D857E:
+ ldr r0, _021D85C8 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #0x14]
+ mov r1, #0x15
+ bl MOD15_021D8900
+ pop {r3, r4, r5, pc}
+_021D858E:
+ ldr r0, _021D85C8 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r0, [r4, #0x14]
+ mov r1, #0x16
+ bl MOD15_021D8900
+ mov r0, #2
+ str r0, [r5]
+ pop {r3, r4, r5, pc}
+_021D85A2:
+ ldr r0, _021D85C8 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r1, _021D85CC ; =MOD15_021D8378
+ add r0, r4, #0
+ bl MOD15_021D7794
+ mov r0, #2
+ str r0, [r5]
+ pop {r3, r4, r5, pc}
+_021D85B6:
+ ldr r0, [r4, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D85C6
+ add r0, r4, #0
+ bl MOD15_021D83B4
+_021D85C6:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D85C8: .word 0x000005DC
+_021D85CC: .word MOD15_021D8378
+
+ thumb_func_start MOD15_021D85D0
+MOD15_021D85D0: ; 0x021D85D0
+ push {r3, lr}
+ add r2, r0, #0
+ add r1, r2, #0
+ ldr r0, [r2]
+ add r1, #0x10
+ add r2, #8
+ bl FUN_0208545C
+ cmp r0, #0
+ bne _021D85E8
+ mov r0, #1
+ pop {r3, pc}
+_021D85E8:
+ mov r0, #0
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021D85EC
+MOD15_021D85EC: ; 0x021D85EC
+ push {r3, lr}
+ ldr r1, [r0, #4]
+ cmp r1, #0
+ beq _021D85FE
+ cmp r1, #1
+ beq _021D860E
+ cmp r1, #2
+ beq _021D8624
+ b _021D862C
+_021D85FE:
+ ldrh r1, [r0, #0x10]
+ ldr r0, _021D8630 ; =0x0000FFFF
+ cmp r1, r0
+ beq _021D860A
+ mov r0, #1
+ pop {r3, pc}
+_021D860A:
+ mov r0, #0
+ pop {r3, pc}
+_021D860E:
+ ldrh r2, [r0, #0x10]
+ ldr r1, _021D8630 ; =0x0000FFFF
+ cmp r2, r1
+ beq _021D8620
+ ldrh r0, [r0, #0x12]
+ cmp r0, r1
+ beq _021D8620
+ mov r0, #1
+ pop {r3, pc}
+_021D8620:
+ mov r0, #0
+ pop {r3, pc}
+_021D8624:
+ add r0, #8
+ bl FUN_02013870
+ pop {r3, pc}
+_021D862C:
+ mov r0, #0
+ pop {r3, pc}
+ .align 2, 0
+_021D8630: .word 0x0000FFFF
+
+ thumb_func_start MOD15_021D8634
+MOD15_021D8634: ; 0x021D8634
+ strb r2, [r0]
+ strb r1, [r0, #1]
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D863C
+MOD15_021D863C: ; 0x021D863C
+ mov r2, #0x40
+ add r3, r1, #0
+ tst r3, r2
+ beq _021D865A
+ ldrb r1, [r0]
+ cmp r1, #0
+ bne _021D8650
+ sub r2, #0x44
+ add r0, r2, #0
+ bx lr
+_021D8650:
+ sub r1, r1, #1
+ sub r2, #0x43
+ strb r1, [r0]
+ add r0, r2, #0
+ bx lr
+_021D865A:
+ mov r2, #0x80
+ add r3, r1, #0
+ tst r3, r2
+ beq _021D867A
+ ldrb r3, [r0]
+ ldrb r1, [r0, #1]
+ cmp r3, r1
+ bne _021D8670
+ sub r2, #0x84
+ add r0, r2, #0
+ bx lr
+_021D8670:
+ add r1, r3, #1
+ sub r2, #0x83
+ strb r1, [r0]
+ add r0, r2, #0
+ bx lr
+_021D867A:
+ mov r2, #1
+ tst r2, r1
+ beq _021D8684
+ ldrb r0, [r0]
+ bx lr
+_021D8684:
+ mov r0, #2
+ tst r1, r0
+ beq _021D868E
+ sub r0, r0, #4
+ bx lr
+_021D868E:
+ sub r0, r0, #3
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8694
+MOD15_021D8694: ; 0x021D8694
+ ldrb r0, [r0]
+ bx lr
+
+ thumb_func_start MOD15_021D8698
+MOD15_021D8698: ; 0x021D8698
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldr r0, [r4]
+ cmp r0, #0
+ beq _021D86AA
+ cmp r0, #1
+ beq _021D86CE
+ pop {r3, r4, r5, pc}
+_021D86AA:
+ ldr r0, _021D86E0 ; =0x000005E4
+ bl FUN_020054C8
+ add r0, r5, #0
+ add r0, #0x65
+ ldrb r1, [r0]
+ mov r0, #1
+ eor r1, r0
+ add r0, r5, #0
+ add r0, #0x65
+ strb r1, [r0]
+ ldr r0, [r5, #0x14]
+ mov r1, #0x17
+ bl MOD15_021D8900
+ mov r0, #1
+ str r0, [r4]
+ pop {r3, r4, r5, pc}
+_021D86CE:
+ ldr r0, [r5, #0x14]
+ bl MOD15_021D8958
+ cmp r0, #0
+ beq _021D86DE
+ add r0, r5, #0
+ bl MOD15_021D83B4
+_021D86DE:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D86E0: .word 0x000005E4
+
+ thumb_func_start MOD15_021D86E4
+MOD15_021D86E4: ; 0x021D86E4
+ ldr r0, [r0, #4]
+ bx lr
+
+ thumb_func_start MOD15_021D86E8
+MOD15_021D86E8: ; 0x021D86E8
+ ldr r3, _021D86F0 ; =0x02085411
+ ldr r0, [r0]
+ bx r3
+ nop
+_021D86F0: .word 0x02085411
+
+ thumb_func_start MOD15_021D86F4
+MOD15_021D86F4: ; 0x021D86F4
+ add r0, #0x65
+ ldrb r0, [r0]
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D86FC
+MOD15_021D86FC: ; 0x021D86FC
+ ldr r3, _021D8704 ; =0x02013921
+ add r0, #8
+ bx r3
+ nop
+_021D8704: .word 0x02013921
+
+ thumb_func_start MOD15_021D8708
+MOD15_021D8708: ; 0x021D8708
+ push {r3, lr}
+ ldr r2, [r0, #4]
+ cmp r2, #2
+ bne _021D8718
+ add r0, #8
+ bl FUN_02013918
+ pop {r3, pc}
+_021D8718:
+ lsl r1, r1, #1
+ add r0, r0, r1
+ ldrh r0, [r0, #0x10]
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021D8720
+MOD15_021D8720: ; 0x021D8720
+ ldr r3, _021D8728 ; =0x02013841
+ add r0, #8
+ bx r3
+ nop
+_021D8728: .word 0x02013841
+
+ thumb_func_start MOD15_021D872C
+MOD15_021D872C: ; 0x021D872C
+ add r0, #0x4e
+ ldrh r0, [r0]
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8734
+MOD15_021D8734: ; 0x021D8734
+ add r0, #0x4c
+ ldrh r0, [r0]
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D873C
+MOD15_021D873C: ; 0x021D873C
+ add r0, #0x50
+ ldrh r0, [r0]
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8744
+MOD15_021D8744: ; 0x021D8744
+ push {r3, lr}
+ add r1, r0, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ cmp r0, #0
+ ldr r0, [r1, #0x18]
+ bne _021D875C
+ add r1, #0x50
+ ldrh r1, [r1]
+ bl FUN_020892C4
+ pop {r3, pc}
+_021D875C:
+ add r1, #0x50
+ ldrh r1, [r1]
+ bl FUN_02089300
+ pop {r3, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8768
+MOD15_021D8768: ; 0x021D8768
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r0, #0x65
+ ldrb r0, [r0]
+ add r4, r1, #0
+ add r3, r2, #0
+ cmp r0, #0
+ ldr r0, [r5, #0x18]
+ bne _021D8786
+ add r5, #0x50
+ ldrh r1, [r5]
+ add r2, r4, #0
+ bl FUN_020892CC
+ pop {r3, r4, r5, pc}
+_021D8786:
+ add r5, #0x50
+ ldrh r1, [r5]
+ add r2, r4, #0
+ bl FUN_02089310
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8794
+MOD15_021D8794: ; 0x021D8794
+ ldr r3, _021D879C ; =MOD15_021D801C
+ add r0, #0x54
+ bx r3
+ nop
+_021D879C: .word MOD15_021D801C
+
+ thumb_func_start MOD15_021D87A0
+MOD15_021D87A0: ; 0x021D87A0
+ ldr r3, _021D87A8 ; =MOD15_021D8038
+ add r0, #0x54
+ bx r3
+ nop
+_021D87A8: .word MOD15_021D8038
+
+ thumb_func_start MOD15_021D87AC
+MOD15_021D87AC: ; 0x021D87AC
+ push {r3, lr}
+ add r0, #0x54
+ bl MOD15_021D803C
+ cmp r0, #0
+ beq _021D87BC
+ mov r0, #1
+ pop {r3, pc}
+_021D87BC:
+ mov r0, #0
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021D87C0
+MOD15_021D87C0: ; 0x021D87C0
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r0, #0x54
+ bl MOD15_021D803C
+ add r5, #0x54
+ add r4, r0, #0
+ add r0, r5, #0
+ bl MOD15_021D8040
+ cmp r4, r0
+ bge _021D87DC
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_021D87DC:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D87E0
+MOD15_021D87E0: ; 0x021D87E0
+ ldr r3, _021D87E8 ; =0x02085415
+ ldr r0, [r0]
+ bx r3
+ nop
+_021D87E8: .word 0x02085415
+
+ thumb_func_start MOD15_021D87EC
+MOD15_021D87EC: ; 0x021D87EC
+ ldr r3, _021D87F4 ; =MOD15_021D8694
+ add r0, #0x66
+ bx r3
+ nop
+_021D87F4: .word MOD15_021D8694
+
+ thumb_func_start MOD15_021D87F8
+MOD15_021D87F8: ; 0x021D87F8
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0x14
+ add r6, r1, #0
+ mov r1, #0x7d
+ add r5, r0, #0
+ mov r0, #0x23
+ lsl r1, r1, #2
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _021D8878
+ mov r0, #0
+ add r1, r0, #0
+ bl FUN_02015F10
+ bl FUN_02015F1C
+ str r5, [r4, #0x18]
+ str r6, [r4, #0x1c]
+ bl FUN_020B0FC0
+ mov r0, #0
+ str r0, [sp]
+ mov r1, #0x80
+ str r1, [sp, #4]
+ str r0, [sp, #8]
+ mov r3, #0x20
+ str r3, [sp, #0xc]
+ mov r2, #0x23
+ str r2, [sp, #0x10]
+ add r2, r0, #0
+ bl FUN_02009EAC
+ add r1, r4, #0
+ mov r0, #0x80
+ add r1, #0x28
+ mov r2, #0x23
+ bl FUN_02008C9C
+ str r0, [r4, #0x24]
+ mov r0, #0x23
+ bl FUN_02016B94
+ str r0, [r4, #0x20]
+ ldr r0, _021D8880 ; =MOD15_021D88D8
+ add r1, r4, #0
+ mov r2, #2
+ bl FUN_0200CA44
+ str r0, [r4]
+ ldr r0, _021D8884 ; =MOD15_021D88DC
+ add r1, r4, #0
+ mov r2, #1
+ bl MOD15_021D88D0
+ mov r1, #0
+ str r0, [r4, #4]
+ add r2, r4, #0
+ add r0, r1, #0
+_021D886E:
+ add r1, r1, #1
+ str r0, [r2, #8]
+ add r2, r2, #4
+ cmp r1, #4
+ blt _021D886E
+_021D8878:
+ add r0, r4, #0
+ add sp, #0x14
+ pop {r3, r4, r5, r6, pc}
+ nop
+_021D8880: .word MOD15_021D88D8
+_021D8884: .word MOD15_021D88DC
+
+ thumb_func_start MOD15_021D8888
+MOD15_021D8888: ; 0x021D8888
+ push {r4, r5, r6, lr}
+ add r6, r0, #0
+ beq _021D88CE
+ mov r0, #0
+ add r1, r0, #0
+ bl FUN_02015F10
+ mov r4, #0
+ add r5, r6, #0
+_021D889A:
+ ldr r0, [r5, #8]
+ cmp r0, #0
+ beq _021D88A4
+ bl FUN_0200CAB4
+_021D88A4:
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #4
+ blt _021D889A
+ ldr r0, [r6]
+ bl FUN_0200CAB4
+ ldr r0, [r6, #4]
+ bl FUN_0200CAB4
+ bl FUN_02009FA0
+ ldr r0, [r6, #0x24]
+ bl FUN_0201FD58
+ ldr r0, [r6, #0x20]
+ bl FUN_02016A18
+ add r0, r6, #0
+ bl FUN_02016A18
+_021D88CE:
+ pop {r4, r5, r6, pc}
+
+ thumb_func_start MOD15_021D88D0
+MOD15_021D88D0: ; 0x021D88D0
+ ldr r3, _021D88D4 ; =0x0200CA61
+ bx r3
+ .align 2, 0
+_021D88D4: .word 0x0200CA61
+
+ thumb_func_start MOD15_021D88D8
+MOD15_021D88D8: ; 0x021D88D8
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D88DC
+MOD15_021D88DC: ; 0x021D88DC
+ push {r3, lr}
+ ldr r0, [r1, #0x24]
+ bl FUN_0201FDEC
+ bl FUN_02009F80
+ ldr r3, _021D88F8 ; =0x027E0000
+ ldr r1, _021D88FC ; =0x00003FF8
+ mov r0, #1
+ ldr r2, [r3, r1]
+ orr r0, r2
+ str r0, [r3, r1]
+ pop {r3, pc}
+ nop
+_021D88F8: .word 0x027E0000
+_021D88FC: .word 0x00003FF8
+
+ thumb_func_start MOD15_021D8900
+MOD15_021D8900: ; 0x021D8900
+ push {r4, r5, r6, lr}
+ add r6, r1, #0
+ add r5, r0, #0
+ cmp r6, #0x1d
+ bhs _021D894E
+ mov r0, #0x23
+ mov r1, #0x18
+ bl FUN_02016998
+ add r1, r0, #0
+ beq _021D8952
+ mov r4, #0
+ str r4, [r1, #0x14]
+ str r6, [r1, #0xc]
+ str r5, [r1]
+ ldr r0, [r5, #0x18]
+ add r2, r5, #0
+ str r0, [r1, #4]
+ ldr r0, [r5, #0x1c]
+ str r0, [r1, #8]
+_021D8928:
+ ldr r0, [r2, #8]
+ cmp r0, #0
+ bne _021D8944
+ ldr r0, _021D8954 ; =0x021DB98C
+ lsl r2, r6, #2
+ ldr r0, [r0, r2]
+ mov r2, #1
+ str r4, [r1, #0x10]
+ bl FUN_0200CA44
+ lsl r1, r4, #2
+ add r1, r5, r1
+ str r0, [r1, #8]
+ pop {r4, r5, r6, pc}
+_021D8944:
+ add r4, r4, #1
+ add r2, r2, #4
+ cmp r4, #4
+ blt _021D8928
+ pop {r4, r5, r6, pc}
+_021D894E:
+ bl ErrorHandling
+_021D8952:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_021D8954: .word 0x021DB98C
+
+ thumb_func_start MOD15_021D8958
+MOD15_021D8958: ; 0x021D8958
+ mov r2, #0
+_021D895A:
+ ldr r1, [r0, #8]
+ cmp r1, #0
+ beq _021D8964
+ mov r0, #0
+ bx lr
+_021D8964:
+ add r2, r2, #1
+ add r0, r0, #4
+ cmp r2, #4
+ blt _021D895A
+ mov r0, #1
+ bx lr
+
+ thumb_func_start MOD15_021D8970
+MOD15_021D8970: ; 0x021D8970
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r4, #0
+_021D8978:
+ ldr r0, [r5, #8]
+ cmp r0, #0
+ beq _021D898C
+ bl FUN_0201B6C8
+ ldr r0, [r0, #0xc]
+ cmp r0, r6
+ bne _021D898C
+ mov r0, #0
+ pop {r4, r5, r6, pc}
+_021D898C:
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #4
+ blt _021D8978
+ mov r0, #1
+ pop {r4, r5, r6, pc}
+
+ thumb_func_start MOD15_021D8998
+MOD15_021D8998: ; 0x021D8998
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x10]
+ ldr r1, [r4]
+ lsl r0, r0, #2
+ add r0, r1, r0
+ ldr r0, [r0, #8]
+ bl FUN_0200CAB4
+ ldr r0, [r4, #0x10]
+ ldr r1, [r4]
+ lsl r0, r0, #2
+ mov r2, #0
+ add r0, r1, r0
+ str r2, [r0, #8]
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D89C0
+MOD15_021D89C0: ; 0x021D89C0
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ bl FUN_0201E6D8
+ bl FUN_0201E740
+ mov r1, #1
+ lsl r1, r1, #0x1a
+ ldr r0, [r1]
+ ldr r2, _021D8AA4 ; =0xFFFFE0FF
+ and r0, r2
+ str r0, [r1]
+ ldr r0, _021D8AA8 ; =0x04001000
+ ldr r3, [r0]
+ and r2, r3
+ str r2, [r0]
+ ldr r2, [r1]
+ ldr r3, _021D8AAC ; =0xFFCFFFEF
+ add r5, r2, #0
+ ldr r2, _021D8AB0 ; =0x00100010
+ and r5, r3
+ orr r2, r5
+ str r2, [r1]
+ ldr r1, [r0]
+ add r2, r1, #0
+ and r2, r3
+ mov r1, #0x10
+ orr r1, r2
+ str r1, [r0]
+ add r0, r4, #0
+ bl MOD15_021D8C30
+ add r0, r4, #0
+ bl MOD15_021D8AB4
+ ldr r0, [r4]
+ ldr r1, [r4, #4]
+ ldr r2, [r4, #8]
+ bl MOD15_021D95E8
+ mov r1, #0x1e
+ ldr r2, [r4]
+ lsl r1, r1, #4
+ str r0, [r2, r1]
+ ldr r0, [r4]
+ ldr r0, [r0, r1]
+ bl MOD15_021D9694
+ ldr r0, [r4]
+ ldr r1, [r4, #4]
+ ldr r2, [r4, #8]
+ bl MOD15_021D9FA0
+ mov r1, #0x79
+ ldr r2, [r4]
+ lsl r1, r1, #2
+ str r0, [r2, r1]
+ ldr r0, [r4]
+ ldr r0, [r0, r1]
+ bl MOD15_021D9FD4
+ ldr r0, [r4]
+ ldr r1, [r4, #4]
+ ldr r2, [r4, #8]
+ bl MOD15_021DA18C
+ mov r1, #0x7a
+ ldr r2, [r4]
+ lsl r1, r1, #2
+ str r0, [r2, r1]
+ ldr r0, [r4]
+ ldr r0, [r0, r1]
+ bl MOD15_021DA1D0
+ ldr r0, [r4]
+ ldr r1, [r4, #4]
+ ldr r2, [r4, #8]
+ bl MOD15_021DA828
+ mov r1, #0x7b
+ ldr r2, [r4]
+ lsl r1, r1, #2
+ str r0, [r2, r1]
+ ldr r0, [r4]
+ ldr r0, [r0, r1]
+ bl MOD15_021DA8E8
+ ldr r0, [r4]
+ ldr r1, [r4, #4]
+ ldr r2, [r4, #8]
+ bl MOD15_021DAE68
+ mov r1, #0x1f
+ ldr r2, [r4]
+ lsl r1, r1, #4
+ str r0, [r2, r1]
+ ldr r0, [r4]
+ ldr r0, [r0, r1]
+ bl MOD15_021DAEB4
+ mov r0, #0x10
+ mov r1, #1
+ bl FUN_0201E6E4
+ mov r0, #0x10
+ mov r1, #1
+ bl FUN_0201E74C
+ bl GX_DispOn
+ add r0, r4, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D8AA4: .word 0xFFFFE0FF
+_021D8AA8: .word 0x04001000
+_021D8AAC: .word 0xFFCFFFEF
+_021D8AB0: .word 0x00100010
+
+ thumb_func_start MOD15_021D8AB4
+MOD15_021D8AB4: ; 0x021D8AB4
+ push {r3, r4, lr}
+ sub sp, #0x14
+ ldr r4, [r0]
+ mov r0, #0x66
+ lsl r0, r0, #2
+ add r0, r4, r0
+ bl FUN_020B19DC
+ mov r0, #0x6b
+ lsl r0, r0, #2
+ add r0, r4, r0
+ bl FUN_020B19DC
+ mov r0, #0x15
+ lsl r0, r0, #4
+ add r0, r4, r0
+ bl FUN_020B1A24
+ mov r0, #0x5d
+ lsl r0, r0, #2
+ add r0, r4, r0
+ bl FUN_020B1A24
+ mov r3, #0
+ str r3, [sp]
+ mov r2, #1
+ str r2, [sp, #4]
+ str r3, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ mov r0, #0x15
+ lsl r0, r0, #4
+ add r0, r4, r0
+ str r0, [sp, #0x10]
+ mov r0, #0x4c
+ mov r1, #9
+ bl FUN_02006AE4
+ mov r0, #0x23
+ str r0, [sp]
+ mov r0, #0x66
+ lsl r0, r0, #2
+ add r0, r4, r0
+ str r0, [sp, #4]
+ mov r0, #0x4c
+ mov r1, #0xa
+ mov r2, #1
+ mov r3, #0
+ bl FUN_02006A8C
+ mov r1, #7
+ mov r0, #0x23
+ lsl r3, r1, #6
+ str r0, [sp]
+ mov r0, #0x4c
+ mov r2, #1
+ add r3, r4, r3
+ bl FUN_02006C30
+ mov r3, #0x1d
+ lsl r3, r3, #4
+ str r0, [r4, r3]
+ mov r0, #0x23
+ sub r3, #8
+ str r0, [sp]
+ mov r0, #0x4c
+ mov r1, #8
+ mov r2, #1
+ add r3, r4, r3
+ bl FUN_02006C5C
+ mov r1, #0x76
+ lsl r1, r1, #2
+ str r0, [r4, r1]
+ mov r2, #0
+ sub r0, r1, #4
+ str r2, [r4, r0]
+ add r0, r1, #4
+ str r2, [r4, r0]
+ add sp, #0x14
+ pop {r3, r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8B58
+MOD15_021D8B58: ; 0x021D8B58
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0xc
+ add r6, r1, #0
+ ldr r0, [r6, #0x14]
+ ldr r7, [r6]
+ cmp r0, #0
+ beq _021D8B6E
+ cmp r0, #1
+ beq _021D8B90
+ add sp, #0xc
+ pop {r4, r5, r6, r7, pc}
+_021D8B6E:
+ mov r0, #5
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ mov r0, #0x23
+ str r0, [sp, #8]
+ mov r0, #0
+ add r1, r0, #0
+ add r2, r0, #0
+ add r3, r0, #0
+ bl FUN_0200E1D0
+ ldr r0, [r6, #0x14]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r6, #0x14]
+ pop {r4, r5, r6, r7, pc}
+_021D8B90:
+ bl FUN_0200E308
+ cmp r0, #0
+ beq _021D8C2A
+ mov r0, #0x1e
+ ldr r1, [r6]
+ lsl r0, r0, #4
+ ldr r0, [r1, r0]
+ bl MOD15_021D9634
+ mov r0, #0x79
+ ldr r1, [r6]
+ lsl r0, r0, #2
+ ldr r0, [r1, r0]
+ bl MOD15_021D9FBC
+ mov r0, #0x7a
+ ldr r1, [r6]
+ lsl r0, r0, #2
+ ldr r0, [r1, r0]
+ bl MOD15_021DA1B8
+ mov r0, #0x7b
+ ldr r1, [r6]
+ lsl r0, r0, #2
+ ldr r0, [r1, r0]
+ bl MOD15_021DA8A4
+ mov r0, #0x1f
+ ldr r1, [r6]
+ lsl r0, r0, #4
+ ldr r0, [r1, r0]
+ bl MOD15_021DAEA4
+ mov r4, #0
+ add r5, r7, #0
+_021D8BD8:
+ mov r0, #0x1d
+ lsl r0, r0, #4
+ ldr r0, [r5, r0]
+ cmp r0, #0
+ beq _021D8BE6
+ bl FUN_02016A18
+_021D8BE6:
+ mov r0, #0x76
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ cmp r0, #0
+ beq _021D8BF4
+ bl FUN_02016A18
+_021D8BF4:
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #2
+ blt _021D8BD8
+ ldr r0, [r7, #0x20]
+ mov r1, #0
+ bl FUN_020178A0
+ ldr r0, [r7, #0x20]
+ mov r1, #1
+ bl FUN_020178A0
+ ldr r0, [r7, #0x20]
+ mov r1, #2
+ bl FUN_020178A0
+ ldr r0, [r7, #0x20]
+ mov r1, #3
+ bl FUN_020178A0
+ ldr r0, [r7, #0x20]
+ mov r1, #4
+ bl FUN_020178A0
+ add r0, r6, #0
+ bl MOD15_021D8998
+_021D8C2A:
+ add sp, #0xc
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8C30
+MOD15_021D8C30: ; 0x021D8C30
+ push {r4, lr}
+ ldr r2, _021D8C94 ; =0x04000304
+ ldr r4, [r0]
+ ldrh r1, [r2]
+ lsr r0, r2, #0xb
+ orr r0, r1
+ strh r0, [r2]
+ mov r0, #1
+ mov r1, #0
+ add r2, r0, #0
+ bl GX_SetGraphicsMode
+ ldr r0, _021D8C98 ; =0x021DB964
+ bl FUN_0201E66C
+ ldr r0, _021D8C9C ; =0x021DB8C8
+ bl FUN_02016BBC
+ mov r1, #0
+ ldr r0, [r4, #0x20]
+ ldr r2, _021D8CA0 ; =0x021DB910
+ add r3, r1, #0
+ bl FUN_02016C18
+ ldr r0, [r4, #0x20]
+ ldr r2, _021D8CA4 ; =0x021DB8D8
+ mov r1, #1
+ mov r3, #0
+ bl FUN_02016C18
+ ldr r0, [r4, #0x20]
+ ldr r2, _021D8CA8 ; =0x021DB948
+ mov r1, #2
+ mov r3, #0
+ bl FUN_02016C18
+ ldr r0, [r4, #0x20]
+ ldr r2, _021D8CAC ; =0x021DB8F4
+ mov r1, #3
+ mov r3, #0
+ bl FUN_02016C18
+ ldr r0, [r4, #0x20]
+ ldr r2, _021D8CB0 ; =0x021DB92C
+ mov r1, #4
+ mov r3, #0
+ bl FUN_02016C18
+ pop {r4, pc}
+ nop
+_021D8C94: .word 0x04000304
+_021D8C98: .word 0x021DB964
+_021D8C9C: .word 0x021DB8C8
+_021D8CA0: .word 0x021DB910
+_021D8CA4: .word 0x021DB8D8
+_021D8CA8: .word 0x021DB948
+_021D8CAC: .word 0x021DB8F4
+_021D8CB0: .word 0x021DB92C
+
+ thumb_func_start MOD15_021D8CB4
+MOD15_021D8CB4: ; 0x021D8CB4
+ push {r3, r4, lr}
+ sub sp, #0xc
+ add r4, r1, #0
+ ldr r0, [r4, #0x14]
+ cmp r0, #0
+ beq _021D8CC6
+ cmp r0, #1
+ beq _021D8CE6
+ b _021D8CF8
+_021D8CC6:
+ mov r0, #5
+ str r0, [sp]
+ mov r1, #1
+ str r1, [sp, #4]
+ mov r0, #0x23
+ str r0, [sp, #8]
+ mov r0, #0
+ add r2, r1, #0
+ add r3, r0, #0
+ bl FUN_0200E1D0
+ ldr r0, [r4, #0x14]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #0x14]
+ pop {r3, r4, pc}
+_021D8CE6:
+ bl FUN_0200E308
+ cmp r0, #0
+ beq _021D8CFE
+ ldr r0, [r4, #0x14]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #0x14]
+ pop {r3, r4, pc}
+_021D8CF8:
+ add r0, r4, #0
+ bl MOD15_021D8998
+_021D8CFE:
+ add sp, #0xc
+ pop {r3, r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8D04
+MOD15_021D8D04: ; 0x021D8D04
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ mov r0, #0x1e
+ ldr r4, [r5]
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9964
+ ldr r0, [r5, #4]
+ bl MOD15_021D872C
+ add r1, r0, #0
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9E3C
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8D30
+MOD15_021D8D30: ; 0x021D8D30
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ mov r0, #0x1e
+ ldr r4, [r5]
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021D9DD8
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9DEC
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021DA10C
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D8734
+ add r1, r0, #0
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA124
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8D74
+MOD15_021D8D74: ; 0x021D8D74
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ mov r0, #0x79
+ ldr r4, [r5]
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DA10C
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9E0C
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021D9DD8
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D8DA4
+MOD15_021D8DA4: ; 0x021D8DA4
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #0x14]
+ ldr r4, [r5]
+ cmp r0, #0
+ beq _021D8DB6
+ cmp r0, #1
+ beq _021D8DDC
+ pop {r3, r4, r5, pc}
+_021D8DB6:
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9DC0
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9DEC
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA638
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D8DDC:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA650
+ cmp r0, #0
+ beq _021D8E18
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA164
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D873C
+ add r1, r0, #0
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA5B4
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021DA588
+ add r0, r5, #0
+ bl MOD15_021D8998
+_021D8E18:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D8E1C
+MOD15_021D8E1C: ; 0x021D8E1C
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #0x14]
+ ldr r4, [r5]
+ cmp r0, #0
+ beq _021D8E32
+ cmp r0, #1
+ beq _021D8E44
+ cmp r0, #2
+ beq _021D8E56
+ pop {r3, r4, r5, pc}
+_021D8E32:
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021DB2D0
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D8E44:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA7E8
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D8E56:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA81C
+ cmp r0, #0
+ beq _021D8E82
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021DB358
+ cmp r0, #0
+ beq _021D8E82
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA7C4
+ add r0, r5, #0
+ bl MOD15_021D8998
+_021D8E82:
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D8E84
+MOD15_021D8E84: ; 0x021D8E84
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #0x14]
+ ldr r4, [r5]
+ cmp r0, #3
+ bhi _021D8F26
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D8E9C: ; jump table
+ .short _021D8EA4 - _021D8E9C - 2 ; case 0
+ .short _021D8EB6 - _021D8E9C - 2 ; case 1
+ .short _021D8ED4 - _021D8E9C - 2 ; case 2
+ .short _021D8EF4 - _021D8E9C - 2 ; case 3
+_021D8EA4:
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021DB2D0
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D8EB6:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DA588
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA7E8
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D8ED4:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA81C
+ cmp r0, #0
+ beq _021D8F26
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA7C4
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D8EF4:
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021DB358
+ cmp r0, #0
+ beq _021D8F26
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D873C
+ add r1, r0, #0
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA5B4
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021DA588
+ add r0, r5, #0
+ bl MOD15_021D8998
+_021D8F26:
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D8F28
+MOD15_021D8F28: ; 0x021D8F28
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #0x14]
+ ldr r4, [r5]
+ cmp r0, #0
+ beq _021D8F3A
+ cmp r0, #1
+ beq _021D8F62
+ pop {r3, r4, r5, pc}
+_021D8F3A:
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA178
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DA588
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA6A0
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D8F62:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA6C4
+ cmp r0, #0
+ beq _021D8F8A
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9E0C
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9DCC
+ add r0, r5, #0
+ bl MOD15_021D8998
+_021D8F8A:
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D8F8C
+MOD15_021D8F8C: ; 0x021D8F8C
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #0x14]
+ ldr r4, [r5]
+ cmp r0, #0
+ beq _021D8FA2
+ cmp r0, #1
+ beq _021D8FCA
+ cmp r0, #2
+ beq _021D8FEA
+ pop {r3, r4, r5, pc}
+_021D8FA2:
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA9D4
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DA588
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA744
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D8FCA:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA760
+ cmp r0, #0
+ beq _021D9028
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DAA24
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D8FEA:
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DAAD0
+ cmp r0, #0
+ beq _021D9028
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D8794
+ add r1, r0, #0
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DABC0
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021DAB80
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021DB4E8
+ add r0, r5, #0
+ bl MOD15_021D8998
+_021D9028:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D902C
+MOD15_021D902C: ; 0x021D902C
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #0x14]
+ ldr r4, [r5]
+ cmp r0, #4
+ bhi _021D90FC
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D9044: ; jump table
+ .short _021D904E - _021D9044 - 2 ; case 0
+ .short _021D9060 - _021D9044 - 2 ; case 1
+ .short _021D908A - _021D9044 - 2 ; case 2
+ .short _021D90AA - _021D9044 - 2 ; case 3
+ .short _021D90BC - _021D9044 - 2 ; case 4
+_021D904E:
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021DB2D0
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D9060:
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DAB80
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DB4E8
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DAAF4
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D908A:
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DAB18
+ cmp r0, #0
+ beq _021D90FC
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA7C4
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D90AA:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA77C
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D90BC:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA7B8
+ cmp r0, #0
+ beq _021D90FC
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021DB358
+ cmp r0, #0
+ beq _021D90FC
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D873C
+ add r1, r0, #0
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA5B4
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021DA588
+ add r0, r5, #0
+ bl MOD15_021D8998
+_021D90FC:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D9100
+MOD15_021D9100: ; 0x021D9100
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #0x14]
+ ldr r4, [r5]
+ cmp r0, #3
+ bhi _021D91DC
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D9118: ; jump table
+ .short _021D9120 - _021D9118 - 2 ; case 0
+ .short _021D9154 - _021D9118 - 2 ; case 1
+ .short _021D917E - _021D9118 - 2 ; case 2
+ .short _021D919E - _021D9118 - 2 ; case 3
+_021D9120:
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA178
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DAB80
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DB4E8
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DAAF4
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D9154:
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DAB18
+ cmp r0, #0
+ beq _021D91DC
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA710
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA77C
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D917E:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA7B8
+ cmp r0, #0
+ beq _021D91DC
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA720
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D919E:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA738
+ cmp r0, #0
+ beq _021D91DC
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9964
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021D9DD8
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9E0C
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9DCC
+ add r0, r5, #0
+ bl MOD15_021D8998
+_021D91DC:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D91E0
+MOD15_021D91E0: ; 0x021D91E0
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #0x14]
+ ldr r4, [r5]
+ cmp r0, #3
+ bhi _021D92B4
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D91F8: ; jump table
+ .short _021D9200 - _021D91F8 - 2 ; case 0
+ .short _021D9234 - _021D91F8 - 2 ; case 1
+ .short _021D925E - _021D91F8 - 2 ; case 2
+ .short _021D927E - _021D91F8 - 2 ; case 3
+_021D9200:
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA178
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DAB80
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021DB4E8
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DAAF4
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D9234:
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DAB18
+ cmp r0, #0
+ beq _021D92B4
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA710
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA77C
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D925E:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA7B8
+ cmp r0, #0
+ beq _021D92B4
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA720
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D927E:
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA738
+ cmp r0, #0
+ beq _021D92B4
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9964
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021D9DD8
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021DA10C
+ add r0, r5, #0
+ bl MOD15_021D8998
+_021D92B4:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D92B8
+MOD15_021D92B8: ; 0x021D92B8
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r4, [r5]
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D872C
+ add r1, r0, #0
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9E3C
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D92D8
+MOD15_021D92D8: ; 0x021D92D8
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r4, [r5]
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D8734
+ add r1, r0, #0
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA124
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D92F8
+MOD15_021D92F8: ; 0x021D92F8
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r4, [r5]
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D873C
+ add r1, r0, #0
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA5B4
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D9318
+MOD15_021D9318: ; 0x021D9318
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r4, [r5]
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D8794
+ add r1, r0, #0
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DABC0
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D9338
+MOD15_021D9338: ; 0x021D9338
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #0x14]
+ ldr r4, [r5]
+ cmp r0, #0
+ beq _021D934A
+ cmp r0, #1
+ beq _021D9364
+ pop {r3, r4, r5, pc}
+_021D934A:
+ ldr r0, [r4, #0x18]
+ bl MOD15_021D87A0
+ add r1, r0, #0
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DABFC
+ ldr r0, [r5, #0x14]
+ add r0, r0, #1
+ str r0, [r5, #0x14]
+ pop {r3, r4, r5, pc}
+_021D9364:
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DACB8
+ cmp r0, #0
+ beq _021D9384
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #1
+ bl MOD15_021DB4E8
+ add r0, r5, #0
+ bl MOD15_021D8998
+_021D9384:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D9388
+MOD15_021D9388: ; 0x021D9388
+ push {r4, lr}
+ add r4, r1, #0
+ mov r0, #0x1e
+ ldr r1, [r4]
+ lsl r0, r0, #4
+ ldr r0, [r1, r0]
+ mov r1, #0
+ bl MOD15_021D9CB4
+ add r0, r4, #0
+ bl MOD15_021D8998
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D93A4
+MOD15_021D93A4: ; 0x021D93A4
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ mov r0, #0x1e
+ ldr r4, [r5]
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #2
+ bl MOD15_021D9CB4
+ ldr r0, [r5, #4]
+ bl MOD15_021D87EC
+ add r1, r0, #0
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9ECC
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA118
+ cmp r0, #0
+ beq _021D93E2
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA0F4
+ b _021D93EC
+_021D93E2:
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9DC0
+_021D93EC:
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D93F4
+MOD15_021D93F4: ; 0x021D93F4
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ mov r0, #0x1e
+ ldr r4, [r5]
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #3
+ bl MOD15_021D9CB4
+ ldr r0, [r5, #4]
+ bl MOD15_021D87EC
+ add r1, r0, #0
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9ECC
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA118
+ cmp r0, #0
+ beq _021D9432
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA0F4
+ b _021D943C
+_021D9432:
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9DC0
+_021D943C:
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D9444
+MOD15_021D9444: ; 0x021D9444
+ push {r4, lr}
+ add r4, r1, #0
+ mov r0, #0x1e
+ ldr r1, [r4]
+ lsl r0, r0, #4
+ ldr r0, [r1, r0]
+ mov r1, #1
+ bl MOD15_021D9CB4
+ add r0, r4, #0
+ bl MOD15_021D8998
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D9460
+MOD15_021D9460: ; 0x021D9460
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r0, [r5, #4]
+ ldr r4, [r5]
+ bl MOD15_021D87EC
+ add r1, r0, #0
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9F58
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D9480
+MOD15_021D9480: ; 0x021D9480
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ mov r0, #0x1e
+ ldr r4, [r5]
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #0
+ bl MOD15_021D9CB4
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9F88
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA118
+ cmp r0, #0
+ beq _021D94B6
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD15_021DA100
+ b _021D94C0
+_021D94B6:
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl MOD15_021D9DCC
+_021D94C0:
+ add r0, r5, #0
+ bl MOD15_021D8998
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D94C8
+MOD15_021D94C8: ; 0x021D94C8
+ push {r4, lr}
+ add r4, r1, #0
+ mov r0, #0x1f
+ ldr r1, [r4]
+ lsl r0, r0, #4
+ ldr r0, [r1, r0]
+ mov r1, #0
+ mov r2, #1
+ bl MOD15_021DB520
+ add r0, r4, #0
+ bl MOD15_021D8998
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D94E4
+MOD15_021D94E4: ; 0x021D94E4
+ push {r4, lr}
+ add r4, r1, #0
+ mov r0, #0x1f
+ ldr r1, [r4]
+ lsl r0, r0, #4
+ ldr r0, [r1, r0]
+ mov r1, #1
+ add r2, r1, #0
+ bl MOD15_021DB520
+ add r0, r4, #0
+ bl MOD15_021D8998
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D9500
+MOD15_021D9500: ; 0x021D9500
+ push {r4, lr}
+ add r4, r1, #0
+ mov r0, #0x1f
+ ldr r1, [r4]
+ lsl r0, r0, #4
+ ldr r0, [r1, r0]
+ mov r1, #0
+ add r2, r1, #0
+ bl MOD15_021DB520
+ add r0, r4, #0
+ bl MOD15_021D8998
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D951C
+MOD15_021D951C: ; 0x021D951C
+ push {r4, lr}
+ add r4, r1, #0
+ mov r0, #0x1f
+ ldr r1, [r4]
+ lsl r0, r0, #4
+ ldr r0, [r1, r0]
+ mov r1, #1
+ mov r2, #0
+ bl MOD15_021DB520
+ add r0, r4, #0
+ bl MOD15_021D8998
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D9538
+MOD15_021D9538: ; 0x021D9538
+ mov r1, #0x1e
+ lsl r1, r1, #4
+ ldr r3, _021D9544 ; =MOD15_021D9CB0
+ ldr r0, [r0, r1]
+ bx r3
+ nop
+_021D9544: .word MOD15_021D9CB0
+
+ thumb_func_start MOD15_021D9548
+MOD15_021D9548: ; 0x021D9548
+ ldr r0, [r0, #0x20]
+ bx lr
+
+ thumb_func_start MOD15_021D954C
+MOD15_021D954C: ; 0x021D954C
+ ldr r0, [r0, #0x24]
+ bx lr
+
+ thumb_func_start MOD15_021D9550
+MOD15_021D9550: ; 0x021D9550
+ push {r3, r4, r5, r6}
+ mov r4, #0x15
+ lsl r4, r4, #4
+ mov r5, #0x24
+ add r6, r0, r4
+ mul r5, r2
+ add r5, r6, r5
+ str r5, [r1]
+ add r5, r4, #0
+ add r5, #0x48
+ add r6, r0, r5
+ mov r5, #0x14
+ mul r5, r2
+ lsl r2, r2, #2
+ add r5, r6, r5
+ add r2, r0, r2
+ add r0, r4, #0
+ str r5, [r1, #8]
+ add r0, #0x70
+ ldr r0, [r2, r0]
+ add r4, #0x78
+ str r0, [r1, #0xc]
+ ldr r0, [r2, r4]
+ str r0, [r1, #0x10]
+ add r0, r1, #0
+ add r0, #0x20
+ strb r3, [r0]
+ mov r0, #0
+ str r0, [r1, #4]
+ str r0, [r1, #0x14]
+ str r0, [r1, #0x18]
+ str r0, [r1, #0x1c]
+ pop {r3, r4, r5, r6}
+ bx lr
+
+ thumb_func_start MOD15_021D9594
+MOD15_021D9594: ; 0x021D9594
+ push {r3, r4, r5, lr}
+ sub sp, #0x20
+ ldr r0, [r0, #0x24]
+ str r0, [sp]
+ lsl r0, r2, #0xc
+ str r0, [sp, #8]
+ lsl r0, r3, #0xc
+ str r0, [sp, #0xc]
+ mov r0, #0
+ str r0, [sp, #0x10]
+ ldr r0, [sp, #0x30]
+ str r1, [sp, #4]
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #0x34]
+ str r0, [sp, #0x18]
+ mov r0, #0x23
+ str r0, [sp, #0x1c]
+ bl OS_DisableInterrupts
+ add r4, r0, #0
+ add r0, sp, #0
+ bl FUN_0201FF84
+ add r5, r0, #0
+ add r0, r4, #0
+ bl OS_RestoreInterrupts
+ cmp r5, #0
+ beq _021D95E0
+ add r0, r5, #0
+ mov r1, #1
+ bl FUN_020200BC
+ mov r1, #1
+ add r0, r5, #0
+ lsl r1, r1, #0xc
+ bl FUN_020200D8
+_021D95E0:
+ add r0, r5, #0
+ add sp, #0x20
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D95E8
+MOD15_021D95E8: ; 0x021D95E8
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ mov r1, #0x1b
+ add r5, r0, #0
+ mov r0, #0x23
+ lsl r1, r1, #4
+ add r7, r2, #0
+ bl FUN_02016998
+ add r4, r0, #0
+ str r5, [r4]
+ str r6, [r4, #4]
+ str r7, [r4, #8]
+ mov r0, #0
+ str r0, [r4, #0x3c]
+ str r0, [r4, #0x40]
+ str r0, [r4, #0x44]
+ mov r0, #0x80
+ mov r1, #0x23
+ bl FUN_020219F4
+ str r0, [r4, #0x4c]
+ ldr r2, _021D9630 ; =0x00000182
+ mov r0, #0
+ mov r1, #0x1a
+ mov r3, #0x23
+ bl FUN_0200A86C
+ str r0, [r4, #0x48]
+ mov r0, #0x23
+ bl FUN_02013690
+ str r0, [r4, #0x50]
+ add r0, r4, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021D9630: .word 0x00000182
+
+ thumb_func_start MOD15_021D9634
+MOD15_021D9634: ; 0x021D9634
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x50]
+ cmp r0, #0
+ beq _021D9642
+ bl FUN_020136C0
+_021D9642:
+ ldr r0, [r4, #0x3c]
+ cmp r0, #0
+ beq _021D964C
+ bl FUN_0201FFC8
+_021D964C:
+ ldr r0, [r4, #0x40]
+ cmp r0, #0
+ beq _021D9656
+ bl FUN_0201FFC8
+_021D9656:
+ ldr r0, [r4, #0x44]
+ cmp r0, #0
+ beq _021D9660
+ bl FUN_0201FFC8
+_021D9660:
+ ldr r0, [r4, #0x48]
+ cmp r0, #0
+ beq _021D966A
+ bl FUN_0200A8B8
+_021D966A:
+ ldr r0, [r4, #0x4c]
+ cmp r0, #0
+ beq _021D9674
+ bl FUN_02021A20
+_021D9674:
+ add r0, r4, #0
+ add r0, #0xc
+ bl FUN_02019178
+ add r0, r4, #0
+ add r0, #0x1c
+ bl FUN_02019178
+ add r0, r4, #0
+ add r0, #0x2c
+ bl FUN_02019178
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D9694
+MOD15_021D9694: ; 0x021D9694
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0x14
+ add r5, r0, #0
+ ldr r0, [r5]
+ bl MOD15_021D9548
+ add r6, r0, #0
+ add r0, r5, #0
+ bl MOD15_021D97E4
+ mov r1, #0
+ str r1, [sp]
+ str r1, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ mov r0, #0x4c
+ add r2, r6, #0
+ add r3, r1, #0
+ bl FUN_020068C8
+ mov r3, #0
+ str r3, [sp]
+ str r3, [sp, #4]
+ mov r1, #1
+ str r1, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ mov r0, #0x4c
+ add r2, r6, #0
+ bl FUN_0200687C
+ lsr r4, r0, #5
+ mov r0, #1
+ str r0, [sp]
+ mov r0, #0x1b
+ str r0, [sp, #4]
+ mov r0, #4
+ str r0, [sp, #8]
+ mov r2, #0
+ lsl r0, r4, #0x10
+ add r1, r5, #0
+ str r2, [sp, #0xc]
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x10]
+ add r0, r6, #0
+ add r1, #0xc
+ mov r3, #3
+ bl FUN_02019064
+ mov r0, #0x15
+ str r0, [sp]
+ mov r0, #0x1b
+ str r0, [sp, #4]
+ mov r3, #2
+ add r1, r5, #0
+ str r3, [sp, #8]
+ mov r0, #0xb
+ str r0, [sp, #0xc]
+ add r0, r4, #0
+ add r0, #0x6c
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x10]
+ add r0, r6, #0
+ add r1, #0x1c
+ mov r2, #0
+ bl FUN_02019064
+ mov r0, #0xf
+ str r0, [sp]
+ mov r0, #8
+ str r0, [sp, #4]
+ mov r0, #4
+ str r0, [sp, #8]
+ mov r0, #0xb
+ str r0, [sp, #0xc]
+ add r0, r4, #0
+ add r0, #0xa2
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ add r1, r5, #0
+ str r0, [sp, #0x10]
+ add r0, r6, #0
+ add r1, #0x2c
+ mov r2, #0
+ mov r3, #0x17
+ bl FUN_02019064
+ add r0, r4, #0
+ add r0, #0xc2
+ str r0, [sp]
+ mov r1, #0
+ str r1, [sp, #4]
+ str r1, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ mov r0, #0x26
+ add r2, r6, #0
+ add r3, r1, #0
+ bl FUN_0200687C
+ add r0, r4, #0
+ add r0, #0xc2
+ str r0, [r5, #0x60]
+ mov r0, #0x20
+ str r0, [sp]
+ mov r0, #0x23
+ mov r3, #7
+ str r0, [sp, #4]
+ mov r0, #0x26
+ mov r1, #0x18
+ mov r2, #0
+ lsl r3, r3, #6
+ bl FUN_02006930
+ ldr r0, [r5, #4]
+ bl MOD15_021D87E0
+ lsl r0, r0, #0x18
+ add r2, r4, #0
+ lsr r0, r0, #0x18
+ add r2, #0xcb
+ str r0, [sp]
+ mov r0, #0x23
+ lsl r2, r2, #0x10
+ str r0, [sp, #4]
+ add r0, r6, #0
+ mov r1, #0
+ lsr r2, r2, #0x10
+ mov r3, #0xf
+ bl FUN_0200CD68
+ add r0, r5, #0
+ add r4, #0xcb
+ add r0, #0x1c
+ add r1, r4, #0
+ mov r2, #0xf
+ bl FUN_0200D06C
+ add r0, r5, #0
+ add r0, #0xc
+ bl FUN_02019270
+ add r0, r5, #0
+ add r0, #0x1c
+ bl FUN_02019270
+ add r0, r5, #0
+ bl MOD15_021D9868
+ add r0, r5, #0
+ bl MOD15_021D9964
+ add r0, r5, #0
+ mov r1, #0
+ bl MOD15_021D9CB4
+ add r0, r5, #0
+ bl MOD15_021D98C0
+ add r0, r6, #0
+ mov r1, #0
+ bl FUN_02017CD0
+ add sp, #0x14
+ pop {r3, r4, r5, r6, pc}
+
+ thumb_func_start MOD15_021D97E4
+MOD15_021D97E4: ; 0x021D97E4
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r5, r0, #0
+ mov r0, #7
+ lsl r0, r0, #6
+ str r0, [sp]
+ mov r0, #0x23
+ mov r2, #0
+ str r0, [sp, #4]
+ mov r0, #0x4c
+ mov r1, #6
+ add r3, r2, #0
+ bl FUN_02006930
+ mov r0, #0x4c
+ mov r1, #6
+ add r2, sp, #8
+ mov r3, #0x23
+ bl FUN_02006C08
+ add r4, r0, #0
+ ldr r0, [sp, #8]
+ add r1, r5, #0
+ mov r2, #5
+ ldr r0, [r0, #0xc]
+ add r1, #0x70
+ lsl r2, r2, #6
+ bl MIi_CpuCopy16
+ add r5, #0x70
+ mov r1, #5
+ add r0, r5, #0
+ lsl r1, r1, #6
+ bl DC_FlushRange
+ add r0, r4, #0
+ bl FUN_02016A18
+ add sp, #0xc
+ pop {r4, r5, pc}
+
+ thumb_func_start MOD15_021D9834
+MOD15_021D9834: ; 0x021D9834
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ bl MOD15_021D86E4
+ cmp r0, #2
+ bne _021D985A
+ ldr r0, [r4, #4]
+ bl MOD15_021D86FC
+ add r0, r0, #1
+ add r4, #0x70
+ lsl r0, r0, #5
+ add r0, r4, r0
+ mov r1, #0
+ mov r2, #0x20
+ bl GX_LoadBGPltt
+ pop {r4, pc}
+_021D985A:
+ add r4, #0x70
+ add r0, r4, #0
+ mov r1, #0
+ mov r2, #0x20
+ bl GX_LoadBGPltt
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D9868
+MOD15_021D9868: ; 0x021D9868
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ bl MOD15_021D86E4
+ cmp r0, #0
+ beq _021D9880
+ cmp r0, #1
+ beq _021D9896
+ cmp r0, #2
+ beq _021D98BA
+ pop {r4, pc}
+_021D9880:
+ add r0, r4, #0
+ mov r1, #0x68
+ add r0, #0x54
+ strh r1, [r0]
+ add r0, r4, #0
+ mov r1, #0x10
+ add r0, #0x56
+ strh r1, [r0]
+ mov r0, #1
+ str r0, [r4, #0x5c]
+ pop {r4, pc}
+_021D9896:
+ add r0, r4, #0
+ mov r1, #0x30
+ add r0, #0x54
+ strh r1, [r0]
+ add r0, r4, #0
+ mov r2, #0x10
+ add r0, #0x56
+ strh r2, [r0]
+ add r0, r4, #0
+ mov r1, #0xa0
+ add r0, #0x58
+ strh r1, [r0]
+ add r0, r4, #0
+ add r0, #0x5a
+ strh r2, [r0]
+ mov r0, #2
+ str r0, [r4, #0x5c]
+ pop {r4, pc}
+_021D98BA:
+ mov r0, #0
+ str r0, [r4, #0x5c]
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D98C0
+MOD15_021D98C0: ; 0x021D98C0
+ push {r3, r4, r5, lr}
+ sub sp, #0x30
+ add r4, r0, #0
+ ldr r0, [r4, #0x5c]
+ cmp r0, #0
+ beq _021D98D8
+ add r0, r4, #0
+ add r0, #0x54
+ add r1, sp, #8
+ bl MOD15_021D9C1C
+ b _021D98E2
+_021D98D8:
+ mov r1, #0x80
+ add r0, sp, #8
+ strh r1, [r0]
+ mov r1, #0x18
+ strh r1, [r0, #2]
+_021D98E2:
+ mov r2, #0
+ ldr r0, [r4]
+ add r1, sp, #0xc
+ add r3, r2, #0
+ bl MOD15_021D9550
+ mov r2, #0
+ str r2, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ add r5, sp, #8
+ mov r3, #2
+ ldrsh r2, [r5, r2]
+ ldrsh r3, [r5, r3]
+ ldr r0, [r4]
+ add r1, sp, #0xc
+ bl MOD15_021D9594
+ str r0, [r4, #0x3c]
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD15_021D9E98
+ mov r0, #1
+ str r0, [sp]
+ str r0, [sp, #4]
+ ldr r0, [r4]
+ add r1, sp, #0xc
+ mov r2, #6
+ mov r3, #0x18
+ bl MOD15_021D9594
+ mov r1, #0xd
+ str r0, [r4, #0x40]
+ bl FUN_02020130
+ mov r0, #1
+ str r0, [sp]
+ str r0, [sp, #4]
+ ldr r0, [r4]
+ add r1, sp, #0xc
+ mov r2, #0xfa
+ mov r3, #0x18
+ bl MOD15_021D9594
+ str r0, [r4, #0x44]
+ mov r1, #0xc
+ bl FUN_02020130
+ ldr r0, [r4, #4]
+ bl MOD15_021D86E4
+ cmp r0, #2
+ beq _021D995E
+ ldr r0, [r4, #0x44]
+ mov r1, #0
+ bl FUN_020200A0
+ ldr r0, [r4, #0x40]
+ mov r1, #0
+ bl FUN_020200A0
+_021D995E:
+ add sp, #0x30
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D9964
+MOD15_021D9964: ; 0x021D9964
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD15_021D9834
+ add r0, r4, #0
+ add r0, #0xc
+ mov r1, #0xd
+ bl FUN_02019620
+ ldr r0, [r4, #4]
+ bl MOD15_021D86E4
+ cmp r0, #0
+ beq _021D998A
+ cmp r0, #1
+ beq _021D99B0
+ cmp r0, #2
+ beq _021D99FA
+ b _021D9A02
+_021D998A:
+ add r0, r4, #0
+ add r1, r4, #0
+ add r0, #0xc
+ add r1, #0x54
+ bl MOD15_021D9C30
+ ldr r0, [r4, #4]
+ mov r1, #0
+ bl MOD15_021D8708
+ add r1, r4, #0
+ add r2, r4, #0
+ add r3, r0, #0
+ add r0, r4, #0
+ add r1, #0xc
+ add r2, #0x54
+ bl MOD15_021D9C58
+ b _021D9A02
+_021D99B0:
+ add r0, r4, #0
+ add r1, r4, #0
+ add r0, #0xc
+ add r1, #0x54
+ bl MOD15_021D9C30
+ add r0, r4, #0
+ add r1, r4, #0
+ add r0, #0xc
+ add r1, #0x58
+ bl MOD15_021D9C30
+ ldr r0, [r4, #4]
+ mov r1, #0
+ bl MOD15_021D8708
+ add r1, r4, #0
+ add r2, r4, #0
+ add r3, r0, #0
+ add r0, r4, #0
+ add r1, #0xc
+ add r2, #0x54
+ bl MOD15_021D9C58
+ ldr r0, [r4, #4]
+ mov r1, #1
+ bl MOD15_021D8708
+ add r1, r4, #0
+ add r2, r4, #0
+ add r3, r0, #0
+ add r0, r4, #0
+ add r1, #0xc
+ add r2, #0x58
+ bl MOD15_021D9C58
+ b _021D9A02
+_021D99FA:
+ add r0, r4, #0
+ bl MOD15_021D9A0C
+ str r0, [r4, #0x5c]
+_021D9A02:
+ add r4, #0xc
+ add r0, r4, #0
+ bl FUN_02019548
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D9A0C
+MOD15_021D9A0C: ; 0x021D9A0C
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x28
+ str r0, [sp, #0x10]
+ ldr r0, [r0, #4]
+ mov r1, #0x23
+ bl MOD15_021D8720
+ mov r4, #0
+ str r0, [sp, #0x1c]
+ mov r0, #1
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #0x10]
+ ldr r1, [sp, #0x10]
+ add r0, #0x64
+ str r4, [sp, #0x18]
+ add r5, r4, #0
+ bl MOD15_021D9B04
+ ldr r7, [sp, #0x10]
+ add r0, r7, #0
+ str r0, [sp, #0x24]
+ add r0, #0xc
+ str r0, [sp, #0x24]
+ add r0, r7, #0
+ add r6, r7, #0
+ str r0, [sp, #0x20]
+ add r0, #0x64
+ add r6, #0x54
+ str r0, [sp, #0x20]
+_021D9A46:
+ ldr r0, [sp, #0x20]
+ ldr r1, [sp, #0x1c]
+ bl MOD15_021D9B3C
+ cmp r0, #3
+ bhi _021D9ADE
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D9A5E: ; jump table
+ .short _021D9A66 - _021D9A5E - 2 ; case 0
+ .short _021D9A8E - _021D9A5E - 2 ; case 1
+ .short _021D9AD4 - _021D9A5E - 2 ; case 2
+ .short _021D9ADA - _021D9A5E - 2 ; case 3
+_021D9A66:
+ str r4, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021D9AFC ; =0x0003040D
+ ldr r2, [sp, #0x1c]
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x24]
+ mov r1, #1
+ add r3, r5, #0
+ bl FUN_0201BDE0
+ ldr r1, [sp, #0x1c]
+ mov r0, #1
+ mov r2, #0
+ bl FUN_02002E14
+ add r5, r5, r0
+ b _021D9ADE
+_021D9A8E:
+ add r1, r5, #0
+ add r0, r7, #0
+ add r1, #0x32
+ add r0, #0x54
+ strh r1, [r0]
+ add r1, r4, #0
+ add r0, r7, #0
+ add r1, #8
+ add r0, #0x56
+ strh r1, [r0]
+ ldr r0, [sp, #0x24]
+ add r1, r6, #0
+ bl MOD15_021D9C30
+ ldr r0, [sp, #0x10]
+ ldr r1, [sp, #0x18]
+ ldr r0, [r0, #4]
+ bl MOD15_021D8708
+ add r3, r0, #0
+ ldr r0, _021D9B00 ; =0x0000FFFF
+ cmp r3, r0
+ beq _021D9AC6
+ ldr r0, [sp, #0x10]
+ ldr r1, [sp, #0x24]
+ add r2, r6, #0
+ bl MOD15_021D9C58
+_021D9AC6:
+ ldr r0, [sp, #0x18]
+ add r7, r7, #4
+ add r0, r0, #1
+ add r6, r6, #4
+ str r0, [sp, #0x18]
+ add r5, #0x64
+ b _021D9ADE
+_021D9AD4:
+ add r4, #0x10
+ mov r5, #0
+ b _021D9ADE
+_021D9ADA:
+ mov r0, #0
+ str r0, [sp, #0x14]
+_021D9ADE:
+ ldr r0, [sp, #0x14]
+ cmp r0, #0
+ bne _021D9A46
+ ldr r0, [sp, #0x10]
+ add r0, #0x64
+ str r0, [sp, #0x10]
+ bl MOD15_021D9B30
+ ldr r0, [sp, #0x1c]
+ bl FUN_02021A20
+ ldr r0, [sp, #0x18]
+ add sp, #0x28
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021D9AFC: .word 0x0003040D
+_021D9B00: .word 0x0000FFFF
+
+ thumb_func_start MOD15_021D9B04
+MOD15_021D9B04: ; 0x021D9B04
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r1, #4]
+ mov r1, #0x23
+ bl MOD15_021D8720
+ str r0, [r4]
+ bl FUN_02021F2C
+ str r0, [r4, #4]
+ ldrh r1, [r0]
+ ldr r0, _021D9B2C ; =0x0000FFFE
+ cmp r1, r0
+ bne _021D9B26
+ mov r0, #1
+ str r0, [r4, #8]
+ pop {r4, pc}
+_021D9B26:
+ mov r0, #0
+ str r0, [r4, #8]
+ pop {r4, pc}
+ .align 2, 0
+_021D9B2C: .word 0x0000FFFE
+
+ thumb_func_start MOD15_021D9B30
+MOD15_021D9B30: ; 0x021D9B30
+ ldr r3, _021D9B38 ; =0x02021A21
+ ldr r0, [r0]
+ bx r3
+ nop
+_021D9B38: .word 0x02021A21
+
+ thumb_func_start MOD15_021D9B3C
+MOD15_021D9B3C: ; 0x021D9B3C
+ push {r3, r4, r5, r6, r7, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ str r1, [sp]
+ mov ip, r0
+ ldr r0, [r4, #8]
+ cmp r0, #3
+ bhi _021D9BCC
+ add r1, r0, r0
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_021D9B58: ; jump table
+ .short _021D9B60 - _021D9B58 - 2 ; case 0
+ .short _021D9BB6 - _021D9B58 - 2 ; case 1
+ .short _021D9BC2 - _021D9B58 - 2 ; case 2
+ .short _021D9BCC - _021D9B58 - 2 ; case 3
+_021D9B60:
+ cmp r0, #0
+ bne _021D9B9C
+ ldr r6, _021D9C04 ; =0x0000FFFE
+ mov r3, #0xe
+ mov r0, #1
+ mov r1, #3
+ mov r2, #2
+ add r7, r6, #1
+ lsl r3, r3, #0xc
+_021D9B72:
+ ldr r5, [r4, #4]
+ ldrh r5, [r5]
+ cmp r5, r3
+ beq _021D9B84
+ cmp r5, r6
+ beq _021D9B8C
+ cmp r5, r7
+ beq _021D9B88
+ b _021D9B90
+_021D9B84:
+ str r2, [r4, #8]
+ b _021D9B96
+_021D9B88:
+ str r1, [r4, #8]
+ b _021D9B96
+_021D9B8C:
+ str r0, [r4, #8]
+ b _021D9B96
+_021D9B90:
+ ldr r5, [r4, #4]
+ add r5, r5, #2
+ str r5, [r4, #4]
+_021D9B96:
+ ldr r5, [r4, #8]
+ cmp r5, #0
+ beq _021D9B72
+_021D9B9C:
+ ldr r3, [r4, #4]
+ mov r2, ip
+ sub r3, r3, r2
+ lsr r2, r3, #0x1f
+ add r2, r3, r2
+ asr r2, r2, #1
+ ldr r0, [sp]
+ mov r1, ip
+ add r2, r2, #1
+ bl FUN_02021E8C
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+_021D9BB6:
+ mov r0, ip
+ bl FUN_0201B8B8
+ str r0, [r4, #4]
+ mov r0, #1
+ b _021D9BD0
+_021D9BC2:
+ mov r0, ip
+ add r0, r0, #2
+ str r0, [r4, #4]
+ mov r0, #2
+ b _021D9BD0
+_021D9BCC:
+ mov r0, #3
+ pop {r3, r4, r5, r6, r7, pc}
+_021D9BD0:
+ ldr r1, [r4, #4]
+ ldrh r2, [r1]
+ mov r1, #0xe
+ lsl r1, r1, #0xc
+ cmp r2, r1
+ beq _021D9BEA
+ ldr r1, _021D9C04 ; =0x0000FFFE
+ cmp r2, r1
+ beq _021D9BF6
+ add r1, r1, #1
+ cmp r2, r1
+ beq _021D9BF0
+ b _021D9BFC
+_021D9BEA:
+ mov r1, #2
+ str r1, [r4, #8]
+ pop {r3, r4, r5, r6, r7, pc}
+_021D9BF0:
+ mov r1, #3
+ str r1, [r4, #8]
+ pop {r3, r4, r5, r6, r7, pc}
+_021D9BF6:
+ mov r1, #1
+ str r1, [r4, #8]
+ pop {r3, r4, r5, r6, r7, pc}
+_021D9BFC:
+ mov r1, #0
+ str r1, [r4, #8]
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021D9C04: .word 0x0000FFFE
+
+ thumb_func_start MOD15_021D9C08
+MOD15_021D9C08: ; 0x021D9C08
+ mov r2, #0
+ ldrsh r2, [r0, r2]
+ sub r2, #0x30
+ strh r2, [r1]
+ mov r2, #2
+ ldrsh r0, [r0, r2]
+ sub r0, #8
+ strh r0, [r1, #2]
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D9C1C
+MOD15_021D9C1C: ; 0x021D9C1C
+ mov r2, #0
+ ldrsh r2, [r0, r2]
+ add r2, #0x18
+ strh r2, [r1]
+ mov r2, #2
+ ldrsh r0, [r0, r2]
+ add r0, #8
+ strh r0, [r1, #2]
+ bx lr
+ .align 2, 0
+
+ thumb_func_start MOD15_021D9C30
+MOD15_021D9C30: ; 0x021D9C30
+ push {r3, r4, lr}
+ sub sp, #0xc
+ add r4, r0, #0
+ add r0, r1, #0
+ add r1, sp, #8
+ bl MOD15_021D9C08
+ mov r0, #0x60
+ str r0, [sp]
+ mov r0, #0x10
+ str r0, [sp, #4]
+ add r3, sp, #8
+ ldrh r2, [r3]
+ ldrh r3, [r3, #2]
+ add r0, r4, #0
+ mov r1, #0xe
+ bl FUN_020196F4
+ add sp, #0xc
+ pop {r3, r4, pc}
+
+ thumb_func_start MOD15_021D9C58
+MOD15_021D9C58: ; 0x021D9C58
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0x14
+ add r5, r0, #0
+ ldr r0, _021D9CA8 ; =0x0000FFFF
+ add r6, r3, #0
+ add r4, r1, #0
+ cmp r6, r0
+ beq _021D9CA2
+ add r0, r2, #0
+ add r1, sp, #0x10
+ bl MOD15_021D9C08
+ ldr r1, [r5, #0x4c]
+ add r0, r6, #0
+ bl FUN_02013A58
+ ldr r1, [r5, #0x4c]
+ mov r0, #1
+ mov r2, #0
+ bl FUN_02002E14
+ add r3, sp, #0x10
+ mov r0, #2
+ ldrsh r0, [r3, r0]
+ mov r6, #0
+ mov r1, #1
+ str r0, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021D9CAC ; =0x0005060E
+ str r0, [sp, #8]
+ str r6, [sp, #0xc]
+ ldrsh r3, [r3, r6]
+ ldr r2, [r5, #0x4c]
+ add r0, r4, #0
+ bl FUN_0201BDE0
+_021D9CA2:
+ add sp, #0x14
+ pop {r3, r4, r5, r6, pc}
+ nop
+_021D9CA8: .word 0x0000FFFF
+_021D9CAC: .word 0x0005060E
+
+ thumb_func_start MOD15_021D9CB0
+MOD15_021D9CB0: ; 0x021D9CB0
+ ldr r0, [r0, #0x5c]
+ bx lr
+
+ thumb_func_start MOD15_021D9CB4
+MOD15_021D9CB4: ; 0x021D9CB4
+ push {r4, r5, r6, lr}
+ sub sp, #0x10
+ add r4, r0, #0
+ add r5, r1, #0
+ add r0, #0x1c
+ mov r1, #9
+ bl FUN_02019620
+ cmp r5, #3
+ bhi _021D9DB0
+ add r0, r5, r5
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D9CD4: ; jump table
+ .short _021D9CDC - _021D9CD4 - 2 ; case 0
+ .short _021D9D66 - _021D9CD4 - 2 ; case 1
+ .short _021D9D40 - _021D9CD4 - 2 ; case 2
+ .short _021D9D8C - _021D9CD4 - 2 ; case 3
+_021D9CDC:
+ mov r0, #2
+ mov r1, #0x3c
+ mov r2, #0
+ bl FUN_0200AA90
+ add r5, r0, #0
+ mov r0, #0x4b
+ lsl r0, r0, #2
+ mov r1, #0
+ bl FUN_020219F4
+ mov r1, #0
+ add r6, r0, #0
+ add r0, r5, #0
+ add r2, r1, #0
+ bl FUN_0200AEE0
+ ldr r0, [r4, #4]
+ bl MOD15_021D86E8
+ add r1, r0, #0
+ ldr r0, [r4, #0x48]
+ ldr r2, [r4, #0x4c]
+ bl FUN_0200A8E0
+ ldr r2, [r4, #0x4c]
+ add r0, r5, #0
+ add r1, r6, #0
+ bl FUN_0200B7B8
+ mov r3, #0
+ str r3, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021D9DBC ; =0x00010209
+ mov r1, #1
+ str r0, [sp, #8]
+ add r0, r4, #0
+ add r0, #0x1c
+ add r2, r6, #0
+ str r3, [sp, #0xc]
+ bl FUN_0201BDE0
+ add r0, r6, #0
+ bl FUN_02021A20
+ add r0, r5, #0
+ bl FUN_0200AB18
+ b _021D9DB0
+_021D9D40:
+ ldr r0, [r4, #0x48]
+ ldr r2, [r4, #0x4c]
+ mov r1, #6
+ bl FUN_0200A8E0
+ mov r3, #0
+ str r3, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021D9DBC ; =0x00010209
+ mov r1, #1
+ str r0, [sp, #8]
+ str r3, [sp, #0xc]
+ add r0, r4, #0
+ ldr r2, [r4, #0x4c]
+ add r0, #0x1c
+ bl FUN_0201BDE0
+ b _021D9DB0
+_021D9D66:
+ ldr r0, [r4, #0x48]
+ ldr r2, [r4, #0x4c]
+ mov r1, #7
+ bl FUN_0200A8E0
+ mov r3, #0
+ str r3, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021D9DBC ; =0x00010209
+ mov r1, #1
+ str r0, [sp, #8]
+ str r3, [sp, #0xc]
+ add r0, r4, #0
+ ldr r2, [r4, #0x4c]
+ add r0, #0x1c
+ bl FUN_0201BDE0
+ b _021D9DB0
+_021D9D8C:
+ ldr r0, [r4, #0x48]
+ ldr r2, [r4, #0x4c]
+ mov r1, #8
+ bl FUN_0200A8E0
+ mov r3, #0
+ str r3, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021D9DBC ; =0x00010209
+ mov r1, #1
+ str r0, [sp, #8]
+ str r3, [sp, #0xc]
+ add r0, r4, #0
+ ldr r2, [r4, #0x4c]
+ add r0, #0x1c
+ bl FUN_0201BDE0
+_021D9DB0:
+ add r4, #0x1c
+ add r0, r4, #0
+ bl FUN_02019548
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_021D9DBC: .word 0x00010209
+
+ thumb_func_start MOD15_021D9DC0
+MOD15_021D9DC0: ; 0x021D9DC0
+ ldr r3, _021D9DC8 ; =MOD15_021D9E98
+ mov r1, #0
+ bx r3
+ nop
+_021D9DC8: .word MOD15_021D9E98
+
+ thumb_func_start MOD15_021D9DCC
+MOD15_021D9DCC: ; 0x021D9DCC
+ ldr r3, _021D9DD4 ; =MOD15_021D9E98
+ mov r1, #1
+ bx r3
+ nop
+_021D9DD4: .word MOD15_021D9E98
+
+ thumb_func_start MOD15_021D9DD8
+MOD15_021D9DD8: ; 0x021D9DD8
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x3c]
+ bl FUN_020200A0
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD15_021D9E98
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D9DEC
+MOD15_021D9DEC: ; 0x021D9DEC
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ bl MOD15_021D86E4
+ cmp r0, #2
+ bne _021D9E0A
+ ldr r0, [r4, #0x40]
+ mov r1, #0
+ bl FUN_020200A0
+ ldr r0, [r4, #0x44]
+ mov r1, #0
+ bl FUN_020200A0
+_021D9E0A:
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D9E0C
+MOD15_021D9E0C: ; 0x021D9E0C
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ bl MOD15_021D86E4
+ cmp r0, #2
+ bne _021D9E3A
+ ldr r0, [r4, #0x40]
+ mov r1, #1
+ bl FUN_020200A0
+ ldr r0, [r4, #0x44]
+ mov r1, #1
+ bl FUN_020200A0
+ ldr r0, [r4, #0x40]
+ mov r1, #0xd
+ bl FUN_02020130
+ ldr r0, [r4, #0x44]
+ mov r1, #0xc
+ bl FUN_02020130
+_021D9E3A:
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D9E3C
+MOD15_021D9E3C: ; 0x021D9E3C
+ push {r4, lr}
+ sub sp, #0x10
+ add r4, r0, #0
+ ldr r0, [r4, #0x5c]
+ cmp r0, #0
+ beq _021D9E6C
+ add r2, r4, #0
+ lsl r0, r1, #2
+ add r2, #0x54
+ add r0, r2, r0
+ add r1, sp, #0
+ bl MOD15_021D9C1C
+ add r1, sp, #0
+ mov r2, #0
+ ldrsh r0, [r1, r2]
+ lsl r0, r0, #0xc
+ str r0, [sp, #4]
+ mov r0, #2
+ ldrsh r0, [r1, r0]
+ lsl r0, r0, #0xc
+ str r0, [sp, #8]
+ str r2, [sp, #0xc]
+ b _021D9E84
+_021D9E6C:
+ mov r0, #2
+ lsl r0, r0, #0x12
+ str r0, [sp, #4]
+ mov r0, #6
+ lsl r0, r0, #0xe
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ ldr r0, [r4, #0x3c]
+ add r1, sp, #4
+ bl FUN_02020044
+_021D9E84:
+ ldr r0, [r4, #0x3c]
+ add r1, sp, #4
+ bl FUN_02020044
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD15_021D9E98
+ add sp, #0x10
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021D9E98
+MOD15_021D9E98: ; 0x021D9E98
+ push {r3, lr}
+ ldr r2, [r0, #0x5c]
+ cmp r2, #0
+ beq _021D9EB6
+ cmp r1, #0
+ ldr r0, [r0, #0x3c]
+ beq _021D9EAE
+ mov r1, #0
+ bl FUN_02020130
+ pop {r3, pc}
+_021D9EAE:
+ mov r1, #1
+ bl FUN_02020130
+ pop {r3, pc}
+_021D9EB6:
+ cmp r1, #0
+ ldr r0, [r0, #0x3c]
+ beq _021D9EC4
+ mov r1, #0xe
+ bl FUN_02020130
+ pop {r3, pc}
+_021D9EC4:
+ mov r1, #0xf
+ bl FUN_02020130
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021D9ECC
+MOD15_021D9ECC: ; 0x021D9ECC
+ push {r3, r4, r5, lr}
+ sub sp, #0x10
+ add r5, r0, #0
+ add r4, r1, #0
+ add r0, #0x2c
+ mov r1, #9
+ bl FUN_02019620
+ ldr r0, [r5, #0x48]
+ ldr r2, [r5, #0x4c]
+ mov r1, #9
+ bl FUN_0200A8E0
+ mov r1, #0
+ str r1, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021D9F54 ; =0x00010209
+ mov r3, #0xe
+ str r0, [sp, #8]
+ str r1, [sp, #0xc]
+ add r0, r5, #0
+ ldr r2, [r5, #0x4c]
+ add r0, #0x2c
+ bl FUN_0201BDE0
+ ldr r0, [r5, #0x48]
+ ldr r2, [r5, #0x4c]
+ mov r1, #0xa
+ bl FUN_0200A8E0
+ mov r0, #0x10
+ str r0, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021D9F54 ; =0x00010209
+ mov r1, #0
+ str r0, [sp, #8]
+ str r1, [sp, #0xc]
+ add r0, r5, #0
+ ldr r2, [r5, #0x4c]
+ add r0, #0x2c
+ mov r3, #0xe
+ bl FUN_0201BDE0
+ ldr r2, [r5, #0x60]
+ add r0, r5, #0
+ lsl r2, r2, #0x10
+ add r0, #0x2c
+ mov r1, #0
+ lsr r2, r2, #0x10
+ mov r3, #0xe
+ bl FUN_0200CCA4
+ add r1, r5, #0
+ ldr r0, [r5, #0x50]
+ add r1, #0x2c
+ mov r2, #0
+ lsl r3, r4, #4
+ bl FUN_020136F8
+ add r5, #0x2c
+ add r0, r5, #0
+ bl FUN_020191D0
+ add sp, #0x10
+ pop {r3, r4, r5, pc}
+ nop
+_021D9F54: .word 0x00010209
+
+ thumb_func_start MOD15_021D9F58
+MOD15_021D9F58: ; 0x021D9F58
+ push {r3, r4, r5, lr}
+ sub sp, #8
+ add r5, r0, #0
+ mov r0, #0xe
+ str r0, [sp]
+ mov r0, #0x20
+ str r0, [sp, #4]
+ add r0, r5, #0
+ mov r2, #0
+ add r4, r1, #0
+ add r0, #0x2c
+ mov r1, #9
+ add r3, r2, #0
+ bl FUN_020196F4
+ ldr r0, [r5, #0x50]
+ add r5, #0x2c
+ add r1, r5, #0
+ mov r2, #0
+ lsl r3, r4, #4
+ bl FUN_020136F8
+ add sp, #8
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021D9F88
+MOD15_021D9F88: ; 0x021D9F88
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, #0x2c
+ mov r1, #0
+ bl FUN_0200CCF8
+ add r4, #0x2c
+ add r0, r4, #0
+ bl FUN_02019570
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D9FA0
+MOD15_021D9FA0: ; 0x021D9FA0
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ mov r0, #0x23
+ mov r1, #0x10
+ add r6, r2, #0
+ bl FUN_02016998
+ str r5, [r0]
+ str r4, [r0, #4]
+ str r6, [r0, #8]
+ mov r1, #0
+ str r1, [r0, #0xc]
+ pop {r4, r5, r6, pc}
+
+ thumb_func_start MOD15_021D9FBC
+MOD15_021D9FBC: ; 0x021D9FBC
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0xc]
+ cmp r0, #0
+ beq _021D9FCA
+ bl FUN_0201FFC8
+_021D9FCA:
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021D9FD4
+MOD15_021D9FD4: ; 0x021D9FD4
+ push {r3, r4, r5, lr}
+ sub sp, #0x10
+ add r5, r0, #0
+ ldr r0, [r5]
+ bl MOD15_021D9548
+ add r4, r0, #0
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ mov r0, #0x4c
+ mov r1, #4
+ add r2, r4, #0
+ mov r3, #3
+ bl FUN_020068C8
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ mov r0, #0x4c
+ mov r1, #5
+ add r2, r4, #0
+ mov r3, #3
+ bl FUN_0200687C
+ ldr r1, _021DA03C ; =0x021DBA00
+ add r0, r4, #0
+ mov r2, #0
+ bl MOD15_021DA044
+ ldr r1, _021DA040 ; =0x021DBA08
+ add r0, r4, #0
+ mov r2, #1
+ bl MOD15_021DA044
+ add r0, r5, #0
+ bl MOD15_021DA0B8
+ add r0, r4, #0
+ mov r1, #3
+ bl FUN_02017CD0
+ add sp, #0x10
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021DA03C: .word 0x021DBA00
+_021DA040: .word 0x021DBA08
+
+ thumb_func_start MOD15_021DA044
+MOD15_021DA044: ; 0x021DA044
+ push {r3, r4, r5, lr}
+ sub sp, #0x20
+ add r5, r1, #0
+ add r4, r2, #0
+ add r1, sp, #0x10
+ add r2, r5, #0
+ bl FUN_02019150
+ add r0, sp, #0x10
+ bl FUN_02019270
+ add r0, sp, #0x10
+ mov r1, #0xe
+ bl FUN_02019620
+ ldr r1, _021DA0B0 ; =0x00000183
+ mov r0, #0x1a
+ add r2, r4, #0
+ mov r3, #0x23
+ bl FUN_0200A738
+ add r4, r0, #0
+ mov r0, #0
+ add r1, r4, #0
+ add r2, r0, #0
+ bl FUN_02002E14
+ ldrb r1, [r5, #3]
+ add r2, r4, #0
+ lsl r1, r1, #3
+ sub r0, r1, r0
+ mov r1, #0
+ lsr r3, r0, #1
+ str r1, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021DA0B4 ; =0x0001020E
+ str r0, [sp, #8]
+ add r0, sp, #0x10
+ str r1, [sp, #0xc]
+ bl FUN_0201BDE0
+ add r0, sp, #0x10
+ bl FUN_02019548
+ add r0, r4, #0
+ bl FUN_02021A20
+ add r0, sp, #0x10
+ bl FUN_02019178
+ add sp, #0x20
+ pop {r3, r4, r5, pc}
+ nop
+_021DA0B0: .word 0x00000183
+_021DA0B4: .word 0x0001020E
+
+ thumb_func_start MOD15_021DA0B8
+MOD15_021DA0B8: ; 0x021DA0B8
+ push {r3, r4, lr}
+ sub sp, #0x2c
+ add r4, r0, #0
+ ldr r0, [r4]
+ add r1, sp, #8
+ mov r2, #0
+ mov r3, #3
+ bl MOD15_021D9550
+ mov r0, #5
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ ldr r0, [r4]
+ add r1, sp, #8
+ mov r2, #0x40
+ mov r3, #0x38
+ bl MOD15_021D9594
+ str r0, [r4, #0xc]
+ mov r1, #2
+ bl FUN_02020130
+ ldr r0, [r4, #0xc]
+ mov r1, #0
+ bl FUN_020200A0
+ add sp, #0x2c
+ pop {r3, r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA0F4
+MOD15_021DA0F4: ; 0x021DA0F4
+ ldr r3, _021DA0FC ; =0x02020131
+ ldr r0, [r0, #0xc]
+ mov r1, #3
+ bx r3
+ .align 2, 0
+_021DA0FC: .word 0x02020131
+
+ thumb_func_start MOD15_021DA100
+MOD15_021DA100: ; 0x021DA100
+ ldr r3, _021DA108 ; =0x02020131
+ ldr r0, [r0, #0xc]
+ mov r1, #2
+ bx r3
+ .align 2, 0
+_021DA108: .word 0x02020131
+
+ thumb_func_start MOD15_021DA10C
+MOD15_021DA10C: ; 0x021DA10C
+ ldr r3, _021DA114 ; =0x020200A1
+ ldr r0, [r0, #0xc]
+ bx r3
+ nop
+_021DA114: .word 0x020200A1
+
+ thumb_func_start MOD15_021DA118
+MOD15_021DA118: ; 0x021DA118
+ ldr r3, _021DA120 ; =0x02020129
+ ldr r0, [r0, #0xc]
+ bx r3
+ nop
+_021DA120: .word 0x02020129
+
+ thumb_func_start MOD15_021DA124
+MOD15_021DA124: ; 0x021DA124
+ push {r3, r4, lr}
+ sub sp, #0xc
+ add r4, r0, #0
+ mov r0, #0
+ str r0, [sp, #8]
+ cmp r1, #0
+ beq _021DA136
+ cmp r1, #1
+ beq _021DA144
+_021DA136:
+ mov r0, #1
+ lsl r0, r0, #0x12
+ str r0, [sp]
+ mov r0, #0xe
+ lsl r0, r0, #0xe
+ str r0, [sp, #4]
+ b _021DA150
+_021DA144:
+ mov r0, #3
+ lsl r0, r0, #0x12
+ str r0, [sp]
+ mov r0, #0xe
+ lsl r0, r0, #0xe
+ str r0, [sp, #4]
+_021DA150:
+ ldr r0, [r4, #0xc]
+ add r1, sp, #0
+ bl FUN_02020044
+ ldr r0, [r4, #0xc]
+ mov r1, #2
+ bl FUN_02020130
+ add sp, #0xc
+ pop {r3, r4, pc}
+
+ thumb_func_start MOD15_021DA164
+MOD15_021DA164: ; 0x021DA164
+ push {r3, lr}
+ ldr r0, [r0]
+ bl MOD15_021D9548
+ mov r1, #3
+ add r2, r1, #0
+ mov r3, #0x40
+ bl FUN_020179E0
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021DA178
+MOD15_021DA178: ; 0x021DA178
+ push {r3, lr}
+ ldr r0, [r0]
+ bl MOD15_021D9548
+ mov r1, #3
+ add r2, r1, #0
+ mov r3, #0
+ bl FUN_020179E0
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021DA18C
+MOD15_021DA18C: ; 0x021DA18C
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #0x23
+ mov r1, #0x60
+ add r7, r2, #0
+ bl FUN_02016998
+ add r4, r0, #0
+ str r5, [r4]
+ str r6, [r4, #4]
+ str r7, [r4, #8]
+ add r0, r5, #0
+ bl MOD15_021D9548
+ str r0, [r4, #0xc]
+ mov r0, #0
+ str r0, [r4, #0x10]
+ str r0, [r4, #0x18]
+ str r0, [r4, #0x5c]
+ add r0, r4, #0
+ pop {r3, r4, r5, r6, r7, pc}
+
+ thumb_func_start MOD15_021DA1B8
+MOD15_021DA1B8: ; 0x021DA1B8
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x5c]
+ cmp r0, #0
+ beq _021DA1C6
+ bl FUN_0201FFC8
+_021DA1C6:
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA1D0
+MOD15_021DA1D0: ; 0x021DA1D0
+ push {r3, r4, r5, lr}
+ sub sp, #0x10
+ add r5, r0, #0
+ ldr r0, [r5]
+ bl MOD15_021D9548
+ add r4, r0, #0
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ mov r3, #1
+ str r3, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ mov r0, #0x4c
+ mov r1, #2
+ add r2, r4, #0
+ bl FUN_020068C8
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ mov r3, #1
+ str r3, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ mov r0, #0x4c
+ mov r1, #3
+ add r2, r4, #0
+ bl FUN_0200687C
+ add r2, r0, #0
+ add r0, r5, #0
+ add r1, r4, #0
+ lsr r2, r2, #5
+ bl MOD15_021DA2AC
+ add r2, r0, #0
+ add r0, r5, #0
+ add r1, r4, #0
+ bl MOD15_021DA3B4
+ add r2, r0, #0
+ add r0, r5, #0
+ add r1, r4, #0
+ bl MOD15_021DA480
+ mov r2, #0
+ add r0, r4, #0
+ mov r1, #1
+ sub r3, r2, #4
+ bl FUN_020179E0
+ add r0, r4, #0
+ mov r1, #1
+ mov r2, #3
+ mov r3, #2
+ bl FUN_020179E0
+ add r0, r5, #0
+ bl MOD15_021DA54C
+ mov r1, #2
+ add r2, r1, #0
+ ldr r0, _021DA2A0 ; =0x04000050
+ sub r2, #0xc
+ bl G2x_SetBlendBrightness_
+ ldr r0, _021DA2A4 ; =0x04000048
+ mov r2, #0x3f
+ ldrh r3, [r0]
+ mov r1, #0x1f
+ bic r3, r2
+ orr r3, r1
+ mov r1, #0x20
+ orr r3, r1
+ strh r3, [r0]
+ ldrh r3, [r0, #2]
+ bic r3, r2
+ mov r2, #0x1d
+ orr r2, r3
+ orr r2, r1
+ strh r2, [r0, #2]
+ add r2, r0, #0
+ mov r3, #0xff
+ sub r2, #8
+ strh r3, [r2]
+ mov r2, #0xa0
+ sub r0, r0, #4
+ strh r2, [r0]
+ lsl r3, r1, #0x15
+ ldr r2, [r3]
+ ldr r0, _021DA2A8 ; =0xFFFF1FFF
+ and r2, r0
+ lsl r0, r1, #8
+ orr r0, r2
+ str r0, [r3]
+ add r0, r4, #0
+ mov r1, #1
+ bl FUN_02017CD0
+ add sp, #0x10
+ pop {r3, r4, r5, pc}
+ nop
+_021DA2A0: .word 0x04000050
+_021DA2A4: .word 0x04000048
+_021DA2A8: .word 0xFFFF1FFF
+
+ thumb_func_start MOD15_021DA2AC
+MOD15_021DA2AC: ; 0x021DA2AC
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x38
+ add r6, r2, #0
+ str r0, [sp, #0x14]
+ str r1, [sp, #0x18]
+ ldr r2, _021DA3A4 ; =0x00000181
+ mov r0, #1
+ mov r1, #0x1a
+ mov r3, #0x23
+ bl FUN_0200A86C
+ str r0, [sp, #0x20]
+ mov r0, #9
+ mov r7, #1
+ str r0, [sp, #0x24]
+ mov r4, #0
+_021DA2CC:
+ cmp r4, #0
+ beq _021DA2E4
+ add r0, r4, #0
+ mov r1, #3
+ bl _s32_div_f
+ cmp r1, #0
+ bne _021DA2E4
+ ldr r0, [sp, #0x24]
+ mov r7, #1
+ add r0, r0, #3
+ str r0, [sp, #0x24]
+_021DA2E4:
+ ldr r0, [sp, #0x14]
+ add r1, r4, #0
+ ldr r0, [r0, #8]
+ bl FUN_020892C4
+ cmp r0, #0
+ beq _021DA302
+ ldr r0, [sp, #0x20]
+ add r1, r4, #0
+ bl FUN_0200A914
+ add r5, r0, #0
+ ldr r0, _021DA3A8 ; =0x0001020F
+ str r0, [sp, #0x1c]
+ b _021DA310
+_021DA302:
+ ldr r0, [sp, #0x20]
+ mov r1, #0xc
+ bl FUN_0200A914
+ add r5, r0, #0
+ ldr r0, _021DA3AC ; =0x0003040F
+ str r0, [sp, #0x1c]
+_021DA310:
+ ldr r0, _021DA3B0 ; =0x000003EE
+ cmp r6, r0
+ blo _021DA31A
+ bl ErrorHandling
+_021DA31A:
+ ldr r0, [sp, #0x24]
+ lsl r3, r7, #0x18
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r0, #9
+ str r0, [sp, #4]
+ mov r0, #2
+ str r0, [sp, #8]
+ mov r0, #0xb
+ str r0, [sp, #0xc]
+ lsl r0, r6, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x10]
+ ldr r0, [sp, #0x18]
+ add r1, sp, #0x28
+ mov r2, #1
+ lsr r3, r3, #0x18
+ bl FUN_02019064
+ add r0, sp, #0x28
+ mov r1, #0xf
+ bl FUN_02019620
+ mov r0, #0
+ add r1, r5, #0
+ add r2, r0, #0
+ bl FUN_02002E14
+ mov r1, #0x48
+ sub r0, r1, r0
+ lsr r3, r0, #1
+ mov r0, #0
+ str r0, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, [sp, #0x1c]
+ mov r1, #0
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ add r0, sp, #0x28
+ add r2, r5, #0
+ bl FUN_0201BDE0
+ add r0, sp, #0x28
+ bl FUN_02019270
+ add r0, sp, #0x28
+ bl FUN_02019548
+ add r0, r5, #0
+ bl FUN_02021A20
+ add r0, sp, #0x28
+ bl FUN_02019178
+ add r4, r4, #1
+ add r6, #0x12
+ add r7, #0xa
+ cmp r4, #0xc
+ blt _021DA2CC
+ ldr r0, [sp, #0x20]
+ bl FUN_0200A8B8
+ add r0, r6, #0
+ add sp, #0x38
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021DA3A4: .word 0x00000181
+_021DA3A8: .word 0x0001020F
+_021DA3AC: .word 0x0003040F
+_021DA3B0: .word 0x000003EE
+
+ thumb_func_start MOD15_021DA3B4
+MOD15_021DA3B4: ; 0x021DA3B4
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x30
+ add r4, r1, #0
+ mov r1, #0xce
+ add r6, r0, #0
+ lsl r1, r1, #2
+ add r0, r2, #0
+ str r2, [sp, #0x14]
+ cmp r0, r1
+ blo _021DA3CC
+ bl ErrorHandling
+_021DA3CC:
+ mov r0, #0xa
+ str r0, [sp]
+ mov r0, #0x19
+ str r0, [sp, #4]
+ mov r0, #8
+ str r0, [sp, #8]
+ mov r0, #0xb
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x14]
+ add r1, sp, #0x20
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x10]
+ add r0, r4, #0
+ mov r2, #1
+ mov r3, #0x22
+ bl FUN_02019064
+ mov r0, #4
+ mov r1, #0x23
+ bl FUN_020219F4
+ add r4, r0, #0
+ add r0, sp, #0x20
+ mov r1, #0xf
+ bl FUN_02019620
+ bl MOD15_021DB770
+ add r7, r0, #0
+ ldr r5, _021DA474 ; =0x00000000
+ beq _021DA452
+_021DA40C:
+ add r0, r5, #0
+ add r1, r4, #0
+ bl MOD15_021DB774
+ add r0, r5, #0
+ add r1, sp, #0x1c
+ add r2, sp, #0x18
+ bl MOD15_021DB798
+ ldr r0, [r6, #8]
+ add r1, r5, #0
+ bl FUN_02089300
+ cmp r0, #0
+ beq _021DA42E
+ ldr r1, _021DA478 ; =0x0001020F
+ b _021DA430
+_021DA42E:
+ ldr r1, _021DA47C ; =0x0003040F
+_021DA430:
+ ldr r0, [sp, #0x18]
+ add r2, r4, #0
+ str r0, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ str r1, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ ldr r3, [sp, #0x1c]
+ add r0, sp, #0x20
+ mov r1, #0
+ add r3, r3, #3
+ bl FUN_0201BDE0
+ add r5, r5, #1
+ cmp r5, r7
+ blo _021DA40C
+_021DA452:
+ add r0, sp, #0x20
+ bl FUN_02019548
+ add r0, sp, #0x20
+ bl FUN_02019270
+ add r0, r4, #0
+ bl FUN_02021A20
+ add r0, sp, #0x20
+ bl FUN_02019178
+ ldr r0, [sp, #0x14]
+ add r0, #0xc8
+ str r0, [sp, #0x14]
+ add sp, #0x30
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_021DA474: .word 0x00000000
+_021DA478: .word 0x0001020F
+_021DA47C: .word 0x0003040F
+
+ thumb_func_start MOD15_021DA480
+MOD15_021DA480: ; 0x021DA480
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x34
+ add r5, r2, #0
+ str r1, [sp, #0x14]
+ ldr r2, _021DA540 ; =0x00000181
+ mov r0, #1
+ mov r1, #0x1a
+ mov r3, #0x23
+ bl FUN_0200A86C
+ mov r1, #0xd
+ str r0, [sp, #0x20]
+ bl FUN_0200A914
+ str r0, [sp, #0x1c]
+ mov r0, #0
+ ldr r1, [sp, #0x1c]
+ add r2, r0, #0
+ bl FUN_02002E14
+ mov r1, #0x40
+ sub r0, r1, r0
+ lsr r0, r0, #1
+ ldr r4, _021DA544 ; =0x021DBA10
+ str r0, [sp, #0x18]
+ mov r7, #0
+ add r6, sp, #0x24
+_021DA4B6:
+ mov r0, #0x3f
+ lsl r0, r0, #4
+ cmp r5, r0
+ blo _021DA4C2
+ bl ErrorHandling
+_021DA4C2:
+ ldrh r0, [r4, #2]
+ add r1, r6, #0
+ mov r2, #1
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r0, #8
+ str r0, [sp, #4]
+ mov r0, #2
+ str r0, [sp, #8]
+ mov r0, #0xb
+ str r0, [sp, #0xc]
+ lsl r0, r5, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x10]
+ ldrh r3, [r4]
+ ldr r0, [sp, #0x14]
+ lsl r3, r3, #0x18
+ lsr r3, r3, #0x18
+ bl FUN_02019064
+ add r0, r6, #0
+ mov r1, #0xf
+ bl FUN_02019620
+ mov r0, #0
+ str r0, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021DA548 ; =0x0001020F
+ ldr r2, [sp, #0x1c]
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ ldr r3, [sp, #0x18]
+ add r0, r6, #0
+ mov r1, #0
+ bl FUN_0201BDE0
+ add r0, r6, #0
+ bl FUN_02019270
+ add r0, r6, #0
+ bl FUN_02019548
+ add r0, r6, #0
+ bl FUN_02019178
+ add r7, r7, #1
+ add r5, #0x10
+ add r4, r4, #4
+ cmp r7, #2
+ blo _021DA4B6
+ ldr r0, [sp, #0x1c]
+ bl FUN_02021A20
+ ldr r0, [sp, #0x20]
+ bl FUN_0200A8B8
+ add r0, r5, #0
+ add sp, #0x34
+ pop {r4, r5, r6, r7, pc}
+ nop
+_021DA540: .word 0x00000181
+_021DA544: .word 0x021DBA10
+_021DA548: .word 0x0001020F
+
+ thumb_func_start MOD15_021DA54C
+MOD15_021DA54C: ; 0x021DA54C
+ push {r3, r4, lr}
+ sub sp, #0x2c
+ add r4, r0, #0
+ ldr r0, [r4]
+ add r1, sp, #8
+ mov r2, #0
+ mov r3, #1
+ bl MOD15_021D9550
+ mov r0, #2
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ ldr r0, [r4]
+ add r1, sp, #8
+ mov r2, #0x30
+ mov r3, #0x36
+ bl MOD15_021D9594
+ str r0, [r4, #0x5c]
+ mov r1, #4
+ bl FUN_02020130
+ ldr r0, [r4, #0x5c]
+ mov r1, #0
+ bl FUN_020200A0
+ add sp, #0x2c
+ pop {r3, r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA588
+MOD15_021DA588: ; 0x021DA588
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ ldr r0, [r5, #0x5c]
+ add r4, r1, #0
+ bl FUN_020200A0
+ cmp r4, #0
+ beq _021DA5B2
+ ldr r0, [r5, #4]
+ bl MOD15_021D86F4
+ cmp r0, #0
+ ldr r0, [r5, #0x5c]
+ bne _021DA5AC
+ mov r1, #4
+ bl FUN_02020130
+ pop {r3, r4, r5, pc}
+_021DA5AC:
+ mov r1, #6
+ bl FUN_02020130
+_021DA5B2:
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021DA5B4
+MOD15_021DA5B4: ; 0x021DA5B4
+ push {r4, r5, lr}
+ sub sp, #0x14
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ add r5, r1, #0
+ bl MOD15_021D86F4
+ mov r1, #0
+ str r1, [sp, #0x10]
+ cmp r5, #0xfe
+ bne _021DA5D6
+ mov r0, #0x84
+ str r0, [sp, #8]
+ mov r0, #0x96
+ str r0, [sp, #0xc]
+ mov r5, #0x10
+ b _021DA616
+_021DA5D6:
+ cmp r0, #0
+ bne _021DA5FE
+ add r0, r5, #0
+ mov r1, #3
+ bl _u32_div_f
+ mov r0, #0x50
+ mul r0, r1
+ add r0, #0x30
+ str r0, [sp, #8]
+ add r0, r5, #0
+ mov r1, #3
+ bl _u32_div_f
+ mov r1, #0x18
+ mul r1, r0
+ add r1, #0x36
+ str r1, [sp, #0xc]
+ mov r5, #4
+ b _021DA616
+_021DA5FE:
+ add r0, r5, #0
+ add r1, sp, #4
+ add r2, sp, #0
+ bl MOD15_021DB798
+ ldr r0, [sp, #4]
+ mov r5, #6
+ add r0, #0x1a
+ str r0, [sp, #8]
+ ldr r0, [sp]
+ add r0, #0x3e
+ str r0, [sp, #0xc]
+_021DA616:
+ ldr r0, [sp, #8]
+ add r1, sp, #8
+ lsl r0, r0, #0xc
+ str r0, [sp, #8]
+ ldr r0, [sp, #0xc]
+ lsl r0, r0, #0xc
+ str r0, [sp, #0xc]
+ ldr r0, [r4, #0x5c]
+ bl FUN_02020044
+ ldr r0, [r4, #0x5c]
+ add r1, r5, #0
+ bl FUN_02020130
+ add sp, #0x14
+ pop {r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA638
+MOD15_021DA638: ; 0x021DA638
+ push {r3, lr}
+ mov r3, #0
+ str r3, [r0, #0x14]
+ mov r1, #0x10
+ str r1, [sp]
+ mov r1, #2
+ add r2, r1, #0
+ add r0, #0x1c
+ sub r2, #0xc
+ bl MOD15_021DB6DC
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021DA650
+MOD15_021DA650: ; 0x021DA650
+ push {r4, lr}
+ sub sp, #8
+ add r4, r0, #0
+ ldr r0, [r4, #0x14]
+ cmp r0, #0
+ beq _021DA662
+ cmp r0, #1
+ beq _021DA68C
+ b _021DA698
+_021DA662:
+ add r0, r4, #0
+ add r0, #0x1c
+ bl MOD15_021DB71C
+ cmp r0, #0
+ beq _021DA698
+ mov r0, #0x18
+ str r0, [sp]
+ mov r0, #6
+ str r0, [sp, #4]
+ add r0, r4, #0
+ mov r2, #1
+ ldr r1, [r4, #0xc]
+ add r0, #0x3c
+ add r3, r2, #0
+ bl MOD15_021DB564
+ ldr r0, [r4, #0x14]
+ add r0, r0, #1
+ str r0, [r4, #0x14]
+ b _021DA698
+_021DA68C:
+ add r4, #0x3c
+ add r0, r4, #0
+ bl MOD15_021DB5B8
+ add sp, #8
+ pop {r4, pc}
+_021DA698:
+ mov r0, #0
+ add sp, #8
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA6A0
+MOD15_021DA6A0: ; 0x021DA6A0
+ push {r3, lr}
+ sub sp, #8
+ add r1, r0, #0
+ mov r0, #0
+ str r0, [r1, #0x14]
+ sub r0, #0x18
+ str r0, [sp]
+ mov r0, #6
+ str r0, [sp, #4]
+ add r0, r1, #0
+ mov r2, #1
+ ldr r1, [r1, #0xc]
+ add r0, #0x3c
+ add r3, r2, #0
+ bl MOD15_021DB564
+ add sp, #8
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021DA6C4
+MOD15_021DA6C4: ; 0x021DA6C4
+ push {r3, r4, lr}
+ sub sp, #4
+ add r4, r0, #0
+ ldr r0, [r4, #0x14]
+ cmp r0, #0
+ beq _021DA6D6
+ cmp r0, #1
+ beq _021DA6FE
+ b _021DA70A
+_021DA6D6:
+ add r0, r4, #0
+ add r0, #0x3c
+ bl MOD15_021DB5B8
+ cmp r0, #0
+ beq _021DA70A
+ mov r0, #0x10
+ mov r2, #0
+ str r0, [sp]
+ add r0, r4, #0
+ add r3, r2, #0
+ add r0, #0x1c
+ mov r1, #2
+ sub r3, #0xa
+ bl MOD15_021DB6DC
+ ldr r0, [r4, #0x14]
+ add r0, r0, #1
+ str r0, [r4, #0x14]
+ b _021DA70A
+_021DA6FE:
+ add r4, #0x1c
+ add r0, r4, #0
+ bl MOD15_021DB71C
+ add sp, #4
+ pop {r3, r4, pc}
+_021DA70A:
+ mov r0, #0
+ add sp, #4
+ pop {r3, r4, pc}
+
+ thumb_func_start MOD15_021DA710
+MOD15_021DA710: ; 0x021DA710
+ push {r3, lr}
+ ldr r0, [r0, #0xc]
+ mov r1, #1
+ mov r2, #3
+ mov r3, #2
+ bl FUN_020179E0
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021DA720
+MOD15_021DA720: ; 0x021DA720
+ push {r3, lr}
+ mov r2, #0
+ mov r1, #0x10
+ add r3, r2, #0
+ str r1, [sp]
+ add r0, #0x1c
+ mov r1, #2
+ sub r3, #0xa
+ bl MOD15_021DB6DC
+ pop {r3, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA738
+MOD15_021DA738: ; 0x021DA738
+ ldr r3, _021DA740 ; =MOD15_021DB71C
+ add r0, #0x1c
+ bx r3
+ nop
+_021DA740: .word MOD15_021DB71C
+
+ thumb_func_start MOD15_021DA744
+MOD15_021DA744: ; 0x021DA744
+ push {r3, lr}
+ sub sp, #8
+ mov r1, #0
+ str r1, [sp]
+ mov r1, #0xc
+ str r1, [sp, #4]
+ add r0, #0x1c
+ mov r1, #2
+ mov r2, #0x3f
+ mov r3, #0x7c
+ bl MOD15_021DB648
+ add sp, #8
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021DA760
+MOD15_021DA760: ; 0x021DA760
+ push {r3, lr}
+ add r0, #0x1c
+ bl MOD15_021DB678
+ cmp r0, #0
+ beq _021DA778
+ mov r0, #1
+ mov r1, #0
+ bl FUN_0201797C
+ mov r0, #1
+ pop {r3, pc}
+_021DA778:
+ mov r0, #0
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021DA77C
+MOD15_021DA77C: ; 0x021DA77C
+ push {r4, lr}
+ sub sp, #8
+ add r4, r0, #0
+ mov r0, #0x10
+ str r0, [sp]
+ ldr r0, _021DA7B4 ; =0x04000050
+ mov r1, #2
+ mov r2, #0x3f
+ mov r3, #0
+ bl G2x_SetBlendAlpha_
+ mov r0, #1
+ add r1, r0, #0
+ bl FUN_0201797C
+ mov r0, #0x7c
+ str r0, [sp]
+ mov r0, #0xc
+ add r4, #0x1c
+ str r0, [sp, #4]
+ add r0, r4, #0
+ mov r1, #2
+ mov r2, #0x3f
+ mov r3, #0
+ bl MOD15_021DB648
+ add sp, #8
+ pop {r4, pc}
+ .align 2, 0
+_021DA7B4: .word 0x04000050
+
+ thumb_func_start MOD15_021DA7B8
+MOD15_021DA7B8: ; 0x021DA7B8
+ ldr r3, _021DA7C0 ; =MOD15_021DB678
+ add r0, #0x1c
+ bx r3
+ nop
+_021DA7C0: .word MOD15_021DB678
+
+ thumb_func_start MOD15_021DA7C4
+MOD15_021DA7C4: ; 0x021DA7C4
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ bl MOD15_021D86F4
+ cmp r0, #0
+ bne _021DA7D8
+ mov r3, #3
+ mvn r3, r3
+ b _021DA7DA
+_021DA7D8:
+ mov r3, #0xfc
+_021DA7DA:
+ ldr r0, [r4, #0xc]
+ mov r1, #1
+ mov r2, #0
+ bl FUN_020179E0
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA7E8
+MOD15_021DA7E8: ; 0x021DA7E8
+ push {r4, lr}
+ sub sp, #8
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ bl MOD15_021D86F4
+ cmp r0, #0
+ bne _021DA7FE
+ mov r0, #0xff
+ mvn r0, r0
+ b _021DA802
+_021DA7FE:
+ mov r0, #1
+ lsl r0, r0, #8
+_021DA802:
+ str r0, [sp]
+ mov r0, #0x10
+ str r0, [sp, #4]
+ add r0, r4, #0
+ ldr r1, [r4, #0xc]
+ add r0, #0x3c
+ mov r2, #1
+ mov r3, #0
+ bl MOD15_021DB564
+ add sp, #8
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA81C
+MOD15_021DA81C: ; 0x021DA81C
+ ldr r3, _021DA824 ; =MOD15_021DB5B8
+ add r0, #0x3c
+ bx r3
+ nop
+_021DA824: .word MOD15_021DB5B8
+
+ thumb_func_start MOD15_021DA828
+MOD15_021DA828: ; 0x021DA828
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x14
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #0x23
+ mov r1, #0x94
+ add r7, r2, #0
+ bl FUN_02016998
+ add r4, r0, #0
+ str r5, [r4]
+ str r6, [r4, #4]
+ str r7, [r4, #8]
+ add r0, r5, #0
+ bl MOD15_021D9548
+ str r0, [r4, #0xc]
+ mov r0, #0x20
+ mov r1, #0x23
+ bl FUN_020219F4
+ str r0, [r4, #0x3c]
+ mov r0, #0
+ str r0, [sp]
+ mov r0, #0x1a
+ str r0, [sp, #4]
+ mov r0, #0x20
+ str r0, [sp, #8]
+ mov r0, #0xc
+ str r0, [sp, #0xc]
+ mov r0, #1
+ str r0, [sp, #0x10]
+ add r1, r4, #0
+ ldr r0, [r4, #0xc]
+ add r1, #0x10
+ mov r2, #2
+ mov r3, #4
+ bl FUN_02019064
+ mov r3, #0
+ str r3, [sp]
+ mov r1, #0xc
+ str r1, [sp, #4]
+ mov r0, #4
+ str r0, [sp, #8]
+ str r1, [sp, #0xc]
+ mov r0, #1
+ str r0, [sp, #0x10]
+ add r1, r4, #0
+ ldr r0, [r4, #0xc]
+ add r1, #0x20
+ mov r2, #2
+ bl FUN_02019064
+ mov r0, #0
+ str r0, [r4, #0x30]
+ str r0, [r4, #0x34]
+ str r0, [r4, #0x38]
+ add r0, r4, #0
+ add sp, #0x14
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA8A4
+MOD15_021DA8A4: ; 0x021DA8A4
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x30]
+ cmp r0, #0
+ beq _021DA8B2
+ bl FUN_0201FFC8
+_021DA8B2:
+ ldr r0, [r4, #0x34]
+ cmp r0, #0
+ beq _021DA8BC
+ bl FUN_0201FFC8
+_021DA8BC:
+ ldr r0, [r4, #0x38]
+ cmp r0, #0
+ beq _021DA8C6
+ bl FUN_0201FFC8
+_021DA8C6:
+ ldr r0, [r4, #0x3c]
+ cmp r0, #0
+ beq _021DA8D0
+ bl FUN_02021A20
+_021DA8D0:
+ add r0, r4, #0
+ add r0, #0x20
+ bl FUN_02019178
+ add r0, r4, #0
+ add r0, #0x10
+ bl FUN_02019178
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021DA8E8
+MOD15_021DA8E8: ; 0x021DA8E8
+ push {r3, r4, r5, lr}
+ sub sp, #0x10
+ add r5, r0, #0
+ ldr r0, [r5]
+ bl MOD15_021D9548
+ add r4, r0, #0
+ mov r0, #2
+ mov r1, #0x20
+ mov r2, #0
+ mov r3, #0x23
+ bl FUN_02017F18
+ mov r2, #0
+ str r2, [sp]
+ mov r0, #0x20
+ str r0, [sp, #4]
+ str r0, [sp, #8]
+ mov r0, #0xc
+ str r0, [sp, #0xc]
+ add r0, r4, #0
+ mov r1, #2
+ add r3, r2, #0
+ bl FUN_02018540
+ add r0, r5, #0
+ add r0, #0x10
+ mov r1, #0
+ bl FUN_02019620
+ add r0, r5, #0
+ add r0, #0x10
+ bl FUN_02019270
+ add r0, r5, #0
+ add r0, #0x10
+ bl FUN_02019548
+ add r0, r4, #0
+ mov r1, #2
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD15_021DA950
+ mov r0, #2
+ mov r1, #0
+ bl FUN_0201797C
+ add sp, #0x10
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA950
+MOD15_021DA950: ; 0x021DA950
+ push {r3, r4, lr}
+ sub sp, #0x2c
+ add r4, r0, #0
+ ldr r0, [r4]
+ add r1, sp, #8
+ mov r2, #0
+ mov r3, #2
+ bl MOD15_021D9550
+ mov r0, #3
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ ldr r0, [r4]
+ add r1, sp, #8
+ mov r2, #0x48
+ mov r3, #0x38
+ bl MOD15_021D9594
+ str r0, [r4, #0x30]
+ mov r1, #8
+ bl FUN_02020130
+ ldr r0, [r4, #0x30]
+ mov r1, #0
+ bl FUN_020200A0
+ mov r0, #4
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ ldr r0, [r4]
+ add r1, sp, #8
+ mov r2, #0xf0
+ mov r3, #0x40
+ bl MOD15_021D9594
+ str r0, [r4, #0x34]
+ mov r1, #0xb
+ bl FUN_02020130
+ ldr r0, [r4, #0x34]
+ mov r1, #0
+ bl FUN_020200A0
+ mov r0, #4
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ ldr r0, [r4]
+ add r1, sp, #8
+ mov r2, #0xf0
+ mov r3, #0x90
+ bl MOD15_021D9594
+ str r0, [r4, #0x38]
+ mov r1, #0xa
+ bl FUN_02020130
+ ldr r0, [r4, #0x38]
+ mov r1, #0
+ bl FUN_020200A0
+ add sp, #0x2c
+ pop {r3, r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DA9D4
+MOD15_021DA9D4: ; 0x021DA9D4
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ add r0, #0x10
+ mov r1, #0
+ bl FUN_02019620
+ add r0, r6, #0
+ bl MOD15_021DAD78
+ ldr r0, [r6, #4]
+ bl MOD15_021D8744
+ add r7, r0, #0
+ cmp r7, #0xa
+ bls _021DA9F4
+ mov r7, #0xa
+_021DA9F4:
+ add r0, r6, #0
+ add r0, #0x8c
+ mov r5, #0
+ ldr r4, [r0]
+ cmp r7, #0
+ bls _021DAA18
+_021DAA00:
+ add r0, r6, #0
+ add r1, r5, #0
+ add r2, r4, #0
+ bl MOD15_021DAD98
+ mov r0, #1
+ tst r0, r5
+ beq _021DAA12
+ add r4, #0x18
+_021DAA12:
+ add r5, r5, #1
+ cmp r5, r7
+ blo _021DAA00
+_021DAA18:
+ add r6, #0x10
+ add r0, r6, #0
+ bl FUN_02019548
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DAA24
+MOD15_021DAA24: ; 0x021DAA24
+ push {r3, r4, r5, lr}
+ sub sp, #8
+ add r4, r0, #0
+ mov r0, #0x10
+ str r0, [sp]
+ ldr r0, _021DAABC ; =0x04000050
+ mov r1, #4
+ mov r2, #0x3f
+ mov r3, #0
+ bl G2x_SetBlendAlpha_
+ mov r0, #2
+ mov r1, #1
+ bl FUN_0201797C
+ ldr r1, _021DAAC0 ; =0x04000048
+ ldr r0, _021DAAC4 ; =0xFFFFC0FF
+ ldrh r2, [r1]
+ mov r5, #0xff
+ and r2, r0
+ mov r0, #0x1f
+ lsl r0, r0, #8
+ orr r2, r0
+ lsr r0, r1, #0xd
+ orr r0, r2
+ strh r0, [r1]
+ add r0, r4, #0
+ ldrb r2, [r1, #2]
+ add r0, #0x84
+ strb r2, [r0]
+ add r0, r1, #0
+ sub r0, #0x48
+ mov r2, #0xe
+ ldr r3, [r0]
+ lsl r2, r2, #0xc
+ and r2, r3
+ lsr r3, r2, #0xd
+ add r2, r4, #0
+ add r2, #0x88
+ str r3, [r2]
+ ldrh r3, [r1, #2]
+ mov r2, #0x3f
+ bic r3, r2
+ mov r2, #0x1b
+ orr r3, r2
+ mov r2, #0x20
+ orr r3, r2
+ strh r3, [r1, #2]
+ sub r3, r1, #6
+ strh r5, [r3]
+ ldr r3, _021DAAC8 ; =0x00002EB0
+ sub r1, r1, #2
+ strh r3, [r1]
+ ldr r3, [r0]
+ ldr r1, _021DAACC ; =0xFFFF1FFF
+ and r3, r1
+ lsl r1, r2, #9
+ orr r1, r3
+ str r1, [r0]
+ add r0, r4, #0
+ mov r3, #0
+ add r0, #0x80
+ str r3, [r0]
+ mov r0, #0x7c
+ str r0, [sp]
+ mov r0, #0xc
+ add r4, #0x40
+ str r0, [sp, #4]
+ add r0, r4, #0
+ mov r1, #4
+ mov r2, #0x3f
+ bl MOD15_021DB648
+ add sp, #8
+ pop {r3, r4, r5, pc}
+ nop
+_021DAABC: .word 0x04000050
+_021DAAC0: .word 0x04000048
+_021DAAC4: .word 0xFFFFC0FF
+_021DAAC8: .word 0x00002EB0
+_021DAACC: .word 0xFFFF1FFF
+
+ thumb_func_start MOD15_021DAAD0
+MOD15_021DAAD0: ; 0x021DAAD0
+ push {r3, lr}
+ add r1, r0, #0
+ add r1, #0x80
+ ldr r1, [r1]
+ cmp r1, #0
+ bne _021DAAEE
+ add r0, #0x40
+ bl MOD15_021DB678
+ cmp r0, #0
+ beq _021DAAEA
+ mov r0, #1
+ pop {r3, pc}
+_021DAAEA:
+ mov r0, #0
+ pop {r3, pc}
+_021DAAEE:
+ mov r0, #1
+ pop {r3, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DAAF4
+MOD15_021DAAF4: ; 0x021DAAF4
+ push {r3, lr}
+ sub sp, #8
+ add r1, r0, #0
+ mov r2, #0
+ add r1, #0x80
+ str r2, [r1]
+ str r2, [sp]
+ mov r1, #0xc
+ str r1, [sp, #4]
+ add r0, #0x40
+ mov r1, #4
+ mov r2, #0x3f
+ mov r3, #0x7c
+ bl MOD15_021DB648
+ add sp, #8
+ pop {r3, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DAB18
+MOD15_021DAB18: ; 0x021DAB18
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, #0x80
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _021DAB70
+ add r0, r4, #0
+ add r0, #0x40
+ bl MOD15_021DB678
+ cmp r0, #0
+ beq _021DAB74
+ mov r0, #2
+ mov r1, #0
+ bl FUN_0201797C
+ ldr r0, _021DAB78 ; =0x0400004A
+ ldrh r2, [r0]
+ mov r0, #0x3f
+ bic r2, r0
+ add r0, r4, #0
+ add r0, #0x84
+ ldrb r0, [r0]
+ lsl r1, r0, #0x1b
+ lsr r1, r1, #0x1b
+ lsl r0, r0, #0x1a
+ orr r1, r2
+ lsr r0, r0, #0x1f
+ beq _021DAB56
+ mov r0, #0x20
+ orr r1, r0
+_021DAB56:
+ ldr r2, _021DAB78 ; =0x0400004A
+ ldr r0, _021DAB7C ; =0xFFFF1FFF
+ strh r1, [r2]
+ sub r2, #0x4a
+ ldr r1, [r2]
+ add r4, #0x88
+ and r1, r0
+ ldr r0, [r4]
+ lsl r0, r0, #0xd
+ orr r0, r1
+ str r0, [r2]
+ mov r0, #1
+ pop {r4, pc}
+_021DAB70:
+ mov r0, #1
+ pop {r4, pc}
+_021DAB74:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+_021DAB78: .word 0x0400004A
+_021DAB7C: .word 0xFFFF1FFF
+
+ thumb_func_start MOD15_021DAB80
+MOD15_021DAB80: ; 0x021DAB80
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ ldr r0, [r5, #0x30]
+ add r4, r1, #0
+ bl FUN_020200A0
+ cmp r4, #0
+ beq _021DABAE
+ ldr r0, [r5, #4]
+ bl MOD15_021D87AC
+ add r1, r0, #0
+ ldr r0, [r5, #0x34]
+ bl FUN_020200A0
+ ldr r0, [r5, #4]
+ bl MOD15_021D87C0
+ add r1, r0, #0
+ ldr r0, [r5, #0x38]
+ bl FUN_020200A0
+ pop {r3, r4, r5, pc}
+_021DABAE:
+ ldr r0, [r5, #0x34]
+ mov r1, #0
+ bl FUN_020200A0
+ ldr r0, [r5, #0x38]
+ mov r1, #0
+ bl FUN_020200A0
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021DABC0
+MOD15_021DABC0: ; 0x021DABC0
+ push {r3, r4, lr}
+ sub sp, #0xc
+ add r4, r0, #0
+ add r2, r1, #0
+ mov r0, #1
+ and r2, r0
+ mov r0, #0x70
+ mul r0, r2
+ add r0, #0x48
+ lsl r0, r0, #0xc
+ str r0, [sp]
+ lsr r1, r1, #1
+ mov r0, #0x18
+ mul r0, r1
+ add r0, #0x38
+ lsl r0, r0, #0xc
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ ldr r0, [r4, #0x30]
+ add r1, sp, #0
+ bl FUN_02020044
+ ldr r0, [r4, #0x30]
+ mov r1, #8
+ bl FUN_02020130
+ add sp, #0xc
+ pop {r3, r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DABFC
+MOD15_021DABFC: ; 0x021DABFC
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x1c
+ add r7, r0, #0
+ add r4, r1, #0
+ bl MOD15_021DACEC
+ add r0, r7, #0
+ add r0, #0x90
+ ldr r0, [r0]
+ lsl r6, r4, #1
+ str r0, [sp, #0x10]
+ add r0, r0, r6
+ str r0, [sp, #0x14]
+ mov r0, #0x18
+ mul r0, r4
+ str r0, [sp, #8]
+ add r0, r7, #0
+ add r0, #0x8c
+ ldr r0, [r0]
+ ldr r1, [sp, #8]
+ add r1, r0, r1
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ str r1, [sp, #0x18]
+ cmp r4, #0
+ bge _021DAC40
+ ldr r0, [sp, #0x14]
+ add r5, r1, #0
+ str r0, [sp, #0x10]
+ lsl r0, r4, #2
+ neg r0, r0
+ neg r6, r6
+ str r0, [sp, #0xc]
+ b _021DAC60
+_021DAC40:
+ add r0, #0x78
+ lsl r0, r0, #0x18
+ lsr r5, r0, #0x18
+ ldr r0, [sp, #0x10]
+ add r0, #0xa
+ str r0, [sp, #0x10]
+ ldr r0, [r7, #4]
+ bl MOD15_021D8744
+ ldr r1, [sp, #0x10]
+ add r1, r6, r1
+ cmp r1, r0
+ bls _021DAC5C
+ sub r6, r6, #1
+_021DAC5C:
+ lsl r0, r4, #2
+ str r0, [sp, #0xc]
+_021DAC60:
+ mov r4, #0
+ cmp r6, #0
+ ble _021DAC84
+_021DAC66:
+ ldr r1, [sp, #0x10]
+ add r0, r7, #0
+ add r1, r1, r4
+ add r2, r5, #0
+ bl MOD15_021DAD98
+ mov r0, #1
+ tst r0, r4
+ beq _021DAC7E
+ add r5, #0x18
+ lsl r0, r5, #0x18
+ lsr r5, r0, #0x18
+_021DAC7E:
+ add r4, r4, #1
+ cmp r4, r6
+ blt _021DAC66
+_021DAC84:
+ add r1, r7, #0
+ ldr r0, [sp, #0x18]
+ add r1, #0x8c
+ str r0, [r1]
+ add r1, r7, #0
+ ldr r0, [sp, #0x14]
+ add r1, #0x90
+ str r0, [r1]
+ add r0, r7, #0
+ add r0, #0x10
+ bl FUN_02019548
+ ldr r0, [sp, #8]
+ mov r2, #2
+ str r0, [sp]
+ ldr r0, [sp, #0xc]
+ mov r3, #1
+ str r0, [sp, #4]
+ add r0, r7, #0
+ ldr r1, [r7, #0xc]
+ add r0, #0x60
+ bl MOD15_021DB564
+ add sp, #0x1c
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DACB8
+MOD15_021DACB8: ; 0x021DACB8
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, #0x60
+ bl MOD15_021DB5B8
+ cmp r0, #0
+ beq _021DACE6
+ ldr r0, [r4, #4]
+ bl MOD15_021D87AC
+ add r1, r0, #0
+ ldr r0, [r4, #0x34]
+ bl FUN_020200A0
+ ldr r0, [r4, #4]
+ bl MOD15_021D87C0
+ add r1, r0, #0
+ ldr r0, [r4, #0x38]
+ bl FUN_020200A0
+ mov r0, #1
+ pop {r4, pc}
+_021DACE6:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DACEC
+MOD15_021DACEC: ; 0x021DACEC
+ push {r3, r4, r5, lr}
+ sub sp, #8
+ add r5, r0, #0
+ cmp r1, #0
+ ble _021DAD0C
+ add r0, #0x8c
+ ldr r0, [r0]
+ add r0, #0x78
+ lsl r0, r0, #0x18
+ lsr r3, r0, #0x18
+ mov r0, #0x18
+ mul r0, r1
+ add r0, r3, r0
+ lsl r0, r0, #0x18
+ lsr r4, r0, #0x18
+ b _021DAD1A
+_021DAD0C:
+ add r0, #0x8c
+ ldr r4, [r0]
+ mov r0, #0x18
+ mul r0, r1
+ add r0, r4, r0
+ lsl r0, r0, #0x18
+ lsr r3, r0, #0x18
+_021DAD1A:
+ cmp r3, r4
+ bge _021DAD3E
+ mov r0, #0xd0
+ str r0, [sp]
+ sub r0, r4, r3
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ mov r1, #0
+ lsl r3, r3, #0x10
+ add r5, #0x10
+ str r0, [sp, #4]
+ add r0, r5, #0
+ add r2, r1, #0
+ lsr r3, r3, #0x10
+ bl FUN_020196F4
+ add sp, #8
+ pop {r3, r4, r5, pc}
+_021DAD3E:
+ mov r0, #0xd0
+ str r0, [sp]
+ add r0, #0x30
+ sub r0, r0, r3
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #4]
+ add r0, r5, #0
+ mov r1, #0
+ lsl r3, r3, #0x10
+ add r0, #0x10
+ add r2, r1, #0
+ lsr r3, r3, #0x10
+ bl FUN_020196F4
+ mov r1, #0
+ mov r0, #0xd0
+ str r0, [sp]
+ lsl r0, r4, #0x10
+ lsr r0, r0, #0x10
+ add r5, #0x10
+ str r0, [sp, #4]
+ add r0, r5, #0
+ add r2, r1, #0
+ add r3, r1, #0
+ bl FUN_020196F4
+ add sp, #8
+ pop {r3, r4, r5, pc}
+
+ thumb_func_start MOD15_021DAD78
+MOD15_021DAD78: ; 0x021DAD78
+ push {r3, lr}
+ add r1, r0, #0
+ mov r2, #0x30
+ add r1, #0x8c
+ str r2, [r1]
+ add r1, r0, #0
+ mov r3, #0
+ add r1, #0x90
+ str r3, [r1]
+ ldr r0, [r0, #0xc]
+ mov r1, #2
+ mov r2, #3
+ bl FUN_020179E0
+ pop {r3, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DAD98
+MOD15_021DAD98: ; 0x021DAD98
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x18
+ add r5, r0, #0
+ add r4, r2, #0
+ ldr r0, [r5, #4]
+ ldr r2, [r5, #0x3c]
+ add r7, r1, #0
+ bl MOD15_021D8768
+ cmp r4, #0xf0
+ bhi _021DADD4
+ str r4, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021DAE64 ; =0x00010200
+ mov r1, #0
+ str r0, [sp, #8]
+ str r1, [sp, #0xc]
+ add r0, r5, #0
+ mov r3, #1
+ add r4, r7, #0
+ and r4, r3
+ mov r3, #0x70
+ ldr r2, [r5, #0x3c]
+ add r0, #0x10
+ mul r3, r4
+ bl FUN_0201BDE0
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+_021DADD4:
+ mov r0, #1
+ lsl r0, r0, #8
+ sub r6, r0, r4
+ add r0, r5, #0
+ add r0, #0x20
+ mov r1, #0
+ bl FUN_02019620
+ mov r1, #0
+ str r1, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021DAE64 ; =0x00010200
+ add r3, r1, #0
+ str r0, [sp, #8]
+ str r1, [sp, #0xc]
+ add r0, r5, #0
+ ldr r2, [r5, #0x3c]
+ add r0, #0x20
+ bl FUN_0201BDE0
+ mov r2, #0
+ mov r0, #1
+ add r1, r7, #0
+ and r1, r0
+ add r7, r1, #0
+ mov r0, #0x70
+ mul r7, r0
+ mov r0, #0x60
+ str r0, [sp]
+ mov r1, #0x10
+ str r1, [sp, #4]
+ lsl r1, r7, #0x10
+ lsr r1, r1, #0x10
+ str r1, [sp, #8]
+ lsl r1, r4, #0x10
+ lsr r1, r1, #0x10
+ str r1, [sp, #0xc]
+ str r0, [sp, #0x10]
+ lsl r0, r6, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x14]
+ add r0, r5, #0
+ ldr r1, [r5, #0x2c]
+ add r0, #0x10
+ add r3, r2, #0
+ bl FUN_02019658
+ mov r1, #0x60
+ lsl r2, r7, #0x10
+ lsl r3, r6, #0x10
+ str r1, [sp]
+ mov r0, #0x10
+ str r0, [sp, #4]
+ lsr r2, r2, #0x10
+ str r2, [sp, #8]
+ mov r2, #0
+ sub r0, r0, r6
+ str r2, [sp, #0xc]
+ lsl r0, r0, #0x10
+ str r1, [sp, #0x10]
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x14]
+ add r0, r5, #0
+ ldr r1, [r5, #0x2c]
+ add r0, #0x10
+ lsr r3, r3, #0x10
+ bl FUN_02019658
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021DAE64: .word 0x00010200
+
+ thumb_func_start MOD15_021DAE68
+MOD15_021DAE68: ; 0x021DAE68
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ mov r1, #5
+ add r5, r0, #0
+ mov r0, #0x23
+ lsl r1, r1, #8
+ add r7, r2, #0
+ bl FUN_02016998
+ add r4, r0, #0
+ str r5, [r4]
+ str r6, [r4, #4]
+ str r7, [r4, #8]
+ add r0, r5, #0
+ bl MOD15_021D9548
+ str r0, [r4, #0xc]
+ add r0, r5, #0
+ bl MOD15_021D954C
+ str r0, [r4, #0x10]
+ mov r1, #0
+ str r1, [r4, #0x14]
+ ldr r0, _021DAEA0 ; =0x000004FC
+ str r1, [r4, #0x18]
+ str r1, [r4, r0]
+ add r0, r4, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_021DAEA0: .word 0x000004FC
+
+ thumb_func_start MOD15_021DAEA4
+MOD15_021DAEA4: ; 0x021DAEA4
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD15_021DB200
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021DAEB4
+MOD15_021DAEB4: ; 0x021DAEB4
+ push {r3, r4, lr}
+ sub sp, #0x1c
+ add r4, r0, #0
+ mov r0, #0x40
+ str r0, [sp]
+ mov r0, #0x23
+ str r0, [sp, #4]
+ mov r0, #0x4c
+ mov r1, #0x15
+ mov r2, #4
+ mov r3, #0
+ bl FUN_02006930
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ ldr r2, [r4, #0xc]
+ mov r0, #0x4c
+ mov r1, #0xb
+ mov r3, #4
+ bl FUN_020068C8
+ add r0, r4, #0
+ bl MOD15_021DAFAC
+ add r0, r4, #0
+ bl MOD15_021DAFF8
+ ldr r0, [r4, #4]
+ bl MOD15_021D86F4
+ cmp r0, #0
+ bne _021DAF4A
+ mov r2, #0xb
+ ldr r0, _021DAFA4 ; =0x000001FA
+ str r2, [sp]
+ mov r1, #7
+ str r1, [sp, #4]
+ add r0, r4, r0
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r1, [sp, #0x18]
+ mov r2, #3
+ ldr r0, [r4, #0xc]
+ mov r1, #4
+ add r3, r2, #0
+ bl FUN_02018170
+ mov r2, #0xb
+ mov r0, #0xa5
+ lsl r0, r0, #2
+ str r2, [sp]
+ mov r1, #7
+ str r1, [sp, #4]
+ add r0, r4, r0
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r1, [sp, #0x18]
+ ldr r0, [r4, #0xc]
+ mov r1, #4
+ mov r2, #3
+ mov r3, #0xe
+ bl FUN_02018170
+ b _021DAF92
+_021DAF4A:
+ mov r2, #0xb
+ add r0, r4, #0
+ str r2, [sp]
+ mov r1, #7
+ str r1, [sp, #4]
+ add r0, #0x2c
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r1, [sp, #0x18]
+ mov r2, #3
+ ldr r0, [r4, #0xc]
+ mov r1, #4
+ add r3, r2, #0
+ bl FUN_02018170
+ mov r2, #0xb
+ ldr r0, _021DAFA8 ; =0x00000462
+ str r2, [sp]
+ mov r1, #7
+ str r1, [sp, #4]
+ add r0, r4, r0
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r1, [sp, #0x18]
+ ldr r0, [r4, #0xc]
+ mov r1, #4
+ mov r2, #3
+ mov r3, #0xe
+ bl FUN_02018170
+_021DAF92:
+ add r0, r4, #0
+ bl MOD15_021DB154
+ ldr r0, [r4, #0xc]
+ mov r1, #4
+ bl FUN_02017CD0
+ add sp, #0x1c
+ pop {r3, r4, pc}
+ .align 2, 0
+_021DAFA4: .word 0x000001FA
+_021DAFA8: .word 0x00000462
+
+ thumb_func_start MOD15_021DAFAC
+MOD15_021DAFAC: ; 0x021DAFAC
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #8
+ add r5, r0, #0
+ ldr r4, _021DAFF4 ; =0x021DBA20
+ mov r6, #0
+ add r5, #0x2c
+_021DAFB8:
+ mov r0, #0x23
+ str r0, [sp]
+ ldrh r1, [r4]
+ mov r0, #0x4c
+ mov r2, #1
+ add r3, sp, #4
+ bl FUN_02006BDC
+ add r7, r0, #0
+ beq _021DAFE6
+ ldr r0, [sp, #4]
+ add r1, r5, #0
+ add r0, #0xc
+ mov r2, #0x9a
+ bl MIi_CpuCopy16
+ add r0, r5, #0
+ mov r1, #0x9a
+ bl DC_FlushRange
+ add r0, r7, #0
+ bl FUN_02016A18
+_021DAFE6:
+ add r6, r6, #1
+ add r4, r4, #2
+ add r5, #0x9a
+ cmp r6, #8
+ blo _021DAFB8
+ add sp, #8
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_021DAFF4: .word 0x021DBA20
+
+ thumb_func_start MOD15_021DAFF8
+MOD15_021DAFF8: ; 0x021DAFF8
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x20
+ add r5, r0, #0
+ mov r0, #2
+ mov r1, #0
+ bl FUN_02002C50
+ ldr r1, _021DB0F8 ; =0x00000182
+ mov r0, #0x1a
+ mov r2, #0xb
+ mov r3, #0x23
+ bl FUN_0200A738
+ str r0, [sp, #4]
+ ldr r1, _021DB0F8 ; =0x00000182
+ mov r0, #0x1a
+ mov r2, #0xc
+ mov r3, #0x23
+ bl FUN_0200A738
+ add r7, r0, #0
+ ldr r1, _021DB0F8 ; =0x00000182
+ mov r0, #0x1a
+ mov r2, #0xd
+ mov r3, #0x23
+ bl FUN_0200A738
+ add r6, r0, #0
+ ldr r1, _021DB0F8 ; =0x00000182
+ mov r0, #0x1a
+ mov r2, #0xe
+ mov r3, #0x23
+ bl FUN_0200A738
+ add r4, r0, #0
+ mov r0, #0x23
+ str r0, [sp]
+ mov r0, #0x4c
+ mov r1, #0x14
+ mov r2, #1
+ add r3, sp, #0xc
+ bl FUN_02006BB0
+ str r0, [sp, #8]
+ cmp r0, #0
+ beq _021DB0D4
+ add r0, sp, #0x10
+ bl FUN_0201901C
+ ldr r0, [r5, #0xc]
+ add r1, sp, #0xc
+ str r0, [sp, #0x10]
+ mov r0, #0xb
+ strb r0, [r1, #0xb]
+ mov r0, #0x39
+ strb r0, [r1, #0xc]
+ ldrh r2, [r1, #0xe]
+ ldr r0, _021DB0FC ; =0xFFFF7FFF
+ mov r3, #0
+ and r0, r2
+ strh r0, [r1, #0xe]
+ ldr r0, [sp, #0xc]
+ ldr r2, [sp, #4]
+ ldr r0, [r0, #0x14]
+ str r0, [sp, #0x1c]
+ ldr r1, [r5, #0xc]
+ add r0, sp, #0x10
+ bl MOD15_021DB100
+ ldr r1, [r5, #0xc]
+ add r0, sp, #0x10
+ add r2, r7, #0
+ mov r3, #0x10
+ bl MOD15_021DB100
+ ldr r0, [sp, #0xc]
+ add r2, r6, #0
+ ldr r1, [r0, #0x14]
+ mov r0, #0x9a
+ lsl r0, r0, #6
+ add r0, r1, r0
+ str r0, [sp, #0x1c]
+ ldr r1, [r5, #0xc]
+ add r0, sp, #0x10
+ mov r3, #0
+ bl MOD15_021DB100
+ ldr r1, [r5, #0xc]
+ add r0, sp, #0x10
+ add r2, r4, #0
+ mov r3, #0x10
+ bl MOD15_021DB100
+ ldr r1, [sp, #0xc]
+ ldr r0, [r1, #0x14]
+ ldr r1, [r1, #0x10]
+ bl DC_FlushRange
+ ldr r3, [sp, #0xc]
+ mov r0, #0
+ str r0, [sp]
+ ldr r2, [r3, #0x14]
+ ldr r0, [r5, #0xc]
+ ldr r3, [r3, #0x10]
+ mov r1, #4
+ bl FUN_02017E14
+ ldr r0, [sp, #8]
+ bl FUN_02016A18
+_021DB0D4:
+ add r0, r6, #0
+ bl FUN_02021A20
+ add r0, r4, #0
+ bl FUN_02021A20
+ ldr r0, [sp, #4]
+ bl FUN_02021A20
+ add r0, r7, #0
+ bl FUN_02021A20
+ mov r0, #2
+ bl FUN_02002CF8
+ add sp, #0x20
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021DB0F8: .word 0x00000182
+_021DB0FC: .word 0xFFFF7FFF
+
+ thumb_func_start MOD15_021DB100
+MOD15_021DB100: ; 0x021DB100
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x18
+ add r6, r2, #0
+ str r0, [sp, #0x10]
+ mov r0, #2
+ add r1, r6, #0
+ mov r2, #0
+ add r7, r3, #0
+ bl FUN_02002F08
+ mov r1, #0x58
+ sub r0, r1, r0
+ lsr r0, r0, #1
+ ldr r5, _021DB14C ; =0x021DBA18
+ str r0, [sp, #0x14]
+ mov r4, #0
+_021DB120:
+ mov r0, #0
+ ldrsh r0, [r5, r0]
+ ldr r3, [sp, #0x14]
+ mov r1, #2
+ add r0, r7, r0
+ str r0, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _021DB150 ; =0x00010203
+ add r2, r6, #0
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x10]
+ bl FUN_0201BDE0
+ add r4, r4, #1
+ add r5, r5, #2
+ cmp r4, #4
+ blo _021DB120
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_021DB14C: .word 0x021DBA18
+_021DB150: .word 0x00010203
+
+ thumb_func_start MOD15_021DB154
+MOD15_021DB154: ; 0x021DB154
+ push {r3, r4, lr}
+ sub sp, #0x4c
+ add r4, r0, #0
+ add r0, sp, #0x38
+ bl FUN_020B19DC
+ add r0, sp, #0x14
+ bl FUN_020B1A24
+ mov r0, #0x23
+ str r0, [sp]
+ add r0, sp, #0x38
+ str r0, [sp, #4]
+ mov r0, #0x4c
+ mov r1, #0x19
+ mov r2, #2
+ mov r3, #0
+ bl FUN_02006A8C
+ mov r3, #0
+ str r3, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ str r3, [sp, #8]
+ mov r0, #0x23
+ str r0, [sp, #0xc]
+ add r0, sp, #0x14
+ str r0, [sp, #0x10]
+ mov r0, #0x4c
+ mov r1, #0x18
+ mov r2, #1
+ bl FUN_02006AE4
+ add r0, r4, #0
+ add r0, #0x1c
+ mov r1, #0x4c
+ mov r2, #0x16
+ mov r3, #0x17
+ bl MOD15_021DB224
+ mov r0, #0xc0
+ str r0, [sp]
+ mov r0, #0x38
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ add r3, r4, #0
+ str r0, [sp, #0xc]
+ add r0, r4, #0
+ add r1, sp, #0x14
+ add r2, sp, #0x38
+ add r3, #0x1c
+ bl MOD15_021DB26C
+ str r0, [r4, #0x14]
+ mov r1, #0
+ bl FUN_02020130
+ ldr r0, [r4, #0x14]
+ mov r1, #0
+ bl FUN_020200A0
+ mov r0, #0xc0
+ str r0, [sp]
+ mov r0, #0x88
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ add r3, r4, #0
+ str r0, [sp, #0xc]
+ add r0, r4, #0
+ add r1, sp, #0x14
+ add r2, sp, #0x38
+ add r3, #0x1c
+ bl MOD15_021DB26C
+ mov r1, #2
+ str r0, [r4, #0x18]
+ bl FUN_02020130
+ ldr r0, [r4, #0x18]
+ mov r1, #0
+ bl FUN_020200A0
+ add sp, #0x4c
+ pop {r3, r4, pc}
+
+ thumb_func_start MOD15_021DB200
+MOD15_021DB200: ; 0x021DB200
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x14]
+ cmp r0, #0
+ beq _021DB20E
+ bl FUN_0201FFC8
+_021DB20E:
+ ldr r0, [r4, #0x18]
+ cmp r0, #0
+ beq _021DB218
+ bl FUN_0201FFC8
+_021DB218:
+ add r4, #0x1c
+ add r0, r4, #0
+ bl MOD15_021DB258
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DB224
+MOD15_021DB224: ; 0x021DB224
+ push {r3, r4, r5, r6, lr}
+ sub sp, #4
+ add r5, r0, #0
+ add r4, r1, #0
+ mov r0, #0x23
+ add r6, r3, #0
+ str r0, [sp]
+ add r1, r2, #0
+ add r0, r4, #0
+ mov r2, #1
+ add r3, r5, #4
+ bl FUN_02006C30
+ str r0, [r5]
+ mov r0, #0x23
+ add r3, r5, #0
+ str r0, [sp]
+ add r0, r4, #0
+ add r1, r6, #0
+ mov r2, #1
+ add r3, #0xc
+ bl FUN_02006C5C
+ str r0, [r5, #8]
+ add sp, #4
+ pop {r3, r4, r5, r6, pc}
+
+ thumb_func_start MOD15_021DB258
+MOD15_021DB258: ; 0x021DB258
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4]
+ bl FUN_02016A18
+ ldr r0, [r4, #8]
+ bl FUN_02016A18
+ pop {r4, pc}
+ .align 2, 0
+
+ thumb_func_start MOD15_021DB26C
+MOD15_021DB26C: ; 0x021DB26C
+ push {r3, r4, lr}
+ sub sp, #0x44
+ str r2, [sp, #0x28]
+ str r1, [sp, #0x20]
+ ldr r1, [r3, #4]
+ ldr r2, [sp, #0x58]
+ str r1, [sp, #0x2c]
+ ldr r1, [r3, #0xc]
+ str r1, [sp, #0x30]
+ add r1, sp, #0x40
+ strb r2, [r1]
+ mov r1, #0
+ str r1, [sp, #0x24]
+ str r1, [sp, #0x34]
+ str r1, [sp, #0x38]
+ str r1, [sp, #0x3c]
+ ldr r0, [r0, #0x10]
+ str r0, [sp]
+ add r0, sp, #0x20
+ str r0, [sp, #4]
+ ldr r0, [sp, #0x50]
+ str r1, [sp, #0x10]
+ lsl r0, r0, #0xc
+ str r0, [sp, #8]
+ ldr r0, [sp, #0x54]
+ add r0, #0xc0
+ lsl r0, r0, #0xc
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x5c]
+ str r0, [sp, #0x14]
+ mov r0, #2
+ str r0, [sp, #0x18]
+ mov r0, #0x23
+ str r0, [sp, #0x1c]
+ add r0, sp, #0
+ bl FUN_0201FF84
+ add r4, r0, #0
+ beq _021DB2CA
+ mov r1, #1
+ bl FUN_020200BC
+ mov r1, #1
+ add r0, r4, #0
+ lsl r1, r1, #0xc
+ bl FUN_020200D8
+_021DB2CA:
+ add r0, r4, #0
+ add sp, #0x44
+ pop {r3, r4, pc}
+
+ thumb_func_start MOD15_021DB2D0
+MOD15_021DB2D0: ; 0x021DB2D0
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ mov r0, #0x23
+ mov r1, #0x18
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _021DB32C
+ ldr r0, [r5, #4]
+ bl MOD15_021D86F4
+ str r5, [r4]
+ mov r1, #0
+ str r1, [r4, #4]
+ strh r1, [r4, #8]
+ mov r1, #0xe
+ mul r1, r0
+ ldr r0, _021DB334 ; =0x021DBA30
+ mov r2, #1
+ ldrh r0, [r0, r1]
+ strh r0, [r4, #0xa]
+ ldr r0, _021DB338 ; =0x021DBA32
+ ldrh r0, [r0, r1]
+ strh r0, [r4, #0xc]
+ ldr r0, _021DB33C ; =0x021DBA34
+ ldrh r0, [r0, r1]
+ strh r0, [r4, #0xe]
+ ldr r0, _021DB340 ; =0x021DBA36
+ ldrh r0, [r0, r1]
+ strh r0, [r4, #0x10]
+ ldr r0, _021DB344 ; =0x021DBA38
+ ldrh r0, [r0, r1]
+ strh r0, [r4, #0x12]
+ ldr r0, _021DB348 ; =0x021DBA3A
+ ldrh r0, [r0, r1]
+ strh r0, [r4, #0x14]
+ ldr r0, _021DB34C ; =0x021DBA3C
+ ldrh r0, [r0, r1]
+ add r1, r4, #0
+ strh r0, [r4, #0x16]
+ ldr r0, _021DB350 ; =MOD15_021DB36C
+ bl FUN_0200CA44
+ ldr r1, _021DB354 ; =0x000004FC
+ str r0, [r5, r1]
+ pop {r3, r4, r5, pc}
+_021DB32C:
+ ldr r0, _021DB354 ; =0x000004FC
+ mov r1, #0
+ str r1, [r5, r0]
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021DB334: .word 0x021DBA30
+_021DB338: .word 0x021DBA32
+_021DB33C: .word 0x021DBA34
+_021DB340: .word 0x021DBA36
+_021DB344: .word 0x021DBA38
+_021DB348: .word 0x021DBA3A
+_021DB34C: .word 0x021DBA3C
+_021DB350: .word MOD15_021DB36C
+_021DB354: .word 0x000004FC
+
+ thumb_func_start MOD15_021DB358
+MOD15_021DB358: ; 0x021DB358
+ ldr r1, _021DB368 ; =0x000004FC
+ ldr r0, [r0, r1]
+ cmp r0, #0
+ bne _021DB364
+ mov r0, #1
+ bx lr
+_021DB364:
+ mov r0, #0
+ bx lr
+ .align 2, 0
+_021DB368: .word 0x000004FC
+
+ thumb_func_start MOD15_021DB36C
+MOD15_021DB36C: ; 0x021DB36C
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0x1c
+ add r4, r1, #0
+ add r5, r0, #0
+ ldr r0, [r4, #4]
+ cmp r0, #3
+ bls _021DB37C
+ b _021DB4E0
+_021DB37C:
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021DB388: ; jump table
+ .short _021DB390 - _021DB388 - 2 ; case 0
+ .short _021DB416 - _021DB388 - 2 ; case 1
+ .short _021DB476 - _021DB388 - 2 ; case 2
+ .short _021DB4CC - _021DB388 - 2 ; case 3
+_021DB390:
+ ldr r3, [r4]
+ mov r2, #0xb
+ str r2, [sp]
+ mov r1, #7
+ str r1, [sp, #4]
+ ldrh r6, [r4, #0xa]
+ add r0, r3, #0
+ mov r5, #0x9a
+ add r0, #0x2c
+ mul r5, r6
+ add r0, r0, r5
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r1, [sp, #0x18]
+ ldr r0, [r3, #0xc]
+ ldrh r2, [r4, #0xe]
+ ldrh r3, [r4, #0x10]
+ mov r1, #4
+ lsl r2, r2, #0x18
+ lsl r3, r3, #0x18
+ lsr r2, r2, #0x18
+ lsr r3, r3, #0x18
+ bl FUN_02018170
+ ldr r3, [r4]
+ mov r2, #0xb
+ add r0, r3, #0
+ str r2, [sp]
+ mov r1, #7
+ str r1, [sp, #4]
+ ldrh r6, [r4, #0x12]
+ mov r5, #0x9a
+ add r0, #0x2c
+ mul r5, r6
+ add r0, r0, r5
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r1, [sp, #0x18]
+ ldr r0, [r3, #0xc]
+ ldrh r2, [r4, #0x14]
+ ldrh r3, [r4, #0x16]
+ mov r1, #4
+ lsl r2, r2, #0x18
+ lsl r3, r3, #0x18
+ lsr r2, r2, #0x18
+ lsr r3, r3, #0x18
+ bl FUN_02018170
+ ldr r0, [r4]
+ mov r1, #4
+ ldr r0, [r0, #0xc]
+ bl FUN_02017CD0
+ ldrh r0, [r4, #0xa]
+ add sp, #0x1c
+ add r0, r0, #1
+ strh r0, [r4, #0xa]
+ ldr r0, [r4, #4]
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, r5, r6, pc}
+_021DB416:
+ ldrh r0, [r4, #8]
+ add r0, r0, #1
+ strh r0, [r4, #8]
+ ldrh r0, [r4, #8]
+ cmp r0, #2
+ blo _021DB4E0
+ ldr r3, [r4]
+ mov r2, #0xb
+ str r2, [sp]
+ mov r1, #7
+ str r1, [sp, #4]
+ ldrh r6, [r4, #0xa]
+ add r0, r3, #0
+ mov r5, #0x9a
+ add r0, #0x2c
+ mul r5, r6
+ add r0, r0, r5
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r1, [sp, #0x18]
+ ldr r0, [r3, #0xc]
+ ldrh r2, [r4, #0xe]
+ ldrh r3, [r4, #0x10]
+ mov r1, #4
+ lsl r2, r2, #0x18
+ lsl r3, r3, #0x18
+ lsr r2, r2, #0x18
+ lsr r3, r3, #0x18
+ bl FUN_02018170
+ ldr r0, [r4]
+ mov r1, #4
+ ldr r0, [r0, #0xc]
+ bl FUN_02017CD0
+ mov r0, #0
+ strh r0, [r4, #8]
+ ldrh r0, [r4, #0xa]
+ add sp, #0x1c
+ add r0, r0, #1
+ strh r0, [r4, #0xa]
+ ldr r0, [r4, #4]
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, r5, r6, pc}
+_021DB476:
+ ldrh r0, [r4, #8]
+ add r0, r0, #1
+ strh r0, [r4, #8]
+ ldrh r0, [r4, #8]
+ cmp r0, #4
+ blo _021DB4E0
+ ldr r3, [r4]
+ mov r2, #0xb
+ str r2, [sp]
+ mov r1, #7
+ str r1, [sp, #4]
+ ldrh r6, [r4, #0xa]
+ add r0, r3, #0
+ mov r5, #0x9a
+ add r0, #0x2c
+ mul r5, r6
+ add r0, r0, r5
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r1, [sp, #0x18]
+ ldr r0, [r3, #0xc]
+ ldrh r2, [r4, #0xe]
+ ldrh r3, [r4, #0x10]
+ mov r1, #4
+ lsl r2, r2, #0x18
+ lsl r3, r3, #0x18
+ lsr r2, r2, #0x18
+ lsr r3, r3, #0x18
+ bl FUN_02018170
+ ldr r0, [r4]
+ mov r1, #4
+ ldr r0, [r0, #0xc]
+ bl FUN_02017CD0
+ ldr r0, [r4, #4]
+ add sp, #0x1c
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, r5, r6, pc}
+_021DB4CC:
+ ldr r1, [r4]
+ ldr r0, _021DB4E4 ; =0x000004FC
+ mov r2, #0
+ str r2, [r1, r0]
+ add r0, r4, #0
+ bl FUN_02016A18
+ add r0, r5, #0
+ bl FUN_0200CAB4
+_021DB4E0:
+ add sp, #0x1c
+ pop {r3, r4, r5, r6, pc}
+ .align 2, 0
+_021DB4E4: .word 0x000004FC
+
+ thumb_func_start MOD15_021DB4E8
+MOD15_021DB4E8: ; 0x021DB4E8
+ push {r4, lr}
+ add r4, r0, #0
+ cmp r1, #0
+ beq _021DB50E
+ ldr r0, [r4, #4]
+ bl MOD15_021D87AC
+ add r1, r0, #0
+ ldr r0, [r4, #0x14]
+ bl FUN_020200A0
+ ldr r0, [r4, #4]
+ bl MOD15_021D87C0
+ add r1, r0, #0
+ ldr r0, [r4, #0x18]
+ bl FUN_020200A0
+ pop {r4, pc}
+_021DB50E:
+ ldr r0, [r4, #0x14]
+ mov r1, #0
+ bl FUN_020200A0
+ ldr r0, [r4, #0x18]
+ mov r1, #0
+ bl FUN_020200A0
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021DB520
+MOD15_021DB520: ; 0x021DB520
+ push {r3, lr}
+ cmp r1, #0
+ beq _021DB52C
+ cmp r1, #1
+ beq _021DB548
+ pop {r3, pc}
+_021DB52C:
+ cmp r2, #0
+ beq _021DB53E
+ cmp r2, #1
+ bne _021DB562
+ ldr r0, [r0, #0x14]
+ mov r1, #1
+ bl FUN_02020130
+ pop {r3, pc}
+_021DB53E:
+ ldr r0, [r0, #0x14]
+ mov r1, #0
+ bl FUN_02020130
+ pop {r3, pc}
+_021DB548:
+ cmp r2, #0
+ beq _021DB55A
+ cmp r2, #1
+ bne _021DB562
+ ldr r0, [r0, #0x18]
+ mov r1, #3
+ bl FUN_02020130
+ pop {r3, pc}
+_021DB55A:
+ ldr r0, [r0, #0x18]
+ mov r1, #2
+ bl FUN_02020130
+_021DB562:
+ pop {r3, pc}
+
+ thumb_func_start MOD15_021DB564
+MOD15_021DB564: ; 0x021DB564
+ push {r4, lr}
+ add r4, r0, #0
+ str r1, [r4]
+ str r2, [r4, #4]
+ cmp r3, #0
+ bne _021DB57E
+ add r0, r1, #0
+ add r1, r2, #0
+ bl FUN_02017B48
+ str r0, [r4, #0xc]
+ mov r0, #0
+ b _021DB58A
+_021DB57E:
+ add r0, r1, #0
+ add r1, r2, #0
+ bl FUN_02017B54
+ str r0, [r4, #0xc]
+ mov r0, #3
+_021DB58A:
+ str r0, [r4, #8]
+ ldr r0, [sp, #8]
+ ldr r1, [r4, #0xc]
+ add r2, r1, r0
+ ldr r1, _021DB5B4 ; =0x000001FF
+ lsl r0, r0, #0xc
+ and r1, r2
+ str r1, [r4, #0x10]
+ ldr r1, [r4, #0xc]
+ lsl r1, r1, #0xc
+ str r1, [r4, #0xc]
+ ldr r1, [sp, #0xc]
+ bl _s32_div_f
+ str r0, [r4, #0x14]
+ ldr r0, [sp, #0xc]
+ strh r0, [r4, #0x18]
+ mov r0, #0
+ strh r0, [r4, #0x1a]
+ pop {r4, pc}
+ nop
+_021DB5B4: .word 0x000001FF
+
+ thumb_func_start MOD15_021DB5B8
+MOD15_021DB5B8: ; 0x021DB5B8
+ push {r4, lr}
+ add r4, r0, #0
+ ldrh r0, [r4, #0x1a]
+ cmp r0, #0
+ beq _021DB5CC
+ cmp r0, #1
+ beq _021DB5E0
+ cmp r0, #2
+ beq _021DB5F6
+ b _021DB5FA
+_021DB5CC:
+ ldr r0, _021DB600 ; =MOD15_021DB604
+ add r1, r4, #0
+ mov r2, #0
+ bl MOD15_021D88D0
+ str r0, [r4, #0x1c]
+ ldrh r0, [r4, #0x1a]
+ add r0, r0, #1
+ strh r0, [r4, #0x1a]
+ b _021DB5FA
+_021DB5E0:
+ ldrh r0, [r4, #0x18]
+ cmp r0, #0
+ bne _021DB5FA
+ ldr r0, [r4, #0x1c]
+ bl FUN_0200CAB4
+ ldrh r0, [r4, #0x1a]
+ add r0, r0, #1
+ strh r0, [r4, #0x1a]
+ mov r0, #1
+ pop {r4, pc}
+_021DB5F6:
+ mov r0, #1
+ pop {r4, pc}
+_021DB5FA:
+ mov r0, #0
+ pop {r4, pc}
+ nop
+_021DB600: .word MOD15_021DB604
+
+ thumb_func_start MOD15_021DB604
+MOD15_021DB604: ; 0x021DB604
+ push {r4, lr}
+ add r4, r1, #0
+ ldrh r0, [r4, #0x18]
+ cmp r0, #0
+ beq _021DB632
+ ldr r1, [r4, #0xc]
+ ldr r0, [r4, #0x14]
+ add r3, r1, r0
+ str r3, [r4, #0xc]
+ ldr r1, [r4, #4]
+ ldr r2, [r4, #8]
+ lsl r1, r1, #0x18
+ lsl r2, r2, #0x18
+ ldr r0, [r4]
+ lsr r1, r1, #0x18
+ lsr r2, r2, #0x18
+ asr r3, r3, #0xc
+ bl FUN_020179E0
+ ldrh r0, [r4, #0x18]
+ sub r0, r0, #1
+ strh r0, [r4, #0x18]
+ pop {r4, pc}
+_021DB632:
+ ldr r1, [r4, #4]
+ ldr r2, [r4, #8]
+ lsl r1, r1, #0x18
+ lsl r2, r2, #0x18
+ ldr r0, [r4]
+ ldr r3, [r4, #0x10]
+ lsr r1, r1, #0x18
+ lsr r2, r2, #0x18
+ bl FUN_020179E0
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021DB648
+MOD15_021DB648: ; 0x021DB648
+ push {r4, lr}
+ add r4, r0, #0
+ str r1, [r4]
+ ldr r0, [sp, #8]
+ ldr r1, [sp, #0xc]
+ str r2, [r4, #4]
+ str r1, [r4, #0x14]
+ str r3, [r4, #8]
+ sub r0, r0, r3
+ bl _s32_div_f
+ str r0, [r4, #0x10]
+ ldr r0, [sp, #8]
+ mov r2, #0
+ str r0, [r4, #0xc]
+ ldr r0, _021DB674 ; =MOD15_021DB6A0
+ add r1, r4, #0
+ str r2, [r4, #0x18]
+ bl MOD15_021D88D0
+ str r0, [r4, #0x1c]
+ pop {r4, pc}
+ .align 2, 0
+_021DB674: .word MOD15_021DB6A0
+
+ thumb_func_start MOD15_021DB678
+MOD15_021DB678: ; 0x021DB678
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x18]
+ cmp r0, #0
+ bne _021DB698
+ ldr r0, [r4, #0x14]
+ cmp r0, #0
+ bne _021DB69C
+ ldr r0, [r4, #0x1c]
+ bl FUN_0200CAB4
+ ldr r0, [r4, #0x18]
+ add r0, r0, #1
+ str r0, [r4, #0x18]
+ mov r0, #1
+ pop {r4, pc}
+_021DB698:
+ mov r0, #1
+ pop {r4, pc}
+_021DB69C:
+ mov r0, #0
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021DB6A0
+MOD15_021DB6A0: ; 0x021DB6A0
+ push {r3, lr}
+ add r2, r1, #0
+ ldr r0, [r2, #0x14]
+ cmp r0, #0
+ beq _021DB6BC
+ ldr r1, [r2, #8]
+ ldr r0, [r2, #0x10]
+ add r0, r1, r0
+ str r0, [r2, #8]
+ asr r3, r0, #3
+ ldr r0, [r2, #0x14]
+ sub r0, r0, #1
+ str r0, [r2, #0x14]
+ b _021DB6C0
+_021DB6BC:
+ ldr r0, [r2, #0xc]
+ asr r3, r0, #3
+_021DB6C0:
+ cmp r3, #0x10
+ ble _021DB6C6
+ mov r3, #0x10
+_021DB6C6:
+ mov r0, #0x10
+ sub r0, r0, r3
+ str r0, [sp]
+ ldr r0, _021DB6D8 ; =0x04000050
+ ldmia r2!, {r1, r2}
+ bl G2x_SetBlendAlpha_
+ pop {r3, pc}
+ nop
+_021DB6D8: .word 0x04000050
+
+ thumb_func_start MOD15_021DB6DC
+MOD15_021DB6DC: ; 0x021DB6DC
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ ldr r0, _021DB714 ; =0x04000050
+ add r4, r1, #0
+ add r6, r2, #0
+ add r7, r3, #0
+ bl G2x_SetBlendBrightness_
+ ldr r1, [sp, #0x18]
+ str r4, [r5]
+ str r1, [r5, #0x14]
+ lsl r0, r6, #0xc
+ str r0, [r5, #8]
+ lsl r2, r7, #0xc
+ str r2, [r5, #0xc]
+ ldr r0, [r5, #8]
+ sub r0, r2, r0
+ bl _s32_div_f
+ str r0, [r5, #0x10]
+ mov r2, #0
+ ldr r0, _021DB718 ; =MOD15_021DB744
+ add r1, r5, #0
+ str r2, [r5, #0x18]
+ bl MOD15_021D88D0
+ str r0, [r5, #0x1c]
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_021DB714: .word 0x04000050
+_021DB718: .word MOD15_021DB744
+
+ thumb_func_start MOD15_021DB71C
+MOD15_021DB71C: ; 0x021DB71C
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x18]
+ cmp r0, #0
+ bne _021DB73C
+ ldr r0, [r4, #0x14]
+ cmp r0, #0
+ bne _021DB740
+ ldr r0, [r4, #0x1c]
+ bl FUN_0200CAB4
+ ldr r0, [r4, #0x18]
+ add r0, r0, #1
+ str r0, [r4, #0x18]
+ mov r0, #1
+ pop {r4, pc}
+_021DB73C:
+ mov r0, #1
+ pop {r4, pc}
+_021DB740:
+ mov r0, #0
+ pop {r4, pc}
+
+ thumb_func_start MOD15_021DB744
+MOD15_021DB744: ; 0x021DB744
+ ldr r0, [r1, #0x14]
+ cmp r0, #0
+ beq _021DB75C
+ ldr r2, [r1, #8]
+ ldr r0, [r1, #0x10]
+ add r0, r2, r0
+ str r0, [r1, #8]
+ asr r2, r0, #0xc
+ ldr r0, [r1, #0x14]
+ sub r0, r0, #1
+ str r0, [r1, #0x14]
+ b _021DB760
+_021DB75C:
+ ldr r0, [r1, #0xc]
+ asr r2, r0, #0xc
+_021DB760:
+ ldr r3, _021DB768 ; =0x020C74B8
+ ldr r0, _021DB76C ; =0x04000050
+ ldr r1, [r1]
+ bx r3
+ .align 2, 0
+_021DB768: .word 0x020C74B8
+_021DB76C: .word 0x04000050
+
+ thumb_func_start MOD15_021DB770
+MOD15_021DB770: ; 0x021DB770
+ mov r0, #0x1b
+ bx lr
+
+ thumb_func_start MOD15_021DB774
+MOD15_021DB774: ; 0x021DB774
+ push {r3, r4, r5, lr}
+ add r4, r0, #0
+ add r5, r1, #0
+ cmp r4, #0x1b
+ blo _021DB782
+ bl ErrorHandling
+_021DB782:
+ mov r1, #0xa
+ ldr r2, _021DB794 ; =0x021DBA4C
+ mul r1, r4
+ add r1, r2, r1
+ add r0, r5, #0
+ mov r2, #2
+ bl FUN_02021E8C
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021DB794: .word 0x021DBA4C
+
+ thumb_func_start MOD15_021DB798
+MOD15_021DB798: ; 0x021DB798
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ add r6, r2, #0
+ cmp r5, #0x1b
+ blo _021DB7A8
+ bl ErrorHandling
+_021DB7A8:
+ mov r0, #0xa
+ add r1, r5, #0
+ mul r1, r0
+ ldr r0, _021DB7BC ; =0x021DBA4E
+ ldrb r0, [r0, r1]
+ str r0, [r4]
+ ldr r0, _021DB7C0 ; =0x021DBA4F
+ ldrb r0, [r0, r1]
+ str r0, [r6]
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_021DB7BC: .word 0x021DBA4E
+_021DB7C0: .word 0x021DBA4F
+
+ thumb_func_start MOD15_021DB7C4
+MOD15_021DB7C4: ; 0x021DB7C4
+ push {r4, lr}
+ add r4, r0, #0
+ cmp r4, #0x1b
+ blo _021DB7D0
+ bl ErrorHandling
+_021DB7D0:
+ mov r0, #0xa
+ add r1, r4, #0
+ mul r1, r0
+ ldr r0, _021DB7DC ; =0x021DBA50
+ ldrb r0, [r0, r1]
+ pop {r4, pc}
+ .align 2, 0
+_021DB7DC: .word 0x021DBA50
+
+ thumb_func_start MOD15_021DB7E0
+MOD15_021DB7E0: ; 0x021DB7E0
+ push {r4, lr}
+ add r4, r0, #0
+ cmp r4, #0x1b
+ blo _021DB7EC
+ bl ErrorHandling
+_021DB7EC:
+ mov r0, #0xa
+ add r1, r4, #0
+ mul r1, r0
+ ldr r0, _021DB7F8 ; =0x021DBA51
+ ldrb r0, [r0, r1]
+ pop {r4, pc}
+ .align 2, 0
+_021DB7F8: .word 0x021DBA51
+
+ thumb_func_start MOD15_021DB7FC
+MOD15_021DB7FC: ; 0x021DB7FC
+ push {r4, lr}
+ add r4, r0, #0
+ cmp r4, #0x1b
+ blo _021DB808
+ bl ErrorHandling
+_021DB808:
+ mov r0, #0xa
+ add r1, r4, #0
+ mul r1, r0
+ ldr r0, _021DB814 ; =0x021DBA52
+ ldrb r0, [r0, r1]
+ pop {r4, pc}
+ .align 2, 0
+_021DB814: .word 0x021DBA52
+
+ thumb_func_start MOD15_021DB818
+MOD15_021DB818: ; 0x021DB818
+ push {r4, lr}
+ add r4, r0, #0
+ cmp r4, #0x1b
+ blo _021DB824
+ bl ErrorHandling
+_021DB824:
+ mov r0, #0xa
+ add r1, r4, #0
+ mul r1, r0
+ ldr r0, _021DB830 ; =0x021DBA53
+ ldrb r0, [r0, r1]
+ pop {r4, pc}
+ .align 2, 0
+_021DB830: .word 0x021DBA53
+
+ thumb_func_start MOD15_021DB834
+MOD15_021DB834: ; 0x021DB834
+ push {r4, lr}
+ add r4, r0, #0
+ cmp r4, #0x1b
+ blo _021DB840
+ bl ErrorHandling
+_021DB840:
+ mov r0, #0xa
+ add r1, r4, #0
+ mul r1, r0
+ ldr r0, _021DB84C ; =0x021DBA54
+ ldrb r0, [r0, r1]
+ pop {r4, pc}
+ .align 2, 0
+_021DB84C: .word 0x021DBA54
+
+ thumb_func_start MOD15_021DB850
+MOD15_021DB850: ; 0x021DB850
+ push {r4, lr}
+ add r4, r0, #0
+ cmp r4, #0x1b
+ blo _021DB85C
+ bl ErrorHandling
+_021DB85C:
+ mov r0, #0xa
+ add r1, r4, #0
+ mul r1, r0
+ ldr r0, _021DB868 ; =0x021DBA55
+ ldrb r0, [r0, r1]
+ pop {r4, pc}
+ .align 2, 0
+_021DB868: .word 0x021DBA55
+
+ .section .data
+ ; 0x021DB86C
+ .incbin "baserom.nds", 0x23B78C, 0x2F4
|