mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
1071 lines
19 KiB
ArmAsm
1071 lines
19 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_022E1AD4.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start ov29_022E1AD4
|
|
ov29_022E1AD4: ; 0x022E1AD4
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
ldrne r0, [r4, #0xb4]
|
|
#ifdef JAPAN
|
|
ldrneb r0, [r0, #0x177]
|
|
#else
|
|
ldrneb r0, [r0, #0x17b]
|
|
#endif
|
|
moveq r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_022E1AD4
|
|
|
|
arm_func_start ov29_022E1AF4
|
|
ov29_022E1AF4: ; 0x022E1AF4
|
|
ldr r2, _022E1B24 ; =ov29_0237C754
|
|
mov r3, #0
|
|
add ip, r2, r0
|
|
mov r2, #1
|
|
b _022E1B18
|
|
_022E1B08:
|
|
add r0, r3, #1
|
|
mov r0, r0, lsl #0x10
|
|
strb r2, [ip, r3]
|
|
mov r3, r0, lsr #0x10
|
|
_022E1B18:
|
|
cmp r3, r1
|
|
blo _022E1B08
|
|
bx lr
|
|
.align 2, 0
|
|
_022E1B24: .word ov29_0237C754
|
|
arm_func_end ov29_022E1AF4
|
|
|
|
arm_func_start ov29_022E1B28
|
|
ov29_022E1B28: ; 0x022E1B28
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r4, #0
|
|
mov r8, r0
|
|
mov r5, r4
|
|
_022E1B38:
|
|
ldr r0, _022E1C04 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xa84]
|
|
#else
|
|
ldr r7, [r0, #0xb28]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
beq _022E1BD8
|
|
ldr r0, [r7, #0xb4]
|
|
ldrsh r0, [r0, #4]
|
|
bl GetSpriteSize
|
|
mov r6, r0
|
|
ldrb r0, [r7, #0xaa]
|
|
bl ov29_022DE954
|
|
cmp r0, #0
|
|
add r0, r4, #0x1a
|
|
strh r0, [r7, #0xac]
|
|
ldr r0, [r7, #0xb4]
|
|
movne r6, r6, lsl #1
|
|
#ifdef JAPAN
|
|
strb r4, [r0, #0x176]
|
|
ldr r0, [r7, #0xb4]
|
|
mov r2, #0
|
|
strb r6, [r0, #0x177]
|
|
#else
|
|
strb r4, [r0, #0x17a]
|
|
ldr r0, [r7, #0xb4]
|
|
mov r2, #0
|
|
strb r6, [r0, #0x17b]
|
|
#endif
|
|
mov r1, #1
|
|
ldr r0, _022E1C08 ; =ov29_0237C754
|
|
b _022E1BB4
|
|
_022E1BA4:
|
|
cmp r4, #0x48
|
|
strltb r1, [r0, r4]
|
|
addlt r4, r4, #1
|
|
add r2, r2, #1
|
|
_022E1BB4:
|
|
cmp r2, r6
|
|
blt _022E1BA4
|
|
cmp r8, #0
|
|
beq _022E1BD8
|
|
mov r0, r7
|
|
bl GetIdleAnimationId
|
|
mov r1, r0
|
|
mov r0, r7
|
|
bl ov29_02304830
|
|
_022E1BD8:
|
|
add r5, r5, #1
|
|
cmp r5, #4
|
|
blt _022E1B38
|
|
mov r1, #0
|
|
ldr r0, _022E1C08 ; =ov29_0237C754
|
|
b _022E1BF8
|
|
_022E1BF0:
|
|
strb r1, [r0, r4]
|
|
add r4, r4, #1
|
|
_022E1BF8:
|
|
cmp r4, #0x48
|
|
blt _022E1BF0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022E1C04: .word DUNGEON_PTR
|
|
_022E1C08: .word ov29_0237C754
|
|
arm_func_end ov29_022E1B28
|
|
|
|
arm_func_start ov29_022E1C0C
|
|
ov29_022E1C0C: ; 0x022E1C0C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r0
|
|
mov r6, r1
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
ldr r4, [r7, #0xb4]
|
|
ldrb r0, [r4, #6]
|
|
cmp r0, #0
|
|
ldrne r5, _022E1C7C ; =ov29_0237C79C
|
|
ldreq r5, _022E1C80 ; =ov29_0237C754
|
|
cmp r6, #0
|
|
beq _022E1C48
|
|
ldrb r0, [r7, #0xaa]
|
|
bl ov29_022DEA1C
|
|
_022E1C48:
|
|
mov r3, #0
|
|
mov r2, r3
|
|
b _022E1C6C
|
|
_022E1C54:
|
|
#ifdef JAPAN
|
|
ldrb r1, [r4, #0x176]
|
|
#else
|
|
ldrb r1, [r4, #0x17a]
|
|
#endif
|
|
add r0, r3, #1
|
|
mov r0, r0, lsl #0x10
|
|
add r1, r5, r1
|
|
strb r2, [r3, r1]
|
|
mov r3, r0, asr #0x10
|
|
_022E1C6C:
|
|
#ifdef JAPAN
|
|
ldrb r0, [r4, #0x177]
|
|
#else
|
|
ldrb r0, [r4, #0x17b]
|
|
#endif
|
|
cmp r3, r0
|
|
blt _022E1C54
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022E1C7C: .word ov29_0237C79C
|
|
_022E1C80: .word ov29_0237C754
|
|
arm_func_end ov29_022E1C0C
|
|
|
|
arm_func_start ov29_022E1C84
|
|
ov29_022E1C84: ; 0x022E1C84
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r7, r0
|
|
mov r0, r2
|
|
mov r6, r1
|
|
mvn r4, #0
|
|
bl GetSpriteSize
|
|
mov r5, r0
|
|
ldrsh r0, [sp, #0x18]
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
ldmltia sp!, {r4, r5, r6, r7, r8, pc}
|
|
bl ov29_022DE954
|
|
cmp r0, #0
|
|
movne r5, r5, lsl #1
|
|
mov r3, #0
|
|
rsb ip, r5, #0x48
|
|
mov r2, r3
|
|
ldr r1, _022E1D28 ; =ov29_0237C754
|
|
b _022E1D04
|
|
_022E1CD0:
|
|
mov r8, r2
|
|
add lr, r1, r3
|
|
b _022E1CEC
|
|
_022E1CDC:
|
|
ldrb r0, [lr, r8]
|
|
cmp r0, #0
|
|
bne _022E1CF4
|
|
add r8, r8, #1
|
|
_022E1CEC:
|
|
cmp r8, r5
|
|
blt _022E1CDC
|
|
_022E1CF4:
|
|
cmp r8, r5
|
|
moveq r4, r3
|
|
beq _022E1D0C
|
|
add r3, r3, #1
|
|
_022E1D04:
|
|
cmp r3, ip
|
|
ble _022E1CD0
|
|
_022E1D0C:
|
|
mvn r0, #0
|
|
cmp r4, r0
|
|
moveq r0, #0
|
|
strne r4, [r7]
|
|
strne r5, [r6]
|
|
movne r0, #1
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022E1D28: .word ov29_0237C754
|
|
arm_func_end ov29_022E1C84
|
|
|
|
arm_func_start ov29_022E1D2C
|
|
ov29_022E1D2C: ; 0x022E1D2C
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #0xc
|
|
mov r8, r0
|
|
mvn r1, #0
|
|
mov r0, #1
|
|
str r1, [sp, #8]
|
|
bl ov29_022DEA10
|
|
mov r6, r0
|
|
mov r1, r8
|
|
mov r0, #0
|
|
bl GetMonsterApparentId
|
|
bl DungeonGetSpriteIndex
|
|
mov r4, r0
|
|
add r0, sp, #8
|
|
add r1, sp, #4
|
|
mov r2, r8
|
|
mov r3, r4
|
|
str r6, [sp]
|
|
bl ov29_022E1C84
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _022E1EB8
|
|
mov r5, #0
|
|
ldr sb, _022E1EC0 ; =DUNGEON_PTR
|
|
b _022E1EAC
|
|
_022E1D90:
|
|
ldr r0, [sb]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xa84]
|
|
#else
|
|
ldr r7, [r0, #0xb28]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
bne _022E1EA8
|
|
mov r0, #1
|
|
str r0, [r7]
|
|
ldr r0, _022E1EC0 ; =DUNGEON_PTR
|
|
strb r5, [r7, #0x24]
|
|
ldr r0, [r0]
|
|
#ifdef JAPAN
|
|
mov r1, #0x23c
|
|
add r0, r0, #0x3f4
|
|
add r0, r0, #0x400
|
|
mla r0, r5, r1, r0
|
|
#else
|
|
add r1, r5, r5, lsl #3
|
|
add r0, r0, #0x3f4
|
|
add r0, r0, #0x400
|
|
add r0, r0, r1, lsl #6
|
|
#endif
|
|
str r0, [r7, #0xb4]
|
|
strh r8, [r0, #2]
|
|
mov r1, r8
|
|
mov r0, #0
|
|
bl GetMonsterApparentId
|
|
ldr r1, [r7, #0xb4]
|
|
mov r2, #0
|
|
strh r0, [r1, #4]
|
|
ldr r1, [r7, #0xb4]
|
|
and r0, r6, #0xff
|
|
strb r2, [r1, #6]
|
|
ldr r1, [r7, #0xb4]
|
|
strb r2, [r1, #8]
|
|
strh r4, [r7, #0xa8]
|
|
strb r6, [r7, #0xaa]
|
|
bl ov29_022DE9F8
|
|
ldr r1, [sp, #8]
|
|
mov r0, #7
|
|
add r1, r1, #0x1a
|
|
strh r1, [r7, #0xac]
|
|
strb r0, [r7, #0xae]
|
|
mov r1, #0
|
|
strb r1, [r7, #0x28]
|
|
strb r1, [r7, #0xb0]
|
|
mov r0, #0xff
|
|
strb r0, [r7, #0xaf]
|
|
mov r0, #1
|
|
strb r0, [r7, #0xb1]
|
|
strb r0, [r7, #0xb3]
|
|
str r1, [r7, #0x1c]
|
|
bl PopulateActiveMonsterPtrs
|
|
ldr r1, [sp, #8]
|
|
ldr r0, [r7, #0xb4]
|
|
#ifdef JAPAN
|
|
strb r1, [r0, #0x176]
|
|
ldr r1, [sp, #4]
|
|
ldr r0, [r7, #0xb4]
|
|
strb r1, [r0, #0x177]
|
|
#else
|
|
strb r1, [r0, #0x17a]
|
|
ldr r1, [sp, #4]
|
|
ldr r0, [r7, #0xb4]
|
|
strb r1, [r0, #0x17b]
|
|
#endif
|
|
ldr r0, [sp, #8]
|
|
ldr r1, [sp, #4]
|
|
mov r0, r0, lsl #0x10
|
|
mov r1, r1, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
mov r1, r1, lsr #0x10
|
|
bl ov29_022E1AF4
|
|
ldr r1, _022E1EC0 ; =DUNGEON_PTR
|
|
mov r0, r7
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x700
|
|
ldrh r3, [r1, #0x88]
|
|
add r2, r3, #1
|
|
strh r2, [r1, #0x88]
|
|
strh r3, [r7, #0x26]
|
|
b _022E1EB8
|
|
_022E1EA8:
|
|
add r5, r5, #1
|
|
_022E1EAC:
|
|
cmp r5, #4
|
|
blt _022E1D90
|
|
mov r0, #0
|
|
_022E1EB8:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022E1EC0: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E1D2C
|
|
|
|
arm_func_start ov29_022E1EC4
|
|
ov29_022E1EC4: ; 0x022E1EC4
|
|
ldr r2, _022E1EF4 ; =ov29_0237C79C
|
|
mov r3, #0
|
|
add ip, r2, r0
|
|
mov r2, #1
|
|
b _022E1EE8
|
|
_022E1ED8:
|
|
add r0, r3, #1
|
|
mov r0, r0, lsl #0x10
|
|
strb r2, [ip, r3]
|
|
mov r3, r0, lsr #0x10
|
|
_022E1EE8:
|
|
cmp r3, r1
|
|
blo _022E1ED8
|
|
bx lr
|
|
.align 2, 0
|
|
_022E1EF4: .word ov29_0237C79C
|
|
arm_func_end ov29_022E1EC4
|
|
|
|
arm_func_start ov29_022E1EF8
|
|
ov29_022E1EF8: ; 0x022E1EF8
|
|
mov r0, #0
|
|
ldr r2, _022E1F30 ; =ov29_0237C79C
|
|
mov r3, r0
|
|
_022E1F04:
|
|
ldrb r1, [r2, r3]
|
|
cmp r1, #0
|
|
add r1, r3, #1
|
|
addeq r0, r0, #1
|
|
mov r1, r1, lsl #0x10
|
|
moveq r0, r0, lsl #0x10
|
|
mov r3, r1, lsr #0x10
|
|
moveq r0, r0, asr #0x10
|
|
cmp r3, #0xae
|
|
blo _022E1F04
|
|
bx lr
|
|
.align 2, 0
|
|
_022E1F30: .word ov29_0237C79C
|
|
arm_func_end ov29_022E1EF8
|
|
|
|
arm_func_start ov29_022E1F34
|
|
ov29_022E1F34: ; 0x022E1F34
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r4, #0
|
|
mov r8, r0
|
|
mov r5, r4
|
|
_022E1F44:
|
|
ldr r0, _022E2010 ; =DUNGEON_PTR
|
|
ldr r0, [r0]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xa94]
|
|
#else
|
|
ldr r7, [r0, #0xb38]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
beq _022E1FE4
|
|
ldr r0, [r7, #0xb4]
|
|
ldrsh r0, [r0, #4]
|
|
bl GetSpriteSize
|
|
mov r6, r0
|
|
ldrb r0, [r7, #0xaa]
|
|
bl ov29_022DE954
|
|
cmp r0, #0
|
|
add r0, r4, #0x62
|
|
strh r0, [r7, #0xac]
|
|
ldr r0, [r7, #0xb4]
|
|
movne r6, r6, lsl #1
|
|
#ifdef JAPAN
|
|
strb r5, [r0, #0x176]
|
|
ldr r0, [r7, #0xb4]
|
|
mov r2, #0
|
|
strb r6, [r0, #0x177]
|
|
#else
|
|
strb r5, [r0, #0x17a]
|
|
ldr r0, [r7, #0xb4]
|
|
mov r2, #0
|
|
strb r6, [r0, #0x17b]
|
|
#endif
|
|
mov r1, #1
|
|
ldr r0, _022E2014 ; =ov29_0237C79C
|
|
b _022E1FC0
|
|
_022E1FB0:
|
|
cmp r4, #0xae
|
|
strltb r1, [r0, r4]
|
|
addlt r4, r4, #1
|
|
add r2, r2, #1
|
|
_022E1FC0:
|
|
cmp r2, r6
|
|
blt _022E1FB0
|
|
cmp r8, #0
|
|
beq _022E1FE4
|
|
mov r0, r7
|
|
bl GetIdleAnimationId
|
|
mov r1, r0
|
|
mov r0, r7
|
|
bl ov29_02304830
|
|
_022E1FE4:
|
|
add r5, r5, #1
|
|
cmp r5, #0x10
|
|
blt _022E1F44
|
|
mov r1, #0
|
|
ldr r0, _022E2014 ; =ov29_0237C79C
|
|
b _022E2004
|
|
_022E1FFC:
|
|
strb r1, [r0, r4]
|
|
add r4, r4, #1
|
|
_022E2004:
|
|
cmp r4, #0xae
|
|
blt _022E1FFC
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022E2010: .word DUNGEON_PTR
|
|
_022E2014: .word ov29_0237C79C
|
|
arm_func_end ov29_022E1F34
|
|
|
|
arm_func_start ov29_022E2018
|
|
ov29_022E2018: ; 0x022E2018
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
mov r7, r0
|
|
mov r0, r2
|
|
mov r6, r1
|
|
mvn r4, #0
|
|
bl GetSpriteSize
|
|
mov r5, r0
|
|
ldrsh r0, [sp, #0x18]
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
ldmltia sp!, {r4, r5, r6, r7, r8, pc}
|
|
bl ov29_022DE954
|
|
cmp r0, #0
|
|
movne r5, r5, lsl #1
|
|
mov r3, #0
|
|
rsb ip, r5, #0xae
|
|
mov r2, r3
|
|
ldr r1, _022E20BC ; =ov29_0237C79C
|
|
b _022E2098
|
|
_022E2064:
|
|
mov r8, r2
|
|
add lr, r1, r3
|
|
b _022E2080
|
|
_022E2070:
|
|
ldrb r0, [lr, r8]
|
|
cmp r0, #0
|
|
bne _022E2088
|
|
add r8, r8, #1
|
|
_022E2080:
|
|
cmp r8, r5
|
|
blt _022E2070
|
|
_022E2088:
|
|
cmp r8, r5
|
|
moveq r4, r3
|
|
beq _022E20A0
|
|
add r3, r3, #1
|
|
_022E2098:
|
|
cmp r3, ip
|
|
ble _022E2064
|
|
_022E20A0:
|
|
mvn r0, #0
|
|
cmp r4, r0
|
|
moveq r0, #0
|
|
strne r4, [r7]
|
|
strne r5, [r6]
|
|
movne r0, #1
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022E20BC: .word ov29_0237C79C
|
|
arm_func_end ov29_022E2018
|
|
|
|
arm_func_start CreateEnemyEntity
|
|
CreateEnemyEntity: ; 0x022E20C0
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #0xc
|
|
mov r8, r0
|
|
mov r0, #2
|
|
bl ov29_022DEA10
|
|
mov r6, r0
|
|
mov r1, r8
|
|
mov r0, #0
|
|
bl GetMonsterApparentId
|
|
mov r4, r0
|
|
bl DungeonGetSpriteIndex
|
|
mov r3, r0
|
|
add r0, sp, #8
|
|
add r1, sp, #4
|
|
mov r2, r8
|
|
str r6, [sp]
|
|
bl ov29_022E2018
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
beq _022E2254
|
|
mov r5, #0
|
|
ldr sb, _022E225C ; =DUNGEON_PTR
|
|
b _022E2248
|
|
_022E211C:
|
|
ldr r0, [sb]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r7, [r0, #0xa94]
|
|
#else
|
|
ldr r7, [r0, #0xb38]
|
|
#endif
|
|
mov r0, r7
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
bne _022E2244
|
|
mov r0, #1
|
|
str r0, [r7]
|
|
strb r5, [r7, #0x24]
|
|
mov r0, #0
|
|
ldr r1, _022E225C ; =DUNGEON_PTR
|
|
strb r0, [r7, #0x22]
|
|
ldr r1, [r1]
|
|
#ifdef JAPAN
|
|
mov r2, #0x23c
|
|
add r1, r1, #0xe4
|
|
add r1, r1, #0x1000
|
|
mla r2, r5, r2, r1
|
|
#else
|
|
add r2, r5, r5, lsl #3
|
|
add r1, r1, #0xf4
|
|
add r1, r1, #0x1000
|
|
add r2, r1, r2, lsl #6
|
|
#endif
|
|
str r2, [r7, #0xb4]
|
|
mov r1, r8
|
|
strh r8, [r2, #2]
|
|
bl GetMonsterApparentId
|
|
ldr r2, [r7, #0xb4]
|
|
mov r1, #1
|
|
strh r0, [r2, #4]
|
|
ldr r0, [r7, #0xb4]
|
|
mov r2, #0
|
|
strb r1, [r0, #6]
|
|
ldr r1, [r7, #0xb4]
|
|
mov r0, r4
|
|
strb r2, [r1, #8]
|
|
bl DungeonGetSpriteIndex
|
|
strh r0, [r7, #0xa8]
|
|
strb r6, [r7, #0xaa]
|
|
ldr r0, [sp, #8]
|
|
add r0, r0, #0x62
|
|
strh r0, [r7, #0xac]
|
|
ldrb r0, [r7, #0xaa]
|
|
bl ov29_022DE9F8
|
|
mov r0, #7
|
|
strb r0, [r7, #0xae]
|
|
mov r1, #0
|
|
strb r1, [r7, #0x28]
|
|
strb r1, [r7, #0xb0]
|
|
mov r0, #0xff
|
|
strb r0, [r7, #0xaf]
|
|
mov r0, #1
|
|
strb r0, [r7, #0xb1]
|
|
strb r0, [r7, #0xb3]
|
|
str r1, [r7, #0x1c]
|
|
ldr r1, [sp, #8]
|
|
ldr r0, [r7, #0xb4]
|
|
#ifdef JAPAN
|
|
strb r1, [r0, #0x176]
|
|
ldr r1, [sp, #4]
|
|
ldr r0, [r7, #0xb4]
|
|
strb r1, [r0, #0x177]
|
|
#else
|
|
strb r1, [r0, #0x17a]
|
|
ldr r1, [sp, #4]
|
|
ldr r0, [r7, #0xb4]
|
|
strb r1, [r0, #0x17b]
|
|
#endif
|
|
ldr r0, [sp, #8]
|
|
ldr r1, [sp, #4]
|
|
mov r0, r0, lsl #0x10
|
|
mov r1, r1, lsl #0x10
|
|
mov r0, r0, lsr #0x10
|
|
mov r1, r1, lsr #0x10
|
|
bl ov29_022E1EC4
|
|
bl PopulateActiveMonsterPtrs
|
|
ldr r1, _022E225C ; =DUNGEON_PTR
|
|
mov r0, r7
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x700
|
|
ldrh r3, [r1, #0x88]
|
|
add r2, r3, #1
|
|
strh r2, [r1, #0x88]
|
|
strh r3, [r7, #0x26]
|
|
b _022E2254
|
|
_022E2244:
|
|
add r5, r5, #1
|
|
_022E2248:
|
|
cmp r5, #0x10
|
|
blt _022E211C
|
|
mov r0, #0
|
|
_022E2254:
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_022E225C: .word DUNGEON_PTR
|
|
arm_func_end CreateEnemyEntity
|
|
|
|
arm_func_start SpawnTrap
|
|
SpawnTrap: ; 0x022E2260
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
|
mov sl, r0
|
|
mov sb, r1
|
|
mov r8, r2
|
|
mov r7, r3
|
|
mov r5, #0
|
|
ldr r4, _022E2310 ; =DUNGEON_PTR
|
|
b _022E2300
|
|
_022E2280:
|
|
ldr r0, [r4]
|
|
add r0, r0, r5, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r6, [r0, #0xc24]
|
|
#else
|
|
ldr r6, [r0, #0xcc8]
|
|
#endif
|
|
mov r0, r6
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
bne _022E22FC
|
|
mov r1, #2
|
|
ldr r0, _022E2310 ; =DUNGEON_PTR
|
|
str r1, [r6]
|
|
ldr r0, [r0]
|
|
mov r2, #0
|
|
#ifdef JAPAN
|
|
add r0, r0, #0xf20
|
|
add r0, r0, #0x3000
|
|
#else
|
|
add r0, r0, #0x3c4
|
|
add r0, r0, #0x3c00
|
|
#endif
|
|
add r0, r0, r5, lsl #2
|
|
str r0, [r6, #0xb4]
|
|
strb sl, [r0]
|
|
ldr r1, [r6, #0xb4]
|
|
mov r0, r6
|
|
strb r8, [r1, #1]
|
|
ldr r1, [r6, #0xb4]
|
|
strb r7, [r1, #2]
|
|
str r2, [r6, #0x1c]
|
|
strb r2, [r6, #0x22]
|
|
ldrh r1, [sb]
|
|
strh r1, [r6, #4]
|
|
ldrh r1, [sb, #2]
|
|
strh r1, [r6, #6]
|
|
strh r2, [r6, #0x26]
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
_022E22FC:
|
|
add r5, r5, #1
|
|
_022E2300:
|
|
cmp r5, #0x40
|
|
blt _022E2280
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_022E2310: .word DUNGEON_PTR
|
|
arm_func_end SpawnTrap
|
|
|
|
arm_func_start SpawnItemEntity
|
|
SpawnItemEntity: ; 0x022E2314
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
ldr r1, _022E2410 ; =DUNGEON_PTR
|
|
ldr r2, _022E2414 ; =SECONDARY_TERRAIN_TYPES
|
|
ldr r1, [r1]
|
|
mov r6, r0
|
|
add r0, r1, #0x4000
|
|
#ifdef JAPAN
|
|
ldrsh r0, [r0, #0x30]
|
|
#else
|
|
ldrsh r0, [r0, #0xd4]
|
|
#endif
|
|
ldrb r0, [r2, r0]
|
|
cmp r0, #1
|
|
bne _022E235C
|
|
ldrsh r0, [r6]
|
|
ldrsh r1, [r6, #2]
|
|
bl GetTileSafe
|
|
ldrh r0, [r0]
|
|
and r0, r0, #3
|
|
cmp r0, #2
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_022E235C:
|
|
mov r4, #0
|
|
ldr r7, _022E2410 ; =DUNGEON_PTR
|
|
b _022E2400
|
|
_022E2368:
|
|
ldr r0, [r7]
|
|
add r0, r0, r4, lsl #2
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r5, [r0, #0xb24]
|
|
#else
|
|
ldr r5, [r0, #0xbc8]
|
|
#endif
|
|
mov r0, r5
|
|
bl EntityIsValid__022E1A1C
|
|
cmp r0, #0
|
|
bne _022E23FC
|
|
#ifdef JAPAN
|
|
mov r1, #3
|
|
str r1, [r5]
|
|
ldr r0, _022E2410 ; =DUNGEON_PTR
|
|
mov r1, #6
|
|
ldr r0, [r0]
|
|
mov r2, #0
|
|
add r0, r0, #0x19c
|
|
add r0, r0, #0x3c00
|
|
mla r0, r4, r1, r0
|
|
#else
|
|
ldr r0, _022E2410 ; =DUNGEON_PTR
|
|
mov r1, #3
|
|
str r1, [r5]
|
|
ldr r1, [r0]
|
|
mov r0, #6
|
|
add r1, r1, #0x3e40
|
|
mla r0, r4, r0, r1
|
|
#endif
|
|
str r0, [r5, #0xb4]
|
|
ldrh r0, [r6]
|
|
mov r1, #0x18
|
|
#ifndef JAPAN
|
|
mov r2, #0
|
|
#endif
|
|
strh r0, [r5, #4]
|
|
ldrh r3, [r6, #2]
|
|
mov r0, r5
|
|
strh r3, [r5, #6]
|
|
ldrsh r3, [r6]
|
|
ldrsh r4, [r6, #2]
|
|
smulbb r3, r3, r1
|
|
smulbb r4, r4, r1
|
|
add r1, r3, #4
|
|
mov r1, r1, lsl #8
|
|
add r3, r4, #4
|
|
str r1, [r5, #0xc]
|
|
mov r1, r3, lsl #8
|
|
str r1, [r5, #0x10]
|
|
strh r2, [r5, #0x26]
|
|
strb r2, [r5, #0x22]
|
|
str r2, [r5, #0x1c]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_022E23FC:
|
|
add r4, r4, #1
|
|
_022E2400:
|
|
cmp r4, #0x40
|
|
blt _022E2368
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_022E2410: .word DUNGEON_PTR
|
|
_022E2414: .word SECONDARY_TERRAIN_TYPES
|
|
arm_func_end SpawnItemEntity
|
|
|
|
arm_func_start ov29_022E2418
|
|
ov29_022E2418: ; 0x022E2418
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl HiddenStairsPresent
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
ldr r0, _022E246C ; =DUNGEON_PTR
|
|
mov r1, #5
|
|
ldr r0, [r0]
|
|
mov r2, #0
|
|
add r0, r0, #0x12000
|
|
#ifdef JAPAN
|
|
ldr r0, [r0, #0xd24]
|
|
#else
|
|
ldr r0, [r0, #0xdc8]
|
|
#endif
|
|
str r1, [r0]
|
|
str r2, [r0, #0x1c]
|
|
strb r2, [r0, #0x22]
|
|
ldrh r1, [r4]
|
|
strh r1, [r0, #4]
|
|
ldrh r1, [r4, #2]
|
|
strh r1, [r0, #6]
|
|
strh r2, [r0, #0x26]
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_022E246C: .word DUNGEON_PTR
|
|
arm_func_end ov29_022E2418
|
|
|
|
arm_func_start ov29_022E2470
|
|
ov29_022E2470: ; 0x022E2470
|
|
mov r1, #6
|
|
str r1, [r0]
|
|
mov r1, #0
|
|
strh r1, [r0, #4]
|
|
strh r1, [r0, #6]
|
|
str r1, [r0, #0xc]
|
|
str r1, [r0, #0x10]
|
|
strh r1, [r0, #0x26]
|
|
strb r1, [r0, #0x22]
|
|
bx lr
|
|
arm_func_end ov29_022E2470
|
|
|
|
arm_func_start ShouldMinimapDisplayEntity
|
|
ShouldMinimapDisplayEntity: ; 0x022E2498
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
ldr r0, [r5]
|
|
cmp r0, #0
|
|
beq _022E2560
|
|
cmp r0, #1
|
|
beq _022E24C0
|
|
cmp r0, #6
|
|
beq _022E2560
|
|
b _022E2568
|
|
_022E24C0:
|
|
ldrb r0, [r5, #0x20]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldr r0, _022E2570 ; =DUNGEON_PTR
|
|
ldr r2, [r5, #0xb4]
|
|
ldr r0, [r0]
|
|
ldrb r1, [r2, #6]
|
|
#ifdef JAPAN
|
|
add r0, r0, #0x178
|
|
#else
|
|
add r0, r0, #0x21c
|
|
#endif
|
|
add r4, r0, #0x1a000
|
|
ldr r0, [r4, #0x10]
|
|
cmp r1, #0
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r1, [r4, #0x28]
|
|
cmp r1, #0
|
|
ldreqb r1, [r2, #0xef]
|
|
cmpeq r1, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
ldrb r1, [r4, #0x34]
|
|
cmp r1, #0
|
|
bne _022E252C
|
|
ldrb r1, [r4, #0x23]
|
|
cmp r1, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
_022E252C:
|
|
ldrb r1, [r4, #0x26]
|
|
cmp r1, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
bl HasDropeyeStatus
|
|
mov r2, r0
|
|
mov r0, r4
|
|
add r1, r5, #4
|
|
bl IsPositionActuallyInSight
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_022E2560:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_022E2568:
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_022E2570: .word DUNGEON_PTR
|
|
arm_func_end ShouldMinimapDisplayEntity
|
|
|
|
arm_func_start ShouldDisplayEntity
|
|
ShouldDisplayEntity: ; 0x022E2574
|
|
#ifdef JAPAN
|
|
#define SHOULD_DISPLAY_ENTITY_OFFSET -0xA4
|
|
#else
|
|
#define SHOULD_DISPLAY_ENTITY_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
|
ldrb r5, [r0, #0x20]
|
|
cmp r5, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldr lr, [r0]
|
|
cmp r1, #0
|
|
movne r6, #0x40
|
|
moveq r6, #0x20
|
|
cmp lr, #2
|
|
bne _022E25D8
|
|
ldr r2, _022E2724 ; =DUNGEON_PTR
|
|
ldr r3, _022E2728 ; =0x0001A224
|
|
ldr r4, [r2]
|
|
add r8, r3, #2
|
|
ldrsh ip, [r0, #4]
|
|
mov r7, #0x18
|
|
ldrsh r2, [r0, #6]
|
|
ldrsh r3, [r4, r3]
|
|
smulbb ip, ip, r7
|
|
ldrsh r8, [r4, r8]
|
|
smulbb r7, r2, r7
|
|
sub r2, ip, r3
|
|
sub r7, r7, r8
|
|
b _022E2600
|
|
_022E25D8:
|
|
ldr r3, _022E2724 ; =DUNGEON_PTR
|
|
ldr r2, _022E2728 ; =0x0001A224
|
|
ldr r4, [r3]
|
|
add r3, r2, #2
|
|
ldrsh r2, [r4, r2]
|
|
ldr r8, [r0, #0xc]
|
|
ldrsh r3, [r4, r3]
|
|
ldr r7, [r0, #0x10]
|
|
rsb r2, r2, r8, asr #8
|
|
rsb r7, r3, r7, asr #8
|
|
_022E2600:
|
|
rsb r3, r6, #0
|
|
cmp r2, r3
|
|
cmpge r7, r3
|
|
blt _022E271C
|
|
add r3, r6, #0xff
|
|
cmp r2, r3
|
|
addle r2, r6, #0xc0
|
|
cmple r7, r2
|
|
bgt _022E271C
|
|
add r2, r4, #0x21c + SHOULD_DISPLAY_ENTITY_OFFSET
|
|
cmp lr, #6
|
|
add r6, r2, #0x1a000
|
|
addls pc, pc, lr, lsl #2
|
|
b _022E2714
|
|
_022E2638: ; jump table
|
|
b _022E270C ; case 0
|
|
b _022E267C ; case 1
|
|
b _022E26F0 ; case 2
|
|
b _022E2654 ; case 3
|
|
b _022E2714 ; case 4
|
|
b _022E2714 ; case 5
|
|
b _022E270C ; case 6
|
|
_022E2654:
|
|
ldrb r1, [r6, #0x27]
|
|
cmp r1, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
add r0, r0, #4
|
|
bl ov29_022E2CA0
|
|
cmp r0, #0
|
|
bne _022E2714
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022E267C:
|
|
ldr r3, [r0, #0xb4]
|
|
ldrb r2, [r3, #6]
|
|
cmp r2, #0
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
add r2, r4, #0x1a000
|
|
ldrb r2, [r2, #0x244 + SHOULD_DISPLAY_ENTITY_OFFSET]
|
|
cmp r2, #0
|
|
ldreqb r2, [r3, #0xef]
|
|
cmpeq r2, #1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldrb r2, [r6, #0x26]
|
|
cmp r2, #0
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
cmp r1, #0
|
|
add r0, r0, #4
|
|
beq _022E26DC
|
|
bl ov29_022E2D3C
|
|
cmp r0, #0
|
|
bne _022E2714
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022E26DC:
|
|
bl ov29_022E2CA0
|
|
cmp r0, #0
|
|
bne _022E2714
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022E26F0:
|
|
add r0, r4, #0x1a000
|
|
ldrb r0, [r0, #0x244 + SHOULD_DISPLAY_ENTITY_OFFSET]
|
|
cmp r0, #0
|
|
cmpeq r5, #0
|
|
bne _022E2714
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022E270C:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022E2714:
|
|
mov r0, #1
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
_022E271C:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
.align 2, 0
|
|
_022E2724: .word DUNGEON_PTR
|
|
_022E2728: .word 0x0001A224 + SHOULD_DISPLAY_ENTITY_OFFSET
|
|
arm_func_end ShouldDisplayEntity
|
|
|
|
arm_func_start ShouldDisplayEntityWrapper
|
|
ShouldDisplayEntityWrapper: ; 0x022E272C
|
|
ldr ip, _022E2738 ; =ShouldDisplayEntity
|
|
mov r1, #0
|
|
bx ip
|
|
.align 2, 0
|
|
_022E2738: .word ShouldDisplayEntity
|
|
arm_func_end ShouldDisplayEntityWrapper
|
|
|
|
arm_func_start ov29_022E273C
|
|
ov29_022E273C: ; 0x022E273C
|
|
ldr ip, _022E2748 ; =ShouldDisplayEntity
|
|
mov r1, #1
|
|
bx ip
|
|
.align 2, 0
|
|
_022E2748: .word ShouldDisplayEntity
|
|
arm_func_end ov29_022E273C
|