summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-05-12 10:15:49 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-05-12 10:15:49 -0400
commit06d9754567cb6e7028e4dbc35da903edf9f83b9a (patch)
tree7fcb8cef7364b55d93b20d3302553664afb0fcec
parentbb1e6c1518570ef67c85343405ad27485b5a9692 (diff)
Disassemble module 51
-rw-r--r--arm9/arm9.lcf28
-rw-r--r--arm9/global.inc4
-rw-r--r--arm9/modules/51/asm/module_51.s1911
3 files changed, 1939 insertions, 4 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 2755047d..1cf77560 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -2014,10 +2014,21 @@ SECTIONS {
SDK_OVERLAY.MODULE_50.BSS_SIZE = SDK_OVERLAY.MODULE_50.BSS_END - SDK_OVERLAY.MODULE_50.BSS_START;
} >> MODULE_50
- .MODULE.51: {
+ .MODULE.51 :
+ {
ALIGNALL(4); . = ALIGN(32);
SDK_OVERLAY.MODULE_51.START = .;
- FILE_298A00.o (.text) /* 0x294A00 */
+ module_51.o (.text)
+ module_51.o (.rodata)
+ module_51.o (.init)
+ SDK_OVERLAY.MODULE_51.SINIT_START = .;
+ module_51.o (.ctor)
+ module_51.o (.sinit)
+ WRITEW 0;
+ SDK_OVERLAY.MODULE_51.SINIT_END = .;
+ . = ALIGN(32);
+ module_51.o (.sdata)
+ module_51.o (.data)
. = ALIGN(32);
SDK_OVERLAY.MODULE_51.END = .;
SDK_OVERLAY.MODULE_51.SIZE = SDK_OVERLAY.MODULE_51.END - SDK_OVERLAY.MODULE_51.START;
@@ -2027,7 +2038,8 @@ SECTIONS {
{
ALIGNALL(4); . = ALIGN(32);
SDK_OVERLAY.MODULE_51.BSS_START = .;
- FILE_298A00.o (.bss)
+ module_51.o (.sbss)
+ module_51.o (.bss)
. = ALIGN(32);
SDK_OVERLAY.MODULE_51.BSS_END = .;
SDK_OVERLAY.MODULE_51.BSS_SIZE = SDK_OVERLAY.MODULE_51.BSS_END - SDK_OVERLAY.MODULE_51.BSS_START;
@@ -3280,7 +3292,15 @@ SECTIONS {
WRITEW SDK_OVERLAY_MODULE_50_ID;
WRITEW 0;
- OVERLAY_TABLE(MODULE_51, 51)
+ WRITEW SDK_OVERLAY_MODULE_51_ID;
+ WRITEW SDK_OVERLAY.MODULE_51.START;
+ WRITEW SDK_OVERLAY.MODULE_51.SIZE;
+ WRITEW SDK_OVERLAY.MODULE_51.BSS_SIZE;
+ WRITEW SDK_OVERLAY.MODULE_51.SINIT_START;
+ WRITEW SDK_OVERLAY.MODULE_51.SINIT_END;
+ WRITEW SDK_OVERLAY_MODULE_51_ID;
+ WRITEW 0;
+
OVERLAY_TABLE(MODULE_52, 52)
OVERLAY_TABLE(MODULE_53, 53)
OVERLAY_TABLE(MODULE_54, 54)
diff --git a/arm9/global.inc b/arm9/global.inc
index 6f76948a..909ea0f7 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -5567,6 +5567,10 @@
.extern FUN_02083298
.extern FUN_02083A34
.extern FUN_02083A7C
+.extern FUN_020254F0
+.extern FUN_020254F8
+.extern FUN_0202EF70
+.extern FUN_02052CF0
.extern SDK_OVERLAY_MODULE_00_ID
.extern SDK_OVERLAY_MODULE_01_ID
.extern SDK_OVERLAY_MODULE_02_ID
diff --git a/arm9/modules/51/asm/module_51.s b/arm9/modules/51/asm/module_51.s
new file mode 100644
index 00000000..94a4dd93
--- /dev/null
+++ b/arm9/modules/51/asm/module_51.s
@@ -0,0 +1,1911 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD51_02254840
+MOD51_02254840: ; 0x02254840
+ push {r4, lr}
+ add r4, r1, #0
+ ldr r1, [r4, #0xc]
+ ldr r0, [r4, #0x14]
+ ldr r1, [r1, #0x7c]
+ cmp r1, #0
+ beq _022548EE
+ ldr r1, [r4]
+ cmp r1, #3
+ bhi _022548EE
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_02254860: ; jump table
+ .short _02254868 - _02254860 - 2 ; case 0
+ .short _0225487A - _02254860 - 2 ; case 1
+ .short _022548D0 - _02254860 - 2 ; case 2
+ .short _022548EE - _02254860 - 2 ; case 3
+_02254868:
+ bl MOD51_02254B54
+ add r0, r4, #0
+ bl MOD51_022548F0
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ pop {r4, pc}
+_0225487A:
+ add r0, r4, #0
+ bl MOD51_02254C80
+ add r0, r4, #0
+ bl MOD51_02254D50
+ mov r0, #1
+ mov r1, #4
+ bl FUN_02002C84
+ mov r1, #0x72
+ lsl r1, r1, #2
+ ldr r0, [r4, #0x14]
+ add r1, r4, r1
+ bl MOD51_02254944
+ mov r0, #0x10
+ mov r1, #1
+ bl FUN_0201E74C
+ mov r0, #1
+ add r1, r0, #0
+ bl FUN_0201E74C
+ mov r0, #2
+ mov r1, #1
+ bl FUN_0201E74C
+ mov r0, #4
+ mov r1, #1
+ bl FUN_0201E74C
+ mov r0, #8
+ mov r1, #1
+ bl FUN_0201E74C
+ add r0, r4, #0
+ bl MOD51_0225571C
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ pop {r4, pc}
+_022548D0:
+ add r0, r4, #0
+ bl MOD51_02255690
+ add r0, r4, #0
+ bl MOD51_02255030
+ add r0, r4, #0
+ bl MOD51_022552FC
+ add r0, r4, #0
+ bl MOD51_02254F30
+ ldr r0, [r4, #0x28]
+ bl FUN_0201FDEC
+_022548EE:
+ pop {r4, pc}
+ thumb_func_end MOD51_02254840
+
+ thumb_func_start MOD51_022548F0
+MOD51_022548F0: ; 0x022548F0
+ push {r3, r4, lr}
+ sub sp, #4
+ mov r1, #0xa1
+ lsl r1, r1, #2
+ add r4, r0, #0
+ mov r2, #0
+ add r0, r1, #0
+ str r2, [r4, r1]
+ sub r0, #0x10
+ strh r2, [r4, r0]
+ add r0, r1, #0
+ sub r0, #0xe
+ strh r2, [r4, r0]
+ add r0, r1, #0
+ sub r0, #0xc
+ strh r2, [r4, r0]
+ sub r1, #0xa
+ mov r0, #4
+ strh r2, [r4, r1]
+ bl FUN_0200AA80
+ mov r2, #9
+ str r0, [r4, #0x18]
+ mov r0, #0
+ mov r1, #0x1a
+ lsl r2, r2, #6
+ mov r3, #4
+ bl FUN_0200A86C
+ str r0, [r4, #0x1c]
+ mov r0, #4
+ add r3, r4, #0
+ str r0, [sp]
+ mov r0, #0x4a
+ mov r1, #3
+ mov r2, #1
+ add r3, #0x24
+ bl FUN_02006BDC
+ str r0, [r4, #0x20]
+ add sp, #4
+ pop {r3, r4, pc}
+ thumb_func_end MOD51_022548F0
+
+ thumb_func_start MOD51_02254944
+MOD51_02254944: ; 0x02254944
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x24
+ add r7, r0, #0
+ mov r0, #0xa0
+ str r0, [sp, #0x20]
+ mov r0, #0xd0
+ str r0, [sp, #0x1c]
+ mov r0, #3
+ str r0, [sp, #0x18]
+ ldr r0, _02254A3C ; =0x00000265
+ add r5, r1, #0
+ mov r4, #0
+ mov r6, #1
+ str r0, [sp, #0x14]
+_02254960:
+ lsl r0, r6, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r0, #8
+ str r0, [sp, #4]
+ mov r0, #2
+ str r0, [sp, #8]
+ mov r0, #0xc
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x20]
+ add r2, r4, #4
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ lsl r2, r2, #0x18
+ str r0, [sp, #0x10]
+ add r0, r7, #0
+ add r1, r5, #0
+ lsr r2, r2, #0x18
+ mov r3, #1
+ bl FUN_02019064
+ add r0, r5, #0
+ mov r1, #0
+ bl FUN_02019620
+ add r0, r5, #0
+ bl FUN_020191D0
+ ldr r0, [sp, #0x18]
+ add r2, r4, #4
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r0, #0x1b
+ str r0, [sp, #4]
+ mov r0, #5
+ str r0, [sp, #8]
+ mov r0, #0xc
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x1c]
+ add r1, r5, #0
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ lsl r2, r2, #0x18
+ str r0, [sp, #0x10]
+ add r0, r7, #0
+ add r1, #0x10
+ lsr r2, r2, #0x18
+ mov r3, #2
+ bl FUN_02019064
+ add r0, r5, #0
+ add r0, #0x10
+ mov r1, #0
+ bl FUN_02019620
+ add r0, r5, #0
+ add r0, #0x10
+ bl FUN_020191D0
+ lsl r0, r6, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r0, #0xf
+ str r0, [sp, #4]
+ mov r0, #2
+ str r0, [sp, #8]
+ mov r0, #0xc
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x14]
+ add r2, r4, #4
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ add r1, r5, #0
+ lsl r2, r2, #0x18
+ str r0, [sp, #0x10]
+ add r0, r7, #0
+ add r1, #0x20
+ lsr r2, r2, #0x18
+ mov r3, #0xc
+ bl FUN_02019064
+ add r0, r5, #0
+ add r0, #0x20
+ mov r1, #0
+ bl FUN_02019620
+ add r0, r5, #0
+ add r0, #0x20
+ bl FUN_020191D0
+ ldr r0, [sp, #0x20]
+ add r4, r4, #1
+ add r0, #0x10
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0x1c]
+ add r6, #8
+ add r0, #0x87
+ str r0, [sp, #0x1c]
+ ldr r0, [sp, #0x18]
+ add r5, #0x38
+ add r0, #8
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x14]
+ add r0, #0x1e
+ str r0, [sp, #0x14]
+ cmp r4, #3
+ blt _02254960
+ add sp, #0x24
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02254A3C: .word 0x00000265
+ thumb_func_end MOD51_02254944
+
+ thumb_func_start MOD51_02254A40
+MOD51_02254A40: ; 0x02254A40
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ mov r4, #0
+_02254A46:
+ add r0, r5, #0
+ add r0, #0x10
+ bl FUN_02019178
+ add r0, r5, #0
+ bl FUN_02019178
+ add r0, r5, #0
+ add r0, #0x20
+ bl FUN_02019178
+ add r4, r4, #1
+ add r5, #0x38
+ cmp r4, #3
+ blt _02254A46
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD51_02254A40
+
+ thumb_func_start MOD51_02254A68
+MOD51_02254A68: ; 0x02254A68
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ mov r1, #0xa3
+ mov r2, #4
+ ldr r0, _02254AB0 ; =MOD51_02254840
+ lsl r1, r1, #2
+ add r3, r2, #0
+ bl FUN_020061E8
+ add r6, r0, #0
+ bl FUN_0201B6C8
+ add r4, r0, #0
+ str r5, [r4, #0xc]
+ ldr r0, [r5, #8]
+ str r0, [r4, #0x14]
+ ldr r0, [r5, #0x7c]
+ str r0, [r4, #4]
+ ldr r0, [r5, #0x78]
+ str r0, [r4, #8]
+ ldr r0, [r5, #0xc]
+ bl FUN_020238F4
+ str r0, [r4, #0x10]
+ mov r0, #0
+ mov r1, #0xa2
+ str r0, [r4]
+ lsl r1, r1, #2
+ str r6, [r4, r1]
+ ldr r2, [r5, #0x7c]
+ ldr r0, _02254AB4 ; =0x000004DC
+ sub r1, #0x18
+ ldr r0, [r2, r0]
+ str r0, [r4, r1]
+ add r0, r4, #0
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_02254AB0: .word MOD51_02254840
+_02254AB4: .word 0x000004DC
+ thumb_func_end MOD51_02254A68
+
+ thumb_func_start MOD51_02254AB8
+MOD51_02254AB8: ; 0x02254AB8
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ ldr r0, [r6]
+ cmp r0, #2
+ bne _02254B2C
+ ldr r0, [r6, #0x14]
+ str r0, [sp]
+ mov r0, #3
+ str r0, [r6]
+ mov r0, #1
+ bl FUN_02002CC0
+ mov r0, #0x59
+ lsl r0, r0, #2
+ ldr r0, [r6, r0]
+ bl FUN_02009C0C
+ mov r0, #0x5a
+ lsl r0, r0, #2
+ ldr r0, [r6, r0]
+ bl FUN_02009E04
+ mov r7, #0x55
+ mov r4, #0
+ add r5, r6, #0
+ lsl r7, r7, #2
+_02254AEC:
+ ldr r0, [r5, r7]
+ bl FUN_02008E2C
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #4
+ blt _02254AEC
+ ldr r0, [r6, #0x28]
+ bl FUN_0201FD58
+ ldr r0, [r6, #0x1c]
+ bl FUN_0200A8B8
+ ldr r0, [r6, #0x18]
+ bl FUN_0200AB18
+ mov r0, #0x72
+ lsl r0, r0, #2
+ add r0, r6, r0
+ bl MOD51_02254A40
+ ldr r0, [sp]
+ bl MOD51_02254B30
+ ldr r0, [r6, #0x20]
+ bl FUN_02016A18
+ mov r0, #0xa2
+ lsl r0, r0, #2
+ ldr r0, [r6, r0]
+ bl FUN_0200621C
+_02254B2C:
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD51_02254AB8
+
+ thumb_func_start MOD51_02254B30
+MOD51_02254B30: ; 0x02254B30
+ push {r4, lr}
+ add r4, r0, #0
+ mov r1, #4
+ bl FUN_020178A0
+ add r0, r4, #0
+ mov r1, #5
+ bl FUN_020178A0
+ add r0, r4, #0
+ mov r1, #6
+ bl FUN_020178A0
+ add r0, r4, #0
+ mov r1, #7
+ bl FUN_020178A0
+ pop {r4, pc}
+ thumb_func_end MOD51_02254B30
+
+ thumb_func_start MOD51_02254B54
+MOD51_02254B54: ; 0x02254B54
+ push {r3, r4, r5, lr}
+ sub sp, #0x80
+ add r4, r0, #0
+ bl MOD51_02254B30
+ ldr r5, _02254C70 ; =0x022557A8
+ add r3, sp, #0x64
+ ldmia r5!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r5]
+ mov r1, #4
+ str r0, [r3]
+ add r0, r4, #0
+ mov r3, #0
+ bl FUN_02016C18
+ add r0, r4, #0
+ mov r1, #4
+ bl FUN_02018744
+ mov r0, #1
+ mov r1, #0
+ bl FUN_0201E74C
+ ldr r5, _02254C74 ; =0x0225578C
+ add r3, sp, #0x48
+ ldmia r5!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r5]
+ mov r1, #5
+ str r0, [r3]
+ add r0, r4, #0
+ mov r3, #0
+ bl FUN_02016C18
+ add r0, r4, #0
+ mov r1, #5
+ bl FUN_02018744
+ mov r0, #2
+ mov r1, #0
+ bl FUN_0201E74C
+ ldr r5, _02254C78 ; =0x022557C4
+ add r3, sp, #0x2c
+ ldmia r5!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r5]
+ mov r1, #6
+ str r0, [r3]
+ add r0, r4, #0
+ mov r3, #0
+ bl FUN_02016C18
+ add r0, r4, #0
+ mov r1, #6
+ bl FUN_02018744
+ mov r0, #4
+ mov r1, #0
+ bl FUN_0201E74C
+ ldr r5, _02254C7C ; =0x02255754
+ add r3, sp, #0x10
+ ldmia r5!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r5]
+ mov r1, #7
+ str r0, [r3]
+ add r0, r4, #0
+ mov r3, #0
+ bl FUN_02016C18
+ mov r0, #8
+ mov r1, #0
+ bl FUN_0201E74C
+ mov r0, #0x60
+ mov r1, #0
+ str r0, [sp]
+ mov r2, #4
+ mov r0, #0x4a
+ add r3, r1, #0
+ str r2, [sp, #4]
+ bl FUN_02006930
+ mov r0, #0
+ str r0, [sp]
+ mov r0, #5
+ lsl r0, r0, #0xa
+ str r0, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #4
+ str r0, [sp, #0xc]
+ mov r0, #0x4a
+ mov r1, #2
+ add r2, r4, #0
+ mov r3, #7
+ bl FUN_0200687C
+ mov r0, #0
+ str r0, [sp]
+ mov r0, #6
+ lsl r0, r0, #8
+ str r0, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r1, #4
+ mov r0, #0x4a
+ add r2, r4, #0
+ mov r3, #7
+ str r1, [sp, #0xc]
+ bl FUN_020068C8
+ mov r0, #4
+ mov r1, #0
+ bl FUN_02054590
+ add sp, #0x80
+ pop {r3, r4, r5, pc}
+ nop
+_02254C70: .word 0x022557A8
+_02254C74: .word 0x0225578C
+_02254C78: .word 0x022557C4
+_02254C7C: .word 0x02255754
+ thumb_func_end MOD51_02254B54
+
+ thumb_func_start MOD51_02254C80
+MOD51_02254C80: ; 0x02254C80
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ add r6, r0, #0
+ add r1, r6, #0
+ mov r0, #0xa
+ add r1, #0x2c
+ mov r2, #4
+ bl FUN_02008C9C
+ mov r7, #0x55
+ str r0, [r6, #0x28]
+ mov r4, #0
+ add r5, r6, #0
+ lsl r7, r7, #2
+_02254C9C:
+ mov r0, #1
+ add r1, r4, #0
+ mov r2, #4
+ bl FUN_02008DEC
+ str r0, [r5, r7]
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #4
+ blt _02254C9C
+ ldr r0, _02254D4C ; =0x000003E7
+ mov r1, #0x4a
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ mov r0, #4
+ str r0, [sp, #8]
+ mov r0, #0x55
+ lsl r0, r0, #2
+ ldr r0, [r6, r0]
+ mov r2, #5
+ mov r3, #1
+ bl FUN_02008F34
+ mov r1, #0x59
+ lsl r1, r1, #2
+ str r0, [r6, r1]
+ ldr r0, _02254D4C ; =0x000003E7
+ mov r2, #1
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ str r2, [sp, #8]
+ mov r0, #4
+ sub r1, #0xc
+ str r0, [sp, #0xc]
+ ldr r0, [r6, r1]
+ mov r1, #0x4a
+ mov r3, #0
+ bl FUN_02008FEC
+ mov r1, #0x5a
+ lsl r1, r1, #2
+ str r0, [r6, r1]
+ ldr r0, _02254D4C ; =0x000003E7
+ sub r1, #0xc
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ mov r0, #4
+ str r0, [sp, #8]
+ ldr r0, [r6, r1]
+ mov r1, #0x4a
+ mov r2, #6
+ mov r3, #1
+ bl FUN_020090AC
+ mov r1, #0x5b
+ lsl r1, r1, #2
+ str r0, [r6, r1]
+ ldr r0, _02254D4C ; =0x000003E7
+ sub r1, #0xc
+ str r0, [sp]
+ mov r0, #3
+ str r0, [sp, #4]
+ mov r0, #4
+ str r0, [sp, #8]
+ ldr r0, [r6, r1]
+ mov r1, #0x4a
+ mov r2, #7
+ mov r3, #1
+ bl FUN_020090AC
+ mov r1, #0x17
+ lsl r1, r1, #4
+ str r0, [r6, r1]
+ sub r1, #0xc
+ ldr r0, [r6, r1]
+ bl FUN_02009B04
+ mov r0, #0x5a
+ lsl r0, r0, #2
+ ldr r0, [r6, r0]
+ bl FUN_02009D68
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02254D4C: .word 0x000003E7
+ thumb_func_end MOD51_02254C80
+
+ thumb_func_start MOD51_02254D50
+MOD51_02254D50: ; 0x02254D50
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x5c
+ ldr r1, _02254E28 ; =0x000003E7
+ add r5, r0, #0
+ mov r0, #0
+ str r1, [sp]
+ mvn r0, r0
+ str r0, [sp, #4]
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ mov r3, #0x55
+ str r0, [sp, #0x10]
+ lsl r3, r3, #2
+ ldr r2, [r5, r3]
+ str r2, [sp, #0x14]
+ add r2, r3, #4
+ ldr r2, [r5, r2]
+ str r2, [sp, #0x18]
+ add r2, r3, #0
+ add r2, #8
+ ldr r2, [r5, r2]
+ str r2, [sp, #0x1c]
+ add r2, r3, #0
+ add r2, #0xc
+ ldr r2, [r5, r2]
+ add r3, #0x20
+ str r2, [sp, #0x20]
+ str r0, [sp, #0x24]
+ str r0, [sp, #0x28]
+ add r0, r5, r3
+ add r2, r1, #0
+ add r3, r1, #0
+ bl FUN_02008AA4
+ ldr r0, [r5, #0x28]
+ mov r4, #0
+ str r0, [sp, #0x2c]
+ mov r0, #0x5d
+ lsl r0, r0, #2
+ add r0, r5, r0
+ str r0, [sp, #0x30]
+ mov r0, #1
+ lsl r0, r0, #0xc
+ mov r7, #0x3f
+ str r4, [sp, #0x3c]
+ str r0, [sp, #0x40]
+ str r0, [sp, #0x44]
+ str r0, [sp, #0x48]
+ add r0, sp, #0x2c
+ strh r4, [r0, #0x20]
+ mov r0, #2
+ str r0, [sp, #0x54]
+ mov r0, #4
+ ldr r6, _02254E2C ; =0x02255734
+ str r4, [sp, #0x50]
+ str r0, [sp, #0x58]
+ lsl r7, r7, #0x18
+_02254DC4:
+ mov r0, #0x3a
+ lsl r0, r0, #0xe
+ str r0, [sp, #0x34]
+ ldr r0, [r6]
+ cmp r0, #0
+ ble _02254DE0
+ lsl r0, r0, #0xc
+ bl _fflt
+ add r1, r0, #0
+ add r0, r7, #0
+ bl _fadd
+ b _02254DEC
+_02254DE0:
+ lsl r0, r0, #0xc
+ bl _fflt
+ add r1, r7, #0
+ bl _fsub
+_02254DEC:
+ bl _ffix
+ mov r1, #3
+ lsl r1, r1, #0x12
+ add r0, r0, r1
+ str r0, [sp, #0x38]
+ add r0, sp, #0x2c
+ bl FUN_0201FE94
+ mov r1, #0x66
+ lsl r1, r1, #2
+ str r0, [r5, r1]
+ add r0, r1, #0
+ ldr r0, [r5, r0]
+ mov r1, #1
+ bl FUN_020200BC
+ mov r0, #0x66
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ add r1, r4, #0
+ bl FUN_02020130
+ add r4, r4, #1
+ add r6, r6, #4
+ add r5, r5, #4
+ cmp r4, #3
+ blt _02254DC4
+ add sp, #0x5c
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02254E28: .word 0x000003E7
+_02254E2C: .word 0x02255734
+ thumb_func_end MOD51_02254D50
+
+ thumb_func_start MOD51_02254E30
+MOD51_02254E30: ; 0x02254E30
+ add r1, r1, #1
+ cmp r1, #0x1e
+ bne _02254E38
+ mov r1, #0
+_02254E38:
+ add r0, r1, #0
+ bx lr
+ thumb_func_end MOD51_02254E30
+
+ thumb_func_start MOD51_02254E3C
+MOD51_02254E3C: ; 0x02254E3C
+ add r0, r0, r1
+ cmp r0, #0x1e
+ blt _02254E44
+ sub r0, #0x1e
+_02254E44:
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD51_02254E3C
+
+ thumb_func_start MOD51_02254E48
+MOD51_02254E48: ; 0x02254E48
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x20
+ add r3, r1, #0
+ add r5, r0, #0
+ add r4, r3, #0
+ mov r0, #0x38
+ mul r4, r0
+ mov r0, #0x7e
+ add r6, r2, #0
+ lsl r0, r0, #2
+ add r1, r5, r0
+ ldr r0, [r6, #0x10]
+ mov r2, #8
+ str r0, [r1, r4]
+ mov r0, #0x20
+ str r0, [sp]
+ str r2, [sp, #4]
+ ldr r2, [r5, #0x24]
+ mov r7, #0
+ add r2, #0xc
+ str r2, [sp, #8]
+ str r7, [sp, #0xc]
+ ldr r2, [r1, r4]
+ mov r1, #0x18
+ mul r1, r2
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ str r1, [sp, #0x10]
+ str r0, [sp, #0x14]
+ mov r0, #0x30
+ str r0, [sp, #0x18]
+ lsl r3, r3, #0x1b
+ ldr r0, [r5, #0x14]
+ mov r1, #7
+ add r2, r7, #0
+ lsr r3, r3, #0x18
+ bl FUN_02018170
+ mov r0, #0x72
+ lsl r0, r0, #2
+ add r7, r5, r0
+ add r0, r7, r4
+ mov r1, #0
+ bl FUN_02019620
+ mov r0, #0x76
+ lsl r0, r0, #2
+ add r0, r5, r0
+ str r0, [sp, #0x1c]
+ add r0, r0, r4
+ mov r1, #0
+ bl FUN_02019620
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ add r5, r5, r0
+ add r0, r5, r4
+ mov r1, #0
+ bl FUN_02019620
+ mov r0, #2
+ str r0, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _02254F2C ; =0x00010200
+ mov r3, #0
+ str r0, [sp, #8]
+ str r3, [sp, #0xc]
+ ldr r2, [r6]
+ add r0, r7, r4
+ mov r1, #1
+ bl FUN_0201BDE0
+ mov r0, #6
+ str r0, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _02254F2C ; =0x00010200
+ mov r3, #0
+ str r0, [sp, #8]
+ str r3, [sp, #0xc]
+ ldr r0, [sp, #0x1c]
+ ldr r2, [r6, #4]
+ add r0, r0, r4
+ mov r1, #1
+ bl FUN_0201BDE0
+ add r0, r7, r4
+ bl FUN_02019220
+ ldr r0, [sp, #0x1c]
+ add r0, r0, r4
+ bl FUN_02019220
+ ldr r2, [r6, #8]
+ cmp r2, #0
+ beq _02254F22
+ mov r0, #2
+ str r0, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, _02254F2C ; =0x00010200
+ mov r3, #0
+ str r0, [sp, #8]
+ add r0, r5, r4
+ mov r1, #1
+ str r3, [sp, #0xc]
+ bl FUN_0201BDE0
+_02254F22:
+ add r0, r5, r4
+ bl FUN_02019220
+ add sp, #0x20
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02254F2C: .word 0x00010200
+ thumb_func_end MOD51_02254E48
+
+ thumb_func_start MOD51_02254F30
+MOD51_02254F30: ; 0x02254F30
+ push {r3, r4, r5, r6, r7, lr}
+ mov r1, #0x27
+ add r5, r0, #0
+ lsl r1, r1, #4
+ add r0, r1, #0
+ ldr r2, [r5, r1]
+ add r1, #8
+ add r0, #0xdc
+ ldrh r1, [r5, r1]
+ ldr r0, [r2, r0]
+ bl MOD51_02254E3C
+ add r6, r0, #0
+ mov r0, #0x27
+ lsl r0, r0, #4
+ ldr r1, [r5, r0]
+ add r0, #0xd8
+ ldr r7, [r1, r0]
+ cmp r7, #3
+ ble _02254F5A
+ mov r7, #3
+_02254F5A:
+ mov r0, #0x9e
+ lsl r0, r0, #2
+ ldrh r1, [r5, r0]
+ add r0, r0, #4
+ ldr r0, [r5, r0]
+ cmp r1, r0
+ beq _02254F78
+ add r0, r5, #0
+ bl MOD51_0225571C
+ mov r0, #0x9e
+ lsl r0, r0, #2
+ ldrh r1, [r5, r0]
+ add r0, r0, #4
+ str r1, [r5, r0]
+_02254F78:
+ mov r0, #0xa1
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ cmp r0, #1
+ bne _02254FE2
+ mov r4, #0
+ cmp r7, #0
+ ble _02254FB0
+_02254F88:
+ mov r2, #0x27
+ lsl r2, r2, #4
+ mov r3, #0x1c
+ ldr r2, [r5, r2]
+ mul r3, r6
+ add r0, r5, #0
+ add r1, r4, #0
+ add r2, r2, r3
+ bl MOD51_02254E48
+ mov r0, #0x27
+ lsl r0, r0, #4
+ ldr r0, [r5, r0]
+ add r1, r6, #0
+ bl MOD51_02254E30
+ add r4, r4, #1
+ add r6, r0, #0
+ cmp r4, r7
+ blt _02254F88
+_02254FB0:
+ ldr r0, [r5, #0x14]
+ mov r1, #7
+ bl FUN_0201886C
+ mov r1, #6
+ lsl r1, r1, #8
+ bl DC_FlushRange
+ ldr r0, [r5, #0x14]
+ mov r1, #7
+ bl FUN_0201886C
+ add r2, r0, #0
+ mov r0, #0
+ str r0, [sp]
+ mov r3, #6
+ ldr r0, [r5, #0x14]
+ mov r1, #7
+ lsl r3, r3, #8
+ bl FUN_02017CE8
+ mov r0, #0xa1
+ mov r1, #0
+ lsl r0, r0, #2
+ str r1, [r5, r0]
+_02254FE2:
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD51_02254F30
+
+ thumb_func_start MOD51_02254FE4
+MOD51_02254FE4: ; 0x02254FE4
+ push {r3, r4, lr}
+ sub sp, #0xc
+ add r4, r0, #0
+ mov r0, #0x3a
+ lsl r0, r0, #0xe
+ str r0, [sp]
+ cmp r1, #0
+ ble _02255006
+ lsl r0, r1, #0xc
+ bl _fflt
+ add r1, r0, #0
+ mov r0, #0x3f
+ lsl r0, r0, #0x18
+ bl _fadd
+ b _02255014
+_02255006:
+ lsl r0, r1, #0xc
+ bl _fflt
+ mov r1, #0x3f
+ lsl r1, r1, #0x18
+ bl _fsub
+_02255014:
+ bl _ffix
+ mov r1, #3
+ lsl r1, r1, #0x12
+ add r0, r0, r1
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ add r0, r4, #0
+ add r1, sp, #0
+ bl FUN_02020044
+ add sp, #0xc
+ pop {r3, r4, pc}
+ thumb_func_end MOD51_02254FE4
+
+ thumb_func_start MOD51_02255030
+MOD51_02255030: ; 0x02255030
+ push {r4, lr}
+ mov r1, #0x27
+ add r4, r0, #0
+ lsl r1, r1, #4
+ add r0, r1, #0
+ ldr r2, [r4, r1]
+ add r0, #0xd8
+ ldr r2, [r2, r0]
+ add r0, r1, #4
+ strh r2, [r4, r0]
+ ldrh r0, [r4, r0]
+ cmp r0, #3
+ bls _02255060
+ add r0, r1, #6
+ ldrh r0, [r4, r0]
+ cmp r0, #3
+ bhi _02255060
+ add r0, r1, #0
+ mov r2, #1
+ add r0, #0xa
+ strh r2, [r4, r0]
+ mov r0, #0
+ add r1, #8
+ strh r0, [r4, r1]
+_02255060:
+ mov r1, #0x1a
+ lsl r1, r1, #4
+ ldr r0, [r4, r1]
+ add r1, #0xda
+ ldrh r1, [r4, r1]
+ bl FUN_020200A0
+ ldr r0, _022550AC ; =0x0000027A
+ ldrh r0, [r4, r0]
+ cmp r0, #0
+ beq _022550A0
+ bl FUN_02020A98
+ cmp r0, #0
+ bne _022550A0
+ mov r1, #0x9e
+ lsl r1, r1, #2
+ ldrh r2, [r4, r1]
+ sub r1, r1, #4
+ ldrh r1, [r4, r1]
+ mov r0, #0x60
+ mul r0, r2
+ sub r1, r1, #3
+ bl _s32_div_f
+ add r1, r0, #0
+ mov r0, #0x1a
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ add r1, #0x30
+ bl MOD51_02254FE4
+_022550A0:
+ mov r0, #0x9d
+ lsl r0, r0, #2
+ ldrh r1, [r4, r0]
+ add r0, r0, #2
+ strh r1, [r4, r0]
+ pop {r4, pc}
+ .align 2, 0
+_022550AC: .word 0x0000027A
+ thumb_func_end MOD51_02255030
+
+ thumb_func_start MOD51_022550B0
+MOD51_022550B0: ; 0x022550B0
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ ldr r0, _022551D8 ; =0x02255770
+ bl FUN_02020988
+ add r7, r0, #0
+ mov r0, #0
+ mvn r0, r0
+ cmp r7, r0
+ bne _022550C6
+ b _022551D2
+_022550C6:
+ cmp r7, #0
+ beq _022550D4
+ cmp r7, #1
+ beq _02255100
+ cmp r7, #5
+ beq _022551CA
+ b _02255132
+_022550D4:
+ lsl r0, r7, #2
+ add r1, r5, r0
+ mov r0, #0x66
+ lsl r0, r0, #2
+ ldr r0, [r1, r0]
+ add r1, r7, #4
+ bl FUN_02020130
+ mov r0, #0x9e
+ lsl r0, r0, #2
+ ldrh r0, [r5, r0]
+ cmp r0, #0
+ beq _022551CA
+ ldr r0, _022551DC ; =0x000005E5
+ bl FUN_020054C8
+ mov r0, #0x9e
+ lsl r0, r0, #2
+ ldrh r1, [r5, r0]
+ sub r1, r1, #1
+ strh r1, [r5, r0]
+ b _022551CA
+_02255100:
+ lsl r0, r7, #2
+ add r1, r5, r0
+ mov r0, #0x66
+ lsl r0, r0, #2
+ ldr r0, [r1, r0]
+ add r1, r7, #4
+ bl FUN_02020130
+ mov r0, #0x9e
+ lsl r0, r0, #2
+ ldrh r1, [r5, r0]
+ sub r0, r0, #4
+ ldrh r0, [r5, r0]
+ sub r0, r0, #3
+ cmp r1, r0
+ bge _022551CA
+ ldr r0, _022551DC ; =0x000005E5
+ bl FUN_020054C8
+ mov r0, #0x9e
+ lsl r0, r0, #2
+ ldrh r1, [r5, r0]
+ add r1, r1, #1
+ strh r1, [r5, r0]
+ b _022551CA
+_02255132:
+ mov r2, #0x27
+ lsl r2, r2, #4
+ add r1, r2, #0
+ ldr r0, [r5, r2]
+ add r1, #0xd8
+ ldr r3, [r0, r1]
+ sub r1, r7, #1
+ cmp r3, r1
+ blt _022551CA
+ add r1, r2, #0
+ add r1, #0xdc
+ add r2, #8
+ ldr r0, [r0, r1]
+ ldrh r1, [r5, r2]
+ add r1, r1, r7
+ sub r1, r1, #2
+ bl MOD51_02254E3C
+ mov r1, #0x1c
+ mov r4, #0
+ mul r1, r0
+ add r6, r4, #0
+ str r1, [sp]
+_02255160:
+ add r0, r4, #0
+ bl FUN_0202EF18
+ cmp r0, #0
+ beq _0225519C
+ ldr r1, [r5, #4]
+ add r0, #0x50
+ add r1, r1, r6
+ ldrb r1, [r1, #0xd]
+ cmp r1, #2
+ bne _0225519C
+ mov r1, #0x27
+ lsl r1, r1, #4
+ ldr r2, [r5, r1]
+ ldr r1, [sp]
+ ldr r0, [r0]
+ add r1, r1, r2
+ ldr r1, [r1, #0xc]
+ cmp r0, r1
+ bne _0225519C
+ ldr r0, _022551DC ; =0x000005E5
+ bl FUN_020054C8
+ mov r1, #0x18
+ ldr r2, [r5, #4]
+ mul r1, r4
+ mov r0, #1
+ add r1, r2, r1
+ strb r0, [r1, #0xf]
+ b _022551A4
+_0225519C:
+ add r4, r4, #1
+ add r6, #0x18
+ cmp r4, #0xa
+ blt _02255160
+_022551A4:
+ bl FUN_0202EF70
+ bl FUN_020239BC
+ mov r1, #0x27
+ lsl r1, r1, #4
+ ldr r2, [r5, r1]
+ ldr r1, [sp]
+ add r1, r2, r1
+ ldr r1, [r1, #0xc]
+ cmp r1, r0
+ bne _022551CA
+ ldr r0, _022551DC ; =0x000005E5
+ bl FUN_020054C8
+ ldr r1, [r5, #4]
+ ldr r0, _022551E0 ; =0x000004BF
+ mov r2, #1
+ strb r2, [r1, r0]
+_022551CA:
+ mov r0, #0x71
+ sub r1, r7, #2
+ lsl r0, r0, #2
+ str r1, [r5, r0]
+_022551D2:
+ add r0, r7, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_022551D8: .word 0x02255770
+_022551DC: .word 0x000005E5
+_022551E0: .word 0x000004BF
+ thumb_func_end MOD51_022550B0
+
+ thumb_func_start MOD51_022551E4
+MOD51_022551E4: ; 0x022551E4
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0xc
+ add r7, r0, #0
+ ldr r0, _02255290 ; =0x02255740
+ bl FUN_02020968
+ mov r1, #0
+ mvn r1, r1
+ str r0, [sp]
+ cmp r0, r1
+ beq _0225528A
+ cmp r0, #0
+ bne _02255256
+ add r0, sp, #8
+ add r1, sp, #4
+ bl FUN_02020AB0
+ mov r0, #0x1a
+ lsl r0, r0, #4
+ ldr r0, [r7, r0]
+ ldr r1, [sp, #4]
+ bl MOD51_02254FE4
+ mov r0, #0x9d
+ lsl r0, r0, #2
+ ldrh r0, [r7, r0]
+ cmp r0, #3
+ bls _0225528A
+ sub r4, r0, #2
+ mov r0, #0x60
+ add r1, r4, #0
+ bl _s32_div_f
+ mov r1, #0
+ cmp r4, #0
+ ble _0225528A
+ ldr r5, [sp, #4]
+ add r2, r1, #0
+ add r3, r1, #0
+_02255232:
+ add r6, r2, #0
+ add r6, #0x30
+ cmp r5, r6
+ blo _0225524A
+ add r6, r3, r0
+ add r6, #0x30
+ cmp r5, r6
+ bhs _0225524A
+ mov r0, #0x9e
+ lsl r0, r0, #2
+ strh r1, [r7, r0]
+ b _0225528A
+_0225524A:
+ add r1, r1, #1
+ add r2, r2, r0
+ add r3, r3, r0
+ cmp r1, r4
+ blt _02255232
+ b _0225528A
+_02255256:
+ mov r1, #0x27
+ lsl r1, r1, #4
+ add r0, r1, #0
+ ldr r2, [r7, r1]
+ add r0, #0xd8
+ ldr r2, [r2, r0]
+ ldr r0, [sp]
+ cmp r2, r0
+ blt _0225528A
+ add r0, r1, #0
+ sub r0, #0xac
+ ldr r2, [r7, r0]
+ ldr r0, [sp]
+ sub r3, r0, #1
+ cmp r2, r3
+ bne _0225528A
+ sub r1, #0x74
+ add r2, r7, r1
+ mov r0, #0x38
+ add r1, r3, #0
+ mul r1, r0
+ ldr r0, [r2, r1]
+ cmp r0, #5
+ bge _0225528A
+ add r0, r0, #1
+ str r0, [r2, r1]
+_0225528A:
+ ldr r0, [sp]
+ add sp, #0xc
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02255290: .word 0x02255740
+ thumb_func_end MOD51_022551E4
+
+ thumb_func_start MOD51_02255294
+MOD51_02255294: ; 0x02255294
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, _022552F4 ; =0x021C48B8
+ mov r1, #2
+ ldr r2, [r0, #0x48]
+ lsl r1, r1, #8
+ add r0, r2, #0
+ tst r0, r1
+ beq _022552C6
+ sub r1, #0x68
+ ldr r0, [r4, r1]
+ mov r1, #4
+ bl FUN_02020130
+ mov r0, #0x9e
+ lsl r0, r0, #2
+ ldrh r1, [r4, r0]
+ cmp r1, #0
+ beq _022552F0
+ sub r1, r1, #1
+ strh r1, [r4, r0]
+ ldr r0, _022552F8 ; =0x000005E5
+ bl FUN_020054C8
+ pop {r4, pc}
+_022552C6:
+ lsr r0, r1, #1
+ tst r0, r2
+ beq _022552F0
+ sub r1, #0x64
+ ldr r0, [r4, r1]
+ mov r1, #5
+ bl FUN_02020130
+ mov r0, #0x9e
+ lsl r0, r0, #2
+ sub r1, r0, #4
+ ldrh r1, [r4, r1]
+ ldrh r2, [r4, r0]
+ sub r1, r1, #3
+ cmp r2, r1
+ bge _022552F0
+ add r1, r2, #1
+ strh r1, [r4, r0]
+ ldr r0, _022552F8 ; =0x000005E5
+ bl FUN_020054C8
+_022552F0:
+ pop {r4, pc}
+ nop
+_022552F4: .word 0x021C48B8
+_022552F8: .word 0x000005E5
+ thumb_func_end MOD51_02255294
+
+ thumb_func_start MOD51_022552FC
+MOD51_022552FC: ; 0x022552FC
+ push {r4, r5, r6, lr}
+ sub sp, #8
+ add r5, r0, #0
+ ldr r0, [r5, #0xc]
+ mov r4, #0
+ mvn r4, r4
+ bl FUN_0204646C
+ cmp r0, #0
+ bne _02255332
+ add r0, r5, #0
+ bl MOD51_022550B0
+ add r6, r0, #0
+ add r0, r5, #0
+ bl MOD51_022551E4
+ add r4, r0, #0
+ mov r0, #0
+ mvn r0, r0
+ cmp r6, r0
+ bne _02255332
+ cmp r4, r0
+ bne _02255332
+ add r0, r5, #0
+ bl MOD51_02255294
+_02255332:
+ mov r2, #0x27
+ lsl r2, r2, #4
+ add r0, r2, #0
+ ldr r1, [r5, r2]
+ add r0, #0xd8
+ ldr r0, [r1, r0]
+ sub r3, r4, #1
+ str r0, [sp]
+ add r0, r2, #0
+ add r0, #0x10
+ add r0, r5, r0
+ str r0, [sp, #4]
+ sub r2, #0xa8
+ ldr r0, [r5, #0x14]
+ ldr r1, [r5, #0x24]
+ add r2, r5, r2
+ bl MOD51_0225535C
+ add sp, #8
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD51_022552FC
+
+ thumb_func_start MOD51_0225535C
+MOD51_0225535C: ; 0x0225535C
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x28
+ str r0, [sp, #0x1c]
+ ldr r0, [sp, #0x40]
+ str r1, [sp, #0x20]
+ add r5, r2, #0
+ mov r1, #0
+ str r0, [sp, #0x40]
+ ldr r4, [sp, #0x44]
+ cmp r0, #3
+ ble _02255376
+ mov r0, #3
+ str r0, [sp, #0x40]
+_02255376:
+ ldr r2, [sp, #0x40]
+ mov r0, #0
+ cmp r2, #0
+ ble _0225539C
+ add r2, r5, #0
+_02255380:
+ cmp r3, r0
+ beq _0225538E
+ ldr r6, [r2, #0x34]
+ cmp r6, #0
+ beq _0225538E
+ sub r6, r6, #1
+ str r6, [r2, #0x34]
+_0225538E:
+ ldr r6, [r2, #0x34]
+ add r0, r0, #1
+ add r1, r1, r6
+ ldr r6, [sp, #0x40]
+ add r2, #0x38
+ cmp r0, r6
+ blt _02255380
+_0225539C:
+ cmp r1, #0
+ bne _022553AC
+ ldr r0, [r4]
+ cmp r0, #0
+ bne _022553AC
+ add sp, #0x28
+ str r1, [r4]
+ pop {r3, r4, r5, r6, r7, pc}
+_022553AC:
+ ldr r0, [sp, #0x40]
+ str r1, [r4]
+ mov r4, #0
+ cmp r0, #0
+ ble _02255422
+ ldr r0, [sp, #0x20]
+ add r7, r4, #0
+ add r0, #0xc
+ str r0, [sp, #0x20]
+_022553BE:
+ ldr r1, [r5, #0x34]
+ lsl r3, r7, #0x18
+ lsr r0, r1, #0x1f
+ add r0, r1, r0
+ asr r0, r0, #1
+ str r0, [sp, #0x24]
+ mov r0, #0x20
+ str r0, [sp]
+ mov r0, #8
+ str r0, [sp, #4]
+ ldr r0, [sp, #0x20]
+ lsr r3, r3, #0x18
+ str r0, [sp, #8]
+ mov r0, #0
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x24]
+ ldr r1, [r5, #0x30]
+ lsl r2, r0, #3
+ mov r0, #0x18
+ mul r0, r1
+ add r0, r2, r0
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #0x10]
+ mov r0, #0x20
+ str r0, [sp, #0x14]
+ mov r0, #0x30
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x1c]
+ mov r1, #7
+ mov r2, #0
+ bl FUN_02018170
+ ldr r3, [sp, #0x24]
+ add r1, r4, #4
+ lsl r6, r3, #2
+ ldr r3, _02255450 ; =0x02255728
+ lsl r1, r1, #0x18
+ ldr r0, [sp, #0x1c]
+ ldr r3, [r3, r6]
+ lsr r1, r1, #0x18
+ mov r2, #3
+ bl FUN_020179E0
+ ldr r0, [sp, #0x40]
+ add r4, r4, #1
+ add r5, #0x38
+ add r7, #8
+ cmp r4, r0
+ blt _022553BE
+_02255422:
+ ldr r0, [sp, #0x1c]
+ mov r1, #7
+ bl FUN_0201886C
+ mov r1, #6
+ lsl r1, r1, #8
+ bl DC_FlushRange
+ ldr r0, [sp, #0x1c]
+ mov r1, #7
+ bl FUN_0201886C
+ add r2, r0, #0
+ mov r0, #0
+ str r0, [sp]
+ mov r3, #6
+ ldr r0, [sp, #0x1c]
+ mov r1, #7
+ lsl r3, r3, #8
+ bl FUN_02017CE8
+ add sp, #0x28
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02255450: .word 0x02255728
+ thumb_func_end MOD51_0225535C
+
+ thumb_func_start MOD51_02255454
+MOD51_02255454: ; 0x02255454
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ add r6, r0, #0
+ mov r4, #0
+ ldr r0, [sp, #0x28]
+ add r5, r1, #0
+ add r7, r2, #0
+ str r3, [sp, #8]
+ str r4, [sp, #0xc]
+ bl FUN_020239BC
+ cmp r5, r0
+ beq _02255478
+ add r0, r6, #0
+ add r1, r5, #0
+ bl FUN_02025614
+ add r4, r0, #0
+_02255478:
+ cmp r4, #0
+ ble _022554D8
+ cmp r4, #1
+ bne _0225548C
+ ldr r2, [sp, #0x28]
+ add r0, r7, #0
+ mov r1, #0
+ bl FUN_0200ABC0
+ b _022554CA
+_0225548C:
+ cmp r4, #2
+ blt _022554CA
+ sub r5, r4, #2
+ mov r0, #0xa
+ mov r1, #0x59
+ bl FUN_020219F4
+ add r4, r0, #0
+ add r0, r6, #0
+ add r1, r5, #0
+ bl FUN_020254F0
+ add r1, r0, #0
+ add r0, r4, #0
+ bl FUN_02021E28
+ add r0, r6, #0
+ add r1, r5, #0
+ bl FUN_020254F8
+ mov r1, #0
+ str r1, [sp]
+ str r0, [sp, #4]
+ add r0, r7, #0
+ add r2, r4, #0
+ add r3, r1, #0
+ bl FUN_0200ABB4
+ add r0, r4, #0
+ bl FUN_02021A20
+_022554CA:
+ ldr r1, [sp, #8]
+ add r0, r7, #0
+ mov r2, #0xce
+ mov r3, #0x59
+ bl FUN_0200A9C4
+ str r0, [sp, #0xc]
+_022554D8:
+ ldr r0, [sp, #0xc]
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD51_02255454
+
+ thumb_func_start MOD51_022554E0
+MOD51_022554E0: ; 0x022554E0
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ add r7, r0, #0
+ add r6, r2, #0
+ ldr r2, [r7, #4]
+ ldr r0, _022555BC ; =0x000004D8
+ str r1, [sp, #4]
+ mov r1, #0x27
+ ldr r0, [r2, r0]
+ lsl r1, r1, #4
+ str r0, [sp, #0xc]
+ add r0, r1, #0
+ ldr r4, [r7, r1]
+ add r0, #0xd8
+ ldr r0, [r4, r0]
+ str r3, [sp, #8]
+ cmp r0, #0x1e
+ bne _02255508
+ add r1, #0xdc
+ b _0225550A
+_02255508:
+ add r1, #0xd8
+_0225550A:
+ add r5, r4, r1
+ ldr r1, [r5]
+ mov r0, #0x1c
+ mul r0, r1
+ add r0, r4, r0
+ ldr r0, [r0, #4]
+ cmp r0, #0
+ beq _0225551E
+ bl FUN_02021A20
+_0225551E:
+ ldr r1, [r5]
+ mov r0, #0x1c
+ mul r0, r1
+ add r0, r4, r0
+ ldr r0, [r0, #8]
+ cmp r0, #0
+ beq _02255530
+ bl FUN_02021A20
+_02255530:
+ ldr r0, [sp, #8]
+ bl FUN_0202398C
+ add r1, r0, #0
+ ldr r2, [r5]
+ mov r0, #0x1c
+ mul r0, r2
+ ldr r0, [r4, r0]
+ bl FUN_02021E28
+ ldr r0, [r5]
+ mov r1, #0x1c
+ add r2, r0, #0
+ mul r2, r1
+ add r0, r4, r2
+ ldrh r2, [r6]
+ strh r2, [r0, #0x14]
+ ldrh r2, [r6, #2]
+ strh r2, [r0, #0x16]
+ ldrh r2, [r6, #4]
+ strh r2, [r0, #0x18]
+ ldrh r2, [r6, #6]
+ strh r2, [r0, #0x1a]
+ ldr r0, [r5]
+ mul r1, r0
+ ldr r0, [sp, #4]
+ add r1, r4, r1
+ str r0, [r1, #0xc]
+ ldr r0, [sp, #8]
+ bl FUN_020239CC
+ ldr r2, [r5]
+ mov r1, #0x1c
+ mul r1, r2
+ add r1, r4, r1
+ str r0, [r1, #0x10]
+ add r0, r6, #0
+ mov r1, #0x59
+ bl FUN_020137D4
+ ldr r2, [r5]
+ mov r1, #0x1c
+ mul r1, r2
+ add r1, r4, r1
+ str r0, [r1, #4]
+ ldr r0, [r7, #0x10]
+ ldr r1, [sp, #4]
+ str r0, [sp]
+ ldr r0, [sp, #0xc]
+ ldr r2, [r7, #0x18]
+ ldr r3, [r7, #0x1c]
+ bl MOD51_02255454
+ ldr r2, [r5]
+ mov r1, #0x1c
+ mul r1, r2
+ add r1, r4, r1
+ str r0, [r1, #8]
+ ldr r0, [r5]
+ add r0, r0, #1
+ str r0, [r5]
+ mov r0, #0xd3
+ lsl r0, r0, #2
+ ldr r1, [r4, r0]
+ cmp r1, #0x1e
+ bne _022555B8
+ mov r1, #0
+ str r1, [r4, r0]
+_022555B8:
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_022555BC: .word 0x000004D8
+ thumb_func_end MOD51_022554E0
+
+ thumb_func_start MOD51_022555C0
+MOD51_022555C0: ; 0x022555C0
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ add r0, r1, #0
+ str r1, [sp]
+ add r7, r2, #0
+ bl FUN_0201385C
+ cmp r0, #0
+ bne _022555D6
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+_022555D6:
+ mov r1, #0x27
+ lsl r1, r1, #4
+ ldr r0, [r6, r1]
+ add r1, #0xd8
+ ldr r1, [r0, r1]
+ mov r4, #0
+ cmp r1, #0
+ ble _02255610
+ add r5, r4, #0
+_022555E8:
+ add r1, r0, r5
+ ldr r0, [r1, #0xc]
+ cmp r7, r0
+ bne _022555FC
+ ldr r0, [sp]
+ add r1, #0x14
+ bl FUN_02013928
+ cmp r0, #0
+ bne _02255610
+_022555FC:
+ mov r0, #0x27
+ lsl r0, r0, #4
+ mov r1, #0xd2
+ ldr r0, [r6, r0]
+ lsl r1, r1, #2
+ ldr r1, [r0, r1]
+ add r4, r4, #1
+ add r5, #0x1c
+ cmp r4, r1
+ blt _022555E8
+_02255610:
+ mov r0, #0x27
+ lsl r0, r0, #4
+ ldr r1, [r6, r0]
+ add r0, #0xd8
+ ldr r0, [r1, r0]
+ cmp r4, r0
+ beq _02255626
+ cmp r0, #0
+ beq _02255626
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+_02255626:
+ mov r0, #0x1c
+ mul r0, r4
+ add r1, r1, r0
+ ldr r0, [r1, #0xc]
+ cmp r7, r0
+ beq _0225563A
+ ldr r0, [sp]
+ add r1, #0x14
+ bl FUN_02013928
+_0225563A:
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD51_022555C0
+
+ thumb_func_start MOD51_02255640
+MOD51_02255640: ; 0x02255640
+ push {r4, r5, r6, lr}
+ add r6, r1, #0
+ mov r1, #0x9e
+ add r4, r0, #0
+ lsl r1, r1, #2
+ ldrh r0, [r4, r1]
+ sub r1, r1, #4
+ ldrh r1, [r4, r1]
+ mov r5, #0
+ sub r1, r1, #3
+ cmp r0, r1
+ bne _0225565A
+ mov r5, #1
+_0225565A:
+ add r1, r3, #0
+ add r0, r4, #0
+ add r3, r6, #0
+ bl MOD51_022554E0
+ ldr r1, _0225568C ; =0x0000027A
+ ldrh r0, [r4, r1]
+ cmp r0, #0
+ beq _02255682
+ cmp r5, #0
+ beq _02255682
+ add r0, r1, #0
+ sub r0, #0xa
+ ldr r2, [r4, r0]
+ add r0, r1, #0
+ add r0, #0xce
+ ldr r0, [r2, r0]
+ sub r2, r0, #3
+ sub r0, r1, #2
+ strh r2, [r4, r0]
+_02255682:
+ add r0, r4, #0
+ bl MOD51_0225571C
+ pop {r4, r5, r6, pc}
+ nop
+_0225568C: .word 0x0000027A
+ thumb_func_end MOD51_02255640
+
+ thumb_func_start MOD51_02255690
+MOD51_02255690: ; 0x02255690
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #8
+ str r0, [sp]
+ ldr r0, [r0, #0xc]
+ bl FUN_0204646C
+ cmp r0, #0
+ bne _02255714
+ mov r0, #4
+ bl FUN_02023928
+ str r0, [sp, #4]
+ mov r6, #0
+_022556AA:
+ add r0, r6, #0
+ bl FUN_0202EF18
+ add r7, r0, #0
+ beq _022556E6
+ add r4, r7, #0
+ add r4, #0x50
+ ldr r0, _02255718 ; =0x02255800
+ add r5, r4, #0
+ add r5, #8
+ str r4, [r0, #4]
+ str r5, [r0]
+ add r0, r4, #0
+ ldr r1, [sp, #4]
+ add r0, #0x10
+ bl FUN_0202393C
+ ldr r0, [sp]
+ ldr r2, [r7, #0x50]
+ add r1, r5, #0
+ bl MOD51_022555C0
+ cmp r0, #0
+ beq _022556E6
+ ldr r0, [sp]
+ ldr r1, [sp, #4]
+ ldr r3, [r4]
+ add r2, r5, #0
+ bl MOD51_02255640
+_022556E6:
+ add r6, r6, #1
+ cmp r6, #0x10
+ blt _022556AA
+ ldr r0, [sp]
+ ldr r0, [r0, #8]
+ bl FUN_02052CF0
+ add r4, r0, #0
+ beq _0225570E
+ ldr r0, [sp]
+ ldr r0, [r0, #0x10]
+ bl FUN_020239BC
+ add r3, r0, #0
+ ldr r0, [sp]
+ add r2, r4, #0
+ add r1, r0, #0
+ ldr r1, [r1, #0x10]
+ bl MOD51_02255640
+_0225570E:
+ ldr r0, [sp, #4]
+ bl FUN_02016A18
+_02255714:
+ add sp, #8
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02255718: .word 0x02255800
+ thumb_func_end MOD51_02255690
+
+ thumb_func_start MOD51_0225571C
+MOD51_0225571C: ; 0x0225571C
+ mov r1, #0xa1
+ mov r2, #1
+ lsl r1, r1, #2
+ str r2, [r0, r1]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD51_0225571C
+
+ .section .rodata
+ ; 0x02255728
+ .incbin "baserom.nds", 0x2998E8, 0xB8
+
+ .section .bss
+ ; 0x2255800
+ .space 4