Decomped ShouldMonsterHeadToStairs

This commit is contained in:
AnonymousRandomPerson
2025-10-22 21:19:20 -04:00
parent 3214a390d4
commit e055041d01
7 changed files with 729 additions and 754 deletions

View File

@@ -4,80 +4,44 @@
.public AiMovement
.public AnimationDelayOrSomething
.public BELLY_DRAIN_IN_WALLS_INT
.public CanMonsterSpawn
.public CeilFixedPoint
.public ChangeMonsterAnimation
.public CheckTeamMemberIdx
.public CheckVariousStatuses2__02301244
.public CheckVariousStatuses__023016DC
.public Conversion2IsActive
.public DefenderAbilityIsActive__022F96CC
.public DIRECTIONS_XY
.public DiscoverMinimap
.public DUNGEON_PTR
.public DiscoverMinimap
.public DungeonRandInt
.public EnableIqSkill
.public EndBurnClassStatus
.public EndCringeClassStatus
.public EndFrozenClassStatus
.public EndReflectClassStatus
.public EndSleepClassStatus
.public EntityIsValid__022F7364
.public ExclusiveItemEffectIsActive__022FAC98
.public GetActiveTeamMember
.public GetChebyshevDistance
.public GetConversion2ConvertToType
.public GetDirectionTowardsPosition
.public GetExclusiveItemWithEffectFromBag
.public GetIdleAnimationId
.public GetLearnableIqSkills
.public GetMaxPp
.public GetMaxPpWrapper
.public GetMessageLogPreprocessorArgs
.public GetMobilityType
.public GetMonsterEvoStatus
.public GetMoveTypeForMonster
.public GetStairsRoom
.public GetTile
.public GetTileAtEntity
.public GetTileSafe
.public HasHeldItem
.public IqSkillIsEnabled
.public IsFullFloorFixedRoom
.public IsMonsterIdInNormalRange
.public IsMonsterSleeping
.public LogMessageByIdWithPopup
.public LogMessageByIdWithPopupCheckUser
.public LogMessageByIdWithPopupCheckUserTarget
.public ov29_022E0A04
.public ov29_022E4160
.public ov29_022E68BC
.public ov29_022E68D8
.public ov29_022E8104
.public ov29_022E81F8
.public ov29_022EA370
.public ov29_022EF938
.public ov29_022F87C0
.public ov29_023018AC
.public ov29_023021F0
.public ov29_02304A48
.public ov29_02307CE0
.public ov29_02307DD0
.public PointCameraToMonster
.public PrepareItemForPrinting__02345728
.public RestoreAllMovePP
.public SECONDARY_TERRAIN_TYPES
.public SetActionPassTurnOrWalk
.public SetPreprocessorArgsIdVal
.public SetPreprocessorArgsStringToName
.public ShouldDisplayEntityWrapper
.public ShowPpRestoreEffect
.public sub_0201405C
.public sub_02017C50
.public sub_0204AEF0
.public sub_02050FF8
.public sub_02052E2C
.public sub_02056228
.public SubFixedPoint
.public SubstitutePlaceholderStringTags
.public TryInflictBurnStatus
@@ -85,3 +49,17 @@
.public UpdateCamera
.public UpdateMinimap
.public UpdateStatusIconFlags
.public ov29_022E4160
.public ov29_022E81F8
.public ov29_022EA370
.public ov29_022EF938
.public ov29_022F87C0
.public ov29_023021F0
.public ov29_02304A48
.public ov29_02307CE0
.public ov29_02307DD0
.public sub_02017C50
.public sub_0204AEF0
.public sub_02050FF8
.public sub_02052E2C
.public sub_02056228

View File

@@ -0,0 +1,35 @@
#pragma once
.public AbilityIsActiveVeneer
.public CanMonsterSpawn
.public CheckTeamMemberIdx
.public DUNGEON_PTR
.public DefenderAbilityIsActive__022F96CC
.public DungeonRandInt
.public EndBurnClassStatus
.public EndCringeClassStatus
.public EndFrozenClassStatus
.public EndReflectClassStatus
.public EndSleepClassStatus
.public EntityIsValid__022F7364
.public ExclusiveItemEffectIsActive__022FAC98
.public GetActiveTeamMember
.public GetExclusiveItemWithEffectFromBag
.public GetMaxPp
.public GetMaxPpWrapper
.public IqSkillIsEnabled
.public IsMonsterIdInNormalRange
.public IsMonsterSleeping
.public LogMessageByIdWithPopupCheckUser
.public PrepareItemForPrinting__02345728
.public RestoreAllMovePP
.public SetPreprocessorArgsIdVal
.public ShowPpRestoreEffect
.public SubstitutePlaceholderStringTags
.public ov29_022E0A04
.public ov29_022E68BC
.public ov29_022E68D8
.public ov29_022E8104
.public ov29_022E81F8
.public ov29_022EA370
.public ov29_02304A48
.public sub_0201405C

View File

@@ -1085,720 +1085,3 @@ ov29_022FA418: ; 0x022FA418
bl ov29_022EF938
ldmia sp!, {r3, pc}
arm_func_end ov29_022FA418
arm_func_start ShouldMonsterHeadToStairs
ShouldMonsterHeadToStairs: ; 0x022FA430
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
mov sl, r0
bl GetStairsRoom
mov r5, r0
ldrsh r0, [sl, #4]
ldrsh r1, [sl, #6]
bl GetTile
ldrb r0, [r0, #7]
cmp r5, r0
bne _022FA514
ldr r1, _022FA51C ; =DUNGEON_PTR
add r0, sl, #4
ldr r1, [r1]
#ifdef JAPAN
add r1, r1, #0xc40
add r1, r1, #0xc000
#else
add r1, r1, #0xe4
add r1, r1, #0xcc00
#endif
bl GetChebyshevDistance
ldr r7, _022FA520 ; =0x00002710
ldr r4, _022FA51C ; =DUNGEON_PTR
mov r6, r0
mov r8, #0
_022FA480:
ldr r0, [r4]
add r0, r0, r8, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr sb, [r0, #0xad4]
#else
ldr sb, [r0, #0xb78]
#endif
mov r0, sb
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FA4E8
mov r0, sl
mov r1, sb
bl ov29_023018AC
cmp r0, #1
bne _022FA4E8
ldrsh r0, [sb, #4]
ldrsh r1, [sb, #6]
bl GetTile
ldrb r0, [r0, #7]
cmp r5, r0
bne _022FA4E8
ldr r1, [r4]
add r0, sb, #4
#ifdef JAPAN
add r1, r1, #0xc40
add r1, r1, #0xc000
#else
add r1, r1, #0xe4
add r1, r1, #0xcc00
#endif
bl GetChebyshevDistance
cmp r0, r7
movlt r7, r0
_022FA4E8:
add r8, r8, #1
cmp r8, #0x14
blt _022FA480
ldr r0, _022FA520 ; =0x00002710
cmp r7, r0
beq _022FA50C
beq _022FA514
cmp r7, r6
ble _022FA514
_022FA50C:
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
_022FA514:
mov r0, #0
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_022FA51C: .word DUNGEON_PTR
_022FA520: .word 0x00002710
arm_func_end ShouldMonsterHeadToStairs
arm_func_start ov29_022FA524
ov29_022FA524: ; 0x022FA524
stmdb sp!, {r4, r5, r6, lr}
ldr r4, _022FA570 ; =DUNGEON_PTR
mov r5, #0
_022FA530:
ldr r0, [r4]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r6, [r0, #0xad4]
#else
ldr r6, [r0, #0xb78]
#endif
mov r0, r6
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FA560
ldr r1, [r6, #0xb4]
mov r0, r6
ldrb r1, [r1, #0x4c]
bl ov29_02304A48
_022FA560:
add r5, r5, #1
cmp r5, #0x14
blt _022FA530
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_022FA570: .word DUNGEON_PTR
arm_func_end ov29_022FA524
arm_func_start ov29_022FA574
ov29_022FA574: ; 0x022FA574
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
bl EntityIsValid__022F7364
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldr r0, [r5, #0xb4]
mov r1, r4
#ifdef JAPAN
add r0, r0, #0x120
#else
add r0, r0, #0x124
#endif
bl sub_0201405C
cmp r0, #0
bne _022FA5B4
ldr r1, _022FA5E4 ; =0x00000C1D
mov r0, r5
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, pc}
_022FA5B4:
cmp r0, #1
bne _022FA5CC
ldr r1, _022FA5E8 ; =0x00000C1E
mov r0, r5
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, pc}
_022FA5CC:
cmp r0, #2
ldmneia sp!, {r3, r4, r5, pc}
ldr r1, _022FA5EC ; =0x00000C1F
mov r0, r5
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
#ifdef JAPAN
_022FA5E4: .word 0x0000095C
_022FA5E8: .word 0x0000095D
_022FA5EC: .word 0x0000095E
#else
_022FA5E4: .word 0x00000C1D
_022FA5E8: .word 0x00000C1E
_022FA5EC: .word 0x00000C1F
#endif
arm_func_end ov29_022FA574
arm_func_start MewSpawnCheck
MewSpawnCheck: ; 0x022FA5F0
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
bl CanMonsterSpawn
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
cmp r5, #0x97
bne _022FA63C
ldr r0, _022FA644 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x3000
#ifdef JAPAN
ldrb r0, [r0, #0xd95]
#else
ldrb r0, [r0, #0xe39]
#endif
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, pc}
cmp r4, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
_022FA63C:
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_022FA644: .word DUNGEON_PTR
arm_func_end MewSpawnCheck
arm_func_start ov29_022FA648
ov29_022FA648: ; 0x022FA648
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov r7, #0
mov r6, #1
mov fp, r6
mov r5, r7
_022FA65C:
ldr r0, _022FA74C ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, r7, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r8, [r0, #0xa84]
#else
ldr r8, [r0, #0xb28]
#endif
mov r0, r8
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FA730
ldr sl, [r8, #0xb4]
ldrb r1, [sl, #7]
ldrsh r0, [sl, #0xc]
cmp r1, #0
beq _022FA6C4
#ifdef JAPAN
strb r6, [sl, #0x161]
#else
strb r6, [sl, #0x165]
#endif
bl ov29_022E8104
bl ov29_022E81F8
bl ov29_022E0A04
cmp r0, #1
mov r0, r8
bne _022FA6B8
bl ov29_022E68D8
b _022FA6BC
_022FA6B8:
bl ov29_022E68BC
_022FA6BC:
strb r5, [r8, #0x20]
b _022FA730
_022FA6C4:
cmp r0, #0
blt _022FA730
mov sb, #0
bl GetActiveTeamMember
mov r4, r0
bl ov29_022E0A04
cmp r0, #0
movne sb, #1
bne _022FA70C
ldrsh r0, [r4, #8]
bl CheckTeamMemberIdx
cmp r0, #0
movne sb, #1
bne _022FA70C
ldrsh r0, [r4, #8]
bl IsMonsterIdInNormalRange
cmp r0, #0
movne sb, #1
_022FA70C:
cmp sb, #0
beq _022FA730
#ifdef JAPAN
strb fp, [sl, #0x161]
#else
strb fp, [sl, #0x165]
#endif
bl ov29_022E8104
bl ov29_022E81F8
mov r0, r8
bl ov29_022E68BC
mov r0, #0
strb r0, [r8, #0x20]
_022FA730:
add r7, r7, #1
cmp r7, #4
blt _022FA65C
mov r0, #0x1e
mov r1, #0x4a
bl ov29_022EA370
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FA74C: .word DUNGEON_PTR
arm_func_end ov29_022FA648
arm_func_start ov29_022FA750
ov29_022FA750: ; 0x022FA750
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
mov r6, #0
ldr r4, _022FA7D8 ; =DUNGEON_PTR
mov r5, r6
_022FA760:
ldr r0, [r4]
add r0, r0, r6, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r8, [r0, #0xad4]
#else
ldr r8, [r0, #0xb78]
#endif
mov r0, r8
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FA7C8
ldr sb, [r8, #0xb4]
mov r7, r5
_022FA788:
ldr r0, [r4]
add r0, r0, r7, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr sl, [r0, #0xad4]
#else
ldr sl, [r0, #0xb78]
#endif
mov r0, sl
bl EntityIsValid__022F7364
cmp r0, #0
cmpne r8, sl
beq _022FA7BC
ldrh r1, [sb, #0x80]
ldrh r0, [sl, #0x26]
cmp r1, r0
streq sl, [sb, #0x84]
_022FA7BC:
add r7, r7, #1
cmp r7, #0x14
blt _022FA788
_022FA7C8:
add r6, r6, #1
cmp r6, #0x14
blt _022FA760
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_022FA7D8: .word DUNGEON_PTR
arm_func_end ov29_022FA750
arm_func_start TryEndStatusWithAbility
TryEndStatusWithAbility: ; 0x022FA7DC
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
mov r5, r1
mov r2, #0x16
#ifndef JAPAN
mov r3, #1
#endif
mov r6, r0
ldr r4, [r5, #0xb4]
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA81C
ldrb r0, [r4, #0xbf]
cmp r0, #4
bne _022FA81C
mov r0, r6
mov r1, r5
bl EndBurnClassStatus
_022FA81C:
mov r0, r6
mov r1, r5
mov r2, #0x40
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA850
ldrb r0, [r4, #0xd0]
cmp r0, #2
bne _022FA850
mov r0, r6
mov r1, r5
bl EndCringeClassStatus
_022FA850:
mov r0, r6
mov r1, r5
mov r2, #0x42
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA884
ldrb r0, [r4, #0xbf]
cmp r0, #1
bne _022FA884
mov r0, r6
mov r1, r5
bl EndBurnClassStatus
_022FA884:
mov r0, r6
mov r1, r5
mov r2, #0x29
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA8B8
ldrb r0, [r4, #0xd0]
cmp r0, #7
bne _022FA8B8
mov r0, r6
mov r1, r5
bl EndCringeClassStatus
_022FA8B8:
mov r0, r6
mov r1, r5
mov r2, #0x36
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
bne _022FA8F0
mov r0, r6
mov r1, r5
mov r2, #0x49
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA924
_022FA8F0:
mov r0, r5
bl IsMonsterSleeping
cmp r0, #0
bne _022FA90C
ldrb r0, [r4, #0xbd]
cmp r0, #4
bne _022FA924
_022FA90C:
mov r3, #1
mov r0, r6
mov r1, r5
mov r2, #0
str r3, [sp]
bl EndSleepClassStatus
_022FA924:
mov r0, r6
mov r1, r5
mov r2, #0x41
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA95C
ldrb r0, [r4, #0xc4]
cmp r0, #1
bne _022FA95C
mov r0, r6
mov r1, r5
mov r2, #1
bl EndFrozenClassStatus
_022FA95C:
mov r0, r6
mov r1, r5
mov r2, #0x45
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA998
ldrb r0, [r4, #0xbf]
add r0, r0, #0xfe
and r0, r0, #0xff
cmp r0, #1
bhi _022FA998
mov r0, r6
mov r1, r5
bl EndBurnClassStatus
_022FA998:
mov r0, r5
mov r1, #0x25
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022FA9CC
mov r0, #0
strb r0, [r4, #0xff]
ldrb r0, [r4, #0xd5]
cmp r0, #0xc
bne _022FA9CC
mov r0, r6
mov r1, r5
bl EndReflectClassStatus
_022FA9CC:
mov r0, r5
mov r1, #0x2b
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022FA9FC
ldrb r0, [r4, #0xc4]
cmp r0, #2
bne _022FA9FC
mov r0, r6
mov r1, r5
mov r2, #1
bl EndFrozenClassStatus
_022FA9FC:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
arm_func_end TryEndStatusWithAbility
arm_func_start ov29_022FAA04
ov29_022FAA04: ; 0x022FAA04
#ifdef JAPAN
#define OV29_022FAA04_OFFSET -4
#else
#define OV29_022FAA04_OFFSET 0
#endif
ldr ip, [r0, #0xb4]
mov r3, #0
_022FAA0C:
add r2, ip, r3, lsl #3
ldrb r0, [r2, #0x124 + OV29_022FAA04_OFFSET]
add r3, r3, #1
cmp r3, #4
bic r0, r0, #0x10
strb r0, [r2, #0x124 + OV29_022FAA04_OFFSET]
blt _022FAA0C
ldrb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
bic r0, r0, #0x10
strb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
ldrh r0, [r1, #4]
cmp r0, #0x160
ldreqb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
orreq r0, r0, #0x10
streqb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
ldrneb r0, [r1]
orrne r0, r0, #0x10
strneb r0, [r1]
bx lr
arm_func_end ov29_022FAA04
arm_func_start ov29_022FAA58
ov29_022FAA58: ; 0x022FAA58
#ifdef JAPAN
#define OV29_022FAA58_OFFSET -4
#else
#define OV29_022FAA58_OFFSET 0
#endif
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x14
ldr r1, _022FAC90 ; =DUNGEON_PTR
mov sl, r0
ldr r0, [r1]
mov r6, #0
#ifdef JAPAN
add r0, r0, #0x284
#else
add r0, r0, #0x328
#endif
add r4, r0, #0x12800
_022FAA78:
ldr r5, [r4, r6, lsl #2]
mov r0, r5
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FAB98
mov r0, r5
mov r1, #0x37
bl IqSkillIsEnabled
cmp r0, #0
beq _022FAB98
ldr sb, [r5, #0xb4]
mov r8, #0
mov r7, r8
add fp, sb, #0x124 + OV29_022FAA58_OFFSET
_022FAAB0:
ldrb r1, [fp, r7, lsl #3]
add r0, fp, r7, lsl #3
str r0, [sp]
tst r1, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _022FAB00
ldr r0, [sp]
bl GetMaxPpWrapper
ldr r1, [sp]
ldrb r1, [r1, #6]
cmp r1, r0
beq _022FAB00
add r0, r8, #1
mov r1, r0, lsl #0x10
mov r2, r8, lsl #1
add r0, sp, #4
strh r7, [r0, r2]
mov r8, r1, asr #0x10
_022FAB00:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
cmp r7, #4
blt _022FAAB0
cmp r8, #0
ble _022FAB4C
mov r0, r8
bl DungeonRandInt
mov r0, r0, lsl #0x10
add r1, sp, #4
mov r0, r0, asr #0xf
ldrsh r0, [r1, r0]
add r1, sb, #0x124 + OV29_022FAA58_OFFSET
add r1, r1, r0, lsl #3
ldrb r0, [r1, #6]
add r0, r0, #1
strb r0, [r1, #6]
b _022FAB54
_022FAB4C:
mov r0, #0
b _022FAB58
_022FAB54:
mov r0, #1
_022FAB58:
cmp r0, #0
beq _022FAB98
mov r0, r5
bl ShowPpRestoreEffect
cmp sl, #0
bne _022FAB98
mov r0, #0
mov r1, r5
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r0, #1
mov r1, #0x37
bl SetPreprocessorArgsIdVal
#ifdef JAPAN
ldr r1, _022FC21C ; =0x0000095F
mov r0, r5
#else
mov r0, r5
mov r1, #0xc20
#endif
bl LogMessageByIdWithPopupCheckUser
_022FAB98:
add r0, r6, #1
mov r0, r0, lsl #0x10
mov r6, r0, asr #0x10
cmp r6, #4
blt _022FAA78
mov r8, #0
mov fp, r8
_022FABB4:
ldr sb, [r4, r8, lsl #2]
mov r0, sb
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FAC74
ldr r6, [sb, #0xb4]
mov r7, fp
add r5, r6, #0x124 + OV29_022FAA58_OFFSET
b _022FABFC
_022FABD8:
add r0, r5, r7, lsl #3
bl GetMaxPp
add r1, r6, r7, lsl #3
ldrb r1, [r1, #0x12a + OV29_022FAA58_OFFSET]
cmp r1, r0
blt _022FAC04
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FABFC:
cmp r7, #4
blt _022FABD8
_022FAC04:
cmp r7, #4
beq _022FAC74
mov r0, sb
mov r1, #0x47
bl ExclusiveItemEffectIsActive__022FAC98
cmp r0, #0
beq _022FAC74
mov r0, #0
mov r1, sb
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r0, sb
mov r1, #0x47
add r2, sp, #0xc
bl GetExclusiveItemWithEffectFromBag
mov r0, #1
add r1, sp, #0xc
bl PrepareItemForPrinting__02345728
cmp sl, #0
bne _022FAC60
ldr r1, _022FAC94 ; =0x00000C23
mov r0, sb
bl LogMessageByIdWithPopupCheckUser
_022FAC60:
mov r0, sb
mov r1, sb
mov r2, #1
mov r3, sl
bl RestoreAllMovePP
_022FAC74:
add r0, r8, #1
mov r0, r0, lsl #0x10
mov r8, r0, asr #0x10
cmp r8, #4
blt _022FABB4
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FAC90: .word DUNGEON_PTR
#ifdef JAPAN
_022FC21C: .word 0x0000095F
_022FAC94: .word 0x00000962
#else
_022FAC94: .word 0x00000C23
#endif
arm_func_end ov29_022FAA58

637
asm/overlay_29_022FA524.s Normal file
View File

@@ -0,0 +1,637 @@
.include "asm/macros.inc"
.include "overlay_29_022FA524.inc"
.text
arm_func_start ov29_022FA524
ov29_022FA524: ; 0x022FA524
stmdb sp!, {r4, r5, r6, lr}
ldr r4, _022FA570 ; =DUNGEON_PTR
mov r5, #0
_022FA530:
ldr r0, [r4]
add r0, r0, r5, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r6, [r0, #0xad4]
#else
ldr r6, [r0, #0xb78]
#endif
mov r0, r6
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FA560
ldr r1, [r6, #0xb4]
mov r0, r6
ldrb r1, [r1, #0x4c]
bl ov29_02304A48
_022FA560:
add r5, r5, #1
cmp r5, #0x14
blt _022FA530
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_022FA570: .word DUNGEON_PTR
arm_func_end ov29_022FA524
arm_func_start ov29_022FA574
ov29_022FA574: ; 0x022FA574
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
bl EntityIsValid__022F7364
cmp r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
ldr r0, [r5, #0xb4]
mov r1, r4
#ifdef JAPAN
add r0, r0, #0x120
#else
add r0, r0, #0x124
#endif
bl sub_0201405C
cmp r0, #0
bne _022FA5B4
ldr r1, _022FA5E4 ; =0x00000C1D
mov r0, r5
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, pc}
_022FA5B4:
cmp r0, #1
bne _022FA5CC
ldr r1, _022FA5E8 ; =0x00000C1E
mov r0, r5
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, pc}
_022FA5CC:
cmp r0, #2
ldmneia sp!, {r3, r4, r5, pc}
ldr r1, _022FA5EC ; =0x00000C1F
mov r0, r5
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
#ifdef JAPAN
_022FA5E4: .word 0x0000095C
_022FA5E8: .word 0x0000095D
_022FA5EC: .word 0x0000095E
#else
_022FA5E4: .word 0x00000C1D
_022FA5E8: .word 0x00000C1E
_022FA5EC: .word 0x00000C1F
#endif
arm_func_end ov29_022FA574
arm_func_start MewSpawnCheck
MewSpawnCheck: ; 0x022FA5F0
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
bl CanMonsterSpawn
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
cmp r5, #0x97
bne _022FA63C
ldr r0, _022FA644 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x3000
#ifdef JAPAN
ldrb r0, [r0, #0xd95]
#else
ldrb r0, [r0, #0xe39]
#endif
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, pc}
cmp r4, #0
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, pc}
_022FA63C:
mov r0, #1
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_022FA644: .word DUNGEON_PTR
arm_func_end MewSpawnCheck
arm_func_start ov29_022FA648
ov29_022FA648: ; 0x022FA648
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov r7, #0
mov r6, #1
mov fp, r6
mov r5, r7
_022FA65C:
ldr r0, _022FA74C ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, r7, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r8, [r0, #0xa84]
#else
ldr r8, [r0, #0xb28]
#endif
mov r0, r8
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FA730
ldr sl, [r8, #0xb4]
ldrb r1, [sl, #7]
ldrsh r0, [sl, #0xc]
cmp r1, #0
beq _022FA6C4
#ifdef JAPAN
strb r6, [sl, #0x161]
#else
strb r6, [sl, #0x165]
#endif
bl ov29_022E8104
bl ov29_022E81F8
bl ov29_022E0A04
cmp r0, #1
mov r0, r8
bne _022FA6B8
bl ov29_022E68D8
b _022FA6BC
_022FA6B8:
bl ov29_022E68BC
_022FA6BC:
strb r5, [r8, #0x20]
b _022FA730
_022FA6C4:
cmp r0, #0
blt _022FA730
mov sb, #0
bl GetActiveTeamMember
mov r4, r0
bl ov29_022E0A04
cmp r0, #0
movne sb, #1
bne _022FA70C
ldrsh r0, [r4, #8]
bl CheckTeamMemberIdx
cmp r0, #0
movne sb, #1
bne _022FA70C
ldrsh r0, [r4, #8]
bl IsMonsterIdInNormalRange
cmp r0, #0
movne sb, #1
_022FA70C:
cmp sb, #0
beq _022FA730
#ifdef JAPAN
strb fp, [sl, #0x161]
#else
strb fp, [sl, #0x165]
#endif
bl ov29_022E8104
bl ov29_022E81F8
mov r0, r8
bl ov29_022E68BC
mov r0, #0
strb r0, [r8, #0x20]
_022FA730:
add r7, r7, #1
cmp r7, #4
blt _022FA65C
mov r0, #0x1e
mov r1, #0x4a
bl ov29_022EA370
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FA74C: .word DUNGEON_PTR
arm_func_end ov29_022FA648
arm_func_start ov29_022FA750
ov29_022FA750: ; 0x022FA750
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
mov r6, #0
ldr r4, _022FA7D8 ; =DUNGEON_PTR
mov r5, r6
_022FA760:
ldr r0, [r4]
add r0, r0, r6, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr r8, [r0, #0xad4]
#else
ldr r8, [r0, #0xb78]
#endif
mov r0, r8
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FA7C8
ldr sb, [r8, #0xb4]
mov r7, r5
_022FA788:
ldr r0, [r4]
add r0, r0, r7, lsl #2
add r0, r0, #0x12000
#ifdef JAPAN
ldr sl, [r0, #0xad4]
#else
ldr sl, [r0, #0xb78]
#endif
mov r0, sl
bl EntityIsValid__022F7364
cmp r0, #0
cmpne r8, sl
beq _022FA7BC
ldrh r1, [sb, #0x80]
ldrh r0, [sl, #0x26]
cmp r1, r0
streq sl, [sb, #0x84]
_022FA7BC:
add r7, r7, #1
cmp r7, #0x14
blt _022FA788
_022FA7C8:
add r6, r6, #1
cmp r6, #0x14
blt _022FA760
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_022FA7D8: .word DUNGEON_PTR
arm_func_end ov29_022FA750
arm_func_start TryEndStatusWithAbility
TryEndStatusWithAbility: ; 0x022FA7DC
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
mov r5, r1
mov r2, #0x16
#ifndef JAPAN
mov r3, #1
#endif
mov r6, r0
ldr r4, [r5, #0xb4]
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA81C
ldrb r0, [r4, #0xbf]
cmp r0, #4
bne _022FA81C
mov r0, r6
mov r1, r5
bl EndBurnClassStatus
_022FA81C:
mov r0, r6
mov r1, r5
mov r2, #0x40
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA850
ldrb r0, [r4, #0xd0]
cmp r0, #2
bne _022FA850
mov r0, r6
mov r1, r5
bl EndCringeClassStatus
_022FA850:
mov r0, r6
mov r1, r5
mov r2, #0x42
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA884
ldrb r0, [r4, #0xbf]
cmp r0, #1
bne _022FA884
mov r0, r6
mov r1, r5
bl EndBurnClassStatus
_022FA884:
mov r0, r6
mov r1, r5
mov r2, #0x29
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA8B8
ldrb r0, [r4, #0xd0]
cmp r0, #7
bne _022FA8B8
mov r0, r6
mov r1, r5
bl EndCringeClassStatus
_022FA8B8:
mov r0, r6
mov r1, r5
mov r2, #0x36
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
bne _022FA8F0
mov r0, r6
mov r1, r5
mov r2, #0x49
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA924
_022FA8F0:
mov r0, r5
bl IsMonsterSleeping
cmp r0, #0
bne _022FA90C
ldrb r0, [r4, #0xbd]
cmp r0, #4
bne _022FA924
_022FA90C:
mov r3, #1
mov r0, r6
mov r1, r5
mov r2, #0
str r3, [sp]
bl EndSleepClassStatus
_022FA924:
mov r0, r6
mov r1, r5
mov r2, #0x41
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA95C
ldrb r0, [r4, #0xc4]
cmp r0, #1
bne _022FA95C
mov r0, r6
mov r1, r5
mov r2, #1
bl EndFrozenClassStatus
_022FA95C:
mov r0, r6
mov r1, r5
mov r2, #0x45
#ifndef JAPAN
mov r3, #1
#endif
bl DefenderAbilityIsActive__022F96CC
cmp r0, #0
beq _022FA998
ldrb r0, [r4, #0xbf]
add r0, r0, #0xfe
and r0, r0, #0xff
cmp r0, #1
bhi _022FA998
mov r0, r6
mov r1, r5
bl EndBurnClassStatus
_022FA998:
mov r0, r5
mov r1, #0x25
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022FA9CC
mov r0, #0
strb r0, [r4, #0xff]
ldrb r0, [r4, #0xd5]
cmp r0, #0xc
bne _022FA9CC
mov r0, r6
mov r1, r5
bl EndReflectClassStatus
_022FA9CC:
mov r0, r5
mov r1, #0x2b
bl AbilityIsActiveVeneer
cmp r0, #0
beq _022FA9FC
ldrb r0, [r4, #0xc4]
cmp r0, #2
bne _022FA9FC
mov r0, r6
mov r1, r5
mov r2, #1
bl EndFrozenClassStatus
_022FA9FC:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, pc}
arm_func_end TryEndStatusWithAbility
arm_func_start ov29_022FAA04
ov29_022FAA04: ; 0x022FAA04
#ifdef JAPAN
#define OV29_022FAA04_OFFSET -4
#else
#define OV29_022FAA04_OFFSET 0
#endif
ldr ip, [r0, #0xb4]
mov r3, #0
_022FAA0C:
add r2, ip, r3, lsl #3
ldrb r0, [r2, #0x124 + OV29_022FAA04_OFFSET]
add r3, r3, #1
cmp r3, #4
bic r0, r0, #0x10
strb r0, [r2, #0x124 + OV29_022FAA04_OFFSET]
blt _022FAA0C
ldrb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
bic r0, r0, #0x10
strb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
ldrh r0, [r1, #4]
cmp r0, #0x160
ldreqb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
orreq r0, r0, #0x10
streqb r0, [ip, #0x144 + OV29_022FAA04_OFFSET]
ldrneb r0, [r1]
orrne r0, r0, #0x10
strneb r0, [r1]
bx lr
arm_func_end ov29_022FAA04
arm_func_start ov29_022FAA58
ov29_022FAA58: ; 0x022FAA58
#ifdef JAPAN
#define OV29_022FAA58_OFFSET -4
#else
#define OV29_022FAA58_OFFSET 0
#endif
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x14
ldr r1, _022FAC90 ; =DUNGEON_PTR
mov sl, r0
ldr r0, [r1]
mov r6, #0
#ifdef JAPAN
add r0, r0, #0x284
#else
add r0, r0, #0x328
#endif
add r4, r0, #0x12800
_022FAA78:
ldr r5, [r4, r6, lsl #2]
mov r0, r5
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FAB98
mov r0, r5
mov r1, #0x37
bl IqSkillIsEnabled
cmp r0, #0
beq _022FAB98
ldr sb, [r5, #0xb4]
mov r8, #0
mov r7, r8
add fp, sb, #0x124 + OV29_022FAA58_OFFSET
_022FAAB0:
ldrb r1, [fp, r7, lsl #3]
add r0, fp, r7, lsl #3
str r0, [sp]
tst r1, #1
movne r0, #1
moveq r0, #0
tst r0, #0xff
beq _022FAB00
ldr r0, [sp]
bl GetMaxPpWrapper
ldr r1, [sp]
ldrb r1, [r1, #6]
cmp r1, r0
beq _022FAB00
add r0, r8, #1
mov r1, r0, lsl #0x10
mov r2, r8, lsl #1
add r0, sp, #4
strh r7, [r0, r2]
mov r8, r1, asr #0x10
_022FAB00:
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
cmp r7, #4
blt _022FAAB0
cmp r8, #0
ble _022FAB4C
mov r0, r8
bl DungeonRandInt
mov r0, r0, lsl #0x10
add r1, sp, #4
mov r0, r0, asr #0xf
ldrsh r0, [r1, r0]
add r1, sb, #0x124 + OV29_022FAA58_OFFSET
add r1, r1, r0, lsl #3
ldrb r0, [r1, #6]
add r0, r0, #1
strb r0, [r1, #6]
b _022FAB54
_022FAB4C:
mov r0, #0
b _022FAB58
_022FAB54:
mov r0, #1
_022FAB58:
cmp r0, #0
beq _022FAB98
mov r0, r5
bl ShowPpRestoreEffect
cmp sl, #0
bne _022FAB98
mov r0, #0
mov r1, r5
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r0, #1
mov r1, #0x37
bl SetPreprocessorArgsIdVal
#ifdef JAPAN
ldr r1, _022FC21C ; =0x0000095F
mov r0, r5
#else
mov r0, r5
mov r1, #0xc20
#endif
bl LogMessageByIdWithPopupCheckUser
_022FAB98:
add r0, r6, #1
mov r0, r0, lsl #0x10
mov r6, r0, asr #0x10
cmp r6, #4
blt _022FAA78
mov r8, #0
mov fp, r8
_022FABB4:
ldr sb, [r4, r8, lsl #2]
mov r0, sb
bl EntityIsValid__022F7364
cmp r0, #0
beq _022FAC74
ldr r6, [sb, #0xb4]
mov r7, fp
add r5, r6, #0x124 + OV29_022FAA58_OFFSET
b _022FABFC
_022FABD8:
add r0, r5, r7, lsl #3
bl GetMaxPp
add r1, r6, r7, lsl #3
ldrb r1, [r1, #0x12a + OV29_022FAA58_OFFSET]
cmp r1, r0
blt _022FAC04
add r0, r7, #1
mov r0, r0, lsl #0x10
mov r7, r0, asr #0x10
_022FABFC:
cmp r7, #4
blt _022FABD8
_022FAC04:
cmp r7, #4
beq _022FAC74
mov r0, sb
mov r1, #0x47
bl ExclusiveItemEffectIsActive__022FAC98
cmp r0, #0
beq _022FAC74
mov r0, #0
mov r1, sb
mov r2, r0
bl SubstitutePlaceholderStringTags
mov r0, sb
mov r1, #0x47
add r2, sp, #0xc
bl GetExclusiveItemWithEffectFromBag
mov r0, #1
add r1, sp, #0xc
bl PrepareItemForPrinting__02345728
cmp sl, #0
bne _022FAC60
ldr r1, _022FAC94 ; =0x00000C23
mov r0, sb
bl LogMessageByIdWithPopupCheckUser
_022FAC60:
mov r0, sb
mov r1, sb
mov r2, #1
mov r3, sl
bl RestoreAllMovePP
_022FAC74:
add r0, r8, #1
mov r0, r0, lsl #0x10
mov r8, r0, asr #0x10
cmp r8, #4
blt _022FABB4
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022FAC90: .word DUNGEON_PTR
#ifdef JAPAN
_022FC21C: .word 0x0000095F
_022FAC94: .word 0x00000962
#else
_022FAC94: .word 0x00000C23
#endif
arm_func_end ov29_022FAA58

View File

@@ -0,0 +1,8 @@
#ifndef PMDSKY_OVERLAY_29_022FA430_H
#define PMDSKY_OVERLAY_29_022FA430_H
#include "dungeon_mode.h"
bool8 ShouldMonsterHeadToStairs(struct entity *entity);
#endif //PMDSKY_OVERLAY_29_022FA430_H

View File

@@ -421,6 +421,8 @@ Overlay OVY_29
Object asm/overlay_29_022F9194.o
Object src/overlay_29_022F9720.o
Object asm/overlay_29_022F9744.o
Object src/overlay_29_022FA430.o
Object asm/overlay_29_022FA524.o
Object src/overlay_29_022FAC98.o
Object asm/overlay_29_022FACBC.o
Object src/overlay_29_022FB538.o

32
src/overlay_29_022FA430.c Normal file
View File

@@ -0,0 +1,32 @@
#include "overlay_29_022FA430.h"
#include "dungeon.h"
#include "dungeon_map_access.h"
#include "math.h"
#include "overlay_29_022F7364.h"
extern s32 GetChebyshevDistance(struct position *position_a, struct position *position_b);
extern u8 GetStairsRoom();
extern s32 ov29_023018AC(struct entity*, struct entity*);
bool8 ShouldMonsterHeadToStairs(struct entity *entity)
{
u8 stairs_room = GetStairsRoom();
if (stairs_room == GetTile(entity->pos.x, entity->pos.y)->room) {
s32 stairs_distance = GetChebyshevDistance(&entity->pos, &DUNGEON_PTR[0]->gen_info.stairs_pos);
s32 min_stairs_distance = INFINITY_3;
for (s32 i = 0; i < DUNGEON_MAX_POKEMON; i++)
{
struct entity *other_monster = DUNGEON_PTR[0]->active_monster_ptrs[i];
if (EntityIsValid__022F7364(other_monster) && ov29_023018AC(entity, other_monster) == 1 && stairs_room == GetTile(other_monster->pos.x, other_monster->pos.y)->room) {
s32 other_stairs_distance = GetChebyshevDistance(&other_monster->pos, &DUNGEON_PTR[0]->gen_info.stairs_pos);
if (other_stairs_distance < min_stairs_distance)
min_stairs_distance = other_stairs_distance;
}
}
if (min_stairs_distance == INFINITY_3 || (min_stairs_distance != INFINITY_3 && min_stairs_distance > stairs_distance))
return TRUE;
}
return FALSE;
}