pmd-sky/asm/overlay_29_0231EA04.s
2025-11-14 00:01:31 -05:00

303 lines
5.5 KiB
ArmAsm

.include "asm/macros.inc"
.include "overlay_29_0231EA04.inc"
.text
arm_func_start InitMoveWrapper
InitMoveWrapper: ; 0x0231EA04
ldr ip, _0231EA14 ; =InitMove
mov r0, r1
mov r1, r2
bx ip
.align 2, 0
_0231EA14: .word InitMove
arm_func_end InitMoveWrapper
arm_func_start MoveIsNotPhysical
MoveIsNotPhysical: ; 0x0231EA18
stmdb sp!, {r3, lr}
bl GetMoveCategory
cmp r0, #0
moveq r0, #0
movne r0, #1
ldmia sp!, {r3, pc}
arm_func_end MoveIsNotPhysical
arm_func_start CategoryIsNotPhysical
CategoryIsNotPhysical: ; 0x0231EA30
cmp r0, #0
moveq r0, #0
movne r0, #1
bx lr
arm_func_end CategoryIsNotPhysical
arm_func_start MakeFloorOneRoom
MakeFloorOneRoom: ; 0x0231EA40
#ifdef JAPAN
#define OV29_0231EA40_OFFSET -0xA4
#else
#define OV29_0231EA40_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, r0
bl IsFullFloorFixedRoom
cmp r0, #0
bne _0231EA80
ldr r0, _0231EDC8 ; =DUNGEON_PTR
ldr r0, [r0]
add r1, r0, #0x4000
ldrsh r0, [r1, #0xd4 + OV29_0231EA40_OFFSET]
sub r2, r0, #0x1a
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #1
bhi _0231EA90
_0231EA80:
ldr r1, _0231EDCC ; =0x00000E01
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_0231EA90:
ldrb r2, [r1, #0xc4 + OV29_0231EA40_OFFSET]
cmp r2, #0
beq _0231EAAC
ldr r1, _0231EDD0 ; =0x00000DFF
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_0231EAAC:
ldrb r1, [r1, #0xc7 + OV29_0231EA40_OFFSET]
cmp r1, #0
beq _0231EAC8
mov r0, sl
#ifdef JAPAN
mov r1, #0xb40
#else
mov r1, #0xe00
#endif
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_0231EAC8:
bl FloorSecondaryTerrainIsChasm
cmp r0, #0
movne r7, #3
moveq r7, #2
mov r6, #0
mov sb, #1
_0231EAE0:
ldr fp, _0231EDC8 ; =DUNGEON_PTR
mov r5, #1
mov r4, #0
_0231EAEC:
mov r0, sb
mov r1, r5
mov r8, #0
bl GetTileSafe
ldrh r1, [r0]
bic r1, r1, #0x400
strh r1, [r0]
strb r4, [r0, #7]
ldrh r1, [r0]
tst r1, #0x10
bne _0231EBCC
tst r1, #0x100
bne _0231EBCC
ldrh r1, [r0, #2]
orr r1, r1, #3
strh r1, [r0, #2]
ldrh r1, [r0]
bic r1, r1, #8
strh r1, [r0]
ldrh r1, [r0]
tst r1, #0x40
ldrh r1, [r0]
movne r6, #1
and r2, r1, #3
cmp r2, #2
cmpne r2, #3
beq _0231EBCC
cmp sb, #1
cmpne r5, #1
cmpne sb, #0x36
cmpne r5, #0x1e
bne _0231EB84
ldr r1, [r0, #0x10]
cmp r1, #0
ldreq r1, [fp]
ldreqb r1, [r1, #0x78f]
cmpeq r1, #0
moveq r8, #1
_0231EB84:
cmp r8, #0
beq _0231EBA8
ldrh r1, [r0]
bic r1, r1, #3
strh r1, [r0]
ldrh r1, [r0]
orr r1, r1, r7
strh r1, [r0]
b _0231EBCC
_0231EBA8:
cmp r2, #1
beq _0231EBCC
ldrh r1, [r0]
bic r1, r1, #3
strh r1, [r0]
ldrh r1, [r0]
orr r1, r1, #1
orr r1, r1, #0x400
strh r1, [r0]
_0231EBCC:
add r5, r5, #1
cmp r5, #0x1f
blt _0231EAEC
add sb, sb, #1
cmp sb, #0x37
blt _0231EAE0
ldr r0, _0231EDC8 ; =DUNGEON_PTR
mov r2, #1
ldr r0, [r0]
add r1, r0, #0xcc00
ldrsh r0, [r1, #0xe4 + OV29_0231EA40_OFFSET]
ldrsh r1, [r1, #0xe6 + OV29_0231EA40_OFFSET]
bl StairsAlwaysReachable
cmp r0, #0
beq _0231EC64
mov r5, #0
mov r4, r5
_0231EC10:
mov r8, r4
_0231EC14:
mov r0, r5
mov r1, r8
bl GetTileSafe
ldrh r1, [r0]
tst r1, #0x100
bne _0231EC4C
tst r1, #0x400
beq _0231EC4C
tst r1, #0x8000
bicne r1, r1, #3
strneh r1, [r0]
ldrneh r1, [r0]
orrne r1, r1, r7
strneh r1, [r0]
_0231EC4C:
add r8, r8, #1
cmp r8, #0x20
blt _0231EC14
add r5, r5, #1
cmp r5, #0x38
blt _0231EC10
_0231EC64:
cmp r6, #0
ldrne r0, _0231EDC8 ; =DUNGEON_PTR
mov r5, #0
ldrne r0, [r0]
movne r1, #0
addne r0, r0, #0x4000
strneb r1, [r0, #0xc9 + OV29_0231EA40_OFFSET]
mov r4, r5
_0231EC84:
mov r7, r4
_0231EC88:
cmp r6, #0
beq _0231ECA8
mov r0, r5
mov r1, r7
bl GetTileSafe
ldrh r1, [r0]
orr r1, r1, #0x40
strh r1, [r0]
_0231ECA8:
mov r0, r5
mov r1, r7
bl DetermineTileWalkableNeighbors
add r7, r7, #1
cmp r7, #0x20
blt _0231EC88
add r5, r5, #1
cmp r5, #0x38
blt _0231EC84
ldr r4, _0231EDC8 ; =DUNGEON_PTR
mov r5, #0
_0231ECD4:
ldr r0, [r4]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
ldr r6, [r0, #0xb78 + OV29_0231EA40_OFFSET]
mov r0, r6
bl EntityIsValid__0231EDD8
cmp r0, #0
beq _0231ED08
ldrsh r0, [r6, #4]
ldrsh r1, [r6, #6]
bl GetTile
ldrb r0, [r0, #7]
strb r0, [r6, #0x25]
_0231ED08:
add r5, r5, #1
cmp r5, #0x14
blt _0231ECD4
bl ov29_0233FB1C
bl ov29_0233785C
bl ov29_0233665C
bl DetermineAllMonsterShadow
bl UpdateMinimap
bl UpdateTrapsVisibility
ldr r1, _0231EDD4 ; =0x00000DFE
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
mov r0, #0x28
mov r1, #0x2b
bl ov29_022EA370
mov r0, sl
mov r1, #1
bl ov29_02305814
ldr r4, _0231EDC8 ; =DUNGEON_PTR
mov r6, #0
_0231ED58:
ldr r0, [r4]
add r0, r0, r6, lsl #2
add r0, r0, #0x12000
ldr r5, [r0, #0xb78 + OV29_0231EA40_OFFSET]
mov r0, r5
bl EntityIsValid__0231EDD8
cmp r0, #0
beq _0231ED98
mov r0, r5
bl ov29_022F9C74
mov r0, r5
bl EntityIsValid__0231EDD8
cmp r0, #0
beq _0231ED98
mov r0, r5
bl EnsureCanStandCurrentTile
_0231ED98:
add r6, r6, #1
cmp r6, #0x14
blt _0231ED58
ldr r0, _0231EDC8 ; =DUNGEON_PTR
mov r3, #1
ldr r1, [r0]
mov r0, #0x14
add r2, r1, #0x4000
mov r1, #0x2b
strb r3, [r2, #0xc4 + OV29_0231EA40_OFFSET]
bl ov29_022EA370
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_0231EDC8: .word DUNGEON_PTR
#ifdef JAPAN
_0231EDCC: .word 0x00000B41
_0231EDD0: .word 0x00000B3F
_0231EDD4: .word 0x00000B3E
#else
_0231EDCC: .word 0x00000E01
_0231EDD0: .word 0x00000DFF
_0231EDD4: .word 0x00000DFE
#endif
arm_func_end MakeFloorOneRoom