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