mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-20 07:44:54 -05:00
3000 lines
51 KiB
ArmAsm
3000 lines
51 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "global.inc"
|
|
.section .text
|
|
.balign 4, 0
|
|
|
|
thumb_func_start MOD28_02254840
|
|
MOD28_02254840: ; 0x02254840
|
|
ldr r3, _02254848 ; =MOD20_02252978
|
|
ldr r0, _0225484C ; =MOD28_02254854
|
|
ldr r1, _02254850 ; =MOD28_022549F4
|
|
bx r3
|
|
.align 2, 0
|
|
_02254848: .word MOD20_02252978
|
|
_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 AllocFromHeap
|
|
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 FreeToHeap
|
|
_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 FreeToHeap
|
|
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 AllocFromHeap
|
|
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 FreeToHeap
|
|
_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 ; =MOD20_02253794
|
|
add r0, #8
|
|
bx r3
|
|
nop
|
|
_02254BF4: .word MOD20_02253794
|
|
thumb_func_end MOD28_02254BEC
|
|
|
|
thumb_func_start MOD28_02254BF8
|
|
MOD28_02254BF8: ; 0x02254BF8
|
|
ldr r3, _02254C00 ; =MOD20_022537B8
|
|
add r0, #8
|
|
bx r3
|
|
nop
|
|
_02254C00: .word MOD20_022537B8
|
|
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 NARC_ctor
|
|
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 NARC_AllocAndReadWholeMember
|
|
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 FreeToHeap
|
|
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 NARC_dtor
|
|
_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 rand_MT
|
|
mov r1, #0x3f
|
|
and r0, r1
|
|
sub r0, #0x20
|
|
lsl r4, r0, #0xc
|
|
bl rand_MT
|
|
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 ; =MOD20_02253F78
|
|
mov r1, #1
|
|
bx r3
|
|
nop
|
|
_02255358: .word MOD20_02253F78
|
|
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
|
|
|
|
.section .rodata
|
|
; 0x02255E78
|
|
.byte 0x01, 0x23, 0x46, 0x96, 0xC8, 0xFF, 0x00, 0x00, 0x11, 0x4A, 0x25, 0x02, 0x51, 0x4A, 0x25, 0x02
|
|
.byte 0xC1, 0x4A, 0x25, 0x02, 0x64, 0x96, 0xAF, 0xC8, 0x64, 0x96, 0xAF, 0xC8, 0xC5, 0x50, 0x25, 0x02
|
|
.byte 0xE5, 0x50, 0x25, 0x02, 0x29, 0x51, 0x25, 0x02, 0x3D, 0x51, 0x25, 0x02, 0x89, 0x51, 0x25, 0x02
|
|
.byte 0xB5, 0x53, 0x25, 0x02, 0x9D, 0x54, 0x25, 0x02, 0xB5, 0x55, 0x25, 0x02, 0x91, 0x56, 0x25, 0x02
|
|
.byte 0x69, 0x57, 0x25, 0x02, 0x0D, 0x58, 0x25, 0x02, 0x30, 0x00, 0x2C, 0x00, 0xB0, 0x00, 0x2C, 0x00
|
|
.byte 0x30, 0x00, 0x5C, 0x00, 0xB0, 0x00, 0x5C, 0x00, 0x30, 0x00, 0x8C, 0x00, 0xB0, 0x00, 0x8C, 0x00
|
|
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
.byte 0x01, 0x00, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
.byte 0x19, 0x4C, 0x25, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x4F, 0x25, 0x02
|
|
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
|
|
; .section .sinit
|
|
.global SDK_OVERLAY.MODULE_28.SINIT_START
|
|
.global SDK_OVERLAY.MODULE_28.SINIT_END
|
|
SDK_OVERLAY.MODULE_28.SINIT_START:
|
|
.word MOD28_02254840
|
|
.word 0
|
|
SDK_OVERLAY.MODULE_28.SINIT_END:
|
|
|
|
.section .data
|
|
; 0x02255F20
|
|
.byte 0x69, 0x63, 0x6F, 0x6E, 0x5B, 0x25, 0x64, 0x5D, 0x20, 0x52, 0x45, 0x46, 0x5B, 0x25, 0x64, 0x5D
|
|
.byte 0x0A, 0x00, 0x00, 0x00, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D
|
|
.byte 0x0A, 0x00, 0x00, 0x00, 0x20, 0x69, 0x63, 0x6F, 0x6E, 0x5B, 0x25, 0x64, 0x5D, 0x20, 0x44, 0x65
|
|
.byte 0x66, 0x61, 0x75, 0x6C, 0x74, 0x0A, 0x00, 0x00, 0x20, 0x69, 0x63, 0x6F, 0x6E, 0x5B, 0x25, 0x64
|
|
.byte 0x5D, 0x20, 0x52, 0x65, 0x61, 0x4C, 0x69, 0x6B, 0x65, 0x0A, 0x00, 0x00, 0x20, 0x69, 0x63, 0x6F
|
|
.byte 0x6E, 0x5B, 0x25, 0x64, 0x5D, 0x20, 0x52, 0x65, 0x61, 0x48, 0x61, 0x74, 0x65, 0x0A, 0x00, 0x00
|
|
.byte 0x20, 0x69, 0x63, 0x6F, 0x6E, 0x5B, 0x25, 0x64, 0x5D, 0x20, 0x54, 0x63, 0x67, 0x4C, 0x69, 0x6B
|
|
.byte 0x65, 0x0A, 0x00, 0x00, 0x20, 0x69, 0x63, 0x6F, 0x6E, 0x5B, 0x25, 0x64, 0x5D, 0x20, 0x54, 0x63
|
|
.byte 0x68, 0x48, 0x61, 0x74, 0x65, 0x0A, 0x00, 0x00, 0x20, 0x69, 0x63, 0x6F, 0x6E, 0x5B, 0x25, 0x64
|
|
.byte 0x5D, 0x20, 0x52, 0x65, 0x73, 0x65, 0x74, 0x21, 0x21, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|