mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
303 lines
5.5 KiB
ArmAsm
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
|