mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
4632 lines
84 KiB
ArmAsm
4632 lines
84 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "itcm.inc"
|
|
|
|
.section .itcm,4,1,4
|
|
|
|
arm_func_start sub_01FF8000
|
|
sub_01FF8000: ; 0x01FF8000
|
|
stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, lr}
|
|
and r3, r3, #0xf
|
|
mov r6, #0
|
|
cmp r6, r2
|
|
bge _01FF80AC
|
|
_01FF8014:
|
|
ldrh r4, [r1]
|
|
and r4, r4, #0xf
|
|
cmp r4, #0
|
|
beq _01FF802C
|
|
mov r7, r3, lsl #4
|
|
orr r4, r4, r7
|
|
_01FF802C:
|
|
mov r5, r4
|
|
ldrh r4, [r1]
|
|
and r4, r4, #0xf0
|
|
cmp r4, #0
|
|
beq _01FF8048
|
|
mov r7, r3, lsl #8
|
|
orr r4, r4, r7
|
|
_01FF8048:
|
|
mov r4, r4, lsl #4
|
|
orr r5, r5, r4
|
|
strh r5, [r0]
|
|
add r0, r0, #2
|
|
ldrh r4, [r1]
|
|
and r4, r4, #0xf00
|
|
cmp r4, #0
|
|
beq _01FF8070
|
|
mov r7, r3, lsl #0xc
|
|
orr r4, r4, r7
|
|
_01FF8070:
|
|
mov r5, r4, lsr #8
|
|
ldrh r4, [r1]
|
|
and r4, r4, #0xf000
|
|
mov r4, r4, lsr #4
|
|
cmp r4, #0
|
|
beq _01FF8090
|
|
mov r7, r3, lsl #0xc
|
|
orr r4, r4, r7
|
|
_01FF8090:
|
|
orr r5, r5, r4
|
|
strh r5, [r0]
|
|
add r0, r0, #2
|
|
add r6, r6, #2
|
|
add r1, r1, #2
|
|
cmp r6, r2
|
|
blt _01FF8014
|
|
_01FF80AC:
|
|
ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, pc}
|
|
arm_func_end sub_01FF8000
|
|
|
|
arm_func_start sub_01FF80B0
|
|
sub_01FF80B0: ; 0x01FF80B0
|
|
stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, lr}
|
|
and r3, r3, #0xf
|
|
mov r6, #0
|
|
cmp r6, r2
|
|
bge _01FF811C
|
|
_01FF80C4:
|
|
ldrh r4, [r1]
|
|
and r4, r4, #0xf
|
|
mov r5, r4
|
|
ldrh r4, [r1]
|
|
and r4, r4, #0xf0
|
|
mov r4, r4, lsl #4
|
|
orr r5, r5, r4
|
|
strh r5, [r0]
|
|
add r0, r0, #2
|
|
ldrh r4, [r1]
|
|
and r4, r4, #0xf00
|
|
mov r5, r4, lsr #8
|
|
ldrh r4, [r1]
|
|
and r4, r4, #0xf000
|
|
mov r4, r4, lsr #4
|
|
orr r5, r5, r4
|
|
strh r5, [r0]
|
|
add r0, r0, #2
|
|
add r6, r6, #2
|
|
add r1, r1, #2
|
|
cmp r6, r2
|
|
blt _01FF80C4
|
|
_01FF811C:
|
|
ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, pc}
|
|
arm_func_end sub_01FF80B0
|
|
_01FF8120:
|
|
.word sub_01FF8224
|
|
.word sub_01FF849C
|
|
.word sub_01FF8728
|
|
.word sub_01FF8C28
|
|
|
|
arm_func_start sub_01FF8130
|
|
sub_01FF8130: ; 0x01FF8130
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #0x10
|
|
ldr r2, _01FF81B8 ; =RENDER_3D
|
|
mov r4, r1
|
|
ldr r1, [r2, #8]
|
|
cmp r1, r4
|
|
beq _01FF81B0
|
|
ldrh r3, [r0]
|
|
ldr r2, _01FF81BC ; =_02099734
|
|
mov r1, #0
|
|
mov r3, r3, lsl #0x13
|
|
mov r3, r3, lsr #0x1e
|
|
ldr r3, [r2, r3, lsl #2]
|
|
mov r2, #1
|
|
str r3, [sp]
|
|
stmib sp, {r1, r2, r4}
|
|
ldrh r0, [r0]
|
|
ldr r5, _01FF81C0 ; =_02099744
|
|
ldr r2, _01FF81C4 ; =_02099764
|
|
mov r3, r0, lsl #0x1d
|
|
mov ip, r0, lsl #0x15
|
|
mov lr, r3, lsr #0x1d
|
|
mov r0, r0, lsl #0x1a
|
|
mov r6, ip, lsr #0x1d
|
|
mov ip, r0, lsr #0x1d
|
|
ldr r3, _01FF81C8 ; =_02099784
|
|
ldr r0, [r5, r6, lsl #2]
|
|
ldr r2, [r2, lr, lsl #2]
|
|
ldr r3, [r3, ip, lsl #2]
|
|
bl GeomSetTexImageParam
|
|
ldr r0, _01FF81B8 ; =RENDER_3D
|
|
str r4, [r0, #8]
|
|
_01FF81B0:
|
|
add sp, sp, #0x10
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_01FF81B8: .word RENDER_3D
|
|
_01FF81BC: .word _02099734
|
|
_01FF81C0: .word _02099744
|
|
_01FF81C4: .word _02099764
|
|
_01FF81C8: .word _02099784
|
|
arm_func_end sub_01FF8130
|
|
|
|
arm_func_start sub_01FF81CC
|
|
sub_01FF81CC: ; 0x01FF81CC
|
|
ldr r2, _01FF8218 ; =RENDER_3D
|
|
ldr r2, [r2, #4]
|
|
cmp r2, r1
|
|
bxeq lr
|
|
ldrh r2, [r0]
|
|
ldr r0, _01FF821C ; =_02099744
|
|
mov r2, r2, lsl #0x15
|
|
mov r2, r2, lsr #0x1d
|
|
ldr r0, [r0, r2, lsl #2]
|
|
ldr r2, _01FF8220 ; =0x040004AC
|
|
cmp r0, #2
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
rsb r0, r0, #4
|
|
mov r3, r1, lsr r0
|
|
ldr r0, _01FF8218 ; =RENDER_3D
|
|
str r3, [r2]
|
|
str r1, [r0, #4]
|
|
bx lr
|
|
.align 2, 0
|
|
_01FF8218: .word RENDER_3D
|
|
_01FF821C: .word _02099744
|
|
_01FF8220: .word 0x040004AC
|
|
arm_func_end sub_01FF81CC
|
|
|
|
arm_func_start sub_01FF8224
|
|
sub_01FF8224: ; 0x01FF8224
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #0x40
|
|
mov r4, r0
|
|
ldrb r0, [r4, #0x23]
|
|
cmp r0, #0
|
|
beq _01FF8460
|
|
ldrh r0, [r4, #0x18]
|
|
mov r2, #0
|
|
ldr r3, _01FF8468 ; =TRIG_TABLE
|
|
mov r0, r0, asr #4
|
|
mov r0, r0, lsl #1
|
|
add r5, r0, #1
|
|
mov r0, r0, lsl #1
|
|
ldrsh r1, [r3, r0]
|
|
mov r0, r5, lsl #1
|
|
ldrsh r3, [r3, r0]
|
|
rsb r0, r1, #0
|
|
str r1, [sp, #0x14]
|
|
str r3, [sp, #0x10]
|
|
str r2, [sp, #0x18]
|
|
str r3, [sp, #0x20]
|
|
str r2, [sp, #0x24]
|
|
str r2, [sp, #0x28]
|
|
str r2, [sp, #0x2c]
|
|
str r2, [sp, #0x30]
|
|
str r0, [sp, #0x1c]
|
|
ldrsh r0, [r4, #4]
|
|
mov r0, r0, lsl #0xc
|
|
str r0, [sp, #0x34]
|
|
ldrsh r0, [r4, #6]
|
|
mov r0, r0, lsl #0xc
|
|
str r0, [sp, #0x38]
|
|
ldrh r0, [r4, #2]
|
|
add r0, r0, #1
|
|
mov r0, r0, lsl #0xc
|
|
rsb r0, r0, #0
|
|
str r0, [sp, #0x3c]
|
|
ldrb r0, [r4, #0x22]
|
|
ldrb r1, [r4, #0x23]
|
|
bl sub_01FF8480
|
|
mov r0, #0
|
|
str r0, [sp]
|
|
str r0, [sp, #4]
|
|
mov r1, #1
|
|
str r1, [sp, #8]
|
|
mov r1, r0
|
|
mov r2, r0
|
|
mov r3, r0
|
|
str r0, [sp, #0xc]
|
|
bl GeomSetTexImageParam
|
|
ldr r0, _01FF846C ; =RENDER_3D
|
|
mvn r2, #0
|
|
str r2, [r0, #8]
|
|
ldr r1, _01FF8470 ; =0x04000444
|
|
mov r2, #0
|
|
add r0, sp, #0x10
|
|
str r2, [r1]
|
|
bl GeomMtxMult4x3
|
|
ldrh r0, [r4, #0x14]
|
|
ldrh r2, [r4, #0x16]
|
|
ldr r1, _01FF8474 ; =0x0400046C
|
|
mov r0, r0, lsl #6
|
|
str r0, [r1]
|
|
mov r0, r2, lsl #6
|
|
str r0, [r1]
|
|
mov r0, #0x1000
|
|
str r0, [r1]
|
|
ldrb r0, [r4, #0x24]
|
|
ldr r6, _01FF8478 ; =0x04000500
|
|
mov r5, #0
|
|
cmp r0, #0
|
|
ldreqh r0, [r4, #0x1a]
|
|
streq r0, [r1, #0x14]
|
|
mov r0, #2
|
|
str r0, [r6]
|
|
ldrsh r2, [r4, #0xc]
|
|
ldrb r0, [r4, #0x24]
|
|
ldrsh r1, [r4, #0xe]
|
|
sub r3, r5, r2, lsl #12
|
|
cmp r0, #0
|
|
sub ip, r5, r1, lsl #12
|
|
ldrsh r2, [r4, #8]
|
|
ldrsh r1, [r4, #0xa]
|
|
ldrneh r0, [r4, #0x1a]
|
|
mov lr, r3, asr #6
|
|
mov r5, ip, asr #6
|
|
strne r0, [r6, #-0x80]
|
|
mov r0, r5, lsl #0x10
|
|
mov lr, lr, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r5, lr, asr #0x10
|
|
mov lr, r5, lsl #0x10
|
|
add r3, r3, r2, lsl #12
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
mov lr, lr, lsr #0x10
|
|
ldr r5, _01FF847C ; =0x0400048C
|
|
orr r6, lr, r0, lsl #16
|
|
str r6, [r5]
|
|
mov r2, #0x1000
|
|
str r2, [r5]
|
|
ldrb r2, [r4, #0x24]
|
|
mov r3, r3, asr #6
|
|
add r1, ip, r1, lsl #12
|
|
cmp r2, #0
|
|
ldrneh r2, [r4, #0x1c]
|
|
mov r1, r1, asr #6
|
|
strne r2, [r5, #-0xc]
|
|
mov r2, r3, lsl #0x10
|
|
mov r2, r2, asr #0x10
|
|
mov r2, r2, lsl #0x10
|
|
mov r2, r2, lsr #0x10
|
|
ldr r3, _01FF847C ; =0x0400048C
|
|
orr r0, r2, r0, lsl #16
|
|
str r0, [r3]
|
|
mov r0, #0x1000
|
|
str r0, [r3]
|
|
ldrb r0, [r4, #0x24]
|
|
cmp r0, #0
|
|
ldrneh r0, [r4, #0x1e]
|
|
strne r0, [r3, #-0xc]
|
|
mov r0, r1, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r3, r0, lsr #0x10
|
|
ldr r1, _01FF847C ; =0x0400048C
|
|
orr r0, lr, r3, lsl #16
|
|
str r0, [r1]
|
|
mov r0, #0x1000
|
|
str r0, [r1]
|
|
ldrb r0, [r4, #0x24]
|
|
cmp r0, #0
|
|
ldrneh r0, [r4, #0x20]
|
|
strne r0, [r1, #-0xc]
|
|
ldr r1, _01FF847C ; =0x0400048C
|
|
orr r0, r2, r3, lsl #16
|
|
str r0, [r1]
|
|
mov r0, #0x1000
|
|
str r0, [r1]
|
|
mov r0, #0
|
|
str r0, [r1, #0x78]
|
|
mov r0, #1
|
|
str r0, [r1, #-0x44]
|
|
_01FF8460:
|
|
add sp, sp, #0x40
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_01FF8468: .word TRIG_TABLE
|
|
_01FF846C: .word RENDER_3D
|
|
_01FF8470: .word 0x04000444
|
|
_01FF8474: .word 0x0400046C
|
|
_01FF8478: .word 0x04000500
|
|
_01FF847C: .word 0x0400048C
|
|
arm_func_end sub_01FF8224
|
|
|
|
arm_func_start sub_01FF8480
|
|
sub_01FF8480: ; 0x01FF8480
|
|
mov r0, r0, lsl #0x18
|
|
orr r2, r0, #0xc0
|
|
ldr r0, _01FF8498 ; =0x040004A4
|
|
orr r1, r2, r1, lsl #16
|
|
str r1, [r0]
|
|
bx lr
|
|
.align 2, 0
|
|
_01FF8498: .word 0x040004A4
|
|
arm_func_end sub_01FF8480
|
|
|
|
arm_func_start sub_01FF849C
|
|
sub_01FF849C: ; 0x01FF849C
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #0x48
|
|
mov r4, r0
|
|
ldrb r0, [r4, #0x23]
|
|
cmp r0, #0
|
|
beq _01FF8708
|
|
ldr r0, _01FF8710 ; =_02099724
|
|
mov r3, #0x1000
|
|
ldr ip, [r0, #4]
|
|
ldr lr, [r0]
|
|
mov r2, #0
|
|
mov r0, ip, lsl #0xc
|
|
mov r1, lr, lsl #0xc
|
|
str r0, [sp, #0x40]
|
|
str r3, [sp, #0x18]
|
|
str r2, [sp, #0x1c]
|
|
str r2, [sp, #0x20]
|
|
str r2, [sp, #0x24]
|
|
str r3, [sp, #0x28]
|
|
str r2, [sp, #0x2c]
|
|
str r2, [sp, #0x30]
|
|
str r2, [sp, #0x34]
|
|
str r2, [sp, #0x38]
|
|
str r1, [sp, #0x3c]
|
|
ldrh r1, [r4, #2]
|
|
mov r0, #0x10
|
|
str lr, [sp, #0x10]
|
|
add r1, r1, #1
|
|
mov r1, r1, lsl #0xc
|
|
rsb r1, r1, #0
|
|
str r1, [sp, #0x44]
|
|
ldrb r1, [r4, #0x23]
|
|
str ip, [sp, #0x14]
|
|
bl sub_01FF8480
|
|
mov r0, #0
|
|
str r0, [sp]
|
|
str r0, [sp, #4]
|
|
mov r1, #1
|
|
str r1, [sp, #8]
|
|
mov r1, r0
|
|
mov r2, r0
|
|
mov r3, r0
|
|
str r0, [sp, #0xc]
|
|
bl GeomSetTexImageParam
|
|
ldr r1, _01FF8714 ; =RENDER_3D
|
|
mvn r3, #0
|
|
str r3, [r1, #8]
|
|
ldr r2, _01FF8718 ; =0x04000444
|
|
mov r1, #0
|
|
add r0, sp, #0x18
|
|
str r1, [r2]
|
|
bl GeomMtxMult4x3
|
|
ldr r1, _01FF871C ; =0x0400046C
|
|
mov r0, #0x40000
|
|
str r0, [r1]
|
|
str r0, [r1]
|
|
mov r0, #0x1000
|
|
str r0, [r1]
|
|
ldrb r0, [r4, #0x24]
|
|
ldr r3, _01FF8720 ; =0x04000500
|
|
ldr lr, _01FF8724 ; =0x0400048C
|
|
cmp r0, #0
|
|
ldreqh r0, [r4, #0x1a]
|
|
streq r0, [r1, #0x14]
|
|
mov r0, #2
|
|
str r0, [r3]
|
|
ldrb r2, [r4, #0x24]
|
|
ldrsh r1, [r4, #4]
|
|
ldrsh r0, [r4, #6]
|
|
cmp r2, #0
|
|
ldrneh r2, [r4, #0x1a]
|
|
strne r2, [r3, #-0x80]
|
|
mov r2, #0
|
|
str r2, [lr]
|
|
mov r2, #0x1000
|
|
str r2, [lr]
|
|
ldrb r2, [r4, #0x24]
|
|
ldrsh ip, [r4, #8]
|
|
ldrsh r3, [r4, #0xa]
|
|
cmp r2, #0
|
|
ldrneh r2, [r4, #0x1c]
|
|
mov ip, ip, lsl #0xc
|
|
mov r3, r3, lsl #0xc
|
|
sub ip, ip, r1, lsl #12
|
|
sub r3, r3, r0, lsl #12
|
|
mov ip, ip, asr #6
|
|
mov r3, r3, asr #6
|
|
strne r2, [lr, #-0xc]
|
|
mov r2, r3, lsl #0x10
|
|
mov r3, r2, asr #0x10
|
|
mov r2, ip, lsl #0x10
|
|
mov r3, r3, lsl #0x10
|
|
mov r2, r2, asr #0x10
|
|
mov r3, r3, lsr #0x10
|
|
mov r2, r2, lsl #0x10
|
|
mov r3, r3, lsl #0x10
|
|
ldr lr, _01FF8724 ; =0x0400048C
|
|
orr r2, r3, r2, lsr #16
|
|
str r2, [lr]
|
|
mov r2, #0x1000
|
|
str r2, [lr]
|
|
ldrsh r3, [r4, #0xe]
|
|
ldrb r2, [r4, #0x24]
|
|
ldrsh ip, [r4, #0xc]
|
|
mov r3, r3, lsl #0xc
|
|
cmp r2, #0
|
|
ldrneh r2, [r4, #0x1e]
|
|
sub r3, r3, r0, lsl #12
|
|
mov ip, ip, lsl #0xc
|
|
sub ip, ip, r1, lsl #12
|
|
strne r2, [lr, #-0xc]
|
|
mov r3, r3, asr #6
|
|
mov r2, r3, lsl #0x10
|
|
mov r3, r2, asr #0x10
|
|
mov ip, ip, asr #6
|
|
mov r2, ip, lsl #0x10
|
|
mov r3, r3, lsl #0x10
|
|
mov r2, r2, asr #0x10
|
|
mov r3, r3, lsr #0x10
|
|
mov r2, r2, lsl #0x10
|
|
mov r3, r3, lsl #0x10
|
|
ldr lr, _01FF8724 ; =0x0400048C
|
|
orr r2, r3, r2, lsr #16
|
|
str r2, [lr]
|
|
mov r2, #0x1000
|
|
str r2, [lr]
|
|
ldrsh ip, [r4, #0x10]
|
|
ldrsh r3, [r4, #0x12]
|
|
ldrb r2, [r4, #0x24]
|
|
mov ip, ip, lsl #0xc
|
|
mov r3, r3, lsl #0xc
|
|
sub r1, ip, r1, lsl #12
|
|
cmp r2, #0
|
|
sub r0, r3, r0, lsl #12
|
|
mov r2, r1, asr #6
|
|
mov r1, r0, asr #6
|
|
ldrneh r0, [r4, #0x20]
|
|
strne r0, [lr, #-0xc]
|
|
mov r0, r1, lsl #0x10
|
|
mov r1, r0, asr #0x10
|
|
mov r0, r2, lsl #0x10
|
|
mov r1, r1, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
mov r1, r1, lsr #0x10
|
|
mov r2, r1, lsl #0x10
|
|
mov r0, r0, lsl #0x10
|
|
ldr r1, _01FF8724 ; =0x0400048C
|
|
orr r0, r2, r0, lsr #16
|
|
str r0, [r1]
|
|
mov r0, #0x1000
|
|
str r0, [r1]
|
|
mov r0, #0
|
|
str r0, [r1, #0x78]
|
|
mov r0, #1
|
|
str r0, [r1, #-0x44]
|
|
_01FF8708:
|
|
add sp, sp, #0x48
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_01FF8710: .word _02099724
|
|
_01FF8714: .word RENDER_3D
|
|
_01FF8718: .word 0x04000444
|
|
_01FF871C: .word 0x0400046C
|
|
_01FF8720: .word 0x04000500
|
|
_01FF8724: .word 0x0400048C
|
|
arm_func_end sub_01FF849C
|
|
|
|
arm_func_start sub_01FF8728
|
|
sub_01FF8728: ; 0x01FF8728
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x4c
|
|
mov sl, r0
|
|
ldrb r0, [sl, #0x31]
|
|
cmp r0, #0
|
|
beq _01FF89EC
|
|
ldr r0, _01FF89F4 ; =_02099724
|
|
ldr r1, [sl, #4]
|
|
ldr r3, [r0, #8]
|
|
ldr r2, [r0, #0xc]
|
|
add r0, sl, #0x14
|
|
str r3, [sp, #0x14]
|
|
str r2, [sp, #0x18]
|
|
bl sub_01FF8130
|
|
ldr r1, [sl, #8]
|
|
add r0, sl, #0x14
|
|
bl sub_01FF81CC
|
|
ldrsh r7, [sl, #0xc]
|
|
ldrsh r0, [sl, #0x10]
|
|
ldrsh r6, [sl, #0xe]
|
|
ldrsh r4, [sl, #0x12]
|
|
add r5, r7, r0
|
|
mov r0, r7, lsl #0xc
|
|
str r0, [sp, #0x10]
|
|
mov r0, r6, lsl #0xc
|
|
ldrsh r1, [sl, #0x1a]
|
|
ldrsh r2, [sl, #0x18]
|
|
mov fp, r5, lsl #0xc
|
|
add r4, r6, r4
|
|
str r0, [sp, #0xc]
|
|
mov r0, r4, lsl #0xc
|
|
str r0, [sp, #8]
|
|
mov r0, r1, lsl #0xc
|
|
ldrsh r1, [sl, #0x20]
|
|
mov r5, r2, lsl #0xc
|
|
ldrsh r2, [sl, #0x1c]
|
|
str r0, [sp, #4]
|
|
ldrsh r0, [sl, #0x1e]
|
|
mov r7, r1, lsl #0xc
|
|
ldrsh r1, [sl, #0x24]
|
|
ldrsh r3, [sl, #0x16]
|
|
mov r6, r2, lsl #0xc
|
|
ldrsh r2, [sl, #0x22]
|
|
mov r0, r0, lsl #0xc
|
|
str r0, [sp]
|
|
mov r0, #0x1000
|
|
mov sb, r1, lsl #0xc
|
|
ldr r1, [sp, #0x14]
|
|
mov r8, r2, lsl #0xc
|
|
mov r2, #0
|
|
mov r1, r1, lsl #0xc
|
|
str r0, [sp, #0x1c]
|
|
str r0, [sp, #0x2c]
|
|
ldr r0, [sp, #0x18]
|
|
str r2, [sp, #0x20]
|
|
mov r0, r0, lsl #0xc
|
|
str r2, [sp, #0x24]
|
|
str r2, [sp, #0x28]
|
|
str r2, [sp, #0x30]
|
|
str r2, [sp, #0x34]
|
|
str r2, [sp, #0x38]
|
|
str r2, [sp, #0x3c]
|
|
str r1, [sp, #0x40]
|
|
str r0, [sp, #0x44]
|
|
ldrh r0, [sl, #2]
|
|
mov r4, r3, lsl #0xc
|
|
add r0, r0, #1
|
|
mov r0, r0, lsl #0xc
|
|
rsb r0, r0, #0
|
|
str r0, [sp, #0x48]
|
|
ldrb r0, [sl, #0x30]
|
|
ldrb r1, [sl, #0x31]
|
|
bl sub_01FF8480
|
|
ldr r1, _01FF89F8 ; =0x04000444
|
|
mov r2, #0
|
|
add r0, sp, #0x1c
|
|
str r2, [r1]
|
|
bl GeomMtxMult4x3
|
|
ldr r1, _01FF89FC ; =0x0400046C
|
|
mov r0, #0x40000
|
|
str r0, [r1]
|
|
str r0, [r1]
|
|
mov r0, #0x1000
|
|
str r0, [r1]
|
|
ldrb r0, [sl, #0x32]
|
|
mov r2, r5, lsl #0xa
|
|
cmp r0, #0
|
|
ldreqh r0, [sl, #0x26]
|
|
streq r0, [r1, #0x14]
|
|
ldr r1, _01FF8A00 ; =0x04000500
|
|
mov r0, #1
|
|
str r0, [r1]
|
|
ldrb r0, [sl, #0x32]
|
|
cmp r0, #0
|
|
ldrneh r0, [sl, #0x26]
|
|
strne r0, [r1, #-0x80]
|
|
ldr r0, [sp, #0xc]
|
|
mov r1, r0, lsl #8
|
|
ldr r0, [sp, #0x10]
|
|
mov r3, r1, asr #0x10
|
|
mov r0, r0, lsl #8
|
|
mov r0, r0, asr #0x10
|
|
mov r1, r2, asr #0x10
|
|
mov r2, r3, lsl #0x10
|
|
mov r5, r0, lsl #0x10
|
|
mov r0, r4, lsl #0xa
|
|
mov r3, r1, lsl #0x10
|
|
mov r1, r0, asr #0x10
|
|
mov r0, r3, lsr #0x10
|
|
mov r3, r2, lsr #0x10
|
|
mov r4, r5, lsr #0x10
|
|
ldr r2, _01FF8A04 ; =0x04000488
|
|
mov r1, r1, lsl #0x10
|
|
mov r0, r0, lsl #0x10
|
|
orr r0, r0, r1, lsr #16
|
|
orr r1, r4, r3, lsl #16
|
|
str r1, [r2]
|
|
str r0, [r2, #4]
|
|
mov r0, #0x1000
|
|
str r0, [r2, #4]
|
|
ldrb r0, [sl, #0x32]
|
|
mov r1, r6, lsl #0xa
|
|
mov r1, r1, asr #0x10
|
|
cmp r0, #0
|
|
ldrneh r0, [sl, #0x28]
|
|
strne r0, [r2, #-8]
|
|
mov r0, fp, lsl #8
|
|
mov r0, r0, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, lsr #0x10
|
|
ldr r0, [sp, #4]
|
|
ldr r2, _01FF8A04 ; =0x04000488
|
|
mov r0, r0, lsl #0xa
|
|
orr r3, r5, r3, lsl #16
|
|
str r3, [r2]
|
|
mov r0, r0, asr #0x10
|
|
mov r2, #0x1000
|
|
bl GeomSetVertexCoord16
|
|
ldrb r0, [sl, #0x32]
|
|
ldr r2, _01FF8A04 ; =0x04000488
|
|
cmp r0, #0
|
|
ldrneh r1, [sl, #0x2c]
|
|
ldrne r0, _01FF8A08 ; =0x04000480
|
|
strne r1, [r0]
|
|
ldr r0, [sp, #8]
|
|
mov r1, sb, lsl #0xa
|
|
mov r0, r0, lsl #8
|
|
mov r0, r0, asr #0x10
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, lsr #0x10
|
|
mov r0, r8, lsl #0xa
|
|
orr r3, r5, r6, lsl #16
|
|
str r3, [r2]
|
|
mov r0, r0, asr #0x10
|
|
mov r1, r1, asr #0x10
|
|
mov r2, #0x1000
|
|
bl GeomSetVertexCoord16
|
|
ldrb r0, [sl, #0x32]
|
|
ldr r3, _01FF8A04 ; =0x04000488
|
|
orr r4, r4, r6, lsl #16
|
|
cmp r0, #0
|
|
ldrneh r1, [sl, #0x2a]
|
|
ldrne r0, _01FF8A08 ; =0x04000480
|
|
mov r2, #0x1000
|
|
strne r1, [r0]
|
|
ldr r0, [sp]
|
|
mov r1, r7, lsl #0xa
|
|
mov r0, r0, lsl #0xa
|
|
mov r0, r0, asr #0x10
|
|
mov r1, r1, asr #0x10
|
|
str r4, [r3]
|
|
bl GeomSetVertexCoord16
|
|
ldr r1, _01FF8A0C ; =0x04000504
|
|
mov r0, #0
|
|
str r0, [r1]
|
|
mov r0, #1
|
|
str r0, [r1, #-0xbc]
|
|
_01FF89EC:
|
|
add sp, sp, #0x4c
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FF89F4: .word _02099724
|
|
_01FF89F8: .word 0x04000444
|
|
_01FF89FC: .word 0x0400046C
|
|
_01FF8A00: .word 0x04000500
|
|
_01FF8A04: .word 0x04000488
|
|
_01FF8A08: .word 0x04000480
|
|
_01FF8A0C: .word 0x04000504
|
|
arm_func_end sub_01FF8728
|
|
|
|
arm_func_start sub_01FF8A10
|
|
sub_01FF8A10: ; 0x01FF8A10
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x30
|
|
mov r8, r0
|
|
ldrh r0, [r8, #0x24]
|
|
ldr r5, _01FF8C1C ; =TRIG_TABLE
|
|
ldrsh r4, [r8, #0xc]
|
|
mov r0, r0, asr #4
|
|
mov r0, r0, lsl #1
|
|
add r1, r0, #1
|
|
mov r0, r0, lsl #1
|
|
mov r6, r1, lsl #1
|
|
ldrsh r1, [r5, r0]
|
|
ldrsh r3, [r8, #0xe]
|
|
ldrsh sb, [r8, #0x10]
|
|
ldrsh r7, [r8, #0x12]
|
|
mov r2, #0
|
|
ldrsh r5, [r5, r6]
|
|
rsb r0, r1, #0
|
|
str r1, [sp, #4]
|
|
str r0, [sp, #0xc]
|
|
str r2, [sp, #8]
|
|
str r2, [sp, #0x14]
|
|
add r0, r3, r7
|
|
str r2, [sp, #0x18]
|
|
str r2, [sp, #0x1c]
|
|
str r2, [sp, #0x20]
|
|
str r5, [sp]
|
|
str r5, [sp, #0x10]
|
|
ldrsh r5, [r8, #0x16]
|
|
add r1, r4, sb
|
|
mov r7, r0, lsl #0xc
|
|
mov r5, r5, lsl #0xc
|
|
str r5, [sp, #0x24]
|
|
ldrsh r6, [r8, #0x18]
|
|
mov r5, r3, lsl #0xc
|
|
mov r4, r4, lsl #0xc
|
|
mov r3, r6, lsl #0xc
|
|
str r3, [sp, #0x28]
|
|
ldrh r3, [r8, #2]
|
|
mov r6, r1, lsl #0xc
|
|
add r0, r3, #1
|
|
mov r0, r0, lsl #0xc
|
|
rsb r0, r0, #0
|
|
str r0, [sp, #0x2c]
|
|
ldrb r0, [r8, #0x26]
|
|
ldrb r1, [r8, #0x27]
|
|
bl sub_01FF8480
|
|
ldr r1, _01FF8C20 ; =0x04000444
|
|
mov r2, #0
|
|
add r0, sp, #0
|
|
str r2, [r1]
|
|
bl GeomMtxMult4x3
|
|
ldrh r0, [r8, #0x1e]
|
|
ldrh r1, [r8, #0x20]
|
|
ldr r3, _01FF8C24 ; =0x0400046C
|
|
mov r0, r0, lsl #6
|
|
str r0, [r3]
|
|
mov r0, r1, lsl #6
|
|
str r0, [r3]
|
|
mov r2, #0x1000
|
|
str r2, [r3]
|
|
ldrh sb, [r8, #0x22]
|
|
mov r1, #1
|
|
mov r0, #0
|
|
str sb, [r3, #0x14]
|
|
str r1, [r3, #0x94]
|
|
ldrsh sb, [r8, #0x1a]
|
|
ldrsh r8, [r8, #0x1c]
|
|
sub fp, r0, sb, lsl #12
|
|
sub sl, r0, r8, lsl #12
|
|
mov r8, fp, asr #6
|
|
mov sb, r5, lsl #8
|
|
mov ip, r4, lsl #8
|
|
mov sb, sb, asr #0x10
|
|
mov lr, ip, asr #0x10
|
|
mov ip, sl, lsl #0xa
|
|
mov sb, sb, lsl #0x10
|
|
mov sb, sb, lsr #0x10
|
|
mov lr, lr, lsl #0x10
|
|
mov lr, lr, lsr #0x10
|
|
mov ip, ip, asr #0x10
|
|
mov ip, ip, lsl #0x10
|
|
mov ip, ip, lsr #0x10
|
|
mov r8, r8, lsl #0x10
|
|
mov r8, r8, asr #0x10
|
|
mov r8, r8, lsl #0x10
|
|
mov r8, r8, lsr #0x10
|
|
sub r4, r6, r4
|
|
add r4, fp, r4
|
|
mov r6, r6, lsl #8
|
|
orr fp, lr, sb, lsl #16
|
|
str fp, [r3, #0x1c]
|
|
mov fp, r6, asr #0x10
|
|
mov r6, r4, lsl #0xa
|
|
orr r4, r8, ip, lsl #16
|
|
str r4, [r3, #0x20]
|
|
mov r4, fp, lsl #0x10
|
|
mov r6, r6, asr #0x10
|
|
sub r5, r7, r5
|
|
mov r4, r4, lsr #0x10
|
|
mov r6, r6, lsl #0x10
|
|
add r5, sl, r5
|
|
mov r7, r7, lsl #8
|
|
mov r6, r6, lsr #0x10
|
|
mov sl, r7, asr #0x10
|
|
mov r7, r5, lsl #0xa
|
|
mov r5, sl, lsl #0x10
|
|
mov r5, r5, lsr #0x10
|
|
mov r7, r7, asr #0x10
|
|
mov r7, r7, lsl #0x10
|
|
mov r7, r7, lsr #0x10
|
|
str r2, [r3, #0x20]
|
|
orr sb, r4, sb, lsl #16
|
|
str sb, [r3, #0x1c]
|
|
orr sb, r6, ip, lsl #16
|
|
str sb, [r3, #0x20]
|
|
str r2, [r3, #0x20]
|
|
orr r4, r4, r5, lsl #16
|
|
str r4, [r3, #0x1c]
|
|
orr r4, r6, r7, lsl #16
|
|
str r4, [r3, #0x20]
|
|
str r2, [r3, #0x20]
|
|
orr r4, lr, r5, lsl #16
|
|
str r4, [r3, #0x1c]
|
|
orr r4, r8, r7, lsl #16
|
|
str r4, [r3, #0x20]
|
|
str r2, [r3, #0x20]
|
|
str r0, [r3, #0x98]
|
|
str r1, [r3, #-0x24]
|
|
add sp, sp, #0x30
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FF8C1C: .word TRIG_TABLE
|
|
_01FF8C20: .word 0x04000444
|
|
_01FF8C24: .word 0x0400046C
|
|
arm_func_end sub_01FF8A10
|
|
|
|
arm_func_start sub_01FF8C28
|
|
sub_01FF8C28: ; 0x01FF8C28
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
ldrb r0, [r4, #0x27]
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
ldr r1, [r4, #4]
|
|
add r0, r4, #0x14
|
|
bl sub_01FF8130
|
|
ldr r1, [r4, #8]
|
|
add r0, r4, #0x14
|
|
bl sub_01FF81CC
|
|
mov r0, r4
|
|
bl sub_01FF8A10
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end sub_01FF8C28
|
|
|
|
arm_func_start sub_01FF8C60
|
|
sub_01FF8C60: ; 0x01FF8C60
|
|
stmdb sp!, {r3, lr}
|
|
ldrb r1, [r0, #0x27]
|
|
cmp r1, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
bl sub_01FF8A10
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end sub_01FF8C60
|
|
|
|
arm_func_start AllocateRender3dElement
|
|
AllocateRender3dElement: ; 0x01FF8C78
|
|
ldr r0, _01FF8CA8 ; =RENDER_3D
|
|
ldrsh r2, [r0]
|
|
ldrsh r1, [r0, #2]
|
|
cmp r2, r1
|
|
movge r0, #0
|
|
bxge lr
|
|
add r1, r2, #1
|
|
strh r1, [r0]
|
|
ldr r1, [r0, #0x40]
|
|
mov r0, #0x34
|
|
smlabb r0, r2, r0, r1
|
|
bx lr
|
|
.align 2, 0
|
|
_01FF8CA8: .word RENDER_3D
|
|
arm_func_end AllocateRender3dElement
|
|
|
|
arm_func_start sub_01FF8CAC
|
|
sub_01FF8CAC: ; 0x01FF8CAC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
bl AllocateRender3dElement
|
|
movs r4, r0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0x28
|
|
bl MemcpyFast
|
|
mov r0, #3
|
|
strh r0, [r4]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end sub_01FF8CAC
|
|
|
|
arm_func_start sub_01FF8CDC
|
|
sub_01FF8CDC: ; 0x01FF8CDC
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
bl AllocateRender3dElement
|
|
movs r4, r0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0x34
|
|
bl MemcpyFast
|
|
mov r0, #2
|
|
strh r0, [r4]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end sub_01FF8CDC
|
|
|
|
arm_func_start sub_01FF8D0C
|
|
sub_01FF8D0C: ; 0x01FF8D0C
|
|
stmdb sp!, {r4, lr}
|
|
bl AllocateRender3dElement
|
|
movs r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
mov r1, #0
|
|
mov r2, #0x26
|
|
bl MemsetFast
|
|
mov r1, #0
|
|
mov r0, r4
|
|
strh r1, [r4]
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end sub_01FF8D0C
|
|
|
|
arm_func_start sub_01FF8D3C
|
|
sub_01FF8D3C: ; 0x01FF8D3C
|
|
stmdb sp!, {r4, lr}
|
|
bl AllocateRender3dElement
|
|
movs r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
mov r1, #0
|
|
mov r2, #0x26
|
|
bl MemsetFast
|
|
mov r1, #1
|
|
mov r0, r4
|
|
strh r1, [r4]
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end sub_01FF8D3C
|
|
|
|
arm_func_start sub_01FF8D6C
|
|
sub_01FF8D6C: ; 0x01FF8D6C
|
|
stmdb sp!, {r4, lr}
|
|
bl AllocateRender3dElement
|
|
movs r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
mov r1, #0
|
|
mov r2, #0x28
|
|
bl MemsetFast
|
|
mov r1, #3
|
|
mov r0, r4
|
|
strh r1, [r4]
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end sub_01FF8D6C
|
|
|
|
arm_func_start sub_01FF8D9C
|
|
sub_01FF8D9C: ; 0x01FF8D9C
|
|
stmdb sp!, {r4, lr}
|
|
bl AllocateRender3dElement
|
|
movs r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
mov r1, #0
|
|
mov r2, #0x34
|
|
bl MemsetFast
|
|
mov r1, #2
|
|
mov r0, r4
|
|
strh r1, [r4]
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end sub_01FF8D9C
|
|
|
|
arm_func_start Render3dStack
|
|
Render3dStack: ; 0x01FF8DCC
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0x200
|
|
ldr r0, _01FF8EFC ; =RENDER_3D
|
|
ldrsh r4, [r0]
|
|
cmp r4, #0
|
|
beq _01FF8EF4
|
|
cmp r4, #0
|
|
ldr r3, [r0, #0x40]
|
|
mov r2, #0
|
|
ble _01FF8E18
|
|
add r1, sp, #0
|
|
b _01FF8E10
|
|
_01FF8DFC:
|
|
add r0, r2, #1
|
|
mov r0, r0, lsl #0x10
|
|
str r3, [r1, r2, lsl #2]
|
|
mov r2, r0, asr #0x10
|
|
add r3, r3, #0x34
|
|
_01FF8E10:
|
|
cmp r2, r4
|
|
blt _01FF8DFC
|
|
_01FF8E18:
|
|
mov r2, #0
|
|
add r1, sp, #0
|
|
b _01FF8E34
|
|
_01FF8E24:
|
|
add r0, r4, #1
|
|
mov r0, r0, lsl #0x10
|
|
str r2, [r1, r4, lsl #2]
|
|
mov r4, r0, asr #0x10
|
|
_01FF8E34:
|
|
cmp r4, #0x80
|
|
blt _01FF8E24
|
|
ldr r0, _01FF8EFC ; =RENDER_3D
|
|
mov r5, #0
|
|
ldrsh r7, [r0]
|
|
add r4, sp, #0
|
|
sub r6, r7, #1
|
|
b _01FF8E98
|
|
_01FF8E54:
|
|
mov ip, r5
|
|
b _01FF8E84
|
|
_01FF8E5C:
|
|
ldr r3, [r4, ip, lsl #2]
|
|
ldr r2, [r4, r5, lsl #2]
|
|
ldrh r0, [r3, #2]
|
|
ldrh r1, [r2, #2]
|
|
cmp r1, r0
|
|
add r0, ip, #1
|
|
strlo r3, [r4, r5, lsl #2]
|
|
mov r0, r0, lsl #0x10
|
|
strlo r2, [r4, ip, lsl #2]
|
|
mov ip, r0, asr #0x10
|
|
_01FF8E84:
|
|
cmp ip, r7
|
|
blt _01FF8E5C
|
|
add r0, r5, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, asr #0x10
|
|
_01FF8E98:
|
|
cmp r5, r6
|
|
blt _01FF8E54
|
|
mov r6, #0
|
|
add r5, sp, #0
|
|
ldr r4, _01FF8F00 ; =_01FF8120
|
|
ldr r7, _01FF8EFC ; =RENDER_3D
|
|
b _01FF8EDC
|
|
_01FF8EB4:
|
|
ldr r0, [r5, r6, lsl #2]
|
|
ldrh r1, [r0]
|
|
mov r2, r1, lsr #0x1f
|
|
rsb r1, r2, r1, lsl #30
|
|
add r1, r2, r1, ror #30
|
|
ldr r1, [r4, r1, lsl #2]
|
|
blx r1
|
|
add r0, r6, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, asr #0x10
|
|
_01FF8EDC:
|
|
ldrsh r0, [r7]
|
|
cmp r6, r0
|
|
blt _01FF8EB4
|
|
ldr r0, _01FF8EFC ; =RENDER_3D
|
|
mov r1, #0
|
|
strh r1, [r0]
|
|
_01FF8EF4:
|
|
add sp, sp, #0x200
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_01FF8EFC: .word RENDER_3D
|
|
_01FF8F00: .word _01FF8120
|
|
arm_func_end Render3dStack
|
|
|
|
arm_func_start sub_01FF8F04
|
|
sub_01FF8F04: ; 0x01FF8F04
|
|
ldr r1, _01FF8F20 ; =0x040004AC
|
|
mov r2, #0
|
|
ldr r0, _01FF8F24 ; =RENDER_3D
|
|
str r2, [r1]
|
|
sub r1, r2, #1
|
|
str r1, [r0, #4]
|
|
bx lr
|
|
.align 2, 0
|
|
_01FF8F20: .word 0x040004AC
|
|
_01FF8F24: .word RENDER_3D
|
|
arm_func_end sub_01FF8F04
|
|
|
|
arm_func_start sub_01FF8F28
|
|
sub_01FF8F28: ; 0x01FF8F28
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, #0
|
|
str sl, [sp]
|
|
mov r6, sl
|
|
mov r7, sl
|
|
mov r8, sl
|
|
mov sb, sl
|
|
_01FF8F44:
|
|
ldr r3, [sp]
|
|
ldrb r4, [r1, sl]
|
|
ldrb r5, [r0, r3]
|
|
add r3, r3, #1
|
|
str r3, [sp]
|
|
ldr r3, _01FF9054 ; =_02099E44
|
|
mov fp, r5, lsl #1
|
|
ldrh fp, [r3, fp]
|
|
mov r4, r4, lsl #1
|
|
ldrh r3, [r3, r4]
|
|
and r4, fp, #0xff00
|
|
mov r4, r4, lsl #0x10
|
|
and ip, r3, #0xff00
|
|
mov r4, r4, lsr #0x10
|
|
mov ip, ip, lsl #0x10
|
|
add sl, sl, #1
|
|
cmp r4, ip, lsr #16
|
|
beq _01FF8F98
|
|
mvnlo r0, #0
|
|
movhs r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FF8F98:
|
|
cmp r6, #0
|
|
bne _01FF9004
|
|
and lr, r3, #0xf
|
|
and r4, fp, #0xf
|
|
ldr r3, _01FF9058 ; =0x0000FFFE
|
|
mov fp, r4, lsl #0x10
|
|
mov ip, lr, lsl #0x10
|
|
and fp, r3, fp, lsr #16
|
|
and r3, r3, ip, lsr #16
|
|
cmp fp, r3
|
|
beq _01FF8FDC
|
|
cmp r4, lr
|
|
movlo r3, #1
|
|
movhs r3, #0
|
|
and r8, r3, #0xff
|
|
mov r6, #1
|
|
b _01FF9004
|
|
_01FF8FDC:
|
|
cmp r7, #0
|
|
bne _01FF9004
|
|
and fp, lr, #1
|
|
and r3, r4, #1
|
|
cmp r3, fp
|
|
beq _01FF9004
|
|
movlt r3, #1
|
|
movge r3, #0
|
|
and sb, r3, #0xff
|
|
mov r7, #1
|
|
_01FF9004:
|
|
cmp r5, #0
|
|
beq _01FF901C
|
|
ldr r3, [sp]
|
|
cmp r3, r2
|
|
cmplt sl, r2
|
|
blt _01FF8F44
|
|
_01FF901C:
|
|
cmp r6, #0
|
|
beq _01FF9034
|
|
cmp r8, #0
|
|
mvnne r0, #0
|
|
moveq r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FF9034:
|
|
cmp r7, #0
|
|
beq _01FF904C
|
|
cmp sb, #0
|
|
mvnne r0, #0
|
|
moveq r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FF904C:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FF9054: .word _02099E44
|
|
_01FF9058: .word 0x0000FFFE
|
|
arm_func_end sub_01FF8F28
|
|
|
|
arm_func_start sub_01FF905C
|
|
sub_01FF905C: ; 0x01FF905C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
mov sb, r0
|
|
ldr r4, [sp, #0x20]
|
|
mov r6, r1
|
|
mov r5, r2
|
|
mov r8, r3
|
|
bl GetWindow
|
|
mov r7, r0
|
|
mov r0, sb
|
|
bl sub_0202760C
|
|
cmp r5, #0
|
|
ldmltia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldrb r1, [r7, #7]
|
|
cmp r5, r1, lsl #3
|
|
ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldrb r3, [r7, #6]
|
|
cmp r6, #0
|
|
add r1, r6, r8
|
|
mov r2, r3, lsl #3
|
|
bge _01FF90B8
|
|
cmp r1, #0
|
|
ldmltia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r6, #0
|
|
_01FF90B8:
|
|
cmp r1, r2
|
|
blt _01FF90CC
|
|
cmp r6, r2
|
|
ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
sub r1, r2, #1
|
|
_01FF90CC:
|
|
mov r2, r5, asr #2
|
|
add r2, r5, r2, lsr #29
|
|
mov r2, r2, asr #3
|
|
mul ip, r2, r3
|
|
mov r3, r5, lsr #0x1f
|
|
rsb r2, r3, r5, lsl #29
|
|
add r2, r3, r2, ror #29
|
|
add r2, r2, ip, lsl #3
|
|
add r5, r0, r2, lsl #3
|
|
and r4, r4, #0xff
|
|
b _01FF911C
|
|
_01FF90F8:
|
|
mov r2, r6, lsr #0x1f
|
|
rsb r0, r2, r6, lsl #29
|
|
mov r3, r6, asr #2
|
|
add r3, r6, r3, lsr #29
|
|
add r0, r2, r0, ror #29
|
|
mov r2, r3, asr #3
|
|
add r0, r5, r0
|
|
strb r4, [r0, r2, lsl #6]
|
|
add r6, r6, #1
|
|
_01FF911C:
|
|
cmp r6, r1
|
|
ble _01FF90F8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
arm_func_end sub_01FF905C
|
|
|
|
arm_func_start sub_01FF9128
|
|
sub_01FF9128: ; 0x01FF9128
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x14
|
|
mov r1, #0xe0
|
|
mul r3, r0, r1
|
|
ldr r1, _01FF9290 ; =_022A88DC
|
|
add r1, r1, r3
|
|
str r1, [sp]
|
|
ldrb r1, [r1, #7]
|
|
str r1, [sp, #0x10]
|
|
cmp r1, #1
|
|
blo _01FF9288
|
|
ldr r1, _01FF9294 ; =_022A88FC
|
|
ldr r2, _01FF9298 ; =_022A88F0
|
|
ldr r1, [r1, r3]
|
|
ldr r8, [r2, r3]
|
|
add sl, r1, #8
|
|
mov r6, #0
|
|
b _01FF9274
|
|
_01FF9170:
|
|
ldr r1, [sp, #0x10]
|
|
mov sb, r8
|
|
sub r1, r1, #1
|
|
mov r7, #0
|
|
str r1, [sp, #0xc]
|
|
b _01FF9200
|
|
_01FF9188:
|
|
add r4, sb, #8
|
|
ldmia r4, {r2, r3}
|
|
add r1, sb, #0x10
|
|
stmia sb, {r2, r3}
|
|
ldmia r1, {r2, r3}
|
|
str r1, [sp, #4]
|
|
add r1, sb, sl, lsl #3
|
|
stmia r4, {r2, r3}
|
|
str r1, [sp, #8]
|
|
add r5, sb, #0x18
|
|
ldr r1, [sp, #4]
|
|
ldmia r5, {r2, r3}
|
|
stmia r1, {r2, r3}
|
|
add r4, sb, #0x20
|
|
ldmia r4, {r2, r3}
|
|
stmia r5, {r2, r3}
|
|
add lr, sb, #0x28
|
|
ldmia lr, {r2, r3}
|
|
stmia r4, {r2, r3}
|
|
add ip, sb, #0x30
|
|
ldmia ip, {r2, r3}
|
|
add fp, sb, #0x38
|
|
stmia lr, {r2, r3}
|
|
ldmia fp, {r2, r3}
|
|
stmia ip, {r2, r3}
|
|
ldr r1, [sp, #8]
|
|
add sb, sb, sl, lsl #3
|
|
ldmia r1, {r2, r3}
|
|
stmia fp, {r2, r3}
|
|
add r7, r7, #1
|
|
_01FF9200:
|
|
ldr r1, [sp, #0xc]
|
|
cmp r7, r1
|
|
blt _01FF9188
|
|
add r4, sb, #8
|
|
ldmia r4, {r2, r3}
|
|
stmia sb, {r2, r3}
|
|
add r1, sb, #0x10
|
|
ldmia r1, {r2, r3}
|
|
stmia r4, {r2, r3}
|
|
add ip, sb, #0x18
|
|
ldmia ip, {r2, r3}
|
|
stmia r1, {r2, r3}
|
|
add fp, sb, #0x20
|
|
add r7, sb, #0x28
|
|
add r5, sb, #0x30
|
|
add r4, sb, #0x38
|
|
mov r1, #0
|
|
add r8, r8, #0x40
|
|
add r6, r6, #1
|
|
ldmia fp, {r2, r3}
|
|
stmia ip, {r2, r3}
|
|
ldmia r7, {r2, r3}
|
|
stmia fp, {r2, r3}
|
|
ldmia r5, {r2, r3}
|
|
stmia r7, {r2, r3}
|
|
ldmia r4, {r2, r3}
|
|
stmia r5, {r2, r3}
|
|
str r1, [sb, #0x38]
|
|
str r1, [sb, #0x3c]
|
|
_01FF9274:
|
|
ldr r1, [sp]
|
|
ldrb r1, [r1, #6]
|
|
cmp r6, r1
|
|
blt _01FF9170
|
|
bl UpdateWindow
|
|
_01FF9288:
|
|
add sp, sp, #0x14
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FF9290: .word _022A88DC
|
|
_01FF9294: .word _022A88FC
|
|
_01FF9298: .word _022A88F0
|
|
arm_func_end sub_01FF9128
|
|
|
|
arm_func_start sub_01FF929C
|
|
sub_01FF929C: ; 0x01FF929C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x20
|
|
mov r1, #0xe0
|
|
mul r4, r0, r1
|
|
ldr r1, _01FF9428 ; =_022A88DC
|
|
add r1, r1, r4
|
|
str r1, [sp, #8]
|
|
ldrb r1, [r1, #7]
|
|
str r1, [sp, #4]
|
|
cmp r1, #1
|
|
blo _01FF9420
|
|
ldr r1, _01FF942C ; =_022A88FC
|
|
ldr r3, _01FF9430 ; =_022A88F0
|
|
ldr r2, [r1, r4]
|
|
ldr r8, [r3, r4]
|
|
add r1, r2, #8
|
|
str r1, [sp]
|
|
add fp, r2, #9
|
|
mov r6, #0
|
|
b _01FF940C
|
|
_01FF92EC:
|
|
ldr r1, [sp, #4]
|
|
mov sb, r8
|
|
sub r1, r1, #1
|
|
mov r7, #0
|
|
str r1, [sp, #0x18]
|
|
b _01FF9398
|
|
_01FF9304:
|
|
add r1, sb, #0x10
|
|
ldmia r1, {r2, r3}
|
|
stmia sb, {r2, r3}
|
|
ldr r2, [sp]
|
|
str r1, [sp, #0x1c]
|
|
add r1, sb, #8
|
|
str r1, [sp, #0xc]
|
|
add r2, sb, r2, lsl #3
|
|
str r2, [sp, #0x10]
|
|
add r2, sb, fp, lsl #3
|
|
str r2, [sp, #0x14]
|
|
ldr r2, [sp]
|
|
ldr sl, [sp, #0xc]
|
|
add r5, sb, #0x18
|
|
add r4, sb, #0x20
|
|
add lr, sb, #0x28
|
|
add ip, sb, #0x30
|
|
add r1, sb, #0x38
|
|
add sb, sb, r2, lsl #3
|
|
ldmia r5, {r2, r3}
|
|
stmia sl, {r2, r3}
|
|
ldr sl, [sp, #0x1c]
|
|
ldmia r4, {r2, r3}
|
|
stmia sl, {r2, r3}
|
|
ldmia lr, {r2, r3}
|
|
stmia r5, {r2, r3}
|
|
ldmia ip, {r2, r3}
|
|
stmia r4, {r2, r3}
|
|
ldmia r1, {r2, r3}
|
|
stmia lr, {r2, r3}
|
|
ldr r2, [sp, #0x10]
|
|
add r7, r7, #1
|
|
ldmia r2, {r2, r3}
|
|
stmia ip, {r2, r3}
|
|
ldr r2, [sp, #0x14]
|
|
ldmia r2, {r2, r3}
|
|
stmia r1, {r2, r3}
|
|
_01FF9398:
|
|
ldr r1, [sp, #0x18]
|
|
cmp r7, r1
|
|
blt _01FF9304
|
|
add ip, sb, #0x10
|
|
ldmia ip, {r2, r3}
|
|
stmia sb, {r2, r3}
|
|
add sl, sb, #0x18
|
|
add r1, sb, #8
|
|
ldmia sl, {r2, r3}
|
|
stmia r1, {r2, r3}
|
|
add r7, sb, #0x20
|
|
add r5, sb, #0x28
|
|
add r4, sb, #0x30
|
|
add r1, sb, #0x38
|
|
mov lr, #0
|
|
add r8, r8, #0x40
|
|
add r6, r6, #1
|
|
ldmia r7, {r2, r3}
|
|
stmia ip, {r2, r3}
|
|
ldmia r5, {r2, r3}
|
|
stmia sl, {r2, r3}
|
|
ldmia r4, {r2, r3}
|
|
stmia r7, {r2, r3}
|
|
ldmia r1, {r2, r3}
|
|
stmia r5, {r2, r3}
|
|
str lr, [sb, #0x30]
|
|
str lr, [sb, #0x34]
|
|
str lr, [sb, #0x38]
|
|
str lr, [sb, #0x3c]
|
|
_01FF940C:
|
|
ldr r1, [sp, #8]
|
|
ldrb r1, [r1, #6]
|
|
cmp r6, r1
|
|
blt _01FF92EC
|
|
bl UpdateWindow
|
|
_01FF9420:
|
|
add sp, sp, #0x20
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FF9428: .word _022A88DC
|
|
_01FF942C: .word _022A88FC
|
|
_01FF9430: .word _022A88F0
|
|
arm_func_end sub_01FF929C
|
|
|
|
arm_func_start GetKeyN2MSwitch
|
|
GetKeyN2MSwitch: ; 0x01FF9434
|
|
stmdb sp!, {r3, lr}
|
|
sub sp, sp, #8
|
|
ldr r2, _01FF9464 ; =_020A2CF8
|
|
add r3, sp, #0
|
|
#ifdef EUROPE
|
|
ldr ip, [r2, #8]
|
|
ldr r2, [r2, #0xc]
|
|
#else
|
|
ldr ip, [r2]
|
|
ldr r2, [r2, #4]
|
|
#endif
|
|
str ip, [sp]
|
|
str r2, [sp, #4]
|
|
ldr r1, [r3, r1, lsl #2]
|
|
blx r1
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_01FF9464: .word _020A2CF8
|
|
arm_func_end GetKeyN2MSwitch
|
|
|
|
arm_func_start GetKeyN2M
|
|
GetKeyN2M: ; 0x01FF9468
|
|
cmp r0, #0x258
|
|
subge r0, r0, #0x258
|
|
movge r0, r0, lsl #0x10
|
|
movge r0, r0, asr #0x10
|
|
cmp r0, #0
|
|
blt _01FF948C
|
|
ldr r1, _01FF94CC ; =0x0000022B
|
|
cmp r0, r1
|
|
blt _01FF9494
|
|
_01FF948C:
|
|
mov r0, #0
|
|
bx lr
|
|
_01FF9494:
|
|
ldr r2, _01FF94D0 ; =_020B09B4
|
|
mov r3, r0, lsl #0x1f
|
|
ldr r2, [r2, #0x14]
|
|
mov r0, r0, asr #1
|
|
ldr ip, [r2, r0, lsl #2]
|
|
mov r2, r3, lsr #0x1b
|
|
add r0, r1, #0x1d4
|
|
and r2, r0, ip, asr r2
|
|
sub r0, r1, #1
|
|
cmp r2, r0
|
|
movgt r0, #0
|
|
movle r0, r2, lsl #0x10
|
|
movle r0, r0, asr #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
_01FF94CC: .word 0x0000022B
|
|
_01FF94D0: .word _020B09B4
|
|
arm_func_end GetKeyN2M
|
|
|
|
arm_func_start GetKeyN2MBaseForm
|
|
GetKeyN2MBaseForm: ; 0x01FF94D4
|
|
stmdb sp!, {r3, lr}
|
|
cmp r0, #0
|
|
blt _01FF94EC
|
|
ldr r1, _01FF9508 ; =0x0000022B
|
|
cmp r0, r1
|
|
blt _01FF94F4
|
|
_01FF94EC:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
_01FF94F4:
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
bl GetKeyN2M
|
|
bl GetAllBaseForms
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_01FF9508: .word 0x0000022B
|
|
arm_func_end GetKeyN2MBaseForm
|
|
|
|
arm_func_start GetKeyM2NSwitch
|
|
GetKeyM2NSwitch: ; 0x01FF950C
|
|
stmdb sp!, {r3, lr}
|
|
sub sp, sp, #8
|
|
ldr r2, _01FF953C ; =_020A2CF8
|
|
add r3, sp, #0
|
|
#ifdef EUROPE
|
|
ldr ip, [r2]
|
|
ldr r2, [r2, #4]
|
|
#else
|
|
ldr ip, [r2, #8]
|
|
ldr r2, [r2, #0xc]
|
|
#endif
|
|
str ip, [sp]
|
|
str r2, [sp, #4]
|
|
ldr r1, [r3, r1, lsl #2]
|
|
blx r1
|
|
add sp, sp, #8
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_01FF953C: .word _020A2CF8
|
|
arm_func_end GetKeyM2NSwitch
|
|
|
|
arm_func_start GetKeyM2N
|
|
GetKeyM2N: ; 0x01FF9540
|
|
cmp r0, #0x258
|
|
subge r0, r0, #0x258
|
|
movge r0, r0, lsl #0x10
|
|
movge r0, r0, asr #0x10
|
|
cmp r0, #0
|
|
blt _01FF9564
|
|
ldr r1, _01FF95A0 ; =0x00000483
|
|
cmp r0, r1
|
|
blt _01FF9568
|
|
_01FF9564:
|
|
mov r0, #0
|
|
_01FF9568:
|
|
ldr r1, _01FF95A4 ; =_020B09B4
|
|
mov r2, r0, lsl #0x1f
|
|
ldr r3, [r1, #0x1c]
|
|
mov r1, r0, asr #1
|
|
ldr r3, [r3, r1, lsl #2]
|
|
ldr r0, _01FF95A8 ; =0x000003FF
|
|
mov r1, r2, lsr #0x1b
|
|
and r1, r0, r3, asr r1
|
|
sub r0, r0, #0x1d4
|
|
cmp r1, r0
|
|
movge r0, #0
|
|
movlt r0, r1, lsl #0x10
|
|
movlt r0, r0, asr #0x10
|
|
bx lr
|
|
.align 2, 0
|
|
_01FF95A0: .word 0x00000483
|
|
_01FF95A4: .word _020B09B4
|
|
_01FF95A8: .word 0x000003FF
|
|
arm_func_end GetKeyM2N
|
|
|
|
arm_func_start GetKeyM2NBaseForm
|
|
GetKeyM2NBaseForm: ; 0x01FF95AC
|
|
stmdb sp!, {r3, lr}
|
|
cmp r0, #0x258
|
|
subge r0, r0, #0x258
|
|
movge r0, r0, lsl #0x10
|
|
movge r0, r0, asr #0x10
|
|
cmp r0, #0
|
|
blt _01FF95D4
|
|
ldr r1, _01FF95E4 ; =0x00000483
|
|
cmp r0, r1
|
|
blt _01FF95D8
|
|
_01FF95D4:
|
|
mov r0, #0
|
|
_01FF95D8:
|
|
bl GetAllBaseForms
|
|
bl GetKeyM2N
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_01FF95E4: .word 0x00000483
|
|
arm_func_end GetKeyM2NBaseForm
|
|
|
|
arm_func_start sub_01FF95E8
|
|
sub_01FF95E8: ; 0x01FF95E8
|
|
stmdb sp!, {lr}
|
|
mov ip, #0x4000000
|
|
add ip, ip, #0x210
|
|
ldr r1, [ip, #-8]
|
|
cmp r1, #0
|
|
beq _01FF9604
|
|
b _01FF9608
|
|
_01FF9604:
|
|
ldmia sp!, {pc}
|
|
_01FF9608:
|
|
ldmia ip, {r1, r2}
|
|
ands r1, r1, r2
|
|
beq _01FF9618
|
|
b _01FF961C
|
|
_01FF9618:
|
|
ldmia sp!, {pc}
|
|
_01FF961C:
|
|
mov r3, #0x80000000
|
|
_01FF9620:
|
|
clz r0, r1
|
|
bics r1, r1, r3, lsr r0
|
|
bne _01FF9620
|
|
mov r1, r3, lsr r0
|
|
str r1, [ip, #4]
|
|
rsbs r0, r0, #0x1f
|
|
ldr r1, _01FF9648 ; =OS_IRQTable
|
|
ldr r0, [r1, r0, lsl #2]
|
|
ldr lr, _01FF964C ; =sub_01FF9650
|
|
bx r0
|
|
.align 2, 0
|
|
_01FF9648: .word OS_IRQTable
|
|
_01FF964C: .word sub_01FF9650
|
|
arm_func_end sub_01FF95E8
|
|
|
|
arm_func_start sub_01FF9650
|
|
sub_01FF9650: ; 0x01FF9650
|
|
ldr ip, _01FF97BC ; =DTCM_BSS
|
|
mov r3, #0
|
|
ldr ip, [ip]
|
|
mov r2, #1
|
|
cmp ip, #0
|
|
beq _01FF96A0
|
|
_01FF9668:
|
|
str r2, [ip, #0x64]
|
|
str r3, [ip, #0x78]
|
|
str r3, [ip, #0x7c]
|
|
ldr r0, [ip, #0x80]
|
|
str r3, [ip, #0x80]
|
|
mov ip, r0
|
|
cmp ip, #0
|
|
bne _01FF9668
|
|
ldr ip, _01FF97BC ; =DTCM_BSS
|
|
str r3, [ip]
|
|
str r3, [ip, #4]
|
|
ldr ip, _01FF97C0 ; =_022B966C
|
|
mov r1, #1
|
|
strh r1, [ip]
|
|
_01FF96A0:
|
|
ldr ip, _01FF97C0 ; =_022B966C
|
|
ldrh r1, [ip]
|
|
cmp r1, #0
|
|
beq _01FF96B4
|
|
b _01FF96B8
|
|
_01FF96B4:
|
|
ldr pc, [sp], #4
|
|
_01FF96B8:
|
|
mov r1, #0
|
|
strh r1, [ip]
|
|
mov r3, #0xd2
|
|
msr cpsr_c, r3
|
|
add r2, ip, #8
|
|
ldr r1, [r2]
|
|
_01FF96D0:
|
|
cmp r1, #0
|
|
bne _01FF96DC
|
|
b _01FF96E0
|
|
_01FF96DC:
|
|
ldrh r0, [r1, #0x64]
|
|
_01FF96E0:
|
|
bne _01FF96E8
|
|
b _01FF96EC
|
|
_01FF96E8:
|
|
cmp r0, #1
|
|
_01FF96EC:
|
|
bne _01FF96F4
|
|
b _01FF96F8
|
|
_01FF96F4:
|
|
ldr r1, [r1, #0x68]
|
|
_01FF96F8:
|
|
bne _01FF96D0
|
|
cmp r1, #0
|
|
bne _01FF9710
|
|
_01FF9704:
|
|
mov r3, #0x92
|
|
msr cpsr_c, r3
|
|
ldr pc, [sp], #4
|
|
_01FF9710:
|
|
ldr r0, [ip, #4]
|
|
cmp r1, r0
|
|
beq _01FF9704
|
|
ldr r3, [ip, #0xc]
|
|
cmp r3, #0
|
|
beq _01FF9738
|
|
stmdb sp!, {r0, r1, ip}
|
|
mov lr, pc
|
|
bx r3
|
|
_01FF9734:
|
|
.byte 0x03, 0x10, 0xBD, 0xE8
|
|
_01FF9738:
|
|
str r1, [ip, #4]
|
|
mrs r2, spsr
|
|
str r2, [r0, #0]!
|
|
stmdb sp!, {r0, r1}
|
|
add r0, r0, #0
|
|
add r0, r0, #0x48
|
|
ldr r1, _01FF97C4 ; =sub_02080EF0
|
|
blx r1
|
|
ldmia sp!, {r0, r1}
|
|
ldmib sp!, {r2, r3}
|
|
stmib r0!, {r2, r3}
|
|
ldmib sp!, {r2, r3, ip, lr}
|
|
stmib r0!, {r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, sp, lr} ^
|
|
stmib r0!, {lr}
|
|
mov r3, #0xd3
|
|
msr cpsr_c, r3
|
|
stmib r0!, {sp}
|
|
stmdb sp!, {r1}
|
|
add r0, r1, #0
|
|
add r0, r0, #0x48
|
|
ldr r1, _01FF97C8 ; =sub_02080F30
|
|
blx r1
|
|
ldmia sp!, {r1}
|
|
ldr sp, [r1, #0x44]
|
|
mov r3, #0xd2
|
|
msr cpsr_c, r3
|
|
ldr r2, [r1, #0]!
|
|
msr spsr_fc, r2
|
|
ldr lr, [r1, #0x40]
|
|
ldmib r1, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, sp, lr} ^
|
|
mov r0, r0
|
|
stmda sp!, {r0, r1, r2, r3, ip, lr}
|
|
ldmia sp!, {pc}
|
|
.align 2, 0
|
|
_01FF97BC: .word DTCM_BSS
|
|
_01FF97C0: .word _022B966C
|
|
_01FF97C4: .word sub_02080EF0
|
|
_01FF97C8: .word sub_02080F30
|
|
arm_func_end sub_01FF9650
|
|
|
|
arm_func_start sub_01FF97CC
|
|
sub_01FF97CC: ; 0x01FF97CC
|
|
stmdb sp!, {r3, lr}
|
|
ldr r0, _01FF97F8 ; =_022B99D0
|
|
_01FF97D4:
|
|
ldrh r1, [r0]
|
|
cmp r1, #0
|
|
beq _01FF97D4
|
|
ldr r0, _01FF97FC ; =0x04000208
|
|
mov r1, #0
|
|
strh r1, [r0]
|
|
bl sub_01FF98E8
|
|
bl sub_01FF9800
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_01FF97F8: .word _022B99D0
|
|
_01FF97FC: .word 0x04000208
|
|
arm_func_end sub_01FF97CC
|
|
|
|
arm_func_start sub_01FF9800
|
|
sub_01FF9800: ; 0x01FF9800
|
|
mov ip, #0x4000000
|
|
str ip, [ip, #0x208]
|
|
ldr r1, _01FF98AC ; =OS_IRQTable
|
|
add r1, r1, #0x3fc0
|
|
add r1, r1, #0x3c
|
|
mov r0, #0
|
|
str r0, [r1]
|
|
ldr r1, _01FF98B0 ; =0x04000180
|
|
_01FF9820:
|
|
ldrh r0, [r1]
|
|
and r0, r0, #0xf
|
|
cmp r0, #1
|
|
bne _01FF9820
|
|
mov r0, #0x100
|
|
strh r0, [r1]
|
|
mov r0, #0
|
|
ldr r3, _01FF98B4 ; =0x027FFD9C
|
|
ldr r4, [r3]
|
|
ldr r1, _01FF98B8 ; =0x027FFD80
|
|
mov r2, #0x80
|
|
bl sub_01FF98CC
|
|
str r4, [r3]
|
|
ldr r1, _01FF98BC ; =0x027FFF80
|
|
mov r2, #0x18
|
|
bl sub_01FF98CC
|
|
ldr r1, _01FF98C0 ; =0x027FFF98
|
|
strh r0, [r1]
|
|
ldr r1, _01FF98C4 ; =0x027FFF9C
|
|
mov r2, #0x64
|
|
bl sub_01FF98CC
|
|
ldr r1, _01FF98B0 ; =0x04000180
|
|
_01FF9878:
|
|
ldrh r0, [r1]
|
|
and r0, r0, #0xf
|
|
cmp r0, #1
|
|
beq _01FF9878
|
|
mov r0, #0
|
|
strh r0, [r1]
|
|
ldr r3, _01FF98C8 ; =0x027FFE00
|
|
ldr ip, [r3, #0x24]
|
|
mov lr, ip
|
|
ldr fp, _01FF98BC ; =0x027FFF80
|
|
ldmia fp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl}
|
|
mov fp, #0
|
|
bx ip
|
|
.align 2, 0
|
|
_01FF98AC: .word OS_IRQTable
|
|
_01FF98B0: .word 0x04000180
|
|
_01FF98B4: .word 0x027FFD9C
|
|
_01FF98B8: .word 0x027FFD80
|
|
_01FF98BC: .word 0x027FFF80
|
|
_01FF98C0: .word 0x027FFF98
|
|
_01FF98C4: .word 0x027FFF9C
|
|
_01FF98C8: .word 0x027FFE00
|
|
arm_func_end sub_01FF9800
|
|
|
|
arm_func_start sub_01FF98CC
|
|
sub_01FF98CC: ; 0x01FF98CC
|
|
add ip, r1, r2
|
|
_01FF98D0:
|
|
cmp r1, ip
|
|
blt _01FF98DC
|
|
b _01FF98E0
|
|
_01FF98DC:
|
|
stmia r1!, {r0}
|
|
_01FF98E0:
|
|
blt _01FF98D0
|
|
bx lr
|
|
arm_func_end sub_01FF98CC
|
|
|
|
arm_func_start sub_01FF98E8
|
|
sub_01FF98E8: ; 0x01FF98E8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r1, _01FF9988 ; =0x027FFC2C
|
|
ldr r4, [r1]
|
|
cmp r4, #0x8000
|
|
blo _01FF990C
|
|
mov r0, r4
|
|
add r1, r1, #0x1d4
|
|
mov r2, #0x160
|
|
bl sub_01FF9990
|
|
_01FF990C:
|
|
ldr r0, _01FF998C ; =0x027FFE20
|
|
ldr r5, [r0]
|
|
ldr r6, [r0, #8]
|
|
ldr r7, [r0, #0xc]
|
|
ldr r8, [r0, #0x10]
|
|
ldr sb, [r0, #0x18]
|
|
ldr sl, [r0, #0x1c]
|
|
bl EnableIrqFlag
|
|
mov fp, r0
|
|
bl sub_0207A244
|
|
bl sub_0207A238
|
|
mov r0, fp
|
|
bl SetIrqFlag
|
|
bl sub_0207A324
|
|
bl sub_0207A300
|
|
add r5, r5, r4
|
|
cmp r5, #0x8000
|
|
bhs _01FF9964
|
|
rsb r0, r5, #0x8000
|
|
add r6, r6, r0
|
|
sub r7, r7, r0
|
|
mov r5, #0x8000
|
|
_01FF9964:
|
|
mov r0, r5
|
|
mov r1, r6
|
|
mov r2, r7
|
|
bl sub_01FF9990
|
|
mov r1, sb
|
|
mov r2, sl
|
|
add r0, r8, r4
|
|
bl sub_01FF9990
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FF9988: .word 0x027FFC2C
|
|
_01FF998C: .word 0x027FFE20
|
|
arm_func_end sub_01FF98E8
|
|
|
|
arm_func_start sub_01FF9990
|
|
sub_01FF9990: ; 0x01FF9990
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r4, _01FF9A54 ; =0x027FFE60
|
|
ldr r3, _01FF9A58 ; =0x000001FF
|
|
ldr r5, [r4]
|
|
and r4, r0, r3
|
|
bic r3, r5, #0x7000000
|
|
ldr r5, _01FF9A5C ; =0x040001A4
|
|
orr r3, r3, #0xa1000000
|
|
rsb ip, r4, #0
|
|
_01FF99B4:
|
|
ldr r4, [r5]
|
|
tst r4, #0x80000000
|
|
bne _01FF99B4
|
|
ldr r7, _01FF9A60 ; =0x040001A1
|
|
mov r4, #0x80
|
|
strb r4, [r7]
|
|
cmp ip, r2
|
|
add r0, r0, ip
|
|
ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldr r4, _01FF9A64 ; =0x04100010
|
|
mov sb, r0, lsr #8
|
|
mov r6, #0xb7
|
|
mov r5, #0
|
|
_01FF99E8:
|
|
strb r6, [r7, #7]
|
|
mov lr, r0, lsr #0x18
|
|
strb lr, [r7, #8]
|
|
mov lr, r0, lsr #0x10
|
|
strb lr, [r7, #9]
|
|
strb sb, [r7, #0xa]
|
|
strb r0, [r7, #0xb]
|
|
strb r5, [r7, #0xc]
|
|
strb r5, [r7, #0xd]
|
|
strb r5, [r7, #0xe]
|
|
str r3, [r7, #3]
|
|
_01FF9A14:
|
|
ldr r8, [r7, #3]
|
|
tst r8, #0x800000
|
|
beq _01FF9A38
|
|
cmp ip, #0
|
|
ldr lr, [r4]
|
|
blt _01FF9A34
|
|
cmp ip, r2
|
|
strlt lr, [r1, ip]
|
|
_01FF9A34:
|
|
add ip, ip, #4
|
|
_01FF9A38:
|
|
tst r8, #0x80000000
|
|
bne _01FF9A14
|
|
cmp ip, r2
|
|
add sb, sb, #2
|
|
add r0, r0, #0x200
|
|
blt _01FF99E8
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_01FF9A54: .word 0x027FFE60
|
|
_01FF9A58: .word 0x000001FF
|
|
_01FF9A5C: .word 0x040001A4
|
|
_01FF9A60: .word 0x040001A1
|
|
_01FF9A64: .word 0x04100010
|
|
arm_func_end sub_01FF9990
|
|
|
|
arm_func_start sub_01FF9A68
|
|
sub_01FF9A68: ; 0x01FF9A68
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl EnableIrqFlag
|
|
mov r1, #0xc
|
|
mul r2, r7, r1
|
|
add r1, r2, #0xb0
|
|
add r2, r2, #0x4000000
|
|
str r6, [r2, #0xb0]
|
|
add r1, r1, #0x4000000
|
|
str r5, [r1, #4]
|
|
str r4, [r1, #8]
|
|
bl SetIrqFlag
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end sub_01FF9A68
|
|
|
|
arm_func_start sub_01FF9AA8
|
|
sub_01FF9AA8: ; 0x01FF9AA8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl EnableIrqFlag
|
|
mov r1, #0xc
|
|
mul r2, r7, r1
|
|
add r1, r2, #0xb0
|
|
add r2, r2, #0x4000000
|
|
str r6, [r2, #0xb0]
|
|
add r3, r1, #0x4000000
|
|
str r5, [r3, #4]
|
|
ldr r2, _01FF9B10 ; =0x040000B0
|
|
str r4, [r3, #8]
|
|
ldr r1, [r2]
|
|
cmp r7, #0
|
|
ldr r1, [r2]
|
|
bne _01FF9B08
|
|
mov r2, #0
|
|
str r2, [r3]
|
|
ldr r1, _01FF9B14 ; =0x81400001
|
|
str r2, [r3, #4]
|
|
str r1, [r3, #8]
|
|
_01FF9B08:
|
|
bl SetIrqFlag
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_01FF9B10: .word 0x040000B0
|
|
_01FF9B14: .word 0x81400001
|
|
arm_func_end sub_01FF9AA8
|
|
|
|
arm_func_start sub_01FF9B18
|
|
sub_01FF9B18: ; 0x01FF9B18
|
|
mov ip, #0xc
|
|
mul ip, r0, ip
|
|
add r0, ip, #0xb0
|
|
add ip, ip, #0x4000000
|
|
str r1, [ip, #0xb0]
|
|
add r0, r0, #0x4000000
|
|
str r2, [r0, #4]
|
|
str r3, [r0, #8]
|
|
bx lr
|
|
arm_func_end sub_01FF9B18
|
|
|
|
arm_func_start sub_01FF9B3C
|
|
sub_01FF9B3C: ; 0x01FF9B3C
|
|
stmdb sp!, {r3, lr}
|
|
mov ip, #0xc
|
|
mul lr, r0, ip
|
|
add ip, lr, #0xb0
|
|
add lr, lr, #0x4000000
|
|
str r1, [lr, #0xb0]
|
|
add ip, ip, #0x4000000
|
|
str r2, [ip, #4]
|
|
ldr r2, _01FF9B98 ; =0x040000B0
|
|
str r3, [ip, #8]
|
|
ldr r1, [r2]
|
|
cmp r0, #0
|
|
ldr r0, [r2]
|
|
bne _01FF9B88
|
|
mov r1, #0
|
|
str r1, [ip]
|
|
ldr r0, _01FF9B9C ; =0x81400001
|
|
str r1, [ip, #4]
|
|
str r0, [ip, #8]
|
|
_01FF9B88:
|
|
ldr r1, _01FF9B98 ; =0x040000B0
|
|
ldr r0, [r1]
|
|
ldr r0, [r1]
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_01FF9B98: .word 0x040000B0
|
|
_01FF9B9C: .word 0x81400001
|
|
arm_func_end sub_01FF9B3C
|
|
|
|
arm_func_start sub_01FF9BA0
|
|
sub_01FF9BA0: ; 0x01FF9BA0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r1, [r0, #0x10]
|
|
ldrh lr, [r0, #0xa]
|
|
cmp r1, #0
|
|
ldr r2, [r0, #0x18]
|
|
ldr r3, [r0, #0x1c]
|
|
beq _01FF9CFC
|
|
mov ip, #0
|
|
_01FF9BC0:
|
|
ldrb r4, [r2, #1]
|
|
ldrb r5, [r2, #2]
|
|
ldrb r6, [r2], #4
|
|
add r4, r1, r4, lsl #2
|
|
add r5, r1, r5, lsl #2
|
|
ldrb r4, [r4, #1]
|
|
ldrb r5, [r5, #2]
|
|
ldrb r6, [r1, r6, lsl #2]
|
|
mul r4, lr, r4
|
|
mul r5, lr, r5
|
|
mul r6, lr, r6
|
|
mov r4, r4, lsr #8
|
|
mov r7, r6, lsr #8
|
|
mov r5, r5, lsr #8
|
|
and r6, r5, #0xff
|
|
and r4, r4, #0xff
|
|
and r5, r4, #0xf8
|
|
and r7, r7, #0xff
|
|
mov r4, ip, lsl #1
|
|
add ip, ip, #1
|
|
and r6, r6, #0xf8
|
|
mov r5, r5, lsl #2
|
|
and r7, r7, #0xf8
|
|
orr r5, r5, r6, lsl #7
|
|
orr r5, r5, r7, asr #3
|
|
strh r5, [r3, r4]
|
|
cmp ip, #0xe0
|
|
blt _01FF9BC0
|
|
b _01FF9C64
|
|
_01FF9C34:
|
|
ldrb r4, [r2, #1]
|
|
ldrb r5, [r2, #2]
|
|
ldrb r7, [r2], #4
|
|
and r4, r4, #0xf8
|
|
and r6, r5, #0xf8
|
|
mov r5, r4, lsl #2
|
|
mov r4, ip, lsl #1
|
|
and r7, r7, #0xf8
|
|
orr r5, r5, r6, lsl #7
|
|
orr r5, r5, r7, asr #3
|
|
strh r5, [r3, r4]
|
|
add ip, ip, #1
|
|
_01FF9C64:
|
|
cmp ip, #0xf0
|
|
blt _01FF9C34
|
|
b _01FF9CD8
|
|
_01FF9C70:
|
|
ldrb r4, [r2, #1]
|
|
ldrb r5, [r2, #2]
|
|
ldrb r6, [r2], #4
|
|
add r4, r1, r4, lsl #2
|
|
add r5, r1, r5, lsl #2
|
|
ldrb r4, [r4, #1]
|
|
ldrb r5, [r5, #2]
|
|
ldrb r6, [r1, r6, lsl #2]
|
|
mul r4, lr, r4
|
|
mul r5, lr, r5
|
|
mul r6, lr, r6
|
|
mov r4, r4, lsr #8
|
|
mov r7, r6, lsr #8
|
|
mov r5, r5, lsr #8
|
|
and r6, r5, #0xff
|
|
and r4, r4, #0xff
|
|
and r5, r4, #0xf8
|
|
and r7, r7, #0xff
|
|
mov r4, ip, lsl #1
|
|
and r6, r6, #0xf8
|
|
mov r5, r5, lsl #2
|
|
and r7, r7, #0xf8
|
|
orr r5, r5, r6, lsl #7
|
|
orr r5, r5, r7, asr #3
|
|
strh r5, [r3, r4]
|
|
add ip, ip, #1
|
|
_01FF9CD8:
|
|
ldr r4, [r0, #4]
|
|
cmp ip, r4
|
|
blt _01FF9C70
|
|
ldr r1, _01FF9E10 ; =ov29_02353530
|
|
mov r0, r3
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x4c
|
|
bl Rgb8ToRgb5
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_01FF9CFC:
|
|
mov r0, #0
|
|
_01FF9D00:
|
|
ldrb r1, [r2, #1]
|
|
ldrb r5, [r2, #2]
|
|
ldrb r7, [r2], #4
|
|
mul r4, r1, lr
|
|
mul r6, r5, lr
|
|
mov r1, r4, lsr #8
|
|
mul r5, r7, lr
|
|
mov r4, r6, lsr #8
|
|
mov r6, r5, lsr #8
|
|
and r5, r4, #0xff
|
|
and r1, r1, #0xff
|
|
and r4, r1, #0xf8
|
|
and r6, r6, #0xff
|
|
mov r1, r0, lsl #1
|
|
add r0, r0, #1
|
|
and r5, r5, #0xf8
|
|
mov r4, r4, lsl #2
|
|
and r6, r6, #0xf8
|
|
orr r4, r4, r5, lsl #7
|
|
orr r4, r4, r6, asr #3
|
|
strh r4, [r3, r1]
|
|
cmp r0, #0xe0
|
|
blt _01FF9D00
|
|
b _01FF9D90
|
|
_01FF9D60:
|
|
ldrb r1, [r2, #1]
|
|
ldrb r4, [r2, #2]
|
|
ldrb r6, [r2], #4
|
|
and r1, r1, #0xf8
|
|
and r5, r4, #0xf8
|
|
mov r4, r1, lsl #2
|
|
mov r1, r0, lsl #1
|
|
and r6, r6, #0xf8
|
|
orr r4, r4, r5, lsl #7
|
|
orr r4, r4, r6, asr #3
|
|
strh r4, [r3, r1]
|
|
add r0, r0, #1
|
|
_01FF9D90:
|
|
cmp r0, #0xf0
|
|
blt _01FF9D60
|
|
b _01FF9DF0
|
|
_01FF9D9C:
|
|
ldrb r1, [r2, #1]
|
|
ldrb r4, [r2, #2]
|
|
ldrb r6, [r2], #4
|
|
mul ip, r1, lr
|
|
mul r5, r4, lr
|
|
mov r1, ip, lsr #8
|
|
mov r4, r5, lsr #8
|
|
mul r7, r6, lr
|
|
and r1, r1, #0xff
|
|
and ip, r1, #0xf8
|
|
mov r5, r7, lsr #8
|
|
and r4, r4, #0xff
|
|
and r5, r5, #0xff
|
|
mov r1, r0, lsl #1
|
|
and r4, r4, #0xf8
|
|
mov ip, ip, lsl #2
|
|
and r5, r5, #0xf8
|
|
orr r4, ip, r4, lsl #7
|
|
orr r4, r4, r5, asr #3
|
|
strh r4, [r3, r1]
|
|
add r0, r0, #1
|
|
_01FF9DF0:
|
|
cmp r0, #0xf0
|
|
blt _01FF9D9C
|
|
ldr r1, _01FF9E10 ; =ov29_02353530
|
|
mov r0, r3
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x4c
|
|
bl Rgb8ToRgb5
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_01FF9E10: .word ov29_02353530
|
|
arm_func_end sub_01FF9BA0
|
|
|
|
arm_func_start sub_01FF9E14
|
|
sub_01FF9E14: ; 0x01FF9E14
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r1, _01FF9F7C ; =ov29_02353530
|
|
ldr r4, [r0, #0x10]
|
|
ldr r1, [r1]
|
|
cmp r4, #0
|
|
add sb, r1, #0x51
|
|
ldrh sl, [r0, #0xa]
|
|
ldr r5, [r0, #0x18]
|
|
ldr r6, [r0, #0x1c]
|
|
mov r7, #0
|
|
beq _01FF9EE8
|
|
ldr r8, [r0, #4]
|
|
mov fp, r7
|
|
b _01FF9EDC
|
|
_01FF9E4C:
|
|
ldrb r0, [sb, r7, asr #4]
|
|
cmp r0, #0
|
|
ldrneb r0, [r5]
|
|
ldrneb r2, [r5, #1]
|
|
ldrneb r3, [r5, #2]
|
|
bne _01FF9EA8
|
|
ldrb r1, [r5, #1]
|
|
ldrb r0, [r5, #2]
|
|
ldrb r2, [r5]
|
|
add r1, r4, r1, lsl #2
|
|
add r0, r4, r0, lsl #2
|
|
ldrb r2, [r4, r2, lsl #2]
|
|
ldrb r1, [r1, #1]
|
|
ldrb r0, [r0, #2]
|
|
mul r2, sl, r2
|
|
mul r1, sl, r1
|
|
mul r0, sl, r0
|
|
mov r3, r2, lsr #8
|
|
mov r2, r1, lsr #8
|
|
mov r1, r0, lsr #8
|
|
and r0, r3, #0xff
|
|
and r2, r2, #0xff
|
|
and r3, r1, #0xff
|
|
_01FF9EA8:
|
|
and r1, r2, #0xf8
|
|
and r2, r3, #0xf8
|
|
mov r1, r1, lsl #2
|
|
and r3, r0, #0xf8
|
|
orr r0, r1, r2, lsl #7
|
|
mov r1, fp
|
|
orr r3, r0, r3, asr #3
|
|
mov r2, r7, lsl #1
|
|
and r0, r7, #0xff
|
|
strh r3, [r6, r2]
|
|
bl sub_0201BD50
|
|
add r5, r5, #4
|
|
add r7, r7, #1
|
|
_01FF9EDC:
|
|
cmp r7, r8
|
|
blt _01FF9E4C
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FF9EE8:
|
|
ldr r4, [r0, #4]
|
|
mov r8, r7
|
|
b _01FF9F70
|
|
_01FF9EF4:
|
|
ldrb r0, [sb, r7, asr #4]
|
|
cmp r0, #0
|
|
ldrneb r3, [r5]
|
|
ldrneb r1, [r5, #1]
|
|
ldrneb r2, [r5, #2]
|
|
bne _01FF9F3C
|
|
ldrb r2, [r5]
|
|
ldrb r1, [r5, #1]
|
|
ldrb r0, [r5, #2]
|
|
mul r3, r2, sl
|
|
mul r2, r1, sl
|
|
mul r1, r0, sl
|
|
mov r3, r3, lsr #8
|
|
mov r2, r2, lsr #8
|
|
mov r0, r1, lsr #8
|
|
and r3, r3, #0xff
|
|
and r1, r2, #0xff
|
|
and r2, r0, #0xff
|
|
_01FF9F3C:
|
|
and r0, r1, #0xf8
|
|
and r1, r2, #0xf8
|
|
mov r0, r0, lsl #2
|
|
and r2, r3, #0xf8
|
|
orr r0, r0, r1, lsl #7
|
|
mov r1, r8
|
|
orr r3, r0, r2, asr #3
|
|
mov r2, r7, lsl #1
|
|
and r0, r7, #0xff
|
|
strh r3, [r6, r2]
|
|
bl sub_0201BD50
|
|
add r5, r5, #4
|
|
add r7, r7, #1
|
|
_01FF9F70:
|
|
cmp r7, r4
|
|
blt _01FF9EF4
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FF9F7C: .word ov29_02353530
|
|
arm_func_end sub_01FF9E14
|
|
|
|
arm_func_start sub_01FF9F80
|
|
sub_01FF9F80: ; 0x01FF9F80
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r1, _01FFA38C ; =ov29_02353530
|
|
ldr r4, [r0, #0x10]
|
|
ldr r1, [r1]
|
|
cmp r4, #0
|
|
add sb, r1, #0x51
|
|
ldrh sl, [r0, #0xa]
|
|
ldr r5, [r0, #0x18]
|
|
ldr r6, [r0, #0x1c]
|
|
beq _01FFA290
|
|
mov r8, #0
|
|
_01FF9FAC:
|
|
and r0, r8, #0xff
|
|
add fp, sb, r8
|
|
mov r7, #0
|
|
str r0, [sp]
|
|
_01FF9FBC:
|
|
ldrb r0, [fp, #0x10]
|
|
add r1, r7, r8, lsl #8
|
|
add r2, r5, r1, lsl #2
|
|
cmp r0, #0
|
|
ldrneb r0, [r2, #1]
|
|
ldrneb r3, [r5, r1, lsl #2]
|
|
ldrneb r2, [r2, #2]
|
|
bne _01FFA020
|
|
ldrb r0, [r2, #1]
|
|
ldrb ip, [r2, #2]
|
|
ldrb r2, [r5, r1, lsl #2]
|
|
add r0, r4, r0, lsl #2
|
|
ldrb r0, [r0, #1]
|
|
ldrb r3, [r4, r2, lsl #2]
|
|
add r2, r4, ip, lsl #2
|
|
ldrb r2, [r2, #2]
|
|
mul r0, sl, r0
|
|
mul r3, sl, r3
|
|
mul r2, sl, r2
|
|
mov r3, r3, lsr #8
|
|
mov r0, r0, lsr #8
|
|
mov r2, r2, lsr #8
|
|
and r3, r3, #0xff
|
|
and r0, r0, #0xff
|
|
and r2, r2, #0xff
|
|
_01FFA020:
|
|
and r0, r0, #0xf8
|
|
and r2, r2, #0xf8
|
|
mov r0, r0, lsl #2
|
|
orr r2, r0, r2, lsl #7
|
|
and r3, r3, #0xf8
|
|
orr r3, r2, r3, asr #3
|
|
mov r1, r1, lsl #1
|
|
strh r3, [r6, r1]
|
|
ldr r0, [sp]
|
|
mov r2, #0
|
|
and r1, r7, #0xff
|
|
bl sub_0201BD80
|
|
add r7, r7, #1
|
|
cmp r7, #0x10
|
|
blt _01FF9FBC
|
|
mov r7, #0x10
|
|
and fp, r8, #0xff
|
|
_01FFA064:
|
|
add r1, r7, r8, lsl #8
|
|
add r2, r5, r1, lsl #2
|
|
ldrb r0, [r2, #1]
|
|
ldrb r3, [r2, #2]
|
|
ldrb r2, [r5, r1, lsl #2]
|
|
add r0, r4, r0, lsl #2
|
|
add ip, r4, r3, lsl #2
|
|
ldrb r3, [r0, #1]
|
|
ldrb r0, [ip, #2]
|
|
ldrb ip, [r4, r2, lsl #2]
|
|
mul r2, sl, r3
|
|
mul r3, sl, r0
|
|
mul r0, sl, ip
|
|
mov r2, r2, lsr #8
|
|
mov r3, r3, lsr #8
|
|
and r2, r2, #0xff
|
|
mov r0, r0, lsr #8
|
|
and r2, r2, #0xf8
|
|
and r3, r3, #0xff
|
|
and ip, r0, #0xff
|
|
and r0, r3, #0xf8
|
|
mov r2, r2, lsl #2
|
|
and r3, ip, #0xf8
|
|
orr ip, r2, r0, lsl #7
|
|
orr r3, ip, r3, asr #3
|
|
mov ip, r1, lsl #1
|
|
mov r0, fp
|
|
mov r2, #0
|
|
and r1, r7, #0xff
|
|
strh r3, [r6, ip]
|
|
bl sub_0201BD80
|
|
add r7, r7, #1
|
|
cmp r7, #0x20
|
|
blt _01FFA064
|
|
mov r7, #0xc0
|
|
and fp, r8, #0xff
|
|
_01FFA0F4:
|
|
add r1, r7, r8, lsl #8
|
|
add r2, r5, r1, lsl #2
|
|
ldrb r0, [r2, #1]
|
|
ldrb r3, [r2, #2]
|
|
ldrb r2, [r5, r1, lsl #2]
|
|
add r0, r4, r0, lsl #2
|
|
add ip, r4, r3, lsl #2
|
|
ldrb r3, [r0, #1]
|
|
ldrb r0, [ip, #2]
|
|
ldrb ip, [r4, r2, lsl #2]
|
|
mul r2, sl, r3
|
|
mul r3, sl, r0
|
|
mul r0, sl, ip
|
|
mov r2, r2, lsr #8
|
|
mov r3, r3, lsr #8
|
|
and r2, r2, #0xff
|
|
mov r0, r0, lsr #8
|
|
and r2, r2, #0xf8
|
|
and r3, r3, #0xff
|
|
and ip, r0, #0xff
|
|
and r0, r3, #0xf8
|
|
mov r2, r2, lsl #2
|
|
and r3, ip, #0xf8
|
|
orr ip, r2, r0, lsl #7
|
|
orr r3, ip, r3, asr #3
|
|
mov ip, r1, lsl #1
|
|
mov r0, fp
|
|
mov r2, #0
|
|
and r1, r7, #0xff
|
|
strh r3, [r6, ip]
|
|
bl sub_0201BD80
|
|
add r7, r7, #1
|
|
cmp r7, #0xf0
|
|
blt _01FFA0F4
|
|
mov r7, #0xf0
|
|
mov r1, r7
|
|
and r0, r8, #0xff
|
|
mov r2, #0
|
|
bl sub_0201BD80
|
|
_01FFA190:
|
|
add r1, r7, r8, lsl #8
|
|
add r2, r5, r1, lsl #2
|
|
ldrb r0, [r2, #1]
|
|
ldrb r3, [r2, #2]
|
|
ldrb fp, [r5, r1, lsl #2]
|
|
mul r2, sl, r0
|
|
mul r3, sl, r3
|
|
mul r0, sl, fp
|
|
mov r2, r2, lsr #8
|
|
mov r3, r3, lsr #8
|
|
and r2, r2, #0xff
|
|
mov fp, r0, lsr #8
|
|
and r3, r3, #0xff
|
|
and r0, r2, #0xf8
|
|
and fp, fp, #0xff
|
|
add r7, r7, #1
|
|
and r2, r3, #0xf8
|
|
mov r0, r0, lsl #2
|
|
and r3, fp, #0xf8
|
|
orr r0, r0, r2, lsl #7
|
|
orr r2, r0, r3, asr #3
|
|
mov r0, r1, lsl #1
|
|
strh r2, [r6, r0]
|
|
cmp r7, #0x100
|
|
blt _01FFA190
|
|
add r8, r8, #1
|
|
cmp r8, #0x10
|
|
blt _01FF9FAC
|
|
mov r7, #0xb0
|
|
mov r8, #0
|
|
_01FFA208:
|
|
add r1, r5, r7, lsl #2
|
|
ldrb r0, [r1, #1]
|
|
ldrb r1, [r1, #2]
|
|
ldrb r2, [r5, r7, lsl #2]
|
|
add r0, r4, r0, lsl #2
|
|
add r1, r4, r1, lsl #2
|
|
ldrb r0, [r0, #1]
|
|
ldrb r1, [r1, #2]
|
|
ldrb r2, [r4, r2, lsl #2]
|
|
mul r0, sl, r0
|
|
mul r1, sl, r1
|
|
mul r2, sl, r2
|
|
mov r0, r0, lsr #8
|
|
mov r1, r1, lsr #8
|
|
and r0, r0, #0xff
|
|
mov r2, r2, lsr #8
|
|
and r1, r1, #0xff
|
|
and r0, r0, #0xf8
|
|
and r2, r2, #0xff
|
|
and r1, r1, #0xf8
|
|
mov r0, r0, lsl #2
|
|
and r3, r2, #0xf8
|
|
orr r1, r0, r1, lsl #7
|
|
mov r0, r8
|
|
mov r2, r8
|
|
orr sb, r1, r3, asr #3
|
|
mov r3, r7, lsl #1
|
|
and r1, r7, #0xff
|
|
strh sb, [r6, r3]
|
|
bl sub_0201BD80
|
|
add r7, r7, #1
|
|
cmp r7, #0xc0
|
|
blt _01FFA208
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FFA290:
|
|
mov r7, #0
|
|
_01FFA294:
|
|
add r0, sb, r7
|
|
ldrb r0, [r0, #0x10]
|
|
mov r8, #0
|
|
and r4, r7, #0xff
|
|
cmp r0, #0
|
|
beq _01FFA304
|
|
mov fp, r8
|
|
_01FFA2B0:
|
|
add r1, r8, r7, lsl #8
|
|
add r2, r5, r1, lsl #2
|
|
ldrb r0, [r2, #1]
|
|
ldrb ip, [r2, #2]
|
|
ldrb r2, [r5, r1, lsl #2]
|
|
and r3, r0, #0xf8
|
|
and r0, ip, #0xf8
|
|
mov ip, r3, lsl #2
|
|
and r3, r2, #0xf8
|
|
orr ip, ip, r0, lsl #7
|
|
mov r0, r4
|
|
mov r2, fp
|
|
orr r3, ip, r3, asr #3
|
|
mov ip, r1, lsl #1
|
|
and r1, r8, #0xff
|
|
strh r3, [r6, ip]
|
|
bl sub_0201BD80
|
|
add r8, r8, #1
|
|
cmp r8, #0xf0
|
|
blt _01FFA2B0
|
|
b _01FFA37C
|
|
_01FFA304:
|
|
mov fp, r8
|
|
_01FFA308:
|
|
add r1, r8, r7, lsl #8
|
|
add r2, r5, r1, lsl #2
|
|
ldrb r0, [r2, #1]
|
|
ldrb ip, [r2, #2]
|
|
ldrb r2, [r5, r1, lsl #2]
|
|
mul r3, sl, r0
|
|
mul r0, sl, ip
|
|
mul ip, sl, r2
|
|
mov r2, r3, lsr #8
|
|
mov r3, r0, lsr #8
|
|
and r2, r2, #0xff
|
|
mov r0, ip, lsr #8
|
|
and r3, r3, #0xff
|
|
and r2, r2, #0xf8
|
|
and ip, r0, #0xff
|
|
and r0, r3, #0xf8
|
|
mov r2, r2, lsl #2
|
|
and r3, ip, #0xf8
|
|
orr ip, r2, r0, lsl #7
|
|
mov r0, r4
|
|
mov r2, fp
|
|
orr r3, ip, r3, asr #3
|
|
mov ip, r1, lsl #1
|
|
and r1, r8, #0xff
|
|
strh r3, [r6, ip]
|
|
bl sub_0201BD80
|
|
add r8, r8, #1
|
|
cmp r8, #0xf0
|
|
blt _01FFA308
|
|
_01FFA37C:
|
|
add r7, r7, #1
|
|
cmp r7, #0x10
|
|
blt _01FFA294
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FFA38C: .word ov29_02353530
|
|
arm_func_end sub_01FF9F80
|
|
|
|
arm_func_start ShouldMonsterRunAwayVariationOutlawCheck
|
|
ShouldMonsterRunAwayVariationOutlawCheck: ; 0x01FFA390
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r4, #0
|
|
mov r5, r0
|
|
bl ShouldMonsterRunAwayVariation
|
|
cmp r0, #0
|
|
movne r4, #1
|
|
bne _01FFA3BC
|
|
ldr r0, [r5, #0xb4]
|
|
ldrb r0, [r0, #0xbc]
|
|
cmp r0, #3
|
|
moveq r4, #1
|
|
_01FFA3BC:
|
|
mov r0, r4
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end ShouldMonsterRunAwayVariationOutlawCheck
|
|
|
|
arm_func_start AiMovement
|
|
AiMovement: ; 0x01FFA3C4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x88
|
|
mov r4, r0
|
|
ldr r8, [r4, #0xb4]
|
|
mov r2, #0
|
|
strb r2, [r8, #0x7d]
|
|
str r1, [sp]
|
|
strb r2, [r8, #0x7e]
|
|
mov r1, #7
|
|
strb r2, [r8, #0x7f]
|
|
bl ov29_02301F20
|
|
cmp r0, #0
|
|
beq _01FFA428
|
|
ldrsh r2, [r8, #0x12]
|
|
ldrsh r1, [r8, #0x16]
|
|
ldr r0, _01FFB2AC ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
ldrsh r1, [r8, #0x10]
|
|
add r0, r2, r2, lsr #31
|
|
cmp r1, r0, asr #1
|
|
movle r0, #0
|
|
strleh r0, [r8, #0x4a]
|
|
ble _01FFB2A4
|
|
_01FFA428:
|
|
mov r0, r4
|
|
mov r1, #9
|
|
bl ov29_02301F20
|
|
cmp r0, #0
|
|
bne _01FFA44C
|
|
mov r0, r4
|
|
bl ov29_022FBDF0
|
|
cmp r0, #0
|
|
beq _01FFA458
|
|
_01FFA44C:
|
|
mov r0, #0
|
|
strh r0, [r8, #0x4a]
|
|
b _01FFB2A4
|
|
_01FFA458:
|
|
ldrb r0, [r8, #7]
|
|
cmp r0, #0
|
|
bne _01FFA494
|
|
add r0, r8, #0x100
|
|
ldrh r1, [r0, #0x46]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
streqh r0, [r8, #0x4a]
|
|
beq _01FFB2A4
|
|
_01FFA494:
|
|
ldrb r0, [r8, #0xbc]
|
|
cmp r0, #7
|
|
bne _01FFA4D4
|
|
ldrsh r1, [r8, #2]
|
|
add r0, r8, #0x4a
|
|
bl SetActionPassTurnOrWalk
|
|
mov r0, #8
|
|
bl DungeonRandInt
|
|
strb r0, [r8, #0x4c]
|
|
ldrsh r1, [r4, #4]
|
|
add r0, r8, #0x100
|
|
strh r1, [r0, #0x7e]
|
|
ldrsh r1, [r4, #6]
|
|
sub r1, r1, #1
|
|
strh r1, [r0, #0x80]
|
|
b _01FFB2A4
|
|
_01FFA4D4:
|
|
ldr r1, [sp]
|
|
mov r0, r4
|
|
bl ShouldMonsterRunAwayVariationOutlawCheck
|
|
cmp r0, #0
|
|
beq _01FFA9A8
|
|
ldr sb, [r4, #0xb4]
|
|
ldrb r5, [r4, #0x25]
|
|
ldrb r0, [sb, #0xbc]
|
|
ldr fp, _01FFB2B0 ; =0x000F423F
|
|
cmp r0, #3
|
|
bne _01FFA550
|
|
mov r0, r4
|
|
bl ShouldMonsterHeadToStairs
|
|
cmp r0, #0
|
|
beq _01FFA550
|
|
ldr r3, _01FFB2B4 ; =DUNGEON_PTR
|
|
add r2, sb, #0x100
|
|
ldr r1, [r3]
|
|
mov r0, #1
|
|
add r1, r1, #0xcc00
|
|
ldrh r5, [r1, #0xe4]
|
|
strh r5, [sb, #0x8c]
|
|
ldrh r1, [r1, #0xe6]
|
|
strh r1, [sb, #0x8e]
|
|
ldr r1, [r3]
|
|
add r1, r1, #0xcc00
|
|
ldrh r3, [r1, #0xe4]
|
|
strh r3, [r2, #0x7e]
|
|
ldrh r1, [r1, #0xe6]
|
|
strh r1, [r2, #0x80]
|
|
b _01FFAF28
|
|
_01FFA550:
|
|
ldr r0, _01FFB2B4 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
add r0, r1, #0x3000
|
|
ldrb r0, [r0, #0xe38]
|
|
cmp r0, #0
|
|
beq _01FFA580
|
|
add r0, r1, #0x378
|
|
add r0, r0, #0x12800
|
|
str r0, [sp, #0x2c]
|
|
mov r0, #0x14
|
|
str r0, [sp, #0x28]
|
|
b _01FFA5C4
|
|
_01FFA580:
|
|
ldrb r0, [sb, #6]
|
|
cmp r0, #0
|
|
beq _01FFA5B0
|
|
ldrb r0, [sb, #8]
|
|
cmp r0, #0
|
|
bne _01FFA5B0
|
|
add r0, r1, #0x328
|
|
add r0, r0, #0x12800
|
|
str r0, [sp, #0x2c]
|
|
mov r0, #4
|
|
str r0, [sp, #0x28]
|
|
b _01FFA5C4
|
|
_01FFA5B0:
|
|
add r0, r1, #0x338
|
|
add r0, r0, #0x12800
|
|
str r0, [sp, #0x2c]
|
|
mov r0, #0x10
|
|
str r0, [sp, #0x28]
|
|
_01FFA5C4:
|
|
mov r0, #0xff
|
|
mov r7, #0
|
|
str r0, [sp, #0x24]
|
|
add r0, sb, #0x100
|
|
mov sl, r7
|
|
str r0, [sp, #0x4c]
|
|
b _01FFA68C
|
|
_01FFA5E0:
|
|
ldr r0, [sp, #0x2c]
|
|
ldr r6, [r0, sl, lsl #2]
|
|
mov r0, r6
|
|
bl EntityIsValid__0230827C
|
|
cmp r0, #0
|
|
beq _01FFA688
|
|
mov r0, r4
|
|
mov r1, r6
|
|
bl CanSeeTarget
|
|
cmp r0, #0
|
|
beq _01FFA688
|
|
ldr r0, _01FFB2B4 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x3000
|
|
ldrb r0, [r0, #0xe38]
|
|
cmp r0, #0
|
|
beq _01FFA640
|
|
mov r0, r4
|
|
mov r1, r6
|
|
mov r2, #0
|
|
mov r3, #1
|
|
bl ov29_0230175C
|
|
cmp r0, #1
|
|
bne _01FFA688
|
|
_01FFA640:
|
|
add r0, r4, #4
|
|
add r1, r6, #4
|
|
bl GetChebyshevDistance
|
|
cmp fp, r0
|
|
ble _01FFA688
|
|
mov fp, r0
|
|
ldrb r0, [r6, #0x25]
|
|
mov r7, r6
|
|
str r0, [sp, #0x24]
|
|
ldrh r0, [r6, #4]
|
|
strh r0, [sb, #0x8c]
|
|
ldrh r0, [r6, #6]
|
|
strh r0, [sb, #0x8e]
|
|
ldrh r1, [r6, #4]
|
|
ldr r0, [sp, #0x4c]
|
|
strh r1, [r0, #0x7e]
|
|
ldrh r1, [r6, #6]
|
|
strh r1, [r0, #0x80]
|
|
_01FFA688:
|
|
add sl, sl, #1
|
|
_01FFA68C:
|
|
ldr r0, [sp, #0x28]
|
|
cmp sl, r0
|
|
blt _01FFA5E0
|
|
ldr r0, _01FFB2B0 ; =0x000F423F
|
|
cmp fp, r0
|
|
beq _01FFA99C
|
|
ldr r0, [sp, #0x24]
|
|
cmp r5, r0
|
|
bne _01FFA96C
|
|
cmp r5, #0xff
|
|
beq _01FFA96C
|
|
ldrsh r0, [r4, #4]
|
|
ldrsh r1, [r4, #6]
|
|
bl GetTile
|
|
ldrh r0, [r0]
|
|
tst r0, #8
|
|
beq _01FFA7C0
|
|
ldrsh r1, [r4, #4]
|
|
ldrsh r0, [r4, #6]
|
|
mov r7, #0
|
|
strh r1, [sp, #0x52]
|
|
strh r0, [sp, #0x54]
|
|
add sl, sp, #0x51
|
|
ldr r6, _01FFB2B8 ; =DIRECTIONS_XY
|
|
b _01FFA74C
|
|
_01FFA6F0:
|
|
mov r1, r7, lsl #2
|
|
add r0, r6, r7, lsl #2
|
|
ldrsh r3, [r4, #4]
|
|
ldrsh r2, [r6, r1]
|
|
ldrsh r1, [r4, #6]
|
|
ldrsh r0, [r0, #2]
|
|
add r2, r3, r2
|
|
strh r2, [sp, #0x52]
|
|
add r0, r1, r0
|
|
strh r0, [sp, #0x54]
|
|
ldrsh r0, [sp, #0x52]
|
|
ldrsh r1, [sp, #0x54]
|
|
bl GetTile
|
|
ldrb r0, [r0, #7]
|
|
cmp r5, r0
|
|
beq _01FFA748
|
|
mov r0, r4
|
|
mov r1, r7
|
|
mov r2, sl
|
|
bl CanAiMonsterMoveInDirection
|
|
cmp r0, #0
|
|
bne _01FFA754
|
|
_01FFA748:
|
|
add r7, r7, #1
|
|
_01FFA74C:
|
|
cmp r7, #8
|
|
blt _01FFA6F0
|
|
_01FFA754:
|
|
cmp r7, #8
|
|
bne _01FFA7A0
|
|
mov r0, #8
|
|
bl DungeonRandInt
|
|
mov r1, #6
|
|
strb r1, [sb, #0x7c]
|
|
mov r3, r0, lsl #2
|
|
ldr r0, _01FFB2B8 ; =DIRECTIONS_XY
|
|
ldrsh r5, [r4, #4]
|
|
ldrsh r2, [r0, r3]
|
|
ldr r1, _01FFB2BC ; =ov29_0235171E
|
|
mov r0, #1
|
|
add r2, r5, r2
|
|
strh r2, [sb, #0x8c]
|
|
ldrsh r2, [r4, #6]
|
|
ldrsh r1, [r1, r3]
|
|
add r1, r2, r1
|
|
strh r1, [sb, #0x8e]
|
|
b _01FFAF28
|
|
_01FFA7A0:
|
|
ldrh r0, [sp, #0x52]
|
|
mov r1, #5
|
|
strb r1, [sb, #0x7c]
|
|
ldrh r1, [sp, #0x54]
|
|
strh r0, [sb, #0x8c]
|
|
mov r0, #1
|
|
strh r1, [sb, #0x8e]
|
|
b _01FFAF28
|
|
_01FFA7C0:
|
|
ldr r0, _01FFB2B4 ; =DUNGEON_PTR
|
|
ldrsh sl, [r4, #6]
|
|
ldr r1, [r0]
|
|
ldrsh r2, [r7, #6]
|
|
add r0, r1, #0x2a8
|
|
add r1, r1, r5, lsl #1
|
|
add r1, r1, #0xf200
|
|
ldrsh r1, [r1, #0x68]
|
|
add r3, r0, #0xf000
|
|
sub r0, r2, sl
|
|
str r1, [sp, #0x30]
|
|
ldr r1, _01FFB2C0 ; =0xFFF0BDC1
|
|
add r6, r3, r5, lsl #7
|
|
str r1, [sp, #0x38]
|
|
mov r1, #0
|
|
str r1, [sp, #0x34]
|
|
bl abs
|
|
ldrsh fp, [r4, #4]
|
|
ldrsh r1, [r7, #4]
|
|
mov r5, r0
|
|
sub r0, r1, fp
|
|
bl abs
|
|
str r0, [sp, #8]
|
|
cmp r0, r5
|
|
mvn r0, #0
|
|
strle r5, [sp, #8]
|
|
mov r5, #0
|
|
str r0, [sp, #0x44]
|
|
b _01FFA924
|
|
_01FFA834:
|
|
add r0, r6, r5, lsl #2
|
|
ldrsh r0, [r0, #2]
|
|
ldrsh r1, [r7, #6]
|
|
str r0, [sp, #0x10]
|
|
sub r0, r1, r0
|
|
str r1, [sp, #0xc]
|
|
bl abs
|
|
str r0, [sp, #0x40]
|
|
mov r0, r5, lsl #2
|
|
ldrsh r0, [r6, r0]
|
|
ldrsh r1, [r7, #4]
|
|
str r0, [sp, #0x18]
|
|
sub r0, r1, r0
|
|
str r1, [sp, #0x14]
|
|
bl abs
|
|
ldr r1, [sp, #0x40]
|
|
str r0, [sp, #4]
|
|
cmp r0, r1
|
|
movle r0, r1
|
|
strle r0, [sp, #4]
|
|
ldr r0, [sp, #0x18]
|
|
ldr r1, [sp, #0x44]
|
|
sub r0, r0, fp
|
|
str r0, [sp, #0x3c]
|
|
ldr r2, [sp, #0x3c]
|
|
ldr r0, [sp, #0x10]
|
|
cmp r2, r1
|
|
strlt r1, [sp, #0x3c]
|
|
ldr r1, [sp, #0x44]
|
|
sub r0, r0, sl
|
|
cmp r0, r1
|
|
movlt r0, r1
|
|
ldr r1, [sp, #0x3c]
|
|
cmp r1, #1
|
|
movgt r1, #1
|
|
strgt r1, [sp, #0x3c]
|
|
cmp r0, #1
|
|
movgt r0, #1
|
|
add r1, sl, r0
|
|
ldr r0, [sp, #0xc]
|
|
sub r0, r0, r1
|
|
bl abs
|
|
ldr r1, [sp, #0x3c]
|
|
str r0, [sp, #0x48]
|
|
ldr r0, [sp, #0x14]
|
|
add r1, fp, r1
|
|
sub r0, r0, r1
|
|
bl abs
|
|
ldr r1, [sp, #0x48]
|
|
cmp r0, r1
|
|
movle r0, r1
|
|
ldr r1, [sp, #8]
|
|
cmp r0, r1
|
|
blt _01FFA920
|
|
ldr r1, [sp, #0x38]
|
|
ldr r0, [sp, #4]
|
|
cmp r1, r0
|
|
strlt r0, [sp, #0x38]
|
|
strlt r5, [sp, #0x34]
|
|
_01FFA920:
|
|
add r5, r5, #1
|
|
_01FFA924:
|
|
ldr r0, [sp, #0x30]
|
|
cmp r5, r0
|
|
blt _01FFA834
|
|
ldr r0, [sp, #0x38]
|
|
cmp r0, #0
|
|
blt _01FFA96C
|
|
mov r0, #5
|
|
strb r0, [sb, #0x7c]
|
|
ldr r0, [sp, #0x34]
|
|
mov r0, r0, lsl #2
|
|
ldrsh r2, [r6, r0]
|
|
ldr r0, [sp, #0x34]
|
|
add r1, r6, r0, lsl #2
|
|
strh r2, [sb, #0x8c]
|
|
ldrsh r1, [r1, #2]
|
|
mov r0, #1
|
|
strh r1, [sb, #0x8e]
|
|
b _01FFAF28
|
|
_01FFA96C:
|
|
mov r0, #5
|
|
strb r0, [sb, #0x7c]
|
|
ldrsh r2, [r4, #4]
|
|
ldrsh r1, [r7, #4]
|
|
mov r0, #1
|
|
rsb r1, r1, r2, lsl #1
|
|
strh r1, [sb, #0x8c]
|
|
ldrsh r2, [r4, #6]
|
|
ldrsh r1, [r7, #6]
|
|
rsb r1, r1, r2, lsl #1
|
|
strh r1, [sb, #0x8e]
|
|
b _01FFAF28
|
|
_01FFA99C:
|
|
mov r0, r4
|
|
bl CalculateAiTargetPos
|
|
b _01FFAF28
|
|
_01FFA9A8:
|
|
mov r0, r4
|
|
ldr r7, [r4, #0xb4]
|
|
bl EntityIsValid__0230827C
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _01FFAAB8
|
|
mov r0, r4
|
|
bl ov29_02300B40
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _01FFAAB8
|
|
mov r0, r4
|
|
bl GetTileAtEntity
|
|
mov r5, r0
|
|
ldr r6, [r5, #0x10]
|
|
cmp r6, #0
|
|
moveq r0, #0
|
|
beq _01FFAAB8
|
|
ldr r0, [r6]
|
|
cmp r0, #6
|
|
addls pc, pc, r0, lsl #2
|
|
b _01FFAAB4
|
|
_01FFAA00: ; jump table
|
|
b _01FFAAB4 ; case 0
|
|
b _01FFAAB4 ; case 1
|
|
b _01FFAAB4 ; case 2
|
|
b _01FFAA1C ; case 3
|
|
b _01FFAAB4 ; case 4
|
|
b _01FFAAB4 ; case 5
|
|
b _01FFAAB4 ; case 6
|
|
_01FFAA1C:
|
|
ldrb r0, [r7, #7]
|
|
cmp r0, #0
|
|
bne _01FFAAB4
|
|
ldrb r0, [r7, #0x62]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
bne _01FFAAB4
|
|
ldrh r0, [r5]
|
|
tst r0, #3
|
|
bne _01FFAA58
|
|
ldrb r0, [r7, #6]
|
|
cmp r0, #0
|
|
bne _01FFAAB4
|
|
_01FFAA58:
|
|
ldrb r0, [r7, #6]
|
|
cmp r0, #0
|
|
bne _01FFAA84
|
|
bl IsBagFull
|
|
cmp r0, #0
|
|
bne _01FFAAB4
|
|
ldrh r0, [r5]
|
|
tst r0, #0x20
|
|
bne _01FFAAB4
|
|
mov r0, #1
|
|
b _01FFAAB8
|
|
_01FFAA84:
|
|
mov r0, r6
|
|
bl GetItemInfo
|
|
bl ov29_02348D00
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _01FFAAB8
|
|
mov r0, r6
|
|
bl GetItemInfo
|
|
ldrb r0, [r0]
|
|
tst r0, #2
|
|
moveq r0, #1
|
|
beq _01FFAAB8
|
|
_01FFAAB4:
|
|
mov r0, #0
|
|
_01FFAAB8:
|
|
cmp r0, #0
|
|
movne r0, #0x3f
|
|
strneh r0, [r8, #0x4a]
|
|
bne _01FFB2A4
|
|
mov r0, r4
|
|
ldr sl, [r4, #0xb4]
|
|
bl ShouldMonsterFollowLeader
|
|
cmp r0, #0
|
|
bne _01FFAD14
|
|
ldr r0, _01FFB2B4 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
add r0, r1, #0x3000
|
|
ldrb r0, [r0, #0xe38]
|
|
cmp r0, #0
|
|
addne r0, r1, #0x378
|
|
addne sb, r0, #0x12800
|
|
movne fp, #0x14
|
|
bne _01FFAB30
|
|
ldrb r0, [sl, #6]
|
|
cmp r0, #0
|
|
beq _01FFAB24
|
|
ldrb r0, [sl, #8]
|
|
cmp r0, #0
|
|
addeq r0, r1, #0x328
|
|
addeq sb, r0, #0x12800
|
|
moveq fp, #4
|
|
beq _01FFAB30
|
|
_01FFAB24:
|
|
add r0, r1, #0x338
|
|
add sb, r0, #0x12800
|
|
mov fp, #0x10
|
|
_01FFAB30:
|
|
mov r0, r4
|
|
bl ov29_022FF908
|
|
mvn r6, #0
|
|
str r0, [sp, #0x20]
|
|
add r0, r6, #0x3e8
|
|
str r0, [sp, #0x1c]
|
|
mov r7, #0
|
|
b _01FFAC64
|
|
_01FFAB50:
|
|
ldr r5, [sb, r7, lsl #2]
|
|
mov r0, r5
|
|
bl EntityIsValid__0230827C
|
|
cmp r0, #0
|
|
beq _01FFAC60
|
|
ldr r0, [r5, #0xb4]
|
|
ldrb r1, [r0, #0xbc]
|
|
cmp r1, #6
|
|
bhi _01FFAC60
|
|
ldr r1, _01FFB2B4 ; =DUNGEON_PTR
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x3000
|
|
ldrb r1, [r1, #0xe38]
|
|
cmp r1, #0
|
|
beq _01FFABAC
|
|
mov r0, r4
|
|
mov r1, r5
|
|
mov r2, #0
|
|
mov r3, #1
|
|
bl ov29_0230175C
|
|
cmp r0, #1
|
|
bne _01FFAC60
|
|
b _01FFABC0
|
|
_01FFABAC:
|
|
ldrb r1, [sl, #6]
|
|
cmp r1, #0
|
|
ldreqb r0, [r0, #0xc4]
|
|
cmpeq r0, #6
|
|
beq _01FFAC60
|
|
_01FFABC0:
|
|
ldr r0, [r5, #0xb4]
|
|
ldrb r0, [r0, #9]
|
|
cmp r0, #1
|
|
beq _01FFAC60
|
|
ldr r0, [sp, #0x20]
|
|
cmp r0, #0
|
|
beq _01FFAC24
|
|
ldrsh r1, [r4, #4]
|
|
ldrsh r0, [r5, #4]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #5
|
|
bgt _01FFAC0C
|
|
ldrsh r1, [r4, #6]
|
|
ldrsh r0, [r5, #6]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #5
|
|
ble _01FFAC38
|
|
_01FFAC0C:
|
|
mov r0, r4
|
|
mov r1, r5
|
|
bl CanTargetEntity
|
|
cmp r0, #0
|
|
beq _01FFAC60
|
|
b _01FFAC38
|
|
_01FFAC24:
|
|
mov r0, r4
|
|
mov r1, r5
|
|
bl CanTargetEntity
|
|
cmp r0, #0
|
|
beq _01FFAC60
|
|
_01FFAC38:
|
|
add r1, r5, #4
|
|
add r0, r4, #4
|
|
bl GetChebyshevDistance
|
|
ldr r1, [sp, #0x1c]
|
|
cmp r1, r0
|
|
ble _01FFAC60
|
|
str r0, [sp, #0x1c]
|
|
mov r6, r7
|
|
cmp r0, #2
|
|
blt _01FFAC6C
|
|
_01FFAC60:
|
|
add r7, r7, #1
|
|
_01FFAC64:
|
|
cmp r7, fp
|
|
blt _01FFAB50
|
|
_01FFAC6C:
|
|
cmp r6, #0
|
|
blt _01FFAD14
|
|
mov r2, #1
|
|
strb r2, [sl, #0x7c]
|
|
ldr r7, [sb, r6, lsl #2]
|
|
mov r0, r4
|
|
ldrh r5, [r7, #4]
|
|
mov r3, #0
|
|
mov r1, #8
|
|
strh r5, [sl, #0x8c]
|
|
ldrh r5, [r7, #6]
|
|
strh r5, [sl, #0x8e]
|
|
ldr r5, [sb, r6, lsl #2]
|
|
str r5, [sl, #0x84]
|
|
ldr r5, [sb, r6, lsl #2]
|
|
ldrh r5, [r5, #0x26]
|
|
strh r5, [sl, #0x80]
|
|
strb r2, [sl, #0x7e]
|
|
str r3, [sl, #0x120]
|
|
bl ov29_02301F20
|
|
cmp r0, #0
|
|
beq _01FFAD0C
|
|
mov r0, r4
|
|
bl ov29_02302200
|
|
cmp r0, #0
|
|
bne _01FFAD0C
|
|
ldr r5, [sb, r6, lsl #2]
|
|
ldrsh r1, [r4, #4]
|
|
ldrsh r0, [r5, #4]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #1
|
|
bgt _01FFAD0C
|
|
ldrsh r1, [r4, #6]
|
|
ldrsh r0, [r5, #6]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #1
|
|
movle r0, #1
|
|
strleb r0, [sl, #0x7f]
|
|
_01FFAD0C:
|
|
mov r0, #1
|
|
b _01FFAF28
|
|
_01FFAD14:
|
|
mov r0, r4
|
|
mov r1, #1
|
|
bl ov29_02301F20
|
|
cmp r0, #0
|
|
bne _01FFAD7C
|
|
ldrb r0, [sl, #6]
|
|
cmp r0, #0
|
|
bne _01FFAE68
|
|
mov r0, r4
|
|
bl ov29_023082C4
|
|
mov r5, r0
|
|
bl EntityIsValid__0230827C
|
|
cmp r0, #0
|
|
beq _01FFAE68
|
|
mov r0, #1
|
|
strb r0, [sl, #0x7c]
|
|
ldrh r2, [r5, #4]
|
|
mov r1, #0
|
|
strh r2, [sl, #0x8c]
|
|
ldrh r2, [r5, #6]
|
|
strh r2, [sl, #0x8e]
|
|
str r5, [sl, #0x84]
|
|
ldrh r2, [r5, #0x26]
|
|
strh r2, [sl, #0x80]
|
|
str r1, [sl, #0x120]
|
|
b _01FFAF28
|
|
_01FFAD7C:
|
|
ldrb r0, [sl, #7]
|
|
cmp r0, #0
|
|
beq _01FFAE68
|
|
bl GetVisibilityRange
|
|
ldrsh r0, [r4, #4]
|
|
ldrsh r1, [r4, #6]
|
|
bl GetTile
|
|
ldrb r2, [r0, #7]
|
|
cmp r2, #0xff
|
|
bne _01FFADC0
|
|
ldrsh r1, [r4, #4]
|
|
ldrsh r0, [r4, #6]
|
|
sub fp, r1, #2
|
|
sub sb, r0, #2
|
|
add r6, r1, #2
|
|
add r5, r0, #2
|
|
b _01FFAE60
|
|
_01FFADC0:
|
|
ldr r0, _01FFB2B4 ; =DUNGEON_PTR
|
|
mov r1, #0x1c
|
|
ldr r0, [r0]
|
|
add r0, r0, #0x2e8
|
|
add r0, r0, #0xec00
|
|
mla r0, r2, r1, r0
|
|
ldrsh r3, [r0, #2]
|
|
ldrsh r2, [r0, #4]
|
|
ldrsh r1, [r0, #6]
|
|
ldrsh r0, [r0, #8]
|
|
sub fp, r3, #1
|
|
sub sb, r2, #1
|
|
add r6, r1, #1
|
|
add r5, r0, #1
|
|
b _01FFAE60
|
|
_01FFADFC:
|
|
mov r7, fp
|
|
b _01FFAE54
|
|
_01FFAE04:
|
|
mov r0, r7
|
|
mov r1, sb
|
|
bl GetTileSafe
|
|
ldr r0, [r0, #0x10]
|
|
cmp r0, #0
|
|
beq _01FFAE50
|
|
ldr r0, [r0]
|
|
cmp r0, #3
|
|
bne _01FFAE50
|
|
mov r0, #7
|
|
strb r0, [sl, #0x7c]
|
|
strh r7, [sl, #0x8c]
|
|
strh sb, [sl, #0x8e]
|
|
mov r0, #0
|
|
str r0, [sl, #0x84]
|
|
strh r0, [sl, #0x80]
|
|
str r0, [sl, #0x120]
|
|
mov r0, #1
|
|
b _01FFAF28
|
|
_01FFAE50:
|
|
add r7, r7, #1
|
|
_01FFAE54:
|
|
cmp r7, r6
|
|
ble _01FFAE04
|
|
add sb, sb, #1
|
|
_01FFAE60:
|
|
cmp sb, r5
|
|
ble _01FFADFC
|
|
_01FFAE68:
|
|
mov r0, r4
|
|
bl HasDropeyeStatus
|
|
cmp r0, #0
|
|
bne _01FFAF1C
|
|
ldrb r0, [sl, #0x7c]
|
|
add r0, r0, #0xff
|
|
and r0, r0, #0xff
|
|
cmp r0, #1
|
|
bhi _01FFAF1C
|
|
ldr r2, [sl, #0x84]
|
|
cmp r2, #0
|
|
beq _01FFAF1C
|
|
ldrh r1, [r2, #0x26]
|
|
ldrh r0, [sl, #0x80]
|
|
cmp r1, r0
|
|
bne _01FFAF08
|
|
ldr r7, [r2, #0xb4]
|
|
mov r6, #0
|
|
add r5, r7, #0x6a
|
|
b _01FFAEFC
|
|
_01FFAEB8:
|
|
mov r0, r4
|
|
add r1, r5, r6, lsl #2
|
|
bl CanTargetPosition
|
|
cmp r0, #0
|
|
beq _01FFAEF8
|
|
mov r0, #2
|
|
strb r0, [sl, #0x7c]
|
|
add r3, r7, r6, lsl #2
|
|
ldrh r2, [r3, #0x6a]
|
|
mov r1, #0
|
|
mov r0, #1
|
|
strh r2, [sl, #0x8c]
|
|
ldrh r2, [r3, #0x6c]
|
|
strh r2, [sl, #0x8e]
|
|
str r1, [sl, #0x120]
|
|
b _01FFAF28
|
|
_01FFAEF8:
|
|
add r6, r6, #1
|
|
_01FFAEFC:
|
|
cmp r6, #4
|
|
blt _01FFAEB8
|
|
b _01FFAF1C
|
|
_01FFAF08:
|
|
mov r0, #6
|
|
strb r0, [sl, #0x7c]
|
|
mov r0, #0
|
|
str r0, [sl, #0x84]
|
|
strh r0, [sl, #0x80]
|
|
_01FFAF1C:
|
|
mov r0, r4
|
|
bl CalculateAiTargetPos
|
|
mov r0, #1
|
|
_01FFAF28:
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
streqh r0, [r8, #0x4a]
|
|
beq _01FFB2A4
|
|
ldr sb, [r4, #0xb4]
|
|
ldrh r1, [sb, #0x8c]
|
|
add r0, sb, #0x100
|
|
strh r1, [r0, #0x7e]
|
|
ldrh r1, [sb, #0x8e]
|
|
strh r1, [r0, #0x80]
|
|
ldrsh r1, [r4, #4]
|
|
ldrsh r0, [sb, #0x8c]
|
|
cmp r1, r0
|
|
ldreqsh r1, [r4, #6]
|
|
ldreqsh r0, [sb, #0x8e]
|
|
cmpeq r1, r0
|
|
bne _01FFAF7C
|
|
add r0, sb, #0x4a
|
|
mov r1, #1
|
|
bl SetMonsterActionFields
|
|
b _01FFB2A4
|
|
_01FFAF7C:
|
|
mov r0, sb
|
|
bl ov29_022FBE04
|
|
cmp r0, #0
|
|
bne _01FFB2A4
|
|
add r0, r4, #4
|
|
add r1, sb, #0x8c
|
|
bl GetDirectionTowardsPosition
|
|
mov r7, r0
|
|
ldrb r1, [sb, #0x7e]
|
|
mov r0, r4
|
|
bl ov29_02301594
|
|
cmp r0, #0
|
|
beq _01FFB000
|
|
ldrb r0, [sb, #0x7c]
|
|
cmp r0, #1
|
|
bne _01FFB010
|
|
add r0, r4, #4
|
|
add r1, sb, #0x8c
|
|
bl ov29_022E935C
|
|
cmp r0, #0
|
|
beq _01FFB010
|
|
add r0, r4, #4
|
|
add r1, sb, #0x8c
|
|
bl GetChebyshevDistance
|
|
cmp r0, #2
|
|
bne _01FFAFF4
|
|
add r0, sb, #0x4a
|
|
mov r1, #1
|
|
bl SetMonsterActionFields
|
|
b _01FFB2A4
|
|
_01FFAFF4:
|
|
addlt r0, r7, #4
|
|
andlt r7, r0, #7
|
|
b _01FFB010
|
|
_01FFB000:
|
|
ldrb r0, [sb, #0x7f]
|
|
cmp r0, #0
|
|
addne r0, r7, #4
|
|
andne r7, r0, #7
|
|
_01FFB010:
|
|
add r2, sp, #0x50
|
|
mov r0, r4
|
|
mov r1, r7
|
|
bl CanAiMonsterMoveInDirection
|
|
cmp r0, #0
|
|
beq _01FFB040
|
|
ldrsh r1, [sb, #2]
|
|
add r0, sb, #0x4a
|
|
bl SetActionPassTurnOrWalk
|
|
and r0, r7, #7
|
|
strb r0, [sb, #0x4c]
|
|
b _01FFB2A4
|
|
_01FFB040:
|
|
ldrb r0, [sp, #0x50]
|
|
cmp r0, #0
|
|
beq _01FFB0DC
|
|
ldrb r0, [sb, #6]
|
|
cmp r0, #0
|
|
ldreqb r0, [sb, #0x14f]
|
|
cmpeq r0, #0
|
|
bne _01FFB080
|
|
mov r1, #1
|
|
strb r1, [sb, #0x7d]
|
|
add r0, sb, #0x4a
|
|
strb r1, [sb, #0x14e]
|
|
bl SetMonsterActionFields
|
|
mov r0, #1
|
|
strb r0, [sb, #0x151]
|
|
b _01FFB2A4
|
|
_01FFB080:
|
|
ldr r0, _01FFB2B8 ; =DIRECTIONS_XY
|
|
mov r2, r7, lsl #2
|
|
ldrsh r1, [r4, #4]
|
|
ldrsh r0, [r0, r2]
|
|
ldrsh r3, [sb, #0x8c]
|
|
add r0, r1, r0
|
|
cmp r3, r0
|
|
bne _01FFB0D4
|
|
ldr r0, _01FFB2BC ; =ov29_0235171E
|
|
ldrsh r1, [r4, #6]
|
|
ldrsh r0, [r0, r2]
|
|
ldrsh r2, [sb, #0x8e]
|
|
add r0, r1, r0
|
|
cmp r2, r0
|
|
bne _01FFB0D4
|
|
add r0, sb, #0x4a
|
|
mov r1, #1
|
|
bl SetMonsterActionFields
|
|
mov r0, #1
|
|
strb r0, [sb, #0x151]
|
|
b _01FFB2A4
|
|
_01FFB0D4:
|
|
mov r0, #1
|
|
strb r0, [sb, #0x7d]
|
|
_01FFB0DC:
|
|
mov r0, #1
|
|
strb r0, [sp, #0x80]
|
|
strb r0, [sp, #0x78]
|
|
strb r0, [sp, #0x70]
|
|
strb r0, [sp, #0x68]
|
|
strb r0, [sp, #0x60]
|
|
ldrb r0, [sb, #6]
|
|
cmp r0, #0
|
|
bne _01FFB16C
|
|
tst r7, #1
|
|
beq _01FFB16C
|
|
ldrsh r1, [r4, #4]
|
|
ldrsh r0, [sb, #0x8c]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
ldrsh r2, [r4, #6]
|
|
ldrsh r1, [sb, #0x8e]
|
|
mov r5, r0
|
|
sub r0, r2, r1
|
|
bl abs
|
|
cmp r5, #2
|
|
cmple r0, #2
|
|
bgt _01FFB16C
|
|
cmp r5, r0
|
|
beq _01FFB16C
|
|
tst r7, #2
|
|
beq _01FFB15C
|
|
cmp r5, r0
|
|
mov r0, #0
|
|
strltb r0, [sp, #0x68]
|
|
strgeb r0, [sp, #0x60]
|
|
b _01FFB16C
|
|
_01FFB15C:
|
|
cmp r5, r0
|
|
mov r0, #0
|
|
strltb r0, [sp, #0x60]
|
|
strgeb r0, [sp, #0x68]
|
|
_01FFB16C:
|
|
ldrsh r0, [r4, #4]
|
|
ldrsh r1, [r4, #6]
|
|
bl GetTile
|
|
ldrh r0, [r0]
|
|
ldr r1, [sp]
|
|
tst r0, #0x100
|
|
movne sl, #5
|
|
mov r0, r4
|
|
moveq sl, #3
|
|
bl ShouldMonsterRunAwayVariationOutlawCheck
|
|
cmp r0, #0
|
|
ldreqb r0, [sb, #0x7f]
|
|
mov r8, #1
|
|
mov fp, r8
|
|
cmpeq r0, #0
|
|
movne sl, #5
|
|
ldr r6, _01FFB2C4 ; =ov29_0235177C
|
|
add r5, sp, #0x58
|
|
b _01FFB1FC
|
|
_01FFB1B8:
|
|
ldr r0, [r6, r8, lsl #2]
|
|
add r3, r5, r8, lsl #3
|
|
add r0, r7, r0
|
|
and r1, r0, #7
|
|
mov r0, r4
|
|
add r2, r3, #2
|
|
str r1, [r3, #4]
|
|
bl CanAiMonsterMoveInDirection
|
|
add r1, r5, r8, lsl #3
|
|
strb r0, [r1, #1]
|
|
tst r0, #0xff
|
|
ldreqb r0, [r1, #2]
|
|
add r8, r8, #1
|
|
cmpeq r0, #0
|
|
andeq r0, fp, #0xff
|
|
streqb fp, [sp, #0x68]
|
|
streqb r0, [sp, #0x60]
|
|
_01FFB1FC:
|
|
cmp r8, sl
|
|
blt _01FFB1B8
|
|
mov r4, #1
|
|
add r2, sp, #0x58
|
|
mov r0, r4
|
|
b _01FFB264
|
|
_01FFB214:
|
|
add r1, r2, r4, lsl #3
|
|
ldrb r1, [r1, #1]
|
|
mov r3, r4, lsl #3
|
|
cmp r1, #0
|
|
ldrneb r1, [r2, r3]
|
|
cmpne r1, #0
|
|
beq _01FFB250
|
|
ldrsh r1, [sb, #2]
|
|
add r0, sb, #0x4a
|
|
bl SetActionPassTurnOrWalk
|
|
add r0, sp, #0x5c
|
|
ldr r0, [r0, r4, lsl #3]
|
|
and r0, r0, #7
|
|
strb r0, [sb, #0x4c]
|
|
b _01FFB2A4
|
|
_01FFB250:
|
|
add r1, r2, r4, lsl #3
|
|
ldrb r1, [r1, #2]
|
|
add r4, r4, #1
|
|
cmp r1, #0
|
|
strneb r0, [sb, #0x7d]
|
|
_01FFB264:
|
|
cmp r4, sl
|
|
blt _01FFB214
|
|
add r0, sb, #0x4a
|
|
mov r1, #1
|
|
bl SetMonsterActionFields
|
|
mov r1, #1
|
|
strb r1, [sb, #0x151]
|
|
ldrb r0, [sb, #7]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
strneb r0, [sb, #0x7d]
|
|
strneb r0, [sb, #0x14e]
|
|
bne _01FFB2A4
|
|
ldrb r0, [sb, #0x7d]
|
|
cmp r0, #0
|
|
strneb r1, [sb, #0x14e]
|
|
_01FFB2A4:
|
|
add sp, sp, #0x88
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FFB2AC: .word 0x000003E7
|
|
_01FFB2B0: .word 0x000F423F
|
|
_01FFB2B4: .word DUNGEON_PTR
|
|
_01FFB2B8: .word DIRECTIONS_XY
|
|
_01FFB2BC: .word ov29_0235171E
|
|
_01FFB2C0: .word 0xFFF0BDC1
|
|
_01FFB2C4: .word ov29_0235177C
|
|
arm_func_end AiMovement
|
|
|
|
arm_func_start CalculateAiTargetPos
|
|
CalculateAiTargetPos: ; 0x01FFB2C8
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r1, _01FFB61C ; =DUNGEON_PTR
|
|
mov sl, r0
|
|
ldr r0, [r1]
|
|
ldr sb, [sl, #0xb4]
|
|
add r0, r0, #0x4000
|
|
ldrb r0, [r0, #0xda]
|
|
ldrb r4, [sl, #0x25]
|
|
mov r5, #0
|
|
cmp r0, #0xa5
|
|
beq _01FFB304
|
|
cmp r0, #0xaa
|
|
blo _01FFB31C
|
|
cmp r0, #0xdc
|
|
bhs _01FFB31C
|
|
_01FFB304:
|
|
ldrsh r0, [sl, #4]
|
|
ldrsh r1, [sl, #6]
|
|
bl GetTile
|
|
ldrh r0, [r0]
|
|
tst r0, #0x100
|
|
movne r5, #1
|
|
_01FFB31C:
|
|
cmp r5, #0
|
|
bne _01FFB32C
|
|
cmp r4, #0xff
|
|
bne _01FFB3F0
|
|
_01FFB32C:
|
|
ldrb r1, [sb, #0x4c]
|
|
mov r0, sl
|
|
mov r7, #0
|
|
add r1, r1, #4
|
|
and r6, r1, #7
|
|
bl ov29_02301498
|
|
cmp r0, #0
|
|
beq _01FFB35C
|
|
mov r0, #8
|
|
bl DungeonRandInt
|
|
strb r0, [sb, #0x4c]
|
|
mov r7, #1
|
|
_01FFB35C:
|
|
mov r5, #0
|
|
ldr r4, _01FFB620 ; =ov29_0235177C
|
|
add fp, sp, #1
|
|
b _01FFB3E4
|
|
_01FFB36C:
|
|
ldrb r1, [sb, #0x4c]
|
|
ldr r0, [r4, r5, lsl #2]
|
|
cmp r7, #0
|
|
add r0, r1, r0
|
|
and r8, r0, #7
|
|
beq _01FFB38C
|
|
cmp r8, r6
|
|
beq _01FFB3E0
|
|
_01FFB38C:
|
|
mov r0, sl
|
|
mov r1, r8
|
|
mov r2, fp
|
|
bl CanAiMonsterMoveInDirection
|
|
cmp r0, #0
|
|
beq _01FFB3E0
|
|
mov r0, #3
|
|
strb r0, [sb, #0x7c]
|
|
ldr r0, _01FFB624 ; =DIRECTIONS_XY
|
|
mov r3, r8, lsl #2
|
|
ldrsh r2, [r0, r3]
|
|
ldrsh r4, [sl, #4]
|
|
ldr r1, _01FFB628 ; =ov29_0235171E
|
|
mov r0, #1
|
|
add r2, r4, r2
|
|
strh r2, [sb, #0x8c]
|
|
ldrsh r2, [sl, #6]
|
|
ldrsh r1, [r1, r3]
|
|
add r1, r2, r1
|
|
strh r1, [sb, #0x8e]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FFB3E0:
|
|
add r5, r5, #1
|
|
_01FFB3E4:
|
|
cmp r5, #8
|
|
blt _01FFB36C
|
|
b _01FFB5D8
|
|
_01FFB3F0:
|
|
ldr r0, _01FFB61C ; =DUNGEON_PTR
|
|
ldr r1, [sb, #0x120]
|
|
ldr r2, [r0]
|
|
cmp r1, #0
|
|
add r0, r2, r4, lsl #1
|
|
add r1, r2, #0x2a8
|
|
add r0, r0, #0xf200
|
|
add r1, r1, #0xf000
|
|
add r6, r1, r4, lsl #7
|
|
ldrsh r5, [r0, #0x68]
|
|
beq _01FFB460
|
|
mov r0, #8
|
|
bl DungeonRandInt
|
|
mov r1, #6
|
|
strb r1, [sb, #0x7c]
|
|
mov r3, r0, lsl #2
|
|
ldr r0, _01FFB624 ; =DIRECTIONS_XY
|
|
ldrsh r4, [sl, #4]
|
|
ldrsh r2, [r0, r3]
|
|
ldr r1, _01FFB628 ; =ov29_0235171E
|
|
mov r0, #1
|
|
add r2, r4, r2
|
|
strh r2, [sb, #0x8c]
|
|
ldrsh r2, [sl, #6]
|
|
ldrsh r1, [r1, r3]
|
|
add r1, r2, r1
|
|
strh r1, [sb, #0x8e]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FFB460:
|
|
ldrb r0, [sb, #0x7c]
|
|
cmp r0, #4
|
|
beq _01FFB520
|
|
cmp r5, #0
|
|
bne _01FFB4B8
|
|
mov r0, #8
|
|
bl DungeonRandInt
|
|
mov r1, #6
|
|
strb r1, [sb, #0x7c]
|
|
mov r3, r0, lsl #2
|
|
ldr r0, _01FFB624 ; =DIRECTIONS_XY
|
|
ldrsh r4, [sl, #4]
|
|
ldrsh r2, [r0, r3]
|
|
ldr r1, _01FFB628 ; =ov29_0235171E
|
|
mov r0, #1
|
|
add r2, r4, r2
|
|
strh r2, [sb, #0x8c]
|
|
ldrsh r2, [sl, #6]
|
|
ldrsh r1, [r1, r3]
|
|
add r1, r2, r1
|
|
strh r1, [sb, #0x8e]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FFB4B8:
|
|
mov r4, #0
|
|
b _01FFB518
|
|
_01FFB4C0:
|
|
mov r0, r5
|
|
bl DungeonRandInt
|
|
mov r2, r0, lsl #2
|
|
ldrsh r3, [sl, #4]
|
|
ldrsh r1, [r6, r2]
|
|
cmp r3, r1
|
|
addeq r1, r6, r2
|
|
ldreqsh r2, [sl, #6]
|
|
ldreqsh r1, [r1, #2]
|
|
cmpeq r2, r1
|
|
beq _01FFB514
|
|
mov r1, #4
|
|
strb r1, [sb, #0x7c]
|
|
mov r1, r0, lsl #2
|
|
ldrsh r2, [r6, r1]
|
|
add r1, r6, r0, lsl #2
|
|
mov r0, #1
|
|
strh r2, [sb, #0x8c]
|
|
ldrsh r1, [r1, #2]
|
|
strh r1, [sb, #0x8e]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FFB514:
|
|
add r4, r4, #1
|
|
_01FFB518:
|
|
cmp r4, #0xa
|
|
blt _01FFB4C0
|
|
_01FFB520:
|
|
ldrsh r0, [sl, #4]
|
|
ldrsh r1, [sl, #6]
|
|
bl GetTile
|
|
ldrh r0, [r0]
|
|
tst r0, #8
|
|
beq _01FFB5D0
|
|
mov r0, #8
|
|
bl DungeonRandInt
|
|
mov r8, r0
|
|
mov r5, #0
|
|
add fp, sp, #0
|
|
ldr r4, _01FFB624 ; =DIRECTIONS_XY
|
|
b _01FFB5C8
|
|
_01FFB554:
|
|
and r8, r8, #7
|
|
mov r1, r8, lsl #2
|
|
add r0, r4, r8, lsl #2
|
|
ldrsh r6, [sl, #4]
|
|
ldrsh r3, [r4, r1]
|
|
ldrsh r2, [sl, #6]
|
|
ldrsh r1, [r0, #2]
|
|
add r6, r6, r3
|
|
mov r0, r6
|
|
add r7, r2, r1
|
|
mov r1, r7
|
|
bl GetTile
|
|
ldrb r0, [r0, #7]
|
|
cmp r0, #0xff
|
|
bne _01FFB5C0
|
|
mov r0, sl
|
|
mov r1, r8
|
|
mov r2, fp
|
|
bl CanAiMonsterMoveInDirection
|
|
cmp r0, #0
|
|
beq _01FFB5C0
|
|
mov r0, #3
|
|
strb r0, [sb, #0x7c]
|
|
strh r6, [sb, #0x8c]
|
|
strh r7, [sb, #0x8e]
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FFB5C0:
|
|
add r5, r5, #1
|
|
add r8, r8, #1
|
|
_01FFB5C8:
|
|
cmp r5, #8
|
|
blt _01FFB554
|
|
_01FFB5D0:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FFB5D8:
|
|
mov r0, #8
|
|
bl DungeonRandInt
|
|
mov r1, #6
|
|
strb r1, [sb, #0x7c]
|
|
mov r3, r0, lsl #2
|
|
ldr r0, _01FFB624 ; =DIRECTIONS_XY
|
|
ldrsh r4, [sl, #4]
|
|
ldrsh r2, [r0, r3]
|
|
ldr r1, _01FFB628 ; =ov29_0235171E
|
|
mov r0, #1
|
|
add r2, r4, r2
|
|
strh r2, [sb, #0x8c]
|
|
ldrsh r2, [sl, #6]
|
|
ldrsh r1, [r1, r3]
|
|
add r1, r2, r1
|
|
strh r1, [sb, #0x8e]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FFB61C: .word DUNGEON_PTR
|
|
_01FFB620: .word ov29_0235177C
|
|
_01FFB624: .word DIRECTIONS_XY
|
|
_01FFB628: .word ov29_0235171E
|
|
arm_func_end CalculateAiTargetPos
|
|
|
|
arm_func_start sub_01FFB62C
|
|
sub_01FFB62C: ; 0x01FFB62C
|
|
ldr r3, [r0, #0xb4]
|
|
mov r2, #0
|
|
strb r2, [r3, #0x7c]
|
|
ldrh r1, [r0, #4]
|
|
strh r1, [r3, #0x8c]
|
|
ldrh r0, [r0, #6]
|
|
strh r0, [r3, #0x8e]
|
|
str r2, [r3, #0x84]
|
|
strh r2, [r3, #0x80]
|
|
bx lr
|
|
arm_func_end sub_01FFB62C
|
|
_01FFB654:
|
|
.byte 0x05, 0x03, 0x00, 0x00
|
|
|
|
arm_func_start ChooseAiMove
|
|
ChooseAiMove: ; 0x01FFB658
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x44
|
|
ldr r1, _01FFBD14 ; =DUNGEON_PTR
|
|
mov sl, r0
|
|
ldr r0, [r1]
|
|
ldr r7, [sl, #0xb4]
|
|
add r0, r0, #0x4000
|
|
ldrb r0, [r0, #0xda]
|
|
bl AreMovesEnabled
|
|
cmp r0, #0
|
|
beq _01FFBD0C
|
|
mov r0, sl
|
|
mov r1, #0
|
|
bl ov29_02300DCC
|
|
cmp r0, #0
|
|
bne _01FFBD0C
|
|
mov r0, sl
|
|
mov r1, #1
|
|
bl ShouldMonsterRunAwayVariation
|
|
cmp r0, #0
|
|
bne _01FFBD0C
|
|
ldr r0, [sl, #0xb4]
|
|
ldrb r0, [r0, #0xbc]
|
|
cmp r0, #3
|
|
bne _01FFB6CC
|
|
mov r0, sl
|
|
bl IsMonsterCornered
|
|
cmp r0, #0
|
|
bne _01FFBD0C
|
|
_01FFB6CC:
|
|
mov r0, sl
|
|
mov r1, #8
|
|
bl ov29_02301F20
|
|
cmp r0, #0
|
|
bne _01FFBD0C
|
|
ldrb r0, [r7, #0xd0]
|
|
cmp r0, #2
|
|
bne _01FFB700
|
|
ldr r0, _01FFBD18 ; =ov10_022C4580
|
|
ldrsh r0, [r0]
|
|
bl DungeonRandOutcome__022EAB20
|
|
cmp r0, #0
|
|
bne _01FFBD0C
|
|
_01FFB700:
|
|
ldrb r0, [r7, #0xd2]
|
|
cmp r0, #0
|
|
beq _01FFB7A8
|
|
mov r8, #0
|
|
add r6, r7, #0x124
|
|
mov r4, r8
|
|
mov r5, #1
|
|
b _01FFB7A0
|
|
_01FFB720:
|
|
ldrb r0, [r6, r8, lsl #3]
|
|
mov r1, r8, lsl #3
|
|
tst r0, #1
|
|
movne r0, r5
|
|
moveq r0, r4
|
|
tst r0, #0xff
|
|
beq _01FFB79C
|
|
mov r0, sl
|
|
add r1, r6, r1
|
|
bl IsChargingTwoTurnMove
|
|
cmp r0, #0
|
|
beq _01FFB79C
|
|
ldrb r0, [r7, #0xd4]
|
|
cmp r0, r8
|
|
bne _01FFB79C
|
|
b _01FFB774
|
|
_01FFB760:
|
|
add r0, r7, r8, lsl #3
|
|
ldrb r0, [r0, #0x124]
|
|
tst r0, #2
|
|
beq _01FFB77C
|
|
sub r8, r8, #1
|
|
_01FFB774:
|
|
cmp r8, #0
|
|
bgt _01FFB760
|
|
_01FFB77C:
|
|
ldrb r2, [r7, #0x4c]
|
|
mov r1, r8, lsl #0x10
|
|
add r0, r7, #0x4a
|
|
mov r1, r1, asr #0x10
|
|
bl SetActionUseMoveAi
|
|
mov r0, sl
|
|
bl UpdateAiTargetPos
|
|
b _01FFBD0C
|
|
_01FFB79C:
|
|
add r8, r8, #1
|
|
_01FFB7A0:
|
|
cmp r8, #4
|
|
blt _01FFB720
|
|
_01FFB7A8:
|
|
mov r5, #0
|
|
str r5, [sp]
|
|
mov r0, r5
|
|
add r4, r7, #0x124
|
|
mov r2, r5
|
|
mov r3, #1
|
|
_01FFB7C0:
|
|
ldrb r1, [r4, r0, lsl #3]
|
|
add r6, r4, r0, lsl #3
|
|
tst r1, #1
|
|
movne r1, r3
|
|
moveq r1, r2
|
|
tst r1, #0xff
|
|
beq _01FFB7F8
|
|
ldrb r1, [r6]
|
|
tst r1, #4
|
|
ldrne r1, [sp]
|
|
addne r1, r1, #1
|
|
strne r1, [sp]
|
|
ldrb r1, [r6, #6]
|
|
add r5, r5, r1
|
|
_01FFB7F8:
|
|
add r0, r0, #1
|
|
cmp r0, #4
|
|
blt _01FFB7C0
|
|
cmp r5, #0
|
|
bne _01FFB84C
|
|
add r0, sp, #0x14
|
|
mov r1, #0x160
|
|
bl InitMove
|
|
add r0, sp, #0x1c
|
|
add r2, sp, #0x14
|
|
mov r1, sl
|
|
bl AiConsiderMove
|
|
ldrb r0, [sp, #0x1c]
|
|
cmp r0, #0
|
|
beq _01FFBD0C
|
|
ldrb r1, [sp, #0x1d]
|
|
add r0, r7, #0x4a
|
|
bl ov29_022EBC74
|
|
mov r0, sl
|
|
bl UpdateAiTargetPos
|
|
b _01FFBD0C
|
|
_01FFB84C:
|
|
mov r0, sl
|
|
mov r1, #0xb
|
|
bl IqSkillIsEnabled
|
|
mov r5, r0
|
|
mov r0, sl
|
|
mov r1, #0x17
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
mov r8, #0
|
|
and r0, r0, #0xff
|
|
str r0, [sp, #4]
|
|
mov r2, r8
|
|
mov r1, #1
|
|
add r0, sp, #0xc
|
|
_01FFB88C:
|
|
strb r1, [r0, r2]
|
|
add r2, r2, #1
|
|
cmp r2, #4
|
|
blt _01FFB88C
|
|
ldr r0, [sp, #4]
|
|
cmp r0, #0
|
|
beq _01FFB96C
|
|
mov r2, #0
|
|
mov r3, r2
|
|
mov r4, #0x63
|
|
add r0, r7, #0x124
|
|
mov sb, r2
|
|
add r6, sp, #0xc
|
|
mov lr, #1
|
|
b _01FFB938
|
|
_01FFB8C8:
|
|
ldrb ip, [r0, r3, lsl #3]
|
|
add r1, r0, r3, lsl #3
|
|
tst ip, #1
|
|
movne ip, lr
|
|
moveq ip, #0
|
|
tst ip, #0xff
|
|
beq _01FFB940
|
|
cmp r3, #0
|
|
beq _01FFB928
|
|
ldrb ip, [r1]
|
|
tst ip, #2
|
|
bne _01FFB928
|
|
add ip, r2, #1
|
|
cmp ip, r3
|
|
cmplt r4, #2
|
|
bge _01FFB91C
|
|
b _01FFB914
|
|
_01FFB90C:
|
|
strb sb, [r6, r2]
|
|
add r2, r2, #1
|
|
_01FFB914:
|
|
cmp r2, r3
|
|
blt _01FFB90C
|
|
_01FFB91C:
|
|
ldrb r4, [r1, #6]
|
|
mov r2, r3
|
|
b _01FFB934
|
|
_01FFB928:
|
|
ldrb r1, [r1, #6]
|
|
cmp r4, r1
|
|
movge r4, r1
|
|
_01FFB934:
|
|
add r3, r3, #1
|
|
_01FFB938:
|
|
cmp r3, #4
|
|
blt _01FFB8C8
|
|
_01FFB940:
|
|
add r0, r2, #1
|
|
cmp r0, r3
|
|
cmplt r4, #2
|
|
bge _01FFB96C
|
|
mov r1, #0
|
|
add r0, sp, #0xc
|
|
b _01FFB964
|
|
_01FFB95C:
|
|
strb r1, [r0, r2]
|
|
add r2, r2, #1
|
|
_01FFB964:
|
|
cmp r2, r3
|
|
blt _01FFB95C
|
|
_01FFB96C:
|
|
add r0, r7, #0x124
|
|
mov sb, #0
|
|
str r0, [sp, #8]
|
|
add r4, sp, #0x1c
|
|
_01FFB97C:
|
|
mov r0, #0
|
|
strb r0, [r4, sb, lsl #3]
|
|
ldr r0, [sp, #8]
|
|
add r6, r0, sb, lsl #3
|
|
ldrb r0, [r0, sb, lsl #3]
|
|
tst r0, #1
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
tst r0, #0xff
|
|
addne r0, sp, #0xc
|
|
ldrneb r0, [r0, sb]
|
|
cmpne r0, #0
|
|
beq _01FFBA7C
|
|
ldr r2, [sp, #4]
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl CanAiUseMove
|
|
cmp r0, #0
|
|
beq _01FFBA7C
|
|
ldrb r0, [r6]
|
|
tst r0, #4
|
|
beq _01FFBA7C
|
|
mov r0, #1
|
|
strb r0, [r4, sb, lsl #3]
|
|
ldrb r0, [r7, #0xd2]
|
|
mov r2, sb, lsl #3
|
|
cmp r0, #0xb
|
|
bne _01FFBA38
|
|
ldrh r0, [r6, #4]
|
|
cmp r0, #0x80
|
|
addeq r1, r4, r2
|
|
moveq r0, #0
|
|
streq r0, [r1, #4]
|
|
beq _01FFBA7C
|
|
mov r0, sl
|
|
mov r1, r6
|
|
bl GetMoveTypeForMonster
|
|
cmp r0, #5
|
|
addne r1, r4, sb, lsl #3
|
|
movne r0, #1
|
|
strne r0, [r1, #4]
|
|
bne _01FFBA70
|
|
mov r0, r6
|
|
bl GetMoveAiWeight
|
|
add r1, r4, sb, lsl #3
|
|
str r0, [r1, #4]
|
|
b _01FFBA70
|
|
_01FFBA38:
|
|
cmp r5, #0
|
|
beq _01FFBA60
|
|
ldr r1, [sp, #8]
|
|
add r0, r4, r2
|
|
add r2, r1, r2
|
|
mov r1, sl
|
|
bl AiConsiderMove
|
|
add r1, r4, sb, lsl #3
|
|
str r0, [r1, #4]
|
|
b _01FFBA70
|
|
_01FFBA60:
|
|
mov r0, r6
|
|
bl GetMoveAiWeight
|
|
add r1, r4, sb, lsl #3
|
|
str r0, [r1, #4]
|
|
_01FFBA70:
|
|
add r0, r4, sb, lsl #3
|
|
ldr r0, [r0, #4]
|
|
add r8, r8, r0
|
|
_01FFBA7C:
|
|
add sb, sb, #1
|
|
cmp sb, #4
|
|
blt _01FFB97C
|
|
mov r2, #0
|
|
mov r0, sl
|
|
mov r1, #0x17
|
|
str r2, [sp, #0x40]
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
bne _01FFBAF0
|
|
ldrb r0, [r7, #0xd2]
|
|
cmp r0, #0xb
|
|
beq _01FFBAF0
|
|
mov r1, #1
|
|
strb r1, [sp, #0x3c]
|
|
ldrb r0, [r7, #0xd2]
|
|
cmp r0, #0xb
|
|
streq r1, [sp, #0x40]
|
|
beq _01FFBAE8
|
|
cmp r5, #0
|
|
movne r0, #2
|
|
strne r0, [sp, #0x40]
|
|
ldreq r0, [sp]
|
|
ldreq r1, _01FFBD1C ; =ov10_022C4900
|
|
moveq r0, r0, lsl #1
|
|
ldreqsh r0, [r1, r0]
|
|
streq r0, [sp, #0x40]
|
|
_01FFBAE8:
|
|
ldr r0, [sp, #0x40]
|
|
add r8, r8, r0
|
|
_01FFBAF0:
|
|
cmp r5, #0
|
|
beq _01FFBB80
|
|
mov r0, #0
|
|
mov r8, r0
|
|
mov r5, r0
|
|
mov r2, r0
|
|
add r3, sp, #0x1c
|
|
_01FFBB0C:
|
|
ldrb r1, [r3, r5, lsl #3]
|
|
mov r4, r5, lsl #3
|
|
cmp r1, #0
|
|
add r1, r3, r4
|
|
streq r2, [r1, #4]
|
|
beq _01FFBB30
|
|
ldr r1, [r1, #4]
|
|
cmp r0, r1
|
|
movlt r0, r1
|
|
_01FFBB30:
|
|
add r5, r5, #1
|
|
cmp r5, #5
|
|
blt _01FFBB0C
|
|
mov r1, #0
|
|
mov r3, r1
|
|
add r5, sp, #0x1c
|
|
_01FFBB48:
|
|
ldrb r2, [r5, r1, lsl #3]
|
|
mov r4, r1, lsl #3
|
|
cmp r2, #0
|
|
beq _01FFBB74
|
|
add r4, r5, r4
|
|
ldr r2, [r4, #4]
|
|
cmp r0, r2
|
|
strne r3, [r4, #4]
|
|
add r2, r5, r1, lsl #3
|
|
ldr r2, [r2, #4]
|
|
add r8, r8, r2
|
|
_01FFBB74:
|
|
add r1, r1, #1
|
|
cmp r1, #5
|
|
blt _01FFBB48
|
|
_01FFBB80:
|
|
cmp r8, #0
|
|
beq _01FFBD0C
|
|
mov r0, r8
|
|
bl DungeonRandInt
|
|
mov r5, r0
|
|
mov r4, #0
|
|
mov r0, sl
|
|
mov r1, #0x4e
|
|
mov r6, r4
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _01FFBBD8
|
|
mov r0, sl
|
|
bl ov29_02338350
|
|
cmp r0, #0
|
|
bne _01FFBBD8
|
|
mov r6, #1
|
|
add r1, sp, #0x10
|
|
mov r0, sl
|
|
mov r2, r6
|
|
bl ov29_0231A460
|
|
mov fp, r0
|
|
_01FFBBD8:
|
|
cmp r6, #0
|
|
bne _01FFBC10
|
|
mov r0, sl
|
|
mov r1, #0x17
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
movne fp, #0
|
|
strne fp, [sp, #0x10]
|
|
bne _01FFBC10
|
|
add r1, sp, #0x10
|
|
mov r0, sl
|
|
mov r2, #1
|
|
bl ov29_0231A460
|
|
mov fp, r0
|
|
_01FFBC10:
|
|
mov r8, #0
|
|
add r3, sp, #0x1c
|
|
b _01FFBCE4
|
|
_01FFBC1C:
|
|
ldrb r0, [r3, r8, lsl #3]
|
|
mov r2, r8, lsl #3
|
|
cmp r0, #0
|
|
addne r0, r3, r2
|
|
ldrne r1, [r0, #4]
|
|
cmpne r1, #0
|
|
beq _01FFBCE0
|
|
add r4, r4, r1
|
|
cmp r4, r5
|
|
blt _01FFBCE0
|
|
cmp r6, #0
|
|
bne _01FFBC54
|
|
cmp r8, #4
|
|
bne _01FFBC78
|
|
_01FFBC54:
|
|
cmp fp, #0
|
|
beq _01FFBCEC
|
|
ldr r1, [sp, #0x10]
|
|
add r0, r7, #0x4a
|
|
and r1, r1, #0xff
|
|
bl SetActionRegularAttack
|
|
mov r0, sl
|
|
bl UpdateAiTargetPos
|
|
b _01FFBD0C
|
|
_01FFBC78:
|
|
add r3, r7, #0x124
|
|
mov r1, sl
|
|
add r2, r3, r2
|
|
bl AiConsiderMove
|
|
add r0, sp, #0x1c
|
|
ldrb r0, [r0, r8, lsl #3]
|
|
cmp r0, #0
|
|
beq _01FFBCEC
|
|
mov r1, r8
|
|
b _01FFBCB4
|
|
_01FFBCA0:
|
|
add r0, r7, r1, lsl #3
|
|
ldrb r0, [r0, #0x124]
|
|
tst r0, #2
|
|
beq _01FFBCBC
|
|
sub r1, r1, #1
|
|
_01FFBCB4:
|
|
cmp r1, #0
|
|
bgt _01FFBCA0
|
|
_01FFBCBC:
|
|
add r0, sp, #0x1d
|
|
ldrb r2, [r0, r8, lsl #3]
|
|
mov r1, r1, lsl #0x10
|
|
add r0, r7, #0x4a
|
|
mov r1, r1, asr #0x10
|
|
bl SetActionUseMoveAi
|
|
mov r0, sl
|
|
bl UpdateAiTargetPos
|
|
b _01FFBD0C
|
|
_01FFBCE0:
|
|
add r8, r8, #1
|
|
_01FFBCE4:
|
|
cmp r8, #5
|
|
blt _01FFBC1C
|
|
_01FFBCEC:
|
|
cmp fp, #0
|
|
beq _01FFBD0C
|
|
ldr r1, [sp, #0x10]
|
|
add r0, r7, #0x4a
|
|
and r1, r1, #0xff
|
|
bl SetActionRegularAttack
|
|
mov r0, sl
|
|
bl UpdateAiTargetPos
|
|
_01FFBD0C:
|
|
add sp, sp, #0x44
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FFBD14: .word DUNGEON_PTR
|
|
_01FFBD18: .word ov10_022C4580
|
|
_01FFBD1C: .word ov10_022C4900
|
|
arm_func_end ChooseAiMove
|
|
|
|
arm_func_start sub_01FFBD20
|
|
sub_01FFBD20: ; 0x01FFBD20
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
bl IsMonster__0231A9D4
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r5, [r6, #0xb4]
|
|
ldrb r0, [r5, #6]
|
|
cmp r0, #0
|
|
beq _01FFBD5C
|
|
ldrb r0, [r5, #8]
|
|
cmp r0, #0
|
|
moveq r3, #1
|
|
beq _01FFBD60
|
|
_01FFBD5C:
|
|
mov r3, #0
|
|
_01FFBD60:
|
|
ldr r1, _01FFBDF0 ; =DUNGEON_PTR
|
|
mov r0, r6
|
|
ldr r2, [r1]
|
|
mov r1, #0x32
|
|
add r2, r2, #0xe4
|
|
add r2, r2, #0x19800
|
|
add r4, r2, r3, lsl #4
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _01FFBDB0
|
|
ldr r0, [r4]
|
|
cmp r0, #0
|
|
bne _01FFBDB0
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl sub_01FFBF78
|
|
cmp r0, #0
|
|
strne r6, [r4]
|
|
ldrne r0, [r5, #0xb0]
|
|
strne r0, [r4, #4]
|
|
_01FFBDB0:
|
|
mov r0, r6
|
|
mov r1, #0x7a
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r0, [r4, #8]
|
|
cmp r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl sub_01FFBF78
|
|
cmp r0, #0
|
|
strne r6, [r4, #8]
|
|
ldrne r0, [r5, #0xb0]
|
|
strne r0, [r4, #0xc]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_01FFBDF0: .word DUNGEON_PTR
|
|
arm_func_end sub_01FFBD20
|
|
|
|
arm_func_start sub_01FFBDF4
|
|
sub_01FFBDF4: ; 0x01FFBDF4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
bl ov29_0231B008
|
|
mov r0, r7
|
|
bl EntityIsValid__02319F8C
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r4, _01FFBE58 ; =DUNGEON_PTR
|
|
mov r5, #0
|
|
_01FFBE18:
|
|
ldr r0, [r4]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
ldr r6, [r0, #0xb78]
|
|
mov r0, r6
|
|
bl EntityIsValid__02319F8C
|
|
cmp r0, #0
|
|
cmpne r7, r6
|
|
beq _01FFBE48
|
|
mov r0, r7
|
|
mov r1, r6
|
|
bl sub_01FFBD20
|
|
_01FFBE48:
|
|
add r5, r5, #1
|
|
cmp r5, #0x14
|
|
blt _01FFBE18
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_01FFBE58: .word DUNGEON_PTR
|
|
arm_func_end sub_01FFBDF4
|
|
|
|
arm_func_start LightningRodStormDrainCheck
|
|
LightningRodStormDrainCheck: ; 0x01FFBE5C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov sl, r0
|
|
mov sb, r1
|
|
mov r8, r2
|
|
mov r7, r3
|
|
mov r5, #0
|
|
ldr r4, _01FFBF70 ; =_01FFB654
|
|
ldr fp, _01FFBF74 ; =DUNGEON_PTR
|
|
b _01FFBF60
|
|
_01FFBE80:
|
|
ldr r1, [fp]
|
|
mov r0, sl
|
|
add r1, r1, #0xe4
|
|
add r1, r1, #0x19800
|
|
add r6, r1, r5, lsl #4
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _01FFBF5C
|
|
mov r0, sl
|
|
mov r1, r8
|
|
bl GetMoveTypeForMonster
|
|
ldrb r1, [r4, r7]
|
|
cmp r1, r0
|
|
bne _01FFBF5C
|
|
mov r0, sl
|
|
mov r1, r8
|
|
mov r2, #0
|
|
bl GetEntityMoveTargetAndRange
|
|
and r0, r0, #0xf0
|
|
cmp r0, #0x70
|
|
beq _01FFBF5C
|
|
ldr r0, [r6, r7, lsl #3]
|
|
bl IsMonster__0231A9D4
|
|
cmp r0, #0
|
|
beq _01FFBF4C
|
|
ldr r0, [r6, r7, lsl #3]
|
|
add r1, r6, r7, lsl #3
|
|
ldr r2, [r1, #4]
|
|
ldr r1, [r0, #0xb4]
|
|
ldr r1, [r1, #0xb0]
|
|
cmp r2, r1
|
|
bne _01FFBF4C
|
|
mov r1, sl
|
|
mov r2, #1
|
|
mov r3, #0
|
|
bl ov29_0230175C
|
|
cmp r0, #1
|
|
bne _01FFBF4C
|
|
ldr r0, [sb, #0xb4]
|
|
ldr r2, [r6, r7, lsl #3]
|
|
ldrb r0, [r0, #0x10b]
|
|
ldr r1, [r2, #0xb4]
|
|
cmp r0, #0
|
|
ldreqb r0, [r1, #0x10b]
|
|
cmpeq r0, #0
|
|
beq _01FFBF44
|
|
cmp sb, r2
|
|
bne _01FFBF4C
|
|
_01FFBF44:
|
|
mov r0, #1
|
|
b _01FFBF50
|
|
_01FFBF4C:
|
|
mov r0, #0
|
|
_01FFBF50:
|
|
cmp r0, #0
|
|
ldrne r0, [r6, r7, lsl #3]
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
_01FFBF5C:
|
|
add r5, r5, #1
|
|
_01FFBF60:
|
|
cmp r5, #2
|
|
blt _01FFBE80
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_01FFBF70: .word _01FFB654
|
|
_01FFBF74: .word DUNGEON_PTR
|
|
arm_func_end LightningRodStormDrainCheck
|
|
|
|
arm_func_start sub_01FFBF78
|
|
sub_01FFBF78: ; 0x01FFBF78
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #0x10
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, #0
|
|
bl ov29_0231985C
|
|
mov r0, r6
|
|
mov r1, r5
|
|
bl CanSeeTarget
|
|
cmp r0, #0
|
|
beq _01FFBFD8
|
|
add r0, sp, #8
|
|
mov r1, r4
|
|
bl InitMove
|
|
add r0, sp, #8
|
|
str r0, [sp]
|
|
mov ip, #1
|
|
mov r2, r6
|
|
mov r3, r5
|
|
mov r0, r4
|
|
mov r1, #0x30
|
|
str ip, [sp, #4]
|
|
bl TryAddTargetToAiTargetList
|
|
mov r4, r0
|
|
_01FFBFD8:
|
|
cmp r4, #0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
add sp, sp, #0x10
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end sub_01FFBF78
|
|
; 0x01FFBFF0
|