From 3fd44e59880fbfc47f3a82bb0c6604a4d229811b Mon Sep 17 00:00:00 2001 From: cecilarmitais Date: Sat, 12 Sep 2026 17:16:58 -0700 Subject: [PATCH] Decompile 16 callees of the combat and dungeon-generation functions Every function was verified at score 0 against its NORTH_AMERICA, EUROPE and JAPAN targets before landing, with the target's address walk closing exactly in each region, and by a matching US build after landing. overlay_29_0233E43C.c GenerateRoomImperfections, CreateHallway overlay_29_022E3F20.c UpdateStatusIconFlags, PlayQuestionMarkEffect, PlayExclamationPointEffect__022E47D4, PlayExclamationPointEffect__022E4880, ov29_022E3E74 dungeon_util_2.c PopulateActiveMonsterPtrs, GetTeamMemberIndex, GetMonsterOrTrapName, SubstitutePlaceholderStringTags overlay_29_022EC7E8.c IsFloorOver (new file) overlay_29_02345A3C.c SpawnDroppedItemWrapper (new file) overlay_29_023061A8.c EndBurnClassStatus (new file) overlay_29_02306728.c EndCurseClassStatus (new file) overlay_29_02336F4C.c UpdateTrapsVisibility (new file) Eleven were landed at a file boundary by first decompiling the functions between them and the nearest end of their .s, so they merge into the adjacent source file instead of splitting it. The other five sit too far from either end to make that worthwhile and split their .s as usual. CreateHallway closes a provisional declaration: CreateGridCellConnections had declared it from the call site as (s32 arg1 .. s32 arg7), and that guessed prototype is now replaced by the real one in the same header. Eighteen pre-existing declarations of these functions, written from call sites in other translation units, are replaced by an include of the owning header. Three of them disagreed with the real signature, and no build could have caught any of them because two declarations of one function never meet in a single translation unit: IsFloorOver declared `extern s32` in two files; it returns bool8. SpawnDroppedItem declared `void`; SpawnDroppedItemWrapper returns its value. Corrected in src/dungeon_projectile_throw.c. SetPreprocessorArgsStringToName declared with `u8 pos` / `u8 param_4`. Every existing call site passes literal constants, where the narrowing is invisible; SubstitutePlaceholderStringTags passes variables, and the narrow form emits two `and rX,#0xff` rows the target does not have. Widened to s32/u32. GetMonsterOrTrapName is landed with three parameters rather than two. Both score 0 -- an ignored third argument costs the callee nothing, so the callee's bytes cannot distinguish them -- but src/overlay_31_02382820.c has always called it with three, which is evidence about the caller that the callee cannot supply. pret/pmd-red was used as a structural reference where it has an equivalent function. It supplied the shape and never the spelling: it is a different game built by a different compiler. IsFloorOver is the clearest case -- translating its nested form literally scored 1525, and flattening to four independent early returns scored 0. Authored by Claude (Opus 5) under human direction. Confirmed by a matching build: build/pmdsky.us/pmdsky.us.nds: OK. Co-Authored-By: Claude Opus 5 --- ...9_022E2978.inc => overlay_29_022E34A8.inc} | 18 +- asm/include/overlay_29_022E37DC.inc | 19 +- asm/include/overlay_29_022EC62C.inc | 21 +- asm/include/overlay_29_022EC85C.inc | 22 + asm/include/overlay_29_02305C28.inc | 72 +- asm/include/overlay_29_02306258.inc | 12 + asm/include/overlay_29_023068C4.inc | 55 + asm/include/overlay_29_02336450.inc | 21 +- asm/include/overlay_29_0233711C.inc | 23 + ...9_0233ED34.inc => overlay_29_0233F424.inc} | 3 +- asm/include/overlay_29_023456BC.inc | 38 +- asm/include/overlay_29_02345AD8.inc | 41 + ...ay_29_022E2978.s => overlay_29_022E34A8.s} | 176 +- asm/overlay_29_022E37DC.s | 316 --- asm/overlay_29_022EC62C.s | 477 ---- asm/overlay_29_022EC85C.s | 447 ++++ asm/overlay_29_02305C28.s | 2306 ----------------- asm/overlay_29_02306258.s | 401 +++ asm/overlay_29_023068C4.s | 1726 ++++++++++++ asm/overlay_29_02336450.s | 1013 -------- asm/overlay_29_0233711C.s | 888 +++++++ ...ay_29_0233ED34.s => overlay_29_0233F424.s} | 510 +--- asm/overlay_29_023456BC.s | 993 ------- asm/overlay_29_02345AD8.s | 954 +++++++ include/dungeon_util_2.h | 4 + include/overlay_29_022E3F20.h | 5 + include/overlay_29_022EC7E8.h | 8 + include/overlay_29_023061A8.h | 8 + include/overlay_29_02306728.h | 8 + include/overlay_29_02336F4C.h | 8 + include/overlay_29_0233E43C.h | 3 +- include/overlay_29_02345A3C.h | 8 + main.lsf | 14 +- src/dungeon_ai.c | 2 +- src/dungeon_projectile_throw.c | 4 +- src/dungeon_util_2.c | 102 + src/move_orb_effects.c | 6 +- src/overlay_29_022E3F20.c | 113 + src/overlay_29_022EC7E8.c | 28 + src/overlay_29_022F0EDC.c | 4 +- src/overlay_29_023061A8.c | 41 + src/overlay_29_02306728.c | 74 + src/overlay_29_02308FBC.c | 9 +- src/overlay_29_0230BBAC.c | 2 +- src/overlay_29_02311010.c | 6 +- src/overlay_29_0231CBC8.c | 4 +- src/overlay_29_0232D368.c | 2 +- src/overlay_29_02336F4C.c | 65 + src/overlay_29_0233E43C.c | 294 +++ src/overlay_29_02345A3C.c | 20 + src/overlay_31_02382820.c | 3 +- src/status_checks.c | 2 +- 52 files changed, 5423 insertions(+), 5976 deletions(-) rename asm/include/{overlay_29_022E2978.inc => overlay_29_022E34A8.inc} (72%) create mode 100644 asm/include/overlay_29_022EC85C.inc create mode 100644 asm/include/overlay_29_02306258.inc create mode 100644 asm/include/overlay_29_023068C4.inc create mode 100644 asm/include/overlay_29_0233711C.inc rename asm/include/{overlay_29_0233ED34.inc => overlay_29_0233F424.inc} (81%) create mode 100644 asm/include/overlay_29_02345AD8.inc rename asm/{overlay_29_022E2978.s => overlay_29_022E34A8.s} (77%) create mode 100644 asm/overlay_29_022EC85C.s create mode 100644 asm/overlay_29_02306258.s create mode 100644 asm/overlay_29_023068C4.s create mode 100644 asm/overlay_29_0233711C.s rename asm/{overlay_29_0233ED34.s => overlay_29_0233F424.s} (78%) create mode 100644 asm/overlay_29_02345AD8.s create mode 100644 include/overlay_29_022EC7E8.h create mode 100644 include/overlay_29_023061A8.h create mode 100644 include/overlay_29_02306728.h create mode 100644 include/overlay_29_02336F4C.h create mode 100644 include/overlay_29_02345A3C.h create mode 100644 src/overlay_29_022EC7E8.c create mode 100644 src/overlay_29_023061A8.c create mode 100644 src/overlay_29_02306728.c create mode 100644 src/overlay_29_02336F4C.c create mode 100644 src/overlay_29_02345A3C.c diff --git a/asm/include/overlay_29_022E2978.inc b/asm/include/overlay_29_022E34A8.inc similarity index 72% rename from asm/include/overlay_29_022E2978.inc rename to asm/include/overlay_29_022E34A8.inc index cb9b3204..d15ff07c 100644 --- a/asm/include/overlay_29_022E2978.inc +++ b/asm/include/overlay_29_022E34A8.inc @@ -1,18 +1,18 @@ #pragma once -.public abs .public CanSeeInvisibleMonsters -.public DrawMinimapTile .public DUNGEON_PTR +.public DrawMinimapTile .public EntityIsValid__022E1A1C .public EntityIsValid__022E32E8 .public GetForcedLossReason -.public GetMessageLogPreprocessorArgs -.public GetMonsterName -.public GetTrapName .public HasDropeyeStatus .public IsBlinded .public IsPositionActuallyInSight .public ItemIsActive__022E330C +.public TeamMemberHasEnabledIqSkill +.public UpdateMinimap +.public UpdateTrapsVisibility +.public abs .public ov29_022E34C8 .public ov29_022E3534 .public ov29_022E3A58 @@ -21,13 +21,5 @@ .public ov29_0233711C .public ov29_023372A4 .public ov29_0237C84C -.public PrepareItemForPrinting2 -.public SetPreprocessorArgsStringToName -.public strcpy -.public StringFromId .public sub_02009194 .public sub_020091B0 -.public SubstitutePlaceholderTrapTags -.public TeamMemberHasEnabledIqSkill -.public UpdateMinimap -.public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_022E37DC.inc b/asm/include/overlay_29_022E37DC.inc index c9c9dd4e..69dd29be 100644 --- a/asm/include/overlay_29_022E37DC.inc +++ b/asm/include/overlay_29_022E37DC.inc @@ -3,8 +3,8 @@ .public AnimationHasMoreFrames .public DUNGEON_PTR .public EntityIsValid__022E37B8 -.public GetEffectAnimationWanOffset .public InitOamAdjustmentInfo +.public UpdateStatusIconFlags .public ov10_022BDC68 .public ov10_022BF274 .public ov10_022BF2B4 @@ -14,20 +14,3 @@ .public ov29_022E6E40 .public ov29_022ED0F4 .public ov29_0235354C -.public PlayEffectAnimationEntity -.public PlaySeByIdIfShouldDisplayEntity -.public STATUS_ICON_ARRAY_BIDE -.public STATUS_ICON_ARRAY_BLINDED -.public STATUS_ICON_ARRAY_BURN -.public STATUS_ICON_ARRAY_CRINGE -.public STATUS_ICON_ARRAY_CURSE -.public STATUS_ICON_ARRAY_FREEZE -.public STATUS_ICON_ARRAY_INVISIBLE -.public STATUS_ICON_ARRAY_LEECH_SEED -.public STATUS_ICON_ARRAY_LONG_TOSS -.public STATUS_ICON_ARRAY_MAGNET_RISE -.public STATUS_ICON_ARRAY_MIRACLE_EYE -.public STATUS_ICON_ARRAY_MUZZLED -.public STATUS_ICON_ARRAY_REFLECT -.public STATUS_ICON_ARRAY_SLEEP -.public STATUS_ICON_ARRAY_SURE_SHOT diff --git a/asm/include/overlay_29_022EC62C.inc b/asm/include/overlay_29_022EC62C.inc index 6dd6860b..cb6adc71 100644 --- a/asm/include/overlay_29_022EC62C.inc +++ b/asm/include/overlay_29_022EC62C.inc @@ -1,29 +1,12 @@ #pragma once -.public _s32_div_f .public AbilityIsActiveVeneer -.public AdvanceFrame -.public ChangeDungeonMusic -.public DisplayActions .public DUNGEON_PTR .public EntityIsValid__022EC608 -.public EntityIsValid__022ECDC0 .public ExecuteMonsterAction -.public GetForcedLossReason .public GetLeader -.public GetMonsterName -.public HandleFaint +.public IsFloorOver .public IsFloorOver2 -.public LogMessageByIdWithPopupCheckUser -.public ov10_022C6320 -.public ov29_022E5DBC -.public ov29_022EAEF0 -.public ov29_022F2FE4 -.public ov29_023522B6 -.public ov29_02352380 -.public ov29_02352390 -.public ov29_02353598 -.public ov29_0237C974 .public RunMonsterAi .public TryForcedLoss -.public TryPointCameraToMonster .public TrySpawnMonsterAndTickSpawnCounter +.public ov29_023522B6 diff --git a/asm/include/overlay_29_022EC85C.inc b/asm/include/overlay_29_022EC85C.inc new file mode 100644 index 00000000..8b4ecf50 --- /dev/null +++ b/asm/include/overlay_29_022EC85C.inc @@ -0,0 +1,22 @@ +#pragma once +.public AdvanceFrame +.public ChangeDungeonMusic +.public DUNGEON_PTR +.public DisplayActions +.public EntityIsValid__022ECDC0 +.public GetForcedLossReason +.public GetLeader +.public GetMonsterName +.public HandleFaint +.public IsFloorOver +.public LogMessageByIdWithPopupCheckUser +.public TryPointCameraToMonster +.public _s32_div_f +.public ov10_022C6320 +.public ov29_022E5DBC +.public ov29_022EAEF0 +.public ov29_022F2FE4 +.public ov29_02352380 +.public ov29_02352390 +.public ov29_02353598 +.public ov29_0237C974 diff --git a/asm/include/overlay_29_02305C28.inc b/asm/include/overlay_29_02305C28.inc index 12f8e7fd..1884fbb1 100644 --- a/asm/include/overlay_29_02305C28.inc +++ b/asm/include/overlay_29_02305C28.inc @@ -1,68 +1,32 @@ #pragma once -.public abs -.public AdvanceFrame .public ApplyDamageAndEffectsWrapper .public CalcSpeedStageWrapper .public CalcStatusDuration .public ChangeMonsterAnimationToIdle -.public DUNGEON_PTR -.public DungeonGetSpriteIndex .public EndNegativeStatusCondition -.public EnsureCanStandCurrentTile .public EntityIsValid__02305C04 -.public EntityIsValid__02307EF8 -.public FreeOtherWrappedMonsters -.public GetIdleAnimationId -.public GetMonsterApparentId -.public GetType -.public HandleShopTransaction .public IsProtectedFromNegativeStatus -.public ItemIsActive__02307F1C -.public LogMessageByIdWithPopupCheckUser .public LogMessageByIdWithPopupCheckUserTarget .public MonsterHasNegativeStatus +.public SafeguardIsActive +.public SubInitMonster +.public SubstitutePlaceholderStringTags +.public TransferNegativeBlinkerClassStatus +.public TryIncreaseHp +.public TryInflictExposedStatus +.public TryInflictPerishSongStatus +.public TryInflictSleepStatus +.public UpdateStatusIconFlags .public ov10_022C45A0 .public ov10_022C45A8 .public ov10_022C4868 .public ov29_022E543C -.public ov29_022E65F4 -.public ov29_022E6798 -.public ov29_022FA1D8 -.public ov29_022FB984 -.public ov29_02304830 -.public ov29_02311C28 -.public ov29_02321134 -.public SafeguardIsActive -.public SubInitMonster -.public SubstitutePlaceholderStringTags -.public TryIncreaseHp -.public TryInflictBadlyPoisonedStatus -.public TryInflictBlinkerStatus -.public TryInflictBurnStatus -.public TryInflictConfusedStatus -.public TryInflictConstrictionStatus -.public TryInflictCoweringStatus -.public TryInflictCringeStatus -.public TryInflictCrossEyedStatus -.public TryInflictDecoyStatus -.public TryInflictDropeyeStatus -.public TryInflictEmbargoStatus -.public TryInflictEncoreStatus -.public TryInflictExposedStatus -.public TryInflictGastroAcidStatus -.public TryInflictHealBlockStatus -.public TryInflictInfatuatedStatus -.public TryInflictLeechSeedStatus -.public TryInflictMiracleEyeStatus -.public TryInflictMuzzledStatus -.public TryInflictParalysisStatus -.public TryInflictPausedStatus -.public TryInflictPerishSongStatus -.public TryInflictPoisonedStatus -.public TryInflictShadowHoldStatus -.public TryInflictSleepStatus -.public TryInflictTauntStatus -.public TryInflictWhifferStatus -.public UpdateMinimap -.public UpdateStatusIconFlags -.public UpdateTrapsVisibility +.public ov29_02306DCC +.public ov29_02306F00 +.public ov29_02307078 +.public ov29_02307198 +.public ov29_0230737C +.public ov29_023076C0 +.public ov29_023077FC +.public ov29_02307A2C +.public ov29_02307B0C diff --git a/asm/include/overlay_29_02306258.inc b/asm/include/overlay_29_02306258.inc new file mode 100644 index 00000000..8b70d54f --- /dev/null +++ b/asm/include/overlay_29_02306258.inc @@ -0,0 +1,12 @@ +#pragma once +.public CalcSpeedStageWrapper +.public DUNGEON_PTR +.public EntityIsValid__02305C04 +.public FreeOtherWrappedMonsters +.public LogMessageByIdWithPopupCheckUser +.public LogMessageByIdWithPopupCheckUserTarget +.public ResetTypeChanges +.public SubstitutePlaceholderStringTags +.public UpdateStatusIconFlags +.public ov29_022E65F4 +.public ov29_022E6798 diff --git a/asm/include/overlay_29_023068C4.inc b/asm/include/overlay_29_023068C4.inc new file mode 100644 index 00000000..110ef79d --- /dev/null +++ b/asm/include/overlay_29_023068C4.inc @@ -0,0 +1,55 @@ +#pragma once +.public AdvanceFrame +.public CalcSpeedStageWrapper +.public ChangeMonsterAnimationToIdle +.public DUNGEON_PTR +.public DungeonGetSpriteIndex +.public EndCurseClassStatus +.public EndFrozenClassStatus +.public EndReflectClassStatus +.public EndSleepClassStatus +.public EnsureCanStandCurrentTile +.public EntityIsValid__02305C04 +.public EntityIsValid__02307EF8 +.public GetIdleAnimationId +.public GetMonsterApparentId +.public GetType +.public ItemIsActive__02307F1C +.public LogMessageByIdWithPopupCheckUser +.public LogMessageByIdWithPopupCheckUserTarget +.public SubstitutePlaceholderStringTags +.public TryInflictBadlyPoisonedStatus +.public TryInflictBlinkerStatus +.public TryInflictBurnStatus +.public TryInflictConfusedStatus +.public TryInflictConstrictionStatus +.public TryInflictCoweringStatus +.public TryInflictCringeStatus +.public TryInflictCrossEyedStatus +.public TryInflictDecoyStatus +.public TryInflictDropeyeStatus +.public TryInflictEmbargoStatus +.public TryInflictEncoreStatus +.public TryInflictGastroAcidStatus +.public TryInflictHealBlockStatus +.public TryInflictInfatuatedStatus +.public TryInflictLeechSeedStatus +.public TryInflictMiracleEyeStatus +.public TryInflictMuzzledStatus +.public TryInflictParalysisStatus +.public TryInflictPausedStatus +.public TryInflictPoisonedStatus +.public TryInflictShadowHoldStatus +.public TryInflictTauntStatus +.public TryInflictWhifferStatus +.public TryRemoveSnatchedMonsterFromDungeonStruct +.public UpdateMinimap +.public UpdateStatusIconFlags +.public UpdateTrapsVisibility +.public abs +.public HandleShopTransaction +.public ov29_022FA1D8 +.public ov29_022FB984 +.public ov29_02304830 +.public ov29_02311C28 +.public ov29_02321134 diff --git a/asm/include/overlay_29_02336450.inc b/asm/include/overlay_29_02336450.inc index 0479cc9a..856ecc31 100644 --- a/asm/include/overlay_29_02336450.inc +++ b/asm/include/overlay_29_02336450.inc @@ -1,24 +1,16 @@ #pragma once -.public CannotStandOnTileNoMonsterCheck -.public CanSeePosition -.public Debug_Print0 .public DEFAULT_TILE -.public DetermineMonsterShadow -.public DIRECTIONS_XY -.public DrawMinimapTile .public DUNGEON_PTR -.public EntityIsValid__02337CA8 +.public Debug_Print0 .public FloorSecondaryTerrainIsChasm .public GetBgRegionArea -.public GetGridsOption -.public GetLeader .public GetTile .public GetTileSafe -.public GetVisibilityRange .public InitTilesetBuffer .public IsCurrentFixedRoomBossFight -.public IsSecretBazaar .public MOBILITY_TYPE_TO_DUNGEON_MOBILITY_TYPE +.public RandIntSafe +.public SECONDARY_TERRAIN_TYPES .public ov10_022C2588 .public ov10_022C25EC .public ov10_022C2638 @@ -26,17 +18,10 @@ .public ov10_022C26A0 .public ov10_022C2720 .public ov29_022DE0EC -.public ov29_022E66C4 .public ov29_022E9F80 .public ov29_02352B60 .public ov29_02352B74 .public ov29_02352B88 -.public ov29_02352B9C -.public ov29_02352D58 .public ov29_02352F14 .public ov29_0237CAA0 .public ov29_0237CAAC -.public RandIntSafe -.public SECONDARY_TERRAIN_TYPES -.public sub_02051D8C -.public sub_02051E60 diff --git a/asm/include/overlay_29_0233711C.inc b/asm/include/overlay_29_0233711C.inc new file mode 100644 index 00000000..b735e51e --- /dev/null +++ b/asm/include/overlay_29_0233711C.inc @@ -0,0 +1,23 @@ +#pragma once +.public CanSeePosition +.public CannotStandOnTileNoMonsterCheck +.public DIRECTIONS_XY +.public DUNGEON_PTR +.public DetermineMonsterShadow +.public DetermineTileWalkableNeighbors +.public DrawMinimapTile +.public EntityIsValid__02337CA8 +.public GetGridsOption +.public GetLeader +.public GetTile +.public GetTileSafe +.public GetVisibilityRange +.public IsSecretBazaar +.public UpdateTrapsVisibility +.public ov29_022E66C4 +.public ov29_02336694 +.public ov29_02336DB0 +.public ov29_02352B9C +.public ov29_02352D58 +.public sub_02051D8C +.public sub_02051E60 diff --git a/asm/include/overlay_29_0233ED34.inc b/asm/include/overlay_29_0233F424.inc similarity index 81% rename from asm/include/overlay_29_0233ED34.inc rename to asm/include/overlay_29_0233F424.inc index 8964d136..9dd55e52 100644 --- a/asm/include/overlay_29_0233ED34.inc +++ b/asm/include/overlay_29_0233F424.inc @@ -1,6 +1,5 @@ #pragma once -.public CORNER_CARDINAL_NEIGHBOR_IS_OPEN -.public DIRECTIONS_XY +.public CreateHallway .public DUNGEON_PTR .public DungeonRandInt .public DungeonRandRange diff --git a/asm/include/overlay_29_023456BC.inc b/asm/include/overlay_29_023456BC.inc index 34730a3f..85d361ab 100644 --- a/asm/include/overlay_29_023456BC.inc +++ b/asm/include/overlay_29_023456BC.inc @@ -1,53 +1,17 @@ #pragma once -.public _s32_div_f .public AddSimpleObjToOam -.public AdvanceFrame -.public DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST -.public DISPLACEMENTS_WITHIN_3 -.public DisplayMessage2 -.public DrawMinimapTile .public DUNGEON_PTR -.public DungeonRandInt -.public DungeonRandOutcome__022EAB20 .public EntityIsValid__02345698 -.public GenerateItem .public GetActualBuyPrice .public GetActualSellPrice -.public GetExclusiveItem .public GetItemInfo .public GetItemSpriteId -.public GetMissionRank__0204FAE0 .public GetTile .public GetTileSafe -.public GetTreasureBoxChances -.public IncrementEntityPixelPosXY -.public IsCurrentFixedRoomBossFight -.public IsMarowakTrainingMaze .public IsShoppableItem -.public IsUnown -.public LogMessageByIdQuiet -.public LogMessageByIdWithPopupCheckUser -.public LogMessageByIdWithPopupCheckUserUnknown .public OBJ_GRAPHICS_CONTROLS_PTR -.public ov10_022C44C8 -.public ov10_022C48EC -.public ov29_022E563C -.public ov29_022FB51C -.public ov29_02344BF8 -.public ov29_02347378 -.public ov29_023531BC +.public ShouldDisplayEntityWrapper .public ov29_023537B4 .public ov29_023537BC .public ov29_0237C864 -.public PlayDungeonTipSound__022EB66C -.public RetrieveFromItemList1 -.public RevealAttackedTile -.public SECONDARY_TERRAIN_TYPES -.public SetEntityPixelPosXY -.public SetPreprocessorArgsIdVal -.public ShouldDisplayEntityWrapper -.public SinAbs4096 -.public SpawnItem .public sub_0200D1FC -.public SubstitutePlaceholderItemTags -.public UNOWN_STONE_DROP_CHANCE diff --git a/asm/include/overlay_29_02345AD8.inc b/asm/include/overlay_29_02345AD8.inc new file mode 100644 index 00000000..68cc3363 --- /dev/null +++ b/asm/include/overlay_29_02345AD8.inc @@ -0,0 +1,41 @@ +#pragma once +.public AdvanceFrame +.public DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST +.public DISPLACEMENTS_WITHIN_3 +.public DUNGEON_PTR +.public DisplayItem +.public DisplayMessage2 +.public DrawMinimapTile +.public DungeonRandInt +.public DungeonRandOutcome__022EAB20 +.public EntityIsValid__02345698 +.public GenerateItem +.public GetExclusiveItem +.public GetMissionRank__0204FAE0 +.public GetTile +.public GetTreasureBoxChances +.public IncrementEntityPixelPosXY +.public IsCurrentFixedRoomBossFight +.public IsMarowakTrainingMaze +.public IsUnown +.public LogMessageByIdQuiet +.public LogMessageByIdWithPopupCheckUser +.public LogMessageByIdWithPopupCheckUserUnknown +.public PlayDungeonTipSound__022EB66C +.public RetrieveFromItemList1 +.public RevealAttackedTile +.public SECONDARY_TERRAIN_TYPES +.public SetEntityPixelPosXY +.public SetPreprocessorArgsIdVal +.public SinAbs4096 +.public SpawnItem +.public SubstitutePlaceholderItemTags +.public UNOWN_STONE_DROP_CHANCE +.public _s32_div_f +.public ov10_022C44C8 +.public ov10_022C48EC +.public ov29_022E563C +.public ov29_022FB51C +.public ov29_02344BF8 +.public ov29_02347378 +.public ov29_023531BC diff --git a/asm/overlay_29_022E2978.s b/asm/overlay_29_022E34A8.s similarity index 77% rename from asm/overlay_29_022E2978.s rename to asm/overlay_29_022E34A8.s index 69b51462..c1468a67 100644 --- a/asm/overlay_29_022E2978.s +++ b/asm/overlay_29_022E34A8.s @@ -1,182 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_022E2978.inc" + .include "overlay_29_022E34A8.inc" .text - 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 GetMonsterOrTrapName -GetMonsterOrTrapName: ; 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 GetTrapName - 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 GetMonsterOrTrapName - - arm_func_start SubstitutePlaceholderStringTags -SubstitutePlaceholderStringTags: ; 0x022E2AD8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r5, r2 - bl GetMessageLogPreprocessorArgs - 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 SetPreprocessorArgsStringToName - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022E2B2C: - ldr r2, [r6, #0xb4] - mov r1, r7 - bl PrepareItemForPrinting2 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022E2B3C: - ldr r2, [r6, #0xb4] - mov r1, r7 - ldrb r2, [r2] - bl SubstitutePlaceholderTrapTags - 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 diff --git a/asm/overlay_29_022E37DC.s b/asm/overlay_29_022E37DC.s index ee84a0dc..65c27938 100644 --- a/asm/overlay_29_022E37DC.s +++ b/asm/overlay_29_022E37DC.s @@ -243,319 +243,3 @@ _022E3AA0: .align 2, 0 _022E3AB0: .word DUNGEON_PTR arm_func_end ov29_022E3A58 - - arm_func_start UpdateStatusIconFlags -UpdateStatusIconFlags: ; 0x022E3AB4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, r0 - bl EntityIsValid__022E37B8 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r2, [r4, #0xb4] - mov r1, #0 - ldrsh r4, [r2, #2] - mov r5, #1 - mov r0, r1 - cmp r4, #0xb9 - addne r3, r5, #0x310 - cmpne r4, r3 - bne _022E3AF8 - ldrb r3, [r2, #0xbe] - cmp r3, #0x7f - moveq r5, #0 -_022E3AF8: - cmp r5, #0 - beq _022E3B1C - ldrb r5, [r2, #0xbd] - ldr r4, _022E3D94 ; =STATUS_ICON_ARRAY_SLEEP - add r3, r4, r5, lsl #3 - ldr r4, [r4, r5, lsl #3] - ldr r3, [r3, #4] - orr r1, r1, r4 - orr r0, r0, r3 -_022E3B1C: - ldrb r7, [r2, #0xbf] - ldr r4, _022E3D98 ; =STATUS_ICON_ARRAY_BURN - ldrb r6, [r2, #0xc4] - ldr r3, _022E3D9C ; =STATUS_ICON_ARRAY_FREEZE - add r5, r4, r7, lsl #3 - add ip, r3, r6, lsl #3 - ldr r4, [r4, r7, lsl #3] - ldr lr, [r5, #4] - ldrb sl, [r2, #0xd0] - ldr r8, _022E3DA0 ; =STATUS_ICON_ARRAY_CRINGE - ldrb r7, [r2, #0xd2] - ldr r5, _022E3DA4 ; =STATUS_ICON_ARRAY_BIDE - add fp, r8, sl, lsl #3 - add sb, r5, r7, lsl #3 - orr r0, r0, lr - ldr lr, [ip, #4] - ldrb ip, [r2, #0xd5] - orr r1, r1, r4 - ldr r4, _022E3DA8 ; =STATUS_ICON_ARRAY_REFLECT - ldr r3, [r3, r6, lsl #3] - add r6, r4, ip, lsl #3 - orr r0, r0, lr - ldr lr, [fp, #4] - ldrb fp, [r2, #0xd8] - orr r1, r1, r3 - ldr r3, _022E3DAC ; =STATUS_ICON_ARRAY_CURSE - ldr r8, [r8, sl, lsl #3] - add sl, r3, fp, lsl #3 - orr r0, r0, lr - ldr lr, [sb, #4] - ldrb sb, [r2, #0xe0] - orr r1, r1, r8 - ldr r8, _022E3DB0 ; =STATUS_ICON_ARRAY_LEECH_SEED - ldr r5, [r5, r7, lsl #3] - add r7, r8, sb, lsl #3 - orr r0, r0, lr - ldr lr, [r6, #4] - ldrb r6, [r2, #0xec] - orr r1, r1, r5 - ldr r5, _022E3DB4 ; =STATUS_ICON_ARRAY_SURE_SHOT - ldr ip, [r4, ip, lsl #3] - add r4, r5, r6, lsl #3 - orr r0, r0, lr - ldr sl, [sl, #4] - ldrb lr, [r2, #0xee] - orr r1, r1, ip - ldr ip, _022E3DB8 ; =STATUS_ICON_ARRAY_LONG_TOSS - ldr fp, [r3, fp, lsl #3] - add r3, ip, lr, lsl #3 - orr r0, r0, sl - ldr sl, [r7, #4] - ldrb r7, [r2, #0xef] - orr fp, r1, fp - ldr r1, _022E3DBC ; =STATUS_ICON_ARRAY_INVISIBLE - ldr sb, [r8, sb, lsl #3] - add r8, r1, r7, lsl #3 - orr r0, r0, sl - ldr sl, [r4, #4] - ldrb r4, [r2, #0xf1] - orr fp, fp, sb - ldr sb, _022E3DC0 ; =STATUS_ICON_ARRAY_BLINDED - ldr r6, [r5, r6, lsl #3] - add r5, sb, r4, lsl #3 - orr r0, r0, sl - ldr sl, [r3, #4] - ldrb r3, [r2, #0xf3] - orr r6, fp, r6 - ldr fp, _022E3DC4 ; =STATUS_ICON_ARRAY_MUZZLED - ldr ip, [ip, lr, lsl #3] - add lr, fp, r3, lsl #3 - orr sl, r0, sl - ldr r0, [r8, #4] - ldr r1, [r1, r7, lsl #3] - orr r7, r6, ip - ldr r6, [sb, r4, lsl #3] - orr r8, r7, r1 - ldr r4, [r5, #4] - orr r7, sl, r0 - ldr r1, [fp, r3, lsl #3] - orr r5, r8, r6 - ldr r0, [lr, #4] - orr r3, r7, r4 - orr r0, r3, r0 - orr r8, r5, r1 - ldrb r7, [r2, #0xf5] - ldr r6, _022E3DC8 ; =STATUS_ICON_ARRAY_MIRACLE_EYE - ldrb r5, [r2, #0xf7] - ldr r4, _022E3DCC ; =STATUS_ICON_ARRAY_MAGNET_RISE - add r1, r6, r7, lsl #3 - add r3, r4, r5, lsl #3 - ldr r7, [r6, r7, lsl #3] - ldr r6, [r1, #4] - ldrb r1, [r2, #0xfd] - ldr r4, [r4, r5, lsl #3] - ldr r3, [r3, #4] - orr r0, r0, r6 - orr r0, r0, r3 - cmp r1, #0 - orr r5, r8, r7 - orr r1, r5, r4 - ldrb r3, [r2, #0xfe] - orrne r0, r0, #0 - orrne r1, r1, #0x1000000 - cmp r3, #0 - ldrb r3, [r2, #6] - orrne r0, r0, #0 - orrne r1, r1, #0x2000000 - cmp r3, #0 - bne _022E3D00 - ldrsh r5, [r2, #0x12] - ldrsh r4, [r2, #0x16] - ldr r3, _022E3DD0 ; =0x000003E7 - add r5, r5, r4 - cmp r5, r3 - movgt r5, r3 - mov r3, r5, asr #1 - ldrsh r4, [r2, #0x10] - add r3, r5, r3, lsr #30 - cmp r4, r3, asr #2 - orrlt r0, r0, #0 - orrlt r1, r1, #0x2000 -_022E3D00: - ldr r3, _022E3DD4 ; =DUNGEON_PTR - ldr r3, [r3] - ldrb r3, [r3, #0x78d] - cmp r3, #0 - beq _022E3D30 - ldrb r3, [r2, #0x62] - tst r3, #1 - movne r3, #1 - moveq r3, #0 - tst r3, #0xff - orrne r0, r0, #0 - orrne r1, r1, #0x2000 -_022E3D30: - ldr r3, [r2, #0x34] - cmp r3, #0x100 - ldrge r3, [r2, #0x38] - cmpge r3, #0x100 - ldrge r3, [r2, #0x3c] - cmpge r3, #0x100 - ldrge r3, [r2, #0x40] - cmpge r3, #0x100 - ldrgesh r3, [r2, #0x24] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x26] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x28] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x2a] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x2c] - cmpge r3, #0xa - ldrgesh r3, [r2, #0x2e] - cmpge r3, #0xa - orrlt r1, r1, #0x8000000 - orrlt r0, r0, #0 -#ifdef JAPAN - str r1, [r2, #0x214] - str r0, [r2, #0x218] -#else - str r1, [r2, #0x218] - str r0, [r2, #0x21c] -#endif - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022E3D94: .word STATUS_ICON_ARRAY_SLEEP -_022E3D98: .word STATUS_ICON_ARRAY_BURN -_022E3D9C: .word STATUS_ICON_ARRAY_FREEZE -_022E3DA0: .word STATUS_ICON_ARRAY_CRINGE -_022E3DA4: .word STATUS_ICON_ARRAY_BIDE -_022E3DA8: .word STATUS_ICON_ARRAY_REFLECT -_022E3DAC: .word STATUS_ICON_ARRAY_CURSE -_022E3DB0: .word STATUS_ICON_ARRAY_LEECH_SEED -_022E3DB4: .word STATUS_ICON_ARRAY_SURE_SHOT -_022E3DB8: .word STATUS_ICON_ARRAY_LONG_TOSS -_022E3DBC: .word STATUS_ICON_ARRAY_INVISIBLE -_022E3DC0: .word STATUS_ICON_ARRAY_BLINDED -_022E3DC4: .word STATUS_ICON_ARRAY_MUZZLED -_022E3DC8: .word STATUS_ICON_ARRAY_MIRACLE_EYE -_022E3DCC: .word STATUS_ICON_ARRAY_MAGNET_RISE -_022E3DD0: .word 0x000003E7 -_022E3DD4: .word DUNGEON_PTR - arm_func_end UpdateStatusIconFlags - - arm_func_start PlayQuestionMarkEffect -PlayQuestionMarkEffect: ; 0x022E3DD8 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x144 - bl GetEffectAnimationWanOffset - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x144 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - arm_func_end PlayQuestionMarkEffect - - arm_func_start PlayExclamationPointEffect__022E47D4 -PlayExclamationPointEffect__022E47D4: ; 0x022E3E24 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E3E70 ; =0x00000143 - bl GetEffectAnimationWanOffset - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E3E70 ; =0x00000143 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E3E70: .word 0x00000143 - arm_func_end PlayExclamationPointEffect__022E47D4 - - arm_func_start ov29_022E3E74 -ov29_022E3E74: ; 0x022E3E74 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r0, #0x25 - bl GetEffectAnimationWanOffset - mov r1, r0 - and r3, r1, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - mov r0, r4 - mov r1, #0x25 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - ldr r1, _022E3ECC ; =0x0000030E - mov r0, r4 - bl PlaySeByIdIfShouldDisplayEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E3ECC: .word 0x0000030E - arm_func_end ov29_022E3E74 - - arm_func_start PlayExclamationPointEffect__022E4880 -PlayExclamationPointEffect__022E4880: ; 0x022E3ED0 - stmdb sp!, {r4, lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r0, _022E3F1C ; =0x00000143 - bl GetEffectAnimationWanOffset - mov r2, r0 - and r3, r2, #0xff - mov r0, #2 - mov ip, #0 - stmia sp, {r0, ip} - sub r0, ip, #1 - str r0, [sp, #8] - ldr r1, _022E3F1C ; =0x00000143 - mov r0, r4 - mov r2, #1 - str ip, [sp, #0xc] - bl PlayEffectAnimationEntity - add sp, sp, #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -_022E3F1C: .word 0x00000143 - arm_func_end PlayExclamationPointEffect__022E4880 diff --git a/asm/overlay_29_022EC62C.s b/asm/overlay_29_022EC62C.s index defbead2..dec53715 100644 --- a/asm/overlay_29_022EC62C.s +++ b/asm/overlay_29_022EC62C.s @@ -142,480 +142,3 @@ _022EC7C8: _022EC7E0: .word DUNGEON_PTR _022EC7E4: .word ov29_023522B6 arm_func_end TrySpawnMonsterAndActivatePlusMinus - - arm_func_start IsFloorOver -IsFloorOver: ; 0x022EC7E8 - stmdb sp!, {r3, lr} - ldr r0, _022EC858 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #8] - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} - bl GetLeader - cmp r0, #0 - ldreq r1, _022EC858 ; =DUNGEON_PTR - moveq r0, #1 - ldreq r1, [r1] - streqb r0, [r1, #0x758] - ldmeqia sp!, {r3, pc} - ldr r0, _022EC858 ; =DUNGEON_PTR - ldr r1, [r0] - ldrb r0, [r1, #6] - cmp r0, #1 - moveq r0, #2 - streqb r0, [r1, #0x758] - moveq r0, #1 - ldmeqia sp!, {r3, pc} - cmp r0, #2 - moveq r0, #2 - streqb r0, [r1, #0x758] - moveq r0, #1 - movne r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_022EC858: .word DUNGEON_PTR - arm_func_end IsFloorOver - - arm_func_start ov29_022EC85C -ov29_022EC85C: ; 0x022EC85C - stmdb sp!, {r3, lr} - bl GetForcedLossReason - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, pc} - bl IsFloorOver - ldmia sp!, {r3, pc} - arm_func_end ov29_022EC85C - - arm_func_start ov29_022EC878 -ov29_022EC878: ; 0x022EC878 - mov r2, #0 - strb r2, [r0] - strb r2, [r0, #1] - strb r2, [r0, #2] - strb r2, [r0, #3] - strb r2, [r0, #4] - ldr r1, _022EC8A4 ; =ov29_02353598 - strb r2, [r0, #5] - mov r0, #1 - strb r0, [r1] - bx lr - .align 2, 0 -_022EC8A4: .word ov29_02353598 - arm_func_end ov29_022EC878 - - arm_func_start ov29_022EC8A8 -ov29_022EC8A8: ; 0x022EC8A8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r6, r0 - mov r5, r1 - mov r0, r2 - mov r1, #0x30 - mov r4, r3 - bl _s32_div_f - mov r3, r1, lsl #1 - and r0, r3, #0xff - mov r2, r0, lsr #1 - ldr r1, _022EC998 ; =ov29_02352390 - mov r0, #0xc0 - strb r3, [r6, #4] - add r2, r2, #1 - strb r2, [r6, #2] - add r4, r4, #2 - smlabb r5, r5, r0, r1 - b _022EC96C -_022EC8F0: - strb r4, [r6, #3] - mov r8, #0x63 - ldr r7, _022EC99C ; =DUNGEON_PTR - b _022EC93C -_022EC900: - ldrb r1, [r6, #3] - mov r0, r8 - sub r1, r1, #1 - strb r1, [r6, #3] - ldrb r1, [r6, #5] - eor r1, r1, #1 - strb r1, [r6, #5] - ldrb r3, [r6, #4] - and r2, r1, #0xff - ldr r1, [r7] - add r2, r3, r2 - ldr r2, [r5, r2, lsl #2] - add r1, r1, #0x1a000 -#ifdef JAPAN - str r2, [r1, #0x18c] -#else - str r2, [r1, #0x230] -#endif - bl AdvanceFrame -_022EC93C: - ldrb r0, [r6, #3] - cmp r0, #0 - bne _022EC900 - ldrb r0, [r6, #4] - cmp r0, #0 - subne r0, r0, #2 - strneb r0, [r6, #4] - mov r0, #0 - strb r0, [r6, #5] - ldrb r0, [r6, #2] - sub r0, r0, #1 - strb r0, [r6, #2] -_022EC96C: - ldrb r0, [r6, #2] - cmp r0, #0 - bne _022EC8F0 - ldr r0, _022EC99C ; =DUNGEON_PTR - mov r2, #0 - ldr r0, [r0] - ldr r1, _022EC9A0 ; =ov29_02353598 - add r0, r0, #0x1a000 -#ifdef JAPAN - str r2, [r0, #0x18c] -#else - str r2, [r0, #0x230] -#endif - strb r2, [r1] - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_022EC998: .word ov29_02352390 -_022EC99C: .word DUNGEON_PTR -_022EC9A0: .word ov29_02353598 - arm_func_end ov29_022EC8A8 - - arm_func_start ov29_022EC9A4 -ov29_022EC9A4: ; 0x022EC9A4 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - mov r3, #0xc -#ifdef JAPAN - smulbb r4, r1, r3 - ldr r1, _022ECAD8 ; =ov10_022C6320 - mov r6, r0 - ldrb r4, [r1, r4] -#else - smulbb r3, r1, r3 - ldr r1, _022ECAD8 ; =ov10_022C6320 - mov r6, r0 - ldrb r4, [r1, r3] -#endif - mov r5, r2 - cmp r4, #5 - beq _022ECA28 - cmp r5, #0 - bne _022EC9E0 -#ifdef JAPAN - add r1, r3, #0x930 -#else - ldr r1, _022ECADC ; =0x00000BFD -#endif - bl LogMessageByIdWithPopupCheckUser - b _022ECA18 -_022EC9E0: - cmp r5, #1 - bne _022EC9F4 - ldr r1, _022ECAE0 ; =0x00000BFE - bl LogMessageByIdWithPopupCheckUser - b _022ECA18 -_022EC9F4: - cmp r5, #2 - bne _022ECA08 - ldr r1, _022ECAE4 ; =0x00000BFF - bl LogMessageByIdWithPopupCheckUser - b _022ECA18 -_022ECA08: - cmp r5, #3 - bne _022ECA18 -#ifdef JAPAN - ldr r1, _022EE14C ; =0x0000093F -#else - mov r1, #0xc00 -#endif - bl LogMessageByIdWithPopupCheckUser -_022ECA18: - mov r0, r4 - mov r1, #0 - bl ov29_022E5DBC - b _022ECAD0 -_022ECA28: - bl ov29_022EAEF0 - mov r4, r0 - cmp r5, #0 - bne _022ECA48 -#ifdef JAPAN - mov r0, r6 - mov r1, #0x940 -#else - ldr r1, _022ECAE8 ; =0x00000C01 - mov r0, r6 -#endif - bl LogMessageByIdWithPopupCheckUser - b _022ECA8C -_022ECA48: - cmp r5, #1 - bne _022ECA60 - ldr r1, _022ECAEC ; =0x00000C02 - mov r0, r6 - bl LogMessageByIdWithPopupCheckUser - b _022ECA8C -_022ECA60: - cmp r5, #2 - bne _022ECA78 - ldr r1, _022ECAF0 ; =0x00000C03 - mov r0, r6 - bl LogMessageByIdWithPopupCheckUser - b _022ECA8C -_022ECA78: - cmp r5, #3 - bne _022ECA8C - ldr r1, _022ECAF4 ; =0x00000C04 - mov r0, r6 - bl LogMessageByIdWithPopupCheckUser -_022ECA8C: - add r0, sp, #0 - bl ov29_022EC878 - ldr r0, _022ECAF8 ; =ov29_02352380 - ldr r0, [r0, r5, lsl #2] - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl ChangeDungeonMusic - mov r0, r5, lsl #2 - add r0, r0, #8 - mov r2, r0, lsl #0x10 - mov r3, r2, asr #0x10 - add r0, sp, #0 - mov r1, r5 - mov r2, #0x10 - bl ov29_022EC8A8 - mov r0, r4 - bl ChangeDungeonMusic -_022ECAD0: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_022ECAD8: .word ov10_022C6320 -#ifdef JAPAN -_022ECAE0: .word 0x0000093D -_022ECAE4: .word 0x0000093E -_022EE14C: .word 0x0000093F -_022ECAEC: .word 0x00000941 -_022ECAF0: .word 0x00000942 -_022ECAF4: .word 0x00000943 -#else -_022ECADC: .word 0x00000BFD -_022ECAE0: .word 0x00000BFE -_022ECAE4: .word 0x00000BFF -_022ECAE8: .word 0x00000C01 -_022ECAEC: .word 0x00000C02 -_022ECAF0: .word 0x00000C03 -_022ECAF4: .word 0x00000C04 -#endif -_022ECAF8: .word ov29_02352380 - arm_func_end ov29_022EC9A4 - - arm_func_start ov29_022ECAFC -ov29_022ECAFC: ; 0x022ECAFC - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - add r0, sp, #0 - bl ov29_022EC878 - mov r0, r4, lsl #2 - add r0, r0, #2 - mov r2, r0, lsl #0x10 - mov r3, r2, asr #0x10 - add r0, sp, #0 - mov r1, r4 - mov r2, #8 - bl ov29_022EC8A8 - add sp, sp, #8 - ldmia sp!, {r4, pc} - arm_func_end ov29_022ECAFC - - arm_func_start ov29_022ECB38 -ov29_022ECB38: ; 0x022ECB38 - ldr r0, _022ECB44 ; =ov29_02353598 - ldrb r0, [r0] - bx lr - .align 2, 0 -_022ECB44: .word ov29_02353598 - arm_func_end ov29_022ECB38 - - arm_func_start DecrementWindCounter -DecrementWindCounter: ; 0x022ECB48 -#ifdef JAPAN -#define DECREMENT_WIND_COUNTER_OFFSET -0xA4 -#else -#define DECREMENT_WIND_COUNTER_OFFSET 0 -#endif - stmdb sp!, {r4, lr} - bl GetLeader - movs r4, r0 - moveq r0, #0 - beq _022ECB70 - ldr r0, [r4] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_022ECB70: - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, _022ECD7C ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x700 - ldrsh r1, [r0, #0x84] - cmp r1, #0 - subgt r1, r1, #1 - strgth r1, [r0, #0x84] - ldr r0, _022ECD7C ; =DUNGEON_PTR - ldr r1, [r0] - add r0, r1, #0x700 - ldrsh r0, [r0, #0x84] - cmp r0, #1 - movlt r0, #3 - strltb r0, [r1, #0x79a] - ldr r0, _022ECD7C ; =DUNGEON_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x79a] - cmp r0, #0 - bne _022ECC2C - add r0, r1, #0x700 - ldrsh r0, [r0, #0x84] - cmp r0, #0xfa - ldmgeia sp!, {r4, pc} - bl ov29_022F2FE4 - mov r1, #1 - mov r0, r4 - mov r2, r1 - bl TryPointCameraToMonster - mov r0, r4 - bl DisplayActions - bl IsFloorOver - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldr r1, _022ECD7C ; =DUNGEON_PTR - mov r0, r4 - ldr r2, [r1] - add r1, r2, #0x4000 - ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] - ldrb r2, [r2, #0x79a] - bl ov29_022EC9A4 - ldr r0, _022ECD7C ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x79a] - ldmia sp!, {r4, pc} -_022ECC2C: - cmp r0, #1 - bne _022ECC9C - add r0, r1, #0x700 - ldrsh r0, [r0, #0x84] - cmp r0, #0x96 - ldmgeia sp!, {r4, pc} - bl ov29_022F2FE4 - mov r1, #1 - mov r0, r4 - mov r2, r1 - bl TryPointCameraToMonster - mov r0, r4 - bl DisplayActions - bl IsFloorOver - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldr r1, _022ECD7C ; =DUNGEON_PTR - mov r0, r4 - ldr r2, [r1] - add r1, r2, #0x4000 - ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] - ldrb r2, [r2, #0x79a] - bl ov29_022EC9A4 - ldr r0, _022ECD7C ; =DUNGEON_PTR - mov r1, #2 - ldr r0, [r0] - strb r1, [r0, #0x79a] - ldmia sp!, {r4, pc} -_022ECC9C: - cmp r0, #2 - add r0, r1, #0x700 - ldrsh r0, [r0, #0x84] - bne _022ECD0C - cmp r0, #0x32 - ldmgeia sp!, {r4, pc} - bl ov29_022F2FE4 - mov r1, #1 - mov r0, r4 - mov r2, r1 - bl TryPointCameraToMonster - mov r0, r4 - bl DisplayActions - bl IsFloorOver - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldr r1, _022ECD7C ; =DUNGEON_PTR - mov r0, r4 - ldr r2, [r1] - add r1, r2, #0x4000 - ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] - ldrb r2, [r2, #0x79a] - bl ov29_022EC9A4 - ldr r0, _022ECD7C ; =DUNGEON_PTR - mov r1, #3 - ldr r0, [r0] - strb r1, [r0, #0x79a] - ldmia sp!, {r4, pc} -_022ECD0C: - cmp r0, #1 - ldmgeia sp!, {r4, pc} - bl ov29_022F2FE4 - mov r1, #1 - mov r0, r4 - mov r2, r1 - bl TryPointCameraToMonster - mov r0, r4 - bl DisplayActions - bl IsFloorOver - cmp r0, #0 - ldmneia sp!, {r4, pc} - ldr r1, _022ECD7C ; =DUNGEON_PTR - mov r0, r4 - ldr r2, [r1] - add r1, r2, #0x4000 - ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] - ldrb r2, [r2, #0x79a] - bl ov29_022EC9A4 - ldr r0, _022ECD7C ; =DUNGEON_PTR - ldr r1, _022ECD80 ; =0x0000025D - ldr r3, [r0] - mov ip, #4 - mov r0, r4 - mov r2, r4 - strb ip, [r3, #0x79a] - bl HandleFaint - ldmia sp!, {r4, pc} - .align 2, 0 -_022ECD7C: .word DUNGEON_PTR -_022ECD80: .word 0x0000025D - arm_func_end DecrementWindCounter - - arm_func_start ov29_022ECD84 -ov29_022ECD84: ; 0x022ECD84 - stmdb sp!, {r4, lr} - mov r4, r0 - bl EntityIsValid__022ECDC0 - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, [r4] - cmp r0, #1 - ldmneia sp!, {r4, pc} - ldr r1, [r4, #0xb4] - cmp r1, #0 - ldmeqia sp!, {r4, pc} - ldr r0, _022ECDBC ; =ov29_0237C974 - bl GetMonsterName - ldmia sp!, {r4, pc} - .align 2, 0 -_022ECDBC: .word ov29_0237C974 - arm_func_end ov29_022ECD84 diff --git a/asm/overlay_29_022EC85C.s b/asm/overlay_29_022EC85C.s new file mode 100644 index 00000000..8a5da291 --- /dev/null +++ b/asm/overlay_29_022EC85C.s @@ -0,0 +1,447 @@ + .include "asm/macros.inc" + .include "overlay_29_022EC85C.inc" + + .text + + arm_func_start ov29_022EC85C +ov29_022EC85C: ; 0x022EC85C + stmdb sp!, {r3, lr} + bl GetForcedLossReason + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, pc} + bl IsFloorOver + ldmia sp!, {r3, pc} + arm_func_end ov29_022EC85C + + arm_func_start ov29_022EC878 +ov29_022EC878: ; 0x022EC878 + mov r2, #0 + strb r2, [r0] + strb r2, [r0, #1] + strb r2, [r0, #2] + strb r2, [r0, #3] + strb r2, [r0, #4] + ldr r1, _022EC8A4 ; =ov29_02353598 + strb r2, [r0, #5] + mov r0, #1 + strb r0, [r1] + bx lr + .align 2, 0 +_022EC8A4: .word ov29_02353598 + arm_func_end ov29_022EC878 + + arm_func_start ov29_022EC8A8 +ov29_022EC8A8: ; 0x022EC8A8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r6, r0 + mov r5, r1 + mov r0, r2 + mov r1, #0x30 + mov r4, r3 + bl _s32_div_f + mov r3, r1, lsl #1 + and r0, r3, #0xff + mov r2, r0, lsr #1 + ldr r1, _022EC998 ; =ov29_02352390 + mov r0, #0xc0 + strb r3, [r6, #4] + add r2, r2, #1 + strb r2, [r6, #2] + add r4, r4, #2 + smlabb r5, r5, r0, r1 + b _022EC96C +_022EC8F0: + strb r4, [r6, #3] + mov r8, #0x63 + ldr r7, _022EC99C ; =DUNGEON_PTR + b _022EC93C +_022EC900: + ldrb r1, [r6, #3] + mov r0, r8 + sub r1, r1, #1 + strb r1, [r6, #3] + ldrb r1, [r6, #5] + eor r1, r1, #1 + strb r1, [r6, #5] + ldrb r3, [r6, #4] + and r2, r1, #0xff + ldr r1, [r7] + add r2, r3, r2 + ldr r2, [r5, r2, lsl #2] + add r1, r1, #0x1a000 +#ifdef JAPAN + str r2, [r1, #0x18c] +#else + str r2, [r1, #0x230] +#endif + bl AdvanceFrame +_022EC93C: + ldrb r0, [r6, #3] + cmp r0, #0 + bne _022EC900 + ldrb r0, [r6, #4] + cmp r0, #0 + subne r0, r0, #2 + strneb r0, [r6, #4] + mov r0, #0 + strb r0, [r6, #5] + ldrb r0, [r6, #2] + sub r0, r0, #1 + strb r0, [r6, #2] +_022EC96C: + ldrb r0, [r6, #2] + cmp r0, #0 + bne _022EC8F0 + ldr r0, _022EC99C ; =DUNGEON_PTR + mov r2, #0 + ldr r0, [r0] + ldr r1, _022EC9A0 ; =ov29_02353598 + add r0, r0, #0x1a000 +#ifdef JAPAN + str r2, [r0, #0x18c] +#else + str r2, [r0, #0x230] +#endif + strb r2, [r1] + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_022EC998: .word ov29_02352390 +_022EC99C: .word DUNGEON_PTR +_022EC9A0: .word ov29_02353598 + arm_func_end ov29_022EC8A8 + + arm_func_start ov29_022EC9A4 +ov29_022EC9A4: ; 0x022EC9A4 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r3, #0xc +#ifdef JAPAN + smulbb r4, r1, r3 + ldr r1, _022ECAD8 ; =ov10_022C6320 + mov r6, r0 + ldrb r4, [r1, r4] +#else + smulbb r3, r1, r3 + ldr r1, _022ECAD8 ; =ov10_022C6320 + mov r6, r0 + ldrb r4, [r1, r3] +#endif + mov r5, r2 + cmp r4, #5 + beq _022ECA28 + cmp r5, #0 + bne _022EC9E0 +#ifdef JAPAN + add r1, r3, #0x930 +#else + ldr r1, _022ECADC ; =0x00000BFD +#endif + bl LogMessageByIdWithPopupCheckUser + b _022ECA18 +_022EC9E0: + cmp r5, #1 + bne _022EC9F4 + ldr r1, _022ECAE0 ; =0x00000BFE + bl LogMessageByIdWithPopupCheckUser + b _022ECA18 +_022EC9F4: + cmp r5, #2 + bne _022ECA08 + ldr r1, _022ECAE4 ; =0x00000BFF + bl LogMessageByIdWithPopupCheckUser + b _022ECA18 +_022ECA08: + cmp r5, #3 + bne _022ECA18 +#ifdef JAPAN + ldr r1, _022EE14C ; =0x0000093F +#else + mov r1, #0xc00 +#endif + bl LogMessageByIdWithPopupCheckUser +_022ECA18: + mov r0, r4 + mov r1, #0 + bl ov29_022E5DBC + b _022ECAD0 +_022ECA28: + bl ov29_022EAEF0 + mov r4, r0 + cmp r5, #0 + bne _022ECA48 +#ifdef JAPAN + mov r0, r6 + mov r1, #0x940 +#else + ldr r1, _022ECAE8 ; =0x00000C01 + mov r0, r6 +#endif + bl LogMessageByIdWithPopupCheckUser + b _022ECA8C +_022ECA48: + cmp r5, #1 + bne _022ECA60 + ldr r1, _022ECAEC ; =0x00000C02 + mov r0, r6 + bl LogMessageByIdWithPopupCheckUser + b _022ECA8C +_022ECA60: + cmp r5, #2 + bne _022ECA78 + ldr r1, _022ECAF0 ; =0x00000C03 + mov r0, r6 + bl LogMessageByIdWithPopupCheckUser + b _022ECA8C +_022ECA78: + cmp r5, #3 + bne _022ECA8C + ldr r1, _022ECAF4 ; =0x00000C04 + mov r0, r6 + bl LogMessageByIdWithPopupCheckUser +_022ECA8C: + add r0, sp, #0 + bl ov29_022EC878 + ldr r0, _022ECAF8 ; =ov29_02352380 + ldr r0, [r0, r5, lsl #2] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl ChangeDungeonMusic + mov r0, r5, lsl #2 + add r0, r0, #8 + mov r2, r0, lsl #0x10 + mov r3, r2, asr #0x10 + add r0, sp, #0 + mov r1, r5 + mov r2, #0x10 + bl ov29_022EC8A8 + mov r0, r4 + bl ChangeDungeonMusic +_022ECAD0: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_022ECAD8: .word ov10_022C6320 +#ifdef JAPAN +_022ECAE0: .word 0x0000093D +_022ECAE4: .word 0x0000093E +_022EE14C: .word 0x0000093F +_022ECAEC: .word 0x00000941 +_022ECAF0: .word 0x00000942 +_022ECAF4: .word 0x00000943 +#else +_022ECADC: .word 0x00000BFD +_022ECAE0: .word 0x00000BFE +_022ECAE4: .word 0x00000BFF +_022ECAE8: .word 0x00000C01 +_022ECAEC: .word 0x00000C02 +_022ECAF0: .word 0x00000C03 +_022ECAF4: .word 0x00000C04 +#endif +_022ECAF8: .word ov29_02352380 + arm_func_end ov29_022EC9A4 + + arm_func_start ov29_022ECAFC +ov29_022ECAFC: ; 0x022ECAFC + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + add r0, sp, #0 + bl ov29_022EC878 + mov r0, r4, lsl #2 + add r0, r0, #2 + mov r2, r0, lsl #0x10 + mov r3, r2, asr #0x10 + add r0, sp, #0 + mov r1, r4 + mov r2, #8 + bl ov29_022EC8A8 + add sp, sp, #8 + ldmia sp!, {r4, pc} + arm_func_end ov29_022ECAFC + + arm_func_start ov29_022ECB38 +ov29_022ECB38: ; 0x022ECB38 + ldr r0, _022ECB44 ; =ov29_02353598 + ldrb r0, [r0] + bx lr + .align 2, 0 +_022ECB44: .word ov29_02353598 + arm_func_end ov29_022ECB38 + + arm_func_start DecrementWindCounter +DecrementWindCounter: ; 0x022ECB48 +#ifdef JAPAN +#define DECREMENT_WIND_COUNTER_OFFSET -0xA4 +#else +#define DECREMENT_WIND_COUNTER_OFFSET 0 +#endif + stmdb sp!, {r4, lr} + bl GetLeader + movs r4, r0 + moveq r0, #0 + beq _022ECB70 + ldr r0, [r4] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff +_022ECB70: + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, _022ECD7C ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x700 + ldrsh r1, [r0, #0x84] + cmp r1, #0 + subgt r1, r1, #1 + strgth r1, [r0, #0x84] + ldr r0, _022ECD7C ; =DUNGEON_PTR + ldr r1, [r0] + add r0, r1, #0x700 + ldrsh r0, [r0, #0x84] + cmp r0, #1 + movlt r0, #3 + strltb r0, [r1, #0x79a] + ldr r0, _022ECD7C ; =DUNGEON_PTR + ldr r1, [r0] + ldrb r0, [r1, #0x79a] + cmp r0, #0 + bne _022ECC2C + add r0, r1, #0x700 + ldrsh r0, [r0, #0x84] + cmp r0, #0xfa + ldmgeia sp!, {r4, pc} + bl ov29_022F2FE4 + mov r1, #1 + mov r0, r4 + mov r2, r1 + bl TryPointCameraToMonster + mov r0, r4 + bl DisplayActions + bl IsFloorOver + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r1, _022ECD7C ; =DUNGEON_PTR + mov r0, r4 + ldr r2, [r1] + add r1, r2, #0x4000 + ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] + ldrb r2, [r2, #0x79a] + bl ov29_022EC9A4 + ldr r0, _022ECD7C ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x79a] + ldmia sp!, {r4, pc} +_022ECC2C: + cmp r0, #1 + bne _022ECC9C + add r0, r1, #0x700 + ldrsh r0, [r0, #0x84] + cmp r0, #0x96 + ldmgeia sp!, {r4, pc} + bl ov29_022F2FE4 + mov r1, #1 + mov r0, r4 + mov r2, r1 + bl TryPointCameraToMonster + mov r0, r4 + bl DisplayActions + bl IsFloorOver + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r1, _022ECD7C ; =DUNGEON_PTR + mov r0, r4 + ldr r2, [r1] + add r1, r2, #0x4000 + ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] + ldrb r2, [r2, #0x79a] + bl ov29_022EC9A4 + ldr r0, _022ECD7C ; =DUNGEON_PTR + mov r1, #2 + ldr r0, [r0] + strb r1, [r0, #0x79a] + ldmia sp!, {r4, pc} +_022ECC9C: + cmp r0, #2 + add r0, r1, #0x700 + ldrsh r0, [r0, #0x84] + bne _022ECD0C + cmp r0, #0x32 + ldmgeia sp!, {r4, pc} + bl ov29_022F2FE4 + mov r1, #1 + mov r0, r4 + mov r2, r1 + bl TryPointCameraToMonster + mov r0, r4 + bl DisplayActions + bl IsFloorOver + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r1, _022ECD7C ; =DUNGEON_PTR + mov r0, r4 + ldr r2, [r1] + add r1, r2, #0x4000 + ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] + ldrb r2, [r2, #0x79a] + bl ov29_022EC9A4 + ldr r0, _022ECD7C ; =DUNGEON_PTR + mov r1, #3 + ldr r0, [r0] + strb r1, [r0, #0x79a] + ldmia sp!, {r4, pc} +_022ECD0C: + cmp r0, #1 + ldmgeia sp!, {r4, pc} + bl ov29_022F2FE4 + mov r1, #1 + mov r0, r4 + mov r2, r1 + bl TryPointCameraToMonster + mov r0, r4 + bl DisplayActions + bl IsFloorOver + cmp r0, #0 + ldmneia sp!, {r4, pc} + ldr r1, _022ECD7C ; =DUNGEON_PTR + mov r0, r4 + ldr r2, [r1] + add r1, r2, #0x4000 + ldrsh r1, [r1, #0xd4 + DECREMENT_WIND_COUNTER_OFFSET] + ldrb r2, [r2, #0x79a] + bl ov29_022EC9A4 + ldr r0, _022ECD7C ; =DUNGEON_PTR + ldr r1, _022ECD80 ; =0x0000025D + ldr r3, [r0] + mov ip, #4 + mov r0, r4 + mov r2, r4 + strb ip, [r3, #0x79a] + bl HandleFaint + ldmia sp!, {r4, pc} + .align 2, 0 +_022ECD7C: .word DUNGEON_PTR +_022ECD80: .word 0x0000025D + arm_func_end DecrementWindCounter + + arm_func_start ov29_022ECD84 +ov29_022ECD84: ; 0x022ECD84 + stmdb sp!, {r4, lr} + mov r4, r0 + bl EntityIsValid__022ECDC0 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4] + cmp r0, #1 + ldmneia sp!, {r4, pc} + ldr r1, [r4, #0xb4] + cmp r1, #0 + ldmeqia sp!, {r4, pc} + ldr r0, _022ECDBC ; =ov29_0237C974 + bl GetMonsterName + ldmia sp!, {r4, pc} + .align 2, 0 +_022ECDBC: .word ov29_0237C974 + arm_func_end ov29_022ECD84 diff --git a/asm/overlay_29_02305C28.s b/asm/overlay_29_02305C28.s index e932355e..823fd7a3 100644 --- a/asm/overlay_29_02305C28.s +++ b/asm/overlay_29_02305C28.s @@ -429,2309 +429,3 @@ _0230619C: .word ov10_022C45A0 _023061A0: .word ov10_022C4868 _023061A4: .word 0x00000C91 + END_SLEEP_CLASS_STATUS_OFFSET arm_func_end EndSleepClassStatus - - arm_func_start EndBurnClassStatus -EndBurnClassStatus: ; 0x023061A8 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r1 - mov r6, r0 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xbf] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _02306238 -_023061E8: ; jump table - b _02306238 ; case 0 - b _02306228 ; case 1 - b _02306200 ; case 2 - b _02306200 ; case 3 - b _02306214 ; case 4 - b _02306238 ; case 5 -_02306200: - ldr r2, _0230624C ; =0x00000C9E - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306238 -_02306214: - ldr r2, _02306250 ; =0x00000C9C - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306238 -_02306228: - ldr r2, _02306254 ; =0x00000C9D - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_02306238: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xbf] - bl UpdateStatusIconFlags - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_0230624C: .word 0x000009DE -_02306250: .word 0x000009DC -_02306254: .word 0x000009DD -#else -_0230624C: .word 0x00000C9E -_02306250: .word 0x00000C9C -_02306254: .word 0x00000C9D -#endif - arm_func_end EndBurnClassStatus - - arm_func_start EndFrozenClassStatus -EndFrozenClassStatus: ; 0x02306258 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r1 - mov r8, r0 - mov r0, r7 - mov r6, r2 - mov r4, #0 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r4 - ldr r5, [r7, #0xb4] - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r5, #0xc4] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _02306398 -_023062A0: ; jump table - b _02306398 ; case 0 - b _023062C4 ; case 1 - b _02306300 ; case 2 - b _02306338 ; case 3 - b _0230635C ; case 4 -#ifdef JAPAN - b _02306300 ; case 5 -#else - b _0230631C ; case 5 -#endif - b _02306380 ; case 6 - b _023062E4 ; case 7 - b _02306398 ; case 8 -_023062C4: - cmp r6, #0 - beq _023062DC - ldr r2, _023063BC ; =0x00000C9F - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_023062DC: - mov r4, #1 - b _02306398 -_023062E4: - cmp r6, #0 - beq _02306398 - ldr r2, _023063C0 ; =0x00000C99 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306398 -_02306300: - cmp r6, #0 - beq _02306398 - ldr r2, _023063C4 ; =0x00000C9A - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306398 -#ifndef JAPAN -_0230631C: - cmp r6, #0 - beq _02306398 - ldr r2, _023063C8 ; =0x00000C9B - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02306398 -#endif -_02306338: - cmp r6, #0 - beq _02306350 - ldr r2, _023063CC ; =0x00000C98 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02306350: - ldr r0, [r5, #0xb4] - bl FreeOtherWrappedMonsters - b _02306398 -_0230635C: - cmp r6, #0 - beq _02306374 - ldr r2, _023063CC ; =0x00000C98 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02306374: - ldr r0, [r5, #0xb4] - bl FreeOtherWrappedMonsters - b _02306398 -_02306380: - cmp r6, #0 - beq _02306398 - ldr r2, _023063D0 ; =0x00000CBB - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02306398: - mov r1, #0 - mov r0, r7 - strb r1, [r5, #0xc4] - bl UpdateStatusIconFlags - cmp r4, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r7 - bl ov29_022E6798 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -#define END_FROZEN_CLASS_STATUS_OFFSET -0x2C0 -#else -#define END_FROZEN_CLASS_STATUS_OFFSET 0 -#endif -_023063BC: .word 0x00000C9F + END_FROZEN_CLASS_STATUS_OFFSET -_023063C0: .word 0x00000C99 + END_FROZEN_CLASS_STATUS_OFFSET -_023063C4: .word 0x00000C9A + END_FROZEN_CLASS_STATUS_OFFSET -#ifndef JAPAN -_023063C8: .word 0x00000C9B -#endif -_023063CC: .word 0x00000C98 + END_FROZEN_CLASS_STATUS_OFFSET -_023063D0: .word 0x00000CBB + END_FROZEN_CLASS_STATUS_OFFSET - arm_func_end EndFrozenClassStatus - - arm_func_start EndCringeClassStatus -EndCringeClassStatus: ; 0x023063D4 -#ifdef JAPAN -#define END_CRINGE_CLASS_STATUS_OFFSET -0x2C0 -#else -#define END_CRINGE_CLASS_STATUS_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, lr} - mov r5, r1 - mov r6, r0 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xd0] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _023064C0 -_02306414: ; jump table - b _023064C0 ; case 0 - b _023064B0 ; case 1 - b _02306438 ; case 2 - b _02306474 ; case 3 - b _0230644C ; case 4 - b _02306460 ; case 5 - b _0230649C ; case 6 - b _02306488 ; case 7 - b _023064C0 ; case 8 -_02306438: - ldr r2, _023064DC ; =0x00000C97 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_0230644C: - ldr r2, _023064E0 ; =0x00000CA4 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_02306460: - ldr r2, _023064E4 ; =0x00000CA7 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_02306474: - ldr r2, _023064E8 ; =0x00000CBD - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_02306488: - ldr r2, _023064EC ; =0x00000CB7 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_0230649C: - mov r0, r6 - mov r1, r5 - mov r2, #0xcb0 + END_CRINGE_CLASS_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUserTarget - b _023064C0 -_023064B0: - ldr r2, _023064F0 ; =0x00000CBC - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_023064C0: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xd0] - bl UpdateStatusIconFlags - mov r0, r5 - bl CalcSpeedStageWrapper - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023064DC: .word 0x00000C97 + END_CRINGE_CLASS_STATUS_OFFSET -_023064E0: .word 0x00000CA4 + END_CRINGE_CLASS_STATUS_OFFSET -_023064E4: .word 0x00000CA7 + END_CRINGE_CLASS_STATUS_OFFSET -_023064E8: .word 0x00000CBD + END_CRINGE_CLASS_STATUS_OFFSET -_023064EC: .word 0x00000CB7 + END_CRINGE_CLASS_STATUS_OFFSET -_023064F0: .word 0x00000CBC + END_CRINGE_CLASS_STATUS_OFFSET - arm_func_end EndCringeClassStatus - - arm_func_start EndReflectClassStatus -EndReflectClassStatus: ; 0x023064F4 -#ifdef JAPAN -#define END_REFLECT_CLASS_STATUS_OFFSET -0x2C0 -#else -#define END_REFLECT_CLASS_STATUS_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xd5] - cmp r0, #0x12 - addls pc, pc, r0, lsl #2 - b _02306688 -_02306530: ; jump table - b _02306688 ; case 0 - b _0230657C ; case 1 - b _0230658C ; case 2 - b _0230659C ; case 3 - b _023065AC ; case 4 - b _023065BC ; case 5 - b _023065CC ; case 6 - b _023065DC ; case 7 - b _023065EC ; case 8 - b _023065FC ; case 9 - b _023065AC ; case 10 - b _0230660C ; case 11 - b _0230661C ; case 12 - b _0230663C ; case 13 - b _0230664C ; case 14 - b _0230665C ; case 15 - b _0230666C ; case 16 - b _0230667C ; case 17 - b _02306688 ; case 18 -_0230657C: - ldr r1, _0230669C ; =0x00000C87 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230658C: - ldr r1, _023066A0 ; =0x00000C8A - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230659C: - ldr r1, _023066A4 ; =0x00000C88 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065AC: - ldr r1, _023066A8 ; =0x00000C89 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065BC: - ldr r1, _023066AC ; =0x00000C8B - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065CC: - ldr r1, _023066B0 ; =0x00000C8C - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065DC: - ldr r1, _023066B4 ; =0x00000CA6 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065EC: - ldr r1, _023066B8 ; =0x00000CAE - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_023065FC: - ldr r1, _023066BC ; =0x00000CB1 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230660C: - ldr r1, _023066C0 ; =0x00000CB2 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230661C: - ldr r1, _023066C4 ; =0x00000CB3 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - mov r0, r5 - bl ov29_022E65F4 - mov r0, r5 - bl ResetTypeChanges - b _02306688 -_0230663C: - ldr r1, _023066C8 ; =0x00000CB4 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230664C: - ldr r1, _023066CC ; =0x00000CB5 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230665C: - ldr r1, _023066D0 ; =0x00000CBE - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230666C: - mov r0, r5 - mov r1, #0xcc0 + END_REFLECT_CLASS_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUser - b _02306688 -_0230667C: - ldr r1, _023066D4 ; =0x00000CC1 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_02306688: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xd5] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0230669C: .word 0x00000C87 + END_REFLECT_CLASS_STATUS_OFFSET -_023066A0: .word 0x00000C8A + END_REFLECT_CLASS_STATUS_OFFSET -_023066A4: .word 0x00000C88 + END_REFLECT_CLASS_STATUS_OFFSET -_023066A8: .word 0x00000C89 + END_REFLECT_CLASS_STATUS_OFFSET -_023066AC: .word 0x00000C8B + END_REFLECT_CLASS_STATUS_OFFSET -_023066B0: .word 0x00000C8C + END_REFLECT_CLASS_STATUS_OFFSET -_023066B4: .word 0x00000CA6 + END_REFLECT_CLASS_STATUS_OFFSET -_023066B8: .word 0x00000CAE + END_REFLECT_CLASS_STATUS_OFFSET -_023066BC: .word 0x00000CB1 + END_REFLECT_CLASS_STATUS_OFFSET -_023066C0: .word 0x00000CB2 + END_REFLECT_CLASS_STATUS_OFFSET -_023066C4: .word 0x00000CB3 + END_REFLECT_CLASS_STATUS_OFFSET -_023066C8: .word 0x00000CB4 + END_REFLECT_CLASS_STATUS_OFFSET -_023066CC: .word 0x00000CB5 + END_REFLECT_CLASS_STATUS_OFFSET -_023066D0: .word 0x00000CBE + END_REFLECT_CLASS_STATUS_OFFSET -_023066D4: .word 0x00000CC1 + END_REFLECT_CLASS_STATUS_OFFSET - arm_func_end EndReflectClassStatus - - arm_func_start TryRemoveSnatchedMonsterFromDungeonStruct -TryRemoveSnatchedMonsterFromDungeonStruct: ; 0x023066D8 - stmdb sp!, {r4, lr} - mov r4, r1 - mov r0, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, [r4, #0xb4] - ldrb r0, [r0, #0xd8] - cmp r0, #3 - ldmneia sp!, {r4, pc} - ldr r1, _02306724 ; =DUNGEON_PTR - mov r2, #0 - ldr r0, [r1] - add r0, r0, #0x19000 -#ifdef JAPAN - str r2, [r0, #0x860] - ldr r0, [r1] - add r0, r0, #0x19000 - str r2, [r0, #0x868] -#else - str r2, [r0, #0x904] - ldr r0, [r1] - add r0, r0, #0x19000 - str r2, [r0, #0x90c] -#endif - ldmia sp!, {r4, pc} - .align 2, 0 -_02306724: .word DUNGEON_PTR - arm_func_end TryRemoveSnatchedMonsterFromDungeonStruct - - arm_func_start EndCurseClassStatus -EndCurseClassStatus: ; 0x02306728 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r1 - mov r8, r0 - mov r0, r7 - mov r6, r2 - mov r5, r3 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, #0 - ldr r4, [r7, #0xb4] - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xd8] - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _02306894 -_02306770: ; jump table - b _02306894 ; case 0 - b _02306790 ; case 1 - b _023067D4 ; case 2 - b _023067AC ; case 3 - b _02306830 ; case 4 - b _02306868 ; case 5 - b _02306880 ; case 6 - b _02306894 ; case 7 -_02306790: - cmp r6, #1 - cmpne r5, #0 - beq _02306894 - ldr r1, _023068A8 ; =0x00000C95 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser - b _02306894 -_023067AC: - cmp r6, #3 - cmpne r5, #0 - beq _023067C4 - ldr r1, _023068AC ; =0x00000C96 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser -_023067C4: - mov r0, r8 - mov r1, r7 - bl TryRemoveSnatchedMonsterFromDungeonStruct - b _02306894 -_023067D4: - mov r1, #0 - mov r0, r7 - strb r1, [r4, #0xd8] - bl GetIdleAnimationId - mov r1, r0 - mov r0, r7 - bl ov29_02304830 - ldr r1, _023068B0 ; =DUNGEON_PTR - mov r0, #0 - ldr r1, [r1] - cmp r6, #2 - add r1, r1, #0x3000 -#ifdef JAPAN - strb r0, [r1, #0xd94] -#else - strb r0, [r1, #0xe38] -#endif - beq _02306894 - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - cmp r5, #0 - beq _02306894 - ldr r1, _023068B4 ; =0x00000CA5 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser - b _02306894 -_02306830: - mov r1, #0 - mov r0, r7 - strb r1, [r4, #0xd8] - bl ov29_022FB984 - cmp r5, #0 - beq _02306854 - ldr r1, _023068B8 ; =0x00000CBF - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser -_02306854: - ldr r0, _023068B0 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - strb r1, [r0, #0xe] - b _02306894 -_02306868: - cmp r5, #0 - beq _02306894 - ldr r1, _023068BC ; =0x00000CC2 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser - b _02306894 -_02306880: - cmp r5, #0 - beq _02306894 - ldr r1, _023068C0 ; =0x00000CC3 - mov r0, r7 - bl LogMessageByIdWithPopupCheckUser -_02306894: - mov r1, #0 - mov r0, r7 - strb r1, [r4, #0xd8] - bl UpdateStatusIconFlags - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -#define END_CURSE_CLASS_OFFSET -0x2C0 -#else -#define END_CURSE_CLASS_OFFSET 0 -#endif -_023068A8: .word 0x00000C95 + END_CURSE_CLASS_OFFSET -_023068AC: .word 0x00000C96 + END_CURSE_CLASS_OFFSET -_023068B0: .word DUNGEON_PTR -_023068B4: .word 0x00000CA5 + END_CURSE_CLASS_OFFSET -_023068B8: .word 0x00000CBF + END_CURSE_CLASS_OFFSET -_023068BC: .word 0x00000CC2 + END_CURSE_CLASS_OFFSET -_023068C0: .word 0x00000CC3 + END_CURSE_CLASS_OFFSET - arm_func_end EndCurseClassStatus - - arm_func_start EndLeechSeedClassStatus -EndLeechSeedClassStatus: ; 0x023068C4 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xe0] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0230692C -_02306900: ; jump table - b _0230692C ; case 0 - b _02306910 ; case 1 - b _02306920 ; case 2 - b _0230692C ; case 3 -_02306910: - ldr r1, _02306948 ; =0x00000C94 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _0230692C -_02306920: - ldr r1, _0230694C ; =0x00000CAF - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_0230692C: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xe0] - mov r1, #0xff - strb r1, [r4, #0xe8] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02306948: .word 0x000009D4 -_0230694C: .word 0x000009EF -#else -_02306948: .word 0x00000C94 -_0230694C: .word 0x00000CAF -#endif - arm_func_end EndLeechSeedClassStatus - - arm_func_start EndSureShotClassStatus -EndSureShotClassStatus: ; 0x02306950 -#ifdef JAPAN -#define END_SURE_SHOT_CLASS_STATUS_OFFSET -0x2C0 -#else -#define END_SURE_SHOT_CLASS_STATUS_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xec] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _023069E0 -_0230698C: ; jump table - b _023069E0 ; case 0 - b _023069A4 ; case 1 - b _023069B4 ; case 2 - b _023069C4 ; case 3 - b _023069D4 ; case 4 - b _023069E0 ; case 5 -_023069A4: - mov r0, r5 - mov r1, #0xca0 + END_SURE_SHOT_CLASS_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUser - b _023069E0 -_023069B4: - ldr r1, _023069F4 ; =0x00000CA1 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _023069E0 -_023069C4: - ldr r1, _023069F8 ; =0x00000CA2 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _023069E0 -_023069D4: - ldr r1, _023069FC ; =0x00000CA3 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_023069E0: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xec] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023069F4: .word 0x00000CA1 + END_SURE_SHOT_CLASS_STATUS_OFFSET -_023069F8: .word 0x00000CA2 + END_SURE_SHOT_CLASS_STATUS_OFFSET -_023069FC: .word 0x00000CA3 + END_SURE_SHOT_CLASS_STATUS_OFFSET - arm_func_end EndSureShotClassStatus - - arm_func_start EndInvisibleClassStatus -EndInvisibleClassStatus: ; 0x02306A00 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r1 - mov r4, #0 - mov r0, r8 - mov r7, r2 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r4 - ldr r6, [r8, #0xb4] - mov r1, r8 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xef] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _02306ADC -_02306A48: ; jump table - b _02306ADC ; case 0 - b _02306A60 ; case 1 - b _02306A84 ; case 2 - b _02306A74 ; case 3 - b _02306AC4 ; case 4 - b _02306ADC ; case 5 -_02306A60: - ldr r1, _02306B18 ; =0x00000CA8 - mov r0, r8 - mov r4, #1 - bl LogMessageByIdWithPopupCheckUser - b _02306ADC -_02306A74: - ldr r1, _02306B1C ; =0x00000CB8 - mov r0, r8 - bl LogMessageByIdWithPopupCheckUser - b _02306ADC -_02306A84: - ldrsh r1, [r6, #2] - mov r0, r8 - bl GetMonsterApparentId - strh r0, [r6, #4] - ldrsh r0, [r6, #4] - bl DungeonGetSpriteIndex - strh r0, [r8, #0xa8] - mov r0, r8 - bl GetIdleAnimationId - mov r1, r0 - mov r0, r8 - bl ov29_02304830 - ldr r1, _02306B20 ; =0x00000CB6 - mov r0, r8 - bl LogMessageByIdWithPopupCheckUser - b _02306ADC -_02306AC4: - cmp r7, #0 - bne _02306AD8 - ldr r1, _02306B24 ; =0x00000CAC - mov r0, r8 - bl LogMessageByIdWithPopupCheckUser -_02306AD8: - mov r5, #1 -_02306ADC: - mov r1, #0 - mov r0, r8 - strb r1, [r6, #0xef] - bl UpdateStatusIconFlags - cmp r4, #0 - beq _02306AFC - mov r0, #1 - bl HandleShopTransaction -_02306AFC: - cmp r7, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} - cmp r5, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, r8 - bl EnsureCanStandCurrentTile - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -#define END_INVISIBLE_CLASS_OFFSET -0x2C0 -#else -#define END_INVISIBLE_CLASS_OFFSET 0 -#endif -_02306B18: .word 0x00000CA8 + END_INVISIBLE_CLASS_OFFSET -_02306B1C: .word 0x00000CB8 + END_INVISIBLE_CLASS_OFFSET -_02306B20: .word 0x00000CB6 + END_INVISIBLE_CLASS_OFFSET -_02306B24: .word 0x00000CAC + END_INVISIBLE_CLASS_OFFSET - arm_func_end EndInvisibleClassStatus - - arm_func_start EndBlinkerClassStatus -EndBlinkerClassStatus: ; 0x02306B28 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xf1] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _02306BB8 -_02306B64: ; jump table - b _02306BB8 ; case 0 - b _02306B7C ; case 1 - b _02306B8C ; case 2 - b _02306B9C ; case 3 - b _02306BAC ; case 4 - b _02306BB8 ; case 5 -_02306B7C: - ldr r1, _02306BE8 ; =0x00000CA9 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306BB8 -_02306B8C: - ldr r1, _02306BEC ; =0x00000CAA - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306BB8 -_02306B9C: - ldr r1, _02306BF0 ; =0x00000CAB - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - b _02306BB8 -_02306BAC: - ldr r1, _02306BF4 ; =0x00000CAD - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_02306BB8: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xf1] - bl UpdateStatusIconFlags - ldrb r0, [r4, #7] - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0x31 - bl AdvanceFrame - bl UpdateTrapsVisibility - bl UpdateMinimap - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -#define END_BLINKER_CLASS_OFFSET -0x2C0 -#else -#define END_BLINKER_CLASS_OFFSET 0 -#endif -_02306BE8: .word 0x00000CA9 + END_BLINKER_CLASS_OFFSET -_02306BEC: .word 0x00000CAA + END_BLINKER_CLASS_OFFSET -_02306BF0: .word 0x00000CAB + END_BLINKER_CLASS_OFFSET -_02306BF4: .word 0x00000CAD + END_BLINKER_CLASS_OFFSET - arm_func_end EndBlinkerClassStatus - - arm_func_start EndMuzzledStatus -EndMuzzledStatus: ; 0x02306BF8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xf3] - cmp r0, #0 - beq _02306C4C - cmp r0, #1 - beq _02306C40 - cmp r0, #2 - b _02306C4C -_02306C40: - ldr r1, _02306C60 ; =0x00000CB9 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_02306C4C: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xf3] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02306C60: .word 0x000009F9 -#else -_02306C60: .word 0x00000CB9 -#endif - arm_func_end EndMuzzledStatus - - arm_func_start EndMiracleEyeStatus -EndMiracleEyeStatus: ; 0x02306C64 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xf5] - cmp r0, #0 - beq _02306CB8 - cmp r0, #1 - beq _02306CAC - cmp r0, #2 - b _02306CB8 -_02306CAC: - ldr r1, _02306CCC ; =0x00000CC4 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser -_02306CB8: - mov r1, #0 - mov r0, r5 - strb r1, [r4, #0xf5] - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02306CCC: .word 0x00000A04 -#else -_02306CCC: .word 0x00000CC4 -#endif - arm_func_end EndMiracleEyeStatus - - arm_func_start EndMagnetRiseStatus -EndMagnetRiseStatus: ; 0x02306CD0 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r1 - mov r0, r6 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r4, #0 - ldr r5, [r6, #0xb4] - mov r0, r4 - mov r1, r6 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r5, #0xf7] - cmp r0, #0 - beq _02306D2C - cmp r0, #1 - beq _02306D1C - cmp r0, #2 - b _02306D2C -_02306D1C: - ldr r1, _02306D50 ; =0x00000CC5 - mov r0, r6 - bl LogMessageByIdWithPopupCheckUser - mov r4, #1 -_02306D2C: - mov r1, #0 - mov r0, r6 - strb r1, [r5, #0xf7] - bl UpdateStatusIconFlags - cmp r4, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, r6 - bl ov29_02321134 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_02306D50: .word 0x00000A05 -#else -_02306D50: .word 0x00000CC5 -#endif - arm_func_end EndMagnetRiseStatus - - arm_func_start ov29_02306D54 -ov29_02306D54: ; 0x02306D54 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, #0 - ldr r4, _02306DC8 ; =DUNGEON_PTR - mov sb, r0 - mov r5, r8 - mov r6, #1 - mov r7, r8 -_02306D70: - ldr r0, [r4] - add r0, r0, r8, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r1, [r0, #0xad4] -#else - ldr r1, [r0, #0xb78] -#endif - cmp r1, #0 - moveq r0, r7 - beq _02306DA0 - ldr r0, [r1] - cmp r0, #1 - moveq r0, r6 - movne r0, r5 - and r0, r0, #0xff -_02306DA0: - cmp r0, #0 - beq _02306DB0 - mov r0, sb - bl EndMagnetRiseStatus -_02306DB0: - add r0, r8, #1 - mov r0, r0, lsl #0x10 - mov r8, r0, asr #0x10 - cmp r8, #0x14 - blt _02306D70 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02306DC8: .word DUNGEON_PTR - arm_func_end ov29_02306D54 - - arm_func_start ov29_02306DCC -ov29_02306DCC: ; 0x02306DCC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - mov r8, r1 - mov r4, #0 - mov sb, r0 - mov r0, r8 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - beq _02306EF8 - mov r1, sb - mov r2, r0 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xbd] - cmp r0, #0 - moveq r0, r4 - beq _02306EF8 - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _02306E9C -_02306E3C: ; jump table - b _02306E9C ; case 0 - b _02306E58 ; case 1 - b _02306E9C ; case 2 - b _02306E58 ; case 3 - b _02306E58 ; case 4 - b _02306E7C ; case 5 - b _02306E9C ; case 6 -_02306E58: - mov r2, #1 - mov r0, sb - mov r1, r8 - mov r3, r2 - str r4, [sp] - bl ov29_02311C28 - mov sl, r0 - mov r4, #1 - b _02306E9C -_02306E7C: - mov r2, r4 - mov r0, sb - mov r1, r8 - mov r3, r2 - str r2, [sp] - bl ov29_02311C28 - mov sl, r0 - mov r4, #1 -_02306E9C: - cmp sl, #0 - beq _02306EBC - ldrb r1, [r6, #0xbd] - orr r0, r5, #0x11 - and r5, r0, #0xff - strb r1, [r7, #0xbd] - ldrb r0, [r6, #0xbe] - strb r0, [r7, #0xbe] -_02306EBC: - cmp r4, #0 - orrne r1, r5, #1 - movne r0, #0 - strneb r0, [r6, #0xbd] - andne r5, r1, #0xff - cmp r4, #0 - beq _02306EE4 - mov r0, sb - mov r1, #0x378 - bl ChangeMonsterAnimationToIdle -_02306EE4: - mov r0, sb - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 -_02306EF8: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02306DCC - - arm_func_start ov29_02306F00 -ov29_02306F00: ; 0x02306F00 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - mov sl, #0 - mov sb, r0 - mov r8, r1 - mov r4, sl - mov r5, sl - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, sl - beq _02307070 - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, sl - beq _02307070 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - ldrb r0, [r6, #0xbf] - cmp r0, #0 - mov r0, sl - beq _02307070 - mov r1, sb - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, sl - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xbf] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0230701C -_02306F84: ; jump table - b _0230701C ; case 0 - b _02306FFC ; case 1 - b _02306F9C ; case 2 - b _02306FBC ; case 3 - b _02306FDC ; case 4 - b _0230701C ; case 5 -_02306F9C: - mov r0, sb - mov r1, r8 - mov r2, sl - mov r3, #1 - bl TryInflictPoisonedStatus - mov sl, r0 - mov r4, #1 - b _0230701C -_02306FBC: - mov r0, sb - mov r1, r8 - mov r2, sl - mov r3, #1 - bl TryInflictBadlyPoisonedStatus - mov sl, r0 - mov r4, #1 - b _0230701C -_02306FDC: - mov r0, sb - mov r1, r8 - mov r2, sl - mov r3, #1 - bl TryInflictParalysisStatus - mov sl, r0 - mov r4, #1 - b _0230701C -_02306FFC: - mov r2, sl - mov r4, #1 - mov r0, sb - mov r1, r8 - mov r3, r2 - str r4, [sp] - bl TryInflictBurnStatus - mov sl, r0 -_0230701C: - cmp sl, #0 - beq _02307048 - add r3, r6, #0xbf - add r2, r7, #0xbf - mov r1, #4 -_02307030: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02307030 - orr r0, r5, #0x11 - and r5, r0, #0xff -_02307048: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xbf] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 -_02307070: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02306F00 - - arm_func_start ov29_02307078 -ov29_02307078: ; 0x02307078 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - ldrb r1, [r6, #0xc4] - cmp r1, #3 - cmpne r1, #4 - beq _023070E0 - ldrb r0, [r7, #0xc4] - add r0, r0, #0xfd - and r0, r0, #0xff - cmp r0, #1 - bhi _023070E8 -_023070E0: - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_023070E8: - cmp r1, #7 - addls pc, pc, r1, lsl #2 - b _0230714C -_023070F4: ; jump table - b _0230714C ; case 0 - b _0230714C ; case 1 - b _02307114 ; case 2 - b _0230714C ; case 3 - b _0230714C ; case 4 - b _0230714C ; case 5 - b _0230714C ; case 6 - b _02307130 ; case 7 -_02307114: - mov r0, sb - mov r1, r8 - mov r2, #1 - bl TryInflictShadowHoldStatus - mov sl, r0 - mov r4, #1 - b _0230714C -_02307130: - mov r0, sb - mov r1, r8 - mov r2, #0x7e - mov r3, #1 - bl TryInflictConstrictionStatus - mov sl, r0 - mov r4, #1 -_0230714C: - cmp sl, #0 - beq _0230716C - add r0, r6, #0xc4 - add r7, r7, #0xc4 - ldmia r0, {r0, r1, r2} - orr r3, r5, #0x11 - stmia r7, {r0, r1, r2} - and r5, r3, #0xff -_0230716C: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xc4] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02307078 - - arm_func_start ov29_02307198 -ov29_02307198: ; 0x02307198 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #8 - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - beq _02307374 - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - beq _02307374 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - ldrb r0, [r6, #0xd0] - cmp r0, #0 - mov r0, r4 - beq _02307374 - mov r1, sb - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xd0] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _0230731C -_0230721C: ; jump table - b _0230731C ; case 0 - b _02307300 ; case 1 - b _02307240 ; case 2 - b _0230729C ; case 3 - b _02307260 ; case 4 - b _02307280 ; case 5 - b _023072E4 ; case 6 - b _023072C4 ; case 7 - b _0230731C ; case 8 -_02307240: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictConfusedStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_02307260: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictCoweringStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_02307280: - mov r0, sb - mov r1, r8 - mov r2, #1 - bl TryInflictTauntStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_0230729C: - mov r3, r4 - mov r0, sb - mov r1, r8 - str r3, [sp] - mov r2, #1 - str r2, [sp, #4] - bl TryInflictPausedStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_023072C4: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictInfatuatedStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_023072E4: - mov r0, sb - mov r1, r8 - mov r2, #1 - bl TryInflictEncoreStatus - mov sl, r0 - mov r4, #1 - b _0230731C -_02307300: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictCringeStatus - mov sl, r0 - mov r4, #1 -_0230731C: - cmp sl, #0 - beq _0230733C - ldrb r1, [r6, #0xd0] - orr r0, r5, #0x11 - and r5, r0, #0xff - strb r1, [r7, #0xd0] - ldrb r0, [r6, #0xd1] - strb r0, [r7, #0xd1] -_0230733C: - cmp r4, #0 - movne r0, #0 - orrne r1, r5, #1 - strneb r0, [r6, #0xd0] - mov r0, sb - andne r5, r1, #0xff - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, sb - bl CalcSpeedStageWrapper - mov r0, r8 - bl CalcSpeedStageWrapper - mov r0, r5 -_02307374: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02307198 - - arm_func_start ov29_0230737C -ov29_0230737C: ; 0x0230737C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov r5, r4 - mov r6, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - beq _023076B4 - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - beq _023076B4 - mov r1, sb - mov r2, r0 - ldr r7, [sb, #0xb4] - ldr sl, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r7, #0xd8] - cmp r0, #7 - addls pc, pc, r0, lsl #2 - b _0230749C -_023073F0: ; jump table - b _0230749C ; case 0 - b _02307410 ; case 1 - b _0230741C ; case 2 - b _0230749C ; case 3 - b _02307440 ; case 4 - b _02307460 ; case 5 - b _02307480 ; case 6 - b _0230749C ; case 7 -_02307410: - mov r5, #1 - mov r4, r5 - b _0230749C -_0230741C: - mov r2, r4 - mov r4, #1 - mov r0, sb - mov r1, r8 - mov r3, r2 - str r4, [sp] - bl TryInflictDecoyStatus - mov r5, r0 - b _0230749C -_02307440: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictGastroAcidStatus - mov r5, r0 - mov r4, #1 - b _0230749C -_02307460: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictHealBlockStatus - mov r5, r0 - mov r4, #1 - b _0230749C -_02307480: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictEmbargoStatus - mov r5, r0 - mov r4, #1 -_0230749C: - ldrb r0, [r7, #0xd8] - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _023076A0 -_023074AC: ; jump table - b _023076A0 ; case 0 - b _023074C8 ; case 1 - b _02307528 ; case 2 - b _023076A0 ; case 3 - b _02307554 ; case 4 - b _023075D4 ; case 5 - b _0230763C ; case 6 -_023074C8: - cmp r5, #0 - beq _02307500 - mov r0, sb - mov r1, r8 - bl TryRemoveSnatchedMonsterFromDungeonStruct - add r3, r7, #0xd8 - add r2, sl, #0xd8 - mov r1, #5 -_023074E8: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _023074E8 - orr r0, r6, #0x11 - and r6, r0, #0xff -_02307500: - cmp r4, #0 - beq _023076A0 - mov r0, r8 - mov r1, sb - mov r2, #1 - mov r3, #0 - bl EndCurseClassStatus - orr r0, r6, #1 - and r6, r0, #0xff - b _023076A0 -_02307528: - cmp r5, #0 - beq _023076A0 - mov r3, #0 - mov r0, sb - mov r1, r8 - mov r2, #1 - str r3, [sp] - bl TryInflictDecoyStatus - orr r0, r6, #0x11 - and r6, r0, #0xff - b _023076A0 -_02307554: - cmp r5, #0 - beq _023075AC - mov r0, sb - mov r1, r8 - bl TryRemoveSnatchedMonsterFromDungeonStruct - add r3, r7, #0xd8 - add r2, sl, #0xd8 - mov r1, #5 -_02307574: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02307574 - ldr r1, _023076BC ; =DUNGEON_PTR - mov r0, r8 - ldr r1, [r1] - mov r2, #1 - strb r2, [r1, #0xe] - bl ov29_022FB984 - mov r0, r8 - bl UpdateStatusIconFlags - orr r0, r6, #0x11 - and r6, r0, #0xff -_023075AC: - cmp r4, #0 - beq _023076A0 - mov r0, r8 - mov r1, sb - mov r2, #4 - mov r3, #0 - bl EndCurseClassStatus - orr r0, r6, #1 - and r6, r0, #0xff - b _023076A0 -_023075D4: - cmp r5, #0 - beq _02307614 - mov r0, sb - mov r1, r8 - bl TryRemoveSnatchedMonsterFromDungeonStruct - add r3, r7, #0xd8 - add r2, sl, #0xd8 - mov r1, #5 -_023075F4: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _023075F4 - mov r0, r8 - bl UpdateStatusIconFlags - orr r0, r6, #0x11 - and r6, r0, #0xff -_02307614: - cmp r4, #0 - beq _023076A0 - mov r0, r8 - mov r1, sb - mov r2, #5 - mov r3, #0 - bl EndCurseClassStatus - orr r0, r6, #1 - and r6, r0, #0xff - b _023076A0 -_0230763C: - cmp r5, #0 - beq _0230767C - mov r0, sb - mov r1, r8 - bl TryRemoveSnatchedMonsterFromDungeonStruct - add r3, r7, #0xd8 - add r2, sl, #0xd8 - mov r1, #5 -_0230765C: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _0230765C - mov r0, r8 - bl UpdateStatusIconFlags - orr r0, r6, #0x11 - and r6, r0, #0xff -_0230767C: - cmp r4, #0 - beq _023076A0 - mov r0, r8 - mov r1, sb - mov r2, #6 - mov r3, #0 - bl EndCurseClassStatus - orr r0, r6, #1 - and r6, r0, #0xff -_023076A0: - mov r0, sb - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r6 -_023076B4: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_023076BC: .word DUNGEON_PTR - arm_func_end ov29_0230737C - - arm_func_start ov29_023076C0 -ov29_023076C0: ; 0x023076C0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - ldrb r0, [r6, #0xe0] - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sb - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xe0] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0230776C -_02307740: ; jump table - b _0230776C ; case 0 - b _02307750 ; case 1 - b _0230776C ; case 2 - b _0230776C ; case 3 -_02307750: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictLeechSeedStatus - mov sl, r0 - mov r4, #1 -_0230776C: - cmp sl, #0 - beq _023077CC - add r0, r6, #0xe0 - add r3, r7, #0xe0 - ldmia r0, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, #0xff - strb r0, [r7, #0xe8] - ldr r2, _023077F8 ; =DUNGEON_PTR - mov r0, #0 -_02307794: - ldr r1, [r2] - add r1, r1, r0, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xad4] -#else - ldr r1, [r1, #0xb78] -#endif - cmp sb, r1 - streqb r0, [r7, #0xe8] - ldreq r1, [sb, #0xb4] - add r0, r0, #1 - ldreq r1, [r1, #0xb0] - streq r1, [r7, #0xe4] - cmp r0, #0x14 - blt _02307794 - orr r0, r5, #0x11 - and r5, r0, #0xff -_023077CC: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xe0] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_023077F8: .word DUNGEON_PTR - arm_func_end ov29_023076C0 - - arm_func_start ov29_023077FC -ov29_023077FC: ; 0x023077FC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sb - mov r2, r0 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xec] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _023078A0 -_0230786C: ; jump table - b _023078A0 ; case 0 - b _023078A0 ; case 1 - b _02307884 ; case 2 - b _023078A0 ; case 3 - b _023078A0 ; case 4 - b _023078A0 ; case 5 -_02307884: - mov r0, sb - mov r1, r8 - mov r2, r4 - mov r3, #1 - bl TryInflictWhifferStatus - mov sl, r0 - mov r4, #1 -_023078A0: - cmp sl, #0 - beq _023078C0 - ldrb r1, [r6, #0xec] - orr r0, r5, #0x11 - and r5, r0, #0xff - strb r1, [r7, #0xec] - ldrb r0, [r6, #0xed] - strb r0, [r7, #0xed] -_023078C0: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xec] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_023077FC - - arm_func_start TransferNegativeBlinkerClassStatus -TransferNegativeBlinkerClassStatus: ; 0x023078EC - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sb, r0 - mov r8, r1 - mov sl, r4 - mov r5, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, r8 - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sb - mov r2, r0 - ldr r6, [sb, #0xb4] - ldr r7, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, r8 - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r6, #0xf1] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _023079C4 -_0230795C: ; jump table - b _023079C4 ; case 0 - b _02307974 ; case 1 - b _02307994 ; case 2 - b _023079C4 ; case 3 - b _023079B0 ; case 4 - b _023079C4 ; case 5 -_02307974: - mov r0, sb - mov r1, r8 - mov r2, #1 - mov r3, r4 - bl TryInflictBlinkerStatus - mov sl, r0 - mov r4, #1 - b _023079C4 -_02307994: - mov r0, sb - mov r1, r8 - mov r2, #1 - bl TryInflictCrossEyedStatus - mov sl, r0 - mov r4, #1 - b _023079C4 -_023079B0: - mov r0, sb - mov r1, r8 - bl TryInflictDropeyeStatus - mov sl, r0 - mov r4, #1 -_023079C4: - cmp sl, #0 - beq _023079E4 - ldrb r1, [r6, #0xf1] - orr r0, r5, #0x11 - and r5, r0, #0xff - strb r1, [r7, #0xf1] - ldrb r0, [r6, #0xf2] - strb r0, [r7, #0xf2] -_023079E4: - cmp r4, #0 - orrne r0, r5, #1 - movne r1, #0 - andne r5, r0, #0xff - mov r0, sb - strneb r1, [r6, #0xf1] - bl UpdateStatusIconFlags - mov r0, r8 - bl UpdateStatusIconFlags - ldrb r0, [r6, #7] - cmp r0, #0 - beq _02307A24 - mov r0, #0x31 - bl AdvanceFrame - bl UpdateTrapsVisibility - bl UpdateMinimap -_02307A24: - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end TransferNegativeBlinkerClassStatus - - arm_func_start ov29_02307A2C -ov29_02307A2C: ; 0x02307A2C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sl, r0 - mov sb, r1 - mov r5, r4 - mov r6, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, sb - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sl - mov r2, r0 - ldr r7, [sl, #0xb4] - ldr r8, [sb, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, sb - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r7, #0xf3] - cmp r0, #0 - beq _02307AC0 - cmp r0, #1 - beq _02307AA8 - cmp r0, #2 - b _02307AC0 -_02307AA8: - mov r0, sl - mov r1, sb - mov r2, #1 - bl TryInflictMuzzledStatus - mov r5, r0 - mov r4, #1 -_02307AC0: - cmp r5, #0 - beq _02307AE0 - ldrb r1, [r7, #0xf3] - orr r0, r6, #0x11 - and r6, r0, #0xff - strb r1, [r8, #0xf3] - ldrb r0, [r7, #0xf4] - strb r0, [r8, #0xf4] -_02307AE0: - cmp r4, #0 - orrne r0, r6, #1 - movne r1, #0 - andne r6, r0, #0xff - mov r0, sl - strneb r1, [r7, #0xf3] - bl UpdateStatusIconFlags - mov r0, sb - bl UpdateStatusIconFlags - mov r0, r6 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02307A2C - - arm_func_start ov29_02307B0C -ov29_02307B0C: ; 0x02307B0C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sl, r0 - mov sb, r1 - mov r5, r4 - mov r6, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - moveq r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r0, sb - bl EntityIsValid__02305C04 - cmp r0, #0 - mov r0, r4 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - mov r1, sl - mov r2, r0 - ldr r7, [sl, #0xb4] - ldr r8, [sb, #0xb4] - bl SubstitutePlaceholderStringTags - mov r1, sb - mov r0, #1 - mov r2, r4 - bl SubstitutePlaceholderStringTags - ldrb r0, [r7, #0xf5] - cmp r0, #1 - bne _02307B90 - mov r0, sl - mov r1, sb - mov r2, #1 - bl TryInflictMiracleEyeStatus - mov r5, r0 - mov r4, #1 -_02307B90: - cmp r5, #0 - beq _02307BB0 - ldrb r1, [r7, #0xf5] - orr r0, r6, #0x11 - and r6, r0, #0xff - strb r1, [r8, #0xf5] - ldrb r0, [r7, #0xf6] - strb r0, [r8, #0xf6] -_02307BB0: - cmp r4, #0 - orrne r0, r6, #1 - movne r1, #0 - andne r6, r0, #0xff - mov r0, sl - strneb r1, [r7, #0xf5] - bl UpdateStatusIconFlags - mov r0, sb - bl UpdateStatusIconFlags - mov r0, r6 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end ov29_02307B0C - - arm_func_start TryEndPetrifiedOrSleepStatus -TryEndPetrifiedOrSleepStatus: ; 0x02307BDC - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r5, r1 - ldr r4, [r5, #0xb4] - mov r6, r0 - ldrb r2, [r4, #0xc4] - mov r3, #0 - cmp r2, #6 - bne _02307C0C - mov r2, #1 - bl EndFrozenClassStatus - mov r3, #1 -_02307C0C: - ldrb r0, [r4, #0xbd] - cmp r0, #1 - ldreqb r0, [r4, #0xbe] - cmpeq r0, #0x7f - bne _02307C3C - mov r3, #1 - mov r0, r6 - mov r1, r5 - mov r2, #0 - str r3, [sp] - bl EndSleepClassStatus - mov r3, #1 -_02307C3C: - mov r0, r3 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - arm_func_end TryEndPetrifiedOrSleepStatus - - arm_func_start ov29_02307C48 -ov29_02307C48: ; 0x02307C48 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr ip, [r4, #0xb4] - mov r3, #0 - mov r1, #1 - strb r3, [ip, #0xbd] - mov r2, r1 - strb r3, [ip, #0xbe] - bl ov29_022FA1D8 - mov r0, r4 - bl UpdateStatusIconFlags - ldmia sp!, {r4, pc} - arm_func_end ov29_02307C48 - - arm_func_start EndFrozenStatus -EndFrozenStatus: ; 0x02307C78 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r3, [r4, #0xb4] - ldrb r0, [r3, #0xc4] - cmp r0, #1 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, #0 - strb r0, [r3, #0xc4] - strb r0, [r3, #0xcc] - mov r1, r4 - mov r2, r0 - strb r0, [r3, #0xcd] - bl SubstitutePlaceholderStringTags - ldr r2, _02307CDC ; =0x00000C9F - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r4 - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02307CDC: .word 0x000009DF -#else -_02307CDC: .word 0x00000C9F -#endif - arm_func_end EndFrozenStatus - - arm_func_start ResetTypeChanges -ResetTypeChanges: ; 0x02307CE0 - stmdb sp!, {r4, lr} - ldr r4, [r0, #0xb4] - mov r1, #0 - bl TryRestoreRoostTyping - mov r1, #0 - strb r1, [r4, #0xff] - ldrsh r0, [r4, #2] - bl GetType - strb r0, [r4, #0x5e] - ldrsh r0, [r4, #2] - mov r1, #1 - bl GetType - strb r0, [r4, #0x5f] - ldmia sp!, {r4, pc} - arm_func_end ResetTypeChanges - - arm_func_start EndProtectStatus -EndProtectStatus: ; 0x02307D18 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, [r4, #0xb4] - ldrb r0, [r0, #0xd5] - cmp r0, #7 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl EndReflectClassStatus - ldmia sp!, {r3, r4, r5, pc} - arm_func_end EndProtectStatus - - arm_func_start TryRestoreRoostTyping -TryRestoreRoostTyping: ; 0x02307D54 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl EntityIsValid__02305C04 - cmp r0, #0 - ldrne r2, [r5, #0xb4] - ldrneb r0, [r2, #0xa9] - cmpne r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - strb r0, [r2, #0xa9] - ldrb r1, [r2, #0xaa] - cmp r4, #0 - strb r1, [r2, #0x5e] - ldrb r1, [r2, #0xab] - strb r1, [r2, #0x5f] - strb r0, [r2, #0xaa] - strb r0, [r2, #0xab] - ldmeqia sp!, {r3, r4, r5, pc} - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, _02307DBC ; =0x00000CC8 - mov r0, r5 - bl LogMessageByIdWithPopupCheckUser - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_02307DBC: .word 0x00000A08 -#else -_02307DBC: .word 0x00000CC8 -#endif - arm_func_end TryRestoreRoostTyping - - arm_func_start ov29_02307DC0 -ov29_02307DC0: ; 0x02307DC0 -#ifdef JAPAN - ldr r1, [r0, #0xb4] - mov r0, #0 - strb r0, [r1, #0x103] - strb r0, [r1, #0x104] -#else - mov r1, #0 - strb r1, [r0, #0x104] - strb r1, [r0, #0x105] -#endif - bx lr - arm_func_end ov29_02307DC0 - - arm_func_start ov29_02307DD0 -ov29_02307DD0: ; 0x02307DD0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, #0 -_02307DD8: - ldr r0, _02307EF4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r6, [r0, #0xa94] -#else - ldr r6, [r0, #0xb38] -#endif - mov r0, r6 - bl EntityIsValid__02307EF8 - cmp r0, #0 - beq _02307EE4 - ldr r1, [r6, #0xb4] - ldrb r0, [r1, #0xbd] - cmp r0, #1 - ldreqb r0, [r1, #0xbe] - cmpeq r0, #0x7f - bne _02307EE4 - mov r8, #0 - mov r7, r8 - mov r5, r8 - ldrb sl, [r6, #0x25] - ldr fp, _02307EF4 ; =DUNGEON_PTR - b _02307EBC -_02307E2C: - ldr r0, [fp] - add r0, r0, r5, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sb, [r0, #0xa84] -#else - ldr sb, [r0, #0xb28] -#endif - mov r0, sb - bl EntityIsValid__02307EF8 - cmp r0, #0 - beq _02307EB8 - mov r0, sb - mov r1, #0x1f - bl ItemIsActive__02307F1C - cmp r0, #0 - bne _02307EB8 - ldrsh r1, [sb, #4] - ldrsh r0, [r6, #4] - sub r0, r1, r0 - bl abs - cmp r0, #1 - bgt _02307E94 - ldrsh r1, [sb, #6] - ldrsh r0, [r6, #6] - sub r0, r1, r0 - bl abs - cmp r0, #1 - movle r8, #1 - ble _02307EC4 -_02307E94: - mov r0, sb - mov r1, #0x24 - bl ItemIsActive__02307F1C - cmp r0, #0 - beq _02307EB8 - ldrb r0, [sb, #0x25] - cmp sl, r0 - moveq r7, #1 - beq _02307EC4 -_02307EB8: - add r5, r5, #1 -_02307EBC: - cmp r5, #4 - blt _02307E2C -_02307EC4: - cmp r7, #0 - bne _02307ED4 - cmp r8, #0 - movne r7, #1 -_02307ED4: - cmp r7, #0 - beq _02307EE4 - mov r0, r6 - bl ov29_02307C48 -_02307EE4: - add r4, r4, #1 - cmp r4, #0x10 - blt _02307DD8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02307EF4: .word DUNGEON_PTR - arm_func_end ov29_02307DD0 diff --git a/asm/overlay_29_02306258.s b/asm/overlay_29_02306258.s new file mode 100644 index 00000000..9e491225 --- /dev/null +++ b/asm/overlay_29_02306258.s @@ -0,0 +1,401 @@ + .include "asm/macros.inc" + .include "overlay_29_02306258.inc" + + .text + + arm_func_start EndFrozenClassStatus +EndFrozenClassStatus: ; 0x02306258 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r1 + mov r8, r0 + mov r0, r7 + mov r6, r2 + mov r4, #0 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r4 + ldr r5, [r7, #0xb4] + mov r1, r7 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r5, #0xc4] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _02306398 +_023062A0: ; jump table + b _02306398 ; case 0 + b _023062C4 ; case 1 + b _02306300 ; case 2 + b _02306338 ; case 3 + b _0230635C ; case 4 +#ifdef JAPAN + b _02306300 ; case 5 +#else + b _0230631C ; case 5 +#endif + b _02306380 ; case 6 + b _023062E4 ; case 7 + b _02306398 ; case 8 +_023062C4: + cmp r6, #0 + beq _023062DC + ldr r2, _023063BC ; =0x00000C9F + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_023062DC: + mov r4, #1 + b _02306398 +_023062E4: + cmp r6, #0 + beq _02306398 + ldr r2, _023063C0 ; =0x00000C99 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02306398 +_02306300: + cmp r6, #0 + beq _02306398 + ldr r2, _023063C4 ; =0x00000C9A + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02306398 +#ifndef JAPAN +_0230631C: + cmp r6, #0 + beq _02306398 + ldr r2, _023063C8 ; =0x00000C9B + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02306398 +#endif +_02306338: + cmp r6, #0 + beq _02306350 + ldr r2, _023063CC ; =0x00000C98 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02306350: + ldr r0, [r5, #0xb4] + bl FreeOtherWrappedMonsters + b _02306398 +_0230635C: + cmp r6, #0 + beq _02306374 + ldr r2, _023063CC ; =0x00000C98 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02306374: + ldr r0, [r5, #0xb4] + bl FreeOtherWrappedMonsters + b _02306398 +_02306380: + cmp r6, #0 + beq _02306398 + ldr r2, _023063D0 ; =0x00000CBB + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02306398: + mov r1, #0 + mov r0, r7 + strb r1, [r5, #0xc4] + bl UpdateStatusIconFlags + cmp r4, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r7 + bl ov29_022E6798 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +#define END_FROZEN_CLASS_STATUS_OFFSET -0x2C0 +#else +#define END_FROZEN_CLASS_STATUS_OFFSET 0 +#endif +_023063BC: .word 0x00000C9F + END_FROZEN_CLASS_STATUS_OFFSET +_023063C0: .word 0x00000C99 + END_FROZEN_CLASS_STATUS_OFFSET +_023063C4: .word 0x00000C9A + END_FROZEN_CLASS_STATUS_OFFSET +#ifndef JAPAN +_023063C8: .word 0x00000C9B +#endif +_023063CC: .word 0x00000C98 + END_FROZEN_CLASS_STATUS_OFFSET +_023063D0: .word 0x00000CBB + END_FROZEN_CLASS_STATUS_OFFSET + arm_func_end EndFrozenClassStatus + + arm_func_start EndCringeClassStatus +EndCringeClassStatus: ; 0x023063D4 +#ifdef JAPAN +#define END_CRINGE_CLASS_STATUS_OFFSET -0x2C0 +#else +#define END_CRINGE_CLASS_STATUS_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + mov r6, r0 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xd0] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _023064C0 +_02306414: ; jump table + b _023064C0 ; case 0 + b _023064B0 ; case 1 + b _02306438 ; case 2 + b _02306474 ; case 3 + b _0230644C ; case 4 + b _02306460 ; case 5 + b _0230649C ; case 6 + b _02306488 ; case 7 + b _023064C0 ; case 8 +_02306438: + ldr r2, _023064DC ; =0x00000C97 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_0230644C: + ldr r2, _023064E0 ; =0x00000CA4 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_02306460: + ldr r2, _023064E4 ; =0x00000CA7 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_02306474: + ldr r2, _023064E8 ; =0x00000CBD + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_02306488: + ldr r2, _023064EC ; =0x00000CB7 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_0230649C: + mov r0, r6 + mov r1, r5 + mov r2, #0xcb0 + END_CRINGE_CLASS_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUserTarget + b _023064C0 +_023064B0: + ldr r2, _023064F0 ; =0x00000CBC + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget +_023064C0: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xd0] + bl UpdateStatusIconFlags + mov r0, r5 + bl CalcSpeedStageWrapper + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_023064DC: .word 0x00000C97 + END_CRINGE_CLASS_STATUS_OFFSET +_023064E0: .word 0x00000CA4 + END_CRINGE_CLASS_STATUS_OFFSET +_023064E4: .word 0x00000CA7 + END_CRINGE_CLASS_STATUS_OFFSET +_023064E8: .word 0x00000CBD + END_CRINGE_CLASS_STATUS_OFFSET +_023064EC: .word 0x00000CB7 + END_CRINGE_CLASS_STATUS_OFFSET +_023064F0: .word 0x00000CBC + END_CRINGE_CLASS_STATUS_OFFSET + arm_func_end EndCringeClassStatus + + arm_func_start EndReflectClassStatus +EndReflectClassStatus: ; 0x023064F4 +#ifdef JAPAN +#define END_REFLECT_CLASS_STATUS_OFFSET -0x2C0 +#else +#define END_REFLECT_CLASS_STATUS_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xd5] + cmp r0, #0x12 + addls pc, pc, r0, lsl #2 + b _02306688 +_02306530: ; jump table + b _02306688 ; case 0 + b _0230657C ; case 1 + b _0230658C ; case 2 + b _0230659C ; case 3 + b _023065AC ; case 4 + b _023065BC ; case 5 + b _023065CC ; case 6 + b _023065DC ; case 7 + b _023065EC ; case 8 + b _023065FC ; case 9 + b _023065AC ; case 10 + b _0230660C ; case 11 + b _0230661C ; case 12 + b _0230663C ; case 13 + b _0230664C ; case 14 + b _0230665C ; case 15 + b _0230666C ; case 16 + b _0230667C ; case 17 + b _02306688 ; case 18 +_0230657C: + ldr r1, _0230669C ; =0x00000C87 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230658C: + ldr r1, _023066A0 ; =0x00000C8A + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230659C: + ldr r1, _023066A4 ; =0x00000C88 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065AC: + ldr r1, _023066A8 ; =0x00000C89 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065BC: + ldr r1, _023066AC ; =0x00000C8B + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065CC: + ldr r1, _023066B0 ; =0x00000C8C + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065DC: + ldr r1, _023066B4 ; =0x00000CA6 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065EC: + ldr r1, _023066B8 ; =0x00000CAE + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_023065FC: + ldr r1, _023066BC ; =0x00000CB1 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230660C: + ldr r1, _023066C0 ; =0x00000CB2 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230661C: + ldr r1, _023066C4 ; =0x00000CB3 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + mov r0, r5 + bl ov29_022E65F4 + mov r0, r5 + bl ResetTypeChanges + b _02306688 +_0230663C: + ldr r1, _023066C8 ; =0x00000CB4 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230664C: + ldr r1, _023066CC ; =0x00000CB5 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230665C: + ldr r1, _023066D0 ; =0x00000CBE + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230666C: + mov r0, r5 + mov r1, #0xcc0 + END_REFLECT_CLASS_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUser + b _02306688 +_0230667C: + ldr r1, _023066D4 ; =0x00000CC1 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_02306688: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xd5] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0230669C: .word 0x00000C87 + END_REFLECT_CLASS_STATUS_OFFSET +_023066A0: .word 0x00000C8A + END_REFLECT_CLASS_STATUS_OFFSET +_023066A4: .word 0x00000C88 + END_REFLECT_CLASS_STATUS_OFFSET +_023066A8: .word 0x00000C89 + END_REFLECT_CLASS_STATUS_OFFSET +_023066AC: .word 0x00000C8B + END_REFLECT_CLASS_STATUS_OFFSET +_023066B0: .word 0x00000C8C + END_REFLECT_CLASS_STATUS_OFFSET +_023066B4: .word 0x00000CA6 + END_REFLECT_CLASS_STATUS_OFFSET +_023066B8: .word 0x00000CAE + END_REFLECT_CLASS_STATUS_OFFSET +_023066BC: .word 0x00000CB1 + END_REFLECT_CLASS_STATUS_OFFSET +_023066C0: .word 0x00000CB2 + END_REFLECT_CLASS_STATUS_OFFSET +_023066C4: .word 0x00000CB3 + END_REFLECT_CLASS_STATUS_OFFSET +_023066C8: .word 0x00000CB4 + END_REFLECT_CLASS_STATUS_OFFSET +_023066CC: .word 0x00000CB5 + END_REFLECT_CLASS_STATUS_OFFSET +_023066D0: .word 0x00000CBE + END_REFLECT_CLASS_STATUS_OFFSET +_023066D4: .word 0x00000CC1 + END_REFLECT_CLASS_STATUS_OFFSET + arm_func_end EndReflectClassStatus + + arm_func_start TryRemoveSnatchedMonsterFromDungeonStruct +TryRemoveSnatchedMonsterFromDungeonStruct: ; 0x023066D8 + stmdb sp!, {r4, lr} + mov r4, r1 + mov r0, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0xb4] + ldrb r0, [r0, #0xd8] + cmp r0, #3 + ldmneia sp!, {r4, pc} + ldr r1, _02306724 ; =DUNGEON_PTR + mov r2, #0 + ldr r0, [r1] + add r0, r0, #0x19000 +#ifdef JAPAN + str r2, [r0, #0x860] + ldr r0, [r1] + add r0, r0, #0x19000 + str r2, [r0, #0x868] +#else + str r2, [r0, #0x904] + ldr r0, [r1] + add r0, r0, #0x19000 + str r2, [r0, #0x90c] +#endif + ldmia sp!, {r4, pc} + .align 2, 0 +_02306724: .word DUNGEON_PTR + arm_func_end TryRemoveSnatchedMonsterFromDungeonStruct diff --git a/asm/overlay_29_023068C4.s b/asm/overlay_29_023068C4.s new file mode 100644 index 00000000..b8b7d82c --- /dev/null +++ b/asm/overlay_29_023068C4.s @@ -0,0 +1,1726 @@ + .include "asm/macros.inc" + .include "overlay_29_023068C4.inc" + + .text + + arm_func_start EndLeechSeedClassStatus +EndLeechSeedClassStatus: ; 0x023068C4 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xe0] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0230692C +_02306900: ; jump table + b _0230692C ; case 0 + b _02306910 ; case 1 + b _02306920 ; case 2 + b _0230692C ; case 3 +_02306910: + ldr r1, _02306948 ; =0x00000C94 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _0230692C +_02306920: + ldr r1, _0230694C ; =0x00000CAF + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_0230692C: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xe0] + mov r1, #0xff + strb r1, [r4, #0xe8] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02306948: .word 0x000009D4 +_0230694C: .word 0x000009EF +#else +_02306948: .word 0x00000C94 +_0230694C: .word 0x00000CAF +#endif + arm_func_end EndLeechSeedClassStatus + + arm_func_start EndSureShotClassStatus +EndSureShotClassStatus: ; 0x02306950 +#ifdef JAPAN +#define END_SURE_SHOT_CLASS_STATUS_OFFSET -0x2C0 +#else +#define END_SURE_SHOT_CLASS_STATUS_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xec] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _023069E0 +_0230698C: ; jump table + b _023069E0 ; case 0 + b _023069A4 ; case 1 + b _023069B4 ; case 2 + b _023069C4 ; case 3 + b _023069D4 ; case 4 + b _023069E0 ; case 5 +_023069A4: + mov r0, r5 + mov r1, #0xca0 + END_SURE_SHOT_CLASS_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUser + b _023069E0 +_023069B4: + ldr r1, _023069F4 ; =0x00000CA1 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _023069E0 +_023069C4: + ldr r1, _023069F8 ; =0x00000CA2 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _023069E0 +_023069D4: + ldr r1, _023069FC ; =0x00000CA3 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_023069E0: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xec] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023069F4: .word 0x00000CA1 + END_SURE_SHOT_CLASS_STATUS_OFFSET +_023069F8: .word 0x00000CA2 + END_SURE_SHOT_CLASS_STATUS_OFFSET +_023069FC: .word 0x00000CA3 + END_SURE_SHOT_CLASS_STATUS_OFFSET + arm_func_end EndSureShotClassStatus + + arm_func_start EndInvisibleClassStatus +EndInvisibleClassStatus: ; 0x02306A00 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r1 + mov r4, #0 + mov r0, r8 + mov r7, r2 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r4 + ldr r6, [r8, #0xb4] + mov r1, r8 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xef] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _02306ADC +_02306A48: ; jump table + b _02306ADC ; case 0 + b _02306A60 ; case 1 + b _02306A84 ; case 2 + b _02306A74 ; case 3 + b _02306AC4 ; case 4 + b _02306ADC ; case 5 +_02306A60: + ldr r1, _02306B18 ; =0x00000CA8 + mov r0, r8 + mov r4, #1 + bl LogMessageByIdWithPopupCheckUser + b _02306ADC +_02306A74: + ldr r1, _02306B1C ; =0x00000CB8 + mov r0, r8 + bl LogMessageByIdWithPopupCheckUser + b _02306ADC +_02306A84: + ldrsh r1, [r6, #2] + mov r0, r8 + bl GetMonsterApparentId + strh r0, [r6, #4] + ldrsh r0, [r6, #4] + bl DungeonGetSpriteIndex + strh r0, [r8, #0xa8] + mov r0, r8 + bl GetIdleAnimationId + mov r1, r0 + mov r0, r8 + bl ov29_02304830 + ldr r1, _02306B20 ; =0x00000CB6 + mov r0, r8 + bl LogMessageByIdWithPopupCheckUser + b _02306ADC +_02306AC4: + cmp r7, #0 + bne _02306AD8 + ldr r1, _02306B24 ; =0x00000CAC + mov r0, r8 + bl LogMessageByIdWithPopupCheckUser +_02306AD8: + mov r5, #1 +_02306ADC: + mov r1, #0 + mov r0, r8 + strb r1, [r6, #0xef] + bl UpdateStatusIconFlags + cmp r4, #0 + beq _02306AFC + mov r0, #1 + bl HandleShopTransaction +_02306AFC: + cmp r7, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + cmp r5, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, r8 + bl EnsureCanStandCurrentTile + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +#define END_INVISIBLE_CLASS_OFFSET -0x2C0 +#else +#define END_INVISIBLE_CLASS_OFFSET 0 +#endif +_02306B18: .word 0x00000CA8 + END_INVISIBLE_CLASS_OFFSET +_02306B1C: .word 0x00000CB8 + END_INVISIBLE_CLASS_OFFSET +_02306B20: .word 0x00000CB6 + END_INVISIBLE_CLASS_OFFSET +_02306B24: .word 0x00000CAC + END_INVISIBLE_CLASS_OFFSET + arm_func_end EndInvisibleClassStatus + + arm_func_start EndBlinkerClassStatus +EndBlinkerClassStatus: ; 0x02306B28 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xf1] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _02306BB8 +_02306B64: ; jump table + b _02306BB8 ; case 0 + b _02306B7C ; case 1 + b _02306B8C ; case 2 + b _02306B9C ; case 3 + b _02306BAC ; case 4 + b _02306BB8 ; case 5 +_02306B7C: + ldr r1, _02306BE8 ; =0x00000CA9 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306BB8 +_02306B8C: + ldr r1, _02306BEC ; =0x00000CAA + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306BB8 +_02306B9C: + ldr r1, _02306BF0 ; =0x00000CAB + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + b _02306BB8 +_02306BAC: + ldr r1, _02306BF4 ; =0x00000CAD + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_02306BB8: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xf1] + bl UpdateStatusIconFlags + ldrb r0, [r4, #7] + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0x31 + bl AdvanceFrame + bl UpdateTrapsVisibility + bl UpdateMinimap + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +#define END_BLINKER_CLASS_OFFSET -0x2C0 +#else +#define END_BLINKER_CLASS_OFFSET 0 +#endif +_02306BE8: .word 0x00000CA9 + END_BLINKER_CLASS_OFFSET +_02306BEC: .word 0x00000CAA + END_BLINKER_CLASS_OFFSET +_02306BF0: .word 0x00000CAB + END_BLINKER_CLASS_OFFSET +_02306BF4: .word 0x00000CAD + END_BLINKER_CLASS_OFFSET + arm_func_end EndBlinkerClassStatus + + arm_func_start EndMuzzledStatus +EndMuzzledStatus: ; 0x02306BF8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xf3] + cmp r0, #0 + beq _02306C4C + cmp r0, #1 + beq _02306C40 + cmp r0, #2 + b _02306C4C +_02306C40: + ldr r1, _02306C60 ; =0x00000CB9 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_02306C4C: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xf3] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02306C60: .word 0x000009F9 +#else +_02306C60: .word 0x00000CB9 +#endif + arm_func_end EndMuzzledStatus + + arm_func_start EndMiracleEyeStatus +EndMiracleEyeStatus: ; 0x02306C64 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xf5] + cmp r0, #0 + beq _02306CB8 + cmp r0, #1 + beq _02306CAC + cmp r0, #2 + b _02306CB8 +_02306CAC: + ldr r1, _02306CCC ; =0x00000CC4 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser +_02306CB8: + mov r1, #0 + mov r0, r5 + strb r1, [r4, #0xf5] + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02306CCC: .word 0x00000A04 +#else +_02306CCC: .word 0x00000CC4 +#endif + arm_func_end EndMiracleEyeStatus + + arm_func_start EndMagnetRiseStatus +EndMagnetRiseStatus: ; 0x02306CD0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r1 + mov r0, r6 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r4, #0 + ldr r5, [r6, #0xb4] + mov r0, r4 + mov r1, r6 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r5, #0xf7] + cmp r0, #0 + beq _02306D2C + cmp r0, #1 + beq _02306D1C + cmp r0, #2 + b _02306D2C +_02306D1C: + ldr r1, _02306D50 ; =0x00000CC5 + mov r0, r6 + bl LogMessageByIdWithPopupCheckUser + mov r4, #1 +_02306D2C: + mov r1, #0 + mov r0, r6 + strb r1, [r5, #0xf7] + bl UpdateStatusIconFlags + cmp r4, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r6 + bl ov29_02321134 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +_02306D50: .word 0x00000A05 +#else +_02306D50: .word 0x00000CC5 +#endif + arm_func_end EndMagnetRiseStatus + + arm_func_start ov29_02306D54 +ov29_02306D54: ; 0x02306D54 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, #0 + ldr r4, _02306DC8 ; =DUNGEON_PTR + mov sb, r0 + mov r5, r8 + mov r6, #1 + mov r7, r8 +_02306D70: + ldr r0, [r4] + add r0, r0, r8, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r1, [r0, #0xad4] +#else + ldr r1, [r0, #0xb78] +#endif + cmp r1, #0 + moveq r0, r7 + beq _02306DA0 + ldr r0, [r1] + cmp r0, #1 + moveq r0, r6 + movne r0, r5 + and r0, r0, #0xff +_02306DA0: + cmp r0, #0 + beq _02306DB0 + mov r0, sb + bl EndMagnetRiseStatus +_02306DB0: + add r0, r8, #1 + mov r0, r0, lsl #0x10 + mov r8, r0, asr #0x10 + cmp r8, #0x14 + blt _02306D70 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02306DC8: .word DUNGEON_PTR + arm_func_end ov29_02306D54 + + arm_func_start ov29_02306DCC +ov29_02306DCC: ; 0x02306DCC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + mov r8, r1 + mov r4, #0 + mov sb, r0 + mov r0, r8 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + beq _02306EF8 + mov r1, sb + mov r2, r0 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xbd] + cmp r0, #0 + moveq r0, r4 + beq _02306EF8 + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _02306E9C +_02306E3C: ; jump table + b _02306E9C ; case 0 + b _02306E58 ; case 1 + b _02306E9C ; case 2 + b _02306E58 ; case 3 + b _02306E58 ; case 4 + b _02306E7C ; case 5 + b _02306E9C ; case 6 +_02306E58: + mov r2, #1 + mov r0, sb + mov r1, r8 + mov r3, r2 + str r4, [sp] + bl ov29_02311C28 + mov sl, r0 + mov r4, #1 + b _02306E9C +_02306E7C: + mov r2, r4 + mov r0, sb + mov r1, r8 + mov r3, r2 + str r2, [sp] + bl ov29_02311C28 + mov sl, r0 + mov r4, #1 +_02306E9C: + cmp sl, #0 + beq _02306EBC + ldrb r1, [r6, #0xbd] + orr r0, r5, #0x11 + and r5, r0, #0xff + strb r1, [r7, #0xbd] + ldrb r0, [r6, #0xbe] + strb r0, [r7, #0xbe] +_02306EBC: + cmp r4, #0 + orrne r1, r5, #1 + movne r0, #0 + strneb r0, [r6, #0xbd] + andne r5, r1, #0xff + cmp r4, #0 + beq _02306EE4 + mov r0, sb + mov r1, #0x378 + bl ChangeMonsterAnimationToIdle +_02306EE4: + mov r0, sb + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 +_02306EF8: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02306DCC + + arm_func_start ov29_02306F00 +ov29_02306F00: ; 0x02306F00 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + mov sl, #0 + mov sb, r0 + mov r8, r1 + mov r4, sl + mov r5, sl + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, sl + beq _02307070 + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, sl + beq _02307070 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + ldrb r0, [r6, #0xbf] + cmp r0, #0 + mov r0, sl + beq _02307070 + mov r1, sb + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, sl + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xbf] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0230701C +_02306F84: ; jump table + b _0230701C ; case 0 + b _02306FFC ; case 1 + b _02306F9C ; case 2 + b _02306FBC ; case 3 + b _02306FDC ; case 4 + b _0230701C ; case 5 +_02306F9C: + mov r0, sb + mov r1, r8 + mov r2, sl + mov r3, #1 + bl TryInflictPoisonedStatus + mov sl, r0 + mov r4, #1 + b _0230701C +_02306FBC: + mov r0, sb + mov r1, r8 + mov r2, sl + mov r3, #1 + bl TryInflictBadlyPoisonedStatus + mov sl, r0 + mov r4, #1 + b _0230701C +_02306FDC: + mov r0, sb + mov r1, r8 + mov r2, sl + mov r3, #1 + bl TryInflictParalysisStatus + mov sl, r0 + mov r4, #1 + b _0230701C +_02306FFC: + mov r2, sl + mov r4, #1 + mov r0, sb + mov r1, r8 + mov r3, r2 + str r4, [sp] + bl TryInflictBurnStatus + mov sl, r0 +_0230701C: + cmp sl, #0 + beq _02307048 + add r3, r6, #0xbf + add r2, r7, #0xbf + mov r1, #4 +_02307030: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02307030 + orr r0, r5, #0x11 + and r5, r0, #0xff +_02307048: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xbf] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 +_02307070: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02306F00 + + arm_func_start ov29_02307078 +ov29_02307078: ; 0x02307078 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + ldrb r1, [r6, #0xc4] + cmp r1, #3 + cmpne r1, #4 + beq _023070E0 + ldrb r0, [r7, #0xc4] + add r0, r0, #0xfd + and r0, r0, #0xff + cmp r0, #1 + bhi _023070E8 +_023070E0: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_023070E8: + cmp r1, #7 + addls pc, pc, r1, lsl #2 + b _0230714C +_023070F4: ; jump table + b _0230714C ; case 0 + b _0230714C ; case 1 + b _02307114 ; case 2 + b _0230714C ; case 3 + b _0230714C ; case 4 + b _0230714C ; case 5 + b _0230714C ; case 6 + b _02307130 ; case 7 +_02307114: + mov r0, sb + mov r1, r8 + mov r2, #1 + bl TryInflictShadowHoldStatus + mov sl, r0 + mov r4, #1 + b _0230714C +_02307130: + mov r0, sb + mov r1, r8 + mov r2, #0x7e + mov r3, #1 + bl TryInflictConstrictionStatus + mov sl, r0 + mov r4, #1 +_0230714C: + cmp sl, #0 + beq _0230716C + add r0, r6, #0xc4 + add r7, r7, #0xc4 + ldmia r0, {r0, r1, r2} + orr r3, r5, #0x11 + stmia r7, {r0, r1, r2} + and r5, r3, #0xff +_0230716C: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xc4] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02307078 + + arm_func_start ov29_02307198 +ov29_02307198: ; 0x02307198 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + beq _02307374 + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + beq _02307374 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + ldrb r0, [r6, #0xd0] + cmp r0, #0 + mov r0, r4 + beq _02307374 + mov r1, sb + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xd0] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _0230731C +_0230721C: ; jump table + b _0230731C ; case 0 + b _02307300 ; case 1 + b _02307240 ; case 2 + b _0230729C ; case 3 + b _02307260 ; case 4 + b _02307280 ; case 5 + b _023072E4 ; case 6 + b _023072C4 ; case 7 + b _0230731C ; case 8 +_02307240: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictConfusedStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_02307260: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictCoweringStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_02307280: + mov r0, sb + mov r1, r8 + mov r2, #1 + bl TryInflictTauntStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_0230729C: + mov r3, r4 + mov r0, sb + mov r1, r8 + str r3, [sp] + mov r2, #1 + str r2, [sp, #4] + bl TryInflictPausedStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_023072C4: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictInfatuatedStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_023072E4: + mov r0, sb + mov r1, r8 + mov r2, #1 + bl TryInflictEncoreStatus + mov sl, r0 + mov r4, #1 + b _0230731C +_02307300: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictCringeStatus + mov sl, r0 + mov r4, #1 +_0230731C: + cmp sl, #0 + beq _0230733C + ldrb r1, [r6, #0xd0] + orr r0, r5, #0x11 + and r5, r0, #0xff + strb r1, [r7, #0xd0] + ldrb r0, [r6, #0xd1] + strb r0, [r7, #0xd1] +_0230733C: + cmp r4, #0 + movne r0, #0 + orrne r1, r5, #1 + strneb r0, [r6, #0xd0] + mov r0, sb + andne r5, r1, #0xff + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, sb + bl CalcSpeedStageWrapper + mov r0, r8 + bl CalcSpeedStageWrapper + mov r0, r5 +_02307374: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02307198 + + arm_func_start ov29_0230737C +ov29_0230737C: ; 0x0230737C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov r5, r4 + mov r6, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + beq _023076B4 + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + beq _023076B4 + mov r1, sb + mov r2, r0 + ldr r7, [sb, #0xb4] + ldr sl, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r7, #0xd8] + cmp r0, #7 + addls pc, pc, r0, lsl #2 + b _0230749C +_023073F0: ; jump table + b _0230749C ; case 0 + b _02307410 ; case 1 + b _0230741C ; case 2 + b _0230749C ; case 3 + b _02307440 ; case 4 + b _02307460 ; case 5 + b _02307480 ; case 6 + b _0230749C ; case 7 +_02307410: + mov r5, #1 + mov r4, r5 + b _0230749C +_0230741C: + mov r2, r4 + mov r4, #1 + mov r0, sb + mov r1, r8 + mov r3, r2 + str r4, [sp] + bl TryInflictDecoyStatus + mov r5, r0 + b _0230749C +_02307440: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictGastroAcidStatus + mov r5, r0 + mov r4, #1 + b _0230749C +_02307460: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictHealBlockStatus + mov r5, r0 + mov r4, #1 + b _0230749C +_02307480: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictEmbargoStatus + mov r5, r0 + mov r4, #1 +_0230749C: + ldrb r0, [r7, #0xd8] + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _023076A0 +_023074AC: ; jump table + b _023076A0 ; case 0 + b _023074C8 ; case 1 + b _02307528 ; case 2 + b _023076A0 ; case 3 + b _02307554 ; case 4 + b _023075D4 ; case 5 + b _0230763C ; case 6 +_023074C8: + cmp r5, #0 + beq _02307500 + mov r0, sb + mov r1, r8 + bl TryRemoveSnatchedMonsterFromDungeonStruct + add r3, r7, #0xd8 + add r2, sl, #0xd8 + mov r1, #5 +_023074E8: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _023074E8 + orr r0, r6, #0x11 + and r6, r0, #0xff +_02307500: + cmp r4, #0 + beq _023076A0 + mov r0, r8 + mov r1, sb + mov r2, #1 + mov r3, #0 + bl EndCurseClassStatus + orr r0, r6, #1 + and r6, r0, #0xff + b _023076A0 +_02307528: + cmp r5, #0 + beq _023076A0 + mov r3, #0 + mov r0, sb + mov r1, r8 + mov r2, #1 + str r3, [sp] + bl TryInflictDecoyStatus + orr r0, r6, #0x11 + and r6, r0, #0xff + b _023076A0 +_02307554: + cmp r5, #0 + beq _023075AC + mov r0, sb + mov r1, r8 + bl TryRemoveSnatchedMonsterFromDungeonStruct + add r3, r7, #0xd8 + add r2, sl, #0xd8 + mov r1, #5 +_02307574: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02307574 + ldr r1, _023076BC ; =DUNGEON_PTR + mov r0, r8 + ldr r1, [r1] + mov r2, #1 + strb r2, [r1, #0xe] + bl ov29_022FB984 + mov r0, r8 + bl UpdateStatusIconFlags + orr r0, r6, #0x11 + and r6, r0, #0xff +_023075AC: + cmp r4, #0 + beq _023076A0 + mov r0, r8 + mov r1, sb + mov r2, #4 + mov r3, #0 + bl EndCurseClassStatus + orr r0, r6, #1 + and r6, r0, #0xff + b _023076A0 +_023075D4: + cmp r5, #0 + beq _02307614 + mov r0, sb + mov r1, r8 + bl TryRemoveSnatchedMonsterFromDungeonStruct + add r3, r7, #0xd8 + add r2, sl, #0xd8 + mov r1, #5 +_023075F4: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _023075F4 + mov r0, r8 + bl UpdateStatusIconFlags + orr r0, r6, #0x11 + and r6, r0, #0xff +_02307614: + cmp r4, #0 + beq _023076A0 + mov r0, r8 + mov r1, sb + mov r2, #5 + mov r3, #0 + bl EndCurseClassStatus + orr r0, r6, #1 + and r6, r0, #0xff + b _023076A0 +_0230763C: + cmp r5, #0 + beq _0230767C + mov r0, sb + mov r1, r8 + bl TryRemoveSnatchedMonsterFromDungeonStruct + add r3, r7, #0xd8 + add r2, sl, #0xd8 + mov r1, #5 +_0230765C: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _0230765C + mov r0, r8 + bl UpdateStatusIconFlags + orr r0, r6, #0x11 + and r6, r0, #0xff +_0230767C: + cmp r4, #0 + beq _023076A0 + mov r0, r8 + mov r1, sb + mov r2, #6 + mov r3, #0 + bl EndCurseClassStatus + orr r0, r6, #1 + and r6, r0, #0xff +_023076A0: + mov r0, sb + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r6 +_023076B4: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_023076BC: .word DUNGEON_PTR + arm_func_end ov29_0230737C + + arm_func_start ov29_023076C0 +ov29_023076C0: ; 0x023076C0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + ldrb r0, [r6, #0xe0] + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sb + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xe0] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0230776C +_02307740: ; jump table + b _0230776C ; case 0 + b _02307750 ; case 1 + b _0230776C ; case 2 + b _0230776C ; case 3 +_02307750: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictLeechSeedStatus + mov sl, r0 + mov r4, #1 +_0230776C: + cmp sl, #0 + beq _023077CC + add r0, r6, #0xe0 + add r3, r7, #0xe0 + ldmia r0, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, #0xff + strb r0, [r7, #0xe8] + ldr r2, _023077F8 ; =DUNGEON_PTR + mov r0, #0 +_02307794: + ldr r1, [r2] + add r1, r1, r0, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xad4] +#else + ldr r1, [r1, #0xb78] +#endif + cmp sb, r1 + streqb r0, [r7, #0xe8] + ldreq r1, [sb, #0xb4] + add r0, r0, #1 + ldreq r1, [r1, #0xb0] + streq r1, [r7, #0xe4] + cmp r0, #0x14 + blt _02307794 + orr r0, r5, #0x11 + and r5, r0, #0xff +_023077CC: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xe0] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_023077F8: .word DUNGEON_PTR + arm_func_end ov29_023076C0 + + arm_func_start ov29_023077FC +ov29_023077FC: ; 0x023077FC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sb + mov r2, r0 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xec] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _023078A0 +_0230786C: ; jump table + b _023078A0 ; case 0 + b _023078A0 ; case 1 + b _02307884 ; case 2 + b _023078A0 ; case 3 + b _023078A0 ; case 4 + b _023078A0 ; case 5 +_02307884: + mov r0, sb + mov r1, r8 + mov r2, r4 + mov r3, #1 + bl TryInflictWhifferStatus + mov sl, r0 + mov r4, #1 +_023078A0: + cmp sl, #0 + beq _023078C0 + ldrb r1, [r6, #0xec] + orr r0, r5, #0x11 + and r5, r0, #0xff + strb r1, [r7, #0xec] + ldrb r0, [r6, #0xed] + strb r0, [r7, #0xed] +_023078C0: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xec] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_023077FC + + arm_func_start TransferNegativeBlinkerClassStatus +TransferNegativeBlinkerClassStatus: ; 0x023078EC + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sb, r0 + mov r8, r1 + mov sl, r4 + mov r5, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, r8 + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sb + mov r2, r0 + ldr r6, [sb, #0xb4] + ldr r7, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, r8 + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r6, #0xf1] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _023079C4 +_0230795C: ; jump table + b _023079C4 ; case 0 + b _02307974 ; case 1 + b _02307994 ; case 2 + b _023079C4 ; case 3 + b _023079B0 ; case 4 + b _023079C4 ; case 5 +_02307974: + mov r0, sb + mov r1, r8 + mov r2, #1 + mov r3, r4 + bl TryInflictBlinkerStatus + mov sl, r0 + mov r4, #1 + b _023079C4 +_02307994: + mov r0, sb + mov r1, r8 + mov r2, #1 + bl TryInflictCrossEyedStatus + mov sl, r0 + mov r4, #1 + b _023079C4 +_023079B0: + mov r0, sb + mov r1, r8 + bl TryInflictDropeyeStatus + mov sl, r0 + mov r4, #1 +_023079C4: + cmp sl, #0 + beq _023079E4 + ldrb r1, [r6, #0xf1] + orr r0, r5, #0x11 + and r5, r0, #0xff + strb r1, [r7, #0xf1] + ldrb r0, [r6, #0xf2] + strb r0, [r7, #0xf2] +_023079E4: + cmp r4, #0 + orrne r0, r5, #1 + movne r1, #0 + andne r5, r0, #0xff + mov r0, sb + strneb r1, [r6, #0xf1] + bl UpdateStatusIconFlags + mov r0, r8 + bl UpdateStatusIconFlags + ldrb r0, [r6, #7] + cmp r0, #0 + beq _02307A24 + mov r0, #0x31 + bl AdvanceFrame + bl UpdateTrapsVisibility + bl UpdateMinimap +_02307A24: + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end TransferNegativeBlinkerClassStatus + + arm_func_start ov29_02307A2C +ov29_02307A2C: ; 0x02307A2C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sl, r0 + mov sb, r1 + mov r5, r4 + mov r6, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, sb + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sl + mov r2, r0 + ldr r7, [sl, #0xb4] + ldr r8, [sb, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, sb + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r7, #0xf3] + cmp r0, #0 + beq _02307AC0 + cmp r0, #1 + beq _02307AA8 + cmp r0, #2 + b _02307AC0 +_02307AA8: + mov r0, sl + mov r1, sb + mov r2, #1 + bl TryInflictMuzzledStatus + mov r5, r0 + mov r4, #1 +_02307AC0: + cmp r5, #0 + beq _02307AE0 + ldrb r1, [r7, #0xf3] + orr r0, r6, #0x11 + and r6, r0, #0xff + strb r1, [r8, #0xf3] + ldrb r0, [r7, #0xf4] + strb r0, [r8, #0xf4] +_02307AE0: + cmp r4, #0 + orrne r0, r6, #1 + movne r1, #0 + andne r6, r0, #0xff + mov r0, sl + strneb r1, [r7, #0xf3] + bl UpdateStatusIconFlags + mov r0, sb + bl UpdateStatusIconFlags + mov r0, r6 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02307A2C + + arm_func_start ov29_02307B0C +ov29_02307B0C: ; 0x02307B0C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sl, r0 + mov sb, r1 + mov r5, r4 + mov r6, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + moveq r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, sb + bl EntityIsValid__02305C04 + cmp r0, #0 + mov r0, r4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r1, sl + mov r2, r0 + ldr r7, [sl, #0xb4] + ldr r8, [sb, #0xb4] + bl SubstitutePlaceholderStringTags + mov r1, sb + mov r0, #1 + mov r2, r4 + bl SubstitutePlaceholderStringTags + ldrb r0, [r7, #0xf5] + cmp r0, #1 + bne _02307B90 + mov r0, sl + mov r1, sb + mov r2, #1 + bl TryInflictMiracleEyeStatus + mov r5, r0 + mov r4, #1 +_02307B90: + cmp r5, #0 + beq _02307BB0 + ldrb r1, [r7, #0xf5] + orr r0, r6, #0x11 + and r6, r0, #0xff + strb r1, [r8, #0xf5] + ldrb r0, [r7, #0xf6] + strb r0, [r8, #0xf6] +_02307BB0: + cmp r4, #0 + orrne r0, r6, #1 + movne r1, #0 + andne r6, r0, #0xff + mov r0, sl + strneb r1, [r7, #0xf5] + bl UpdateStatusIconFlags + mov r0, sb + bl UpdateStatusIconFlags + mov r0, r6 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end ov29_02307B0C + + arm_func_start TryEndPetrifiedOrSleepStatus +TryEndPetrifiedOrSleepStatus: ; 0x02307BDC + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r5, r1 + ldr r4, [r5, #0xb4] + mov r6, r0 + ldrb r2, [r4, #0xc4] + mov r3, #0 + cmp r2, #6 + bne _02307C0C + mov r2, #1 + bl EndFrozenClassStatus + mov r3, #1 +_02307C0C: + ldrb r0, [r4, #0xbd] + cmp r0, #1 + ldreqb r0, [r4, #0xbe] + cmpeq r0, #0x7f + bne _02307C3C + mov r3, #1 + mov r0, r6 + mov r1, r5 + mov r2, #0 + str r3, [sp] + bl EndSleepClassStatus + mov r3, #1 +_02307C3C: + mov r0, r3 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + arm_func_end TryEndPetrifiedOrSleepStatus + + arm_func_start ov29_02307C48 +ov29_02307C48: ; 0x02307C48 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr ip, [r4, #0xb4] + mov r3, #0 + mov r1, #1 + strb r3, [ip, #0xbd] + mov r2, r1 + strb r3, [ip, #0xbe] + bl ov29_022FA1D8 + mov r0, r4 + bl UpdateStatusIconFlags + ldmia sp!, {r4, pc} + arm_func_end ov29_02307C48 + + arm_func_start EndFrozenStatus +EndFrozenStatus: ; 0x02307C78 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r3, [r4, #0xb4] + ldrb r0, [r3, #0xc4] + cmp r0, #1 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, #0 + strb r0, [r3, #0xc4] + strb r0, [r3, #0xcc] + mov r1, r4 + mov r2, r0 + strb r0, [r3, #0xcd] + bl SubstitutePlaceholderStringTags + ldr r2, _02307CDC ; =0x00000C9F + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r4 + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02307CDC: .word 0x000009DF +#else +_02307CDC: .word 0x00000C9F +#endif + arm_func_end EndFrozenStatus + + arm_func_start ResetTypeChanges +ResetTypeChanges: ; 0x02307CE0 + stmdb sp!, {r4, lr} + ldr r4, [r0, #0xb4] + mov r1, #0 + bl TryRestoreRoostTyping + mov r1, #0 + strb r1, [r4, #0xff] + ldrsh r0, [r4, #2] + bl GetType + strb r0, [r4, #0x5e] + ldrsh r0, [r4, #2] + mov r1, #1 + bl GetType + strb r0, [r4, #0x5f] + ldmia sp!, {r4, pc} + arm_func_end ResetTypeChanges + + arm_func_start EndProtectStatus +EndProtectStatus: ; 0x02307D18 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, [r4, #0xb4] + ldrb r0, [r0, #0xd5] + cmp r0, #7 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r5 + mov r1, r4 + bl EndReflectClassStatus + ldmia sp!, {r3, r4, r5, pc} + arm_func_end EndProtectStatus + + arm_func_start TryRestoreRoostTyping +TryRestoreRoostTyping: ; 0x02307D54 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl EntityIsValid__02305C04 + cmp r0, #0 + ldrne r2, [r5, #0xb4] + ldrneb r0, [r2, #0xa9] + cmpne r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + strb r0, [r2, #0xa9] + ldrb r1, [r2, #0xaa] + cmp r4, #0 + strb r1, [r2, #0x5e] + ldrb r1, [r2, #0xab] + strb r1, [r2, #0x5f] + strb r0, [r2, #0xaa] + strb r0, [r2, #0xab] + ldmeqia sp!, {r3, r4, r5, pc} + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, _02307DBC ; =0x00000CC8 + mov r0, r5 + bl LogMessageByIdWithPopupCheckUser + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_02307DBC: .word 0x00000A08 +#else +_02307DBC: .word 0x00000CC8 +#endif + arm_func_end TryRestoreRoostTyping + + arm_func_start ov29_02307DC0 +ov29_02307DC0: ; 0x02307DC0 +#ifdef JAPAN + ldr r1, [r0, #0xb4] + mov r0, #0 + strb r0, [r1, #0x103] + strb r0, [r1, #0x104] +#else + mov r1, #0 + strb r1, [r0, #0x104] + strb r1, [r0, #0x105] +#endif + bx lr + arm_func_end ov29_02307DC0 + + arm_func_start ov29_02307DD0 +ov29_02307DD0: ; 0x02307DD0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r4, #0 +_02307DD8: + ldr r0, _02307EF4 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r6, [r0, #0xa94] +#else + ldr r6, [r0, #0xb38] +#endif + mov r0, r6 + bl EntityIsValid__02307EF8 + cmp r0, #0 + beq _02307EE4 + ldr r1, [r6, #0xb4] + ldrb r0, [r1, #0xbd] + cmp r0, #1 + ldreqb r0, [r1, #0xbe] + cmpeq r0, #0x7f + bne _02307EE4 + mov r8, #0 + mov r7, r8 + mov r5, r8 + ldrb sl, [r6, #0x25] + ldr fp, _02307EF4 ; =DUNGEON_PTR + b _02307EBC +_02307E2C: + ldr r0, [fp] + add r0, r0, r5, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sb, [r0, #0xa84] +#else + ldr sb, [r0, #0xb28] +#endif + mov r0, sb + bl EntityIsValid__02307EF8 + cmp r0, #0 + beq _02307EB8 + mov r0, sb + mov r1, #0x1f + bl ItemIsActive__02307F1C + cmp r0, #0 + bne _02307EB8 + ldrsh r1, [sb, #4] + ldrsh r0, [r6, #4] + sub r0, r1, r0 + bl abs + cmp r0, #1 + bgt _02307E94 + ldrsh r1, [sb, #6] + ldrsh r0, [r6, #6] + sub r0, r1, r0 + bl abs + cmp r0, #1 + movle r8, #1 + ble _02307EC4 +_02307E94: + mov r0, sb + mov r1, #0x24 + bl ItemIsActive__02307F1C + cmp r0, #0 + beq _02307EB8 + ldrb r0, [sb, #0x25] + cmp sl, r0 + moveq r7, #1 + beq _02307EC4 +_02307EB8: + add r5, r5, #1 +_02307EBC: + cmp r5, #4 + blt _02307E2C +_02307EC4: + cmp r7, #0 + bne _02307ED4 + cmp r8, #0 + movne r7, #1 +_02307ED4: + cmp r7, #0 + beq _02307EE4 + mov r0, r6 + bl ov29_02307C48 +_02307EE4: + add r4, r4, #1 + cmp r4, #0x10 + blt _02307DD8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02307EF4: .word DUNGEON_PTR + arm_func_end ov29_02307DD0 diff --git a/asm/overlay_29_02336450.s b/asm/overlay_29_02336450.s index 2d5b4000..696a87c9 100644 --- a/asm/overlay_29_02336450.s +++ b/asm/overlay_29_02336450.s @@ -817,1016 +817,3 @@ _02336F2C: .align 2, 0 _02336F48: .word ov29_02352F14 arm_func_end ov29_02336DB0 - - arm_func_start UpdateTrapsVisibility -UpdateTrapsVisibility: ; 0x02336F4C -#ifdef JAPAN -#define UPDATE_TRAPS_VISIBILITY_OFFSET -0xA4 -#else -#define UPDATE_TRAPS_VISIBILITY_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x30 - ldr r0, _02337108 ; =DUNGEON_PTR - ldr sl, [r0] - add r1, sl, #0x1a000 - ldrb r0, [r1, #0x245 + UPDATE_TRAPS_VISIBILITY_OFFSET] - str r0, [sp, #0x18] - ldrb fp, [r1, #0x244 + UPDATE_TRAPS_VISIBILITY_OFFSET] - bl IsSecretBazaar - ldr r1, _0233710C ; =0x0001A224 - ldr r2, _02337110 ; =ov29_02352B9C - ldrsh r3, [sl, r1] - ldr r1, _02337114 ; =ov29_02352D58 - mov sb, r3, asr #3 - str r0, [sp, #0x14] - add r0, sb, #0x1e - mov r0, r0, lsl #1 - ldrsh r7, [r2, r0] - ldrsh r5, [r1, r0] - mov r0, #0 - str r0, [sp, #0x10] -_02336FA0: - ldr r0, _02337118 ; =0x0001A226 - add r1, sl, #0xc4 + UPDATE_TRAPS_VISIBILITY_OFFSET - ldrsh r3, [sl, r0] - ldr r0, _02337110 ; =ov29_02352B9C - mov r2, r5, lsl #0x10 - mov r3, r3, asr #3 - sub r4, r3, #1 - add r3, r0, r4, lsl #1 - ldr r0, _02337114 ; =ov29_02352D58 - ldrsh r8, [r3, #0x3c] - add r0, r0, r4, lsl #1 - ldrsh r6, [r0, #0x3c] - add r0, r1, #0x4000 - add r3, r8, r8, lsl #1 - mov r1, r2, asr #0x10 - add r2, r7, r3 - mov r2, r2, lsl #0x10 - str fp, [sp] - mov r3, r2, asr #0x10 - ldr r2, [sp, #0x18] - and sb, sb, #0x3f - str r2, [sp, #4] - ldr r2, [sp, #0x14] - str r2, [sp, #8] - mov r2, r6, lsl #0x10 - mov r2, r2, asr #0x10 - bl ov29_02336DB0 - str r0, [sp, #0x1c] - mov r0, #0 - str r0, [sp, #0xc] - mov r0, r5, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0x24] - add r0, sl, #0xc4 + UPDATE_TRAPS_VISIBILITY_OFFSET - str r0, [sp, #0x2c] - mov r0, r7, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0x28] - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0x20] -_02337044: - mov r0, #0 - str r0, [sp] - ldr r3, [sp, #0x1c] - and r4, r4, #0x1f - ldrh r2, [r3], #6 - str r3, [sp, #0x1c] - ldr r0, [sp, #0x20] - mov r1, r4 - mov r3, #1 - bl sub_02051D8C - add r8, r8, #1 - add r4, r4, #1 - cmp r8, #3 - bne _023370B8 - str fp, [sp] - ldr r0, [sp, #0x18] - add r6, r6, #1 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - mov r2, r6, lsl #0x10 - str r0, [sp, #8] - ldr r0, [sp, #0x2c] - ldr r1, [sp, #0x24] - ldr r3, [sp, #0x28] - add r0, r0, #0x4000 - mov r2, r2, asr #0x10 - mov r8, #0 - bl ov29_02336DB0 - str r0, [sp, #0x1c] -_023370B8: - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #0x1b - blt _02337044 - ldr r0, [sp, #0x10] - add r7, r7, #1 - add r0, r0, #1 - cmp r7, #3 - add sb, sb, #1 - addeq r5, r5, #1 - moveq r7, #0 - str r0, [sp, #0x10] - cmp r0, #0x21 - blt _02336FA0 - mov r0, #1 - mov r1, #0 - bl sub_02051E60 - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337108: .word DUNGEON_PTR -_0233710C: .word 0x0001A224 + UPDATE_TRAPS_VISIBILITY_OFFSET -_02337110: .word ov29_02352B9C -_02337114: .word ov29_02352D58 -_02337118: .word 0x0001A226 + UPDATE_TRAPS_VISIBILITY_OFFSET - arm_func_end UpdateTrapsVisibility - - arm_func_start ov29_0233711C -ov29_0233711C: ; 0x0233711C -#ifdef JAPAN -#define OV29_0233711C_OFFSET -0xA4 -#else -#define OV29_0233711C_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x1c - ldr r2, _02337294 ; =DUNGEON_PTR - mov r4, r1 - ldr sl, [r2] - mov r5, r0 - add r1, sl, #0x1a000 - ldrb r0, [r1, #0x245 + OV29_0233711C_OFFSET] - str r0, [sp, #0x18] - ldrb fp, [r1, #0x244 + OV29_0233711C_OFFSET] - bl IsSecretBazaar - ldr r2, _02337298 ; =0x0001A224 - ldr r1, _0233729C ; =ov29_02352B9C - add r3, r2, #2 - ldrsh r6, [sl, r2] - ldrsh r2, [sl, r3] - add r3, r6, r5 - str r0, [sp, #0x14] - add r0, r2, r4 - mov r0, r0, asr #3 - sub sb, r0, #1 - add r0, sb, #0x1e - mov r2, r0, lsl #1 - str fp, [sp] - ldr r0, [sp, #0x18] - mov r8, r3, asr #3 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - ldrsh r7, [r1, r2] - str r0, [sp, #8] - add r0, r8, #0x1e - mov r3, r0, lsl #1 - ldrsh r6, [r1, r3] - ldr r1, _023372A0 ; =ov29_02352D58 - add r0, sl, #0xc4 + OV29_0233711C_OFFSET - ldrsh r4, [r1, r3] - ldrsh r5, [r1, r2] - add r3, r7, r7, lsl #1 - add r3, r6, r3 - mov r1, r4, lsl #0x10 - mov r2, r5, lsl #0x10 - mov r3, r3, lsl #0x10 - add r0, r0, #0x4000 - mov r1, r1, asr #0x10 - mov r2, r2, asr #0x10 - mov r3, r3, asr #0x10 - bl ov29_02336DB0 - str r0, [sp, #0x10] - mov r0, #0 - str r0, [sp, #0xc] - mov r0, r4, lsl #0x10 - mov r1, r6, lsl #0x10 - add r4, sl, #0xc4 + OV29_0233711C_OFFSET - mov r6, r0, asr #0x10 - mov sl, r1, asr #0x10 -_023371F8: - mov r0, #0 - ldr r3, [sp, #0x10] - str r0, [sp] - ldrh r2, [r3], #6 - and r8, r8, #0x3f - and sb, sb, #0x1f - str r3, [sp, #0x10] - mov r0, r8 - mov r1, sb - mov r3, #1 - bl sub_02051D8C - add r7, r7, #1 - add sb, sb, #1 - cmp r7, #3 - bne _0233726C - str fp, [sp] - ldr r0, [sp, #0x18] - add r5, r5, #1 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - mov r2, r5, lsl #0x10 - str r0, [sp, #8] - add r0, r4, #0x4000 - mov r1, r6 - mov r2, r2, asr #0x10 - mov r3, sl - mov r7, #0 - bl ov29_02336DB0 - str r0, [sp, #0x10] -_0233726C: - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #0x1b - blt _023371F8 - mov r0, #1 - mov r1, #0 - bl sub_02051E60 - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337294: .word DUNGEON_PTR -_02337298: .word 0x0001A224 + OV29_0233711C_OFFSET -_0233729C: .word ov29_02352B9C -_023372A0: .word ov29_02352D58 - arm_func_end ov29_0233711C - - arm_func_start ov29_023372A4 -ov29_023372A4: ; 0x023372A4 -#ifdef JAPAN -#define OV29_023372A4_OFFSET -0xA4 -#else -#define OV29_023372A4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x1c - ldr r2, _02337418 ; =DUNGEON_PTR - mov r4, r1 - ldr sl, [r2] - mov r5, r0 - add r1, sl, #0x1a000 - ldrb r0, [r1, #0x245 + OV29_023372A4_OFFSET] - str r0, [sp, #0x18] - ldrb fp, [r1, #0x244 + OV29_023372A4_OFFSET] - bl IsSecretBazaar - ldr r2, _0233741C ; =0x0001A224 - ldr r1, _02337420 ; =ov29_02352B9C - add r3, r2, #2 - ldrsh r6, [sl, r2] - ldrsh r2, [sl, r3] - add r3, r6, r5 - str r0, [sp, #0x14] - add r0, r2, r4 - mov r8, r0, asr #3 - add r0, r8, #0x1e - mov r7, r3, asr #3 - str fp, [sp] - mov r2, r0, lsl #1 - ldr r0, [sp, #0x18] - ldr r3, _02337424 ; =ov29_02352D58 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - ldrsh r5, [r3, r2] - str r0, [sp, #8] - add r0, r7, #0x1e - mov r4, r0, lsl #1 - ldrsh r6, [r1, r4] - ldrsh r1, [r1, r2] - add r0, sl, #0xc4 + OV29_023372A4_OFFSET - mov r2, r5, lsl #0x10 - ldrsh r4, [r3, r4] - add sb, r1, r1, lsl #1 - add r3, r6, sb - mov r1, r4, lsl #0x10 - mov r3, r3, lsl #0x10 - add r0, r0, #0x4000 - mov r1, r1, asr #0x10 - mov r2, r2, asr #0x10 - mov r3, r3, asr #0x10 - bl ov29_02336DB0 - str r0, [sp, #0x10] - mov r0, #0 - str r0, [sp, #0xc] - mov r0, r5, lsl #0x10 - mov r1, sb, lsl #0x10 - add r5, sl, #0xc4 + OV29_023372A4_OFFSET - mov sb, r0, asr #0x10 - mov sl, r1, asr #0x10 -_0233737C: - mov r0, #0 - ldr r3, [sp, #0x10] - str r0, [sp] - ldrh r2, [r3], #2 - and r7, r7, #0x3f - and r8, r8, #0x1f - str r3, [sp, #0x10] - mov r0, r7 - mov r1, r8 - mov r3, #1 - bl sub_02051D8C - add r6, r6, #1 - add r7, r7, #1 - cmp r6, #3 - bne _023373F0 - str fp, [sp] - ldr r0, [sp, #0x18] - add r4, r4, #1 - str r0, [sp, #4] - ldr r0, [sp, #0x14] - mov r1, r4, lsl #0x10 - str r0, [sp, #8] - add r0, r5, #0x4000 - mov r1, r1, asr #0x10 - mov r2, sb - mov r3, sl - mov r6, #0 - bl ov29_02336DB0 - str r0, [sp, #0x10] -_023373F0: - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #0x21 - blt _0233737C - mov r0, #1 - mov r1, #0 - bl sub_02051E60 - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337418: .word DUNGEON_PTR -_0233741C: .word 0x0001A224 + OV29_023372A4_OFFSET -_02337420: .word ov29_02352B9C -_02337424: .word ov29_02352D58 - arm_func_end ov29_023372A4 - - arm_func_start DrawTileGrid -DrawTileGrid: ; 0x02337428 -#ifdef JAPAN -#define DRAW_TILE_GRID_OFFSET -0xA4 -#else -#define DRAW_TILE_GRID_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x44 - ldr r5, _02337780 ; =DUNGEON_PTR - str r2, [sp, #4] - mov r4, r0 - mov r7, r1 - mov r6, r3 - ldr r5, [r5] - bl GetLeader - ldr r1, _02337784 ; =0x0001A224 - ldr r2, _02337780 ; =DUNGEON_PTR - ldrsh r8, [r5, r1] - ldr r1, [r2] - ldr r2, _02337788 ; =DIRECTIONS_XY - add r1, r1, #0x1a000 - strb r6, [r1, #0x251 + DRAW_TILE_GRID_OFFSET] - mov r3, r7, lsl #2 - add r1, r2, r7, lsl #2 - ldrsh r3, [r2, r3] - ldrsh sl, [r1, #2] - ldrsh r6, [r4] - ldrsh r7, [r4, #2] - str r0, [sp, #0x20] - mov sb, r8, asr #3 - mov r2, #0 - add r1, sp, #0x2c -_02337490: - mov r0, r2, lsl #2 - strh r6, [r1, r0] - add r0, r1, r2, lsl #2 - add r2, r2, #1 - strh r7, [r0, #2] - cmp r2, #6 - add r6, r6, r3 - add r7, r7, sl - blt _02337490 - add r0, sb, #0x1e - mov r2, r0, lsl #1 - ldr r1, _0233778C ; =ov29_02352B9C - ldr r0, _02337790 ; =ov29_02352D58 - ldrsh r8, [r1, r2] - ldrsh r6, [r0, r2] - mov r0, #0 - str r0, [sp, #0xc] -_023374D4: - ldr r0, _02337794 ; =0x0001A226 - ldr r2, _0233778C ; =ov29_02352B9C - ldrsh r3, [r5, r0] - ldr r0, [sp, #4] - ldr r1, _02337790 ; =ov29_02352D58 - mov fp, r3, asr #3 - cmp r0, #0 - add r0, r2, fp, lsl #1 - add r1, r1, fp, lsl #1 - ldrsh r0, [r0, #0x3c] - ldrsh r7, [r1, #0x3c] - strh r6, [sp, #0x28] - str r0, [sp, #0x1c] - add r0, r0, r0, lsl #1 - strh r7, [sp, #0x2a] - add sl, r8, r0 - beq _02337544 - ldrsh r0, [r4] - cmp r6, r0 - ldreqsh r0, [r4, #2] - cmpeq r7, r0 - addeq r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET - addeq r0, r0, #0x12000 - addeq sl, r0, sl, lsl #1 - addne r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET - addne r0, r0, #0x12000 - addne sl, r0, sl, lsl #1 - b _023375E8 -_02337544: - ldr r0, [sp, #0x20] - add r1, sp, #0x28 - bl CannotStandOnTileNoMonsterCheck - cmp r0, #0 - bne _023375DC - ldr r0, [sp, #0x20] - add r1, sp, #0x28 - bl CanSeePosition - cmp r0, #0 - beq _023375DC - mov r0, #0 - add r2, sp, #0x2c - b _02337598 -_02337578: - mov r3, r0, lsl #2 - ldrsh r1, [r2, r3] - cmp r6, r1 - addeq r1, r2, r3 - ldreqsh r1, [r1, #2] - cmpeq r7, r1 - beq _023375A0 - add r0, r0, #1 -_02337598: - cmp r0, #6 - blt _02337578 -_023375A0: - cmp r0, #6 - bne _023375CC - bl GetGridsOption - cmp r0, #0 -#ifdef JAPAN - addne r0, r5, #0x9a - addne r0, r0, #0x12000 -#else - ldrne r0, _02337798 ; =0x0001213E - addne r0, r5, r0 -#endif - addne sl, r0, sl, lsl #1 - addeq r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET - addeq r0, r0, #0x12000 - addeq sl, r0, sl, lsl #1 - b _023375E8 -_023375CC: - add r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET - add r0, r0, #0x12000 - add sl, r0, sl, lsl #1 - b _023375E8 -_023375DC: - add r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET - add r0, r0, #0x12000 - add sl, r0, sl, lsl #1 -_023375E8: - add r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET - add r0, r0, #0x12000 - add r0, r0, r8, lsl #1 -#ifdef JAPAN - add r1, r5, #0x88 - str r0, [sp, #0x18] - add r0, r1, #0x12000 - add r0, r0, r8, lsl #1 - str r0, [sp, #0x14] - mov r0, #0 - str r0, [sp, #8] - add r0, r5, #0x9a - add r0, r0, #0x12000 - add r0, r0, r8, lsl #1 - str r0, [sp, #0x10] -#else - ldr r1, _02337798 ; =0x0001213E - str r0, [sp, #0x18] - add r0, r5, r1 - add r0, r0, r8, lsl #1 - str r0, [sp, #0x10] - mov r0, #0 - str r0, [sp, #8] - add r0, r5, #0x12c - add r0, r0, #0x12000 - add r0, r0, r8, lsl #1 - str r0, [sp, #0x14] -#endif - mov r0, r6, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0x24] -_0233762C: - mov r0, #0 - str r0, [sp] - ldrh r2, [sl], #6 - and sb, sb, #0x3f - and fp, fp, #0x1f - mov r0, sb - mov r1, fp - mov r3, #0 - bl sub_02051D8C - ldr r0, [sp, #0x1c] - add fp, fp, #1 - add r0, r0, #1 - str r0, [sp, #0x1c] - cmp r0, #3 - bne _02337730 - ldr r0, [sp, #0x24] - add r7, r7, #1 - strh r0, [sp, #0x28] - ldr r0, [sp, #4] - cmp r0, #0 - mov r0, #0 - str r0, [sp, #0x1c] - strh r7, [sp, #0x2a] - beq _023376A8 - ldrsh r0, [r4] - cmp r6, r0 - ldreqsh r0, [r4, #2] - cmpeq r7, r0 - ldreq sl, [sp, #0x18] - ldrne sl, [sp, #0x14] - b _02337730 -_023376A8: - ldr r0, [sp, #0x20] - add r1, sp, #0x28 - bl CannotStandOnTileNoMonsterCheck - cmp r0, #0 - bne _0233772C - ldr r0, [sp, #0x20] - add r1, sp, #0x28 - bl CanSeePosition - cmp r0, #0 - beq _0233772C - mov r0, #0 - b _02337700 -_023376D8: - mov r2, r0, lsl #2 - add r1, sp, #0x2c - ldrsh r1, [r1, r2] - cmp r6, r1 - addeq r1, sp, #0x2c - addeq r1, r1, r2 - ldreqsh r1, [r1, #2] - cmpeq r7, r1 - beq _02337708 - add r0, r0, #1 -_02337700: - cmp r0, #6 - blt _023376D8 -_02337708: - cmp r0, #6 - bne _02337724 - bl GetGridsOption - cmp r0, #0 - ldrne sl, [sp, #0x10] - ldreq sl, [sp, #0x14] - b _02337730 -_02337724: - ldr sl, [sp, #0x18] - b _02337730 -_0233772C: - ldr sl, [sp, #0x14] -_02337730: - ldr r0, [sp, #8] - add r0, r0, #1 - str r0, [sp, #8] - cmp r0, #0x19 - blt _0233762C - ldr r0, [sp, #0xc] - add r8, r8, #1 - add r0, r0, #1 - cmp r8, #3 - add sb, sb, #1 - addeq r6, r6, #1 - moveq r8, #0 - str r0, [sp, #0xc] - cmp r0, #0x21 - blt _023374D4 - mov r0, #0 - mov r1, r0 - bl sub_02051E60 - add sp, sp, #0x44 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337780: .word DUNGEON_PTR -_02337784: .word 0x0001A224 + DRAW_TILE_GRID_OFFSET -_02337788: .word DIRECTIONS_XY -_0233778C: .word ov29_02352B9C -_02337790: .word ov29_02352D58 -_02337794: .word 0x0001A226 + DRAW_TILE_GRID_OFFSET -#ifndef JAPAN -_02337798: .word 0x0001213E -#endif - arm_func_end DrawTileGrid - - arm_func_start HideTileGrid -HideTileGrid: ; 0x0233779C - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r8, #0 - mov r5, r8 - mov r6, r8 -_023377B0: - mov r0, r8, lsl #0x10 - mov r7, r6 - mov r4, r0, asr #0x10 -_023377BC: - mov r0, r7, lsl #0x10 - mov r1, r4 - mov r2, r5 - mov r3, r5 - mov r0, r0, asr #0x10 - str r5, [sp] - bl sub_02051D8C - add r7, r7, #1 - cmp r7, #0x20 - blt _023377BC - add r8, r8, #1 - cmp r8, #0x20 - blt _023377B0 - mov r0, #0 - mov r1, r0 - bl sub_02051E60 - ldr r0, _02337818 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x1a000 -#ifdef JAPAN - strb r1, [r0, #0x1ad] -#else - strb r1, [r0, #0x251] -#endif - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02337818: .word DUNGEON_PTR - arm_func_end HideTileGrid - - arm_func_start ov29_0233781C -ov29_0233781C: ; 0x0233781C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, #0 - mov r4, r7 - mov r5, r7 -_0233782C: - mov r6, r5 -_02337830: - mov r0, r6 - mov r1, r7 - bl GetTileSafe - add r6, r6, #1 - strh r4, [r0, #2] - cmp r6, #0x38 - blt _02337830 - add r7, r7, #1 - cmp r7, #0x20 - blt _0233782C - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov29_0233781C - - arm_func_start ov29_0233785C -ov29_0233785C: ; 0x0233785C -#ifdef JAPAN -#define OV29_0233785C_OFFSET -0xA4 -#else -#define OV29_0233785C_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r1, _02337A34 ; =0x0000270F - mov r3, #0 - ldr r6, _02337A38 ; =DUNGEON_PTR - mov sb, r3 - rsb r0, r1, #0 - mov r4, #0x1c -_02337878: - mul r2, r3, r4 - ldr r5, [r6] - add r3, r3, #1 - add r5, r5, r2 - add r5, r5, #0xe000 - strb sb, [r5, #0xee8 + OV29_0233785C_OFFSET] - ldr r5, [r6] - cmp r3, #0x20 - add r5, r5, r2 - add r5, r5, #0xe000 - strb sb, [r5, #0xee9 + OV29_0233785C_OFFSET] - ldr r5, [r6] - add r5, r5, r2 - add r5, r5, #0xee00 - strh r1, [r5, #0xea + OV29_0233785C_OFFSET] - ldr r5, [r6] - add r5, r5, r2 - add r5, r5, #0xee00 - strh r1, [r5, #0xec + OV29_0233785C_OFFSET] - ldr r5, [r6] - add r5, r5, r2 - add r5, r5, #0xee00 - strh r0, [r5, #0xee + OV29_0233785C_OFFSET] - ldr r5, [r6] - add r2, r5, r2 - add r2, r2, #0xee00 - strh r0, [r2, #0xf0 + OV29_0233785C_OFFSET] - blt _02337878 - mov sl, sb -_023378EC: - add r5, sl, #1 - mov r0, sl, lsl #0x10 - mov r1, r5, lsl #0x10 - ldr fp, _02337A38 ; =DUNGEON_PTR - mov r8, #0 - mov r6, r0, asr #0x10 - mov r4, r1, asr #0x10 - mov r7, #1 -_0233790C: - mov r0, r8 - mov r1, sl - bl GetTile - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233797C - mov r0, #0x1c - mul r2, r1, r0 - ldr r0, [fp] - add r0, r0, #0x2e8 + OV29_0233785C_OFFSET - add r0, r0, #0xec00 - strb r7, [r0, r2] - add r0, r0, r2 - ldrsh r2, [r0, #2] - cmp r2, r8 - strgth r8, [r0, #2] - ldrsh r2, [r0, #4] - cmp r2, sl - strgth r6, [r0, #4] - ldrsh r3, [r0, #6] - add r2, r8, #1 - cmp r3, r2 - strlth r2, [r0, #6] - ldrsh r2, [r0, #8] - cmp r2, r5 - strlth r4, [r0, #8] - cmp sb, r1 - andlt sb, r1, #0xff -_0233797C: - add r8, r8, #1 - cmp r8, #0x38 - blt _0233790C - add sl, sl, #1 - cmp sl, #0x20 - blt _023378EC - mov r2, #0x18 - ldr r7, _02337A38 ; =DUNGEON_PTR - mov r1, #0 - mov r3, r2 - mov r4, r2 - mov r5, r2 - mov r6, #0x1c -_023379B0: - mul sl, r1, r6 - ldr r0, [r7] - add r0, r0, #0x2e8 + OV29_0233785C_OFFSET - add r0, r0, #0xec00 - ldrb r8, [r0, sl] - add r0, r0, sl - cmp r8, #0 - beq _02337A10 - ldrsh r8, [r0, #2] - sub r8, r8, #1 - mul sl, r8, r2 - str sl, [r0, #0xc] - ldrsh r8, [r0, #4] - sub r8, r8, #1 - mul sl, r8, r3 - str sl, [r0, #0x10] - ldrsh r8, [r0, #6] - add r8, r8, #1 - mul sl, r8, r4 - str sl, [r0, #0x14] - ldrsh r8, [r0, #8] - add r8, r8, #1 - mul sl, r8, r5 - str sl, [r0, #0x18] -_02337A10: - add r1, r1, #1 - cmp r1, #0x20 - blt _023379B0 - ldr r0, _02337A38 ; =DUNGEON_PTR - add r1, sb, #1 - ldr r0, [r0] - add r0, r0, #0xe000 - strb r1, [r0, #0xee4 + OV29_0233785C_OFFSET] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02337A34: .word 0x0000270F -_02337A38: .word DUNGEON_PTR - arm_func_end ov29_0233785C - - arm_func_start DiscoverMinimap -DiscoverMinimap: ; 0x02337A3C -#ifdef JAPAN -#define DISCOVER_MINIMAP_OFFSET -0xA4 -#else -#define DISCOVER_MINIMAP_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, r0 - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - bl GetTile - ldrb r4, [r0, #7] - bl GetVisibilityRange - ldr r1, _02337B28 ; =DUNGEON_PTR - ldr r3, [r1] - add r1, r3, #0x1a000 - ldrb r2, [r1, #0x23e + DISCOVER_MINIMAP_OFFSET] - cmp r2, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} - ldrb r1, [r1, #0x250 + DISCOVER_MINIMAP_OFFSET] - cmp r1, #0 - bne _02337A84 - cmp r4, #0xff - bne _02337AA0 -_02337A84: - ldrsh r2, [r5] - ldrsh r1, [r5, #2] - sub r4, r2, r0 - sub r7, r1, r0 - add r5, r2, r0 - add r6, r1, r0 - b _02337B1C -_02337AA0: - add r0, r3, #0x2e8 + DISCOVER_MINIMAP_OFFSET - add r1, r0, #0xec00 - mov r0, #0x1c - mla r2, r4, r0, r1 - ldrb r0, [r2, #1] - cmp r0, #0 - ldmneia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, #1 - strb r0, [r2, #1] - ldrsh r1, [r2, #2] - ldrsh r0, [r2, #4] - ldrsh r5, [r2, #6] - ldrsh r6, [r2, #8] - sub r4, r1, #1 - sub r7, r0, #1 - b _02337B1C -_02337AE0: - mov r8, r4 - b _02337B10 -_02337AE8: - mov r0, r8 - mov r1, r7 - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r7 - orr r2, r2, #3 - strh r2, [r0, #2] - mov r0, r8 - bl DrawMinimapTile - add r8, r8, #1 -_02337B10: - cmp r8, r5 - ble _02337AE8 - add r7, r7, #1 -_02337B1C: - cmp r7, r6 - ble _02337AE0 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02337B28: .word DUNGEON_PTR - arm_func_end DiscoverMinimap - - arm_func_start PositionHasItem -PositionHasItem: ; 0x02337B2C - stmdb sp!, {r3, lr} - mov r1, r0 - ldrsh r0, [r1] - ldrsh r1, [r1, #2] - bl GetTile - ldr r0, [r0, #0x10] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - ldr r0, [r0] - cmp r0, #3 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end PositionHasItem - - arm_func_start PositionHasMonster -PositionHasMonster: ; 0x02337B68 - stmdb sp!, {r3, lr} - mov r1, r0 - ldrsh r0, [r1] - ldrsh r1, [r1, #2] - bl GetTile - ldr r0, [r0, #0xc] - cmp r0, #0 - beq _02337B94 - ldr r1, [r0] - cmp r1, #1 - ldmeqia sp!, {r3, pc} -_02337B94: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end PositionHasMonster - - arm_func_start TrySmashWall -TrySmashWall: ; 0x02337B9C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - mov r5, #0 - bl GetTileSafe - ldrh r1, [r0] - tst r1, #3 - bne _02337C4C - ldrh r1, [r0] - tst r1, #0x100 - bne _02337C4C - tst r1, #0x10 - bne _02337C4C - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - mov r5, #1 - sub r7, r5, #2 - orr r1, r1, #1 - strh r1, [r0] - mov r4, r7 -_02337BF4: - mov r6, r4 -_02337BF8: - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - add r0, r6, r0 - add r1, r7, r1 - bl ov29_02336694 - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - add r0, r6, r0 - add r1, r7, r1 - bl DetermineTileWalkableNeighbors - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - add r0, r6, r0 - add r1, r7, r1 - bl DrawMinimapTile - add r6, r6, #1 - cmp r6, #1 - ble _02337BF8 - add r7, r7, #1 - cmp r7, #1 - ble _02337BF4 -_02337C4C: - cmp r5, #0 - beq _02337C9C - ldr r4, _02337CA4 ; =DUNGEON_PTR - mov r6, #0 -_02337C5C: - ldr r0, [r4] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r7, [r0, #0xad4] -#else - ldr r7, [r0, #0xb78] -#endif - mov r0, r7 - bl EntityIsValid__02337CA8 - cmp r0, #0 - beq _02337C84 - mov r0, r7 - bl DetermineMonsterShadow -_02337C84: - add r6, r6, #1 - cmp r6, #0x14 - blt _02337C5C - bl UpdateTrapsVisibility - mov r0, r8 - bl ov29_022E66C4 -_02337C9C: - mov r0, r5 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02337CA4: .word DUNGEON_PTR - arm_func_end TrySmashWall diff --git a/asm/overlay_29_0233711C.s b/asm/overlay_29_0233711C.s new file mode 100644 index 00000000..1bee35a9 --- /dev/null +++ b/asm/overlay_29_0233711C.s @@ -0,0 +1,888 @@ + .include "asm/macros.inc" + .include "overlay_29_0233711C.inc" + + .text + + arm_func_start ov29_0233711C +ov29_0233711C: ; 0x0233711C +#ifdef JAPAN +#define OV29_0233711C_OFFSET -0xA4 +#else +#define OV29_0233711C_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + ldr r2, _02337294 ; =DUNGEON_PTR + mov r4, r1 + ldr sl, [r2] + mov r5, r0 + add r1, sl, #0x1a000 + ldrb r0, [r1, #0x245 + OV29_0233711C_OFFSET] + str r0, [sp, #0x18] + ldrb fp, [r1, #0x244 + OV29_0233711C_OFFSET] + bl IsSecretBazaar + ldr r2, _02337298 ; =0x0001A224 + ldr r1, _0233729C ; =ov29_02352B9C + add r3, r2, #2 + ldrsh r6, [sl, r2] + ldrsh r2, [sl, r3] + add r3, r6, r5 + str r0, [sp, #0x14] + add r0, r2, r4 + mov r0, r0, asr #3 + sub sb, r0, #1 + add r0, sb, #0x1e + mov r2, r0, lsl #1 + str fp, [sp] + ldr r0, [sp, #0x18] + mov r8, r3, asr #3 + str r0, [sp, #4] + ldr r0, [sp, #0x14] + ldrsh r7, [r1, r2] + str r0, [sp, #8] + add r0, r8, #0x1e + mov r3, r0, lsl #1 + ldrsh r6, [r1, r3] + ldr r1, _023372A0 ; =ov29_02352D58 + add r0, sl, #0xc4 + OV29_0233711C_OFFSET + ldrsh r4, [r1, r3] + ldrsh r5, [r1, r2] + add r3, r7, r7, lsl #1 + add r3, r6, r3 + mov r1, r4, lsl #0x10 + mov r2, r5, lsl #0x10 + mov r3, r3, lsl #0x10 + add r0, r0, #0x4000 + mov r1, r1, asr #0x10 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + bl ov29_02336DB0 + str r0, [sp, #0x10] + mov r0, #0 + str r0, [sp, #0xc] + mov r0, r4, lsl #0x10 + mov r1, r6, lsl #0x10 + add r4, sl, #0xc4 + OV29_0233711C_OFFSET + mov r6, r0, asr #0x10 + mov sl, r1, asr #0x10 +_023371F8: + mov r0, #0 + ldr r3, [sp, #0x10] + str r0, [sp] + ldrh r2, [r3], #6 + and r8, r8, #0x3f + and sb, sb, #0x1f + str r3, [sp, #0x10] + mov r0, r8 + mov r1, sb + mov r3, #1 + bl sub_02051D8C + add r7, r7, #1 + add sb, sb, #1 + cmp r7, #3 + bne _0233726C + str fp, [sp] + ldr r0, [sp, #0x18] + add r5, r5, #1 + str r0, [sp, #4] + ldr r0, [sp, #0x14] + mov r2, r5, lsl #0x10 + str r0, [sp, #8] + add r0, r4, #0x4000 + mov r1, r6 + mov r2, r2, asr #0x10 + mov r3, sl + mov r7, #0 + bl ov29_02336DB0 + str r0, [sp, #0x10] +_0233726C: + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + cmp r0, #0x1b + blt _023371F8 + mov r0, #1 + mov r1, #0 + bl sub_02051E60 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02337294: .word DUNGEON_PTR +_02337298: .word 0x0001A224 + OV29_0233711C_OFFSET +_0233729C: .word ov29_02352B9C +_023372A0: .word ov29_02352D58 + arm_func_end ov29_0233711C + + arm_func_start ov29_023372A4 +ov29_023372A4: ; 0x023372A4 +#ifdef JAPAN +#define OV29_023372A4_OFFSET -0xA4 +#else +#define OV29_023372A4_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + ldr r2, _02337418 ; =DUNGEON_PTR + mov r4, r1 + ldr sl, [r2] + mov r5, r0 + add r1, sl, #0x1a000 + ldrb r0, [r1, #0x245 + OV29_023372A4_OFFSET] + str r0, [sp, #0x18] + ldrb fp, [r1, #0x244 + OV29_023372A4_OFFSET] + bl IsSecretBazaar + ldr r2, _0233741C ; =0x0001A224 + ldr r1, _02337420 ; =ov29_02352B9C + add r3, r2, #2 + ldrsh r6, [sl, r2] + ldrsh r2, [sl, r3] + add r3, r6, r5 + str r0, [sp, #0x14] + add r0, r2, r4 + mov r8, r0, asr #3 + add r0, r8, #0x1e + mov r7, r3, asr #3 + str fp, [sp] + mov r2, r0, lsl #1 + ldr r0, [sp, #0x18] + ldr r3, _02337424 ; =ov29_02352D58 + str r0, [sp, #4] + ldr r0, [sp, #0x14] + ldrsh r5, [r3, r2] + str r0, [sp, #8] + add r0, r7, #0x1e + mov r4, r0, lsl #1 + ldrsh r6, [r1, r4] + ldrsh r1, [r1, r2] + add r0, sl, #0xc4 + OV29_023372A4_OFFSET + mov r2, r5, lsl #0x10 + ldrsh r4, [r3, r4] + add sb, r1, r1, lsl #1 + add r3, r6, sb + mov r1, r4, lsl #0x10 + mov r3, r3, lsl #0x10 + add r0, r0, #0x4000 + mov r1, r1, asr #0x10 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + bl ov29_02336DB0 + str r0, [sp, #0x10] + mov r0, #0 + str r0, [sp, #0xc] + mov r0, r5, lsl #0x10 + mov r1, sb, lsl #0x10 + add r5, sl, #0xc4 + OV29_023372A4_OFFSET + mov sb, r0, asr #0x10 + mov sl, r1, asr #0x10 +_0233737C: + mov r0, #0 + ldr r3, [sp, #0x10] + str r0, [sp] + ldrh r2, [r3], #2 + and r7, r7, #0x3f + and r8, r8, #0x1f + str r3, [sp, #0x10] + mov r0, r7 + mov r1, r8 + mov r3, #1 + bl sub_02051D8C + add r6, r6, #1 + add r7, r7, #1 + cmp r6, #3 + bne _023373F0 + str fp, [sp] + ldr r0, [sp, #0x18] + add r4, r4, #1 + str r0, [sp, #4] + ldr r0, [sp, #0x14] + mov r1, r4, lsl #0x10 + str r0, [sp, #8] + add r0, r5, #0x4000 + mov r1, r1, asr #0x10 + mov r2, sb + mov r3, sl + mov r6, #0 + bl ov29_02336DB0 + str r0, [sp, #0x10] +_023373F0: + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + cmp r0, #0x21 + blt _0233737C + mov r0, #1 + mov r1, #0 + bl sub_02051E60 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02337418: .word DUNGEON_PTR +_0233741C: .word 0x0001A224 + OV29_023372A4_OFFSET +_02337420: .word ov29_02352B9C +_02337424: .word ov29_02352D58 + arm_func_end ov29_023372A4 + + arm_func_start DrawTileGrid +DrawTileGrid: ; 0x02337428 +#ifdef JAPAN +#define DRAW_TILE_GRID_OFFSET -0xA4 +#else +#define DRAW_TILE_GRID_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x44 + ldr r5, _02337780 ; =DUNGEON_PTR + str r2, [sp, #4] + mov r4, r0 + mov r7, r1 + mov r6, r3 + ldr r5, [r5] + bl GetLeader + ldr r1, _02337784 ; =0x0001A224 + ldr r2, _02337780 ; =DUNGEON_PTR + ldrsh r8, [r5, r1] + ldr r1, [r2] + ldr r2, _02337788 ; =DIRECTIONS_XY + add r1, r1, #0x1a000 + strb r6, [r1, #0x251 + DRAW_TILE_GRID_OFFSET] + mov r3, r7, lsl #2 + add r1, r2, r7, lsl #2 + ldrsh r3, [r2, r3] + ldrsh sl, [r1, #2] + ldrsh r6, [r4] + ldrsh r7, [r4, #2] + str r0, [sp, #0x20] + mov sb, r8, asr #3 + mov r2, #0 + add r1, sp, #0x2c +_02337490: + mov r0, r2, lsl #2 + strh r6, [r1, r0] + add r0, r1, r2, lsl #2 + add r2, r2, #1 + strh r7, [r0, #2] + cmp r2, #6 + add r6, r6, r3 + add r7, r7, sl + blt _02337490 + add r0, sb, #0x1e + mov r2, r0, lsl #1 + ldr r1, _0233778C ; =ov29_02352B9C + ldr r0, _02337790 ; =ov29_02352D58 + ldrsh r8, [r1, r2] + ldrsh r6, [r0, r2] + mov r0, #0 + str r0, [sp, #0xc] +_023374D4: + ldr r0, _02337794 ; =0x0001A226 + ldr r2, _0233778C ; =ov29_02352B9C + ldrsh r3, [r5, r0] + ldr r0, [sp, #4] + ldr r1, _02337790 ; =ov29_02352D58 + mov fp, r3, asr #3 + cmp r0, #0 + add r0, r2, fp, lsl #1 + add r1, r1, fp, lsl #1 + ldrsh r0, [r0, #0x3c] + ldrsh r7, [r1, #0x3c] + strh r6, [sp, #0x28] + str r0, [sp, #0x1c] + add r0, r0, r0, lsl #1 + strh r7, [sp, #0x2a] + add sl, r8, r0 + beq _02337544 + ldrsh r0, [r4] + cmp r6, r0 + ldreqsh r0, [r4, #2] + cmpeq r7, r0 + addeq r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET + addeq r0, r0, #0x12000 + addeq sl, r0, sl, lsl #1 + addne r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET + addne r0, r0, #0x12000 + addne sl, r0, sl, lsl #1 + b _023375E8 +_02337544: + ldr r0, [sp, #0x20] + add r1, sp, #0x28 + bl CannotStandOnTileNoMonsterCheck + cmp r0, #0 + bne _023375DC + ldr r0, [sp, #0x20] + add r1, sp, #0x28 + bl CanSeePosition + cmp r0, #0 + beq _023375DC + mov r0, #0 + add r2, sp, #0x2c + b _02337598 +_02337578: + mov r3, r0, lsl #2 + ldrsh r1, [r2, r3] + cmp r6, r1 + addeq r1, r2, r3 + ldreqsh r1, [r1, #2] + cmpeq r7, r1 + beq _023375A0 + add r0, r0, #1 +_02337598: + cmp r0, #6 + blt _02337578 +_023375A0: + cmp r0, #6 + bne _023375CC + bl GetGridsOption + cmp r0, #0 +#ifdef JAPAN + addne r0, r5, #0x9a + addne r0, r0, #0x12000 +#else + ldrne r0, _02337798 ; =0x0001213E + addne r0, r5, r0 +#endif + addne sl, r0, sl, lsl #1 + addeq r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET + addeq r0, r0, #0x12000 + addeq sl, r0, sl, lsl #1 + b _023375E8 +_023375CC: + add r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET + add r0, r0, #0x12000 + add sl, r0, sl, lsl #1 + b _023375E8 +_023375DC: + add r0, r5, #0x12c + DRAW_TILE_GRID_OFFSET + add r0, r0, #0x12000 + add sl, r0, sl, lsl #1 +_023375E8: + add r0, r5, #0x150 + DRAW_TILE_GRID_OFFSET + add r0, r0, #0x12000 + add r0, r0, r8, lsl #1 +#ifdef JAPAN + add r1, r5, #0x88 + str r0, [sp, #0x18] + add r0, r1, #0x12000 + add r0, r0, r8, lsl #1 + str r0, [sp, #0x14] + mov r0, #0 + str r0, [sp, #8] + add r0, r5, #0x9a + add r0, r0, #0x12000 + add r0, r0, r8, lsl #1 + str r0, [sp, #0x10] +#else + ldr r1, _02337798 ; =0x0001213E + str r0, [sp, #0x18] + add r0, r5, r1 + add r0, r0, r8, lsl #1 + str r0, [sp, #0x10] + mov r0, #0 + str r0, [sp, #8] + add r0, r5, #0x12c + add r0, r0, #0x12000 + add r0, r0, r8, lsl #1 + str r0, [sp, #0x14] +#endif + mov r0, r6, lsl #0x10 + mov r0, r0, asr #0x10 + str r0, [sp, #0x24] +_0233762C: + mov r0, #0 + str r0, [sp] + ldrh r2, [sl], #6 + and sb, sb, #0x3f + and fp, fp, #0x1f + mov r0, sb + mov r1, fp + mov r3, #0 + bl sub_02051D8C + ldr r0, [sp, #0x1c] + add fp, fp, #1 + add r0, r0, #1 + str r0, [sp, #0x1c] + cmp r0, #3 + bne _02337730 + ldr r0, [sp, #0x24] + add r7, r7, #1 + strh r0, [sp, #0x28] + ldr r0, [sp, #4] + cmp r0, #0 + mov r0, #0 + str r0, [sp, #0x1c] + strh r7, [sp, #0x2a] + beq _023376A8 + ldrsh r0, [r4] + cmp r6, r0 + ldreqsh r0, [r4, #2] + cmpeq r7, r0 + ldreq sl, [sp, #0x18] + ldrne sl, [sp, #0x14] + b _02337730 +_023376A8: + ldr r0, [sp, #0x20] + add r1, sp, #0x28 + bl CannotStandOnTileNoMonsterCheck + cmp r0, #0 + bne _0233772C + ldr r0, [sp, #0x20] + add r1, sp, #0x28 + bl CanSeePosition + cmp r0, #0 + beq _0233772C + mov r0, #0 + b _02337700 +_023376D8: + mov r2, r0, lsl #2 + add r1, sp, #0x2c + ldrsh r1, [r1, r2] + cmp r6, r1 + addeq r1, sp, #0x2c + addeq r1, r1, r2 + ldreqsh r1, [r1, #2] + cmpeq r7, r1 + beq _02337708 + add r0, r0, #1 +_02337700: + cmp r0, #6 + blt _023376D8 +_02337708: + cmp r0, #6 + bne _02337724 + bl GetGridsOption + cmp r0, #0 + ldrne sl, [sp, #0x10] + ldreq sl, [sp, #0x14] + b _02337730 +_02337724: + ldr sl, [sp, #0x18] + b _02337730 +_0233772C: + ldr sl, [sp, #0x14] +_02337730: + ldr r0, [sp, #8] + add r0, r0, #1 + str r0, [sp, #8] + cmp r0, #0x19 + blt _0233762C + ldr r0, [sp, #0xc] + add r8, r8, #1 + add r0, r0, #1 + cmp r8, #3 + add sb, sb, #1 + addeq r6, r6, #1 + moveq r8, #0 + str r0, [sp, #0xc] + cmp r0, #0x21 + blt _023374D4 + mov r0, #0 + mov r1, r0 + bl sub_02051E60 + add sp, sp, #0x44 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02337780: .word DUNGEON_PTR +_02337784: .word 0x0001A224 + DRAW_TILE_GRID_OFFSET +_02337788: .word DIRECTIONS_XY +_0233778C: .word ov29_02352B9C +_02337790: .word ov29_02352D58 +_02337794: .word 0x0001A226 + DRAW_TILE_GRID_OFFSET +#ifndef JAPAN +_02337798: .word 0x0001213E +#endif + arm_func_end DrawTileGrid + + arm_func_start HideTileGrid +HideTileGrid: ; 0x0233779C + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r8, #0 + mov r5, r8 + mov r6, r8 +_023377B0: + mov r0, r8, lsl #0x10 + mov r7, r6 + mov r4, r0, asr #0x10 +_023377BC: + mov r0, r7, lsl #0x10 + mov r1, r4 + mov r2, r5 + mov r3, r5 + mov r0, r0, asr #0x10 + str r5, [sp] + bl sub_02051D8C + add r7, r7, #1 + cmp r7, #0x20 + blt _023377BC + add r8, r8, #1 + cmp r8, #0x20 + blt _023377B0 + mov r0, #0 + mov r1, r0 + bl sub_02051E60 + ldr r0, _02337818 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x1a000 +#ifdef JAPAN + strb r1, [r0, #0x1ad] +#else + strb r1, [r0, #0x251] +#endif + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02337818: .word DUNGEON_PTR + arm_func_end HideTileGrid + + arm_func_start ov29_0233781C +ov29_0233781C: ; 0x0233781C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, #0 + mov r4, r7 + mov r5, r7 +_0233782C: + mov r6, r5 +_02337830: + mov r0, r6 + mov r1, r7 + bl GetTileSafe + add r6, r6, #1 + strh r4, [r0, #2] + cmp r6, #0x38 + blt _02337830 + add r7, r7, #1 + cmp r7, #0x20 + blt _0233782C + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ov29_0233781C + + arm_func_start ov29_0233785C +ov29_0233785C: ; 0x0233785C +#ifdef JAPAN +#define OV29_0233785C_OFFSET -0xA4 +#else +#define OV29_0233785C_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r1, _02337A34 ; =0x0000270F + mov r3, #0 + ldr r6, _02337A38 ; =DUNGEON_PTR + mov sb, r3 + rsb r0, r1, #0 + mov r4, #0x1c +_02337878: + mul r2, r3, r4 + ldr r5, [r6] + add r3, r3, #1 + add r5, r5, r2 + add r5, r5, #0xe000 + strb sb, [r5, #0xee8 + OV29_0233785C_OFFSET] + ldr r5, [r6] + cmp r3, #0x20 + add r5, r5, r2 + add r5, r5, #0xe000 + strb sb, [r5, #0xee9 + OV29_0233785C_OFFSET] + ldr r5, [r6] + add r5, r5, r2 + add r5, r5, #0xee00 + strh r1, [r5, #0xea + OV29_0233785C_OFFSET] + ldr r5, [r6] + add r5, r5, r2 + add r5, r5, #0xee00 + strh r1, [r5, #0xec + OV29_0233785C_OFFSET] + ldr r5, [r6] + add r5, r5, r2 + add r5, r5, #0xee00 + strh r0, [r5, #0xee + OV29_0233785C_OFFSET] + ldr r5, [r6] + add r2, r5, r2 + add r2, r2, #0xee00 + strh r0, [r2, #0xf0 + OV29_0233785C_OFFSET] + blt _02337878 + mov sl, sb +_023378EC: + add r5, sl, #1 + mov r0, sl, lsl #0x10 + mov r1, r5, lsl #0x10 + ldr fp, _02337A38 ; =DUNGEON_PTR + mov r8, #0 + mov r6, r0, asr #0x10 + mov r4, r1, asr #0x10 + mov r7, #1 +_0233790C: + mov r0, r8 + mov r1, sl + bl GetTile + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233797C + mov r0, #0x1c + mul r2, r1, r0 + ldr r0, [fp] + add r0, r0, #0x2e8 + OV29_0233785C_OFFSET + add r0, r0, #0xec00 + strb r7, [r0, r2] + add r0, r0, r2 + ldrsh r2, [r0, #2] + cmp r2, r8 + strgth r8, [r0, #2] + ldrsh r2, [r0, #4] + cmp r2, sl + strgth r6, [r0, #4] + ldrsh r3, [r0, #6] + add r2, r8, #1 + cmp r3, r2 + strlth r2, [r0, #6] + ldrsh r2, [r0, #8] + cmp r2, r5 + strlth r4, [r0, #8] + cmp sb, r1 + andlt sb, r1, #0xff +_0233797C: + add r8, r8, #1 + cmp r8, #0x38 + blt _0233790C + add sl, sl, #1 + cmp sl, #0x20 + blt _023378EC + mov r2, #0x18 + ldr r7, _02337A38 ; =DUNGEON_PTR + mov r1, #0 + mov r3, r2 + mov r4, r2 + mov r5, r2 + mov r6, #0x1c +_023379B0: + mul sl, r1, r6 + ldr r0, [r7] + add r0, r0, #0x2e8 + OV29_0233785C_OFFSET + add r0, r0, #0xec00 + ldrb r8, [r0, sl] + add r0, r0, sl + cmp r8, #0 + beq _02337A10 + ldrsh r8, [r0, #2] + sub r8, r8, #1 + mul sl, r8, r2 + str sl, [r0, #0xc] + ldrsh r8, [r0, #4] + sub r8, r8, #1 + mul sl, r8, r3 + str sl, [r0, #0x10] + ldrsh r8, [r0, #6] + add r8, r8, #1 + mul sl, r8, r4 + str sl, [r0, #0x14] + ldrsh r8, [r0, #8] + add r8, r8, #1 + mul sl, r8, r5 + str sl, [r0, #0x18] +_02337A10: + add r1, r1, #1 + cmp r1, #0x20 + blt _023379B0 + ldr r0, _02337A38 ; =DUNGEON_PTR + add r1, sb, #1 + ldr r0, [r0] + add r0, r0, #0xe000 + strb r1, [r0, #0xee4 + OV29_0233785C_OFFSET] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02337A34: .word 0x0000270F +_02337A38: .word DUNGEON_PTR + arm_func_end ov29_0233785C + + arm_func_start DiscoverMinimap +DiscoverMinimap: ; 0x02337A3C +#ifdef JAPAN +#define DISCOVER_MINIMAP_OFFSET -0xA4 +#else +#define DISCOVER_MINIMAP_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r5, r0 + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + bl GetTile + ldrb r4, [r0, #7] + bl GetVisibilityRange + ldr r1, _02337B28 ; =DUNGEON_PTR + ldr r3, [r1] + add r1, r3, #0x1a000 + ldrb r2, [r1, #0x23e + DISCOVER_MINIMAP_OFFSET] + cmp r2, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldrb r1, [r1, #0x250 + DISCOVER_MINIMAP_OFFSET] + cmp r1, #0 + bne _02337A84 + cmp r4, #0xff + bne _02337AA0 +_02337A84: + ldrsh r2, [r5] + ldrsh r1, [r5, #2] + sub r4, r2, r0 + sub r7, r1, r0 + add r5, r2, r0 + add r6, r1, r0 + b _02337B1C +_02337AA0: + add r0, r3, #0x2e8 + DISCOVER_MINIMAP_OFFSET + add r1, r0, #0xec00 + mov r0, #0x1c + mla r2, r4, r0, r1 + ldrb r0, [r2, #1] + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, #1 + strb r0, [r2, #1] + ldrsh r1, [r2, #2] + ldrsh r0, [r2, #4] + ldrsh r5, [r2, #6] + ldrsh r6, [r2, #8] + sub r4, r1, #1 + sub r7, r0, #1 + b _02337B1C +_02337AE0: + mov r8, r4 + b _02337B10 +_02337AE8: + mov r0, r8 + mov r1, r7 + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r7 + orr r2, r2, #3 + strh r2, [r0, #2] + mov r0, r8 + bl DrawMinimapTile + add r8, r8, #1 +_02337B10: + cmp r8, r5 + ble _02337AE8 + add r7, r7, #1 +_02337B1C: + cmp r7, r6 + ble _02337AE0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02337B28: .word DUNGEON_PTR + arm_func_end DiscoverMinimap + + arm_func_start PositionHasItem +PositionHasItem: ; 0x02337B2C + stmdb sp!, {r3, lr} + mov r1, r0 + ldrsh r0, [r1] + ldrsh r1, [r1, #2] + bl GetTile + ldr r0, [r0, #0x10] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + ldr r0, [r0] + cmp r0, #3 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end PositionHasItem + + arm_func_start PositionHasMonster +PositionHasMonster: ; 0x02337B68 + stmdb sp!, {r3, lr} + mov r1, r0 + ldrsh r0, [r1] + ldrsh r1, [r1, #2] + bl GetTile + ldr r0, [r0, #0xc] + cmp r0, #0 + beq _02337B94 + ldr r1, [r0] + cmp r1, #1 + ldmeqia sp!, {r3, pc} +_02337B94: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end PositionHasMonster + + arm_func_start TrySmashWall +TrySmashWall: ; 0x02337B9C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + mov r5, #0 + bl GetTileSafe + ldrh r1, [r0] + tst r1, #3 + bne _02337C4C + ldrh r1, [r0] + tst r1, #0x100 + bne _02337C4C + tst r1, #0x10 + bne _02337C4C + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + mov r5, #1 + sub r7, r5, #2 + orr r1, r1, #1 + strh r1, [r0] + mov r4, r7 +_02337BF4: + mov r6, r4 +_02337BF8: + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + add r0, r6, r0 + add r1, r7, r1 + bl ov29_02336694 + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + add r0, r6, r0 + add r1, r7, r1 + bl DetermineTileWalkableNeighbors + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + add r0, r6, r0 + add r1, r7, r1 + bl DrawMinimapTile + add r6, r6, #1 + cmp r6, #1 + ble _02337BF8 + add r7, r7, #1 + cmp r7, #1 + ble _02337BF4 +_02337C4C: + cmp r5, #0 + beq _02337C9C + ldr r4, _02337CA4 ; =DUNGEON_PTR + mov r6, #0 +_02337C5C: + ldr r0, [r4] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r7, [r0, #0xad4] +#else + ldr r7, [r0, #0xb78] +#endif + mov r0, r7 + bl EntityIsValid__02337CA8 + cmp r0, #0 + beq _02337C84 + mov r0, r7 + bl DetermineMonsterShadow +_02337C84: + add r6, r6, #1 + cmp r6, #0x14 + blt _02337C5C + bl UpdateTrapsVisibility + mov r0, r8 + bl ov29_022E66C4 +_02337C9C: + mov r0, r5 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02337CA4: .word DUNGEON_PTR + arm_func_end TrySmashWall diff --git a/asm/overlay_29_0233ED34.s b/asm/overlay_29_0233F424.s similarity index 78% rename from asm/overlay_29_0233ED34.s rename to asm/overlay_29_0233F424.s index 0ff8745b..10c3b2d3 100644 --- a/asm/overlay_29_0233ED34.s +++ b/asm/overlay_29_0233F424.s @@ -1,516 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_0233ED34.inc" + .include "overlay_29_0233F424.inc" .text - arm_func_start GenerateRoomImperfections -GenerateRoomImperfections: ; 0x0233ED34 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x34 - str r0, [sp] - str r1, [sp, #4] - str r2, [sp, #8] - mov fp, #0 - b _0233F100 -_0233ED50: - ldr r1, _0233F114 ; =0x000001C2 - ldr r0, [sp] - mov sl, #0 - mla r0, fp, r1, r0 - str r0, [sp, #0xc] - mvn r0, #0 - str r0, [sp, #0x30] - b _0233F0F0 -_0233ED70: - ldr r0, [sp, #0xc] - mov r1, #0x1e - mla sb, sl, r1, r0 - ldrb r0, [sb, #8] - cmp r0, #0 - ldreqb r0, [sb, #0x11] - cmpeq r0, #0 - ldreqb r0, [sb, #0x12] - cmpeq r0, #0 - bne _0233F0EC - ldrb r0, [sb, #0xb] - cmp r0, #0 - ldrneb r0, [sb, #0xa] - cmpne r0, #0 - beq _0233F0EC - ldrb r0, [sb, #9] - cmp r0, #0 - ldreqb r0, [sb, #0x10] - cmpeq r0, #0 - bne _0233F0EC - ldrb r0, [sb, #0x1c] - cmp r0, #0 - beq _0233F0EC - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x3c - blt _0233F0EC - ldrsh r3, [sb, #4] - ldrsh r2, [sb] - ldrsh r1, [sb, #6] - ldrsh r0, [sb, #2] - sub r2, r3, r2 - sub r0, r1, r0 - add r1, r2, r0 - mov r0, r1, asr #1 - add r0, r1, r0, lsr #30 - movs r0, r0, asr #2 - str r0, [sp, #0x24] - moveq r0, #1 - streq r0, [sp, #0x24] - mov r0, #0 - str r0, [sp, #0x2c] - b _0233F0DC -_0233EE1C: - mov r4, #0 -_0233EE20: - mov r0, #4 - bl DungeonRandInt - str r0, [sp, #0x20] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0233EE48 -_0233EE38: ; jump table - b _0233EE48 ; case 0 - b _0233EE70 ; case 1 - b _0233EE9C ; case 2 - b _0233EECC ; case 3 -_0233EE48: - cmp r4, #0 - movne r0, #1 - strne r0, [sp, #0x28] - movne r5, #0 - moveq r0, #0 - ldrsh r8, [sb] - ldrsh r7, [sb, #2] - streq r0, [sp, #0x28] - moveq r5, #1 - b _0233EEF4 -_0233EE70: - ldrsh r0, [sb, #4] - cmp r4, #0 - movne r5, #1 - sub r8, r0, #1 - movne r0, #0 - strne r0, [sp, #0x28] - ldreq r0, [sp, #0x30] - ldrsh r7, [sb, #2] - streq r0, [sp, #0x28] - moveq r5, #0 - b _0233EEF4 -_0233EE9C: - ldrsh r0, [sb, #6] - cmp r4, #0 - ldrsh r1, [sb, #4] - sub r7, r0, #1 - ldrne r0, [sp, #0x30] - movne r5, #0 - strne r0, [sp, #0x28] - moveq r0, #0 - sub r8, r1, #1 - streq r0, [sp, #0x28] - ldreq r5, [sp, #0x30] - b _0233EEF4 -_0233EECC: - ldrsh r0, [sb, #6] - cmp r4, #0 - ldrne r5, [sp, #0x30] - sub r7, r0, #1 - movne r0, #0 - strne r0, [sp, #0x28] - moveq r0, #1 - ldrsh r8, [sb] - streq r0, [sp, #0x28] - moveq r5, #0 -_0233EEF4: - mov r6, #0 - b _0233F0BC -_0233EEFC: - ldrsh r0, [sb] - cmp r8, r0 - blt _0233F0C4 - ldrsh r0, [sb, #4] - cmp r8, r0 - bge _0233F0C4 - ldrsh r0, [sb, #2] - cmp r7, r0 - blt _0233F0C4 - ldrsh r0, [sb, #6] - cmp r7, r0 - bge _0233F0C4 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233F0AC - mov r5, #0 - b _0233F014 -_0233EF50: - ldr r0, _0233F118 ; =DIRECTIONS_XY - mov r1, r5, lsl #2 - ldrsh r2, [r0, r1] - add r0, r0, r5, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - str r0, [sp, #0x1c] - mov r0, #0 - str r0, [sp, #0x10] - add r0, r7, r1 - str r0, [sp, #0x18] - ldr r6, [sp, #0x30] - b _0233EFFC -_0233EF84: - ldr r0, [sp, #0x30] - str r0, [sp, #0x14] - b _0233EFE0 -_0233EF90: - ldr r1, [sp, #0x1c] - ldr r0, [sp, #0x14] - add r0, r1, r0 - ldr r1, [sp, #0x18] - add r1, r1, r6 - bl GetTile - ldrh r1, [r0] - and r1, r1, #3 - cmp r1, #1 - bne _0233EFD4 - ldrb r0, [r0, #7] - cmp r0, #0xff - moveq r0, #1 - streq r0, [sp, #0x10] - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233EFEC -_0233EFD4: - ldr r0, [sp, #0x14] - add r0, r0, #1 - str r0, [sp, #0x14] -_0233EFE0: - ldr r0, [sp, #0x14] - cmp r0, #1 - ble _0233EF90 -_0233EFEC: - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233F004 - add r6, r6, #1 -_0233EFFC: - cmp r6, #1 - ble _0233EF84 -_0233F004: - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233F01C - add r5, r5, #1 -_0233F014: - cmp r5, #8 - blt _0233EF50 -_0233F01C: - cmp r5, #8 - bne _0233F0C4 - ldr r1, _0233F11C ; =CORNER_CARDINAL_NEIGHBOR_IS_OPEN - ldr r0, [sp, #0x20] - mov r5, #0 - add r6, r1, r0, lsl #3 - b _0233F080 -_0233F038: - ldr r0, _0233F118 ; =DIRECTIONS_XY - mov r1, r5, lsl #2 - ldrsh r2, [r0, r1] - add r0, r0, r5, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #1 - movne r0, #0 - and r1, r0, #0xff - ldrb r0, [r5, r6] - cmp r1, r0 - bne _0233F088 - add r5, r5, #2 -_0233F080: - cmp r5, #8 - blt _0233F038 -_0233F088: - cmp r5, #8 - bne _0233F0C4 - mov r0, r8 - mov r1, r7 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - b _0233F0C4 -_0233F0AC: - ldr r0, [sp, #0x28] - add r7, r7, r5 - add r8, r8, r0 - add r6, r6, #1 -_0233F0BC: - cmp r6, #0xa - blt _0233EEFC -_0233F0C4: - add r4, r4, #1 - cmp r4, #2 - blt _0233EE20 - ldr r0, [sp, #0x2c] - add r0, r0, #1 - str r0, [sp, #0x2c] -_0233F0DC: - ldr r1, [sp, #0x2c] - ldr r0, [sp, #0x24] - cmp r1, r0 - blt _0233EE1C -_0233F0EC: - add sl, sl, #1 -_0233F0F0: - ldr r0, [sp, #8] - cmp sl, r0 - blt _0233ED70 - add fp, fp, #1 -_0233F100: - ldr r0, [sp, #4] - cmp fp, r0 - blt _0233ED50 - add sp, sp, #0x34 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233F114: .word 0x000001C2 -_0233F118: .word DIRECTIONS_XY -_0233F11C: .word CORNER_CARDINAL_NEIGHBOR_IS_OPEN - arm_func_end GenerateRoomImperfections - - arm_func_start CreateHallway -CreateHallway: ; 0x0233F120 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldrb r6, [sp, #0x28] - mov sl, r0 - ldr r0, [sp, #0x30] - mov sb, r1 - cmp r6, #0 - mov r8, r2 - mov r7, r3 - mov r4, sl - mov r5, sb - ldr fp, [sp, #0x2c] - str r0, [sp, #0x30] - mov r6, #0 - beq _0233F328 - b _0233F1C4 -_0233F15C: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F1AC - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F1B4 -_0233F1AC: - cmp sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F1B4: - ldr r0, [sp, #0x30] - cmp sb, r0 - addlt sb, sb, #1 - subge sb, sb, #1 -_0233F1C4: - ldr r0, [sp, #0x30] - cmp sb, r0 - bne _0233F15C - mov r6, #0 - b _0233F240 -_0233F1D8: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F228 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F234 -_0233F228: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F234: - cmp sl, r8 - addlt sl, sl, #1 - subge sl, sl, #1 -_0233F240: - cmp sl, r8 - bne _0233F1D8 - mov r6, #0 - b _0233F2B8 -_0233F250: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F2A0 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F2AC -_0233F2A0: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F2AC: - cmp sb, r7 - addlt sb, sb, #1 - subge sb, sb, #1 -_0233F2B8: - cmp sb, r7 - bne _0233F250 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F2C4: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F314 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F31C -_0233F314: - cmp sl, r4 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F31C: - cmp sl, fp - addlt sl, sl, #1 - subge sl, sl, #1 -_0233F328: - cmp sl, fp - bne _0233F2C4 - mov r6, #0 - b _0233F3A0 -_0233F338: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F388 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F394 -_0233F388: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F394: - cmp sb, r7 - addlt sb, sb, #1 - subge sb, sb, #1 -_0233F3A0: - cmp sb, r7 - bne _0233F338 - mov r6, #0 - b _0233F418 -_0233F3B0: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F400 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F40C -_0233F400: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F40C: - cmp sl, r8 - addlt sl, sl, #1 - subge sl, sl, #1 -_0233F418: - cmp sl, r8 - bne _0233F3B0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end CreateHallway - arm_func_start EnsureConnectedGrid EnsureConnectedGrid: ; 0x0233F424 stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} diff --git a/asm/overlay_29_023456BC.s b/asm/overlay_29_023456BC.s index 1080f952..4a571746 100644 --- a/asm/overlay_29_023456BC.s +++ b/asm/overlay_29_023456BC.s @@ -260,996 +260,3 @@ _02345A30: .word ov29_023537B4 _02345A34: .word 0xFFFF000F _02345A38: .word OBJ_GRAPHICS_CONTROLS_PTR arm_func_end DisplayItem - - arm_func_start SpawnDroppedItemWrapper -SpawnDroppedItemWrapper: ; 0x02345A3C - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0xc0 - mov r5, r2 - mov r4, #0 - mov r6, #3 - mov r2, #1 - str r6, [sp, #8] - strb r2, [sp, #0x28] - str r5, [sp, #0xbc] - strb r4, [sp, #0x2c] - strb r4, [sp, #0x2a] - ldrh r4, [r1] - mov r6, r0 - mov r2, #0x18 - strh r4, [sp, #0xc] - ldrh ip, [r1, #2] - mov r4, r3 - add r0, sp, #8 - strh ip, [sp, #0xe] - ldrsh r3, [r1] - ldrsh r1, [r1, #2] - smulbb r3, r3, r2 - smulbb r1, r1, r2 - add r2, r1, #4 - add r3, r3, #4 - mov r1, r3, lsl #8 - mov r2, r2, lsl #8 - bl SetEntityPixelPosXY - mov r0, #0 - strh r0, [sp, #0x2e] - str r0, [sp] - add r1, sp, #8 - mov r0, r6 - mov r2, r5 - mov r3, #1 - str r4, [sp, #4] - bl SpawnDroppedItem - add sp, sp, #0xc0 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end SpawnDroppedItemWrapper - - arm_func_start SpawnDroppedItem -SpawnDroppedItem: ; 0x02345AD8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - mov r8, r1 - mov sb, r0 - ldrsh r0, [r8, #4] - ldrsh r1, [r8, #6] - mov r7, r2 - mov r4, r3 - ldr r6, [sp, #0x38] - bl GetTile - ldr r0, [r0, #0x10] - mov r5, #0 - cmp r0, #0 - beq _02345B5C - ldr r0, [r0] - cmp r0, #2 - bne _02345B5C - ldrb r2, [sp, #0x3c] - mov r0, r8 - add r1, r8, #4 - bl ov29_02347378 - add r0, r8, #4 - bl RevealAttackedTile - ldr r1, _02345D64 ; =0x00000BD8 - mov r0, sb - bl LogMessageByIdWithPopupCheckUser - ldrb r0, [r7] - tst r0, #1 - movne r0, #1 - moveq r0, r5 - tst r0, #0xff - moveq r0, #0 - beq _02345D5C -_02345B5C: - ldrsh r0, [r8, #4] - cmp r4, #0 - movne r4, #0 - strh r0, [sp, #0xc] - ldrsh r0, [r8, #6] - ldrh r1, [sp, #0xc] - ldr fp, _02345D68 ; =DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST - strh r0, [sp, #0xe] - ldrh r0, [sp, #0xe] - strh r1, [sp, #8] - moveq r4, #1 - strh r0, [sp, #0xa] -_02345B8C: - mov r0, r4, lsl #2 - ldrsh r3, [fp, r0] - cmp r3, #0x63 - moveq r5, #0 - beq _02345C44 - ldrsh r2, [r8, #4] - add r0, fp, r0 - ldrsh r1, [r0, #2] - add r0, r2, r3 - strh r0, [sp, #0xc] - ldrsh r2, [r8, #6] - ldrsh r0, [sp, #0xc] - add r1, r2, r1 - strh r1, [sp, #0xe] - ldrsh r1, [sp, #0xe] - bl GetTile - mov sl, r0 - ldrh r0, [sl] - tst r0, #3 - beq _02345C3C - tst r0, #0x200 - ldreq r0, [sl, #0x10] - cmpeq r0, #0 - bne _02345C3C - ldrb r2, [sp, #0x3c] - add r1, sp, #0xc - mov r0, r8 - bl ov29_02347378 - ldrh r0, [sl] - ldrh r2, [sp, #0xc] - ldrh r1, [sp, #0xe] - and r0, r0, #3 - cmp r0, #3 - strh r2, [sp, #8] - strh r1, [sp, #0xa] - moveq r5, #1 - beq _02345C44 - add r0, sp, #0xc - mov r1, r7 - mov r2, #1 - bl SpawnItem - cmp r0, #0 - movne r5, #1 - b _02345C44 -_02345C3C: - add r4, r4, #1 - b _02345B8C -_02345C44: - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02345D6C ; =ov29_023531BC - mov r1, r7 - mov r0, #0 - bl SubstitutePlaceholderItemTags - cmp r5, #0 - beq _02345CF4 - ldrsh r0, [sp, #0xc] - ldrsh r1, [sp, #0xe] - bl DrawMinimapTile - ldrsh r0, [sp, #0xc] - ldrsh r1, [sp, #0xe] - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _02345D58 -_02345C94: ; jump table - b _02345CCC ; case 0 - b _02345CA4 ; case 1 - b _02345CB8 ; case 2 - b _02345CE0 ; case 3 -_02345CA4: - ldr r2, _02345D70 ; =0x00000BD9 - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown - b _02345D58 -_02345CB8: - ldr r2, _02345D74 ; =0x00000BDA - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown - b _02345D58 -_02345CCC: - ldr r2, _02345D78 ; =0x00000BDB - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown - b _02345D58 -_02345CE0: - ldr r2, _02345D7C ; =0x00000BDF - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown - b _02345D58 -_02345CF4: - ldrsh r2, [sp, #8] - ldrsh r1, [sp, #0xa] - mov r0, #0x18 - smulbb r2, r2, r0 - smulbb r0, r1, r0 - add r1, r2, #0xc - add r0, r0, #0xc - mov r2, r1, lsl #8 - mov r1, r0, lsl #8 - str r2, [sp] - str r1, [sp, #4] - cmp r6, #0 - beq _02345D40 - ldrsh r0, [r6] - add r0, r2, r0, lsl #8 - str r0, [sp] - ldrsh r0, [r6, #2] - add r0, r1, r0, lsl #8 - str r0, [sp, #4] -_02345D40: - add r0, sp, #0 - bl ov29_022E563C - ldr r2, _02345D80 ; =0x00000BDC - add r1, sp, #0xc - mov r0, sb - bl LogMessageByIdWithPopupCheckUserUnknown -_02345D58: - mov r0, r5 -_02345D5C: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define SPAWN_DROPPED_ITEM_OFFSET -0x2C1 -#else -#define SPAWN_DROPPED_ITEM_OFFSET 0 -#endif -_02345D64: .word 0x00000BD8 + SPAWN_DROPPED_ITEM_OFFSET -_02345D68: .word DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST -_02345D6C: .word ov29_023531BC -_02345D70: .word 0x00000BD9 + SPAWN_DROPPED_ITEM_OFFSET -_02345D74: .word 0x00000BDA + SPAWN_DROPPED_ITEM_OFFSET -_02345D78: .word 0x00000BDB + SPAWN_DROPPED_ITEM_OFFSET -_02345D7C: .word 0x00000BDF + SPAWN_DROPPED_ITEM_OFFSET -_02345D80: .word 0x00000BDC + SPAWN_DROPPED_ITEM_OFFSET - arm_func_end SpawnDroppedItem - - arm_func_start ov29_02345D84 -ov29_02345D84: ; 0x02345D84 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x18 - mov sl, r1 - ldrsh r0, [sl, #4] - ldrsh r1, [sl, #6] - str r2, [sp, #4] - mov sb, r3 - bl GetTile - ldr r0, _02346048 ; =DUNGEON_PTR - mov r4, #0 - ldr r0, [r0] - ldr r1, _0234604C ; =SECONDARY_TERRAIN_TYPES - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x30] -#else - ldrsh r0, [r0, #0xd4] -#endif - mov r7, r4 - mov r8, r4 - ldrb r0, [r1, r0] - mov r6, #1 - mov fp, #0 - cmp r0, #1 - ldrsh r0, [sl, #4] - moveq r7, #1 - ldr r5, _02346050 ; =DISPLACEMENTS_WITHIN_3 - strh r0, [sp, #0x14] - ldrsh r0, [sl, #6] - ldrh r1, [sp, #0x14] - strh r0, [sp, #0x16] - ldrh r0, [sp, #0x16] - strh r1, [sp, #0x10] - strh r0, [sp, #0x12] - b _02345F74 -_02345E00: - mov r0, r6, lsl #2 - ldrsh r0, [r5, r0] - ldrsh r3, [sl, #4] - cmp r0, #0x63 - moveq r6, fp - mov r0, r6, lsl #2 - ldrsh r2, [r5, r0] - add r0, r5, r6, lsl #2 - ldrsh r1, [r0, #2] - add r0, r3, r2 - strh r0, [sp, #0x14] - ldrsh r2, [sl, #6] - ldrsh r0, [sp, #0x14] - moveq r8, #1 - add r1, r2, r1 - strh r1, [sp, #0x16] - ldrsh r1, [sp, #0x16] - bl GetTile - ldrh r1, [r0] - ands r2, r1, #3 - beq _02345F70 - tst r1, #0x200 - bne _02345F70 - ldr r0, [r0, #0x10] - cmp r0, #0 - bne _02345F64 - ldrh r1, [sp, #0x14] - ldrh r0, [sp, #0x16] - cmp r2, #3 - strh r1, [sp, #0x10] - strh r0, [sp, #0x12] - beq _02345F70 - cmp r7, #0 - beq _02345E90 - cmp r2, #2 - beq _02345F70 -_02345E90: - ldr r0, _02346048 ; =DUNGEON_PTR - ldrsh r2, [sp, #0x14] - ldr r3, [r0] - mov r0, #0x18 - ldrsh r1, [sp, #0x16] - smulbb r2, r2, r0 - smulbb r1, r1, r0 - add r0, r3, #0x1a000 - add r2, r2, #4 - add r1, r1, #4 -#ifdef JAPAN - ldrb fp, [r0, #0x1a1] -#else - ldrb fp, [r0, #0x245] -#endif - mov r5, #0x10000 - mov r7, r2, lsl #8 - mov r8, r1, lsl #8 - mov r0, sl - mov r1, r7 - mov r2, r8 - str r5, [sl, #0x1c] - bl SetEntityPixelPosXY - mov r6, #0 -_02345EE0: - sub r5, r5, #0x800 - mov r2, #0 - str r5, [sl, #0x1c] - mov r0, sl - mov r1, fp - mov r3, r2 - str r2, [sp] - bl DisplayItem - mov r0, #0x13 - bl AdvanceFrame - add r6, r6, #1 - cmp r6, #0x20 - blt _02345EE0 - mov r0, sl - mov r1, r7 - mov r2, r8 - bl SetEntityPixelPosXY - mov r2, #0 - str r2, [sl, #0x1c] - mov r0, sl - mov r1, fp - mov r3, r2 - str r2, [sp] - bl DisplayItem - mov r0, #0x13 - bl AdvanceFrame - ldr r1, [sp, #4] - add r0, sp, #0x14 - mov r2, #1 - bl SpawnItem - cmp r0, #0 - movne r4, #1 - b _02345F7C -_02345F64: - cmp r8, #0 - movne r4, #0 - bne _02345F7C -_02345F70: - add r6, r6, #1 -_02345F74: - cmp r8, #0 - beq _02345E00 -_02345F7C: - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _02346054 ; =ov29_023531BC - ldr r1, [sp, #4] - mov r0, #0 - bl SubstitutePlaceholderItemTags - cmp r4, #0 - beq _02345FC4 - bl PlayDungeonTipSound__022EB66C - ldr r1, _02346058 ; =0x00000B74 - mov r0, #0 - mov r2, #1 - bl DisplayMessage2 - ldr r1, _02346058 ; =0x00000B74 - mov r0, #0 - bl LogMessageByIdQuiet - b _0234603C -_02345FC4: - ldrsh r2, [sp, #0x10] - ldrsh r1, [sp, #0x12] - mov r0, #0x18 - smulbb r2, r2, r0 - smulbb r0, r1, r0 - add r1, r2, #0xc - add r0, r0, #0xc - mov r2, r1, lsl #8 - mov r1, r0, lsl #8 - str r2, [sp, #8] - str r1, [sp, #0xc] - cmp sb, #0 - beq _02346010 - ldrsh r0, [sb] - add r0, r2, r0, lsl #8 - str r0, [sp, #8] - ldrsh r0, [sb, #2] - add r0, r1, r0, lsl #8 - str r0, [sp, #0xc] -_02346010: - add r0, sp, #8 - bl ov29_022E563C - ldr r1, _0234605C ; =0x00000B75 - mov r0, #0 - mov r2, #1 - bl DisplayMessage2 - ldr r1, _0234605C ; =0x00000B75 - mov r0, #0 - bl LogMessageByIdQuiet - mov r0, #0 - b _02346040 -_0234603C: - mov r0, #1 -_02346040: - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02346048: .word DUNGEON_PTR -_0234604C: .word SECONDARY_TERRAIN_TYPES -_02346050: .word DISPLACEMENTS_WITHIN_3 -_02346054: .word ov29_023531BC -#ifdef JAPAN -_02346058: .word 0x00000885 -_0234605C: .word 0x00000886 -#else -_02346058: .word 0x00000B74 -_0234605C: .word 0x00000B75 -#endif - arm_func_end ov29_02345D84 - - arm_func_start TryGenerateUnownStoneDrop -TryGenerateUnownStoneDrop: ; 0x02346060 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - mov r5, r1 - bl IsMarowakTrainingMaze - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - bl IsUnown - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, _023460D8 ; =UNOWN_STONE_DROP_CHANCE - ldrsh r0, [r0] - bl DungeonRandOutcome__022EAB20 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - sub r0, r5, #0xc9 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - add r0, r0, #0x190 - mov r1, r0, lsl #0x10 - mov r0, r4 - mov r1, r1, asr #0x10 - mov r2, #0 - mov r3, #2 - bl GenerateItem - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023460D8: .word UNOWN_STONE_DROP_CHANCE - arm_func_end TryGenerateUnownStoneDrop - - arm_func_start ov29_023460DC -ov29_023460DC: ; 0x023460DC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x18 - mov r7, r0 - mov r4, r1 - mov r6, r2 - mov r5, r3 - bl ov29_022FB51C - cmp r0, #0 - beq _02346134 - bl IsCurrentFixedRoomBossFight - cmp r0, #0 - bne _02346134 - bl IsMarowakTrainingMaze - cmp r0, #0 - bne _02346134 - mov r0, r4 - bl EntityIsValid__02345698 - cmp r0, #0 - beq _02346134 - ldr r0, [r4] - cmp r0, #1 - beq _0234613C -_02346134: - mov r0, #0 - b _02346330 -_0234613C: - ldr r4, [r4, #0xb4] - add r1, sp, #0 - ldrsh r0, [r4, #2] - bl GetTreasureBoxChances - cmp r5, #0 - ble _02346184 - ldr r1, _02346338 ; =ov10_022C48EC - mov lr, #0 - add r3, sp, #0 -_02346160: - mov ip, lr, lsl #1 - ldrsh r2, [r3, ip] - add lr, lr, #1 - cmp r2, #0 - ldrnesh r0, [r1, ip] - mlane r0, r5, r0, r2 - strneh r0, [r3, ip] - cmp lr, #4 - blt _02346160 -_02346184: - mov r2, #0 - mov r1, r2 - add r0, sp, #8 -_02346190: - str r1, [r0, r2, lsl #2] - add r2, r2, #1 - cmp r2, #4 - blt _02346190 - ldrsh r0, [sp] - mov ip, #1 - add r5, sp, #0 - str r0, [sp, #8] - add r2, sp, #8 -_023461B4: - mov r3, ip, lsl #1 - add r1, r2, ip, lsl #2 - ldrsh r3, [r5, r3] - ldr r1, [r1, #-4] - add r1, r1, r3 - str r1, [r2, ip, lsl #2] - add ip, ip, #1 - cmp ip, #4 - add r0, r0, r3 - blt _023461B4 - bl DungeonRandInt - ldr r1, [sp, #8] - cmp r1, #0 - beq _023461F4 - cmp r0, r1 - bge _023461FC -_023461F4: - mov r0, #0 - b _02346330 -_023461FC: - ldr r1, [sp, #0xc] - cmp r0, r1 - bge _0234626C - mov r5, #0 - mov r4, r5 - cmp r6, #0 - beq _02346230 - mov r0, #0x64 - bl DungeonRandInt - ldr r1, _0234633C ; =ov10_022C44C8 - ldrsh r1, [r1] - cmp r1, r0 - movlt r5, #1 -_02346230: - cmp r5, #0 - movne r5, #0x67 - bne _02346310 - ldr r0, _02346340 ; =DUNGEON_PTR - ldr r0, [r0] - add r5, r0, #0x348 - add r0, r5, #0x400 - bl GetMissionRank__0204FAE0 - mov r1, r0 - cmp r1, #0xf - movgt r1, #0xf - add r0, r5, #0x400 - bl RetrieveFromItemList1 - mov r5, r0 - b _02346310 -_0234626C: - ldr r1, [sp, #0x10] - cmp r0, r1 - ldrsh r0, [r4, #2] - bge _023462C8 - mov r1, #0 - bl GetExclusiveItem - movs r5, r0 - mov r4, #1 - bne _02346310 - ldr r0, _02346340 ; =DUNGEON_PTR - ldr r0, [r0] - ldr r0, [r0, #0x7cc] - cmp r0, #0 - moveq r0, #0x6e - movne r0, #0x6a - bl DungeonRandInt - mov r0, r0, lsl #0x12 - mov r0, r0, asr #0x10 - add r0, r0, #0x3e - add r0, r0, #0x200 - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - b _02346310 -_023462C8: - mov r1, #1 - bl GetExclusiveItem - movs r5, r0 - mov r4, #2 - bne _02346310 - ldr r0, _02346340 ; =DUNGEON_PTR - ldr r0, [r0] - ldr r0, [r0, #0x7cc] - cmp r0, #0 - moveq r0, #0x6e - movne r0, #0x6a - bl DungeonRandInt - mov r0, r0, lsl #0x12 - mov r0, r0, asr #0x10 - add r0, r0, #0x3f - add r0, r0, #0x200 - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 -_02346310: - mov r0, r4 - bl ov29_02344BF8 - mov r1, r0 - mov r0, r7 - mov r2, r5 - mov r3, #2 - bl GenerateItem - mov r0, #1 -_02346330: - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02346338: .word ov10_022C48EC -_0234633C: .word ov10_022C44C8 -_02346340: .word DUNGEON_PTR - arm_func_end ov29_023460DC - - arm_func_start ov29_02346344 -ov29_02346344: ; 0x02346344 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x3ec - sub sp, sp, #0x400 - mov r4, #0 - str r0, [sp, #4] - str r1, [sp, #8] - ldr sb, [sp, #0x810] - ldr r8, [sp, #0x814] - ldr r7, [sp, #0x818] - mov fp, r2 - mov sl, r3 - mov r1, r4 - mov r6, r4 - add r0, sp, #0x24 -_0234637C: - strb r6, [r0, r1] - add r1, r1, #1 - cmp r1, #0x1e - blt _0234637C - b _0234647C -_02346390: - ldrsh r1, [fp] - ldrsh r0, [fp, #2] - mov r5, #0 - strh r1, [sp, #0x20] - str r5, [sp, #0x14] - strh r0, [sp, #0x22] -_023463A8: - cmp r5, #0x1e - bge _02346454 - mov r2, r5, lsl #2 - ldrsh r0, [r8, r2] - cmp r0, #0x63 - beq _02346454 - add r1, sp, #0x24 - ldrb r1, [r1, r5] - cmp r1, #0 - bne _0234644C - add r1, r8, r2 - ldrsh r1, [r1, #2] - ldrsh r3, [fp] - ldrsh r2, [fp, #2] - add r3, r3, r0 - add r0, r2, r1 - strh r3, [sp, #0x20] - strh r0, [sp, #0x22] - ldrsh r0, [sp, #0x20] - ldrsh r1, [sp, #0x22] - bl GetTile - ldrh r1, [r0] - tst r1, #3 - beq _0234644C - tst r1, #0x200 - ldreq r0, [r0, #0x10] - cmpeq r0, #0 - bne _0234644C - ldrh r1, [sp, #0x20] - add r0, sp, #0x42 - mov r2, r6, lsl #2 - strh r1, [r0, r2] - mov r1, #1 - ldrh r3, [sp, #0x22] - str r1, [sp, #0x14] - mov r2, r1 - add r1, sp, #0x24 - add r0, r0, r6, lsl #2 - strb r2, [r1, r5] - strh r3, [r0, #2] - b _02346454 -_0234644C: - add r5, r5, #1 - b _023463A8 -_02346454: - ldr r0, [sp, #0x14] - cmp r0, #0 - bne _02346478 - add r0, sp, #0x42 - mov r1, r6, lsl #2 - mvn r2, #0 - strh r2, [r0, r1] - add r0, r0, r6, lsl #2 - strh r2, [r0, #2] -_02346478: - add r6, r6, #1 -_0234647C: - cmp r6, sb - blt _02346390 - mov r1, #0 - mov r5, r1 - mov r8, r1 - add fp, sp, #0x42 - b _023465B4 -_02346498: - mov r0, r8, lsl #2 - ldrsh r2, [fp, r0] - cmp r2, #0 - bge _023464C4 - mov r0, #0xb8 - mul r3, r8, r0 - mov r2, #0 - add r0, sp, #0xbc - str r2, [r0, r3] - mov r5, #1 - b _023465B0 -_023464C4: - mov r1, #0xb8 - mul r3, r8, r1 - add r1, sp, #0xbc - mov r2, #3 - str r2, [r1, r3] - add r6, r1, r3 - mov r1, #0 - strb r1, [r6, #0x24] - mov r1, #1 - strb r1, [r6, #0x20] - mov r1, #0 - strb r1, [r6, #0x22] - mov r1, #6 - mla r1, r8, r1, sl - str r1, [r6, #0xb4] - add r1, fp, r0 - ldrh r2, [fp, r0] - ldrh r1, [r1, #2] - mov r0, r6 - strh r2, [r6, #4] - strh r1, [r6, #6] - ldr r1, [sp, #8] - ldrsh r2, [r1] - ldrsh r3, [r1, #2] - mov r1, #0x18 - smulbb r1, r2, r1 - mov r2, #0x18 - smulbb r2, r3, r2 - add r1, r1, #4 - add r2, r2, #4 - mov r1, r1, lsl #8 - mov r2, r2, lsl #8 - bl SetEntityPixelPosXY - mov r0, #0 - strh r0, [r6, #0x26] - mov r0, r8, lsl #2 - ldrsh r3, [fp, r0] - mov r1, #0x18 - mov r0, r1 - smulbb r0, r3, r0 - ldr r2, [r6, #0xc] - add r0, r0, #4 - rsb r0, r2, r0, lsl #8 - bl _s32_div_f - add r1, sp, #0x6c - str r0, [r1, r8, lsl #3] - add r0, fp, r8, lsl #2 - ldrsh r3, [r0, #2] - mov r1, #0x18 - mov r0, r1 - smulbb r0, r3, r0 - ldr r2, [r6, #0x10] - add r0, r0, #4 - rsb r0, r2, r0, lsl #8 - bl _s32_div_f - add r1, sp, #0x6c - add r1, r1, r8, lsl #3 - str r0, [r1, #4] - mov r1, #1 -_023465B0: - add r8, r8, #1 -_023465B4: - cmp r8, sb - blt _02346498 - cmp r1, #0 - bne _02346614 - cmp r7, #0 - beq _0234660C - cmp sb, #2 - blt _023465E4 - ldr r1, _023467D0 ; =0x00000BDD - ldr r0, [sp, #4] - bl LogMessageByIdWithPopupCheckUser - b _0234660C -_023465E4: - mov r0, #0 - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _023467D4 ; =ov29_023531BC - mov r1, sl - mov r0, #0 - bl SubstitutePlaceholderItemTags - ldr r1, _023467D8 ; =0x00000BDC - ldr r0, [sp, #4] - bl LogMessageByIdWithPopupCheckUser -_0234660C: - mov r0, #0 - b _023467C4 -_02346614: - cmp r5, #0 - cmpne r7, #0 - beq _0234662C - ldr r1, _023467DC ; =0x00000BDE - ldr r0, [sp, #4] - bl LogMessageByIdWithPopupCheckUser -_0234662C: - ldr r0, _023467E0 ; =DUNGEON_PTR - mov r6, #0 - ldr r0, [r0] - mov fp, r6 - add r0, r0, #0x1a000 -#ifdef JAPAN - ldrb r0, [r0, #0x1a1] -#else - ldrb r0, [r0, #0x245] -#endif - mov r5, r6 - str r0, [sp, #0x10] -_0234664C: - and r0, r6, #0xff - mov r8, #0 - str r0, [sp, #0x1c] - b _023466E4 -_0234665C: - mov r0, #0xb8 - mul r0, r8, r0 - add r1, sp, #0xbc - str r0, [sp, #0x18] - add r0, r1, r0 - bl EntityIsValid__02345698 - cmp r0, #0 - beq _023466E0 - mov r1, #0xb8 - add r0, sp, #0xbc - mla r0, r8, r1, r0 - add r2, sp, #0x6c - add r1, sp, #0x6c - add r2, r2, r8, lsl #3 - ldr r1, [r1, r8, lsl #3] - ldr r2, [r2, #4] - str r0, [sp, #0xc] - bl IncrementEntityPixelPosXY - mov r0, fp - bl SinAbs4096 - mov r1, #0xc - mul r1, r0, r1 - ldr r0, [sp, #0xc] - ldr r3, [sp, #0x1c] - str r1, [r0, #0x1c] - ldr r0, [sp, #0x18] - add r1, sp, #0xbc - add r0, r1, r0 - mov r1, #0 - str r1, [sp] - ldr r1, [sp, #0x10] - mov r2, #1 - bl DisplayItem -_023466E0: - add r8, r8, #1 -_023466E4: - cmp r8, sb - blt _0234665C - mov r0, #0x13 - bl AdvanceFrame - tst r5, #3 - addeq r6, r6, #1 - add r5, r5, #1 - add fp, fp, #0x55 - and r6, r6, #7 - cmp r5, #0x18 - blt _0234664C - mov r8, #0 - add r6, sp, #0x42 - mov fp, r8 - mov r5, #6 - b _023467B8 -_02346724: - mov r1, r8, lsl #2 - ldrsh r0, [r6, r1] - cmp r0, #0 - blt _023467B4 - add r1, r6, r1 - ldrsh r1, [r1, #2] - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #3 - bne _02346784 - cmp r7, #0 - beq _023467B4 - mov r0, fp - mov r1, #0x40000 - bl SetPreprocessorArgsIdVal - ldr r2, _023467D4 ; =ov29_023531BC - mov r0, #0 - mov r1, sl - bl SubstitutePlaceholderItemTags - ldr r0, [sp, #4] - ldr r1, _023467D8 ; =0x00000BDC - bl LogMessageByIdWithPopupCheckUser - b _023467B4 -_02346784: - mla r1, r8, r5, sl - add r0, r6, r8, lsl #2 - mov r2, #1 - bl SpawnItem -#ifndef JAPAN - mov r0, r8, lsl #2 - add r1, r6, r8, lsl #2 - ldrsh r0, [r6, r0] - ldrsh r1, [r1, #2] - bl DrawMinimapTile -#endif - add r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 -_023467B4: - add r8, r8, #1 -_023467B8: - cmp r8, sb - blt _02346724 - mov r0, r4 -_023467C4: - add sp, sp, #0x3ec - add sp, sp, #0x400 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define OV29_02346344_OFFSET -0x2C1 -#else -#define OV29_02346344_OFFSET 0 -#endif -_023467D0: .word 0x00000BDD + OV29_02346344_OFFSET -_023467D4: .word ov29_023531BC -_023467D8: .word 0x00000BDC + OV29_02346344_OFFSET -_023467DC: .word 0x00000BDE + OV29_02346344_OFFSET -_023467E0: .word DUNGEON_PTR - arm_func_end ov29_02346344 diff --git a/asm/overlay_29_02345AD8.s b/asm/overlay_29_02345AD8.s new file mode 100644 index 00000000..0aa727fa --- /dev/null +++ b/asm/overlay_29_02345AD8.s @@ -0,0 +1,954 @@ + .include "asm/macros.inc" + .include "overlay_29_02345AD8.inc" + + .text + + arm_func_start SpawnDroppedItem +SpawnDroppedItem: ; 0x02345AD8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + mov r8, r1 + mov sb, r0 + ldrsh r0, [r8, #4] + ldrsh r1, [r8, #6] + mov r7, r2 + mov r4, r3 + ldr r6, [sp, #0x38] + bl GetTile + ldr r0, [r0, #0x10] + mov r5, #0 + cmp r0, #0 + beq _02345B5C + ldr r0, [r0] + cmp r0, #2 + bne _02345B5C + ldrb r2, [sp, #0x3c] + mov r0, r8 + add r1, r8, #4 + bl ov29_02347378 + add r0, r8, #4 + bl RevealAttackedTile + ldr r1, _02345D64 ; =0x00000BD8 + mov r0, sb + bl LogMessageByIdWithPopupCheckUser + ldrb r0, [r7] + tst r0, #1 + movne r0, #1 + moveq r0, r5 + tst r0, #0xff + moveq r0, #0 + beq _02345D5C +_02345B5C: + ldrsh r0, [r8, #4] + cmp r4, #0 + movne r4, #0 + strh r0, [sp, #0xc] + ldrsh r0, [r8, #6] + ldrh r1, [sp, #0xc] + ldr fp, _02345D68 ; =DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST + strh r0, [sp, #0xe] + ldrh r0, [sp, #0xe] + strh r1, [sp, #8] + moveq r4, #1 + strh r0, [sp, #0xa] +_02345B8C: + mov r0, r4, lsl #2 + ldrsh r3, [fp, r0] + cmp r3, #0x63 + moveq r5, #0 + beq _02345C44 + ldrsh r2, [r8, #4] + add r0, fp, r0 + ldrsh r1, [r0, #2] + add r0, r2, r3 + strh r0, [sp, #0xc] + ldrsh r2, [r8, #6] + ldrsh r0, [sp, #0xc] + add r1, r2, r1 + strh r1, [sp, #0xe] + ldrsh r1, [sp, #0xe] + bl GetTile + mov sl, r0 + ldrh r0, [sl] + tst r0, #3 + beq _02345C3C + tst r0, #0x200 + ldreq r0, [sl, #0x10] + cmpeq r0, #0 + bne _02345C3C + ldrb r2, [sp, #0x3c] + add r1, sp, #0xc + mov r0, r8 + bl ov29_02347378 + ldrh r0, [sl] + ldrh r2, [sp, #0xc] + ldrh r1, [sp, #0xe] + and r0, r0, #3 + cmp r0, #3 + strh r2, [sp, #8] + strh r1, [sp, #0xa] + moveq r5, #1 + beq _02345C44 + add r0, sp, #0xc + mov r1, r7 + mov r2, #1 + bl SpawnItem + cmp r0, #0 + movne r5, #1 + b _02345C44 +_02345C3C: + add r4, r4, #1 + b _02345B8C +_02345C44: + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02345D6C ; =ov29_023531BC + mov r1, r7 + mov r0, #0 + bl SubstitutePlaceholderItemTags + cmp r5, #0 + beq _02345CF4 + ldrsh r0, [sp, #0xc] + ldrsh r1, [sp, #0xe] + bl DrawMinimapTile + ldrsh r0, [sp, #0xc] + ldrsh r1, [sp, #0xe] + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _02345D58 +_02345C94: ; jump table + b _02345CCC ; case 0 + b _02345CA4 ; case 1 + b _02345CB8 ; case 2 + b _02345CE0 ; case 3 +_02345CA4: + ldr r2, _02345D70 ; =0x00000BD9 + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown + b _02345D58 +_02345CB8: + ldr r2, _02345D74 ; =0x00000BDA + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown + b _02345D58 +_02345CCC: + ldr r2, _02345D78 ; =0x00000BDB + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown + b _02345D58 +_02345CE0: + ldr r2, _02345D7C ; =0x00000BDF + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown + b _02345D58 +_02345CF4: + ldrsh r2, [sp, #8] + ldrsh r1, [sp, #0xa] + mov r0, #0x18 + smulbb r2, r2, r0 + smulbb r0, r1, r0 + add r1, r2, #0xc + add r0, r0, #0xc + mov r2, r1, lsl #8 + mov r1, r0, lsl #8 + str r2, [sp] + str r1, [sp, #4] + cmp r6, #0 + beq _02345D40 + ldrsh r0, [r6] + add r0, r2, r0, lsl #8 + str r0, [sp] + ldrsh r0, [r6, #2] + add r0, r1, r0, lsl #8 + str r0, [sp, #4] +_02345D40: + add r0, sp, #0 + bl ov29_022E563C + ldr r2, _02345D80 ; =0x00000BDC + add r1, sp, #0xc + mov r0, sb + bl LogMessageByIdWithPopupCheckUserUnknown +_02345D58: + mov r0, r5 +_02345D5C: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define SPAWN_DROPPED_ITEM_OFFSET -0x2C1 +#else +#define SPAWN_DROPPED_ITEM_OFFSET 0 +#endif +_02345D64: .word 0x00000BD8 + SPAWN_DROPPED_ITEM_OFFSET +_02345D68: .word DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST +_02345D6C: .word ov29_023531BC +_02345D70: .word 0x00000BD9 + SPAWN_DROPPED_ITEM_OFFSET +_02345D74: .word 0x00000BDA + SPAWN_DROPPED_ITEM_OFFSET +_02345D78: .word 0x00000BDB + SPAWN_DROPPED_ITEM_OFFSET +_02345D7C: .word 0x00000BDF + SPAWN_DROPPED_ITEM_OFFSET +_02345D80: .word 0x00000BDC + SPAWN_DROPPED_ITEM_OFFSET + arm_func_end SpawnDroppedItem + + arm_func_start ov29_02345D84 +ov29_02345D84: ; 0x02345D84 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x18 + mov sl, r1 + ldrsh r0, [sl, #4] + ldrsh r1, [sl, #6] + str r2, [sp, #4] + mov sb, r3 + bl GetTile + ldr r0, _02346048 ; =DUNGEON_PTR + mov r4, #0 + ldr r0, [r0] + ldr r1, _0234604C ; =SECONDARY_TERRAIN_TYPES + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x30] +#else + ldrsh r0, [r0, #0xd4] +#endif + mov r7, r4 + mov r8, r4 + ldrb r0, [r1, r0] + mov r6, #1 + mov fp, #0 + cmp r0, #1 + ldrsh r0, [sl, #4] + moveq r7, #1 + ldr r5, _02346050 ; =DISPLACEMENTS_WITHIN_3 + strh r0, [sp, #0x14] + ldrsh r0, [sl, #6] + ldrh r1, [sp, #0x14] + strh r0, [sp, #0x16] + ldrh r0, [sp, #0x16] + strh r1, [sp, #0x10] + strh r0, [sp, #0x12] + b _02345F74 +_02345E00: + mov r0, r6, lsl #2 + ldrsh r0, [r5, r0] + ldrsh r3, [sl, #4] + cmp r0, #0x63 + moveq r6, fp + mov r0, r6, lsl #2 + ldrsh r2, [r5, r0] + add r0, r5, r6, lsl #2 + ldrsh r1, [r0, #2] + add r0, r3, r2 + strh r0, [sp, #0x14] + ldrsh r2, [sl, #6] + ldrsh r0, [sp, #0x14] + moveq r8, #1 + add r1, r2, r1 + strh r1, [sp, #0x16] + ldrsh r1, [sp, #0x16] + bl GetTile + ldrh r1, [r0] + ands r2, r1, #3 + beq _02345F70 + tst r1, #0x200 + bne _02345F70 + ldr r0, [r0, #0x10] + cmp r0, #0 + bne _02345F64 + ldrh r1, [sp, #0x14] + ldrh r0, [sp, #0x16] + cmp r2, #3 + strh r1, [sp, #0x10] + strh r0, [sp, #0x12] + beq _02345F70 + cmp r7, #0 + beq _02345E90 + cmp r2, #2 + beq _02345F70 +_02345E90: + ldr r0, _02346048 ; =DUNGEON_PTR + ldrsh r2, [sp, #0x14] + ldr r3, [r0] + mov r0, #0x18 + ldrsh r1, [sp, #0x16] + smulbb r2, r2, r0 + smulbb r1, r1, r0 + add r0, r3, #0x1a000 + add r2, r2, #4 + add r1, r1, #4 +#ifdef JAPAN + ldrb fp, [r0, #0x1a1] +#else + ldrb fp, [r0, #0x245] +#endif + mov r5, #0x10000 + mov r7, r2, lsl #8 + mov r8, r1, lsl #8 + mov r0, sl + mov r1, r7 + mov r2, r8 + str r5, [sl, #0x1c] + bl SetEntityPixelPosXY + mov r6, #0 +_02345EE0: + sub r5, r5, #0x800 + mov r2, #0 + str r5, [sl, #0x1c] + mov r0, sl + mov r1, fp + mov r3, r2 + str r2, [sp] + bl DisplayItem + mov r0, #0x13 + bl AdvanceFrame + add r6, r6, #1 + cmp r6, #0x20 + blt _02345EE0 + mov r0, sl + mov r1, r7 + mov r2, r8 + bl SetEntityPixelPosXY + mov r2, #0 + str r2, [sl, #0x1c] + mov r0, sl + mov r1, fp + mov r3, r2 + str r2, [sp] + bl DisplayItem + mov r0, #0x13 + bl AdvanceFrame + ldr r1, [sp, #4] + add r0, sp, #0x14 + mov r2, #1 + bl SpawnItem + cmp r0, #0 + movne r4, #1 + b _02345F7C +_02345F64: + cmp r8, #0 + movne r4, #0 + bne _02345F7C +_02345F70: + add r6, r6, #1 +_02345F74: + cmp r8, #0 + beq _02345E00 +_02345F7C: + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _02346054 ; =ov29_023531BC + ldr r1, [sp, #4] + mov r0, #0 + bl SubstitutePlaceholderItemTags + cmp r4, #0 + beq _02345FC4 + bl PlayDungeonTipSound__022EB66C + ldr r1, _02346058 ; =0x00000B74 + mov r0, #0 + mov r2, #1 + bl DisplayMessage2 + ldr r1, _02346058 ; =0x00000B74 + mov r0, #0 + bl LogMessageByIdQuiet + b _0234603C +_02345FC4: + ldrsh r2, [sp, #0x10] + ldrsh r1, [sp, #0x12] + mov r0, #0x18 + smulbb r2, r2, r0 + smulbb r0, r1, r0 + add r1, r2, #0xc + add r0, r0, #0xc + mov r2, r1, lsl #8 + mov r1, r0, lsl #8 + str r2, [sp, #8] + str r1, [sp, #0xc] + cmp sb, #0 + beq _02346010 + ldrsh r0, [sb] + add r0, r2, r0, lsl #8 + str r0, [sp, #8] + ldrsh r0, [sb, #2] + add r0, r1, r0, lsl #8 + str r0, [sp, #0xc] +_02346010: + add r0, sp, #8 + bl ov29_022E563C + ldr r1, _0234605C ; =0x00000B75 + mov r0, #0 + mov r2, #1 + bl DisplayMessage2 + ldr r1, _0234605C ; =0x00000B75 + mov r0, #0 + bl LogMessageByIdQuiet + mov r0, #0 + b _02346040 +_0234603C: + mov r0, #1 +_02346040: + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02346048: .word DUNGEON_PTR +_0234604C: .word SECONDARY_TERRAIN_TYPES +_02346050: .word DISPLACEMENTS_WITHIN_3 +_02346054: .word ov29_023531BC +#ifdef JAPAN +_02346058: .word 0x00000885 +_0234605C: .word 0x00000886 +#else +_02346058: .word 0x00000B74 +_0234605C: .word 0x00000B75 +#endif + arm_func_end ov29_02345D84 + + arm_func_start TryGenerateUnownStoneDrop +TryGenerateUnownStoneDrop: ; 0x02346060 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + mov r5, r1 + bl IsMarowakTrainingMaze + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r5 + bl IsUnown + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, _023460D8 ; =UNOWN_STONE_DROP_CHANCE + ldrsh r0, [r0] + bl DungeonRandOutcome__022EAB20 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + sub r0, r5, #0xc9 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + add r0, r0, #0x190 + mov r1, r0, lsl #0x10 + mov r0, r4 + mov r1, r1, asr #0x10 + mov r2, #0 + mov r3, #2 + bl GenerateItem + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023460D8: .word UNOWN_STONE_DROP_CHANCE + arm_func_end TryGenerateUnownStoneDrop + + arm_func_start ov29_023460DC +ov29_023460DC: ; 0x023460DC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x18 + mov r7, r0 + mov r4, r1 + mov r6, r2 + mov r5, r3 + bl ov29_022FB51C + cmp r0, #0 + beq _02346134 + bl IsCurrentFixedRoomBossFight + cmp r0, #0 + bne _02346134 + bl IsMarowakTrainingMaze + cmp r0, #0 + bne _02346134 + mov r0, r4 + bl EntityIsValid__02345698 + cmp r0, #0 + beq _02346134 + ldr r0, [r4] + cmp r0, #1 + beq _0234613C +_02346134: + mov r0, #0 + b _02346330 +_0234613C: + ldr r4, [r4, #0xb4] + add r1, sp, #0 + ldrsh r0, [r4, #2] + bl GetTreasureBoxChances + cmp r5, #0 + ble _02346184 + ldr r1, _02346338 ; =ov10_022C48EC + mov lr, #0 + add r3, sp, #0 +_02346160: + mov ip, lr, lsl #1 + ldrsh r2, [r3, ip] + add lr, lr, #1 + cmp r2, #0 + ldrnesh r0, [r1, ip] + mlane r0, r5, r0, r2 + strneh r0, [r3, ip] + cmp lr, #4 + blt _02346160 +_02346184: + mov r2, #0 + mov r1, r2 + add r0, sp, #8 +_02346190: + str r1, [r0, r2, lsl #2] + add r2, r2, #1 + cmp r2, #4 + blt _02346190 + ldrsh r0, [sp] + mov ip, #1 + add r5, sp, #0 + str r0, [sp, #8] + add r2, sp, #8 +_023461B4: + mov r3, ip, lsl #1 + add r1, r2, ip, lsl #2 + ldrsh r3, [r5, r3] + ldr r1, [r1, #-4] + add r1, r1, r3 + str r1, [r2, ip, lsl #2] + add ip, ip, #1 + cmp ip, #4 + add r0, r0, r3 + blt _023461B4 + bl DungeonRandInt + ldr r1, [sp, #8] + cmp r1, #0 + beq _023461F4 + cmp r0, r1 + bge _023461FC +_023461F4: + mov r0, #0 + b _02346330 +_023461FC: + ldr r1, [sp, #0xc] + cmp r0, r1 + bge _0234626C + mov r5, #0 + mov r4, r5 + cmp r6, #0 + beq _02346230 + mov r0, #0x64 + bl DungeonRandInt + ldr r1, _0234633C ; =ov10_022C44C8 + ldrsh r1, [r1] + cmp r1, r0 + movlt r5, #1 +_02346230: + cmp r5, #0 + movne r5, #0x67 + bne _02346310 + ldr r0, _02346340 ; =DUNGEON_PTR + ldr r0, [r0] + add r5, r0, #0x348 + add r0, r5, #0x400 + bl GetMissionRank__0204FAE0 + mov r1, r0 + cmp r1, #0xf + movgt r1, #0xf + add r0, r5, #0x400 + bl RetrieveFromItemList1 + mov r5, r0 + b _02346310 +_0234626C: + ldr r1, [sp, #0x10] + cmp r0, r1 + ldrsh r0, [r4, #2] + bge _023462C8 + mov r1, #0 + bl GetExclusiveItem + movs r5, r0 + mov r4, #1 + bne _02346310 + ldr r0, _02346340 ; =DUNGEON_PTR + ldr r0, [r0] + ldr r0, [r0, #0x7cc] + cmp r0, #0 + moveq r0, #0x6e + movne r0, #0x6a + bl DungeonRandInt + mov r0, r0, lsl #0x12 + mov r0, r0, asr #0x10 + add r0, r0, #0x3e + add r0, r0, #0x200 + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + b _02346310 +_023462C8: + mov r1, #1 + bl GetExclusiveItem + movs r5, r0 + mov r4, #2 + bne _02346310 + ldr r0, _02346340 ; =DUNGEON_PTR + ldr r0, [r0] + ldr r0, [r0, #0x7cc] + cmp r0, #0 + moveq r0, #0x6e + movne r0, #0x6a + bl DungeonRandInt + mov r0, r0, lsl #0x12 + mov r0, r0, asr #0x10 + add r0, r0, #0x3f + add r0, r0, #0x200 + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 +_02346310: + mov r0, r4 + bl ov29_02344BF8 + mov r1, r0 + mov r0, r7 + mov r2, r5 + mov r3, #2 + bl GenerateItem + mov r0, #1 +_02346330: + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02346338: .word ov10_022C48EC +_0234633C: .word ov10_022C44C8 +_02346340: .word DUNGEON_PTR + arm_func_end ov29_023460DC + + arm_func_start ov29_02346344 +ov29_02346344: ; 0x02346344 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x3ec + sub sp, sp, #0x400 + mov r4, #0 + str r0, [sp, #4] + str r1, [sp, #8] + ldr sb, [sp, #0x810] + ldr r8, [sp, #0x814] + ldr r7, [sp, #0x818] + mov fp, r2 + mov sl, r3 + mov r1, r4 + mov r6, r4 + add r0, sp, #0x24 +_0234637C: + strb r6, [r0, r1] + add r1, r1, #1 + cmp r1, #0x1e + blt _0234637C + b _0234647C +_02346390: + ldrsh r1, [fp] + ldrsh r0, [fp, #2] + mov r5, #0 + strh r1, [sp, #0x20] + str r5, [sp, #0x14] + strh r0, [sp, #0x22] +_023463A8: + cmp r5, #0x1e + bge _02346454 + mov r2, r5, lsl #2 + ldrsh r0, [r8, r2] + cmp r0, #0x63 + beq _02346454 + add r1, sp, #0x24 + ldrb r1, [r1, r5] + cmp r1, #0 + bne _0234644C + add r1, r8, r2 + ldrsh r1, [r1, #2] + ldrsh r3, [fp] + ldrsh r2, [fp, #2] + add r3, r3, r0 + add r0, r2, r1 + strh r3, [sp, #0x20] + strh r0, [sp, #0x22] + ldrsh r0, [sp, #0x20] + ldrsh r1, [sp, #0x22] + bl GetTile + ldrh r1, [r0] + tst r1, #3 + beq _0234644C + tst r1, #0x200 + ldreq r0, [r0, #0x10] + cmpeq r0, #0 + bne _0234644C + ldrh r1, [sp, #0x20] + add r0, sp, #0x42 + mov r2, r6, lsl #2 + strh r1, [r0, r2] + mov r1, #1 + ldrh r3, [sp, #0x22] + str r1, [sp, #0x14] + mov r2, r1 + add r1, sp, #0x24 + add r0, r0, r6, lsl #2 + strb r2, [r1, r5] + strh r3, [r0, #2] + b _02346454 +_0234644C: + add r5, r5, #1 + b _023463A8 +_02346454: + ldr r0, [sp, #0x14] + cmp r0, #0 + bne _02346478 + add r0, sp, #0x42 + mov r1, r6, lsl #2 + mvn r2, #0 + strh r2, [r0, r1] + add r0, r0, r6, lsl #2 + strh r2, [r0, #2] +_02346478: + add r6, r6, #1 +_0234647C: + cmp r6, sb + blt _02346390 + mov r1, #0 + mov r5, r1 + mov r8, r1 + add fp, sp, #0x42 + b _023465B4 +_02346498: + mov r0, r8, lsl #2 + ldrsh r2, [fp, r0] + cmp r2, #0 + bge _023464C4 + mov r0, #0xb8 + mul r3, r8, r0 + mov r2, #0 + add r0, sp, #0xbc + str r2, [r0, r3] + mov r5, #1 + b _023465B0 +_023464C4: + mov r1, #0xb8 + mul r3, r8, r1 + add r1, sp, #0xbc + mov r2, #3 + str r2, [r1, r3] + add r6, r1, r3 + mov r1, #0 + strb r1, [r6, #0x24] + mov r1, #1 + strb r1, [r6, #0x20] + mov r1, #0 + strb r1, [r6, #0x22] + mov r1, #6 + mla r1, r8, r1, sl + str r1, [r6, #0xb4] + add r1, fp, r0 + ldrh r2, [fp, r0] + ldrh r1, [r1, #2] + mov r0, r6 + strh r2, [r6, #4] + strh r1, [r6, #6] + ldr r1, [sp, #8] + ldrsh r2, [r1] + ldrsh r3, [r1, #2] + mov r1, #0x18 + smulbb r1, r2, r1 + mov r2, #0x18 + smulbb r2, r3, r2 + add r1, r1, #4 + add r2, r2, #4 + mov r1, r1, lsl #8 + mov r2, r2, lsl #8 + bl SetEntityPixelPosXY + mov r0, #0 + strh r0, [r6, #0x26] + mov r0, r8, lsl #2 + ldrsh r3, [fp, r0] + mov r1, #0x18 + mov r0, r1 + smulbb r0, r3, r0 + ldr r2, [r6, #0xc] + add r0, r0, #4 + rsb r0, r2, r0, lsl #8 + bl _s32_div_f + add r1, sp, #0x6c + str r0, [r1, r8, lsl #3] + add r0, fp, r8, lsl #2 + ldrsh r3, [r0, #2] + mov r1, #0x18 + mov r0, r1 + smulbb r0, r3, r0 + ldr r2, [r6, #0x10] + add r0, r0, #4 + rsb r0, r2, r0, lsl #8 + bl _s32_div_f + add r1, sp, #0x6c + add r1, r1, r8, lsl #3 + str r0, [r1, #4] + mov r1, #1 +_023465B0: + add r8, r8, #1 +_023465B4: + cmp r8, sb + blt _02346498 + cmp r1, #0 + bne _02346614 + cmp r7, #0 + beq _0234660C + cmp sb, #2 + blt _023465E4 + ldr r1, _023467D0 ; =0x00000BDD + ldr r0, [sp, #4] + bl LogMessageByIdWithPopupCheckUser + b _0234660C +_023465E4: + mov r0, #0 + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _023467D4 ; =ov29_023531BC + mov r1, sl + mov r0, #0 + bl SubstitutePlaceholderItemTags + ldr r1, _023467D8 ; =0x00000BDC + ldr r0, [sp, #4] + bl LogMessageByIdWithPopupCheckUser +_0234660C: + mov r0, #0 + b _023467C4 +_02346614: + cmp r5, #0 + cmpne r7, #0 + beq _0234662C + ldr r1, _023467DC ; =0x00000BDE + ldr r0, [sp, #4] + bl LogMessageByIdWithPopupCheckUser +_0234662C: + ldr r0, _023467E0 ; =DUNGEON_PTR + mov r6, #0 + ldr r0, [r0] + mov fp, r6 + add r0, r0, #0x1a000 +#ifdef JAPAN + ldrb r0, [r0, #0x1a1] +#else + ldrb r0, [r0, #0x245] +#endif + mov r5, r6 + str r0, [sp, #0x10] +_0234664C: + and r0, r6, #0xff + mov r8, #0 + str r0, [sp, #0x1c] + b _023466E4 +_0234665C: + mov r0, #0xb8 + mul r0, r8, r0 + add r1, sp, #0xbc + str r0, [sp, #0x18] + add r0, r1, r0 + bl EntityIsValid__02345698 + cmp r0, #0 + beq _023466E0 + mov r1, #0xb8 + add r0, sp, #0xbc + mla r0, r8, r1, r0 + add r2, sp, #0x6c + add r1, sp, #0x6c + add r2, r2, r8, lsl #3 + ldr r1, [r1, r8, lsl #3] + ldr r2, [r2, #4] + str r0, [sp, #0xc] + bl IncrementEntityPixelPosXY + mov r0, fp + bl SinAbs4096 + mov r1, #0xc + mul r1, r0, r1 + ldr r0, [sp, #0xc] + ldr r3, [sp, #0x1c] + str r1, [r0, #0x1c] + ldr r0, [sp, #0x18] + add r1, sp, #0xbc + add r0, r1, r0 + mov r1, #0 + str r1, [sp] + ldr r1, [sp, #0x10] + mov r2, #1 + bl DisplayItem +_023466E0: + add r8, r8, #1 +_023466E4: + cmp r8, sb + blt _0234665C + mov r0, #0x13 + bl AdvanceFrame + tst r5, #3 + addeq r6, r6, #1 + add r5, r5, #1 + add fp, fp, #0x55 + and r6, r6, #7 + cmp r5, #0x18 + blt _0234664C + mov r8, #0 + add r6, sp, #0x42 + mov fp, r8 + mov r5, #6 + b _023467B8 +_02346724: + mov r1, r8, lsl #2 + ldrsh r0, [r6, r1] + cmp r0, #0 + blt _023467B4 + add r1, r6, r1 + ldrsh r1, [r1, #2] + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #3 + bne _02346784 + cmp r7, #0 + beq _023467B4 + mov r0, fp + mov r1, #0x40000 + bl SetPreprocessorArgsIdVal + ldr r2, _023467D4 ; =ov29_023531BC + mov r0, #0 + mov r1, sl + bl SubstitutePlaceholderItemTags + ldr r0, [sp, #4] + ldr r1, _023467D8 ; =0x00000BDC + bl LogMessageByIdWithPopupCheckUser + b _023467B4 +_02346784: + mla r1, r8, r5, sl + add r0, r6, r8, lsl #2 + mov r2, #1 + bl SpawnItem +#ifndef JAPAN + mov r0, r8, lsl #2 + add r1, r6, r8, lsl #2 + ldrsh r0, [r6, r0] + ldrsh r1, [r1, #2] + bl DrawMinimapTile +#endif + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 +_023467B4: + add r8, r8, #1 +_023467B8: + cmp r8, sb + blt _02346724 + mov r0, r4 +_023467C4: + add sp, sp, #0x3ec + add sp, sp, #0x400 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define OV29_02346344_OFFSET -0x2C1 +#else +#define OV29_02346344_OFFSET 0 +#endif +_023467D0: .word 0x00000BDD + OV29_02346344_OFFSET +_023467D4: .word ov29_023531BC +_023467D8: .word 0x00000BDC + OV29_02346344_OFFSET +_023467DC: .word 0x00000BDE + OV29_02346344_OFFSET +_023467E0: .word DUNGEON_PTR + arm_func_end ov29_02346344 diff --git a/include/dungeon_util_2.h b/include/dungeon_util_2.h index 0ae3c635..d5615404 100644 --- a/include/dungeon_util_2.h +++ b/include/dungeon_util_2.h @@ -5,5 +5,9 @@ // Checks if a monster can target a position. This function just calls IsPositionInSight using the position of the user as the origin. bool8 CanTargetPosition(struct entity *monster, struct position *position); +void PopulateActiveMonsterPtrs(void); +s32 GetTeamMemberIndex(struct entity *entity); +void GetMonsterOrTrapName(char *buf, struct entity *entity, u32 param_3); +void SubstitutePlaceholderStringTags(s32 pos, struct entity* entity, u32 param_3); #endif //PMDSKY_DUNGEON_UTIL_2_H diff --git a/include/overlay_29_022E3F20.h b/include/overlay_29_022E3F20.h index aa0064c4..48de6756 100644 --- a/include/overlay_29_022E3F20.h +++ b/include/overlay_29_022E3F20.h @@ -3,6 +3,11 @@ #include "dungeon_mode.h" +void UpdateStatusIconFlags(struct entity *entity); +void PlayQuestionMarkEffect(struct entity *entity); +void PlayExclamationPointEffect__022E47D4(struct entity *entity); +void ov29_022E3E74(struct entity *entity); +void PlayExclamationPointEffect__022E4880(struct entity *entity); void ov29_022E3F20(void); void ov29_022E3F24(struct entity *entity); void ov29_022E3F74(void); diff --git a/include/overlay_29_022EC7E8.h b/include/overlay_29_022EC7E8.h new file mode 100644 index 00000000..7487d4b8 --- /dev/null +++ b/include/overlay_29_022EC7E8.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_022EC7E8_H +#define PMDSKY_OVERLAY_29_022EC7E8_H + +#include "dungeon_mode.h" + +bool8 IsFloorOver(void); + +#endif //PMDSKY_OVERLAY_29_022EC7E8_H diff --git a/include/overlay_29_023061A8.h b/include/overlay_29_023061A8.h new file mode 100644 index 00000000..8c9397d3 --- /dev/null +++ b/include/overlay_29_023061A8.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_023061A8_H +#define PMDSKY_OVERLAY_29_023061A8_H + +#include "dungeon_mode.h" + +void EndBurnClassStatus(struct entity *user, struct entity *target); + +#endif //PMDSKY_OVERLAY_29_023061A8_H diff --git a/include/overlay_29_02306728.h b/include/overlay_29_02306728.h new file mode 100644 index 00000000..13011eaa --- /dev/null +++ b/include/overlay_29_02306728.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_02306728_H +#define PMDSKY_OVERLAY_29_02306728_H + +#include "dungeon_mode.h" + +void EndCurseClassStatus(struct entity *user, struct entity *target, u8 next_curse_class_status_being_applied, bool8 log_message); + +#endif //PMDSKY_OVERLAY_29_02306728_H diff --git a/include/overlay_29_02336F4C.h b/include/overlay_29_02336F4C.h new file mode 100644 index 00000000..980aefd1 --- /dev/null +++ b/include/overlay_29_02336F4C.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_02336F4C_H +#define PMDSKY_OVERLAY_29_02336F4C_H + +#include "dungeon_mode.h" + +void UpdateTrapsVisibility(void); + +#endif //PMDSKY_OVERLAY_29_02336F4C_H diff --git a/include/overlay_29_0233E43C.h b/include/overlay_29_0233E43C.h index 16a08bd2..dfa103b9 100644 --- a/include/overlay_29_0233E43C.h +++ b/include/overlay_29_0233E43C.h @@ -3,9 +3,10 @@ #include "overlay_29_0233C9E8.h" -void CreateHallway(s32 arg1, s32 arg2, s32 arg3, s32 arg4, bool8 arg5, s32 arg6, s32 arg7); void CreateGridCellConnections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, s32 grid_size_y, s32 *arg4, s32 *arg5, bool8 arg6); +void GenerateRoomImperfections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, s32 grid_size_y); +void CreateHallway(s32 x, s32 y, s32 end_x, s32 end_y, bool8 vertical, s32 turn_x, s32 turn_y); #endif //PMDSKY_OVERLAY_29_0233E43C_H diff --git a/include/overlay_29_02345A3C.h b/include/overlay_29_02345A3C.h new file mode 100644 index 00000000..e6151dfa --- /dev/null +++ b/include/overlay_29_02345A3C.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_02345A3C_H +#define PMDSKY_OVERLAY_29_02345A3C_H + +#include "dungeon_mode.h" + +bool8 SpawnDroppedItemWrapper(struct entity *entity, struct position *pos, struct item *item, u32 param_4); + +#endif //PMDSKY_OVERLAY_29_02345A3C_H diff --git a/main.lsf b/main.lsf index 5732f772..2da6b02e 100644 --- a/main.lsf +++ b/main.lsf @@ -802,7 +802,7 @@ Overlay OVY_29 Object src/overlay_29_022E272C.o Object src/dungeon_visibility.o Object src/dungeon_util_2.o - Object asm/overlay_29_022E2978.o + Object asm/overlay_29_022E34A8.o Object src/dg_camera.o Object asm/overlay_29_022E335C.o Object src/dg_effect.o @@ -862,6 +862,8 @@ Overlay OVY_29 Object asm/overlay_29_022EBCE8.o Object src/overlay_29_022EC608.o Object asm/overlay_29_022EC62C.o + Object src/overlay_29_022EC7E8.o + Object asm/overlay_29_022EC85C.o Object src/overlay_29_022ECDC0.o Object asm/overlay_29_022ECDE4.o Object src/overlay_29_022ECF44.o @@ -967,6 +969,10 @@ Overlay OVY_29 Object asm/overlay_29_023055B0.o Object src/overlay_29_02305C04.o Object asm/overlay_29_02305C28.o + Object src/overlay_29_023061A8.o + Object asm/overlay_29_02306258.o + Object src/overlay_29_02306728.o + Object asm/overlay_29_023068C4.o Object src/overlay_29_02307EF8.o Object asm/overlay_29_02307F4C.o Object src/dungeon_ai_leader.o @@ -1205,6 +1211,8 @@ Overlay OVY_29 Object asm/overlay_29_02336224.o Object src/overlay_29_02336428.o Object asm/overlay_29_02336450.o + Object src/overlay_29_02336F4C.o + Object asm/overlay_29_0233711C.o Object src/overlay_29_02337CA8.o Object asm/overlay_29_02337CCC.o Object src/dungeon_map_access_1.o @@ -1229,7 +1237,7 @@ Overlay OVY_29 Object src/overlay_29_0233C9E8.o Object asm/overlay_29_0233CF84.o Object src/overlay_29_0233E43C.o - Object asm/overlay_29_0233ED34.o + Object asm/overlay_29_0233F424.o Object src/overlay_29_02340CAC.o Object asm/overlay_29_02340CE4.o Object src/dungeon_generation.o @@ -1245,6 +1253,8 @@ Overlay OVY_29 Object asm/overlay_29_02344BF8.o Object src/overlay_29_02345698.o Object asm/overlay_29_023456BC.o + Object src/overlay_29_02345A3C.o + Object asm/overlay_29_02345AD8.o Object src/dungeon_items.o Object asm/overlay_29_02346834.o Object src/dungeon_projectile_throw.o diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index ee47a624..05abac36 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -15,6 +15,7 @@ #include "overlay_29_022FB538.h" #include "status_checks.h" #include "targeting.h" +#include "dungeon_util_2.h" #ifdef JAPAN #define CANNOT_USE_ITEM_MESSAGE 0xB2D @@ -27,7 +28,6 @@ extern struct dungeon *DUNGEON_PTR[]; extern void EndFrozenClassStatus(struct entity *user, struct entity *target, bool8 log); -extern void SubstitutePlaceholderStringTags(s32 slot, struct entity *entity, u32 param_3); extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); void RunMonsterAi(struct entity *monster, u32 unused) diff --git a/src/dungeon_projectile_throw.c b/src/dungeon_projectile_throw.c index dd89c843..058b1cea 100644 --- a/src/dungeon_projectile_throw.c +++ b/src/dungeon_projectile_throw.c @@ -11,6 +11,7 @@ #include "MSL_C/stdlib.h" #include "moves_1.h" #include "overlay_29_02344AF8.h" +#include "dungeon_util_2.h" #ifdef JAPAN #define CURVED_PROJECTILE_LOG_MESSAGE_1 0x920 @@ -32,11 +33,10 @@ extern bool8 DisplayItem(struct entity *item, bool8 hallucinate, u8 on_floor, u8 extern void AdvanceFrame(u32 param_1); extern bool8 TwoTurnMoveForcedMiss(struct entity *target, struct move *move); extern bool8 DoesProjectileHitTarget(struct entity *user, struct entity *target); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void ChangeMonsterAnimationToHurt(struct entity *monster, u32 direction); extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); extern bool8 TryEndPetrifiedOrSleepStatus(struct entity *user, struct entity *target); -extern void SpawnDroppedItem(struct entity *entity, struct entity *item_entity, struct item *item, bool8 param_4, struct position *dir_xy, u32 param_6); +extern bool8 SpawnDroppedItem(struct entity *entity, struct entity *item_entity, struct item *item, bool8 param_4, struct position *dir_xy, u32 param_6); bool8 ItemIsActive__02347B50(struct entity *entity, enum item_id item_id) { diff --git a/src/dungeon_util_2.c b/src/dungeon_util_2.c index f7926c55..06609577 100644 --- a/src/dungeon_util_2.c +++ b/src/dungeon_util_2.c @@ -1,8 +1,110 @@ #include "dungeon_util_2.h" #include "dungeon_pokemon_attributes_1.h" #include "dungeon_range.h" +#include "dungeon.h" +#include "dg_object.h" +#include "main_0200C4FC.h" +#include "main_0202593C.h" +#include "overlay_29_023000E4.h" +#include "overlay_29_0234B024.h" + +extern struct dungeon *DUNGEON_PTR; +extern u8 *strcpy(u8 *dest, const u8 *src); +extern void GetTrapName(char *buf, enum trap_id trap_id); +extern void PrepareItemForPrinting2(struct preprocessor_args *preprocessor_args, s32 pos, struct item *item); +extern void SubstitutePlaceholderTrapTags(struct preprocessor_args *preprocessor_args, s32 pos, u32 trap_id); +extern void SetPreprocessorArgsStringToName(struct preprocessor_args *preprocessor_args, s32 pos, struct monster *monster, u32 param_4, u8 name_type); bool8 CanTargetPosition(struct entity *monster, struct position *position) { return IsPositionInSight(&monster->pos, position, HasDropeyeStatus(monster)); } + +void PopulateActiveMonsterPtrs(void) +{ + s32 i; + s32 n; + struct entity *entity; + + n = 0; + for (i = 0; i < MAX_TEAM_MEMBERS; i++) + { + entity = DUNGEON_PTR->monster_slots.party_members[i]; + if (EntityIsValid__022E1A1C(entity)) + { + DUNGEON_PTR->active_monster_ptrs[n] = entity; + n++; + } + } + for (i = 0; i < DUNGEON_MAX_WILD_POKEMON; i++) + { + entity = DUNGEON_PTR->monster_slots.wild_pokemon[i]; + if (EntityIsValid__022E1A1C(entity)) + { + DUNGEON_PTR->active_monster_ptrs[n] = entity; + n++; + } + } + for (; n < DUNGEON_MAX_POKEMON; n++) + { + DUNGEON_PTR->active_monster_ptrs[n] = NULL; + } +} + +s32 GetTeamMemberIndex(struct entity *entity) +{ + s32 i; + + for (i = 0; i < MAX_TEAM_MEMBERS; i++) + { + if (entity == DUNGEON_PTR->monster_slots.party_members[i]) + return i; + } + return -1; +} + +void GetMonsterOrTrapName(char *buf, struct entity *entity, u32 param_3) +{ + switch (entity->type) + { + case ENTITY_MONSTER: + GetMonsterName(buf, (struct monster *)entity->info); + break; + case ENTITY_TRAP: + GetTrapName(buf, ((struct trap *)entity->info)->id); + break; + case ENTITY_ITEM: + break; + default: +#ifdef JAPAN + strcpy((u8 *)buf, StringFromId(0xB42)); +#else + strcpy((u8 *)buf, StringFromId(0xA42)); +#endif + break; + } +} + +void SubstitutePlaceholderStringTags(s32 pos, struct entity* entity, u32 param_3) +{ + struct preprocessor_args* args = GetMessageLogPreprocessorArgs(); + + switch (entity->type) { + case ENTITY_MONSTER: + SetPreprocessorArgsStringToName(args, pos, entity->info, param_3, 0); + break; + case ENTITY_ITEM: + PrepareItemForPrinting2(args, pos, entity->info); + break; + case ENTITY_TRAP: + SubstitutePlaceholderTrapTags(args, pos, ((struct trap*)entity->info)->id); + break; + default: +#ifdef JAPAN + args->strings[pos] = (char*)StringFromId(0xB42); +#else + args->strings[pos] = (char*)StringFromId(0xA42); +#endif + break; + } +} diff --git a/src/move_orb_effects.c b/src/move_orb_effects.c index bac7c63f..282bf3ce 100644 --- a/src/move_orb_effects.c +++ b/src/move_orb_effects.c @@ -9,12 +9,13 @@ #include "overlay_29_023118B4.h" #include "overlay_29_02311BF8.h" #include "overlay_29_02344AF8.h" +#include "dungeon_util_2.h" +#include "overlay_29_022E3F20.h" extern u8* AllocateTemp1024ByteBufferFromPool(void); extern void CopyStringFromId(u8* buf, u32 string_id); extern void SetMessageLogPreprocessorArgsString(u32 a, u8 *buf); extern bool8 IsProtectedFromStatDrops(struct entity *user, struct entity *target, bool8 log_message); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void PlayOffensiveStatUpEffect(struct entity *entity, struct StatIndex stat_index); extern void PlayDefensiveStatDownEffect(struct entity *entity, struct StatIndex stat_index); extern void PlayDefensiveStatUpEffect(struct entity *entity, struct StatIndex stat_index); @@ -26,7 +27,6 @@ extern void PlayDefensiveStatMultiplierUpEffect(struct entity *entity, struct St extern void PlayHitChanceUpEffect(struct entity *entity, struct StatIndex stat_index); extern void PlayHitChanceDownEffect(struct entity *entity, struct StatIndex stat_index); extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); -extern void UpdateStatusIconFlags(struct entity *entity); extern void ov29_022E4338(struct entity *); extern void PlayExclamationPointEffect__022E5D4C(struct entity *entity); extern void PlayParalysisEffect(struct entity *entity); @@ -40,7 +40,7 @@ extern void TryActivateQuickFeet(struct entity *attacker ,struct entity *defende extern s32 CalcStatusDuration(struct entity *entity, const s16 *turn_range, bool8 iq_skill_effects); extern bool8 GetExclusiveItemWithEffectFromBag(struct entity *, enum exclusive_item_effect_id effect_id, struct item *item); extern struct preprocessor_args* GetMessageLogPreprocessorArgs(void); -extern void SetPreprocessorArgsStringToName(struct preprocessor_args* preprocessor_args, u8 pos, struct monster* monster, u8 param_4, u8 name_type); +extern void SetPreprocessorArgsStringToName(struct preprocessor_args* preprocessor_args, s32 pos, struct monster* monster, u32 param_4, u8 name_type); extern int CalcSpeedStageWrapper(struct entity* entity); extern int CalcSpeedStage(struct entity *entity, s32 counter_weight); diff --git a/src/overlay_29_022E3F20.c b/src/overlay_29_022E3F20.c index 0b363074..407d012a 100644 --- a/src/overlay_29_022E3F20.c +++ b/src/overlay_29_022E3F20.c @@ -1,10 +1,123 @@ #include "overlay_29_022E3F20.h" +#include "dungeon.h" +#include "dungeon_util_static.h" +#include "dg_effect.h" + +extern struct dungeon *DUNGEON_PTR[]; + +extern void PlaySeByIdIfShouldDisplayEntity(struct entity *entity, s32 se_id); extern s32 GetEffectAnimationWanOffset(s32 id); extern void PlayEffectAnimationEntity(struct entity *entity, s32 id, s32 a, u8 b, s32 c, s32 d, s32 e, s32 f); +extern const u64 STATUS_ICON_ARRAY_SLEEP[]; +extern const u64 STATUS_ICON_ARRAY_BURN[]; +extern const u64 STATUS_ICON_ARRAY_FREEZE[]; +extern const u64 STATUS_ICON_ARRAY_CRINGE[]; +extern const u64 STATUS_ICON_ARRAY_BIDE[]; +extern const u64 STATUS_ICON_ARRAY_REFLECT[]; +extern const u64 STATUS_ICON_ARRAY_CURSE[]; +extern const u64 STATUS_ICON_ARRAY_LEECH_SEED[]; +extern const u64 STATUS_ICON_ARRAY_SURE_SHOT[]; +extern const u64 STATUS_ICON_ARRAY_LONG_TOSS[]; +extern const u64 STATUS_ICON_ARRAY_INVISIBLE[]; +extern const u64 STATUS_ICON_ARRAY_BLINDED[]; +extern const u64 STATUS_ICON_ARRAY_MUZZLED[]; +extern const u64 STATUS_ICON_ARRAY_MIRACLE_EYE[]; +extern const u64 STATUS_ICON_ARRAY_MAGNET_RISE[]; + +void UpdateStatusIconFlags(struct entity *entity) +{ + struct monster *info; + u64 icons; + bool32 show_sleep; + s32 max_hp; + + if (!EntityIsValid__022E37B8(entity)) + return; + + info = GetEntInfo(entity); + icons = 0; + show_sleep = TRUE; + if (info->id == MONSTER_SUDOWOODO || info->id == MONSTER_SUDOWOODO_SECONDARY) { + if (info->sleep_class_status.sleep_turns == 0x7f) + show_sleep = FALSE; + } + if (show_sleep) + icons = icons | STATUS_ICON_ARRAY_SLEEP[info->sleep_class_status.sleep]; + + icons = icons | STATUS_ICON_ARRAY_BURN[info->burn_class_status.burn]; + icons = icons | STATUS_ICON_ARRAY_FREEZE[info->frozen_class_status.freeze]; + icons = icons | STATUS_ICON_ARRAY_CRINGE[info->cringe_class_status.cringe]; + icons = icons | STATUS_ICON_ARRAY_BIDE[info->bide_class_status.bide]; + icons = icons | STATUS_ICON_ARRAY_REFLECT[info->reflect_class_status.reflect]; + icons = icons | STATUS_ICON_ARRAY_CURSE[info->curse_class_status.curse]; + icons = icons | STATUS_ICON_ARRAY_LEECH_SEED[info->leech_seed_class_status.leech_seed]; + icons = icons | STATUS_ICON_ARRAY_SURE_SHOT[info->sure_shot_class_status.sure_shot]; + icons = icons | STATUS_ICON_ARRAY_LONG_TOSS[info->long_toss_class_status.status]; + icons = icons | STATUS_ICON_ARRAY_INVISIBLE[info->invisible_class_status.status]; + icons = icons | STATUS_ICON_ARRAY_BLINDED[info->blinker_class_status.blinded]; + icons = icons | STATUS_ICON_ARRAY_MUZZLED[info->muzzled]; + icons = icons | STATUS_ICON_ARRAY_MIRACLE_EYE[info->miracle_eye]; + icons = icons | STATUS_ICON_ARRAY_MAGNET_RISE[info->magnet_rise]; + + if (info->grudge) + icons |= 0x1000000; + if (info->exposed) + icons |= 0x2000000; + if (!info->is_not_team_member) { + max_hp = info->max_hp_stat + info->max_hp_boost; + if (max_hp > MAX_HP_LIMIT) + max_hp = MAX_HP_LIMIT; + if (info->hp < max_hp / 4) + icons |= 0x2000; + } + if (DUNGEON_PTR[0]->identify_orb_flag) { + if (ItemExists(info->held_item.flags)) + icons |= 0x2000; + } + if (info->stat_modifiers.offensive_multipliers[0] < 0x100 || + info->stat_modifiers.offensive_multipliers[1] < 0x100 || + info->stat_modifiers.defensive_multipliers[0] < 0x100 || + info->stat_modifiers.defensive_multipliers[1] < 0x100 || + info->stat_modifiers.offensive_stages[0] < DEFAULT_STAT_STAGE || + info->stat_modifiers.offensive_stages[1] < DEFAULT_STAT_STAGE || + info->stat_modifiers.defensive_stages[0] < DEFAULT_STAT_STAGE || + info->stat_modifiers.defensive_stages[1] < DEFAULT_STAT_STAGE || + info->stat_modifiers.hit_chance_stages[0] < DEFAULT_STAT_STAGE || + info->stat_modifiers.hit_chance_stages[1] < DEFAULT_STAT_STAGE) + icons |= 0x8000000; + + *(u64 *)&info->status_icons = icons; +} + +void PlayQuestionMarkEffect(struct entity *entity) +{ + PlayEffectAnimationEntity(entity, 0x144, 1, GetEffectAnimationWanOffset(0x144), + 2, 0, -1, 0); +} + +void PlayExclamationPointEffect__022E47D4(struct entity *entity) +{ + PlayEffectAnimationEntity(entity, 0x143, 1, GetEffectAnimationWanOffset(0x143), + 2, 0, -1, 0); +} + +void ov29_022E3E74(struct entity *entity) +{ + PlayEffectAnimationEntity(entity, 0x25, 1, GetEffectAnimationWanOffset(0x25), + 2, 0, -1, 0); + PlaySeByIdIfShouldDisplayEntity(entity, 0x30E); +} + +void PlayExclamationPointEffect__022E4880(struct entity *entity) +{ + PlayEffectAnimationEntity(entity, 0x143, 1, GetEffectAnimationWanOffset(0x143), + 2, 0, -1, 0); +} + void ov29_022E3F20(void) { diff --git a/src/overlay_29_022EC7E8.c b/src/overlay_29_022EC7E8.c new file mode 100644 index 00000000..55931ce3 --- /dev/null +++ b/src/overlay_29_022EC7E8.c @@ -0,0 +1,28 @@ +#include "overlay_29_022EC7E8.h" +#include "dungeon.h" +#include "dg_uty.h" + +extern struct dungeon *DUNGEON_PTR[]; + +bool8 IsFloorOver(void) +{ + if (DUNGEON_PTR[0]->end_floor_no_death_check_flag != 0) + return TRUE; + + if (GetLeader() == NULL) { + DUNGEON_PTR[0]->floor_loop_status = FLOOR_LOOP_LEADER_FAINTED; + return TRUE; + } + + if (DUNGEON_PTR[0]->end_floor_flag == 1) { + DUNGEON_PTR[0]->floor_loop_status = FLOOR_LOOP_NEXT_FLOOR; + return TRUE; + } + + if (DUNGEON_PTR[0]->end_floor_flag == 2) { + DUNGEON_PTR[0]->floor_loop_status = FLOOR_LOOP_NEXT_FLOOR; + return TRUE; + } + + return FALSE; +} diff --git a/src/overlay_29_022F0EDC.c b/src/overlay_29_022F0EDC.c index 715a30e4..74dec6e3 100644 --- a/src/overlay_29_022F0EDC.c +++ b/src/overlay_29_022F0EDC.c @@ -17,6 +17,8 @@ #include "overlay_29_0234928C.h" #include "overlay_29_022FB538.h" #include "position_util.h" +#include "dungeon_util_2.h" +#include "overlay_29_022EC7E8.h" #ifdef JAPAN #define SET_LEADER_ACTION_DATA_OFFSET -0x2C1 @@ -57,10 +59,8 @@ extern s32 GetEntityTouchscreenArea(); extern s32 GetIdleAnimationId(); extern struct entity *GetMonsterInFront(); extern void GetPressedButtons(u32 param_1, u16 *pressed); -extern s32 GetTeamMemberIndex(); extern s32 HasStatusThatPreventsLeaderActing(); extern s32 HideTileGrid(); -extern s32 IsFloorOver(); extern s32 LogItemBlockedByEmbargo(); extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); extern s32 MonsterHasEmbargoStatus(); diff --git a/src/overlay_29_023061A8.c b/src/overlay_29_023061A8.c new file mode 100644 index 00000000..a862fef3 --- /dev/null +++ b/src/overlay_29_023061A8.c @@ -0,0 +1,41 @@ +#include "overlay_29_023061A8.h" +#include "overlay_29_02305C04.h" +#include "dungeon_util_2.h" +#include "overlay_29_022E3F20.h" +#include "dungeon_util_static.h" + +#ifdef JAPAN +#define JPN_MSG_OFFSET -0x2C0 +#else +#define JPN_MSG_OFFSET 0 +#endif + +extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); + +void EndBurnClassStatus(struct entity *user, struct entity *target) +{ + struct monster *entityInfo; + + if (!EntityIsValid__02305C04(target)) + return; + + entityInfo = GetEntInfo(target); + SubstitutePlaceholderStringTags(0, target, 0); + switch (entityInfo->burn_class_status.burn) { + case STATUS_BURN_NONE: + case 5: + break; + case STATUS_BURN_POISONED: + case STATUS_BURN_BADLY_POISONED: + LogMessageByIdWithPopupCheckUserTarget(user, target, 0xc9e + JPN_MSG_OFFSET); + break; + case STATUS_BURN_PARALYSIS: + LogMessageByIdWithPopupCheckUserTarget(user, target, 0xc9c + JPN_MSG_OFFSET); + break; + case STATUS_BURN_BURN: + LogMessageByIdWithPopupCheckUserTarget(user, target, 0xc9d + JPN_MSG_OFFSET); + break; + } + entityInfo->burn_class_status.burn = STATUS_BURN_NONE; + UpdateStatusIconFlags(target); +} diff --git a/src/overlay_29_02306728.c b/src/overlay_29_02306728.c new file mode 100644 index 00000000..931980a0 --- /dev/null +++ b/src/overlay_29_02306728.c @@ -0,0 +1,74 @@ +#include "overlay_29_02306728.h" +#include "overlay_29_02305C04.h" +#include "dungeon_util_2.h" +#include "overlay_29_022E3F20.h" +#include "dungeon.h" +#include "dungeon_util_static.h" + +extern struct dungeon *DUNGEON_PTR[]; + +extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); +extern s32 GetIdleAnimationId(struct entity *entity); +extern int ov29_02304830(); +extern void TryRemoveSnatchedMonsterFromDungeonStruct(struct entity *user, struct entity *target); +extern void ov29_022FB984(struct entity *entity); + +#ifdef JAPAN +#define JPN_MSG_OFFSET -0x2C0 +#else +#define JPN_MSG_OFFSET 0 +#endif + +void EndCurseClassStatus(struct entity *user, struct entity *target, u8 next_curse_class_status_being_applied, bool8 log_message) +{ + struct monster *entityInfo; + + if (!EntityIsValid__02305C04(target)) + return; + + entityInfo = GetEntInfo(target); + SubstitutePlaceholderStringTags(0, target, 0); + + switch (entityInfo->curse_class_status.curse) { + case STATUS_CURSE_NONE: + case 7: + break; + case STATUS_CURSE_CURSED: + if (next_curse_class_status_being_applied != STATUS_CURSE_CURSED && log_message) + LogMessageByIdWithPopupCheckUser(target, 0xc95 + JPN_MSG_OFFSET); + break; + case STATUS_CURSE_SNATCH: + if (next_curse_class_status_being_applied != STATUS_CURSE_SNATCH && log_message) + LogMessageByIdWithPopupCheckUser(target, 0xc96 + JPN_MSG_OFFSET); + TryRemoveSnatchedMonsterFromDungeonStruct(user, target); + break; + case STATUS_CURSE_DECOY: + entityInfo->curse_class_status.curse = STATUS_CURSE_NONE; + ov29_02304830(target, GetIdleAnimationId(target)); + DUNGEON_PTR[0]->decoy_is_active = FALSE; + if (next_curse_class_status_being_applied != STATUS_CURSE_DECOY) { + SubstitutePlaceholderStringTags(0, target, 0); + if (log_message) + LogMessageByIdWithPopupCheckUser(target, 0xca5 + JPN_MSG_OFFSET); + } + break; + case STATUS_CURSE_GASTRO_ACID: + entityInfo->curse_class_status.curse = STATUS_CURSE_NONE; + ov29_022FB984(target); + if (log_message) + LogMessageByIdWithPopupCheckUser(target, 0xcbf + JPN_MSG_OFFSET); + DUNGEON_PTR[0]->activate_artificial_weather_flag = TRUE; + break; + case STATUS_CURSE_HEAL_BLOCK: + if (log_message) + LogMessageByIdWithPopupCheckUser(target, 0xcc2 + JPN_MSG_OFFSET); + break; + case STATUS_CURSE_EMBARGO: + if (log_message) + LogMessageByIdWithPopupCheckUser(target, 0xcc3 + JPN_MSG_OFFSET); + break; + } + + entityInfo->curse_class_status.curse = STATUS_CURSE_NONE; + UpdateStatusIconFlags(target); +} diff --git a/src/overlay_29_02308FBC.c b/src/overlay_29_02308FBC.c index ce16d975..07b0f9da 100644 --- a/src/overlay_29_02308FBC.c +++ b/src/overlay_29_02308FBC.c @@ -43,6 +43,10 @@ #include "overlay_29_022E3F20.h" #include "overlay_29_022E406C.h" #include "overlay_29_0233836C.h" +#include "dungeon_util_2.h" +#include "overlay_29_02345A3C.h" +#include "overlay_29_02306728.h" +#include "overlay_29_02336F4C.h" struct unk_023535DC { u8 field_0x0; @@ -96,7 +100,6 @@ extern bool8 AftermathCheck(struct entity *attacker, struct entity *defender, s3 extern void ChangeMonsterAnimation(struct entity *entity, s32 animation_id, s32 direction); extern void ChangeMonsterAnimationToIdle(struct entity* monster, enum direction_id direction); extern void DisplayAnimatedNumbers(s32 amount, struct entity *entity, bool8 display_sign, s32 number_color); -extern void EndCurseClassStatus(struct entity* user, struct entity* target, u8 next_curse_class_status_being_applied, bool8 log_message); extern void EndInvisibleClassStatus(struct entity* user, struct entity* target, bool8 no_slip_message); extern int EndLeechSeedStatusForAllTargets(); extern bool8 ExclusiveItemEffectIsActiveWithLogging(struct entity* user, struct entity* target, bool8 should_log, s32 message_id, enum exclusive_item_effect_id effect_id); @@ -118,17 +121,13 @@ extern int PlayMissSfx__022E6150(); extern void RemoveHolderForItemInBag(struct item* item); extern void RestorePpAllMovesSetFlags(struct entity* entity); extern void RestoreRandomMovePP(struct entity* user, struct entity* target, s32 pp, bool8 log_message); -extern bool8 SpawnDroppedItemWrapper(struct entity *entity, struct position *pos, struct item *item, u32 param_4); extern void SubInitMonster(struct monster* monster, bool8 flag); -extern void SubstitutePlaceholderStringTags(s32 slot, struct entity *entity, u32 param_3); extern bool8 TryEndPetrifiedOrSleepStatus(struct entity *user, struct entity *target); extern void TryIncreaseHp(struct entity *user, struct entity *target, s32 hp, s32 a, bool8 b); extern bool8 TryRecruit(struct entity *user, struct entity *recruit, void *recruit_info); extern void TrySpawnEnemyItemDrop(struct entity* attacker, struct entity* defender); extern void UnfreezeAnim(struct entity *e); extern void UpdateShopkeeperModeAfterAttack(struct entity* attacker, struct entity* defender); -extern void UpdateStatusIconFlags(struct entity *); -extern void UpdateTrapsVisibility(void); extern s32 abs(s32 n); extern int ov10_022BDC68(); extern int TerminateEffectWrapper(); diff --git a/src/overlay_29_0230BBAC.c b/src/overlay_29_0230BBAC.c index 64439fc4..fb6d1431 100644 --- a/src/overlay_29_0230BBAC.c +++ b/src/overlay_29_0230BBAC.c @@ -24,6 +24,7 @@ #include "run_dungeon_1.h" #include "type_effectiveness.h" #include "weather.h" +#include "dungeon_util_2.h" extern struct dungeon *DUNGEON_PTR; extern u8 GetMonsterGenderVeneer(s16 monster_id); @@ -47,7 +48,6 @@ extern void MultiplyFixedPoint64(struct fixed_point_64 *out, const struct fixed_ extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); extern bool8 UpdateStateFlags(struct monster *info, s32 flag, bool8 value); extern void ResetDamageData(struct unk_02308FE0 *damage_data); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern bool8 ExclusiveItemEffectIsActiveWithLogging(struct entity *user, struct entity *target, bool8 should_log, s32 message_id, enum exclusive_item_effect_id effect_id); extern const u8 ov29_02352984[]; extern const u8 ov29_02352990[]; diff --git a/src/overlay_29_02311010.c b/src/overlay_29_02311010.c index d0d38c5d..85c39318 100644 --- a/src/overlay_29_02311010.c +++ b/src/overlay_29_02311010.c @@ -20,6 +20,9 @@ #include "overlay_29_0233836C.h" #include "overlay_29_0234B024.h" #include "weather.h" +#include "dungeon_util_2.h" +#include "overlay_29_022EC7E8.h" +#include "overlay_29_023061A8.h" #ifdef JAPAN #define MESSAGE_DE6 0xB26 @@ -49,13 +52,11 @@ extern bool8 ov29_022E34A8_EU(struct entity *entity); #endif extern void ApplyDamageAndEffectsWrapper(struct entity *entity, s32 damage, s32 a, s32 b); -extern s32 IsFloorOver(); extern bool8 TryEndPetrifiedOrSleepStatus(struct entity *user, struct entity *target); extern bool8 ExclusiveItemEffectIsActiveWithLogging(struct entity *user, struct entity *target, bool8 should_log, s32 message_id, enum exclusive_item_effect_id effect_id); extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); extern void TryIncreaseHp(struct entity *user, struct entity *target, s32 hp, s32 a, bool8 b); extern void TryWarp(struct entity *user, struct entity *target, s32 a, s32 b); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void MultiplyFixedPoint64(struct fixed_point_64 *out, const struct fixed_point_64 *a, const struct fixed_point_64 *b); extern void EndNegativeStatusConditionWrapper(struct entity *user, struct entity *target, bool8 displayMessage, bool8 fromMove); extern void ov29_022EA370(s32 a, s32 b); @@ -70,7 +71,6 @@ extern void PlayEffectAnimationEntityStandard(struct entity *entity, s32 anim_id extern void ov29_022F42F8(struct entity *entity); extern void EndMagnetRiseStatus(struct entity *user, struct entity *target); extern void TickNoSlipCap(struct entity *entity); -extern void EndBurnClassStatus(struct entity *user, struct entity *target); extern void ov29_022EC62C(struct entity *entity); extern void ov29_022FB718(struct entity *entity); extern void TryActivateBadDreams(struct entity *entity); diff --git a/src/overlay_29_0231CBC8.c b/src/overlay_29_0231CBC8.c index a961a270..118439f9 100644 --- a/src/overlay_29_0231CBC8.c +++ b/src/overlay_29_0231CBC8.c @@ -10,6 +10,8 @@ #include "overlay_29_022EAC7C.h" #include "overlay_29_02344AF8.h" #include "overlay_29_0234BA54.h" +#include "dungeon_util_2.h" +#include "overlay_29_02345A3C.h" #ifdef JAPAN #define MESSAGE_BE6 0x925 @@ -35,10 +37,8 @@ extern void ov29_022FB920(bool8 a); #endif extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void TryIncreaseHp(struct entity *user, struct entity *target, s32 hp, s32 a, bool8 b); extern void EndNegativeStatusConditionWrapper(struct entity *user, struct entity *target, bool8 displayMessage, bool8 fromMove); -extern bool8 SpawnDroppedItemWrapper(struct entity *entity, struct position *pos, struct item *item, u32 a); extern void TryWarp(struct entity *user, struct entity *target, s32 a, s32 b); extern void BoostIQ(struct entity *entity, s16 iq, bool8 a); extern void UpdateShopkeeperModeAfterAttack(struct entity *attacker, struct entity *defender); diff --git a/src/overlay_29_0232D368.c b/src/overlay_29_0232D368.c index 93fbb945..938f5173 100644 --- a/src/overlay_29_0232D368.c +++ b/src/overlay_29_0232D368.c @@ -1,4 +1,5 @@ #include "overlay_29_0232D368.h" +#include "dungeon_util_2.h" #ifdef JAPAN #define GUARD_SWAP_LOG_MESSAGE 0x2495 @@ -7,7 +8,6 @@ #endif extern void LogMessageByIdWithPopupCheckUserTarget(struct entity *user, struct entity *target, u32 message_id); -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void SwapDefensiveStages(struct entity *attacker, struct entity *defender, s32 log_message); extern void SwapDefensiveMultipliers(struct entity *attacker, struct entity *defender, s32 log_message); extern void TryInflictLuckyChantStatus(struct entity *user, struct entity *target); diff --git a/src/overlay_29_02336F4C.c b/src/overlay_29_02336F4C.c new file mode 100644 index 00000000..626d62a5 --- /dev/null +++ b/src/overlay_29_02336F4C.c @@ -0,0 +1,65 @@ +#include "overlay_29_02336F4C.h" +#include "dungeon.h" +#include "overlay_29_02338604.h" + +extern struct dungeon *DUNGEON_PTR[]; +extern const s16 ov29_02352B9C[222]; +extern const s16 ov29_02352D58[222]; +extern u16 *ov29_02336DB0(struct dungeon_generation_info *a, s16 x, s16 y, s16 idx, bool8 can_see_traps, bool8 hallucinating, bool8 bazaar); +extern void sub_02051D8C(s16 x, s16 y, u16 val, s32 a, s32 b); +extern void sub_02051E60(s32, s32); + +void UpdateTrapsVisibility(void) +{ + struct dungeon *dungeon; + u16 *src; + s32 y; + s32 mapx; + s32 mapy; + s32 tx; + s32 ty; + s32 x; + bool8 hallucinating; + bool8 can_see_traps; + bool8 bazaar; + s32 i; + s32 j; + s32 k; + + dungeon = DUNGEON_PTR[0]; + hallucinating = dungeon->display_data.hallucinating; + can_see_traps = dungeon->display_data.can_see_traps; + bazaar = IsSecretBazaar(); + x = dungeon->display_data.camera_pixel_pos.x >> 3; + k = 30 + x; + tx = ov29_02352B9C[k]; + mapx = ov29_02352D58[k]; + for (i = 0; i < 33; i++) { + y = (dungeon->display_data.camera_pixel_pos.y >> 3) - 1; + x &= 0x3F; + ty = ov29_02352B9C[30 + y]; + mapy = ov29_02352D58[30 + y]; + src = ov29_02336DB0(&dungeon->gen_info, mapx, mapy, tx + ty * 3, can_see_traps, + hallucinating, bazaar); + for (j = 0; j < 27; j++) { + y &= 0x1F; + sub_02051D8C(x, y, *src, 1, 0); + src += 3; + y++; + ty++; + if (ty == 3) { + ty = 0; + mapy++; + src = ov29_02336DB0(&dungeon->gen_info, mapx, mapy, tx, can_see_traps, + hallucinating, bazaar); + } + } + x++; + tx++; + if (tx == 3) { + tx = 0; + mapx++; + } + } + sub_02051E60(1, 0); +} diff --git a/src/overlay_29_0233E43C.c b/src/overlay_29_0233E43C.c index 87b0c2e4..a1fa5961 100644 --- a/src/overlay_29_0233E43C.c +++ b/src/overlay_29_0233E43C.c @@ -1,7 +1,12 @@ #include "overlay_29_0233E43C.h" #include "overlay_29_0233C9E8.h" #include "dg_random.h" +#include "dungeon.h" #include "dungeon_map_access.h" +#include "dungeon_util.h" +#include "dungeon_util_static.h" + +extern const bool8 CORNER_CARDINAL_NEIGHBOR_IS_OPEN[4][NUM_DIRECTIONS]; void CreateGridCellConnections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, s32 grid_size_y, s32 *arg4, s32 *arg5, bool8 arg6) { @@ -281,3 +286,292 @@ void CreateGridCellConnections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, } + +void GenerateRoomImperfections(struct unk_0233C9E8 (*grid)[15], s32 grid_size_x, s32 grid_size_y) +{ + s32 x; + s32 y; + s32 counter; + s32 move_x; + s32 move_y; + s32 length; + s32 i; + s32 v; + s32 corner; + s32 dir; + s32 next_x; + s32 next_y; + s32 off_x; + s32 off_y; + s32 found; + const struct tile *tile; + bool8 is_open; + s32 pt_y; + s32 pt_x; + + for (x = 0; x < grid_size_x; x++) { + for (y = 0; y < grid_size_y; y++) { + if (grid[x][y].field_0x8 != 0 || grid[x][y].field_0x11[0] != 0 + || grid[x][y].field_0x11[1] != 0) { + continue; + } + if (grid[x][y].field_0xb == 0 || grid[x][y].field_0xa == 0) { + continue; + } + if (grid[x][y].field_0x9 != 0 || grid[x][y].field_0x10 != 0) { + continue; + } + if (grid[x][y].field_0x11[0xb] == 0) { + continue; + } + if (DungeonRandInt(100) < 60) { + continue; + } + + length = (grid[x][y].field_0x4 - grid[x][y].field_0x0) + + (grid[x][y].field_0x6 - grid[x][y].field_0x2); + length /= 4; + if (length == 0) { + length = 1; + } + + for (counter = 0; counter < length; counter++) { + for (i = 0; i < 2; i++) { + corner = DungeonRandInt(4); + + switch (corner) { + case 0: + default: + pt_x = grid[x][y].field_0x0; + pt_y = grid[x][y].field_0x2; + if (i != 0) { + move_x = 1; + move_y = 0; + } else { + move_x = 0; + move_y = 1; + } + break; + case 1: + pt_x = grid[x][y].field_0x4 - 1; + pt_y = grid[x][y].field_0x2; + if (i != 0) { + move_x = 0; + move_y = 1; + } else { + move_x = -1; + move_y = 0; + } + break; + case 2: + pt_x = grid[x][y].field_0x4 - 1; + pt_y = grid[x][y].field_0x6 - 1; + if (i != 0) { + move_x = -1; + move_y = 0; + } else { + move_x = 0; + move_y = -1; + } + break; + case 3: + pt_x = grid[x][y].field_0x0; + pt_y = grid[x][y].field_0x6 - 1; + if (i != 0) { + move_x = 0; + move_y = -1; + } else { + move_x = 1; + move_y = 0; + } + break; + } + + for (v = 0; v < 10; v++) { + if (pt_x < grid[x][y].field_0x0 || pt_x >= grid[x][y].field_0x4) { + break; + } + if (pt_y < grid[x][y].field_0x2 || pt_y >= grid[x][y].field_0x6) { + break; + } + + if (GetTerrainType(GetTile(pt_x, pt_y)) == TERRAIN_TYPE_NORMAL) { + dir = 0; + while (dir < NUM_DIRECTIONS) { + next_x = pt_x + DIRECTIONS_XY[dir].x; + next_y = pt_y + DIRECTIONS_XY[dir].y; + found = FALSE; + + for (off_y = -1; off_y <= 1; off_y++) { + for (off_x = -1; off_x <= 1; off_x++) { + tile = GetTile(next_x + off_x, next_y + off_y); + + if (GetTerrainType(tile) != TERRAIN_TYPE_NORMAL) { + continue; + } + if (tile->room == CORRIDOR_ROOM) { + found = TRUE; + } + if (found) { + break; + } + } + if (found) { + break; + } + } + if (found) { + break; + } + dir++; + } + + if (dir == NUM_DIRECTIONS) { + dir = 0; + while (dir < NUM_DIRECTIONS) { + next_x = DIRECTIONS_XY[dir].x; + next_y = DIRECTIONS_XY[dir].y; + is_open = (GetTerrainType(GetTile(pt_x + next_x, pt_y + next_y)) + == TERRAIN_TYPE_NORMAL); + + if (CORNER_CARDINAL_NEIGHBOR_IS_OPEN[corner][dir] != is_open) { + break; + } + dir += 2; + } + if (dir == NUM_DIRECTIONS) { + GetTileSafe(pt_x, pt_y)->terrain_flags &= + ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + } + } + break; + } else { + pt_x += move_x; + pt_y += move_y; + } + } + } + } + } + } +} + +void CreateHallway(s32 x, s32 y, s32 end_x, s32 end_y, bool8 vertical, s32 turn_x, s32 turn_y) +{ + s32 start_x = x; + s32 start_y = y; + s32 i; + struct tile *t; + + if (vertical) { + i = 0; + while (y != turn_y) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (y < turn_y) { + y++; + } else { + y--; + } + } + i = 0; + while (x != end_x) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (x < end_x) { + x++; + } else { + x--; + } + } + i = 0; + while (y != end_y) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (y < end_y) { + y++; + } else { + y--; + } + } + } else { + i = 0; + while (x != turn_x) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (x < turn_x) { + x++; + } else { + x--; + } + } + i = 0; + while (y != end_y) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (y < end_y) { + y++; + } else { + y--; + } + } + i = 0; + while (x != end_x) { + if (i++ >= DUNGEON_MAX_SIZE_X) { + return; + } + if (GetTerrainType(GetTile(x, y)) != TERRAIN_TYPE_NORMAL) { + t = GetTileSafe(x, y); + t->terrain_flags &= ~3; + t->terrain_flags |= 1; + } else if (x != start_x || y != start_y) { + return; + } + if (x < end_x) { + x++; + } else { + x--; + } + } + } +} diff --git a/src/overlay_29_02345A3C.c b/src/overlay_29_02345A3C.c new file mode 100644 index 00000000..927c2540 --- /dev/null +++ b/src/overlay_29_02345A3C.c @@ -0,0 +1,20 @@ +#include "overlay_29_02345A3C.h" +#include "dg_object.h" + +extern bool8 SpawnDroppedItem(struct entity *entity, struct entity *item_entity, struct item *item, bool8 param_4, struct position *dir_xy, u32 param_6); + +bool8 SpawnDroppedItemWrapper(struct entity *entity, struct position *pos, struct item *item, u32 param_4) +{ + struct entity item_entity; + + item_entity.type = ENTITY_ITEM; + item_entity.field_0x24 = 0; + item_entity.is_visible = TRUE; + item_entity.transparent = 0; + item_entity.info = item; + item_entity.pos = *pos; + + SetEntityPixelPosXY(&item_entity, (pos->x * 24 + 4) << 8, (pos->y * 24 + 4) << 8); + item_entity.spawn_genid = 0; + return SpawnDroppedItem(entity, &item_entity, item, TRUE, NULL, param_4); +} diff --git a/src/overlay_31_02382820.c b/src/overlay_31_02382820.c index 57ae4806..b13811da 100644 --- a/src/overlay_31_02382820.c +++ b/src/overlay_31_02382820.c @@ -8,6 +8,7 @@ #include "main_02001188.h" #include "window.h" #include "main_02027AF0.h" +#include "dungeon_util_2.h" extern struct dungeon *DUNGEON_PTR[]; @@ -31,8 +32,6 @@ extern void* MemAlloc(u32 size, u32 nmemb); extern u32 GetMoneyCarried(void); extern u32 sub_0204F9E0(void); -extern void GetMonsterOrTrapName(u8*, void*, u32); // The third argument isn't actually used in the - // function (../asm/overlay_29_022E1A40.s#L1378) extern u8* StringFromId(u32); extern void PreprocessString(u8* dst, u32 dsize, const u8* src, u32 flags, struct PPStrValues* ptr); extern void DrawTextInWindow(s32, u32, u32, u8*); diff --git a/src/status_checks.c b/src/status_checks.c index c2bb54a1..5fb496e2 100644 --- a/src/status_checks.c +++ b/src/status_checks.c @@ -5,6 +5,7 @@ #include "dungeon_capabilities_3.h" #include "dungeon_statuses.h" #include "dungeon_util_static.h" +#include "dungeon_util_2.h" #ifdef JAPAN #define HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET -0x2C1 @@ -19,7 +20,6 @@ #define INFATUATED_MESSAGE (0xC2C + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET) #define BIDE_MESSAGE (0xC2D + HAS_STATUS_THAT_PREVENTS_ACTING_OFFSET) -extern void SubstitutePlaceholderStringTags(s32 string_id, struct entity *entity, u32 param_3); extern void LogMessageByIdWithPopupCheckUser(struct entity *user, u32 message_id); bool8 HasStatusThatPreventsActing(struct entity *monster)