pmd-sky/asm/overlay_29_0230E5A8.s
2025-09-18 23:59:53 -04:00

254 lines
4.9 KiB
ArmAsm

.include "asm/macros.inc"
.include "overlay_29_0230E5A8.inc"
.text
arm_func_start ov29_0230E5A8
ov29_0230E5A8: ; 0x0230E5A8
stmdb sp!, {r4, lr}
ldr r4, [r1, #0xb4]
mov r1, r2
ldrsh r0, [r4, #2]
mov r2, r3
mov r3, #1
bl ov29_022FD318
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
ldrsh r0, [r4, #2]
bl ov29_022FBC94
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, pc}
bl sub_02056830
cmp r0, #0
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r4, pc}
arm_func_end ov29_0230E5A8
arm_func_start ov29_0230E5FC
ov29_0230E5FC: ; 0x0230E5FC
stmdb sp!, {r4, r5, lr}
sub sp, sp, #0x44
mov r5, r0
mov r4, r1
add r0, sp, #0
mov r1, r5
bl sub_020534BC
mov r1, #0
sub r0, r1, #1
strb r1, [sp, #6]
strb r1, [sp, #7]
cmp r4, r0
bne _0230E640
add r0, sp, #0
bl sub_02055CCC
mov r4, r0
b _0230E64C
_0230E640:
ldrsh r0, [r5, #8]
add r1, sp, #0
bl sub_02055D7C
_0230E64C:
mov r0, r4
add sp, sp, #0x44
ldmia sp!, {r4, r5, pc}
arm_func_end ov29_0230E5FC
arm_func_start ov29_0230E658
ov29_0230E658: ; 0x0230E658
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
bl AllocateTemp1024ByteBufferFromPool
mov r5, r0
mov r0, r4
bl StringFromId
mov r4, r0
bl GetMessageLogPreprocessorArgs
mov r2, r4
str r0, [sp]
mov r0, r5
mov r1, #0x400
mov r3, r1
bl PreprocessString
mov r0, r5
bl ov29_0234BB50
bl GetMessageLogPreprocessorArgs
mov r1, r0
mov r0, r5
mov r2, #1
str r2, [sp]
mov r2, #0
mov r3, r2
bl ov29_0234D6C8
ldmia sp!, {r3, r4, r5, pc}
arm_func_end ov29_0230E658
arm_func_start TrySpawnMonsterAndTickSpawnCounter
TrySpawnMonsterAndTickSpawnCounter: ; 0x0230E6BC
#ifdef JAPAN
#define TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET -0xA4
#else
#define TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET 0
#endif
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #0x10
ldr r0, _0230E8D8 ; =DUNGEON_PTR
mov r6, #0
ldr r7, [r0]
add r0, r7, #0x700
ldrsh r1, [r0, #0x86]
cmp r1, #0
beq _0230E8D0
ldrsh r1, [r0, #0x82]
add r1, r1, #1
strh r1, [r0, #0x82]
ldrb r1, [r7, #0x790]
cmp r1, #0
bne _0230E710
ldr r1, _0230E8DC ; =SPAWN_COOLDOWN
ldrsh r2, [r0, #0x82]
ldrsh r0, [r1]
cmp r2, r0
bge _0230E724
b _0230E8D0
_0230E710:
ldr r1, _0230E8E0 ; =SPAWN_COOLDOWN_THIEF_ALERT
ldrsh r2, [r0, #0x82]
ldrsh r0, [r1]
cmp r2, r0
blt _0230E8D0
_0230E724:
cmp r2, #0x384
ble _0230E76C
add r0, r7, #0x19000
ldr r4, [r0, #0x908 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET]
mov r0, r4
bl EntityIsValid__0230E8F0
cmp r0, #0
beq _0230E76C
add r0, r7, #0x19000
ldrh r1, [r4, #0x26]
ldr r0, [r0, #0x910 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET]
cmp r1, r0
bne _0230E76C
mov r0, #0
mov r1, r4
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r6, r4
_0230E76C:
mov r5, #0
add r0, r7, #0x700
strh r5, [r0, #0x82]
add r0, r7, #0x19000
mov r4, r5
str r5, [r0, #0x908 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET]
_0230E784:
add r0, r7, r4, lsl #2
add r0, r0, #0x12000
ldr r8, [r0, #0xb38 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET]
mov r0, r8
bl EntityIsValid__0230E8F0
cmp r0, #0
beq _0230E7B8
ldrsh r0, [r8, #4]
ldrsh r1, [r8, #6]
bl GetTile
ldrh r0, [r0]
tst r0, #0x100
addeq r5, r5, #1
_0230E7B8:
add r4, r4, #1
cmp r4, #0x10
blt _0230E784
ldrb r0, [r7, #0x790]
cmp r0, #0
bne _0230E80C
ldr r0, _0230E8D8 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x4000
ldrb r0, [r0, #0xc9 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET]
cmp r0, #0xff
bne _0230E7FC
ldr r0, _0230E8E4 ; =SPAWN_CAP_NO_MONSTER_HOUSE
ldrsh r0, [r0]
cmp r5, r0
blt _0230E80C
b _0230E8D0
_0230E7FC:
ldr r0, _0230E8E8 ; =SPAWN_CAP_WITH_MONSTER_HOUSE
ldrsh r0, [r0]
cmp r5, r0
bge _0230E8D0
_0230E80C:
cmp r6, #0
beq _0230E828
ldr r1, _0230E8EC ; =0x00000C5D
mov r0, #0
bl LogMessageByIdWithPopup
mov r0, r6
bl ov29_022E62F0
_0230E828:
ldrb r0, [r7, #0x790]
cmp r0, #0
beq _0230E83C
bl GetKecleonIdToSpawnByFloor
b _0230E844
_0230E83C:
mov r0, #0
bl GetMonsterIdToSpawn
_0230E844:
mov r5, r0
mov r0, r5
bl GetMonsterLevelToSpawn
movs r4, r0
mov r0, r5
mov r1, #0
moveq r4, #1
bl MewSpawnCheck
cmp r0, #0
beq _0230E8D0
add r0, sp, #0xa
mov r1, #0
bl GetRandomTile
cmp r0, #0
beq _0230E8D0
mov r1, #0
mov r0, #0x64
strh r5, [sp]
strh r4, [sp, #8]
strb r1, [sp, #2]
bl DungeonRandInt
ldr r1, _0230E8D8 ; =DUNGEON_PTR
mov r4, r0
ldr r0, [r1]
ldrb r0, [r0, #0x748]
bl GetRandomMovementChance
cmp r4, r0
movlt r0, #1
strlt r0, [sp, #4]
movge r0, #0
strge r0, [sp, #4]
mov r1, #0
add r0, sp, #0
strb r1, [sp, #0xe]
bl SpawnMonster
_0230E8D0:
add sp, sp, #0x10
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_0230E8D8: .word DUNGEON_PTR
_0230E8DC: .word SPAWN_COOLDOWN
_0230E8E0: .word SPAWN_COOLDOWN_THIEF_ALERT
_0230E8E4: .word SPAWN_CAP_NO_MONSTER_HOUSE
_0230E8E8: .word SPAWN_CAP_WITH_MONSTER_HOUSE
#ifdef JAPAN
_0230E8EC: .word 0x0000099C
#else
_0230E8EC: .word 0x00000C5D
#endif
arm_func_end TrySpawnMonsterAndTickSpawnCounter