Merge pull request #115 from AnonymousRandomPerson/main
Some checks are pending
build / build (push) Waiting to run

More AI decomp
This commit is contained in:
AnonymousRandomPerson
2025-03-12 00:05:59 -04:00
committed by GitHub
38 changed files with 2959 additions and 2939 deletions

View File

@@ -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

View 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

View File

@@ -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

View 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

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -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

File diff suppressed because it is too large Load Diff

9
include/dungeon_items.h Normal file
View 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

View File

@@ -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

View File

@@ -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

View 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

View File

@@ -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
};

View File

@@ -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

View File

@@ -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)

View File

@@ -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)
{

View File

@@ -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;

View File

@@ -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
View 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;
}

View File

@@ -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);
}

View File

@@ -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
View 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));
}

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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))

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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)
{