diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-06 12:36:05 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-06 12:36:05 -0400 |
commit | a7fb32ea399ba1154733c2af184d296e5a245490 (patch) | |
tree | 2f472acb66be777b80fda2b1b92f7e142a72eb86 | |
parent | 36a866f34478d15b587aae227a9288277a2171cd (diff) | |
parent | 5bfef3f1f96910c8824e56a959a423541a965f5d (diff) |
Merge branch 'master' of github.com:martmists/pokediamond into libfs
-rw-r--r-- | arm9/arm9.lcf | 48 | ||||
-rw-r--r-- | arm9/global.inc | 11 | ||||
-rw-r--r-- | arm9/modules/26/asm/module_26.s | 793 | ||||
-rw-r--r-- | arm9/modules/27/asm/module_27.s | 1453 | ||||
-rw-r--r-- | arm9/modules/28/asm/module_28.s | 2967 |
5 files changed, 5266 insertions, 6 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 41382881..7a4a43fb 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -36,9 +36,9 @@ MEMORY { MODULE_23 (RWX) : ORIGIN=0x02254840, LENGTH=0 MODULE_24 (RWX) : ORIGIN=0x02254840, LENGTH=0 MODULE_25 (RWX) : ORIGIN=0x02254840, LENGTH=0 - MODULE_26 (RWX) : ORIGIN=0, LENGTH=0 - MODULE_27 (RWX) : ORIGIN=0, LENGTH=0 - MODULE_28 (RWX) : ORIGIN=0, LENGTH=0 + MODULE_26 (RWX) : ORIGIN=0x02254840, LENGTH=0 + MODULE_27 (RWX) : ORIGIN=0x02254840, 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 @@ -701,9 +701,45 @@ SECTIONS { module_25.o (.bss) } >> MODULE_25 - OVERLAY_FILE(26, 0x285600, FILE_289600.o) - OVERLAY_FILE(27, 0x285E00, FILE_289E00.o) - OVERLAY_FILE(28, 0x286A00, FILE_28AA00.o) + .MODULE.26 : AT (0x285600) + { + module_26.o (.text) + module_26.o (.sdata) + module_26.o (.data) + } > MODULE_26 + + .MODULE.26.bss : + { + module_26.o (.sbss) + module_26.o (.bss) + } >> MODULE_26 + + .MODULE.27 : AT (0x285E00) + { + module_27.o (.text) + module_27.o (.sdata) + module_27.o (.data) + } > MODULE_27 + + .MODULE.27.bss : + { + module_27.o (.sbss) + module_27.o (.bss) + } >> MODULE_27 + + .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 99f4a8e2..b74fe006 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5449,6 +5449,17 @@ .extern MOD20_02254198
.extern MOD20_02252DB4
.extern MOD11_02252DB4
+.extern FUN_0204C0CC
+.extern FUN_0204C0D4
+.extern FUN_0204C0E8
+.extern MOD20_022529B4
+.extern MOD20_02252C3C
+.extern MOD20_0225396C
+.extern MOD20_02253F80
+.extern MOD20_022539C4
+.extern MOD20_02253F64
+.extern MOD20_02253F9C
+.extern MOD20_02253FA4
.extern FUN_02020A98
.extern FUN_02020ACC
.extern FUN_0204BF14
diff --git a/arm9/modules/26/asm/module_26.s b/arm9/modules/26/asm/module_26.s new file mode 100644 index 00000000..2511101e --- /dev/null +++ b/arm9/modules/26/asm/module_26.s @@ -0,0 +1,793 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD26_02254840 +MOD26_02254840: ; 0x02254840 + ldr r3, _02254848 ; =MOD20_02252978 + ldr r0, _0225484C ; =MOD26_02254854 + ldr r1, _02254850 ; =MOD26_02254A84 + bx r3 + .align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD26_02254854 +_02254850: .word MOD26_02254A84 + thumb_func_end MOD26_02254840 + + thumb_func_start MOD26_02254854 +MOD26_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r6, r1, #0 + mov r1, #0x9b + add r5, r0, #0 + mov r0, #8 + lsl r1, r1, #2 + add r7, r2, #0 + str r3, [sp] + bl FUN_02016998 + add r4, r0, #0 + beq _0225489C + ldr r3, [sp] + add r1, r6, #0 + add r2, r7, #0 + bl MOD26_022548A8 + cmp r0, #0 + beq _02254896 + ldr r0, _022548A0 ; =MOD26_02254A4C + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA44 + cmp r0, #0 + beq _02254896 + ldr r0, _022548A4 ; =MOD26_02254A30 + add r1, r4, #0 + str r4, [r5] + bl MOD20_022529B4 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_02254896: + add r0, r4, #0 + bl FUN_02016A18 +_0225489C: + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022548A0: .word MOD26_02254A4C +_022548A4: .word MOD26_02254A30 + thumb_func_end MOD26_02254854 + + thumb_func_start MOD26_022548A8 +MOD26_022548A8: ; 0x022548A8 + push {r3, r4, r5, lr} + add r4, r2, #0 + mov r2, #0x1f + add r5, r0, #0 + lsl r2, r2, #4 + str r1, [r5, r2] + add r1, r5, #0 + add r1, #0xc + bl MOD26_022548E8 + mov r0, #0x7b + lsl r0, r0, #2 + add r1, r5, #0 + add r0, r5, r0 + add r1, #0xc + add r2, r4, #0 + bl MOD26_02254BD4 + cmp r0, #0 + beq _022548E4 + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + mov r0, #0x19 + str r0, [r5, #4] + mov r0, #0x15 + str r0, [r5, #8] + mov r0, #1 + pop {r3, r4, r5, pc} +_022548E4: + mov r0, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD26_022548A8 + + thumb_func_start MOD26_022548E8 +MOD26_022548E8: ; 0x022548E8 + push {r4, r5, r6, lr} + add r5, r0, #0 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r5, r0] + add r4, r1, #0 + bl MOD20_02252C3C + add r6, r0, #0 + bl FUN_0204C0CC + cmp r0, #0 + beq _0225490E + add r0, r5, #0 + add r1, r4, #0 + add r2, r6, #0 + bl MOD26_02254918 + pop {r4, r5, r6, pc} +_0225490E: + add r0, r4, #0 + bl MOD26_022549DC + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD26_022548E8 + + thumb_func_start MOD26_02254918 +MOD26_02254918: ; 0x02254918 + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + mov r1, #0x7d + add r5, r0, #0 + lsl r1, r1, #2 + add r0, r2, #0 + add r1, r5, r1 + bl FUN_0204C0D4 + mov r3, #0 + mov r7, #0x7d + mov ip, r3 + lsl r7, r7, #2 + mov r0, #3 +_02254934: + mov r2, #0 +_02254936: + asr r1, r3, #1 + lsr r1, r1, #0x1e + add r1, r3, r1 + asr r1, r1, #2 + add r1, r5, r1 + add r6, r3, #0 + lsl r6, r6, #0x1e + ldrb r1, [r1, r7] + lsr r6, r6, #0x1d + add r3, r3, #1 + asr r1, r6 + and r1, r0 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + add r1, r1, #1 + strb r1, [r4, r2] + add r2, r2, #1 + cmp r2, #0x18 + blt _02254936 + mov r1, ip + add r1, r1, #1 + add r4, #0x18 + mov ip, r1 + cmp r1, #0x14 + blt _02254934 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD26_02254918 + + thumb_func_start MOD26_0225496C +MOD26_0225496C: ; 0x0225496C + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r7, r1, #0 + mov r1, #0x7d + str r2, [sp] + lsl r1, r1, #2 + str r0, [sp, #4] + add r0, r0, r1 + mov r1, #0 + mov r2, #0x78 + bl MI_CpuFill8 + mov r5, #0 + mov ip, r5 +_02254988: + mov r4, #0 +_0225498A: + asr r0, r5, #1 + lsr r0, r0, #0x1e + add r0, r5, r0 + asr r1, r0, #2 + ldr r0, [sp, #4] + add r6, r5, #0 + add r3, r0, r1 + mov r0, #0x7d + lsl r0, r0, #2 + ldrb r2, [r3, r0] + ldrb r0, [r7, r4] + add r4, r4, #1 + add r5, r5, #1 + sub r1, r0, #1 + mov r0, #3 + and r0, r1 + lsl r1, r6, #0x1e + lsr r1, r1, #0x1d + lsl r0, r1 + add r1, r2, #0 + orr r1, r0 + mov r0, #0x7d + lsl r0, r0, #2 + strb r1, [r3, r0] + cmp r4, #0x18 + blt _0225498A + mov r0, ip + add r0, r0, #1 + add r7, #0x18 + mov ip, r0 + cmp r0, #0x14 + blt _02254988 + mov r2, #0x7d + ldr r1, [sp, #4] + lsl r2, r2, #2 + ldr r0, [sp] + add r1, r1, r2 + bl FUN_0204C0E8 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD26_0225496C + + thumb_func_start MOD26_022549DC +MOD26_022549DC: ; 0x022549DC + push {r4, r5} + mov r4, #0 + ldr r5, _02254A00 ; =0x02254DF0 + add r2, r4, #0 +_022549E4: + add r3, r2, #0 +_022549E6: + ldrb r1, [r5, r3] + strb r1, [r0, r3] + add r3, r3, #1 + cmp r3, #0x18 + blt _022549E6 + add r4, r4, #1 + add r5, #0x18 + add r0, #0x18 + cmp r4, #0x14 + blt _022549E4 + pop {r4, r5} + bx lr + nop +_02254A00: .word 0x02254DF0 + thumb_func_end MOD26_022549DC + + thumb_func_start MOD26_02254A04 +MOD26_02254A04: ; 0x02254A04 + push {r4, lr} + add r4, r0, #0 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD20_02252C3C + add r1, r4, #0 + add r2, r0, #0 + add r0, r4, #0 + add r1, #0xc + bl MOD26_0225496C + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD26_02254C04 + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, pc} + thumb_func_end MOD26_02254A04 + + thumb_func_start MOD26_02254A30 +MOD26_02254A30: ; 0x02254A30 + push {r4, lr} + add r4, r0, #0 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD20_02252C3C + add r2, r0, #0 + add r0, r4, #0 + add r4, #0xc + add r1, r4, #0 + bl MOD26_0225496C + pop {r4, pc} + thumb_func_end MOD26_02254A30 + + thumb_func_start MOD26_02254A4C +MOD26_02254A4C: ; 0x02254A4C + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _02254A7C + lsl r2, r1, #2 + ldr r1, _02254A80 ; =0x02254DE4 + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254A7C + add r0, r4, #0 + bl MOD26_02254A04 + add r0, r5, #0 + bl FUN_0200CAB4 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD20_022529A0 +_02254A7C: + pop {r3, r4, r5, pc} + nop +_02254A80: .word 0x02254DE4 + thumb_func_end MOD26_02254A4C + + thumb_func_start MOD26_02254A84 +MOD26_02254A84: ; 0x02254A84 + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD26_02254A84 + + thumb_func_start MOD26_02254A8C +MOD26_02254A8C: ; 0x02254A8C + ldrb r2, [r0, #2] + cmp r2, #0 + bne _02254A94 + b _02254A96 +_02254A94: + mov r1, #2 +_02254A96: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD26_02254A8C + + thumb_func_start MOD26_02254AA0 +MOD26_02254AA0: ; 0x02254AA0 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254AB0 + cmp r0, #1 + beq _02254AC4 + b _02254AE6 +_02254AB0: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl MOD26_02254C10 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254AE6 +_02254AC4: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #0 + bl MOD26_02254C34 + cmp r0, #0 + beq _02254AE6 + mov r0, #0x1f + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD26_02254A8C +_02254AE6: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD26_02254AA0 + + thumb_func_start MOD26_02254AEC +MOD26_02254AEC: ; 0x02254AEC + push {r3, r4, r5, lr} + sub sp, #8 + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _02254B04 + mov r1, #2 + bl MOD26_02254A8C + add sp, #8 + mov r0, #0 + pop {r3, r4, r5, pc} +_02254B04: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #1 + bl MOD26_02254C34 + cmp r0, #0 + beq _02254B90 + add r0, sp, #4 + add r1, sp, #0 + bl MOD20_02252B68 + cmp r0, #0 + beq _02254B90 + ldr r1, [sp, #4] + cmp r1, #0x10 + blo _02254B90 + ldr r0, [sp] + cmp r0, #0x10 + blo _02254B90 + sub r1, #0x10 + lsr r2, r1, #3 + sub r0, #0x10 + lsr r1, r0, #3 + str r2, [sp, #4] + str r1, [sp] + cmp r2, #0x18 + bhs _02254B90 + cmp r1, #0x14 + bhs _02254B90 + ldr r0, [r4, #4] + cmp r0, r2 + bne _02254B54 + ldr r0, [r4, #8] + cmp r0, r1 + bne _02254B54 + bl FUN_02020AA4 + cmp r0, #1 + bne _02254B90 +_02254B54: + ldr r2, [sp] + add r0, r4, #0 + mov r1, #0x18 + add r3, r2, #0 + add r0, #0xc + mul r3, r1 + add r5, r0, r3 + ldr r3, [sp, #4] + ldrb r2, [r5, r3] + add r2, r2, #1 + strb r2, [r5, r3] + ldr r2, [sp] + mul r1, r2 + add r2, r0, r1 + ldr r1, [sp, #4] + ldrb r0, [r2, r1] + cmp r0, #4 + bls _02254B7C + mov r0, #1 + strb r0, [r2, r1] +_02254B7C: + ldr r0, [sp, #4] + mov r1, #1 + str r0, [r4, #4] + ldr r0, [sp] + str r0, [r4, #8] + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD26_02254C10 +_02254B90: + mov r0, #0 + add sp, #8 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD26_02254AEC + + thumb_func_start MOD26_02254B98 +MOD26_02254B98: ; 0x02254B98 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254BA8 + cmp r0, #1 + beq _02254BBC + b _02254BCE +_02254BA8: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + mov r1, #2 + bl MOD26_02254C10 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254BCE +_02254BBC: + mov r0, #0x7b + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl MOD26_02254C40 + cmp r0, #0 + beq _02254BCE + mov r0, #1 + pop {r4, pc} +_02254BCE: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD26_02254B98 + + thumb_func_start MOD26_02254BD4 +MOD26_02254BD4: ; 0x02254BD4 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x30 + bl FUN_02016998 + add r4, r0, #0 + beq _02254C00 + add r0, #8 + mov r1, #8 + bl MOD20_022536F4 + str r6, [r4] + bl MOD20_02252D34 + str r0, [r4, #4] + cmp r0, #0 + beq _02254C00 + str r4, [r5] + mov r0, #1 + pop {r4, r5, r6, pc} +_02254C00: + mov r0, #0 + pop {r4, r5, r6, pc} + thumb_func_end MOD26_02254BD4 + + thumb_func_start MOD26_02254C04 +MOD26_02254C04: ; 0x02254C04 + push {r3, lr} + cmp r0, #0 + beq _02254C0E + bl FUN_02016A18 +_02254C0E: + pop {r3, pc} + thumb_func_end MOD26_02254C04 + + thumb_func_start MOD26_02254C10 +MOD26_02254C10: ; 0x02254C10 + 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, _02254C30 ; =0x02254FF0 + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254C30: .word 0x02254FF0 + thumb_func_end MOD26_02254C10 + + thumb_func_start MOD26_02254C34 +MOD26_02254C34: ; 0x02254C34 + ldr r3, _02254C3C ; =MOD20_02253794 + add r0, #8 + bx r3 + nop +_02254C3C: .word MOD20_02253794 + thumb_func_end MOD26_02254C34 + + thumb_func_start MOD26_02254C40 +MOD26_02254C40: ; 0x02254C40 + ldr r3, _02254C48 ; =MOD20_022537B8 + add r0, #8 + bx r3 + nop +_02254C48: .word MOD20_022537B8 + thumb_func_end MOD26_02254C40 + + thumb_func_start MOD26_02254C4C +MOD26_02254C4C: ; 0x02254C4C + 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 MOD26_02254C4C + + thumb_func_start MOD26_02254C60 +MOD26_02254C60: ; 0x02254C60 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r0, r4, #0 + bl MOD20_022538A0 + add r5, r0, #0 + ldr r0, [r5, #4] + ldr r2, _02254CB8 ; =0x02254FD4 + mov r1, #6 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r5, #4] + bl MOD26_02254CC4 + ldr r0, [r5, #4] + ldr r1, [r5] + bl MOD26_02254DAC + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + ldr r0, [r5, #4] + mov r1, #6 + bl FUN_02017CD0 + ldr r1, _02254CBC ; =0x04001000 + ldr r0, _02254CC0 ; =0xFFFFE0FF + ldr r3, [r1] + ldr r2, [r1] + str r3, [sp] + and r0, r2 + lsl r2, r3, #0x13 + lsr r3, r2, #0x1b + mov r2, #4 + orr r2, r3 + lsl r2, r2, #8 + orr r0, r2 + str r0, [r1] + add r0, r4, #0 + bl MOD26_02254C4C + pop {r3, r4, r5, pc} + .align 2, 0 +_02254CB8: .word 0x02254FD4 +_02254CBC: .word 0x04001000 +_02254CC0: .word 0xFFFFE0FF + thumb_func_end MOD26_02254C60 + + thumb_func_start MOD26_02254CC4 +MOD26_02254CC4: ; 0x02254CC4 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x20 + str r0, [sp, #4] + mov r0, #8 + lsl r1, r0, #6 + bl FUN_02016998 + str r0, [sp, #0x1c] + cmp r0, #0 + beq _02254D68 + mov r0, #0 + str r0, [sp, #0x18] + str r0, [sp, #0x14] + str r0, [sp, #0x10] + str r0, [sp, #0xc] + str r0, [sp, #8] + add r7, r0, #0 + add r6, r0, #0 + add r4, r0, #0 + add r5, r0, #0 +_02254CEC: + ldr r1, [sp, #0xc] + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x1c] + orr r1, r0 + ldr r0, [sp, #8] + orr r0, r1 + orr r0, r7 + orr r0, r6 + orr r0, r4 + add r1, r5, #0 + orr r1, r0 + ldr r0, [sp, #0x18] + orr r0, r1 + ldr r1, [sp, #0x14] + add r1, r2, r1 + mov r2, #0x20 + bl MIi_CpuClearFast + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x10] + add r0, #0x20 + str r0, [sp, #0x14] + mov r0, #1 + lsl r0, r0, #0x18 + add r0, r1, r0 + str r0, [sp, #0x10] + mov r0, #1 + ldr r1, [sp, #0xc] + lsl r0, r0, #0x1c + add r0, r1, r0 + str r0, [sp, #0xc] + mov r0, #1 + ldr r1, [sp, #8] + lsl r0, r0, #0x14 + add r0, r1, r0 + str r0, [sp, #8] + mov r0, #1 + lsl r0, r0, #0x10 + add r7, r7, r0 + lsr r0, r0, #4 + add r6, r6, r0 + mov r0, #1 + lsl r0, r0, #8 + add r4, r4, r0 + ldr r0, [sp, #0x18] + add r5, #0x10 + add r0, r0, #1 + str r0, [sp, #0x18] + cmp r0, #0x10 + blt _02254CEC + mov r0, #0 + str r0, [sp] + mov r3, #2 + ldr r0, [sp, #4] + ldr r2, [sp, #0x1c] + mov r1, #6 + lsl r3, r3, #8 + bl FUN_02017E14 + ldr r0, [sp, #0x1c] + bl FUN_02016A18 +_02254D68: + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD26_02254CC4 + + thumb_func_start MOD26_02254D6C +MOD26_02254D6C: ; 0x02254D6C + push {r3, r4, r5, lr} + add r5, r1, #0 + add r0, r5, #0 + bl MOD20_022538A0 + add r4, r0, #0 + ldr r0, [r4, #4] + ldr r1, [r4] + bl MOD26_02254DAC + ldr r0, [r4, #4] + mov r1, #6 + bl FUN_02017CD0 + add r0, r5, #0 + bl MOD26_02254C4C + pop {r3, r4, r5, pc} + thumb_func_end MOD26_02254D6C + + thumb_func_start MOD26_02254D90 +MOD26_02254D90: ; 0x02254D90 + 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 MOD26_02254C4C + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD26_02254D90 + + thumb_func_start MOD26_02254DAC +MOD26_02254DAC: ; 0x02254DAC + push {r3, r4, r5, r6, r7, lr} + add r4, r1, #0 + mov r1, #6 + bl FUN_0201886C + mov r5, #0 + ldr r1, _02254DE0 ; =0x02254FD0 + add r0, #0x84 + add r2, r5, #0 +_02254DBE: + add r3, r2, #0 + add r6, r0, #0 +_02254DC2: + ldrb r7, [r4, r3] + add r3, r3, #1 + add r7, r1, r7 + sub r7, r7, #1 + ldrb r7, [r7] + strh r7, [r6] + add r6, r6, #2 + cmp r3, #0x18 + blt _02254DC2 + add r5, r5, #1 + add r0, #0x40 + add r4, #0x18 + cmp r5, #0x14 + blt _02254DBE + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02254DE0: .word 0x02254FD0 + thumb_func_end MOD26_02254DAC + + .section .data + ; 0x02254DE4 + .incbin "baserom.nds", 0x289BA4, 0x25C diff --git a/arm9/modules/27/asm/module_27.s b/arm9/modules/27/asm/module_27.s new file mode 100644 index 00000000..b9a2d1ca --- /dev/null +++ b/arm9/modules/27/asm/module_27.s @@ -0,0 +1,1453 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD27_02254840 +MOD27_02254840: ; 0x02254840 + ldr r3, _02254848 ; =MOD20_02252978 + ldr r0, _0225484C ; =MOD27_02254854 + ldr r1, _02254850 ; =MOD27_0225492C + bx r3 + .align 2, 0 +_02254848: .word MOD20_02252978 +_0225484C: .word MOD27_02254854 +_02254850: .word MOD27_0225492C + thumb_func_end MOD27_02254840 + + thumb_func_start MOD27_02254854 +MOD27_02254854: ; 0x02254854 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #8 + mov r1, #0x7c + 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 MOD27_0225489C + cmp r0, #0 + beq _0225488C + ldr r0, _02254898 ; =MOD27_022548F8 + 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 MOD27_022548F8 + thumb_func_end MOD27_02254854 + + thumb_func_start MOD27_0225489C +MOD27_0225489C: ; 0x0225489C + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r1, #0 + add r0, #0x74 + add r1, r5, #4 + bl MOD27_02254AF0 + cmp r0, #0 + beq _022548E0 + mov r0, #0 + strb r0, [r5] + strb r0, [r5, #1] + strb r0, [r5, #2] + add r0, r4, #0 + bl MOD20_02252C40 + bl FUN_0206BB1C + add r1, r0, #0 + add r0, r5, #4 + bl MOD27_02254A48 + add r0, r5, #0 + mov r1, #0 + add r0, #0x68 + strh r1, [r0] + add r0, r5, #0 + add r0, #0x6a + strh r1, [r0] + str r1, [r5, #0x6c] + str r1, [r5, #0x70] + str r4, [r5, #0x78] + mov r0, #1 + pop {r3, r4, r5, pc} +_022548E0: + mov r0, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD27_0225489C + + thumb_func_start MOD27_022548E4 +MOD27_022548E4: ; 0x022548E4 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x74] + bl MOD27_02254B88 + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD27_022548E4 + + thumb_func_start MOD27_022548F8 +MOD27_022548F8: ; 0x022548F8 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldrb r1, [r4] + add r5, r0, #0 + cmp r1, #3 + bhs _02254924 + lsl r2, r1, #2 + ldr r1, _02254928 ; =0x0225533C + add r0, r4, #0 + ldr r1, [r1, r2] + blx r1 + cmp r0, #0 + beq _02254924 + add r0, r4, #0 + bl MOD27_022548E4 + add r0, r5, #0 + bl FUN_0200CAB4 + ldr r0, [r4, #0x78] + bl MOD20_022529A0 +_02254924: + pop {r3, r4, r5, pc} + nop +_02254928: .word 0x0225533C + thumb_func_end MOD27_022548F8 + + thumb_func_start MOD27_0225492C +MOD27_0225492C: ; 0x0225492C + mov r1, #1 + strb r1, [r0, #2] + bx lr + .align 2, 0 + thumb_func_end MOD27_0225492C + + thumb_func_start MOD27_02254934 +MOD27_02254934: ; 0x02254934 + ldrb r2, [r0, #2] + cmp r2, #0 + bne _0225493C + b _0225493E +_0225493C: + mov r1, #2 +_0225493E: + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 + thumb_func_end MOD27_02254934 + + thumb_func_start MOD27_02254948 +MOD27_02254948: ; 0x02254948 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254958 + cmp r0, #1 + beq _02254968 + b _02254982 +_02254958: + ldr r0, [r4, #0x74] + mov r1, #0 + bl MOD27_02254BB8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254982 +_02254968: + ldr r0, [r4, #0x74] + mov r1, #0 + bl MOD27_02254BDC + cmp r0, #0 + beq _02254982 + ldr r0, [r4, #0x78] + bl MOD20_0225298C + add r0, r4, #0 + mov r1, #1 + bl MOD27_02254934 +_02254982: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD27_02254948 + + thumb_func_start MOD27_02254988 +MOD27_02254988: ; 0x02254988 + push {r4, lr} + add r4, r0, #0 + ldrb r1, [r4, #2] + cmp r1, #0 + beq _0225499C + mov r1, #2 + bl MOD27_02254934 + mov r0, #0 + pop {r4, pc} +_0225499C: + ldr r0, [r4, #0x74] + mov r1, #2 + bl MOD27_02254BDC + cmp r0, #0 + beq _02254A06 + add r0, r4, #0 + add r1, r4, #0 + add r0, #0x6c + add r1, #0x70 + bl MOD20_02252B68 + add r1, r4, #0 + add r1, #0x68 + strh r0, [r1] + add r0, r4, #0 + add r0, #0x68 + ldrh r0, [r0] + cmp r0, #0 + beq _02254A06 + bl FUN_02020AA4 + add r1, r4, #0 + add r1, #0x6a + strh r0, [r1] + add r0, r4, #0 + add r0, #0x6a + ldrh r0, [r0] + cmp r0, #0 + beq _02254A02 + ldr r0, [r4, #0x6c] + ldr r1, [r4, #0x70] + ldr r2, [r4, #4] + bl MOD27_022551F4 + ldr r1, [r4, #4] + cmp r0, r1 + blo _02254A02 + ldr r0, [r4, #0x78] + bl MOD20_02252C40 + bl FUN_0206BB1C + add r1, r0, #0 + add r0, r4, #4 + bl MOD27_02254A48 + ldr r0, [r4, #0x74] + mov r1, #2 + bl MOD27_02254BB8 +_02254A02: + mov r0, #0 + pop {r4, pc} +_02254A06: + mov r0, #0 + str r0, [r4, #0x6c] + str r0, [r4, #0x70] + add r4, #0x6a + strh r0, [r4] + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD27_02254988 + + thumb_func_start MOD27_02254A14 +MOD27_02254A14: ; 0x02254A14 + push {r4, lr} + add r4, r0, #0 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _02254A24 + cmp r0, #1 + beq _02254A34 + b _02254A42 +_02254A24: + ldr r0, [r4, #0x74] + mov r1, #1 + bl MOD27_02254BB8 + ldrb r0, [r4, #1] + add r0, r0, #1 + strb r0, [r4, #1] + b _02254A42 +_02254A34: + ldr r0, [r4, #0x74] + bl MOD27_02254BE8 + cmp r0, #0 + beq _02254A42 + mov r0, #1 + pop {r4, pc} +_02254A42: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD27_02254A14 + + thumb_func_start MOD27_02254A48 +MOD27_02254A48: ; 0x02254A48 + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + str r0, [sp] + add r0, r1, #0 + str r1, [sp, #4] + bl FUN_0206B9AC + ldr r1, [sp] + mov r6, #0 + str r0, [r1] + cmp r0, #0 + ble _02254AEC + add r5, r1, #0 +_02254A62: + ldr r0, [sp, #4] + add r1, r6, #0 + bl FUN_0206B9B0 + add r4, r0, #0 + bl FUN_020669D4 + add r7, r0, #0 + add r0, r4, #0 + bl FUN_0206B688 + str r0, [r5, #4] + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl FUN_020671BC + strh r0, [r5, #8] + add r0, r4, #0 + mov r1, #0xa2 + mov r2, #0 + bl FUN_020671BC + strh r0, [r5, #0xa] + add r0, r4, #0 + mov r1, #0xa3 + mov r2, #0 + bl FUN_020671BC + strh r0, [r5, #0xc] + add r0, r4, #0 + mov r1, #6 + mov r2, #0 + bl FUN_020671BC + strh r0, [r5, #0xe] + add r0, r4, #0 + mov r1, #0x9f + mov r2, #0 + bl FUN_020671BC + cmp r0, #0 + beq _02254ABC + mov r0, #1 + b _02254ABE +_02254ABC: + mov r0, #0 +_02254ABE: + strh r0, [r5, #0x10] + add r0, r4, #0 + mov r1, #0x4c + mov r2, #0 + bl FUN_020671BC + strb r0, [r5, #0x12] + add r0, r4, #0 + mov r1, #0x70 + mov r2, #0 + bl FUN_020671BC + strb r0, [r5, #0x13] + add r0, r4, #0 + add r1, r7, #0 + bl FUN_02066A20 + ldr r0, [sp] + add r6, r6, #1 + ldr r0, [r0] + add r5, #0x10 + cmp r6, r0 + blt _02254A62 +_02254AEC: + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD27_02254A48 + + thumb_func_start MOD27_02254AF0 +MOD27_02254AF0: ; 0x02254AF0 + push {r4, r5, r6, r7, lr} + sub sp, #0xc + add r4, r1, #0 + mov r1, #0xe3 + str r0, [sp, #4] + mov r0, #8 + lsl r1, r1, #2 + bl FUN_02016998 + str r0, [sp, #8] + cmp r0, #0 + beq _02254B82 + add r0, #0xc + mov r1, #8 + bl MOD20_022536F4 + ldr r0, [sp, #8] + str r4, [r0] + bl MOD20_02252D34 + ldr r1, [sp, #8] + str r0, [r1, #4] + bl MOD20_02252D24 + ldr r1, [sp, #8] + mov r6, #0 + str r0, [r1, #8] + add r0, r1, #0 + str r6, [r0, #0x38] + add r0, #0xf4 + add r4, r1, #0 + str r6, [r0] + add r4, #0x3c + add r5, r1, #0 + add r7, r6, #0 +_02254B36: + add r0, r4, #0 + bl FUN_0201901C + add r0, r5, #0 + add r0, #0x9c + str r7, [r0] + add r0, r5, #0 + add r0, #0xb4 + add r6, r6, #1 + str r7, [r0] + add r4, #0x10 + add r5, r5, #4 + cmp r6, #6 + blt _02254B36 + mov r0, #8 + str r0, [sp] + ldr r0, [sp, #8] + mov r1, #0xc + add r0, #0xcc + mov r2, #5 + mov r3, #6 + bl MOD20_02253FBC + mov r0, #8 + str r0, [sp] + ldr r0, [sp, #8] + mov r1, #0xc + add r0, #0xe0 + mov r2, #0x6b + mov r3, #0x6c + bl MOD20_02253FBC + ldr r1, [sp, #8] + ldr r0, [sp, #4] + add sp, #0xc + str r1, [r0] + mov r0, #1 + pop {r4, r5, r6, r7, pc} +_02254B82: + mov r0, #0 + add sp, #0xc + pop {r4, r5, r6, r7, pc} + thumb_func_end MOD27_02254AF0 + + thumb_func_start MOD27_02254B88 +MOD27_02254B88: ; 0x02254B88 + push {r4, lr} + add r4, r0, #0 + beq _02254BB6 + bl MOD27_02255250 + add r0, r4, #0 + add r0, #0xcc + bl MOD20_02254014 + add r0, r4, #0 + add r0, #0xe0 + bl MOD20_02254014 + add r0, r4, #0 + add r0, #0xf4 + ldr r0, [r0] + cmp r0, #0 + beq _02254BB0 + bl FUN_0200CAB4 +_02254BB0: + add r0, r4, #0 + bl FUN_02016A18 +_02254BB6: + pop {r4, pc} + thumb_func_end MOD27_02254B88 + + thumb_func_start MOD27_02254BB8 +MOD27_02254BB8: ; 0x02254BB8 + push {lr} + sub sp, #0xc + add r2, r0, #0 + add r0, #0xc + str r0, [sp] + mov r0, #2 + str r0, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + ldr r0, _02254BD8 ; =0x02255394 + ldr r3, [r2] + bl MOD20_022537E0 + add sp, #0xc + pop {pc} + nop +_02254BD8: .word 0x02255394 + thumb_func_end MOD27_02254BB8 + + thumb_func_start MOD27_02254BDC +MOD27_02254BDC: ; 0x02254BDC + ldr r3, _02254BE4 ; =MOD20_02253794 + add r0, #0xc + bx r3 + nop +_02254BE4: .word MOD20_02253794 + thumb_func_end MOD27_02254BDC + + thumb_func_start MOD27_02254BE8 +MOD27_02254BE8: ; 0x02254BE8 + ldr r3, _02254BF0 ; =MOD20_022537B8 + add r0, #0xc + bx r3 + nop +_02254BF0: .word MOD20_022537B8 + thumb_func_end MOD27_02254BE8 + + thumb_func_start MOD27_02254BF4 +MOD27_02254BF4: ; 0x02254BF4 + push {r4, lr} + add r4, r0, #0 + bl MOD20_022538A0 + add r0, #0xc + add r1, r4, #0 + bl MOD20_02253888 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD27_02254BF4 + + thumb_func_start MOD27_02254C08 +MOD27_02254C08: ; 0x02254C08 + push {r3, r4, r5, r6, lr} + sub sp, #0x14 + add r6, r1, #0 + add r0, r6, #0 + bl MOD20_022538A0 + add r4, r0, #0 + ldr r0, [r4, #4] + ldr r2, _02254CBC ; =0x02255378 + 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, [r4, #4] + mov r0, #0xc + mov r1, #0x6a + mov r3, #6 + bl FUN_0200687C + mov r3, #0 + lsr r5, r0, #5 + str r3, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x18 + str r0, [sp, #8] + str r3, [sp, #0xc] + ldr r0, [r4, #4] + mov r1, #6 + mov r2, #5 + bl FUN_02018540 + mov r0, #0 + add r1, r0, #0 + bl MOD20_02252D7C + str r5, [r4, #0x34] + ldr r1, [r4] + add r0, r4, #0 + add r2, r5, #0 + bl MOD27_02254CC8 + ldr r0, [r4, #4] + mov r1, #6 + bl FUN_02017CD0 + mov r0, #0xf + mov r1, #1 + bl MOD20_0225396C + mov r0, #2 + bl MOD20_022539C4 + ldr r1, [r4] + add r0, r4, #0 + bl MOD27_02254F18 + ldr r1, [r4] + add r0, r4, #0 + bl MOD27_02254FAC + add r0, r4, #0 + bl MOD27_022550C8 + ldr r1, _02254CC0 ; =0x04001000 + ldr r0, _02254CC4 ; =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, r6, #0 + bl MOD27_02254BF4 + add sp, #0x14 + pop {r3, r4, r5, r6, pc} + nop +_02254CBC: .word 0x02255378 +_02254CC0: .word 0x04001000 +_02254CC4: .word 0xFFFFE0FF + thumb_func_end MOD27_02254C08 + + thumb_func_start MOD27_02254CC8 +MOD27_02254CC8: ; 0x02254CC8 + push {r4, r5, r6, r7, lr} + sub sp, #0x24 + str r0, [sp, #0x14] + mov r0, #0 + str r0, [sp, #0x20] + add r0, r1, #0 + str r1, [sp, #0x18] + ldr r1, [r0] + str r2, [sp, #0x1c] + cmp r1, #0 + ble _02254D54 + ldr r4, [sp, #0x14] + ldr r7, [sp, #0x20] + ldr r5, _02254D5C ; =0x02255360 + ldr r6, [sp, #0x18] + add r4, #0x3c +_02254CE8: + add r0, r4, #0 + bl FUN_0201901C + ldrh r0, [r5, #2] + add r1, r4, #0 + mov r2, #6 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #8 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x1c] + add r0, r0, r7 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + str r0, [sp, #0x10] + ldrh r3, [r5] + ldr r0, [sp, #0x14] + lsl r3, r3, #0x18 + ldr r0, [r0, #4] + lsr r3, r3, #0x18 + bl FUN_02019064 + add r0, r4, #0 + bl FUN_02019270 + ldr r1, [sp, #0x14] + add r0, r4, #0 + bl MOD27_02254D60 + ldrh r0, [r6, #0xa] + ldrh r1, [r6, #0xc] + bl MOD27_02254EEC + add r1, r0, #0 + add r0, r4, #0 + bl MOD27_02254EAC + ldr r0, [sp, #0x20] + add r4, #0x10 + add r0, r0, #1 + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + add r7, #8 + ldr r1, [r0] + ldr r0, [sp, #0x20] + add r5, r5, #4 + add r6, #0x10 + cmp r0, r1 + blt _02254CE8 +_02254D54: + ldr r0, [sp, #0x14] + str r1, [r0, #0x38] + add sp, #0x24 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_02254D5C: .word 0x02255360 + thumb_func_end MOD27_02254CC8 + + thumb_func_start MOD27_02254D60 +MOD27_02254D60: ; 0x02254D60 + push {r4, r5, r6, lr} + sub sp, #0x10 + add r5, r0, #0 + ldrb r0, [r5, #6] + add r4, r1, #0 + mov r2, #1 + sub r0, r0, #1 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + str r2, [sp, #4] + str r2, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldrb r3, [r5, #5] + ldr r0, [r4, #4] + mov r1, #6 + sub r3, r3, #1 + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl FUN_02018540 + ldrb r0, [r5, #6] + mov r1, #6 + mov r2, #2 + sub r0, r0, #1 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + ldrb r0, [r5, #7] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldrb r3, [r5, #5] + ldr r0, [r4, #4] + bl FUN_02018540 + ldrb r0, [r5, #6] + ldr r2, _02254E98 ; =0x00000401 + mov r1, #6 + sub r0, r0, #1 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldrb r6, [r5, #5] + ldrb r3, [r5, #7] + ldr r0, [r4, #4] + add r3, r6, r3 + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl FUN_02018540 + ldrb r0, [r5, #6] + mov r1, #6 + add r2, r1, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldrb r0, [r5, #8] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldrb r3, [r5, #5] + ldr r0, [r4, #4] + sub r3, r3, #1 + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl FUN_02018540 + ldrb r0, [r5, #6] + ldr r2, _02254E9C ; =0x00000406 + mov r1, #6 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldrb r0, [r5, #8] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldrb r6, [r5, #5] + ldrb r3, [r5, #7] + ldr r0, [r4, #4] + add r3, r6, r3 + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl FUN_02018540 + ldrb r1, [r5, #6] + ldrb r0, [r5, #8] + ldr r2, _02254EA0 ; =0x00000801 + add r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldrb r3, [r5, #5] + ldr r0, [r4, #4] + mov r1, #6 + sub r3, r3, #1 + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl FUN_02018540 + ldrb r1, [r5, #6] + ldrb r0, [r5, #8] + ldr r2, _02254EA4 ; =0x00000802 + add r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + ldrb r0, [r5, #7] + mov r1, #6 + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldrb r3, [r5, #5] + ldr r0, [r4, #4] + bl FUN_02018540 + ldrb r1, [r5, #6] + ldrb r0, [r5, #8] + ldr r2, _02254EA8 ; =0x00000C01 + add r0, r1, r0 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + ldr r0, [r4, #4] + ldrb r4, [r5, #5] + ldrb r3, [r5, #7] + mov r1, #6 + add r3, r4, r3 + lsl r3, r3, #0x18 + lsr r3, r3, #0x18 + bl FUN_02018540 + add sp, #0x10 + pop {r4, r5, r6, pc} + nop +_02254E98: .word 0x00000401 +_02254E9C: .word 0x00000406 +_02254EA0: .word 0x00000801 +_02254EA4: .word 0x00000802 +_02254EA8: .word 0x00000C01 + thumb_func_end MOD27_02254D60 + + thumb_func_start MOD27_02254EAC +MOD27_02254EAC: ; 0x02254EAC + push {r3, r4, r5, lr} + sub sp, #8 + add r4, r1, #0 + mov r1, #0x40 + str r1, [sp] + mov r1, #8 + mov r2, #0 + str r1, [sp, #4] + mov r1, #4 + add r3, r2, #0 + add r5, r0, #0 + bl FUN_020196F4 + cmp r4, #0 + beq _02254EE0 + lsl r0, r4, #0x10 + lsr r0, r0, #0x10 + str r0, [sp] + mov r0, #8 + mov r2, #0 + str r0, [sp, #4] + add r0, r5, #0 + mov r1, #0xf + add r3, r2, #0 + bl FUN_020196F4 +_02254EE0: + add r0, r5, #0 + bl FUN_02019548 + add sp, #8 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD27_02254EAC + + thumb_func_start MOD27_02254EEC +MOD27_02254EEC: ; 0x02254EEC + push {r3, lr} + cmp r0, #0 + bne _02254EF6 + mov r0, #0 + pop {r3, pc} +_02254EF6: + cmp r0, r1 + bne _02254EFE + mov r0, #0x40 + pop {r3, pc} +_02254EFE: + lsl r0, r0, #0xc + bl _u32_div_f + lsl r0, r0, #5 + lsr r0, r0, #0xc + bne _02254F0E + mov r0, #1 + b _02254F14 +_02254F0E: + cmp r0, #0x20 + bne _02254F14 + mov r0, #0x1f +_02254F14: + lsl r0, r0, #1 + pop {r3, pc} + thumb_func_end MOD27_02254EEC + + thumb_func_start MOD27_02254F18 +MOD27_02254F18: ; 0x02254F18 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x28 + mov r3, #0 + str r3, [sp] + mov r2, #1 + str r0, [sp, #0xc] + str r1, [sp, #0x10] + str r2, [sp, #4] + mov r0, #8 + str r0, [sp, #8] + mov r0, #0xc + mov r1, #0x6d + bl FUN_02006A34 + mov r4, #0 + add r0, sp, #0x18 + strb r4, [r0, #0xa] + mov r1, #2 + strb r1, [r0, #0xb] + strb r4, [r0, #0xc] + strb r4, [r0, #0xd] + ldr r0, [sp, #0x10] + ldr r0, [r0] + cmp r0, #0 + ble _02254FA2 + ldr r7, [sp, #0xc] + ldr r6, [sp, #0x10] + add r0, r7, #0 + str r0, [sp, #0x14] + add r0, #0xe0 + ldr r5, _02254FA8 ; =0x02255348 + str r0, [sp, #0x14] +_02254F58: + ldrh r0, [r6, #0xe] + cmp r0, #0 + beq _02254F92 + bl FUN_0206EA98 + cmp r0, #0 + beq _02254F6A + mov r1, #1 + b _02254F6C +_02254F6A: + mov r1, #0 +_02254F6C: + add r0, sp, #0x18 + strh r1, [r0, #8] + ldrh r0, [r5] + ldr r2, [sp, #0x14] + add r1, sp, #0x18 + add r0, #0x1c + lsl r0, r0, #0xc + str r0, [sp, #0x18] + ldrh r0, [r5, #2] + add r0, #0x15 + lsl r0, r0, #0xc + str r0, [sp, #0x1c] + ldr r0, [sp, #0xc] + ldr r0, [r0, #8] + bl MOD20_02253E74 + add r1, r7, #0 + add r1, #0xb4 + str r0, [r1] +_02254F92: + ldr r0, [sp, #0x10] + add r4, r4, #1 + ldr r0, [r0] + add r6, #0x10 + add r5, r5, #4 + add r7, r7, #4 + cmp r4, r0 + blt _02254F58 +_02254FA2: + add sp, #0x28 + pop {r3, r4, r5, r6, r7, pc} + nop +_02254FA8: .word 0x02255348 + thumb_func_end MOD27_02254F18 + + thumb_func_start MOD27_02254FAC +MOD27_02254FAC: ; 0x02254FAC + push {r4, r5, r6, r7, lr} + sub sp, #0x34 + str r0, [sp, #4] + str r1, [sp, #8] + mov r0, #0x13 + mov r1, #8 + bl FUN_02006670 + str r0, [sp, #0x14] + cmp r0, #0 + beq _022550C0 + mov r0, #0 + add r1, sp, #0x20 + strh r0, [r1, #0xc] + str r0, [sp, #0x10] + strb r0, [r1, #0xe] + mov r0, #2 + strb r0, [r1, #0xf] + mov r7, #1 + strb r7, [r1, #0x10] + ldr r0, [sp, #8] + strb r7, [r1, #0x11] + ldr r0, [r0] + cmp r0, #0 + ble _022550BA + ldr r5, [sp, #4] + mov r0, #8 + mov r1, #0x43 + str r0, [sp, #0xc] + lsl r1, r1, #2 + add r0, r5, #0 + add r0, r0, r1 + str r0, [sp, #0x18] + add r0, r5, #0 + str r0, [sp, #0x1c] + add r0, #0xcc + ldr r4, [sp, #8] + ldr r6, _022550C4 ; =0x02255348 + add r7, #0xff + str r0, [sp, #0x1c] +_02254FFC: + ldr r0, [sp, #0x18] + mov r3, #0xa + str r0, [sp] + ldr r0, [sp, #0x14] + ldr r1, [r4, #4] + mov r2, #0 + lsl r3, r3, #6 + bl FUN_02006814 + ldr r0, [sp, #0x18] + add r1, sp, #0x20 + bl FUN_020B0088 + ldr r0, [sp, #0x20] + mov r1, #2 + ldr r0, [r0, #0x14] + lsl r1, r1, #8 + bl DC_FlushRange + ldr r0, [sp, #0x20] + mov r2, #2 + ldr r0, [r0, #0x14] + add r1, r7, #0 + lsl r2, r2, #8 + bl GXS_LoadOBJ + ldrh r0, [r6] + ldr r2, [sp, #0x1c] + add r1, sp, #0x24 + lsl r0, r0, #0xc + str r0, [sp, #0x24] + ldrh r0, [r6, #2] + lsl r0, r0, #0xc + str r0, [sp, #0x28] + ldr r0, [sp, #4] + ldr r0, [r0, #8] + bl MOD20_02253E74 + add r1, r5, #0 + add r1, #0x9c + str r0, [r1] + add r0, r5, #0 + add r0, #0x9c + ldr r0, [r0] + ldr r1, [sp, #0xc] + bl MOD20_02253FA4 + add r0, r5, #0 + add r0, #0x9c + ldr r0, [r0] + mov r1, #4 + bl MOD20_02253F28 + ldrh r0, [r4, #0xa] + cmp r0, #0 + beq _02255072 + ldrh r0, [r4, #0x10] + cmp r0, #0 + beq _02255080 +_02255072: + add r0, r5, #0 + add r0, #0x9c + ldr r0, [r0] + mov r1, #1 + bl MOD20_02253F9C + b _02255098 +_02255080: + ldrh r0, [r4, #8] + ldrb r1, [r4, #0x13] + ldrb r2, [r4, #0x12] + bl FUN_0206B7BC + add r1, r0, #0 + add r0, r5, #0 + add r0, #0x9c + ldr r0, [r0] + add r1, r1, #2 + bl MOD20_02253F9C +_02255098: + mov r0, #2 + lsl r0, r0, #8 + add r7, r7, r0 + ldr r0, [sp, #0xc] + add r4, #0x10 + add r0, #0x10 + str r0, [sp, #0xc] + ldr r0, [sp, #0x10] + add r6, r6, #4 + add r0, r0, #1 + str r0, [sp, #0x10] + ldr r0, [sp, #8] + add r5, r5, #4 + ldr r1, [r0] + ldr r0, [sp, #0x10] + cmp r0, r1 + blt _02254FFC +_022550BA: + ldr r0, [sp, #0x14] + bl FUN_020066F4 +_022550C0: + add sp, #0x34 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_022550C4: .word 0x02255348 + thumb_func_end MOD27_02254FAC + + thumb_func_start MOD27_022550C8 +MOD27_022550C8: ; 0x022550C8 + push {r4, lr} + add r4, r0, #0 + mov r0, #1 + mov r1, #0 + lsl r0, r0, #8 + strb r1, [r4, r0] + add r0, r4, #0 + add r0, #0xf8 + str r4, [r0] + add r0, r4, #0 + ldr r1, [r4] + add r0, #0xfc + str r1, [r0] + add r1, r4, #0 + ldr r0, _022550F4 ; =MOD27_022550F8 + add r1, #0xf8 + mov r2, #1 + bl FUN_0200CA44 + add r4, #0xf4 + str r0, [r4] + pop {r4, pc} + .align 2, 0 +_022550F4: .word MOD27_022550F8 + thumb_func_end MOD27_022550C8 + + thumb_func_start MOD27_022550F8 +MOD27_022550F8: ; 0x022550F8 + push {r4, r5, r6, lr} + add r5, r1, #0 + ldrb r0, [r5, #8] + ldr r4, [r5, #4] + ldr r6, [r5] + cmp r0, #0 + beq _0225510C + cmp r0, #1 + beq _02255164 + pop {r4, r5, r6, pc} +_0225510C: + add r0, r4, #0 + add r0, #0x66 + ldrh r0, [r0] + cmp r0, #0 + beq _022551EA + ldr r0, [r4, #0x68] + ldr r1, [r4, #0x6c] + ldr r2, [r4] + bl MOD27_022551F4 + ldr r1, [r4] + cmp r0, r1 + bhs _022551EA + lsl r2, r0, #4 + add r1, r4, r2 + ldrh r3, [r1, #0xa] + cmp r3, #0 + beq _022551EA + ldrb r3, [r1, #0x12] + cmp r3, #0 + bne _022551EA + mov r3, #0 + strb r3, [r5, #9] + strb r3, [r5, #0xb] + strb r0, [r5, #0xa] + mov r3, #2 + str r3, [r5, #0x10] + ldrh r0, [r1, #0x10] + cmp r0, #0 + bne _02255150 + mov r0, #1 + strb r0, [r5, #0xc] + mov r0, #8 + b _02255154 +_02255150: + strb r3, [r5, #0xc] + mov r0, #4 +_02255154: + strb r0, [r5, #0xd] + mov r0, #1 + strb r0, [r5, #8] + add r0, r4, r2 + ldrh r0, [r0, #8] + bl MOD20_02252B48 + pop {r4, r5, r6, pc} +_02255164: + ldrb r1, [r5, #0xb] + ldrb r0, [r5, #0xd] + cmp r1, r0 + bne _022551A6 + add r0, r4, #0 + add r0, #0x64 + ldrh r0, [r0] + cmp r0, #0 + beq _02255186 + ldr r0, [r4, #0x68] + ldr r1, [r4, #0x6c] + ldr r2, [r4] + bl MOD27_022551F4 + ldrb r1, [r5, #0xa] + cmp r1, r0 + beq _022551A6 +_02255186: + ldrb r0, [r5, #0xa] + ldr r1, _022551EC ; =0x02255348 + ldr r3, _022551F0 ; =0x0225534A + lsl r2, r0, #2 + add r0, r6, r2 + ldrh r1, [r1, r2] + ldrh r2, [r3, r2] + add r0, #0x9c + ldr r0, [r0] + lsl r1, r1, #0xc + lsl r2, r2, #0xc + bl MOD20_02253F64 + mov r0, #0 + strb r0, [r5, #8] + pop {r4, r5, r6, pc} +_022551A6: + ldrb r0, [r5, #9] + cmp r0, #0 + bne _022551E6 + ldrb r0, [r5, #0xa] + ldr r1, _022551EC ; =0x02255348 + ldr r3, _022551F0 ; =0x0225534A + lsl r2, r0, #2 + add r0, r6, r2 + ldrh r1, [r1, r2] + add r0, #0x9c + ldrh r2, [r3, r2] + ldr r4, [r5, #0x10] + ldr r0, [r0] + add r2, r4, r2 + lsl r1, r1, #0xc + lsl r2, r2, #0xc + bl MOD20_02253F64 + ldrb r1, [r5, #0xb] + ldrb r0, [r5, #0xd] + cmp r1, r0 + bhs _022551D6 + add r0, r1, #1 + strb r0, [r5, #0xb] +_022551D6: + mov r0, #0 + ldr r1, [r5, #0x10] + mvn r0, r0 + mul r0, r1 + str r0, [r5, #0x10] + ldrb r0, [r5, #0xc] + strb r0, [r5, #9] + pop {r4, r5, r6, pc} +_022551E6: + sub r0, r0, #1 + strb r0, [r5, #9] +_022551EA: + pop {r4, r5, r6, pc} + .align 2, 0 +_022551EC: .word 0x02255348 +_022551F0: .word 0x0225534A + thumb_func_end MOD27_022550F8 + + thumb_func_start MOD27_022551F4 +MOD27_022551F4: ; 0x022551F4 + push {r3, r4, r5, r6, r7, lr} + mov lr, r0 + mov ip, r1 + add r7, r2, #0 + ldr r6, _02255248 ; =0x00000000 + beq _02255242 + ldr r3, _0225524C ; =0x02255348 +_02255202: + ldrh r1, [r3] + ldrh r4, [r3, #2] + mov r5, lr + add r0, r1, #0 + sub r0, #0x10 + add r2, r4, #0 + add r1, #0x10 + sub r5, r5, r0 + sub r0, r1, r0 + sub r2, #8 + cmp r5, r0 + bhs _0225521E + mov r0, #1 + b _02255220 +_0225521E: + mov r0, #0 +_02255220: + mov r1, ip + add r4, #0x18 + sub r1, r1, r2 + sub r2, r4, r2 + cmp r1, r2 + bhs _02255230 + mov r1, #1 + b _02255232 +_02255230: + mov r1, #0 +_02255232: + tst r0, r1 + beq _0225523A + add r0, r6, #0 + pop {r3, r4, r5, r6, r7, pc} +_0225523A: + add r6, r6, #1 + add r3, r3, #4 + cmp r6, r7 + blo _02255202 +_02255242: + add r0, r7, #0 + pop {r3, r4, r5, r6, r7, pc} + nop +_02255248: .word 0x00000000 +_0225524C: .word 0x02255348 + thumb_func_end MOD27_022551F4 + + thumb_func_start MOD27_02255250 +MOD27_02255250: ; 0x02255250 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + mov r6, #0 + add r4, r5, #0 + add r7, r6, #0 +_0225525A: + add r0, r4, #0 + add r0, #0x9c + ldr r1, [r0] + cmp r1, #0 + beq _02255270 + ldr r0, [r5, #8] + bl MOD20_02253F14 + add r0, r4, #0 + add r0, #0x9c + str r7, [r0] +_02255270: + add r0, r4, #0 + add r0, #0xb4 + ldr r1, [r0] + cmp r1, #0 + beq _02255288 + ldr r0, [r5, #8] + bl MOD20_02253F14 + add r1, r4, #0 + add r1, #0xb4 + mov r0, #0 + str r0, [r1] +_02255288: + add r6, r6, #1 + add r4, r4, #4 + cmp r6, #6 + blt _0225525A + ldr r0, [r5, #0x38] + mov r6, #0 + cmp r0, #0 + bls _022552AC + add r4, r5, #0 + add r4, #0x3c +_0225529C: + add r0, r4, #0 + bl FUN_02019178 + ldr r0, [r5, #0x38] + add r6, r6, #1 + add r4, #0x10 + cmp r6, r0 + blo _0225529C +_022552AC: + mov r0, #0 + str r0, [r5, #0x38] + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD27_02255250 + + thumb_func_start MOD27_022552B4 +MOD27_022552B4: ; 0x022552B4 + 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 MOD27_02254BF4 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD27_022552B4 + + thumb_func_start MOD27_022552D0 +MOD27_022552D0: ; 0x022552D0 + push {r4, r5, r6, lr} + sub sp, #0x10 + add r6, r1, #0 + add r0, r6, #0 + bl MOD20_022538A0 + add r5, r0, #0 + add r0, r6, #0 + bl MOD20_022538A4 + add r4, r0, #0 + add r0, r5, #0 + bl MOD27_02255250 + mov r3, #0 + str r3, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x18 + str r0, [sp, #8] + str r3, [sp, #0xc] + ldr r0, [r5, #4] + mov r1, #6 + mov r2, #5 + bl FUN_02018540 + add r0, r5, #0 + add r1, r4, #0 + bl MOD27_02254F18 + add r0, r5, #0 + add r1, r4, #0 + bl MOD27_02254FAC + ldr r2, [r5, #0x34] + add r0, r5, #0 + add r1, r4, #0 + bl MOD27_02254CC8 + ldr r0, [r5, #4] + mov r1, #6 + bl FUN_02017CD0 + ldr r0, _02255338 ; =0x00000669 + bl MOD20_02252B28 + add r0, r6, #0 + bl MOD27_02254BF4 + add sp, #0x10 + pop {r4, r5, r6, pc} + nop +_02255338: .word 0x00000669 + thumb_func_end MOD27_022552D0 + + .section .data + ; 0x0225533C + .incbin "baserom.nds", 0x28A8FC, 0xA4 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 |