mirror of
https://github.com/pret/pmd-sky.git
synced 2026-09-12 13:26:56 -05:00
Decomped SetDecoyAiTracker
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
.public _020A1870
|
||||
.public AbilityIsActiveVeneer
|
||||
.public AdvanceFrame
|
||||
.public AiMovement
|
||||
@@ -9,18 +8,16 @@
|
||||
.public BELLY_DRAIN_IN_WALLS_INT
|
||||
.public CanMonsterSpawn
|
||||
.public CanMonsterUseItem
|
||||
.public CanSeeTarget
|
||||
.public CeilFixedPoint
|
||||
.public ChangeMonsterAnimation
|
||||
.public CheckTeamMemberIdx
|
||||
.public CheckVariousStatuses
|
||||
.public CheckVariousStatuses2
|
||||
.public Conversion2IsActive
|
||||
.public DefenderAbilityIsActive__022F96CC
|
||||
.public DIRECTIONS_XY
|
||||
.public DiscoverMinimap
|
||||
.public DisplayAnimatedNumbers
|
||||
.public DUNGEON_PTR
|
||||
.public DefenderAbilityIsActive__022F96CC
|
||||
.public DiscoverMinimap
|
||||
.public DungeonRandInt
|
||||
.public EnableIqSkill
|
||||
.public EndBurnClassStatus
|
||||
@@ -43,13 +40,10 @@
|
||||
.public GetMaxPpWrapper
|
||||
.public GetMobilityType
|
||||
.public GetMonsterEvoStatus
|
||||
.public GetMoveBasePp
|
||||
.public GetMoveType
|
||||
.public GetMoveTypeForMonster
|
||||
.public GetNbItemsInBag
|
||||
.public GetScenarioBalance
|
||||
.public GetScenarioBalanceVeneer
|
||||
.public GetSpawnThreshold
|
||||
.public GetStairsRoom
|
||||
.public GetStairsSpawnPosition
|
||||
.public GetTile
|
||||
@@ -62,18 +56,32 @@
|
||||
.public IqSkillIsEnabled
|
||||
.public IsCurrentFixedRoomBossFight
|
||||
.public IsFullFloorFixedRoom
|
||||
.public IsMonster__022F9720
|
||||
.public IsMonsterIdInNormalRange
|
||||
.public IsMonsterSleeping
|
||||
.public IsOneHitKoMove
|
||||
.public IsSecretBazaarNpcBehavior
|
||||
.public ItemZInit
|
||||
.public LogMessageByIdWithPopup
|
||||
.public LogMessageByIdWithPopupCheckUser
|
||||
.public LogMessageByIdWithPopupCheckUserTarget
|
||||
.public PointCameraToMonster
|
||||
.public RandInt
|
||||
.public RemoveEquivItem
|
||||
.public RestoreAllMovePP
|
||||
.public SECONDARY_TERRAIN_TYPES
|
||||
.public SetActionPassTurnOrWalk
|
||||
.public ShouldDisplayEntityWrapper
|
||||
.public ShouldTryEatItem
|
||||
.public ShowPpRestoreEffect
|
||||
.public SubFixedPoint
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public TryIncreaseHp
|
||||
.public TryInflictBurnStatus
|
||||
.public TryInflictPausedStatus
|
||||
.public UpdateCamera
|
||||
.public UpdateMinimap
|
||||
.public UpdateStatusIconFlags
|
||||
.public ov29_022E0A04
|
||||
.public ov29_022E4160
|
||||
.public ov29_022E576C
|
||||
.public ov29_022E68BC
|
||||
.public ov29_022E68D8
|
||||
.public ov29_022E6928
|
||||
@@ -90,31 +98,12 @@
|
||||
.public ov29_02307DD0
|
||||
.public ov29_0230F9A4
|
||||
.public ov29_02344B44
|
||||
.public ov29_02348100
|
||||
.public ov29_0234B034
|
||||
.public ov29_0234B084
|
||||
.public ov29_0234B09C
|
||||
.public PointCameraToMonster
|
||||
.public RandInt
|
||||
.public RemoveEquivItem
|
||||
.public RestoreAllMovePP
|
||||
.public SECONDARY_TERRAIN_TYPES
|
||||
.public SetActionPassTurnOrWalk
|
||||
.public ShouldDisplayEntityWrapper
|
||||
.public ShouldTryEatItem
|
||||
.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 TryIncreaseHp
|
||||
.public TryInflictBurnStatus
|
||||
.public TryInflictPausedStatus
|
||||
.public UpdateCamera
|
||||
.public UpdateMapSurveyorFlag
|
||||
.public UpdateMinimap
|
||||
.public UpdateStatusIconFlags
|
||||
|
||||
21
asm/include/overlay_29_022FB5EC.inc
Normal file
21
asm/include/overlay_29_022FB5EC.inc
Normal file
@@ -0,0 +1,21 @@
|
||||
#pragma once
|
||||
.public Conversion2IsActive
|
||||
.public DIRECTIONS_XY
|
||||
.public DUNGEON_PTR
|
||||
.public DisplayAnimatedNumbers
|
||||
.public EntityIsValid__022F7364
|
||||
.public GetMaxPp
|
||||
.public GetMoveBasePp
|
||||
.public GetScenarioBalanceVeneer
|
||||
.public GetSpawnThreshold
|
||||
.public GetTile
|
||||
.public IqSkillIsEnabled
|
||||
.public IsMonster__022F9720
|
||||
.public IsSecretBazaarNpcBehavior
|
||||
.public TeamMemberHasEnabledIqSkill
|
||||
.public UpdateMapSurveyorFlag
|
||||
.public UpdateMinimap
|
||||
.public _020A1870
|
||||
.public ov29_022E576C
|
||||
.public ov29_02307CE0
|
||||
.public ov29_02348100
|
||||
@@ -2519,501 +2519,3 @@ ov29_022FB51C: ; 0x022FB51C
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end ov29_022FB51C
|
||||
|
||||
#ifndef JAPAN
|
||||
arm_func_start SetDecoyAiTracker
|
||||
SetDecoyAiTracker: ; 0x022FB538
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r6, r0
|
||||
bl EntityIsValid__022F7364
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
ldr r5, [r6, #0xb4]
|
||||
mov r4, #0
|
||||
ldr r7, _022FB5E8 ; =DUNGEON_PTR
|
||||
strb r4, [r5, #0x10c]
|
||||
ldr r0, [r7]
|
||||
add r0, r0, #0x3000
|
||||
ldrb r0, [r0, #0xe38]
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
b _022FB5DC
|
||||
_022FB574:
|
||||
ldr r0, [r7]
|
||||
add r0, r0, r4, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r8, [r0, #0xb78]
|
||||
mov r0, r8
|
||||
bl EntityIsValid__022F7364
|
||||
cmp r0, #0
|
||||
cmpne r8, r6
|
||||
beq _022FB5D8
|
||||
ldr r0, [r8, #0xb4]
|
||||
ldrb r0, [r0, #0xd8]
|
||||
cmp r0, #2
|
||||
bne _022FB5D8
|
||||
mov r0, r6
|
||||
mov r1, r8
|
||||
bl CanSeeTarget
|
||||
cmp r0, #0
|
||||
beq _022FB5D8
|
||||
ldr r0, [r8, #0xb4]
|
||||
ldrb r0, [r0, #0xd9]
|
||||
cmp r0, #0
|
||||
movne r0, #2
|
||||
moveq r0, #1
|
||||
strb r0, [r5, #0x10c]
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
_022FB5D8:
|
||||
add r4, r4, #1
|
||||
_022FB5DC:
|
||||
cmp r4, #0x14
|
||||
blt _022FB574
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
.align 2, 0
|
||||
_022FB5E8: .word DUNGEON_PTR
|
||||
arm_func_end SetDecoyAiTracker
|
||||
#endif
|
||||
|
||||
arm_func_start CheckSpawnThreshold
|
||||
CheckSpawnThreshold: ; 0x022FB5EC
|
||||
stmdb sp!, {r4, lr}
|
||||
bl GetSpawnThreshold
|
||||
mov r4, r0
|
||||
bl GetScenarioBalanceVeneer
|
||||
cmp r4, r0
|
||||
movls r0, #1
|
||||
movhi r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end CheckSpawnThreshold
|
||||
|
||||
arm_func_start HasLowHealth
|
||||
HasLowHealth: ; 0x022FB610
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl EntityIsValid__022F7364
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
ldr r0, [r4]
|
||||
cmp r0, #1
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r4, pc}
|
||||
ldr r3, [r4, #0xb4]
|
||||
ldr r0, _022FB674 ; =0x000003E7
|
||||
ldrsh r2, [r3, #0x12]
|
||||
ldrsh r1, [r3, #0x16]
|
||||
add r2, r2, r1
|
||||
cmp r2, r0
|
||||
movgt r2, r0
|
||||
mov r0, r2, asr #1
|
||||
ldrsh r1, [r3, #0x10]
|
||||
add r0, r2, r0, lsr #30
|
||||
cmp r1, r0, asr #2
|
||||
movlt r0, #1
|
||||
movge r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_022FB674: .word 0x000003E7
|
||||
arm_func_end HasLowHealth
|
||||
|
||||
arm_func_start AreEntitiesAdjacent
|
||||
AreEntitiesAdjacent: ; 0x022FB678
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r7, r0
|
||||
mov r6, r1
|
||||
mov r5, #0
|
||||
ldr r4, _022FB6E0 ; =DIRECTIONS_XY
|
||||
b _022FB6D0
|
||||
_022FB690:
|
||||
mov r1, r5, lsl #2
|
||||
add r0, r4, r5, lsl #2
|
||||
ldrsh r3, [r4, r1]
|
||||
ldrsh ip, [r7, #4]
|
||||
ldrsh r1, [r0, #2]
|
||||
ldrsh r2, [r7, #6]
|
||||
add r0, ip, r3
|
||||
add r1, r2, r1
|
||||
bl GetTile
|
||||
ldr r0, [r0, #0xc]
|
||||
cmp r0, r6
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
add r0, r5, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r5, r0, asr #0x10
|
||||
_022FB6D0:
|
||||
cmp r5, #8
|
||||
blt _022FB690
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_022FB6E0: .word DIRECTIONS_XY
|
||||
arm_func_end AreEntitiesAdjacent
|
||||
|
||||
arm_func_start ov29_022FB6E4
|
||||
ov29_022FB6E4: ; 0x022FB6E4
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl IsMonster__022F9720
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
ldr r0, [r4, #0xb4]
|
||||
ldrb r0, [r0, #0x48]
|
||||
cmp r0, #0xd6
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end ov29_022FB6E4
|
||||
|
||||
arm_func_start ov29_022FB718
|
||||
ov29_022FB718: ; 0x022FB718
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
mov sl, r0
|
||||
bl EntityIsValid__022F7364
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
ldr sb, [sl, #0xb4]
|
||||
mov r1, #0
|
||||
mov r0, sl
|
||||
strh r1, [sb, #0x16]
|
||||
bl Conversion2IsActive
|
||||
mov r6, r0
|
||||
mov r0, sl
|
||||
mov r1, #0x38
|
||||
ldr r4, [sl, #0xb4]
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
ldrne r0, _022FB834 ; =_020A1870
|
||||
mov r8, #0
|
||||
ldrnesh r1, [r4, #0x16]
|
||||
ldrnesh r0, [r0]
|
||||
#ifdef JAPAN
|
||||
add r5, r4, #0x120
|
||||
#else
|
||||
add r5, r4, #0x124
|
||||
#endif
|
||||
mov fp, r8
|
||||
addne r0, r1, r0
|
||||
strneh r0, [r4, #0x16]
|
||||
mov r4, #1
|
||||
_022FB77C:
|
||||
ldrb r0, [r5, r8, lsl #3]
|
||||
add r7, r5, r8, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, r4
|
||||
moveq r0, fp
|
||||
tst r0, #0xff
|
||||
beq _022FB7C0
|
||||
ldrh r2, [r7, #2]
|
||||
mov r0, sl
|
||||
mov r1, #0x39
|
||||
bic r2, r2, #0x100
|
||||
strh r2, [r7, #2]
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
ldrneh r0, [r7, #2]
|
||||
orrne r0, r0, #0x100
|
||||
strneh r0, [r7, #2]
|
||||
_022FB7C0:
|
||||
add r0, r8, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r8, r0, asr #0x10
|
||||
cmp r8, #4
|
||||
blt _022FB77C
|
||||
mov r0, sl
|
||||
bl ov29_02348100
|
||||
cmp r6, #2
|
||||
bne _022FB7FC
|
||||
mov r0, sl
|
||||
bl Conversion2IsActive
|
||||
cmp r0, #0
|
||||
bne _022FB7FC
|
||||
mov r0, sl
|
||||
bl ov29_02307CE0
|
||||
_022FB7FC:
|
||||
ldrsh r1, [sb, #0x12]
|
||||
ldrsh r0, [sb, #0x16]
|
||||
ldr r2, _022FB838 ; =0x000003E7
|
||||
add r1, r1, r0
|
||||
cmp r1, r2
|
||||
ldrsh r0, [sb, #0x10]
|
||||
movle r2, r1
|
||||
cmp r0, r2
|
||||
ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
ldr r0, _022FB838 ; =0x000003E7
|
||||
cmp r1, r0
|
||||
movgt r1, r0
|
||||
strh r1, [sb, #0x10]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_022FB834: .word _020A1870
|
||||
_022FB838: .word 0x000003E7
|
||||
arm_func_end ov29_022FB718
|
||||
|
||||
arm_func_start ov29_022FB83C
|
||||
ov29_022FB83C: ; 0x022FB83C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
||||
mov sl, r0
|
||||
mov sb, r1
|
||||
bl EntityIsValid__022F7364
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
||||
ldr r8, [sl, #0xb4]
|
||||
mov r7, #0
|
||||
#ifdef JAPAN
|
||||
add r6, r8, #0x120
|
||||
#else
|
||||
add r6, r8, #0x124
|
||||
#endif
|
||||
mov r4, r7
|
||||
mov r5, #1
|
||||
_022FB868:
|
||||
ldrb r0, [r6, r7, lsl #3]
|
||||
mov r1, r7, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, r5
|
||||
moveq r0, r4
|
||||
tst r0, #0xff
|
||||
beq _022FB88C
|
||||
add r0, r6, r1
|
||||
bl GetMoveBasePp
|
||||
_022FB88C:
|
||||
add r0, r7, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r7, r0, asr #0x10
|
||||
cmp r7, #4
|
||||
blt _022FB868
|
||||
mov r0, sl
|
||||
bl ov29_022FB718
|
||||
cmp sb, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
||||
ldrsh r2, [r8, #0x12]
|
||||
ldrsh r1, [r8, #0x16]
|
||||
ldr r0, _022FB91C ; =0x000003E7
|
||||
mov sb, #0
|
||||
add r1, r2, r1
|
||||
cmp r1, r0
|
||||
movgt r1, r0
|
||||
strh r1, [r8, #0x10]
|
||||
#ifdef JAPAN
|
||||
add r6, r8, #0x120
|
||||
#else
|
||||
add r6, r8, #0x124
|
||||
#endif
|
||||
mov r4, sb
|
||||
mov r5, #1
|
||||
_022FB8DC:
|
||||
ldrb r0, [r6, sb, lsl #3]
|
||||
add r7, r6, sb, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, r5
|
||||
moveq r0, r4
|
||||
tst r0, #0xff
|
||||
beq _022FB904
|
||||
mov r0, r7
|
||||
bl GetMaxPp
|
||||
strb r0, [r7, #6]
|
||||
_022FB904:
|
||||
add r0, sb, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov sb, r0, asr #0x10
|
||||
cmp sb, #4
|
||||
blt _022FB8DC
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
||||
.align 2, 0
|
||||
_022FB91C: .word 0x000003E7
|
||||
arm_func_end ov29_022FB83C
|
||||
|
||||
arm_func_start ov29_022FB920
|
||||
ov29_022FB920: ; 0x022FB920
|
||||
#ifdef EUROPE
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r5, _022FB980 ; =DUNGEON_PTR
|
||||
mov r4, r0
|
||||
mov r6, #0
|
||||
_022FC33C_EU:
|
||||
ldr r0, [r5]
|
||||
add r0, r0, r6, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r0, [r0, #0xb28]
|
||||
bl ov29_022FB718
|
||||
add r0, r6, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r6, r0, asr #0x10
|
||||
cmp r6, #4
|
||||
blt _022FC33C_EU
|
||||
bl UpdateMapSurveyorFlag
|
||||
cmp r0, #0
|
||||
cmpne r4, #0
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
bl UpdateMinimap
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
#else
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldr r4, _022FB980 ; =DUNGEON_PTR
|
||||
mov r5, #0
|
||||
_022FB92C:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
#ifdef JAPAN
|
||||
ldr r0, [r0, #0xa84]
|
||||
#else
|
||||
ldr r0, [r0, #0xb28]
|
||||
#endif
|
||||
bl ov29_022FB718
|
||||
add r0, r5, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r5, r0, asr #0x10
|
||||
cmp r5, #4
|
||||
blt _022FB92C
|
||||
mov r0, #0x41
|
||||
bl TeamMemberHasEnabledIqSkill
|
||||
cmp r0, #0
|
||||
ldrne r0, _022FB980 ; =DUNGEON_PTR
|
||||
movne r1, #1
|
||||
ldreq r0, _022FB980 ; =DUNGEON_PTR
|
||||
moveq r1, #0
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x1a000
|
||||
#ifdef JAPAN
|
||||
strb r1, [r0, #0x19d]
|
||||
#else
|
||||
strb r1, [r0, #0x241]
|
||||
#endif
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
#endif
|
||||
.align 2, 0
|
||||
_022FB980: .word DUNGEON_PTR
|
||||
arm_func_end ov29_022FB920
|
||||
|
||||
arm_func_start ov29_022FB984
|
||||
ov29_022FB984: ; 0x022FB984
|
||||
mov r0, #0
|
||||
bx lr
|
||||
arm_func_end ov29_022FB984
|
||||
|
||||
arm_func_start ov29_022FB98C
|
||||
ov29_022FB98C: ; 0x022FB98C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r2, #1
|
||||
ldr r0, _022FB9B8 ; =0x0000270F
|
||||
mov r4, r1
|
||||
sub r3, r2, #2
|
||||
bl DisplayAnimatedNumbers
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl ov29_022E576C
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_022FB9B8: .word 0x0000270F
|
||||
arm_func_end ov29_022FB98C
|
||||
|
||||
arm_func_start ov29_022FB9BC
|
||||
ov29_022FB9BC: ; 0x022FB9BC
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, [r0, #0xb4]
|
||||
ldrb r0, [r0, #0xbc]
|
||||
bl IsSecretBazaarNpcBehavior
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end ov29_022FB9BC
|
||||
|
||||
arm_func_start ov29_022FB9E0
|
||||
ov29_022FB9E0: ; 0x022FB9E0
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl IsMonster__022F9720
|
||||
cmp r0, #0
|
||||
beq _022FBA4C
|
||||
ldr r1, [r5, #0xb4]
|
||||
mov r0, #0
|
||||
#ifdef JAPAN
|
||||
add ip, r1, #0x120
|
||||
#else
|
||||
add ip, r1, #0x124
|
||||
#endif
|
||||
mov r2, r0
|
||||
mov r3, #1
|
||||
b _022FBA44
|
||||
_022FBA10:
|
||||
ldrb r1, [ip, r0, lsl #3]
|
||||
add lr, ip, r0, lsl #3
|
||||
tst r1, #1
|
||||
movne r1, r3
|
||||
moveq r1, r2
|
||||
tst r1, #0xff
|
||||
beq _022FBA38
|
||||
ldrh r1, [lr, #4]
|
||||
cmp r1, r4
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
_022FBA38:
|
||||
add r0, r0, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, asr #0x10
|
||||
_022FBA44:
|
||||
cmp r0, #4
|
||||
blt _022FBA10
|
||||
_022FBA4C:
|
||||
mvn r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end ov29_022FB9E0
|
||||
|
||||
arm_func_start ov29_022FBA54
|
||||
ov29_022FBA54: ; 0x022FBA54
|
||||
stmdb sp!, {r3, lr}
|
||||
bl ov29_022FB9E0
|
||||
cmp r0, #0
|
||||
movge r0, #1
|
||||
movlt r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end ov29_022FBA54
|
||||
|
||||
arm_func_start ov29_022FBA70
|
||||
ov29_022FBA70: ; 0x022FBA70
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl IsMonster__022F9720
|
||||
cmp r0, #0
|
||||
beq _022FBAAC
|
||||
ldr r0, [r4, #0xb4]
|
||||
ldrb r0, [r0, #0x48]
|
||||
cmp r0, #0xfa
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r0, #0xd9
|
||||
blo _022FBAAC
|
||||
cmp r0, #0xe4
|
||||
movlo r0, #1
|
||||
ldmloia sp!, {r4, pc}
|
||||
_022FBAAC:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end ov29_022FBA70
|
||||
|
||||
arm_func_start ov29_022FBAB4
|
||||
ov29_022FBAB4: ; 0x022FBAB4
|
||||
ldr r2, [r0, #0xb4]
|
||||
cmp r2, #0
|
||||
addne r0, r2, #0x100
|
||||
movne r1, #0
|
||||
#ifdef JAPAN
|
||||
strneh r1, [r0, #0x8e]
|
||||
strne r1, [r2, #0x188]
|
||||
#else
|
||||
strneh r1, [r0, #0x92]
|
||||
strne r1, [r2, #0x18c]
|
||||
#endif
|
||||
bx lr
|
||||
arm_func_end ov29_022FBAB4
|
||||
|
||||
447
asm/overlay_29_022FB5EC.s
Normal file
447
asm/overlay_29_022FB5EC.s
Normal file
@@ -0,0 +1,447 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_022FB5EC.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start CheckSpawnThreshold
|
||||
CheckSpawnThreshold: ; 0x022FB5EC
|
||||
stmdb sp!, {r4, lr}
|
||||
bl GetSpawnThreshold
|
||||
mov r4, r0
|
||||
bl GetScenarioBalanceVeneer
|
||||
cmp r4, r0
|
||||
movls r0, #1
|
||||
movhi r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end CheckSpawnThreshold
|
||||
|
||||
arm_func_start HasLowHealth
|
||||
HasLowHealth: ; 0x022FB610
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl EntityIsValid__022F7364
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
ldr r0, [r4]
|
||||
cmp r0, #1
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r4, pc}
|
||||
ldr r3, [r4, #0xb4]
|
||||
ldr r0, _022FB674 ; =0x000003E7
|
||||
ldrsh r2, [r3, #0x12]
|
||||
ldrsh r1, [r3, #0x16]
|
||||
add r2, r2, r1
|
||||
cmp r2, r0
|
||||
movgt r2, r0
|
||||
mov r0, r2, asr #1
|
||||
ldrsh r1, [r3, #0x10]
|
||||
add r0, r2, r0, lsr #30
|
||||
cmp r1, r0, asr #2
|
||||
movlt r0, #1
|
||||
movge r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_022FB674: .word 0x000003E7
|
||||
arm_func_end HasLowHealth
|
||||
|
||||
arm_func_start AreEntitiesAdjacent
|
||||
AreEntitiesAdjacent: ; 0x022FB678
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r7, r0
|
||||
mov r6, r1
|
||||
mov r5, #0
|
||||
ldr r4, _022FB6E0 ; =DIRECTIONS_XY
|
||||
b _022FB6D0
|
||||
_022FB690:
|
||||
mov r1, r5, lsl #2
|
||||
add r0, r4, r5, lsl #2
|
||||
ldrsh r3, [r4, r1]
|
||||
ldrsh ip, [r7, #4]
|
||||
ldrsh r1, [r0, #2]
|
||||
ldrsh r2, [r7, #6]
|
||||
add r0, ip, r3
|
||||
add r1, r2, r1
|
||||
bl GetTile
|
||||
ldr r0, [r0, #0xc]
|
||||
cmp r0, r6
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
add r0, r5, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r5, r0, asr #0x10
|
||||
_022FB6D0:
|
||||
cmp r5, #8
|
||||
blt _022FB690
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_022FB6E0: .word DIRECTIONS_XY
|
||||
arm_func_end AreEntitiesAdjacent
|
||||
|
||||
arm_func_start ov29_022FB6E4
|
||||
ov29_022FB6E4: ; 0x022FB6E4
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl IsMonster__022F9720
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
ldr r0, [r4, #0xb4]
|
||||
ldrb r0, [r0, #0x48]
|
||||
cmp r0, #0xd6
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end ov29_022FB6E4
|
||||
|
||||
arm_func_start ov29_022FB718
|
||||
ov29_022FB718: ; 0x022FB718
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
mov sl, r0
|
||||
bl EntityIsValid__022F7364
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
ldr sb, [sl, #0xb4]
|
||||
mov r1, #0
|
||||
mov r0, sl
|
||||
strh r1, [sb, #0x16]
|
||||
bl Conversion2IsActive
|
||||
mov r6, r0
|
||||
mov r0, sl
|
||||
mov r1, #0x38
|
||||
ldr r4, [sl, #0xb4]
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
ldrne r0, _022FB834 ; =_020A1870
|
||||
mov r8, #0
|
||||
ldrnesh r1, [r4, #0x16]
|
||||
ldrnesh r0, [r0]
|
||||
#ifdef JAPAN
|
||||
add r5, r4, #0x120
|
||||
#else
|
||||
add r5, r4, #0x124
|
||||
#endif
|
||||
mov fp, r8
|
||||
addne r0, r1, r0
|
||||
strneh r0, [r4, #0x16]
|
||||
mov r4, #1
|
||||
_022FB77C:
|
||||
ldrb r0, [r5, r8, lsl #3]
|
||||
add r7, r5, r8, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, r4
|
||||
moveq r0, fp
|
||||
tst r0, #0xff
|
||||
beq _022FB7C0
|
||||
ldrh r2, [r7, #2]
|
||||
mov r0, sl
|
||||
mov r1, #0x39
|
||||
bic r2, r2, #0x100
|
||||
strh r2, [r7, #2]
|
||||
bl IqSkillIsEnabled
|
||||
cmp r0, #0
|
||||
ldrneh r0, [r7, #2]
|
||||
orrne r0, r0, #0x100
|
||||
strneh r0, [r7, #2]
|
||||
_022FB7C0:
|
||||
add r0, r8, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r8, r0, asr #0x10
|
||||
cmp r8, #4
|
||||
blt _022FB77C
|
||||
mov r0, sl
|
||||
bl ov29_02348100
|
||||
cmp r6, #2
|
||||
bne _022FB7FC
|
||||
mov r0, sl
|
||||
bl Conversion2IsActive
|
||||
cmp r0, #0
|
||||
bne _022FB7FC
|
||||
mov r0, sl
|
||||
bl ov29_02307CE0
|
||||
_022FB7FC:
|
||||
ldrsh r1, [sb, #0x12]
|
||||
ldrsh r0, [sb, #0x16]
|
||||
ldr r2, _022FB838 ; =0x000003E7
|
||||
add r1, r1, r0
|
||||
cmp r1, r2
|
||||
ldrsh r0, [sb, #0x10]
|
||||
movle r2, r1
|
||||
cmp r0, r2
|
||||
ldmleia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
ldr r0, _022FB838 ; =0x000003E7
|
||||
cmp r1, r0
|
||||
movgt r1, r0
|
||||
strh r1, [sb, #0x10]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_022FB834: .word _020A1870
|
||||
_022FB838: .word 0x000003E7
|
||||
arm_func_end ov29_022FB718
|
||||
|
||||
arm_func_start ov29_022FB83C
|
||||
ov29_022FB83C: ; 0x022FB83C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
|
||||
mov sl, r0
|
||||
mov sb, r1
|
||||
bl EntityIsValid__022F7364
|
||||
cmp r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
||||
ldr r8, [sl, #0xb4]
|
||||
mov r7, #0
|
||||
#ifdef JAPAN
|
||||
add r6, r8, #0x120
|
||||
#else
|
||||
add r6, r8, #0x124
|
||||
#endif
|
||||
mov r4, r7
|
||||
mov r5, #1
|
||||
_022FB868:
|
||||
ldrb r0, [r6, r7, lsl #3]
|
||||
mov r1, r7, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, r5
|
||||
moveq r0, r4
|
||||
tst r0, #0xff
|
||||
beq _022FB88C
|
||||
add r0, r6, r1
|
||||
bl GetMoveBasePp
|
||||
_022FB88C:
|
||||
add r0, r7, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r7, r0, asr #0x10
|
||||
cmp r7, #4
|
||||
blt _022FB868
|
||||
mov r0, sl
|
||||
bl ov29_022FB718
|
||||
cmp sb, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
||||
ldrsh r2, [r8, #0x12]
|
||||
ldrsh r1, [r8, #0x16]
|
||||
ldr r0, _022FB91C ; =0x000003E7
|
||||
mov sb, #0
|
||||
add r1, r2, r1
|
||||
cmp r1, r0
|
||||
movgt r1, r0
|
||||
strh r1, [r8, #0x10]
|
||||
#ifdef JAPAN
|
||||
add r6, r8, #0x120
|
||||
#else
|
||||
add r6, r8, #0x124
|
||||
#endif
|
||||
mov r4, sb
|
||||
mov r5, #1
|
||||
_022FB8DC:
|
||||
ldrb r0, [r6, sb, lsl #3]
|
||||
add r7, r6, sb, lsl #3
|
||||
tst r0, #1
|
||||
movne r0, r5
|
||||
moveq r0, r4
|
||||
tst r0, #0xff
|
||||
beq _022FB904
|
||||
mov r0, r7
|
||||
bl GetMaxPp
|
||||
strb r0, [r7, #6]
|
||||
_022FB904:
|
||||
add r0, sb, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov sb, r0, asr #0x10
|
||||
cmp sb, #4
|
||||
blt _022FB8DC
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
|
||||
.align 2, 0
|
||||
_022FB91C: .word 0x000003E7
|
||||
arm_func_end ov29_022FB83C
|
||||
|
||||
arm_func_start ov29_022FB920
|
||||
ov29_022FB920: ; 0x022FB920
|
||||
#ifdef EUROPE
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r5, _022FB980 ; =DUNGEON_PTR
|
||||
mov r4, r0
|
||||
mov r6, #0
|
||||
_022FC33C_EU:
|
||||
ldr r0, [r5]
|
||||
add r0, r0, r6, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r0, [r0, #0xb28]
|
||||
bl ov29_022FB718
|
||||
add r0, r6, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r6, r0, asr #0x10
|
||||
cmp r6, #4
|
||||
blt _022FC33C_EU
|
||||
bl UpdateMapSurveyorFlag
|
||||
cmp r0, #0
|
||||
cmpne r4, #0
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
bl UpdateMinimap
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
#else
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldr r4, _022FB980 ; =DUNGEON_PTR
|
||||
mov r5, #0
|
||||
_022FB92C:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
#ifdef JAPAN
|
||||
ldr r0, [r0, #0xa84]
|
||||
#else
|
||||
ldr r0, [r0, #0xb28]
|
||||
#endif
|
||||
bl ov29_022FB718
|
||||
add r0, r5, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r5, r0, asr #0x10
|
||||
cmp r5, #4
|
||||
blt _022FB92C
|
||||
mov r0, #0x41
|
||||
bl TeamMemberHasEnabledIqSkill
|
||||
cmp r0, #0
|
||||
ldrne r0, _022FB980 ; =DUNGEON_PTR
|
||||
movne r1, #1
|
||||
ldreq r0, _022FB980 ; =DUNGEON_PTR
|
||||
moveq r1, #0
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x1a000
|
||||
#ifdef JAPAN
|
||||
strb r1, [r0, #0x19d]
|
||||
#else
|
||||
strb r1, [r0, #0x241]
|
||||
#endif
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
#endif
|
||||
.align 2, 0
|
||||
_022FB980: .word DUNGEON_PTR
|
||||
arm_func_end ov29_022FB920
|
||||
|
||||
arm_func_start ov29_022FB984
|
||||
ov29_022FB984: ; 0x022FB984
|
||||
mov r0, #0
|
||||
bx lr
|
||||
arm_func_end ov29_022FB984
|
||||
|
||||
arm_func_start ov29_022FB98C
|
||||
ov29_022FB98C: ; 0x022FB98C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r2, #1
|
||||
ldr r0, _022FB9B8 ; =0x0000270F
|
||||
mov r4, r1
|
||||
sub r3, r2, #2
|
||||
bl DisplayAnimatedNumbers
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl ov29_022E576C
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_022FB9B8: .word 0x0000270F
|
||||
arm_func_end ov29_022FB98C
|
||||
|
||||
arm_func_start ov29_022FB9BC
|
||||
ov29_022FB9BC: ; 0x022FB9BC
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r0, [r0, #0xb4]
|
||||
ldrb r0, [r0, #0xbc]
|
||||
bl IsSecretBazaarNpcBehavior
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end ov29_022FB9BC
|
||||
|
||||
arm_func_start ov29_022FB9E0
|
||||
ov29_022FB9E0: ; 0x022FB9E0
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl IsMonster__022F9720
|
||||
cmp r0, #0
|
||||
beq _022FBA4C
|
||||
ldr r1, [r5, #0xb4]
|
||||
mov r0, #0
|
||||
#ifdef JAPAN
|
||||
add ip, r1, #0x120
|
||||
#else
|
||||
add ip, r1, #0x124
|
||||
#endif
|
||||
mov r2, r0
|
||||
mov r3, #1
|
||||
b _022FBA44
|
||||
_022FBA10:
|
||||
ldrb r1, [ip, r0, lsl #3]
|
||||
add lr, ip, r0, lsl #3
|
||||
tst r1, #1
|
||||
movne r1, r3
|
||||
moveq r1, r2
|
||||
tst r1, #0xff
|
||||
beq _022FBA38
|
||||
ldrh r1, [lr, #4]
|
||||
cmp r1, r4
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
_022FBA38:
|
||||
add r0, r0, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, asr #0x10
|
||||
_022FBA44:
|
||||
cmp r0, #4
|
||||
blt _022FBA10
|
||||
_022FBA4C:
|
||||
mvn r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end ov29_022FB9E0
|
||||
|
||||
arm_func_start ov29_022FBA54
|
||||
ov29_022FBA54: ; 0x022FBA54
|
||||
stmdb sp!, {r3, lr}
|
||||
bl ov29_022FB9E0
|
||||
cmp r0, #0
|
||||
movge r0, #1
|
||||
movlt r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end ov29_022FBA54
|
||||
|
||||
arm_func_start ov29_022FBA70
|
||||
ov29_022FBA70: ; 0x022FBA70
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl IsMonster__022F9720
|
||||
cmp r0, #0
|
||||
beq _022FBAAC
|
||||
ldr r0, [r4, #0xb4]
|
||||
ldrb r0, [r0, #0x48]
|
||||
cmp r0, #0xfa
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r0, #0xd9
|
||||
blo _022FBAAC
|
||||
cmp r0, #0xe4
|
||||
movlo r0, #1
|
||||
ldmloia sp!, {r4, pc}
|
||||
_022FBAAC:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end ov29_022FBA70
|
||||
|
||||
arm_func_start ov29_022FBAB4
|
||||
ov29_022FBAB4: ; 0x022FBAB4
|
||||
ldr r2, [r0, #0xb4]
|
||||
cmp r2, #0
|
||||
addne r0, r2, #0x100
|
||||
movne r1, #0
|
||||
#ifdef JAPAN
|
||||
strneh r1, [r0, #0x8e]
|
||||
strne r1, [r2, #0x188]
|
||||
#else
|
||||
strneh r1, [r0, #0x92]
|
||||
strne r1, [r2, #0x18c]
|
||||
#endif
|
||||
bx lr
|
||||
arm_func_end ov29_022FBAB4
|
||||
@@ -13,6 +13,6 @@ void ClearMonsterActionFields(struct action_data *monster_action);
|
||||
//
|
||||
// action_pointer: Pointer to the monster's action field
|
||||
// action: Value to set monster::action::action_id to.
|
||||
void SetMonsterActionFields(struct action_data *monster_action, enum action action);
|
||||
void SetMonsterActionFields(struct action_data *monster_action, enum action action_id);
|
||||
|
||||
#endif //PMDSKY_DUNGEON_ACTION_H
|
||||
|
||||
12
include/overlay_29_022FB538.h
Normal file
12
include/overlay_29_022FB538.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef PMDSKY_OVERLAY_29_022FB538_H
|
||||
#define PMDSKY_OVERLAY_29_022FB538_H
|
||||
|
||||
#include "dungeon_mode.h"
|
||||
|
||||
#ifndef JAPAN
|
||||
// If there is a decoy on the floor that the entity can see, sets the entity's decoy_ai_tracker to 1 or 2,
|
||||
// depending on whether the attacker who caused the decoy status is on the team or not, respectively.
|
||||
void SetDecoyAiTracker(struct entity* entity);
|
||||
#endif
|
||||
|
||||
#endif //PMDSKY_OVERLAY_29_022FB538_H
|
||||
2
main.lsf
2
main.lsf
@@ -301,6 +301,8 @@ Overlay OVY_29
|
||||
Object asm/overlay_29_022F7388.o
|
||||
Object src/overlay_29_022F9720.o
|
||||
Object asm/overlay_29_022F9744.o
|
||||
Object src/overlay_29_022FB538.o
|
||||
Object asm/overlay_29_022FB5EC.o
|
||||
Object src/joined_at_checks.o
|
||||
Object asm/overlay_29_022FBB1C.o
|
||||
Object src/overlay_29_022FC99C.o
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "dungeon_util_static.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "dungeon_visibility.h"
|
||||
#include "overlay_29_022FB538.h"
|
||||
#include "status_checks.h"
|
||||
#include "targeting.h"
|
||||
|
||||
@@ -29,7 +30,6 @@ extern void SetActionPassTurnOrWalk(struct action_data *monster_action, s16 mons
|
||||
extern void ChooseAiMove(struct entity *monster);
|
||||
extern bool8 GetCanMoveFlag(s16 monster_id);
|
||||
extern void AiMovement(struct entity *monster, bool8 show_run_away_effect);
|
||||
extern void SetDecoyAiTracker(struct entity* entity);
|
||||
|
||||
void RunMonsterAi(struct entity *monster, u32 unused)
|
||||
{
|
||||
@@ -37,12 +37,12 @@ void RunMonsterAi(struct entity *monster, u32 unused)
|
||||
if (pokemon_info->flags & MOVEMENT_FLAG_SWAPPING_PLACES_PETRIFIED_ALLY)
|
||||
{
|
||||
if (pokemon_info->frozen_class_status.freeze == STATUS_FROZEN_PETRIFIED)
|
||||
{
|
||||
EndFrozenClassStatus(monster, monster, TRUE);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
pokemon_info->decoy_ai_tracker = DECOY_AI_NONE;
|
||||
|
||||
if (pokemon_info->monster_behavior <= BEHAVIOR_FIXED_ENEMY || ShouldRunMonsterAi(monster))
|
||||
{
|
||||
if (pokemon_info->monster_behavior != BEHAVIOR_RESCUE_TARGET && pokemon_info->use_held_item)
|
||||
@@ -54,12 +54,13 @@ void RunMonsterAi(struct entity *monster, u32 unused)
|
||||
LogMessageByIdWithPopupCheckUser(monster, CANNOT_USE_ITEM_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
AiDecideUseItem(monster);
|
||||
|
||||
if (pokemon_info->action.action_id != ACTION_NOTHING)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!HasStatusThatPreventsActing(monster))
|
||||
{
|
||||
#ifdef JAPAN
|
||||
@@ -70,13 +71,10 @@ void RunMonsterAi(struct entity *monster, u32 unused)
|
||||
struct entity *target = DUNGEON_PTR[0]->active_monster_ptrs[i];
|
||||
bool8 entity_is_valid;
|
||||
if (target == NULL)
|
||||
{
|
||||
entity_is_valid = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
entity_is_valid = target->type != ENTITY_NOTHING;
|
||||
}
|
||||
|
||||
if (entity_is_valid &&
|
||||
GetEntInfo(target)->curse_class_status.curse == STATUS_CURSE_DECOY &&
|
||||
CanSeeTarget(monster, target))
|
||||
@@ -89,7 +87,9 @@ void RunMonsterAi(struct entity *monster, u32 unused)
|
||||
#else
|
||||
SetDecoyAiTracker(monster);
|
||||
#endif
|
||||
|
||||
ClearMonsterActionFields(&pokemon_info->action);
|
||||
|
||||
if (pokemon_info->monster_behavior == BEHAVIOR_RESCUE_TARGET)
|
||||
{
|
||||
SetActionPassTurnOrWalk(&pokemon_info->action, pokemon_info->id);
|
||||
@@ -98,27 +98,27 @@ void RunMonsterAi(struct entity *monster, u32 unused)
|
||||
pokemon_info->target_pos.y = monster->pos.y - 1;
|
||||
return;
|
||||
}
|
||||
|
||||
AiDecideUseItem(monster);
|
||||
|
||||
if (pokemon_info->action.action_id == ACTION_NOTHING)
|
||||
{
|
||||
if (!IqSkillIsEnabled(monster, IQ_DEDICATED_TRAVELER))
|
||||
{
|
||||
ChooseAiMove(monster);
|
||||
|
||||
if (pokemon_info->action.action_id != ACTION_NOTHING)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (pokemon_info->cringe_class_status.cringe == STATUS_CRINGE_CONFUSED)
|
||||
{
|
||||
SetActionPassTurnOrWalk(&pokemon_info->action, pokemon_info->id);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!GetCanMoveFlag(pokemon_info->id))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AiMovement(monster, TRUE);
|
||||
|
||||
if (pokemon_info->is_not_team_member && IqSkillIsEnabled(monster, IQ_EXCLUSIVE_MOVE_USER) && pokemon_info->action.action_id <= ACTION_PASS_TURN)
|
||||
{
|
||||
SubstitutePlaceholderStringTags(0, monster, 0);
|
||||
@@ -127,20 +127,21 @@ void RunMonsterAi(struct entity *monster, u32 unused)
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (pokemon_info->cringe_class_status.cringe == STATUS_CRINGE_CONFUSED)
|
||||
{
|
||||
SetActionPassTurnOrWalk(&pokemon_info->action, pokemon_info->id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetCanMoveFlag(pokemon_info->id))
|
||||
{
|
||||
AiMovement(monster, TRUE);
|
||||
}
|
||||
|
||||
if (pokemon_info->action.action_id != ACTION_NOTHING && pokemon_info->action.action_id != ACTION_PASS_TURN)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ChooseAiMove(monster);
|
||||
|
||||
if (GetCanMoveFlag(pokemon_info->id) &&
|
||||
pokemon_info->is_not_team_member &&
|
||||
IqSkillIsEnabled(monster, IQ_EXCLUSIVE_MOVE_USER) &&
|
||||
@@ -149,6 +150,7 @@ void RunMonsterAi(struct entity *monster, u32 unused)
|
||||
SubstitutePlaceholderStringTags(0, monster, 0);
|
||||
LogMessageByIdWithPopupCheckUser(monster, WATCHING_CAREFULLY_MESSAGE);
|
||||
}
|
||||
|
||||
if (pokemon_info->action.action_id != ACTION_NOTHING && pokemon_info->action.action_id != ACTION_PASS_TURN)
|
||||
{
|
||||
pokemon_info->ai_not_next_to_target = FALSE;
|
||||
|
||||
35
src/overlay_29_022FB538.c
Normal file
35
src/overlay_29_022FB538.c
Normal file
@@ -0,0 +1,35 @@
|
||||
#include "overlay_29_022FB538.h"
|
||||
#include "dungeon.h"
|
||||
#include "dungeon_util_static.h"
|
||||
#include "dungeon_visibility.h"
|
||||
#include "overlay_29_022F7364.h"
|
||||
#include "targeting.h"
|
||||
|
||||
extern struct dungeon *DUNGEON_PTR[];
|
||||
|
||||
#ifndef JAPAN
|
||||
void SetDecoyAiTracker(struct entity* entity)
|
||||
{
|
||||
if (!EntityIsValid__022F7364(entity))
|
||||
return;
|
||||
|
||||
struct monster *pokemon_info = GetEntInfo(entity);
|
||||
pokemon_info->decoy_ai_tracker = DECOY_AI_NONE;
|
||||
|
||||
if (!DUNGEON_PTR[0]->decoy_is_active)
|
||||
return;
|
||||
|
||||
for (s32 i = 0; i < DUNGEON_MAX_POKEMON; i++)
|
||||
{
|
||||
struct entity *target = DUNGEON_PTR[0]->active_monster_ptrs[i];
|
||||
if (EntityIsValid__022F7364(target) &&
|
||||
target != entity &&
|
||||
GetEntInfo(target)->curse_class_status.curse == STATUS_CURSE_DECOY &&
|
||||
CanSeeTarget(entity, target))
|
||||
{
|
||||
pokemon_info->decoy_ai_tracker = GetEntInfo(target)->curse_class_status.curse_applier_non_team_member_flag ? DECOY_AI_WILD : DECOY_AI_TEAM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user