diff --git a/asm/include/overlay_29_022E1AD4.inc b/asm/include/overlay_29_022E1AD4.inc index cadb7834..f64eab0b 100644 --- a/asm/include/overlay_29_022E1AD4.inc +++ b/asm/include/overlay_29_022E1AD4.inc @@ -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 diff --git a/asm/include/overlay_29_022E2810.inc b/asm/include/overlay_29_022E2810.inc new file mode 100644 index 00000000..db87dbf6 --- /dev/null +++ b/asm/include/overlay_29_022E2810.inc @@ -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 diff --git a/asm/include/overlay_29_02301D78.inc b/asm/include/overlay_29_02301D84.inc similarity index 100% rename from asm/include/overlay_29_02301D78.inc rename to asm/include/overlay_29_02301D84.inc diff --git a/asm/include/overlay_29_02301F50.inc b/asm/include/overlay_29_02301F80.inc similarity index 100% rename from asm/include/overlay_29_02301F50.inc rename to asm/include/overlay_29_02301F80.inc diff --git a/asm/include/overlay_29_023456BC.inc b/asm/include/overlay_29_023456BC.inc index e2bacc52..be06bd9f 100644 --- a/asm/include/overlay_29_023456BC.inc +++ b/asm/include/overlay_29_023456BC.inc @@ -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 diff --git a/asm/include/overlay_29_02346834.inc b/asm/include/overlay_29_02346834.inc new file mode 100644 index 00000000..b7a4d36a --- /dev/null +++ b/asm/include/overlay_29_02346834.inc @@ -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 diff --git a/asm/overlay_29_022E1AD4.s b/asm/overlay_29_022E1AD4.s index acc0f163..f98f609c 100644 --- a/asm/overlay_29_022E1AD4.s +++ b/asm/overlay_29_022E1AD4.s @@ -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 diff --git a/asm/overlay_29_022E2810.s b/asm/overlay_29_022E2810.s new file mode 100644 index 00000000..931e8a34 --- /dev/null +++ b/asm/overlay_29_022E2810.s @@ -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 diff --git a/asm/overlay_29_02301D78.s b/asm/overlay_29_02301D84.s similarity index 92% rename from asm/overlay_29_02301D78.s rename to asm/overlay_29_02301D84.s index 147266a7..693c9350 100644 --- a/asm/overlay_29_02301D78.s +++ b/asm/overlay_29_02301D84.s @@ -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 diff --git a/asm/overlay_29_02301F50.s b/asm/overlay_29_02301F80.s similarity index 96% rename from asm/overlay_29_02301F50.s rename to asm/overlay_29_02301F80.s index d3531c39..dd4143df 100644 --- a/asm/overlay_29_02301F50.s +++ b/asm/overlay_29_02301F80.s @@ -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} diff --git a/asm/overlay_29_023456BC.s b/asm/overlay_29_023456BC.s index 78df5c43..7b08b9f7 100644 --- a/asm/overlay_29_023456BC.s +++ b/asm/overlay_29_023456BC.s @@ -1253,1811 +1253,3 @@ _023467D8: .word 0x00000BDC + OV29_02346344_OFFSET _023467DC: .word 0x00000BDE + OV29_02346344_OFFSET _023467E0: .word DUNGEON_PTR arm_func_end ov29_02346344 - - arm_func_start HasHeldItem -HasHeldItem: ; 0x023467E4 - ldr r0, [r0, #0xb4] - ldrb r2, [r0, #0x62] - tst r2, #1 - movne r3, #1 - moveq r3, #0 - tst r3, #0xff - moveq r0, #0 - bxeq lr - tst r2, #8 - movne r2, #1 - moveq r2, #0 - tst r2, #0xff - movne r0, #0 - bxne lr - ldrsh r0, [r0, #0x66] - cmp r0, r1 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - arm_func_end HasHeldItem - - arm_func_start GenerateMoneyQuantity -GenerateMoneyQuantity: ; 0x02346834 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r0, #0x64 - mov r4, r1 - bl DungeonRandInt - mov r3, #0 - ldr r2, _02346884 ; =MONEY_QUANTITY_TABLE - b _02346870 -_02346854: - ldr r1, [r2, r0, lsl #2] - cmp r1, r4 - strleh r0, [r5, #2] - ldmleia sp!, {r3, r4, r5, pc} - add r0, r0, r0, lsr #31 - mov r0, r0, asr #1 - add r3, r3, #1 -_02346870: - cmp r3, #0xc8 - blt _02346854 - mov r0, #1 - strh r0, [r5, #2] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02346884: .word MONEY_QUANTITY_TABLE - arm_func_end GenerateMoneyQuantity - - arm_func_start ov29_02346888 -ov29_02346888: ; 0x02346888 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - ldr r1, _023468F8 ; =DUNGEON_PTR - mov r0, #7 - ldr r1, [r1] - ldrb r4, [r1, #0xc] - bl IsCurrentMissionType - ldr r1, _023468F8 ; =DUNGEON_PTR - mov r0, #0 - ldr r2, [r1] - strb r0, [r2, #0xc] - ldr r1, [r1] - ldrb r1, [r1, #0xc] - cmp r1, #1 - cmpeq r4, #0 - bne _023468F0 -#ifdef JAPAN - ldr r1, _02347CAC ; =0x0000091F - mov r2, r0 - mov r3, r0 -#else - mov r2, r0 - mov r3, r0 - mov r1, #0xbe0 -#endif - str r0, [sp] - bl YesNoMenu - cmp r0, #1 - bne _023468F0 - mov r0, #2 - mov r1, #1 - bl ov29_022E09E8 -_023468F0: - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_023468F8: .word DUNGEON_PTR -#ifdef JAPAN -_02347CAC: .word 0x0000091F -#endif - arm_func_end ov29_02346888 - - arm_func_start ov29_023468FC -ov29_023468FC: ; 0x023468FC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, r0 - ldrsh r0, [r4, #4] - bl GetItemCategoryVeneer - cmp r0, #5 - bne _023469D4 - ldrsh r0, [r4, #4] - bl GetItemMoveId16 - mov r8, r0 - ldrsh r0, [r4, #4] - bl IsHM - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r7, #0 - mov r6, r7 - mov r5, r7 - mov fp, r7 - ldr r4, _023469DC ; =DUNGEON_PTR - b _023469C4 -_0234694C: - ldr r0, [r4] - add r0, r0, r7, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sl, [r0, #0xa84] -#else - ldr sl, [r0, #0xb28] -#endif - mov r0, sl - bl EntityIsValid__02345698 - cmp r0, #0 - beq _023469C0 - ldr r1, [sl, #0xb4] - mov r0, r8 - ldrsh r1, [r1, #2] - bl sub_02053D1C - mov sb, r0 - mov r0, sl - bl ov29_023009A0 - cmp r0, #0 - movne sb, r6 - mov r0, sl - mov r1, r8 - bl ov29_022FBA54 - cmp r0, #0 - movne sb, r5 - mov r0, sl - bl ov29_022FBA70 - cmp r0, #0 - movne sb, fp - cmp sb, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_023469C0: - add r7, r7, #1 -_023469C4: - cmp r7, #4 - blt _0234694C - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_023469D4: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_023469DC: .word DUNGEON_PTR - arm_func_end ov29_023468FC - - arm_func_start ov29_023469E0 -ov29_023469E0: ; 0x023469E0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r8, #0 - ldr r5, _02346A60 ; =BAG_ITEMS_PTR_MIRROR - mov sl, r0 - mov r6, r8 - mov r7, #1 - mov fp, r8 - mov r4, #6 -_02346A00: - mul r1, r8, r4 - ldr r0, [r5] - ldr r2, [r0, #0x384] - ldrb r0, [r2, r1] - add sb, r2, r1 - tst r0, #1 - movne r0, r7 - moveq r0, r6 - tst r0, #0xff - beq _02346A48 - ldrb r0, [sb] - tst r0, sl - beq _02346A48 - ldrb r0, [sb, #1] - mov r1, fp - bl ClearItem - mov r0, sb - bl ItemZInit -_02346A48: - add r8, r8, #1 - cmp r8, #0x32 - blt _02346A00 - bl RemoveEmptyItemsInBag -#ifdef EUROPE - mov r0, #0 -#endif - bl ov29_022FB920 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02346A60: .word BAG_ITEMS_PTR_MIRROR - arm_func_end ov29_023469E0 - - arm_func_start ov29_02346A64 -ov29_02346A64: ; 0x02346A64 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, #0 - ldr r5, _02346BD0 ; =DUNGEON_PTR - mov r7, #0x55 - mov r6, r4 -_02346A78: - ldr r0, [r5] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r8, [r0, #0xa84] -#else - ldr r8, [r0, #0xb28] -#endif - mov r0, r8 - bl EntityIsValid__02345698 - cmp r0, #0 - beq _02346AC4 - ldr sb, [r8, #0xb4] - add r0, sb, #0x62 - bl IsLosableItem - cmp r0, #0 - beq _02346AC4 - mov r1, r7 - mov r2, r6 - add r0, sb, #0x62 - ldrb r8, [sb, #0x63] - bl InitStandardItem - strb r8, [sb, #0x63] -_02346AC4: - add r4, r4, #1 - cmp r4, #4 - blt _02346A78 - mov sb, #0 - mov r7, #1 - mov r6, sb - mov r4, sb - mov r5, r7 - mov fp, #0x55 -_02346AE8: - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetActiveTeamMember - mov r8, r0 - ldrb r0, [r8] - tst r0, #1 - movne r1, r7 - moveq r1, r6 - tst r1, #0xff - beq _02346B5C - tst r0, #2 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _02346B5C - ldrsh r0, [r8, #8] - bl IsMonsterIdInNormalRange - cmp r0, #0 - beq _02346B5C - add r0, r8, #0x3e - bl IsLosableItem - cmp r0, #0 - beq _02346B5C - mov r1, fp - mov r2, #0 - add r0, r8, #0x3e - ldrb sl, [r8, #0x3f] - bl InitStandardItem - strb sl, [r8, #0x3f] -_02346B5C: - add sb, sb, #1 - cmp sb, #4 - blt _02346AE8 - mov r4, #0 - ldr r6, _02346BD4 ; =BAG_ITEMS_PTR_MIRROR - mov r8, #0x55 - mov r7, r4 - mov r5, #6 -_02346B7C: - ldr r0, [r6] - ldr r0, [r0, #0x384] - mla sb, r4, r5, r0 - mov r0, sb - bl IsLosableItem - cmp r0, #0 - beq _02346BB8 - mov r0, sb - mov r1, r8 - mov r2, r7 - ldrb sl, [sb, #1] - bl InitStandardItem - mov r0, sb - bl SetItemAcquired - strb sl, [sb, #1] -_02346BB8: - add r4, r4, #1 - cmp r4, #0x32 - blt _02346B7C - bl RemoveEmptyItemsInBag -#ifdef EUROPE - mov r0, #0 -#endif - bl ov29_022FB920 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02346BD0: .word DUNGEON_PTR -_02346BD4: .word BAG_ITEMS_PTR_MIRROR - arm_func_end ov29_02346A64 - - arm_func_start CheckTeamItemsFlags -CheckTeamItemsFlags: ; 0x02346BD8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _02346CB4 ; =BAG_ITEMS_PTR_MIRROR - mov r7, #0 - mov r5, r0 - ldr r8, [r1] - mov r2, r7 - mov r3, #1 - mov r0, #6 - b _02346C30 -_02346BFC: - mul r4, r7, r0 - ldr r6, [r8, #0x384] - ldrb r1, [r6, r4] - tst r1, #1 - movne r1, r3 - moveq r1, r2 - tst r1, #0xff - beq _02346C2C - ldrb r1, [r6, r4] - tst r1, r5 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_02346C2C: - add r7, r7, #1 -_02346C30: - cmp r7, #0x32 - blt _02346BFC - bl RemoveEmptyItemsInBag -#ifdef EUROPE - mov r0, #0 -#endif - bl ov29_022FB920 - mov r4, #0 - mov r7, r4 - mov r8, #1 - ldr r6, _02346CB8 ; =DUNGEON_PTR - b _02346CA4 -_02346C54: - ldr r0, [r6] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sb, [r0, #0xa84] -#else - ldr sb, [r0, #0xb28] -#endif - mov r0, sb - bl EntityIsValid__02345698 - cmp r0, #0 - beq _02346CA0 - ldr r1, [sb, #0xb4] - ldrb r0, [r1, #0x62] - tst r0, #1 - movne r0, r8 - moveq r0, r7 - tst r0, #0xff - beq _02346CA0 - ldrb r0, [r1, #0x62] - tst r0, r5 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_02346CA0: - add r4, r4, #1 -_02346CA4: - cmp r4, #4 - blt _02346C54 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02346CB4: .word BAG_ITEMS_PTR_MIRROR -_02346CB8: .word DUNGEON_PTR - arm_func_end CheckTeamItemsFlags - - arm_func_start ov29_02346CBC -ov29_02346CBC: ; 0x02346CBC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sb, #0 - mov r8, #1 - ldr r5, _02346DA0 ; =BAG_ITEMS_PTR_MIRROR - mov r7, sb - mov fp, sb - mov r6, r8 - mov r4, #6 -_02346CDC: - mul r1, sb, r4 - ldr r0, [r5] - ldr r2, [r0, #0x384] - ldrb r0, [r2, r1] - add sl, r2, r1 - tst r0, #1 - movne r0, r8 - moveq r0, r7 - tst r0, #0xff - beq _02346D8C - ldrb r0, [sl] - bic r0, r0, #8 - strb r0, [sl] - ldrsh r0, [sl, #4] - cmp r0, #0xb7 - bne _02346D78 - mov r0, sl - bl sub_0200D8AC - bl AddMoneyCarried - ldrb r0, [sl, #1] - cmp r0, #0 - beq _02346D70 - sub r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetActiveTeamMember - ldrb r1, [r0, #0x3e] - tst r1, #1 - movne r1, r6 - moveq r1, fp - tst r1, #0xff - beq _02346D70 - ldrsh r1, [r0, #0x42] - cmp r1, #0xb7 - bne _02346D70 - add r0, r0, #0x3e - bl ItemZInit -_02346D70: - mov r0, sl - bl ItemZInit -_02346D78: - ldrb r0, [sl] - tst r0, #2 - beq _02346D8C - mov r0, sl - bl ItemZInit -_02346D8C: - add sb, sb, #1 - cmp sb, #0x32 - blt _02346CDC - bl RemoveEmptyItemsInBag - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02346DA0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end ov29_02346CBC - - arm_func_start ov29_02346DA4 -ov29_02346DA4: ; 0x02346DA4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - bl ov29_02346CBC - bl RemoveEmptyItemsInBag -#ifdef EUROPE - mov r0, #0 -#endif - bl ov29_022FB920 - mov r8, #0 - mov r7, #1 - mov r6, r8 - mov r4, r8 - mov r5, r7 -_02346DC8: - mov r0, r8 - bl GetActiveTeamMember - mov sb, r0 - ldrb r0, [sb] - tst r0, #1 - movne r0, r7 - moveq r0, r6 - tst r0, #0xff - beq _02346E30 - ldrb r0, [sb, #0x3e] - tst r0, #1 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _02346E30 - ldrb r0, [sb, #0x3e] - bic r0, r0, #8 - strb r0, [sb, #0x3e] - ldrsh r0, [sb, #0x42] - cmp r0, #0xb7 - bne _02346E30 - add r0, sb, #0x3e - bl sub_0200D8AC - bl AddMoneyCarried - add r0, sb, #0x3e - bl ItemZInit -_02346E30: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #4 - blt _02346DC8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end ov29_02346DA4 - - arm_func_start ov29_02346E48 -ov29_02346E48: ; 0x02346E48 - stmdb sp!, {r3, lr} -#ifdef JAPAN - bl IsMarowakTrainingMaze - cmp r0, #0 - beq _02348210 -#endif - bl ov29_02346CBC -_02348210: - bl sub_02057CE8 - bl CleanStickyItemsInBag - ldmia sp!, {r3, pc} - arm_func_end ov29_02346E48 - - arm_func_start ov29_02346E5C -ov29_02346E5C: ; 0x02346E5C - stmdb sp!, {r3, r4, r5, lr} - mov r5, #0 - ldr r1, _02346EB8 ; =BAG_ITEMS_PTR_MIRROR - mov r3, r5 - mov ip, #1 - mov r0, #6 -_02346E74: - mul lr, r5, r0 - ldr r2, [r1] - ldr r4, [r2, #0x384] - ldrb r2, [r4, lr] - tst r2, #1 - movne r2, ip - moveq r2, r3 - tst r2, #0xff - beq _02346EA8 - ldrb r2, [r4, lr] - tst r2, #4 - bicne r2, r2, #4 - strneb r2, [r4, lr] -_02346EA8: - add r5, r5, #1 - cmp r5, #0x32 - blt _02346E74 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02346EB8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end ov29_02346E5C - - arm_func_start ov29_02346EBC -ov29_02346EBC: ; 0x02346EBC - ldrb r1, [r0, #6] - cmp r1, #0 - bne _02346F04 - ldr r1, _02346F0C ; =DUNGEON_PTR -#ifdef JAPAN - mov ip, #0 -#else - mov r3, #0 -#endif - ldr r1, [r1] - add r1, r1, #0x3f4 - add r2, r1, #0x400 -#ifdef JAPAN - mov r1, #0x23c - b _023482BC -_02346EE0: - mla r3, ip, r1, r2 - cmp r3, r0 - ldreq r0, _02346F10 ; =ov29_023531C8 - ldreqb r0, [r0, ip] - bxeq lr - add ip, ip, #1 -_023482BC: - cmp ip, #4 -#else - b _02346EFC -_02346EE0: - add r1, r3, r3, lsl #3 - add r1, r2, r1, lsl #6 - cmp r1, r0 - ldreq r0, _02346F10 ; =ov29_023531C8 - ldreqb r0, [r0, r3] - bxeq lr - add r3, r3, #1 -_02346EFC: - cmp r3, #4 -#endif - blt _02346EE0 -_02346F04: - mov r0, #0 - bx lr - .align 2, 0 -_02346F0C: .word DUNGEON_PTR -_02346F10: .word ov29_023531C8 - arm_func_end ov29_02346EBC - - arm_func_start AddHeldItemToBag -AddHeldItemToBag: ; 0x02346F14 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r0 - bl GetCurrentBagCapacity - ldr r1, _02346FB4 ; =BAG_ITEMS_PTR_MIRROR - mov lr, #0 - ldr r6, [r1] - mov r2, lr - mov r3, #1 - mov r1, #6 - b _02346FA4 -_02346F3C: - mul r4, lr, r1 - ldr ip, [r6, #0x384] - ldrb ip, [ip, r4] - tst ip, #1 - movne ip, r3 - moveq ip, r2 - tst ip, #0xff - bne _02346FA0 - mov r0, r5 - bl ov29_02346EBC - strb r0, [r5, #0x63] - ldr r0, _02346FB4 ; =BAG_ITEMS_PTR_MIRROR - ldrh r1, [r5, #0x62] - ldr r2, [r0] - add r0, r5, #0x62 - ldr r2, [r2, #0x384] - strh r1, [r2, r4] - ldrh r1, [r5, #0x64] - add r2, r2, r4 - strh r1, [r2, #2] - ldrh r1, [r5, #0x66] - strh r1, [r2, #4] - bl SetItemAcquired - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} -_02346FA0: - add lr, lr, #1 -_02346FA4: - cmp lr, r0 - blt _02346F3C - mov r0, #1 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02346FB4: .word BAG_ITEMS_PTR_MIRROR - arm_func_end AddHeldItemToBag - - arm_func_start ov29_02346FB8 -ov29_02346FB8: ; 0x02346FB8 - ldr r1, _02346FFC ; =DUNGEON_PTR -#ifdef JAPAN - mov ip, #0 -#else - mov r3, #0 -#endif - ldr r1, [r1] - add r1, r1, #0x56 - add r2, r1, #0x800 -#ifdef JAPAN - mov r1, #0x23c - b _023483A4 -_02348394: - mla r3, ip, r1, r2 - cmp r3, r0 - beq _023483AC - add ip, ip, #1 -_023483A4: - cmp ip, #4 - blt _02348394 -_023483AC: - cmp ip, #4 - mvneq r0, #0 - movne r0, ip -#else - b _02346FE4 -_02346FD0: - add r1, r3, r3, lsl #3 - add r1, r2, r1, lsl #6 - cmp r1, r0 - beq _02346FEC - add r3, r3, #1 -_02346FE4: - cmp r3, #4 - blt _02346FD0 -_02346FEC: - cmp r3, #4 - mvneq r0, #0 - movne r0, r3 -#endif - bx lr - .align 2, 0 -_02346FFC: .word DUNGEON_PTR - arm_func_end ov29_02346FB8 - - arm_func_start ov29_02347000 -ov29_02347000: ; 0x02347000 - ldr r1, _0234702C ; =ov10_022C4CD8 - b _02347018 -_02347008: - cmp r0, r2 - moveq r0, #1 - bxeq lr - add r1, r1, #2 -_02347018: - ldrsh r2, [r1] - cmp r2, #0 - bne _02347008 - mov r0, #0 - bx lr - .align 2, 0 -_0234702C: .word ov10_022C4CD8 - arm_func_end ov29_02347000 - - arm_func_start RemoveEmptyItemsInBagWrapper -RemoveEmptyItemsInBagWrapper: ; 0x02347030 - stmdb sp!, {r3, lr} - bl RemoveEmptyItemsInBag -#ifdef EUROPE - mov r0, #0 -#endif - bl ov29_022FB920 - ldmia sp!, {r3, pc} - arm_func_end RemoveEmptyItemsInBagWrapper - - arm_func_start ov29_02347040 -ov29_02347040: ; 0x02347040 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r8, #0 - ldr r5, _023470F8 ; =DUNGEON_PTR - ldr r6, _023470FC ; =BAG_ITEMS_PTR_MIRROR - mov fp, r8 - mov r7, #1 - mov r4, #6 -_0234705C: - mul sl, r8, r4 - ldr r0, [r6] - ldr r1, [r0, #0x384] - ldrb r0, [r1, sl] - add r1, r1, sl - tst r0, #1 - movne r0, r7 - moveq r0, fp - tst r0, #0xff - ldrneb r1, [r1, #1] - cmpne r1, #0 - beq _023470E8 - ldr r0, [r5] - add r0, r0, r1, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sb, [r0, #0xa80] -#else - ldr sb, [r0, #0xb24] -#endif - mov r0, sb - bl EntityIsValid__02345698 - cmp r0, #0 - bne _023470C0 - ldr r0, [r6] - ldr r0, [r0, #0x384] - add r0, r0, sl - bl sub_0200D894 - b _023470E8 -_023470C0: - ldr r1, [r6] - ldr r0, [sb, #0xb4] - ldr r2, [r1, #0x384] - ldrh r1, [r2, sl] - add r2, r2, sl - strh r1, [r0, #0x62] - ldrh r1, [r2, #2] - strh r1, [r0, #0x64] - ldrh r1, [r2, #4] - strh r1, [r0, #0x66] -_023470E8: - add r8, r8, #1 - cmp r8, #0x32 - blt _0234705C - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_023470F8: .word DUNGEON_PTR -_023470FC: .word BAG_ITEMS_PTR_MIRROR - arm_func_end ov29_02347040 - - arm_func_start ov29_02347100 -ov29_02347100: ; 0x02347100 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl GetLeader - mov r4, r0 - bl ov29_022EBB8C - mov r1, r0 - mov r0, r4 - mov r2, #0xa - bl GetItemToUseByIndex - mov r4, r0 - bl ov29_022EBB98 - cmp r0, #0x90 - bhs _0234717C - mov r0, r4 - bl GetItemAction - cmp r0, #0 - beq _0234717C - ldrb r0, [r4] - tst r0, #8 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r4 - bl ov29_023468FC - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r5 - bl MonsterHasEmbargoStatus - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} -_0234717C: - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov29_02347100 - - arm_func_start ov29_02347184 -ov29_02347184: ; 0x02347184 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc8 - mov sb, #0 - mov r7, #1 - mov sl, r0 - mov r8, sb - mov r6, sb - mov fp, sb - mov r5, r7 - add r4, sp, #0 -_023471AC: - mov r0, r8 - bl GetItemAtIdx - cmp sl, #0 - beq _023471F4 - mov r2, sl - b _023471E0 -_023471C4: - ldrsh r1, [r0, #4] - cmp r3, r1 - bne _023471DC - ldrb r1, [r0, #1] - cmp r1, #0 - bne _023471EC -_023471DC: - add r2, r2, #2 -_023471E0: - ldrsh r3, [r2] - cmp r3, #0 - bne _023471C4 -_023471EC: - cmp r3, #0 - bne _02347224 -_023471F4: - ldrb r1, [r0] - tst r1, #1 - movne r2, r7 - moveq r2, r6 - tst r2, #0xff - beq _02347224 - tst r1, #8 - movne r1, r5 - moveq r1, fp - tst r1, #0xff - streq r0, [r4, sb, lsl #2] - addeq sb, sb, #1 -_02347224: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #0x32 - blt _023471AC - cmp sb, #0 - moveq r0, #0 - beq _023472B8 - bl DungeonRand16Bit - mov r1, sb - bl _s32_div_f - mov r0, r1, lsl #0x10 - add r1, sp, #0 - mov r0, r0, asr #0x10 -#ifdef JAPAN - ldr r4, [r1, r0, lsl #2] - ldrb r0, [r4] - orr r0, r0, #8 - strb r0, [r4] - ldrb r0, [r4, #1] - cmp r0, #0 - beq _023472B4 - sub r2, r0, #1 - mov r0, #0x23c - ldr r1, _023472C0 ; =DUNGEON_PTR - mul r3, r2, r0 - ldr r0, [r1] - add r0, r0, #0x56 - add r1, r0, #0x800 - ldrb r0, [r1, r3] -#else - ldr r3, [r1, r0, lsl #2] - ldrb r0, [r3] - orr r0, r0, #8 - strb r0, [r3] - ldrb r1, [r3, #1] - cmp r1, #0 - beq _023472B4 - ldr r0, _023472C0 ; =DUNGEON_PTR - sub r1, r1, #1 - ldr r0, [r0] - add r1, r1, r1, lsl #3 - add r0, r0, #0x56 - add r2, r0, #0x800 - ldrb r0, [r2, r1, lsl #6] - mov r1, r1, lsl #6 -#endif - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff -#ifdef JAPAN - ldrneb r0, [r1, r3] - orrne r0, r0, #8 - strneb r0, [r1, r3] -_023472B4: - ldrsh r0, [r4, #4] -#else - ldrneb r0, [r2, r1] - orrne r0, r0, #8 - strneb r0, [r2, r1] -_023472B4: - ldrsh r0, [r3, #4] -#endif -_023472B8: - add sp, sp, #0xc8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_023472C0: .word DUNGEON_PTR - arm_func_end ov29_02347184 - - arm_func_start GenerateItem -GenerateItem: ; 0x023472C4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r3 - mov r4, r1 - mov r3, #0 - mov r5, r0 - bl sub_0200CF6C - mov r0, r4 - mov r6, #0 - bl IsNotMoney - cmp r0, #0 - beq _02347324 - cmp r7, #0 - bne _0234731C - mov r0, #0x64 - bl DungeonRandInt - ldr r1, _02347374 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x28000 -#ifdef JAPAN - ldrb r1, [r1, #0x618] -#else - ldrb r1, [r1, #0x6bc] -#endif - cmp r0, r1 - movlt r6, #1 - b _02347324 -_0234731C: - cmp r7, #1 - moveq r6, #1 -_02347324: - cmp r6, #0 - ldrneb r0, [r5] - orrne r0, r0, #8 - strneb r0, [r5] - mov r0, r4 - bl GetItemCategoryVeneer - cmp r0, #6 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r0, _02347374 ; =DUNGEON_PTR - ldr r1, [r0] - ldr r0, [r1, #0x7cc] - cmp r0, #0 - add r0, r1, #0x28000 -#ifdef JAPAN - ldrb r2, [r0, #0x625] -#else - ldrb r2, [r0, #0x6c9] -#endif - moveq r3, #5 - movne r3, #0x28 - mul r1, r2, r3 - mov r0, r5 - bl GenerateMoneyQuantity - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02347374: .word DUNGEON_PTR - arm_func_end GenerateItem - - arm_func_start ov29_02347378 -ov29_02347378: ; 0x02347378 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x14 - ldr r3, _02347514 ; =DUNGEON_PTR - mov sl, r0 - ldr r0, [r3] - cmp r2, #0 - add r0, r0, #0x1a000 -#ifdef JAPAN - ldrb fp, [r0, #0x1a1] -#else - ldrb fp, [r0, #0x245] -#endif - beq _023473B0 - cmp r2, #0 - beq _023473B8 -#ifdef JAPAN - ldrb r0, [r0, #0x19a] -#else - ldrb r0, [r0, #0x23e] -#endif - cmp r0, #0 - bne _023473B8 -_023473B0: - mov r3, #1 - b _023473BC -_023473B8: - mov r3, #0 -_023473BC: - ldrsh r2, [r1] - ldrsh r1, [r1, #2] - mov r0, #0x18 - smulbb r2, r2, r0 - smulbb r0, r1, r0 - add r1, r2, #4 - add r0, r0, #4 - ands r4, r3, #0xff - mov r8, r1, lsl #8 - mov sb, r0, lsl #8 - beq _023474CC - ldr r5, [sl, #0xc] - sub r0, r5, r8 - bl abs - cmp r0, #0xc - bge _02347410 - ldr r0, [sl, #0x10] - sub r0, r0, sb - bl abs - cmp r0, #0xc - blt _023474CC -_02347410: - str r5, [sp, #0xc] - ldr r0, [sl, #0x10] - mov r6, #0 - str r0, [sp, #0x10] - sub r0, r8, r5 - mov r1, #0x18 - mov r7, r6 - bl _s32_div_f - ldr r1, [sp, #0x10] - str r0, [sp, #8] - sub r0, sb, r1 - mov r1, #0x18 - bl _s32_div_f - str r0, [sp, #4] - mov r5, r6 -_0234744C: - ldr r2, [sp, #0xc] - ldr r0, [sp, #8] - ldr r1, [sp, #0x10] - add r0, r2, r0 - str r0, [sp, #0xc] - ldr r0, [sp, #4] - add r0, r1, r0 - str r0, [sp, #0x10] - mov r0, r7 - bl sub_020018D0 - mov r1, #0xc - mul r1, r0, r1 - str r1, [sl, #0x1c] - mov r0, sl - add r1, sp, #0xc - bl UpdateEntityPixelPos - mov r0, #0 - str r0, [sp] - mov r0, sl - mov r1, fp - mov r2, #0 - and r3, r6, #0xff - bl ov29_023457C8 - mov r0, #0x13 - bl AdvanceFrame - tst r5, #3 - addeq r6, r6, #1 - add r5, r5, #1 - add r7, r7, #0x55 - and r6, r6, #7 - cmp r5, #0x18 - blt _0234744C -_023474CC: - mov r0, sl - mov r1, r8 - mov r2, sb - bl SetEntityPixelPosXY - mov r5, #0 - str r5, [sl, #0x1c] - cmp r4, #0 - beq _02347504 - mov r0, sl - mov r1, fp - mov r2, #1 - mov r3, #0xff - str r5, [sp] - bl ov29_023457C8 -_02347504: - mov r0, #0x13 - bl AdvanceFrame - add sp, sp, #0x14 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02347514: .word DUNGEON_PTR - arm_func_end ov29_02347378 - - arm_func_start ov29_02347518 -ov29_02347518: ; 0x02347518 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x248 - ldr r4, _02347B3C ; =DUNGEON_PTR - mov sl, r0 - ldr r4, [r4] - mov r6, #3 - add r0, r4, #0x1a000 -#ifdef JAPAN - ldrb r0, [r0, #0x1a1] -#else - ldrb r0, [r0, #0x245] -#endif - mov r5, #0 - mov sb, r3 - str r0, [sp, #0x20] - str r6, [r4, #0xcc] - mov r0, #1 - strb r5, [r4, #0xf0] - strb r0, [r4, #0xec] - strb r5, [r4, #0xee] - mov r0, r1 - str r0, [r4, #0x180] - str r5, [r4, #0xe8] -#ifdef JAPAN - ldrh r5, [r2] - str r1, [sp, #8] - mov r1, #0x18 - strh r5, [r4, #0xd0] - ldrh r5, [r2, #2] - add r0, r4, #0xcc - ldr r8, [sp, #0x270] - strh r5, [r4, #0xd2] -#else - ldrh r6, [r2] - str r1, [sp, #8] - mov r1, #0x18 - strh r6, [r4, #0xd0] - ldrh r6, [r2, #2] - add r0, r4, #0xcc - ldr r8, [sp, #0x270] - strh r6, [r4, #0xd2] -#endif - ldrsh r3, [r2] - ldrsh r2, [r2, #2] - smulbb r3, r3, r1 - smulbb r2, r2, r1 - add r1, r3, #4 - mov r1, r1, lsl #8 - mov r2, r2, lsl #8 - bl SetEntityPixelPosXY -#ifdef JAPAN - mov r0, #0 -#else - mov r0, r5 -#endif - str r0, [sp, #0x1c] - strh r0, [r4, #0xf2] - ldr r0, [sl] - cmp r0, #1 - bne _023475D4 - mov r0, sl - mov r1, #0x31 - bl ItemIsActive__02347B50 - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x1c] -_023475D4: -#ifdef JAPAN - mov r0, #1 - ldrsh fp, [r8, #2] - mov r5, #0 -#else - ldrsh r1, [r8, #2] - mov r0, #1 - mov r6, #0 - str r1, [sp, #0x24] -#endif - bl ov29_0234B4CC -_023475E8: - ldrh r2, [r4, #0xd0] - ldrh r1, [r4, #0xd2] - ldrb r0, [r8, #1] - strh r2, [sp, #0x44] - strh r1, [sp, #0x46] - cmp r0, #0 - beq _023476BC - ldrb r0, [r8] - cmp r0, #0 - bne _023476BC - ldr r1, _02347B40 ; =DIRECTIONS_XY - mov r2, sb, lsl #2 - add r0, r1, sb, lsl #2 -#ifdef JAPAN - ldrsh r6, [r4, #0xd0] -#else - ldrsh r7, [r4, #0xd0] -#endif - ldrsh r3, [r1, r2] - ldrsh r2, [r4, #0xd2] - ldrsh r1, [r0, #2] -#ifdef JAPAN - add r0, r6, r3 -#else - add r0, r7, r3 -#endif - add r1, r2, r1 - bl GetTile - ldrh r0, [r0] - tst r0, #3 - bne _023476BC - ldrsh r0, [sp, #0x46] -#ifdef JAPAN - mov r6, #0 -#else - mov r7, #0 -#endif - str r0, [sp, #0x10] - ldrsh r0, [sp, #0x44] - str r0, [sp, #0xc] - ldr r0, _02347B44 ; =ov29_023516FC - add r0, r0, sb, lsl #2 -#ifdef JAPAN - str r0, [sp, #0x24] - b _023476B4 -_02347668: - ldr r0, [sp, #0x24] - ldrb r7, [r6, r0] - cmp r7, #8 - bge _023476B0 - ldr r0, _02347B40 ; =DIRECTIONS_XY - mov r1, r7, lsl #2 - ldrsh r1, [r0, r1] - add r0, r0, r7, lsl #2 -#else - str r0, [sp, #0x28] - b _023476B4 -_02347668: - ldr r0, [sp, #0x28] - ldrb fp, [r7, r0] - cmp fp, #8 - bge _023476B0 - ldr r0, _02347B40 ; =DIRECTIONS_XY - mov r1, fp, lsl #2 - ldrsh r1, [r0, r1] - add r0, r0, fp, lsl #2 -#endif - ldrsh r2, [r0, #2] - ldr r0, [sp, #0xc] - add r0, r0, r1 - ldr r1, [sp, #0x10] - add r1, r1, r2 - bl GetTile - ldrh r0, [r0] - tst r0, #3 -#ifdef JAPAN - movne sb, r7 - bne _023476BC -_023476B0: - add r6, r6, #1 -_023476B4: - cmp r6, #4 -#else - movne sb, fp - bne _023476BC -_023476B0: - add r7, r7, #1 -_023476B4: - cmp r7, #4 -#endif - blt _02347668 -_023476BC: - mov r0, sb, lsl #0x10 - mov r1, r0, lsr #0x10 - ldr r0, _02347B40 ; =DIRECTIONS_XY - mov r2, r1, lsl #2 - ldrh r2, [r0, r2] - add r1, r0, r1, lsl #2 - ldrsh r3, [r4, #0xd0] - strh r2, [sp, #0x3c] - ldrsh r2, [sp, #0x3c] - ldrh r1, [r1, #2] - add r2, r3, r2 - strh r1, [sp, #0x3e] - strh r2, [r4, #0xd0] - ldrsh r1, [sp, #0x3e] - ldrsh r2, [r4, #0xd2] - add r1, r2, r1 - strh r1, [r4, #0xd2] - ldrsh r2, [r4, #0xd0] - cmp r2, #0 - ldrgesh r1, [r4, #0xd2] - cmpge r1, #0 - blt _02347720 - cmp r2, #0x38 - cmplt r1, #0x20 - blt _02347728 -_02347720: -#ifdef JAPAN - mov r6, #2 -#else - mov r7, #2 -#endif - b _02347978 -_02347728: - mov r2, sb, lsl #2 - add r1, r0, sb, lsl #2 - ldrsh r0, [r0, r2] - ldrsh r1, [r1, #2] -#ifdef JAPAN - mov r6, #0 -#else - mov r7, #0 -#endif - mov r0, r0, lsl #0xa - str r0, [sp, #0x14] - and r0, sb, #0xff -#ifdef JAPAN - mov r7, r1, lsl #0xa - str r0, [sp, #0x28] -#else - mov fp, r1, lsl #0xa - str r0, [sp, #0x2c] -#endif -_02347750: - mov r0, #0 - str r0, [sp, #0x18] - ldr r1, [sp, #0x14] - add r0, r4, #0xcc -#ifdef JAPAN - mov r2, r7 -#else - mov r2, fp -#endif - bl IncrementEntityPixelPosXY - bl IsWaterTileset - cmp r0, #0 - ldr r0, [r4, #0xd8] - ldr r1, [r4, #0xdc] - movne r2, #3 - mov r0, r0, asr #8 - mov r1, r1, asr #8 - moveq r2, #0 - add r0, r0, #8 - add r1, r1, #0x10 - bl ov29_022E9488 - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x18] - mov r0, #1 - str r0, [sp] - ldr r1, [sp, #0x20] -#ifdef JAPAN - ldr r3, [sp, #0x28] -#else - ldr r3, [sp, #0x2c] -#endif - add r0, r4, #0xcc - mov r2, #0 - bl ov29_023457C8 - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x18] - ldr r0, [sp, #0x18] - cmp r0, #0 - beq _023477DC - mov r0, #0x12 - bl AdvanceFrame -_023477DC: -#ifdef JAPAN - add r6, r6, #1 - cmp r6, #6 -#else - add r7, r7, #1 - cmp r7, #6 -#endif - blt _02347750 - ldrsh r0, [r4, #0xd0] - ldrsh r1, [r4, #0xd2] - bl GetTile -#ifdef JAPAN - mov r6, r0 - ldrh r0, [r6] -#else - mov r7, r0 - ldrh r0, [r7] -#endif - tst r0, #3 - ldreqb r0, [r8] - cmpeq r0, #0 - bne _02347824 - ldrh r1, [sp, #0x44] - ldrh r0, [sp, #0x46] -#ifdef JAPAN - mov r6, #1 -#else - mov r7, #1 -#endif - strh r1, [r4, #0xd0] - strh r0, [r4, #0xd2] - b _02347978 -_02347824: -#ifdef JAPAN - ldr r0, [r6, #0xc] -#else - ldr r0, [r7, #0xc] -#endif - cmp r0, #0 - beq _02347960 - ldrb r1, [r8] -#ifdef JAPAN - mov r7, #0 -#else - mov fp, #0 -#endif - cmp r1, #0 - ldreq r1, [r0] - cmpeq r1, #1 - bne _02347870 - mov r1, #0x2d - bl ItemIsActive__02347B50 - cmp r0, #0 - bne _0234786C -#ifdef JAPAN - ldr r0, [r6, #0xc] -#else - ldr r0, [r7, #0xc] -#endif - mov r1, #0x54 - bl ExclusiveItemEffectIsActive__02347B80 - cmp r0, #0 - beq _02347870 -_0234786C: -#ifdef JAPAN - mov r7, #1 -_02347870: - cmp r7, #0 - addne r0, sb, #4 - andne sb, r0, #7 - bne _02347960 - ldr r0, [r6, #0xc] - mov r7, #1 -#else - mov fp, #1 -_02347870: - cmp fp, #0 - beq _02347894 - add r5, r5, #1 - cmp r5, #2 - movge r7, #1 - bge _02347978 - add r0, sb, #4 - and sb, r0, #7 - b _02347960 -_02347894: - ldr r0, [r7, #0xc] - mov fp, #1 -#endif - ldr r0, [r0] - cmp r0, #1 - bne _0234791C - add r0, sp, #0x34 -#ifdef JAPAN - add r1, r7, #0x194 - bl InitMove - ldr r0, [r6, #0xc] -#else - add r1, fp, #0x194 - bl InitMove - ldr r0, [r7, #0xc] -#endif - add r1, sp, #0x34 - bl TwoTurnMoveForcedMiss - cmp r0, #0 - ldr r0, [sp, #8] - mov r1, #1 - ldrsh r0, [r0, #4] -#ifdef JAPAN - movne r7, #0 -#else - movne fp, #0 -#endif - bl TestItemAiFlag - cmp r0, #0 - bne _0234791C - mov r0, sl - mov r1, #0x2e - bl IqSkillIsEnabled - cmp r0, #0 - bne _02347908 - mov r0, sl - mov r1, #0x60 - bl ExclusiveItemEffectIsActive__02347B80 - cmp r0, #0 - beq _0234791C -_02347908: -#ifdef JAPAN - ldr r1, [r6, #0xc] -#else - ldr r1, [r7, #0xc] -#endif - mov r0, sl - bl ov29_022FAFD4 - cmp r0, #0 -#ifdef JAPAN - movne r7, #0 -_0234791C: - cmp r7, #0 - beq _02347960 - cmp r5, #0x40 - bge _02347950 - ldr r1, [r6, #0xc] - add r2, sp, #0x48 - mov r0, sl - str r1, [r2, r5, lsl #3] - bl DoesProjectileHitTarget - add r1, sp, #0x48 - add r1, r1, r5, lsl #3 - strb r0, [r1, #4] - add r5, r5, #1 -#else - movne fp, #0 -_0234791C: - cmp fp, #0 - beq _02347960 - cmp r6, #0x40 - bge _02347950 - ldr r1, [r7, #0xc] - add r2, sp, #0x48 - mov r0, sl - str r1, [r2, r6, lsl #3] - bl DoesProjectileHitTarget - add r1, sp, #0x48 - add r1, r1, r6, lsl #3 - strb r0, [r1, #4] - add r6, r6, #1 -#endif -_02347950: - ldrb r0, [r8] - cmp r0, #0 -#ifdef JAPAN - moveq r6, #0 - beq _02347978 -_02347960: - sub fp, fp, #1 - cmp fp, #0 - bgt _023475E8 - mov r6, #1 -_02347978: - mov r0, #0 - bl ov29_0234B4CC - ldr r0, _02348EF8 ; =0x00000922 - mov fp, #0 - sub r0, r0, #1 - str r0, [sp, #0x2c] - b _02347A94 -_02347988: - add r0, sp, #0x48 - ldr r7, [r0, fp, lsl #3] - cmp r7, #0 - moveq r0, #0 - beq _02348D5C - ldr r0, [r7] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_02348D5C: - cmp r0, #0 - beq _02347A90 - add r0, sp, #0x48 - add r0, r0, fp, lsl #3 -#else - moveq r7, #0 - beq _02347978 -_02347960: - ldr r0, [sp, #0x24] - sub r0, r0, #1 - str r0, [sp, #0x24] - cmp r0, #0 - bgt _023475E8 - mov r7, #1 -_02347978: - mov r0, #0 - bl ov29_0234B4CC - mov r5, #0 - b _02347A94 -_02347988: - mov r0, sl - bl EntityIsValid__02347BA4 - cmp r0, #0 - beq _02347A9C - add r0, sp, #0x48 - ldr fp, [r0, r5, lsl #3] - mov r0, fp - bl EntityIsValid__02347BA4 - cmp r0, #0 - beq _02347A90 - add r0, sp, #0x48 - add r0, r0, r5, lsl #3 -#endif - ldrb r0, [r0, #4] - cmp r0, #0 - beq _02347A38 - mov r0, #0 -#ifdef JAPAN - mov r1, r7 -#else - mov r1, fp -#endif - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, [sp, #8] - mov r0, #0 - bl ov29_02344B70 -#ifdef JAPAN - mov r0, sl - mov r1, r7 - mov r2, #0x920 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, sl - mov r1, r7 -#else - ldr r2, _02347B48 ; =0x00000BE1 - mov r0, sl - mov r1, fp - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, sl - mov r1, fp -#endif - bl ov29_02307BDC - mov r2, r0 - ldr r0, [sp, #0x1c] - mov r3, sl - cmp r0, #0 - ldreqb r0, [r8] - cmpeq r0, #0 - movne r0, #1 - moveq r0, #0 - and r1, r0, #0xff - ldr r0, [sp, #8] -#ifdef JAPAN - str r7, [sp] -#else - str fp, [sp] -#endif - str r0, [sp, #4] - mov r0, #1 - bl ApplyItemEffect - b _02347A90 -_02347A38: - ldrb r0, [r8] -#ifdef JAPAN - mov r1, r7 - cmp r0, #0 - mov r0, #0 - cmpeq r5, #1 - mov r2, r0 - moveq r6, #1 -#else - mov r1, fp - cmp r0, #0 - mov r0, #0 - cmpeq r6, #1 - mov r2, r0 - moveq r7, #1 -#endif - bl SubstitutePlaceholderStringTags - ldr r1, [sp, #8] - mov r0, #0 - bl ov29_02344B44 - ldrb r0, [r8] -#ifdef JAPAN - mov r1, r7 -#else - mov r1, fp - ldr r2, _02347B48 ; =0x00000BE1 -#endif - cmp r0, #0 - mov r0, sl - beq _02347A88 -#ifdef JAPAN - ldr r2, [sp, #0x2c] -#else - add r2, r2, #1 -#endif - bl LogMessageByIdWithPopupCheckUserTarget - b _02347A90 -_02347A88: -#ifdef JAPAN - ldr r2, _02348EF8 ; =0x00000922 -#else - add r2, r2, #2 -#endif - bl LogMessageByIdWithPopupCheckUserTarget -_02347A90: -#ifdef JAPAN - add fp, fp, #1 -_02347A94: - cmp fp, r5 -#else - add r5, r5, #1 -_02347A94: - cmp r5, r6 -#endif - blt _02347988 -_02347A9C: - mov r0, sb, lsl #0x10 - mov r0, r0, lsr #0x10 - ldr r1, _02347B40 ; =DIRECTIONS_XY - mov r2, r0, lsl #2 - add r0, r1, r0, lsl #2 - ldrh r1, [r1, r2] - ldrh r0, [r0, #2] -#ifdef JAPAN - cmp r6, #0 -#else - cmp r7, #0 -#endif - strh r1, [sp, #0x30] - strh r0, [sp, #0x32] - ldrsh r1, [sp, #0x30] - ldrsh r0, [sp, #0x32] - mov r1, r1, lsl #3 - mov r0, r0, lsl #3 - strh r1, [sp, #0x40] - strh r0, [sp, #0x42] - beq _02347B34 -#ifdef JAPAN - cmp r6, #1 - beq _02347AF4 - cmp r6, #2 -#else - cmp r7, #1 - beq _02347AF4 - cmp r7, #2 -#endif - beq _02347B1C - b _02347B34 -_02347AF4: - add r1, sp, #0x40 - str r1, [sp] - mov r5, #0 - ldr r2, [sp, #8] - mov r0, sl - add r1, r4, #0xcc - mov r3, #1 - str r5, [sp, #4] - bl SpawnDroppedItem - b _02347B34 -_02347B1C: - ldr r1, [sp, #8] - mov r0, #0 - bl ov29_02344B70 - ldr r1, _02347B4C ; =0x00000BE5 - mov r0, sl - bl LogMessageByIdWithPopupCheckUser -_02347B34: - add sp, sp, #0x248 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02347B3C: .word DUNGEON_PTR -_02347B40: .word DIRECTIONS_XY -_02347B44: .word ov29_023516FC -#ifdef JAPAN -_02348EF8: .word 0x00000922 -_02347B4C: .word 0x00000924 -#else -_02347B48: .word 0x00000BE1 -_02347B4C: .word 0x00000BE5 -#endif - arm_func_end ov29_02347518 diff --git a/asm/overlay_29_02346834.s b/asm/overlay_29_02346834.s new file mode 100644 index 00000000..b19e124d --- /dev/null +++ b/asm/overlay_29_02346834.s @@ -0,0 +1,1788 @@ + .include "asm/macros.inc" + .include "overlay_29_02346834.inc" + + .text + + arm_func_start GenerateMoneyQuantity +GenerateMoneyQuantity: ; 0x02346834 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r0, #0x64 + mov r4, r1 + bl DungeonRandInt + mov r3, #0 + ldr r2, _02346884 ; =MONEY_QUANTITY_TABLE + b _02346870 +_02346854: + ldr r1, [r2, r0, lsl #2] + cmp r1, r4 + strleh r0, [r5, #2] + ldmleia sp!, {r3, r4, r5, pc} + add r0, r0, r0, lsr #31 + mov r0, r0, asr #1 + add r3, r3, #1 +_02346870: + cmp r3, #0xc8 + blt _02346854 + mov r0, #1 + strh r0, [r5, #2] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02346884: .word MONEY_QUANTITY_TABLE + arm_func_end GenerateMoneyQuantity + + arm_func_start ov29_02346888 +ov29_02346888: ; 0x02346888 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + ldr r1, _023468F8 ; =DUNGEON_PTR + mov r0, #7 + ldr r1, [r1] + ldrb r4, [r1, #0xc] + bl IsCurrentMissionType + ldr r1, _023468F8 ; =DUNGEON_PTR + mov r0, #0 + ldr r2, [r1] + strb r0, [r2, #0xc] + ldr r1, [r1] + ldrb r1, [r1, #0xc] + cmp r1, #1 + cmpeq r4, #0 + bne _023468F0 +#ifdef JAPAN + ldr r1, _02347CAC ; =0x0000091F + mov r2, r0 + mov r3, r0 +#else + mov r2, r0 + mov r3, r0 + mov r1, #0xbe0 +#endif + str r0, [sp] + bl YesNoMenu + cmp r0, #1 + bne _023468F0 + mov r0, #2 + mov r1, #1 + bl ov29_022E09E8 +_023468F0: + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_023468F8: .word DUNGEON_PTR +#ifdef JAPAN +_02347CAC: .word 0x0000091F +#endif + arm_func_end ov29_02346888 + + arm_func_start ov29_023468FC +ov29_023468FC: ; 0x023468FC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r4, r0 + ldrsh r0, [r4, #4] + bl GetItemCategoryVeneer + cmp r0, #5 + bne _023469D4 + ldrsh r0, [r4, #4] + bl GetItemMoveId16 + mov r8, r0 + ldrsh r0, [r4, #4] + bl IsHM + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r7, #0 + mov r6, r7 + mov r5, r7 + mov fp, r7 + ldr r4, _023469DC ; =DUNGEON_PTR + b _023469C4 +_0234694C: + ldr r0, [r4] + add r0, r0, r7, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sl, [r0, #0xa84] +#else + ldr sl, [r0, #0xb28] +#endif + mov r0, sl + bl EntityIsValid__02345698 + cmp r0, #0 + beq _023469C0 + ldr r1, [sl, #0xb4] + mov r0, r8 + ldrsh r1, [r1, #2] + bl sub_02053D1C + mov sb, r0 + mov r0, sl + bl ov29_023009A0 + cmp r0, #0 + movne sb, r6 + mov r0, sl + mov r1, r8 + bl ov29_022FBA54 + cmp r0, #0 + movne sb, r5 + mov r0, sl + bl ov29_022FBA70 + cmp r0, #0 + movne sb, fp + cmp sb, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_023469C0: + add r7, r7, #1 +_023469C4: + cmp r7, #4 + blt _0234694C + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_023469D4: + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_023469DC: .word DUNGEON_PTR + arm_func_end ov29_023468FC + + arm_func_start ov29_023469E0 +ov29_023469E0: ; 0x023469E0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r8, #0 + ldr r5, _02346A60 ; =BAG_ITEMS_PTR_MIRROR + mov sl, r0 + mov r6, r8 + mov r7, #1 + mov fp, r8 + mov r4, #6 +_02346A00: + mul r1, r8, r4 + ldr r0, [r5] + ldr r2, [r0, #0x384] + ldrb r0, [r2, r1] + add sb, r2, r1 + tst r0, #1 + movne r0, r7 + moveq r0, r6 + tst r0, #0xff + beq _02346A48 + ldrb r0, [sb] + tst r0, sl + beq _02346A48 + ldrb r0, [sb, #1] + mov r1, fp + bl ClearItem + mov r0, sb + bl ItemZInit +_02346A48: + add r8, r8, #1 + cmp r8, #0x32 + blt _02346A00 + bl RemoveEmptyItemsInBag +#ifdef EUROPE + mov r0, #0 +#endif + bl ov29_022FB920 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02346A60: .word BAG_ITEMS_PTR_MIRROR + arm_func_end ov29_023469E0 + + arm_func_start ov29_02346A64 +ov29_02346A64: ; 0x02346A64 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r4, #0 + ldr r5, _02346BD0 ; =DUNGEON_PTR + mov r7, #0x55 + mov r6, r4 +_02346A78: + ldr r0, [r5] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r8, [r0, #0xa84] +#else + ldr r8, [r0, #0xb28] +#endif + mov r0, r8 + bl EntityIsValid__02345698 + cmp r0, #0 + beq _02346AC4 + ldr sb, [r8, #0xb4] + add r0, sb, #0x62 + bl IsLosableItem + cmp r0, #0 + beq _02346AC4 + mov r1, r7 + mov r2, r6 + add r0, sb, #0x62 + ldrb r8, [sb, #0x63] + bl InitStandardItem + strb r8, [sb, #0x63] +_02346AC4: + add r4, r4, #1 + cmp r4, #4 + blt _02346A78 + mov sb, #0 + mov r7, #1 + mov r6, sb + mov r4, sb + mov r5, r7 + mov fp, #0x55 +_02346AE8: + mov r0, sb, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetActiveTeamMember + mov r8, r0 + ldrb r0, [r8] + tst r0, #1 + movne r1, r7 + moveq r1, r6 + tst r1, #0xff + beq _02346B5C + tst r0, #2 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _02346B5C + ldrsh r0, [r8, #8] + bl IsMonsterIdInNormalRange + cmp r0, #0 + beq _02346B5C + add r0, r8, #0x3e + bl IsLosableItem + cmp r0, #0 + beq _02346B5C + mov r1, fp + mov r2, #0 + add r0, r8, #0x3e + ldrb sl, [r8, #0x3f] + bl InitStandardItem + strb sl, [r8, #0x3f] +_02346B5C: + add sb, sb, #1 + cmp sb, #4 + blt _02346AE8 + mov r4, #0 + ldr r6, _02346BD4 ; =BAG_ITEMS_PTR_MIRROR + mov r8, #0x55 + mov r7, r4 + mov r5, #6 +_02346B7C: + ldr r0, [r6] + ldr r0, [r0, #0x384] + mla sb, r4, r5, r0 + mov r0, sb + bl IsLosableItem + cmp r0, #0 + beq _02346BB8 + mov r0, sb + mov r1, r8 + mov r2, r7 + ldrb sl, [sb, #1] + bl InitStandardItem + mov r0, sb + bl SetItemAcquired + strb sl, [sb, #1] +_02346BB8: + add r4, r4, #1 + cmp r4, #0x32 + blt _02346B7C + bl RemoveEmptyItemsInBag +#ifdef EUROPE + mov r0, #0 +#endif + bl ov29_022FB920 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02346BD0: .word DUNGEON_PTR +_02346BD4: .word BAG_ITEMS_PTR_MIRROR + arm_func_end ov29_02346A64 + + arm_func_start CheckTeamItemsFlags +CheckTeamItemsFlags: ; 0x02346BD8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _02346CB4 ; =BAG_ITEMS_PTR_MIRROR + mov r7, #0 + mov r5, r0 + ldr r8, [r1] + mov r2, r7 + mov r3, #1 + mov r0, #6 + b _02346C30 +_02346BFC: + mul r4, r7, r0 + ldr r6, [r8, #0x384] + ldrb r1, [r6, r4] + tst r1, #1 + movne r1, r3 + moveq r1, r2 + tst r1, #0xff + beq _02346C2C + ldrb r1, [r6, r4] + tst r1, r5 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_02346C2C: + add r7, r7, #1 +_02346C30: + cmp r7, #0x32 + blt _02346BFC + bl RemoveEmptyItemsInBag +#ifdef EUROPE + mov r0, #0 +#endif + bl ov29_022FB920 + mov r4, #0 + mov r7, r4 + mov r8, #1 + ldr r6, _02346CB8 ; =DUNGEON_PTR + b _02346CA4 +_02346C54: + ldr r0, [r6] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sb, [r0, #0xa84] +#else + ldr sb, [r0, #0xb28] +#endif + mov r0, sb + bl EntityIsValid__02345698 + cmp r0, #0 + beq _02346CA0 + ldr r1, [sb, #0xb4] + ldrb r0, [r1, #0x62] + tst r0, #1 + movne r0, r8 + moveq r0, r7 + tst r0, #0xff + beq _02346CA0 + ldrb r0, [r1, #0x62] + tst r0, r5 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_02346CA0: + add r4, r4, #1 +_02346CA4: + cmp r4, #4 + blt _02346C54 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02346CB4: .word BAG_ITEMS_PTR_MIRROR +_02346CB8: .word DUNGEON_PTR + arm_func_end CheckTeamItemsFlags + + arm_func_start ov29_02346CBC +ov29_02346CBC: ; 0x02346CBC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sb, #0 + mov r8, #1 + ldr r5, _02346DA0 ; =BAG_ITEMS_PTR_MIRROR + mov r7, sb + mov fp, sb + mov r6, r8 + mov r4, #6 +_02346CDC: + mul r1, sb, r4 + ldr r0, [r5] + ldr r2, [r0, #0x384] + ldrb r0, [r2, r1] + add sl, r2, r1 + tst r0, #1 + movne r0, r8 + moveq r0, r7 + tst r0, #0xff + beq _02346D8C + ldrb r0, [sl] + bic r0, r0, #8 + strb r0, [sl] + ldrsh r0, [sl, #4] + cmp r0, #0xb7 + bne _02346D78 + mov r0, sl + bl sub_0200D8AC + bl AddMoneyCarried + ldrb r0, [sl, #1] + cmp r0, #0 + beq _02346D70 + sub r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetActiveTeamMember + ldrb r1, [r0, #0x3e] + tst r1, #1 + movne r1, r6 + moveq r1, fp + tst r1, #0xff + beq _02346D70 + ldrsh r1, [r0, #0x42] + cmp r1, #0xb7 + bne _02346D70 + add r0, r0, #0x3e + bl ItemZInit +_02346D70: + mov r0, sl + bl ItemZInit +_02346D78: + ldrb r0, [sl] + tst r0, #2 + beq _02346D8C + mov r0, sl + bl ItemZInit +_02346D8C: + add sb, sb, #1 + cmp sb, #0x32 + blt _02346CDC + bl RemoveEmptyItemsInBag + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02346DA0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end ov29_02346CBC + + arm_func_start ov29_02346DA4 +ov29_02346DA4: ; 0x02346DA4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + bl ov29_02346CBC + bl RemoveEmptyItemsInBag +#ifdef EUROPE + mov r0, #0 +#endif + bl ov29_022FB920 + mov r8, #0 + mov r7, #1 + mov r6, r8 + mov r4, r8 + mov r5, r7 +_02346DC8: + mov r0, r8 + bl GetActiveTeamMember + mov sb, r0 + ldrb r0, [sb] + tst r0, #1 + movne r0, r7 + moveq r0, r6 + tst r0, #0xff + beq _02346E30 + ldrb r0, [sb, #0x3e] + tst r0, #1 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _02346E30 + ldrb r0, [sb, #0x3e] + bic r0, r0, #8 + strb r0, [sb, #0x3e] + ldrsh r0, [sb, #0x42] + cmp r0, #0xb7 + bne _02346E30 + add r0, sb, #0x3e + bl sub_0200D8AC + bl AddMoneyCarried + add r0, sb, #0x3e + bl ItemZInit +_02346E30: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #4 + blt _02346DC8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end ov29_02346DA4 + + arm_func_start ov29_02346E48 +ov29_02346E48: ; 0x02346E48 + stmdb sp!, {r3, lr} +#ifdef JAPAN + bl IsMarowakTrainingMaze + cmp r0, #0 + beq _02348210 +#endif + bl ov29_02346CBC +_02348210: + bl sub_02057CE8 + bl CleanStickyItemsInBag + ldmia sp!, {r3, pc} + arm_func_end ov29_02346E48 + + arm_func_start ov29_02346E5C +ov29_02346E5C: ; 0x02346E5C + stmdb sp!, {r3, r4, r5, lr} + mov r5, #0 + ldr r1, _02346EB8 ; =BAG_ITEMS_PTR_MIRROR + mov r3, r5 + mov ip, #1 + mov r0, #6 +_02346E74: + mul lr, r5, r0 + ldr r2, [r1] + ldr r4, [r2, #0x384] + ldrb r2, [r4, lr] + tst r2, #1 + movne r2, ip + moveq r2, r3 + tst r2, #0xff + beq _02346EA8 + ldrb r2, [r4, lr] + tst r2, #4 + bicne r2, r2, #4 + strneb r2, [r4, lr] +_02346EA8: + add r5, r5, #1 + cmp r5, #0x32 + blt _02346E74 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02346EB8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end ov29_02346E5C + + arm_func_start ov29_02346EBC +ov29_02346EBC: ; 0x02346EBC + ldrb r1, [r0, #6] + cmp r1, #0 + bne _02346F04 + ldr r1, _02346F0C ; =DUNGEON_PTR +#ifdef JAPAN + mov ip, #0 +#else + mov r3, #0 +#endif + ldr r1, [r1] + add r1, r1, #0x3f4 + add r2, r1, #0x400 +#ifdef JAPAN + mov r1, #0x23c + b _023482BC +_02346EE0: + mla r3, ip, r1, r2 + cmp r3, r0 + ldreq r0, _02346F10 ; =ov29_023531C8 + ldreqb r0, [r0, ip] + bxeq lr + add ip, ip, #1 +_023482BC: + cmp ip, #4 +#else + b _02346EFC +_02346EE0: + add r1, r3, r3, lsl #3 + add r1, r2, r1, lsl #6 + cmp r1, r0 + ldreq r0, _02346F10 ; =ov29_023531C8 + ldreqb r0, [r0, r3] + bxeq lr + add r3, r3, #1 +_02346EFC: + cmp r3, #4 +#endif + blt _02346EE0 +_02346F04: + mov r0, #0 + bx lr + .align 2, 0 +_02346F0C: .word DUNGEON_PTR +_02346F10: .word ov29_023531C8 + arm_func_end ov29_02346EBC + + arm_func_start AddHeldItemToBag +AddHeldItemToBag: ; 0x02346F14 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r0 + bl GetCurrentBagCapacity + ldr r1, _02346FB4 ; =BAG_ITEMS_PTR_MIRROR + mov lr, #0 + ldr r6, [r1] + mov r2, lr + mov r3, #1 + mov r1, #6 + b _02346FA4 +_02346F3C: + mul r4, lr, r1 + ldr ip, [r6, #0x384] + ldrb ip, [ip, r4] + tst ip, #1 + movne ip, r3 + moveq ip, r2 + tst ip, #0xff + bne _02346FA0 + mov r0, r5 + bl ov29_02346EBC + strb r0, [r5, #0x63] + ldr r0, _02346FB4 ; =BAG_ITEMS_PTR_MIRROR + ldrh r1, [r5, #0x62] + ldr r2, [r0] + add r0, r5, #0x62 + ldr r2, [r2, #0x384] + strh r1, [r2, r4] + ldrh r1, [r5, #0x64] + add r2, r2, r4 + strh r1, [r2, #2] + ldrh r1, [r5, #0x66] + strh r1, [r2, #4] + bl SetItemAcquired + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_02346FA0: + add lr, lr, #1 +_02346FA4: + cmp lr, r0 + blt _02346F3C + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02346FB4: .word BAG_ITEMS_PTR_MIRROR + arm_func_end AddHeldItemToBag + + arm_func_start ov29_02346FB8 +ov29_02346FB8: ; 0x02346FB8 + ldr r1, _02346FFC ; =DUNGEON_PTR +#ifdef JAPAN + mov ip, #0 +#else + mov r3, #0 +#endif + ldr r1, [r1] + add r1, r1, #0x56 + add r2, r1, #0x800 +#ifdef JAPAN + mov r1, #0x23c + b _023483A4 +_02348394: + mla r3, ip, r1, r2 + cmp r3, r0 + beq _023483AC + add ip, ip, #1 +_023483A4: + cmp ip, #4 + blt _02348394 +_023483AC: + cmp ip, #4 + mvneq r0, #0 + movne r0, ip +#else + b _02346FE4 +_02346FD0: + add r1, r3, r3, lsl #3 + add r1, r2, r1, lsl #6 + cmp r1, r0 + beq _02346FEC + add r3, r3, #1 +_02346FE4: + cmp r3, #4 + blt _02346FD0 +_02346FEC: + cmp r3, #4 + mvneq r0, #0 + movne r0, r3 +#endif + bx lr + .align 2, 0 +_02346FFC: .word DUNGEON_PTR + arm_func_end ov29_02346FB8 + + arm_func_start ov29_02347000 +ov29_02347000: ; 0x02347000 + ldr r1, _0234702C ; =ov10_022C4CD8 + b _02347018 +_02347008: + cmp r0, r2 + moveq r0, #1 + bxeq lr + add r1, r1, #2 +_02347018: + ldrsh r2, [r1] + cmp r2, #0 + bne _02347008 + mov r0, #0 + bx lr + .align 2, 0 +_0234702C: .word ov10_022C4CD8 + arm_func_end ov29_02347000 + + arm_func_start RemoveEmptyItemsInBagWrapper +RemoveEmptyItemsInBagWrapper: ; 0x02347030 + stmdb sp!, {r3, lr} + bl RemoveEmptyItemsInBag +#ifdef EUROPE + mov r0, #0 +#endif + bl ov29_022FB920 + ldmia sp!, {r3, pc} + arm_func_end RemoveEmptyItemsInBagWrapper + + arm_func_start ov29_02347040 +ov29_02347040: ; 0x02347040 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r8, #0 + ldr r5, _023470F8 ; =DUNGEON_PTR + ldr r6, _023470FC ; =BAG_ITEMS_PTR_MIRROR + mov fp, r8 + mov r7, #1 + mov r4, #6 +_0234705C: + mul sl, r8, r4 + ldr r0, [r6] + ldr r1, [r0, #0x384] + ldrb r0, [r1, sl] + add r1, r1, sl + tst r0, #1 + movne r0, r7 + moveq r0, fp + tst r0, #0xff + ldrneb r1, [r1, #1] + cmpne r1, #0 + beq _023470E8 + ldr r0, [r5] + add r0, r0, r1, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sb, [r0, #0xa80] +#else + ldr sb, [r0, #0xb24] +#endif + mov r0, sb + bl EntityIsValid__02345698 + cmp r0, #0 + bne _023470C0 + ldr r0, [r6] + ldr r0, [r0, #0x384] + add r0, r0, sl + bl sub_0200D894 + b _023470E8 +_023470C0: + ldr r1, [r6] + ldr r0, [sb, #0xb4] + ldr r2, [r1, #0x384] + ldrh r1, [r2, sl] + add r2, r2, sl + strh r1, [r0, #0x62] + ldrh r1, [r2, #2] + strh r1, [r0, #0x64] + ldrh r1, [r2, #4] + strh r1, [r0, #0x66] +_023470E8: + add r8, r8, #1 + cmp r8, #0x32 + blt _0234705C + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_023470F8: .word DUNGEON_PTR +_023470FC: .word BAG_ITEMS_PTR_MIRROR + arm_func_end ov29_02347040 + + arm_func_start ov29_02347100 +ov29_02347100: ; 0x02347100 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl GetLeader + mov r4, r0 + bl ov29_022EBB8C + mov r1, r0 + mov r0, r4 + mov r2, #0xa + bl GetItemToUseByIndex + mov r4, r0 + bl ov29_022EBB98 + cmp r0, #0x90 + bhs _0234717C + mov r0, r4 + bl GetItemAction + cmp r0, #0 + beq _0234717C + ldrb r0, [r4] + tst r0, #8 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r4 + bl ov29_023468FC + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, r5 + bl MonsterHasEmbargoStatus + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, pc} +_0234717C: + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov29_02347100 + + arm_func_start ov29_02347184 +ov29_02347184: ; 0x02347184 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc8 + mov sb, #0 + mov r7, #1 + mov sl, r0 + mov r8, sb + mov r6, sb + mov fp, sb + mov r5, r7 + add r4, sp, #0 +_023471AC: + mov r0, r8 + bl GetItemAtIdx + cmp sl, #0 + beq _023471F4 + mov r2, sl + b _023471E0 +_023471C4: + ldrsh r1, [r0, #4] + cmp r3, r1 + bne _023471DC + ldrb r1, [r0, #1] + cmp r1, #0 + bne _023471EC +_023471DC: + add r2, r2, #2 +_023471E0: + ldrsh r3, [r2] + cmp r3, #0 + bne _023471C4 +_023471EC: + cmp r3, #0 + bne _02347224 +_023471F4: + ldrb r1, [r0] + tst r1, #1 + movne r2, r7 + moveq r2, r6 + tst r2, #0xff + beq _02347224 + tst r1, #8 + movne r1, r5 + moveq r1, fp + tst r1, #0xff + streq r0, [r4, sb, lsl #2] + addeq sb, sb, #1 +_02347224: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #0x32 + blt _023471AC + cmp sb, #0 + moveq r0, #0 + beq _023472B8 + bl DungeonRand16Bit + mov r1, sb + bl _s32_div_f + mov r0, r1, lsl #0x10 + add r1, sp, #0 + mov r0, r0, asr #0x10 +#ifdef JAPAN + ldr r4, [r1, r0, lsl #2] + ldrb r0, [r4] + orr r0, r0, #8 + strb r0, [r4] + ldrb r0, [r4, #1] + cmp r0, #0 + beq _023472B4 + sub r2, r0, #1 + mov r0, #0x23c + ldr r1, _023472C0 ; =DUNGEON_PTR + mul r3, r2, r0 + ldr r0, [r1] + add r0, r0, #0x56 + add r1, r0, #0x800 + ldrb r0, [r1, r3] +#else + ldr r3, [r1, r0, lsl #2] + ldrb r0, [r3] + orr r0, r0, #8 + strb r0, [r3] + ldrb r1, [r3, #1] + cmp r1, #0 + beq _023472B4 + ldr r0, _023472C0 ; =DUNGEON_PTR + sub r1, r1, #1 + ldr r0, [r0] + add r1, r1, r1, lsl #3 + add r0, r0, #0x56 + add r2, r0, #0x800 + ldrb r0, [r2, r1, lsl #6] + mov r1, r1, lsl #6 +#endif + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff +#ifdef JAPAN + ldrneb r0, [r1, r3] + orrne r0, r0, #8 + strneb r0, [r1, r3] +_023472B4: + ldrsh r0, [r4, #4] +#else + ldrneb r0, [r2, r1] + orrne r0, r0, #8 + strneb r0, [r2, r1] +_023472B4: + ldrsh r0, [r3, #4] +#endif +_023472B8: + add sp, sp, #0xc8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_023472C0: .word DUNGEON_PTR + arm_func_end ov29_02347184 + + arm_func_start GenerateItem +GenerateItem: ; 0x023472C4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r3 + mov r4, r1 + mov r3, #0 + mov r5, r0 + bl sub_0200CF6C + mov r0, r4 + mov r6, #0 + bl IsNotMoney + cmp r0, #0 + beq _02347324 + cmp r7, #0 + bne _0234731C + mov r0, #0x64 + bl DungeonRandInt + ldr r1, _02347374 ; =DUNGEON_PTR + ldr r1, [r1] + add r1, r1, #0x28000 +#ifdef JAPAN + ldrb r1, [r1, #0x618] +#else + ldrb r1, [r1, #0x6bc] +#endif + cmp r0, r1 + movlt r6, #1 + b _02347324 +_0234731C: + cmp r7, #1 + moveq r6, #1 +_02347324: + cmp r6, #0 + ldrneb r0, [r5] + orrne r0, r0, #8 + strneb r0, [r5] + mov r0, r4 + bl GetItemCategoryVeneer + cmp r0, #6 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r0, _02347374 ; =DUNGEON_PTR + ldr r1, [r0] + ldr r0, [r1, #0x7cc] + cmp r0, #0 + add r0, r1, #0x28000 +#ifdef JAPAN + ldrb r2, [r0, #0x625] +#else + ldrb r2, [r0, #0x6c9] +#endif + moveq r3, #5 + movne r3, #0x28 + mul r1, r2, r3 + mov r0, r5 + bl GenerateMoneyQuantity + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02347374: .word DUNGEON_PTR + arm_func_end GenerateItem + + arm_func_start ov29_02347378 +ov29_02347378: ; 0x02347378 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + ldr r3, _02347514 ; =DUNGEON_PTR + mov sl, r0 + ldr r0, [r3] + cmp r2, #0 + add r0, r0, #0x1a000 +#ifdef JAPAN + ldrb fp, [r0, #0x1a1] +#else + ldrb fp, [r0, #0x245] +#endif + beq _023473B0 + cmp r2, #0 + beq _023473B8 +#ifdef JAPAN + ldrb r0, [r0, #0x19a] +#else + ldrb r0, [r0, #0x23e] +#endif + cmp r0, #0 + bne _023473B8 +_023473B0: + mov r3, #1 + b _023473BC +_023473B8: + mov r3, #0 +_023473BC: + ldrsh r2, [r1] + ldrsh r1, [r1, #2] + mov r0, #0x18 + smulbb r2, r2, r0 + smulbb r0, r1, r0 + add r1, r2, #4 + add r0, r0, #4 + ands r4, r3, #0xff + mov r8, r1, lsl #8 + mov sb, r0, lsl #8 + beq _023474CC + ldr r5, [sl, #0xc] + sub r0, r5, r8 + bl abs + cmp r0, #0xc + bge _02347410 + ldr r0, [sl, #0x10] + sub r0, r0, sb + bl abs + cmp r0, #0xc + blt _023474CC +_02347410: + str r5, [sp, #0xc] + ldr r0, [sl, #0x10] + mov r6, #0 + str r0, [sp, #0x10] + sub r0, r8, r5 + mov r1, #0x18 + mov r7, r6 + bl _s32_div_f + ldr r1, [sp, #0x10] + str r0, [sp, #8] + sub r0, sb, r1 + mov r1, #0x18 + bl _s32_div_f + str r0, [sp, #4] + mov r5, r6 +_0234744C: + ldr r2, [sp, #0xc] + ldr r0, [sp, #8] + ldr r1, [sp, #0x10] + add r0, r2, r0 + str r0, [sp, #0xc] + ldr r0, [sp, #4] + add r0, r1, r0 + str r0, [sp, #0x10] + mov r0, r7 + bl sub_020018D0 + mov r1, #0xc + mul r1, r0, r1 + str r1, [sl, #0x1c] + mov r0, sl + add r1, sp, #0xc + bl UpdateEntityPixelPos + mov r0, #0 + str r0, [sp] + mov r0, sl + mov r1, fp + mov r2, #0 + and r3, r6, #0xff + bl ov29_023457C8 + mov r0, #0x13 + bl AdvanceFrame + tst r5, #3 + addeq r6, r6, #1 + add r5, r5, #1 + add r7, r7, #0x55 + and r6, r6, #7 + cmp r5, #0x18 + blt _0234744C +_023474CC: + mov r0, sl + mov r1, r8 + mov r2, sb + bl SetEntityPixelPosXY + mov r5, #0 + str r5, [sl, #0x1c] + cmp r4, #0 + beq _02347504 + mov r0, sl + mov r1, fp + mov r2, #1 + mov r3, #0xff + str r5, [sp] + bl ov29_023457C8 +_02347504: + mov r0, #0x13 + bl AdvanceFrame + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02347514: .word DUNGEON_PTR + arm_func_end ov29_02347378 + + arm_func_start ov29_02347518 +ov29_02347518: ; 0x02347518 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x248 + ldr r4, _02347B3C ; =DUNGEON_PTR + mov sl, r0 + ldr r4, [r4] + mov r6, #3 + add r0, r4, #0x1a000 +#ifdef JAPAN + ldrb r0, [r0, #0x1a1] +#else + ldrb r0, [r0, #0x245] +#endif + mov r5, #0 + mov sb, r3 + str r0, [sp, #0x20] + str r6, [r4, #0xcc] + mov r0, #1 + strb r5, [r4, #0xf0] + strb r0, [r4, #0xec] + strb r5, [r4, #0xee] + mov r0, r1 + str r0, [r4, #0x180] + str r5, [r4, #0xe8] +#ifdef JAPAN + ldrh r5, [r2] + str r1, [sp, #8] + mov r1, #0x18 + strh r5, [r4, #0xd0] + ldrh r5, [r2, #2] + add r0, r4, #0xcc + ldr r8, [sp, #0x270] + strh r5, [r4, #0xd2] +#else + ldrh r6, [r2] + str r1, [sp, #8] + mov r1, #0x18 + strh r6, [r4, #0xd0] + ldrh r6, [r2, #2] + add r0, r4, #0xcc + ldr r8, [sp, #0x270] + strh r6, [r4, #0xd2] +#endif + ldrsh r3, [r2] + ldrsh r2, [r2, #2] + smulbb r3, r3, r1 + smulbb r2, r2, r1 + add r1, r3, #4 + mov r1, r1, lsl #8 + mov r2, r2, lsl #8 + bl SetEntityPixelPosXY +#ifdef JAPAN + mov r0, #0 +#else + mov r0, r5 +#endif + str r0, [sp, #0x1c] + strh r0, [r4, #0xf2] + ldr r0, [sl] + cmp r0, #1 + bne _023475D4 + mov r0, sl + mov r1, #0x31 + bl ItemIsActive__02347B50 + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x1c] +_023475D4: +#ifdef JAPAN + mov r0, #1 + ldrsh fp, [r8, #2] + mov r5, #0 +#else + ldrsh r1, [r8, #2] + mov r0, #1 + mov r6, #0 + str r1, [sp, #0x24] +#endif + bl ov29_0234B4CC +_023475E8: + ldrh r2, [r4, #0xd0] + ldrh r1, [r4, #0xd2] + ldrb r0, [r8, #1] + strh r2, [sp, #0x44] + strh r1, [sp, #0x46] + cmp r0, #0 + beq _023476BC + ldrb r0, [r8] + cmp r0, #0 + bne _023476BC + ldr r1, _02347B40 ; =DIRECTIONS_XY + mov r2, sb, lsl #2 + add r0, r1, sb, lsl #2 +#ifdef JAPAN + ldrsh r6, [r4, #0xd0] +#else + ldrsh r7, [r4, #0xd0] +#endif + ldrsh r3, [r1, r2] + ldrsh r2, [r4, #0xd2] + ldrsh r1, [r0, #2] +#ifdef JAPAN + add r0, r6, r3 +#else + add r0, r7, r3 +#endif + add r1, r2, r1 + bl GetTile + ldrh r0, [r0] + tst r0, #3 + bne _023476BC + ldrsh r0, [sp, #0x46] +#ifdef JAPAN + mov r6, #0 +#else + mov r7, #0 +#endif + str r0, [sp, #0x10] + ldrsh r0, [sp, #0x44] + str r0, [sp, #0xc] + ldr r0, _02347B44 ; =ov29_023516FC + add r0, r0, sb, lsl #2 +#ifdef JAPAN + str r0, [sp, #0x24] + b _023476B4 +_02347668: + ldr r0, [sp, #0x24] + ldrb r7, [r6, r0] + cmp r7, #8 + bge _023476B0 + ldr r0, _02347B40 ; =DIRECTIONS_XY + mov r1, r7, lsl #2 + ldrsh r1, [r0, r1] + add r0, r0, r7, lsl #2 +#else + str r0, [sp, #0x28] + b _023476B4 +_02347668: + ldr r0, [sp, #0x28] + ldrb fp, [r7, r0] + cmp fp, #8 + bge _023476B0 + ldr r0, _02347B40 ; =DIRECTIONS_XY + mov r1, fp, lsl #2 + ldrsh r1, [r0, r1] + add r0, r0, fp, lsl #2 +#endif + ldrsh r2, [r0, #2] + ldr r0, [sp, #0xc] + add r0, r0, r1 + ldr r1, [sp, #0x10] + add r1, r1, r2 + bl GetTile + ldrh r0, [r0] + tst r0, #3 +#ifdef JAPAN + movne sb, r7 + bne _023476BC +_023476B0: + add r6, r6, #1 +_023476B4: + cmp r6, #4 +#else + movne sb, fp + bne _023476BC +_023476B0: + add r7, r7, #1 +_023476B4: + cmp r7, #4 +#endif + blt _02347668 +_023476BC: + mov r0, sb, lsl #0x10 + mov r1, r0, lsr #0x10 + ldr r0, _02347B40 ; =DIRECTIONS_XY + mov r2, r1, lsl #2 + ldrh r2, [r0, r2] + add r1, r0, r1, lsl #2 + ldrsh r3, [r4, #0xd0] + strh r2, [sp, #0x3c] + ldrsh r2, [sp, #0x3c] + ldrh r1, [r1, #2] + add r2, r3, r2 + strh r1, [sp, #0x3e] + strh r2, [r4, #0xd0] + ldrsh r1, [sp, #0x3e] + ldrsh r2, [r4, #0xd2] + add r1, r2, r1 + strh r1, [r4, #0xd2] + ldrsh r2, [r4, #0xd0] + cmp r2, #0 + ldrgesh r1, [r4, #0xd2] + cmpge r1, #0 + blt _02347720 + cmp r2, #0x38 + cmplt r1, #0x20 + blt _02347728 +_02347720: +#ifdef JAPAN + mov r6, #2 +#else + mov r7, #2 +#endif + b _02347978 +_02347728: + mov r2, sb, lsl #2 + add r1, r0, sb, lsl #2 + ldrsh r0, [r0, r2] + ldrsh r1, [r1, #2] +#ifdef JAPAN + mov r6, #0 +#else + mov r7, #0 +#endif + mov r0, r0, lsl #0xa + str r0, [sp, #0x14] + and r0, sb, #0xff +#ifdef JAPAN + mov r7, r1, lsl #0xa + str r0, [sp, #0x28] +#else + mov fp, r1, lsl #0xa + str r0, [sp, #0x2c] +#endif +_02347750: + mov r0, #0 + str r0, [sp, #0x18] + ldr r1, [sp, #0x14] + add r0, r4, #0xcc +#ifdef JAPAN + mov r2, r7 +#else + mov r2, fp +#endif + bl IncrementEntityPixelPosXY + bl IsWaterTileset + cmp r0, #0 + ldr r0, [r4, #0xd8] + ldr r1, [r4, #0xdc] + movne r2, #3 + mov r0, r0, asr #8 + mov r1, r1, asr #8 + moveq r2, #0 + add r0, r0, #8 + add r1, r1, #0x10 + bl ov29_022E9488 + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x18] + mov r0, #1 + str r0, [sp] + ldr r1, [sp, #0x20] +#ifdef JAPAN + ldr r3, [sp, #0x28] +#else + ldr r3, [sp, #0x2c] +#endif + add r0, r4, #0xcc + mov r2, #0 + bl ov29_023457C8 + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x18] + ldr r0, [sp, #0x18] + cmp r0, #0 + beq _023477DC + mov r0, #0x12 + bl AdvanceFrame +_023477DC: +#ifdef JAPAN + add r6, r6, #1 + cmp r6, #6 +#else + add r7, r7, #1 + cmp r7, #6 +#endif + blt _02347750 + ldrsh r0, [r4, #0xd0] + ldrsh r1, [r4, #0xd2] + bl GetTile +#ifdef JAPAN + mov r6, r0 + ldrh r0, [r6] +#else + mov r7, r0 + ldrh r0, [r7] +#endif + tst r0, #3 + ldreqb r0, [r8] + cmpeq r0, #0 + bne _02347824 + ldrh r1, [sp, #0x44] + ldrh r0, [sp, #0x46] +#ifdef JAPAN + mov r6, #1 +#else + mov r7, #1 +#endif + strh r1, [r4, #0xd0] + strh r0, [r4, #0xd2] + b _02347978 +_02347824: +#ifdef JAPAN + ldr r0, [r6, #0xc] +#else + ldr r0, [r7, #0xc] +#endif + cmp r0, #0 + beq _02347960 + ldrb r1, [r8] +#ifdef JAPAN + mov r7, #0 +#else + mov fp, #0 +#endif + cmp r1, #0 + ldreq r1, [r0] + cmpeq r1, #1 + bne _02347870 + mov r1, #0x2d + bl ItemIsActive__02347B50 + cmp r0, #0 + bne _0234786C +#ifdef JAPAN + ldr r0, [r6, #0xc] +#else + ldr r0, [r7, #0xc] +#endif + mov r1, #0x54 + bl ExclusiveItemEffectIsActive__02347B80 + cmp r0, #0 + beq _02347870 +_0234786C: +#ifdef JAPAN + mov r7, #1 +_02347870: + cmp r7, #0 + addne r0, sb, #4 + andne sb, r0, #7 + bne _02347960 + ldr r0, [r6, #0xc] + mov r7, #1 +#else + mov fp, #1 +_02347870: + cmp fp, #0 + beq _02347894 + add r5, r5, #1 + cmp r5, #2 + movge r7, #1 + bge _02347978 + add r0, sb, #4 + and sb, r0, #7 + b _02347960 +_02347894: + ldr r0, [r7, #0xc] + mov fp, #1 +#endif + ldr r0, [r0] + cmp r0, #1 + bne _0234791C + add r0, sp, #0x34 +#ifdef JAPAN + add r1, r7, #0x194 + bl InitMove + ldr r0, [r6, #0xc] +#else + add r1, fp, #0x194 + bl InitMove + ldr r0, [r7, #0xc] +#endif + add r1, sp, #0x34 + bl TwoTurnMoveForcedMiss + cmp r0, #0 + ldr r0, [sp, #8] + mov r1, #1 + ldrsh r0, [r0, #4] +#ifdef JAPAN + movne r7, #0 +#else + movne fp, #0 +#endif + bl TestItemAiFlag + cmp r0, #0 + bne _0234791C + mov r0, sl + mov r1, #0x2e + bl IqSkillIsEnabled + cmp r0, #0 + bne _02347908 + mov r0, sl + mov r1, #0x60 + bl ExclusiveItemEffectIsActive__02347B80 + cmp r0, #0 + beq _0234791C +_02347908: +#ifdef JAPAN + ldr r1, [r6, #0xc] +#else + ldr r1, [r7, #0xc] +#endif + mov r0, sl + bl ov29_022FAFD4 + cmp r0, #0 +#ifdef JAPAN + movne r7, #0 +_0234791C: + cmp r7, #0 + beq _02347960 + cmp r5, #0x40 + bge _02347950 + ldr r1, [r6, #0xc] + add r2, sp, #0x48 + mov r0, sl + str r1, [r2, r5, lsl #3] + bl DoesProjectileHitTarget + add r1, sp, #0x48 + add r1, r1, r5, lsl #3 + strb r0, [r1, #4] + add r5, r5, #1 +#else + movne fp, #0 +_0234791C: + cmp fp, #0 + beq _02347960 + cmp r6, #0x40 + bge _02347950 + ldr r1, [r7, #0xc] + add r2, sp, #0x48 + mov r0, sl + str r1, [r2, r6, lsl #3] + bl DoesProjectileHitTarget + add r1, sp, #0x48 + add r1, r1, r6, lsl #3 + strb r0, [r1, #4] + add r6, r6, #1 +#endif +_02347950: + ldrb r0, [r8] + cmp r0, #0 +#ifdef JAPAN + moveq r6, #0 + beq _02347978 +_02347960: + sub fp, fp, #1 + cmp fp, #0 + bgt _023475E8 + mov r6, #1 +_02347978: + mov r0, #0 + bl ov29_0234B4CC + ldr r0, _02348EF8 ; =0x00000922 + mov fp, #0 + sub r0, r0, #1 + str r0, [sp, #0x2c] + b _02347A94 +_02347988: + add r0, sp, #0x48 + ldr r7, [r0, fp, lsl #3] + cmp r7, #0 + moveq r0, #0 + beq _02348D5C + ldr r0, [r7] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_02348D5C: + cmp r0, #0 + beq _02347A90 + add r0, sp, #0x48 + add r0, r0, fp, lsl #3 +#else + moveq r7, #0 + beq _02347978 +_02347960: + ldr r0, [sp, #0x24] + sub r0, r0, #1 + str r0, [sp, #0x24] + cmp r0, #0 + bgt _023475E8 + mov r7, #1 +_02347978: + mov r0, #0 + bl ov29_0234B4CC + mov r5, #0 + b _02347A94 +_02347988: + mov r0, sl + bl EntityIsValid__02347BA4 + cmp r0, #0 + beq _02347A9C + add r0, sp, #0x48 + ldr fp, [r0, r5, lsl #3] + mov r0, fp + bl EntityIsValid__02347BA4 + cmp r0, #0 + beq _02347A90 + add r0, sp, #0x48 + add r0, r0, r5, lsl #3 +#endif + ldrb r0, [r0, #4] + cmp r0, #0 + beq _02347A38 + mov r0, #0 +#ifdef JAPAN + mov r1, r7 +#else + mov r1, fp +#endif + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, [sp, #8] + mov r0, #0 + bl ov29_02344B70 +#ifdef JAPAN + mov r0, sl + mov r1, r7 + mov r2, #0x920 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, sl + mov r1, r7 +#else + ldr r2, _02347B48 ; =0x00000BE1 + mov r0, sl + mov r1, fp + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, sl + mov r1, fp +#endif + bl ov29_02307BDC + mov r2, r0 + ldr r0, [sp, #0x1c] + mov r3, sl + cmp r0, #0 + ldreqb r0, [r8] + cmpeq r0, #0 + movne r0, #1 + moveq r0, #0 + and r1, r0, #0xff + ldr r0, [sp, #8] +#ifdef JAPAN + str r7, [sp] +#else + str fp, [sp] +#endif + str r0, [sp, #4] + mov r0, #1 + bl ApplyItemEffect + b _02347A90 +_02347A38: + ldrb r0, [r8] +#ifdef JAPAN + mov r1, r7 + cmp r0, #0 + mov r0, #0 + cmpeq r5, #1 + mov r2, r0 + moveq r6, #1 +#else + mov r1, fp + cmp r0, #0 + mov r0, #0 + cmpeq r6, #1 + mov r2, r0 + moveq r7, #1 +#endif + bl SubstitutePlaceholderStringTags + ldr r1, [sp, #8] + mov r0, #0 + bl ov29_02344B44 + ldrb r0, [r8] +#ifdef JAPAN + mov r1, r7 +#else + mov r1, fp + ldr r2, _02347B48 ; =0x00000BE1 +#endif + cmp r0, #0 + mov r0, sl + beq _02347A88 +#ifdef JAPAN + ldr r2, [sp, #0x2c] +#else + add r2, r2, #1 +#endif + bl LogMessageByIdWithPopupCheckUserTarget + b _02347A90 +_02347A88: +#ifdef JAPAN + ldr r2, _02348EF8 ; =0x00000922 +#else + add r2, r2, #2 +#endif + bl LogMessageByIdWithPopupCheckUserTarget +_02347A90: +#ifdef JAPAN + add fp, fp, #1 +_02347A94: + cmp fp, r5 +#else + add r5, r5, #1 +_02347A94: + cmp r5, r6 +#endif + blt _02347988 +_02347A9C: + mov r0, sb, lsl #0x10 + mov r0, r0, lsr #0x10 + ldr r1, _02347B40 ; =DIRECTIONS_XY + mov r2, r0, lsl #2 + add r0, r1, r0, lsl #2 + ldrh r1, [r1, r2] + ldrh r0, [r0, #2] +#ifdef JAPAN + cmp r6, #0 +#else + cmp r7, #0 +#endif + strh r1, [sp, #0x30] + strh r0, [sp, #0x32] + ldrsh r1, [sp, #0x30] + ldrsh r0, [sp, #0x32] + mov r1, r1, lsl #3 + mov r0, r0, lsl #3 + strh r1, [sp, #0x40] + strh r0, [sp, #0x42] + beq _02347B34 +#ifdef JAPAN + cmp r6, #1 + beq _02347AF4 + cmp r6, #2 +#else + cmp r7, #1 + beq _02347AF4 + cmp r7, #2 +#endif + beq _02347B1C + b _02347B34 +_02347AF4: + add r1, sp, #0x40 + str r1, [sp] + mov r5, #0 + ldr r2, [sp, #8] + mov r0, sl + add r1, r4, #0xcc + mov r3, #1 + str r5, [sp, #4] + bl SpawnDroppedItem + b _02347B34 +_02347B1C: + ldr r1, [sp, #8] + mov r0, #0 + bl ov29_02344B70 + ldr r1, _02347B4C ; =0x00000BE5 + mov r0, sl + bl LogMessageByIdWithPopupCheckUser +_02347B34: + add sp, sp, #0x248 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02347B3C: .word DUNGEON_PTR +_02347B40: .word DIRECTIONS_XY +_02347B44: .word ov29_023516FC +#ifdef JAPAN +_02348EF8: .word 0x00000922 +_02347B4C: .word 0x00000924 +#else +_02347B48: .word 0x00000BE1 +_02347B4C: .word 0x00000BE5 +#endif + arm_func_end ov29_02347518 diff --git a/include/dungeon_items.h b/include/dungeon_items.h new file mode 100644 index 00000000..3f1487c7 --- /dev/null +++ b/include/dungeon_items.h @@ -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 diff --git a/include/dungeon_pokemon_attributes.h b/include/dungeon_pokemon_attributes.h index c7d467b1..e6d1d6c3 100644 --- a/include/dungeon_pokemon_attributes.h +++ b/include/dungeon_pokemon_attributes.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 diff --git a/include/dungeon_pokemon_attributes_1.h b/include/dungeon_pokemon_attributes_1.h index 475bb636..86f2ade0 100644 --- a/include/dungeon_pokemon_attributes_1.h +++ b/include/dungeon_pokemon_attributes_1.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 diff --git a/include/dungeon_visibility.h b/include/dungeon_visibility.h new file mode 100644 index 00000000..e977f8d6 --- /dev/null +++ b/include/dungeon_visibility.h @@ -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 diff --git a/include/item.h b/include/item.h index 0702b95a..a7a0ce5c 100644 --- a/include/item.h +++ b/include/item.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 }; diff --git a/main.lsf b/main.lsf index fa28ca99..477bb131 100644 --- a/main.lsf +++ b/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 diff --git a/src/dg_camera.c b/src/dg_camera.c index ba128cd7..8939b844 100644 --- a/src/dg_camera.c +++ b/src/dg_camera.c @@ -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) diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index 57499216..e452ef0b 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -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) { diff --git a/src/dungeon_ai_items.c b/src/dungeon_ai_items.c index 3ffbde93..153538d6 100644 --- a/src/dungeon_ai_items.c +++ b/src/dungeon_ai_items.c @@ -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; diff --git a/src/dungeon_ai_items_1.c b/src/dungeon_ai_items_1.c index 2afd07d6..7e6becde 100644 --- a/src/dungeon_ai_items_1.c +++ b/src/dungeon_ai_items_1.c @@ -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); diff --git a/src/dungeon_items.c b/src/dungeon_items.c new file mode 100644 index 00000000..296867bd --- /dev/null +++ b/src/dungeon_items.c @@ -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; +} diff --git a/src/dungeon_pokemon_attributes.c b/src/dungeon_pokemon_attributes.c index 92ac9e75..77d9f3c3 100644 --- a/src/dungeon_pokemon_attributes.c +++ b/src/dungeon_pokemon_attributes.c @@ -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); +} diff --git a/src/dungeon_pokemon_attributes_1.c b/src/dungeon_pokemon_attributes_1.c index 18668d4a..e0a25f40 100644 --- a/src/dungeon_pokemon_attributes_1.c +++ b/src/dungeon_pokemon_attributes_1.c @@ -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; +} diff --git a/src/dungeon_visibility.c b/src/dungeon_visibility.c new file mode 100644 index 00000000..44d0054e --- /dev/null +++ b/src/dungeon_visibility.c @@ -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)); +} diff --git a/src/overlay_29_022EE348.c b/src/overlay_29_022EE348.c index 6d856287..bc081cd4 100644 --- a/src/overlay_29_022EE348.c +++ b/src/overlay_29_022EE348.c @@ -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) { diff --git a/src/overlay_29_022F5994.c b/src/overlay_29_022F5994.c index 587c28b9..75eb8bc6 100644 --- a/src/overlay_29_022F5994.c +++ b/src/overlay_29_022F5994.c @@ -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) { diff --git a/src/overlay_29_022FF898.c b/src/overlay_29_022FF898.c index 7e5a1916..011600d2 100644 --- a/src/overlay_29_022FF898.c +++ b/src/overlay_29_022FF898.c @@ -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)) diff --git a/src/overlay_29_023026CC.c b/src/overlay_29_023026CC.c index 7406aeb8..e9117d32 100644 --- a/src/overlay_29_023026CC.c +++ b/src/overlay_29_023026CC.c @@ -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) { diff --git a/src/overlay_29_02307EF8.c b/src/overlay_29_02307EF8.c index 935ce89d..4dd6d019 100644 --- a/src/overlay_29_02307EF8.c +++ b/src/overlay_29_02307EF8.c @@ -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) { diff --git a/src/overlay_29_0230A9DC.c b/src/overlay_29_0230A9DC.c index e5b8ebcb..815a21e8 100644 --- a/src/overlay_29_0230A9DC.c +++ b/src/overlay_29_0230A9DC.c @@ -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) { diff --git a/src/overlay_29_0230E578.c b/src/overlay_29_0230E578.c index 9c581365..e5f89e63 100644 --- a/src/overlay_29_0230E578.c +++ b/src/overlay_29_0230E578.c @@ -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) { diff --git a/src/overlay_29_0230F810.c b/src/overlay_29_0230F810.c index 324a9929..9ce1f6be 100644 --- a/src/overlay_29_0230F810.c +++ b/src/overlay_29_0230F810.c @@ -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) { diff --git a/src/overlay_29_02311010.c b/src/overlay_29_02311010.c index 24d55268..0d546086 100644 --- a/src/overlay_29_02311010.c +++ b/src/overlay_29_02311010.c @@ -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) { diff --git a/src/overlay_29_02311BF8.c b/src/overlay_29_02311BF8.c index 3330780f..6a5224cd 100644 --- a/src/overlay_29_02311BF8.c +++ b/src/overlay_29_02311BF8.c @@ -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) { diff --git a/src/overlay_29_02315118.c b/src/overlay_29_02315118.c index b2656e09..385e447b 100644 --- a/src/overlay_29_02315118.c +++ b/src/overlay_29_02315118.c @@ -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) { diff --git a/src/overlay_29_02347B50.c b/src/overlay_29_02347B50.c index b32e763a..61ddff42 100644 --- a/src/overlay_29_02347B50.c +++ b/src/overlay_29_02347B50.c @@ -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) {