mirror of
https://github.com/pret/pmd-sky.git
synced 2026-09-30 14:18:10 -05:00
Merge pull request #115 from AnonymousRandomPerson/main
Some checks are pending
build / build (push) Waiting to run
Some checks are pending
build / build (push) Waiting to run
More AI decomp
This commit is contained in:
@@ -1,48 +1,22 @@
|
||||
#pragma once
|
||||
.public abs
|
||||
.public CanSeeInvisibleMonsters
|
||||
.public DrawMinimapTile
|
||||
.public DUNGEON_PTR
|
||||
.public DungeonGetSpriteIndex
|
||||
.public EntityIsValid__022E1A1C
|
||||
.public EntityIsValid__022E32E8
|
||||
.public GetForcedLossReason
|
||||
.public GetIdleAnimationId
|
||||
.public GetMonsterApparentId
|
||||
.public GetMonsterName
|
||||
.public GetSpriteSize
|
||||
.public GetTileSafe
|
||||
.public HasDropeyeStatus
|
||||
.public HiddenStairsPresent
|
||||
.public IsBlinded
|
||||
.public IsPositionActuallyInSight
|
||||
.public IsPositionInSight
|
||||
.public ItemIsActive__022E330C
|
||||
.public PopulateActiveMonsterPtrs
|
||||
.public SECONDARY_TERRAIN_TYPES
|
||||
.public ov29_022DE954
|
||||
.public ov29_022DE9F8
|
||||
.public ov29_022DEA10
|
||||
.public ov29_022DEA1C
|
||||
.public ov29_022E34C8
|
||||
.public ov29_022E3534
|
||||
.public ov29_022E3A58
|
||||
.public ov29_022ED82C
|
||||
.public ov29_022EDF7C
|
||||
.public ov29_0230040C
|
||||
.public ov29_023047DC
|
||||
.public ov29_022E2CA0
|
||||
.public ov29_022E2D3C
|
||||
.public ov29_02304830
|
||||
.public ov29_02304954
|
||||
.public ov29_0233711C
|
||||
.public ov29_023372A4
|
||||
.public ov29_02344BA8
|
||||
.public ov29_0234B034
|
||||
.public ov29_0237C754
|
||||
.public ov29_0237C79C
|
||||
.public ov29_0237C84C
|
||||
.public SECONDARY_TERRAIN_TYPES
|
||||
.public strcpy
|
||||
.public StringFromId
|
||||
.public sub_02009194
|
||||
.public sub_020091B0
|
||||
.public TeamMemberHasEnabledIqSkill
|
||||
.public UpdateMinimap
|
||||
.public UpdateTrapsVisibility
|
||||
|
||||
34
asm/include/overlay_29_022E2810.inc
Normal file
34
asm/include/overlay_29_022E2810.inc
Normal file
@@ -0,0 +1,34 @@
|
||||
#pragma once
|
||||
.public CanSeeInvisibleMonsters
|
||||
.public DUNGEON_PTR
|
||||
.public DrawMinimapTile
|
||||
.public EntityIsValid__022E1A1C
|
||||
.public EntityIsValid__022E32E8
|
||||
.public GetForcedLossReason
|
||||
.public GetMonsterName
|
||||
.public HasDropeyeStatus
|
||||
.public IsBlinded
|
||||
.public IsPositionActuallyInSight
|
||||
.public IsPositionInSight
|
||||
.public ItemIsActive__022E330C
|
||||
.public StringFromId
|
||||
.public TeamMemberHasEnabledIqSkill
|
||||
.public UpdateMinimap
|
||||
.public UpdateTrapsVisibility
|
||||
.public abs
|
||||
.public ov29_022E34C8
|
||||
.public ov29_022E3534
|
||||
.public ov29_022E3A58
|
||||
.public ov29_022ED82C
|
||||
.public ov29_022EDF7C
|
||||
.public ov29_0230040C
|
||||
.public ov29_023047DC
|
||||
.public ov29_02304954
|
||||
.public ov29_0233711C
|
||||
.public ov29_023372A4
|
||||
.public ov29_02344BA8
|
||||
.public ov29_0234B034
|
||||
.public ov29_0237C84C
|
||||
.public strcpy
|
||||
.public sub_02009194
|
||||
.public sub_020091B0
|
||||
@@ -1,112 +1,53 @@
|
||||
#pragma once
|
||||
.public AddMoneyCarried
|
||||
.public AdvanceFrame
|
||||
.public ApplyItemEffect
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public CleanStickyItemsInBag
|
||||
.public ClearItem
|
||||
.public DIRECTIONS_XY
|
||||
.public DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST
|
||||
.public DISPLACEMENTS_WITHIN_3
|
||||
.public DUNGEON_PTR
|
||||
.public DisplayMessage2
|
||||
.public DoesProjectileHitTarget
|
||||
.public DrawMinimapTile
|
||||
.public DungeonRand16Bit
|
||||
.public DungeonRandInt
|
||||
.public DungeonRandOutcome__022EAB20
|
||||
.public EntityIsValid__02345698
|
||||
.public EntityIsValid__02347BA4
|
||||
.public ExclusiveItemEffectIsActive__02347B80
|
||||
.public GetActiveTeamMember
|
||||
.public GenerateItem
|
||||
.public GetActualBuyPrice
|
||||
.public GetActualSellPrice
|
||||
.public GetCurrentBagCapacity
|
||||
.public GetExclusiveItem
|
||||
.public GetItemAction
|
||||
.public GetItemAtIdx
|
||||
.public GetItemCategoryVeneer
|
||||
.public GetItemInfo
|
||||
.public GetItemMoveId16
|
||||
.public GetItemSpriteId
|
||||
.public GetItemToUseByIndex
|
||||
.public GetLeader
|
||||
.public GetTile
|
||||
.public GetTileSafe
|
||||
.public GetTreasureBoxChances
|
||||
.public IncrementEntityPixelPosXY
|
||||
.public InitMove
|
||||
.public InitStandardItem
|
||||
.public IqSkillIsEnabled
|
||||
.public IsCurrentFixedRoomBossFight
|
||||
.public IsCurrentMissionType
|
||||
.public IsHM
|
||||
.public IsLosableItem
|
||||
.public IsMarowakTrainingMaze
|
||||
.public IsMonsterIdInNormalRange
|
||||
.public IsNotMoney
|
||||
.public IsShoppableItem
|
||||
.public IsUnown
|
||||
.public IsWaterTileset
|
||||
.public ItemIsActive__02347B50
|
||||
.public ItemZInit
|
||||
.public LogMessageByIdQuiet
|
||||
.public LogMessageByIdWithPopupCheckUser
|
||||
.public LogMessageByIdWithPopupCheckUserTarget
|
||||
.public LogMessageByIdWithPopupCheckUserUnknown
|
||||
.public MONEY_QUANTITY_TABLE
|
||||
.public MonsterHasEmbargoStatus
|
||||
.public RemoveEmptyItemsInBag
|
||||
.public RetrieveFromItemList1
|
||||
.public SECONDARY_TERRAIN_TYPES
|
||||
.public SetEntityPixelPosXY
|
||||
.public SetItemAcquired
|
||||
.public ShouldDisplayEntityWrapper
|
||||
.public SpawnItem
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public TestItemAiFlag
|
||||
.public TwoTurnMoveForcedMiss
|
||||
.public UNOWN_STONE_DROP_CHANCE
|
||||
.public UpdateEntityPixelPos
|
||||
.public YesNoMenu
|
||||
.public _020AFC4C
|
||||
.public _s32_div_f
|
||||
.public abs
|
||||
.public ov10_022C44C8
|
||||
.public ov10_022C48EC
|
||||
.public ov10_022C4CD8
|
||||
.public ov29_022E09E8
|
||||
.public ov29_022E563C
|
||||
.public ov29_022E9488
|
||||
.public ov29_022EACBC
|
||||
.public ov29_022EBB8C
|
||||
.public ov29_022EBB98
|
||||
.public ov29_022FAFD4
|
||||
.public ov29_022FB51C
|
||||
.public ov29_022FB920
|
||||
.public ov29_022FBA54
|
||||
.public ov29_022FBA70
|
||||
.public ov29_023009A0
|
||||
.public ov29_02307BDC
|
||||
.public ov29_02338430
|
||||
.public ov29_02344B44
|
||||
.public ov29_02344B70
|
||||
.public ov29_02344BF8
|
||||
.public ov29_02347378
|
||||
.public ov29_0234B084
|
||||
.public ov29_0234B4CC
|
||||
.public ov29_023516FC
|
||||
.public ov29_023531BC
|
||||
.public ov29_023531C8
|
||||
.public ov29_023537B4
|
||||
.public ov29_023537BC
|
||||
.public ov29_0237C864
|
||||
.public sub_020018D0
|
||||
.public sub_0200CF6C
|
||||
.public sub_0200D1FC
|
||||
.public sub_0200D894
|
||||
.public sub_0200D8AC
|
||||
.public sub_0201B9F8
|
||||
.public sub_02024FE8
|
||||
.public sub_0204F7A8
|
||||
.public sub_02053D1C
|
||||
.public sub_02057CE8
|
||||
|
||||
75
asm/include/overlay_29_02346834.inc
Normal file
75
asm/include/overlay_29_02346834.inc
Normal file
@@ -0,0 +1,75 @@
|
||||
#pragma once
|
||||
.public AddMoneyCarried
|
||||
.public AdvanceFrame
|
||||
.public ApplyItemEffect
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public CleanStickyItemsInBag
|
||||
.public ClearItem
|
||||
.public DIRECTIONS_XY
|
||||
.public DUNGEON_PTR
|
||||
.public DoesProjectileHitTarget
|
||||
.public DungeonRand16Bit
|
||||
.public DungeonRandInt
|
||||
.public EntityIsValid__02345698
|
||||
.public EntityIsValid__02347BA4
|
||||
.public ExclusiveItemEffectIsActive__02347B80
|
||||
.public GetActiveTeamMember
|
||||
.public GetCurrentBagCapacity
|
||||
.public GetItemAction
|
||||
.public GetItemAtIdx
|
||||
.public GetItemCategoryVeneer
|
||||
.public GetItemMoveId16
|
||||
.public GetItemToUseByIndex
|
||||
.public GetLeader
|
||||
.public GetTile
|
||||
.public IncrementEntityPixelPosXY
|
||||
.public InitMove
|
||||
.public InitStandardItem
|
||||
.public IqSkillIsEnabled
|
||||
.public IsCurrentMissionType
|
||||
.public IsHM
|
||||
.public IsLosableItem
|
||||
.public IsMarowakTrainingMaze
|
||||
.public IsMonsterIdInNormalRange
|
||||
.public IsNotMoney
|
||||
.public IsWaterTileset
|
||||
.public ItemIsActive__02347B50
|
||||
.public ItemZInit
|
||||
.public LogMessageByIdWithPopupCheckUser
|
||||
.public LogMessageByIdWithPopupCheckUserTarget
|
||||
.public MONEY_QUANTITY_TABLE
|
||||
.public MonsterHasEmbargoStatus
|
||||
.public RemoveEmptyItemsInBag
|
||||
.public SetEntityPixelPosXY
|
||||
.public SetItemAcquired
|
||||
.public SpawnDroppedItem
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public TestItemAiFlag
|
||||
.public TwoTurnMoveForcedMiss
|
||||
.public UpdateEntityPixelPos
|
||||
.public YesNoMenu
|
||||
.public _s32_div_f
|
||||
.public abs
|
||||
.public ov10_022C4CD8
|
||||
.public ov29_022E09E8
|
||||
.public ov29_022E9488
|
||||
.public ov29_022EBB8C
|
||||
.public ov29_022EBB98
|
||||
.public ov29_022FAFD4
|
||||
.public ov29_022FB920
|
||||
.public ov29_022FBA54
|
||||
.public ov29_022FBA70
|
||||
.public ov29_023009A0
|
||||
.public ov29_02307BDC
|
||||
.public ov29_02344B44
|
||||
.public ov29_02344B70
|
||||
.public ov29_023457C8
|
||||
.public ov29_0234B4CC
|
||||
.public ov29_023516FC
|
||||
.public ov29_023531C8
|
||||
.public sub_020018D0
|
||||
.public sub_0200CF6C
|
||||
.public sub_0200D894
|
||||
.public sub_0200D8AC
|
||||
.public sub_02053D1C
|
||||
.public sub_02057CE8
|
||||
@@ -1068,972 +1068,3 @@ ov29_022E273C: ; 0x022E273C
|
||||
.align 2, 0
|
||||
_022E2748: .word ShouldDisplayEntity
|
||||
arm_func_end ov29_022E273C
|
||||
|
||||
arm_func_start CanSeeTarget
|
||||
CanSeeTarget: ; 0x022E274C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r4
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldrb r0, [r4, #0x20]
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldr r0, [r4]
|
||||
cmp r0, #1
|
||||
bne _022E27F4
|
||||
ldr r0, [r5]
|
||||
cmp r0, #1
|
||||
bne _022E27E0
|
||||
mov r0, r5
|
||||
bl CanSeeInvisibleMonsters
|
||||
cmp r0, #0
|
||||
ldreq r0, [r4, #0xb4]
|
||||
ldreqb r0, [r0, #0xef]
|
||||
cmpeq r0, #1
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r5
|
||||
mov r1, #1
|
||||
bl IsBlinded
|
||||
cmp r0, #0
|
||||
beq _022E27F4
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022E27E0:
|
||||
ldr r0, [r4, #0xb4]
|
||||
ldrb r0, [r0, #0xef]
|
||||
cmp r0, #1
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
_022E27F4:
|
||||
mov r0, r5
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
add r0, r5, #4
|
||||
add r1, r4, #4
|
||||
bl IsPositionActuallyInSight
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end CanSeeTarget
|
||||
|
||||
arm_func_start CanTargetEntity
|
||||
CanTargetEntity: ; 0x022E2810
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r4
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldrb r0, [r4, #0x20]
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldr r0, [r4]
|
||||
cmp r0, #1
|
||||
bne _022E28B8
|
||||
ldr r0, [r5]
|
||||
cmp r0, #1
|
||||
bne _022E28A4
|
||||
mov r0, r5
|
||||
bl CanSeeInvisibleMonsters
|
||||
cmp r0, #0
|
||||
ldreq r0, [r4, #0xb4]
|
||||
ldreqb r0, [r0, #0xef]
|
||||
cmpeq r0, #1
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r5
|
||||
mov r1, #1
|
||||
bl IsBlinded
|
||||
cmp r0, #0
|
||||
beq _022E28B8
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022E28A4:
|
||||
ldr r0, [r4, #0xb4]
|
||||
ldrb r0, [r0, #0xef]
|
||||
cmp r0, #1
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
_022E28B8:
|
||||
mov r0, r5
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
add r0, r5, #4
|
||||
add r1, r4, #4
|
||||
bl IsPositionInSight
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end CanTargetEntity
|
||||
|
||||
arm_func_start ov29_022E28D4
|
||||
ov29_022E28D4: ; 0x022E28D4
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r4
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldrb r0, [r4, #0x20]
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r5
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
add r0, r5, #4
|
||||
add r1, r4, #4
|
||||
bl IsPositionActuallyInSight
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end ov29_022E28D4
|
||||
|
||||
arm_func_start ov29_022E2930
|
||||
ov29_022E2930: ; 0x022E2930
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
mov r1, r4
|
||||
add r0, r5, #4
|
||||
bl IsPositionActuallyInSight
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end ov29_022E2930
|
||||
|
||||
arm_func_start CanTargetPosition
|
||||
CanTargetPosition: ; 0x022E2954
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
mov r1, r4
|
||||
add r0, r5, #4
|
||||
bl IsPositionInSight
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end CanTargetPosition
|
||||
|
||||
arm_func_start PopulateActiveMonsterPtrs
|
||||
PopulateActiveMonsterPtrs: ; 0x022E2978
|
||||
#ifdef JAPAN
|
||||
#define OV29_022E2978_OFFSET -0xA4
|
||||
#else
|
||||
#define OV29_022E2978_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r5, #0
|
||||
ldr r6, _022E2A34 ; =DUNGEON_PTR
|
||||
mov r4, r5
|
||||
_022E2988:
|
||||
ldr r0, [r6]
|
||||
add r0, r0, r4, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r7, [r0, #0xb28 + OV29_022E2978_OFFSET]
|
||||
mov r0, r7
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
ldrne r0, [r6]
|
||||
add r4, r4, #1
|
||||
addne r0, r0, r5, lsl #2
|
||||
addne r0, r0, #0x12000
|
||||
strne r7, [r0, #0xb78 + OV29_022E2978_OFFSET]
|
||||
addne r5, r5, #1
|
||||
cmp r4, #4
|
||||
blt _022E2988
|
||||
ldr r6, _022E2A34 ; =DUNGEON_PTR
|
||||
mov r4, #0
|
||||
_022E29CC:
|
||||
ldr r0, [r6]
|
||||
add r0, r0, r4, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r7, [r0, #0xb38 + OV29_022E2978_OFFSET]
|
||||
mov r0, r7
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
ldrne r0, [r6]
|
||||
add r4, r4, #1
|
||||
addne r0, r0, r5, lsl #2
|
||||
addne r0, r0, #0x12000
|
||||
strne r7, [r0, #0xb78 + OV29_022E2978_OFFSET]
|
||||
addne r5, r5, #1
|
||||
cmp r4, #0x10
|
||||
blt _022E29CC
|
||||
mov r2, #0
|
||||
ldr r1, _022E2A34 ; =DUNGEON_PTR
|
||||
b _022E2A28
|
||||
_022E2A14:
|
||||
ldr r0, [r1]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
str r2, [r0, #0xb78 + OV29_022E2978_OFFSET]
|
||||
add r5, r5, #1
|
||||
_022E2A28:
|
||||
cmp r5, #0x14
|
||||
blt _022E2A14
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_022E2A34: .word DUNGEON_PTR
|
||||
arm_func_end PopulateActiveMonsterPtrs
|
||||
|
||||
arm_func_start GetTeamMemberIndex
|
||||
GetTeamMemberIndex: ; 0x022E2A38
|
||||
ldr r1, _022E2A74 ; =DUNGEON_PTR
|
||||
mov r2, #0
|
||||
ldr r3, [r1]
|
||||
b _022E2A64
|
||||
_022E2A48:
|
||||
add r1, r3, r2, lsl #2
|
||||
add r1, r1, #0x12000
|
||||
#ifdef JAPAN
|
||||
ldr r1, [r1, #0xa84]
|
||||
#else
|
||||
ldr r1, [r1, #0xb28]
|
||||
#endif
|
||||
cmp r0, r1
|
||||
moveq r0, r2
|
||||
bxeq lr
|
||||
add r2, r2, #1
|
||||
_022E2A64:
|
||||
cmp r2, #4
|
||||
blt _022E2A48
|
||||
mvn r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_022E2A74: .word DUNGEON_PTR
|
||||
arm_func_end GetTeamMemberIndex
|
||||
|
||||
arm_func_start ov29_022E2A78
|
||||
ov29_022E2A78: ; 0x022E2A78
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r2, [r1]
|
||||
mov r4, r0
|
||||
cmp r2, #1
|
||||
beq _022E2AA0
|
||||
cmp r2, #2
|
||||
beq _022E2AAC
|
||||
cmp r2, #3
|
||||
ldmeqia sp!, {r4, pc}
|
||||
b _022E2ABC
|
||||
_022E2AA0:
|
||||
ldr r1, [r1, #0xb4]
|
||||
bl GetMonsterName
|
||||
ldmia sp!, {r4, pc}
|
||||
_022E2AAC:
|
||||
ldr r1, [r1, #0xb4]
|
||||
ldrb r1, [r1]
|
||||
bl ov29_022ED82C
|
||||
ldmia sp!, {r4, pc}
|
||||
_022E2ABC:
|
||||
ldr r0, _022E2AD4 ; =0x00000A42
|
||||
bl StringFromId
|
||||
mov r1, r0
|
||||
mov r0, r4
|
||||
bl strcpy
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_022E2AD4: .word 0x00000B42
|
||||
#else
|
||||
_022E2AD4: .word 0x00000A42
|
||||
#endif
|
||||
arm_func_end ov29_022E2A78
|
||||
|
||||
arm_func_start SubstitutePlaceholderStringTags
|
||||
SubstitutePlaceholderStringTags: ; 0x022E2AD8
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r6, r1
|
||||
mov r7, r0
|
||||
mov r5, r2
|
||||
bl ov29_0234B034
|
||||
ldr r1, [r6]
|
||||
mov r4, r0
|
||||
cmp r1, #1
|
||||
beq _022E2B10
|
||||
cmp r1, #2
|
||||
beq _022E2B3C
|
||||
cmp r1, #3
|
||||
beq _022E2B2C
|
||||
b _022E2B50
|
||||
_022E2B10:
|
||||
mov r1, #0
|
||||
str r1, [sp]
|
||||
ldr r2, [r6, #0xb4]
|
||||
mov r1, r7
|
||||
mov r3, r5
|
||||
bl ov29_0230040C
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E2B2C:
|
||||
ldr r2, [r6, #0xb4]
|
||||
mov r1, r7
|
||||
bl ov29_02344BA8
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E2B3C:
|
||||
ldr r2, [r6, #0xb4]
|
||||
mov r1, r7
|
||||
ldrb r2, [r2]
|
||||
bl ov29_022EDF7C
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E2B50:
|
||||
ldr r0, _022E2B64 ; =0x00000A42
|
||||
bl StringFromId
|
||||
add r1, r4, r7, lsl #2
|
||||
str r0, [r1, #0x38]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_022E2B64: .word 0x00000B42
|
||||
#else
|
||||
_022E2B64: .word 0x00000A42
|
||||
#endif
|
||||
arm_func_end SubstitutePlaceholderStringTags
|
||||
|
||||
#ifdef EUROPE
|
||||
arm_func_start ov29_022E34A8_EU
|
||||
ov29_022E34A8_EU: ; 0x022E34A8
|
||||
stmdb sp!, {r3, lr}
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
beq _022E34DC
|
||||
ldr r0, _022E34E8 ; =0x02354138
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, #8]
|
||||
cmp r0, #0
|
||||
bne _022E34DC
|
||||
bl GetForcedLossReason
|
||||
cmp r0, #1
|
||||
movne r0, #1
|
||||
bne _022E34E0
|
||||
_022E34DC:
|
||||
mov r0, #0
|
||||
_022E34E0:
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E34E8: .word 0x02354138
|
||||
arm_func_end ov29_022E34A8_EU
|
||||
#endif
|
||||
|
||||
arm_func_start ov29_022E2B68
|
||||
ov29_022E2B68: ; 0x022E2B68
|
||||
#ifdef JAPAN
|
||||
#define OV29_022E2B68_OFFSET -0xA4
|
||||
#else
|
||||
#define OV29_022E2B68_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldr r1, _022E2C5C ; =DUNGEON_PTR
|
||||
movs r5, r0
|
||||
ldr r2, [r1]
|
||||
mov r1, #0
|
||||
add r0, r2, #0x21c + OV29_022E2B68_OFFSET
|
||||
add r4, r0, #0x1a000
|
||||
strh r1, [r4, #8]
|
||||
ldr r0, _022E2C60 ; =0x0001A21C
|
||||
strh r1, [r4, #0xa]
|
||||
strh r1, [r2, r0]
|
||||
strh r1, [r4, #2]
|
||||
strh r1, [r4, #0xc]
|
||||
strh r1, [r4, #0xe]
|
||||
strh r1, [r4, #4]
|
||||
strh r1, [r4, #6]
|
||||
str r1, [r4, #0x14]
|
||||
strb r1, [r4, #0x2f]
|
||||
mov r0, #1
|
||||
strb r0, [r4, #0x30]
|
||||
strb r0, [r4, #0x31]
|
||||
str r1, [r4, #0x18]
|
||||
str r1, [r4, #0x1c]
|
||||
bne _022E2BF4
|
||||
strb r1, [r4, #0x22]
|
||||
strb r1, [r4, #0x29]
|
||||
strb r1, [r4, #0x28]
|
||||
strb r1, [r4, #0x26]
|
||||
strb r1, [r4, #0x2a]
|
||||
strb r1, [r4, #0x27]
|
||||
strb r1, [r4, #0x23]
|
||||
strb r1, [r4, #0x24]
|
||||
strb r1, [r4, #0x32]
|
||||
strb r1, [r4, #0x33]
|
||||
strb r1, [r4, #0x34]
|
||||
_022E2BF4:
|
||||
mov r1, #0
|
||||
str r1, [r4, #0x10]
|
||||
mov r0, #3
|
||||
strb r0, [r4, #0x20]
|
||||
strb r1, [r4, #0x35]
|
||||
strb r1, [r4, #0x2b]
|
||||
strb r1, [r4, #0x36]
|
||||
strb r1, [r4, #0x37]
|
||||
strb r1, [r4, #0x2d]
|
||||
mov r0, #1
|
||||
strb r0, [r4, #0x2e]
|
||||
bl ov29_022E2C6C
|
||||
ldr r1, _022E2C64 ; =0x0000FFFF
|
||||
ldr r0, _022E2C68 ; =ov29_0237C84C
|
||||
cmp r5, #0
|
||||
str r1, [r0]
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
ldr r0, _022E2C5C ; =DUNGEON_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x28000
|
||||
ldrb r0, [r0, #0x6c8 + OV29_022E2B68_OFFSET]
|
||||
ands r0, r0, #3
|
||||
strb r0, [r4, #0x21]
|
||||
moveq r0, #1
|
||||
streqb r0, [r4, #0x24]
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_022E2C5C: .word DUNGEON_PTR
|
||||
_022E2C60: .word 0x0001A21C + OV29_022E2B68_OFFSET
|
||||
_022E2C64: .word 0x0000FFFF
|
||||
_022E2C68: .word ov29_0237C84C
|
||||
arm_func_end ov29_022E2B68
|
||||
|
||||
arm_func_start ov29_022E2C6C
|
||||
ov29_022E2C6C: ; 0x022E2C6C
|
||||
ldr r0, _022E2C9C ; =DUNGEON_PTR
|
||||
mvn r1, #0
|
||||
ldr r0, [r0]
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x178
|
||||
#else
|
||||
add r0, r0, #0x21c
|
||||
#endif
|
||||
add r0, r0, #0x1a000
|
||||
strh r1, [r0, #0x3c]
|
||||
strh r1, [r0, #0x3e]
|
||||
strh r1, [r0, #0x40]
|
||||
strh r1, [r0, #0x42]
|
||||
strh r1, [r0, #0x38]
|
||||
strh r1, [r0, #0x3a]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_022E2C9C: .word DUNGEON_PTR
|
||||
arm_func_end ov29_022E2C6C
|
||||
|
||||
arm_func_start ov29_022E2CA0
|
||||
ov29_022E2CA0: ; 0x022E2CA0
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r1, _022E2D34 ; =DUNGEON_PTR
|
||||
mov r4, r0
|
||||
ldr r3, [r1]
|
||||
ldr r0, _022E2D38 ; =0x0001A21C
|
||||
ldrsh r1, [r4]
|
||||
ldrsh r2, [r3, r0]
|
||||
#ifdef JAPAN
|
||||
add r0, r3, #0x178
|
||||
#else
|
||||
add r0, r3, #0x21c
|
||||
#endif
|
||||
add r5, r0, #0x1a000
|
||||
sub r0, r2, r1
|
||||
ldr r6, [r5, #0x10]
|
||||
bl abs
|
||||
cmp r0, #6
|
||||
bgt _022E2D2C
|
||||
ldrsh r1, [r5, #2]
|
||||
ldrsh r0, [r4, #2]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, #5
|
||||
bgt _022E2D2C
|
||||
mov r0, r5
|
||||
bl ov29_022E3534
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
cmp r6, #0
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
mov r0, r6
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl IsPositionActuallyInSight
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
_022E2D2C:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_022E2D34: .word DUNGEON_PTR
|
||||
#ifdef JAPAN
|
||||
_022E2D38: .word 0x0001A178
|
||||
#else
|
||||
_022E2D38: .word 0x0001A21C
|
||||
#endif
|
||||
arm_func_end ov29_022E2CA0
|
||||
|
||||
arm_func_start ov29_022E2D3C
|
||||
ov29_022E2D3C: ; 0x022E2D3C
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r1, _022E2DD0 ; =DUNGEON_PTR
|
||||
mov r4, r0
|
||||
ldr r3, [r1]
|
||||
ldr r0, _022E2DD4 ; =0x0001A21C
|
||||
ldrsh r1, [r4]
|
||||
ldrsh r2, [r3, r0]
|
||||
#ifdef JAPAN
|
||||
add r0, r3, #0x178
|
||||
#else
|
||||
add r0, r3, #0x21c
|
||||
#endif
|
||||
add r5, r0, #0x1a000
|
||||
sub r0, r2, r1
|
||||
ldr r6, [r5, #0x10]
|
||||
bl abs
|
||||
cmp r0, #6
|
||||
bgt _022E2DC8
|
||||
ldrsh r1, [r5, #2]
|
||||
ldrsh r0, [r4, #2]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, #6
|
||||
bgt _022E2DC8
|
||||
mov r0, r5
|
||||
bl ov29_022E3534
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
cmp r6, #0
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
mov r0, r6
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl IsPositionActuallyInSight
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
_022E2DC8:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_022E2DD0: .word DUNGEON_PTR
|
||||
#ifdef JAPAN
|
||||
_022E2DD4: .word 0x0001A178
|
||||
#else
|
||||
_022E2DD4: .word 0x0001A21C
|
||||
#endif
|
||||
arm_func_end ov29_022E2D3C
|
||||
|
||||
#ifndef JAPAN
|
||||
arm_func_start UpdateMapSurveyorFlag
|
||||
UpdateMapSurveyorFlag: ; 0x022E2DD8
|
||||
#ifdef EUROPE
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r1, _022E2DF8 ; =DUNGEON_PTR
|
||||
mov r0, #0x41
|
||||
ldr r1, [r1]
|
||||
add r1, r1, #0x1a000
|
||||
ldrb r4, [r1, #0x241]
|
||||
bl TeamMemberHasEnabledIqSkill
|
||||
ldr r2, _022E2DF8 ; =DUNGEON_PTR
|
||||
ldr r1, [r2]
|
||||
add r1, r1, #0x1a000
|
||||
strb r0, [r1, #0x241]
|
||||
ldr r0, [r2]
|
||||
add r0, r0, #0x1a000
|
||||
ldrb r0, [r0, #0x241]
|
||||
cmp r4, r0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
#else
|
||||
stmdb sp!, {r3, lr}
|
||||
mov r0, #0x41
|
||||
bl TeamMemberHasEnabledIqSkill
|
||||
ldr r1, _022E2DF8 ; =DUNGEON_PTR
|
||||
ldr r1, [r1]
|
||||
add r1, r1, #0x1a000
|
||||
strb r0, [r1, #0x241]
|
||||
ldmia sp!, {r3, pc}
|
||||
#endif
|
||||
.align 2, 0
|
||||
_022E2DF8: .word DUNGEON_PTR
|
||||
arm_func_end UpdateMapSurveyorFlag
|
||||
#endif
|
||||
|
||||
arm_func_start ov29_022E2DFC
|
||||
ov29_022E2DFC: ; 0x022E2DFC
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r1, _022E2E50 ; =DUNGEON_PTR
|
||||
cmp r0, #0
|
||||
ldr r1, [r1]
|
||||
#ifdef JAPAN
|
||||
add r1, r1, #0x178
|
||||
#else
|
||||
add r1, r1, #0x21c
|
||||
#endif
|
||||
add r1, r1, #0x1a000
|
||||
str r0, [r1, #0x10]
|
||||
moveq r0, #0
|
||||
streqb r0, [r1, #0x2f]
|
||||
beq _022E2E40
|
||||
ldr r0, [r0, #0xb4]
|
||||
ldrb r0, [r0, #7]
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
streqb r0, [r1, #0x2f]
|
||||
movne r0, #1
|
||||
strneb r0, [r1, #0x2f]
|
||||
_022E2E40:
|
||||
mov r0, #0
|
||||
bl UpdateCamera
|
||||
bl ov29_022E2C6C
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E2E50: .word DUNGEON_PTR
|
||||
arm_func_end ov29_022E2DFC
|
||||
|
||||
arm_func_start PointCameraToMonster
|
||||
PointCameraToMonster: ; 0x022E2E54
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r2, _022E2EC0 ; =DUNGEON_PTR
|
||||
mov r4, r1
|
||||
ldr r1, [r2]
|
||||
cmp r0, #0
|
||||
#ifdef JAPAN
|
||||
add r1, r1, #0x178
|
||||
#else
|
||||
add r1, r1, #0x21c
|
||||
#endif
|
||||
add r2, r1, #0x1a000
|
||||
moveq r1, #0
|
||||
streqb r1, [r2, #0x2f]
|
||||
beq _022E2E98
|
||||
ldr r1, [r0, #0xb4]
|
||||
ldrb r1, [r1, #7]
|
||||
cmp r1, #0
|
||||
moveq r1, #0
|
||||
streqb r1, [r2, #0x2f]
|
||||
movne r1, #1
|
||||
strneb r1, [r2, #0x2f]
|
||||
_022E2E98:
|
||||
str r0, [r2, #0x10]
|
||||
mov r0, #0
|
||||
bl UpdateCamera
|
||||
bl ov29_022E2C6C
|
||||
bl ov29_02304954
|
||||
cmp r4, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
bl UpdateTrapsVisibility
|
||||
bl UpdateMinimap
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_022E2EC0: .word DUNGEON_PTR
|
||||
arm_func_end PointCameraToMonster
|
||||
|
||||
arm_func_start UpdateCamera
|
||||
UpdateCamera: ; 0x022E2EC4
|
||||
#ifdef JAPAN
|
||||
#define UPDATE_CAMERA_OFFSET -0xA4
|
||||
#else
|
||||
#define UPDATE_CAMERA_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #0x10
|
||||
ldr r1, _022E32DC ; =DUNGEON_PTR
|
||||
str r0, [sp]
|
||||
ldr r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _022E32D4
|
||||
add r0, r0, #0x21c + UPDATE_CAMERA_OFFSET
|
||||
add r4, r0, #0x1a000
|
||||
ldr r5, [r4, #0x10]
|
||||
cmp r5, #0
|
||||
beq _022E32D0
|
||||
mov r0, r5
|
||||
bl EntityIsValid__022E32E8
|
||||
cmp r0, #0
|
||||
beq _022E32D0
|
||||
ldrb r8, [r4, #0x32]
|
||||
ldrb sb, [r4, #0x33]
|
||||
ldrh r0, [r4, #8]
|
||||
ldr sl, [r5, #0xb4]
|
||||
mov r6, #0
|
||||
strh r0, [r4, #0xc]
|
||||
ldrh r2, [r4, #0xa]
|
||||
mov r0, r5
|
||||
mov r1, #0x18
|
||||
strh r2, [r4, #0xe]
|
||||
ldrh r2, [r4]
|
||||
mov fp, r6
|
||||
mov r7, r6
|
||||
strh r2, [r4, #4]
|
||||
ldrh r2, [r4, #2]
|
||||
str r6, [sp, #4]
|
||||
strh r2, [r4, #6]
|
||||
ldrsh r2, [r5, #4]
|
||||
strh r2, [r4]
|
||||
ldrsh r2, [r5, #6]
|
||||
strh r2, [r4, #2]
|
||||
ldr r2, [r5, #0xc]
|
||||
mov r2, r2, asr #8
|
||||
sub r2, r2, #0x80
|
||||
strh r2, [r4, #8]
|
||||
ldr r2, [r5, #0x10]
|
||||
mov r2, r2, asr #8
|
||||
sub r2, r2, #0x6c
|
||||
strh r2, [r4, #0xa]
|
||||
ldrb r2, [r4, #0x27]
|
||||
str r2, [sp, #0xc]
|
||||
ldrb r2, [r4, #0x26]
|
||||
str r2, [sp, #8]
|
||||
bl ItemIsActive__022E330C
|
||||
cmp r0, #0
|
||||
ldrneb r0, [sl, #7]
|
||||
mov r1, #0
|
||||
cmpne r0, #0
|
||||
movne r0, #1
|
||||
strneb r0, [r4, #0x26]
|
||||
strneb r0, [r4, #0x27]
|
||||
ldreqb r0, [sl, #0xf9]
|
||||
streqb r0, [r4, #0x26]
|
||||
ldreqb r0, [sl, #0xfa]
|
||||
streqb r0, [r4, #0x27]
|
||||
strb r1, [r4, #0x32]
|
||||
strb r1, [r4, #0x33]
|
||||
mov r0, r5
|
||||
mov r1, #0xe
|
||||
bl ItemIsActive__022E330C
|
||||
cmp r0, #0
|
||||
ldrneb r0, [sl, #7]
|
||||
cmpne r0, #0
|
||||
movne r0, #1
|
||||
strneb r0, [r4, #0x32]
|
||||
strneb r0, [r4, #0x33]
|
||||
ldrb r1, [r4, #0x27]
|
||||
ldr r0, [sp, #0xc]
|
||||
cmp r0, r1
|
||||
ldreqb r0, [r4, #0x32]
|
||||
ldrb r1, [r4, #0x26]
|
||||
cmpeq r8, r0
|
||||
ldr r0, [sp, #8]
|
||||
movne r6, #1
|
||||
cmp r0, r1
|
||||
ldreqb r0, [r4, #0x33]
|
||||
cmpeq sb, r0
|
||||
ldrb r0, [sl, #0xfb]
|
||||
movne fp, #1
|
||||
strb r0, [r4, #0x2a]
|
||||
ldrb r0, [r4, #0x2d]
|
||||
ldrb r8, [r4, #0x22]
|
||||
cmp r0, #0
|
||||
bne _022E309C
|
||||
mov r0, r5
|
||||
mov r1, #1
|
||||
bl IsBlinded
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
movne r2, #0xe
|
||||
strneb r0, [r4, #0x22]
|
||||
moveq r2, #0
|
||||
ldr r0, _022E32E0 ; =ov29_0237C84C
|
||||
streqb r2, [r4, #0x22]
|
||||
ldr r1, [r0]
|
||||
cmp r1, r2
|
||||
beq _022E30A8
|
||||
str r2, [r0]
|
||||
cmp r2, #0xe
|
||||
mov r0, #2
|
||||
mov r1, #0
|
||||
bne _022E3088
|
||||
bl sub_02009194
|
||||
mov r0, #3
|
||||
mov r1, #0
|
||||
bl sub_02009194
|
||||
b _022E30A8
|
||||
_022E3088:
|
||||
bl sub_020091B0
|
||||
mov r0, #3
|
||||
mov r1, #0
|
||||
bl sub_020091B0
|
||||
b _022E30A8
|
||||
_022E309C:
|
||||
ldr r1, _022E32E4 ; =0x0000FFFF
|
||||
ldr r0, _022E32E0 ; =ov29_0237C84C
|
||||
str r1, [r0]
|
||||
_022E30A8:
|
||||
ldrb r0, [r4, #0x22]
|
||||
ldrb r1, [r4, #0x29]
|
||||
cmp r8, r0
|
||||
ldrb r0, [sl, #0xf1]
|
||||
movne r7, #1
|
||||
cmp r0, #2
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
strb r0, [r4, #0x29]
|
||||
ldrb r0, [r4, #0x29]
|
||||
cmp r1, r0
|
||||
ldreq r0, _022E32DC ; =DUNGEON_PTR
|
||||
ldreq r0, [r0]
|
||||
addeq r0, r0, #0x2c000
|
||||
ldreqb r0, [r0, #0xb10 + UPDATE_CAMERA_OFFSET]
|
||||
cmpeq r0, #0
|
||||
beq _022E3108
|
||||
bl ov29_023047DC
|
||||
ldr r0, _022E32DC ; =DUNGEON_PTR
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
mov r7, #1
|
||||
add r0, r0, #0x2c000
|
||||
strb r1, [r0, #0xb10 + UPDATE_CAMERA_OFFSET]
|
||||
_022E3108:
|
||||
mov r0, r5
|
||||
ldrb r8, [r4, #0x28]
|
||||
bl CanSeeInvisibleMonsters
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
strb r0, [r4, #0x28]
|
||||
ldrb r0, [r4, #0x28]
|
||||
cmp r8, r0
|
||||
movne r7, #1
|
||||
strne r7, [sp, #4]
|
||||
ldrb r8, [r4, #0x34]
|
||||
mov r0, r5
|
||||
bl HasDropeyeStatus
|
||||
and r1, r0, #0xff
|
||||
cmp r8, r1
|
||||
strb r0, [r4, #0x34]
|
||||
movne r7, #1
|
||||
strne r7, [sp, #4]
|
||||
ldr r0, [sp, #4]
|
||||
cmp r0, #0
|
||||
beq _022E3168
|
||||
bl UpdateTrapsVisibility
|
||||
bl UpdateMinimap
|
||||
_022E3168:
|
||||
cmp r7, #0
|
||||
beq _022E3178
|
||||
mov r0, #0
|
||||
bl ov29_022E3A58
|
||||
_022E3178:
|
||||
ldr r0, [sp]
|
||||
cmp r0, #0
|
||||
beq _022E3228
|
||||
ldrb r0, [r4, #0x2c]
|
||||
cmp r0, #0
|
||||
bne _022E3228
|
||||
ldrsh r5, [r4, #8]
|
||||
ldrsh r7, [r4, #0xc]
|
||||
sub r0, r7, r5
|
||||
bl abs
|
||||
cmp r0, #8
|
||||
bge _022E31C0
|
||||
ldrsh r1, [r4, #0xe]
|
||||
ldrsh r0, [r4, #0xa]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, #8
|
||||
blt _022E31D0
|
||||
_022E31C0:
|
||||
bl UpdateTrapsVisibility
|
||||
mov r0, #1
|
||||
strb r0, [r4, #0x2c]
|
||||
b _022E3228
|
||||
_022E31D0:
|
||||
cmp r7, r5
|
||||
bge _022E31E8
|
||||
mov r0, #0xff
|
||||
mov r1, #0
|
||||
bl ov29_0233711C
|
||||
b _022E31F8
|
||||
_022E31E8:
|
||||
ble _022E31F8
|
||||
mov r0, #0
|
||||
mov r1, r0
|
||||
bl ov29_0233711C
|
||||
_022E31F8:
|
||||
ldrsh r1, [r4, #0xa]
|
||||
ldrsh r0, [r4, #0xe]
|
||||
cmp r0, r1
|
||||
bge _022E3218
|
||||
mov r0, #0
|
||||
mov r1, #0xc0
|
||||
bl ov29_023372A4
|
||||
b _022E3228
|
||||
_022E3218:
|
||||
ble _022E3228
|
||||
mov r0, #0
|
||||
mov r1, r0
|
||||
bl ov29_023372A4
|
||||
_022E3228:
|
||||
cmp fp, #0
|
||||
ldreqsh r1, [r4]
|
||||
ldreqsh r0, [r4, #4]
|
||||
cmpeq r1, r0
|
||||
ldreqsh r1, [r4, #2]
|
||||
ldreqsh r0, [r4, #6]
|
||||
cmpeq r1, r0
|
||||
beq _022E3288
|
||||
ldr r4, _022E32DC ; =DUNGEON_PTR
|
||||
mov r5, #0
|
||||
_022E3250:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r7, [r0, #0xb78 + UPDATE_CAMERA_OFFSET]
|
||||
mov r0, r7
|
||||
bl EntityIsValid__022E32E8
|
||||
cmp r0, #0
|
||||
beq _022E327C
|
||||
ldrsh r0, [r7, #4]
|
||||
ldrsh r1, [r7, #6]
|
||||
bl DrawMinimapTile
|
||||
_022E327C:
|
||||
add r5, r5, #1
|
||||
cmp r5, #0x14
|
||||
blt _022E3250
|
||||
_022E3288:
|
||||
cmp r6, #0
|
||||
beq _022E32D0
|
||||
ldr r4, _022E32DC ; =DUNGEON_PTR
|
||||
mov r5, #0
|
||||
_022E3298:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r6, [r0, #0xbc8 + UPDATE_CAMERA_OFFSET]
|
||||
mov r0, r6
|
||||
bl EntityIsValid__022E32E8
|
||||
cmp r0, #0
|
||||
beq _022E32C4
|
||||
ldrsh r0, [r6, #4]
|
||||
ldrsh r1, [r6, #6]
|
||||
bl DrawMinimapTile
|
||||
_022E32C4:
|
||||
add r5, r5, #1
|
||||
cmp r5, #0x40
|
||||
blt _022E3298
|
||||
_022E32D0:
|
||||
bl ov29_022E34C8
|
||||
_022E32D4:
|
||||
add sp, sp, #0x10
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_022E32DC: .word DUNGEON_PTR
|
||||
_022E32E0: .word ov29_0237C84C
|
||||
_022E32E4: .word 0x0000FFFF
|
||||
arm_func_end UpdateCamera
|
||||
|
||||
918
asm/overlay_29_022E2810.s
Normal file
918
asm/overlay_29_022E2810.s
Normal file
@@ -0,0 +1,918 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_022E2810.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start CanTargetEntity
|
||||
CanTargetEntity: ; 0x022E2810
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r4
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldrb r0, [r4, #0x20]
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldr r0, [r4]
|
||||
cmp r0, #1
|
||||
bne _022E28B8
|
||||
ldr r0, [r5]
|
||||
cmp r0, #1
|
||||
bne _022E28A4
|
||||
mov r0, r5
|
||||
bl CanSeeInvisibleMonsters
|
||||
cmp r0, #0
|
||||
ldreq r0, [r4, #0xb4]
|
||||
ldreqb r0, [r0, #0xef]
|
||||
cmpeq r0, #1
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r5
|
||||
mov r1, #1
|
||||
bl IsBlinded
|
||||
cmp r0, #0
|
||||
beq _022E28B8
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022E28A4:
|
||||
ldr r0, [r4, #0xb4]
|
||||
ldrb r0, [r0, #0xef]
|
||||
cmp r0, #1
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
_022E28B8:
|
||||
mov r0, r5
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
add r0, r5, #4
|
||||
add r1, r4, #4
|
||||
bl IsPositionInSight
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end CanTargetEntity
|
||||
|
||||
arm_func_start ov29_022E28D4
|
||||
ov29_022E28D4: ; 0x022E28D4
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r4
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
ldrb r0, [r4, #0x20]
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
mov r0, r5
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
add r0, r5, #4
|
||||
add r1, r4, #4
|
||||
bl IsPositionActuallyInSight
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end ov29_022E28D4
|
||||
|
||||
arm_func_start ov29_022E2930
|
||||
ov29_022E2930: ; 0x022E2930
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
mov r1, r4
|
||||
add r0, r5, #4
|
||||
bl IsPositionActuallyInSight
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end ov29_022E2930
|
||||
|
||||
arm_func_start CanTargetPosition
|
||||
CanTargetPosition: ; 0x022E2954
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
mov r1, r4
|
||||
add r0, r5, #4
|
||||
bl IsPositionInSight
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end CanTargetPosition
|
||||
|
||||
arm_func_start PopulateActiveMonsterPtrs
|
||||
PopulateActiveMonsterPtrs: ; 0x022E2978
|
||||
#ifdef JAPAN
|
||||
#define OV29_022E2978_OFFSET -0xA4
|
||||
#else
|
||||
#define OV29_022E2978_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r5, #0
|
||||
ldr r6, _022E2A34 ; =DUNGEON_PTR
|
||||
mov r4, r5
|
||||
_022E2988:
|
||||
ldr r0, [r6]
|
||||
add r0, r0, r4, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r7, [r0, #0xb28 + OV29_022E2978_OFFSET]
|
||||
mov r0, r7
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
ldrne r0, [r6]
|
||||
add r4, r4, #1
|
||||
addne r0, r0, r5, lsl #2
|
||||
addne r0, r0, #0x12000
|
||||
strne r7, [r0, #0xb78 + OV29_022E2978_OFFSET]
|
||||
addne r5, r5, #1
|
||||
cmp r4, #4
|
||||
blt _022E2988
|
||||
ldr r6, _022E2A34 ; =DUNGEON_PTR
|
||||
mov r4, #0
|
||||
_022E29CC:
|
||||
ldr r0, [r6]
|
||||
add r0, r0, r4, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r7, [r0, #0xb38 + OV29_022E2978_OFFSET]
|
||||
mov r0, r7
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
ldrne r0, [r6]
|
||||
add r4, r4, #1
|
||||
addne r0, r0, r5, lsl #2
|
||||
addne r0, r0, #0x12000
|
||||
strne r7, [r0, #0xb78 + OV29_022E2978_OFFSET]
|
||||
addne r5, r5, #1
|
||||
cmp r4, #0x10
|
||||
blt _022E29CC
|
||||
mov r2, #0
|
||||
ldr r1, _022E2A34 ; =DUNGEON_PTR
|
||||
b _022E2A28
|
||||
_022E2A14:
|
||||
ldr r0, [r1]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
str r2, [r0, #0xb78 + OV29_022E2978_OFFSET]
|
||||
add r5, r5, #1
|
||||
_022E2A28:
|
||||
cmp r5, #0x14
|
||||
blt _022E2A14
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_022E2A34: .word DUNGEON_PTR
|
||||
arm_func_end PopulateActiveMonsterPtrs
|
||||
|
||||
arm_func_start GetTeamMemberIndex
|
||||
GetTeamMemberIndex: ; 0x022E2A38
|
||||
ldr r1, _022E2A74 ; =DUNGEON_PTR
|
||||
mov r2, #0
|
||||
ldr r3, [r1]
|
||||
b _022E2A64
|
||||
_022E2A48:
|
||||
add r1, r3, r2, lsl #2
|
||||
add r1, r1, #0x12000
|
||||
#ifdef JAPAN
|
||||
ldr r1, [r1, #0xa84]
|
||||
#else
|
||||
ldr r1, [r1, #0xb28]
|
||||
#endif
|
||||
cmp r0, r1
|
||||
moveq r0, r2
|
||||
bxeq lr
|
||||
add r2, r2, #1
|
||||
_022E2A64:
|
||||
cmp r2, #4
|
||||
blt _022E2A48
|
||||
mvn r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_022E2A74: .word DUNGEON_PTR
|
||||
arm_func_end GetTeamMemberIndex
|
||||
|
||||
arm_func_start ov29_022E2A78
|
||||
ov29_022E2A78: ; 0x022E2A78
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r2, [r1]
|
||||
mov r4, r0
|
||||
cmp r2, #1
|
||||
beq _022E2AA0
|
||||
cmp r2, #2
|
||||
beq _022E2AAC
|
||||
cmp r2, #3
|
||||
ldmeqia sp!, {r4, pc}
|
||||
b _022E2ABC
|
||||
_022E2AA0:
|
||||
ldr r1, [r1, #0xb4]
|
||||
bl GetMonsterName
|
||||
ldmia sp!, {r4, pc}
|
||||
_022E2AAC:
|
||||
ldr r1, [r1, #0xb4]
|
||||
ldrb r1, [r1]
|
||||
bl ov29_022ED82C
|
||||
ldmia sp!, {r4, pc}
|
||||
_022E2ABC:
|
||||
ldr r0, _022E2AD4 ; =0x00000A42
|
||||
bl StringFromId
|
||||
mov r1, r0
|
||||
mov r0, r4
|
||||
bl strcpy
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_022E2AD4: .word 0x00000B42
|
||||
#else
|
||||
_022E2AD4: .word 0x00000A42
|
||||
#endif
|
||||
arm_func_end ov29_022E2A78
|
||||
|
||||
arm_func_start SubstitutePlaceholderStringTags
|
||||
SubstitutePlaceholderStringTags: ; 0x022E2AD8
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r6, r1
|
||||
mov r7, r0
|
||||
mov r5, r2
|
||||
bl ov29_0234B034
|
||||
ldr r1, [r6]
|
||||
mov r4, r0
|
||||
cmp r1, #1
|
||||
beq _022E2B10
|
||||
cmp r1, #2
|
||||
beq _022E2B3C
|
||||
cmp r1, #3
|
||||
beq _022E2B2C
|
||||
b _022E2B50
|
||||
_022E2B10:
|
||||
mov r1, #0
|
||||
str r1, [sp]
|
||||
ldr r2, [r6, #0xb4]
|
||||
mov r1, r7
|
||||
mov r3, r5
|
||||
bl ov29_0230040C
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E2B2C:
|
||||
ldr r2, [r6, #0xb4]
|
||||
mov r1, r7
|
||||
bl ov29_02344BA8
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E2B3C:
|
||||
ldr r2, [r6, #0xb4]
|
||||
mov r1, r7
|
||||
ldrb r2, [r2]
|
||||
bl ov29_022EDF7C
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E2B50:
|
||||
ldr r0, _022E2B64 ; =0x00000A42
|
||||
bl StringFromId
|
||||
add r1, r4, r7, lsl #2
|
||||
str r0, [r1, #0x38]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_022E2B64: .word 0x00000B42
|
||||
#else
|
||||
_022E2B64: .word 0x00000A42
|
||||
#endif
|
||||
arm_func_end SubstitutePlaceholderStringTags
|
||||
|
||||
#ifdef EUROPE
|
||||
arm_func_start ov29_022E34A8_EU
|
||||
ov29_022E34A8_EU: ; 0x022E34A8
|
||||
stmdb sp!, {r3, lr}
|
||||
bl EntityIsValid__022E1A1C
|
||||
cmp r0, #0
|
||||
beq _022E34DC
|
||||
ldr r0, _022E34E8 ; =0x02354138
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, #8]
|
||||
cmp r0, #0
|
||||
bne _022E34DC
|
||||
bl GetForcedLossReason
|
||||
cmp r0, #1
|
||||
movne r0, #1
|
||||
bne _022E34E0
|
||||
_022E34DC:
|
||||
mov r0, #0
|
||||
_022E34E0:
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E34E8: .word 0x02354138
|
||||
arm_func_end ov29_022E34A8_EU
|
||||
#endif
|
||||
|
||||
arm_func_start ov29_022E2B68
|
||||
ov29_022E2B68: ; 0x022E2B68
|
||||
#ifdef JAPAN
|
||||
#define OV29_022E2B68_OFFSET -0xA4
|
||||
#else
|
||||
#define OV29_022E2B68_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldr r1, _022E2C5C ; =DUNGEON_PTR
|
||||
movs r5, r0
|
||||
ldr r2, [r1]
|
||||
mov r1, #0
|
||||
add r0, r2, #0x21c + OV29_022E2B68_OFFSET
|
||||
add r4, r0, #0x1a000
|
||||
strh r1, [r4, #8]
|
||||
ldr r0, _022E2C60 ; =0x0001A21C
|
||||
strh r1, [r4, #0xa]
|
||||
strh r1, [r2, r0]
|
||||
strh r1, [r4, #2]
|
||||
strh r1, [r4, #0xc]
|
||||
strh r1, [r4, #0xe]
|
||||
strh r1, [r4, #4]
|
||||
strh r1, [r4, #6]
|
||||
str r1, [r4, #0x14]
|
||||
strb r1, [r4, #0x2f]
|
||||
mov r0, #1
|
||||
strb r0, [r4, #0x30]
|
||||
strb r0, [r4, #0x31]
|
||||
str r1, [r4, #0x18]
|
||||
str r1, [r4, #0x1c]
|
||||
bne _022E2BF4
|
||||
strb r1, [r4, #0x22]
|
||||
strb r1, [r4, #0x29]
|
||||
strb r1, [r4, #0x28]
|
||||
strb r1, [r4, #0x26]
|
||||
strb r1, [r4, #0x2a]
|
||||
strb r1, [r4, #0x27]
|
||||
strb r1, [r4, #0x23]
|
||||
strb r1, [r4, #0x24]
|
||||
strb r1, [r4, #0x32]
|
||||
strb r1, [r4, #0x33]
|
||||
strb r1, [r4, #0x34]
|
||||
_022E2BF4:
|
||||
mov r1, #0
|
||||
str r1, [r4, #0x10]
|
||||
mov r0, #3
|
||||
strb r0, [r4, #0x20]
|
||||
strb r1, [r4, #0x35]
|
||||
strb r1, [r4, #0x2b]
|
||||
strb r1, [r4, #0x36]
|
||||
strb r1, [r4, #0x37]
|
||||
strb r1, [r4, #0x2d]
|
||||
mov r0, #1
|
||||
strb r0, [r4, #0x2e]
|
||||
bl ov29_022E2C6C
|
||||
ldr r1, _022E2C64 ; =0x0000FFFF
|
||||
ldr r0, _022E2C68 ; =ov29_0237C84C
|
||||
cmp r5, #0
|
||||
str r1, [r0]
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
ldr r0, _022E2C5C ; =DUNGEON_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x28000
|
||||
ldrb r0, [r0, #0x6c8 + OV29_022E2B68_OFFSET]
|
||||
ands r0, r0, #3
|
||||
strb r0, [r4, #0x21]
|
||||
moveq r0, #1
|
||||
streqb r0, [r4, #0x24]
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_022E2C5C: .word DUNGEON_PTR
|
||||
_022E2C60: .word 0x0001A21C + OV29_022E2B68_OFFSET
|
||||
_022E2C64: .word 0x0000FFFF
|
||||
_022E2C68: .word ov29_0237C84C
|
||||
arm_func_end ov29_022E2B68
|
||||
|
||||
arm_func_start ov29_022E2C6C
|
||||
ov29_022E2C6C: ; 0x022E2C6C
|
||||
ldr r0, _022E2C9C ; =DUNGEON_PTR
|
||||
mvn r1, #0
|
||||
ldr r0, [r0]
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x178
|
||||
#else
|
||||
add r0, r0, #0x21c
|
||||
#endif
|
||||
add r0, r0, #0x1a000
|
||||
strh r1, [r0, #0x3c]
|
||||
strh r1, [r0, #0x3e]
|
||||
strh r1, [r0, #0x40]
|
||||
strh r1, [r0, #0x42]
|
||||
strh r1, [r0, #0x38]
|
||||
strh r1, [r0, #0x3a]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_022E2C9C: .word DUNGEON_PTR
|
||||
arm_func_end ov29_022E2C6C
|
||||
|
||||
arm_func_start ov29_022E2CA0
|
||||
ov29_022E2CA0: ; 0x022E2CA0
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r1, _022E2D34 ; =DUNGEON_PTR
|
||||
mov r4, r0
|
||||
ldr r3, [r1]
|
||||
ldr r0, _022E2D38 ; =0x0001A21C
|
||||
ldrsh r1, [r4]
|
||||
ldrsh r2, [r3, r0]
|
||||
#ifdef JAPAN
|
||||
add r0, r3, #0x178
|
||||
#else
|
||||
add r0, r3, #0x21c
|
||||
#endif
|
||||
add r5, r0, #0x1a000
|
||||
sub r0, r2, r1
|
||||
ldr r6, [r5, #0x10]
|
||||
bl abs
|
||||
cmp r0, #6
|
||||
bgt _022E2D2C
|
||||
ldrsh r1, [r5, #2]
|
||||
ldrsh r0, [r4, #2]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, #5
|
||||
bgt _022E2D2C
|
||||
mov r0, r5
|
||||
bl ov29_022E3534
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
cmp r6, #0
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
mov r0, r6
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl IsPositionActuallyInSight
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
_022E2D2C:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_022E2D34: .word DUNGEON_PTR
|
||||
#ifdef JAPAN
|
||||
_022E2D38: .word 0x0001A178
|
||||
#else
|
||||
_022E2D38: .word 0x0001A21C
|
||||
#endif
|
||||
arm_func_end ov29_022E2CA0
|
||||
|
||||
arm_func_start ov29_022E2D3C
|
||||
ov29_022E2D3C: ; 0x022E2D3C
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r1, _022E2DD0 ; =DUNGEON_PTR
|
||||
mov r4, r0
|
||||
ldr r3, [r1]
|
||||
ldr r0, _022E2DD4 ; =0x0001A21C
|
||||
ldrsh r1, [r4]
|
||||
ldrsh r2, [r3, r0]
|
||||
#ifdef JAPAN
|
||||
add r0, r3, #0x178
|
||||
#else
|
||||
add r0, r3, #0x21c
|
||||
#endif
|
||||
add r5, r0, #0x1a000
|
||||
sub r0, r2, r1
|
||||
ldr r6, [r5, #0x10]
|
||||
bl abs
|
||||
cmp r0, #6
|
||||
bgt _022E2DC8
|
||||
ldrsh r1, [r5, #2]
|
||||
ldrsh r0, [r4, #2]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, #6
|
||||
bgt _022E2DC8
|
||||
mov r0, r5
|
||||
bl ov29_022E3534
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
cmp r6, #0
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
mov r0, r6
|
||||
bl HasDropeyeStatus
|
||||
mov r2, r0
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl IsPositionActuallyInSight
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
_022E2DC8:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_022E2DD0: .word DUNGEON_PTR
|
||||
#ifdef JAPAN
|
||||
_022E2DD4: .word 0x0001A178
|
||||
#else
|
||||
_022E2DD4: .word 0x0001A21C
|
||||
#endif
|
||||
arm_func_end ov29_022E2D3C
|
||||
|
||||
#ifndef JAPAN
|
||||
arm_func_start UpdateMapSurveyorFlag
|
||||
UpdateMapSurveyorFlag: ; 0x022E2DD8
|
||||
#ifdef EUROPE
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r1, _022E2DF8 ; =DUNGEON_PTR
|
||||
mov r0, #0x41
|
||||
ldr r1, [r1]
|
||||
add r1, r1, #0x1a000
|
||||
ldrb r4, [r1, #0x241]
|
||||
bl TeamMemberHasEnabledIqSkill
|
||||
ldr r2, _022E2DF8 ; =DUNGEON_PTR
|
||||
ldr r1, [r2]
|
||||
add r1, r1, #0x1a000
|
||||
strb r0, [r1, #0x241]
|
||||
ldr r0, [r2]
|
||||
add r0, r0, #0x1a000
|
||||
ldrb r0, [r0, #0x241]
|
||||
cmp r4, r0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
#else
|
||||
stmdb sp!, {r3, lr}
|
||||
mov r0, #0x41
|
||||
bl TeamMemberHasEnabledIqSkill
|
||||
ldr r1, _022E2DF8 ; =DUNGEON_PTR
|
||||
ldr r1, [r1]
|
||||
add r1, r1, #0x1a000
|
||||
strb r0, [r1, #0x241]
|
||||
ldmia sp!, {r3, pc}
|
||||
#endif
|
||||
.align 2, 0
|
||||
_022E2DF8: .word DUNGEON_PTR
|
||||
arm_func_end UpdateMapSurveyorFlag
|
||||
#endif
|
||||
|
||||
arm_func_start ov29_022E2DFC
|
||||
ov29_022E2DFC: ; 0x022E2DFC
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr r1, _022E2E50 ; =DUNGEON_PTR
|
||||
cmp r0, #0
|
||||
ldr r1, [r1]
|
||||
#ifdef JAPAN
|
||||
add r1, r1, #0x178
|
||||
#else
|
||||
add r1, r1, #0x21c
|
||||
#endif
|
||||
add r1, r1, #0x1a000
|
||||
str r0, [r1, #0x10]
|
||||
moveq r0, #0
|
||||
streqb r0, [r1, #0x2f]
|
||||
beq _022E2E40
|
||||
ldr r0, [r0, #0xb4]
|
||||
ldrb r0, [r0, #7]
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
streqb r0, [r1, #0x2f]
|
||||
movne r0, #1
|
||||
strneb r0, [r1, #0x2f]
|
||||
_022E2E40:
|
||||
mov r0, #0
|
||||
bl UpdateCamera
|
||||
bl ov29_022E2C6C
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_022E2E50: .word DUNGEON_PTR
|
||||
arm_func_end ov29_022E2DFC
|
||||
|
||||
arm_func_start PointCameraToMonster
|
||||
PointCameraToMonster: ; 0x022E2E54
|
||||
stmdb sp!, {r4, lr}
|
||||
ldr r2, _022E2EC0 ; =DUNGEON_PTR
|
||||
mov r4, r1
|
||||
ldr r1, [r2]
|
||||
cmp r0, #0
|
||||
#ifdef JAPAN
|
||||
add r1, r1, #0x178
|
||||
#else
|
||||
add r1, r1, #0x21c
|
||||
#endif
|
||||
add r2, r1, #0x1a000
|
||||
moveq r1, #0
|
||||
streqb r1, [r2, #0x2f]
|
||||
beq _022E2E98
|
||||
ldr r1, [r0, #0xb4]
|
||||
ldrb r1, [r1, #7]
|
||||
cmp r1, #0
|
||||
moveq r1, #0
|
||||
streqb r1, [r2, #0x2f]
|
||||
movne r1, #1
|
||||
strneb r1, [r2, #0x2f]
|
||||
_022E2E98:
|
||||
str r0, [r2, #0x10]
|
||||
mov r0, #0
|
||||
bl UpdateCamera
|
||||
bl ov29_022E2C6C
|
||||
bl ov29_02304954
|
||||
cmp r4, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
bl UpdateTrapsVisibility
|
||||
bl UpdateMinimap
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_022E2EC0: .word DUNGEON_PTR
|
||||
arm_func_end PointCameraToMonster
|
||||
|
||||
arm_func_start UpdateCamera
|
||||
UpdateCamera: ; 0x022E2EC4
|
||||
#ifdef JAPAN
|
||||
#define UPDATE_CAMERA_OFFSET -0xA4
|
||||
#else
|
||||
#define UPDATE_CAMERA_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #0x10
|
||||
ldr r1, _022E32DC ; =DUNGEON_PTR
|
||||
str r0, [sp]
|
||||
ldr r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _022E32D4
|
||||
add r0, r0, #0x21c + UPDATE_CAMERA_OFFSET
|
||||
add r4, r0, #0x1a000
|
||||
ldr r5, [r4, #0x10]
|
||||
cmp r5, #0
|
||||
beq _022E32D0
|
||||
mov r0, r5
|
||||
bl EntityIsValid__022E32E8
|
||||
cmp r0, #0
|
||||
beq _022E32D0
|
||||
ldrb r8, [r4, #0x32]
|
||||
ldrb sb, [r4, #0x33]
|
||||
ldrh r0, [r4, #8]
|
||||
ldr sl, [r5, #0xb4]
|
||||
mov r6, #0
|
||||
strh r0, [r4, #0xc]
|
||||
ldrh r2, [r4, #0xa]
|
||||
mov r0, r5
|
||||
mov r1, #0x18
|
||||
strh r2, [r4, #0xe]
|
||||
ldrh r2, [r4]
|
||||
mov fp, r6
|
||||
mov r7, r6
|
||||
strh r2, [r4, #4]
|
||||
ldrh r2, [r4, #2]
|
||||
str r6, [sp, #4]
|
||||
strh r2, [r4, #6]
|
||||
ldrsh r2, [r5, #4]
|
||||
strh r2, [r4]
|
||||
ldrsh r2, [r5, #6]
|
||||
strh r2, [r4, #2]
|
||||
ldr r2, [r5, #0xc]
|
||||
mov r2, r2, asr #8
|
||||
sub r2, r2, #0x80
|
||||
strh r2, [r4, #8]
|
||||
ldr r2, [r5, #0x10]
|
||||
mov r2, r2, asr #8
|
||||
sub r2, r2, #0x6c
|
||||
strh r2, [r4, #0xa]
|
||||
ldrb r2, [r4, #0x27]
|
||||
str r2, [sp, #0xc]
|
||||
ldrb r2, [r4, #0x26]
|
||||
str r2, [sp, #8]
|
||||
bl ItemIsActive__022E330C
|
||||
cmp r0, #0
|
||||
ldrneb r0, [sl, #7]
|
||||
mov r1, #0
|
||||
cmpne r0, #0
|
||||
movne r0, #1
|
||||
strneb r0, [r4, #0x26]
|
||||
strneb r0, [r4, #0x27]
|
||||
ldreqb r0, [sl, #0xf9]
|
||||
streqb r0, [r4, #0x26]
|
||||
ldreqb r0, [sl, #0xfa]
|
||||
streqb r0, [r4, #0x27]
|
||||
strb r1, [r4, #0x32]
|
||||
strb r1, [r4, #0x33]
|
||||
mov r0, r5
|
||||
mov r1, #0xe
|
||||
bl ItemIsActive__022E330C
|
||||
cmp r0, #0
|
||||
ldrneb r0, [sl, #7]
|
||||
cmpne r0, #0
|
||||
movne r0, #1
|
||||
strneb r0, [r4, #0x32]
|
||||
strneb r0, [r4, #0x33]
|
||||
ldrb r1, [r4, #0x27]
|
||||
ldr r0, [sp, #0xc]
|
||||
cmp r0, r1
|
||||
ldreqb r0, [r4, #0x32]
|
||||
ldrb r1, [r4, #0x26]
|
||||
cmpeq r8, r0
|
||||
ldr r0, [sp, #8]
|
||||
movne r6, #1
|
||||
cmp r0, r1
|
||||
ldreqb r0, [r4, #0x33]
|
||||
cmpeq sb, r0
|
||||
ldrb r0, [sl, #0xfb]
|
||||
movne fp, #1
|
||||
strb r0, [r4, #0x2a]
|
||||
ldrb r0, [r4, #0x2d]
|
||||
ldrb r8, [r4, #0x22]
|
||||
cmp r0, #0
|
||||
bne _022E309C
|
||||
mov r0, r5
|
||||
mov r1, #1
|
||||
bl IsBlinded
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
movne r2, #0xe
|
||||
strneb r0, [r4, #0x22]
|
||||
moveq r2, #0
|
||||
ldr r0, _022E32E0 ; =ov29_0237C84C
|
||||
streqb r2, [r4, #0x22]
|
||||
ldr r1, [r0]
|
||||
cmp r1, r2
|
||||
beq _022E30A8
|
||||
str r2, [r0]
|
||||
cmp r2, #0xe
|
||||
mov r0, #2
|
||||
mov r1, #0
|
||||
bne _022E3088
|
||||
bl sub_02009194
|
||||
mov r0, #3
|
||||
mov r1, #0
|
||||
bl sub_02009194
|
||||
b _022E30A8
|
||||
_022E3088:
|
||||
bl sub_020091B0
|
||||
mov r0, #3
|
||||
mov r1, #0
|
||||
bl sub_020091B0
|
||||
b _022E30A8
|
||||
_022E309C:
|
||||
ldr r1, _022E32E4 ; =0x0000FFFF
|
||||
ldr r0, _022E32E0 ; =ov29_0237C84C
|
||||
str r1, [r0]
|
||||
_022E30A8:
|
||||
ldrb r0, [r4, #0x22]
|
||||
ldrb r1, [r4, #0x29]
|
||||
cmp r8, r0
|
||||
ldrb r0, [sl, #0xf1]
|
||||
movne r7, #1
|
||||
cmp r0, #2
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
strb r0, [r4, #0x29]
|
||||
ldrb r0, [r4, #0x29]
|
||||
cmp r1, r0
|
||||
ldreq r0, _022E32DC ; =DUNGEON_PTR
|
||||
ldreq r0, [r0]
|
||||
addeq r0, r0, #0x2c000
|
||||
ldreqb r0, [r0, #0xb10 + UPDATE_CAMERA_OFFSET]
|
||||
cmpeq r0, #0
|
||||
beq _022E3108
|
||||
bl ov29_023047DC
|
||||
ldr r0, _022E32DC ; =DUNGEON_PTR
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
mov r7, #1
|
||||
add r0, r0, #0x2c000
|
||||
strb r1, [r0, #0xb10 + UPDATE_CAMERA_OFFSET]
|
||||
_022E3108:
|
||||
mov r0, r5
|
||||
ldrb r8, [r4, #0x28]
|
||||
bl CanSeeInvisibleMonsters
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
strb r0, [r4, #0x28]
|
||||
ldrb r0, [r4, #0x28]
|
||||
cmp r8, r0
|
||||
movne r7, #1
|
||||
strne r7, [sp, #4]
|
||||
ldrb r8, [r4, #0x34]
|
||||
mov r0, r5
|
||||
bl HasDropeyeStatus
|
||||
and r1, r0, #0xff
|
||||
cmp r8, r1
|
||||
strb r0, [r4, #0x34]
|
||||
movne r7, #1
|
||||
strne r7, [sp, #4]
|
||||
ldr r0, [sp, #4]
|
||||
cmp r0, #0
|
||||
beq _022E3168
|
||||
bl UpdateTrapsVisibility
|
||||
bl UpdateMinimap
|
||||
_022E3168:
|
||||
cmp r7, #0
|
||||
beq _022E3178
|
||||
mov r0, #0
|
||||
bl ov29_022E3A58
|
||||
_022E3178:
|
||||
ldr r0, [sp]
|
||||
cmp r0, #0
|
||||
beq _022E3228
|
||||
ldrb r0, [r4, #0x2c]
|
||||
cmp r0, #0
|
||||
bne _022E3228
|
||||
ldrsh r5, [r4, #8]
|
||||
ldrsh r7, [r4, #0xc]
|
||||
sub r0, r7, r5
|
||||
bl abs
|
||||
cmp r0, #8
|
||||
bge _022E31C0
|
||||
ldrsh r1, [r4, #0xe]
|
||||
ldrsh r0, [r4, #0xa]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, #8
|
||||
blt _022E31D0
|
||||
_022E31C0:
|
||||
bl UpdateTrapsVisibility
|
||||
mov r0, #1
|
||||
strb r0, [r4, #0x2c]
|
||||
b _022E3228
|
||||
_022E31D0:
|
||||
cmp r7, r5
|
||||
bge _022E31E8
|
||||
mov r0, #0xff
|
||||
mov r1, #0
|
||||
bl ov29_0233711C
|
||||
b _022E31F8
|
||||
_022E31E8:
|
||||
ble _022E31F8
|
||||
mov r0, #0
|
||||
mov r1, r0
|
||||
bl ov29_0233711C
|
||||
_022E31F8:
|
||||
ldrsh r1, [r4, #0xa]
|
||||
ldrsh r0, [r4, #0xe]
|
||||
cmp r0, r1
|
||||
bge _022E3218
|
||||
mov r0, #0
|
||||
mov r1, #0xc0
|
||||
bl ov29_023372A4
|
||||
b _022E3228
|
||||
_022E3218:
|
||||
ble _022E3228
|
||||
mov r0, #0
|
||||
mov r1, r0
|
||||
bl ov29_023372A4
|
||||
_022E3228:
|
||||
cmp fp, #0
|
||||
ldreqsh r1, [r4]
|
||||
ldreqsh r0, [r4, #4]
|
||||
cmpeq r1, r0
|
||||
ldreqsh r1, [r4, #2]
|
||||
ldreqsh r0, [r4, #6]
|
||||
cmpeq r1, r0
|
||||
beq _022E3288
|
||||
ldr r4, _022E32DC ; =DUNGEON_PTR
|
||||
mov r5, #0
|
||||
_022E3250:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r7, [r0, #0xb78 + UPDATE_CAMERA_OFFSET]
|
||||
mov r0, r7
|
||||
bl EntityIsValid__022E32E8
|
||||
cmp r0, #0
|
||||
beq _022E327C
|
||||
ldrsh r0, [r7, #4]
|
||||
ldrsh r1, [r7, #6]
|
||||
bl DrawMinimapTile
|
||||
_022E327C:
|
||||
add r5, r5, #1
|
||||
cmp r5, #0x14
|
||||
blt _022E3250
|
||||
_022E3288:
|
||||
cmp r6, #0
|
||||
beq _022E32D0
|
||||
ldr r4, _022E32DC ; =DUNGEON_PTR
|
||||
mov r5, #0
|
||||
_022E3298:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
ldr r6, [r0, #0xbc8 + UPDATE_CAMERA_OFFSET]
|
||||
mov r0, r6
|
||||
bl EntityIsValid__022E32E8
|
||||
cmp r0, #0
|
||||
beq _022E32C4
|
||||
ldrsh r0, [r6, #4]
|
||||
ldrsh r1, [r6, #6]
|
||||
bl DrawMinimapTile
|
||||
_022E32C4:
|
||||
add r5, r5, #1
|
||||
cmp r5, #0x40
|
||||
blt _022E3298
|
||||
_022E32D0:
|
||||
bl ov29_022E34C8
|
||||
_022E32D4:
|
||||
add sp, sp, #0x10
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_022E32DC: .word DUNGEON_PTR
|
||||
_022E32E0: .word ov29_0237C84C
|
||||
_022E32E4: .word 0x0000FFFF
|
||||
arm_func_end UpdateCamera
|
||||
@@ -1,16 +1,8 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_02301D78.inc"
|
||||
.include "overlay_29_02301D84.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start AbilityIsActiveVeneer
|
||||
AbilityIsActiveVeneer: ; 0x02301D78
|
||||
ldr ip, _02301D80 ; =AbilityIsActive
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_02301D80: .word AbilityIsActive
|
||||
arm_func_end AbilityIsActiveVeneer
|
||||
|
||||
arm_func_start OtherMonsterAbilityIsActive
|
||||
OtherMonsterAbilityIsActive: ; 0x02301D84
|
||||
#ifdef JAPAN
|
||||
@@ -1,25 +1,8 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_02301F50.inc"
|
||||
.include "overlay_29_02301F80.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start HasDropeyeStatus
|
||||
HasDropeyeStatus: ; 0x02301F50
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
bl EntityIsValid__023000E4
|
||||
cmp r0, #0
|
||||
beq _02301F78
|
||||
ldr r0, [r4, #0xb4]
|
||||
ldrb r0, [r0, #0xf1]
|
||||
cmp r0, #4
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r4, pc}
|
||||
_02301F78:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end HasDropeyeStatus
|
||||
|
||||
arm_func_start IqSkillIsEnabled
|
||||
IqSkillIsEnabled: ; 0x02301F80
|
||||
stmdb sp!, {r3, lr}
|
||||
File diff suppressed because it is too large
Load Diff
1788
asm/overlay_29_02346834.s
Normal file
1788
asm/overlay_29_02346834.s
Normal file
File diff suppressed because it is too large
Load Diff
9
include/dungeon_items.h
Normal file
9
include/dungeon_items.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef PMDSKY_DUNGEON_ITEMS_H
|
||||
#define PMDSKY_DUNGEON_ITEMS_H
|
||||
|
||||
#include "dungeon_mode.h"
|
||||
|
||||
// Checks if a monster has a certain held item.
|
||||
bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
|
||||
#endif //PMDSKY_DUNGEON_ITEMS_H
|
||||
@@ -7,5 +7,8 @@
|
||||
bool8 NoGastroAcidStatus(struct entity *entity, enum ability_id ability_id);
|
||||
// Checks if a monster has a certain ability that isn't disabled by Gastro Acid.
|
||||
bool8 AbilityIsActive(struct entity *entity, enum ability_id ability_id);
|
||||
// Likely a linker-generated veneer for AbilityIsActive.
|
||||
// See https://developer.arm.com/documentation/dui0474/k/image-structure-and-generation/linker-generated-veneers/what-is-a-veneer-
|
||||
bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
|
||||
#endif //PMDSKY_DUNGEON_POKEMON_ATTRIBUTES_H
|
||||
|
||||
@@ -8,5 +8,7 @@
|
||||
bool8 CanSeeInvisibleMonsters(struct entity *entity);
|
||||
// Returns whether a monster is set to use a specific tactic.
|
||||
bool8 IsTacticSet(struct entity *entity, enum tactic_id tactic_id);
|
||||
// Returns whether a certain monster is under the effect of status::STATUS_DROPEYE.
|
||||
bool8 HasDropeyeStatus(struct entity* entity);
|
||||
|
||||
#endif //PMDSKY_DUNGEON_POKEMON_ATTRIBUTES_1_H
|
||||
|
||||
11
include/dungeon_visibility.h
Normal file
11
include/dungeon_visibility.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#ifndef PMDSKY_DUNGEON_VISIBILITY_H
|
||||
#define PMDSKY_DUNGEON_VISIBILITY_H
|
||||
|
||||
#include "dungeon_mode.h"
|
||||
|
||||
// Checks if a given monster can see another monster.
|
||||
// Calls IsPositionActuallyInSight. Also checks if the user is blinded, if the target is invisible, etc.
|
||||
// This function is almost the same as CanTargetEntity, the only difference is that the latter calls IsPositionInSight instead.
|
||||
bool8 CanSeeTarget(struct entity *user, struct entity *target);
|
||||
|
||||
#endif //PMDSKY_DUNGEON_VISIBILITY_H
|
||||
@@ -1461,7 +1461,7 @@ enum item_target_flag {
|
||||
// Item info
|
||||
struct item {
|
||||
// 0x0: flags: 1-byte bitfield
|
||||
volatile u8 flags;
|
||||
u8 flags;
|
||||
// bool8 f_exists : 1; // Validity flag
|
||||
// bool8 f_in_shop : 1; // In a Kecleon Shop
|
||||
// bool8 f_unpaid : 1; // Picked up from a Kecleon Shop but not paid for yet
|
||||
@@ -1480,6 +1480,15 @@ struct item {
|
||||
// 0x2: Only for stackable items. Will be 0 if unapplicable. For Poké, this is an "amount code"
|
||||
// rather than the literal amount (see MONEY_QUANTITY_TABLE)
|
||||
u16 quantity;
|
||||
s16 id; // 0x4
|
||||
};
|
||||
|
||||
// The same as the item struct, but with the flags marked as volatile.
|
||||
// Needed to match AiDecideUseItem.
|
||||
struct item_volatile {
|
||||
volatile u8 flags;
|
||||
u8 held_by;
|
||||
u16 quantity;
|
||||
enum item_id id; // 0x4
|
||||
};
|
||||
|
||||
|
||||
8
main.lsf
8
main.lsf
@@ -237,6 +237,8 @@ Overlay OVY_29
|
||||
Object asm/overlay_29_022E0378.o
|
||||
Object src/dg_object.o
|
||||
Object asm/overlay_29_022E1AD4.o
|
||||
Object src/dungeon_visibility.o
|
||||
Object asm/overlay_29_022E2810.o
|
||||
Object src/dg_camera.o
|
||||
Object asm/overlay_29_022E333C.o
|
||||
Object src/dg_effect.o
|
||||
@@ -295,9 +297,9 @@ Overlay OVY_29
|
||||
Object src/overlay_29_02301A60.o
|
||||
Object asm/overlay_29_02301A84.o
|
||||
Object src/dungeon_pokemon_attributes.o
|
||||
Object asm/overlay_29_02301D78.o
|
||||
Object asm/overlay_29_02301D84.o
|
||||
Object src/dungeon_pokemon_attributes_1.o
|
||||
Object asm/overlay_29_02301F50.o
|
||||
Object asm/overlay_29_02301F80.o
|
||||
Object src/overlay_29_023026CC.o
|
||||
Object asm/overlay_29_023026FC.o
|
||||
Object src/overlay_29_02302A38.o
|
||||
@@ -402,6 +404,8 @@ Overlay OVY_29
|
||||
Object asm/overlay_29_02344B1C.o
|
||||
Object src/overlay_29_02345698.o
|
||||
Object asm/overlay_29_023456BC.o
|
||||
Object src/dungeon_items.o
|
||||
Object asm/overlay_29_02346834.o
|
||||
Object src/overlay_29_02347B50.o
|
||||
Object asm/overlay_29_02347B80.o
|
||||
Object src/overlay_29_02347BA4.o
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
#include "dg_camera.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
// file starts at 0x022e26b68
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
|
||||
bool8 EntityIsValid__022E32E8(struct entity *entity)
|
||||
{
|
||||
if (entity == NULL)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "dungeon_capabilities_1.h"
|
||||
#include "dungeon_util_static.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "dungeon_visibility.h"
|
||||
#include "targeting.h"
|
||||
|
||||
#ifdef JAPAN
|
||||
@@ -28,7 +29,6 @@ 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);
|
||||
extern bool8 CanSeeTarget(struct entity *user, struct entity *target);
|
||||
|
||||
void RunMonsterAi(struct entity *monster, u32 unused)
|
||||
{
|
||||
|
||||
@@ -140,7 +140,8 @@ void AiDecideUseItem(struct entity *entity)
|
||||
return;
|
||||
}
|
||||
|
||||
u8 item_flags = item->flags;
|
||||
// Item flags need to be marked as volatile in the struct to match.
|
||||
u8 item_flags = ((struct item_volatile*)item)->flags;
|
||||
if (!ItemExists(item_flags) || item->flags & ITEM_FLAG_IN_SHOP)
|
||||
continue;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "dungeon_ai_items.h"
|
||||
#include "dungeon_ai_targeting_1.h"
|
||||
#include "dungeon_util_static.h"
|
||||
#include "dungeon_visibility.h"
|
||||
#include "item.h"
|
||||
#include "targeting.h"
|
||||
|
||||
@@ -13,7 +14,6 @@
|
||||
extern s32 AI_THROWN_ITEM_ACTION_CHOICE_COUNT;
|
||||
extern struct dungeon *DUNGEON_PTR[];
|
||||
|
||||
extern bool8 CanSeeTarget(struct entity *user, struct entity *target);
|
||||
extern bool8 IsTargetInRange(struct entity *user, struct entity *target, s32 direction, s32 n_tiles);
|
||||
extern u32 GetAiUseItemProbability(struct entity *item_consumer, struct item *item, u32 flags);
|
||||
extern s32 abs(s32 value);
|
||||
|
||||
17
src/dungeon_items.c
Normal file
17
src/dungeon_items.c
Normal file
@@ -0,0 +1,17 @@
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_util_static.h"
|
||||
|
||||
bool8 HasHeldItem(struct entity* entity, enum item_id item_id)
|
||||
{
|
||||
struct monster *pokemon_info = GetEntInfo(entity);
|
||||
if (!ItemExists(pokemon_info->held_item.flags))
|
||||
return FALSE;
|
||||
|
||||
if (ItemSticky(pokemon_info->held_item.flags))
|
||||
return FALSE;
|
||||
|
||||
if (pokemon_info->held_item.id != item_id)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -30,3 +30,8 @@ bool8 AbilityIsActive(struct entity *entity, enum ability_id ability_id)
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id)
|
||||
{
|
||||
return AbilityIsActive(entity, ability_id);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "dungeon_pokemon_attributes_1.h"
|
||||
#include "dungeon_util_static.h"
|
||||
#include "overlay_29_022FF898.h"
|
||||
#include "overlay_29_023000E4.h"
|
||||
|
||||
bool8 CanSeeInvisibleMonsters(struct entity *entity)
|
||||
{
|
||||
@@ -21,3 +22,11 @@ bool8 IsTacticSet(struct entity *entity, enum tactic_id tactic_id)
|
||||
|
||||
return pokemon_info->tactic == tactic_id;
|
||||
}
|
||||
|
||||
bool8 HasDropeyeStatus(struct entity* entity)
|
||||
{
|
||||
if (EntityIsValid__023000E4(entity) && GetEntInfo(entity)->blinker_class_status.blinded == STATUS_BLINKER_DROPEYE)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
35
src/dungeon_visibility.c
Normal file
35
src/dungeon_visibility.c
Normal file
@@ -0,0 +1,35 @@
|
||||
#include "dungeon_visibility.h"
|
||||
#include "dg_object.h"
|
||||
#include "dungeon_pokemon_attributes_1.h"
|
||||
#include "dungeon_statuses.h"
|
||||
#include "dungeon_util_static.h"
|
||||
|
||||
extern bool8 IsPositionActuallyInSight(struct position *pos1, struct position *pos2, bool8 user_has_dropeye);
|
||||
|
||||
bool8 CanSeeTarget(struct entity *user, struct entity *target)
|
||||
{
|
||||
if (!EntityIsValid__022E1A1C(user))
|
||||
return FALSE;
|
||||
|
||||
if (!EntityIsValid__022E1A1C(target))
|
||||
return FALSE;
|
||||
|
||||
if (!target->is_visible)
|
||||
return FALSE;
|
||||
|
||||
if (target->type == ENTITY_MONSTER)
|
||||
{
|
||||
if (user->type == ENTITY_MONSTER)
|
||||
{
|
||||
if (!CanSeeInvisibleMonsters(user) && GetEntInfo(target)->invisible_class_status.status == STATUS_INVISIBLE_INVISIBLE)
|
||||
return FALSE;
|
||||
|
||||
if (IsBlinded(user, TRUE))
|
||||
return FALSE;
|
||||
}
|
||||
else if (GetEntInfo(target)->invisible_class_status.status == STATUS_INVISIBLE_INVISIBLE)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return IsPositionActuallyInSight(&user->pos, &target->pos, HasDropeyeStatus(user));
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_022EE348.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 ItemIsActive__022EE318(struct entity *entity, enum item_id item_id)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_022F5994.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 ItemIsActive__022F5994(struct entity *entity, enum item_id item_id)
|
||||
{
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
#include "overlay_29_022FF898.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
|
||||
bool8 ItemIsActive__022FF898(struct entity *entity, enum item_id item_id)
|
||||
{
|
||||
if (AbilityIsActive(entity, ABILITY_KLUTZ))
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_023026CC.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 ItemIsActive__023026CC(struct entity *entity, enum item_id item_id)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_02307EF8.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 EntityIsValid__02307EF8(struct entity *entity)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_0230A9DC.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 ItemIsActive__0230A9DC(struct entity *entity, enum item_id item_id)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_0230E578.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 ItemIsActive__0230E578(struct entity *entity, enum item_id item_id)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_0230F810.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 ItemIsActive__0230F810(struct entity *entity, enum item_id item_id)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_02311010.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 EntityIsValid__02311010(struct entity *entity)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_02311BF8.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 ItemIsActive__02311BF8(struct entity *entity, enum item_id item_id)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_02315118.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 EntityIsValid__02315118(struct entity *entity)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "overlay_29_02347B50.h"
|
||||
|
||||
extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id);
|
||||
extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id);
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
bool8 ItemIsActive__02347B50(struct entity *entity, enum item_id item_id)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user