summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-05-06 11:27:01 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-05-06 11:27:01 -0400
commit283dda9a39380d52499507baaab063ec64020a64 (patch)
tree5070e8c98af7cd7a2d842cf1cf1a85ff0ae0f9ac
parenta58b1ecebda926f4632f27af569e8c35fe0a17ad (diff)
Disassemble module 28
-rw-r--r--arm9/arm9.lcf16
-rw-r--r--arm9/global.inc1
-rw-r--r--arm9/modules/28/asm/module_28.s2967
3 files changed, 2982 insertions, 2 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 46e0fcaa..8de69f44 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -38,7 +38,7 @@ MEMORY {
MODULE_25 (RWX) : ORIGIN=0x02254840, LENGTH=0
MODULE_26 (RWX) : ORIGIN=0x02254840, LENGTH=0
MODULE_27 (RWX) : ORIGIN=0x02254840, LENGTH=0
- MODULE_28 (RWX) : ORIGIN=0, LENGTH=0
+ MODULE_28 (RWX) : ORIGIN=0x02254840, LENGTH=0
MODULE_29 (RWX) : ORIGIN=0, LENGTH=0
MODULE_30 (RWX) : ORIGIN=0, LENGTH=0
MODULE_31 (RWX) : ORIGIN=0, LENGTH=0
@@ -720,7 +720,19 @@ SECTIONS {
module_27.o (.bss)
} >> MODULE_27
- OVERLAY_FILE(28, 0x286A00, FILE_28AA00.o)
+ .MODULE.28 : AT (0x286A00)
+ {
+ module_28.o (.text)
+ module_28.o (.sdata)
+ module_28.o (.data)
+ } > MODULE_28
+
+ .MODULE.28.bss :
+ {
+ module_28.o (.sbss)
+ module_28.o (.bss)
+ } >> MODULE_28
+
OVERLAY_FILE(29, 0x288200, FILE_28C200.o)
OVERLAY_FILE(30, 0x288C00, FILE_28CC00.o)
OVERLAY_FILE(31, 0x289200, FILE_28D200.o)
diff --git a/arm9/global.inc b/arm9/global.inc
index ebd6644b..ed81acc6 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -5446,6 +5446,7 @@
.extern MOD20_022529B4
.extern MOD20_02252C3C
.extern MOD20_0225396C
+.extern MOD20_02253F80
.extern MOD20_022539C4
.extern MOD20_02253F64
.extern MOD20_02253F9C
diff --git a/arm9/modules/28/asm/module_28.s b/arm9/modules/28/asm/module_28.s
new file mode 100644
index 00000000..0ad10077
--- /dev/null
+++ b/arm9/modules/28/asm/module_28.s
@@ -0,0 +1,2967 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD28_02254840
+MOD28_02254840: ; 0x02254840
+ ldr r3, _02254848 ; =0x02252979
+ ldr r0, _0225484C ; =MOD28_02254854
+ ldr r1, _02254850 ; =MOD28_022549F4
+ bx r3
+ .align 2, 0
+_02254848: .word 0x02252979
+_0225484C: .word MOD28_02254854
+_02254850: .word MOD28_022549F4
+ thumb_func_end MOD28_02254840
+
+ thumb_func_start MOD28_02254854
+MOD28_02254854: ; 0x02254854
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x64
+ add r7, r2, #0
+ str r3, [sp]
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254892
+ ldr r3, [sp]
+ add r1, r6, #0
+ add r2, r7, #0
+ bl MOD28_0225489C
+ cmp r0, #0
+ beq _0225488C
+ ldr r0, _02254898 ; =MOD28_022549C0
+ add r1, r4, #0
+ mov r2, #1
+ bl FUN_0200CA44
+ cmp r0, #0
+ beq _0225488C
+ str r4, [r5]
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_0225488C:
+ add r0, r4, #0
+ bl FUN_02016A18
+_02254892:
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02254898: .word MOD28_022549C0
+ thumb_func_end MOD28_02254854
+
+ thumb_func_start MOD28_0225489C
+MOD28_0225489C: ; 0x0225489C
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #8
+ add r7, r0, #0
+ add r4, r1, #0
+ add r0, #0x5c
+ add r1, r7, #4
+ bl MOD28_02254AF4
+ cmp r0, #0
+ beq _02254986
+ mov r0, #0
+ strb r0, [r7]
+ strb r0, [r7, #1]
+ strb r0, [r7, #2]
+ str r4, [r7, #0x60]
+ bl FUN_020225F8
+ bl FUN_0206BB1C
+ mov r1, #0
+ str r0, [sp, #4]
+ str r1, [sp]
+ bl FUN_0206B9AC
+ mov r6, #0
+ str r0, [r7, #4]
+ cmp r0, #0
+ ble _0225496A
+ add r4, r7, #0
+_022548D6:
+ ldr r0, [sp, #4]
+ add r1, r6, #0
+ bl FUN_0206B9B0
+ mov r1, #0x4c
+ mov r2, #0
+ add r5, r0, #0
+ bl FUN_020671BC
+ cmp r0, #0
+ bne _02254962
+ add r0, r5, #0
+ mov r1, #5
+ mov r2, #0
+ bl FUN_020671BC
+ strh r0, [r4, #0xc]
+ add r0, r5, #0
+ mov r1, #0x70
+ mov r2, #0
+ bl FUN_020671BC
+ strh r0, [r4, #0x10]
+ add r0, r5, #0
+ bl FUN_0206B688
+ str r0, [r4, #8]
+ add r0, r5, #0
+ mov r1, #9
+ mov r2, #0
+ bl FUN_020671BC
+ bl MOD28_0225498C
+ cmp r0, #6
+ bhi _02254944
+ add r1, r0, r0
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_0225492A: ; jump table
+ .short _02254938 - _0225492A - 2 ; case 0
+ .short _02254938 - _0225492A - 2 ; case 1
+ .short _02254938 - _0225492A - 2 ; case 2
+ .short _02254944 - _0225492A - 2 ; case 3
+ .short _0225494E - _0225492A - 2 ; case 4
+ .short _0225494E - _0225492A - 2 ; case 5
+ .short _0225494E - _0225492A - 2 ; case 6
+_02254938:
+ mov r1, #1
+ strb r1, [r4, #0x12]
+ mov r1, #3
+ sub r0, r1, r0
+ strb r0, [r4, #0x13]
+ b _0225495A
+_02254944:
+ mov r0, #2
+ strb r0, [r4, #0x12]
+ mov r0, #0
+ strb r0, [r4, #0x13]
+ b _0225495A
+_0225494E:
+ mov r1, #0
+ strb r1, [r4, #0x12]
+ mov r1, #3
+ sub r0, r1, r0
+ neg r0, r0
+ strb r0, [r4, #0x13]
+_0225495A:
+ ldr r0, [sp]
+ add r4, #0xc
+ add r0, r0, #1
+ str r0, [sp]
+_02254962:
+ ldr r0, [r7, #4]
+ add r6, r6, #1
+ cmp r6, r0
+ blt _022548D6
+_0225496A:
+ ldr r0, [sp]
+ mov r1, #0
+ str r0, [r7, #4]
+ add r0, r7, #0
+ add r0, #0x50
+ strh r1, [r0]
+ add r0, r7, #0
+ add r0, #0x52
+ strh r1, [r0]
+ str r1, [r7, #0x54]
+ add sp, #8
+ str r1, [r7, #0x58]
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_02254986:
+ mov r0, #0
+ add sp, #8
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD28_0225489C
+
+ thumb_func_start MOD28_0225498C
+MOD28_0225498C: ; 0x0225498C
+ ldr r3, _022549A8 ; =0x02255E78
+ mov r2, #0
+_02254990:
+ ldrb r1, [r3]
+ cmp r0, r1
+ bhs _0225499A
+ add r0, r2, #0
+ bx lr
+_0225499A:
+ add r2, r2, #1
+ add r3, r3, #1
+ cmp r2, #6
+ blo _02254990
+ mov r0, #6
+ bx lr
+ nop
+_022549A8: .word 0x02255E78
+ thumb_func_end MOD28_0225498C
+
+ thumb_func_start MOD28_022549AC
+MOD28_022549AC: ; 0x022549AC
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x5c]
+ bl MOD28_02254B70
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD28_022549AC
+
+ thumb_func_start MOD28_022549C0
+MOD28_022549C0: ; 0x022549C0
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ ldrb r1, [r4]
+ add r5, r0, #0
+ cmp r1, #3
+ bhs _022549EC
+ lsl r2, r1, #2
+ ldr r1, _022549F0 ; =0x02255E80
+ add r0, r4, #0
+ ldr r1, [r1, r2]
+ blx r1
+ cmp r0, #0
+ beq _022549EC
+ add r0, r4, #0
+ bl MOD28_022549AC
+ add r0, r5, #0
+ bl FUN_0200CAB4
+ ldr r0, [r4, #0x60]
+ bl MOD20_022529A0
+_022549EC:
+ pop {r3, r4, r5, pc}
+ nop
+_022549F0: .word 0x02255E80
+ thumb_func_end MOD28_022549C0
+
+ thumb_func_start MOD28_022549F4
+MOD28_022549F4: ; 0x022549F4
+ mov r1, #1
+ strb r1, [r0, #2]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD28_022549F4
+
+ thumb_func_start MOD28_022549FC
+MOD28_022549FC: ; 0x022549FC
+ ldrb r2, [r0, #2]
+ cmp r2, #0
+ bne _02254A04
+ b _02254A06
+_02254A04:
+ mov r1, #2
+_02254A06:
+ strb r1, [r0]
+ mov r1, #0
+ strb r1, [r0, #1]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD28_022549FC
+
+ thumb_func_start MOD28_02254A10
+MOD28_02254A10: ; 0x02254A10
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254A20
+ cmp r0, #1
+ beq _02254A30
+ b _02254A4A
+_02254A20:
+ ldr r0, [r4, #0x5c]
+ mov r1, #0
+ bl MOD28_02254BC8
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254A4A
+_02254A30:
+ ldr r0, [r4, #0x5c]
+ mov r1, #0
+ bl MOD28_02254BEC
+ cmp r0, #0
+ beq _02254A4A
+ ldr r0, [r4, #0x60]
+ bl MOD20_0225298C
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD28_022549FC
+_02254A4A:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD28_02254A10
+
+ thumb_func_start MOD28_02254A50
+MOD28_02254A50: ; 0x02254A50
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #2]
+ cmp r1, #0
+ beq _02254A64
+ mov r1, #2
+ bl MOD28_022549FC
+ mov r0, #0
+ pop {r4, pc}
+_02254A64:
+ add r1, r4, #0
+ add r0, #0x54
+ add r1, #0x58
+ bl MOD20_02252B68
+ add r1, r4, #0
+ add r1, #0x50
+ strh r0, [r1]
+ add r0, r4, #0
+ add r0, #0x50
+ ldrh r0, [r0]
+ cmp r0, #0
+ beq _02254AB2
+ ldr r0, [r4, #0x54]
+ sub r0, #0x10
+ cmp r0, #0xbf
+ bhs _02254A8A
+ mov r1, #1
+ b _02254A8C
+_02254A8A:
+ mov r1, #0
+_02254A8C:
+ ldr r0, [r4, #0x58]
+ sub r0, #0x10
+ cmp r0, #0x9f
+ bhs _02254A98
+ mov r0, #1
+ b _02254A9A
+_02254A98:
+ mov r0, #0
+_02254A9A:
+ tst r0, r1
+ beq _02254AAA
+ bl FUN_02020AA4
+ add r4, #0x52
+ strh r0, [r4]
+ mov r0, #0
+ pop {r4, pc}
+_02254AAA:
+ add r0, r4, #0
+ mov r1, #0
+ add r0, #0x50
+ strh r1, [r0]
+_02254AB2:
+ mov r0, #0
+ str r0, [r4, #0x54]
+ str r0, [r4, #0x58]
+ add r4, #0x52
+ strh r0, [r4]
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD28_02254A50
+
+ thumb_func_start MOD28_02254AC0
+MOD28_02254AC0: ; 0x02254AC0
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254AD0
+ cmp r0, #1
+ beq _02254AE0
+ b _02254AEE
+_02254AD0:
+ ldr r0, [r4, #0x5c]
+ mov r1, #1
+ bl MOD28_02254BC8
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254AEE
+_02254AE0:
+ ldr r0, [r4, #0x5c]
+ bl MOD28_02254BF8
+ cmp r0, #0
+ beq _02254AEE
+ mov r0, #1
+ pop {r4, pc}
+_02254AEE:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD28_02254AC0
+
+ thumb_func_start MOD28_02254AF4
+MOD28_02254AF4: ; 0x02254AF4
+ push {r3, r4, r5, r6, lr}
+ sub sp, #4
+ add r6, r1, #0
+ mov r1, #0xa3
+ add r5, r0, #0
+ mov r0, #8
+ lsl r1, r1, #2
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254B6A
+ add r0, #8
+ mov r1, #8
+ bl MOD20_022536F4
+ str r6, [r4]
+ bl MOD20_02252D34
+ str r0, [r4, #4]
+ bl MOD20_02252D24
+ str r0, [r4, #0x30]
+ add r0, r4, #0
+ mov r3, #0
+ add r0, #0xb0
+ str r3, [r0]
+ mov r0, #0x4d
+ lsl r0, r0, #2
+ add r6, r4, #0
+ add r2, r3, #0
+ add r1, r0, #4
+_02254B32:
+ str r2, [r6, r0]
+ str r2, [r6, r1]
+ add r3, r3, #1
+ add r6, #0x38
+ cmp r3, #6
+ blt _02254B32
+ mov r0, #8
+ str r0, [sp]
+ add r0, r4, #0
+ add r0, #0x34
+ mov r1, #0xc
+ mov r2, #5
+ mov r3, #6
+ bl MOD20_02253FBC
+ mov r0, #8
+ str r0, [sp]
+ add r0, r4, #0
+ add r0, #0x48
+ mov r1, #0xc
+ mov r2, #0x24
+ mov r3, #0x25
+ bl MOD20_02253FBC
+ add sp, #4
+ str r4, [r5]
+ mov r0, #1
+ pop {r3, r4, r5, r6, pc}
+_02254B6A:
+ mov r0, #0
+ add sp, #4
+ pop {r3, r4, r5, r6, pc}
+ thumb_func_end MOD28_02254AF4
+
+ thumb_func_start MOD28_02254B70
+MOD28_02254B70: ; 0x02254B70
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ beq _02254BC6
+ mov r7, #0x4d
+ mov r6, #0
+ add r4, r5, #0
+ lsl r7, r7, #2
+_02254B7E:
+ ldr r1, [r4, r7]
+ cmp r1, #0
+ beq _02254B8A
+ ldr r0, [r5, #0x30]
+ bl MOD20_02253F14
+_02254B8A:
+ mov r0, #0x4e
+ lsl r0, r0, #2
+ ldr r1, [r4, r0]
+ cmp r1, #0
+ beq _02254B9A
+ ldr r0, [r5, #0x30]
+ bl MOD20_02253F14
+_02254B9A:
+ add r6, r6, #1
+ add r4, #0x38
+ cmp r6, #6
+ blt _02254B7E
+ add r0, r5, #0
+ add r0, #0x34
+ bl MOD20_02254014
+ add r0, r5, #0
+ add r0, #0x48
+ bl MOD20_02254014
+ add r0, r5, #0
+ add r0, #0xb0
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _02254BC0
+ bl FUN_0200CAB4
+_02254BC0:
+ add r0, r5, #0
+ bl FUN_02016A18
+_02254BC6:
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD28_02254B70
+
+ thumb_func_start MOD28_02254BC8
+MOD28_02254BC8: ; 0x02254BC8
+ push {lr}
+ sub sp, #0xc
+ add r2, r0, #0
+ add r0, #8
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ mov r0, #8
+ str r0, [sp, #8]
+ ldr r0, _02254BE8 ; =0x02255EF4
+ ldr r3, [r2]
+ bl MOD20_022537E0
+ add sp, #0xc
+ pop {pc}
+ nop
+_02254BE8: .word 0x02255EF4
+ thumb_func_end MOD28_02254BC8
+
+ thumb_func_start MOD28_02254BEC
+MOD28_02254BEC: ; 0x02254BEC
+ ldr r3, _02254BF4 ; =0x02253795
+ add r0, #8
+ bx r3
+ nop
+_02254BF4: .word 0x02253795
+ thumb_func_end MOD28_02254BEC
+
+ thumb_func_start MOD28_02254BF8
+MOD28_02254BF8: ; 0x02254BF8
+ ldr r3, _02254C00 ; =0x022537B9
+ add r0, #8
+ bx r3
+ nop
+_02254C00: .word 0x022537B9
+ thumb_func_end MOD28_02254BF8
+
+ thumb_func_start MOD28_02254C04
+MOD28_02254C04: ; 0x02254C04
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD20_022538A0
+ add r0, #8
+ add r1, r4, #0
+ bl MOD20_02253888
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD28_02254C04
+
+ thumb_func_start MOD28_02254C18
+MOD28_02254C18: ; 0x02254C18
+ push {r4, r5, lr}
+ sub sp, #0x14
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ add r5, r0, #0
+ ldr r0, [r5, #4]
+ ldr r2, _02254CA8 ; =0x02255ED8
+ mov r1, #6
+ mov r3, #0
+ bl FUN_02016C18
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #8
+ str r0, [sp, #0xc]
+ ldr r2, [r5, #4]
+ mov r0, #0xc
+ mov r1, #7
+ mov r3, #6
+ bl FUN_0200687C
+ mov r2, #0
+ str r2, [sp]
+ mov r0, #0x20
+ str r0, [sp, #4]
+ mov r0, #0x18
+ str r0, [sp, #8]
+ str r2, [sp, #0xc]
+ ldr r0, [r5, #4]
+ mov r1, #6
+ add r3, r2, #0
+ bl FUN_02018540
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD20_02252D7C
+ ldr r0, [r5, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ ldr r1, [r5]
+ add r0, r5, #0
+ bl MOD28_02254CB4
+ ldr r1, [r5]
+ add r0, r5, #0
+ bl MOD28_02254E9C
+ ldr r1, _02254CAC ; =0x04001000
+ ldr r0, _02254CB0 ; =0xFFFFE0FF
+ ldr r3, [r1]
+ ldr r2, [r1]
+ str r3, [sp, #0x10]
+ and r0, r2
+ lsl r2, r3, #0x13
+ lsr r3, r2, #0x1b
+ mov r2, #0x14
+ orr r2, r3
+ lsl r2, r2, #8
+ orr r0, r2
+ str r0, [r1]
+ add r0, r4, #0
+ bl MOD28_02254C04
+ add sp, #0x14
+ pop {r4, r5, pc}
+ .align 2, 0
+_02254CA8: .word 0x02255ED8
+_02254CAC: .word 0x04001000
+_02254CB0: .word 0xFFFFE0FF
+ thumb_func_end MOD28_02254C18
+
+ thumb_func_start MOD28_02254CB4
+MOD28_02254CB4: ; 0x02254CB4
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x40
+ str r0, [sp, #0xc]
+ mov r0, #1
+ str r1, [sp, #0x10]
+ bl MOD20_022539C4
+ mov r0, #0
+ str r0, [sp]
+ mov r2, #1
+ str r2, [sp, #4]
+ mov r0, #8
+ str r0, [sp, #8]
+ mov r0, #0xc
+ mov r1, #0x23
+ lsl r3, r0, #9
+ bl FUN_02006A34
+ mov r0, #0x13
+ mov r1, #8
+ bl FUN_02006670
+ str r0, [sp, #0x1c]
+ cmp r0, #0
+ bne _02254CE8
+ b _02254E46
+_02254CE8:
+ mov r0, #0
+ str r0, [sp, #0x18]
+ add r1, r0, #0
+ add r0, sp, #0x2c
+ strh r1, [r0, #0xc]
+ ldr r1, [sp, #0x18]
+ strb r1, [r0, #0xe]
+ mov r1, #2
+ strb r1, [r0, #0xf]
+ mov r1, #1
+ strb r1, [r0, #0x11]
+ ldr r0, [sp, #0x10]
+ ldr r0, [r0]
+ cmp r0, #0
+ bgt _02254D08
+ b _02254E40
+_02254D08:
+ ldr r0, [sp, #0x18]
+ ldr r5, [sp, #0xc]
+ str r0, [sp, #0x14]
+ add r7, r0, #0
+ add r0, r5, #0
+ str r0, [sp, #0x24]
+ add r0, #0x34
+ str r0, [sp, #0x24]
+ add r0, r5, #0
+ str r0, [sp, #0x28]
+ add r0, #0x48
+ ldr r4, [sp, #0x10]
+ ldr r6, _02254E4C ; =0x02255EC0
+ str r0, [sp, #0x28]
+_02254D24:
+ ldr r0, [sp, #0x1c]
+ ldr r1, [r4, #4]
+ mov r2, #8
+ bl FUN_02006704
+ add r1, sp, #0x2c
+ str r0, [sp, #0x20]
+ bl FUN_020B0088
+ ldr r0, [sp, #0x2c]
+ mov r1, #1
+ ldr r0, [r0, #0x14]
+ lsl r1, r1, #0xa
+ bl DC_FlushRange
+ ldr r0, [sp, #0x2c]
+ mov r2, #1
+ ldr r0, [r0, #0x14]
+ ldr r1, [sp, #0x14]
+ lsl r2, r2, #0xa
+ bl GXS_LoadOBJ
+ ldr r0, [sp, #0x20]
+ bl FUN_02016A18
+ ldrh r0, [r6]
+ mov r1, #1
+ ldr r2, [sp, #0x24]
+ lsl r0, r0, #0xc
+ str r0, [sp, #0x30]
+ ldrh r0, [r6, #2]
+ lsl r0, r0, #0xc
+ str r0, [sp, #0x34]
+ add r0, sp, #0x2c
+ strb r1, [r0, #0x10]
+ ldr r0, [sp, #0xc]
+ add r1, sp, #0x30
+ ldr r0, [r0, #0x30]
+ bl MOD20_02253E74
+ mov r1, #0x4d
+ lsl r1, r1, #2
+ str r0, [r5, r1]
+ add r0, r1, #0
+ ldr r0, [r5, r0]
+ add r1, r7, #0
+ bl MOD20_02253FA4
+ ldrh r0, [r4, #8]
+ ldrh r1, [r4, #0xc]
+ mov r2, #0
+ bl FUN_0206B7BC
+ add r1, r0, #0
+ mov r0, #0x4d
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ add r1, r1, #1
+ bl MOD20_02253F9C
+ mov r1, #0
+ add r0, sp, #0x2c
+ strb r1, [r0, #0x10]
+ ldr r0, [sp, #0xc]
+ ldr r2, [sp, #0x28]
+ ldr r0, [r0, #0x30]
+ add r1, sp, #0x30
+ bl MOD20_02253E74
+ mov r1, #0x4e
+ lsl r1, r1, #2
+ str r0, [r5, r1]
+ add r0, r1, #0
+ ldr r0, [r5, r0]
+ cmp r0, #0
+ beq _02254DDC
+ mov r1, #1
+ bl MOD20_02253F78
+ mov r0, #0x4e
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ mov r1, #0xc0
+ bl MOD20_02253FA4
+ mov r0, #0x4e
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ mov r1, #0
+ bl MOD20_02253F9C
+ b _02254DE0
+_02254DDC:
+ bl ErrorHandling
+_02254DE0:
+ ldrh r0, [r4, #8]
+ mov r1, #0x1c
+ bl FUN_02068678
+ mov r1, #0x59
+ lsl r1, r1, #2
+ strb r0, [r5, r1]
+ ldr r0, _02254E50 ; =0x00000165
+ mov r1, #0
+ strb r1, [r5, r0]
+ add r0, r0, #1
+ strb r1, [r5, r0]
+ mov r1, #0x52
+ ldr r0, [sp, #0x34]
+ ldr r2, [sp, #0x30]
+ lsl r1, r1, #2
+ str r2, [r5, r1]
+ add r1, r1, #4
+ str r0, [r5, r1]
+ mov r0, #0x15
+ mov r1, #0
+ lsl r0, r0, #4
+ str r1, [r5, r0]
+ add r0, r0, #4
+ str r1, [r5, r0]
+ mov r0, #0x56
+ lsl r0, r0, #2
+ str r1, [r5, r0]
+ add r0, r0, #4
+ str r1, [r5, r0]
+ mov r0, #1
+ ldr r1, [sp, #0x14]
+ lsl r0, r0, #0xa
+ add r0, r1, r0
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #0x18]
+ add r4, #0xc
+ add r0, r0, #1
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x10]
+ add r6, r6, #4
+ ldr r1, [r0]
+ ldr r0, [sp, #0x18]
+ add r5, #0x38
+ add r7, #0x20
+ cmp r0, r1
+ bge _02254E40
+ b _02254D24
+_02254E40:
+ ldr r0, [sp, #0x1c]
+ bl FUN_020066F4
+_02254E46:
+ add sp, #0x40
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02254E4C: .word 0x02255EC0
+_02254E50: .word 0x00000165
+ thumb_func_end MOD28_02254CB4
+
+ thumb_func_start MOD28_02254E54
+MOD28_02254E54: ; 0x02254E54
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ bl FUN_0201BA60
+ mov r1, #0x3f
+ and r0, r1
+ sub r0, #0x20
+ lsl r4, r0, #0xc
+ bl FUN_0201BA60
+ mov r1, #0x3f
+ and r0, r1
+ sub r0, #0x20
+ lsl r0, r0, #0xc
+ str r4, [r5]
+ str r0, [r5, #4]
+ mov r0, #0
+ str r0, [r5, #8]
+ add r0, r5, #0
+ add r1, r5, #0
+ bl VEC_Normalize
+ ldr r1, [r5]
+ asr r0, r1, #3
+ lsr r0, r0, #0x1c
+ add r0, r1, r0
+ asr r0, r0, #4
+ str r0, [r5]
+ ldr r1, [r5, #4]
+ asr r0, r1, #3
+ lsr r0, r0, #0x1c
+ add r0, r1, r0
+ asr r0, r0, #4
+ str r0, [r5, #4]
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD28_02254E54
+
+ thumb_func_start MOD28_02254E9C
+MOD28_02254E9C: ; 0x02254E9C
+ push {r3, r4, r5, r6, r7, lr}
+ add r7, r1, #0
+ str r0, [sp]
+ ldr r0, [r7]
+ mov r6, #0
+ cmp r0, #0
+ ble _02254EF8
+ mov r1, #0x4f
+ ldr r0, [sp]
+ lsl r1, r1, #2
+ add r4, r0, r1
+ add r5, r0, #0
+_02254EB4:
+ add r0, r4, #0
+ bl MOD28_02254E54
+ mov r0, #0x59
+ lsl r0, r0, #2
+ ldrb r0, [r5, r0]
+ cmp r0, #0
+ beq _02254ED2
+ mov r0, #0x4d
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ mov r1, #6
+ bl MOD20_02253F28
+ b _02254EEC
+_02254ED2:
+ mov r0, #0x4f
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ cmp r0, #0
+ ble _02254EE0
+ mov r1, #7
+ b _02254EE2
+_02254EE0:
+ mov r1, #6
+_02254EE2:
+ mov r0, #0x4d
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ bl MOD20_02253F28
+_02254EEC:
+ ldr r0, [r7]
+ add r6, r6, #1
+ add r4, #0x38
+ add r5, #0x38
+ cmp r6, r0
+ blt _02254EB4
+_02254EF8:
+ ldr r0, [sp]
+ bl MOD28_02254F34
+ ldr r0, _02254F14 ; =MOD28_02254F84
+ ldr r1, [sp]
+ mov r2, #1
+ bl FUN_0200CA44
+ ldr r1, [sp]
+ add r1, #0xb0
+ str r1, [sp]
+ str r0, [r1]
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02254F14: .word MOD28_02254F84
+ thumb_func_end MOD28_02254E9C
+
+ thumb_func_start MOD28_02254F18
+MOD28_02254F18: ; 0x02254F18
+ push {r4, lr}
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ ldr r0, [r0, #4]
+ mov r1, #6
+ bl FUN_020178A0
+ add r0, r4, #0
+ bl MOD28_02254C04
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD28_02254F18
+
+ thumb_func_start MOD28_02254F34
+MOD28_02254F34: ; 0x02254F34
+ push {r3, r4, r5, r6}
+ add r1, r0, #0
+ mov r5, #0
+ add r1, #0xe4
+ str r5, [r1]
+ ldr r1, [r0]
+ ldr r3, [r1]
+ cmp r3, #0
+ ble _02254F60
+ mov r1, #0x16
+ lsl r1, r1, #4
+ add r6, r0, #0
+ add r4, r5, #0
+ add r2, r1, #3
+_02254F50:
+ strb r4, [r6, r1]
+ strb r4, [r6, r2]
+ ldr r3, [r0]
+ add r5, r5, #1
+ ldr r3, [r3]
+ add r6, #0x38
+ cmp r5, r3
+ blt _02254F50
+_02254F60:
+ add r1, r0, #0
+ add r1, #0xec
+ str r3, [r1]
+ add r1, r0, #0
+ add r1, #0xec
+ ldr r1, [r1]
+ add r0, #0xf0
+ str r1, [r0]
+ pop {r3, r4, r5, r6}
+ bx lr
+ thumb_func_end MOD28_02254F34
+
+ thumb_func_start MOD28_02254F74
+MOD28_02254F74: ; 0x02254F74
+ add r2, r0, #0
+ add r2, #0xe4
+ str r1, [r2]
+ mov r1, #0
+ add r0, #0xe8
+ str r1, [r0]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD28_02254F74
+
+ thumb_func_start MOD28_02254F84
+MOD28_02254F84: ; 0x02254F84
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ ldr r4, [r5]
+ add r0, r4, #0
+ add r0, #0x4c
+ ldrh r0, [r0]
+ cmp r0, #0
+ beq _02254FFC
+ mov r0, #0xa1
+ ldr r1, [r4, #0x50]
+ lsl r0, r0, #2
+ str r1, [r5, r0]
+ ldr r1, [r4, #0x54]
+ add r0, r0, #4
+ sub r1, #8
+ str r1, [r5, r0]
+ add r0, r5, #0
+ bl MOD28_02255040
+ add r1, r5, #0
+ add r1, #0xec
+ str r0, [r1]
+ add r0, r5, #0
+ add r0, #0xec
+ ldr r1, [r0]
+ ldr r0, [r4]
+ cmp r1, r0
+ bhs _02254FC0
+ mov r1, #1
+ b _02254FC2
+_02254FC0:
+ mov r1, #0
+_02254FC2:
+ add r0, r5, #0
+ add r0, #0xf8
+ str r1, [r0]
+ add r0, r5, #0
+ add r0, #0xf8
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _02254FEE
+ add r0, r5, #0
+ add r0, #0xec
+ ldr r1, [r0]
+ add r0, r5, #0
+ add r0, #0xf0
+ ldr r0, [r0]
+ cmp r1, r0
+ beq _02254FEE
+ mov r0, #0xc
+ mul r0, r1
+ add r0, r4, r0
+ ldrh r0, [r0, #8]
+ bl MOD20_02252B48
+_02254FEE:
+ add r0, r5, #0
+ add r0, #0xec
+ ldr r1, [r0]
+ add r0, r5, #0
+ add r0, #0xf0
+ str r1, [r0]
+ b _0225500C
+_02254FFC:
+ add r0, r5, #0
+ mov r1, #0
+ add r0, #0xf8
+ str r1, [r0]
+ add r0, r5, #0
+ ldr r1, [r4]
+ add r0, #0xf0
+ str r1, [r0]
+_0225500C:
+ add r2, r5, #0
+ add r2, #0xe4
+ ldr r2, [r2]
+ add r0, r5, #0
+ lsl r3, r2, #2
+ ldr r2, _0225503C ; =0x02255E94
+ add r1, r4, #0
+ ldr r2, [r2, r3]
+ blx r2
+ add r0, r5, #0
+ add r1, r4, #0
+ bl MOD28_022551C4
+ add r0, r5, #0
+ add r0, #0xe4
+ ldr r0, [r0]
+ cmp r0, #4
+ beq _02255038
+ add r0, r5, #0
+ add r1, r4, #0
+ bl MOD28_02255920
+_02255038:
+ pop {r3, r4, r5, pc}
+ nop
+_0225503C: .word 0x02255E94
+ thumb_func_end MOD28_02254F84
+
+ thumb_func_start MOD28_02255040
+MOD28_02255040: ; 0x02255040
+ push {r4, r5, r6, r7}
+ add r5, r0, #0
+ ldr r0, [r5]
+ mov r1, #0
+ ldr r4, [r0]
+ cmp r4, #0
+ ble _0225508C
+ mov r0, #0xa1
+ lsl r0, r0, #2
+ ldr r2, [r5, r0]
+ add r0, r0, #4
+ ldr r3, [r5, r0]
+_02255058:
+ mov r0, #0x52
+ lsl r0, r0, #2
+ mov r6, #0x53
+ ldr r0, [r5, r0]
+ lsl r6, r6, #2
+ ldr r6, [r5, r6]
+ asr r0, r0, #0xc
+ asr r6, r6, #0xc
+ sub r0, r2, r0
+ sub r7, r3, r6
+ add r6, r0, #0
+ mul r6, r0
+ add r0, r7, #0
+ mul r0, r7
+ add r6, r6, r0
+ mov r0, #1
+ lsl r0, r0, #8
+ cmp r6, r0
+ bge _02255084
+ add r0, r1, #0
+ pop {r4, r5, r6, r7}
+ bx lr
+_02255084:
+ add r1, r1, #1
+ add r5, #0x38
+ cmp r1, r4
+ blt _02255058
+_0225508C:
+ add r0, r4, #0
+ pop {r4, r5, r6, r7}
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD28_02255040
+
+ thumb_func_start MOD28_02255094
+MOD28_02255094: ; 0x02255094
+ push {r4, r5}
+ lsl r4, r0, #0xc
+ ldr r0, [r3]
+ sub r0, r4, r0
+ lsl r4, r1, #0xc
+ ldr r1, [r3, #4]
+ sub r5, r4, r1
+ asr r1, r0, #0xc
+ add r4, r0, #0
+ mul r4, r1
+ add r1, r2, #0
+ mul r1, r2
+ asr r0, r5, #0xc
+ add r3, r5, #0
+ mul r3, r0
+ lsl r2, r1, #0xc
+ add r1, r4, r3
+ mov r0, #0
+ cmp r2, r1
+ ble _022550BE
+ mov r0, #1
+_022550BE:
+ pop {r4, r5}
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD28_02255094
+
+ thumb_func_start MOD28_022550C4
+MOD28_022550C4: ; 0x022550C4
+ push {r3, lr}
+ add r1, #0x4e
+ ldrh r1, [r1]
+ cmp r1, #0
+ beq _022550E0
+ add r1, r0, #0
+ add r1, #0xf8
+ ldr r2, [r1]
+ add r1, r0, #0
+ add r1, #0xfc
+ str r2, [r1]
+ mov r1, #1
+ bl MOD28_02254F74
+_022550E0:
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD28_022550C4
+
+ thumb_func_start MOD28_022550E4
+MOD28_022550E4: ; 0x022550E4
+ push {r3, lr}
+ add r1, #0x4c
+ ldrh r1, [r1]
+ cmp r1, #0
+ beq _0225510E
+ add r1, r0, #0
+ add r1, #0xe8
+ ldr r1, [r1]
+ add r2, r1, #1
+ add r1, r0, #0
+ add r1, #0xe8
+ str r2, [r1]
+ add r1, r0, #0
+ add r1, #0xe8
+ ldr r1, [r1]
+ cmp r1, #6
+ bls _02255126
+ mov r1, #2
+ bl MOD28_02254F74
+ pop {r3, pc}
+_0225510E:
+ add r1, r0, #0
+ add r1, #0xfc
+ ldr r1, [r1]
+ cmp r1, #0
+ beq _02255120
+ mov r1, #0
+ bl MOD28_02254F74
+ pop {r3, pc}
+_02255120:
+ mov r1, #3
+ bl MOD28_02254F74
+_02255126:
+ pop {r3, pc}
+ thumb_func_end MOD28_022550E4
+
+ thumb_func_start MOD28_02255128
+MOD28_02255128: ; 0x02255128
+ push {r3, lr}
+ add r1, #0x4c
+ ldrh r1, [r1]
+ cmp r1, #0
+ bne _02255138
+ mov r1, #0
+ bl MOD28_02254F74
+_02255138:
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD28_02255128
+
+ thumb_func_start MOD28_0225513C
+MOD28_0225513C: ; 0x0225513C
+ push {r3, lr}
+ add r1, #0x4e
+ ldrh r1, [r1]
+ cmp r1, #0
+ bne _02255166
+ add r1, r0, #0
+ add r1, #0xe8
+ ldr r1, [r1]
+ add r2, r1, #1
+ add r1, r0, #0
+ add r1, #0xe8
+ str r2, [r1]
+ add r1, r0, #0
+ add r1, #0xe8
+ ldr r1, [r1]
+ cmp r1, #6
+ bls _02255184
+ mov r1, #0
+ bl MOD28_02254F74
+ pop {r3, pc}
+_02255166:
+ add r1, r0, #0
+ add r1, #0xf8
+ ldr r1, [r1]
+ cmp r1, #0
+ beq _0225517E
+ add r2, r0, #0
+ mov r1, #1
+ add r2, #0xfc
+ str r1, [r2]
+ bl MOD28_02254F74
+ pop {r3, pc}
+_0225517E:
+ mov r1, #4
+ bl MOD28_02254F74
+_02255184:
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD28_0225513C
+
+ thumb_func_start MOD28_02255188
+MOD28_02255188: ; 0x02255188
+ push {r4, lr}
+ add r4, r0, #0
+ add r1, r4, #0
+ add r1, #0xe8
+ ldr r1, [r1]
+ cmp r1, #0
+ bne _022551A8
+ bl MOD28_02255288
+ add r0, r4, #0
+ add r0, #0xe8
+ ldr r0, [r0]
+ add r4, #0xe8
+ add r0, r0, #1
+ str r0, [r4]
+ pop {r4, pc}
+_022551A8:
+ bl MOD28_022552C0
+ cmp r0, #0
+ beq _022551B8
+ add r0, r4, #0
+ mov r1, #0
+ bl MOD28_02254F74
+_022551B8:
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD28_02255188
+
+ thumb_func_start MOD28_022551BC
+MOD28_022551BC: ; 0x022551BC
+ push {r0, r1, r2, r3}
+ add sp, #0x10
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD28_022551BC
+
+ thumb_func_start MOD28_022551C4
+MOD28_022551C4: ; 0x022551C4
+ push {r3, r4, r5, r6, r7, lr}
+ add r7, r1, #0
+ str r0, [sp]
+ ldr r0, [r7]
+ mov r4, #0
+ cmp r0, #0
+ ble _02255212
+ ldr r5, [sp]
+_022551D4:
+ ldr r0, _0225521C ; =0x00000163
+ ldrb r0, [r5, r0]
+ cmp r0, #0
+ beq _022551F4
+ ldr r0, _0225521C ; =0x00000163
+ ldr r2, _0225521C ; =0x00000163
+ ldrb r0, [r5, r0]
+ sub r1, r0, #1
+ ldr r0, _0225521C ; =0x00000163
+ strb r1, [r5, r0]
+ ldrb r2, [r5, r2]
+ ldr r0, _02255220 ; =0x02255F20
+ add r1, r4, #0
+ bl MOD28_022551BC
+ b _02255208
+_022551F4:
+ mov r3, #0x16
+ lsl r3, r3, #4
+ ldrb r3, [r5, r3]
+ ldr r0, [sp]
+ add r1, r7, #0
+ lsl r6, r3, #2
+ ldr r3, _02255224 ; =0x02255EA8
+ add r2, r4, #0
+ ldr r3, [r3, r6]
+ blx r3
+_02255208:
+ ldr r0, [r7]
+ add r4, r4, #1
+ add r5, #0x38
+ cmp r4, r0
+ blt _022551D4
+_02255212:
+ ldr r0, _02255228 ; =0x02255F34
+ bl MOD28_022551BC
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_0225521C: .word 0x00000163
+_02255220: .word 0x02255F20
+_02255224: .word 0x02255EA8
+_02255228: .word 0x02255F34
+ thumb_func_end MOD28_022551C4
+
+ thumb_func_start MOD28_0225522C
+MOD28_0225522C: ; 0x0225522C
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ add r7, r2, #0
+ mov r2, #0x38
+ add r4, r6, #0
+ mul r4, r2
+ add r5, r0, #0
+ mov r2, #0x16
+ add r3, r5, r4
+ lsl r2, r2, #4
+ ldrb r2, [r3, r2]
+ cmp r2, #3
+ bne _0225524A
+ bl MOD28_02255344
+_0225524A:
+ mov r0, #0x16
+ lsl r0, r0, #4
+ add r2, r5, r0
+ mov r3, #0x16
+ lsl r3, r3, #4
+ strb r7, [r2, r4]
+ mov r1, #0
+ add r0, r5, r4
+ add r3, #8
+ str r1, [r0, r3]
+ mov r3, #0x16
+ lsl r3, r3, #4
+ sub r3, #0xc
+ str r1, [r0, r3]
+ mov r3, #0x16
+ lsl r3, r3, #4
+ sub r3, #8
+ str r1, [r0, r3]
+ mov r3, #0x16
+ lsl r3, r3, #4
+ sub r3, r3, #4
+ str r1, [r0, r3]
+ ldrb r0, [r2, r4]
+ cmp r0, #3
+ bne _02255284
+ add r0, r5, #0
+ add r1, r6, #0
+ bl MOD28_022552D4
+_02255284:
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD28_0225522C
+
+ thumb_func_start MOD28_02255288
+MOD28_02255288: ; 0x02255288
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ ldr r0, [r6]
+ mov r4, #0
+ ldr r1, [r0]
+ cmp r1, #0
+ ble _022552B4
+ add r5, r6, #0
+ add r7, r4, #0
+_0225529A:
+ add r0, r6, #0
+ add r1, r4, #0
+ mov r2, #5
+ bl MOD28_0225522C
+ ldr r0, _022552BC ; =0x00000163
+ add r4, r4, #1
+ strb r7, [r5, r0]
+ ldr r0, [r6]
+ add r5, #0x38
+ ldr r1, [r0]
+ cmp r4, r1
+ blt _0225529A
+_022552B4:
+ mov r0, #1
+ lsl r0, r0, #8
+ str r1, [r6, r0]
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_022552BC: .word 0x00000163
+ thumb_func_end MOD28_02255288
+
+ thumb_func_start MOD28_022552C0
+MOD28_022552C0: ; 0x022552C0
+ mov r1, #1
+ lsl r1, r1, #8
+ ldr r0, [r0, r1]
+ cmp r0, #0
+ bne _022552CE
+ mov r0, #1
+ bx lr
+_022552CE:
+ mov r0, #0
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD28_022552C0
+
+ thumb_func_start MOD28_022552D4
+MOD28_022552D4: ; 0x022552D4
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ mov r0, #0xc
+ add r7, r1, #0
+ mul r7, r0
+ ldr r0, [r5]
+ add r0, r0, r7
+ ldrb r0, [r0, #0xe]
+ cmp r0, #0
+ bne _02255314
+ mov r0, #0x4e
+ lsl r0, r0, #2
+ add r4, r5, r0
+ mov r0, #0x38
+ add r6, r1, #0
+ mul r6, r0
+ ldr r0, [r5, #0x30]
+ ldr r1, [r4, r6]
+ mov r2, #0
+ bl MOD20_02253F80
+ ldr r1, [r5]
+ ldr r0, [r4, r6]
+ add r1, r1, r7
+ ldrb r1, [r1, #0xf]
+ sub r1, r1, #1
+ bl MOD20_02253F28
+ ldr r0, [r4, r6]
+ mov r1, #0
+ bl MOD20_02253F78
+_02255314:
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD28_022552D4
+
+ thumb_func_start MOD28_02255318
+MOD28_02255318: ; 0x02255318
+ push {r3, r4, r5, lr}
+ mov r2, #0x4e
+ lsl r2, r2, #2
+ add r4, r0, r2
+ mov r2, #0x38
+ add r5, r1, #0
+ mul r5, r2
+ ldr r0, [r0, #0x30]
+ ldr r1, [r4, r5]
+ mov r2, #2
+ bl MOD20_02253F80
+ ldr r0, [r4, r5]
+ mov r1, #3
+ bl MOD20_02253F28
+ ldr r0, [r4, r5]
+ mov r1, #0
+ bl MOD20_02253F78
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD28_02255318
+
+ thumb_func_start MOD28_02255344
+MOD28_02255344: ; 0x02255344
+ mov r2, #0x38
+ mul r2, r1
+ add r1, r0, r2
+ mov r0, #0x4e
+ lsl r0, r0, #2
+ ldr r0, [r1, r0]
+ ldr r3, _02255358 ; =0x02253F79
+ mov r1, #1
+ bx r3
+ nop
+_02255358: .word 0x02253F79
+ thumb_func_end MOD28_02255344
+
+ thumb_func_start MOD28_0225535C
+MOD28_0225535C: ; 0x0225535C
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0xc
+ add r6, r2, #0
+ add r5, r0, #0
+ add r0, r6, #0
+ add r4, r1, #0
+ bl VEC_Mag
+ cmp r0, r5
+ ble _0225539A
+ add r1, r0, #0
+ mul r1, r4
+ add r0, r1, #0
+ mov r1, #0x64
+ bl _u32_div_f
+ add r4, r0, #0
+ add r0, r6, #0
+ add r1, sp, #0
+ bl VEC_Normalize
+ mov r0, #0
+ str r0, [r6]
+ str r0, [r6, #4]
+ str r0, [r6, #8]
+ add r0, r4, #0
+ add r1, sp, #0
+ add r2, r6, #0
+ add r3, r6, #0
+ bl VEC_MultAdd
+_0225539A:
+ add sp, #0xc
+ pop {r3, r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD28_0225535C
+
+ thumb_func_start MOD28_022553A0
+MOD28_022553A0: ; 0x022553A0
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _022553B0
+ ldr r0, [r0, #4]
+ cmp r0, #0
+ bne _022553B0
+ mov r0, #1
+ bx lr
+_022553B0:
+ mov r0, #0
+ bx lr
+ thumb_func_end MOD28_022553A0
+
+ thumb_func_start MOD28_022553B4
+MOD28_022553B4: ; 0x022553B4
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r4, r2, #0
+ add r6, r1, #0
+ ldr r0, _02255498 ; =0x02255F44
+ add r1, r4, #0
+ bl MOD28_022551BC
+ add r0, r6, #0
+ add r0, #0x4c
+ ldrh r0, [r0]
+ cmp r0, #0
+ bne _022553E6
+ mov r1, #0x60
+ add r2, r1, #0
+ add r2, #0xdc
+ add r3, r5, r2
+ mov r2, #0x38
+ mov r0, #3
+ mul r2, r4
+ lsl r0, r0, #8
+ add r2, r3, r2
+ bl MOD28_0225535C
+ pop {r3, r4, r5, r6, r7, pc}
+_022553E6:
+ add r0, r5, #0
+ add r0, #0xf8
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _02255448
+ mov r1, #0xa1
+ mov r3, #0x52
+ lsl r1, r1, #2
+ lsl r3, r3, #2
+ ldr r0, [r5, r1]
+ add r1, r1, #4
+ add r7, r5, r3
+ mov r3, #0x38
+ mul r3, r4
+ ldr r1, [r5, r1]
+ mov r2, #0x30
+ add r3, r7, r3
+ bl MOD28_02255094
+ cmp r0, #0
+ beq _02255494
+ mov r0, #0xc
+ mul r0, r4
+ add r0, r6, r0
+ ldrb r0, [r0, #0xe]
+ cmp r0, #1
+ beq _02255432
+ add r0, r5, #0
+ add r1, r4, #0
+ mov r2, #1
+ bl MOD28_0225522C
+ add r0, r5, #0
+ add r1, r6, #0
+ add r2, r4, #0
+ bl MOD28_0225549C
+ pop {r3, r4, r5, r6, r7, pc}
+_02255432:
+ add r0, r5, #0
+ add r1, r4, #0
+ mov r2, #2
+ bl MOD28_0225522C
+ add r0, r5, #0
+ add r1, r6, #0
+ add r2, r4, #0
+ bl MOD28_022555B4
+ pop {r3, r4, r5, r6, r7, pc}
+_02255448:
+ add r0, r5, #0
+ add r0, #0xec
+ ldr r0, [r0]
+ cmp r0, r4
+ bne _02255494
+ mov r1, #0xa1
+ mov r3, #0x52
+ lsl r1, r1, #2
+ lsl r3, r3, #2
+ ldr r0, [r5, r1]
+ add r1, r1, #4
+ add r7, r5, r3
+ mov r3, #0x38
+ mul r3, r4
+ ldr r1, [r5, r1]
+ mov r2, #8
+ add r3, r7, r3
+ bl MOD28_02255094
+ cmp r0, #0
+ beq _02255494
+ mov r0, #0xc
+ mul r0, r4
+ add r0, r6, r0
+ ldrb r0, [r0, #0xe]
+ cmp r0, #1
+ beq _0225548A
+ add r0, r5, #0
+ add r1, r4, #0
+ mov r2, #3
+ bl MOD28_0225522C
+ pop {r3, r4, r5, r6, r7, pc}
+_0225548A:
+ add r0, r5, #0
+ add r1, r4, #0
+ mov r2, #4
+ bl MOD28_0225522C
+_02255494:
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02255498: .word 0x02255F44
+ thumb_func_end MOD28_022553B4
+
+ thumb_func_start MOD28_0225549C
+MOD28_0225549C: ; 0x0225549C
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ add r5, r0, #0
+ add r4, r2, #0
+ add r6, r1, #0
+ ldr r0, _022555AC ; =0x02255F58
+ add r1, r4, #0
+ bl MOD28_022551BC
+ add r0, r6, #0
+ add r0, #0x4c
+ ldrh r0, [r0]
+ cmp r0, #0
+ beq _0225559C
+ mov r0, #0x52
+ lsl r0, r0, #2
+ add r7, r5, r0
+ mov r0, #0x38
+ mul r0, r4
+ mov r1, #0xa1
+ str r0, [sp]
+ lsl r1, r1, #2
+ ldr r0, [r5, r1]
+ add r1, r1, #4
+ ldr r3, [sp]
+ ldr r1, [r5, r1]
+ mov r2, #0x40
+ add r3, r7, r3
+ bl MOD28_02255094
+ cmp r0, #0
+ beq _0225559C
+ add r0, r5, #0
+ add r0, #0xf8
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _022554F0
+ add r0, r5, #0
+ add r0, #0xec
+ ldr r0, [r0]
+ cmp r0, r4
+ bne _022555A6
+_022554F0:
+ mov r1, #0xa1
+ lsl r1, r1, #2
+ ldr r0, [r5, r1]
+ add r1, r1, #4
+ ldr r3, [sp]
+ ldr r1, [r5, r1]
+ mov r2, #8
+ add r3, r7, r3
+ bl MOD28_02255094
+ cmp r0, #0
+ beq _02255516
+ add r0, r5, #0
+ add r1, r4, #0
+ mov r2, #3
+ bl MOD28_0225522C
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+_02255516:
+ mov r1, #0xa2
+ lsl r1, r1, #2
+ ldr r0, [r5, r1]
+ sub r1, r1, #4
+ ldr r1, [r5, r1]
+ lsl r0, r0, #0xc
+ lsl r1, r1, #0xc
+ str r1, [sp, #4]
+ str r0, [sp, #8]
+ mov r0, #0
+ ldr r1, [sp]
+ str r0, [sp, #0xc]
+ add r0, sp, #4
+ add r1, r7, r1
+ add r2, r0, #0
+ bl VEC_Subtract
+ add r0, sp, #4
+ add r1, r0, #0
+ bl VEC_Normalize
+ mov r0, #0xc
+ add r7, r4, #0
+ mul r7, r0
+ add r6, #0xf
+ ldrb r2, [r6, r7]
+ ldr r0, _022555B0 ; =0x02255E90
+ ldr r1, [sp, #4]
+ ldrb r0, [r0, r2]
+ mul r0, r1
+ mov r1, #0x64
+ bl _s32_div_f
+ str r0, [sp, #4]
+ ldrb r2, [r6, r7]
+ ldr r0, _022555B0 ; =0x02255E90
+ ldr r1, [sp, #8]
+ ldrb r0, [r0, r2]
+ mul r0, r1
+ mov r1, #0x64
+ bl _s32_div_f
+ ldr r2, [sp, #4]
+ str r0, [sp, #8]
+ asr r1, r2, #3
+ lsr r1, r1, #0x1c
+ add r1, r2, r1
+ asr r1, r1, #4
+ str r1, [sp, #4]
+ asr r1, r0, #3
+ lsr r1, r1, #0x1c
+ add r1, r0, r1
+ asr r0, r1, #4
+ str r0, [sp, #8]
+ mov r0, #0x38
+ mul r0, r4
+ add r1, r5, r0
+ mov r0, #0x4f
+ add r3, sp, #4
+ lsl r0, r0, #2
+ add r2, r1, r0
+ ldmia r3!, {r0, r1}
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ add sp, #0x10
+ str r0, [r2]
+ pop {r3, r4, r5, r6, r7, pc}
+_0225559C:
+ add r0, r5, #0
+ add r1, r4, #0
+ mov r2, #0
+ bl MOD28_0225522C
+_022555A6:
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_022555AC: .word 0x02255F58
+_022555B0: .word 0x02255E90
+ thumb_func_end MOD28_0225549C
+
+ thumb_func_start MOD28_022555B4
+MOD28_022555B4: ; 0x022555B4
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ add r5, r0, #0
+ add r6, r2, #0
+ add r4, r1, #0
+ ldr r0, _02255688 ; =0x02255F6C
+ add r1, r6, #0
+ bl MOD28_022551BC
+ add r0, r4, #0
+ add r0, #0x4c
+ ldrh r0, [r0]
+ cmp r0, #0
+ beq _0225567A
+ mov r0, #0x52
+ lsl r0, r0, #2
+ add r7, r5, r0
+ mov r0, #0x38
+ mul r0, r6
+ mov r1, #0xa1
+ str r0, [sp]
+ lsl r1, r1, #2
+ ldr r0, [r5, r1]
+ add r1, r1, #4
+ ldr r3, [sp]
+ ldr r1, [r5, r1]
+ mov r2, #0x40
+ add r3, r7, r3
+ bl MOD28_02255094
+ cmp r0, #0
+ beq _0225567A
+ mov r1, #0xa2
+ lsl r1, r1, #2
+ ldr r0, [r5, r1]
+ sub r1, r1, #4
+ ldr r1, [r5, r1]
+ lsl r0, r0, #0xc
+ str r0, [sp, #8]
+ mov r0, #0
+ lsl r1, r1, #0xc
+ str r0, [sp, #0xc]
+ ldr r0, [sp]
+ str r1, [sp, #4]
+ add r1, sp, #4
+ add r0, r7, r0
+ add r2, r1, #0
+ bl VEC_Subtract
+ add r0, sp, #4
+ add r1, r0, #0
+ bl VEC_Normalize
+ mov r0, #0xc
+ add r7, r6, #0
+ mul r7, r0
+ add r4, #0xf
+ ldrb r2, [r4, r7]
+ ldr r0, _0225568C ; =0x02255E8C
+ ldr r1, [sp, #4]
+ ldrb r0, [r0, r2]
+ mul r0, r1
+ mov r1, #0x64
+ bl _s32_div_f
+ str r0, [sp, #4]
+ ldrb r2, [r4, r7]
+ ldr r0, _0225568C ; =0x02255E8C
+ ldr r1, [sp, #8]
+ ldrb r0, [r0, r2]
+ mul r0, r1
+ mov r1, #0x64
+ bl _s32_div_f
+ ldr r2, [sp, #4]
+ str r0, [sp, #8]
+ asr r1, r2, #3
+ lsr r1, r1, #0x1c
+ add r1, r2, r1
+ asr r1, r1, #4
+ str r1, [sp, #4]
+ asr r1, r0, #3
+ lsr r1, r1, #0x1c
+ add r1, r0, r1
+ asr r0, r1, #4
+ str r0, [sp, #8]
+ mov r0, #0x38
+ mul r0, r6
+ add r1, r5, r0
+ mov r0, #0x4f
+ add r3, sp, #4
+ lsl r0, r0, #2
+ add r2, r1, r0
+ ldmia r3!, {r0, r1}
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ add sp, #0x10
+ str r0, [r2]
+ pop {r3, r4, r5, r6, r7, pc}
+_0225567A:
+ add r0, r5, #0
+ add r1, r6, #0
+ mov r2, #0
+ bl MOD28_0225522C
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02255688: .word 0x02255F6C
+_0225568C: .word 0x02255E8C
+ thumb_func_end MOD28_022555B4
+
+ thumb_func_start MOD28_02255690
+MOD28_02255690: ; 0x02255690
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0xc
+ add r5, r0, #0
+ add r7, r2, #0
+ add r4, r1, #0
+ ldr r0, _02255764 ; =0x02255F80
+ add r1, r7, #0
+ bl MOD28_022551BC
+ add r4, #0x4c
+ ldrh r0, [r4]
+ cmp r0, #0
+ beq _02255756
+ mov r1, #0xa2
+ lsl r1, r1, #2
+ ldr r0, [r5, r1]
+ add r4, r7, #0
+ lsl r2, r0, #0xc
+ sub r0, r1, #4
+ ldr r0, [r5, r0]
+ lsl r0, r0, #0xc
+ str r0, [sp]
+ mov r0, #0
+ str r0, [sp, #8]
+ mov r0, #0x38
+ mul r4, r0
+ mov r0, #0x52
+ lsl r0, r0, #2
+ add r6, r5, r0
+ str r2, [sp, #4]
+ sub r0, r1, #4
+ ldr r0, [r5, r0]
+ ldr r1, [r5, r1]
+ mov r2, #8
+ add r3, r6, r4
+ bl MOD28_02255094
+ cmp r0, #0
+ beq _02255732
+ add r0, sp, #0
+ add r1, r6, r4
+ add r2, r0, #0
+ bl VEC_Subtract
+ add r0, sp, #0
+ bl VEC_Mag
+ mov r1, #6
+ lsl r1, r1, #8
+ cmp r0, r1
+ ble _02255704
+ add r0, sp, #0
+ add r1, r0, #0
+ bl VEC_Normalize
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+_02255704:
+ ldr r1, [sp]
+ add r3, sp, #0
+ asr r0, r1, #3
+ lsr r0, r0, #0x1c
+ add r0, r1, r0
+ asr r0, r0, #4
+ ldr r1, [sp, #4]
+ str r0, [sp]
+ asr r0, r1, #3
+ lsr r0, r0, #0x1c
+ add r0, r1, r0
+ asr r0, r0, #4
+ str r0, [sp, #4]
+ mov r0, #0x4f
+ add r1, r5, r4
+ lsl r0, r0, #2
+ add r2, r1, r0
+ ldmia r3!, {r0, r1}
+ stmia r2!, {r0, r1}
+ ldr r0, [r3]
+ add sp, #0xc
+ str r0, [r2]
+ pop {r4, r5, r6, r7, pc}
+_02255732:
+ mov r1, #0xa1
+ lsl r1, r1, #2
+ ldr r0, [r5, r1]
+ add r1, r1, #4
+ ldr r1, [r5, r1]
+ mov r2, #0x40
+ add r3, r6, r4
+ bl MOD28_02255094
+ cmp r0, #0
+ beq _02255756
+ add r0, r5, #0
+ add r1, r7, #0
+ mov r2, #1
+ bl MOD28_0225522C
+ add sp, #0xc
+ pop {r4, r5, r6, r7, pc}
+_02255756:
+ add r0, r5, #0
+ add r1, r7, #0
+ mov r2, #0
+ bl MOD28_0225522C
+ add sp, #0xc
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02255764: .word 0x02255F80
+ thumb_func_end MOD28_02255690
+
+ thumb_func_start MOD28_02255768
+MOD28_02255768: ; 0x02255768
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r7, r2, #0
+ add r4, r1, #0
+ ldr r0, _02255808 ; =0x02255F94
+ add r1, r7, #0
+ bl MOD28_022551BC
+ add r4, #0x4c
+ ldrh r0, [r4]
+ cmp r0, #0
+ beq _022557D8
+ mov r0, #0x38
+ add r4, r7, #0
+ mul r4, r0
+ mov r0, #0x52
+ mov r1, #0xa1
+ lsl r0, r0, #2
+ add r6, r5, r0
+ lsl r1, r1, #2
+ ldr r0, [r5, r1]
+ add r1, r1, #4
+ ldr r1, [r5, r1]
+ mov r2, #8
+ add r3, r6, r4
+ bl MOD28_02255094
+ cmp r0, #0
+ beq _022557B6
+ mov r1, #0x4f
+ lsl r1, r1, #2
+ mov r3, #0
+ add r2, r5, r4
+ str r3, [r2, r1]
+ add r0, r1, #4
+ str r3, [r2, r0]
+ add r1, #8
+ str r3, [r2, r1]
+ pop {r3, r4, r5, r6, r7, pc}
+_022557B6:
+ mov r1, #0xa1
+ lsl r1, r1, #2
+ ldr r0, [r5, r1]
+ add r1, r1, #4
+ ldr r1, [r5, r1]
+ mov r2, #0x40
+ add r3, r6, r4
+ bl MOD28_02255094
+ cmp r0, #0
+ beq _022557FA
+ add r0, r5, #0
+ add r1, r7, #0
+ mov r2, #2
+ bl MOD28_0225522C
+ pop {r3, r4, r5, r6, r7, pc}
+_022557D8:
+ mov r0, #0x38
+ add r4, r7, #0
+ mul r4, r0
+ mov r0, #0x4f
+ lsl r0, r0, #2
+ add r0, r5, r0
+ add r0, r0, r4
+ bl MOD28_022553A0
+ cmp r0, #0
+ beq _022557FA
+ mov r0, #0x4f
+ lsl r0, r0, #2
+ add r0, r5, r0
+ add r0, r0, r4
+ bl MOD28_02254E54
+_022557FA:
+ add r0, r5, #0
+ add r1, r7, #0
+ mov r2, #0
+ bl MOD28_0225522C
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02255808: .word 0x02255F94
+ thumb_func_end MOD28_02255768
+
+ thumb_func_start MOD28_0225580C
+MOD28_0225580C: ; 0x0225580C
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ mov r0, #0x4d
+ lsl r0, r0, #2
+ add r1, r5, r0
+ add r6, r2, #0
+ mov r0, #0x38
+ mul r0, r6
+ add r4, r1, r0
+ ldr r0, _02255918 ; =0x02255FA8
+ add r1, r6, #0
+ bl MOD28_022551BC
+ add r0, r4, #0
+ add r0, #0x34
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _02255836
+ cmp r0, #1
+ beq _0225585A
+ pop {r4, r5, r6, pc}
+_02255836:
+ mov r0, #0
+ str r0, [r4, #8]
+ str r0, [r4, #0xc]
+ str r0, [r4, #0x10]
+ add r0, r5, #0
+ add r1, r6, #0
+ bl MOD28_02255318
+ ldr r0, _0225591C ; =0x00000669
+ bl MOD20_02252B28
+ add r0, r4, #0
+ add r0, #0x34
+ ldrb r0, [r0]
+ add r1, r0, #1
+ add r0, r4, #0
+ add r0, #0x34
+ strb r1, [r0]
+_0225585A:
+ add r0, r4, #0
+ add r0, #0x35
+ ldrb r1, [r0]
+ add r0, r4, #0
+ add r0, #0x35
+ add r1, #8
+ strb r1, [r0]
+ add r0, r4, #0
+ add r0, #0x36
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _0225588C
+ add r0, r4, #0
+ add r0, #0x35
+ ldrb r0, [r0]
+ cmp r0, #0x8c
+ bls _0225588C
+ add r0, r5, #0
+ add r1, r6, #0
+ bl MOD28_02255344
+ add r0, r4, #0
+ mov r1, #1
+ add r0, #0x36
+ strb r1, [r0]
+_0225588C:
+ add r0, r4, #0
+ add r0, #0x35
+ ldrb r0, [r0]
+ cmp r0, #0xb4
+ bls _022558A6
+ add r0, r4, #0
+ mov r1, #0xb4
+ add r0, #0x35
+ strb r1, [r0]
+ add r0, r4, #0
+ mov r1, #2
+ add r0, #0x36
+ strb r1, [r0]
+_022558A6:
+ add r0, r4, #0
+ add r0, #0x35
+ ldrb r0, [r0]
+ bl FUN_0201B93C
+ mov r1, #0x13
+ mvn r1, r1
+ mul r1, r0
+ mov r0, #0
+ str r0, [r4, #0x20]
+ str r1, [r4, #0x24]
+ str r0, [r4, #0x28]
+ add r0, r4, #0
+ add r1, r4, #0
+ add r2, r5, #0
+ add r0, #0x14
+ add r1, #0x20
+ add r2, #0xa4
+ bl VEC_Add
+ add r1, r5, #0
+ add r2, r5, #0
+ add r1, #0xa4
+ add r2, #0xa8
+ ldr r0, [r4]
+ ldr r1, [r1]
+ ldr r2, [r2]
+ bl MOD20_02253F64
+ mov r2, #2
+ ldr r3, [r4, #0x18]
+ lsl r2, r2, #0xe
+ ldr r0, [r4, #4]
+ ldr r1, [r4, #0x14]
+ add r2, r3, r2
+ bl MOD20_02253F64
+ add r0, r4, #0
+ add r0, #0x36
+ ldrb r0, [r0]
+ cmp r0, #2
+ bne _02255916
+ add r4, #8
+ add r0, r4, #0
+ bl MOD28_02254E54
+ add r0, r5, #0
+ add r1, r6, #0
+ mov r2, #0
+ bl MOD28_0225522C
+ mov r0, #1
+ lsl r0, r0, #8
+ ldr r1, [r5, r0]
+ sub r1, r1, #1
+ str r1, [r5, r0]
+_02255916:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_02255918: .word 0x02255FA8
+_0225591C: .word 0x00000669
+ thumb_func_end MOD28_0225580C
+
+ thumb_func_start MOD28_02255920
+MOD28_02255920: ; 0x02255920
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x74
+ str r0, [sp]
+ mov r0, #1
+ lsl r0, r0, #0x10
+ str r1, [sp, #4]
+ str r0, [sp, #0x34]
+_0225592E:
+ mov r0, #0
+ str r0, [sp, #0x28]
+ str r0, [sp, #0x24]
+ ldr r0, [sp, #4]
+ ldr r4, [sp, #0x34]
+ ldr r0, [r0]
+ str r0, [sp, #0x10]
+ cmp r0, #0
+ ble _02255974
+ mov r1, #0x52
+ ldr r5, [sp]
+ ldr r0, [sp]
+ lsl r1, r1, #2
+ add r7, r0, r1
+ sub r1, #0xc
+ add r5, #0x5c
+ add r6, r0, r1
+_02255950:
+ ldr r0, [sp, #0x34]
+ add r1, r6, #0
+ add r2, r7, #0
+ add r3, r5, #0
+ bl VEC_MultAdd
+ ldr r0, [sp, #0x24]
+ add r5, #0xc
+ add r0, r0, #1
+ str r0, [sp, #0x24]
+ ldr r0, [sp, #4]
+ ldr r1, [sp, #0x24]
+ ldr r0, [r0]
+ add r7, #0x38
+ add r6, #0x38
+ str r0, [sp, #0x10]
+ cmp r1, r0
+ blt _02255950
+_02255974:
+ ldr r0, [sp, #0x10]
+ mov r5, #0
+ cmp r0, #0
+ ble _02255A3E
+ ldr r0, [sp]
+ str r0, [sp, #0x14]
+ add r6, r0, #0
+_02255982:
+ ldr r0, [sp, #0x14]
+ ldr r7, [r0, #0x5c]
+ ldr r0, _02255CB8 ; =0xFFFF6000
+ cmp r7, r0
+ bge _022559AE
+ mov r0, #0x4f
+ lsl r0, r0, #2
+ ldr r1, [r6, r0]
+ cmp r1, #0
+ beq _022559AE
+ mov r0, #0xa
+ lsl r0, r0, #0xc
+ add r0, r7, r0
+ bl _s32_div_f
+ sub r1, r4, r0
+ cmp r1, r4
+ bge _022559AE
+ mov r0, #2
+ str r0, [sp, #0x28]
+ str r5, [sp, #0x30]
+ add r4, r1, #0
+_022559AE:
+ mov r0, #0xd9
+ lsl r0, r0, #0xc
+ cmp r7, r0
+ ble _022559D8
+ mov r0, #0x4f
+ lsl r0, r0, #2
+ ldr r1, [r6, r0]
+ cmp r1, #0
+ beq _022559D8
+ mov r0, #0xd9
+ lsl r0, r0, #0xc
+ sub r0, r7, r0
+ bl _s32_div_f
+ sub r1, r4, r0
+ cmp r1, r4
+ bge _022559D8
+ mov r0, #3
+ str r0, [sp, #0x28]
+ str r5, [sp, #0x30]
+ add r4, r1, #0
+_022559D8:
+ ldr r0, [sp, #0x14]
+ ldr r7, [r0, #0x60]
+ ldr r0, _02255CBC ; =0xFFFEA000
+ cmp r7, r0
+ bge _02255A04
+ mov r0, #5
+ lsl r0, r0, #6
+ ldr r1, [r6, r0]
+ cmp r1, #0
+ beq _02255A04
+ mov r0, #0x16
+ lsl r0, r0, #0xc
+ add r0, r7, r0
+ bl _s32_div_f
+ sub r1, r4, r0
+ cmp r1, r4
+ bge _02255A04
+ mov r0, #4
+ str r0, [sp, #0x28]
+ str r5, [sp, #0x30]
+ add r4, r1, #0
+_02255A04:
+ mov r0, #0xb7
+ lsl r0, r0, #0xc
+ cmp r7, r0
+ ble _02255A2E
+ mov r0, #5
+ lsl r0, r0, #6
+ ldr r1, [r6, r0]
+ cmp r1, #0
+ beq _02255A2E
+ mov r0, #0xb7
+ lsl r0, r0, #0xc
+ sub r0, r7, r0
+ bl _s32_div_f
+ sub r1, r4, r0
+ cmp r1, r4
+ bge _02255A2E
+ mov r0, #5
+ str r0, [sp, #0x28]
+ str r5, [sp, #0x30]
+ add r4, r1, #0
+_02255A2E:
+ ldr r0, [sp, #0x14]
+ add r5, r5, #1
+ add r0, #0xc
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #0x10]
+ add r6, #0x38
+ cmp r5, r0
+ blt _02255982
+_02255A3E:
+ mov r0, #0
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0x10]
+ cmp r0, #0
+ ble _02255AEE
+ ldr r0, [sp]
+ mov r1, #0x4f
+ str r0, [sp, #0x1c]
+ add r0, #0x5c
+ str r0, [sp, #0x1c]
+ ldr r0, [sp]
+ lsl r1, r1, #2
+ add r0, r0, r1
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x1c]
+ str r0, [sp, #0x38]
+ ldr r0, [sp, #0x18]
+ str r0, [sp, #0x3c]
+_02255A62:
+ ldr r0, [sp, #0x20]
+ mov r5, #0
+ cmp r0, #0
+ ble _02255AD0
+ ldr r7, [sp, #0x38]
+ ldr r6, [sp, #0x3c]
+_02255A6E:
+ ldr r1, [sp, #0x1c]
+ add r0, r7, #0
+ add r2, sp, #0x68
+ bl VEC_Subtract
+ add r0, sp, #0x68
+ bl VEC_Mag
+ mov r1, #2
+ lsl r1, r1, #0x10
+ str r0, [sp, #0x40]
+ cmp r0, r1
+ bge _02255AC4
+ add r0, sp, #0x68
+ add r1, sp, #0x5c
+ bl VEC_Normalize
+ ldr r1, [sp, #0x18]
+ add r0, r6, #0
+ add r2, sp, #0x50
+ bl VEC_Subtract
+ add r0, sp, #0x50
+ add r1, sp, #0x5c
+ bl VEC_DotProduct
+ add r2, r0, #0
+ mov r1, #2
+ ldr r0, [sp, #0x40]
+ lsl r1, r1, #0x10
+ sub r0, r1, r0
+ neg r1, r2
+ bl _s32_div_f
+ sub r0, r4, r0
+ cmp r0, r4
+ bge _02255AC4
+ mov r1, #1
+ str r1, [sp, #0x28]
+ ldr r1, [sp, #0x20]
+ str r5, [sp, #0x30]
+ str r1, [sp, #0x2c]
+ add r4, r0, #0
+_02255AC4:
+ ldr r0, [sp, #0x20]
+ add r5, r5, #1
+ add r7, #0xc
+ add r6, #0x38
+ cmp r5, r0
+ blt _02255A6E
+_02255AD0:
+ ldr r0, [sp, #0x1c]
+ add r0, #0xc
+ str r0, [sp, #0x1c]
+ ldr r0, [sp, #0x18]
+ add r0, #0x38
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x20]
+ add r0, r0, #1
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #4]
+ ldr r1, [sp, #0x20]
+ ldr r0, [r0]
+ str r0, [sp, #0x10]
+ cmp r1, r0
+ blt _02255A62
+_02255AEE:
+ cmp r4, #0
+ bgt _02255AF4
+ b _02255DC8
+_02255AF4:
+ mov r0, #0
+ str r0, [sp, #8]
+ ldr r0, [sp, #0x10]
+ cmp r0, #0
+ ble _02255B2E
+ mov r1, #0x52
+ ldr r0, [sp]
+ lsl r1, r1, #2
+ add r7, r0, r1
+ sub r1, #0xc
+ add r6, r7, #0
+ add r5, r0, r1
+_02255B0C:
+ add r0, r4, #0
+ add r1, r5, #0
+ add r2, r6, #0
+ add r3, r7, #0
+ bl VEC_MultAdd
+ ldr r0, [sp, #8]
+ add r7, #0x38
+ add r0, r0, #1
+ str r0, [sp, #8]
+ ldr r0, [sp, #4]
+ add r6, #0x38
+ ldr r1, [r0]
+ ldr r0, [sp, #8]
+ add r5, #0x38
+ cmp r0, r1
+ blt _02255B0C
+_02255B2E:
+ ldr r0, [sp, #0x28]
+ cmp r0, #5
+ bls _02255B36
+ b _02255DBA
+_02255B36:
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02255B42: ; jump table
+ .short _02255DBA - _02255B42 - 2 ; case 0
+ .short _02255B4E - _02255B42 - 2 ; case 1
+ .short _02255D7C - _02255B42 - 2 ; case 2
+ .short _02255D7C - _02255B42 - 2 ; case 3
+ .short _02255D9C - _02255B42 - 2 ; case 4
+ .short _02255D9C - _02255B42 - 2 ; case 5
+_02255B4E:
+ ldr r1, [sp, #0x30]
+ mov r0, #0x38
+ add r6, r1, #0
+ ldr r1, [sp]
+ mul r6, r0
+ add r1, r1, r6
+ str r1, [sp, #0xc]
+ mov r1, #0x16
+ ldr r2, [sp, #0xc]
+ lsl r1, r1, #4
+ ldrb r2, [r2, r1]
+ cmp r2, #3
+ bne _02255C1C
+ ldr r2, [sp, #0x2c]
+ sub r1, #0x24
+ add r7, r2, #0
+ mul r7, r0
+ ldr r0, [sp]
+ add r0, r0, r1
+ add r5, r0, r7
+ ldr r0, [r0, r7]
+ cmp r0, #0
+ bne _02255B82
+ ldr r0, [r5, #4]
+ cmp r0, #0
+ beq _02255B8E
+_02255B82:
+ ldr r0, [sp]
+ ldr r1, _02255CC0 ; =0x00000166
+ add r0, r0, r7
+ ldrb r1, [r0, r1]
+ cmp r1, #0
+ beq _02255C02
+_02255B8E:
+ mov r1, #0x52
+ ldr r0, [sp]
+ lsl r1, r1, #2
+ add r1, r0, r1
+ add r0, r1, r7
+ add r1, r1, r6
+ add r2, sp, #0x68
+ bl VEC_Subtract
+ add r0, sp, #0x68
+ add r1, sp, #0x5c
+ bl VEC_Normalize
+ ldr r0, [sp, #0x5c]
+ ldr r2, _02255CC4 ; =0x0000019A
+ asr r1, r0, #0x1f
+ mov r3, #0
+ bl _ll_mul
+ add r2, r0, #0
+ mov r0, #2
+ mov r3, #0
+ lsl r0, r0, #0xa
+ add r0, r2, r0
+ adc r1, r3
+ lsl r1, r1, #0x14
+ lsr r0, r0, #0xc
+ orr r0, r1
+ str r0, [r5]
+ ldr r0, [sp, #0x60]
+ ldr r2, _02255CC4 ; =0x0000019A
+ asr r1, r0, #0x1f
+ bl _ll_mul
+ add r2, r0, #0
+ mov r0, #2
+ mov r3, #0
+ lsl r0, r0, #0xa
+ add r0, r2, r0
+ adc r1, r3
+ lsl r1, r1, #0x14
+ lsr r0, r0, #0xc
+ orr r0, r1
+ str r0, [r5, #4]
+ ldr r0, [sp]
+ ldr r1, _02255CC0 ; =0x00000166
+ add r0, r0, r7
+ mov r2, #1
+ strb r2, [r0, r1]
+ ldr r1, [sp, #0x30]
+ cmp r1, #1
+ bne _02255BFC
+ ldr r1, [sp, #0x2c]
+ cmp r1, #2
+ beq _02255C14
+_02255BFC:
+ ldr r1, [sp, #0x2c]
+ cmp r1, #1
+ b _02255C14
+_02255C02:
+ ldr r2, [r5]
+ mov r1, #0
+ mvn r1, r1
+ add r3, r2, #0
+ mul r3, r1
+ str r3, [r5]
+ ldr r2, [r5, #4]
+ mul r1, r2
+ str r1, [r5, #4]
+_02255C14:
+ ldr r1, _02255CC8 ; =0x00000163
+ mov r2, #0x14
+ strb r2, [r0, r1]
+ b _02255DBA
+_02255C1C:
+ ldr r2, [sp, #0x2c]
+ add r7, r2, #0
+ mul r7, r0
+ ldr r0, [sp]
+ add r0, r0, r7
+ ldrb r0, [r0, r1]
+ cmp r0, #3
+ bne _02255CE8
+ ldr r0, [sp]
+ sub r1, #0x24
+ add r0, r0, r1
+ add r5, r0, r6
+ ldr r0, [r0, r6]
+ cmp r0, #0
+ bne _02255C40
+ ldr r0, [r5, #4]
+ cmp r0, #0
+ beq _02255C4A
+_02255C40:
+ ldr r1, _02255CC0 ; =0x00000166
+ ldr r0, [sp, #0xc]
+ ldrb r0, [r0, r1]
+ cmp r0, #0
+ beq _02255CCC
+_02255C4A:
+ mov r1, #0x52
+ ldr r0, [sp]
+ lsl r1, r1, #2
+ add r1, r0, r1
+ add r0, r1, r6
+ add r1, r1, r7
+ add r2, sp, #0x68
+ bl VEC_Subtract
+ add r0, sp, #0x68
+ add r1, sp, #0x5c
+ bl VEC_Normalize
+ ldr r0, [sp, #0x5c]
+ ldr r2, _02255CC4 ; =0x0000019A
+ asr r1, r0, #0x1f
+ mov r3, #0
+ bl _ll_mul
+ mov r2, #2
+ mov r3, #0
+ lsl r2, r2, #0xa
+ add r2, r0, r2
+ adc r1, r3
+ lsl r0, r1, #0x14
+ lsr r1, r2, #0xc
+ orr r1, r0
+ str r1, [r5]
+ ldr r0, [sp, #0x60]
+ ldr r2, _02255CC4 ; =0x0000019A
+ asr r1, r0, #0x1f
+ bl _ll_mul
+ mov r2, #2
+ mov r3, #0
+ lsl r2, r2, #0xa
+ add r2, r0, r2
+ adc r1, r3
+ lsl r0, r1, #0x14
+ lsr r1, r2, #0xc
+ orr r1, r0
+ str r1, [r5, #4]
+ ldr r1, _02255CC0 ; =0x00000166
+ ldr r0, [sp, #0xc]
+ mov r2, #1
+ strb r2, [r0, r1]
+ ldr r0, [sp, #0x30]
+ cmp r0, #1
+ bne _02255CB2
+ ldr r0, [sp, #0x2c]
+ cmp r0, #2
+ beq _02255CDE
+_02255CB2:
+ ldr r0, [sp, #0x2c]
+ cmp r0, #1
+ b _02255CDE
+ .align 2, 0
+_02255CB8: .word 0xFFFF6000
+_02255CBC: .word 0xFFFEA000
+_02255CC0: .word 0x00000166
+_02255CC4: .word 0x0000019A
+_02255CC8: .word 0x00000163
+_02255CCC:
+ ldr r1, [r5]
+ mov r0, #0
+ mvn r0, r0
+ add r2, r1, #0
+ mul r2, r0
+ str r2, [r5]
+ ldr r1, [r5, #4]
+ mul r0, r1
+ str r0, [r5, #4]
+_02255CDE:
+ ldr r1, _02255E74 ; =0x00000163
+ ldr r0, [sp, #0xc]
+ mov r2, #0x14
+ strb r2, [r0, r1]
+ b _02255DBA
+_02255CE8:
+ ldr r0, [sp]
+ sub r1, #0x18
+ add r1, r0, r1
+ add r0, r1, r6
+ add r1, r1, r7
+ add r2, sp, #0x68
+ bl VEC_Subtract
+ add r0, sp, #0x68
+ bl VEC_Mag
+ add r0, sp, #0x68
+ add r1, sp, #0x5c
+ bl VEC_Normalize
+ mov r1, #0x4f
+ ldr r0, [sp]
+ lsl r1, r1, #2
+ add r0, r0, r1
+ str r0, [sp, #0x4c]
+ ldr r1, [sp, #0x4c]
+ add r0, r0, r6
+ add r1, r1, r7
+ add r2, sp, #0x50
+ bl VEC_Subtract
+ add r0, sp, #0x50
+ add r1, sp, #0x5c
+ bl VEC_DotProduct
+ mov r5, #0x4f
+ ldr r2, [sp, #0x4c]
+ str r0, [sp, #0x44]
+ ldr r3, [sp]
+ lsl r5, r5, #2
+ add r3, r3, r5
+ neg r0, r0
+ add r1, sp, #0x5c
+ add r2, r2, r6
+ add r3, r3, r6
+ bl VEC_MultAdd
+ ldr r3, [sp]
+ ldr r2, [sp, #0x4c]
+ add r3, r3, r5
+ ldr r0, [sp, #0x44]
+ add r1, sp, #0x5c
+ add r2, r2, r7
+ add r3, r3, r7
+ bl VEC_MultAdd
+ ldr r0, [sp]
+ add r1, r5, #0
+ ldr r3, [sp]
+ add r1, #0x27
+ add r0, r0, r6
+ mov r2, #0x14
+ strb r2, [r0, r1]
+ add r3, r3, r7
+ strb r2, [r3, r1]
+ mov r2, #0
+ add r5, r1, #3
+ strb r2, [r0, r5]
+ add r0, r5, #0
+ strb r2, [r3, r0]
+ ldr r0, [sp, #0x30]
+ cmp r0, #1
+ bne _02255D76
+ ldr r0, [sp, #0x2c]
+ cmp r0, #2
+ beq _02255DBA
+_02255D76:
+ ldr r0, [sp, #0x2c]
+ cmp r0, #1
+ b _02255DBA
+_02255D7C:
+ ldr r0, [sp, #0x30]
+ mov r1, #0x38
+ add r2, r0, #0
+ mul r2, r1
+ ldr r0, [sp]
+ sub r1, #0x39
+ add r0, r0, r2
+ mov r2, #0x4f
+ lsl r2, r2, #2
+ ldr r3, [r0, r2]
+ mul r1, r3
+ str r1, [r0, r2]
+ mov r1, #0
+ add r2, #0x2a
+ strb r1, [r0, r2]
+ b _02255DBA
+_02255D9C:
+ ldr r0, [sp, #0x30]
+ mov r1, #0x38
+ add r2, r0, #0
+ mul r2, r1
+ ldr r0, [sp]
+ sub r1, #0x39
+ add r0, r0, r2
+ mov r2, #5
+ lsl r2, r2, #6
+ ldr r3, [r0, r2]
+ mul r1, r3
+ str r1, [r0, r2]
+ mov r1, #0
+ add r2, #0x26
+ strb r1, [r0, r2]
+_02255DBA:
+ ldr r0, [sp, #0x34]
+ sub r0, r0, r4
+ str r0, [sp, #0x34]
+ ldr r0, [sp, #0x28]
+ cmp r0, #0
+ beq _02255DC8
+ b _0225592E
+_02255DC8:
+ ldr r0, [sp, #4]
+ mov r5, #0
+ ldr r0, [r0]
+ cmp r0, #0
+ ble _02255E6E
+ ldr r4, [sp]
+ mov r1, #0x55
+ add r0, r4, #0
+ lsl r1, r1, #2
+ add r7, r0, r1
+ sub r1, #0xc
+ add r6, r0, r1
+ str r0, [sp, #0x48]
+ add r0, #0xa4
+ str r0, [sp, #0x48]
+_02255DE6:
+ mov r0, #0x16
+ lsl r0, r0, #4
+ ldrb r0, [r4, r0]
+ cmp r0, #3
+ bhs _02255E22
+ mov r0, #0x59
+ lsl r0, r0, #2
+ ldrb r0, [r4, r0]
+ cmp r0, #0
+ beq _02255E08
+ mov r0, #0x4d
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ mov r1, #6
+ bl MOD20_02253F28
+ b _02255E22
+_02255E08:
+ mov r0, #0x4f
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ cmp r0, #0
+ ble _02255E16
+ mov r1, #7
+ b _02255E18
+_02255E16:
+ mov r1, #6
+_02255E18:
+ mov r0, #0x4d
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD20_02253F28
+_02255E22:
+ ldr r2, [sp, #0x48]
+ add r0, r6, #0
+ add r1, r7, #0
+ bl VEC_Add
+ ldr r1, [sp]
+ ldr r2, [sp]
+ mov r0, #0x4d
+ lsl r0, r0, #2
+ add r1, #0xa4
+ add r2, #0xa8
+ ldr r0, [r4, r0]
+ ldr r1, [r1]
+ ldr r2, [r2]
+ bl MOD20_02253F64
+ mov r2, #0x53
+ mov r0, #0x4e
+ mov r1, #0x52
+ lsl r2, r2, #2
+ lsl r0, r0, #2
+ lsl r1, r1, #2
+ ldr r3, [r4, r2]
+ mov r2, #2
+ lsl r2, r2, #0xe
+ ldr r0, [r4, r0]
+ ldr r1, [r4, r1]
+ add r2, r3, r2
+ bl MOD20_02253F64
+ ldr r0, [sp, #4]
+ add r5, r5, #1
+ ldr r0, [r0]
+ add r4, #0x38
+ add r7, #0x38
+ add r6, #0x38
+ cmp r5, r0
+ blt _02255DE6
+_02255E6E:
+ add sp, #0x74
+ pop {r4, r5, r6, r7, pc}
+ nop
+_02255E74: .word 0x00000163
+ thumb_func_end MOD28_02255920
+ ; 0x02255E78
+ .incbin "baserom.nds", 0x28C038, 0x148