Added nonmatching for CanLayTrap

This commit is contained in:
AnonymousRandomPerson
2025-07-18 20:04:59 -04:00
parent 647a24dcfc
commit de612ccf8f
9 changed files with 600 additions and 551 deletions

View File

@@ -1,38 +1,23 @@
#pragma once
.public _020AFC4C
.public _020AFC70
.public AdvanceFrame
.public ApplyTrapEffect
.public AreLateGameTrapsEnabled
.public CreateMonsterSummaryFromMonster
.public DrawMinimapTile
.public DUNGEON_PTR
.public DungeonRandInt
.public DungeonRandOutcome__022EAB20
.public EnemyEvolution
.public EntityIsValid__022ECDC0
.public EntityIsValid__022EE348
.public GetMonsterName
.public GetStringFromFileVeneer
.public GetTile
.public GetTileSafe
.public GetTrapInfo
.public InitRender3dElement64
.public IqSkillIsEnabled
.public IsFullFloorFixedRoom
.public ItemIsActive__022EE318
.public LoadWteFromFileDirectory
.public LogMessageByIdWithPopupCheckUser
.public LogMessageByIdWithPopupCheckUserTarget
.public LogMessageByIdWithPopupCheckUserUnknown
.public memset
.public MemZero
.public ov29_022E2CA0
.public ov29_022E56A0
.public ov29_022E58B0
.public ProcessWte
.public SpawnTrap
.public StringFromId
.public _020AFC4C
.public _020AFC70
.public memset
.public ov29_022E7A30
.public ov29_022F9840
.public ov29_0234B034
.public ov29_02352690
.public ov29_02352698
.public ov29_023526A0
@@ -40,15 +25,7 @@
.public ov29_0237C864
.public ov29_0237C974
.public ov29_0237C99C
.public ProcessWte
.public SpawnTrap
.public strcpy
.public StringFromId
.public sub_0201B9F8
.public sub_0201E080
.public sub_0201F2A0
.public sub_02024FC8
.public SubstitutePlaceholderStringTags
.public TRAP_BUSTER_ACTIVATION_CHANCE
.public UpdateShopkeeperModeAfterTrap
.public UpdateTrapsVisibility

View File

@@ -0,0 +1,30 @@
#pragma once
.public ApplyTrapEffect
.public BindTrapToTile
.public DUNGEON_PTR
.public DrawMinimapTile
.public DungeonRandInt
.public DungeonRandOutcome__022EAB20
.public EnemyEvolution
.public EntityIsValid__022EE348
.public GetTile
.public GetTileSafe
.public GetTrapInfo
.public IqSkillIsEnabled
.public IsFullFloorFixedRoom
.public ItemIsActive__022EE318
.public LogMessageByIdWithPopupCheckUser
.public LogMessageByIdWithPopupCheckUserTarget
.public LogMessageByIdWithPopupCheckUserUnknown
.public SpawnTrap
.public SubstitutePlaceholderStringTags
.public TRAP_BUSTER_ACTIVATION_CHANCE
.public UpdateShopkeeperModeAfterTrap
.public UpdateTrapsVisibility
.public ov29_022E2CA0
.public ov29_022E56A0
.public ov29_022E58B0
.public ov29_022E7A30
.public ov29_022F9840
.public ov29_0234B034
.public sub_02024FC8

View File

@@ -1095,6 +1095,8 @@ _022EDC28: .word DUNGEON_PTR
_022EDC2C: .word 0x00012AAA + PREPARE_TRAPPER_TRAP_OFFSET
arm_func_end PrepareTrapperTrap
; https://decomp.me/scratch/EcuBP
#ifndef NONMATCHING
arm_func_start CanLayTrap
CanLayTrap: ; 0x022EDC30
stmdb sp!, {r3, lr}
@@ -1134,519 +1136,4 @@ _022EDCB4:
mov r0, #1
ldmia sp!, {r3, pc}
arm_func_end CanLayTrap
arm_func_start TrySpawnTrap
TrySpawnTrap: ; 0x022EDCBC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r0
mov r7, r1
ldrsh r0, [r8]
ldrsh r1, [r8, #2]
mov r6, r2
mov r5, r3
bl GetTileSafe
mov r4, r0
cmp r7, #0x19
blo _022EDD14
mov sb, #0
b _022EDD04
_022EDCF0:
bl ov29_022E7A30
mov r7, r0
cmp r7, #0x11
bne _022EDD0C
add sb, sb, #1
_022EDD04:
cmp sb, #0x1e
blt _022EDCF0
_022EDD0C:
cmp sb, #0x1e
moveq r7, #0x10
_022EDD14:
ldrh r1, [r4]
tst r1, #0x200
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrb r0, [r4, #7]
cmp r0, #0xff
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
tst r1, #8
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
tst r1, #0x20
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrh r0, [r4]
and r0, r0, #3
cmp r0, #1
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r0, [r4, #0x10]
cmp r0, #0
beq _022EDDA0
ldr r1, [r0]
cmp r1, #2
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl GetTrapInfo
strb r7, [r0]
ldr r0, [r4, #0x10]
bl GetTrapInfo
strb r6, [r0, #1]
ldr r1, [r4, #0x10]
mov r0, #1
strb r5, [r1, #0x20]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_022EDDA0:
mov r0, r7
mov r1, r8
mov r2, r6
mov r3, #0
bl SpawnTrap
movs r1, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r4
mov r2, r5
bl BindTrapToTile
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
arm_func_end TrySpawnTrap
arm_func_start TrySpawnTrapperTrap
TrySpawnTrapperTrap: ; 0x022EDDD4
#ifdef JAPAN
#define TRY_SPAWN_TRAPPER_TRAP_OFFSET -0xA4
#else
#define TRY_SPAWN_TRAPPER_TRAP_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _022EDE6C ; =DUNGEON_PTR
mov r5, r0
ldr r0, [r1]
add r0, r0, #0x12000
ldrb r2, [r0, #0xaa8 + TRY_SPAWN_TRAPPER_TRAP_OFFSET]
cmp r2, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
mov r2, #0
strb r2, [r0, #0xaa8 + TRY_SPAWN_TRAPPER_TRAP_OFFSET]
ldr r3, [r1]
ldr r0, _022EDE70 ; =0x00012AAA
add r2, r3, #0x12000
ldrb r1, [r2, #0xaae + TRY_SPAWN_TRAPPER_TRAP_OFFSET]
ldrb r2, [r2, #0xaaf + TRY_SPAWN_TRAPPER_TRAP_OFFSET]
add r0, r3, r0
mov r3, #1
bl TrySpawnTrap
movs r4, r0
ldr r1, _022EDE70 ; =0x00012AAA
beq _022EDE48
ldr r0, _022EDE6C ; =DUNGEON_PTR
ldr r2, _022EDE74 ; =0x00000E57
ldr r3, [r0]
mov r0, r5
add r1, r3, r1
bl LogMessageByIdWithPopupCheckUserUnknown
b _022EDE60
_022EDE48:
ldr r0, _022EDE6C ; =DUNGEON_PTR
ldr r2, _022EDE78 ; =0x00000E58
ldr r3, [r0]
mov r0, r5
add r1, r3, r1
bl LogMessageByIdWithPopupCheckUserUnknown
_022EDE60:
bl UpdateTrapsVisibility
mov r0, r4
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_022EDE6C: .word DUNGEON_PTR
_022EDE70: .word 0x00012AAA + TRY_SPAWN_TRAPPER_TRAP_OFFSET
#ifdef JAPAN
_022EDE74: .word 0x00000B99
_022EDE78: .word 0x00000B9A
#else
_022EDE74: .word 0x00000E57
_022EDE78: .word 0x00000E58
#endif
arm_func_end TrySpawnTrapperTrap
arm_func_start TryRemoveTrap
TryRemoveTrap: ; 0x022EDE7C
stmdb sp!, {r4, lr}
mov r2, r0
mov r4, r1
ldrsh r0, [r2]
ldrsh r1, [r2, #2]
bl GetTileSafe
ldr r2, [r0, #0x10]
cmp r2, #0
beq _022EDED4
ldr r1, [r2]
cmp r1, #2
bne _022EDECC
mov r1, #0
str r1, [r2]
str r1, [r0, #0x10]
cmp r4, #0
beq _022EDEC4
bl UpdateTrapsVisibility
_022EDEC4:
mov r0, #1
ldmia sp!, {r4, pc}
_022EDECC:
mov r0, #0
ldmia sp!, {r4, pc}
_022EDED4:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end TryRemoveTrap
arm_func_start ov29_022EDEDC
ov29_022EDEDC: ; 0x022EDEDC
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
bl GetTile
ldr r1, [r0, #0x10]
cmp r1, #0
beq _022EDF50
ldr r0, [r1]
cmp r0, #2
bne _022EDF48
ldr r0, _022EDF58 ; =DUNGEON_PTR
ldr r0, [r0]
ldrb r0, [r0, #0x13]
cmp r0, #0
bne _022EDF34
mov r0, #1
strb r0, [r1, #0x20]
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
bl DrawMinimapTile
_022EDF34:
cmp r4, #0
beq _022EDF40
bl UpdateTrapsVisibility
_022EDF40:
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
_022EDF48:
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
_022EDF50:
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_022EDF58: .word DUNGEON_PTR
arm_func_end ov29_022EDEDC
arm_func_start ov29_022EDF5C
ov29_022EDF5C: ; 0x022EDF5C
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
bl sub_02024FC8
bl ov29_0234B034
add r0, r0, r5, lsl #2
str r4, [r0, #0x10]
ldmia sp!, {r3, r4, r5, pc}
arm_func_end ov29_022EDF5C
arm_func_start ov29_022EDF7C
ov29_022EDF7C: ; 0x022EDF7C
stmdb sp!, {r4, r5, r6, lr}
mov r5, r1
mov r6, r0
mov r0, r5
mov r4, r2
bl sub_02024FC8
add r0, r6, r5, lsl #2
str r4, [r0, #0x10]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end ov29_022EDF7C
arm_func_start TryTriggerTrap
TryTriggerTrap: ; 0x022EDFA0
#ifdef JAPAN
#define TRY_TRIGGER_TRAP_OFFSET -4
#else
#define TRY_TRIGGER_TRAP_OFFSET 0
#endif
#ifdef JAPAN
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
#else
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
#endif
sub sp, sp, #0x14 + TRY_TRIGGER_TRAP_OFFSET
mov sb, r1
mov sl, r0
ldrsh r0, [sb]
ldrsh r1, [sb, #2]
mov fp, r2
mov r7, r3
bl GetTileSafe
ldr r4, [r0, #0x10]
str r0, [sp, #0x10 + TRY_TRIGGER_TRAP_OFFSET]
cmp r4, #0
beq _022EE2F4
ldr r0, [r4]
cmp r0, #2
bne _022EE2F4
mov r0, r4
bl GetTrapInfo
mov r6, r0
ldrb r1, [r6]
mov r0, #0
bl ov29_022EDF5C
ldr r0, [sp, #0x10 + TRY_TRIGGER_TRAP_OFFSET]
ldr r5, [r0, #0xc]
cmp r5, #0
ldrne r0, [r5]
cmpne r0, #1
ldrb r0, [r4, #0x20]
movne r5, #0
cmp r5, #0
str r0, [sp, #0xc + TRY_TRIGGER_TRAP_OFFSET]
mov r0, #1
strb r0, [r4, #0x20]
beq _022EE1D8
mov r0, r5
bl ov29_022F9840
cmp r7, #0
ldrneb r0, [r6]
cmpne r0, #0x11
beq _022EE148
cmp r0, #0x17
mov r8, #0
moveq r7, #0x64
beq _022EE05C
mov r0, #0x64
bl DungeonRandInt
mov r7, r0
_022EE05C:
mov r0, r5
mov r1, #0x23
bl ItemIsActive__022EE318
cmp r0, #0
ldrne r8, _022EE2FC ; =0x00000E59
bne _022EE0C8
mov r0, r5
mov r1, #0x26
bl IqSkillIsEnabled
cmp r0, #0
beq _022EE0C8
mov r0, #0x32
bl DungeonRandOutcome__022EAB20
cmp r0, #0
beq _022EE0C8
mov r1, sl
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
bl IsFullFloorFixedRoom
cmp r0, #0
ldrne r8, _022EE300 ; =0x00000E5B
bne _022EE0C8
mov r0, sb
mov r1, #1
bl TryRemoveTrap
ldr r8, _022EE304 ; =0x00000E5A
_022EE0C8:
ldr r0, [sp, #0xc + TRY_TRIGGER_TRAP_OFFSET]
cmp r0, #1
beq _022EE0EC
ldr r0, _022EE308 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x1a000
#ifdef JAPAN
ldrb r0, [r0, #0x1a0]
#else
ldrb r0, [r0, #0x244]
#endif
cmp r0, #0
beq _022EE100
_022EE0EC:
cmp r7, #0
bge _022EE110
cmp r8, #0
ldreq r8, _022EE30C ; =0x00000E5C
b _022EE110
_022EE100:
cmp r7, #0xf
bge _022EE110
cmp r8, #0
ldreq r8, _022EE30C ; =0x00000E5C
_022EE110:
cmp r8, #0
beq _022EE1D8
mov r0, sb
bl ov29_022E2CA0
cmp r0, #0
beq _022EE12C
bl UpdateTrapsVisibility
_022EE12C:
mov r0, sl
mov r1, r5
mov r2, r8
bl LogMessageByIdWithPopupCheckUserTarget
cmp fp, #0
bne _022EE1D8
b _022EE2F4
_022EE148:
mov r0, r5
mov r1, #0x26
mov r7, #0
bl IqSkillIsEnabled
cmp r0, #0
beq _022EE1D8
ldr r0, _022EE310 ; =TRAP_BUSTER_ACTIVATION_CHANCE
ldrsh r0, [r0]
bl DungeonRandOutcome__022EAB20
cmp r0, #0
beq _022EE1A4
mov r1, sl
mov r0, #1
mov r2, r7
bl SubstitutePlaceholderStringTags
bl IsFullFloorFixedRoom
cmp r0, #0
ldrne r7, _022EE300 ; =0x00000E5B
bne _022EE1A4
mov r0, sb
mov r1, #1
bl TryRemoveTrap
ldr r7, _022EE304 ; =0x00000E5A
_022EE1A4:
cmp r7, #0
beq _022EE1D8
mov r0, sb
bl ov29_022E2CA0
cmp r0, #0
beq _022EE1C0
bl UpdateTrapsVisibility
_022EE1C0:
mov r0, sl
mov r1, r5
mov r2, r7
bl LogMessageByIdWithPopupCheckUserTarget
cmp fp, #0
beq _022EE2F4
_022EE1D8:
mov r0, sb
bl ov29_022E2CA0
cmp r0, #0
beq _022EE264
mov r0, #0
mov r1, #0x11c
bl ov29_022E56A0
bl UpdateTrapsVisibility
ldrb r2, [r6]
mov r0, sl
mov r1, sb
bl ov29_022E58B0
mov r0, r4
bl GetTrapInfo
mov r6, r0
mov r0, #0
ldrb r1, [r6]
bl ov29_022EDF5C
ldr r0, _022EE308 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x1a000
#ifdef JAPAN
ldrb r0, [r0, #0x19a]
#else
ldrb r0, [r0, #0x23e]
#endif
cmp r0, #0
beq _022EE248
ldr r1, _022EE314 ; =0x00000E5D
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
b _022EE264
_022EE248:
ldrb r1, [r6]
mov r0, sl
#ifdef JAPAN
add r1, r1, #0x53
add r1, r1, #0x600
#else
add r1, r1, #0x51
add r1, r1, #0xb00
#endif
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
bl LogMessageByIdWithPopupCheckUser
_022EE264:
cmp r5, #0
beq _022EE29C
ldrb r0, [r6, #1]
cmp r0, #2
bne _022EE288
mov r0, r5
mov r1, #1
bl UpdateShopkeeperModeAfterTrap
b _022EE29C
_022EE288:
cmp r0, #1
bne _022EE29C
mov r0, r5
mov r1, #0
bl UpdateShopkeeperModeAfterTrap
_022EE29C:
str sb, [sp]
ldrb r6, [r6]
#ifdef JAPAN
ldr r3, [sp, #0xc]
mov r0, r4
#else
mov r0, r4
ldr r3, [sp, #0x10]
#endif
mov r1, sl
mov r2, r5
str r6, [sp, #4]
#ifndef JAPAN
mov r4, #0
str r4, [sp, #8]
#endif
bl ApplyTrapEffect
mov r4, r0
mov r0, r5
bl EntityIsValid__022EE348
cmp r0, #0
beq _022EE2E0
mov r0, r5
bl EnemyEvolution
_022EE2E0:
cmp r4, #0
beq _022EE2F4
mov r0, sb
mov r1, #1
bl TryRemoveTrap
_022EE2F4:
add sp, sp, #0x14 + TRY_TRIGGER_TRAP_OFFSET
#ifdef JAPAN
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
#else
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
#endif
.align 2, 0
#ifdef JAPAN
#define TRY_TRIGGER_TRAP_DATA_OFFSET -0x2BE
#else
#define TRY_TRIGGER_TRAP_DATA_OFFSET 0
#endif
_022EE2FC: .word 0x00000E59 + TRY_TRIGGER_TRAP_DATA_OFFSET
_022EE300: .word 0x00000E5B + TRY_TRIGGER_TRAP_DATA_OFFSET
_022EE304: .word 0x00000E5A + TRY_TRIGGER_TRAP_DATA_OFFSET
_022EE308: .word DUNGEON_PTR
_022EE30C: .word 0x00000E5C + TRY_TRIGGER_TRAP_DATA_OFFSET
_022EE310: .word TRAP_BUSTER_ACTIVATION_CHANCE
_022EE314: .word 0x00000E5D + TRY_TRIGGER_TRAP_DATA_OFFSET
arm_func_end TryTriggerTrap

520
asm/overlay_29_022EDCBC.s Normal file
View File

@@ -0,0 +1,520 @@
.include "asm/macros.inc"
.include "overlay_29_022EDCBC.inc"
.text
arm_func_start TrySpawnTrap
TrySpawnTrap: ; 0x022EDCBC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r0
mov r7, r1
ldrsh r0, [r8]
ldrsh r1, [r8, #2]
mov r6, r2
mov r5, r3
bl GetTileSafe
mov r4, r0
cmp r7, #0x19
blo _022EDD14
mov sb, #0
b _022EDD04
_022EDCF0:
bl ov29_022E7A30
mov r7, r0
cmp r7, #0x11
bne _022EDD0C
add sb, sb, #1
_022EDD04:
cmp sb, #0x1e
blt _022EDCF0
_022EDD0C:
cmp sb, #0x1e
moveq r7, #0x10
_022EDD14:
ldrh r1, [r4]
tst r1, #0x200
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrb r0, [r4, #7]
cmp r0, #0xff
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
tst r1, #8
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
tst r1, #0x20
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldrh r0, [r4]
and r0, r0, #3
cmp r0, #1
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r0, [r4, #0x10]
cmp r0, #0
beq _022EDDA0
ldr r1, [r0]
cmp r1, #2
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
bl GetTrapInfo
strb r7, [r0]
ldr r0, [r4, #0x10]
bl GetTrapInfo
strb r6, [r0, #1]
ldr r1, [r4, #0x10]
mov r0, #1
strb r5, [r1, #0x20]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
_022EDDA0:
mov r0, r7
mov r1, r8
mov r2, r6
mov r3, #0
bl SpawnTrap
movs r1, r0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
mov r0, r4
mov r2, r5
bl BindTrapToTile
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
arm_func_end TrySpawnTrap
arm_func_start TrySpawnTrapperTrap
TrySpawnTrapperTrap: ; 0x022EDDD4
#ifdef JAPAN
#define TRY_SPAWN_TRAPPER_TRAP_OFFSET -0xA4
#else
#define TRY_SPAWN_TRAPPER_TRAP_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _022EDE6C ; =DUNGEON_PTR
mov r5, r0
ldr r0, [r1]
add r0, r0, #0x12000
ldrb r2, [r0, #0xaa8 + TRY_SPAWN_TRAPPER_TRAP_OFFSET]
cmp r2, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
mov r2, #0
strb r2, [r0, #0xaa8 + TRY_SPAWN_TRAPPER_TRAP_OFFSET]
ldr r3, [r1]
ldr r0, _022EDE70 ; =0x00012AAA
add r2, r3, #0x12000
ldrb r1, [r2, #0xaae + TRY_SPAWN_TRAPPER_TRAP_OFFSET]
ldrb r2, [r2, #0xaaf + TRY_SPAWN_TRAPPER_TRAP_OFFSET]
add r0, r3, r0
mov r3, #1
bl TrySpawnTrap
movs r4, r0
ldr r1, _022EDE70 ; =0x00012AAA
beq _022EDE48
ldr r0, _022EDE6C ; =DUNGEON_PTR
ldr r2, _022EDE74 ; =0x00000E57
ldr r3, [r0]
mov r0, r5
add r1, r3, r1
bl LogMessageByIdWithPopupCheckUserUnknown
b _022EDE60
_022EDE48:
ldr r0, _022EDE6C ; =DUNGEON_PTR
ldr r2, _022EDE78 ; =0x00000E58
ldr r3, [r0]
mov r0, r5
add r1, r3, r1
bl LogMessageByIdWithPopupCheckUserUnknown
_022EDE60:
bl UpdateTrapsVisibility
mov r0, r4
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_022EDE6C: .word DUNGEON_PTR
_022EDE70: .word 0x00012AAA + TRY_SPAWN_TRAPPER_TRAP_OFFSET
#ifdef JAPAN
_022EDE74: .word 0x00000B99
_022EDE78: .word 0x00000B9A
#else
_022EDE74: .word 0x00000E57
_022EDE78: .word 0x00000E58
#endif
arm_func_end TrySpawnTrapperTrap
arm_func_start TryRemoveTrap
TryRemoveTrap: ; 0x022EDE7C
stmdb sp!, {r4, lr}
mov r2, r0
mov r4, r1
ldrsh r0, [r2]
ldrsh r1, [r2, #2]
bl GetTileSafe
ldr r2, [r0, #0x10]
cmp r2, #0
beq _022EDED4
ldr r1, [r2]
cmp r1, #2
bne _022EDECC
mov r1, #0
str r1, [r2]
str r1, [r0, #0x10]
cmp r4, #0
beq _022EDEC4
bl UpdateTrapsVisibility
_022EDEC4:
mov r0, #1
ldmia sp!, {r4, pc}
_022EDECC:
mov r0, #0
ldmia sp!, {r4, pc}
_022EDED4:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end TryRemoveTrap
arm_func_start ov29_022EDEDC
ov29_022EDEDC: ; 0x022EDEDC
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
bl GetTile
ldr r1, [r0, #0x10]
cmp r1, #0
beq _022EDF50
ldr r0, [r1]
cmp r0, #2
bne _022EDF48
ldr r0, _022EDF58 ; =DUNGEON_PTR
ldr r0, [r0]
ldrb r0, [r0, #0x13]
cmp r0, #0
bne _022EDF34
mov r0, #1
strb r0, [r1, #0x20]
ldrsh r0, [r5]
ldrsh r1, [r5, #2]
bl DrawMinimapTile
_022EDF34:
cmp r4, #0
beq _022EDF40
bl UpdateTrapsVisibility
_022EDF40:
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
_022EDF48:
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
_022EDF50:
mov r0, #0
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_022EDF58: .word DUNGEON_PTR
arm_func_end ov29_022EDEDC
arm_func_start ov29_022EDF5C
ov29_022EDF5C: ; 0x022EDF5C
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
bl sub_02024FC8
bl ov29_0234B034
add r0, r0, r5, lsl #2
str r4, [r0, #0x10]
ldmia sp!, {r3, r4, r5, pc}
arm_func_end ov29_022EDF5C
arm_func_start ov29_022EDF7C
ov29_022EDF7C: ; 0x022EDF7C
stmdb sp!, {r4, r5, r6, lr}
mov r5, r1
mov r6, r0
mov r0, r5
mov r4, r2
bl sub_02024FC8
add r0, r6, r5, lsl #2
str r4, [r0, #0x10]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end ov29_022EDF7C
arm_func_start TryTriggerTrap
TryTriggerTrap: ; 0x022EDFA0
#ifdef JAPAN
#define TRY_TRIGGER_TRAP_OFFSET -4
#else
#define TRY_TRIGGER_TRAP_OFFSET 0
#endif
#ifdef JAPAN
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
#else
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
#endif
sub sp, sp, #0x14 + TRY_TRIGGER_TRAP_OFFSET
mov sb, r1
mov sl, r0
ldrsh r0, [sb]
ldrsh r1, [sb, #2]
mov fp, r2
mov r7, r3
bl GetTileSafe
ldr r4, [r0, #0x10]
str r0, [sp, #0x10 + TRY_TRIGGER_TRAP_OFFSET]
cmp r4, #0
beq _022EE2F4
ldr r0, [r4]
cmp r0, #2
bne _022EE2F4
mov r0, r4
bl GetTrapInfo
mov r6, r0
ldrb r1, [r6]
mov r0, #0
bl ov29_022EDF5C
ldr r0, [sp, #0x10 + TRY_TRIGGER_TRAP_OFFSET]
ldr r5, [r0, #0xc]
cmp r5, #0
ldrne r0, [r5]
cmpne r0, #1
ldrb r0, [r4, #0x20]
movne r5, #0
cmp r5, #0
str r0, [sp, #0xc + TRY_TRIGGER_TRAP_OFFSET]
mov r0, #1
strb r0, [r4, #0x20]
beq _022EE1D8
mov r0, r5
bl ov29_022F9840
cmp r7, #0
ldrneb r0, [r6]
cmpne r0, #0x11
beq _022EE148
cmp r0, #0x17
mov r8, #0
moveq r7, #0x64
beq _022EE05C
mov r0, #0x64
bl DungeonRandInt
mov r7, r0
_022EE05C:
mov r0, r5
mov r1, #0x23
bl ItemIsActive__022EE318
cmp r0, #0
ldrne r8, _022EE2FC ; =0x00000E59
bne _022EE0C8
mov r0, r5
mov r1, #0x26
bl IqSkillIsEnabled
cmp r0, #0
beq _022EE0C8
mov r0, #0x32
bl DungeonRandOutcome__022EAB20
cmp r0, #0
beq _022EE0C8
mov r1, sl
mov r0, #1
mov r2, #0
bl SubstitutePlaceholderStringTags
bl IsFullFloorFixedRoom
cmp r0, #0
ldrne r8, _022EE300 ; =0x00000E5B
bne _022EE0C8
mov r0, sb
mov r1, #1
bl TryRemoveTrap
ldr r8, _022EE304 ; =0x00000E5A
_022EE0C8:
ldr r0, [sp, #0xc + TRY_TRIGGER_TRAP_OFFSET]
cmp r0, #1
beq _022EE0EC
ldr r0, _022EE308 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x1a000
#ifdef JAPAN
ldrb r0, [r0, #0x1a0]
#else
ldrb r0, [r0, #0x244]
#endif
cmp r0, #0
beq _022EE100
_022EE0EC:
cmp r7, #0
bge _022EE110
cmp r8, #0
ldreq r8, _022EE30C ; =0x00000E5C
b _022EE110
_022EE100:
cmp r7, #0xf
bge _022EE110
cmp r8, #0
ldreq r8, _022EE30C ; =0x00000E5C
_022EE110:
cmp r8, #0
beq _022EE1D8
mov r0, sb
bl ov29_022E2CA0
cmp r0, #0
beq _022EE12C
bl UpdateTrapsVisibility
_022EE12C:
mov r0, sl
mov r1, r5
mov r2, r8
bl LogMessageByIdWithPopupCheckUserTarget
cmp fp, #0
bne _022EE1D8
b _022EE2F4
_022EE148:
mov r0, r5
mov r1, #0x26
mov r7, #0
bl IqSkillIsEnabled
cmp r0, #0
beq _022EE1D8
ldr r0, _022EE310 ; =TRAP_BUSTER_ACTIVATION_CHANCE
ldrsh r0, [r0]
bl DungeonRandOutcome__022EAB20
cmp r0, #0
beq _022EE1A4
mov r1, sl
mov r0, #1
mov r2, r7
bl SubstitutePlaceholderStringTags
bl IsFullFloorFixedRoom
cmp r0, #0
ldrne r7, _022EE300 ; =0x00000E5B
bne _022EE1A4
mov r0, sb
mov r1, #1
bl TryRemoveTrap
ldr r7, _022EE304 ; =0x00000E5A
_022EE1A4:
cmp r7, #0
beq _022EE1D8
mov r0, sb
bl ov29_022E2CA0
cmp r0, #0
beq _022EE1C0
bl UpdateTrapsVisibility
_022EE1C0:
mov r0, sl
mov r1, r5
mov r2, r7
bl LogMessageByIdWithPopupCheckUserTarget
cmp fp, #0
beq _022EE2F4
_022EE1D8:
mov r0, sb
bl ov29_022E2CA0
cmp r0, #0
beq _022EE264
mov r0, #0
mov r1, #0x11c
bl ov29_022E56A0
bl UpdateTrapsVisibility
ldrb r2, [r6]
mov r0, sl
mov r1, sb
bl ov29_022E58B0
mov r0, r4
bl GetTrapInfo
mov r6, r0
mov r0, #0
ldrb r1, [r6]
bl ov29_022EDF5C
ldr r0, _022EE308 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x1a000
#ifdef JAPAN
ldrb r0, [r0, #0x19a]
#else
ldrb r0, [r0, #0x23e]
#endif
cmp r0, #0
beq _022EE248
ldr r1, _022EE314 ; =0x00000E5D
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
b _022EE264
_022EE248:
ldrb r1, [r6]
mov r0, sl
#ifdef JAPAN
add r1, r1, #0x53
add r1, r1, #0x600
#else
add r1, r1, #0x51
add r1, r1, #0xb00
#endif
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
bl LogMessageByIdWithPopupCheckUser
_022EE264:
cmp r5, #0
beq _022EE29C
ldrb r0, [r6, #1]
cmp r0, #2
bne _022EE288
mov r0, r5
mov r1, #1
bl UpdateShopkeeperModeAfterTrap
b _022EE29C
_022EE288:
cmp r0, #1
bne _022EE29C
mov r0, r5
mov r1, #0
bl UpdateShopkeeperModeAfterTrap
_022EE29C:
str sb, [sp]
ldrb r6, [r6]
#ifdef JAPAN
ldr r3, [sp, #0xc]
mov r0, r4
#else
mov r0, r4
ldr r3, [sp, #0x10]
#endif
mov r1, sl
mov r2, r5
str r6, [sp, #4]
#ifndef JAPAN
mov r4, #0
str r4, [sp, #8]
#endif
bl ApplyTrapEffect
mov r4, r0
mov r0, r5
bl EntityIsValid__022EE348
cmp r0, #0
beq _022EE2E0
mov r0, r5
bl EnemyEvolution
_022EE2E0:
cmp r4, #0
beq _022EE2F4
mov r0, sb
mov r1, #1
bl TryRemoveTrap
_022EE2F4:
add sp, sp, #0x14 + TRY_TRIGGER_TRAP_OFFSET
#ifdef JAPAN
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
#else
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
#endif
.align 2, 0
#ifdef JAPAN
#define TRY_TRIGGER_TRAP_DATA_OFFSET -0x2BE
#else
#define TRY_TRIGGER_TRAP_DATA_OFFSET 0
#endif
_022EE2FC: .word 0x00000E59 + TRY_TRIGGER_TRAP_DATA_OFFSET
_022EE300: .word 0x00000E5B + TRY_TRIGGER_TRAP_DATA_OFFSET
_022EE304: .word 0x00000E5A + TRY_TRIGGER_TRAP_DATA_OFFSET
_022EE308: .word DUNGEON_PTR
_022EE30C: .word 0x00000E5C + TRY_TRIGGER_TRAP_DATA_OFFSET
_022EE310: .word TRAP_BUSTER_ACTIVATION_CHANCE
_022EE314: .word 0x00000E5D + TRY_TRIGGER_TRAP_DATA_OFFSET
arm_func_end TryTriggerTrap

View File

@@ -1,6 +0,0 @@
#ifndef PMDSKY_MAP_H
#define PMDSKY_MAP_H
#define CORRIDOR_ROOM 0xFF
#endif //PMDSKY_MAP_H

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_022EDC30_H
#define PMDSKY_OVERLAY_29_022EDC30_H
#include "dungeon_mode.h"
// Checks if a trap can be placed on the tile.
bool8 CanLayTrap(struct position *pos);
#endif //PMDSKY_OVERLAY_29_022EDC30_H

View File

@@ -314,6 +314,8 @@ Overlay OVY_29
Object asm/overlay_29_022EC62C.o
Object src/overlay_29_022ECDC0.o
Object asm/overlay_29_022ECDE4.o
Object src/overlay_29_022EDC30.o
Object asm/overlay_29_022EDCBC.o
Object src/overlay_29_022EE348.o
Object asm/overlay_29_022EE36C.o
Object src/overlay_29_022EF7A0.o

View File

@@ -3,7 +3,6 @@
#include "dungeon.h"
#include "dungeon_map_access.h"
#include "main_0208655C.h"
#include "map.h"
extern struct dungeon *DUNGEON_PTR[];

31
src/overlay_29_022EDC30.c Normal file
View File

@@ -0,0 +1,31 @@
#include "overlay_29_022EDC30.h"
#include "dungeon.h"
extern struct tile* GetTileSafe(s16 x, s16 y);
// https://decomp.me/scratch/EcuBP
#ifdef NONMATCHING
bool8 CanLayTrap(struct position *pos)
{
struct tile *tile = GetTileSafe(pos->x, pos->y);
if (tile->terrain_flags & TERRAIN_TYPE_STAIRS)
return FALSE;
if (tile->room == CORRIDOR_ROOM)
return FALSE;
if (tile->terrain_flags & TERRAIN_TYPE_NATURAL_JUNCTION)
return FALSE;
if (tile->terrain_flags & TERRAIN_TYPE_SHOP)
return FALSE;
if ((tile->terrain_flags & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_NORMAL)
return FALSE;
if (tile->object != NULL)
return tile->object->type == ENTITY_TRAP;
return TRUE;
}
#endif