diff --git a/asm/include/overlay_29_022E330C.inc b/asm/include/overlay_29_022E333C.inc similarity index 91% rename from asm/include/overlay_29_022E330C.inc rename to asm/include/overlay_29_022E333C.inc index 9a199ccd..f19f2df8 100644 --- a/asm/include/overlay_29_022E330C.inc +++ b/asm/include/overlay_29_022E333C.inc @@ -1,15 +1,17 @@ #pragma once -.public AbilityIsActiveVeneer .public AdvanceFrame .public AnimationDelayOrSomething .public AnimationHasMoreFrames -.public DisplayUi .public DUNGEON_PTR +.public DisplayUi .public EntityIsValid__022E37B8 .public GetEffectAnimationField0x19 .public GetTileSafe -.public HasHeldItem .public LogMessageByIdWithPopupCheckUser +.public ShouldDisplayEntityAdvanced +.public UpdateCamera +.public UpdateMinimap +.public UpdateTrapsVisibility .public ov10_022BF274 .public ov10_022BF2B4 .public ov10_022BF8E8 @@ -17,9 +19,5 @@ .public ov29_022E2C6C .public ov29_0235110C .public ov29_0235354C -.public ShouldDisplayEntityAdvanced .public sub_0201C000 .public sub_0201CF90 -.public UpdateCamera -.public UpdateMinimap -.public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_022ECDE4.inc b/asm/include/overlay_29_022ECDE4.inc index 5481e7a1..888f2ba7 100644 --- a/asm/include/overlay_29_022ECDE4.inc +++ b/asm/include/overlay_29_022ECDE4.inc @@ -1,13 +1,10 @@ #pragma once -.public _020AFC4C -.public _020AFC70 -.public AbilityIsActiveVeneer .public AdvanceFrame .public ApplyTrapEffect .public AreLateGameTrapsEnabled .public CreateMonsterSummaryFromMonster -.public DrawMinimapTile .public DUNGEON_PTR +.public DrawMinimapTile .public DungeonRandInt .public DungeonRandOutcome__022EAB20 .public EnemyEvolution @@ -18,16 +15,25 @@ .public GetTile .public GetTileSafe .public GetTrapInfo -.public HasHeldItem .public InitRender3dElement64 .public IqSkillIsEnabled .public IsFullFloorFixedRoom +.public ItemIsActive__022EE318 .public LoadWteFromFileDirectory .public LogMessageByIdWithPopupCheckUser .public LogMessageByIdWithPopupCheckUserTarget .public LogMessageByIdWithPopupCheckUserUnknown -.public memset .public MemZero +.public ProcessWte +.public SpawnTrap +.public StringFromId +.public SubstitutePlaceholderStringTags +.public TRAP_BUSTER_ACTIVATION_CHANCE +.public UpdateShopkeeperModeAfterTrap +.public UpdateTrapsVisibility +.public _020AFC4C +.public _020AFC70 +.public memset .public ov29_022E2CA0 .public ov29_022E56A0 .public ov29_022E58B0 @@ -41,15 +47,8 @@ .public ov29_0237C864 .public ov29_0237C974 .public ov29_0237C99C -.public ProcessWte -.public SpawnTrap .public strcpy -.public StringFromId .public sub_0201B9F8 .public sub_0201E080 .public sub_0201F2A0 .public sub_02024FC8 -.public SubstitutePlaceholderStringTags -.public TRAP_BUSTER_ACTIVATION_CHANCE -.public UpdateShopkeeperModeAfterTrap -.public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_022F52B0.inc b/asm/include/overlay_29_022F52B0.inc index 18852157..194ae2de 100644 --- a/asm/include/overlay_29_022F52B0.inc +++ b/asm/include/overlay_29_022F52B0.inc @@ -1,105 +1,42 @@ #pragma once -.public _s32_div_f -.public AbilityIsActiveVeneer -.public AllocateTemp1024ByteBufferFromPool .public ApplyItemEffect -.public AreMovesEnabled .public CanMonsterUseItem .public ChangeMonsterAnimation -.public CheckTeamMemberIdxVeneer -.public CheckVariousStatuses2 -.public DecrementStackItem -.public DIRECTIONS_XY -.public DisplayMessage -.public DisplayMessage2 .public DUNGEON_PTR +.public DecrementStackItem .public DungeonRandInt -.public EnemyEvolution .public EntityIsValid__022F528C -.public EntityIsValid__022F62A8 .public ExclusiveItemEffectFlagTest -.public GetActiveTeamMember -.public GetDirectionTowardsPosition .public GetItemCategoryVeneer .public GetItemToUse -.public GetLeader -.public GetMissionDestination -.public GetNumberOfAttacks -.public GetPersonalityIndex -.public GetStringFromFileVeneer -.public GetTalkLine -.public GetTreatmentBetweenMonsters -.public HandleFaint -.public HasHeldItem -.public HasLowHealth -.public InitMove -.public InitPortraitDungeon .public IqSkillIsEnabled -.public IsFloorOver -.public IsMarowakTrainingMaze -.public IsMonsterIdInNormalRangeVeneer -.public IsSecretBazaarNpcBehavior +.public ItemIsActive__022F5994 .public ItemZInit .public LogItemBlockedByEmbargo .public LogMessageByIdWithPopupCheckUser .public MonsterHasEmbargoStatus -.public ov29_022E56A0 -.public ov29_022E5728 -.public ov29_022E690C -.public ov29_022E8104 -.public ov29_022E81F8 -.public ov29_022E9A9C -.public ov29_022EA370 -.public ov29_022EB378 -.public ov29_022F3B8C -.public ov29_022F6748 -.public ov29_022F87C0 -.public ov29_022FA574 -.public ov29_0230040C -.public ov29_023009CC -.public ov29_02304A48 -.public ov29_02304AFC -.public ov29_02307BDC -.public ov29_0230F9A4 -.public ov29_0231AE3C -.public ov29_0232145C -.public ov29_02322374 -.public ov29_02338430 -.public ov29_0233A248 -.public ov29_02343D30 -.public ov29_02344544 -.public ov29_02344B44 -.public ov29_02344B70 -.public ov29_02346FB8 -.public ov29_02347000 -.public ov29_02347518 -.public ov29_02347BC8 -.public ov29_02348C64 -.public ov29_0234A2D4 -.public ov29_0234A5E4 -.public ov29_0234B034 -.public ov29_0234B0B4 -.public ov29_0234CFA0 -.public ov29_0234D304 -.public ov29_0235171E -.public ov29_02352750 -.public ov29_02352758 -.public ov29_0237CA80 .public RemoveEmptyItemsInBagWrapper .public RemoveEquivItemNoHole .public RemoveGroundItem .public RemoveUsedItem .public ShouldDisplayEntityWrapper .public ShouldMonsterRunAwayVariation -.public ShouldUsePp .public SpawnItem -.public strcpy -.public strncpy -.public sub_02020880 -.public sub_02024FB8 -.public SubstitutePlaceholderStringTags -.public TryActivateTruant .public TryTriggerMonsterHouse -.public UpdateMapSurveyorFlag -.public UpdateMovePp -.public YesNoMenu +.public ov29_022E56A0 +.public ov29_022E5728 +.public ov29_022E9A9C +.public ov29_022EA370 +.public ov29_022EB378 +.public ov29_022F3B8C +.public ov29_0230040C +.public ov29_02304A48 +.public ov29_0230F9A4 +.public ov29_02343D30 +.public ov29_02344B44 +.public ov29_02344B70 +.public ov29_02346FB8 +.public ov29_02347000 +.public ov29_02347518 +.public ov29_02347BC8 +.public ov29_0234B034 diff --git a/asm/include/overlay_29_022F59C4.inc b/asm/include/overlay_29_022F59C4.inc new file mode 100644 index 00000000..071456d2 --- /dev/null +++ b/asm/include/overlay_29_022F59C4.inc @@ -0,0 +1,69 @@ +#pragma once +.public AllocateTemp1024ByteBufferFromPool +.public AreMovesEnabled +.public CheckTeamMemberIdxVeneer +.public CheckVariousStatuses2 +.public DIRECTIONS_XY +.public DUNGEON_PTR +.public DisplayMessage +.public DisplayMessage2 +.public EnemyEvolution +.public EntityIsValid__022F528C +.public EntityIsValid__022F62A8 +.public GetActiveTeamMember +.public GetDirectionTowardsPosition +.public GetLeader +.public GetMissionDestination +.public GetNumberOfAttacks +.public GetPersonalityIndex +.public GetStringFromFileVeneer +.public GetTalkLine +.public GetTreatmentBetweenMonsters +.public HandleFaint +.public HasLowHealth +.public InitMove +.public InitPortraitDungeon +.public IsFloorOver +.public IsMarowakTrainingMaze +.public IsMonsterIdInNormalRangeVeneer +.public IsSecretBazaarNpcBehavior +.public LogMessageByIdWithPopupCheckUser +.public ShouldUsePp +.public SubstitutePlaceholderStringTags +.public TryActivateTruant +.public UpdateMapSurveyorFlag +.public UpdateMovePp +.public YesNoMenu +.public _s32_div_f +.public ov29_022E690C +.public ov29_022E8104 +.public ov29_022E81F8 +.public ov29_022F3B8C +.public ov29_022F6748 +.public ov29_022F87C0 +.public ov29_022FA574 +.public ov29_0230040C +.public ov29_023009CC +.public ov29_02304AFC +.public ov29_02307BDC +.public ov29_0231AE3C +.public ov29_0232145C +.public ov29_02322374 +.public ov29_02338430 +.public ov29_0233A248 +.public ov29_02344544 +.public ov29_02348C64 +.public ov29_0234A2D4 +.public ov29_0234A5E4 +.public ov29_0234B034 +.public ov29_0234B0B4 +.public ov29_0234CFA0 +.public ov29_0234D304 +.public ov29_0235171E +.public ov29_02352750 +.public ov29_02352758 +.public ov29_0237CA80 +.public strcpy +.public strncpy +.public sub_02020880 +.public sub_02024FB8 diff --git a/asm/include/overlay_29_022FEDBC.inc b/asm/include/overlay_29_022FEDBC.inc index 79366103..7097d2ea 100644 --- a/asm/include/overlay_29_022FEDBC.inc +++ b/asm/include/overlay_29_022FEDBC.inc @@ -1,5 +1,4 @@ #pragma once -.public AbilityIsActive .public ActivateFlashFire .public CanMonsterMoveInDirection .public CanMonsterUseMove @@ -7,35 +6,25 @@ .public DUNGEON_PTR .public DungeonRandInt .public EntityIsValid__022FED98 -.public EntityIsValid__023000E4 -.public EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST -.public EXCL_ITEM_EFFECTS_WEATHER_MOVE_SPEED_BOOST -.public ExclusiveItemEffectFlagTest -.public GetApparentWeather -.public GetExclusiveItemWithEffectFromBag .public GetMobilityType -.public GetSpeedStatus +.public GetMobilityTypeAfterIqSkills .public GetTile -.public HasHeldItem .public IqSkillIsEnabled .public IsBlinded .public IsChargingTwoTurnMove .public IsCurrentTilesetBackground .public IsFloating .public IsMonsterSleeping +.public ItemIsActive__022FF898 .public LogMessageByIdWithPopupCheckUser -.public MonsterIsType -.public ov29_022E56A0 -.public ov29_022E655C -.public ov29_022FAA04 -.public ov29_02300DCC -.public ov29_02318D58 -.public ov29_02322374 -.public ov29_02344B44 -.public ov29_0237C9B8 .public SetActionPassTurnOrWalk .public SetActionUseMovePlayer .public SetMonsterActionFields .public SubstitutePlaceholderStringTags .public TickStatusTurnCounter -.public UpdateStateFlags +.public ov29_022E56A0 +.public ov29_022FAA04 +.public ov29_02300DCC +.public ov29_02318D58 +.public ov29_02322374 +.public ov29_0237C9B8 diff --git a/asm/include/overlay_29_022FF8C8.inc b/asm/include/overlay_29_022FF8C8.inc new file mode 100644 index 00000000..8242b406 --- /dev/null +++ b/asm/include/overlay_29_022FF8C8.inc @@ -0,0 +1,21 @@ +#pragma once +.public AbilityIsActive +.public DUNGEON_PTR +.public EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST +.public EXCL_ITEM_EFFECTS_WEATHER_MOVE_SPEED_BOOST +.public EntityIsValid__023000E4 +.public ExclusiveItemEffectFlagTest +.public GetApparentWeather +.public GetExclusiveItemWithEffectFromBag +.public GetMobilityTypeCheckSlipAndFloating +.public GetSpeedStatus +.public GetTile +.public IqSkillIsEnabled +.public IsCurrentTilesetBackground +.public ItemIsActive__022FF898 +.public LogMessageByIdWithPopupCheckUser +.public MonsterIsType +.public SubstitutePlaceholderStringTags +.public UpdateStateFlags +.public ov29_022E655C +.public ov29_02344B44 diff --git a/asm/include/overlay_29_02301F50.inc b/asm/include/overlay_29_02301F50.inc index 953a8d37..e8a5fd97 100644 --- a/asm/include/overlay_29_02301F50.inc +++ b/asm/include/overlay_29_02301F50.inc @@ -1,58 +1,38 @@ #pragma once -.public _s32_div_f .public AbilityIsActive -.public AbilityIsActiveVeneer -.public AllocateTemp1024ByteBufferFromPool .public CanLearnIqSkill .public CanSeeTarget .public CanThrowItems -.public DisableIqSkill .public DUNGEON_PTR -.public DungeonGetSpriteIndex -.public DungeonRandInt +.public DisableIqSkill +.public EXCLUSIVE_ITEM_EXP_BOOST +.public EXP_ELITE_EXP_BOOST .public EnableIqSkill .public EntityIsValid__023000E4 -.public EntityIsValid__02302A38 -.public EvolveMonster -.public EXCLUSIVE_ITEM_EXP_BOOST .public ExclusiveItemEffectFlagTest .public ExclusiveItemEffectIsActive__022FFF28 -.public EXP_ELITE_EXP_BOOST .public GetEntityNaturalGiftInfo .public GetEntityWeatherBallType -.public GetEvolutions .public GetExclusiveItemWithEffectFromBag -.public GetForcedLossReason .public GetMoveBasePower .public GetMoveType .public GetPerformanceFlagWithChecks .public GetSpeciesIqSkill -.public GetUnlockedTacticFlags -.public HasHeldItem .public IqSkillFlagTest .public IsBlinded -.public IsExpEnabledInDungeon .public IsExperienceLocked -.public IsOnMonsterSpawnList .public IsRegularAttackOrProjectile .public ItemIsActive__022FF898 +.public ItemIsActive__023026CC .public LeafGuardIsActive -.public LevelUp -.public LogMessageByIdWithPopup .public LogMessageByIdWithPopupCheckUserTarget .public MIN_IQ_EXCLUSIVE_MOVE_USER .public MIN_IQ_ITEM_MASTER .public MIRACLE_CHEST_EXP_BOOST .public MultiplyByFixedPoint -.public ov29_022E2470 -.public ov29_022FBDE0 -.public ov29_0230040C -.public ov29_02301A84 -.public ov29_02302C04 -.public ov29_02302CC8 -.public ov29_02344B44 -.public ov29_0234B034 -.public ov29_0234B09C -.public ov29_023527F8 .public SubstitutePlaceholderStringTags .public WONDER_CHEST_EXP_BOOST +.public _s32_div_f +.public ov29_022FBDE0 +.public ov29_02301A84 +.public ov29_02344B44 diff --git a/asm/include/overlay_29_023026FC.inc b/asm/include/overlay_29_023026FC.inc new file mode 100644 index 00000000..9f5f857d --- /dev/null +++ b/asm/include/overlay_29_023026FC.inc @@ -0,0 +1,21 @@ +#pragma once +.public AllocateTemp1024ByteBufferFromPool +.public DUNGEON_PTR +.public DungeonGetSpriteIndex +.public DungeonRandInt +.public EntityIsValid__02302A38 +.public EvolveMonster +.public GetEvolutions +.public GetForcedLossReason +.public GetUnlockedTacticFlags +.public IsExpEnabledInDungeon +.public IsOnMonsterSpawnList +.public LevelUp +.public LogMessageByIdWithPopup +.public ov29_022E2470 +.public ov29_0230040C +.public ov29_02302C04 +.public ov29_02302CC8 +.public ov29_0234B034 +.public ov29_0234B09C +.public ov29_023527F8 diff --git a/asm/include/overlay_29_02307F1C.inc b/asm/include/overlay_29_02307F4C.inc similarity index 88% rename from asm/include/overlay_29_02307F1C.inc rename to asm/include/overlay_29_02307F4C.inc index 4ea66c0d..73513266 100644 --- a/asm/include/overlay_29_02307F1C.inc +++ b/asm/include/overlay_29_02307F4C.inc @@ -1,5 +1,4 @@ #pragma once -.public AbilityIsActiveVeneer .public AdvanceFrame .public AnimationDelayOrSomething .public DUNGEON_PTR @@ -9,9 +8,8 @@ .public GetMonsterIdToSpawn .public GetTileAtEntity .public GetTileSafe -.public HasHeldItem -.public MewSpawnCheck .public MONSTER_HOUSE_MAX_MONSTER_SPAWNS +.public MewSpawnCheck .public MultiplyByFixedPoint -.public ov10_022C4560 .public SpawnMonster +.public ov10_022C4560 diff --git a/asm/include/overlay_29_0230A9B8.inc b/asm/include/overlay_29_0230A9B8.inc index 8bb2e938..50a8a1be 100644 --- a/asm/include/overlay_29_0230A9B8.inc +++ b/asm/include/overlay_29_0230A9B8.inc @@ -1,210 +1,2 @@ #pragma once -.public _s32_div_f -.public AbilityIsActiveVeneer -.public abs -.public AddFixedPoint64 -.public AdvanceFrame -.public AFTERMATH_CHANCE -.public AIR_BLADE_DAMAGE_MULTIPLIER -.public AllocateTemp1024ByteBufferFromPool -.public ApplyDamageAndEffects -.public AURA_BOW_STAT_BOOST -.public AuraBowIsActive -.public BURN_DAMAGE_MULTIPLIER -.public CanSeeTarget -.public CeilFixedPoint -.public ClampedLn -.public CLOUDY_DAMAGE_MULTIPLIER -.public DAMAGE_FORMULA_AT_PREFACTOR -.public DAMAGE_FORMULA_CONSTANT_SHIFT -.public DAMAGE_FORMULA_DEF_PREFACTOR -.public DAMAGE_FORMULA_FLV_DEFICIT_DIVISOR -.public DAMAGE_FORMULA_FLV_SHIFT -.public DAMAGE_FORMULA_LN_ARG_PREFACTOR -.public DAMAGE_FORMULA_LN_PREFACTOR -.public DAMAGE_FORMULA_MAX_BASE -.public DAMAGE_FORMULA_MIN_BASE -.public DAMAGE_FORMULA_NON_TEAM_MEMBER_MODIFIER -.public DAMAGE_MULTIPLIER_0_5 -.public DAMAGE_MULTIPLIER_1_5 -.public DAMAGE_MULTIPLIER_2 -.public Debug_Print0 -.public DebugRecruitingEnabled -.public DEF_SCARF_STAT_BOOST -.public DefenderAbilityIsActive__0230A940 -.public DEFENSIVE_STAT_STAGE_MULTIPLIERS -.public DivideFixedPoint64 -.public DUNGEON_PTR -.public DungeonModeSetupAndShowNameKeyboard -.public DungeonRandInt -.public DungeonRandOutcome__022EAB20 -.public EnableAllLearnableIqSkills -.public EnsureCanStandCurrentTile -.public EntityIsValid__02308FBC -.public EntityIsValid__0230E8F0 -.public ExclusiveItemDefenseBoost .public ExclusiveItemEffectFlagTest -.public ExclusiveItemEffectIsActiveWithLogging -.public ExclusiveItemOffenseBoost -.public FixedPoint32To64 -.public FixedPoint64CmpLt -.public FixedPoint64IsZero -.public FixedPoint64ToInt -.public FixedRoomIsSubstituteRoom -.public FlashFireShouldActivate -.public GendersEqualNotGenderless -.public GendersNotEqualNotGenderless -.public GenerateStandardItem -.public GetActiveTeamMember -.public GetApparentWeather -.public GetDirectionTowardsPosition -.public GetEquivItemIndex -.public GetFirstEmptyMemberIdx -.public GetItemAtIdx -.public GetKecleonIdToSpawnByFloor -.public GetMonsterGenderVeneer -.public GetMonsterIdToSpawn -.public GetMonsterLevelToSpawn -.public GetMoveCategory -.public GetNameString -.public GetRandomMovementChance -.public GetRandomTile -.public GetRecruitRate1 -.public GetRecruitRate2 -.public GetTile -.public GravityIsActive -.public HandleFaint -.public HasHeldItem -.public HasPlayedOldGame -.public InitTeamMember -.public IntToFixedPoint64 -.public IqSkillIsEnabled -.public IsCurrentMissionTypeExact -.public IsFloating -.public IsFullFloorFixedRoom -.public IsLegendaryChallengeFloor -.public IsMonster__0230A994 -.public IsMonsterOnTeam -.public IsPunchMove -.public IsRecoilMove -.public IsRecruitingAllowed -.public IsRegularAttackOrProjectile -.public LevitateIsActive -.public LogMessageByIdWithPopup -.public LogMessageByIdWithPopupCheckParticipants -.public LogMessageByIdWithPopupCheckUser -.public LogMessageByIdWithPopupCheckUserTarget -.public MATCHUP_IMMUNE_MULTIPLIER -.public MATCHUP_IMMUNE_MULTIPLIER_ERRATIC_PLAYER -.public MATCHUP_NEUTRAL_MULTIPLIER -.public MATCHUP_NEUTRAL_MULTIPLIER_ERRATIC_PLAYER -.public MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER -.public MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER -.public MATCHUP_SUPER_EFFECTIVE_MULTIPLIER -.public MATCHUP_SUPER_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER -.public ME_FIRST_MULTIPLIER -.public MemZero -.public MewSpawnCheck -.public MonsterHasNegativeStatus -.public MonsterIsType -.public MoveIsNotPhysical -.public MultiplyByFixedPoint -.public MultiplyFixedPoint64 -.public MUNCH_BELT_STAT_BOOST -.public NearbyAllyIqSkillIsEnabled -.public OFFENSIVE_STAT_STAGE_MULTIPLIERS -.public OtherMonsterAbilityIsActive -.public ov10_022BDE50 -.public ov10_022BF964 -.public ov10_022C4410 -.public ov10_022C441C -.public ov10_022C443C -.public ov10_022C447C -.public ov10_022C44FC -.public ov10_022C45B4 -.public ov10_022C46FC -.public ov10_022C4700 -.public ov10_022C4704 -.public ov10_022C4708 -.public ov10_022C470C -.public ov29_022E1B28 -.public ov29_022E2470 -.public ov29_022E62F0 -.public ov29_022E68BC -.public ov29_022E8104 -.public ov29_022E81F8 -.public ov29_022EACAC -.public ov29_022FBC94 -.public ov29_022FBDE0 -.public ov29_022FD318 -.public ov29_0230040C -.public ov29_02304A48 -.public ov29_02305F60 -.public ov29_02337EC0 -.public ov29_0234B034 -.public ov29_0234B084 -.public ov29_0234B0B4 -.public ov29_0234B1A4 -.public ov29_0234BA54 -.public ov29_0234BB50 -.public ov29_0234D630 -.public ov29_0234D6C8 -.public ov29_0234D7C0 -.public ov29_0234D838 -.public ov29_0234D8A0 -.public ov29_0234EE10 -.public ov29_02352838 -.public ov29_02352884 -.public ov29_02352894 -.public ov29_02352984 -.public ov29_02352990 -.public ov29_0235299C -.public ov29_023535D4 -.public PlayEffectAnimation0x171 -.public PlayEffectAnimation0x171Full -.public PlayEffectAnimation0x18E -.public PlayEffectAnimation0x1A9__022E6130 -.public PlayEffectAnimation0x1A9__022E617C -.public PlayEffectAnimation0x1A9__022E61C8 -.public PlayEffectAnimation0x1A9__022E6214 -.public PlayEffectAnimation0x1A9__022E64C4 -.public PlayEffectAnimation0x1A9__022E6510 -.public PlayEffectAnimationEntity -.public PointCameraToMonster -.public POWER_BAND_STAT_BOOST -.public POWER_PITCHER_DAMAGE_MULTIPLIER -.public PreprocessString -.public RECRUITMENT_LEVEL_BOOST_TABLE -.public ResetDamageData -.public RoundUpDiv256 -.public SCOPE_LENS_CRIT_RATE_BOOST -.public SetItemAcquired -.public SetPokemonJoined -.public SOLID_ROCK_MULTIPLIER -.public SPAWN_CAP_NO_MONSTER_HOUSE -.public SPAWN_CAP_WITH_MONSTER_HOUSE -.public SPAWN_COOLDOWN -.public SPAWN_COOLDOWN_THIEF_ALERT -.public SpawnMonster -.public SPECIAL_BAND_STAT_BOOST -.public StrcpySimple -.public StringFromId -.public StrncpyName -.public StrncpySimpleNoPad -.public sub_020534BC -.public sub_02055CCC -.public sub_02055D7C -.public sub_02056698 -.public sub_02056830 -.public sub_020584FC -.public sub_020585B4 -.public SubstitutePlaceholderStringTags -.public SUPER_LUCK_CRIT_RATE_BOOST -.public TECHNICIAN_MOVE_POWER_THRESHOLD -.public TINTED_LENS_MULTIPLIER -.public TryAftermathExplosion -.public TYPE_ADVANTAGE_MASTER_CRIT_RATE -.public TYPE_MATCHUP_COMBINATOR_TABLE -.public TYPE_MATCHUP_TABLE -.public UpdateStateFlags -.public ZINC_BAND_STAT_BOOST diff --git a/asm/include/overlay_29_0230AA0C.inc b/asm/include/overlay_29_0230AA0C.inc new file mode 100644 index 00000000..0cc0a3fa --- /dev/null +++ b/asm/include/overlay_29_0230AA0C.inc @@ -0,0 +1,188 @@ +#pragma once +.public AFTERMATH_CHANCE +.public AIR_BLADE_DAMAGE_MULTIPLIER +.public AURA_BOW_STAT_BOOST +.public AbilityIsActiveVeneer +.public AddFixedPoint64 +.public AdvanceFrame +.public ApplyDamageAndEffects +.public AuraBowIsActive +.public BURN_DAMAGE_MULTIPLIER +.public CLOUDY_DAMAGE_MULTIPLIER +.public CanSeeTarget +.public CeilFixedPoint +.public ClampedLn +.public DAMAGE_FORMULA_AT_PREFACTOR +.public DAMAGE_FORMULA_CONSTANT_SHIFT +.public DAMAGE_FORMULA_DEF_PREFACTOR +.public DAMAGE_FORMULA_FLV_DEFICIT_DIVISOR +.public DAMAGE_FORMULA_FLV_SHIFT +.public DAMAGE_FORMULA_LN_ARG_PREFACTOR +.public DAMAGE_FORMULA_LN_PREFACTOR +.public DAMAGE_FORMULA_MAX_BASE +.public DAMAGE_FORMULA_MIN_BASE +.public DAMAGE_FORMULA_NON_TEAM_MEMBER_MODIFIER +.public DAMAGE_MULTIPLIER_0_5 +.public DAMAGE_MULTIPLIER_1_5 +.public DAMAGE_MULTIPLIER_2 +.public DEFENSIVE_STAT_STAGE_MULTIPLIERS +.public DEF_SCARF_STAT_BOOST +.public DUNGEON_PTR +.public DebugRecruitingEnabled +.public Debug_Print0 +.public DefenderAbilityIsActive__0230A940 +.public DivideFixedPoint64 +.public DungeonModeSetupAndShowNameKeyboard +.public DungeonRandInt +.public DungeonRandOutcome__022EAB20 +.public EnableAllLearnableIqSkills +.public EnsureCanStandCurrentTile +.public EntityIsValid__02308FBC +.public ExclusiveItemDefenseBoost +.public ExclusiveItemEffectIsActiveWithLogging +.public ExclusiveItemEffectIsActive__0230A9B8 +.public ExclusiveItemOffenseBoost +.public FixedPoint32To64 +.public FixedPoint64CmpLt +.public FixedPoint64IsZero +.public FixedPoint64ToInt +.public FixedRoomIsSubstituteRoom +.public FlashFireShouldActivate +.public GendersEqualNotGenderless +.public GendersNotEqualNotGenderless +.public GenerateStandardItem +.public GetActiveTeamMember +.public GetApparentWeather +.public GetDirectionTowardsPosition +.public GetEquivItemIndex +.public GetFirstEmptyMemberIdx +.public GetItemAtIdx +.public GetMonsterGenderVeneer +.public GetMoveCategory +.public GetNameString +.public GetRecruitRate1 +.public GetRecruitRate2 +.public GravityIsActive +.public HandleFaint +.public HasPlayedOldGame +.public InitTeamMember +.public IntToFixedPoint64 +.public IqSkillIsEnabled +.public IsCurrentMissionTypeExact +.public IsFloating +.public IsFullFloorFixedRoom +.public IsLegendaryChallengeFloor +.public IsMonsterOnTeam +.public IsMonster__0230A994 +.public IsPunchMove +.public IsRecoilMove +.public IsRecruitingAllowed +.public IsRegularAttackOrProjectile +.public ItemIsActive__0230A9DC +.public ItemIsActive__0230E578 +.public LevitateIsActive +.public LogMessageByIdWithPopupCheckParticipants +.public LogMessageByIdWithPopupCheckUser +.public LogMessageByIdWithPopupCheckUserTarget +.public MATCHUP_IMMUNE_MULTIPLIER +.public MATCHUP_IMMUNE_MULTIPLIER_ERRATIC_PLAYER +.public MATCHUP_NEUTRAL_MULTIPLIER +.public MATCHUP_NEUTRAL_MULTIPLIER_ERRATIC_PLAYER +.public MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER +.public MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER +.public MATCHUP_SUPER_EFFECTIVE_MULTIPLIER +.public MATCHUP_SUPER_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER +.public ME_FIRST_MULTIPLIER +.public MUNCH_BELT_STAT_BOOST +.public MemZero +.public MonsterHasNegativeStatus +.public MonsterIsType +.public MoveIsNotPhysical +.public MultiplyByFixedPoint +.public MultiplyFixedPoint64 +.public NearbyAllyIqSkillIsEnabled +.public OFFENSIVE_STAT_STAGE_MULTIPLIERS +.public OtherMonsterAbilityIsActive +.public POWER_BAND_STAT_BOOST +.public POWER_PITCHER_DAMAGE_MULTIPLIER +.public PlayEffectAnimation0x171 +.public PlayEffectAnimation0x171Full +.public PlayEffectAnimation0x18E +.public PlayEffectAnimation0x1A9__022E6130 +.public PlayEffectAnimation0x1A9__022E617C +.public PlayEffectAnimation0x1A9__022E61C8 +.public PlayEffectAnimation0x1A9__022E6214 +.public PlayEffectAnimation0x1A9__022E64C4 +.public PlayEffectAnimation0x1A9__022E6510 +.public PlayEffectAnimationEntity +.public PointCameraToMonster +.public RECRUITMENT_LEVEL_BOOST_TABLE +.public ResetDamageData +.public RoundUpDiv256 +.public SCOPE_LENS_CRIT_RATE_BOOST +.public SOLID_ROCK_MULTIPLIER +.public SPECIAL_BAND_STAT_BOOST +.public SUPER_LUCK_CRIT_RATE_BOOST +.public SetItemAcquired +.public SetPokemonJoined +.public StrcpySimple +.public StrncpyName +.public StrncpySimpleNoPad +.public SubstitutePlaceholderStringTags +.public TECHNICIAN_MOVE_POWER_THRESHOLD +.public TINTED_LENS_MULTIPLIER +.public TYPE_ADVANTAGE_MASTER_CRIT_RATE +.public TYPE_MATCHUP_COMBINATOR_TABLE +.public TYPE_MATCHUP_TABLE +.public TryAftermathExplosion +.public UpdateStateFlags +.public ZINC_BAND_STAT_BOOST +.public _s32_div_f +.public abs +.public ov10_022BDE50 +.public ov10_022BF964 +.public ov10_022C4410 +.public ov10_022C441C +.public ov10_022C443C +.public ov10_022C447C +.public ov10_022C44FC +.public ov10_022C45B4 +.public ov10_022C46FC +.public ov10_022C4700 +.public ov10_022C4704 +.public ov10_022C4708 +.public ov10_022C470C +.public ov29_022E1B28 +.public ov29_022E2470 +.public ov29_022E68BC +.public ov29_022E8104 +.public ov29_022E81F8 +.public ov29_022EACAC +.public ov29_022FBDE0 +.public ov29_0230040C +.public ov29_02304A48 +.public ov29_02305F60 +.public ov29_0230E5A8 +.public ov29_0230E5FC +.public ov29_0230E658 +.public ov29_02337EC0 +.public ov29_0234B034 +.public ov29_0234B084 +.public ov29_0234B0B4 +.public ov29_0234B1A4 +.public ov29_0234BA54 +.public ov29_0234D630 +.public ov29_0234D7C0 +.public ov29_0234D838 +.public ov29_0234D8A0 +.public ov29_0234EE10 +.public ov29_02352838 +.public ov29_02352884 +.public ov29_02352894 +.public ov29_02352984 +.public ov29_02352990 +.public ov29_0235299C +.public ov29_023535D4 +.public sub_02056698 +.public sub_020584FC +.public sub_020585B4 diff --git a/asm/include/overlay_29_0230E5A8.inc b/asm/include/overlay_29_0230E5A8.inc new file mode 100644 index 00000000..07a1f83c --- /dev/null +++ b/asm/include/overlay_29_0230E5A8.inc @@ -0,0 +1,31 @@ +#pragma once +.public AllocateTemp1024ByteBufferFromPool +.public DUNGEON_PTR +.public DungeonRandInt +.public EntityIsValid__0230E8F0 +.public GetKecleonIdToSpawnByFloor +.public GetMonsterIdToSpawn +.public GetMonsterLevelToSpawn +.public GetRandomMovementChance +.public GetRandomTile +.public GetTile +.public LogMessageByIdWithPopup +.public MewSpawnCheck +.public PreprocessString +.public SPAWN_CAP_NO_MONSTER_HOUSE +.public SPAWN_CAP_WITH_MONSTER_HOUSE +.public SPAWN_COOLDOWN +.public SPAWN_COOLDOWN_THIEF_ALERT +.public SpawnMonster +.public StringFromId +.public SubstitutePlaceholderStringTags +.public ov29_022E62F0 +.public ov29_022FBC94 +.public ov29_022FD318 +.public ov29_0234B034 +.public ov29_0234BB50 +.public ov29_0234D6C8 +.public sub_020534BC +.public sub_02055CCC +.public sub_02055D7C +.public sub_02056830 diff --git a/asm/include/overlay_29_0230F02C.inc b/asm/include/overlay_29_0230F02C.inc index 08dc0c29..7a034af5 100644 --- a/asm/include/overlay_29_0230F02C.inc +++ b/asm/include/overlay_29_0230F02C.inc @@ -1,21 +1,17 @@ #pragma once -.public AbilityIsActiveVeneer -.public abs -.public AddMoneyCarried .public AI_THROWN_ITEM_ACTION_CHOICE_COUNT +.public AbilityIsActiveVeneer +.public AddMoneyCarried .public BAG_ITEMS_PTR_MIRROR .public CanSeeTarget -.public DIRECTIONS_XY .public DUNGEON_PTR .public DungeonRandOutcome__022EAB20 .public EntityIsValid__0230F008 -.public ExclusiveItemEffectFlagTest .public GetAiUseItemProbability .public GetCurrentBagCapacity .public GetExclusiveItemForMonsterFromBag .public GetItemCategoryVeneer .public GetItemInfo -.public GetTile .public GetTileAtEntity .public GetTreatmentBetweenMonsters .public HasHeldItem @@ -23,8 +19,13 @@ .public IsAuraBow .public IsExperienceLocked .public IsFloorOver -.public IsMonster__0230F980 +.public ItemIsActive__0230F810 .public LogMessageByIdWithPopup +.public RemoveGroundItem +.public ShouldMonsterRunAwayVariation +.public SubstitutePlaceholderStringTags +.public UseThrowableItem +.public abs .public ov29_022EACCC .public ov29_022F52BC .public ov29_022F9EA0 @@ -35,8 +36,4 @@ .public ov29_02348D3C .public ov29_02348DD8 .public ov29_02348ECC -.public RemoveGroundItem -.public ShouldMonsterRunAwayVariation .public sub_0200D8AC -.public SubstitutePlaceholderStringTags -.public UseThrowableItem diff --git a/asm/include/overlay_29_0230F840.inc b/asm/include/overlay_29_0230F840.inc new file mode 100644 index 00000000..68646130 --- /dev/null +++ b/asm/include/overlay_29_0230F840.inc @@ -0,0 +1,8 @@ +#pragma once +.public DIRECTIONS_XY +.public DUNGEON_PTR +.public EntityIsValid__0230F008 +.public ExclusiveItemEffectFlagTest +.public GetTile +.public IsMonster__0230F980 +.public ItemIsActive__0230F810 diff --git a/asm/include/overlay_29_02311034.inc b/asm/include/overlay_29_02311064.inc similarity index 97% rename from asm/include/overlay_29_02311034.inc rename to asm/include/overlay_29_02311064.inc index 329cb4c9..be203477 100644 --- a/asm/include/overlay_29_02311034.inc +++ b/asm/include/overlay_29_02311064.inc @@ -21,17 +21,17 @@ .public ExclusiveItemEffectFlagTest .public GetApparentWeather .public GetRegenSpeed -.public HasHeldItem .public ICE_BODY_BONUS_REGEN .public IqSkillIsEnabled .public IsFloorOver +.public ItemIsActive__02311034 .public LogMessageByIdWithPopupCheckUser -.public ov10_022C4674 -.public ov10_022C46F8 -.public ov29_0234B294 -.public ov29_02353318 .public RAIN_ABILITY_BONUS_REGEN .public SubstitutePlaceholderStringTags .public TickStatusTurnCounter .public UpdateStatusIconFlags .public WISH_BONUS_REGEN +.public ov10_022C4674 +.public ov10_022C46F8 +.public ov29_0234B294 +.public ov29_02353318 diff --git a/asm/include/overlay_29_023118D8.inc b/asm/include/overlay_29_023118D8.inc index aabce39a..19beef7a 100644 --- a/asm/include/overlay_29_023118D8.inc +++ b/asm/include/overlay_29_023118D8.inc @@ -1,93 +1,14 @@ #pragma once .public AbilityIsActiveVeneer -.public AllocateTemp1024ByteBufferFromPool -.public CalcSpeedStage -.public CalcSpeedStageWrapper -.public CalcStatusDuration -.public ChangeShayminForme -.public CopyStringFromId -.public DIRECTIONS_XY -.public DUNGEON_PTR -.public DungeonRandInt -.public DungeonRandOutcome__022EAB20 .public EntityIsValid__023118B4 -.public EntityIsValid__02315118 -.public ExclusiveItemEffectFlagTest -.public GetExclusiveItemWithEffectFromBag -.public GetTile -.public GetTileAtEntity -.public HasHeldItem +.public ExclusiveItemEffectIsActiveWithLogging .public InflictSleepStatusSingle .public IqSkillIsEnabled .public IsProtectedFromNegativeStatus -.public IsProtectedFromStatDrops -.public ItemIsActive__0231513C +.public ItemIsActive__02311BF8 .public LogMessageByIdWithPopupCheckUserTarget -.public MonsterIsType -.public MultiplyByFixedPoint -.public ov10_022C4618 -.public ov10_022C4728 -.public ov10_022C479C -.public ov10_022C47A0 -.public ov10_022C4804 -.public ov10_022C4870 -.public ov10_022C4874 -.public ov10_022C4878 -.public ov10_022C4880 -.public ov10_022C4884 -.public ov10_022C488C -.public ov10_022C4890 -.public ov10_022C4894 -.public ov10_022C4898 -.public ov10_022C48A0 -.public ov10_022C48AC -.public ov10_022C48B8 -.public ov29_022E3E74 -.public ov29_022E41CC -.public ov29_022E41F0 -.public ov29_022E4240 -.public ov29_022E4290 -.public ov29_022E4294 -.public ov29_022E42E0 -.public ov29_022E42E4 -.public ov29_022E4338 -.public ov29_022E4388 -.public ov29_022E43D8 -.public ov29_022E4428 -.public ov29_022E44CC -.public ov29_022E451C -.public ov29_022E4B8C -.public ov29_022E4BA0 -.public ov29_022E4BB4 -.public ov29_022E4C00 -.public ov29_022E4C4C -.public ov29_022E4D24 -.public ov29_022E4D28 -.public ov29_022E4DCC -.public ov29_022E4E74 -.public ov29_022E4F1C -.public ov29_022E4FC0 -.public ov29_022E5068 -.public ov29_022E510C -.public ov29_022E51B0 -.public ov29_022E5258 -.public ov29_022E52F8 -.public ov29_022E539C -.public ov29_022E53EC -.public ov29_022E543C -.public ov29_022E60E4 -.public ov29_0230040C -.public ov29_023018AC -.public ov29_02304A48 -.public ov29_02304A84 -.public ov29_02344B44 -.public ov29_0234B034 -.public ov29_0234B084 -.public ov29_0234B0B4 -.public ov29_02353318 .public SafeguardIsActive -.public SECONDARY_TERRAIN_TYPES -.public SPEED_BOOST_TURN_RANGE .public SubstitutePlaceholderStringTags -.public TryActivateSteadfast -.public UpdateStatusIconFlags +.public TryActivateQuickFeet +.public ov29_022E3E74 +.public ov29_02304A48 diff --git a/asm/include/overlay_29_02311C28.inc b/asm/include/overlay_29_02311C28.inc new file mode 100644 index 00000000..f9e5f660 --- /dev/null +++ b/asm/include/overlay_29_02311C28.inc @@ -0,0 +1,92 @@ +#pragma once +.public AbilityIsActiveVeneer +.public AllocateTemp1024ByteBufferFromPool +.public CalcSpeedStage +.public CalcSpeedStageWrapper +.public CalcStatusDuration +.public ChangeShayminForme +.public CopyStringFromId +.public DIRECTIONS_XY +.public DUNGEON_PTR +.public DefenderAbilityIsActive__02311B94 +.public DungeonRandInt +.public DungeonRandOutcome__022EAB20 +.public EntityIsValid__023118B4 +.public EntityIsValid__02315118 +.public ExclusiveItemEffectFlagTest +.public GetExclusiveItemWithEffectFromBag +.public GetTile +.public GetTileAtEntity +.public IsProtectedFromNegativeStatus +.public IsProtectedFromSleepClassStatus +.public IsProtectedFromStatDrops +.public ItemIsActive__02311BF8 +.public ItemIsActive__0231513C +.public LogMessageByIdWithPopupCheckUserTarget +.public MonsterIsType +.public MultiplyByFixedPoint +.public SECONDARY_TERRAIN_TYPES +.public SPEED_BOOST_TURN_RANGE +.public SafeguardIsActive +.public SubstitutePlaceholderStringTags +.public TryActivateSteadfast +.public UpdateStatusIconFlags +.public ov10_022C4618 +.public ov10_022C4728 +.public ov10_022C479C +.public ov10_022C47A0 +.public ov10_022C4804 +.public ov10_022C4870 +.public ov10_022C4874 +.public ov10_022C4878 +.public ov10_022C4880 +.public ov10_022C4884 +.public ov10_022C488C +.public ov10_022C4890 +.public ov10_022C4894 +.public ov10_022C4898 +.public ov10_022C48A0 +.public ov10_022C48AC +.public ov10_022C48B8 +.public ov29_022E41CC +.public ov29_022E41F0 +.public ov29_022E4240 +.public ov29_022E4290 +.public ov29_022E4294 +.public ov29_022E42E0 +.public ov29_022E42E4 +.public ov29_022E4338 +.public ov29_022E4388 +.public ov29_022E43D8 +.public ov29_022E4428 +.public ov29_022E44CC +.public ov29_022E451C +.public ov29_022E4B8C +.public ov29_022E4BA0 +.public ov29_022E4BB4 +.public ov29_022E4C00 +.public ov29_022E4C4C +.public ov29_022E4D24 +.public ov29_022E4D28 +.public ov29_022E4DCC +.public ov29_022E4E74 +.public ov29_022E4F1C +.public ov29_022E4FC0 +.public ov29_022E5068 +.public ov29_022E510C +.public ov29_022E51B0 +.public ov29_022E5258 +.public ov29_022E52F8 +.public ov29_022E539C +.public ov29_022E53EC +.public ov29_022E543C +.public ov29_022E60E4 +.public ov29_0230040C +.public ov29_023018AC +.public ov29_02304A48 +.public ov29_02304A84 +.public ov29_02344B44 +.public ov29_0234B034 +.public ov29_0234B084 +.public ov29_0234B0B4 +.public ov29_02353318 diff --git a/asm/include/overlay_29_0231513C.inc b/asm/include/overlay_29_0231516C.inc similarity index 98% rename from asm/include/overlay_29_0231513C.inc rename to asm/include/overlay_29_0231516C.inc index 48716245..653cfe65 100644 --- a/asm/include/overlay_29_0231513C.inc +++ b/asm/include/overlay_29_0231516C.inc @@ -1,17 +1,16 @@ #pragma once -.public _s32_div_f +.public ATK_STAT_IDX .public AbilityIsActiveVeneer .public AdvanceFrame .public AiMovement .public AnimationDelayOrSomething -.public ATK_STAT_IDX .public BoostDefensiveStat .public BoostOffensiveStat .public CalcStatusDuration .public CeilFixedPoint +.public DUNGEON_PTR .public DetermineMonsterShadow .public DisplayAnimatedNumbers -.public DUNGEON_PTR .public DungeonGetSpriteIndex .public DungeonRandInt .public EndCurseClassStatus @@ -23,16 +22,28 @@ .public GetMonsterApparentId .public GetMonsterIdFromSpawnEntry .public GetNameWithGender -.public HasHeldItem .public HiddenStairsTrigger .public IqSkillIsEnabled .public IsProtectedFromNegativeStatus +.public ItemIsActive__0231513C .public LogMessageByIdWithPopupCheckUserTarget .public LowerSpeed .public MewSpawnCheck .public MonsterIsType .public MonsterSpawnListPartialCopy .public MultiplyByFixedPoint +.public PERISH_SONG_TURN_RANGE +.public SafeguardIsActive +.public ShouldDisplayEntityWrapper +.public SubFixedPoint +.public SubstitutePlaceholderStringTags +.public TryActivateQuickFeet +.public TryRemoveSnatchedMonsterFromDungeonStruct +.public UpdateCamera +.public UpdateMinimap +.public UpdateStatusIconFlags +.public UpdateTrapsVisibility +.public _s32_div_f .public ov10_022C4470 .public ov10_022C44B0 .public ov10_022C4784 @@ -84,20 +95,9 @@ .public ov29_02304830 .public ov29_0234B09C .public ov29_0234B0B4 -.public PERISH_SONG_TURN_RANGE -.public SafeguardIsActive -.public ShouldDisplayEntityWrapper .public strcpy .public sub_02001888 .public sub_02024FB8 .public sub_02050EBC .public sub_02050F78 .public sub_02050FF8 -.public SubFixedPoint -.public SubstitutePlaceholderStringTags -.public TryActivateQuickFeet -.public TryRemoveSnatchedMonsterFromDungeonStruct -.public UpdateCamera -.public UpdateMinimap -.public UpdateStatusIconFlags -.public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_023456BC.inc b/asm/include/overlay_29_023456BC.inc index a074c544..e2bacc52 100644 --- a/asm/include/overlay_29_023456BC.inc +++ b/asm/include/overlay_29_023456BC.inc @@ -1,8 +1,4 @@ #pragma once -.public _020AFC4C -.public _s32_div_f -.public AbilityIsActiveVeneer -.public abs .public AddMoneyCarried .public AdvanceFrame .public ApplyItemEffect @@ -12,16 +8,16 @@ .public DIRECTIONS_XY .public DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST .public DISPLACEMENTS_WITHIN_3 +.public DUNGEON_PTR .public DisplayMessage2 .public DoesProjectileHitTarget .public DrawMinimapTile -.public DUNGEON_PTR .public DungeonRand16Bit .public DungeonRandInt .public DungeonRandOutcome__022EAB20 .public EntityIsValid__02345698 .public EntityIsValid__02347BA4 -.public ExclusiveItemEffectFlagTest +.public ExclusiveItemEffectIsActive__02347B80 .public GetActiveTeamMember .public GetActualBuyPrice .public GetActualSellPrice @@ -52,6 +48,7 @@ .public IsShoppableItem .public IsUnown .public IsWaterTileset +.public ItemIsActive__02347B50 .public ItemZInit .public LogMessageByIdQuiet .public LogMessageByIdWithPopupCheckUser @@ -59,6 +56,22 @@ .public LogMessageByIdWithPopupCheckUserUnknown .public MONEY_QUANTITY_TABLE .public MonsterHasEmbargoStatus +.public RemoveEmptyItemsInBag +.public RetrieveFromItemList1 +.public SECONDARY_TERRAIN_TYPES +.public SetEntityPixelPosXY +.public SetItemAcquired +.public ShouldDisplayEntityWrapper +.public SpawnItem +.public SubstitutePlaceholderStringTags +.public TestItemAiFlag +.public TwoTurnMoveForcedMiss +.public UNOWN_STONE_DROP_CHANCE +.public UpdateEntityPixelPos +.public YesNoMenu +.public _020AFC4C +.public _s32_div_f +.public abs .public ov10_022C44C8 .public ov10_022C48EC .public ov10_022C4CD8 @@ -87,13 +100,6 @@ .public ov29_023537B4 .public ov29_023537BC .public ov29_0237C864 -.public RemoveEmptyItemsInBag -.public RetrieveFromItemList1 -.public SECONDARY_TERRAIN_TYPES -.public SetEntityPixelPosXY -.public SetItemAcquired -.public ShouldDisplayEntityWrapper -.public SpawnItem .public sub_020018D0 .public sub_0200CF6C .public sub_0200D1FC @@ -104,9 +110,3 @@ .public sub_0204F7A8 .public sub_02053D1C .public sub_02057CE8 -.public SubstitutePlaceholderStringTags -.public TestItemAiFlag -.public TwoTurnMoveForcedMiss -.public UNOWN_STONE_DROP_CHANCE -.public UpdateEntityPixelPos -.public YesNoMenu diff --git a/asm/include/overlay_29_02347B80.inc b/asm/include/overlay_29_02347B80.inc new file mode 100644 index 00000000..50a8a1be --- /dev/null +++ b/asm/include/overlay_29_02347B80.inc @@ -0,0 +1,2 @@ +#pragma once +.public ExclusiveItemEffectFlagTest diff --git a/asm/overlay_29_022E330C.s b/asm/overlay_29_022E333C.s similarity index 95% rename from asm/overlay_29_022E330C.s rename to asm/overlay_29_022E333C.s index bd0844d0..f536135a 100644 --- a/asm/overlay_29_022E330C.s +++ b/asm/overlay_29_022E333C.s @@ -1,24 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_022E330C.inc" + .include "overlay_29_022E333C.inc" .text - arm_func_start ItemIsActive__022E330C -ItemIsActive__022E330C: ; 0x022E330C - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__022E330C - arm_func_start GetVisibilityRange GetVisibilityRange: ; 0x022E333C ldr r0, _022E3358 ; =DUNGEON_PTR diff --git a/asm/overlay_29_022ECDE4.s b/asm/overlay_29_022ECDE4.s index a7e85f82..a16acbfc 100644 --- a/asm/overlay_29_022ECDE4.s +++ b/asm/overlay_29_022ECDE4.s @@ -1650,19 +1650,3 @@ _022EE30C: .word 0x00000E5C + TRY_TRIGGER_TRAP_DATA_OFFSET _022EE310: .word TRAP_BUSTER_ACTIVATION_CHANCE _022EE314: .word 0x00000E5D + TRY_TRIGGER_TRAP_DATA_OFFSET arm_func_end TryTriggerTrap - - arm_func_start ItemIsActive__022EE318 -ItemIsActive__022EE318: ; 0x022EE318 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__022EE318 diff --git a/asm/overlay_29_022F52B0.s b/asm/overlay_29_022F52B0.s index bbbb6c40..d8c53fb8 100644 --- a/asm/overlay_29_022F52B0.s +++ b/asm/overlay_29_022F52B0.s @@ -541,782 +541,3 @@ _022F6F84: .word 0x000008FF _022F598C: .word 0x00000BBF + USE_THROWABLE_ITEM_OFFSET _022F5990: .word DUNGEON_PTR arm_func_end UseThrowableItem - - arm_func_start ItemIsActive__022F5994 -ItemIsActive__022F5994: ; 0x022F5994 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__022F5994 - - arm_func_start ov29_022F59C4 -ov29_022F59C4: ; 0x022F59C4 - stmdb sp!, {r4, lr} - mov r4, r0 - bl ov29_022F87C0 - movs r1, r0 - moveq r1, #0 - beq _022F59FC - ldr r0, [r1] - cmp r0, #1 - movne r1, #0 - bne _022F59FC - ldr r0, [r4, #0xb4] - ldrb r0, [r0, #6] - cmp r0, #0 - movne r1, #0 -_022F59FC: - mov r0, r4 - mvn r2, #0 - bl ov29_022F5A40 - ldmia sp!, {r4, pc} - arm_func_end ov29_022F59C4 - - arm_func_start ov29_022F5A0C -ov29_022F5A0C: ; 0x022F5A0C - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetLeader - ldr r1, _022F5A3C ; =DUNGEON_PTR - ldrb r3, [r4, #4] - ldr r1, [r1] - mov r2, #0 - add r1, r1, r3, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa84] -#else - ldr r1, [r1, #0xb28] -#endif - bl ov29_022F5A40 - ldmia sp!, {r4, pc} - .align 2, 0 -_022F5A3C: .word DUNGEON_PTR - arm_func_end ov29_022F5A0C - - arm_func_start ov29_022F5A40 -ov29_022F5A40: ; 0x022F5A40 -#ifdef JAPAN -#define OV29_022F5A40_OFFSET -4 -#else -#define OV29_022F5A40_OFFSET 0 -#endif -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} -#else - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} -#endif - sub sp, sp, #0x18 + OV29_022F5A40_OFFSET - mov r6, r0 - movs sl, r1 - mov r5, r2 - ldr r8, [r6, #0xb4] - bne _022F5A70 -#ifdef JAPAN - mov r0, #0 - mov r1, #0x900 -#else - ldr r1, _022F5D9C ; =0x00000BC1 - mov r0, #0 -#endif - mov r2, #1 - bl DisplayMessage2 - b _022F5D94 -_022F5A70: - bl ov29_023009CC - cmp r0, #0 - bne _022F5A90 -#ifdef JAPAN - mov r0, #0 - mov r1, #0x900 -#else - ldr r1, _022F5D9C ; =0x00000BC1 - mov r0, #0 -#endif - mov r2, #1 - bl DisplayMessage2 - b _022F5D94 -_022F5A90: - ldr r0, [sl, #0xb4] - ldrb r0, [r0, #0xbc] - bl IsSecretBazaarNpcBehavior - movs r4, r0 - bne _022F5ADC - mov r0, r6 - mov r1, sl - mov r2, #1 - mov r3, #0 - bl GetTreatmentBetweenMonsters - cmp r0, #1 - beq _022F5D84 - mov r0, sl - mov r1, r6 - mov r2, #1 - mov r3, #0 - bl GetTreatmentBetweenMonsters - cmp r0, #1 - beq _022F5D84 -_022F5ADC: - ldr sb, [sl, #0xb4] - bl ov29_0234B034 - mov r1, #0 - mov r2, sb - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - bl ov29_0234B034 - mov r1, #0 - str r1, [sp] - mov r1, #1 - mov r2, sb - mov r3, #7 - bl ov29_0230040C - mov r0, #3 - bl ov29_02348C64 - mov r0, r6 - mov r1, sl - bl ov29_02307BDC - mov r0, sl - bl ov29_023009CC - cmp r0, #0 - beq _022F5B4C - mov r0, sl - mov r1, #1 - bl CheckVariousStatuses2 - cmp r0, #0 - beq _022F5B78 -_022F5B4C: - add r0, r6, #4 - add r1, sl, #4 - bl GetDirectionTowardsPosition - mov r1, r0 - mov r0, r6 - bl ov29_02304AFC - ldr r1, _022F5DA0 ; =0x00000BC2 - mov r0, #0 - mov r2, #1 - bl DisplayMessage2 - b _022F5D94 -_022F5B78: - add r0, r6, #4 - add r1, sl, #4 - bl GetDirectionTowardsPosition - mov r1, r0 - mov r0, r6 - bl ov29_02304AFC - cmp r5, #0 - blt _022F5BA8 - mov r0, sl - mov r1, r5 - bl ov29_02304AFC - b _022F5BB8 -_022F5BA8: - ldrb r1, [r8, #0x4c] - mov r0, sl - add r1, r1, #4 - bl ov29_02304AFC -_022F5BB8: - cmp r4, #0 - beq _022F5BD0 - mov r0, r6 - mov r1, sl - bl ov29_02344544 - b _022F5D94 -_022F5BD0: - ldrb r0, [sb, #9] - cmp r0, #1 - bne _022F5BE4 - bl ov29_022F6748 - b _022F5D94 -_022F5BE4: - ldrb r0, [sb, #0xbc] - cmp r0, #7 - bne _022F5C3C - ldr r0, _022F5DA4 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x790] - cmp r0, #0 - beq _022F5C18 - ldr r1, _022F5DA8 ; =0x00000BC3 - mov r0, #0 - mov r2, #1 - bl DisplayMessage2 - b _022F5D94 -_022F5C18: - bl GetMissionDestination - ldrb r0, [r0, #0x18] - cmp r0, #0 - mov r0, sl - beq _022F5C34 - bl ov29_0234A5E4 - b _022F5D94 -_022F5C34: - bl ov29_0234A2D4 - b _022F5D94 -_022F5C3C: - ldrsh r2, [sb, #0x12] - ldrsh r1, [sb, #0x16] - ldr r0, _022F5DAC ; =0x000003E7 - add r1, r2, r1 - cmp r1, r0 - movgt r1, r0 - mov r0, r1, lsl #3 - mov r1, #0xa - bl _s32_div_f - ldrsh r1, [sb, #0x10] - cmp r1, r0 - movge r4, #0 - bge _022F5C84 - mov r0, sl - bl HasLowHealth - cmp r0, #0 - moveq r4, #1 - movne r4, #2 -_022F5C84: - bl AllocateTemp1024ByteBufferFromPool - ldrb r1, [sb, #0x48] - mov r5, r0 - cmp r1, #0xd6 - bne _022F5CA4 - ldr r1, _022F5DB0 ; =0x0000025E - bl GetStringFromFileVeneer - b _022F5D3C -_022F5CA4: - mov r0, sl - mov r6, #0x14 - bl ov29_0231AE3C -#ifdef JAPAN - mov r7, r0 -#else - str r0, [sp, #4] - ldr r0, _022F5DB4 ; =0x000004D3 - sub fp, r0, #0x1b -#endif -_022F5CBC: - mov r0, sb - bl GetPersonalityIndex -#ifdef JAPAN - mov fp, r0 - ldr r0, _022F5DB4 ; =0x000004D3 - cmp fp, r0 -#else - mov r7, r0 - cmp r7, fp - ldrne r0, _022F5DB4 ; =0x000004D3 - cmpne r7, r0 -#endif - moveq r2, #0 - beq _022F5CE8 - ldrb r0, [r8, #0x48] - bl ov29_0234CFA0 - mov r2, r0 -_022F5CE8: -#ifdef JAPAN - mov r0, fp -#else - mov r0, r7 -#endif - mov r1, r4 - bl GetTalkLine - mov r1, r0 - mov r0, r5 - bl GetStringFromFileVeneer -#ifdef JAPAN - cmp r7, #0 -#else - ldr r0, [sp, #4] - cmp r0, #0 -#endif - bne _022F5D3C - ldr r1, _022F5DB8 ; =ov29_02352750 - mov r0, r5 - bl sub_02020880 - cmp r0, #0 - beq _022F5D3C - subs r6, r6, #1 - bne _022F5D34 - ldr r1, _022F5DBC ; =ov29_02352758 - mov r0, r5 - bl strcpy -_022F5D34: - cmp r6, #0 - bne _022F5CBC -_022F5D3C: - ldrb r0, [sb, #0x48] - cmp r0, #0xd7 - bne _022F5D5C - mov r0, sl - bl HasLowHealth - cmp r0, #0 - movne r2, #2 - bne _022F5D60 -_022F5D5C: - mov r2, #0 -_022F5D60: - ldrsh r1, [sb, #4] - add r0, sp, #8 + OV29_022F5A40_OFFSET - bl InitPortraitDungeon - add r1, sp, #8 + OV29_022F5A40_OFFSET - mov r0, sl - mov r2, r5 - mov r3, #1 - bl ov29_0234D304 - b _022F5D94 -_022F5D84: -#ifdef JAPAN - mov r0, #0 - mov r1, #0x900 -#else - ldr r1, _022F5D9C ; =0x00000BC1 - mov r0, #0 -#endif - mov r2, #1 - bl DisplayMessage2 -_022F5D94: - add sp, sp, #0x18 + OV29_022F5A40_OFFSET -#ifdef JAPAN - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} -#else - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -#endif - .align 2, 0 -#ifdef JAPAN -_022F5DA0: .word 0x00000901 -_022F5DA4: .word DUNGEON_PTR -_022F5DA8: .word 0x00000902 -_022F5DAC: .word 0x000003E7 -_022F5DB0: .word 0x000004F8 -_022F5DB4: .word 0x000004B8 -#else -_022F5D9C: .word 0x00000BC1 -_022F5DA0: .word 0x00000BC2 -_022F5DA4: .word DUNGEON_PTR -_022F5DA8: .word 0x00000BC3 -_022F5DAC: .word 0x000003E7 -_022F5DB0: .word 0x0000025E -_022F5DB4: .word 0x000004D3 -#endif -_022F5DB8: .word ov29_02352750 -_022F5DBC: .word ov29_02352758 - arm_func_end ov29_022F5A40 - - arm_func_start ov29_022F5DC0 -ov29_022F5DC0: ; 0x022F5DC0 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetLeader - ldr r1, _022F5DF0 ; =DUNGEON_PTR - ldrb r3, [r4, #4] - ldr r1, [r1] - mov r2, #0 - add r1, r1, r3, lsl #2 - add r1, r1, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa84] -#else - ldr r1, [r1, #0xb28] -#endif - bl ov29_022F5DF4 - ldmia sp!, {r4, pc} - .align 2, 0 -_022F5DF0: .word DUNGEON_PTR - arm_func_end ov29_022F5DC0 - - arm_func_start ov29_022F5DF4 -ov29_022F5DF4: ; 0x022F5DF4 - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0x44 - movs r7, r1 - ldr r4, [r7, #0xb4] - mov r0, #0 - bne _022F5E1C - ldr r1, _022F5F0C ; =0x00000BC4 - mov r2, #1 - bl DisplayMessage2 - b _022F5F04 -_022F5E1C: - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrsh r0, [r4, #0xc] - ldr r5, _022F5F10 ; =0x00000BC5 - cmp r0, #0 - add r6, r5, #4 - blt _022F5E84 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetActiveTeamMember - mov r4, r0 - ldrsh r0, [r4, #8] - bl CheckTeamMemberIdxVeneer - cmp r0, #0 - addne r5, r5, #3 - addne r6, r5, #3 - bne _022F5E84 - ldrsh r0, [r4, #8] - bl IsMonsterIdInNormalRangeVeneer - cmp r0, #0 - beq _022F5E84 - bl IsMarowakTrainingMaze - cmp r0, #0 - addne r5, r5, #2 - ldr r6, _022F5F14 ; =0x00000BCA - addeq r5, r5, #1 -_022F5E84: - mov r2, #1 -#ifdef JAPAN - mov r0, #0 - mov r1, r5 - mov r3, r2 - str r0, [sp] -#else - mov r1, r5 - mov r3, r2 - mov r0, #0 - str r2, [sp] -#endif - bl YesNoMenu - cmp r0, #1 - bne _022F5F04 - mov r0, #0 - bl ov29_0233A248 - mov r0, #0 - bl sub_02024FB8 - mov r1, r0 - add r0, sp, #4 - mov r2, #0x40 - bl strncpy - mov r0, r7 - bl ov29_022E690C - mov r0, r7 - mov r1, #0x25c - mov r2, #0 - bl HandleFaint -#if defined(NORTH_AMERICA) - bl UpdateMapSurveyorFlag -#endif - bl ov29_022E8104 - bl ov29_022E81F8 - mov r0, #0 - add r1, sp, #4 - bl ov29_0234B0B4 - mov r1, r6 - mov r0, #0 - mov r2, #1 -#ifdef JAPAN - bl DisplayMessage2 -#else - bl DisplayMessage -#endif -_022F5F04: - add sp, sp, #0x44 - ldmia sp!, {r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -_022F5F0C: .word 0x00000903 -_022F5F10: .word 0x00000904 -_022F5F14: .word 0x00000909 -#else -_022F5F0C: .word 0x00000BC4 -_022F5F10: .word 0x00000BC5 -_022F5F14: .word 0x00000BCA -#endif - arm_func_end ov29_022F5DF4 - - arm_func_start ov29_022F5F18 -ov29_022F5F18: ; 0x022F5F18 -#ifdef JAPAN -#define OV29_022F5F18_OFFSET -4 -#else -#define OV29_022F5F18_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - mov sb, r0 - mov r7, #0 - bl EntityIsValid__022F528C - cmp r0, #0 - beq _022F5F88 - ldr r0, _022F6050 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrb r0, [r0, #0x36] -#else - ldrb r0, [r0, #0xda] -#endif - bl AreMovesEnabled - cmp r0, #0 - bne _022F5F60 - ldr r1, _022F6054 ; =0x00000DFD - mov r0, sb - bl LogMessageByIdWithPopupCheckUser - b _022F6048 -_022F5F60: - ldr r4, [sb, #0xb4] - mov r1, r7 - mov r0, sb - strb r1, [r4, #0x23f + OV29_022F5F18_OFFSET] - bl ShouldUsePp - cmp r0, #0 - movne r7, #1 - strneb r7, [r4, #0x23f + OV29_022F5F18_OFFSET] - mov r0, #0 - strb r0, [r4, #0x23e + OV29_022F5F18_OFFSET] -_022F5F88: - mov r6, #0 - mov r4, #1 - mov r5, r6 - mov sl, r4 - b _022F5FD8 -_022F5F9C: - ldr r8, [sb, #0xb4] - mov r0, sb - str r5, [sp] - ldrb r1, [r8, #0x54] - mov r2, r4 - mov r3, r5 - bl ov29_0232145C - bl IsFloorOver - cmp r0, #0 - ldreqb r0, [r8, #0x23e + OV29_022F5F18_OFFSET] - cmpeq r0, #0 - ldreqb r0, [r8, #0x163 + OV29_022F5F18_OFFSET] - cmpeq r0, #0 - bne _022F5FEC - add r6, r6, #1 -_022F5FD8: - mov r0, sb - mov r1, sl - bl GetNumberOfAttacks - cmp r6, r0 - blt _022F5F9C -_022F5FEC: - mov r0, sb - bl EntityIsValid__022F528C - cmp r0, #0 - beq _022F6014 - cmp r7, #0 - moveq r1, #1 - movne r1, #0 - mov r0, sb - and r1, r1, #0xff - bl UpdateMovePp -_022F6014: - bl IsFloorOver - cmp r0, #0 - bne _022F6048 - mov r0, sb - bl EntityIsValid__022F528C - cmp r0, #0 - beq _022F6040 - ldr r1, [sb, #0xb4] - mov r0, sb - ldrb r1, [r1, #0x54] - bl ov29_022FA574 -_022F6040: - mov r0, sb - bl TryActivateTruant -_022F6048: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_022F6050: .word DUNGEON_PTR -#ifdef JAPAN -_022F6054: .word 0x00000B3D -#else -_022F6054: .word 0x00000DFD -#endif - arm_func_end ov29_022F5F18 - - arm_func_start ov29_022F6058 -ov29_022F6058: ; 0x022F6058 -#ifdef JAPAN -#define OV29_022F6058_OFFSET -4 -#else -#define OV29_022F6058_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x14 - mov sl, r0 - ldr r7, [sl, #0xb4] - ldr r2, _022F61F8 ; =ov29_0237CA80 - mov r3, #0 - add r0, sp, #0xc - str r3, [r2] - mov sb, r1 - bl InitMove - ldrb r0, [r7, #0xd0] - cmp r0, #1 - bne _022F60AC - mov r0, #0 - mov r1, sl - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, _022F61FC ; =0x00000BCC - mov r0, sl - bl LogMessageByIdWithPopupCheckUser - b _022F61F0 -_022F60AC: - ldrb r0, [r7, #0xbf] - cmp r0, #4 - bne _022F60D8 - mov r0, #0 - mov r1, sl - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r1, _022F6200 ; =0x00000BCD - mov r0, sl - bl LogMessageByIdWithPopupCheckUser - b _022F61F0 -_022F60D8: - mov r6, #0 - cmp sb, #0x160 - moveq r8, #1 - movne r8, #0 - strb r6, [r7, #0x163 + OV29_022F6058_OFFSET] - mov fp, r6 - mov r5, #0xa - add r4, sp, #0xc - b _022F6154 -_022F60FC: - mov r0, sl - bl ov29_022F3B8C - str fp, [r7, #0x18c + OV29_022F6058_OFFSET] - ldrb r1, [sp, #0xc] - strb r5, [sp, #0x12] - mov r0, sl - orr r1, r1, #0xc - strb r1, [sp, #0xc] - str fp, [sp] - mov r1, r8 - mov r2, fp - mov r3, fp - str r4, [sp, #4] - bl ov29_02322374 - mov r0, sl - bl EntityIsValid__022F528C - cmp r0, #0 - beq _022F6168 - ldrb r0, [r7, #0x163 + OV29_022F6058_OFFSET] - cmp r0, #0 - bne _022F6168 - add r6, r6, #1 -_022F6154: - mov r0, sl - mov r1, #1 - bl GetNumberOfAttacks - cmp r6, r0 - blt _022F60FC -_022F6168: - mov r0, sl - bl EntityIsValid__022F528C - cmp r0, #0 - beq _022F61F0 - cmp sb, #0x160 - ldreq r0, _022F61F8 ; =ov29_0237CA80 - ldreq r0, [r0] - cmpeq r0, #0 - bne _022F6198 - ldr r1, _022F6204 ; =0x00000BCE - mov r0, sl - bl LogMessageByIdWithPopupCheckUser -_022F6198: - ldrb r0, [r7, #7] - cmp r0, #0 - cmpne sb, #0x160 - beq _022F61E8 - ldrb r1, [r7, #0x4c] - ldr r0, _022F6208 ; =DIRECTIONS_XY - ldrsh r3, [sl, #4] - mov r1, r1, lsl #2 - ldrsh r2, [r0, r1] - ldr r1, _022F620C ; =ov29_0235171E - add r0, sp, #8 - add r2, r3, r2 - strh r2, [sp, #8] - ldrb r2, [r7, #0x4c] - ldrsh r3, [sl, #6] - mov r2, r2, lsl #2 - ldrsh r1, [r1, r2] - add r1, r3, r1 - strh r1, [sp, #0xa] - bl ov29_02338430 -_022F61E8: - mov r0, sl - bl EnemyEvolution -_022F61F0: - add sp, sp, #0x14 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022F61F8: .word ov29_0237CA80 -#ifdef JAPAN -_022F61FC: .word 0x0000090B -_022F6200: .word 0x0000090C -_022F6204: .word 0x0000090D -#else -_022F61FC: .word 0x00000BCC -_022F6200: .word 0x00000BCD -_022F6204: .word 0x00000BCE -#endif -_022F6208: .word DIRECTIONS_XY -_022F620C: .word ov29_0235171E - arm_func_end ov29_022F6058 - - arm_func_start ov29_022F6210 -ov29_022F6210: ; 0x022F6210 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r0 - bl EntityIsValid__022F62A8 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r4, #0 - ldr r7, _022F62A4 ; =DUNGEON_PTR - b _022F6294 -_022F6234: - ldr r0, [r7] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r5, [r0, #0xa94] -#else - ldr r5, [r0, #0xb38] -#endif - mov r0, r5 - bl EntityIsValid__022F62A8 - cmp r0, #0 - beq _022F6288 - ldr r0, [r5, #0xb4] - ldrb r0, [r0, #9] - cmp r0, #1 - bne _022F6288 - mov r0, r5 - bl ov29_023009CC - cmp r0, #0 - beq _022F6288 - ldrb r1, [r6, #0x25] - ldrb r0, [r5, #0x25] - cmp r1, r0 - moveq r0, r5 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} -_022F6288: - add r0, r4, #1 - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 -_022F6294: - cmp r4, #0x10 - blt _022F6234 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022F62A4: .word DUNGEON_PTR - arm_func_end ov29_022F6210 diff --git a/asm/overlay_29_022F59C4.s b/asm/overlay_29_022F59C4.s new file mode 100644 index 00000000..c1cf5fc6 --- /dev/null +++ b/asm/overlay_29_022F59C4.s @@ -0,0 +1,767 @@ + .include "asm/macros.inc" + .include "overlay_29_022F59C4.inc" + + .text + + arm_func_start ov29_022F59C4 +ov29_022F59C4: ; 0x022F59C4 + stmdb sp!, {r4, lr} + mov r4, r0 + bl ov29_022F87C0 + movs r1, r0 + moveq r1, #0 + beq _022F59FC + ldr r0, [r1] + cmp r0, #1 + movne r1, #0 + bne _022F59FC + ldr r0, [r4, #0xb4] + ldrb r0, [r0, #6] + cmp r0, #0 + movne r1, #0 +_022F59FC: + mov r0, r4 + mvn r2, #0 + bl ov29_022F5A40 + ldmia sp!, {r4, pc} + arm_func_end ov29_022F59C4 + + arm_func_start ov29_022F5A0C +ov29_022F5A0C: ; 0x022F5A0C + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetLeader + ldr r1, _022F5A3C ; =DUNGEON_PTR + ldrb r3, [r4, #4] + ldr r1, [r1] + mov r2, #0 + add r1, r1, r3, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xa84] +#else + ldr r1, [r1, #0xb28] +#endif + bl ov29_022F5A40 + ldmia sp!, {r4, pc} + .align 2, 0 +_022F5A3C: .word DUNGEON_PTR + arm_func_end ov29_022F5A0C + + arm_func_start ov29_022F5A40 +ov29_022F5A40: ; 0x022F5A40 +#ifdef JAPAN +#define OV29_022F5A40_OFFSET -4 +#else +#define OV29_022F5A40_OFFSET 0 +#endif +#ifdef JAPAN + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} +#else + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} +#endif + sub sp, sp, #0x18 + OV29_022F5A40_OFFSET + mov r6, r0 + movs sl, r1 + mov r5, r2 + ldr r8, [r6, #0xb4] + bne _022F5A70 +#ifdef JAPAN + mov r0, #0 + mov r1, #0x900 +#else + ldr r1, _022F5D9C ; =0x00000BC1 + mov r0, #0 +#endif + mov r2, #1 + bl DisplayMessage2 + b _022F5D94 +_022F5A70: + bl ov29_023009CC + cmp r0, #0 + bne _022F5A90 +#ifdef JAPAN + mov r0, #0 + mov r1, #0x900 +#else + ldr r1, _022F5D9C ; =0x00000BC1 + mov r0, #0 +#endif + mov r2, #1 + bl DisplayMessage2 + b _022F5D94 +_022F5A90: + ldr r0, [sl, #0xb4] + ldrb r0, [r0, #0xbc] + bl IsSecretBazaarNpcBehavior + movs r4, r0 + bne _022F5ADC + mov r0, r6 + mov r1, sl + mov r2, #1 + mov r3, #0 + bl GetTreatmentBetweenMonsters + cmp r0, #1 + beq _022F5D84 + mov r0, sl + mov r1, r6 + mov r2, #1 + mov r3, #0 + bl GetTreatmentBetweenMonsters + cmp r0, #1 + beq _022F5D84 +_022F5ADC: + ldr sb, [sl, #0xb4] + bl ov29_0234B034 + mov r1, #0 + mov r2, sb + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + bl ov29_0234B034 + mov r1, #0 + str r1, [sp] + mov r1, #1 + mov r2, sb + mov r3, #7 + bl ov29_0230040C + mov r0, #3 + bl ov29_02348C64 + mov r0, r6 + mov r1, sl + bl ov29_02307BDC + mov r0, sl + bl ov29_023009CC + cmp r0, #0 + beq _022F5B4C + mov r0, sl + mov r1, #1 + bl CheckVariousStatuses2 + cmp r0, #0 + beq _022F5B78 +_022F5B4C: + add r0, r6, #4 + add r1, sl, #4 + bl GetDirectionTowardsPosition + mov r1, r0 + mov r0, r6 + bl ov29_02304AFC + ldr r1, _022F5DA0 ; =0x00000BC2 + mov r0, #0 + mov r2, #1 + bl DisplayMessage2 + b _022F5D94 +_022F5B78: + add r0, r6, #4 + add r1, sl, #4 + bl GetDirectionTowardsPosition + mov r1, r0 + mov r0, r6 + bl ov29_02304AFC + cmp r5, #0 + blt _022F5BA8 + mov r0, sl + mov r1, r5 + bl ov29_02304AFC + b _022F5BB8 +_022F5BA8: + ldrb r1, [r8, #0x4c] + mov r0, sl + add r1, r1, #4 + bl ov29_02304AFC +_022F5BB8: + cmp r4, #0 + beq _022F5BD0 + mov r0, r6 + mov r1, sl + bl ov29_02344544 + b _022F5D94 +_022F5BD0: + ldrb r0, [sb, #9] + cmp r0, #1 + bne _022F5BE4 + bl ov29_022F6748 + b _022F5D94 +_022F5BE4: + ldrb r0, [sb, #0xbc] + cmp r0, #7 + bne _022F5C3C + ldr r0, _022F5DA4 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x790] + cmp r0, #0 + beq _022F5C18 + ldr r1, _022F5DA8 ; =0x00000BC3 + mov r0, #0 + mov r2, #1 + bl DisplayMessage2 + b _022F5D94 +_022F5C18: + bl GetMissionDestination + ldrb r0, [r0, #0x18] + cmp r0, #0 + mov r0, sl + beq _022F5C34 + bl ov29_0234A5E4 + b _022F5D94 +_022F5C34: + bl ov29_0234A2D4 + b _022F5D94 +_022F5C3C: + ldrsh r2, [sb, #0x12] + ldrsh r1, [sb, #0x16] + ldr r0, _022F5DAC ; =0x000003E7 + add r1, r2, r1 + cmp r1, r0 + movgt r1, r0 + mov r0, r1, lsl #3 + mov r1, #0xa + bl _s32_div_f + ldrsh r1, [sb, #0x10] + cmp r1, r0 + movge r4, #0 + bge _022F5C84 + mov r0, sl + bl HasLowHealth + cmp r0, #0 + moveq r4, #1 + movne r4, #2 +_022F5C84: + bl AllocateTemp1024ByteBufferFromPool + ldrb r1, [sb, #0x48] + mov r5, r0 + cmp r1, #0xd6 + bne _022F5CA4 + ldr r1, _022F5DB0 ; =0x0000025E + bl GetStringFromFileVeneer + b _022F5D3C +_022F5CA4: + mov r0, sl + mov r6, #0x14 + bl ov29_0231AE3C +#ifdef JAPAN + mov r7, r0 +#else + str r0, [sp, #4] + ldr r0, _022F5DB4 ; =0x000004D3 + sub fp, r0, #0x1b +#endif +_022F5CBC: + mov r0, sb + bl GetPersonalityIndex +#ifdef JAPAN + mov fp, r0 + ldr r0, _022F5DB4 ; =0x000004D3 + cmp fp, r0 +#else + mov r7, r0 + cmp r7, fp + ldrne r0, _022F5DB4 ; =0x000004D3 + cmpne r7, r0 +#endif + moveq r2, #0 + beq _022F5CE8 + ldrb r0, [r8, #0x48] + bl ov29_0234CFA0 + mov r2, r0 +_022F5CE8: +#ifdef JAPAN + mov r0, fp +#else + mov r0, r7 +#endif + mov r1, r4 + bl GetTalkLine + mov r1, r0 + mov r0, r5 + bl GetStringFromFileVeneer +#ifdef JAPAN + cmp r7, #0 +#else + ldr r0, [sp, #4] + cmp r0, #0 +#endif + bne _022F5D3C + ldr r1, _022F5DB8 ; =ov29_02352750 + mov r0, r5 + bl sub_02020880 + cmp r0, #0 + beq _022F5D3C + subs r6, r6, #1 + bne _022F5D34 + ldr r1, _022F5DBC ; =ov29_02352758 + mov r0, r5 + bl strcpy +_022F5D34: + cmp r6, #0 + bne _022F5CBC +_022F5D3C: + ldrb r0, [sb, #0x48] + cmp r0, #0xd7 + bne _022F5D5C + mov r0, sl + bl HasLowHealth + cmp r0, #0 + movne r2, #2 + bne _022F5D60 +_022F5D5C: + mov r2, #0 +_022F5D60: + ldrsh r1, [sb, #4] + add r0, sp, #8 + OV29_022F5A40_OFFSET + bl InitPortraitDungeon + add r1, sp, #8 + OV29_022F5A40_OFFSET + mov r0, sl + mov r2, r5 + mov r3, #1 + bl ov29_0234D304 + b _022F5D94 +_022F5D84: +#ifdef JAPAN + mov r0, #0 + mov r1, #0x900 +#else + ldr r1, _022F5D9C ; =0x00000BC1 + mov r0, #0 +#endif + mov r2, #1 + bl DisplayMessage2 +_022F5D94: + add sp, sp, #0x18 + OV29_022F5A40_OFFSET +#ifdef JAPAN + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +#else + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +#endif + .align 2, 0 +#ifdef JAPAN +_022F5DA0: .word 0x00000901 +_022F5DA4: .word DUNGEON_PTR +_022F5DA8: .word 0x00000902 +_022F5DAC: .word 0x000003E7 +_022F5DB0: .word 0x000004F8 +_022F5DB4: .word 0x000004B8 +#else +_022F5D9C: .word 0x00000BC1 +_022F5DA0: .word 0x00000BC2 +_022F5DA4: .word DUNGEON_PTR +_022F5DA8: .word 0x00000BC3 +_022F5DAC: .word 0x000003E7 +_022F5DB0: .word 0x0000025E +_022F5DB4: .word 0x000004D3 +#endif +_022F5DB8: .word ov29_02352750 +_022F5DBC: .word ov29_02352758 + arm_func_end ov29_022F5A40 + + arm_func_start ov29_022F5DC0 +ov29_022F5DC0: ; 0x022F5DC0 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetLeader + ldr r1, _022F5DF0 ; =DUNGEON_PTR + ldrb r3, [r4, #4] + ldr r1, [r1] + mov r2, #0 + add r1, r1, r3, lsl #2 + add r1, r1, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xa84] +#else + ldr r1, [r1, #0xb28] +#endif + bl ov29_022F5DF4 + ldmia sp!, {r4, pc} + .align 2, 0 +_022F5DF0: .word DUNGEON_PTR + arm_func_end ov29_022F5DC0 + + arm_func_start ov29_022F5DF4 +ov29_022F5DF4: ; 0x022F5DF4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x44 + movs r7, r1 + ldr r4, [r7, #0xb4] + mov r0, #0 + bne _022F5E1C + ldr r1, _022F5F0C ; =0x00000BC4 + mov r2, #1 + bl DisplayMessage2 + b _022F5F04 +_022F5E1C: + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrsh r0, [r4, #0xc] + ldr r5, _022F5F10 ; =0x00000BC5 + cmp r0, #0 + add r6, r5, #4 + blt _022F5E84 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetActiveTeamMember + mov r4, r0 + ldrsh r0, [r4, #8] + bl CheckTeamMemberIdxVeneer + cmp r0, #0 + addne r5, r5, #3 + addne r6, r5, #3 + bne _022F5E84 + ldrsh r0, [r4, #8] + bl IsMonsterIdInNormalRangeVeneer + cmp r0, #0 + beq _022F5E84 + bl IsMarowakTrainingMaze + cmp r0, #0 + addne r5, r5, #2 + ldr r6, _022F5F14 ; =0x00000BCA + addeq r5, r5, #1 +_022F5E84: + mov r2, #1 +#ifdef JAPAN + mov r0, #0 + mov r1, r5 + mov r3, r2 + str r0, [sp] +#else + mov r1, r5 + mov r3, r2 + mov r0, #0 + str r2, [sp] +#endif + bl YesNoMenu + cmp r0, #1 + bne _022F5F04 + mov r0, #0 + bl ov29_0233A248 + mov r0, #0 + bl sub_02024FB8 + mov r1, r0 + add r0, sp, #4 + mov r2, #0x40 + bl strncpy + mov r0, r7 + bl ov29_022E690C + mov r0, r7 + mov r1, #0x25c + mov r2, #0 + bl HandleFaint +#if defined(NORTH_AMERICA) + bl UpdateMapSurveyorFlag +#endif + bl ov29_022E8104 + bl ov29_022E81F8 + mov r0, #0 + add r1, sp, #4 + bl ov29_0234B0B4 + mov r1, r6 + mov r0, #0 + mov r2, #1 +#ifdef JAPAN + bl DisplayMessage2 +#else + bl DisplayMessage +#endif +_022F5F04: + add sp, sp, #0x44 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +#ifdef JAPAN +_022F5F0C: .word 0x00000903 +_022F5F10: .word 0x00000904 +_022F5F14: .word 0x00000909 +#else +_022F5F0C: .word 0x00000BC4 +_022F5F10: .word 0x00000BC5 +_022F5F14: .word 0x00000BCA +#endif + arm_func_end ov29_022F5DF4 + + arm_func_start ov29_022F5F18 +ov29_022F5F18: ; 0x022F5F18 +#ifdef JAPAN +#define OV29_022F5F18_OFFSET -4 +#else +#define OV29_022F5F18_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + mov sb, r0 + mov r7, #0 + bl EntityIsValid__022F528C + cmp r0, #0 + beq _022F5F88 + ldr r0, _022F6050 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x4000 +#ifdef JAPAN + ldrb r0, [r0, #0x36] +#else + ldrb r0, [r0, #0xda] +#endif + bl AreMovesEnabled + cmp r0, #0 + bne _022F5F60 + ldr r1, _022F6054 ; =0x00000DFD + mov r0, sb + bl LogMessageByIdWithPopupCheckUser + b _022F6048 +_022F5F60: + ldr r4, [sb, #0xb4] + mov r1, r7 + mov r0, sb + strb r1, [r4, #0x23f + OV29_022F5F18_OFFSET] + bl ShouldUsePp + cmp r0, #0 + movne r7, #1 + strneb r7, [r4, #0x23f + OV29_022F5F18_OFFSET] + mov r0, #0 + strb r0, [r4, #0x23e + OV29_022F5F18_OFFSET] +_022F5F88: + mov r6, #0 + mov r4, #1 + mov r5, r6 + mov sl, r4 + b _022F5FD8 +_022F5F9C: + ldr r8, [sb, #0xb4] + mov r0, sb + str r5, [sp] + ldrb r1, [r8, #0x54] + mov r2, r4 + mov r3, r5 + bl ov29_0232145C + bl IsFloorOver + cmp r0, #0 + ldreqb r0, [r8, #0x23e + OV29_022F5F18_OFFSET] + cmpeq r0, #0 + ldreqb r0, [r8, #0x163 + OV29_022F5F18_OFFSET] + cmpeq r0, #0 + bne _022F5FEC + add r6, r6, #1 +_022F5FD8: + mov r0, sb + mov r1, sl + bl GetNumberOfAttacks + cmp r6, r0 + blt _022F5F9C +_022F5FEC: + mov r0, sb + bl EntityIsValid__022F528C + cmp r0, #0 + beq _022F6014 + cmp r7, #0 + moveq r1, #1 + movne r1, #0 + mov r0, sb + and r1, r1, #0xff + bl UpdateMovePp +_022F6014: + bl IsFloorOver + cmp r0, #0 + bne _022F6048 + mov r0, sb + bl EntityIsValid__022F528C + cmp r0, #0 + beq _022F6040 + ldr r1, [sb, #0xb4] + mov r0, sb + ldrb r1, [r1, #0x54] + bl ov29_022FA574 +_022F6040: + mov r0, sb + bl TryActivateTruant +_022F6048: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_022F6050: .word DUNGEON_PTR +#ifdef JAPAN +_022F6054: .word 0x00000B3D +#else +_022F6054: .word 0x00000DFD +#endif + arm_func_end ov29_022F5F18 + + arm_func_start ov29_022F6058 +ov29_022F6058: ; 0x022F6058 +#ifdef JAPAN +#define OV29_022F6058_OFFSET -4 +#else +#define OV29_022F6058_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x14 + mov sl, r0 + ldr r7, [sl, #0xb4] + ldr r2, _022F61F8 ; =ov29_0237CA80 + mov r3, #0 + add r0, sp, #0xc + str r3, [r2] + mov sb, r1 + bl InitMove + ldrb r0, [r7, #0xd0] + cmp r0, #1 + bne _022F60AC + mov r0, #0 + mov r1, sl + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, _022F61FC ; =0x00000BCC + mov r0, sl + bl LogMessageByIdWithPopupCheckUser + b _022F61F0 +_022F60AC: + ldrb r0, [r7, #0xbf] + cmp r0, #4 + bne _022F60D8 + mov r0, #0 + mov r1, sl + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r1, _022F6200 ; =0x00000BCD + mov r0, sl + bl LogMessageByIdWithPopupCheckUser + b _022F61F0 +_022F60D8: + mov r6, #0 + cmp sb, #0x160 + moveq r8, #1 + movne r8, #0 + strb r6, [r7, #0x163 + OV29_022F6058_OFFSET] + mov fp, r6 + mov r5, #0xa + add r4, sp, #0xc + b _022F6154 +_022F60FC: + mov r0, sl + bl ov29_022F3B8C + str fp, [r7, #0x18c + OV29_022F6058_OFFSET] + ldrb r1, [sp, #0xc] + strb r5, [sp, #0x12] + mov r0, sl + orr r1, r1, #0xc + strb r1, [sp, #0xc] + str fp, [sp] + mov r1, r8 + mov r2, fp + mov r3, fp + str r4, [sp, #4] + bl ov29_02322374 + mov r0, sl + bl EntityIsValid__022F528C + cmp r0, #0 + beq _022F6168 + ldrb r0, [r7, #0x163 + OV29_022F6058_OFFSET] + cmp r0, #0 + bne _022F6168 + add r6, r6, #1 +_022F6154: + mov r0, sl + mov r1, #1 + bl GetNumberOfAttacks + cmp r6, r0 + blt _022F60FC +_022F6168: + mov r0, sl + bl EntityIsValid__022F528C + cmp r0, #0 + beq _022F61F0 + cmp sb, #0x160 + ldreq r0, _022F61F8 ; =ov29_0237CA80 + ldreq r0, [r0] + cmpeq r0, #0 + bne _022F6198 + ldr r1, _022F6204 ; =0x00000BCE + mov r0, sl + bl LogMessageByIdWithPopupCheckUser +_022F6198: + ldrb r0, [r7, #7] + cmp r0, #0 + cmpne sb, #0x160 + beq _022F61E8 + ldrb r1, [r7, #0x4c] + ldr r0, _022F6208 ; =DIRECTIONS_XY + ldrsh r3, [sl, #4] + mov r1, r1, lsl #2 + ldrsh r2, [r0, r1] + ldr r1, _022F620C ; =ov29_0235171E + add r0, sp, #8 + add r2, r3, r2 + strh r2, [sp, #8] + ldrb r2, [r7, #0x4c] + ldrsh r3, [sl, #6] + mov r2, r2, lsl #2 + ldrsh r1, [r1, r2] + add r1, r3, r1 + strh r1, [sp, #0xa] + bl ov29_02338430 +_022F61E8: + mov r0, sl + bl EnemyEvolution +_022F61F0: + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022F61F8: .word ov29_0237CA80 +#ifdef JAPAN +_022F61FC: .word 0x0000090B +_022F6200: .word 0x0000090C +_022F6204: .word 0x0000090D +#else +_022F61FC: .word 0x00000BCC +_022F6200: .word 0x00000BCD +_022F6204: .word 0x00000BCE +#endif +_022F6208: .word DIRECTIONS_XY +_022F620C: .word ov29_0235171E + arm_func_end ov29_022F6058 + + arm_func_start ov29_022F6210 +ov29_022F6210: ; 0x022F6210 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r0 + bl EntityIsValid__022F62A8 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r4, #0 + ldr r7, _022F62A4 ; =DUNGEON_PTR + b _022F6294 +_022F6234: + ldr r0, [r7] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r5, [r0, #0xa94] +#else + ldr r5, [r0, #0xb38] +#endif + mov r0, r5 + bl EntityIsValid__022F62A8 + cmp r0, #0 + beq _022F6288 + ldr r0, [r5, #0xb4] + ldrb r0, [r0, #9] + cmp r0, #1 + bne _022F6288 + mov r0, r5 + bl ov29_023009CC + cmp r0, #0 + beq _022F6288 + ldrb r1, [r6, #0x25] + ldrb r0, [r5, #0x25] + cmp r1, r0 + moveq r0, r5 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} +_022F6288: + add r0, r4, #1 + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 +_022F6294: + cmp r4, #0x10 + blt _022F6234 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022F62A4: .word DUNGEON_PTR + arm_func_end ov29_022F6210 diff --git a/asm/overlay_29_022FEDBC.s b/asm/overlay_29_022FEDBC.s index 481036ef..ef775920 100644 --- a/asm/overlay_29_022FEDBC.s +++ b/asm/overlay_29_022FEDBC.s @@ -909,729 +909,3 @@ _022FF890: mov r0, #1 ldmia sp!, {r3, r4, r5, r6, r7, pc} arm_func_end ov29_022FF764 - - arm_func_start ItemIsActive__022FF898 -ItemIsActive__022FF898: ; 0x022FF898 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActive - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__022FF898 - -#ifndef JAPAN - arm_func_start GetMobilityTypeAfterIqSkills -GetMobilityTypeAfterIqSkills: ; 0x022FF8C8 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - cmp r4, #3 - beq _022FF8EC - mov r1, #0xc - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #2 -_022FF8EC: - mov r0, r5 - mov r1, #0xd - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #3 - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end GetMobilityTypeAfterIqSkills -#endif - - arm_func_start ov29_022FF908 -ov29_022FF908: ; 0x022FF908 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r4, [r5, #0xb4] - ldrb r1, [r4, #0xef] - cmp r1, #3 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - mov r1, #0x10 - bl ItemIsActive__022FF898 - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, pc} - ldrsh r1, [r4, #2] - mov r0, r5 - bl GetMobilityTypeCheckSlipAndFloating - cmp r0, #3 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov29_022FF908 - - arm_func_start ov29_022FF958 -ov29_022FF958: ; 0x022FF958 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r1 - mov r6, r0 - ldrsh r0, [r7] - ldrsh r1, [r7, #2] - ldr r5, [r6, #0xb4] - bl GetTile - ldrsh r1, [r7] - mov r4, r0 - cmp r1, #0 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - ldrsh r0, [r7, #2] - cmp r0, #0 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - cmp r1, #0x38 - movge r0, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, pc} - cmp r0, #0x20 - movge r0, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, pc} - ldrh r0, [r4] - tst r0, #0x10 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r0, [r4, #0xc] - cmp r0, #0 - ldrne r0, [r0] - cmpne r0, #1 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - bl IsCurrentTilesetBackground - cmp r0, #0 - bne _022FFA0C - ldrb r0, [r5, #0xef] - cmp r0, #3 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r6 - mov r1, #0x10 - bl ItemIsActive__022FF898 - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_022FFA0C: - ldrsh r1, [r5, #2] - mov r0, r6 - bl GetMobilityTypeCheckSlipAndFloating - ldrh r2, [r4] -#ifdef JAPAN - mov r4, r0 - mov r0, r6 - mov r1, #0xc - and r5, r2, #3 - bl IqSkillIsEnabled - cmp r0, #0 - mov r0, r6 - mov r1, #0xd - movne r4, #2 - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #3 - cmp r4, #3 - addls pc, pc, r4, lsl #2 -#else - mov r1, r0 - mov r0, r6 - and r4, r2, #3 - bl GetMobilityTypeAfterIqSkills - cmp r0, #3 - addls pc, pc, r0, lsl #2 -#endif - b _022FFA84 -_022FFA38: ; jump table - b _022FFA48 ; case 0 - b _022FFA58 ; case 1 - b _022FFA74 ; case 2 - b _022FFA84 ; case 3 -_022FFA48: -#ifdef JAPAN - cmp r5, #1 -#else - cmp r4, #1 -#endif - bne _022FFA8C - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFA58: -#ifdef JAPAN - cmp r5, #2 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r5, #1 -#else - cmp r4, #2 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r4, #1 -#endif - bne _022FFA8C - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFA74: -#ifdef JAPAN - cmp r5, #0 -#else - cmp r4, #0 -#endif - beq _022FFA8C - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFA84: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFA8C: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov29_022FF958 - - arm_func_start ov29_022FFA94 -ov29_022FFA94: ; 0x022FFA94 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r1 - mov r6, r0 - ldrsh r0, [r7] - ldrsh r1, [r7, #2] - ldr r5, [r6, #0xb4] - bl GetTile - ldrsh r1, [r7] - mov r4, r0 - cmp r1, #0 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - ldrsh r0, [r7, #2] - cmp r0, #0 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - cmp r1, #0x38 - movge r0, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, pc} - cmp r0, #0x20 - movge r0, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, pc} - ldrh r0, [r4] - tst r0, #0x10 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r0, [r4, #0xc] - cmp r0, #0 - ldrne r0, [r0] - cmpne r0, #1 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldrsh r1, [r5, #2] - mov r0, r6 - bl GetMobilityTypeCheckSlipAndFloating - ldrh r1, [r4] - cmp r0, #3 - and r1, r1, #3 - addls pc, pc, r0, lsl #2 - b _022FFB80 -_022FFB34: ; jump table - b _022FFB44 ; case 0 - b _022FFB54 ; case 1 - b _022FFB70 ; case 2 - b _022FFB70 ; case 3 -_022FFB44: - cmp r1, #1 - bne _022FFB88 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFB54: - cmp r1, #2 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r1, #1 - bne _022FFB88 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFB70: - cmp r1, #0 - beq _022FFB88 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFB80: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFB88: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov29_022FFA94 - - arm_func_start ov29_022FFB90 -ov29_022FFB90: ; 0x022FFB90 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r1 - mov r6, r0 - ldrsh r0, [r7] - ldrsh r1, [r7, #2] - ldr r5, [r6, #0xb4] - bl GetTile - ldrsh r1, [r7] - mov r4, r0 - cmp r1, #0 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - ldrsh r0, [r7, #2] - cmp r0, #0 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - cmp r1, #0x38 - movge r0, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, pc} - cmp r0, #0x20 - movge r0, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, pc} - ldrh r0, [r4] - tst r0, #0x10 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r0, [r4, #0xc] - cmp r0, #0 - ldrne r0, [r0] - cmpne r0, #1 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - bl IsCurrentTilesetBackground - cmp r0, #0 - bne _022FFC44 - ldrb r0, [r5, #0xef] - cmp r0, #3 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r6 - mov r1, #0x10 - bl ItemIsActive__022FF898 - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_022FFC44: - ldrsh r1, [r5, #2] - mov r0, r6 - bl GetMobilityTypeCheckSlipAndFloating - ldrh r2, [r4] -#ifdef JAPAN - mov r4, r0 - mov r0, r6 - mov r1, #0xc - and r5, r2, #3 - bl IqSkillIsEnabled - cmp r0, #0 - mov r0, r6 - mov r1, #0xd - movne r4, #2 - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #3 - cmp r4, #3 - addls pc, pc, r4, lsl #2 -#else - mov r1, r0 - mov r0, r6 - and r4, r2, #3 - bl GetMobilityTypeAfterIqSkills - cmp r0, #3 - addls pc, pc, r0, lsl #2 -#endif - b _022FFC94 -_022FFC70: ; jump table - b _022FFC80 ; case 0 - b _022FFC80 ; case 1 - b _022FFC80 ; case 2 - b _022FFC94 ; case 3 -_022FFC80: -#ifdef JAPAN - cmp r5, #0 -#else - cmp r4, #0 -#endif - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFC94: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov29_022FFB90 - - arm_func_start CannotStandOnTile -CannotStandOnTile: ; 0x022FFC9C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r1 - mov r6, r0 - ldrsh r0, [r7] - ldrsh r1, [r7, #2] - ldr r5, [r6, #0xb4] - bl GetTile - ldrsh r1, [r7] - mov r4, r0 - cmp r1, #0 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - ldrsh r0, [r7, #2] - cmp r0, #0 - movlt r0, #1 - ldmltia sp!, {r3, r4, r5, r6, r7, pc} - cmp r1, #0x38 - movge r0, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, pc} - cmp r0, #0x20 - movge r0, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, pc} - ldrh r0, [r4] - tst r0, #0x10 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r1, [r4, #0xc] - cmp r1, #0 - beq _022FFD38 - ldr r0, [r1] - cmp r0, #1 - bne _022FFD30 - ldr r0, [r1, #0xb4] - cmp r0, r5 - beq _022FFD38 - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFD30: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFD38: - bl IsCurrentTilesetBackground - cmp r0, #0 - bne _022FFD6C - ldrb r0, [r5, #0xef] - cmp r0, #3 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r6 - mov r1, #0x10 - bl ItemIsActive__022FF898 - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_022FFD6C: - ldrsh r1, [r5, #2] - mov r0, r6 - bl GetMobilityTypeCheckSlipAndFloating - ldrh r2, [r4] -#ifdef JAPAN - mov r4, r0 - mov r0, r6 - mov r1, #0xc - and r5, r2, #3 - bl IqSkillIsEnabled - cmp r0, #0 - mov r0, r6 - mov r1, #0xd - movne r4, #2 - bl IqSkillIsEnabled - cmp r0, #0 - movne r4, #3 - cmp r4, #3 - addls pc, pc, r4, lsl #2 -#else - mov r1, r0 - mov r0, r6 - and r4, r2, #3 - bl GetMobilityTypeAfterIqSkills - cmp r0, #3 - addls pc, pc, r0, lsl #2 -#endif - b _022FFDE4 -_022FFD98: ; jump table - b _022FFDA8 ; case 0 - b _022FFDB8 ; case 1 - b _022FFDD4 ; case 2 - b _022FFDE4 ; case 3 -_022FFDA8: -#ifdef JAPAN - cmp r5, #1 -#else - cmp r4, #1 -#endif - bne _022FFDEC - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFDB8: -#ifdef JAPAN - cmp r5, #2 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r5, #1 -#else - cmp r4, #2 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r4, #1 -#endif - bne _022FFDEC - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFDD4: -#ifdef JAPAN - cmp r5, #0 -#else - cmp r4, #0 -#endif - beq _022FFDEC - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFDE4: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022FFDEC: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end CannotStandOnTile - - arm_func_start CalcSpeedStage -CalcSpeedStage: ; 0x022FFDF4 -#ifdef JAPAN -#define CALC_SPEED_STAGE_OFFSET -4 -#else -#define CALC_SPEED_STAGE_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - mov r7, r1 - ldr r6, [r8, #0xb4] - bl GetApparentWeather - mov r4, #0 - mov r5, r0 - mov r1, r4 -_022FFE14: - add r2, r6, r1 - ldrb r0, [r2, #0x119 + CALC_SPEED_STAGE_OFFSET] - add r1, r1, #1 - cmp r0, #0 - ldrb r0, [r2, #0x114 + CALC_SPEED_STAGE_OFFSET] - subne r4, r4, r7 - cmp r0, #0 - addne r4, r4, r7 - cmp r1, #5 - blt _022FFE14 - ldrb r0, [r6, #0xbf] - cmp r0, #4 - ldrsh r0, [r6, #2] - subeq r4, r4, #1 - bl GetSpeedStatus - add r4, r4, r0 - mov r0, r8 - mov r1, #6 - bl MonsterIsType - cmp r0, #0 - beq _022FFE78 - mov r0, r8 - bl GetApparentWeather - cmp r0, #7 - addeq r4, r4, #1 -_022FFE78: - mov r0, r8 - mov r1, #0x3a - bl IqSkillIsEnabled - cmp r0, #0 - ldr r1, _022FFF18 ; =EXCL_ITEM_EFFECTS_WEATHER_MOVE_SPEED_BOOST - addne r4, r4, #1 - ldrb r0, [r1, r5] - cmp r0, #0 - beq _022FFEB0 - ldrb r1, [r1, r5] - mov r0, r8 - bl ExclusiveItemEffectIsActive__022FFF28 - cmp r0, #0 - addne r4, r4, #1 -_022FFEB0: - ldrsh r1, [r6, #4] - ldr r0, _022FFF1C ; =0x000001A5 - cmp r1, r0 - addne r0, r0, #0x72 - cmpne r1, r0 - ldrsh r1, [r6, #2] - ldr r0, _022FFF20 ; =0x0000017F - addeq r4, r4, #1 - cmp r1, r0 - addne r0, r0, #0x258 - cmpne r1, r0 - bne _022FFEFC - ldrb r0, [r6, #6] - cmp r0, #0 - ldrne r0, _022FFF24 ; =DUNGEON_PTR - ldrne r0, [r0] - ldrneb r0, [r0, #0x790] - cmpne r0, #0 - addne r4, r4, #1 -_022FFEFC: - cmp r4, #0 - movlt r4, #0 - cmp r4, #5 - movge r4, #4 - mov r0, r4 - str r4, [r6, #0x110 + CALC_SPEED_STAGE_OFFSET] - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_022FFF18: .word EXCL_ITEM_EFFECTS_WEATHER_MOVE_SPEED_BOOST -_022FFF1C: .word 0x000001A5 -_022FFF20: .word 0x0000017F -_022FFF24: .word DUNGEON_PTR - arm_func_end CalcSpeedStage - - arm_func_start ExclusiveItemEffectIsActive__022FFF28 -ExclusiveItemEffectIsActive__022FFF28: ; 0x022FFF28 - stmdb sp!, {r3, lr} - ldr r2, [r0, #0xb4] - ldrb r0, [r2, #6] - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, pc} -#ifdef JAPAN - add r0, r2, #0x224 -#else - add r0, r2, #0x228 -#endif - bl ExclusiveItemEffectFlagTest - ldmia sp!, {r3, pc} - arm_func_end ExclusiveItemEffectIsActive__022FFF28 - - arm_func_start CalcSpeedStageWrapper -CalcSpeedStageWrapper: ; 0x022FFF4C - ldr ip, _022FFF58 ; =CalcSpeedStage - mov r1, #1 - bx ip - .align 2, 0 -_022FFF58: .word CalcSpeedStage - arm_func_end CalcSpeedStageWrapper - - arm_func_start GetNumberOfAttacks -GetNumberOfAttacks: ; 0x022FFF5C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #8 - mov r5, #0 - mov sl, r0 - mov sb, r1 - mov r6, r5 - mov r7, r5 - bl EntityIsValid__023000E4 - cmp r0, #0 - moveq r0, r5 - beq _023000D4 - mov r0, sl - bl GetApparentWeather - mov r8, r0 - cmp r8, #4 - bne _022FFFB8 - mov r0, sl - mov r1, #0x1b - bl AbilityIsActive - cmp r0, #0 - movne r5, #1 - movne r6, r5 - b _022FFFD8 -_022FFFB8: - cmp r8, #1 - bne _022FFFD8 - mov r0, sl - mov r1, #0x4a - bl AbilityIsActive - cmp r0, #0 - movne r5, #1 - movne r6, r5 -_022FFFD8: - ldr r4, _023000DC ; =EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST - ldrb r0, [r4, r8] - cmp r0, #0 - beq _02300000 - ldrb r1, [r4, r8] - mov r0, sl - bl ExclusiveItemEffectIsActive__022FFF28 - cmp r0, #0 - ldrneb r7, [r4, r8] - movne r5, #1 -_02300000: - mov r0, sl - mov r1, #0x54 - bl AbilityIsActive - cmp r0, #0 - beq _02300028 - ldr r0, [sl, #0xb4] - ldrsh r0, [r0, #0x66] - cmp r0, #0 - moveq r5, #1 - moveq r6, r5 -_02300028: - cmp sb, #0 - beq _023000C8 - cmp r6, #0 - beq _02300068 - ldr r0, [sl, #0xb4] - mov r2, r5 - mov r1, #0x40 - bl UpdateStateFlags - cmp r0, #0 - beq _023000C8 - mov r0, sl - bl ov29_022E655C -#ifdef JAPAN - ldr r1, _02301510 ; =0x0000096F - mov r0, sl -#else - mov r0, sl - mov r1, #0xc30 -#endif - bl LogMessageByIdWithPopupCheckUser - b _023000C8 -_02300068: - cmp r7, #0 - beq _023000C8 - ldr r0, [sl, #0xb4] - mov r2, r5 - mov r1, #0x40 - bl UpdateStateFlags - cmp r0, #0 - beq _023000C8 - mov r0, sl - bl ov29_022E655C - mov r0, #0 - mov r1, sl - mov r2, r0 - bl SubstitutePlaceholderStringTags - add r2, sp, #0 - mov r0, sl - mov r1, r7 - bl GetExclusiveItemWithEffectFromBag - add r1, sp, #0 - mov r0, #0 - bl ov29_02344B44 -#ifdef JAPAN - mov r0, sl - mov r1, #0x970 -#else - ldr r1, _023000E0 ; =0x00000C31 - mov r0, sl -#endif - bl LogMessageByIdWithPopupCheckUser -_023000C8: - cmp r5, #0 - movne r0, #2 - moveq r0, #1 -_023000D4: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_023000DC: .word EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST -#ifdef JAPAN -_02301510: .word 0x0000096F -#else -_023000E0: .word 0x00000C31 -#endif - arm_func_end GetNumberOfAttacks diff --git a/asm/overlay_29_022FF8C8.s b/asm/overlay_29_022FF8C8.s new file mode 100644 index 00000000..cc1c74e4 --- /dev/null +++ b/asm/overlay_29_022FF8C8.s @@ -0,0 +1,714 @@ + .include "asm/macros.inc" + .include "overlay_29_022FF8C8.inc" + + .text + +#ifndef JAPAN + arm_func_start GetMobilityTypeAfterIqSkills +GetMobilityTypeAfterIqSkills: ; 0x022FF8C8 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + cmp r4, #3 + beq _022FF8EC + mov r1, #0xc + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #2 +_022FF8EC: + mov r0, r5 + mov r1, #0xd + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #3 + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end GetMobilityTypeAfterIqSkills +#endif + + arm_func_start ov29_022FF908 +ov29_022FF908: ; 0x022FF908 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r4, [r5, #0xb4] + ldrb r1, [r4, #0xef] + cmp r1, #3 + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, pc} + mov r1, #0x10 + bl ItemIsActive__022FF898 + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, pc} + ldrsh r1, [r4, #2] + mov r0, r5 + bl GetMobilityTypeCheckSlipAndFloating + cmp r0, #3 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov29_022FF908 + + arm_func_start ov29_022FF958 +ov29_022FF958: ; 0x022FF958 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r1 + mov r6, r0 + ldrsh r0, [r7] + ldrsh r1, [r7, #2] + ldr r5, [r6, #0xb4] + bl GetTile + ldrsh r1, [r7] + mov r4, r0 + cmp r1, #0 + movlt r0, #1 + ldmltia sp!, {r3, r4, r5, r6, r7, pc} + ldrsh r0, [r7, #2] + cmp r0, #0 + movlt r0, #1 + ldmltia sp!, {r3, r4, r5, r6, r7, pc} + cmp r1, #0x38 + movge r0, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, pc} + cmp r0, #0x20 + movge r0, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, pc} + ldrh r0, [r4] + tst r0, #0x10 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r0, [r4, #0xc] + cmp r0, #0 + ldrne r0, [r0] + cmpne r0, #1 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + bl IsCurrentTilesetBackground + cmp r0, #0 + bne _022FFA0C + ldrb r0, [r5, #0xef] + cmp r0, #3 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r6 + mov r1, #0x10 + bl ItemIsActive__022FF898 + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} +_022FFA0C: + ldrsh r1, [r5, #2] + mov r0, r6 + bl GetMobilityTypeCheckSlipAndFloating + ldrh r2, [r4] +#ifdef JAPAN + mov r4, r0 + mov r0, r6 + mov r1, #0xc + and r5, r2, #3 + bl IqSkillIsEnabled + cmp r0, #0 + mov r0, r6 + mov r1, #0xd + movne r4, #2 + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #3 + cmp r4, #3 + addls pc, pc, r4, lsl #2 +#else + mov r1, r0 + mov r0, r6 + and r4, r2, #3 + bl GetMobilityTypeAfterIqSkills + cmp r0, #3 + addls pc, pc, r0, lsl #2 +#endif + b _022FFA84 +_022FFA38: ; jump table + b _022FFA48 ; case 0 + b _022FFA58 ; case 1 + b _022FFA74 ; case 2 + b _022FFA84 ; case 3 +_022FFA48: +#ifdef JAPAN + cmp r5, #1 +#else + cmp r4, #1 +#endif + bne _022FFA8C + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFA58: +#ifdef JAPAN + cmp r5, #2 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + cmp r5, #1 +#else + cmp r4, #2 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + cmp r4, #1 +#endif + bne _022FFA8C + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFA74: +#ifdef JAPAN + cmp r5, #0 +#else + cmp r4, #0 +#endif + beq _022FFA8C + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFA84: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFA8C: + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ov29_022FF958 + + arm_func_start ov29_022FFA94 +ov29_022FFA94: ; 0x022FFA94 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r1 + mov r6, r0 + ldrsh r0, [r7] + ldrsh r1, [r7, #2] + ldr r5, [r6, #0xb4] + bl GetTile + ldrsh r1, [r7] + mov r4, r0 + cmp r1, #0 + movlt r0, #1 + ldmltia sp!, {r3, r4, r5, r6, r7, pc} + ldrsh r0, [r7, #2] + cmp r0, #0 + movlt r0, #1 + ldmltia sp!, {r3, r4, r5, r6, r7, pc} + cmp r1, #0x38 + movge r0, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, pc} + cmp r0, #0x20 + movge r0, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, pc} + ldrh r0, [r4] + tst r0, #0x10 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r0, [r4, #0xc] + cmp r0, #0 + ldrne r0, [r0] + cmpne r0, #1 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldrsh r1, [r5, #2] + mov r0, r6 + bl GetMobilityTypeCheckSlipAndFloating + ldrh r1, [r4] + cmp r0, #3 + and r1, r1, #3 + addls pc, pc, r0, lsl #2 + b _022FFB80 +_022FFB34: ; jump table + b _022FFB44 ; case 0 + b _022FFB54 ; case 1 + b _022FFB70 ; case 2 + b _022FFB70 ; case 3 +_022FFB44: + cmp r1, #1 + bne _022FFB88 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFB54: + cmp r1, #2 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + cmp r1, #1 + bne _022FFB88 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFB70: + cmp r1, #0 + beq _022FFB88 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFB80: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFB88: + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ov29_022FFA94 + + arm_func_start ov29_022FFB90 +ov29_022FFB90: ; 0x022FFB90 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r1 + mov r6, r0 + ldrsh r0, [r7] + ldrsh r1, [r7, #2] + ldr r5, [r6, #0xb4] + bl GetTile + ldrsh r1, [r7] + mov r4, r0 + cmp r1, #0 + movlt r0, #1 + ldmltia sp!, {r3, r4, r5, r6, r7, pc} + ldrsh r0, [r7, #2] + cmp r0, #0 + movlt r0, #1 + ldmltia sp!, {r3, r4, r5, r6, r7, pc} + cmp r1, #0x38 + movge r0, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, pc} + cmp r0, #0x20 + movge r0, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, pc} + ldrh r0, [r4] + tst r0, #0x10 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r0, [r4, #0xc] + cmp r0, #0 + ldrne r0, [r0] + cmpne r0, #1 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + bl IsCurrentTilesetBackground + cmp r0, #0 + bne _022FFC44 + ldrb r0, [r5, #0xef] + cmp r0, #3 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r6 + mov r1, #0x10 + bl ItemIsActive__022FF898 + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} +_022FFC44: + ldrsh r1, [r5, #2] + mov r0, r6 + bl GetMobilityTypeCheckSlipAndFloating + ldrh r2, [r4] +#ifdef JAPAN + mov r4, r0 + mov r0, r6 + mov r1, #0xc + and r5, r2, #3 + bl IqSkillIsEnabled + cmp r0, #0 + mov r0, r6 + mov r1, #0xd + movne r4, #2 + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #3 + cmp r4, #3 + addls pc, pc, r4, lsl #2 +#else + mov r1, r0 + mov r0, r6 + and r4, r2, #3 + bl GetMobilityTypeAfterIqSkills + cmp r0, #3 + addls pc, pc, r0, lsl #2 +#endif + b _022FFC94 +_022FFC70: ; jump table + b _022FFC80 ; case 0 + b _022FFC80 ; case 1 + b _022FFC80 ; case 2 + b _022FFC94 ; case 3 +_022FFC80: +#ifdef JAPAN + cmp r5, #0 +#else + cmp r4, #0 +#endif + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFC94: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ov29_022FFB90 + + arm_func_start CannotStandOnTile +CannotStandOnTile: ; 0x022FFC9C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r1 + mov r6, r0 + ldrsh r0, [r7] + ldrsh r1, [r7, #2] + ldr r5, [r6, #0xb4] + bl GetTile + ldrsh r1, [r7] + mov r4, r0 + cmp r1, #0 + movlt r0, #1 + ldmltia sp!, {r3, r4, r5, r6, r7, pc} + ldrsh r0, [r7, #2] + cmp r0, #0 + movlt r0, #1 + ldmltia sp!, {r3, r4, r5, r6, r7, pc} + cmp r1, #0x38 + movge r0, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, pc} + cmp r0, #0x20 + movge r0, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, pc} + ldrh r0, [r4] + tst r0, #0x10 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r1, [r4, #0xc] + cmp r1, #0 + beq _022FFD38 + ldr r0, [r1] + cmp r0, #1 + bne _022FFD30 + ldr r0, [r1, #0xb4] + cmp r0, r5 + beq _022FFD38 + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFD30: + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFD38: + bl IsCurrentTilesetBackground + cmp r0, #0 + bne _022FFD6C + ldrb r0, [r5, #0xef] + cmp r0, #3 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r6 + mov r1, #0x10 + bl ItemIsActive__022FF898 + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} +_022FFD6C: + ldrsh r1, [r5, #2] + mov r0, r6 + bl GetMobilityTypeCheckSlipAndFloating + ldrh r2, [r4] +#ifdef JAPAN + mov r4, r0 + mov r0, r6 + mov r1, #0xc + and r5, r2, #3 + bl IqSkillIsEnabled + cmp r0, #0 + mov r0, r6 + mov r1, #0xd + movne r4, #2 + bl IqSkillIsEnabled + cmp r0, #0 + movne r4, #3 + cmp r4, #3 + addls pc, pc, r4, lsl #2 +#else + mov r1, r0 + mov r0, r6 + and r4, r2, #3 + bl GetMobilityTypeAfterIqSkills + cmp r0, #3 + addls pc, pc, r0, lsl #2 +#endif + b _022FFDE4 +_022FFD98: ; jump table + b _022FFDA8 ; case 0 + b _022FFDB8 ; case 1 + b _022FFDD4 ; case 2 + b _022FFDE4 ; case 3 +_022FFDA8: +#ifdef JAPAN + cmp r5, #1 +#else + cmp r4, #1 +#endif + bne _022FFDEC + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFDB8: +#ifdef JAPAN + cmp r5, #2 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + cmp r5, #1 +#else + cmp r4, #2 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + cmp r4, #1 +#endif + bne _022FFDEC + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFDD4: +#ifdef JAPAN + cmp r5, #0 +#else + cmp r4, #0 +#endif + beq _022FFDEC + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFDE4: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022FFDEC: + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end CannotStandOnTile + + arm_func_start CalcSpeedStage +CalcSpeedStage: ; 0x022FFDF4 +#ifdef JAPAN +#define CALC_SPEED_STAGE_OFFSET -4 +#else +#define CALC_SPEED_STAGE_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + mov r7, r1 + ldr r6, [r8, #0xb4] + bl GetApparentWeather + mov r4, #0 + mov r5, r0 + mov r1, r4 +_022FFE14: + add r2, r6, r1 + ldrb r0, [r2, #0x119 + CALC_SPEED_STAGE_OFFSET] + add r1, r1, #1 + cmp r0, #0 + ldrb r0, [r2, #0x114 + CALC_SPEED_STAGE_OFFSET] + subne r4, r4, r7 + cmp r0, #0 + addne r4, r4, r7 + cmp r1, #5 + blt _022FFE14 + ldrb r0, [r6, #0xbf] + cmp r0, #4 + ldrsh r0, [r6, #2] + subeq r4, r4, #1 + bl GetSpeedStatus + add r4, r4, r0 + mov r0, r8 + mov r1, #6 + bl MonsterIsType + cmp r0, #0 + beq _022FFE78 + mov r0, r8 + bl GetApparentWeather + cmp r0, #7 + addeq r4, r4, #1 +_022FFE78: + mov r0, r8 + mov r1, #0x3a + bl IqSkillIsEnabled + cmp r0, #0 + ldr r1, _022FFF18 ; =EXCL_ITEM_EFFECTS_WEATHER_MOVE_SPEED_BOOST + addne r4, r4, #1 + ldrb r0, [r1, r5] + cmp r0, #0 + beq _022FFEB0 + ldrb r1, [r1, r5] + mov r0, r8 + bl ExclusiveItemEffectIsActive__022FFF28 + cmp r0, #0 + addne r4, r4, #1 +_022FFEB0: + ldrsh r1, [r6, #4] + ldr r0, _022FFF1C ; =0x000001A5 + cmp r1, r0 + addne r0, r0, #0x72 + cmpne r1, r0 + ldrsh r1, [r6, #2] + ldr r0, _022FFF20 ; =0x0000017F + addeq r4, r4, #1 + cmp r1, r0 + addne r0, r0, #0x258 + cmpne r1, r0 + bne _022FFEFC + ldrb r0, [r6, #6] + cmp r0, #0 + ldrne r0, _022FFF24 ; =DUNGEON_PTR + ldrne r0, [r0] + ldrneb r0, [r0, #0x790] + cmpne r0, #0 + addne r4, r4, #1 +_022FFEFC: + cmp r4, #0 + movlt r4, #0 + cmp r4, #5 + movge r4, #4 + mov r0, r4 + str r4, [r6, #0x110 + CALC_SPEED_STAGE_OFFSET] + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_022FFF18: .word EXCL_ITEM_EFFECTS_WEATHER_MOVE_SPEED_BOOST +_022FFF1C: .word 0x000001A5 +_022FFF20: .word 0x0000017F +_022FFF24: .word DUNGEON_PTR + arm_func_end CalcSpeedStage + + arm_func_start ExclusiveItemEffectIsActive__022FFF28 +ExclusiveItemEffectIsActive__022FFF28: ; 0x022FFF28 + stmdb sp!, {r3, lr} + ldr r2, [r0, #0xb4] + ldrb r0, [r2, #6] + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, pc} +#ifdef JAPAN + add r0, r2, #0x224 +#else + add r0, r2, #0x228 +#endif + bl ExclusiveItemEffectFlagTest + ldmia sp!, {r3, pc} + arm_func_end ExclusiveItemEffectIsActive__022FFF28 + + arm_func_start CalcSpeedStageWrapper +CalcSpeedStageWrapper: ; 0x022FFF4C + ldr ip, _022FFF58 ; =CalcSpeedStage + mov r1, #1 + bx ip + .align 2, 0 +_022FFF58: .word CalcSpeedStage + arm_func_end CalcSpeedStageWrapper + + arm_func_start GetNumberOfAttacks +GetNumberOfAttacks: ; 0x022FFF5C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #8 + mov r5, #0 + mov sl, r0 + mov sb, r1 + mov r6, r5 + mov r7, r5 + bl EntityIsValid__023000E4 + cmp r0, #0 + moveq r0, r5 + beq _023000D4 + mov r0, sl + bl GetApparentWeather + mov r8, r0 + cmp r8, #4 + bne _022FFFB8 + mov r0, sl + mov r1, #0x1b + bl AbilityIsActive + cmp r0, #0 + movne r5, #1 + movne r6, r5 + b _022FFFD8 +_022FFFB8: + cmp r8, #1 + bne _022FFFD8 + mov r0, sl + mov r1, #0x4a + bl AbilityIsActive + cmp r0, #0 + movne r5, #1 + movne r6, r5 +_022FFFD8: + ldr r4, _023000DC ; =EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST + ldrb r0, [r4, r8] + cmp r0, #0 + beq _02300000 + ldrb r1, [r4, r8] + mov r0, sl + bl ExclusiveItemEffectIsActive__022FFF28 + cmp r0, #0 + ldrneb r7, [r4, r8] + movne r5, #1 +_02300000: + mov r0, sl + mov r1, #0x54 + bl AbilityIsActive + cmp r0, #0 + beq _02300028 + ldr r0, [sl, #0xb4] + ldrsh r0, [r0, #0x66] + cmp r0, #0 + moveq r5, #1 + moveq r6, r5 +_02300028: + cmp sb, #0 + beq _023000C8 + cmp r6, #0 + beq _02300068 + ldr r0, [sl, #0xb4] + mov r2, r5 + mov r1, #0x40 + bl UpdateStateFlags + cmp r0, #0 + beq _023000C8 + mov r0, sl + bl ov29_022E655C +#ifdef JAPAN + ldr r1, _02301510 ; =0x0000096F + mov r0, sl +#else + mov r0, sl + mov r1, #0xc30 +#endif + bl LogMessageByIdWithPopupCheckUser + b _023000C8 +_02300068: + cmp r7, #0 + beq _023000C8 + ldr r0, [sl, #0xb4] + mov r2, r5 + mov r1, #0x40 + bl UpdateStateFlags + cmp r0, #0 + beq _023000C8 + mov r0, sl + bl ov29_022E655C + mov r0, #0 + mov r1, sl + mov r2, r0 + bl SubstitutePlaceholderStringTags + add r2, sp, #0 + mov r0, sl + mov r1, r7 + bl GetExclusiveItemWithEffectFromBag + add r1, sp, #0 + mov r0, #0 + bl ov29_02344B44 +#ifdef JAPAN + mov r0, sl + mov r1, #0x970 +#else + ldr r1, _023000E0 ; =0x00000C31 + mov r0, sl +#endif + bl LogMessageByIdWithPopupCheckUser +_023000C8: + cmp r5, #0 + movne r0, #2 + moveq r0, #1 +_023000D4: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_023000DC: .word EXCL_ITEM_EFFECTS_WEATHER_ATK_SPEED_BOOST +#ifdef JAPAN +_02301510: .word 0x0000096F +#else +_023000E0: .word 0x00000C31 +#endif + arm_func_end GetNumberOfAttacks diff --git a/asm/overlay_29_02301F50.s b/asm/overlay_29_02301F50.s index b20ccd6e..d3531c39 100644 --- a/asm/overlay_29_02301F50.s +++ b/asm/overlay_29_02301F50.s @@ -597,258 +597,3 @@ _023026C0: .word MIRACLE_CHEST_EXP_BOOST _023026C4: .word EXCLUSIVE_ITEM_EXP_BOOST _023026C8: .word 0x0098967F arm_func_end AddExpSpecial - - arm_func_start ItemIsActive__023026CC -ItemIsActive__023026CC: ; 0x023026CC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__023026CC - - arm_func_start EnemyEvolution -EnemyEvolution: ; 0x023026FC -#ifdef JAPAN -#define ENEMY_EVOLUTION_OFFSET -4 -#else -#define ENEMY_EVOLUTION_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x168 - mov sl, r0 - bl AllocateTemp1024ByteBufferFromPool - ldr r0, _02302A28 ; =DUNGEON_PTR - ldr r2, [r0] - ldrb r1, [r2, #0xf] - ldrb r0, [r2, #0x748] - cmp r1, #0 - str r0, [sp, #8] - beq _02302A20 - mov r0, #0 - strb r0, [r2, #0xf] - bl GetForcedLossReason - cmp r0, #0 - bne _02302A20 - mov r0, sl - bl EntityIsValid__02302A38 - cmp r0, #0 - bne _02302758 - add r0, sp, #0xb0 - bl ov29_022E2470 - add sl, sp, #0xb0 -_02302758: - ldr r0, _02302A2C ; =ov29_023527F8 - mov r4, #0 - ldr r3, [r0] - ldr r2, [r0, #4] - ldr r1, [r0, #8] - ldr r0, [r0, #0xc] - str r3, [sp, #0x14] - str r2, [sp, #0x18] - str r1, [sp, #0xc] - str r0, [sp, #0x10] -_02302780: - ldr r0, _02302A28 ; =DUNGEON_PTR - ldr r3, [sp, #0x14] - ldr r0, [r0] - ldr r2, [sp, #0x18] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r5, [r0, #0xad4] -#else - ldr r5, [r0, #0xb78] -#endif - ldr r1, [sp, #0xc] - ldr r0, [sp, #0x10] - mov r6, #0 - str r6, [sp, #4] - str r3, [sp, #0x24] - str r2, [sp, #0x28] - str r1, [sp, #0x1c] - str r0, [sp, #0x20] - cmp r5, #0 - beq _02302A14 - mov r0, r5 - bl EntityIsValid__02302A38 - cmp r0, #0 - ldrne sb, [r5, #0xb4] - ldrnesh r0, [sb, #0x10] - cmpne r0, #0 - beq _02302A14 - ldrb r0, [sb, #0x102] - cmp r0, #0 - movne r0, r6 - strneb r0, [sb, #0x102] - bne _02302A08 - ldr fp, [sb, #0x214 + ENEMY_EVOLUTION_OFFSET] - cmp fp, #0 - beq _023028C4 - ldrb r0, [sb, #7] - cmp r0, #0 - beq _02302818 - ldrb r1, [sb, #0xa] - add r0, sp, #0x54 - bl GetUnlockedTacticFlags -_02302818: - ldrsh r2, [sb, #0x12] - ldrsh r0, [sb, #0x16] - ldrb r7, [sb, #0x1a] - ldr r1, _02302A30 ; =0x000003E7 - add r0, r2, r0 - ldrb r3, [sb, #0x1b] - ldrb r2, [sb, #0x1c] - str r0, [sp, #4] - cmp r0, r1 - strgt r1, [sp, #4] - ldrb r1, [sb, #0x1d] - ldrb r0, [sb, #0xa] - str r7, [sp, #0x24] - str r3, [sp, #0x28] - str r2, [sp, #0x1c] - str r1, [sp, #0x20] - cmp r0, #0x64 - beq _023028C4 - ldr r0, [sp, #8] - bl IsExpEnabledInDungeon - cmp r0, #0 - beq _023028C4 - ldr r0, [sb, #0x20] - mov r1, fp - add r2, r0, fp - mov r0, #0 - str r2, [sb, #0x20] - bl ov29_0234B09C - bl ov29_0234B034 - mov r1, #0 - str r1, [sp] - mov r2, sb - mov r3, r1 - bl ov29_0230040C - mov r0, sl - ldr r1, _02302A34 ; =0x00000F1F - bl LogMessageByIdWithPopup - mov r0, sl - mov r1, r5 - mov r2, #1 - mov r3, r2 - bl LevelUp - orr r6, r6, r0 -_023028C4: - ldrb r0, [sb, #0x153 + ENEMY_EVOLUTION_OFFSET] - cmp r0, #0 - beq _02302968 - ldrsh r0, [sb, #2] - mov r2, #0 - add r1, sp, #0x2c - mov r3, r2 - bl GetEvolutions - movs r6, r0 - beq _02302964 - bl DungeonRandInt - mov r8, r0 - mov r7, #0 - b _0230293C -_023028FC: - mov r1, r8, lsl #1 - add r0, sp, #0x2c - ldrsh r0, [r0, r1] - bl IsOnMonsterSpawnList - cmp r0, #0 - beq _0230292C - mov r1, r8, lsl #1 - add r0, sp, #0x2c - ldrsh r0, [r0, r1] - bl DungeonGetSpriteIndex - cmp r0, #0 - bne _02302944 -_0230292C: - add r8, r8, #1 - cmp r8, r6 - movge r8, #0 - add r7, r7, #1 -_0230293C: - cmp r7, r6 - blt _023028FC -_02302944: - cmp r7, r6 - bge _02302964 - add r0, sp, #0x2c - mov r1, r8, lsl #1 - ldrsh r2, [r0, r1] - mov r0, sl - mov r1, r5 - bl EvolveMonster -_02302964: - mov r6, #0 -_02302968: - cmp r6, #0 - beq _023029EC - ldrb r0, [sb, #6] - cmp r0, #0 - bne _023029EC - ldrsh r2, [sb, #0x12] - ldrsh r1, [sb, #0x16] - ldr r0, _02302A30 ; =0x000003E7 - ldr r3, [sp, #0x28] - add r1, r2, r1 - cmp r1, r0 - movgt r1, r0 - ldr r0, [sp, #4] - sub r0, r1, r0 - str r0, [sp, #0x84] - ldrb r2, [sb, #0x1a] - ldr r1, [sp, #0x24] - ldr r0, [sp, #0x1c] - sub r1, r2, r1 - str r1, [sp, #0x88] - ldrb r1, [sb, #0x1c] - ldr r2, [sp, #0x20] - sub r0, r1, r0 - str r0, [sp, #0x8c] - ldrb r6, [sb, #0x1b] - add r1, sp, #0x60 - mov r0, r5 - sub r3, r6, r3 - str r3, [sp, #0x90] - ldrb r3, [sb, #0x1d] - sub r2, r3, r2 - str r2, [sp, #0x94] - bl ov29_02302CC8 -_023029EC: - cmp fp, #0 - beq _02302A08 - add r2, sp, #0x54 - mov r0, sl - mov r1, r5 - mov r3, #1 - bl ov29_02302C04 -_02302A08: - mov r0, #0 - str r0, [sb, #0x214 + ENEMY_EVOLUTION_OFFSET] - strb r0, [sb, #0x153 + ENEMY_EVOLUTION_OFFSET] -_02302A14: - add r4, r4, #1 - cmp r4, #0x14 - blt _02302780 -_02302A20: - add sp, sp, #0x168 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02302A28: .word DUNGEON_PTR -_02302A2C: .word ov29_023527F8 -_02302A30: .word 0x000003E7 -#ifdef JAPAN -_02302A34: .word 0x00002486 -#else -_02302A34: .word 0x00000F1F -#endif - arm_func_end EnemyEvolution diff --git a/asm/overlay_29_023026FC.s b/asm/overlay_29_023026FC.s new file mode 100644 index 00000000..03b1b1c4 --- /dev/null +++ b/asm/overlay_29_023026FC.s @@ -0,0 +1,243 @@ + .include "asm/macros.inc" + .include "overlay_29_023026FC.inc" + + .text + + arm_func_start EnemyEvolution +EnemyEvolution: ; 0x023026FC +#ifdef JAPAN +#define ENEMY_EVOLUTION_OFFSET -4 +#else +#define ENEMY_EVOLUTION_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x168 + mov sl, r0 + bl AllocateTemp1024ByteBufferFromPool + ldr r0, _02302A28 ; =DUNGEON_PTR + ldr r2, [r0] + ldrb r1, [r2, #0xf] + ldrb r0, [r2, #0x748] + cmp r1, #0 + str r0, [sp, #8] + beq _02302A20 + mov r0, #0 + strb r0, [r2, #0xf] + bl GetForcedLossReason + cmp r0, #0 + bne _02302A20 + mov r0, sl + bl EntityIsValid__02302A38 + cmp r0, #0 + bne _02302758 + add r0, sp, #0xb0 + bl ov29_022E2470 + add sl, sp, #0xb0 +_02302758: + ldr r0, _02302A2C ; =ov29_023527F8 + mov r4, #0 + ldr r3, [r0] + ldr r2, [r0, #4] + ldr r1, [r0, #8] + ldr r0, [r0, #0xc] + str r3, [sp, #0x14] + str r2, [sp, #0x18] + str r1, [sp, #0xc] + str r0, [sp, #0x10] +_02302780: + ldr r0, _02302A28 ; =DUNGEON_PTR + ldr r3, [sp, #0x14] + ldr r0, [r0] + ldr r2, [sp, #0x18] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r5, [r0, #0xad4] +#else + ldr r5, [r0, #0xb78] +#endif + ldr r1, [sp, #0xc] + ldr r0, [sp, #0x10] + mov r6, #0 + str r6, [sp, #4] + str r3, [sp, #0x24] + str r2, [sp, #0x28] + str r1, [sp, #0x1c] + str r0, [sp, #0x20] + cmp r5, #0 + beq _02302A14 + mov r0, r5 + bl EntityIsValid__02302A38 + cmp r0, #0 + ldrne sb, [r5, #0xb4] + ldrnesh r0, [sb, #0x10] + cmpne r0, #0 + beq _02302A14 + ldrb r0, [sb, #0x102] + cmp r0, #0 + movne r0, r6 + strneb r0, [sb, #0x102] + bne _02302A08 + ldr fp, [sb, #0x214 + ENEMY_EVOLUTION_OFFSET] + cmp fp, #0 + beq _023028C4 + ldrb r0, [sb, #7] + cmp r0, #0 + beq _02302818 + ldrb r1, [sb, #0xa] + add r0, sp, #0x54 + bl GetUnlockedTacticFlags +_02302818: + ldrsh r2, [sb, #0x12] + ldrsh r0, [sb, #0x16] + ldrb r7, [sb, #0x1a] + ldr r1, _02302A30 ; =0x000003E7 + add r0, r2, r0 + ldrb r3, [sb, #0x1b] + ldrb r2, [sb, #0x1c] + str r0, [sp, #4] + cmp r0, r1 + strgt r1, [sp, #4] + ldrb r1, [sb, #0x1d] + ldrb r0, [sb, #0xa] + str r7, [sp, #0x24] + str r3, [sp, #0x28] + str r2, [sp, #0x1c] + str r1, [sp, #0x20] + cmp r0, #0x64 + beq _023028C4 + ldr r0, [sp, #8] + bl IsExpEnabledInDungeon + cmp r0, #0 + beq _023028C4 + ldr r0, [sb, #0x20] + mov r1, fp + add r2, r0, fp + mov r0, #0 + str r2, [sb, #0x20] + bl ov29_0234B09C + bl ov29_0234B034 + mov r1, #0 + str r1, [sp] + mov r2, sb + mov r3, r1 + bl ov29_0230040C + mov r0, sl + ldr r1, _02302A34 ; =0x00000F1F + bl LogMessageByIdWithPopup + mov r0, sl + mov r1, r5 + mov r2, #1 + mov r3, r2 + bl LevelUp + orr r6, r6, r0 +_023028C4: + ldrb r0, [sb, #0x153 + ENEMY_EVOLUTION_OFFSET] + cmp r0, #0 + beq _02302968 + ldrsh r0, [sb, #2] + mov r2, #0 + add r1, sp, #0x2c + mov r3, r2 + bl GetEvolutions + movs r6, r0 + beq _02302964 + bl DungeonRandInt + mov r8, r0 + mov r7, #0 + b _0230293C +_023028FC: + mov r1, r8, lsl #1 + add r0, sp, #0x2c + ldrsh r0, [r0, r1] + bl IsOnMonsterSpawnList + cmp r0, #0 + beq _0230292C + mov r1, r8, lsl #1 + add r0, sp, #0x2c + ldrsh r0, [r0, r1] + bl DungeonGetSpriteIndex + cmp r0, #0 + bne _02302944 +_0230292C: + add r8, r8, #1 + cmp r8, r6 + movge r8, #0 + add r7, r7, #1 +_0230293C: + cmp r7, r6 + blt _023028FC +_02302944: + cmp r7, r6 + bge _02302964 + add r0, sp, #0x2c + mov r1, r8, lsl #1 + ldrsh r2, [r0, r1] + mov r0, sl + mov r1, r5 + bl EvolveMonster +_02302964: + mov r6, #0 +_02302968: + cmp r6, #0 + beq _023029EC + ldrb r0, [sb, #6] + cmp r0, #0 + bne _023029EC + ldrsh r2, [sb, #0x12] + ldrsh r1, [sb, #0x16] + ldr r0, _02302A30 ; =0x000003E7 + ldr r3, [sp, #0x28] + add r1, r2, r1 + cmp r1, r0 + movgt r1, r0 + ldr r0, [sp, #4] + sub r0, r1, r0 + str r0, [sp, #0x84] + ldrb r2, [sb, #0x1a] + ldr r1, [sp, #0x24] + ldr r0, [sp, #0x1c] + sub r1, r2, r1 + str r1, [sp, #0x88] + ldrb r1, [sb, #0x1c] + ldr r2, [sp, #0x20] + sub r0, r1, r0 + str r0, [sp, #0x8c] + ldrb r6, [sb, #0x1b] + add r1, sp, #0x60 + mov r0, r5 + sub r3, r6, r3 + str r3, [sp, #0x90] + ldrb r3, [sb, #0x1d] + sub r2, r3, r2 + str r2, [sp, #0x94] + bl ov29_02302CC8 +_023029EC: + cmp fp, #0 + beq _02302A08 + add r2, sp, #0x54 + mov r0, sl + mov r1, r5 + mov r3, #1 + bl ov29_02302C04 +_02302A08: + mov r0, #0 + str r0, [sb, #0x214 + ENEMY_EVOLUTION_OFFSET] + strb r0, [sb, #0x153 + ENEMY_EVOLUTION_OFFSET] +_02302A14: + add r4, r4, #1 + cmp r4, #0x14 + blt _02302780 +_02302A20: + add sp, sp, #0x168 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02302A28: .word DUNGEON_PTR +_02302A2C: .word ov29_023527F8 +_02302A30: .word 0x000003E7 +#ifdef JAPAN +_02302A34: .word 0x00002486 +#else +_02302A34: .word 0x00000F1F +#endif + arm_func_end EnemyEvolution diff --git a/asm/overlay_29_02307F1C.s b/asm/overlay_29_02307F4C.s similarity index 91% rename from asm/overlay_29_02307F1C.s rename to asm/overlay_29_02307F4C.s index d1b4b12d..869ae53a 100644 --- a/asm/overlay_29_02307F1C.s +++ b/asm/overlay_29_02307F4C.s @@ -1,24 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_02307F1C.inc" + .include "overlay_29_02307F4C.inc" .text - arm_func_start ItemIsActive__02307F1C -ItemIsActive__02307F1C: ; 0x02307F1C - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__02307F1C - arm_func_start TryTriggerMonsterHouse TryTriggerMonsterHouse: ; 0x02307F4C stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} diff --git a/asm/overlay_29_0230A9B8.s b/asm/overlay_29_0230A9B8.s index 54b7822d..5f8948a0 100644 --- a/asm/overlay_29_0230A9B8.s +++ b/asm/overlay_29_0230A9B8.s @@ -19,4607 +19,3 @@ ExclusiveItemEffectIsActive__0230A9B8: ; 0x0230A9B8 bl ExclusiveItemEffectFlagTest ldmia sp!, {r3, pc} arm_func_end ExclusiveItemEffectIsActive__0230A9B8 - - arm_func_start ItemIsActive__0230A9DC -ItemIsActive__0230A9DC: ; 0x0230A9DC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__0230A9DC - - arm_func_start AftermathCheck -AftermathCheck: ; 0x0230AA0C - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - mov r4, r2 - mov r2, #0x76 -#ifndef JAPAN - mov r3, #1 -#endif - mov r6, r0 - mov r5, r1 - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - beq _0230AA78 - ldr r0, _0230AA84 ; =AFTERMATH_CHANCE - ldrsh r0, [r0] - bl DungeonRandOutcome__022EAB20 - cmp r0, #0 - ldrne ip, _0230AA88 ; =0x0000026F - cmpne r4, ip - beq _0230AA78 - mov r0, #0 - str r0, [sp] - mov r0, r6 - mov r1, r5 - add r2, r5, #4 - mov r3, #1 - str ip, [sp, #4] - bl TryAftermathExplosion - mov r0, #1 - b _0230AA7C -_0230AA78: - mov r0, #0 -_0230AA7C: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0230AA84: .word AFTERMATH_CHANCE -_0230AA88: .word 0x0000026F - arm_func_end AftermathCheck - - arm_func_start GetTypeMatchupBothTypes -GetTypeMatchupBothTypes: ; 0x0230AA8C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r3, _0230AB4C ; =ov29_02352838 - mov sl, r0 - ldrh r4, [r3] - ldrh r3, [r3, #2] - mov sb, r1 - mov r8, r2 - strh r4, [sp] - strh r3, [sp, #2] - bl ScrappyShouldActivate - ldr fp, _0230AB50 ; =DUNGEON_PTR - mov r7, r0 - mov r6, #0 - mov r5, #1 - add r4, sp, #0 -_0230AAC8: - cmp r7, #0 - bne _0230AB04 - mov r0, r8 - bl IsTypeIneffectiveAgainstGhost - cmp r0, #0 - beq _0230AB04 - mov r0, sl - mov r1, sb - mov r2, r6 - bl GhostImmunityIsActive - cmp r0, #0 - ldrne r1, [fp] - movne r0, #0 - strneb r5, [r1, #0x1d4] - bne _0230AB18 -_0230AB04: - mov r0, sl - mov r1, sb - mov r2, r6 - mov r3, r8 - bl GetTypeMatchup -_0230AB18: - add r1, r6, #1 - mov r1, r1, lsl #0x10 - mov r2, r6, lsl #1 - mov r6, r1, asr #0x10 - strh r0, [r4, r2] - cmp r6, #2 - blt _0230AAC8 - ldrsh r2, [sp] - ldr r0, _0230AB54 ; =TYPE_MATCHUP_COMBINATOR_TABLE - ldrsh r1, [sp, #2] - add r0, r0, r2, lsl #4 - ldr r0, [r0, r1, lsl #2] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0230AB4C: .word ov29_02352838 -_0230AB50: .word DUNGEON_PTR -_0230AB54: .word TYPE_MATCHUP_COMBINATOR_TABLE - arm_func_end GetTypeMatchupBothTypes - - arm_func_start ScrappyShouldActivate -ScrappyShouldActivate: ; 0x0230AB58 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r6, #0 - mov sl, r0 - mov sb, r1 - mov r8, r2 - mov r5, #0x57 - mov fp, r6 - mov r4, #1 - b _0230ABDC -_0230AB7C: - mov r0, sl - mov r1, r5 - ldr r7, [sb, #0xb4] - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230ABB4 - add r0, r7, r6 - ldrb r0, [r0, #0x5e] - cmp r0, #0xe - bne _0230ABB4 - cmp r8, #1 - cmpne r8, #7 - moveq r0, r4 - beq _0230ABB8 -_0230ABB4: - mov r0, fp -_0230ABB8: - cmp r0, #0 - ldrne r1, _0230ABEC ; =DUNGEON_PTR - movne r0, #1 - ldrne r1, [r1] - strneb r0, [r1, #0x1cc] - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 -_0230ABDC: - cmp r6, #2 - blt _0230AB7C - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0230ABEC: .word DUNGEON_PTR - arm_func_end ScrappyShouldActivate - - arm_func_start IsTypeIneffectiveAgainstGhost -IsTypeIneffectiveAgainstGhost: ; 0x0230ABF0 - cmp r0, #1 - cmpne r0, #7 - moveq r0, #1 - movne r0, #0 - bx lr - arm_func_end IsTypeIneffectiveAgainstGhost - - arm_func_start GhostImmunityIsActive -GhostImmunityIsActive: ; 0x0230AC04 - stmdb sp!, {r3, lr} - ldr r3, [r1, #0xb4] - add r1, r3, r2 - ldrb r1, [r1, #0x5e] - cmp r1, #0xe - bne _0230AC50 - ldrb r1, [r3, #0xfe] - cmp r1, #0 - bne _0230AC38 - mov r1, #0x45 - bl ExclusiveItemEffectIsActive__0230A9B8 - cmp r0, #0 - beq _0230AC40 -_0230AC38: - mov r0, #1 - b _0230AC44 -_0230AC40: - mov r0, #0 -_0230AC44: - cmp r0, #0 - moveq r0, #1 - ldmeqia sp!, {r3, pc} -_0230AC50: - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end GhostImmunityIsActive - - arm_func_start GetTypeMatchup -GetTypeMatchup: ; 0x0230AC58 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r1 - ldr r4, [r7, #0xb4] - mov r6, r2 - ldrb r1, [r4, #0xf5] - mov r5, r3 - cmp r1, #1 - beq _0230AC88 - mov r1, #0x46 - bl ExclusiveItemEffectIsActive__0230A9B8 - cmp r0, #0 - beq _0230ACA0 -_0230AC88: - cmp r5, #0xb - addeq r0, r4, r6 - ldreqb r0, [r0, #0x5e] - cmpeq r0, #0x10 - moveq r0, #2 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} -_0230ACA0: - cmp r5, #9 - bne _0230ACE0 - bl GravityIsActive - cmp r0, #0 - beq _0230ACCC - add r0, r4, r6 - ldrb r0, [r0, #0x5e] - cmp r0, #0xa - bne _0230ACE0 - mov r0, #2 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0230ACCC: - mov r0, r7 - bl IsFloating - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_0230ACE0: - ldr r1, _0230AD00 ; =TYPE_MATCHUP_TABLE - mov r0, #0x24 - mla r0, r5, r0, r1 - add r1, r4, r6 - ldrb r1, [r1, #0x5e] - mov r1, r1, lsl #1 - ldrsh r0, [r1, r0] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0230AD00: .word TYPE_MATCHUP_TABLE - arm_func_end GetTypeMatchup - - arm_func_start CalcTypeBasedDamageEffects -CalcTypeBasedDamageEffects: ; 0x0230AD04 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x64 - ldr r5, _0230B774 ; =ov29_02352838 - mov sl, r1 - ldr r4, [r5, #0x1c] - ldr r5, [r5, #0x20] - ldr r8, [sp, #0x88] - ldr r1, [sp, #0x90] - ldr r7, [sp, #0x8c] - str r1, [sp, #0x90] - ldr r6, [sl, #0xb4] - mov r1, #1 - mov fp, r0 - mov sb, r2 - str r3, [sp, #4] - str r4, [sp, #0x34] - str r5, [sp, #0x38] - bl IntToFixedPoint64 - mov r0, #0 - str r0, [sp, #0x30] - strb r0, [r7, #0xe] - ldr r1, [sp, #0x30] - mov r0, sb - strb r1, [r7, #0xf] - bl EntityIsValid__02308FBC - cmp r0, #0 - moveq r0, #1 - beq _0230B76C - mov r0, r8 - bl IsTypeIneffectiveAgainstGhost - str r0, [sp, #0x2c] - mov r0, sl - mov r1, sb - mov r2, #0x35 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - cmpne r8, #0 - movne r0, #1 - strne r0, [sp, #0x30] - mov r3, #2 - mov r0, sl - mov r1, sb - mov r2, r8 - str r3, [r7, #8] - bl ScrappyShouldActivate - ldr r3, _0230B778 ; =MATCHUP_IMMUNE_MULTIPLIER_ERRATIC_PLAYER - str r0, [sp, #0x28] - ldr r0, [r3] - ldr r2, _0230B77C ; =MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER - str r0, [sp, #0x24] - ldr r0, [r2] - ldr r1, _0230B780 ; =MATCHUP_NEUTRAL_MULTIPLIER_ERRATIC_PLAYER - str r0, [sp, #0x20] - ldr r0, [r1] - ldr r1, _0230B784 ; =MATCHUP_IMMUNE_MULTIPLIER - str r0, [sp, #0x1c] - ldr r0, _0230B788 ; =MATCHUP_SUPER_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER - mov r4, #0 - ldr r0, [r0] - str r0, [sp, #0x18] - ldr r0, [r1] - ldr r1, _0230B78C ; =MATCHUP_NEUTRAL_MULTIPLIER - str r0, [sp, #0x14] - ldr r0, _0230B790 ; =MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER - ldr r0, [r0] - str r0, [sp, #0x10] - ldr r0, [r1] - str r0, [sp, #0xc] - ldr r0, _0230B794 ; =MATCHUP_SUPER_EFFECTIVE_MULTIPLIER - ldr r0, [r0] - str r0, [sp, #8] - b _0230AF8C -_0230AE28: - ldr r0, [sp, #0x90] - cmp r0, #0 - bne _0230AE90 - mov r0, sl - mov r1, #0x3b - bl IqSkillIsEnabled - cmp r0, #0 - bne _0230AE5C - mov r0, sb - mov r1, #0x3b - bl IqSkillIsEnabled - cmp r0, #0 - beq _0230AE90 -_0230AE5C: - ldr r1, [sp, #0x24] - add r0, sp, #0x44 - bl FixedPoint32To64 - ldr r1, [sp, #0x20] - add r0, sp, #0x4c - bl FixedPoint32To64 - ldr r1, [sp, #0x1c] - add r0, sp, #0x54 - bl FixedPoint32To64 - ldr r1, [sp, #0x18] - add r0, sp, #0x5c - bl FixedPoint32To64 - b _0230AEC0 -_0230AE90: - ldr r1, [sp, #0x14] - add r0, sp, #0x44 - bl FixedPoint32To64 - ldr r1, [sp, #0x10] - add r0, sp, #0x4c - bl FixedPoint32To64 - ldr r1, [sp, #0xc] - add r0, sp, #0x54 - bl FixedPoint32To64 - ldr r1, [sp, #8] - add r0, sp, #0x5c - bl FixedPoint32To64 -_0230AEC0: - mov r0, fp - bl FixedPoint64IsZero - cmp r0, #0 - bne _0230AF94 - ldr r0, [sp, #0x28] - cmp r0, #0 - bne _0230AF1C - ldr r0, [sp, #0x2c] - cmp r0, #0 - beq _0230AF1C - mov r0, sl - mov r1, sb - mov r2, r4, lsl #0x10 - mov r2, r2, asr #0x10 - bl GhostImmunityIsActive - cmp r0, #0 - beq _0230AF1C - ldr r0, _0230B798 ; =DUNGEON_PTR - mov r5, #0 - ldr r1, [r0] - mov r0, #1 - strb r0, [r1, #0x1d4] - b _0230AF38 -_0230AF1C: - mov r0, sl - mov r1, sb - mov r2, r4, lsl #0x10 - mov r2, r2, asr #0x10 - mov r3, r8 - bl GetTypeMatchup - mov r5, r0 -_0230AF38: - mov r0, sl - mov r1, #0x3b - bl IqSkillIsEnabled - cmp r0, #0 - beq _0230AF64 - add r2, sp, #0x44 - mov r0, fp - mov r1, fp - add r2, r2, r5, lsl #3 - bl MultiplyFixedPoint64 - b _0230AF80 -_0230AF64: - cmp r5, #2 - beq _0230AF80 - add r2, sp, #0x44 - mov r0, fp - mov r1, fp - add r2, r2, r5, lsl #3 - bl MultiplyFixedPoint64 -_0230AF80: - add r0, sp, #0x34 - str r5, [r0, r4, lsl #2] - add r4, r4, #1 -_0230AF8C: - cmp r4, #2 - blt _0230AE28 -_0230AF94: - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r4, [sp, #0x34] - ldr r2, [r0] - ldr r1, _0230B79C ; =TYPE_MATCHUP_COMBINATOR_TABLE - strb r4, [r2, #0x18c] - ldr r3, [sp, #0x38] - ldr r2, [r0] - add r1, r1, r4, lsl #4 - ldr r0, [r1, r3, lsl #2] - strb r3, [r2, #0x18d] - cmp r0, #3 - str r0, [r7, #8] - moveq r4, #1 - beq _0230AFEC - ldr r0, [sp, #0x30] - mov r4, #0 - cmp r0, #0 - ldrne r0, _0230B774 ; =ov29_02352838 - ldrne r1, [r0, #0x3c] - ldrne r0, [r0, #0x40] - strne r1, [fp] - strne r0, [fp, #4] -_0230AFEC: - mov r0, sl - mov r1, #0x50 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230B02C - ldr r0, [r7, #8] - cmp r0, #1 - bne _0230B02C - ldr r1, _0230B7A0 ; =TINTED_LENS_MULTIPLIER - add r0, sp, #0x3c - ldr r1, [r1] - bl FixedPoint32To64 - add r2, sp, #0x3c - mov r0, fp - mov r1, fp - bl MultiplyFixedPoint64 -_0230B02C: - mov r0, sl - mov r1, sb - mov r2, #0x6c -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - bne _0230B064 - mov r0, sl - mov r1, sb - mov r2, #0x6e -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - beq _0230B080 -_0230B064: - ldr r0, [r7, #8] - cmp r0, #3 - bne _0230B080 - ldr r2, _0230B7A4 ; =SOLID_ROCK_MULTIPLIER - mov r0, fp - mov r1, fp - bl MultiplyFixedPoint64 -_0230B080: - mov r0, sb - mov r1, #0x5a - bl ExclusiveItemEffectIsActive__0230A9B8 - cmp r0, #0 - beq _0230B0A4 - ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 - mov r0, fp - mov r1, fp - bl MultiplyFixedPoint64 -_0230B0A4: - ldr r0, [sp, #0x90] - cmp r0, #0 - bne _0230B104 - mov r0, sl - mov r1, #0x64 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230B104 - ldr r0, _0230B7AC ; =TECHNICIAN_MOVE_POWER_THRESHOLD - ldrsh r1, [r0] - ldr r0, [sp, #4] - cmp r0, r1 - bgt _0230B104 - ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 - mov r0, fp - mov r1, fp - bl MultiplyFixedPoint64 - mov r1, #0x64 - ldr r2, _0230B7B4 ; =0x00000C3E - mov r0, sl - str r1, [sp] - mov r1, sb - mov r3, #2 - bl LogMessageByIdWithPopupCheckParticipants -_0230B104: - cmp r8, #2 - cmpne r8, #6 - bne _0230B14C - mov r0, sl - mov r1, sb - mov r2, #2 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - beq _0230B14C - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 - ldr r3, [r0] - mov r5, #1 - mov r0, fp - mov r1, fp - strb r5, [r3, #0x1c5] - bl MultiplyFixedPoint64 -_0230B14C: - cmp r8, #2 - bne _0230B198 - mov r0, sl - mov r1, sb - bl FlashFireShouldActivate - cmp r0, #0 - beq _0230B198 - ldr r1, _0230B798 ; =DUNGEON_PTR - mov r0, fp - ldr r2, [r1] - mov r3, #1 - mov r1, #0 - strb r3, [r2, #0x1c6] - bl IntToFixedPoint64 - mov r4, #0 - str r4, [r7, #8] - strb r4, [r7, #0xe] - mov r0, #1 - strb r0, [r7, #0xf] -_0230B198: - cmp r8, #2 - bne _0230B1DC - mov r0, sl - mov r1, sb - mov r2, #0x5f -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - beq _0230B1DC - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 - ldr r3, [r0] - mov r5, #1 - mov r0, fp - mov r1, fp - strb r5, [r3, #0x1c5] - bl MultiplyFixedPoint64 -_0230B1DC: - cmp r8, #9 - bne _0230B248 - mov r0, sl - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - bne _0230B208 - mov r0, sb - bl LevitateIsActive - cmp r0, #0 - bne _0230B218 -_0230B208: - mov r0, sb - bl IsFloating - cmp r0, #0 - beq _0230B248 -_0230B218: - ldr r1, _0230B798 ; =DUNGEON_PTR - mov r0, fp - ldr r2, [r1] - mov r3, #1 - mov r1, #0 - strb r3, [r2, #0x1c7] - bl IntToFixedPoint64 - mov r4, #0 - str r4, [r7, #8] - strb r4, [r7, #0xe] - mov r0, #1 - strb r0, [r7, #0xf] -_0230B248: - cmp r8, #3 - bne _0230B2F4 - mov r0, sl - mov r1, #0x10 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230B2F4 - ldrsh r2, [r6, #0x12] - ldrsh r1, [r6, #0x16] - ldr r0, _0230B7B8 ; =0x000003E7 - add r2, r2, r1 - cmp r2, r0 - movgt r2, r0 - mov r0, r2, asr #1 - ldrsh r1, [r6, #0x10] - add r0, r2, r0, lsr #30 - cmp r1, r0, asr #2 - movle r0, #1 - movgt r0, #0 - and r7, r0, #0xff - mov r0, r6 - mov r2, r7 - mov r1, #0x80 - bl UpdateStateFlags - mov r5, r0 - cmp r7, #0 - beq _0230B2D4 - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 - ldr r3, [r0] - mov r7, #1 - mov r0, fp - mov r1, fp - strb r7, [r3, #0x1c8] - bl MultiplyFixedPoint64 -_0230B2D4: - cmp r5, #0 - beq _0230B2F4 - mov r0, sl - bl PlayEffectAnimation0x1A9__022E6214 - ldr r2, _0230B7C0 ; =0x00000C4F - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_0230B2F4: - cmp r8, #4 - bne _0230B3A0 - mov r0, sl - mov r1, #0x1a - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230B3A0 - ldrsh r2, [r6, #0x12] - ldrsh r1, [r6, #0x16] - ldr r0, _0230B7B8 ; =0x000003E7 - add r2, r2, r1 - cmp r2, r0 - movgt r2, r0 - mov r0, r2, asr #1 - ldrsh r1, [r6, #0x10] - add r0, r2, r0, lsr #30 - cmp r1, r0, asr #2 - movle r0, #1 - movgt r0, #0 - and r7, r0, #0xff - mov r0, r6 - mov r2, r7 - mov r1, #2 - bl UpdateStateFlags - mov r5, r0 - cmp r7, #0 - beq _0230B380 - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 - ldr r3, [r0] - mov r7, #1 - mov r0, fp - mov r1, fp - strb r7, [r3, #0x1c9] - bl MultiplyFixedPoint64 -_0230B380: - cmp r5, #0 - beq _0230B3A0 - mov r0, sl - bl PlayEffectAnimation0x1A9__022E61C8 -#ifdef JAPAN - ldr r2, _0230CD24 ; =0x0000098F - mov r0, sl - mov r1, sb -#else - mov r0, sl - mov r1, sb - mov r2, #0xc50 -#endif - bl LogMessageByIdWithPopupCheckUserTarget -_0230B3A0: - cmp r8, #0xc - bne _0230B44C - mov r0, sl - mov r1, #0x43 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230B44C - ldrsh r2, [r6, #0x12] - ldrsh r1, [r6, #0x16] - ldr r0, _0230B7B8 ; =0x000003E7 - add r2, r2, r1 - cmp r2, r0 - movgt r2, r0 - mov r0, r2, asr #1 - ldrsh r1, [r6, #0x10] - add r0, r2, r0, lsr #30 - cmp r1, r0, asr #2 - movle r0, #1 - movgt r0, #0 - and r7, r0, #0xff - mov r0, r6 - mov r2, r7 - mov r1, #0x10 - bl UpdateStateFlags - mov r5, r0 - cmp r7, #0 - beq _0230B42C - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 - ldr r3, [r0] - mov r7, #1 - mov r0, fp - mov r1, fp - strb r7, [r3, #0x1ca] - bl MultiplyFixedPoint64 -_0230B42C: - cmp r5, #0 - beq _0230B44C - mov r0, sl - bl PlayEffectAnimation0x1A9__022E64C4 -#ifdef JAPAN - mov r0, sl - mov r1, sb - mov r2, #0x990 -#else - ldr r2, _0230B7C4 ; =0x00000C51 - mov r0, sl - mov r1, sb -#endif - bl LogMessageByIdWithPopupCheckUserTarget -_0230B44C: - cmp r8, #2 - bne _0230B534 - mov r0, sl - mov r1, #0x46 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230B4F8 - ldrsh r2, [r6, #0x12] - ldrsh r1, [r6, #0x16] - ldr r0, _0230B7B8 ; =0x000003E7 - add r2, r2, r1 - cmp r2, r0 - movgt r2, r0 - mov r0, r2, asr #1 - ldrsh r1, [r6, #0x10] - add r0, r2, r0, lsr #30 - cmp r1, r0, asr #2 - movle r0, #1 - movgt r0, #0 - and r7, r0, #0xff - mov r0, r6 - mov r2, r7 - mov r1, #0x20 - bl UpdateStateFlags - mov r5, r0 - cmp r7, #0 - beq _0230B4D8 - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 - ldr r3, [r0] - mov r7, #1 - mov r0, fp - mov r1, fp - strb r7, [r3, #0x1cb] - bl MultiplyFixedPoint64 -_0230B4D8: - cmp r5, #0 - beq _0230B4F8 - mov r0, sl - bl PlayEffectAnimation0x1A9__022E6510 - ldr r2, _0230B7C8 ; =0x00000C52 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_0230B4F8: - mov r0, sl - mov r1, sb - mov r2, #0x55 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - beq _0230B534 - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 - ldr r3, [r0] - mov r5, #1 - mov r0, fp - mov r1, fp - strb r5, [r3, #0x1cb] - bl MultiplyFixedPoint64 -_0230B534: - ldrb r0, [r6, #0xbf] - cmp r0, #1 - bne _0230B560 - ldr r1, _0230B7CC ; =BURN_DAMAGE_MULTIPLIER - add r0, sp, #0x3c - ldr r1, [r1] - bl FixedPoint32To64 - add r2, sp, #0x3c - mov r0, fp - mov r1, fp - bl MultiplyFixedPoint64 -_0230B560: - mov r0, fp - bl FixedPoint64IsZero - cmp r0, #0 - bne _0230B5CC - mov r0, sl - mov r1, r8 - bl MonsterIsType - cmp r0, #0 - beq _0230B5CC - ldr r1, _0230B798 ; =DUNGEON_PTR - mov r0, sl - ldr r2, [r1] - mov r3, #1 - mov r1, #0x63 - strb r3, [r2, #0x1cf] - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230B5BC - ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 - mov r0, fp - mov r1, fp - bl MultiplyFixedPoint64 - b _0230B5CC -_0230B5BC: - ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 - mov r0, fp - mov r1, fp - bl MultiplyFixedPoint64 -_0230B5CC: - mov r0, sl - bl GetApparentWeather - mov r5, r0 - cmp r5, #1 - bne _0230B634 - cmp r8, #2 - bne _0230B60C - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 - ldr r3, [r0] - mov r7, #1 - mov r0, fp - mov r1, fp - strb r7, [r3, #0x1c4] - bl MultiplyFixedPoint64 - b _0230B634 -_0230B60C: - cmp r8, #3 - bne _0230B634 - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 - ldr r3, [r0] - mov r7, #1 - mov r0, fp - mov r1, fp - strb r7, [r3, #0x1c4] - bl MultiplyFixedPoint64 -_0230B634: - cmp r5, #4 - bne _0230B690 - cmp r8, #2 - bne _0230B668 - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 - ldr r3, [r0] - mov r7, #1 - mov r0, fp - mov r1, fp - strb r7, [r3, #0x1c3] - bl MultiplyFixedPoint64 - b _0230B690 -_0230B668: - cmp r8, #3 - bne _0230B690 - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 - ldr r3, [r0] - mov r7, #1 - mov r0, fp - mov r1, fp - strb r7, [r3, #0x1c3] - bl MultiplyFixedPoint64 -_0230B690: - cmp r5, #3 - bne _0230B6C0 - cmp r8, #1 - beq _0230B6C0 - ldr r2, _0230B7D0 ; =CLOUDY_DAMAGE_MULTIPLIER - mov r0, fp - mov r1, fp - bl MultiplyFixedPoint64 - ldr r0, _0230B798 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - strb r1, [r0, #0x1c2] -_0230B6C0: - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r7, [r0] - add r0, r7, #0xc000 -#ifdef JAPAN - ldrb r0, [r0, #0xcb7] -#else - ldrb r0, [r0, #0xd5b] -#endif - cmp r0, #0 - bne _0230B6E0 - cmp r5, #6 - bne _0230B700 -_0230B6E0: - cmp r8, #5 - bne _0230B700 - ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 - mov r3, #1 - mov r0, fp - mov r1, fp - strb r3, [r7, #0x1d0] - bl MultiplyFixedPoint64 -_0230B700: - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r5, [r0] - add r0, r5, #0xc000 -#ifdef JAPAN - ldrb r0, [r0, #0xcb8] -#else - ldrb r0, [r0, #0xd5c] -#endif - cmp r0, #0 - beq _0230B738 - cmp r8, #2 - bne _0230B738 - ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 - mov r3, #1 - mov r0, fp - mov r1, fp - strb r3, [r5, #0x1d1] - bl MultiplyFixedPoint64 -_0230B738: - cmp r8, #5 - ldreqb r0, [r6, #0xd2] - cmpeq r0, #0xb - bne _0230B768 - ldr r0, _0230B798 ; =DUNGEON_PTR - ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 - ldr r3, [r0] - mov r5, #1 - mov r0, fp - mov r1, fp - strb r5, [r3, #0x1d2] - bl MultiplyFixedPoint64 -_0230B768: - mov r0, r4 -_0230B76C: - add sp, sp, #0x64 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET -0x2C1 -#else -#define CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET 0 -#endif -_0230B774: .word ov29_02352838 -_0230B778: .word MATCHUP_IMMUNE_MULTIPLIER_ERRATIC_PLAYER -_0230B77C: .word MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER -_0230B780: .word MATCHUP_NEUTRAL_MULTIPLIER_ERRATIC_PLAYER -_0230B784: .word MATCHUP_IMMUNE_MULTIPLIER -_0230B788: .word MATCHUP_SUPER_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER -_0230B78C: .word MATCHUP_NEUTRAL_MULTIPLIER -_0230B790: .word MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER -_0230B794: .word MATCHUP_SUPER_EFFECTIVE_MULTIPLIER -_0230B798: .word DUNGEON_PTR -_0230B79C: .word TYPE_MATCHUP_COMBINATOR_TABLE -_0230B7A0: .word TINTED_LENS_MULTIPLIER -_0230B7A4: .word SOLID_ROCK_MULTIPLIER -_0230B7A8: .word DAMAGE_MULTIPLIER_0_5 -_0230B7AC: .word TECHNICIAN_MOVE_POWER_THRESHOLD -_0230B7B0: .word DAMAGE_MULTIPLIER_1_5 -_0230B7B4: .word 0x00000C3E + CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET -_0230B7B8: .word 0x000003E7 -_0230B7BC: .word DAMAGE_MULTIPLIER_2 -_0230B7C0: .word 0x00000C4F + CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET -#ifdef JAPAN -_0230CD24: .word 0x0000098F -#else -_0230B7C4: .word 0x00000C51 -#endif -_0230B7C8: .word 0x00000C52 + CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET -_0230B7CC: .word BURN_DAMAGE_MULTIPLIER -_0230B7D0: .word CLOUDY_DAMAGE_MULTIPLIER - arm_func_end CalcTypeBasedDamageEffects - - arm_func_start ov29_0230B7D4 -ov29_0230B7D4: ; 0x0230B7D4 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x24 - mov sb, r1 - mov sl, r0 - mov r0, sb - mov r4, #1 - mov r8, r2 - mov fp, #0 - bl EntityIsValid__02308FBC - cmp r0, #0 - moveq r0, r4 - beq _0230BB98 - mov r0, sl - mov r1, #0x6b - ldr r7, [sl, #0xb4] - ldr r6, [sb, #0xb4] - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r8, r4 - cmp r8, #1 - cmpne r8, #7 - moveq fp, #1 - cmp r8, #2 - bne _0230B84C - mov r0, sl - mov r1, sb - bl FlashFireShouldActivate - cmp r0, #0 - movne r0, #0 - bne _0230BB98 -_0230B84C: - cmp r8, #5 - bne _0230B874 - mov r0, sl - mov r1, sb - mov r2, #0x23 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - movne r0, #0 - bne _0230BB98 -_0230B874: - cmp r8, #3 - bne _0230B89C - mov r0, sl - mov r1, sb - mov r2, #0x24 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - movne r0, #0 - bne _0230BB98 -_0230B89C: - cmp r8, #9 - bne _0230B8E0 - mov r0, sl - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - bne _0230B8C8 - mov r0, sb - bl LevitateIsActive - cmp r0, #0 - bne _0230B8D8 -_0230B8C8: - mov r0, sb - bl IsFloating - cmp r0, #0 - beq _0230B8E0 -_0230B8D8: - mov r0, #1 - b _0230BB98 -_0230B8E0: - mov r0, sl - mov r1, sb - mov r2, r8 - bl ScrappyShouldActivate - ldr r1, _0230BBA0 ; =ov29_02352884 - str r0, [sp] - add ip, sp, #4 - ldmia r1, {r0, r1, r2, r3} - stmia ip, {r0, r1, r2, r3} - mov r5, #0 - b _0230B9A0 -_0230B90C: - ldr r0, [sp] - add ip, sp, #0x14 - cmp r0, #0 - add r0, sp, #4 - ldmia r0, {r0, r1, r2, r3} - stmia ip, {r0, r1, r2, r3} - bne _0230B960 - cmp fp, #0 - beq _0230B960 - add r0, r6, r5 - ldrb r0, [r0, #0x5e] - cmp r0, #0xe - ldreqb r0, [r6, #0xfe] - cmpeq r0, #0 - bne _0230B960 - ldr r1, _0230BBA4 ; =DUNGEON_PTR - mov r0, #0 - ldr r2, [r1] - mov r1, #1 - strb r1, [r2, #0x1d4] - b _0230B978 -_0230B960: - mov r0, sl - mov r1, sb - mov r2, r5, lsl #0x10 - mov r2, r2, asr #0x10 - mov r3, r8 - bl GetTypeMatchup -_0230B978: - cmp r4, #0 - beq _0230B9A8 - add r1, sp, #0x14 - ldr r0, [r1, r0, lsl #2] - mul r0, r4, r0 - add r0, r0, r0, lsr #31 - movs r4, r0, asr #1 - moveq r0, #2 - beq _0230BB98 - add r5, r5, #1 -_0230B9A0: - cmp r5, #2 - blt _0230B90C -_0230B9A8: - cmp r8, #2 - cmpne r8, #6 - bne _0230B9D4 - mov r0, sl - mov r1, sb - mov r2, #2 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - movne r0, #2 - bne _0230BB98 -_0230B9D4: - cmp r8, #3 - bne _0230BA1C - mov r0, sl - mov r1, #0x10 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230BA1C - ldrsh r2, [r7, #0x12] - ldrsh r1, [r7, #0x16] - ldr r0, _0230BBA8 ; =0x000003E7 - add r2, r2, r1 - cmp r2, r0 - movgt r2, r0 - mov r0, r2, asr #1 - ldrsh r1, [r7, #0x10] - add r0, r2, r0, lsr #30 - cmp r1, r0, asr #2 - movle r4, r4, lsl #1 -_0230BA1C: - cmp r8, #4 - bne _0230BA64 - mov r0, sl - mov r1, #0x1a - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230BA64 - ldrsh r2, [r7, #0x12] - ldrsh r1, [r7, #0x16] - ldr r0, _0230BBA8 ; =0x000003E7 - add r2, r2, r1 - cmp r2, r0 - movgt r2, r0 - mov r0, r2, asr #1 - ldrsh r1, [r7, #0x10] - add r0, r2, r0, lsr #30 - cmp r1, r0, asr #2 - movle r4, r4, lsl #1 -_0230BA64: - cmp r8, #0xc - bne _0230BAAC - mov r0, sl - mov r1, #0x43 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230BAAC - ldrsh r2, [r7, #0x12] - ldrsh r1, [r7, #0x16] - ldr r0, _0230BBA8 ; =0x000003E7 - add r2, r2, r1 - cmp r2, r0 - movgt r2, r0 - mov r0, r2, asr #1 - ldrsh r1, [r7, #0x10] - add r0, r2, r0, lsr #30 - cmp r1, r0, asr #2 - movle r4, r4, lsl #1 -_0230BAAC: - cmp r8, #2 - bne _0230BAF4 - mov r0, sl - mov r1, #0x46 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230BAF4 - ldrsh r2, [r7, #0x12] - ldrsh r1, [r7, #0x16] - ldr r0, _0230BBA8 ; =0x000003E7 - add r2, r2, r1 - cmp r2, r0 - movgt r2, r0 - mov r0, r2, asr #1 - ldrsh r1, [r7, #0x10] - add r0, r2, r0, lsr #30 - cmp r1, r0, asr #2 - movle r4, r4, lsl #1 -_0230BAF4: - cmp r4, #0 - moveq r0, #2 - beq _0230BB98 - mov r0, sl - mov r1, r8 - bl MonsterIsType - cmp r0, #0 - mov r0, sl - movne r4, r4, lsl #1 - bl GetApparentWeather - cmp r0, #1 - bne _0230BB3C - cmp r8, #2 - moveq r4, r4, lsl #1 - beq _0230BB3C - cmp r8, #3 - moveq r0, #2 - beq _0230BB98 -_0230BB3C: - ldr r0, _0230BBA4 ; =DUNGEON_PTR - ldr r1, [r0] - add r0, r1, #0xc000 -#ifdef JAPAN - ldrb r0, [r0, #0xcb7] -#else - ldrb r0, [r0, #0xd5b] -#endif - cmp r0, #0 - beq _0230BB60 - cmp r8, #5 - moveq r0, #2 - beq _0230BB98 -_0230BB60: - add r0, r1, #0xc000 -#ifdef JAPAN - ldrb r0, [r0, #0xcb8] -#else - ldrb r0, [r0, #0xd5c] -#endif - cmp r0, #0 - beq _0230BB7C - cmp r8, #2 - moveq r0, #2 - beq _0230BB98 -_0230BB7C: - cmp r8, #5 - ldreqb r0, [r7, #0xd2] - cmpeq r0, #0xb - moveq r4, r4, lsl #1 - cmp r4, #3 - movge r4, #3 - add r0, r4, #2 -_0230BB98: - add sp, sp, #0x24 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0230BBA0: .word ov29_02352884 -_0230BBA4: .word DUNGEON_PTR -_0230BBA8: .word 0x000003E7 - arm_func_end ov29_0230B7D4 - - arm_func_start CalcDamage -CalcDamage: ; 0x0230BBAC -#ifdef JAPAN -#define CALC_DAMAGE_OFFSET -4 -#else -#define CALC_DAMAGE_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc0 - ldr r4, _0230C450 ; =DUNGEON_PTR - mov sl, r0 - ldr r4, [r4] - ldr r6, [sl, #0xb4] - ldr r8, [sp, #0xec] - str r2, [sp, #0xc] - mov sb, r1 - ldr r1, [sp, #0xf4] - mov r0, r8 - str r1, [sp, #0xf4] - ldr r1, [sp, #0xf8] - str r3, [sp, #0x10] - str r1, [sp, #0xf8] - ldr r1, [sp, #0xf0] - add r5, r4, #0x184 - ldr r7, [sb, #0xb4] - str r1, [sp, #0x1c] - bl ResetDamageData - ldrb r0, [r6, #0x221 + CALC_DAMAGE_OFFSET] - cmp r0, #0 - beq _0230BC1C - ldr r1, _0230C454 ; =ME_FIRST_MULTIPLIER - ldr r0, [sp, #0x1c] - ldr r1, [r1] - bl MultiplyByFixedPoint - str r0, [sp, #0x1c] -_0230BC1C: - mov r0, sl - mov r1, #0x5c - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230BC50 - ldr r0, [sp, #0xf4] - bl IsRecoilMove - cmp r0, #0 - ldrne r0, [sp, #0x1c] - addne r0, r0, r0, lsl #1 - addne r0, r0, r0, lsr #31 - movne r0, r0, asr #1 - strne r0, [sp, #0x1c] -_0230BC50: - mov r0, sl - mov r1, #0x65 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230BC84 - ldr r0, [sp, #0xf4] - bl IsPunchMove - cmp r0, #0 - beq _0230BC84 - ldr r0, [sp, #0x1c] - mov r1, #0x180 - bl MultiplyByFixedPoint - str r0, [sp, #0x1c] -_0230BC84: - mov r0, sl - mov r1, #0x6b - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0xc] - ldr r1, _0230C458 ; =0x000001D3 - ldr r0, [sp, #0xf4] - cmp r0, r1 - ldreqb r0, [r6, #0x5e] - streq r0, [sp, #0xc] - ldr r0, [sp, #0xf4] - bl MoveIsNotPhysical - str r0, [sp, #0x18] - bl ResetDamageCalcDiagnostics - ldrb r0, [r6, #7] - cmp r0, #0 - bne _0230BD34 - add r0, r6, #0x100 - ldrh r1, [r0, #0x46 + CALC_DAMAGE_OFFSET] - sub r2, sp, #4 - strh r1, [r2] - ldrh r0, [r0, #0x48 + CALC_DAMAGE_OFFSET] - strh r0, [r2, #2] - ldr r0, [r2] - bl CeilFixedPoint - cmp r0, #0 - bne _0230BD34 - mov r0, #1 - str r0, [r8] - mov r0, #0 - str r0, [r8, #4] - mov r0, #2 - str r0, [r8, #8] - ldr r0, [sp, #0xf4] - ldr r1, [sp, #0xc] - strb r1, [r8, #0xc] - bl GetMoveCategory - strb r0, [r8, #0xd] - mov r0, #0 - strb r0, [r8, #0xe] - strb r0, [r8, #0xf] - strb r0, [r8, #0x10] - b _0230D054 -_0230BD34: - ldr r1, _0230C45C ; =0x00000163 - ldr r0, [sp, #0xf4] - cmp r0, r1 - bne _0230BDA0 - mov r0, sl - mov r1, sb - mov r2, #0x35 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - beq _0230BDA0 - mov r0, #1 - str r0, [r8] - mov r0, #0 - str r0, [r8, #4] - mov r0, #2 - str r0, [r8, #8] - ldr r0, [sp, #0xf4] - ldr r1, [sp, #0xc] - strb r1, [r8, #0xc] - bl GetMoveCategory - strb r0, [r8, #0xd] - mov r0, #0 - strb r0, [r8, #0xe] - strb r0, [r8, #0xf] - strb r0, [r8, #0x10] - b _0230D054 -_0230BDA0: - ldr r0, [sp, #0xf4] - ldr r1, [sp, #0xc] - strb r1, [r8, #0xc] - bl GetMoveCategory - strb r0, [r8, #0xd] - ldr r0, [sp, #0xc] - mov r4, #0 - strb r0, [r5] - ldr r0, [sp, #0x18] - mov r1, #0x60 - str r0, [r5, #4] - add r0, r6, r0, lsl #2 - ldr r0, [r0, #0x34] - mov fp, r4 - str r0, [sp, #0x3c] - ldr r0, [sp, #0x18] - add r0, r7, r0, lsl #2 - ldr r0, [r0, #0x3c] - str r0, [sp, #0x38] - mov r0, sl - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230BE40 - ldrb r1, [r7, #0x1c] - ldrb r0, [r7, #0x1d] - cmp r1, r0 - blo _0230BE28 - ldr r0, [sp, #0x18] - cmp r0, #1 - ldreqb r0, [r5, #0x32] - addeq r4, r4, #1 - addeq r0, r0, #1 - streqb r0, [r5, #0x32] - b _0230BE40 -_0230BE28: - ldr r0, [sp, #0x18] - cmp r0, #0 - ldreqb r0, [r5, #0x32] - addeq r4, r4, #1 - addeq r0, r0, #1 - streqb r0, [r5, #0x32] -_0230BE40: - ldr r0, [sp, #0xf8] - cmp r0, #0 - ldr r0, [sp, #0x18] - add r0, r6, r0, lsl #1 - ldrsh r0, [r0, #0x24] - str r0, [sp, #0x44] - beq _0230BE70 - ldr r0, [sp, #0xc] - cmp r0, #2 - ldreqsh r0, [r6, #0x30] - streqh r0, [r5, #0x10] - addeq r4, r4, r0 -_0230BE70: - mov r0, sl - mov r1, #0x22 - bl IqSkillIsEnabled - cmp r0, #0 - ldrneb r0, [r5, #0x34] - mov r1, #0x23 - addne r4, r4, #1 - addne r0, r0, #1 - strneb r0, [r5, #0x34] - mov r0, sl - bl IqSkillIsEnabled - cmp r0, #0 - ldrneb r0, [r5, #0x34] - mov r1, #0x3c - subne r4, r4, #1 - subne r0, r0, #1 - strneb r0, [r5, #0x34] - mov r0, sl - bl IqSkillIsEnabled - cmp r0, #0 - ldrneb r0, [r6, #0x166 + CALC_DAMAGE_OFFSET] - mov r1, #0x32 - cmpne r0, #0 - ldrneb r0, [r5, #0x34] - addne r4, r4, #1 - addne r0, r0, #1 - strneb r0, [r5, #0x34] - mov r0, sl - bl NearbyAllyIqSkillIsEnabled - cmp r0, #0 - ldr r0, [sp, #0x18] - addne r4, r4, #1 - cmp r0, #0 - mov r0, sl - bne _0230BFA8 - mov r1, #0x68 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230BF5C - ldrsh r0, [r6, #4] - ldrsh r1, [r7, #4] - bl GendersEqualNotGenderless - cmp r0, #0 - ldrneb r0, [r5, #0x32] - addne r4, r4, #1 - addne r0, r0, #1 - strneb r0, [r5, #0x32] - bne _0230BF5C - ldrsh r0, [r6, #4] - bl GetMonsterGenderVeneer - cmp r0, #3 - beq _0230BF5C - ldrsh r0, [r7, #4] - bl GetMonsterGenderVeneer - cmp r0, #3 - ldrneb r0, [r5, #0x32] - subne r4, r4, #1 - subne r0, r0, #1 - strneb r0, [r5, #0x32] -_0230BF5C: - mov r0, sl - bl GetApparentWeather - cmp r0, #1 - bne _0230C040 - mov r0, sl - mov r1, #0x71 - bl AbilityIsActiveVeneer - cmp r0, #0 - bne _0230BF94 - mov r0, sl - mov r1, #0x71 - bl OtherMonsterAbilityIsActive - cmp r0, #0 - beq _0230C040 -_0230BF94: - add r4, r4, #1 - ldrb r0, [r5, #0x32] - add r0, r0, #1 - strb r0, [r5, #0x32] - b _0230C040 -_0230BFA8: - mov r1, #0x5a - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230BFD4 - mov r0, sl - bl GetApparentWeather - cmp r0, #1 - ldreqb r0, [r5, #0x32] - addeq r4, r4, #2 - addeq r0, r0, #2 - streqb r0, [r5, #0x32] -_0230BFD4: - mov r0, sb - bl GetApparentWeather - cmp r0, #1 - bne _0230C01C - mov r0, sb - mov r1, #0x71 - bl AbilityIsActiveVeneer - cmp r0, #0 - bne _0230C00C - mov r0, sb - mov r1, #0x71 - bl OtherMonsterAbilityIsActive - cmp r0, #0 - beq _0230C01C -_0230C00C: - add fp, fp, #1 - ldrb r0, [r5, #0x33] - add r0, r0, #1 - strb r0, [r5, #0x33] -_0230C01C: - mov r0, sb - bl GetApparentWeather - cmp r0, #2 - bne _0230C040 - ldrb r0, [r7, #0x5e] - cmp r0, #0xd - ldrneb r0, [r7, #0x5f] - cmpne r0, #0xd - addeq fp, fp, #2 -_0230C040: - ldrsh r1, [r6, #4] - ldr r0, _0230C460 ; =0x000001A3 - cmp r1, r0 - addeq r4, r4, #2 - cmp r1, #0x1a4 - ldr r0, _0230C464 ; =0x000001A5 - subeq r4, r4, #2 - cmp r1, r0 - ldr r0, _0230C468 ; =0x00000211 - subeq r4, r4, #2 - cmp r1, r0 - subeq r4, r4, #2 - beq _0230C07C - cmp r1, #0x218 - addeq r4, r4, #2 -_0230C07C: - ldr r0, [sp, #0x44] - add r0, r0, r4 - str r0, [sp, #0x44] - ldrb r0, [r6, #0x167 + CALC_DAMAGE_OFFSET] - cmp r0, #0 - beq _0230C0AC - mov r0, sl - mov r1, #0x4f - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0x14 - strne r0, [sp, #0x44] -_0230C0AC: - ldr r0, [sp, #0x18] - cmp r0, #0 - add r0, r7, r0, lsl #1 - ldrsh r4, [r0, #0x28] - bne _0230C0F4 - ldrb r0, [r7, #0xd2] - mov r1, #0x31 - cmp r0, #6 - moveq r0, #1 - streqb r0, [r5, #0x51] - mov r0, sb - addeq fp, fp, #1 - bl IqSkillIsEnabled - cmp r0, #0 - ldrneb r0, [r5, #0x35] - subne fp, fp, #1 - subne r0, r0, #1 - strneb r0, [r5, #0x35] -_0230C0F4: - mov r0, sb - mov r1, #0x22 - bl IqSkillIsEnabled - cmp r0, #0 - ldrneb r0, [r5, #0x35] - mov r1, #0x23 - subne fp, fp, #1 - subne r0, r0, #1 - strneb r0, [r5, #0x35] - mov r0, sb - bl IqSkillIsEnabled - cmp r0, #0 - ldrneb r0, [r5, #0x35] - addne fp, fp, #1 - addne r0, r0, #1 - strneb r0, [r5, #0x35] - ldrsh r1, [r7, #4] - ldr r0, _0230C460 ; =0x000001A3 - cmp r1, r0 - subeq fp, fp, #2 - cmp r1, #0x1a4 - ldr r0, _0230C464 ; =0x000001A5 - addeq fp, fp, #2 - cmp r1, r0 -#ifdef JAPAN - ldrsh r1, [r6, #4] -#endif - ldr r0, _0230C468 ; =0x00000211 - subeq fp, fp, #2 - cmp r1, r0 - addeq fp, fp, #2 - beq _0230C170 - cmp r1, #0x218 - subeq fp, fp, #2 -_0230C170: - ldr r1, _0230C46C ; =0x000001BD - ldr r0, [sp, #0xf4] - add r4, r4, fp - cmp r0, r1 - bne _0230C1F4 - ldrsh r1, [r7, #0x24] - mov r0, #0 - cmp r1, #0xa - subgt r1, r1, #0xa - addgt r0, r0, r1 - movgt r0, r0, lsl #0x10 - ldrsh r1, [r7, #0x28] - movgt r0, r0, asr #0x10 - cmp r1, #0xa - subgt r1, r1, #0xa - addgt r0, r0, r1 - movgt r0, r0, lsl #0x10 - ldrsh r1, [r7, #0x26] - movgt r0, r0, asr #0x10 - cmp r1, #0xa - subgt r1, r1, #0xa - addgt r0, r0, r1 - movgt r0, r0, lsl #0x10 - ldrsh r1, [r7, #0x2a] - movgt r0, r0, asr #0x10 - cmp r1, #0xa - subgt r1, r1, #0xa - addgt r0, r0, r1 - movgt r0, r0, lsl #0x10 - ldr r1, [sp, #0x44] - movgt r0, r0, asr #0x10 - add r0, r1, r0 - str r0, [sp, #0x44] -_0230C1F4: - mov r0, sl - mov r1, #0x67 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0x100 - movne r4, #0xa - strne r0, [sp, #0x38] - bne _0230C23C - mov r0, sl - mov r1, sb - mov r2, #0x67 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - movne r0, #0xa - strne r0, [sp, #0x44] - movne r0, #0x100 - strne r0, [sp, #0x3c] -_0230C23C: - ldr r0, [sp, #0x44] - ldr r1, [sp, #0x18] - cmp r0, #0 - movlt r0, #0 - strlt r0, [sp, #0x44] - ldr r0, [sp, #0x44] - ldr r2, _0230C470 ; =OFFENSIVE_STAT_STAGE_MULTIPLIERS - cmp r0, #0x14 - movgt r0, #0x14 - strgt r0, [sp, #0x44] - ldr r0, [sp, #0x44] - strb r0, [r5, #0xa] - add r0, r6, #0x1a - ldrb r3, [r0, r1] - ldr r1, [sp, #0x44] - ldr fp, [r2, r1, lsl #2] - ldr r1, [sp, #0x18] - strh r3, [r5, #0xc] - ldrb r0, [r0, r1] - mov r1, fp - mov r0, r0, lsl #8 - bl MultiplyByFixedPoint - ldr r1, [sp, #0x3c] - bl MultiplyByFixedPoint - mov r0, r0, asr #8 - cmp r4, #0 - movlt r4, #0 - str r0, [sp, #0x90] - cmp r4, #0x14 - movgt r4, #0x14 - ldr r1, [sp, #0x18] - strb r4, [r5, #0xb] - add r0, r7, #0x1c - ldrb r2, [r0, r1] - ldr r1, _0230C474 ; =DEFENSIVE_STAT_STAGE_MULTIPLIERS - strh r2, [r5, #0xe] - ldr r2, [sp, #0x18] - ldr r1, [r1, r4, lsl #2] - ldrb r0, [r0, r2] - mov r0, r0, lsl #8 - bl MultiplyByFixedPoint - ldr r1, [sp, #0x38] - bl MultiplyByFixedPoint - mov r0, r0, asr #8 - str r0, [sp, #0x94] - ldrb r0, [r6, #6] - cmp r0, #0 - bne _0230C314 - ldr r1, [sp, #0x18] - mov r0, sl - bl ExclusiveItemOffenseBoost - ldr r1, [sp, #0x90] - add r0, r1, r0 - str r0, [sp, #0x90] -_0230C314: - ldrb r0, [r7, #6] - cmp r0, #0 - bne _0230C338 - ldr r1, [sp, #0x18] - mov r0, sb - bl ExclusiveItemDefenseBoost - ldr r1, [sp, #0x94] - add r0, r1, r0 - str r0, [sp, #0x94] -_0230C338: - ldr r0, [sp, #0x18] - cmp r0, #0 - bne _0230C4D8 - mov r0, sl - mov r1, #0x1a - bl ItemIsActive__0230A9DC - cmp r0, #0 - beq _0230C378 - ldr r0, _0230C478 ; =POWER_BAND_STAT_BOOST - ldr r1, [sp, #0x90] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x90] - ldrb r0, [r5, #0x30] - add r0, r0, r2 - strb r0, [r5, #0x30] -_0230C378: - mov r0, sl - mov r1, #0x32 - bl ItemIsActive__0230A9DC - cmp r0, #0 - beq _0230C3AC - ldr r0, _0230C47C ; =MUNCH_BELT_STAT_BOOST - ldr r1, [sp, #0x90] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x90] - ldrb r0, [r5, #0x30] - add r0, r0, r2 - strb r0, [r5, #0x30] -_0230C3AC: - mov r0, sl - bl AuraBowIsActive - cmp r0, #0 - beq _0230C3DC - ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST - ldr r1, [sp, #0x90] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x90] - ldrb r0, [r5, #0x31] - add r0, r0, r2 - strb r0, [r5, #0x31] -_0230C3DC: - ldr r0, [sp, #0xf8] - cmp r0, #0 - beq _0230C5E0 - mov r0, sb - mov r1, #0x25 - bl ItemIsActive__0230A9DC - cmp r0, #0 - beq _0230C41C - ldr r0, _0230C484 ; =DEF_SCARF_STAT_BOOST - ldr r1, [sp, #0x94] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x94] - ldrb r0, [r5, #0x36] - add r0, r0, r2 - strb r0, [r5, #0x36] -_0230C41C: - mov r0, sb - bl AuraBowIsActive - cmp r0, #0 - beq _0230C5E0 - ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST - ldr r1, [sp, #0x94] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x94] - ldrb r0, [r5, #0x36] - add r0, r0, r2 - strb r0, [r5, #0x36] - b _0230C5E0 - .align 2, 0 -#ifdef JAPAN -#define CALC_DAMAGE_DATA_OFFSET -0x2C1 -#else -#define CALC_DAMAGE_DATA_OFFSET 0 -#endif -_0230C450: .word DUNGEON_PTR -_0230C454: .word ME_FIRST_MULTIPLIER -_0230C458: .word 0x000001D3 -_0230C45C: .word 0x00000163 -_0230C460: .word 0x000001A3 -_0230C464: .word 0x000001A5 -_0230C468: .word 0x00000211 -_0230C46C: .word 0x000001BD -_0230C470: .word OFFENSIVE_STAT_STAGE_MULTIPLIERS -_0230C474: .word DEFENSIVE_STAT_STAGE_MULTIPLIERS -_0230C478: .word POWER_BAND_STAT_BOOST -_0230C47C: .word MUNCH_BELT_STAT_BOOST -_0230C480: .word AURA_BOW_STAT_BOOST -_0230C484: .word DEF_SCARF_STAT_BOOST -_0230C488: .word ZINC_BAND_STAT_BOOST -_0230C48C: .word SPECIAL_BAND_STAT_BOOST -_0230C490: .word 0x00000C53 + CALC_DAMAGE_DATA_OFFSET -_0230C494: .word 0x00000C54 + CALC_DAMAGE_DATA_OFFSET -_0230C498: .word 0x00000C55 + CALC_DAMAGE_DATA_OFFSET -_0230C49C: .word 0x000003E7 -_0230C4A0: .word DAMAGE_FORMULA_FLV_DEFICIT_DIVISOR -_0230C4A4: .word ov29_02352984 -_0230C4A8: .word ov29_02352990 -_0230C4AC: .word ov29_0235299C -_0230C4B0: .word DAMAGE_FORMULA_AT_PREFACTOR -_0230C4B4: .word DAMAGE_FORMULA_DEF_PREFACTOR -_0230C4B8: .word DAMAGE_FORMULA_FLV_SHIFT -_0230C4BC: .word DAMAGE_FORMULA_LN_ARG_PREFACTOR -_0230C4C0: .word DAMAGE_FORMULA_LN_PREFACTOR -_0230C4C4: .word DAMAGE_FORMULA_CONSTANT_SHIFT -_0230C4C8: .word DAMAGE_FORMULA_NON_TEAM_MEMBER_MODIFIER -_0230C4CC: .word DAMAGE_FORMULA_MAX_BASE -_0230C4D0: .word ov29_02352838 -_0230C4D4: .word DAMAGE_FORMULA_MIN_BASE -_0230C4D8: - ldr r0, [sp, #0xf8] - cmp r0, #0 - beq _0230C548 - mov r0, sb - mov r1, #0x29 - bl ItemIsActive__0230A9DC - cmp r0, #0 - beq _0230C518 - ldr r0, _0230C488 ; =ZINC_BAND_STAT_BOOST - ldr r1, [sp, #0x94] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x94] - ldrb r0, [r5, #0x37] - add r0, r0, r2 - strb r0, [r5, #0x37] -_0230C518: - mov r0, sb - bl AuraBowIsActive - cmp r0, #0 - beq _0230C548 - ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST - ldr r1, [sp, #0x94] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x94] - ldrb r0, [r5, #0x36] - add r0, r0, r2 - strb r0, [r5, #0x36] -_0230C548: - mov r0, sl - mov r1, #0x28 - bl ItemIsActive__0230A9DC - cmp r0, #0 - beq _0230C57C - ldr r0, _0230C48C ; =SPECIAL_BAND_STAT_BOOST - ldr r1, [sp, #0x90] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x90] - ldrb r0, [r5, #0x31] - add r0, r0, r2 - strb r0, [r5, #0x31] -_0230C57C: - mov r0, sl - mov r1, #0x32 - bl ItemIsActive__0230A9DC - cmp r0, #0 - beq _0230C5B0 - ldr r0, _0230C47C ; =MUNCH_BELT_STAT_BOOST - ldr r1, [sp, #0x90] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x90] - ldrb r0, [r5, #0x31] - add r0, r0, r2 - strb r0, [r5, #0x31] -_0230C5B0: - mov r0, sb - bl AuraBowIsActive - cmp r0, #0 - beq _0230C5E0 - ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST - ldr r1, [sp, #0x90] - ldrsh r2, [r0] - add r0, r1, r2 - str r0, [sp, #0x90] - ldrb r0, [r5, #0x31] - add r0, r0, r2 - strb r0, [r5, #0x31] -_0230C5E0: - ldr r0, [sp, #0x10] - mov r1, fp - mov r0, r0, lsl #8 - bl MultiplyByFixedPoint - ldr r1, [sp, #0x3c] - bl MultiplyByFixedPoint - mov r1, r0 - add r0, sp, #0xa0 - bl FixedPoint32To64 - mov r0, #0x64 - bl DungeonRandInt - mov r4, #1 - str r0, [sp, #0x40] - add r0, r6, #0x100 - ldrh r1, [r0, #0x5a + CALC_DAMAGE_OFFSET] - mov fp, r4 - str r4, [sp, #0x28] - bic r1, r1, #0x100 - strh r1, [r0, #0x5a + CALC_DAMAGE_OFFSET] - ldrh r1, [r0, #0x58 + CALC_DAMAGE_OFFSET] - str r4, [sp, #0x2c] - bic r1, r1, #0x100 - strh r1, [r0, #0x58 + CALC_DAMAGE_OFFSET] - ldr r0, [sp, #0xf4] - bl MoveIsNotPhysical - str r0, [sp, #0x30] - cmp r0, #0 - bne _0230C6B8 - mov r0, sl - mov r1, #0x11 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230C6B8 - ldr r0, [sl, #0xb4] - mov r1, r4 - str r0, [sp, #0x24] - mov r0, sl - bl MonsterHasNegativeStatus - str r0, [sp, #0x48] - ldr r0, [sp, #0x24] - ldr r2, [sp, #0x48] - mov r1, r4 - bl UpdateStateFlags - ldr r1, [sp, #0x48] - cmp r1, #0 - movne r4, r4, lsl #1 - cmp r0, #0 - beq _0230C6B8 - mov r0, sl - bl PlayEffectAnimation0x1A9__022E6130 - mov r0, sl - mov r1, sb - ldr r2, _0230C490 ; =0x00000C53 - bl LogMessageByIdWithPopupCheckUserTarget -_0230C6B8: - mov r0, sl - mov r1, #0x22 - bl AbilityIsActiveVeneer - cmp r0, #0 - bne _0230C6E0 - mov r0, sl - mov r1, #0x4b - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230C748 -_0230C6E0: - ldr r0, [sp, #0x40] - cmp r0, #0x21 - ldr r0, [sl, #0xb4] - bge _0230C700 - ldr r1, [sp, #0x30] - cmp r1, #0 - moveq r1, #1 - beq _0230C704 -_0230C700: - mov r1, #0 -_0230C704: - and r1, r1, #0xff - str r1, [sp, #0x34] - ldr r2, [sp, #0x34] - mov r1, #0x100 - bl UpdateStateFlags - ldr r1, [sp, #0x34] - cmp r1, #0 - addne r4, r4, r4, lsl #1 - movne fp, fp, lsl #1 - cmp r0, #0 - beq _0230C748 - mov r0, sl - bl PlayEffectAnimation0x1A9__022E617C - mov r0, sl - mov r1, sb - ldr r2, _0230C494 ; =0x00000C54 - bl LogMessageByIdWithPopupCheckUserTarget -_0230C748: - mov r0, sl - mov r1, #0x30 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230C76C - ldr r0, [sp, #0x30] - cmp r0, #0 - addeq r4, r4, r4, lsl #1 - moveq fp, fp, lsl #1 -_0230C76C: - ldr r0, [sl, #0xb4] - mov r1, #0x38 - ldrb r0, [r0, #6] - cmp r0, #0 - moveq r0, #1 - streq r0, [sp, #0x14] - movne r0, #0 - strne r0, [sp, #0x14] - mov r0, sl - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230C7D4 - ldr r0, [sp, #0x30] - cmp r0, #1 - bne _0230C7D4 - ldr r0, _0230C450 ; =DUNGEON_PTR - ldr r1, [r0] - ldr r0, [sp, #0x14] - add r0, r1, r0 - add r0, r0, #0x3000 -#ifdef JAPAN - ldrb r0, [r0, #0xd92] -#else - ldrb r0, [r0, #0xe36] -#endif - cmp r0, #0 - movne r0, #0xa - mulne r0, fp, r0 - rsbne r4, r4, r4, lsl #4 - movne fp, r0 -_0230C7D4: - mov r0, sl - mov r1, #0x3f - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230C820 - ldr r0, [sp, #0x30] - cmp r0, #1 - bne _0230C820 - ldr r0, _0230C450 ; =DUNGEON_PTR - ldr r1, [r0] - ldr r0, [sp, #0x14] - add r0, r1, r0 - add r0, r0, #0x3000 -#ifdef JAPAN - ldrb r0, [r0, #0xd90] -#else - ldrb r0, [r0, #0xe34] -#endif - cmp r0, #0 - movne r0, #0xa - mulne r0, fp, r0 - rsbne r4, r4, r4, lsl #4 - movne fp, r0 -_0230C820: - mov r0, sl - mov r1, sb - mov r2, #6 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - beq _0230C84C - ldr r0, [sp, #0x30] - cmp r0, #0 - moveq r4, r4, lsl #2 - addeq fp, fp, fp, lsl #2 -_0230C84C: - mov r0, sl - mov r1, sb - mov r2, #0x34 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - beq _0230C8E0 - ldr r0, [sp, #0x30] - cmp r0, #0 - bne _0230C8E0 - ldr r0, [sb, #0xb4] - mov r1, #1 - str r0, [sp, #0x20] - mov r0, sb - bl MonsterHasNegativeStatus - str r0, [sp, #0x4c] - ldr r0, [sp, #0x20] - ldr r2, [sp, #0x4c] - mov r1, #8 - bl UpdateStateFlags - ldr r1, [sp, #0x4c] - cmp r1, #0 - beq _0230C8C0 - ldr r1, [sp, #0x28] - add r1, r1, r1, lsl #1 - str r1, [sp, #0x28] - ldr r1, [sp, #0x2c] - mov r1, r1, lsl #1 - str r1, [sp, #0x2c] -_0230C8C0: - cmp r0, #0 - beq _0230C8E0 - mov r0, sb - bl PlayEffectAnimation0x18E - mov r0, sl - mov r1, sb - ldr r2, _0230C498 ; =0x00000C55 - bl LogMessageByIdWithPopupCheckUserTarget -_0230C8E0: - add r0, sp, #0x90 - ldr r2, [r0] - add r1, sp, #0x94 - mul r0, r2, r4 - ldr r3, [r1] - ldr r2, [sp, #0x28] - cmp fp, #1 - mul r2, r3, r2 - str r2, [r1] - add r1, sp, #0x90 - str r0, [r1] - beq _0230C920 - mov r1, fp - bl _s32_div_f - add r1, sp, #0x90 - str r0, [r1] -_0230C920: - ldr r0, [sp, #0x2c] - cmp r0, #1 - beq _0230C940 - add r4, sp, #0x94 - mov r1, r0 - ldr r0, [r4] - bl _s32_div_f - str r0, [r4] -_0230C940: - ldr r0, [sp, #0x90] - strh r0, [r5, #0x12] - ldr r0, [sp, #0x94] - strh r0, [r5, #0x14] - ldr r0, [sp, #0x90] - cmp r0, #0 - movlt r0, #0 - strlt r0, [sp, #0x90] - ldr r1, [sp, #0x90] - ldr r0, _0230C49C ; =0x000003E7 - cmp r1, r0 - strge r0, [sp, #0x90] - ldr r1, [sp, #0x94] - add r0, sp, #0x98 - strh r1, [r5, #0x1a] - ldr r1, [sp, #0x94] - bl IntToFixedPoint64 - ldr r2, [sp, #0x90] - ldr r1, [sp, #0x94] - add r0, sp, #0x88 - sub r1, r2, r1 - bl IntToFixedPoint64 - ldr r1, _0230C4A0 ; =DAMAGE_FORMULA_FLV_DEFICIT_DIVISOR - add r0, sp, #0x80 - ldr r1, [r1] - bl FixedPoint32To64 - add r0, sp, #0x88 - add r2, sp, #0x80 - mov r1, r0 - bl DivideFixedPoint64 - ldrb r1, [r6, #0xa] - add r0, sp, #0x80 - bl IntToFixedPoint64 - add r0, sp, #0xa8 - add r1, sp, #0x80 - add r2, sp, #0x88 - bl AddFixedPoint64 - ldr r1, [sp, #0x90] - add r0, sp, #0x80 - bl IntToFixedPoint64 - add r0, sp, #0xa0 - add r2, sp, #0x80 - mov r1, r0 - bl AddFixedPoint64 - add r0, sp, #0xa0 - bl FixedPoint64ToInt - strh r0, [r5, #0x18] - ldrb r1, [r6, #0xa] - add r0, sp, #0xa8 - strh r1, [r5, #0x16] - bl FixedPoint64ToInt - strh r0, [r5, #0x1c] - add r0, sp, #0xa8 - bl FixedPoint64ToInt - mov r1, r0 - ldr r0, _0230C4A4 ; =ov29_02352984 - bl Debug_Print0 - add r0, sp, #0xa0 - bl FixedPoint64ToInt - mov r1, r0 - ldr r0, _0230C4A8 ; =ov29_02352990 - bl Debug_Print0 - add r0, sp, #0x98 - bl FixedPoint64ToInt - mov r1, r0 - ldr r0, _0230C4AC ; =ov29_0235299C - bl Debug_Print0 - ldr r1, _0230C4B0 ; =DAMAGE_FORMULA_AT_PREFACTOR - add r0, sp, #0x70 - ldr r1, [r1] - bl FixedPoint32To64 - add r0, sp, #0x70 - add r1, sp, #0xa0 - mov r2, r0 - bl MultiplyFixedPoint64 - ldr r1, _0230C4B4 ; =DAMAGE_FORMULA_DEF_PREFACTOR - add r0, sp, #0x68 - ldr r1, [r1] - bl FixedPoint32To64 - add r0, sp, #0x68 - add r1, sp, #0x98 - mov r2, r0 - bl MultiplyFixedPoint64 - ldr r1, _0230C4B8 ; =DAMAGE_FORMULA_FLV_SHIFT - add r0, sp, #0x78 - ldr r1, [r1] - bl FixedPoint32To64 - add r0, sp, #0x60 - add r1, sp, #0xa8 - add r2, sp, #0x78 - bl AddFixedPoint64 - ldr r1, _0230C4BC ; =DAMAGE_FORMULA_LN_ARG_PREFACTOR - add r0, sp, #0x78 - ldr r1, [r1] - bl FixedPoint32To64 - add r0, sp, #0x60 - add r2, sp, #0x78 - mov r1, r0 - bl MultiplyFixedPoint64 - add r0, sp, #0x60 - bl FixedPoint64ToInt - mov r1, r0 - add r0, sp, #0x60 - bl ClampedLn - ldr r1, _0230C4C0 ; =DAMAGE_FORMULA_LN_PREFACTOR - add r0, sp, #0x78 - ldr r1, [r1] - bl FixedPoint32To64 - add r0, sp, #0x60 - add r2, sp, #0x78 - mov r1, r0 - bl MultiplyFixedPoint64 - add r0, sp, #0xb0 - add r1, sp, #0x68 - add r2, sp, #0x70 - bl AddFixedPoint64 - add r0, sp, #0xb0 - add r2, sp, #0x60 - mov r1, r0 - bl AddFixedPoint64 - ldr r1, _0230C4C4 ; =DAMAGE_FORMULA_CONSTANT_SHIFT - add r0, sp, #0x78 - ldr r1, [r1] - bl FixedPoint32To64 - add r0, sp, #0xb0 - add r2, sp, #0x78 - mov r1, r0 - bl AddFixedPoint64 - bl FixedRoomIsSubstituteRoom - cmp r0, #0 - bne _0230CB78 - ldrb r0, [r6, #6] - cmp r0, #0 - beq _0230CB78 - ldr r1, _0230C4C8 ; =DAMAGE_FORMULA_NON_TEAM_MEMBER_MODIFIER - add r0, sp, #0x78 - ldr r1, [r1] - bl FixedPoint32To64 - add r0, sp, #0xb0 - add r2, sp, #0x78 - mov r1, r0 - bl DivideFixedPoint64 -_0230CB78: - ldr r0, _0230C4CC ; =DAMAGE_FORMULA_MAX_BASE - add r1, sp, #0xb0 - bl FixedPoint64CmpLt - cmp r0, #0 - ldrne r0, _0230C4D0 ; =ov29_02352838 - ldrne r1, [r0, #0x38] - ldrne r0, [r0, #0x34] - strne r1, [sp, #0xb4] - strne r0, [sp, #0xb0] - ldr r1, _0230C4D4 ; =DAMAGE_FORMULA_MIN_BASE - add r0, sp, #0xb0 - bl FixedPoint64CmpLt - cmp r0, #0 - ldrne r0, _0230C4D0 ; =ov29_02352838 - ldrne r1, [r0, #0x48] - ldrne r0, [r0, #0x44] - strne r1, [sp, #0xb4] - strne r0, [sp, #0xb0] - ldr r0, [sp, #0xf4] - bl IsRegularAttackOrProjectile - cmp r0, #0 - ldr r0, [sp, #0xc] - movne r1, #1 - str r0, [sp] - moveq r1, #0 - and r1, r1, #0xff - str r8, [sp, #4] - str r1, [sp, #8] - ldr r3, [sp, #0x10] - add r0, sp, #0xb8 - mov r1, sl - mov r2, sb - bl CalcTypeBasedDamageEffects - mov fp, r0 - ldr r0, [sp, #0xc] - cmp r0, #2 - bne _0230CC78 - mov r0, sl - mov r1, sb - bl FlashFireShouldActivate - movs r4, r0 - beq _0230CC78 - ldrb r0, [r7, #0x15c + CALC_DAMAGE_OFFSET] - cmp r0, #0 - bne _0230CC78 - ldr r0, [sp, #0xf8] - cmp r0, #0 - beq _0230CC78 - mov r0, #1 - mov r1, sb - strb r0, [r7, #0x15c + CALC_DAMAGE_OFFSET] - mov r2, #0 - bl SubstitutePlaceholderStringTags - cmp r4, #1 - bne _0230CC68 - ldr r2, _0230D05C ; =0x00000C58 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - b _0230CC78 -_0230CC68: - ldr r2, _0230D060 ; =0x00000C57 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_0230CC78: - ldr r0, [sp, #0xf8] - cmp r0, #0 - beq _0230CD3C - mov r0, sl - mov r1, #0x44 - bl ExclusiveItemEffectIsActive__0230A9B8 - cmp r0, #0 - bne _0230CD3C - ldr r0, [sp, #0x18] - cmp r0, #0 - bne _0230CCF0 - ldr r0, [sp, #0xf4] - cmp r0, #0x48 - beq _0230CCBC - ldrb r0, [r7, #0xd5] - cmp r0, #1 - beq _0230CCD0 -_0230CCBC: - mov r0, sb - mov r1, #0x1e - bl ExclusiveItemEffectIsActive__0230A9B8 - cmp r0, #0 - beq _0230CCF0 -_0230CCD0: - mov r0, sb - bl PlayEffectAnimation0x171 - add r0, sp, #0xb8 - ldr r2, _0230D064 ; =DAMAGE_MULTIPLIER_0_5 - mov r1, r0 - bl MultiplyFixedPoint64 - mov r0, #1 - strb r0, [r5, #0x3a] -_0230CCF0: - ldr r0, [sp, #0x18] - cmp r0, #1 - bne _0230CD3C - ldrb r0, [r7, #0xd5] - cmp r0, #3 - beq _0230CD1C - mov r0, sb - mov r1, #0x1f - bl ExclusiveItemEffectIsActive__0230A9B8 - cmp r0, #0 - beq _0230CD3C -_0230CD1C: - mov r0, sb - bl PlayEffectAnimation0x171Full - add r0, sp, #0xb8 - ldr r2, _0230D064 ; =DAMAGE_MULTIPLIER_0_5 - mov r1, r0 - bl MultiplyFixedPoint64 - mov r0, #1 - strb r0, [r5, #0x3b] -_0230CD3C: - ldrb r0, [r7, #0xd5] - cmp r0, #0x11 - beq _0230CEEC - mov r0, sl - mov r1, sb - mov r2, #0xc -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - bne _0230CEEC - mov r0, sl - mov r1, sb - mov r2, #0x13 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - bne _0230CEEC - mov r0, sb - mov r1, #0x40 - bl IqSkillIsEnabled - cmp r0, #0 - bne _0230CEEC - ldrsh r0, [r6, #2] - bl GetMonsterGenderVeneer - cmp r0, #2 - ldrne r1, [sp, #0xe8] - ldreq r4, [sp, #0xe8] - addne r0, r1, r1, lsr #31 - addne r4, r1, r0, asr #1 - ldrb r0, [r6, #0xec] - cmp r0, #4 - moveq r0, #1 - streqb r0, [r5, #0x3c] - ldreq r4, _0230C49C ; =0x000003E7 - beq _0230CE74 - mov r0, sl - mov r1, #0x13 - bl ItemIsActive__0230A9DC - cmp r0, #0 - bne _0230CDF0 - mov r0, sl - mov r1, #0x1d - bl IqSkillIsEnabled - cmp r0, #0 - beq _0230CE04 -_0230CDF0: - ldr r0, _0230D068 ; =SCOPE_LENS_CRIT_RATE_BOOST - mov r1, #1 - ldrsh r0, [r0] - strb r1, [r5, #0x38] - add r4, r4, r0 -_0230CE04: - mov r0, sl - mov r1, #0x58 - bl AbilityIsActiveVeneer - cmp r0, #0 - ldrne r0, _0230D06C ; =SUPER_LUCK_CRIT_RATE_BOOST - movne r1, #1 - ldrnesh r0, [r0] - strneb r1, [r5, #0x49] - mov r1, #0x14 - addne r4, r4, r0 - mov r0, sb - bl ItemIsActive__0230A9DC - cmp r0, #0 - ldrne r0, _0230D068 ; =SCOPE_LENS_CRIT_RATE_BOOST - movne r1, #1 - ldrnesh r0, [r0] - strneb r1, [r5, #0x39] - addne r4, r4, r0 - cmp fp, #0 - beq _0230CE74 - mov r0, sl - mov r1, #1 - bl IqSkillIsEnabled - cmp r0, #0 - ldrne r0, _0230D070 ; =TYPE_ADVANTAGE_MASTER_CRIT_RATE - movne r1, #1 - ldrnesh r4, [r0] - strneb r1, [r5, #0x3d] -_0230CE74: - mov r0, #0x64 - bl DungeonRandInt - cmp r0, r4 - bge _0230CEEC - mov r2, #1 - mov r4, #5 - mov r0, sl - mov r1, sb -#ifdef JAPAN - add r3, r2, #0xb00 -#else - add r3, r2, #0xdc0 -#endif - str r4, [sp] - bl ExclusiveItemEffectIsActiveWithLogging - cmp r0, #0 - bne _0230CEEC - mov r2, #1 - mov r0, sl - mov r1, #0x5d - strb r2, [r8, #0xe] - bl AbilityIsActiveVeneer - cmp r0, #0 - add r0, sp, #0xb8 - beq _0230CEE0 - ldr r2, _0230D074 ; =DAMAGE_MULTIPLIER_2 - mov r1, r0 - bl MultiplyFixedPoint64 - mov r0, #1 - strb r0, [r5, #0x4a] - b _0230CEEC -_0230CEE0: - ldr r2, _0230D078 ; =DAMAGE_MULTIPLIER_1_5 - mov r1, r0 - bl MultiplyFixedPoint64 -_0230CEEC: - add r0, sp, #0xb0 - bl FixedPoint64ToInt - str r0, [r5, #0x24] - add r0, sp, #0xb0 - add r2, sp, #0xb8 - mov r1, r0 - bl MultiplyFixedPoint64 - ldr r1, [sp, #0x1c] - add r0, sp, #0x58 - mov r2, r1 - str r2, [r5, #0x2c] - bl FixedPoint32To64 - add r0, sp, #0xb0 - add r2, sp, #0x58 - mov r1, r0 - bl MultiplyFixedPoint64 - add r0, sp, #0xb0 - bl FixedPoint64ToInt - str r0, [r5, #0x20] - mov r0, #0x4000 - bl DungeonRandInt - add r0, r0, #0xe000 - mov r1, #0 - str r0, [sp, #0xbc] - add r0, sp, #0xb0 - str r1, [sp, #0xb8] - add r2, sp, #0xb8 - mov r1, r0 - bl MultiplyFixedPoint64 - add r0, sp, #0x50 - mov r1, #0x64 - bl IntToFixedPoint64 - add r0, sp, #0xb8 - add r1, sp, #0x50 - mov r2, r0 - bl MultiplyFixedPoint64 - add r0, sp, #0xb8 - bl FixedPoint64ToInt - str r0, [r5, #0x28] - add r0, sp, #0xb0 - bl FixedPoint64ToInt - str r0, [r8] - ldr r1, _0230D07C ; =0x00000195 - ldr r0, [sp, #0xf4] - cmp r0, r1 - bne _0230CFBC - ldr r0, [r8] - mov r1, #0x80 - mov r0, r0, lsl #8 - bl MultiplyByFixedPoint - bl RoundUpDiv256 - str r0, [r8] -_0230CFBC: - ldr r1, _0230D07C ; =0x00000195 - ldr r0, [sp, #0xf4] - cmp r0, r1 - bne _0230CFFC - mov r0, sl - mov r1, #0x2f - bl IqSkillIsEnabled - cmp r0, #0 - beq _0230CFFC - ldr r0, _0230D080 ; =POWER_PITCHER_DAMAGE_MULTIPLIER - ldr r2, [r8] - ldr r1, [r0] - mov r0, r2, lsl #8 - bl MultiplyByFixedPoint - bl RoundUpDiv256 - str r0, [r8] -_0230CFFC: - ldr r0, [r8] - cmp r0, #0 - ble _0230D038 - mov r0, sl - mov r1, #0x5b - bl ExclusiveItemEffectIsActive__0230A9B8 - cmp r0, #0 - beq _0230D038 - ldr r0, _0230D084 ; =AIR_BLADE_DAMAGE_MULTIPLIER - ldr r2, [r8] - ldr r1, [r0] - mov r0, r2, lsl #8 - bl MultiplyByFixedPoint - bl RoundUpDiv256 - str r0, [r8] -_0230D038: - mov r1, #0 - str r1, [r8, #4] - ldr r0, [r8] - cmp r0, #0 - streqb r1, [r8, #0xe] - ldrb r0, [r8, #0xe] - strb r0, [r7, #0x167 + CALC_DAMAGE_OFFSET] -_0230D054: - add sp, sp, #0xc0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0230D05C: .word 0x00000C58 + CALC_DAMAGE_DATA_OFFSET -_0230D060: .word 0x00000C57 + CALC_DAMAGE_DATA_OFFSET -_0230D064: .word DAMAGE_MULTIPLIER_0_5 -_0230D068: .word SCOPE_LENS_CRIT_RATE_BOOST -_0230D06C: .word SUPER_LUCK_CRIT_RATE_BOOST -_0230D070: .word TYPE_ADVANTAGE_MASTER_CRIT_RATE -_0230D074: .word DAMAGE_MULTIPLIER_2 -_0230D078: .word DAMAGE_MULTIPLIER_1_5 -_0230D07C: .word 0x00000195 -_0230D080: .word POWER_PITCHER_DAMAGE_MULTIPLIER -_0230D084: .word AIR_BLADE_DAMAGE_MULTIPLIER - arm_func_end CalcDamage - - arm_func_start ov29_0230D088 -ov29_0230D088: ; 0x0230D088 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x1c - ldr r5, [sp, #0x2c] - ldr r4, [sp, #0x28] - mov lr, r0 - strb r2, [r5, #0xc] - cmp r4, #1 - strb r3, [r5, #0xd] - mov ip, r1 - str r2, [sp] - mov r2, ip - ldr r0, _0230D118 ; =0x000003E7 - movlt r4, #1 - cmp r4, r0 - movgt r4, r0 - add r0, sp, #0x14 - mov r1, lr - mov r3, r4 - str r5, [sp, #4] - mov ip, #0 - str ip, [sp, #8] - bl CalcTypeBasedDamageEffects - add r0, sp, #0xc - mov r1, r4 - bl IntToFixedPoint64 - add r0, sp, #0xc - add r2, sp, #0x14 - mov r1, r0 - bl MultiplyFixedPoint64 - add r0, sp, #0xc - bl FixedPoint64ToInt - str r0, [r5] - mov r0, #0 - str r0, [r5, #4] - add sp, sp, #0x1c - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_0230D118: .word 0x000003E7 - arm_func_end ov29_0230D088 - - arm_func_start ApplyDamageAndEffectsWrapper -ApplyDamageAndEffectsWrapper: ; 0x0230D11C - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0xdc - mov r7, r0 - add r0, sp, #0x10 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl ResetDamageData - add r0, sp, #0x24 - bl ov29_022E2470 - mov r3, #0 - mov r0, #2 - str r0, [sp, #0x18] - str r6, [sp, #0x10] - str r5, [sp, #0x14] - strb r3, [sp, #0x1c] - strb r3, [sp, #0x1e] - strb r3, [sp, #0x1f] - strb r3, [sp, #0x20] - stmia sp, {r3, r4} - str r3, [sp, #8] - mov r1, r7 - add r0, sp, #0x24 - add r2, sp, #0x10 - str r3, [sp, #0xc] - bl ApplyDamageAndEffects - add sp, sp, #0xdc - ldmia sp!, {r4, r5, r6, r7, pc} - arm_func_end ApplyDamageAndEffectsWrapper - - arm_func_start CalcRecoilDamageFixed -CalcRecoilDamageFixed: ; 0x0230D18C - stmdb sp!, {r4, r5, r6, r7, lr} - sub sp, sp, #0x1c - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl EntityIsValid__02308FBC - cmp r0, #0 - beq _0230D238 - ldr r0, [r7] - cmp r0, #1 - bne _0230D1F0 - ldr r0, [r7, #0xb4] - ldrsh r0, [r0, #0x10] - cmp r0, #0 - beq _0230D238 - mov r0, r7 - mov r1, #0x5c - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0230D1F0 - mov r0, r6, lsl #8 - mov r1, #0x180 - bl MultiplyByFixedPoint - mov r6, r0, asr #8 -_0230D1F0: - ldrb r1, [sp, #0x34] - str r4, [sp] - ldrsh r0, [sp, #0x38] - str r1, [sp, #4] - mov r1, #3 - str r1, [sp, #8] - ldr r1, [sp, #0x3c] - str r0, [sp, #0xc] - ldr r0, [sp, #0x40] - str r1, [sp, #0x10] - ldr r4, [sp, #0x44] - str r0, [sp, #0x14] - mov r0, r7 - mov r1, r7 - mov r2, r6 - mov r3, r5 - str r4, [sp, #0x18] - bl CalcDamageFixed -_0230D238: - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, pc} - arm_func_end CalcRecoilDamageFixed - - arm_func_start CalcDamageFixed -CalcDamageFixed: ; 0x0230D240 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x2c - mov sl, r0 - add r0, sp, #0x18 - mov sb, r1 - mov r8, r2 - mov r7, r3 - ldr r6, [sp, #0x54] - bl ResetDamageData - mov r5, #0 - ldrb r0, [sp, #0x58] - ldr r1, [sp, #0x60] - mov r2, #2 - str r2, [sp, #0x20] - str r1, [sp, #0x1c] - strb r6, [sp, #0x24] - strb r5, [sp, #0x26] - strb r5, [sp, #0x27] - strb r0, [sp, #0x25] - cmp r6, #0 - beq _0230D2F8 - add r4, sp, #0x10 -_0230D298: - mov r2, r5, lsl #0x10 - mov r0, sl - mov r1, sb - mov r3, r6 - mov r2, r2, asr #0x10 - bl GetTypeMatchup - str r0, [r4, r5, lsl #2] - add r5, r5, #1 - cmp r5, #2 - blt _0230D298 - mov r0, sl - mov r1, sb - mov r2, #0x35 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__0230A940 - cmp r0, #0 - beq _0230D2F8 - ldr r2, [sp, #0x10] - ldr r0, _0230D39C ; =TYPE_MATCHUP_COMBINATOR_TABLE - ldr r1, [sp, #0x14] - add r0, r0, r2, lsl #4 - ldr r0, [r0, r1, lsl #2] - cmp r0, #3 - movne r8, #0 -_0230D2F8: - ldrsh r1, [sp, #0x5c] - ldr r0, _0230D3A0 ; =0x00000256 - mov r8, r8, lsl #8 - cmp r1, r0 - bne _0230D334 - mov r0, sl - mov r1, #0x2f - bl IqSkillIsEnabled - cmp r0, #0 - beq _0230D334 - ldr r1, _0230D3A4 ; =POWER_PITCHER_DAMAGE_MULTIPLIER - mov r0, r8 - ldr r1, [r1] - bl MultiplyByFixedPoint - mov r8, r0 -_0230D334: - mov r0, r8 - bl RoundUpDiv256 - str r0, [sp, #0x18] - cmp r8, #0 - moveq r0, #1 - streqb r0, [sp, #0x28] - movne r0, #0 - strneb r0, [sp, #0x28] - ldrsh r1, [sp, #0x5c] - str r7, [sp] - ldr r0, [sp, #0x64] - str r1, [sp, #4] - str r0, [sp, #8] - ldr r4, [sp, #0x68] - add r2, sp, #0x18 - mov r0, sl - mov r1, sb - mov r3, #0 - str r4, [sp, #0xc] - bl ApplyDamageAndEffects - ldr r1, [sp, #0x50] - cmp r1, #0 - ldrneb r0, [sp, #0x28] - strneb r0, [r1] - add sp, sp, #0x2c - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_0230D39C: .word TYPE_MATCHUP_COMBINATOR_TABLE -_0230D3A0: .word 0x00000256 -_0230D3A4: .word POWER_PITCHER_DAMAGE_MULTIPLIER - arm_func_end CalcDamageFixed - - arm_func_start CalcDamageFixedNoCategory -CalcDamageFixedNoCategory: ; 0x0230D3A8 - stmdb sp!, {lr} - sub sp, sp, #0x1c - ldr lr, [sp, #0x20] - ldrb ip, [sp, #0x24] - str lr, [sp] - ldrsh lr, [sp, #0x28] - str ip, [sp, #4] - mov ip, #3 - str ip, [sp, #8] - ldr ip, [sp, #0x2c] - str lr, [sp, #0xc] - ldr lr, [sp, #0x30] - str ip, [sp, #0x10] - ldr ip, [sp, #0x34] - str lr, [sp, #0x14] - str ip, [sp, #0x18] - bl CalcDamageFixed - add sp, sp, #0x1c - ldmia sp!, {pc} - arm_func_end CalcDamageFixedNoCategory - - arm_func_start CalcDamageFixedWrapper -CalcDamageFixedWrapper: ; 0x0230D3F4 - stmdb sp!, {lr} - sub sp, sp, #0x1c - ldr ip, [sp, #0x20] - ldrb lr, [sp, #0x24] - str ip, [sp] - ldrb ip, [sp, #0x28] - str lr, [sp, #4] - ldrsh lr, [sp, #0x2c] - str ip, [sp, #8] - ldr ip, [sp, #0x30] - str lr, [sp, #0xc] - ldr lr, [sp, #0x34] - str ip, [sp, #0x10] - ldr ip, [sp, #0x38] - str lr, [sp, #0x14] - str ip, [sp, #0x18] - bl CalcDamageFixed - add sp, sp, #0x1c - ldmia sp!, {pc} - arm_func_end CalcDamageFixedWrapper - - arm_func_start UpdateShopkeeperModeAfterAttack -UpdateShopkeeperModeAfterAttack: ; 0x0230D440 - ldr r2, [r1, #0xb4] - ldrb r1, [r2, #9] - cmp r1, #0 - bxeq lr - ldr r1, [r0] - cmp r1, #1 - bxne lr - ldr r0, [r0, #0xb4] - ldrb r0, [r0, #6] - cmp r0, #0 - movne r0, #2 - strneb r0, [r2, #9] - moveq r0, #3 - streqb r0, [r2, #9] - bx lr - arm_func_end UpdateShopkeeperModeAfterAttack - - arm_func_start UpdateShopkeeperModeAfterTrap -UpdateShopkeeperModeAfterTrap: ; 0x0230D47C - ldr r2, [r0, #0xb4] - ldrb r0, [r2, #9] - cmp r0, #0 - bxeq lr - cmp r1, #0 - movne r0, #2 - strneb r0, [r2, #9] - moveq r0, #3 - streqb r0, [r2, #9] - bx lr - arm_func_end UpdateShopkeeperModeAfterTrap - - arm_func_start ov29_0230D4A4 -ov29_0230D4A4: ; 0x0230D4A4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r0, r6 - mov r1, #0xe - mov r5, r2 - ldr r4, [r6, #0xb4] - bl MonsterIsType - cmp r0, #0 - beq _0230D4E8 - cmp r5, #1 - cmpne r5, #7 - bne _0230D4E8 - ldrb r0, [r4, #0xfe] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} -_0230D4E8: - mov r4, #0 - b _0230D518 -_0230D4F0: - mov r2, r4, lsl #0x10 - mov r0, r7 - mov r1, r6 - mov r3, r5 - mov r2, r2, asr #0x10 - bl GetTypeMatchup - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - add r4, r4, #1 -_0230D518: - cmp r4, #2 - blt _0230D4F0 - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov29_0230D4A4 - - arm_func_start ResetDamageCalcDiagnostics -ResetDamageCalcDiagnostics: ; 0x0230D528 - stmdb sp!, {r3, r4, r5, lr} - ldr r0, _0230D614 ; =DUNGEON_PTR - mov r1, #0x54 - ldr r4, [r0] - add r5, r4, #0x184 - mov r0, r5 - bl MemZero - mov r1, #0 - strb r1, [r4, #0x184] - str r1, [r5, #4] - strb r1, [r5, #8] - strb r1, [r5, #9] - mov r0, #0xa - strb r0, [r5, #0xa] - strb r0, [r5, #0xb] - mov r0, #1 - strh r0, [r5, #0xc] - strh r0, [r5, #0xe] - strh r1, [r5, #0x10] - strh r1, [r5, #0x14] - strh r1, [r5, #0x12] - strh r1, [r5, #0x16] - strh r1, [r5, #0x1c] - str r1, [r5, #0x20] - str r1, [r5, #0x28] - str r1, [r5, #0x2c] - strb r1, [r5, #0x30] - strb r1, [r5, #0x31] - strb r1, [r5, #0x36] - strb r1, [r5, #0x37] - strb r1, [r5, #0x34] - strb r1, [r5, #0x35] - strb r1, [r5, #0x38] - strb r1, [r5, #0x39] - strb r1, [r5, #0x3a] - strb r1, [r5, #0x3b] - strb r1, [r5, #0x3c] - strb r1, [r5, #0x3d] - strb r1, [r5, #0x3e] - strb r1, [r5, #0x40] - strb r1, [r5, #0x3f] - strb r1, [r5, #0x41] - strb r1, [r5, #0x42] - strb r1, [r5, #0x43] - strb r1, [r5, #0x44] - strb r1, [r5, #0x45] - strb r1, [r5, #0x46] - strb r1, [r5, #0x47] - strb r1, [r5, #0x48] - strb r1, [r5, #0x4b] - strb r1, [r5, #0x4c] - strb r1, [r5, #0x4d] - strb r1, [r5, #0x4e] - strb r1, [r5, #0x4f] - strb r1, [r5, #0x50] - strb r1, [r5, #0x51] - strb r1, [r5, #0x32] - strb r1, [r5, #0x33] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0230D614: .word DUNGEON_PTR - arm_func_end ResetDamageCalcDiagnostics - - arm_func_start ov29_0230D618 -ov29_0230D618: ; 0x0230D618 - ldr r1, _0230D624 ; =ov29_02352894 - ldr r0, [r1, r0, lsl #2] - bx lr - .align 2, 0 -_0230D624: .word ov29_02352894 - arm_func_end ov29_0230D618 - - arm_func_start ov29_0230D628 -ov29_0230D628: ; 0x0230D628 - stmdb sp!, {r3, lr} - ldr r1, _0230D650 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 -#ifdef JAPAN - ldr r1, [r1, #0x188] -#else - ldr r1, [r1, #0x22c] -#endif - cmp r1, r0 - ldmneia sp!, {r3, pc} - mov r1, #1 - bl PointCameraToMonster - ldmia sp!, {r3, pc} - .align 2, 0 -_0230D650: .word DUNGEON_PTR - arm_func_end ov29_0230D628 - - arm_func_start ov29_0230D654 -ov29_0230D654: ; 0x0230D654 - stmdb sp!, {r4, lr} - mov r4, r1 - bl EntityIsValid__02308FBC - cmp r0, #0 - beq _0230D678 - mov r0, r4 - bl EntityIsValid__02308FBC - cmp r0, #0 - bne _0230D680 -_0230D678: - mov r0, #1 - ldmia sp!, {r4, pc} -_0230D680: - mov r0, #0 - ldmia sp!, {r4, pc} - arm_func_end ov29_0230D654 - - arm_func_start ov29_0230D688 -ov29_0230D688: ; 0x0230D688 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - ldrh r3, [r4] - mov r1, #0x55 - mov r2, #2 - strh r3, [sp] - ldrh r3, [r4, #2] - strh r3, [sp, #2] - ldrh r3, [r4, #4] - strh r3, [sp, #4] - bl GenerateStandardItem - mov r0, r4 - bl SetItemAcquired - ldrb r0, [sp, #1] - strb r0, [r4, #1] - cmp r0, #0 - beq _0230D6FC - add r0, sp, #0 - bl GetEquivItemIndex - cmp r0, #0 - blt _0230D6FC - bl GetItemAtIdx - ldrh r1, [r4] - strh r1, [r0] - ldrh r1, [r4, #2] - strh r1, [r0, #2] - ldrh r1, [r4, #4] - strh r1, [r0, #4] -_0230D6FC: - add sp, sp, #8 - ldmia sp!, {r4, pc} - arm_func_end ov29_0230D688 - - arm_func_start ov29_0230D704 -ov29_0230D704: ; 0x0230D704 - mov r0, #0 - bx lr - arm_func_end ov29_0230D704 - - arm_func_start ov29_0230D70C -ov29_0230D70C: ; 0x0230D70C - stmdb sp!, {r3, lr} - mov r0, #0x64 - bl DungeonRandInt - ldr r1, _0230D734 ; =ov10_022C45B4 - ldrsh r1, [r1] - cmp r0, r1 - movlt r0, #1 - movge r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - .align 2, 0 -_0230D734: .word ov10_022C45B4 - arm_func_end ov29_0230D70C - - arm_func_start ov29_0230D738 -ov29_0230D738: ; 0x0230D738 - stmdb sp!, {r3, lr} - cmp r2, #0 - bne _0230D760 - mov r0, #0x64 - bl DungeonRandInt - ldr r1, _0230D768 ; =ov10_022C45B4 - ldrsh r1, [r1] - cmp r0, r1 - movlt r0, #1 - ldmltia sp!, {r3, pc} -_0230D760: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0230D768: .word ov10_022C45B4 - arm_func_end ov29_0230D738 - - arm_func_start ov29_0230D76C -ov29_0230D76C: ; 0x0230D76C - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl IsMonster__0230A994 - cmp r0, #0 - beq _0230D798 - mov r0, r5 - bl IsMonster__0230A994 - cmp r0, #0 - bne _0230D7A0 -_0230D798: - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} -_0230D7A0: - ldr r0, [r6, #0xb4] - ldr r1, [r5, #0xb4] - ldrsh r0, [r0, #2] - ldrsh r1, [r1, #2] - bl GendersNotEqualNotGenderless - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl ov29_0230D738 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end ov29_0230D76C - - arm_func_start ov29_0230D7D4 -ov29_0230D7D4: ; 0x0230D7D4 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0x10 - ldr r2, _0230D870 ; =ov29_023535D4 - mvn r1, #0 - ldrsh r3, [r2] - mov r4, r0 - cmp r3, r1 - beq _0230D808 - ldrsh r0, [r2] - bl ov10_022BDE50 - ldr r0, _0230D870 ; =ov29_023535D4 - mvn r1, #0 - strh r1, [r0] -_0230D808: - mov r2, #0 - mov r1, #1 - str r2, [sp] - stmib sp, {r1, r2} - mov r0, r4 - rsb r1, r1, #0x2b8 - mov r3, #3 - str r2, [sp, #0xc] - bl PlayEffectAnimationEntity - mov r0, r0, lsl #0x10 - mov r5, r0, asr #0x10 - mvn r0, #0 - cmp r5, r0 - beq _0230D868 - mov r4, #0x18 - b _0230D850 -_0230D848: - mov r0, r4 - bl AdvanceFrame -_0230D850: - mov r0, r5 - bl ov10_022BF964 - cmp r0, #0 - bne _0230D848 - mov r0, r5 - bl ov10_022BDE50 -_0230D868: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0230D870: .word ov29_023535D4 - arm_func_end ov29_0230D7D4 - - arm_func_start ov29_0230D874 -ov29_0230D874: ; 0x0230D874 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - ldr lr, [r5, #0xb4] - ldr ip, [r4, #0xb4] - ldrsh r3, [lr, #0x28] - ldrsh r1, [lr, #0x2a] - ldrsh r0, [ip, #0x28] - cmp r2, #0 - strh r0, [lr, #0x28] - ldrsh r0, [ip, #0x2a] - strh r0, [lr, #0x2a] - strh r3, [ip, #0x28] - strh r1, [ip, #0x2a] - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r4 - mov r0, #1 - mov r2, #0 - bl SubstitutePlaceholderStringTags - ldr r2, _0230D8E4 ; =0x00000F2D - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_0230D8E4: .word 0x00002494 -#else -_0230D8E4: .word 0x00000F2D -#endif - arm_func_end ov29_0230D874 - - arm_func_start ov29_0230D8E8 -ov29_0230D8E8: ; 0x0230D8E8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - ldr lr, [r5, #0xb4] - ldr ip, [r4, #0xb4] - ldr r3, [lr, #0x3c] - ldr r1, [lr, #0x40] - ldr r0, [ip, #0x3c] - cmp r2, #0 - str r0, [lr, #0x3c] - ldr r0, [ip, #0x40] - str r0, [lr, #0x40] - str r3, [ip, #0x3c] - str r1, [ip, #0x40] - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r4 - mov r0, #1 - mov r2, #0 - bl SubstitutePlaceholderStringTags - ldr r2, _0230D958 ; =0x00000F2E - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_0230D958: .word 0x00002495 -#else -_0230D958: .word 0x00000F2E -#endif - arm_func_end ov29_0230D8E8 - - arm_func_start ov29_0230D95C -ov29_0230D95C: ; 0x0230D95C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - ldr lr, [r5, #0xb4] - ldr ip, [r4, #0xb4] - ldrsh r3, [lr, #0x24] - ldrsh r1, [lr, #0x26] - ldrsh r0, [ip, #0x24] - cmp r2, #0 - strh r0, [lr, #0x24] - ldrsh r0, [ip, #0x26] - strh r0, [lr, #0x26] - strh r3, [ip, #0x24] - strh r1, [ip, #0x26] - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r4 - mov r0, #1 - mov r2, #0 - bl SubstitutePlaceholderStringTags - ldr r2, _0230D9CC ; =0x00000F2B - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_0230D9CC: .word 0x00002492 -#else -_0230D9CC: .word 0x00000F2B -#endif - arm_func_end ov29_0230D95C - - arm_func_start ov29_0230D9D0 -ov29_0230D9D0: ; 0x0230D9D0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - ldr lr, [r5, #0xb4] - ldr ip, [r4, #0xb4] - ldr r3, [lr, #0x34] - ldr r1, [lr, #0x38] - ldr r0, [ip, #0x34] - cmp r2, #0 - str r0, [lr, #0x34] - ldr r0, [ip, #0x38] - str r0, [lr, #0x38] - str r3, [ip, #0x34] - str r1, [ip, #0x38] - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r4 - mov r0, #1 - mov r2, #0 - bl SubstitutePlaceholderStringTags - ldr r2, _0230DA40 ; =0x00000F2C - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_0230DA40: .word 0x00002493 -#else -_0230DA40: .word 0x00000F2C -#endif - arm_func_end ov29_0230D9D0 - - arm_func_start ov29_0230DA44 -ov29_0230DA44: ; 0x0230DA44 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - ldr lr, [r5, #0xb4] - ldr ip, [r4, #0xb4] - ldrsh r3, [lr, #0x2c] - ldrsh r1, [lr, #0x2e] - ldrsh r0, [ip, #0x2c] - cmp r2, #0 - strh r0, [lr, #0x2c] - ldrsh r0, [ip, #0x2e] - strh r0, [lr, #0x2e] - strh r3, [ip, #0x2c] - strh r1, [ip, #0x2e] - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r4 - mov r0, #1 - mov r2, #0 - bl SubstitutePlaceholderStringTags - ldr r2, _0230DAB4 ; =0x00000F2F - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifdef JAPAN -_0230DAB4: .word 0x00002496 -#else -_0230DAB4: .word 0x00000F2F -#endif - arm_func_end ov29_0230DA44 - - arm_func_start ov29_0230DAB8 -ov29_0230DAB8: ; 0x0230DAB8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr ip, [r5, #0xb4] - mov r4, r1 - ldrsh r1, [ip, #0x24] - ldr r3, [ip, #0x34] - ldr r0, [ip, #0x3c] - cmp r2, #0 - str r0, [ip, #0x34] - ldrsh r0, [ip, #0x28] - strh r0, [ip, #0x24] - str r3, [ip, #0x3c] - strh r1, [ip, #0x28] - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags -#ifdef JAPAN - ldr r2, _0230F050 ; =0x00002497 - mov r0, r5 - mov r1, r4 -#else - mov r0, r5 - mov r1, r4 - mov r2, #0xf30 -#endif - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, pc} -#ifdef JAPAN -_0230F050: .word 0x00002497 -#endif - arm_func_end ov29_0230DAB8 - - arm_func_start SpecificRecruitCheck -SpecificRecruitCheck: ; 0x0230DB14 - stmdb sp!, {r4, lr} - ldr r1, _0230DBC8 ; =DUNGEON_PTR - mov r4, r0 - ldr r1, [r1] - ldrb r1, [r1, #0x759] - cmp r1, #0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - bl DebugRecruitingEnabled - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - cmp r4, #0x97 - ldreq r0, _0230DBC8 ; =DUNGEON_PTR - ldreq r0, [r0] - addeq r0, r0, #0x700 - ldreqsb r0, [r0, #0x98] - cmpeq r0, #2 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - ldr r1, _0230DBCC ; =0x000001A3 - cmp r4, r1 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - cmp r4, #0x1a4 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - add r0, r1, #2 - cmp r4, r0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - sub r0, r1, #0xa - cmp r4, r0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - sub r0, r1, #9 - cmp r4, r0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - sub r0, r1, #8 - cmp r4, r0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r4, pc} - .align 2, 0 -_0230DBC8: .word DUNGEON_PTR -_0230DBCC: .word 0x000001A3 - arm_func_end SpecificRecruitCheck - - arm_func_start RecruitCheck -RecruitCheck: ; 0x0230DBD0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r2, _0230E024 ; =DUNGEON_PTR - mov r8, r0 - ldr r0, [r2] - mov r7, r1 - ldrb r0, [r0, #0x748] - ldr r5, [r8, #0xb4] - ldr r6, [r7, #0xb4] - bl IsRecruitingAllowed - cmp r0, #0 - beq _0230DC28 - bl IsFullFloorFixedRoom - cmp r0, #0 - bne _0230DC28 - bl IsLegendaryChallengeFloor - cmp r0, #0 - bne _0230DC28 - mov r0, #0xa - mov r1, #6 - bl IsCurrentMissionTypeExact - cmp r0, #0 - beq _0230DC30 -_0230DC28: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0230DC30: - ldr r0, _0230E024 ; =DUNGEON_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x75d] - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - ldrb r0, [r1, #0x748] - cmp r0, #0x5b - bne _0230DC70 - ldrsh r1, [r6, #2] - ldr r0, _0230E028 ; =0x000001E6 - cmp r1, r0 - addne r0, r0, #0x258 - cmpne r1, r0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0230DC70: - ldrsh r0, [r6, #2] - cmp r0, #0x91 - cmpne r0, #0x90 - cmpne r0, #0x92 - ldrne r2, _0230E02C ; =0x0000010F - cmpne r0, r2 - subne r1, r2, #1 - cmpne r0, r1 - cmpne r0, #0x110 - cmpne r0, #0x19c - addne r1, r2, #0x8e - cmpne r0, r1 - addne r1, r2, #0x92 - cmpne r0, r1 - cmpne r0, #0x1a0 - addne r1, r2, #0x93 - cmpne r0, r1 - addne r1, r2, #0x8a - cmpne r0, r1 - addne r1, r2, #0x8b - cmpne r0, r1 - addne r1, r2, #0x8c - cmpne r0, r1 - beq _0230DCF0 - ldr r1, _0230E030 ; =0xFFFFFDEA - add r1, r0, r1 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - cmp r1, #1 - bhi _0230DD04 -_0230DCF0: - mov r1, #1 - bl IsMonsterOnTeam - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0230DD04: - mov r0, r6 - bl ov29_022FBDE0 - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - ldrsh r0, [r6, #2] - bl SpecificRecruitCheck - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - ldrsh r1, [r8, #4] - ldrsh r0, [r7, #4] - sub r0, r1, r0 - bl abs - cmp r0, #1 - bgt _0230DD5C - ldrsh r1, [r8, #6] - ldrsh r0, [r7, #6] - sub r0, r1, r0 - bl abs - cmp r0, #1 - ble _0230DD64 -_0230DD5C: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0230DD64: - ldrb r0, [r6, #0x48] - cmp r0, #0xfa - ldrneb r0, [r6, #0xbc] - cmpne r0, #7 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r0, r7 - mov r1, r8 - bl CanSeeTarget - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r0, #1 - bl ov29_022E1B28 - bl ov29_022E81F8 - ldrsh r0, [r6, #2] - mov r1, #1 - bl IsMonsterOnTeam - mov sb, r0 - mov r0, #0x3e8 - bl DungeonRandInt - mov r4, r0 - bl HasPlayedOldGame - cmp r0, #0 - beq _0230DDE0 - cmp sb, #0 - bne _0230DDE0 - ldrsh r0, [r6, #2] - bl GetRecruitRate2 - mov r6, r0 - b _0230DDEC -_0230DDE0: - ldrsh r0, [r6, #2] - bl GetRecruitRate1 - mov r6, r0 -_0230DDEC: - cmp r6, #0 - ble _0230DDFC - cmp sb, #0 - movne r6, r6, asr #1 -_0230DDFC: - ldr r0, _0230E034 ; =0xFFFFFC19 - cmp r6, r0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r0, r8 - mov r1, #0x35 - bl ItemIsActive__0230E578 - cmp r0, #0 - ldrne r0, _0230E038 ; =ov10_022C44FC - ldrnesh r0, [r0] - addne r6, r6, r0 - bne _0230DFD4 - mov r0, r8 - mov r1, #0x39 - bl ItemIsActive__0230E578 - cmp r0, #0 - ldrne r0, _0230E03C ; =ov10_022C443C - ldrnesh r0, [r0] - addne r6, r6, r0 - bne _0230DFD4 - mov r0, r8 - mov r1, #0x3a - bl ItemIsActive__0230E578 - cmp r0, #0 - ldrne r0, _0230E040 ; =ov10_022C447C - ldrnesh r0, [r0] - addne r6, r6, r0 - bne _0230DFD4 - mov r0, r8 - mov r1, #0x3b - bl ItemIsActive__0230E578 - cmp r0, #0 - beq _0230DEA0 - mov r0, r7 - mov r1, #6 - bl MonsterIsType - cmp r0, #0 - ldrne r0, _0230E044 ; =ov10_022C441C - ldrnesh r0, [r0] - addne r6, r6, r0 - b _0230DFD4 -_0230DEA0: - mov r0, r8 - mov r1, #0x3c - bl ItemIsActive__0230E578 - cmp r0, #0 - beq _0230DED4 - mov r0, r7 - mov r1, #2 - bl MonsterIsType - cmp r0, #0 - ldrne r0, _0230E048 ; =ov10_022C4410 - ldrnesh r0, [r0] - addne r6, r6, r0 - b _0230DFD4 -_0230DED4: - mov r0, r8 - mov r1, #0x3d - bl ItemIsActive__0230E578 - cmp r0, #0 - beq _0230DF08 - mov r0, r7 - mov r1, #9 - bl MonsterIsType - cmp r0, #0 - ldrne r0, _0230E04C ; =ov10_022C470C - ldrnesh r0, [r0] - addne r6, r6, r0 - b _0230DFD4 -_0230DF08: - mov r0, r8 - mov r1, #0x3e - bl ItemIsActive__0230E578 - cmp r0, #0 - beq _0230DF3C - mov r0, r7 - mov r1, #3 - bl MonsterIsType - cmp r0, #0 - ldrne r0, _0230E050 ; =ov10_022C4708 - ldrnesh r0, [r0] - addne r6, r6, r0 - b _0230DFD4 -_0230DF3C: - mov r0, r8 - mov r1, #0x3f - bl ItemIsActive__0230E578 - cmp r0, #0 - beq _0230DF70 - mov r0, r7 - mov r1, #0xd - bl MonsterIsType - cmp r0, #0 - ldrne r0, _0230E054 ; =ov10_022C4704 - ldrnesh r0, [r0] - addne r6, r6, r0 - b _0230DFD4 -_0230DF70: - mov r0, r8 - mov r1, #0x40 - bl ItemIsActive__0230E578 - cmp r0, #0 - beq _0230DFA4 - mov r0, r7 - mov r1, #4 - bl MonsterIsType - cmp r0, #0 - ldrne r0, _0230E058 ; =ov10_022C4700 - ldrnesh r0, [r0] - addne r6, r6, r0 - b _0230DFD4 -_0230DFA4: - mov r0, r8 - mov r1, #0x41 - bl ItemIsActive__0230E578 - cmp r0, #0 - beq _0230DFD4 - mov r0, r7 - mov r1, #0xa - bl MonsterIsType - cmp r0, #0 - ldrne r0, _0230E05C ; =ov10_022C46FC - ldrnesh r0, [r0] - addne r6, r6, r0 -_0230DFD4: - mov r0, r8 - mov r1, #0x1e - bl IqSkillIsEnabled - cmp r0, #0 - ldrne r0, _0230E038 ; =ov10_022C44FC - ldrb r1, [r5, #0xa] - ldrnesh r0, [r0] - mov r1, r1, lsl #1 - addne r6, r6, r0 - ldr r0, _0230E060 ; =RECRUITMENT_LEVEL_BOOST_TABLE - ldrsh r0, [r0, r1] - add r0, r6, r0 - cmp r4, r0 - mov r0, #0 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - bl GetFirstEmptyMemberIdx - cmp r0, #0 - movlt r0, #0 - movge r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0230E024: .word DUNGEON_PTR -_0230E028: .word 0x000001E6 -_0230E02C: .word 0x0000010F -_0230E030: .word 0xFFFFFDEA -_0230E034: .word 0xFFFFFC19 -_0230E038: .word ov10_022C44FC -_0230E03C: .word ov10_022C443C -_0230E040: .word ov10_022C447C -_0230E044: .word ov10_022C441C -_0230E048: .word ov10_022C4410 -_0230E04C: .word ov10_022C470C -_0230E050: .word ov10_022C4708 -_0230E054: .word ov10_022C4704 -_0230E058: .word ov10_022C4700 -_0230E05C: .word ov10_022C46FC -_0230E060: .word RECRUITMENT_LEVEL_BOOST_TABLE - arm_func_end RecruitCheck - - arm_func_start TryRecruit -TryRecruit: ; 0x0230E064 -#ifdef JAPAN -#define TRY_RECRUIT_OFFSET -4 -#define TRY_RECRUIT_OFFSET_2 -0x2C0 -#else -#define TRY_RECRUIT_OFFSET 0 -#define TRY_RECRUIT_OFFSET_2 0 -#endif -#ifdef JAPAN - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} -#else - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} -#endif - sub sp, sp, #0x114 + TRY_RECRUIT_OFFSET - mov sl, r0 - mov r0, #0xa - mov r5, #0 - mov sb, r1 - mov r8, r2 - bl ov29_0234BA54 - mov r0, r5 - bl ov29_0234B1A4 - bl ov29_0234D630 - add r0, sb, #4 - add r1, sl, #4 - mvn r7, #0 - bl GetDirectionTowardsPosition - mov r6, r0 - ldr r4, [sb, #0xb4] - mov r0, r5 - strb r0, [sb, #0x22] - mov r0, sl - mov r1, sb - bl ov29_02305F60 - mov r1, r6 - mov r0, sb - bl ov29_02304A48 - ldrsh r0, [r4, #2] - mov r1, #1 - bl IsMonsterOnTeam - cmp r0, #0 - beq _0230E0FC - bl ov29_0234B034 - mov r1, #1 - str r1, [sp] - mov r1, r5 - ldr r2, [sb, #0xb4] - mov r3, r1 - bl ov29_0230040C - b _0230E114 -_0230E0FC: - bl ov29_0234B034 - mov r1, r5 - str r1, [sp] - ldr r2, [sb, #0xb4] - mov r3, r1 - bl ov29_0230040C -_0230E114: - bl ov29_0234B034 - mov r1, r0 - mov r3, #1 - mov r2, #0 - str r3, [sp] - ldr r0, _0230E55C ; =0x00000C77 - mov r3, r2 - bl ov29_0234D7C0 - cmp r0, #2 - moveq r4, #0 - beq _0230E524 - mov r4, #1 - mov r0, #0 - orr r1, r4, #2 - strb r1, [sp, #0xac + TRY_RECRUIT_OFFSET] - strb r0, [sp, #0xad + TRY_RECRUIT_OFFSET] - ldrsh r2, [r8, #0xc] - ldr r1, _0230E560 ; =DUNGEON_PTR - sub r3, r0, #1 - strb r2, [sp, #0xae + TRY_RECRUIT_OFFSET] - strh r4, [sp, #0xb2 + TRY_RECRUIT_OFFSET] - ldr r2, [r1] - ldrh r4, [r8, #0x44] - add r1, sp, #0x14 - strh r4, [r1, #0xf2 + TRY_RECRUIT_OFFSET] - ldrh r4, [r8, #0x46] - strh r4, [r1, #0xf4 + TRY_RECRUIT_OFFSET] - strb r0, [sp, #0x104 + TRY_RECRUIT_OFFSET] - strh r3, [sp, #0xb4 + TRY_RECRUIT_OFFSET] - strh r3, [sp, #0xb6 + TRY_RECRUIT_OFFSET] - ldrsh r1, [r8] - strh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET] - ldrb r1, [r2, #0x748] - strb r1, [sp, #0xaf + TRY_RECRUIT_OFFSET] - ldrb r1, [r2, #0x749] - add r2, sp, #0xac + TRY_RECRUIT_OFFSET - strb r1, [sp, #0xb0 + TRY_RECRUIT_OFFSET] - ldrsh r1, [r8, #6] - strh r1, [sp, #0xba + TRY_RECRUIT_OFFSET] - ldrsh r1, [r8, #6] - strh r1, [sp, #0xbc + TRY_RECRUIT_OFFSET] - ldrh r1, [r8, #0x14] - strh r1, [sp, #0xf0 + TRY_RECRUIT_OFFSET] - ldrh r1, [r8, #0x16] - strh r1, [sp, #0xf2 + TRY_RECRUIT_OFFSET] - ldrh r1, [r8, #0x18] - strh r1, [sp, #0xf4 + TRY_RECRUIT_OFFSET] - ldrh r1, [r8, #0x1a] - strh r1, [sp, #0xf6 + TRY_RECRUIT_OFFSET] -_0230E1D8: - add r4, r8, r0 - ldrb r1, [r4, #8] - add r3, r2, r0 - add r0, r0, #1 - strb r1, [r3, #0x12] - ldrb r1, [r4, #0xa] - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - strb r1, [r3, #0x14] - cmp r0, #2 - blt _0230E1D8 - ldr r0, [r8, #0x10] - add r2, sp, #0xc8 + TRY_RECRUIT_OFFSET - str r0, [sp, #0xc4 + TRY_RECRUIT_OFFSET] - add r3, r8, #0x22 - mov r1, #0x11 -_0230E218: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _0230E218 - ldrh r0, [r8, #0x1c] - strh r0, [sp, #0xea + TRY_RECRUIT_OFFSET] - ldrh r0, [r8, #0x1e] - strh r0, [sp, #0xec + TRY_RECRUIT_OFFSET] - ldrh r0, [r8, #0x20] - strh r0, [sp, #0xee + TRY_RECRUIT_OFFSET] - ldrsh r0, [r8] - bl GetNameString - mov r1, r0 - add r0, sp, #0x100 - add r0, r0, #0xa + TRY_RECRUIT_OFFSET - mov r2, #0xa - bl StrncpyName - ldrsh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET] - ldrsh r2, [sp, #0xb2 + TRY_RECRUIT_OFFSET] - add r0, sp, #0xf8 + TRY_RECRUIT_OFFSET - bl EnableAllLearnableIqSkills - add r1, sp, #0x100 - add r0, sp, #0x98 - add r1, r1, #0xa + TRY_RECRUIT_OFFSET -#ifdef JAPAN - add r4, sp, #0x18 - bl StrcpySimple -#else - mov r2, #0xa - add r4, sp, #0x18 - bl StrncpySimpleNoPad -#endif - bl ov29_022EACAC - bl ov29_0234B034 - mov r1, r0 - mov r0, #1 - str r0, [sp] - mov r2, #0 - ldr r0, _0230E564 ; =0x00000C7B - mov r3, r2 - bl ov29_0234D7C0 - cmp r0, #1 - bne _0230E2D4 - bl ov29_0234D838 - add r6, sp, #0x100 - add r6, r6, #0xa + TRY_RECRUIT_OFFSET -_0230E2BC: - mov r0, r6 - add r1, sp, #0x98 - mov r2, #0 - bl DungeonModeSetupAndShowNameKeyboard - cmp r0, #0 - beq _0230E2BC -_0230E2D4: - add r1, sp, #0xac + TRY_RECRUIT_OFFSET - mov r0, r4 - bl sub_020585B4 - mov r1, r4 - mov r0, #0 - bl ov29_0234B0B4 - mov r0, #1 - mov r1, #0 - bl ov29_0234B084 - ldr r0, _0230E568 ; =0x00000C7E - bl ov29_0230E658 - ldrsh r1, [r8, #2] - ldrsh r2, [r8, #4] - mov r0, sb - bl ov29_02337EC0 - ldrsh r2, [r8, #2] - ldrsh r3, [r8, #4] - mov r0, sl - mov r1, sb - bl ov29_0230E5A8 - cmp r0, #0 - bne _0230E42C - add r0, sp, #0xac + TRY_RECRUIT_OFFSET - mvn r1, #0 - bl ov29_0230E5FC - mov r7, r0 - b _0230E410 -_0230E340: - ldr r0, _0230E56C ; =0x00000C7F - bl ov29_0230E658 - mvn r4, #0 -_0230E34C: - bl ov29_0234D838 - add r1, sp, #0x100 - mov r0, sb - add r1, r1, #0xa + TRY_RECRUIT_OFFSET - bl ov29_0234EE10 - movs r6, r0 - beq _0230E3D4 - cmp r6, sb - add r0, sp, #0x58 - bne _0230E380 - add r1, sp, #0xac + TRY_RECRUIT_OFFSET - bl sub_020585B4 - b _0230E38C -_0230E380: - ldr r1, [r6, #0xb4] - ldrsh r1, [r1, #0xc] - bl sub_020584FC -_0230E38C: - mov r0, #0 - add r1, sp, #0x58 - bl ov29_0234B0B4 - mov r0, #1 - mov r1, sl - mov r2, #0 - bl SubstitutePlaceholderStringTags - bl ov29_0234B034 - mov r1, #1 - mov r2, #0 - str r1, [sp] - mov r1, r0 - mov r0, #0xc80 + TRY_RECRUIT_OFFSET_2 - mov r3, r2 - bl ov29_0234D7C0 - mov fp, r0 - cmp fp, r4 - beq _0230E34C -_0230E3D4: - cmp fp, #2 - cmpne r6, #0 - beq _0230E410 - ldr r0, _0230E56C ; =0x00000C7F - add r0, r0, #2 - bl ov29_0230E658 - mov r0, r6 - bl ov29_022E68BC - ldr r1, _0230E570 ; =0x00000233 - mov r0, r6 - mov r2, sl - bl HandleFaint - cmp r6, sb - moveq r4, #1 - beq _0230E524 -_0230E410: - mov r0, sl - mov r1, sb - ldrsh r2, [r8, #2] - ldrsh r3, [r8, #4] - bl ov29_0230E5A8 - cmp r0, #0 - beq _0230E340 -_0230E42C: - mov r6, #0 - mov r4, r6 - mov r5, #1 - b _0230E468 -_0230E43C: - mov r0, r6 - bl GetActiveTeamMember - ldrb r0, [r0] - tst r0, #1 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _0230E470 - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 -_0230E468: - cmp r6, #4 - blt _0230E43C -_0230E470: - add r0, sp, #0xac + TRY_RECRUIT_OFFSET - mov r1, r7 - strh r6, [sp, #0xb6 + TRY_RECRUIT_OFFSET] - bl ov29_0230E5FC - strh r0, [sp, #0xb4 + TRY_RECRUIT_OFFSET] - ldrsh r1, [sp, #0xb4 + TRY_RECRUIT_OFFSET] - mov r0, r6 - bl sub_02056698 - ldr r1, _0230E570 ; =0x00000233 - mov r0, sb - mov r2, sl - bl HandleFaint - mov r0, r6 - bl GetActiveTeamMember - mov r4, r0 - add r7, sp, #0xac + TRY_RECRUIT_OFFSET - mov r6, r4 - mov r5, #6 -_0230E4B8: - ldmia r7!, {r0, r1, r2, r3} - stmia r6!, {r0, r1, r2, r3} - subs r5, r5, #1 - bne _0230E4B8 - ldmia r7, {r0, r1} - stmia r6, {r0, r1} - bl ov29_022E8104 - bl ov29_022E81F8 - add r1, sp, #0x14 - mov r0, #0 - str r1, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - str r0, [sp, #0xc] - str r0, [sp, #0x10] - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - ldrsh r2, [r8, #4] - mov r3, r4 - bl InitTeamMember - ldrsh r0, [r4, #0xc] - bl SetPokemonJoined - bl ov29_022E8104 - bl ov29_022E81F8 - ldr r5, [sp, #0x14] - mov r4, #1 -_0230E524: - mov r0, #1 - bl ov29_0234D8A0 - cmp r4, #0 - bne _0230E540 - ldr r1, _0230E574 ; =0x00000C78 - mov r0, sl - bl LogMessageByIdWithPopupCheckUser -_0230E540: - cmp r5, #0 - beq _0230E550 - mov r0, r5 - bl EnsureCanStandCurrentTile -_0230E550: - mov r0, r4 - add sp, sp, #0x114 + TRY_RECRUIT_OFFSET -#ifdef JAPAN - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -#else - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} -#endif - .align 2, 0 -_0230E55C: .word 0x00000C77 + TRY_RECRUIT_OFFSET_2 -_0230E560: .word DUNGEON_PTR -_0230E564: .word 0x00000C7B + TRY_RECRUIT_OFFSET_2 -_0230E568: .word 0x00000C7E + TRY_RECRUIT_OFFSET_2 -_0230E56C: .word 0x00000C7F + TRY_RECRUIT_OFFSET_2 -_0230E570: .word 0x00000233 -_0230E574: .word 0x00000C78 + TRY_RECRUIT_OFFSET_2 - arm_func_end TryRecruit - - arm_func_start ItemIsActive__0230E578 -ItemIsActive__0230E578: ; 0x0230E578 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__0230E578 - - arm_func_start ov29_0230E5A8 -ov29_0230E5A8: ; 0x0230E5A8 - stmdb sp!, {r4, lr} - ldr r4, [r1, #0xb4] - mov r1, r2 - ldrsh r0, [r4, #2] - mov r2, r3 - mov r3, #1 - bl ov29_022FD318 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - ldrsh r0, [r4, #2] - bl ov29_022FBC94 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - bl sub_02056830 - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r4, pc} - arm_func_end ov29_0230E5A8 - - arm_func_start ov29_0230E5FC -ov29_0230E5FC: ; 0x0230E5FC - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0x44 - mov r5, r0 - mov r4, r1 - add r0, sp, #0 - mov r1, r5 - bl sub_020534BC - mov r1, #0 - sub r0, r1, #1 - strb r1, [sp, #6] - strb r1, [sp, #7] - cmp r4, r0 - bne _0230E640 - add r0, sp, #0 - bl sub_02055CCC - mov r4, r0 - b _0230E64C -_0230E640: - ldrsh r0, [r5, #8] - add r1, sp, #0 - bl sub_02055D7C -_0230E64C: - mov r0, r4 - add sp, sp, #0x44 - ldmia sp!, {r4, r5, pc} - arm_func_end ov29_0230E5FC - - arm_func_start ov29_0230E658 -ov29_0230E658: ; 0x0230E658 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r5, r0 - mov r0, r4 - bl StringFromId - mov r4, r0 - bl ov29_0234B034 - mov r2, r4 - str r0, [sp] - mov r0, r5 - mov r1, #0x400 - mov r3, r1 - bl PreprocessString - mov r0, r5 - bl ov29_0234BB50 - bl ov29_0234B034 - mov r1, r0 - mov r0, r5 - mov r2, #1 - str r2, [sp] - mov r2, #0 - mov r3, r2 - bl ov29_0234D6C8 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov29_0230E658 - - arm_func_start TrySpawnMonsterAndTickSpawnCounter -TrySpawnMonsterAndTickSpawnCounter: ; 0x0230E6BC -#ifdef JAPAN -#define TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET -0xA4 -#else -#define TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x10 - ldr r0, _0230E8D8 ; =DUNGEON_PTR - mov r6, #0 - ldr r7, [r0] - add r0, r7, #0x700 - ldrsh r1, [r0, #0x86] - cmp r1, #0 - beq _0230E8D0 - ldrsh r1, [r0, #0x82] - add r1, r1, #1 - strh r1, [r0, #0x82] - ldrb r1, [r7, #0x790] - cmp r1, #0 - bne _0230E710 - ldr r1, _0230E8DC ; =SPAWN_COOLDOWN - ldrsh r2, [r0, #0x82] - ldrsh r0, [r1] - cmp r2, r0 - bge _0230E724 - b _0230E8D0 -_0230E710: - ldr r1, _0230E8E0 ; =SPAWN_COOLDOWN_THIEF_ALERT - ldrsh r2, [r0, #0x82] - ldrsh r0, [r1] - cmp r2, r0 - blt _0230E8D0 -_0230E724: - cmp r2, #0x384 - ble _0230E76C - add r0, r7, #0x19000 - ldr r4, [r0, #0x908 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] - mov r0, r4 - bl EntityIsValid__0230E8F0 - cmp r0, #0 - beq _0230E76C - add r0, r7, #0x19000 - ldrh r1, [r4, #0x26] - ldr r0, [r0, #0x910 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] - cmp r1, r0 - bne _0230E76C - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r6, r4 -_0230E76C: - mov r5, #0 - add r0, r7, #0x700 - strh r5, [r0, #0x82] - add r0, r7, #0x19000 - mov r4, r5 - str r5, [r0, #0x908 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] -_0230E784: - add r0, r7, r4, lsl #2 - add r0, r0, #0x12000 - ldr r8, [r0, #0xb38 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] - mov r0, r8 - bl EntityIsValid__0230E8F0 - cmp r0, #0 - beq _0230E7B8 - ldrsh r0, [r8, #4] - ldrsh r1, [r8, #6] - bl GetTile - ldrh r0, [r0] - tst r0, #0x100 - addeq r5, r5, #1 -_0230E7B8: - add r4, r4, #1 - cmp r4, #0x10 - blt _0230E784 - ldrb r0, [r7, #0x790] - cmp r0, #0 - bne _0230E80C - ldr r0, _0230E8D8 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 - ldrb r0, [r0, #0xc9 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] - cmp r0, #0xff - bne _0230E7FC - ldr r0, _0230E8E4 ; =SPAWN_CAP_NO_MONSTER_HOUSE - ldrsh r0, [r0] - cmp r5, r0 - blt _0230E80C - b _0230E8D0 -_0230E7FC: - ldr r0, _0230E8E8 ; =SPAWN_CAP_WITH_MONSTER_HOUSE - ldrsh r0, [r0] - cmp r5, r0 - bge _0230E8D0 -_0230E80C: - cmp r6, #0 - beq _0230E828 - ldr r1, _0230E8EC ; =0x00000C5D - mov r0, #0 - bl LogMessageByIdWithPopup - mov r0, r6 - bl ov29_022E62F0 -_0230E828: - ldrb r0, [r7, #0x790] - cmp r0, #0 - beq _0230E83C - bl GetKecleonIdToSpawnByFloor - b _0230E844 -_0230E83C: - mov r0, #0 - bl GetMonsterIdToSpawn -_0230E844: - mov r5, r0 - mov r0, r5 - bl GetMonsterLevelToSpawn - movs r4, r0 - mov r0, r5 - mov r1, #0 - moveq r4, #1 - bl MewSpawnCheck - cmp r0, #0 - beq _0230E8D0 - add r0, sp, #0xa - mov r1, #0 - bl GetRandomTile - cmp r0, #0 - beq _0230E8D0 - mov r1, #0 - mov r0, #0x64 - strh r5, [sp] - strh r4, [sp, #8] - strb r1, [sp, #2] - bl DungeonRandInt - ldr r1, _0230E8D8 ; =DUNGEON_PTR - mov r4, r0 - ldr r0, [r1] - ldrb r0, [r0, #0x748] - bl GetRandomMovementChance - cmp r4, r0 - movlt r0, #1 - strlt r0, [sp, #4] - movge r0, #0 - strge r0, [sp, #4] - mov r1, #0 - add r0, sp, #0 - strb r1, [sp, #0xe] - bl SpawnMonster -_0230E8D0: - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0230E8D8: .word DUNGEON_PTR -_0230E8DC: .word SPAWN_COOLDOWN -_0230E8E0: .word SPAWN_COOLDOWN_THIEF_ALERT -_0230E8E4: .word SPAWN_CAP_NO_MONSTER_HOUSE -_0230E8E8: .word SPAWN_CAP_WITH_MONSTER_HOUSE -#ifdef JAPAN -_0230E8EC: .word 0x0000099C -#else -_0230E8EC: .word 0x00000C5D -#endif - arm_func_end TrySpawnMonsterAndTickSpawnCounter diff --git a/asm/overlay_29_0230AA0C.s b/asm/overlay_29_0230AA0C.s new file mode 100644 index 00000000..d994f2c5 --- /dev/null +++ b/asm/overlay_29_0230AA0C.s @@ -0,0 +1,4327 @@ + .include "asm/macros.inc" + .include "overlay_29_0230AA0C.inc" + + .text + + arm_func_start AftermathCheck +AftermathCheck: ; 0x0230AA0C + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + mov r4, r2 + mov r2, #0x76 +#ifndef JAPAN + mov r3, #1 +#endif + mov r6, r0 + mov r5, r1 + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + beq _0230AA78 + ldr r0, _0230AA84 ; =AFTERMATH_CHANCE + ldrsh r0, [r0] + bl DungeonRandOutcome__022EAB20 + cmp r0, #0 + ldrne ip, _0230AA88 ; =0x0000026F + cmpne r4, ip + beq _0230AA78 + mov r0, #0 + str r0, [sp] + mov r0, r6 + mov r1, r5 + add r2, r5, #4 + mov r3, #1 + str ip, [sp, #4] + bl TryAftermathExplosion + mov r0, #1 + b _0230AA7C +_0230AA78: + mov r0, #0 +_0230AA7C: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0230AA84: .word AFTERMATH_CHANCE +_0230AA88: .word 0x0000026F + arm_func_end AftermathCheck + + arm_func_start GetTypeMatchupBothTypes +GetTypeMatchupBothTypes: ; 0x0230AA8C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r3, _0230AB4C ; =ov29_02352838 + mov sl, r0 + ldrh r4, [r3] + ldrh r3, [r3, #2] + mov sb, r1 + mov r8, r2 + strh r4, [sp] + strh r3, [sp, #2] + bl ScrappyShouldActivate + ldr fp, _0230AB50 ; =DUNGEON_PTR + mov r7, r0 + mov r6, #0 + mov r5, #1 + add r4, sp, #0 +_0230AAC8: + cmp r7, #0 + bne _0230AB04 + mov r0, r8 + bl IsTypeIneffectiveAgainstGhost + cmp r0, #0 + beq _0230AB04 + mov r0, sl + mov r1, sb + mov r2, r6 + bl GhostImmunityIsActive + cmp r0, #0 + ldrne r1, [fp] + movne r0, #0 + strneb r5, [r1, #0x1d4] + bne _0230AB18 +_0230AB04: + mov r0, sl + mov r1, sb + mov r2, r6 + mov r3, r8 + bl GetTypeMatchup +_0230AB18: + add r1, r6, #1 + mov r1, r1, lsl #0x10 + mov r2, r6, lsl #1 + mov r6, r1, asr #0x10 + strh r0, [r4, r2] + cmp r6, #2 + blt _0230AAC8 + ldrsh r2, [sp] + ldr r0, _0230AB54 ; =TYPE_MATCHUP_COMBINATOR_TABLE + ldrsh r1, [sp, #2] + add r0, r0, r2, lsl #4 + ldr r0, [r0, r1, lsl #2] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0230AB4C: .word ov29_02352838 +_0230AB50: .word DUNGEON_PTR +_0230AB54: .word TYPE_MATCHUP_COMBINATOR_TABLE + arm_func_end GetTypeMatchupBothTypes + + arm_func_start ScrappyShouldActivate +ScrappyShouldActivate: ; 0x0230AB58 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r6, #0 + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov r5, #0x57 + mov fp, r6 + mov r4, #1 + b _0230ABDC +_0230AB7C: + mov r0, sl + mov r1, r5 + ldr r7, [sb, #0xb4] + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230ABB4 + add r0, r7, r6 + ldrb r0, [r0, #0x5e] + cmp r0, #0xe + bne _0230ABB4 + cmp r8, #1 + cmpne r8, #7 + moveq r0, r4 + beq _0230ABB8 +_0230ABB4: + mov r0, fp +_0230ABB8: + cmp r0, #0 + ldrne r1, _0230ABEC ; =DUNGEON_PTR + movne r0, #1 + ldrne r1, [r1] + strneb r0, [r1, #0x1cc] + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 +_0230ABDC: + cmp r6, #2 + blt _0230AB7C + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0230ABEC: .word DUNGEON_PTR + arm_func_end ScrappyShouldActivate + + arm_func_start IsTypeIneffectiveAgainstGhost +IsTypeIneffectiveAgainstGhost: ; 0x0230ABF0 + cmp r0, #1 + cmpne r0, #7 + moveq r0, #1 + movne r0, #0 + bx lr + arm_func_end IsTypeIneffectiveAgainstGhost + + arm_func_start GhostImmunityIsActive +GhostImmunityIsActive: ; 0x0230AC04 + stmdb sp!, {r3, lr} + ldr r3, [r1, #0xb4] + add r1, r3, r2 + ldrb r1, [r1, #0x5e] + cmp r1, #0xe + bne _0230AC50 + ldrb r1, [r3, #0xfe] + cmp r1, #0 + bne _0230AC38 + mov r1, #0x45 + bl ExclusiveItemEffectIsActive__0230A9B8 + cmp r0, #0 + beq _0230AC40 +_0230AC38: + mov r0, #1 + b _0230AC44 +_0230AC40: + mov r0, #0 +_0230AC44: + cmp r0, #0 + moveq r0, #1 + ldmeqia sp!, {r3, pc} +_0230AC50: + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end GhostImmunityIsActive + + arm_func_start GetTypeMatchup +GetTypeMatchup: ; 0x0230AC58 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r1 + ldr r4, [r7, #0xb4] + mov r6, r2 + ldrb r1, [r4, #0xf5] + mov r5, r3 + cmp r1, #1 + beq _0230AC88 + mov r1, #0x46 + bl ExclusiveItemEffectIsActive__0230A9B8 + cmp r0, #0 + beq _0230ACA0 +_0230AC88: + cmp r5, #0xb + addeq r0, r4, r6 + ldreqb r0, [r0, #0x5e] + cmpeq r0, #0x10 + moveq r0, #2 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} +_0230ACA0: + cmp r5, #9 + bne _0230ACE0 + bl GravityIsActive + cmp r0, #0 + beq _0230ACCC + add r0, r4, r6 + ldrb r0, [r0, #0x5e] + cmp r0, #0xa + bne _0230ACE0 + mov r0, #2 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_0230ACCC: + mov r0, r7 + bl IsFloating + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} +_0230ACE0: + ldr r1, _0230AD00 ; =TYPE_MATCHUP_TABLE + mov r0, #0x24 + mla r0, r5, r0, r1 + add r1, r4, r6 + ldrb r1, [r1, #0x5e] + mov r1, r1, lsl #1 + ldrsh r0, [r1, r0] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0230AD00: .word TYPE_MATCHUP_TABLE + arm_func_end GetTypeMatchup + + arm_func_start CalcTypeBasedDamageEffects +CalcTypeBasedDamageEffects: ; 0x0230AD04 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x64 + ldr r5, _0230B774 ; =ov29_02352838 + mov sl, r1 + ldr r4, [r5, #0x1c] + ldr r5, [r5, #0x20] + ldr r8, [sp, #0x88] + ldr r1, [sp, #0x90] + ldr r7, [sp, #0x8c] + str r1, [sp, #0x90] + ldr r6, [sl, #0xb4] + mov r1, #1 + mov fp, r0 + mov sb, r2 + str r3, [sp, #4] + str r4, [sp, #0x34] + str r5, [sp, #0x38] + bl IntToFixedPoint64 + mov r0, #0 + str r0, [sp, #0x30] + strb r0, [r7, #0xe] + ldr r1, [sp, #0x30] + mov r0, sb + strb r1, [r7, #0xf] + bl EntityIsValid__02308FBC + cmp r0, #0 + moveq r0, #1 + beq _0230B76C + mov r0, r8 + bl IsTypeIneffectiveAgainstGhost + str r0, [sp, #0x2c] + mov r0, sl + mov r1, sb + mov r2, #0x35 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + cmpne r8, #0 + movne r0, #1 + strne r0, [sp, #0x30] + mov r3, #2 + mov r0, sl + mov r1, sb + mov r2, r8 + str r3, [r7, #8] + bl ScrappyShouldActivate + ldr r3, _0230B778 ; =MATCHUP_IMMUNE_MULTIPLIER_ERRATIC_PLAYER + str r0, [sp, #0x28] + ldr r0, [r3] + ldr r2, _0230B77C ; =MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER + str r0, [sp, #0x24] + ldr r0, [r2] + ldr r1, _0230B780 ; =MATCHUP_NEUTRAL_MULTIPLIER_ERRATIC_PLAYER + str r0, [sp, #0x20] + ldr r0, [r1] + ldr r1, _0230B784 ; =MATCHUP_IMMUNE_MULTIPLIER + str r0, [sp, #0x1c] + ldr r0, _0230B788 ; =MATCHUP_SUPER_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER + mov r4, #0 + ldr r0, [r0] + str r0, [sp, #0x18] + ldr r0, [r1] + ldr r1, _0230B78C ; =MATCHUP_NEUTRAL_MULTIPLIER + str r0, [sp, #0x14] + ldr r0, _0230B790 ; =MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER + ldr r0, [r0] + str r0, [sp, #0x10] + ldr r0, [r1] + str r0, [sp, #0xc] + ldr r0, _0230B794 ; =MATCHUP_SUPER_EFFECTIVE_MULTIPLIER + ldr r0, [r0] + str r0, [sp, #8] + b _0230AF8C +_0230AE28: + ldr r0, [sp, #0x90] + cmp r0, #0 + bne _0230AE90 + mov r0, sl + mov r1, #0x3b + bl IqSkillIsEnabled + cmp r0, #0 + bne _0230AE5C + mov r0, sb + mov r1, #0x3b + bl IqSkillIsEnabled + cmp r0, #0 + beq _0230AE90 +_0230AE5C: + ldr r1, [sp, #0x24] + add r0, sp, #0x44 + bl FixedPoint32To64 + ldr r1, [sp, #0x20] + add r0, sp, #0x4c + bl FixedPoint32To64 + ldr r1, [sp, #0x1c] + add r0, sp, #0x54 + bl FixedPoint32To64 + ldr r1, [sp, #0x18] + add r0, sp, #0x5c + bl FixedPoint32To64 + b _0230AEC0 +_0230AE90: + ldr r1, [sp, #0x14] + add r0, sp, #0x44 + bl FixedPoint32To64 + ldr r1, [sp, #0x10] + add r0, sp, #0x4c + bl FixedPoint32To64 + ldr r1, [sp, #0xc] + add r0, sp, #0x54 + bl FixedPoint32To64 + ldr r1, [sp, #8] + add r0, sp, #0x5c + bl FixedPoint32To64 +_0230AEC0: + mov r0, fp + bl FixedPoint64IsZero + cmp r0, #0 + bne _0230AF94 + ldr r0, [sp, #0x28] + cmp r0, #0 + bne _0230AF1C + ldr r0, [sp, #0x2c] + cmp r0, #0 + beq _0230AF1C + mov r0, sl + mov r1, sb + mov r2, r4, lsl #0x10 + mov r2, r2, asr #0x10 + bl GhostImmunityIsActive + cmp r0, #0 + beq _0230AF1C + ldr r0, _0230B798 ; =DUNGEON_PTR + mov r5, #0 + ldr r1, [r0] + mov r0, #1 + strb r0, [r1, #0x1d4] + b _0230AF38 +_0230AF1C: + mov r0, sl + mov r1, sb + mov r2, r4, lsl #0x10 + mov r2, r2, asr #0x10 + mov r3, r8 + bl GetTypeMatchup + mov r5, r0 +_0230AF38: + mov r0, sl + mov r1, #0x3b + bl IqSkillIsEnabled + cmp r0, #0 + beq _0230AF64 + add r2, sp, #0x44 + mov r0, fp + mov r1, fp + add r2, r2, r5, lsl #3 + bl MultiplyFixedPoint64 + b _0230AF80 +_0230AF64: + cmp r5, #2 + beq _0230AF80 + add r2, sp, #0x44 + mov r0, fp + mov r1, fp + add r2, r2, r5, lsl #3 + bl MultiplyFixedPoint64 +_0230AF80: + add r0, sp, #0x34 + str r5, [r0, r4, lsl #2] + add r4, r4, #1 +_0230AF8C: + cmp r4, #2 + blt _0230AE28 +_0230AF94: + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r4, [sp, #0x34] + ldr r2, [r0] + ldr r1, _0230B79C ; =TYPE_MATCHUP_COMBINATOR_TABLE + strb r4, [r2, #0x18c] + ldr r3, [sp, #0x38] + ldr r2, [r0] + add r1, r1, r4, lsl #4 + ldr r0, [r1, r3, lsl #2] + strb r3, [r2, #0x18d] + cmp r0, #3 + str r0, [r7, #8] + moveq r4, #1 + beq _0230AFEC + ldr r0, [sp, #0x30] + mov r4, #0 + cmp r0, #0 + ldrne r0, _0230B774 ; =ov29_02352838 + ldrne r1, [r0, #0x3c] + ldrne r0, [r0, #0x40] + strne r1, [fp] + strne r0, [fp, #4] +_0230AFEC: + mov r0, sl + mov r1, #0x50 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230B02C + ldr r0, [r7, #8] + cmp r0, #1 + bne _0230B02C + ldr r1, _0230B7A0 ; =TINTED_LENS_MULTIPLIER + add r0, sp, #0x3c + ldr r1, [r1] + bl FixedPoint32To64 + add r2, sp, #0x3c + mov r0, fp + mov r1, fp + bl MultiplyFixedPoint64 +_0230B02C: + mov r0, sl + mov r1, sb + mov r2, #0x6c +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + bne _0230B064 + mov r0, sl + mov r1, sb + mov r2, #0x6e +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + beq _0230B080 +_0230B064: + ldr r0, [r7, #8] + cmp r0, #3 + bne _0230B080 + ldr r2, _0230B7A4 ; =SOLID_ROCK_MULTIPLIER + mov r0, fp + mov r1, fp + bl MultiplyFixedPoint64 +_0230B080: + mov r0, sb + mov r1, #0x5a + bl ExclusiveItemEffectIsActive__0230A9B8 + cmp r0, #0 + beq _0230B0A4 + ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 + mov r0, fp + mov r1, fp + bl MultiplyFixedPoint64 +_0230B0A4: + ldr r0, [sp, #0x90] + cmp r0, #0 + bne _0230B104 + mov r0, sl + mov r1, #0x64 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230B104 + ldr r0, _0230B7AC ; =TECHNICIAN_MOVE_POWER_THRESHOLD + ldrsh r1, [r0] + ldr r0, [sp, #4] + cmp r0, r1 + bgt _0230B104 + ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 + mov r0, fp + mov r1, fp + bl MultiplyFixedPoint64 + mov r1, #0x64 + ldr r2, _0230B7B4 ; =0x00000C3E + mov r0, sl + str r1, [sp] + mov r1, sb + mov r3, #2 + bl LogMessageByIdWithPopupCheckParticipants +_0230B104: + cmp r8, #2 + cmpne r8, #6 + bne _0230B14C + mov r0, sl + mov r1, sb + mov r2, #2 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + beq _0230B14C + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 + ldr r3, [r0] + mov r5, #1 + mov r0, fp + mov r1, fp + strb r5, [r3, #0x1c5] + bl MultiplyFixedPoint64 +_0230B14C: + cmp r8, #2 + bne _0230B198 + mov r0, sl + mov r1, sb + bl FlashFireShouldActivate + cmp r0, #0 + beq _0230B198 + ldr r1, _0230B798 ; =DUNGEON_PTR + mov r0, fp + ldr r2, [r1] + mov r3, #1 + mov r1, #0 + strb r3, [r2, #0x1c6] + bl IntToFixedPoint64 + mov r4, #0 + str r4, [r7, #8] + strb r4, [r7, #0xe] + mov r0, #1 + strb r0, [r7, #0xf] +_0230B198: + cmp r8, #2 + bne _0230B1DC + mov r0, sl + mov r1, sb + mov r2, #0x5f +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + beq _0230B1DC + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 + ldr r3, [r0] + mov r5, #1 + mov r0, fp + mov r1, fp + strb r5, [r3, #0x1c5] + bl MultiplyFixedPoint64 +_0230B1DC: + cmp r8, #9 + bne _0230B248 + mov r0, sl + mov r1, #0x53 + bl AbilityIsActiveVeneer + cmp r0, #0 + bne _0230B208 + mov r0, sb + bl LevitateIsActive + cmp r0, #0 + bne _0230B218 +_0230B208: + mov r0, sb + bl IsFloating + cmp r0, #0 + beq _0230B248 +_0230B218: + ldr r1, _0230B798 ; =DUNGEON_PTR + mov r0, fp + ldr r2, [r1] + mov r3, #1 + mov r1, #0 + strb r3, [r2, #0x1c7] + bl IntToFixedPoint64 + mov r4, #0 + str r4, [r7, #8] + strb r4, [r7, #0xe] + mov r0, #1 + strb r0, [r7, #0xf] +_0230B248: + cmp r8, #3 + bne _0230B2F4 + mov r0, sl + mov r1, #0x10 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230B2F4 + ldrsh r2, [r6, #0x12] + ldrsh r1, [r6, #0x16] + ldr r0, _0230B7B8 ; =0x000003E7 + add r2, r2, r1 + cmp r2, r0 + movgt r2, r0 + mov r0, r2, asr #1 + ldrsh r1, [r6, #0x10] + add r0, r2, r0, lsr #30 + cmp r1, r0, asr #2 + movle r0, #1 + movgt r0, #0 + and r7, r0, #0xff + mov r0, r6 + mov r2, r7 + mov r1, #0x80 + bl UpdateStateFlags + mov r5, r0 + cmp r7, #0 + beq _0230B2D4 + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 + ldr r3, [r0] + mov r7, #1 + mov r0, fp + mov r1, fp + strb r7, [r3, #0x1c8] + bl MultiplyFixedPoint64 +_0230B2D4: + cmp r5, #0 + beq _0230B2F4 + mov r0, sl + bl PlayEffectAnimation0x1A9__022E6214 + ldr r2, _0230B7C0 ; =0x00000C4F + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_0230B2F4: + cmp r8, #4 + bne _0230B3A0 + mov r0, sl + mov r1, #0x1a + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230B3A0 + ldrsh r2, [r6, #0x12] + ldrsh r1, [r6, #0x16] + ldr r0, _0230B7B8 ; =0x000003E7 + add r2, r2, r1 + cmp r2, r0 + movgt r2, r0 + mov r0, r2, asr #1 + ldrsh r1, [r6, #0x10] + add r0, r2, r0, lsr #30 + cmp r1, r0, asr #2 + movle r0, #1 + movgt r0, #0 + and r7, r0, #0xff + mov r0, r6 + mov r2, r7 + mov r1, #2 + bl UpdateStateFlags + mov r5, r0 + cmp r7, #0 + beq _0230B380 + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 + ldr r3, [r0] + mov r7, #1 + mov r0, fp + mov r1, fp + strb r7, [r3, #0x1c9] + bl MultiplyFixedPoint64 +_0230B380: + cmp r5, #0 + beq _0230B3A0 + mov r0, sl + bl PlayEffectAnimation0x1A9__022E61C8 +#ifdef JAPAN + ldr r2, _0230CD24 ; =0x0000098F + mov r0, sl + mov r1, sb +#else + mov r0, sl + mov r1, sb + mov r2, #0xc50 +#endif + bl LogMessageByIdWithPopupCheckUserTarget +_0230B3A0: + cmp r8, #0xc + bne _0230B44C + mov r0, sl + mov r1, #0x43 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230B44C + ldrsh r2, [r6, #0x12] + ldrsh r1, [r6, #0x16] + ldr r0, _0230B7B8 ; =0x000003E7 + add r2, r2, r1 + cmp r2, r0 + movgt r2, r0 + mov r0, r2, asr #1 + ldrsh r1, [r6, #0x10] + add r0, r2, r0, lsr #30 + cmp r1, r0, asr #2 + movle r0, #1 + movgt r0, #0 + and r7, r0, #0xff + mov r0, r6 + mov r2, r7 + mov r1, #0x10 + bl UpdateStateFlags + mov r5, r0 + cmp r7, #0 + beq _0230B42C + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 + ldr r3, [r0] + mov r7, #1 + mov r0, fp + mov r1, fp + strb r7, [r3, #0x1ca] + bl MultiplyFixedPoint64 +_0230B42C: + cmp r5, #0 + beq _0230B44C + mov r0, sl + bl PlayEffectAnimation0x1A9__022E64C4 +#ifdef JAPAN + mov r0, sl + mov r1, sb + mov r2, #0x990 +#else + ldr r2, _0230B7C4 ; =0x00000C51 + mov r0, sl + mov r1, sb +#endif + bl LogMessageByIdWithPopupCheckUserTarget +_0230B44C: + cmp r8, #2 + bne _0230B534 + mov r0, sl + mov r1, #0x46 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230B4F8 + ldrsh r2, [r6, #0x12] + ldrsh r1, [r6, #0x16] + ldr r0, _0230B7B8 ; =0x000003E7 + add r2, r2, r1 + cmp r2, r0 + movgt r2, r0 + mov r0, r2, asr #1 + ldrsh r1, [r6, #0x10] + add r0, r2, r0, lsr #30 + cmp r1, r0, asr #2 + movle r0, #1 + movgt r0, #0 + and r7, r0, #0xff + mov r0, r6 + mov r2, r7 + mov r1, #0x20 + bl UpdateStateFlags + mov r5, r0 + cmp r7, #0 + beq _0230B4D8 + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 + ldr r3, [r0] + mov r7, #1 + mov r0, fp + mov r1, fp + strb r7, [r3, #0x1cb] + bl MultiplyFixedPoint64 +_0230B4D8: + cmp r5, #0 + beq _0230B4F8 + mov r0, sl + bl PlayEffectAnimation0x1A9__022E6510 + ldr r2, _0230B7C8 ; =0x00000C52 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_0230B4F8: + mov r0, sl + mov r1, sb + mov r2, #0x55 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + beq _0230B534 + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 + ldr r3, [r0] + mov r5, #1 + mov r0, fp + mov r1, fp + strb r5, [r3, #0x1cb] + bl MultiplyFixedPoint64 +_0230B534: + ldrb r0, [r6, #0xbf] + cmp r0, #1 + bne _0230B560 + ldr r1, _0230B7CC ; =BURN_DAMAGE_MULTIPLIER + add r0, sp, #0x3c + ldr r1, [r1] + bl FixedPoint32To64 + add r2, sp, #0x3c + mov r0, fp + mov r1, fp + bl MultiplyFixedPoint64 +_0230B560: + mov r0, fp + bl FixedPoint64IsZero + cmp r0, #0 + bne _0230B5CC + mov r0, sl + mov r1, r8 + bl MonsterIsType + cmp r0, #0 + beq _0230B5CC + ldr r1, _0230B798 ; =DUNGEON_PTR + mov r0, sl + ldr r2, [r1] + mov r3, #1 + mov r1, #0x63 + strb r3, [r2, #0x1cf] + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230B5BC + ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 + mov r0, fp + mov r1, fp + bl MultiplyFixedPoint64 + b _0230B5CC +_0230B5BC: + ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 + mov r0, fp + mov r1, fp + bl MultiplyFixedPoint64 +_0230B5CC: + mov r0, sl + bl GetApparentWeather + mov r5, r0 + cmp r5, #1 + bne _0230B634 + cmp r8, #2 + bne _0230B60C + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 + ldr r3, [r0] + mov r7, #1 + mov r0, fp + mov r1, fp + strb r7, [r3, #0x1c4] + bl MultiplyFixedPoint64 + b _0230B634 +_0230B60C: + cmp r8, #3 + bne _0230B634 + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 + ldr r3, [r0] + mov r7, #1 + mov r0, fp + mov r1, fp + strb r7, [r3, #0x1c4] + bl MultiplyFixedPoint64 +_0230B634: + cmp r5, #4 + bne _0230B690 + cmp r8, #2 + bne _0230B668 + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 + ldr r3, [r0] + mov r7, #1 + mov r0, fp + mov r1, fp + strb r7, [r3, #0x1c3] + bl MultiplyFixedPoint64 + b _0230B690 +_0230B668: + cmp r8, #3 + bne _0230B690 + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5 + ldr r3, [r0] + mov r7, #1 + mov r0, fp + mov r1, fp + strb r7, [r3, #0x1c3] + bl MultiplyFixedPoint64 +_0230B690: + cmp r5, #3 + bne _0230B6C0 + cmp r8, #1 + beq _0230B6C0 + ldr r2, _0230B7D0 ; =CLOUDY_DAMAGE_MULTIPLIER + mov r0, fp + mov r1, fp + bl MultiplyFixedPoint64 + ldr r0, _0230B798 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + strb r1, [r0, #0x1c2] +_0230B6C0: + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r7, [r0] + add r0, r7, #0xc000 +#ifdef JAPAN + ldrb r0, [r0, #0xcb7] +#else + ldrb r0, [r0, #0xd5b] +#endif + cmp r0, #0 + bne _0230B6E0 + cmp r5, #6 + bne _0230B700 +_0230B6E0: + cmp r8, #5 + bne _0230B700 + ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 + mov r3, #1 + mov r0, fp + mov r1, fp + strb r3, [r7, #0x1d0] + bl MultiplyFixedPoint64 +_0230B700: + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r5, [r0] + add r0, r5, #0xc000 +#ifdef JAPAN + ldrb r0, [r0, #0xcb8] +#else + ldrb r0, [r0, #0xd5c] +#endif + cmp r0, #0 + beq _0230B738 + cmp r8, #2 + bne _0230B738 + ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5 + mov r3, #1 + mov r0, fp + mov r1, fp + strb r3, [r5, #0x1d1] + bl MultiplyFixedPoint64 +_0230B738: + cmp r8, #5 + ldreqb r0, [r6, #0xd2] + cmpeq r0, #0xb + bne _0230B768 + ldr r0, _0230B798 ; =DUNGEON_PTR + ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2 + ldr r3, [r0] + mov r5, #1 + mov r0, fp + mov r1, fp + strb r5, [r3, #0x1d2] + bl MultiplyFixedPoint64 +_0230B768: + mov r0, r4 +_0230B76C: + add sp, sp, #0x64 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET -0x2C1 +#else +#define CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET 0 +#endif +_0230B774: .word ov29_02352838 +_0230B778: .word MATCHUP_IMMUNE_MULTIPLIER_ERRATIC_PLAYER +_0230B77C: .word MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER +_0230B780: .word MATCHUP_NEUTRAL_MULTIPLIER_ERRATIC_PLAYER +_0230B784: .word MATCHUP_IMMUNE_MULTIPLIER +_0230B788: .word MATCHUP_SUPER_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER +_0230B78C: .word MATCHUP_NEUTRAL_MULTIPLIER +_0230B790: .word MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER +_0230B794: .word MATCHUP_SUPER_EFFECTIVE_MULTIPLIER +_0230B798: .word DUNGEON_PTR +_0230B79C: .word TYPE_MATCHUP_COMBINATOR_TABLE +_0230B7A0: .word TINTED_LENS_MULTIPLIER +_0230B7A4: .word SOLID_ROCK_MULTIPLIER +_0230B7A8: .word DAMAGE_MULTIPLIER_0_5 +_0230B7AC: .word TECHNICIAN_MOVE_POWER_THRESHOLD +_0230B7B0: .word DAMAGE_MULTIPLIER_1_5 +_0230B7B4: .word 0x00000C3E + CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET +_0230B7B8: .word 0x000003E7 +_0230B7BC: .word DAMAGE_MULTIPLIER_2 +_0230B7C0: .word 0x00000C4F + CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET +#ifdef JAPAN +_0230CD24: .word 0x0000098F +#else +_0230B7C4: .word 0x00000C51 +#endif +_0230B7C8: .word 0x00000C52 + CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET +_0230B7CC: .word BURN_DAMAGE_MULTIPLIER +_0230B7D0: .word CLOUDY_DAMAGE_MULTIPLIER + arm_func_end CalcTypeBasedDamageEffects + + arm_func_start ov29_0230B7D4 +ov29_0230B7D4: ; 0x0230B7D4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x24 + mov sb, r1 + mov sl, r0 + mov r0, sb + mov r4, #1 + mov r8, r2 + mov fp, #0 + bl EntityIsValid__02308FBC + cmp r0, #0 + moveq r0, r4 + beq _0230BB98 + mov r0, sl + mov r1, #0x6b + ldr r7, [sl, #0xb4] + ldr r6, [sb, #0xb4] + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r8, r4 + cmp r8, #1 + cmpne r8, #7 + moveq fp, #1 + cmp r8, #2 + bne _0230B84C + mov r0, sl + mov r1, sb + bl FlashFireShouldActivate + cmp r0, #0 + movne r0, #0 + bne _0230BB98 +_0230B84C: + cmp r8, #5 + bne _0230B874 + mov r0, sl + mov r1, sb + mov r2, #0x23 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + movne r0, #0 + bne _0230BB98 +_0230B874: + cmp r8, #3 + bne _0230B89C + mov r0, sl + mov r1, sb + mov r2, #0x24 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + movne r0, #0 + bne _0230BB98 +_0230B89C: + cmp r8, #9 + bne _0230B8E0 + mov r0, sl + mov r1, #0x53 + bl AbilityIsActiveVeneer + cmp r0, #0 + bne _0230B8C8 + mov r0, sb + bl LevitateIsActive + cmp r0, #0 + bne _0230B8D8 +_0230B8C8: + mov r0, sb + bl IsFloating + cmp r0, #0 + beq _0230B8E0 +_0230B8D8: + mov r0, #1 + b _0230BB98 +_0230B8E0: + mov r0, sl + mov r1, sb + mov r2, r8 + bl ScrappyShouldActivate + ldr r1, _0230BBA0 ; =ov29_02352884 + str r0, [sp] + add ip, sp, #4 + ldmia r1, {r0, r1, r2, r3} + stmia ip, {r0, r1, r2, r3} + mov r5, #0 + b _0230B9A0 +_0230B90C: + ldr r0, [sp] + add ip, sp, #0x14 + cmp r0, #0 + add r0, sp, #4 + ldmia r0, {r0, r1, r2, r3} + stmia ip, {r0, r1, r2, r3} + bne _0230B960 + cmp fp, #0 + beq _0230B960 + add r0, r6, r5 + ldrb r0, [r0, #0x5e] + cmp r0, #0xe + ldreqb r0, [r6, #0xfe] + cmpeq r0, #0 + bne _0230B960 + ldr r1, _0230BBA4 ; =DUNGEON_PTR + mov r0, #0 + ldr r2, [r1] + mov r1, #1 + strb r1, [r2, #0x1d4] + b _0230B978 +_0230B960: + mov r0, sl + mov r1, sb + mov r2, r5, lsl #0x10 + mov r2, r2, asr #0x10 + mov r3, r8 + bl GetTypeMatchup +_0230B978: + cmp r4, #0 + beq _0230B9A8 + add r1, sp, #0x14 + ldr r0, [r1, r0, lsl #2] + mul r0, r4, r0 + add r0, r0, r0, lsr #31 + movs r4, r0, asr #1 + moveq r0, #2 + beq _0230BB98 + add r5, r5, #1 +_0230B9A0: + cmp r5, #2 + blt _0230B90C +_0230B9A8: + cmp r8, #2 + cmpne r8, #6 + bne _0230B9D4 + mov r0, sl + mov r1, sb + mov r2, #2 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + movne r0, #2 + bne _0230BB98 +_0230B9D4: + cmp r8, #3 + bne _0230BA1C + mov r0, sl + mov r1, #0x10 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230BA1C + ldrsh r2, [r7, #0x12] + ldrsh r1, [r7, #0x16] + ldr r0, _0230BBA8 ; =0x000003E7 + add r2, r2, r1 + cmp r2, r0 + movgt r2, r0 + mov r0, r2, asr #1 + ldrsh r1, [r7, #0x10] + add r0, r2, r0, lsr #30 + cmp r1, r0, asr #2 + movle r4, r4, lsl #1 +_0230BA1C: + cmp r8, #4 + bne _0230BA64 + mov r0, sl + mov r1, #0x1a + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230BA64 + ldrsh r2, [r7, #0x12] + ldrsh r1, [r7, #0x16] + ldr r0, _0230BBA8 ; =0x000003E7 + add r2, r2, r1 + cmp r2, r0 + movgt r2, r0 + mov r0, r2, asr #1 + ldrsh r1, [r7, #0x10] + add r0, r2, r0, lsr #30 + cmp r1, r0, asr #2 + movle r4, r4, lsl #1 +_0230BA64: + cmp r8, #0xc + bne _0230BAAC + mov r0, sl + mov r1, #0x43 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230BAAC + ldrsh r2, [r7, #0x12] + ldrsh r1, [r7, #0x16] + ldr r0, _0230BBA8 ; =0x000003E7 + add r2, r2, r1 + cmp r2, r0 + movgt r2, r0 + mov r0, r2, asr #1 + ldrsh r1, [r7, #0x10] + add r0, r2, r0, lsr #30 + cmp r1, r0, asr #2 + movle r4, r4, lsl #1 +_0230BAAC: + cmp r8, #2 + bne _0230BAF4 + mov r0, sl + mov r1, #0x46 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230BAF4 + ldrsh r2, [r7, #0x12] + ldrsh r1, [r7, #0x16] + ldr r0, _0230BBA8 ; =0x000003E7 + add r2, r2, r1 + cmp r2, r0 + movgt r2, r0 + mov r0, r2, asr #1 + ldrsh r1, [r7, #0x10] + add r0, r2, r0, lsr #30 + cmp r1, r0, asr #2 + movle r4, r4, lsl #1 +_0230BAF4: + cmp r4, #0 + moveq r0, #2 + beq _0230BB98 + mov r0, sl + mov r1, r8 + bl MonsterIsType + cmp r0, #0 + mov r0, sl + movne r4, r4, lsl #1 + bl GetApparentWeather + cmp r0, #1 + bne _0230BB3C + cmp r8, #2 + moveq r4, r4, lsl #1 + beq _0230BB3C + cmp r8, #3 + moveq r0, #2 + beq _0230BB98 +_0230BB3C: + ldr r0, _0230BBA4 ; =DUNGEON_PTR + ldr r1, [r0] + add r0, r1, #0xc000 +#ifdef JAPAN + ldrb r0, [r0, #0xcb7] +#else + ldrb r0, [r0, #0xd5b] +#endif + cmp r0, #0 + beq _0230BB60 + cmp r8, #5 + moveq r0, #2 + beq _0230BB98 +_0230BB60: + add r0, r1, #0xc000 +#ifdef JAPAN + ldrb r0, [r0, #0xcb8] +#else + ldrb r0, [r0, #0xd5c] +#endif + cmp r0, #0 + beq _0230BB7C + cmp r8, #2 + moveq r0, #2 + beq _0230BB98 +_0230BB7C: + cmp r8, #5 + ldreqb r0, [r7, #0xd2] + cmpeq r0, #0xb + moveq r4, r4, lsl #1 + cmp r4, #3 + movge r4, #3 + add r0, r4, #2 +_0230BB98: + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0230BBA0: .word ov29_02352884 +_0230BBA4: .word DUNGEON_PTR +_0230BBA8: .word 0x000003E7 + arm_func_end ov29_0230B7D4 + + arm_func_start CalcDamage +CalcDamage: ; 0x0230BBAC +#ifdef JAPAN +#define CALC_DAMAGE_OFFSET -4 +#else +#define CALC_DAMAGE_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc0 + ldr r4, _0230C450 ; =DUNGEON_PTR + mov sl, r0 + ldr r4, [r4] + ldr r6, [sl, #0xb4] + ldr r8, [sp, #0xec] + str r2, [sp, #0xc] + mov sb, r1 + ldr r1, [sp, #0xf4] + mov r0, r8 + str r1, [sp, #0xf4] + ldr r1, [sp, #0xf8] + str r3, [sp, #0x10] + str r1, [sp, #0xf8] + ldr r1, [sp, #0xf0] + add r5, r4, #0x184 + ldr r7, [sb, #0xb4] + str r1, [sp, #0x1c] + bl ResetDamageData + ldrb r0, [r6, #0x221 + CALC_DAMAGE_OFFSET] + cmp r0, #0 + beq _0230BC1C + ldr r1, _0230C454 ; =ME_FIRST_MULTIPLIER + ldr r0, [sp, #0x1c] + ldr r1, [r1] + bl MultiplyByFixedPoint + str r0, [sp, #0x1c] +_0230BC1C: + mov r0, sl + mov r1, #0x5c + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230BC50 + ldr r0, [sp, #0xf4] + bl IsRecoilMove + cmp r0, #0 + ldrne r0, [sp, #0x1c] + addne r0, r0, r0, lsl #1 + addne r0, r0, r0, lsr #31 + movne r0, r0, asr #1 + strne r0, [sp, #0x1c] +_0230BC50: + mov r0, sl + mov r1, #0x65 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230BC84 + ldr r0, [sp, #0xf4] + bl IsPunchMove + cmp r0, #0 + beq _0230BC84 + ldr r0, [sp, #0x1c] + mov r1, #0x180 + bl MultiplyByFixedPoint + str r0, [sp, #0x1c] +_0230BC84: + mov r0, sl + mov r1, #0x6b + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0xc] + ldr r1, _0230C458 ; =0x000001D3 + ldr r0, [sp, #0xf4] + cmp r0, r1 + ldreqb r0, [r6, #0x5e] + streq r0, [sp, #0xc] + ldr r0, [sp, #0xf4] + bl MoveIsNotPhysical + str r0, [sp, #0x18] + bl ResetDamageCalcDiagnostics + ldrb r0, [r6, #7] + cmp r0, #0 + bne _0230BD34 + add r0, r6, #0x100 + ldrh r1, [r0, #0x46 + CALC_DAMAGE_OFFSET] + sub r2, sp, #4 + strh r1, [r2] + ldrh r0, [r0, #0x48 + CALC_DAMAGE_OFFSET] + strh r0, [r2, #2] + ldr r0, [r2] + bl CeilFixedPoint + cmp r0, #0 + bne _0230BD34 + mov r0, #1 + str r0, [r8] + mov r0, #0 + str r0, [r8, #4] + mov r0, #2 + str r0, [r8, #8] + ldr r0, [sp, #0xf4] + ldr r1, [sp, #0xc] + strb r1, [r8, #0xc] + bl GetMoveCategory + strb r0, [r8, #0xd] + mov r0, #0 + strb r0, [r8, #0xe] + strb r0, [r8, #0xf] + strb r0, [r8, #0x10] + b _0230D054 +_0230BD34: + ldr r1, _0230C45C ; =0x00000163 + ldr r0, [sp, #0xf4] + cmp r0, r1 + bne _0230BDA0 + mov r0, sl + mov r1, sb + mov r2, #0x35 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + beq _0230BDA0 + mov r0, #1 + str r0, [r8] + mov r0, #0 + str r0, [r8, #4] + mov r0, #2 + str r0, [r8, #8] + ldr r0, [sp, #0xf4] + ldr r1, [sp, #0xc] + strb r1, [r8, #0xc] + bl GetMoveCategory + strb r0, [r8, #0xd] + mov r0, #0 + strb r0, [r8, #0xe] + strb r0, [r8, #0xf] + strb r0, [r8, #0x10] + b _0230D054 +_0230BDA0: + ldr r0, [sp, #0xf4] + ldr r1, [sp, #0xc] + strb r1, [r8, #0xc] + bl GetMoveCategory + strb r0, [r8, #0xd] + ldr r0, [sp, #0xc] + mov r4, #0 + strb r0, [r5] + ldr r0, [sp, #0x18] + mov r1, #0x60 + str r0, [r5, #4] + add r0, r6, r0, lsl #2 + ldr r0, [r0, #0x34] + mov fp, r4 + str r0, [sp, #0x3c] + ldr r0, [sp, #0x18] + add r0, r7, r0, lsl #2 + ldr r0, [r0, #0x3c] + str r0, [sp, #0x38] + mov r0, sl + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230BE40 + ldrb r1, [r7, #0x1c] + ldrb r0, [r7, #0x1d] + cmp r1, r0 + blo _0230BE28 + ldr r0, [sp, #0x18] + cmp r0, #1 + ldreqb r0, [r5, #0x32] + addeq r4, r4, #1 + addeq r0, r0, #1 + streqb r0, [r5, #0x32] + b _0230BE40 +_0230BE28: + ldr r0, [sp, #0x18] + cmp r0, #0 + ldreqb r0, [r5, #0x32] + addeq r4, r4, #1 + addeq r0, r0, #1 + streqb r0, [r5, #0x32] +_0230BE40: + ldr r0, [sp, #0xf8] + cmp r0, #0 + ldr r0, [sp, #0x18] + add r0, r6, r0, lsl #1 + ldrsh r0, [r0, #0x24] + str r0, [sp, #0x44] + beq _0230BE70 + ldr r0, [sp, #0xc] + cmp r0, #2 + ldreqsh r0, [r6, #0x30] + streqh r0, [r5, #0x10] + addeq r4, r4, r0 +_0230BE70: + mov r0, sl + mov r1, #0x22 + bl IqSkillIsEnabled + cmp r0, #0 + ldrneb r0, [r5, #0x34] + mov r1, #0x23 + addne r4, r4, #1 + addne r0, r0, #1 + strneb r0, [r5, #0x34] + mov r0, sl + bl IqSkillIsEnabled + cmp r0, #0 + ldrneb r0, [r5, #0x34] + mov r1, #0x3c + subne r4, r4, #1 + subne r0, r0, #1 + strneb r0, [r5, #0x34] + mov r0, sl + bl IqSkillIsEnabled + cmp r0, #0 + ldrneb r0, [r6, #0x166 + CALC_DAMAGE_OFFSET] + mov r1, #0x32 + cmpne r0, #0 + ldrneb r0, [r5, #0x34] + addne r4, r4, #1 + addne r0, r0, #1 + strneb r0, [r5, #0x34] + mov r0, sl + bl NearbyAllyIqSkillIsEnabled + cmp r0, #0 + ldr r0, [sp, #0x18] + addne r4, r4, #1 + cmp r0, #0 + mov r0, sl + bne _0230BFA8 + mov r1, #0x68 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230BF5C + ldrsh r0, [r6, #4] + ldrsh r1, [r7, #4] + bl GendersEqualNotGenderless + cmp r0, #0 + ldrneb r0, [r5, #0x32] + addne r4, r4, #1 + addne r0, r0, #1 + strneb r0, [r5, #0x32] + bne _0230BF5C + ldrsh r0, [r6, #4] + bl GetMonsterGenderVeneer + cmp r0, #3 + beq _0230BF5C + ldrsh r0, [r7, #4] + bl GetMonsterGenderVeneer + cmp r0, #3 + ldrneb r0, [r5, #0x32] + subne r4, r4, #1 + subne r0, r0, #1 + strneb r0, [r5, #0x32] +_0230BF5C: + mov r0, sl + bl GetApparentWeather + cmp r0, #1 + bne _0230C040 + mov r0, sl + mov r1, #0x71 + bl AbilityIsActiveVeneer + cmp r0, #0 + bne _0230BF94 + mov r0, sl + mov r1, #0x71 + bl OtherMonsterAbilityIsActive + cmp r0, #0 + beq _0230C040 +_0230BF94: + add r4, r4, #1 + ldrb r0, [r5, #0x32] + add r0, r0, #1 + strb r0, [r5, #0x32] + b _0230C040 +_0230BFA8: + mov r1, #0x5a + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230BFD4 + mov r0, sl + bl GetApparentWeather + cmp r0, #1 + ldreqb r0, [r5, #0x32] + addeq r4, r4, #2 + addeq r0, r0, #2 + streqb r0, [r5, #0x32] +_0230BFD4: + mov r0, sb + bl GetApparentWeather + cmp r0, #1 + bne _0230C01C + mov r0, sb + mov r1, #0x71 + bl AbilityIsActiveVeneer + cmp r0, #0 + bne _0230C00C + mov r0, sb + mov r1, #0x71 + bl OtherMonsterAbilityIsActive + cmp r0, #0 + beq _0230C01C +_0230C00C: + add fp, fp, #1 + ldrb r0, [r5, #0x33] + add r0, r0, #1 + strb r0, [r5, #0x33] +_0230C01C: + mov r0, sb + bl GetApparentWeather + cmp r0, #2 + bne _0230C040 + ldrb r0, [r7, #0x5e] + cmp r0, #0xd + ldrneb r0, [r7, #0x5f] + cmpne r0, #0xd + addeq fp, fp, #2 +_0230C040: + ldrsh r1, [r6, #4] + ldr r0, _0230C460 ; =0x000001A3 + cmp r1, r0 + addeq r4, r4, #2 + cmp r1, #0x1a4 + ldr r0, _0230C464 ; =0x000001A5 + subeq r4, r4, #2 + cmp r1, r0 + ldr r0, _0230C468 ; =0x00000211 + subeq r4, r4, #2 + cmp r1, r0 + subeq r4, r4, #2 + beq _0230C07C + cmp r1, #0x218 + addeq r4, r4, #2 +_0230C07C: + ldr r0, [sp, #0x44] + add r0, r0, r4 + str r0, [sp, #0x44] + ldrb r0, [r6, #0x167 + CALC_DAMAGE_OFFSET] + cmp r0, #0 + beq _0230C0AC + mov r0, sl + mov r1, #0x4f + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, #0x14 + strne r0, [sp, #0x44] +_0230C0AC: + ldr r0, [sp, #0x18] + cmp r0, #0 + add r0, r7, r0, lsl #1 + ldrsh r4, [r0, #0x28] + bne _0230C0F4 + ldrb r0, [r7, #0xd2] + mov r1, #0x31 + cmp r0, #6 + moveq r0, #1 + streqb r0, [r5, #0x51] + mov r0, sb + addeq fp, fp, #1 + bl IqSkillIsEnabled + cmp r0, #0 + ldrneb r0, [r5, #0x35] + subne fp, fp, #1 + subne r0, r0, #1 + strneb r0, [r5, #0x35] +_0230C0F4: + mov r0, sb + mov r1, #0x22 + bl IqSkillIsEnabled + cmp r0, #0 + ldrneb r0, [r5, #0x35] + mov r1, #0x23 + subne fp, fp, #1 + subne r0, r0, #1 + strneb r0, [r5, #0x35] + mov r0, sb + bl IqSkillIsEnabled + cmp r0, #0 + ldrneb r0, [r5, #0x35] + addne fp, fp, #1 + addne r0, r0, #1 + strneb r0, [r5, #0x35] + ldrsh r1, [r7, #4] + ldr r0, _0230C460 ; =0x000001A3 + cmp r1, r0 + subeq fp, fp, #2 + cmp r1, #0x1a4 + ldr r0, _0230C464 ; =0x000001A5 + addeq fp, fp, #2 + cmp r1, r0 +#ifdef JAPAN + ldrsh r1, [r6, #4] +#endif + ldr r0, _0230C468 ; =0x00000211 + subeq fp, fp, #2 + cmp r1, r0 + addeq fp, fp, #2 + beq _0230C170 + cmp r1, #0x218 + subeq fp, fp, #2 +_0230C170: + ldr r1, _0230C46C ; =0x000001BD + ldr r0, [sp, #0xf4] + add r4, r4, fp + cmp r0, r1 + bne _0230C1F4 + ldrsh r1, [r7, #0x24] + mov r0, #0 + cmp r1, #0xa + subgt r1, r1, #0xa + addgt r0, r0, r1 + movgt r0, r0, lsl #0x10 + ldrsh r1, [r7, #0x28] + movgt r0, r0, asr #0x10 + cmp r1, #0xa + subgt r1, r1, #0xa + addgt r0, r0, r1 + movgt r0, r0, lsl #0x10 + ldrsh r1, [r7, #0x26] + movgt r0, r0, asr #0x10 + cmp r1, #0xa + subgt r1, r1, #0xa + addgt r0, r0, r1 + movgt r0, r0, lsl #0x10 + ldrsh r1, [r7, #0x2a] + movgt r0, r0, asr #0x10 + cmp r1, #0xa + subgt r1, r1, #0xa + addgt r0, r0, r1 + movgt r0, r0, lsl #0x10 + ldr r1, [sp, #0x44] + movgt r0, r0, asr #0x10 + add r0, r1, r0 + str r0, [sp, #0x44] +_0230C1F4: + mov r0, sl + mov r1, #0x67 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, #0x100 + movne r4, #0xa + strne r0, [sp, #0x38] + bne _0230C23C + mov r0, sl + mov r1, sb + mov r2, #0x67 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + movne r0, #0xa + strne r0, [sp, #0x44] + movne r0, #0x100 + strne r0, [sp, #0x3c] +_0230C23C: + ldr r0, [sp, #0x44] + ldr r1, [sp, #0x18] + cmp r0, #0 + movlt r0, #0 + strlt r0, [sp, #0x44] + ldr r0, [sp, #0x44] + ldr r2, _0230C470 ; =OFFENSIVE_STAT_STAGE_MULTIPLIERS + cmp r0, #0x14 + movgt r0, #0x14 + strgt r0, [sp, #0x44] + ldr r0, [sp, #0x44] + strb r0, [r5, #0xa] + add r0, r6, #0x1a + ldrb r3, [r0, r1] + ldr r1, [sp, #0x44] + ldr fp, [r2, r1, lsl #2] + ldr r1, [sp, #0x18] + strh r3, [r5, #0xc] + ldrb r0, [r0, r1] + mov r1, fp + mov r0, r0, lsl #8 + bl MultiplyByFixedPoint + ldr r1, [sp, #0x3c] + bl MultiplyByFixedPoint + mov r0, r0, asr #8 + cmp r4, #0 + movlt r4, #0 + str r0, [sp, #0x90] + cmp r4, #0x14 + movgt r4, #0x14 + ldr r1, [sp, #0x18] + strb r4, [r5, #0xb] + add r0, r7, #0x1c + ldrb r2, [r0, r1] + ldr r1, _0230C474 ; =DEFENSIVE_STAT_STAGE_MULTIPLIERS + strh r2, [r5, #0xe] + ldr r2, [sp, #0x18] + ldr r1, [r1, r4, lsl #2] + ldrb r0, [r0, r2] + mov r0, r0, lsl #8 + bl MultiplyByFixedPoint + ldr r1, [sp, #0x38] + bl MultiplyByFixedPoint + mov r0, r0, asr #8 + str r0, [sp, #0x94] + ldrb r0, [r6, #6] + cmp r0, #0 + bne _0230C314 + ldr r1, [sp, #0x18] + mov r0, sl + bl ExclusiveItemOffenseBoost + ldr r1, [sp, #0x90] + add r0, r1, r0 + str r0, [sp, #0x90] +_0230C314: + ldrb r0, [r7, #6] + cmp r0, #0 + bne _0230C338 + ldr r1, [sp, #0x18] + mov r0, sb + bl ExclusiveItemDefenseBoost + ldr r1, [sp, #0x94] + add r0, r1, r0 + str r0, [sp, #0x94] +_0230C338: + ldr r0, [sp, #0x18] + cmp r0, #0 + bne _0230C4D8 + mov r0, sl + mov r1, #0x1a + bl ItemIsActive__0230A9DC + cmp r0, #0 + beq _0230C378 + ldr r0, _0230C478 ; =POWER_BAND_STAT_BOOST + ldr r1, [sp, #0x90] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x90] + ldrb r0, [r5, #0x30] + add r0, r0, r2 + strb r0, [r5, #0x30] +_0230C378: + mov r0, sl + mov r1, #0x32 + bl ItemIsActive__0230A9DC + cmp r0, #0 + beq _0230C3AC + ldr r0, _0230C47C ; =MUNCH_BELT_STAT_BOOST + ldr r1, [sp, #0x90] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x90] + ldrb r0, [r5, #0x30] + add r0, r0, r2 + strb r0, [r5, #0x30] +_0230C3AC: + mov r0, sl + bl AuraBowIsActive + cmp r0, #0 + beq _0230C3DC + ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST + ldr r1, [sp, #0x90] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x90] + ldrb r0, [r5, #0x31] + add r0, r0, r2 + strb r0, [r5, #0x31] +_0230C3DC: + ldr r0, [sp, #0xf8] + cmp r0, #0 + beq _0230C5E0 + mov r0, sb + mov r1, #0x25 + bl ItemIsActive__0230A9DC + cmp r0, #0 + beq _0230C41C + ldr r0, _0230C484 ; =DEF_SCARF_STAT_BOOST + ldr r1, [sp, #0x94] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x94] + ldrb r0, [r5, #0x36] + add r0, r0, r2 + strb r0, [r5, #0x36] +_0230C41C: + mov r0, sb + bl AuraBowIsActive + cmp r0, #0 + beq _0230C5E0 + ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST + ldr r1, [sp, #0x94] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x94] + ldrb r0, [r5, #0x36] + add r0, r0, r2 + strb r0, [r5, #0x36] + b _0230C5E0 + .align 2, 0 +#ifdef JAPAN +#define CALC_DAMAGE_DATA_OFFSET -0x2C1 +#else +#define CALC_DAMAGE_DATA_OFFSET 0 +#endif +_0230C450: .word DUNGEON_PTR +_0230C454: .word ME_FIRST_MULTIPLIER +_0230C458: .word 0x000001D3 +_0230C45C: .word 0x00000163 +_0230C460: .word 0x000001A3 +_0230C464: .word 0x000001A5 +_0230C468: .word 0x00000211 +_0230C46C: .word 0x000001BD +_0230C470: .word OFFENSIVE_STAT_STAGE_MULTIPLIERS +_0230C474: .word DEFENSIVE_STAT_STAGE_MULTIPLIERS +_0230C478: .word POWER_BAND_STAT_BOOST +_0230C47C: .word MUNCH_BELT_STAT_BOOST +_0230C480: .word AURA_BOW_STAT_BOOST +_0230C484: .word DEF_SCARF_STAT_BOOST +_0230C488: .word ZINC_BAND_STAT_BOOST +_0230C48C: .word SPECIAL_BAND_STAT_BOOST +_0230C490: .word 0x00000C53 + CALC_DAMAGE_DATA_OFFSET +_0230C494: .word 0x00000C54 + CALC_DAMAGE_DATA_OFFSET +_0230C498: .word 0x00000C55 + CALC_DAMAGE_DATA_OFFSET +_0230C49C: .word 0x000003E7 +_0230C4A0: .word DAMAGE_FORMULA_FLV_DEFICIT_DIVISOR +_0230C4A4: .word ov29_02352984 +_0230C4A8: .word ov29_02352990 +_0230C4AC: .word ov29_0235299C +_0230C4B0: .word DAMAGE_FORMULA_AT_PREFACTOR +_0230C4B4: .word DAMAGE_FORMULA_DEF_PREFACTOR +_0230C4B8: .word DAMAGE_FORMULA_FLV_SHIFT +_0230C4BC: .word DAMAGE_FORMULA_LN_ARG_PREFACTOR +_0230C4C0: .word DAMAGE_FORMULA_LN_PREFACTOR +_0230C4C4: .word DAMAGE_FORMULA_CONSTANT_SHIFT +_0230C4C8: .word DAMAGE_FORMULA_NON_TEAM_MEMBER_MODIFIER +_0230C4CC: .word DAMAGE_FORMULA_MAX_BASE +_0230C4D0: .word ov29_02352838 +_0230C4D4: .word DAMAGE_FORMULA_MIN_BASE +_0230C4D8: + ldr r0, [sp, #0xf8] + cmp r0, #0 + beq _0230C548 + mov r0, sb + mov r1, #0x29 + bl ItemIsActive__0230A9DC + cmp r0, #0 + beq _0230C518 + ldr r0, _0230C488 ; =ZINC_BAND_STAT_BOOST + ldr r1, [sp, #0x94] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x94] + ldrb r0, [r5, #0x37] + add r0, r0, r2 + strb r0, [r5, #0x37] +_0230C518: + mov r0, sb + bl AuraBowIsActive + cmp r0, #0 + beq _0230C548 + ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST + ldr r1, [sp, #0x94] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x94] + ldrb r0, [r5, #0x36] + add r0, r0, r2 + strb r0, [r5, #0x36] +_0230C548: + mov r0, sl + mov r1, #0x28 + bl ItemIsActive__0230A9DC + cmp r0, #0 + beq _0230C57C + ldr r0, _0230C48C ; =SPECIAL_BAND_STAT_BOOST + ldr r1, [sp, #0x90] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x90] + ldrb r0, [r5, #0x31] + add r0, r0, r2 + strb r0, [r5, #0x31] +_0230C57C: + mov r0, sl + mov r1, #0x32 + bl ItemIsActive__0230A9DC + cmp r0, #0 + beq _0230C5B0 + ldr r0, _0230C47C ; =MUNCH_BELT_STAT_BOOST + ldr r1, [sp, #0x90] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x90] + ldrb r0, [r5, #0x31] + add r0, r0, r2 + strb r0, [r5, #0x31] +_0230C5B0: + mov r0, sb + bl AuraBowIsActive + cmp r0, #0 + beq _0230C5E0 + ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST + ldr r1, [sp, #0x90] + ldrsh r2, [r0] + add r0, r1, r2 + str r0, [sp, #0x90] + ldrb r0, [r5, #0x31] + add r0, r0, r2 + strb r0, [r5, #0x31] +_0230C5E0: + ldr r0, [sp, #0x10] + mov r1, fp + mov r0, r0, lsl #8 + bl MultiplyByFixedPoint + ldr r1, [sp, #0x3c] + bl MultiplyByFixedPoint + mov r1, r0 + add r0, sp, #0xa0 + bl FixedPoint32To64 + mov r0, #0x64 + bl DungeonRandInt + mov r4, #1 + str r0, [sp, #0x40] + add r0, r6, #0x100 + ldrh r1, [r0, #0x5a + CALC_DAMAGE_OFFSET] + mov fp, r4 + str r4, [sp, #0x28] + bic r1, r1, #0x100 + strh r1, [r0, #0x5a + CALC_DAMAGE_OFFSET] + ldrh r1, [r0, #0x58 + CALC_DAMAGE_OFFSET] + str r4, [sp, #0x2c] + bic r1, r1, #0x100 + strh r1, [r0, #0x58 + CALC_DAMAGE_OFFSET] + ldr r0, [sp, #0xf4] + bl MoveIsNotPhysical + str r0, [sp, #0x30] + cmp r0, #0 + bne _0230C6B8 + mov r0, sl + mov r1, #0x11 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230C6B8 + ldr r0, [sl, #0xb4] + mov r1, r4 + str r0, [sp, #0x24] + mov r0, sl + bl MonsterHasNegativeStatus + str r0, [sp, #0x48] + ldr r0, [sp, #0x24] + ldr r2, [sp, #0x48] + mov r1, r4 + bl UpdateStateFlags + ldr r1, [sp, #0x48] + cmp r1, #0 + movne r4, r4, lsl #1 + cmp r0, #0 + beq _0230C6B8 + mov r0, sl + bl PlayEffectAnimation0x1A9__022E6130 + mov r0, sl + mov r1, sb + ldr r2, _0230C490 ; =0x00000C53 + bl LogMessageByIdWithPopupCheckUserTarget +_0230C6B8: + mov r0, sl + mov r1, #0x22 + bl AbilityIsActiveVeneer + cmp r0, #0 + bne _0230C6E0 + mov r0, sl + mov r1, #0x4b + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230C748 +_0230C6E0: + ldr r0, [sp, #0x40] + cmp r0, #0x21 + ldr r0, [sl, #0xb4] + bge _0230C700 + ldr r1, [sp, #0x30] + cmp r1, #0 + moveq r1, #1 + beq _0230C704 +_0230C700: + mov r1, #0 +_0230C704: + and r1, r1, #0xff + str r1, [sp, #0x34] + ldr r2, [sp, #0x34] + mov r1, #0x100 + bl UpdateStateFlags + ldr r1, [sp, #0x34] + cmp r1, #0 + addne r4, r4, r4, lsl #1 + movne fp, fp, lsl #1 + cmp r0, #0 + beq _0230C748 + mov r0, sl + bl PlayEffectAnimation0x1A9__022E617C + mov r0, sl + mov r1, sb + ldr r2, _0230C494 ; =0x00000C54 + bl LogMessageByIdWithPopupCheckUserTarget +_0230C748: + mov r0, sl + mov r1, #0x30 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230C76C + ldr r0, [sp, #0x30] + cmp r0, #0 + addeq r4, r4, r4, lsl #1 + moveq fp, fp, lsl #1 +_0230C76C: + ldr r0, [sl, #0xb4] + mov r1, #0x38 + ldrb r0, [r0, #6] + cmp r0, #0 + moveq r0, #1 + streq r0, [sp, #0x14] + movne r0, #0 + strne r0, [sp, #0x14] + mov r0, sl + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230C7D4 + ldr r0, [sp, #0x30] + cmp r0, #1 + bne _0230C7D4 + ldr r0, _0230C450 ; =DUNGEON_PTR + ldr r1, [r0] + ldr r0, [sp, #0x14] + add r0, r1, r0 + add r0, r0, #0x3000 +#ifdef JAPAN + ldrb r0, [r0, #0xd92] +#else + ldrb r0, [r0, #0xe36] +#endif + cmp r0, #0 + movne r0, #0xa + mulne r0, fp, r0 + rsbne r4, r4, r4, lsl #4 + movne fp, r0 +_0230C7D4: + mov r0, sl + mov r1, #0x3f + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230C820 + ldr r0, [sp, #0x30] + cmp r0, #1 + bne _0230C820 + ldr r0, _0230C450 ; =DUNGEON_PTR + ldr r1, [r0] + ldr r0, [sp, #0x14] + add r0, r1, r0 + add r0, r0, #0x3000 +#ifdef JAPAN + ldrb r0, [r0, #0xd90] +#else + ldrb r0, [r0, #0xe34] +#endif + cmp r0, #0 + movne r0, #0xa + mulne r0, fp, r0 + rsbne r4, r4, r4, lsl #4 + movne fp, r0 +_0230C820: + mov r0, sl + mov r1, sb + mov r2, #6 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + beq _0230C84C + ldr r0, [sp, #0x30] + cmp r0, #0 + moveq r4, r4, lsl #2 + addeq fp, fp, fp, lsl #2 +_0230C84C: + mov r0, sl + mov r1, sb + mov r2, #0x34 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + beq _0230C8E0 + ldr r0, [sp, #0x30] + cmp r0, #0 + bne _0230C8E0 + ldr r0, [sb, #0xb4] + mov r1, #1 + str r0, [sp, #0x20] + mov r0, sb + bl MonsterHasNegativeStatus + str r0, [sp, #0x4c] + ldr r0, [sp, #0x20] + ldr r2, [sp, #0x4c] + mov r1, #8 + bl UpdateStateFlags + ldr r1, [sp, #0x4c] + cmp r1, #0 + beq _0230C8C0 + ldr r1, [sp, #0x28] + add r1, r1, r1, lsl #1 + str r1, [sp, #0x28] + ldr r1, [sp, #0x2c] + mov r1, r1, lsl #1 + str r1, [sp, #0x2c] +_0230C8C0: + cmp r0, #0 + beq _0230C8E0 + mov r0, sb + bl PlayEffectAnimation0x18E + mov r0, sl + mov r1, sb + ldr r2, _0230C498 ; =0x00000C55 + bl LogMessageByIdWithPopupCheckUserTarget +_0230C8E0: + add r0, sp, #0x90 + ldr r2, [r0] + add r1, sp, #0x94 + mul r0, r2, r4 + ldr r3, [r1] + ldr r2, [sp, #0x28] + cmp fp, #1 + mul r2, r3, r2 + str r2, [r1] + add r1, sp, #0x90 + str r0, [r1] + beq _0230C920 + mov r1, fp + bl _s32_div_f + add r1, sp, #0x90 + str r0, [r1] +_0230C920: + ldr r0, [sp, #0x2c] + cmp r0, #1 + beq _0230C940 + add r4, sp, #0x94 + mov r1, r0 + ldr r0, [r4] + bl _s32_div_f + str r0, [r4] +_0230C940: + ldr r0, [sp, #0x90] + strh r0, [r5, #0x12] + ldr r0, [sp, #0x94] + strh r0, [r5, #0x14] + ldr r0, [sp, #0x90] + cmp r0, #0 + movlt r0, #0 + strlt r0, [sp, #0x90] + ldr r1, [sp, #0x90] + ldr r0, _0230C49C ; =0x000003E7 + cmp r1, r0 + strge r0, [sp, #0x90] + ldr r1, [sp, #0x94] + add r0, sp, #0x98 + strh r1, [r5, #0x1a] + ldr r1, [sp, #0x94] + bl IntToFixedPoint64 + ldr r2, [sp, #0x90] + ldr r1, [sp, #0x94] + add r0, sp, #0x88 + sub r1, r2, r1 + bl IntToFixedPoint64 + ldr r1, _0230C4A0 ; =DAMAGE_FORMULA_FLV_DEFICIT_DIVISOR + add r0, sp, #0x80 + ldr r1, [r1] + bl FixedPoint32To64 + add r0, sp, #0x88 + add r2, sp, #0x80 + mov r1, r0 + bl DivideFixedPoint64 + ldrb r1, [r6, #0xa] + add r0, sp, #0x80 + bl IntToFixedPoint64 + add r0, sp, #0xa8 + add r1, sp, #0x80 + add r2, sp, #0x88 + bl AddFixedPoint64 + ldr r1, [sp, #0x90] + add r0, sp, #0x80 + bl IntToFixedPoint64 + add r0, sp, #0xa0 + add r2, sp, #0x80 + mov r1, r0 + bl AddFixedPoint64 + add r0, sp, #0xa0 + bl FixedPoint64ToInt + strh r0, [r5, #0x18] + ldrb r1, [r6, #0xa] + add r0, sp, #0xa8 + strh r1, [r5, #0x16] + bl FixedPoint64ToInt + strh r0, [r5, #0x1c] + add r0, sp, #0xa8 + bl FixedPoint64ToInt + mov r1, r0 + ldr r0, _0230C4A4 ; =ov29_02352984 + bl Debug_Print0 + add r0, sp, #0xa0 + bl FixedPoint64ToInt + mov r1, r0 + ldr r0, _0230C4A8 ; =ov29_02352990 + bl Debug_Print0 + add r0, sp, #0x98 + bl FixedPoint64ToInt + mov r1, r0 + ldr r0, _0230C4AC ; =ov29_0235299C + bl Debug_Print0 + ldr r1, _0230C4B0 ; =DAMAGE_FORMULA_AT_PREFACTOR + add r0, sp, #0x70 + ldr r1, [r1] + bl FixedPoint32To64 + add r0, sp, #0x70 + add r1, sp, #0xa0 + mov r2, r0 + bl MultiplyFixedPoint64 + ldr r1, _0230C4B4 ; =DAMAGE_FORMULA_DEF_PREFACTOR + add r0, sp, #0x68 + ldr r1, [r1] + bl FixedPoint32To64 + add r0, sp, #0x68 + add r1, sp, #0x98 + mov r2, r0 + bl MultiplyFixedPoint64 + ldr r1, _0230C4B8 ; =DAMAGE_FORMULA_FLV_SHIFT + add r0, sp, #0x78 + ldr r1, [r1] + bl FixedPoint32To64 + add r0, sp, #0x60 + add r1, sp, #0xa8 + add r2, sp, #0x78 + bl AddFixedPoint64 + ldr r1, _0230C4BC ; =DAMAGE_FORMULA_LN_ARG_PREFACTOR + add r0, sp, #0x78 + ldr r1, [r1] + bl FixedPoint32To64 + add r0, sp, #0x60 + add r2, sp, #0x78 + mov r1, r0 + bl MultiplyFixedPoint64 + add r0, sp, #0x60 + bl FixedPoint64ToInt + mov r1, r0 + add r0, sp, #0x60 + bl ClampedLn + ldr r1, _0230C4C0 ; =DAMAGE_FORMULA_LN_PREFACTOR + add r0, sp, #0x78 + ldr r1, [r1] + bl FixedPoint32To64 + add r0, sp, #0x60 + add r2, sp, #0x78 + mov r1, r0 + bl MultiplyFixedPoint64 + add r0, sp, #0xb0 + add r1, sp, #0x68 + add r2, sp, #0x70 + bl AddFixedPoint64 + add r0, sp, #0xb0 + add r2, sp, #0x60 + mov r1, r0 + bl AddFixedPoint64 + ldr r1, _0230C4C4 ; =DAMAGE_FORMULA_CONSTANT_SHIFT + add r0, sp, #0x78 + ldr r1, [r1] + bl FixedPoint32To64 + add r0, sp, #0xb0 + add r2, sp, #0x78 + mov r1, r0 + bl AddFixedPoint64 + bl FixedRoomIsSubstituteRoom + cmp r0, #0 + bne _0230CB78 + ldrb r0, [r6, #6] + cmp r0, #0 + beq _0230CB78 + ldr r1, _0230C4C8 ; =DAMAGE_FORMULA_NON_TEAM_MEMBER_MODIFIER + add r0, sp, #0x78 + ldr r1, [r1] + bl FixedPoint32To64 + add r0, sp, #0xb0 + add r2, sp, #0x78 + mov r1, r0 + bl DivideFixedPoint64 +_0230CB78: + ldr r0, _0230C4CC ; =DAMAGE_FORMULA_MAX_BASE + add r1, sp, #0xb0 + bl FixedPoint64CmpLt + cmp r0, #0 + ldrne r0, _0230C4D0 ; =ov29_02352838 + ldrne r1, [r0, #0x38] + ldrne r0, [r0, #0x34] + strne r1, [sp, #0xb4] + strne r0, [sp, #0xb0] + ldr r1, _0230C4D4 ; =DAMAGE_FORMULA_MIN_BASE + add r0, sp, #0xb0 + bl FixedPoint64CmpLt + cmp r0, #0 + ldrne r0, _0230C4D0 ; =ov29_02352838 + ldrne r1, [r0, #0x48] + ldrne r0, [r0, #0x44] + strne r1, [sp, #0xb4] + strne r0, [sp, #0xb0] + ldr r0, [sp, #0xf4] + bl IsRegularAttackOrProjectile + cmp r0, #0 + ldr r0, [sp, #0xc] + movne r1, #1 + str r0, [sp] + moveq r1, #0 + and r1, r1, #0xff + str r8, [sp, #4] + str r1, [sp, #8] + ldr r3, [sp, #0x10] + add r0, sp, #0xb8 + mov r1, sl + mov r2, sb + bl CalcTypeBasedDamageEffects + mov fp, r0 + ldr r0, [sp, #0xc] + cmp r0, #2 + bne _0230CC78 + mov r0, sl + mov r1, sb + bl FlashFireShouldActivate + movs r4, r0 + beq _0230CC78 + ldrb r0, [r7, #0x15c + CALC_DAMAGE_OFFSET] + cmp r0, #0 + bne _0230CC78 + ldr r0, [sp, #0xf8] + cmp r0, #0 + beq _0230CC78 + mov r0, #1 + mov r1, sb + strb r0, [r7, #0x15c + CALC_DAMAGE_OFFSET] + mov r2, #0 + bl SubstitutePlaceholderStringTags + cmp r4, #1 + bne _0230CC68 + ldr r2, _0230D05C ; =0x00000C58 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + b _0230CC78 +_0230CC68: + ldr r2, _0230D060 ; =0x00000C57 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_0230CC78: + ldr r0, [sp, #0xf8] + cmp r0, #0 + beq _0230CD3C + mov r0, sl + mov r1, #0x44 + bl ExclusiveItemEffectIsActive__0230A9B8 + cmp r0, #0 + bne _0230CD3C + ldr r0, [sp, #0x18] + cmp r0, #0 + bne _0230CCF0 + ldr r0, [sp, #0xf4] + cmp r0, #0x48 + beq _0230CCBC + ldrb r0, [r7, #0xd5] + cmp r0, #1 + beq _0230CCD0 +_0230CCBC: + mov r0, sb + mov r1, #0x1e + bl ExclusiveItemEffectIsActive__0230A9B8 + cmp r0, #0 + beq _0230CCF0 +_0230CCD0: + mov r0, sb + bl PlayEffectAnimation0x171 + add r0, sp, #0xb8 + ldr r2, _0230D064 ; =DAMAGE_MULTIPLIER_0_5 + mov r1, r0 + bl MultiplyFixedPoint64 + mov r0, #1 + strb r0, [r5, #0x3a] +_0230CCF0: + ldr r0, [sp, #0x18] + cmp r0, #1 + bne _0230CD3C + ldrb r0, [r7, #0xd5] + cmp r0, #3 + beq _0230CD1C + mov r0, sb + mov r1, #0x1f + bl ExclusiveItemEffectIsActive__0230A9B8 + cmp r0, #0 + beq _0230CD3C +_0230CD1C: + mov r0, sb + bl PlayEffectAnimation0x171Full + add r0, sp, #0xb8 + ldr r2, _0230D064 ; =DAMAGE_MULTIPLIER_0_5 + mov r1, r0 + bl MultiplyFixedPoint64 + mov r0, #1 + strb r0, [r5, #0x3b] +_0230CD3C: + ldrb r0, [r7, #0xd5] + cmp r0, #0x11 + beq _0230CEEC + mov r0, sl + mov r1, sb + mov r2, #0xc +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + bne _0230CEEC + mov r0, sl + mov r1, sb + mov r2, #0x13 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + bne _0230CEEC + mov r0, sb + mov r1, #0x40 + bl IqSkillIsEnabled + cmp r0, #0 + bne _0230CEEC + ldrsh r0, [r6, #2] + bl GetMonsterGenderVeneer + cmp r0, #2 + ldrne r1, [sp, #0xe8] + ldreq r4, [sp, #0xe8] + addne r0, r1, r1, lsr #31 + addne r4, r1, r0, asr #1 + ldrb r0, [r6, #0xec] + cmp r0, #4 + moveq r0, #1 + streqb r0, [r5, #0x3c] + ldreq r4, _0230C49C ; =0x000003E7 + beq _0230CE74 + mov r0, sl + mov r1, #0x13 + bl ItemIsActive__0230A9DC + cmp r0, #0 + bne _0230CDF0 + mov r0, sl + mov r1, #0x1d + bl IqSkillIsEnabled + cmp r0, #0 + beq _0230CE04 +_0230CDF0: + ldr r0, _0230D068 ; =SCOPE_LENS_CRIT_RATE_BOOST + mov r1, #1 + ldrsh r0, [r0] + strb r1, [r5, #0x38] + add r4, r4, r0 +_0230CE04: + mov r0, sl + mov r1, #0x58 + bl AbilityIsActiveVeneer + cmp r0, #0 + ldrne r0, _0230D06C ; =SUPER_LUCK_CRIT_RATE_BOOST + movne r1, #1 + ldrnesh r0, [r0] + strneb r1, [r5, #0x49] + mov r1, #0x14 + addne r4, r4, r0 + mov r0, sb + bl ItemIsActive__0230A9DC + cmp r0, #0 + ldrne r0, _0230D068 ; =SCOPE_LENS_CRIT_RATE_BOOST + movne r1, #1 + ldrnesh r0, [r0] + strneb r1, [r5, #0x39] + addne r4, r4, r0 + cmp fp, #0 + beq _0230CE74 + mov r0, sl + mov r1, #1 + bl IqSkillIsEnabled + cmp r0, #0 + ldrne r0, _0230D070 ; =TYPE_ADVANTAGE_MASTER_CRIT_RATE + movne r1, #1 + ldrnesh r4, [r0] + strneb r1, [r5, #0x3d] +_0230CE74: + mov r0, #0x64 + bl DungeonRandInt + cmp r0, r4 + bge _0230CEEC + mov r2, #1 + mov r4, #5 + mov r0, sl + mov r1, sb +#ifdef JAPAN + add r3, r2, #0xb00 +#else + add r3, r2, #0xdc0 +#endif + str r4, [sp] + bl ExclusiveItemEffectIsActiveWithLogging + cmp r0, #0 + bne _0230CEEC + mov r2, #1 + mov r0, sl + mov r1, #0x5d + strb r2, [r8, #0xe] + bl AbilityIsActiveVeneer + cmp r0, #0 + add r0, sp, #0xb8 + beq _0230CEE0 + ldr r2, _0230D074 ; =DAMAGE_MULTIPLIER_2 + mov r1, r0 + bl MultiplyFixedPoint64 + mov r0, #1 + strb r0, [r5, #0x4a] + b _0230CEEC +_0230CEE0: + ldr r2, _0230D078 ; =DAMAGE_MULTIPLIER_1_5 + mov r1, r0 + bl MultiplyFixedPoint64 +_0230CEEC: + add r0, sp, #0xb0 + bl FixedPoint64ToInt + str r0, [r5, #0x24] + add r0, sp, #0xb0 + add r2, sp, #0xb8 + mov r1, r0 + bl MultiplyFixedPoint64 + ldr r1, [sp, #0x1c] + add r0, sp, #0x58 + mov r2, r1 + str r2, [r5, #0x2c] + bl FixedPoint32To64 + add r0, sp, #0xb0 + add r2, sp, #0x58 + mov r1, r0 + bl MultiplyFixedPoint64 + add r0, sp, #0xb0 + bl FixedPoint64ToInt + str r0, [r5, #0x20] + mov r0, #0x4000 + bl DungeonRandInt + add r0, r0, #0xe000 + mov r1, #0 + str r0, [sp, #0xbc] + add r0, sp, #0xb0 + str r1, [sp, #0xb8] + add r2, sp, #0xb8 + mov r1, r0 + bl MultiplyFixedPoint64 + add r0, sp, #0x50 + mov r1, #0x64 + bl IntToFixedPoint64 + add r0, sp, #0xb8 + add r1, sp, #0x50 + mov r2, r0 + bl MultiplyFixedPoint64 + add r0, sp, #0xb8 + bl FixedPoint64ToInt + str r0, [r5, #0x28] + add r0, sp, #0xb0 + bl FixedPoint64ToInt + str r0, [r8] + ldr r1, _0230D07C ; =0x00000195 + ldr r0, [sp, #0xf4] + cmp r0, r1 + bne _0230CFBC + ldr r0, [r8] + mov r1, #0x80 + mov r0, r0, lsl #8 + bl MultiplyByFixedPoint + bl RoundUpDiv256 + str r0, [r8] +_0230CFBC: + ldr r1, _0230D07C ; =0x00000195 + ldr r0, [sp, #0xf4] + cmp r0, r1 + bne _0230CFFC + mov r0, sl + mov r1, #0x2f + bl IqSkillIsEnabled + cmp r0, #0 + beq _0230CFFC + ldr r0, _0230D080 ; =POWER_PITCHER_DAMAGE_MULTIPLIER + ldr r2, [r8] + ldr r1, [r0] + mov r0, r2, lsl #8 + bl MultiplyByFixedPoint + bl RoundUpDiv256 + str r0, [r8] +_0230CFFC: + ldr r0, [r8] + cmp r0, #0 + ble _0230D038 + mov r0, sl + mov r1, #0x5b + bl ExclusiveItemEffectIsActive__0230A9B8 + cmp r0, #0 + beq _0230D038 + ldr r0, _0230D084 ; =AIR_BLADE_DAMAGE_MULTIPLIER + ldr r2, [r8] + ldr r1, [r0] + mov r0, r2, lsl #8 + bl MultiplyByFixedPoint + bl RoundUpDiv256 + str r0, [r8] +_0230D038: + mov r1, #0 + str r1, [r8, #4] + ldr r0, [r8] + cmp r0, #0 + streqb r1, [r8, #0xe] + ldrb r0, [r8, #0xe] + strb r0, [r7, #0x167 + CALC_DAMAGE_OFFSET] +_0230D054: + add sp, sp, #0xc0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0230D05C: .word 0x00000C58 + CALC_DAMAGE_DATA_OFFSET +_0230D060: .word 0x00000C57 + CALC_DAMAGE_DATA_OFFSET +_0230D064: .word DAMAGE_MULTIPLIER_0_5 +_0230D068: .word SCOPE_LENS_CRIT_RATE_BOOST +_0230D06C: .word SUPER_LUCK_CRIT_RATE_BOOST +_0230D070: .word TYPE_ADVANTAGE_MASTER_CRIT_RATE +_0230D074: .word DAMAGE_MULTIPLIER_2 +_0230D078: .word DAMAGE_MULTIPLIER_1_5 +_0230D07C: .word 0x00000195 +_0230D080: .word POWER_PITCHER_DAMAGE_MULTIPLIER +_0230D084: .word AIR_BLADE_DAMAGE_MULTIPLIER + arm_func_end CalcDamage + + arm_func_start ov29_0230D088 +ov29_0230D088: ; 0x0230D088 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x1c + ldr r5, [sp, #0x2c] + ldr r4, [sp, #0x28] + mov lr, r0 + strb r2, [r5, #0xc] + cmp r4, #1 + strb r3, [r5, #0xd] + mov ip, r1 + str r2, [sp] + mov r2, ip + ldr r0, _0230D118 ; =0x000003E7 + movlt r4, #1 + cmp r4, r0 + movgt r4, r0 + add r0, sp, #0x14 + mov r1, lr + mov r3, r4 + str r5, [sp, #4] + mov ip, #0 + str ip, [sp, #8] + bl CalcTypeBasedDamageEffects + add r0, sp, #0xc + mov r1, r4 + bl IntToFixedPoint64 + add r0, sp, #0xc + add r2, sp, #0x14 + mov r1, r0 + bl MultiplyFixedPoint64 + add r0, sp, #0xc + bl FixedPoint64ToInt + str r0, [r5] + mov r0, #0 + str r0, [r5, #4] + add sp, sp, #0x1c + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_0230D118: .word 0x000003E7 + arm_func_end ov29_0230D088 + + arm_func_start ApplyDamageAndEffectsWrapper +ApplyDamageAndEffectsWrapper: ; 0x0230D11C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xdc + mov r7, r0 + add r0, sp, #0x10 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl ResetDamageData + add r0, sp, #0x24 + bl ov29_022E2470 + mov r3, #0 + mov r0, #2 + str r0, [sp, #0x18] + str r6, [sp, #0x10] + str r5, [sp, #0x14] + strb r3, [sp, #0x1c] + strb r3, [sp, #0x1e] + strb r3, [sp, #0x1f] + strb r3, [sp, #0x20] + stmia sp, {r3, r4} + str r3, [sp, #8] + mov r1, r7 + add r0, sp, #0x24 + add r2, sp, #0x10 + str r3, [sp, #0xc] + bl ApplyDamageAndEffects + add sp, sp, #0xdc + ldmia sp!, {r4, r5, r6, r7, pc} + arm_func_end ApplyDamageAndEffectsWrapper + + arm_func_start CalcRecoilDamageFixed +CalcRecoilDamageFixed: ; 0x0230D18C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0x1c + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl EntityIsValid__02308FBC + cmp r0, #0 + beq _0230D238 + ldr r0, [r7] + cmp r0, #1 + bne _0230D1F0 + ldr r0, [r7, #0xb4] + ldrsh r0, [r0, #0x10] + cmp r0, #0 + beq _0230D238 + mov r0, r7 + mov r1, #0x5c + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0230D1F0 + mov r0, r6, lsl #8 + mov r1, #0x180 + bl MultiplyByFixedPoint + mov r6, r0, asr #8 +_0230D1F0: + ldrb r1, [sp, #0x34] + str r4, [sp] + ldrsh r0, [sp, #0x38] + str r1, [sp, #4] + mov r1, #3 + str r1, [sp, #8] + ldr r1, [sp, #0x3c] + str r0, [sp, #0xc] + ldr r0, [sp, #0x40] + str r1, [sp, #0x10] + ldr r4, [sp, #0x44] + str r0, [sp, #0x14] + mov r0, r7 + mov r1, r7 + mov r2, r6 + mov r3, r5 + str r4, [sp, #0x18] + bl CalcDamageFixed +_0230D238: + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, pc} + arm_func_end CalcRecoilDamageFixed + + arm_func_start CalcDamageFixed +CalcDamageFixed: ; 0x0230D240 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x2c + mov sl, r0 + add r0, sp, #0x18 + mov sb, r1 + mov r8, r2 + mov r7, r3 + ldr r6, [sp, #0x54] + bl ResetDamageData + mov r5, #0 + ldrb r0, [sp, #0x58] + ldr r1, [sp, #0x60] + mov r2, #2 + str r2, [sp, #0x20] + str r1, [sp, #0x1c] + strb r6, [sp, #0x24] + strb r5, [sp, #0x26] + strb r5, [sp, #0x27] + strb r0, [sp, #0x25] + cmp r6, #0 + beq _0230D2F8 + add r4, sp, #0x10 +_0230D298: + mov r2, r5, lsl #0x10 + mov r0, sl + mov r1, sb + mov r3, r6 + mov r2, r2, asr #0x10 + bl GetTypeMatchup + str r0, [r4, r5, lsl #2] + add r5, r5, #1 + cmp r5, #2 + blt _0230D298 + mov r0, sl + mov r1, sb + mov r2, #0x35 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__0230A940 + cmp r0, #0 + beq _0230D2F8 + ldr r2, [sp, #0x10] + ldr r0, _0230D39C ; =TYPE_MATCHUP_COMBINATOR_TABLE + ldr r1, [sp, #0x14] + add r0, r0, r2, lsl #4 + ldr r0, [r0, r1, lsl #2] + cmp r0, #3 + movne r8, #0 +_0230D2F8: + ldrsh r1, [sp, #0x5c] + ldr r0, _0230D3A0 ; =0x00000256 + mov r8, r8, lsl #8 + cmp r1, r0 + bne _0230D334 + mov r0, sl + mov r1, #0x2f + bl IqSkillIsEnabled + cmp r0, #0 + beq _0230D334 + ldr r1, _0230D3A4 ; =POWER_PITCHER_DAMAGE_MULTIPLIER + mov r0, r8 + ldr r1, [r1] + bl MultiplyByFixedPoint + mov r8, r0 +_0230D334: + mov r0, r8 + bl RoundUpDiv256 + str r0, [sp, #0x18] + cmp r8, #0 + moveq r0, #1 + streqb r0, [sp, #0x28] + movne r0, #0 + strneb r0, [sp, #0x28] + ldrsh r1, [sp, #0x5c] + str r7, [sp] + ldr r0, [sp, #0x64] + str r1, [sp, #4] + str r0, [sp, #8] + ldr r4, [sp, #0x68] + add r2, sp, #0x18 + mov r0, sl + mov r1, sb + mov r3, #0 + str r4, [sp, #0xc] + bl ApplyDamageAndEffects + ldr r1, [sp, #0x50] + cmp r1, #0 + ldrneb r0, [sp, #0x28] + strneb r0, [r1] + add sp, sp, #0x2c + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_0230D39C: .word TYPE_MATCHUP_COMBINATOR_TABLE +_0230D3A0: .word 0x00000256 +_0230D3A4: .word POWER_PITCHER_DAMAGE_MULTIPLIER + arm_func_end CalcDamageFixed + + arm_func_start CalcDamageFixedNoCategory +CalcDamageFixedNoCategory: ; 0x0230D3A8 + stmdb sp!, {lr} + sub sp, sp, #0x1c + ldr lr, [sp, #0x20] + ldrb ip, [sp, #0x24] + str lr, [sp] + ldrsh lr, [sp, #0x28] + str ip, [sp, #4] + mov ip, #3 + str ip, [sp, #8] + ldr ip, [sp, #0x2c] + str lr, [sp, #0xc] + ldr lr, [sp, #0x30] + str ip, [sp, #0x10] + ldr ip, [sp, #0x34] + str lr, [sp, #0x14] + str ip, [sp, #0x18] + bl CalcDamageFixed + add sp, sp, #0x1c + ldmia sp!, {pc} + arm_func_end CalcDamageFixedNoCategory + + arm_func_start CalcDamageFixedWrapper +CalcDamageFixedWrapper: ; 0x0230D3F4 + stmdb sp!, {lr} + sub sp, sp, #0x1c + ldr ip, [sp, #0x20] + ldrb lr, [sp, #0x24] + str ip, [sp] + ldrb ip, [sp, #0x28] + str lr, [sp, #4] + ldrsh lr, [sp, #0x2c] + str ip, [sp, #8] + ldr ip, [sp, #0x30] + str lr, [sp, #0xc] + ldr lr, [sp, #0x34] + str ip, [sp, #0x10] + ldr ip, [sp, #0x38] + str lr, [sp, #0x14] + str ip, [sp, #0x18] + bl CalcDamageFixed + add sp, sp, #0x1c + ldmia sp!, {pc} + arm_func_end CalcDamageFixedWrapper + + arm_func_start UpdateShopkeeperModeAfterAttack +UpdateShopkeeperModeAfterAttack: ; 0x0230D440 + ldr r2, [r1, #0xb4] + ldrb r1, [r2, #9] + cmp r1, #0 + bxeq lr + ldr r1, [r0] + cmp r1, #1 + bxne lr + ldr r0, [r0, #0xb4] + ldrb r0, [r0, #6] + cmp r0, #0 + movne r0, #2 + strneb r0, [r2, #9] + moveq r0, #3 + streqb r0, [r2, #9] + bx lr + arm_func_end UpdateShopkeeperModeAfterAttack + + arm_func_start UpdateShopkeeperModeAfterTrap +UpdateShopkeeperModeAfterTrap: ; 0x0230D47C + ldr r2, [r0, #0xb4] + ldrb r0, [r2, #9] + cmp r0, #0 + bxeq lr + cmp r1, #0 + movne r0, #2 + strneb r0, [r2, #9] + moveq r0, #3 + streqb r0, [r2, #9] + bx lr + arm_func_end UpdateShopkeeperModeAfterTrap + + arm_func_start ov29_0230D4A4 +ov29_0230D4A4: ; 0x0230D4A4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r1, #0xe + mov r5, r2 + ldr r4, [r6, #0xb4] + bl MonsterIsType + cmp r0, #0 + beq _0230D4E8 + cmp r5, #1 + cmpne r5, #7 + bne _0230D4E8 + ldrb r0, [r4, #0xfe] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} +_0230D4E8: + mov r4, #0 + b _0230D518 +_0230D4F0: + mov r2, r4, lsl #0x10 + mov r0, r7 + mov r1, r6 + mov r3, r5 + mov r2, r2, asr #0x10 + bl GetTypeMatchup + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + add r4, r4, #1 +_0230D518: + cmp r4, #2 + blt _0230D4F0 + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ov29_0230D4A4 + + arm_func_start ResetDamageCalcDiagnostics +ResetDamageCalcDiagnostics: ; 0x0230D528 + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _0230D614 ; =DUNGEON_PTR + mov r1, #0x54 + ldr r4, [r0] + add r5, r4, #0x184 + mov r0, r5 + bl MemZero + mov r1, #0 + strb r1, [r4, #0x184] + str r1, [r5, #4] + strb r1, [r5, #8] + strb r1, [r5, #9] + mov r0, #0xa + strb r0, [r5, #0xa] + strb r0, [r5, #0xb] + mov r0, #1 + strh r0, [r5, #0xc] + strh r0, [r5, #0xe] + strh r1, [r5, #0x10] + strh r1, [r5, #0x14] + strh r1, [r5, #0x12] + strh r1, [r5, #0x16] + strh r1, [r5, #0x1c] + str r1, [r5, #0x20] + str r1, [r5, #0x28] + str r1, [r5, #0x2c] + strb r1, [r5, #0x30] + strb r1, [r5, #0x31] + strb r1, [r5, #0x36] + strb r1, [r5, #0x37] + strb r1, [r5, #0x34] + strb r1, [r5, #0x35] + strb r1, [r5, #0x38] + strb r1, [r5, #0x39] + strb r1, [r5, #0x3a] + strb r1, [r5, #0x3b] + strb r1, [r5, #0x3c] + strb r1, [r5, #0x3d] + strb r1, [r5, #0x3e] + strb r1, [r5, #0x40] + strb r1, [r5, #0x3f] + strb r1, [r5, #0x41] + strb r1, [r5, #0x42] + strb r1, [r5, #0x43] + strb r1, [r5, #0x44] + strb r1, [r5, #0x45] + strb r1, [r5, #0x46] + strb r1, [r5, #0x47] + strb r1, [r5, #0x48] + strb r1, [r5, #0x4b] + strb r1, [r5, #0x4c] + strb r1, [r5, #0x4d] + strb r1, [r5, #0x4e] + strb r1, [r5, #0x4f] + strb r1, [r5, #0x50] + strb r1, [r5, #0x51] + strb r1, [r5, #0x32] + strb r1, [r5, #0x33] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0230D614: .word DUNGEON_PTR + arm_func_end ResetDamageCalcDiagnostics + + arm_func_start ov29_0230D618 +ov29_0230D618: ; 0x0230D618 + ldr r1, _0230D624 ; =ov29_02352894 + ldr r0, [r1, r0, lsl #2] + bx lr + .align 2, 0 +_0230D624: .word ov29_02352894 + arm_func_end ov29_0230D618 + + arm_func_start ov29_0230D628 +ov29_0230D628: ; 0x0230D628 + stmdb sp!, {r3, lr} + ldr r1, _0230D650 ; =DUNGEON_PTR + ldr r1, [r1] + add r1, r1, #0x1a000 +#ifdef JAPAN + ldr r1, [r1, #0x188] +#else + ldr r1, [r1, #0x22c] +#endif + cmp r1, r0 + ldmneia sp!, {r3, pc} + mov r1, #1 + bl PointCameraToMonster + ldmia sp!, {r3, pc} + .align 2, 0 +_0230D650: .word DUNGEON_PTR + arm_func_end ov29_0230D628 + + arm_func_start ov29_0230D654 +ov29_0230D654: ; 0x0230D654 + stmdb sp!, {r4, lr} + mov r4, r1 + bl EntityIsValid__02308FBC + cmp r0, #0 + beq _0230D678 + mov r0, r4 + bl EntityIsValid__02308FBC + cmp r0, #0 + bne _0230D680 +_0230D678: + mov r0, #1 + ldmia sp!, {r4, pc} +_0230D680: + mov r0, #0 + ldmia sp!, {r4, pc} + arm_func_end ov29_0230D654 + + arm_func_start ov29_0230D688 +ov29_0230D688: ; 0x0230D688 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + ldrh r3, [r4] + mov r1, #0x55 + mov r2, #2 + strh r3, [sp] + ldrh r3, [r4, #2] + strh r3, [sp, #2] + ldrh r3, [r4, #4] + strh r3, [sp, #4] + bl GenerateStandardItem + mov r0, r4 + bl SetItemAcquired + ldrb r0, [sp, #1] + strb r0, [r4, #1] + cmp r0, #0 + beq _0230D6FC + add r0, sp, #0 + bl GetEquivItemIndex + cmp r0, #0 + blt _0230D6FC + bl GetItemAtIdx + ldrh r1, [r4] + strh r1, [r0] + ldrh r1, [r4, #2] + strh r1, [r0, #2] + ldrh r1, [r4, #4] + strh r1, [r0, #4] +_0230D6FC: + add sp, sp, #8 + ldmia sp!, {r4, pc} + arm_func_end ov29_0230D688 + + arm_func_start ov29_0230D704 +ov29_0230D704: ; 0x0230D704 + mov r0, #0 + bx lr + arm_func_end ov29_0230D704 + + arm_func_start ov29_0230D70C +ov29_0230D70C: ; 0x0230D70C + stmdb sp!, {r3, lr} + mov r0, #0x64 + bl DungeonRandInt + ldr r1, _0230D734 ; =ov10_022C45B4 + ldrsh r1, [r1] + cmp r0, r1 + movlt r0, #1 + movge r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + .align 2, 0 +_0230D734: .word ov10_022C45B4 + arm_func_end ov29_0230D70C + + arm_func_start ov29_0230D738 +ov29_0230D738: ; 0x0230D738 + stmdb sp!, {r3, lr} + cmp r2, #0 + bne _0230D760 + mov r0, #0x64 + bl DungeonRandInt + ldr r1, _0230D768 ; =ov10_022C45B4 + ldrsh r1, [r1] + cmp r0, r1 + movlt r0, #1 + ldmltia sp!, {r3, pc} +_0230D760: + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0230D768: .word ov10_022C45B4 + arm_func_end ov29_0230D738 + + arm_func_start ov29_0230D76C +ov29_0230D76C: ; 0x0230D76C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl IsMonster__0230A994 + cmp r0, #0 + beq _0230D798 + mov r0, r5 + bl IsMonster__0230A994 + cmp r0, #0 + bne _0230D7A0 +_0230D798: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_0230D7A0: + ldr r0, [r6, #0xb4] + ldr r1, [r5, #0xb4] + ldrsh r0, [r0, #2] + ldrsh r1, [r1, #2] + bl GendersNotEqualNotGenderless + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl ov29_0230D738 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end ov29_0230D76C + + arm_func_start ov29_0230D7D4 +ov29_0230D7D4: ; 0x0230D7D4 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0x10 + ldr r2, _0230D870 ; =ov29_023535D4 + mvn r1, #0 + ldrsh r3, [r2] + mov r4, r0 + cmp r3, r1 + beq _0230D808 + ldrsh r0, [r2] + bl ov10_022BDE50 + ldr r0, _0230D870 ; =ov29_023535D4 + mvn r1, #0 + strh r1, [r0] +_0230D808: + mov r2, #0 + mov r1, #1 + str r2, [sp] + stmib sp, {r1, r2} + mov r0, r4 + rsb r1, r1, #0x2b8 + mov r3, #3 + str r2, [sp, #0xc] + bl PlayEffectAnimationEntity + mov r0, r0, lsl #0x10 + mov r5, r0, asr #0x10 + mvn r0, #0 + cmp r5, r0 + beq _0230D868 + mov r4, #0x18 + b _0230D850 +_0230D848: + mov r0, r4 + bl AdvanceFrame +_0230D850: + mov r0, r5 + bl ov10_022BF964 + cmp r0, #0 + bne _0230D848 + mov r0, r5 + bl ov10_022BDE50 +_0230D868: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0230D870: .word ov29_023535D4 + arm_func_end ov29_0230D7D4 + + arm_func_start ov29_0230D874 +ov29_0230D874: ; 0x0230D874 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + ldr lr, [r5, #0xb4] + ldr ip, [r4, #0xb4] + ldrsh r3, [lr, #0x28] + ldrsh r1, [lr, #0x2a] + ldrsh r0, [ip, #0x28] + cmp r2, #0 + strh r0, [lr, #0x28] + ldrsh r0, [ip, #0x2a] + strh r0, [lr, #0x2a] + strh r3, [ip, #0x28] + strh r1, [ip, #0x2a] + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r4 + mov r0, #1 + mov r2, #0 + bl SubstitutePlaceholderStringTags + ldr r2, _0230D8E4 ; =0x00000F2D + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_0230D8E4: .word 0x00002494 +#else +_0230D8E4: .word 0x00000F2D +#endif + arm_func_end ov29_0230D874 + + arm_func_start ov29_0230D8E8 +ov29_0230D8E8: ; 0x0230D8E8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + ldr lr, [r5, #0xb4] + ldr ip, [r4, #0xb4] + ldr r3, [lr, #0x3c] + ldr r1, [lr, #0x40] + ldr r0, [ip, #0x3c] + cmp r2, #0 + str r0, [lr, #0x3c] + ldr r0, [ip, #0x40] + str r0, [lr, #0x40] + str r3, [ip, #0x3c] + str r1, [ip, #0x40] + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r4 + mov r0, #1 + mov r2, #0 + bl SubstitutePlaceholderStringTags + ldr r2, _0230D958 ; =0x00000F2E + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_0230D958: .word 0x00002495 +#else +_0230D958: .word 0x00000F2E +#endif + arm_func_end ov29_0230D8E8 + + arm_func_start ov29_0230D95C +ov29_0230D95C: ; 0x0230D95C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + ldr lr, [r5, #0xb4] + ldr ip, [r4, #0xb4] + ldrsh r3, [lr, #0x24] + ldrsh r1, [lr, #0x26] + ldrsh r0, [ip, #0x24] + cmp r2, #0 + strh r0, [lr, #0x24] + ldrsh r0, [ip, #0x26] + strh r0, [lr, #0x26] + strh r3, [ip, #0x24] + strh r1, [ip, #0x26] + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r4 + mov r0, #1 + mov r2, #0 + bl SubstitutePlaceholderStringTags + ldr r2, _0230D9CC ; =0x00000F2B + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_0230D9CC: .word 0x00002492 +#else +_0230D9CC: .word 0x00000F2B +#endif + arm_func_end ov29_0230D95C + + arm_func_start ov29_0230D9D0 +ov29_0230D9D0: ; 0x0230D9D0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + ldr lr, [r5, #0xb4] + ldr ip, [r4, #0xb4] + ldr r3, [lr, #0x34] + ldr r1, [lr, #0x38] + ldr r0, [ip, #0x34] + cmp r2, #0 + str r0, [lr, #0x34] + ldr r0, [ip, #0x38] + str r0, [lr, #0x38] + str r3, [ip, #0x34] + str r1, [ip, #0x38] + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r4 + mov r0, #1 + mov r2, #0 + bl SubstitutePlaceholderStringTags + ldr r2, _0230DA40 ; =0x00000F2C + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_0230DA40: .word 0x00002493 +#else +_0230DA40: .word 0x00000F2C +#endif + arm_func_end ov29_0230D9D0 + + arm_func_start ov29_0230DA44 +ov29_0230DA44: ; 0x0230DA44 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + ldr lr, [r5, #0xb4] + ldr ip, [r4, #0xb4] + ldrsh r3, [lr, #0x2c] + ldrsh r1, [lr, #0x2e] + ldrsh r0, [ip, #0x2c] + cmp r2, #0 + strh r0, [lr, #0x2c] + ldrsh r0, [ip, #0x2e] + strh r0, [lr, #0x2e] + strh r3, [ip, #0x2c] + strh r1, [ip, #0x2e] + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r4 + mov r0, #1 + mov r2, #0 + bl SubstitutePlaceholderStringTags + ldr r2, _0230DAB4 ; =0x00000F2F + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifdef JAPAN +_0230DAB4: .word 0x00002496 +#else +_0230DAB4: .word 0x00000F2F +#endif + arm_func_end ov29_0230DA44 + + arm_func_start ov29_0230DAB8 +ov29_0230DAB8: ; 0x0230DAB8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr ip, [r5, #0xb4] + mov r4, r1 + ldrsh r1, [ip, #0x24] + ldr r3, [ip, #0x34] + ldr r0, [ip, #0x3c] + cmp r2, #0 + str r0, [ip, #0x34] + ldrsh r0, [ip, #0x28] + strh r0, [ip, #0x24] + str r3, [ip, #0x3c] + strh r1, [ip, #0x28] + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags +#ifdef JAPAN + ldr r2, _0230F050 ; =0x00002497 + mov r0, r5 + mov r1, r4 +#else + mov r0, r5 + mov r1, r4 + mov r2, #0xf30 +#endif + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, pc} +#ifdef JAPAN +_0230F050: .word 0x00002497 +#endif + arm_func_end ov29_0230DAB8 + + arm_func_start SpecificRecruitCheck +SpecificRecruitCheck: ; 0x0230DB14 + stmdb sp!, {r4, lr} + ldr r1, _0230DBC8 ; =DUNGEON_PTR + mov r4, r0 + ldr r1, [r1] + ldrb r1, [r1, #0x759] + cmp r1, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + bl DebugRecruitingEnabled + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #0x97 + ldreq r0, _0230DBC8 ; =DUNGEON_PTR + ldreq r0, [r0] + addeq r0, r0, #0x700 + ldreqsb r0, [r0, #0x98] + cmpeq r0, #2 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r1, _0230DBCC ; =0x000001A3 + cmp r4, r1 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + cmp r4, #0x1a4 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + add r0, r1, #2 + cmp r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + sub r0, r1, #0xa + cmp r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + sub r0, r1, #9 + cmp r4, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + sub r0, r1, #8 + cmp r4, r0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r4, pc} + .align 2, 0 +_0230DBC8: .word DUNGEON_PTR +_0230DBCC: .word 0x000001A3 + arm_func_end SpecificRecruitCheck + + arm_func_start RecruitCheck +RecruitCheck: ; 0x0230DBD0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r2, _0230E024 ; =DUNGEON_PTR + mov r8, r0 + ldr r0, [r2] + mov r7, r1 + ldrb r0, [r0, #0x748] + ldr r5, [r8, #0xb4] + ldr r6, [r7, #0xb4] + bl IsRecruitingAllowed + cmp r0, #0 + beq _0230DC28 + bl IsFullFloorFixedRoom + cmp r0, #0 + bne _0230DC28 + bl IsLegendaryChallengeFloor + cmp r0, #0 + bne _0230DC28 + mov r0, #0xa + mov r1, #6 + bl IsCurrentMissionTypeExact + cmp r0, #0 + beq _0230DC30 +_0230DC28: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0230DC30: + ldr r0, _0230E024 ; =DUNGEON_PTR + ldr r1, [r0] + ldrb r0, [r1, #0x75d] + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + ldrb r0, [r1, #0x748] + cmp r0, #0x5b + bne _0230DC70 + ldrsh r1, [r6, #2] + ldr r0, _0230E028 ; =0x000001E6 + cmp r1, r0 + addne r0, r0, #0x258 + cmpne r1, r0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0230DC70: + ldrsh r0, [r6, #2] + cmp r0, #0x91 + cmpne r0, #0x90 + cmpne r0, #0x92 + ldrne r2, _0230E02C ; =0x0000010F + cmpne r0, r2 + subne r1, r2, #1 + cmpne r0, r1 + cmpne r0, #0x110 + cmpne r0, #0x19c + addne r1, r2, #0x8e + cmpne r0, r1 + addne r1, r2, #0x92 + cmpne r0, r1 + cmpne r0, #0x1a0 + addne r1, r2, #0x93 + cmpne r0, r1 + addne r1, r2, #0x8a + cmpne r0, r1 + addne r1, r2, #0x8b + cmpne r0, r1 + addne r1, r2, #0x8c + cmpne r0, r1 + beq _0230DCF0 + ldr r1, _0230E030 ; =0xFFFFFDEA + add r1, r0, r1 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + cmp r1, #1 + bhi _0230DD04 +_0230DCF0: + mov r1, #1 + bl IsMonsterOnTeam + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0230DD04: + mov r0, r6 + bl ov29_022FBDE0 + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + ldrsh r0, [r6, #2] + bl SpecificRecruitCheck + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + ldrsh r1, [r8, #4] + ldrsh r0, [r7, #4] + sub r0, r1, r0 + bl abs + cmp r0, #1 + bgt _0230DD5C + ldrsh r1, [r8, #6] + ldrsh r0, [r7, #6] + sub r0, r1, r0 + bl abs + cmp r0, #1 + ble _0230DD64 +_0230DD5C: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0230DD64: + ldrb r0, [r6, #0x48] + cmp r0, #0xfa + ldrneb r0, [r6, #0xbc] + cmpne r0, #7 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r0, r7 + mov r1, r8 + bl CanSeeTarget + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r0, #1 + bl ov29_022E1B28 + bl ov29_022E81F8 + ldrsh r0, [r6, #2] + mov r1, #1 + bl IsMonsterOnTeam + mov sb, r0 + mov r0, #0x3e8 + bl DungeonRandInt + mov r4, r0 + bl HasPlayedOldGame + cmp r0, #0 + beq _0230DDE0 + cmp sb, #0 + bne _0230DDE0 + ldrsh r0, [r6, #2] + bl GetRecruitRate2 + mov r6, r0 + b _0230DDEC +_0230DDE0: + ldrsh r0, [r6, #2] + bl GetRecruitRate1 + mov r6, r0 +_0230DDEC: + cmp r6, #0 + ble _0230DDFC + cmp sb, #0 + movne r6, r6, asr #1 +_0230DDFC: + ldr r0, _0230E034 ; =0xFFFFFC19 + cmp r6, r0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r0, r8 + mov r1, #0x35 + bl ItemIsActive__0230E578 + cmp r0, #0 + ldrne r0, _0230E038 ; =ov10_022C44FC + ldrnesh r0, [r0] + addne r6, r6, r0 + bne _0230DFD4 + mov r0, r8 + mov r1, #0x39 + bl ItemIsActive__0230E578 + cmp r0, #0 + ldrne r0, _0230E03C ; =ov10_022C443C + ldrnesh r0, [r0] + addne r6, r6, r0 + bne _0230DFD4 + mov r0, r8 + mov r1, #0x3a + bl ItemIsActive__0230E578 + cmp r0, #0 + ldrne r0, _0230E040 ; =ov10_022C447C + ldrnesh r0, [r0] + addne r6, r6, r0 + bne _0230DFD4 + mov r0, r8 + mov r1, #0x3b + bl ItemIsActive__0230E578 + cmp r0, #0 + beq _0230DEA0 + mov r0, r7 + mov r1, #6 + bl MonsterIsType + cmp r0, #0 + ldrne r0, _0230E044 ; =ov10_022C441C + ldrnesh r0, [r0] + addne r6, r6, r0 + b _0230DFD4 +_0230DEA0: + mov r0, r8 + mov r1, #0x3c + bl ItemIsActive__0230E578 + cmp r0, #0 + beq _0230DED4 + mov r0, r7 + mov r1, #2 + bl MonsterIsType + cmp r0, #0 + ldrne r0, _0230E048 ; =ov10_022C4410 + ldrnesh r0, [r0] + addne r6, r6, r0 + b _0230DFD4 +_0230DED4: + mov r0, r8 + mov r1, #0x3d + bl ItemIsActive__0230E578 + cmp r0, #0 + beq _0230DF08 + mov r0, r7 + mov r1, #9 + bl MonsterIsType + cmp r0, #0 + ldrne r0, _0230E04C ; =ov10_022C470C + ldrnesh r0, [r0] + addne r6, r6, r0 + b _0230DFD4 +_0230DF08: + mov r0, r8 + mov r1, #0x3e + bl ItemIsActive__0230E578 + cmp r0, #0 + beq _0230DF3C + mov r0, r7 + mov r1, #3 + bl MonsterIsType + cmp r0, #0 + ldrne r0, _0230E050 ; =ov10_022C4708 + ldrnesh r0, [r0] + addne r6, r6, r0 + b _0230DFD4 +_0230DF3C: + mov r0, r8 + mov r1, #0x3f + bl ItemIsActive__0230E578 + cmp r0, #0 + beq _0230DF70 + mov r0, r7 + mov r1, #0xd + bl MonsterIsType + cmp r0, #0 + ldrne r0, _0230E054 ; =ov10_022C4704 + ldrnesh r0, [r0] + addne r6, r6, r0 + b _0230DFD4 +_0230DF70: + mov r0, r8 + mov r1, #0x40 + bl ItemIsActive__0230E578 + cmp r0, #0 + beq _0230DFA4 + mov r0, r7 + mov r1, #4 + bl MonsterIsType + cmp r0, #0 + ldrne r0, _0230E058 ; =ov10_022C4700 + ldrnesh r0, [r0] + addne r6, r6, r0 + b _0230DFD4 +_0230DFA4: + mov r0, r8 + mov r1, #0x41 + bl ItemIsActive__0230E578 + cmp r0, #0 + beq _0230DFD4 + mov r0, r7 + mov r1, #0xa + bl MonsterIsType + cmp r0, #0 + ldrne r0, _0230E05C ; =ov10_022C46FC + ldrnesh r0, [r0] + addne r6, r6, r0 +_0230DFD4: + mov r0, r8 + mov r1, #0x1e + bl IqSkillIsEnabled + cmp r0, #0 + ldrne r0, _0230E038 ; =ov10_022C44FC + ldrb r1, [r5, #0xa] + ldrnesh r0, [r0] + mov r1, r1, lsl #1 + addne r6, r6, r0 + ldr r0, _0230E060 ; =RECRUITMENT_LEVEL_BOOST_TABLE + ldrsh r0, [r0, r1] + add r0, r6, r0 + cmp r4, r0 + mov r0, #0 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + bl GetFirstEmptyMemberIdx + cmp r0, #0 + movlt r0, #0 + movge r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0230E024: .word DUNGEON_PTR +_0230E028: .word 0x000001E6 +_0230E02C: .word 0x0000010F +_0230E030: .word 0xFFFFFDEA +_0230E034: .word 0xFFFFFC19 +_0230E038: .word ov10_022C44FC +_0230E03C: .word ov10_022C443C +_0230E040: .word ov10_022C447C +_0230E044: .word ov10_022C441C +_0230E048: .word ov10_022C4410 +_0230E04C: .word ov10_022C470C +_0230E050: .word ov10_022C4708 +_0230E054: .word ov10_022C4704 +_0230E058: .word ov10_022C4700 +_0230E05C: .word ov10_022C46FC +_0230E060: .word RECRUITMENT_LEVEL_BOOST_TABLE + arm_func_end RecruitCheck + + arm_func_start TryRecruit +TryRecruit: ; 0x0230E064 +#ifdef JAPAN +#define TRY_RECRUIT_OFFSET -4 +#define TRY_RECRUIT_OFFSET_2 -0x2C0 +#else +#define TRY_RECRUIT_OFFSET 0 +#define TRY_RECRUIT_OFFSET_2 0 +#endif +#ifdef JAPAN + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} +#else + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} +#endif + sub sp, sp, #0x114 + TRY_RECRUIT_OFFSET + mov sl, r0 + mov r0, #0xa + mov r5, #0 + mov sb, r1 + mov r8, r2 + bl ov29_0234BA54 + mov r0, r5 + bl ov29_0234B1A4 + bl ov29_0234D630 + add r0, sb, #4 + add r1, sl, #4 + mvn r7, #0 + bl GetDirectionTowardsPosition + mov r6, r0 + ldr r4, [sb, #0xb4] + mov r0, r5 + strb r0, [sb, #0x22] + mov r0, sl + mov r1, sb + bl ov29_02305F60 + mov r1, r6 + mov r0, sb + bl ov29_02304A48 + ldrsh r0, [r4, #2] + mov r1, #1 + bl IsMonsterOnTeam + cmp r0, #0 + beq _0230E0FC + bl ov29_0234B034 + mov r1, #1 + str r1, [sp] + mov r1, r5 + ldr r2, [sb, #0xb4] + mov r3, r1 + bl ov29_0230040C + b _0230E114 +_0230E0FC: + bl ov29_0234B034 + mov r1, r5 + str r1, [sp] + ldr r2, [sb, #0xb4] + mov r3, r1 + bl ov29_0230040C +_0230E114: + bl ov29_0234B034 + mov r1, r0 + mov r3, #1 + mov r2, #0 + str r3, [sp] + ldr r0, _0230E55C ; =0x00000C77 + mov r3, r2 + bl ov29_0234D7C0 + cmp r0, #2 + moveq r4, #0 + beq _0230E524 + mov r4, #1 + mov r0, #0 + orr r1, r4, #2 + strb r1, [sp, #0xac + TRY_RECRUIT_OFFSET] + strb r0, [sp, #0xad + TRY_RECRUIT_OFFSET] + ldrsh r2, [r8, #0xc] + ldr r1, _0230E560 ; =DUNGEON_PTR + sub r3, r0, #1 + strb r2, [sp, #0xae + TRY_RECRUIT_OFFSET] + strh r4, [sp, #0xb2 + TRY_RECRUIT_OFFSET] + ldr r2, [r1] + ldrh r4, [r8, #0x44] + add r1, sp, #0x14 + strh r4, [r1, #0xf2 + TRY_RECRUIT_OFFSET] + ldrh r4, [r8, #0x46] + strh r4, [r1, #0xf4 + TRY_RECRUIT_OFFSET] + strb r0, [sp, #0x104 + TRY_RECRUIT_OFFSET] + strh r3, [sp, #0xb4 + TRY_RECRUIT_OFFSET] + strh r3, [sp, #0xb6 + TRY_RECRUIT_OFFSET] + ldrsh r1, [r8] + strh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET] + ldrb r1, [r2, #0x748] + strb r1, [sp, #0xaf + TRY_RECRUIT_OFFSET] + ldrb r1, [r2, #0x749] + add r2, sp, #0xac + TRY_RECRUIT_OFFSET + strb r1, [sp, #0xb0 + TRY_RECRUIT_OFFSET] + ldrsh r1, [r8, #6] + strh r1, [sp, #0xba + TRY_RECRUIT_OFFSET] + ldrsh r1, [r8, #6] + strh r1, [sp, #0xbc + TRY_RECRUIT_OFFSET] + ldrh r1, [r8, #0x14] + strh r1, [sp, #0xf0 + TRY_RECRUIT_OFFSET] + ldrh r1, [r8, #0x16] + strh r1, [sp, #0xf2 + TRY_RECRUIT_OFFSET] + ldrh r1, [r8, #0x18] + strh r1, [sp, #0xf4 + TRY_RECRUIT_OFFSET] + ldrh r1, [r8, #0x1a] + strh r1, [sp, #0xf6 + TRY_RECRUIT_OFFSET] +_0230E1D8: + add r4, r8, r0 + ldrb r1, [r4, #8] + add r3, r2, r0 + add r0, r0, #1 + strb r1, [r3, #0x12] + ldrb r1, [r4, #0xa] + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + strb r1, [r3, #0x14] + cmp r0, #2 + blt _0230E1D8 + ldr r0, [r8, #0x10] + add r2, sp, #0xc8 + TRY_RECRUIT_OFFSET + str r0, [sp, #0xc4 + TRY_RECRUIT_OFFSET] + add r3, r8, #0x22 + mov r1, #0x11 +_0230E218: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _0230E218 + ldrh r0, [r8, #0x1c] + strh r0, [sp, #0xea + TRY_RECRUIT_OFFSET] + ldrh r0, [r8, #0x1e] + strh r0, [sp, #0xec + TRY_RECRUIT_OFFSET] + ldrh r0, [r8, #0x20] + strh r0, [sp, #0xee + TRY_RECRUIT_OFFSET] + ldrsh r0, [r8] + bl GetNameString + mov r1, r0 + add r0, sp, #0x100 + add r0, r0, #0xa + TRY_RECRUIT_OFFSET + mov r2, #0xa + bl StrncpyName + ldrsh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET] + ldrsh r2, [sp, #0xb2 + TRY_RECRUIT_OFFSET] + add r0, sp, #0xf8 + TRY_RECRUIT_OFFSET + bl EnableAllLearnableIqSkills + add r1, sp, #0x100 + add r0, sp, #0x98 + add r1, r1, #0xa + TRY_RECRUIT_OFFSET +#ifdef JAPAN + add r4, sp, #0x18 + bl StrcpySimple +#else + mov r2, #0xa + add r4, sp, #0x18 + bl StrncpySimpleNoPad +#endif + bl ov29_022EACAC + bl ov29_0234B034 + mov r1, r0 + mov r0, #1 + str r0, [sp] + mov r2, #0 + ldr r0, _0230E564 ; =0x00000C7B + mov r3, r2 + bl ov29_0234D7C0 + cmp r0, #1 + bne _0230E2D4 + bl ov29_0234D838 + add r6, sp, #0x100 + add r6, r6, #0xa + TRY_RECRUIT_OFFSET +_0230E2BC: + mov r0, r6 + add r1, sp, #0x98 + mov r2, #0 + bl DungeonModeSetupAndShowNameKeyboard + cmp r0, #0 + beq _0230E2BC +_0230E2D4: + add r1, sp, #0xac + TRY_RECRUIT_OFFSET + mov r0, r4 + bl sub_020585B4 + mov r1, r4 + mov r0, #0 + bl ov29_0234B0B4 + mov r0, #1 + mov r1, #0 + bl ov29_0234B084 + ldr r0, _0230E568 ; =0x00000C7E + bl ov29_0230E658 + ldrsh r1, [r8, #2] + ldrsh r2, [r8, #4] + mov r0, sb + bl ov29_02337EC0 + ldrsh r2, [r8, #2] + ldrsh r3, [r8, #4] + mov r0, sl + mov r1, sb + bl ov29_0230E5A8 + cmp r0, #0 + bne _0230E42C + add r0, sp, #0xac + TRY_RECRUIT_OFFSET + mvn r1, #0 + bl ov29_0230E5FC + mov r7, r0 + b _0230E410 +_0230E340: + ldr r0, _0230E56C ; =0x00000C7F + bl ov29_0230E658 + mvn r4, #0 +_0230E34C: + bl ov29_0234D838 + add r1, sp, #0x100 + mov r0, sb + add r1, r1, #0xa + TRY_RECRUIT_OFFSET + bl ov29_0234EE10 + movs r6, r0 + beq _0230E3D4 + cmp r6, sb + add r0, sp, #0x58 + bne _0230E380 + add r1, sp, #0xac + TRY_RECRUIT_OFFSET + bl sub_020585B4 + b _0230E38C +_0230E380: + ldr r1, [r6, #0xb4] + ldrsh r1, [r1, #0xc] + bl sub_020584FC +_0230E38C: + mov r0, #0 + add r1, sp, #0x58 + bl ov29_0234B0B4 + mov r0, #1 + mov r1, sl + mov r2, #0 + bl SubstitutePlaceholderStringTags + bl ov29_0234B034 + mov r1, #1 + mov r2, #0 + str r1, [sp] + mov r1, r0 + mov r0, #0xc80 + TRY_RECRUIT_OFFSET_2 + mov r3, r2 + bl ov29_0234D7C0 + mov fp, r0 + cmp fp, r4 + beq _0230E34C +_0230E3D4: + cmp fp, #2 + cmpne r6, #0 + beq _0230E410 + ldr r0, _0230E56C ; =0x00000C7F + add r0, r0, #2 + bl ov29_0230E658 + mov r0, r6 + bl ov29_022E68BC + ldr r1, _0230E570 ; =0x00000233 + mov r0, r6 + mov r2, sl + bl HandleFaint + cmp r6, sb + moveq r4, #1 + beq _0230E524 +_0230E410: + mov r0, sl + mov r1, sb + ldrsh r2, [r8, #2] + ldrsh r3, [r8, #4] + bl ov29_0230E5A8 + cmp r0, #0 + beq _0230E340 +_0230E42C: + mov r6, #0 + mov r4, r6 + mov r5, #1 + b _0230E468 +_0230E43C: + mov r0, r6 + bl GetActiveTeamMember + ldrb r0, [r0] + tst r0, #1 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _0230E470 + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 +_0230E468: + cmp r6, #4 + blt _0230E43C +_0230E470: + add r0, sp, #0xac + TRY_RECRUIT_OFFSET + mov r1, r7 + strh r6, [sp, #0xb6 + TRY_RECRUIT_OFFSET] + bl ov29_0230E5FC + strh r0, [sp, #0xb4 + TRY_RECRUIT_OFFSET] + ldrsh r1, [sp, #0xb4 + TRY_RECRUIT_OFFSET] + mov r0, r6 + bl sub_02056698 + ldr r1, _0230E570 ; =0x00000233 + mov r0, sb + mov r2, sl + bl HandleFaint + mov r0, r6 + bl GetActiveTeamMember + mov r4, r0 + add r7, sp, #0xac + TRY_RECRUIT_OFFSET + mov r6, r4 + mov r5, #6 +_0230E4B8: + ldmia r7!, {r0, r1, r2, r3} + stmia r6!, {r0, r1, r2, r3} + subs r5, r5, #1 + bne _0230E4B8 + ldmia r7, {r0, r1} + stmia r6, {r0, r1} + bl ov29_022E8104 + bl ov29_022E81F8 + add r1, sp, #0x14 + mov r0, #0 + str r1, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + str r0, [sp, #0xc] + str r0, [sp, #0x10] + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + ldrsh r2, [r8, #4] + mov r3, r4 + bl InitTeamMember + ldrsh r0, [r4, #0xc] + bl SetPokemonJoined + bl ov29_022E8104 + bl ov29_022E81F8 + ldr r5, [sp, #0x14] + mov r4, #1 +_0230E524: + mov r0, #1 + bl ov29_0234D8A0 + cmp r4, #0 + bne _0230E540 + ldr r1, _0230E574 ; =0x00000C78 + mov r0, sl + bl LogMessageByIdWithPopupCheckUser +_0230E540: + cmp r5, #0 + beq _0230E550 + mov r0, r5 + bl EnsureCanStandCurrentTile +_0230E550: + mov r0, r4 + add sp, sp, #0x114 + TRY_RECRUIT_OFFSET +#ifdef JAPAN + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +#else + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +#endif + .align 2, 0 +_0230E55C: .word 0x00000C77 + TRY_RECRUIT_OFFSET_2 +_0230E560: .word DUNGEON_PTR +_0230E564: .word 0x00000C7B + TRY_RECRUIT_OFFSET_2 +_0230E568: .word 0x00000C7E + TRY_RECRUIT_OFFSET_2 +_0230E56C: .word 0x00000C7F + TRY_RECRUIT_OFFSET_2 +_0230E570: .word 0x00000233 +_0230E574: .word 0x00000C78 + TRY_RECRUIT_OFFSET_2 + arm_func_end TryRecruit diff --git a/asm/overlay_29_0230E5A8.s b/asm/overlay_29_0230E5A8.s new file mode 100644 index 00000000..19aec5ea --- /dev/null +++ b/asm/overlay_29_0230E5A8.s @@ -0,0 +1,253 @@ + .include "asm/macros.inc" + .include "overlay_29_0230E5A8.inc" + + .text + + arm_func_start ov29_0230E5A8 +ov29_0230E5A8: ; 0x0230E5A8 + stmdb sp!, {r4, lr} + ldr r4, [r1, #0xb4] + mov r1, r2 + ldrsh r0, [r4, #2] + mov r2, r3 + mov r3, #1 + bl ov29_022FD318 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldrsh r0, [r4, #2] + bl ov29_022FBC94 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + bl sub_02056830 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r4, pc} + arm_func_end ov29_0230E5A8 + + arm_func_start ov29_0230E5FC +ov29_0230E5FC: ; 0x0230E5FC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x44 + mov r5, r0 + mov r4, r1 + add r0, sp, #0 + mov r1, r5 + bl sub_020534BC + mov r1, #0 + sub r0, r1, #1 + strb r1, [sp, #6] + strb r1, [sp, #7] + cmp r4, r0 + bne _0230E640 + add r0, sp, #0 + bl sub_02055CCC + mov r4, r0 + b _0230E64C +_0230E640: + ldrsh r0, [r5, #8] + add r1, sp, #0 + bl sub_02055D7C +_0230E64C: + mov r0, r4 + add sp, sp, #0x44 + ldmia sp!, {r4, r5, pc} + arm_func_end ov29_0230E5FC + + arm_func_start ov29_0230E658 +ov29_0230E658: ; 0x0230E658 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r5, r0 + mov r0, r4 + bl StringFromId + mov r4, r0 + bl ov29_0234B034 + mov r2, r4 + str r0, [sp] + mov r0, r5 + mov r1, #0x400 + mov r3, r1 + bl PreprocessString + mov r0, r5 + bl ov29_0234BB50 + bl ov29_0234B034 + mov r1, r0 + mov r0, r5 + mov r2, #1 + str r2, [sp] + mov r2, #0 + mov r3, r2 + bl ov29_0234D6C8 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ov29_0230E658 + + arm_func_start TrySpawnMonsterAndTickSpawnCounter +TrySpawnMonsterAndTickSpawnCounter: ; 0x0230E6BC +#ifdef JAPAN +#define TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET -0xA4 +#else +#define TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + ldr r0, _0230E8D8 ; =DUNGEON_PTR + mov r6, #0 + ldr r7, [r0] + add r0, r7, #0x700 + ldrsh r1, [r0, #0x86] + cmp r1, #0 + beq _0230E8D0 + ldrsh r1, [r0, #0x82] + add r1, r1, #1 + strh r1, [r0, #0x82] + ldrb r1, [r7, #0x790] + cmp r1, #0 + bne _0230E710 + ldr r1, _0230E8DC ; =SPAWN_COOLDOWN + ldrsh r2, [r0, #0x82] + ldrsh r0, [r1] + cmp r2, r0 + bge _0230E724 + b _0230E8D0 +_0230E710: + ldr r1, _0230E8E0 ; =SPAWN_COOLDOWN_THIEF_ALERT + ldrsh r2, [r0, #0x82] + ldrsh r0, [r1] + cmp r2, r0 + blt _0230E8D0 +_0230E724: + cmp r2, #0x384 + ble _0230E76C + add r0, r7, #0x19000 + ldr r4, [r0, #0x908 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] + mov r0, r4 + bl EntityIsValid__0230E8F0 + cmp r0, #0 + beq _0230E76C + add r0, r7, #0x19000 + ldrh r1, [r4, #0x26] + ldr r0, [r0, #0x910 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] + cmp r1, r0 + bne _0230E76C + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r6, r4 +_0230E76C: + mov r5, #0 + add r0, r7, #0x700 + strh r5, [r0, #0x82] + add r0, r7, #0x19000 + mov r4, r5 + str r5, [r0, #0x908 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] +_0230E784: + add r0, r7, r4, lsl #2 + add r0, r0, #0x12000 + ldr r8, [r0, #0xb38 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] + mov r0, r8 + bl EntityIsValid__0230E8F0 + cmp r0, #0 + beq _0230E7B8 + ldrsh r0, [r8, #4] + ldrsh r1, [r8, #6] + bl GetTile + ldrh r0, [r0] + tst r0, #0x100 + addeq r5, r5, #1 +_0230E7B8: + add r4, r4, #1 + cmp r4, #0x10 + blt _0230E784 + ldrb r0, [r7, #0x790] + cmp r0, #0 + bne _0230E80C + ldr r0, _0230E8D8 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x4000 + ldrb r0, [r0, #0xc9 + TRY_SPAWN_MONSTER_AND_TICK_SPAWN_COUNTER_OFFSET] + cmp r0, #0xff + bne _0230E7FC + ldr r0, _0230E8E4 ; =SPAWN_CAP_NO_MONSTER_HOUSE + ldrsh r0, [r0] + cmp r5, r0 + blt _0230E80C + b _0230E8D0 +_0230E7FC: + ldr r0, _0230E8E8 ; =SPAWN_CAP_WITH_MONSTER_HOUSE + ldrsh r0, [r0] + cmp r5, r0 + bge _0230E8D0 +_0230E80C: + cmp r6, #0 + beq _0230E828 + ldr r1, _0230E8EC ; =0x00000C5D + mov r0, #0 + bl LogMessageByIdWithPopup + mov r0, r6 + bl ov29_022E62F0 +_0230E828: + ldrb r0, [r7, #0x790] + cmp r0, #0 + beq _0230E83C + bl GetKecleonIdToSpawnByFloor + b _0230E844 +_0230E83C: + mov r0, #0 + bl GetMonsterIdToSpawn +_0230E844: + mov r5, r0 + mov r0, r5 + bl GetMonsterLevelToSpawn + movs r4, r0 + mov r0, r5 + mov r1, #0 + moveq r4, #1 + bl MewSpawnCheck + cmp r0, #0 + beq _0230E8D0 + add r0, sp, #0xa + mov r1, #0 + bl GetRandomTile + cmp r0, #0 + beq _0230E8D0 + mov r1, #0 + mov r0, #0x64 + strh r5, [sp] + strh r4, [sp, #8] + strb r1, [sp, #2] + bl DungeonRandInt + ldr r1, _0230E8D8 ; =DUNGEON_PTR + mov r4, r0 + ldr r0, [r1] + ldrb r0, [r0, #0x748] + bl GetRandomMovementChance + cmp r4, r0 + movlt r0, #1 + strlt r0, [sp, #4] + movge r0, #0 + strge r0, [sp, #4] + mov r1, #0 + add r0, sp, #0 + strb r1, [sp, #0xe] + bl SpawnMonster +_0230E8D0: + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0230E8D8: .word DUNGEON_PTR +_0230E8DC: .word SPAWN_COOLDOWN +_0230E8E0: .word SPAWN_COOLDOWN_THIEF_ALERT +_0230E8E4: .word SPAWN_CAP_NO_MONSTER_HOUSE +_0230E8E8: .word SPAWN_CAP_WITH_MONSTER_HOUSE +#ifdef JAPAN +_0230E8EC: .word 0x0000099C +#else +_0230E8EC: .word 0x00000C5D +#endif + arm_func_end TrySpawnMonsterAndTickSpawnCounter diff --git a/asm/overlay_29_0230F02C.s b/asm/overlay_29_0230F02C.s index 7930cc3c..0364a677 100644 --- a/asm/overlay_29_0230F02C.s +++ b/asm/overlay_29_0230F02C.s @@ -640,127 +640,3 @@ _0230F7F0: .align 2, 0 _0230F80C: .word DUNGEON_PTR arm_func_end TeamMemberHasItemActive - - arm_func_start ItemIsActive__0230F810 -ItemIsActive__0230F810: ; 0x0230F810 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__0230F810 - - arm_func_start TeamMemberHasExclusiveItemEffectActive -TeamMemberHasExclusiveItemEffectActive: ; 0x0230F840 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r4, r0 - mov r6, #0 - ldr r5, _0230F8A8 ; =DUNGEON_PTR - b _0230F898 -_0230F854: - ldr r0, [r5] - add r0, r0, r6, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r7, [r0, #0xa84] -#else - ldr r7, [r0, #0xb28] -#endif - mov r0, r7 - bl EntityIsValid__0230F008 - cmp r0, #0 - beq _0230F88C - mov r0, r7 - mov r1, r4 - bl ExclusiveItemEffectIsActive__0230F8AC - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_0230F88C: - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 -_0230F898: - cmp r6, #4 - blt _0230F854 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0230F8A8: .word DUNGEON_PTR - arm_func_end TeamMemberHasExclusiveItemEffectActive - - arm_func_start ExclusiveItemEffectIsActive__0230F8AC -ExclusiveItemEffectIsActive__0230F8AC: ; 0x0230F8AC - stmdb sp!, {r3, lr} - ldr r2, [r0, #0xb4] - ldrb r0, [r2, #6] - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, pc} -#ifdef JAPAN - add r0, r2, #0x224 -#else - add r0, r2, #0x228 -#endif - bl ExclusiveItemEffectFlagTest - ldmia sp!, {r3, pc} - arm_func_end ExclusiveItemEffectIsActive__0230F8AC - - arm_func_start ov29_0230F8D0 -ov29_0230F8D0: ; 0x0230F8D0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, r0 - mov r7, r1 - bl EntityIsValid__0230F008 - cmp r0, #0 - moveq r0, #0xff - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - ldr r0, [r8, #0xb4] - mov r5, #0 - ldrb r6, [r0, #0x4c] - ldr r4, _0230F97C ; =DIRECTIONS_XY - b _0230F96C -_0230F900: - mov r1, r6, lsl #2 - add r0, r4, r6, lsl #2 - ldrsh ip, [r8, #4] - ldrsh r3, [r4, r1] - ldrsh r2, [r8, #6] - ldrsh r1, [r0, #2] - add r0, ip, r3 - add r1, r2, r1 - bl GetTile - ldr sb, [r0, #0xc] - cmp sb, #0 - beq _0230F958 - mov r0, sb - bl IsMonster__0230F980 - cmp r0, #0 - beq _0230F958 - mov r0, sb - mov r1, r7 - bl ItemIsActive__0230F810 - cmp r0, #0 - movne r0, r6 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0230F958: - add r0, r6, #1 - and r0, r0, #0xff - add r1, r5, #1 - and r6, r0, #7 - and r5, r1, #0xff -_0230F96C: - cmp r5, #8 - blo _0230F900 - mov r0, #0xff - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0230F97C: .word DIRECTIONS_XY - arm_func_end ov29_0230F8D0 diff --git a/asm/overlay_29_0230F840.s b/asm/overlay_29_0230F840.s new file mode 100644 index 00000000..129e6e52 --- /dev/null +++ b/asm/overlay_29_0230F840.s @@ -0,0 +1,112 @@ + .include "asm/macros.inc" + .include "overlay_29_0230F840.inc" + + .text + + arm_func_start TeamMemberHasExclusiveItemEffectActive +TeamMemberHasExclusiveItemEffectActive: ; 0x0230F840 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r4, r0 + mov r6, #0 + ldr r5, _0230F8A8 ; =DUNGEON_PTR + b _0230F898 +_0230F854: + ldr r0, [r5] + add r0, r0, r6, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r7, [r0, #0xa84] +#else + ldr r7, [r0, #0xb28] +#endif + mov r0, r7 + bl EntityIsValid__0230F008 + cmp r0, #0 + beq _0230F88C + mov r0, r7 + mov r1, r4 + bl ExclusiveItemEffectIsActive__0230F8AC + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} +_0230F88C: + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 +_0230F898: + cmp r6, #4 + blt _0230F854 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0230F8A8: .word DUNGEON_PTR + arm_func_end TeamMemberHasExclusiveItemEffectActive + + arm_func_start ExclusiveItemEffectIsActive__0230F8AC +ExclusiveItemEffectIsActive__0230F8AC: ; 0x0230F8AC + stmdb sp!, {r3, lr} + ldr r2, [r0, #0xb4] + ldrb r0, [r2, #6] + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, pc} +#ifdef JAPAN + add r0, r2, #0x224 +#else + add r0, r2, #0x228 +#endif + bl ExclusiveItemEffectFlagTest + ldmia sp!, {r3, pc} + arm_func_end ExclusiveItemEffectIsActive__0230F8AC + + arm_func_start ov29_0230F8D0 +ov29_0230F8D0: ; 0x0230F8D0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, r0 + mov r7, r1 + bl EntityIsValid__0230F008 + cmp r0, #0 + moveq r0, #0xff + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + ldr r0, [r8, #0xb4] + mov r5, #0 + ldrb r6, [r0, #0x4c] + ldr r4, _0230F97C ; =DIRECTIONS_XY + b _0230F96C +_0230F900: + mov r1, r6, lsl #2 + add r0, r4, r6, lsl #2 + ldrsh ip, [r8, #4] + ldrsh r3, [r4, r1] + ldrsh r2, [r8, #6] + ldrsh r1, [r0, #2] + add r0, ip, r3 + add r1, r2, r1 + bl GetTile + ldr sb, [r0, #0xc] + cmp sb, #0 + beq _0230F958 + mov r0, sb + bl IsMonster__0230F980 + cmp r0, #0 + beq _0230F958 + mov r0, sb + mov r1, r7 + bl ItemIsActive__0230F810 + cmp r0, #0 + movne r0, r6 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0230F958: + add r0, r6, #1 + and r0, r0, #0xff + add r1, r5, #1 + and r6, r0, #7 + and r5, r1, #0xff +_0230F96C: + cmp r5, #8 + blo _0230F900 + mov r0, #0xff + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0230F97C: .word DIRECTIONS_XY + arm_func_end ov29_0230F8D0 diff --git a/asm/overlay_29_02311034.s b/asm/overlay_29_02311064.s similarity index 97% rename from asm/overlay_29_02311034.s rename to asm/overlay_29_02311064.s index ddc041e2..f7603746 100644 --- a/asm/overlay_29_02311034.s +++ b/asm/overlay_29_02311064.s @@ -1,24 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_02311034.inc" + .include "overlay_29_02311064.inc" .text - arm_func_start ItemIsActive__02311034 -ItemIsActive__02311034: ; 0x02311034 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__02311034 - arm_func_start ExclusiveItemEffectIsActive__02311064 ExclusiveItemEffectIsActive__02311064: ; 0x02311064 stmdb sp!, {r3, lr} diff --git a/asm/overlay_29_023118D8.s b/asm/overlay_29_023118D8.s index 5794f9c3..88b9a9a9 100644 --- a/asm/overlay_29_023118D8.s +++ b/asm/overlay_29_023118D8.s @@ -249,4107 +249,3 @@ _02311BE8: bl AbilityIsActiveVeneer ldmia sp!, {r3, r4, r5, pc} arm_func_end DefenderAbilityIsActive__02311B94 - - arm_func_start ItemIsActive__02311BF8 -ItemIsActive__02311BF8: ; 0x02311BF8 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__02311BF8 - - arm_func_start ov29_02311C28 -ov29_02311C28: ; 0x02311C28 - stmdb sp!, {r3, lr} - ldrb ip, [sp, #8] - str ip, [sp] - bl IsProtectedFromSleepClassStatus - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end ov29_02311C28 - - arm_func_start TryInflictNightmareStatus -TryInflictNightmareStatus: ; 0x02311C4C - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r8, r2 - mov r2, #1 - mov r3, r2 - mov r7, r0 - mov r6, r1 - str r2, [sp] - mov r4, #0 - bl IsProtectedFromSleepClassStatus - cmp r0, #0 - bne _02311D4C - ldr r5, [r6, #0xb4] - ldrb r0, [r5, #0xbd] - cmp r0, #2 - beq _02311D34 - mov r0, r6 - bl ov29_022E4B8C - ldrb r0, [r5, #0xbd] - cmp r0, #3 - beq _02311CE0 - mov r0, r7 - mov r1, r6 - mov r2, #0x2f -#ifndef JAPAN - mov r3, #1 -#endif - strb r8, [r5, #0xbe] - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02311CE4 - ldrb r0, [r5, #0xbe] - mov r1, r0, asr #1 - and r0, r1, #0xff - cmp r0, #1 - strb r1, [r5, #0xbe] - movlo r0, #1 - strlob r0, [r5, #0xbe] - b _02311CE4 -_02311CE0: - mov r4, #1 -_02311CE4: - mov r2, #3 - mov r0, r6 - mov r1, #8 - strb r2, [r5, #0xbd] - bl ov29_02304A48 - cmp r4, #0 - beq _02311D14 - ldr r2, _02311D54 ; =0x00000D0D - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - b _02311D44 -_02311D14: - ldr r2, _02311D58 ; =0x00000D0C - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r7 - mov r1, r6 - bl TryActivateQuickFeet - b _02311D44 -_02311D34: - ldr r2, _02311D5C ; =0x00000D0E - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02311D44: - mov r0, r6 - bl UpdateStatusIconFlags -_02311D4C: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -_02311D54: .word 0x00000A4D -_02311D58: .word 0x00000A4C -_02311D5C: .word 0x00000A4E -#else -_02311D54: .word 0x00000D0D -_02311D58: .word 0x00000D0C -_02311D5C: .word 0x00000D0E -#endif - arm_func_end TryInflictNightmareStatus - - arm_func_start TryInflictNappingStatus -TryInflictNappingStatus: ; 0x02311D60 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r4, #0 - mov r6, r2 - mov r5, #1 - mov r2, r4 - mov r3, r4 - mov r8, r0 - mov r7, r1 - str r5, [sp] - bl IsProtectedFromSleepClassStatus - cmp r0, #0 - bne _02311E5C - ldr r5, [r7, #0xb4] - ldrb r0, [r5, #0xbd] - cmp r0, #2 - beq _02311E44 - mov r0, r7 - bl ov29_022E4BA0 - ldrb r0, [r5, #0xbd] - cmp r0, #0 - cmpne r0, #4 - bne _02311DFC - mov r0, r8 - mov r1, r7 - mov r2, #0x2f -#ifndef JAPAN - mov r3, #1 -#endif - strb r6, [r5, #0xbe] - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02311E00 - ldrb r0, [r5, #0xbe] - mov r1, r0, asr #1 - and r0, r1, #0xff - cmp r0, #1 - strb r1, [r5, #0xbe] - movlo r0, #1 - strlob r0, [r5, #0xbe] - b _02311E00 -_02311DFC: - mov r4, #1 -_02311E00: - mov r2, #5 - mov r0, r7 - mov r1, #8 - strb r2, [r5, #0xbd] - bl ov29_02304A48 - cmp r4, #0 - beq _02311E30 - ldr r2, _02311E64 ; =0x00000D08 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02311E54 -_02311E30: - ldr r2, _02311E68 ; =0x00000D05 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02311E54 -_02311E44: - ldr r2, _02311E6C ; =0x00000D0B - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02311E54: - mov r0, r7 - bl UpdateStatusIconFlags -_02311E5C: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -_02311E64: .word 0x00000A48 -_02311E68: .word 0x00000A45 -_02311E6C: .word 0x00000A4B -#else -_02311E64: .word 0x00000D08 -_02311E68: .word 0x00000D05 -_02311E6C: .word 0x00000D0B -#endif - arm_func_end TryInflictNappingStatus - - arm_func_start TryInflictYawningStatus -TryInflictYawningStatus: ; 0x02311E70 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r4, r2 - mov r2, #1 - mov r3, r2 - mov r6, r0 - mov r5, r1 - str r2, [sp] - bl IsProtectedFromSleepClassStatus - cmp r0, #0 - bne _02311F6C - ldr r1, [r5, #0xb4] - ldrb r0, [r1, #0xbd] - cmp r0, #0 - bne _02311EEC - mov r0, #4 - strb r0, [r1, #0xbd] - mov r0, r5 - strb r4, [r1, #0xbe] - bl ov29_022E53EC - mov r0, r5 - mov r1, #8 - bl ov29_02304A48 - ldr r2, _02311F74 ; =0x00000D0F - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r6 - mov r1, r5 - bl TryActivateQuickFeet - b _02311F64 -_02311EEC: - cmp r0, #1 - cmpne r0, #3 - cmpne r0, #5 - bne _02311F10 - ldr r2, _02311F78 ; =0x00000D12 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02311F64 -_02311F10: - cmp r0, #2 - bne _02311F2C - mov r0, r6 - mov r1, r5 -#ifdef JAPAN - mov r2, #0xa50 -#else - mov r2, #0xd10 -#endif - bl LogMessageByIdWithPopupCheckUserTarget - b _02311F64 -_02311F2C: - cmp r0, #4 - bne _02311F48 - ldr r2, _02311F7C ; =0x00000D11 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02311F64 -_02311F48: - ldr r2, _02311F74 ; =0x00000D0F - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r6 - mov r1, r5 - bl TryActivateQuickFeet -_02311F64: - mov r0, r5 - bl UpdateStatusIconFlags -_02311F6C: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_02311F74: .word 0x00000A4F -_02311F78: .word 0x00000A52 -_02311F7C: .word 0x00000A51 -#else -_02311F74: .word 0x00000D0F -_02311F78: .word 0x00000D12 -_02311F7C: .word 0x00000D11 -#endif - arm_func_end TryInflictYawningStatus - - arm_func_start TryInflictSleeplessStatus -TryInflictSleeplessStatus: ; 0x02311F80 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r0, r6 - mov r4, #0 - bl EntityIsValid__023118B4 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - ldr r5, [r6, #0xb4] - mov r1, r6 - ldrb r0, [r5, #0xbd] - cmp r0, #1 - cmpne r0, #5 - cmpne r0, #3 - mov r0, #0 - mov r2, r0 - moveq r4, #1 - bl SubstitutePlaceholderStringTags - ldrb r0, [r5, #0xbd] - cmp r0, #2 - beq _02312040 - ldr r1, _0231205C ; =ov10_022C4728 - mov r3, #2 - mov r0, r6 - mov r2, #0 - strb r3, [r5, #0xbd] - bl CalcStatusDuration - add r0, r0, #1 - strb r0, [r5, #0xbe] - mov r1, #0xff -#ifdef JAPAN - strb r1, [r5, #0x174] - mov r0, r6 - strb r1, [r5, #0x173] -#else - strb r1, [r5, #0x178] - mov r0, r6 - strb r1, [r5, #0x177] -#endif - bl ov29_022E4BB4 - mov r0, r6 - mov r1, #8 - bl ov29_02304A48 - cmp r4, #0 - beq _0231202C - ldr r2, _02312060 ; =0x00000D13 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_0231202C: - ldr r2, _02312064 ; =0x00000D15 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - b _02312050 -_02312040: - ldr r2, _02312068 ; =0x00000D14 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02312050: - mov r0, r6 - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0231205C: .word ov10_022C4728 -#ifdef JAPAN -_02312060: .word 0x00000A53 -_02312064: .word 0x00000A55 -_02312068: .word 0x00000A54 -#else -_02312060: .word 0x00000D13 -_02312064: .word 0x00000D15 -_02312068: .word 0x00000D14 -#endif - arm_func_end TryInflictSleeplessStatus - - arm_func_start TryInflictPausedStatus -TryInflictPausedStatus: ; 0x0231206C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r0, r6 - mov r4, r2 - mov r5, r3 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r4, #0 - ldr r4, [r6, #0xb4] - beq _023120BC - ldrb r2, [sp, #0x18] - mov r0, r7 - mov r1, r6 - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_023120BC: - ldrb r2, [sp, #0x18] - mov r0, r7 - mov r1, r6 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldrb r0, [sp, #0x1c] - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - bl ov29_0234B034 - mov r1, #0 - mov r2, r4 - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - ldrb r0, [r4, #0xd0] - cmp r0, #3 - beq _02312160 - mov r1, #3 - mov r0, r6 - strb r1, [r4, #0xd0] - add r1, r5, #1 - strb r1, [r4, #0xd1] - bl ov29_022E4428 - cmp r5, #1 - bne _02312140 - ldr r2, _0231219C ; =0x00000D16 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - b _02312150 -_02312140: - ldr r2, _023121A0 ; =0x00000D18 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02312150: - mov r0, r7 - mov r1, r6 - bl TryActivateQuickFeet - b _0231218C -_02312160: - cmp r5, #1 - bne _0231217C - ldr r2, _023121A4 ; =0x00000D17 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - b _0231218C -_0231217C: - ldr r2, _023121A8 ; =0x00000D19 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_0231218C: - mov r0, r6 - bl UpdateStatusIconFlags - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -#define TRY_INFLICT_PAUSED_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_PAUSED_STATUS_OFFSET 0 -#endif -_0231219C: .word 0x00000D16 + TRY_INFLICT_PAUSED_STATUS_OFFSET -_023121A0: .word 0x00000D18 + TRY_INFLICT_PAUSED_STATUS_OFFSET -_023121A4: .word 0x00000D17 + TRY_INFLICT_PAUSED_STATUS_OFFSET -_023121A8: .word 0x00000D19 + TRY_INFLICT_PAUSED_STATUS_OFFSET - arm_func_end TryInflictPausedStatus - - arm_func_start TryInflictInfatuatedStatus -TryInflictInfatuatedStatus: ; 0x023121AC - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r4, r1 - mov r5, r0 - mov r0, r4 - mov r8, r2 - mov r7, r3 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - beq _0231231C - mov r0, r5 - mov r1, r4 - mov r2, r8 - ldr r6, [r4, #0xb4] - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - bne _0231231C - mov r0, r5 - mov r1, r4 - mov r2, r8 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, #0 - bne _0231231C - mov r0, r5 - mov r1, r4 - mov r2, #0x29 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02312260 - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SubstitutePlaceholderStringTags - cmp r8, #0 - beq _02312258 - ldr r2, _02312324 ; =0x00000DA3 - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget -_02312258: - mov r0, #0 - b _0231231C -_02312260: - ldr r3, _02312328 ; =0x00000DBB - mov ip, #3 - mov r0, r5 - mov r1, r4 - mov r2, r8 - str ip, [sp] - bl ExclusiveItemEffectIsActiveWithLogging - cmp r0, #0 - movne r0, #0 - bne _0231231C - cmp r7, #0 - movne r0, #1 - bne _0231231C - bl ov29_0234B034 - mov r1, #0 - mov r2, r6 - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - ldrb r0, [r6, #0xd0] - cmp r0, #7 - beq _02312300 - ldr r1, _0231232C ; =ov10_022C4804 - mov r3, #7 - mov r0, r4 - mov r2, #1 - strb r3, [r6, #0xd0] - bl CalcStatusDuration - add r1, r0, #1 - mov r0, r4 - strb r1, [r6, #0xd1] - bl ov29_022E4C00 - ldr r2, _02312330 ; =0x00000D1A - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r5 - mov r1, r4 - bl TryActivateQuickFeet - b _02312310 -_02312300: - ldr r2, _02312334 ; =0x00000D1B - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget -_02312310: - mov r0, r4 - bl UpdateStatusIconFlags - mov r0, #1 -_0231231C: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -#define TRY_INFLICT_INFATUATED_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_INFATUATED_STATUS_OFFSET 0 -#endif -_02312324: .word 0x00000DA3 + TRY_INFLICT_INFATUATED_STATUS_OFFSET -_02312328: .word 0x00000DBB + TRY_INFLICT_INFATUATED_STATUS_OFFSET -_0231232C: .word ov10_022C4804 -_02312330: .word 0x00000D1A + TRY_INFLICT_INFATUATED_STATUS_OFFSET -_02312334: .word 0x00000D1B + TRY_INFLICT_INFATUATED_STATUS_OFFSET - arm_func_end TryInflictInfatuatedStatus - - arm_func_start TryInflictBurnStatus -TryInflictBurnStatus: ; 0x02312338 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sb, r1 - mov sl, r0 - mov r0, sb - mov r4, r2 - mov r8, r3 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - mov r2, r8 - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - mov r2, r8 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r7, [sb, #0xb4] - bl ov29_0234B034 - mov r1, #0 - mov r2, r7 - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - mov r0, sl - mov r1, sb - mov r2, #0x42 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _023123F0 - cmp r8, #0 - beq _023123E8 - ldr r2, _023125F0 ; =0x00000DAB - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_023123E8: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_023123F0: - mov r0, sb - mov r1, #2 - bl MonsterIsType - cmp r0, #0 - beq _02312424 - cmp r8, #0 - beq _0231241C - ldr r2, _023125F4 ; =0x00000DAC - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_0231241C: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02312424: - mov r0, sb - bl GetTileAtEntity - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #2 - bne _0231247C - ldr r0, _023125F8 ; =DUNGEON_PTR - ldr r1, _023125FC ; =SECONDARY_TERRAIN_TYPES - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x30] -#else - ldrsh r0, [r0, #0xd4] -#endif - ldrb r0, [r1, r0] - cmp r0, #1 - beq _0231247C - cmp r8, #0 - beq _02312474 - ldr r2, _02312600 ; =0x00000DB9 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_02312474: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0231247C: - ldrb r0, [sp, #0x28] - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r0, [r7, #0xbf] - mov r5, #1 - cmp r0, #1 - beq _023124F4 - ldr r1, _02312604 ; =ov10_022C4874 - mov r0, sb - mov r2, r5 - strb r5, [r7, #0xbf] - bl CalcStatusDuration - add r0, r0, #1 - strb r0, [r7, #0xc0] - mov r5, #0 - strb r5, [r7, #0xc1] - strb r5, [r7, #0xc2] - cmp r4, #0 - beq _023124D4 - mov r0, sb - bl ov29_022E4294 -_023124D4: - ldr r2, _02312608 ; =0x00000D1C - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, sl - mov r1, sb - bl TryActivateQuickFeet - b _02312504 -_023124F4: - ldr r2, _0231260C ; =0x00000D1D - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_02312504: - mov r0, sb - bl UpdateStatusIconFlags - mov r0, sb - mov r1, #0x19 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _023125E8 - cmp r5, #0 - bne _023125E8 - mov r5, #0 - ldr fp, _02312610 ; =DIRECTIONS_XY - mov r4, r5 -_02312534: - mov r1, r4, lsl #2 - add r0, fp, r4, lsl #2 - ldrsh r3, [fp, r1] - ldrsh r1, [r0, #2] - ldrsh r0, [sb, #4] - ldrsh r2, [sb, #6] - add r0, r0, r3 - add r1, r2, r1 - bl GetTile - ldr r6, [r0, #0xc] - mov r0, r6 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _023125DC - ldr r0, [r6] - cmp r0, #1 - bne _023125DC - cmp r5, #0 - bne _023125AC - mov r5, #1 - bl ov29_0234B034 - mov r1, #0 - mov r2, r7 - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - ldr r2, _02312614 ; =0x00000DC5 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_023125AC: - mov r0, sb - mov r1, r6 - bl ov29_023018AC - cmp r0, #1 - bne _023125DC - mov r2, #0 - str r2, [sp] - mov r0, sl - mov r1, r6 - mov r2, #1 - mov r3, r8 - bl TryInflictBurnStatus -_023125DC: - add r4, r4, #1 - cmp r4, #8 - blt _02312534 -_023125E8: - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -#define TRY_INFLICT_BURN_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_BURN_STATUS_OFFSET 0 -#endif -_023125F0: .word 0x00000DAB + TRY_INFLICT_BURN_STATUS_OFFSET -_023125F4: .word 0x00000DAC + TRY_INFLICT_BURN_STATUS_OFFSET -_023125F8: .word DUNGEON_PTR -_023125FC: .word SECONDARY_TERRAIN_TYPES -_02312600: .word 0x00000DB9 + TRY_INFLICT_BURN_STATUS_OFFSET -_02312604: .word ov10_022C4874 -_02312608: .word 0x00000D1C + TRY_INFLICT_BURN_STATUS_OFFSET -_0231260C: .word 0x00000D1D + TRY_INFLICT_BURN_STATUS_OFFSET -_02312610: .word DIRECTIONS_XY -_02312614: .word 0x00000DC5 + TRY_INFLICT_BURN_STATUS_OFFSET - arm_func_end TryInflictBurnStatus - - arm_func_start TryInflictBurnStatusWholeTeam -TryInflictBurnStatusWholeTeam: ; 0x02312618 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, #0 - ldr r4, _02312660 ; =DUNGEON_PTR - mov r6, r7 - mov r5, #1 -_0231262C: - ldr r0, [r4] - mov r2, r5 - add r0, r0, r7, lsl #2 - str r6, [sp] - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r0, [r0, #0xa84] -#else - ldr r0, [r0, #0xb28] -#endif - mov r3, r5 - mov r1, r0 - bl TryInflictBurnStatus - add r7, r7, #1 - cmp r7, #4 - blt _0231262C - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02312660: .word DUNGEON_PTR - arm_func_end TryInflictBurnStatusWholeTeam - - arm_func_start TryInflictPoisonedStatus -TryInflictPoisonedStatus: ; 0x02312664 -#ifdef JAPAN -#define TRY_INFLICT_POISONED_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_POISONED_STATUS_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sb, r1 - mov sl, r0 - mov r0, sb - mov r8, r2 - mov r4, r3 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - mov r2, r8 - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - mov r2, r8 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r7, [sb, #0xb4] - bl ov29_0234B034 - mov r1, #0 - mov r2, r7 - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - mov r0, sb - mov r1, #0x1b - bl ItemIsActive__02311BF8 - cmp r0, #0 - beq _02312714 - cmp r8, #0 - beq _0231270C - mov r0, sl - mov r1, sb - mov r2, #0xdb0 + TRY_INFLICT_POISONED_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUserTarget -_0231270C: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02312714: - mov r0, sl - mov r1, sb - mov r2, #0x45 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02312750 - cmp r8, #0 - beq _02312748 - ldr r2, _02312924 ; =0x00000DAD - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_02312748: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02312750: - mov r0, sb - mov r1, #8 - bl MonsterIsType - cmp r0, #0 - bne _02312778 - mov r0, sb - mov r1, #0x11 - bl MonsterIsType - cmp r0, #0 - beq _02312798 -_02312778: - cmp r8, #0 - beq _02312790 - ldr r2, _02312928 ; =0x00000DAE - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_02312790: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02312798: - cmp r4, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r0, [r7, #0xbf] - mov r4, #1 - cmp r0, #3 - beq _02312830 - cmp r0, #2 - beq _0231281C - ldr r1, _0231292C ; =ov10_022C4878 - mov r3, #2 - mov r0, sb - mov r2, r4 - strb r3, [r7, #0xbf] - bl CalcStatusDuration - add r0, r0, #1 - strb r0, [r7, #0xc0] - mov r4, #0 - strb r4, [r7, #0xc1] - mov r0, sb - strb r4, [r7, #0xc2] - bl ov29_022E4388 - ldr r2, _02312930 ; =0x00000D1E - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, sb - mov r1, #8 - bl ov29_02304A84 - mov r0, sl - mov r1, sb - bl TryActivateQuickFeet - b _02312840 -_0231281C: - mov r0, sl - mov r1, sb - mov r2, #0xd20 + TRY_INFLICT_POISONED_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUserTarget - b _02312840 -_02312830: - mov r0, sl - mov r1, sb - add r2, r4, #0xd20 + TRY_INFLICT_POISONED_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUserTarget -_02312840: - mov r0, sb - mov r1, #0x19 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _02312914 - cmp r4, #0 - bne _02312914 - mov r5, #0 - ldr fp, _02312934 ; =DIRECTIONS_XY - mov r4, r5 -_02312868: - mov r1, r4, lsl #2 - add r0, fp, r4, lsl #2 - ldrsh r6, [sb, #4] - ldrsh r3, [fp, r1] - ldrsh r1, [r0, #2] - ldrsh r2, [sb, #6] - add r0, r6, r3 - add r1, r2, r1 - bl GetTile - ldr r6, [r0, #0xc] - mov r0, r6 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _02312908 - ldr r0, [r6] - cmp r0, #1 - bne _02312908 - cmp r5, #0 - bne _023128E0 - mov r5, #1 - bl ov29_0234B034 - mov r1, #0 - mov r2, r7 - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - ldr r2, _02312938 ; =0x00000DC5 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_023128E0: - mov r0, sb - mov r1, r6 - bl ov29_023018AC - cmp r0, #1 - bne _02312908 - mov r0, sl - mov r1, r6 - mov r2, r8 - mov r3, #0 - bl TryInflictPoisonedStatus -_02312908: - add r4, r4, #1 - cmp r4, #8 - blt _02312868 -_02312914: - mov r0, sb - bl UpdateStatusIconFlags - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02312924: .word 0x00000DAD + TRY_INFLICT_POISONED_STATUS_OFFSET -_02312928: .word 0x00000DAE + TRY_INFLICT_POISONED_STATUS_OFFSET -_0231292C: .word ov10_022C4878 -_02312930: .word 0x00000D1E + TRY_INFLICT_POISONED_STATUS_OFFSET -_02312934: .word DIRECTIONS_XY -_02312938: .word 0x00000DC5 + TRY_INFLICT_POISONED_STATUS_OFFSET - arm_func_end TryInflictPoisonedStatus - - arm_func_start TryInflictBadlyPoisonedStatus -TryInflictBadlyPoisonedStatus: ; 0x0231293C -#ifdef JAPAN -#define TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sb, r1 - mov sl, r0 - mov r0, sb - mov r8, r2 - mov r4, r3 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - mov r2, r8 - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - mov r2, r8 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldr r7, [sb, #0xb4] - bl ov29_0234B034 - mov r1, #0 - mov r2, r7 - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - mov r0, sb - mov r1, #0x1b - bl ItemIsActive__02311BF8 - cmp r0, #0 - beq _023129EC - cmp r8, #0 - beq _023129E4 - mov r0, sl - mov r1, sb - mov r2, #0xdb0 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUserTarget -_023129E4: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_023129EC: - mov r0, sl - mov r1, sb - mov r2, #0x45 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02312A28 - cmp r8, #0 - beq _02312A20 - ldr r2, _02312BE0 ; =0x00000DAD - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_02312A20: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02312A28: - mov r0, sb - mov r1, #8 - bl MonsterIsType - cmp r0, #0 - bne _02312A50 - mov r0, sb - mov r1, #0x11 - bl MonsterIsType - cmp r0, #0 - beq _02312A70 -_02312A50: - cmp r8, #0 - beq _02312A68 - ldr r2, _02312BE4 ; =0x00000DAE - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_02312A68: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02312A70: - cmp r4, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - ldrb r0, [r7, #0xbf] - mov r4, #1 - cmp r0, #3 - beq _02312AEC - ldr r1, _02312BE8 ; =ov10_022C4880 - mov r3, #3 - mov r0, sb - mov r2, r4 - strb r3, [r7, #0xbf] - bl CalcStatusDuration - add r0, r0, #1 - strb r0, [r7, #0xc0] - mov r4, #0 - strb r4, [r7, #0xc1] - mov r0, sb - strb r4, [r7, #0xc2] - bl ov29_022E43D8 - ldr r2, _02312BEC ; =0x00000D1F - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, sb - mov r1, #8 - bl ov29_02304A84 - mov r0, sl - mov r1, sb - bl TryActivateQuickFeet - b _02312AFC -_02312AEC: - mov r0, sl - mov r1, sb - add r2, r4, #0xd20 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUserTarget -_02312AFC: - mov r0, sb - mov r1, #0x19 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _02312BD0 - cmp r4, #0 - bne _02312BD0 - mov r5, #0 - ldr fp, _02312BF0 ; =DIRECTIONS_XY - mov r4, r5 -_02312B24: - mov r1, r4, lsl #2 - add r0, fp, r4, lsl #2 - ldrsh r6, [sb, #4] - ldrsh r3, [fp, r1] - ldrsh r1, [r0, #2] - ldrsh r2, [sb, #6] - add r0, r6, r3 - add r1, r2, r1 - bl GetTile - ldr r6, [r0, #0xc] - mov r0, r6 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _02312BC4 - ldr r0, [r6] - cmp r0, #1 - bne _02312BC4 - cmp r5, #0 - bne _02312B9C - mov r5, #1 - bl ov29_0234B034 - mov r1, #0 - mov r2, r7 - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - ldr r2, _02312BF4 ; =0x00000DC5 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_02312B9C: - mov r0, sb - mov r1, r6 - bl ov29_023018AC - cmp r0, #1 - bne _02312BC4 - mov r0, sl - mov r1, r6 - mov r2, r8 - mov r3, #0 - bl TryInflictBadlyPoisonedStatus -_02312BC4: - add r4, r4, #1 - cmp r4, #8 - blt _02312B24 -_02312BD0: - mov r0, sb - bl UpdateStatusIconFlags - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02312BE0: .word 0x00000DAD + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET -_02312BE4: .word 0x00000DAE + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET -_02312BE8: .word ov10_022C4880 -_02312BEC: .word 0x00000D1F + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET -_02312BF0: .word DIRECTIONS_XY -_02312BF4: .word 0x00000DC5 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET - arm_func_end TryInflictBadlyPoisonedStatus - - arm_func_start TryInflictFrozenStatus -TryInflictFrozenStatus: ; 0x02312BF8 -#ifdef JAPAN -#define TRY_INFLICT_FROZEN_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_FROZEN_STATUS_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r0, r6 - mov r5, r2 - bl EntityIsValid__023118B4 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r4, [r6, #0xb4] - ldrb r0, [r4, #0xc4] - cmp r0, #1 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl SafeguardIsActive - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov ip, #4 - mov r0, r7 - mov r1, r6 - mov r2, r5 - rsb r3, ip, #0xdc0 + TRY_INFLICT_FROZEN_STATUS_OFFSET - str ip, [sp] - bl ExclusiveItemEffectIsActiveWithLogging - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, #0x41 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02312CC4 - cmp r5, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - ldr r2, _02312E00 ; =0x00000DA8 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02312CC4: - mov r0, r6 - mov r1, #6 - bl MonsterIsType - cmp r0, #0 - beq _02312CF4 - cmp r5, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - ldr r2, _02312E04 ; =0x00000DA9 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02312CF4: - mov r0, r6 - bl GetTileAtEntity - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #2 - bne _02312D48 - ldr r0, _02312E08 ; =DUNGEON_PTR - ldr r1, _02312E0C ; =SECONDARY_TERRAIN_TYPES - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x30] -#else - ldrsh r0, [r0, #0xd4] -#endif - ldrb r0, [r1, r0] - cmp r0, #1 - bne _02312D48 - cmp r5, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - ldr r2, _02312E10 ; =0x00000DAA - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02312D48: - mov ip, #4 - mov r0, r7 - mov r1, r6 - mov r2, r5 - rsb r3, ip, #0xdc0 + TRY_INFLICT_FROZEN_STATUS_OFFSET - str ip, [sp] - bl ExclusiveItemEffectIsActiveWithLogging - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldrb r0, [r4, #0xc4] - add r0, r0, #0xfd - and r0, r0, #0xff - cmp r0, #1 - bhi _02312D88 - ldr r0, [r4, #0xb4] - bl FreeOtherWrappedMonsters -_02312D88: - mov r0, r6 - bl ov29_022E4C4C - mov r2, #1 - ldr r1, _02312E14 ; =ov10_022C4870 - mov r0, r6 - strb r2, [r4, #0xc4] - bl CalcStatusDuration - add r3, r0, #1 - strb r3, [r4, #0xcc] - mov r3, #0 - ldr r2, _02312E18 ; =0x00000D22 - mov r0, r7 - mov r1, r6 - strb r3, [r4, #0xcd] - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r6 - bl UpdateStatusIconFlags - mov r0, r7 - mov r1, r6 - bl TryActivateQuickFeet - mov r0, r6 - mov r1, #0 - bl ChangeShayminForme - cmp r0, #3 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r2, _02312E1C ; =0x00000D23 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02312E00: .word 0x00000DA8 + TRY_INFLICT_FROZEN_STATUS_OFFSET -_02312E04: .word 0x00000DA9 + TRY_INFLICT_FROZEN_STATUS_OFFSET -_02312E08: .word DUNGEON_PTR -_02312E0C: .word SECONDARY_TERRAIN_TYPES -_02312E10: .word 0x00000DAA + TRY_INFLICT_FROZEN_STATUS_OFFSET -_02312E14: .word ov10_022C4870 -_02312E18: .word 0x00000D22 + TRY_INFLICT_FROZEN_STATUS_OFFSET -_02312E1C: .word 0x00000D23 + TRY_INFLICT_FROZEN_STATUS_OFFSET - arm_func_end TryInflictFrozenStatus - - arm_func_start TryInflictConstrictionStatus -TryInflictConstrictionStatus: ; 0x02312E20 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r0, r6 - mov r5, r2 - mov r4, r3 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, r4 - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, r4 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r4, [r6, #0xb4] - ldrb r1, [r4, #0xc4] - add r0, r1, #0xfd - and r0, r0, #0xff - cmp r0, #1 - bhi _02312EA4 - ldr r0, [r4, #0xb4] - bl FreeOtherWrappedMonsters - b _02312ECC -_02312EA4: - cmp r1, #5 - bne _02312ECC - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _02312F68 ; =0x00000C9B - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02312ECC: - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xc4] - cmp r0, #7 - beq _02312F48 - ldr r1, _02312F6C ; =ov10_022C48A0 - mov r3, #7 - mov r0, r6 - mov r2, #1 - strb r3, [r4, #0xc4] - bl CalcStatusDuration - add r0, r0, #1 - strb r0, [r4, #0xcc] - mov r0, #0 - strb r0, [r4, #0xcd] - mov r0, r6 - str r5, [r4, #0xc8] - bl ov29_022E42E4 - ldr r2, _02312F70 ; =0x00000D24 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r6 - mov r1, #8 - bl ov29_02304A84 - mov r0, r7 - mov r1, r6 - bl TryActivateQuickFeet - b _02312F58 -_02312F48: - ldr r2, _02312F74 ; =0x00000D25 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02312F58: - mov r0, r6 - bl UpdateStatusIconFlags - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -#define TRY_INFLICT_CONSTRICTION_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_CONSTRICTION_STATUS_OFFSET 0 -#endif -_02312F68: .word 0x00000C9B + TRY_INFLICT_CONSTRICTION_STATUS_OFFSET -_02312F6C: .word ov10_022C48A0 -_02312F70: .word 0x00000D24 + TRY_INFLICT_CONSTRICTION_STATUS_OFFSET -_02312F74: .word 0x00000D25 + TRY_INFLICT_CONSTRICTION_STATUS_OFFSET - arm_func_end TryInflictConstrictionStatus - - arm_func_start TryInflictShadowHoldStatus -TryInflictShadowHoldStatus: ; 0x02312F78 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r1 - mov r6, r0 - mov r0, r5 - mov r4, r2 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, r6 - mov r1, r5 - mov r2, #1 - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, pc} - mov r0, r6 - mov r1, r5 - mov r2, #1 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, pc} - mov r0, r6 - mov r1, r5 - mov r2, #0x2b -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _0231302C - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r0, #1 - mov r1, #0x2b - bl ov29_0234B084 - cmp r4, #0 - bne _02313024 - ldr r2, _0231311C ; =0x00000D28 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_02313024: - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} -_0231302C: - cmp r4, #0 - movne r0, #1 - ldmneia sp!, {r4, r5, r6, pc} - ldr r4, [r5, #0xb4] - ldrb r1, [r4, #0xc4] - add r0, r1, #0xfd - and r0, r0, #0xff - cmp r0, #1 - bhi _0231305C - ldr r0, [r4, #0xb4] - bl FreeOtherWrappedMonsters - b _02313084 -_0231305C: - cmp r1, #5 - bne _02313084 - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _02313120 ; =0x00000C9B - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_02313084: - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xc4] - cmp r0, #2 - beq _023130FC - ldr r1, _02313124 ; =ov10_022C4898 - mov r3, #2 - mov r0, r5 - mov r2, #1 - strb r3, [r4, #0xc4] - bl CalcStatusDuration - add r1, r0, #1 - mov r0, r5 - strb r1, [r4, #0xcc] - mov r1, #0 - strb r1, [r4, #0xcd] - bl ov29_022E42E0 - ldr r2, _02313128 ; =0x00000D26 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r5 - mov r1, #8 - bl ov29_02304A84 - mov r0, r6 - mov r1, r5 - bl TryActivateQuickFeet - b _0231310C -_023130FC: - ldr r2, _0231312C ; =0x00000D27 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_0231310C: - mov r0, r5 - bl UpdateStatusIconFlags - mov r0, #1 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -#define TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET 0 -#endif -_0231311C: .word 0x00000D28 + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET -_02313120: .word 0x00000C9B + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET -_02313124: .word ov10_022C4898 -_02313128: .word 0x00000D26 + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET -_0231312C: .word 0x00000D27 + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET - arm_func_end TryInflictShadowHoldStatus - - arm_func_start TryInflictIngrainStatus -TryInflictIngrainStatus: ; 0x02313130 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r1 - mov r6, r0 - mov r0, r5 - bl EntityIsValid__023118B4 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - ldr r4, [r5, #0xb4] - ldrb r0, [r4, #0xc4] - add r0, r0, #0xfd - and r0, r0, #0xff - cmp r0, #1 - bhi _0231316C - ldr r0, [r4, #0xb4] - bl FreeOtherWrappedMonsters -_0231316C: - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xc4] - cmp r0, #5 - beq _023131CC - ldr r1, _023131E8 ; =ov10_022C48B8 - mov r3, #5 - mov r0, r5 - mov r2, #0 - strb r3, [r4, #0xc4] - bl CalcStatusDuration - add r1, r0, #1 - mov r0, r5 - strb r1, [r4, #0xcc] - mov r1, #0 - strb r1, [r4, #0xcd] - bl ov29_022E4D24 - ldr r2, _023131EC ; =0x00000D29 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _023131DC -_023131CC: - ldr r2, _023131F0 ; =0x00000D2A - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_023131DC: - mov r0, r5 - bl UpdateStatusIconFlags - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023131E8: .word ov10_022C48B8 -#ifdef JAPAN -_023131EC: .word 0x00000A69 -_023131F0: .word 0x00000A6A -#else -_023131EC: .word 0x00000D29 -_023131F0: .word 0x00000D2A -#endif - arm_func_end TryInflictIngrainStatus - - arm_func_start TryInflictWrappedStatus -TryInflictWrappedStatus: ; 0x023131F4 -#ifdef JAPAN -#define TRY_INFLICT_WRAPPED_STATUS_OFFSET -0xA4 -#else -#define TRY_INFLICT_WRAPPED_STATUS_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r0, r6 - bl EntityIsValid__023118B4 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, #1 - bl SafeguardIsActive - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, #1 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - ldr r4, [r7, #0xb4] - ldr r5, [r6, #0xb4] - ldrb r1, [r4, #0xc4] - cmp r1, #3 - cmpne r1, #4 - ldrneb r0, [r5, #0xc4] - cmpne r0, #3 - cmpne r0, #4 - beq _02313324 - mov r0, #3 - strb r0, [r4, #0xc4] - mov r0, #0x7f - strb r0, [r4, #0xcc] - mov r2, #0 - ldr r1, _023133DC ; =ov10_022C48AC - mov r0, r6 - strb r2, [r4, #0xcd] - mov r3, #4 - mov r2, #1 - strb r3, [r5, #0xc4] - bl CalcStatusDuration - add r0, r0, #1 - strb r0, [r5, #0xcc] - mov r0, #0 - ldr r3, _023133E0 ; =DUNGEON_PTR - strb r0, [r5, #0xcd] - ldr r1, [r3] - mov r0, r7 - add r1, r1, #0x3000 - ldr r2, [r1, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET] - mov r1, r6 - str r2, [r4, #0xb4] - ldr r2, [r3] - add r2, r2, #0x3000 - ldr r2, [r2, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET] - str r2, [r5, #0xb4] - ldr r2, [r3] - add r2, r2, #0x3000 - ldr r3, [r2, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET] - add r3, r3, #1 - str r3, [r2, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET] - bl ov29_022E4290 - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _023133E4 ; =0x00000D2B - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r6 - mov r1, #8 - bl ov29_02304A84 - mov r0, r7 - mov r1, r6 - bl TryActivateQuickFeet - b _023133D0 -_02313324: - cmp r1, #3 - bne _0231334C - mov r0, #0 - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _023133E8 ; =0x00000D2C - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_0231334C: - ldrb r0, [r5, #0xc4] - cmp r0, #3 - bne _02313378 - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _023133E8 ; =0x00000D2C - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02313378: - ldrb r0, [r4, #0xc4] - cmp r0, #4 - bne _023133A4 - mov r0, #0 - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _023133EC ; =0x00000D2D - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_023133A4: - ldrb r0, [r5, #0xc4] - cmp r0, #4 - bne _023133D0 - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _023133EC ; =0x00000D2D - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_023133D0: - mov r0, r6 - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -#define TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET -0x2C0 -#else -#define TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET 0 -#endif -_023133DC: .word ov10_022C48AC -_023133E0: .word DUNGEON_PTR -_023133E4: .word 0x00000D2B + TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET -_023133E8: .word 0x00000D2C + TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET -_023133EC: .word 0x00000D2D + TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET - arm_func_end TryInflictWrappedStatus - - arm_func_start FreeOtherWrappedMonsters -FreeOtherWrappedMonsters: ; 0x023133F0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r4, #0 - ldr r7, _02313468 ; =DUNGEON_PTR - mov r6, r0 - mov sb, r4 - mov r8, r4 -_02313408: - ldr r0, [r7] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r5, [r0, #0xad4] -#else - ldr r5, [r0, #0xb78] -#endif - mov r0, r5 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _02313458 - ldr r1, [r5, #0xb4] - ldr r0, [r1, #0xb4] - cmp r0, r6 - bne _02313450 - ldrb r0, [r1, #0xc4] - add r0, r0, #0xfd - and r0, r0, #0xff - cmp r0, #1 - strlsb sb, [r1, #0xc4] - str r8, [r1, #0xb4] -_02313450: - mov r0, r5 - bl UpdateStatusIconFlags -_02313458: - add r4, r4, #1 - cmp r4, #0x14 - blt _02313408 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02313468: .word DUNGEON_PTR - arm_func_end FreeOtherWrappedMonsters - - arm_func_start TryInflictPetrifiedStatus -TryInflictPetrifiedStatus: ; 0x0231346C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r5, r1 - mov r6, r0 - mov r0, r5 - bl EntityIsValid__023118B4 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r0, r6 - mov r1, r5 - mov r2, #1 - bl SafeguardIsActive - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r0, r6 - mov r1, r5 - mov r2, #1 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r0, r5 - bl ov29_022E41F0 - ldr r4, [r5, #0xb4] - ldrb r0, [r4, #0xc4] - add r0, r0, #0xfd - and r0, r0, #0xff - cmp r0, #1 - bhi _023134E0 - ldr r0, [r4, #0xb4] - bl FreeOtherWrappedMonsters -_023134E0: - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xc4] - cmp r0, #6 - beq _02313560 - mov r0, #6 - strb r0, [r4, #0xc4] - ldrb r0, [r4, #7] - mov r2, #1 - cmp r0, #0 - beq _02313524 - ldr r1, _023135E8 ; =ov10_022C479C - mov r0, r5 - bl CalcStatusDuration - b _02313530 -_02313524: - ldr r1, _023135EC ; =ov10_022C47A0 - mov r0, r5 - bl CalcStatusDuration -_02313530: - add r0, r0, #1 - strb r0, [r4, #0xcc] - mov r3, #0 - ldr r2, _023135F0 ; =0x00000D32 - mov r0, r6 - mov r1, r5 - strb r3, [r4, #0xcd] - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r6 - mov r1, r5 - bl TryActivateQuickFeet - b _02313570 -_02313560: - ldr r2, _023135F4 ; =0x00000D33 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_02313570: - ldrb r0, [r4, #6] - cmp r0, #0 - beq _023135DC - mov r4, #0 - ldr r6, _023135F8 ; =DUNGEON_PTR - mov r8, #6 - mov r7, r4 -_0231358C: - ldr r0, [r6] - add r0, r0, r4, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr sb, [r0, #0xa84] -#else - ldr sb, [r0, #0xb28] -#endif - mov r0, sb - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _023135D0 - ldr r1, [sb, #0xb4] - ldrb r0, [r1, #0x7c] - cmp r0, #1 - ldreq r0, [r1, #0x84] - cmpeq r0, r5 - streqb r8, [r1, #0x7c] - streq r7, [r1, #0x84] - streqh r7, [r1, #0x80] - streqb r7, [r1, #0x7e] -_023135D0: - add r4, r4, #1 - cmp r4, #4 - blt _0231358C -_023135DC: - mov r0, r5 - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_023135E8: .word ov10_022C479C -_023135EC: .word ov10_022C47A0 -#ifdef JAPAN -_023135F0: .word 0x00000A72 -_023135F4: .word 0x00000A73 -#else -_023135F0: .word 0x00000D32 -_023135F4: .word 0x00000D33 -#endif -_023135F8: .word DUNGEON_PTR - arm_func_end TryInflictPetrifiedStatus - - arm_func_start LowerOffensiveStat -LowerOffensiveStat: ; 0x023135FC - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r1 - mov r5, r3 - mov r8, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r6, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r4, r0 - mov r1, r5, lsl #0x10 - mov r0, r7 - mov r5, r1, asr #0x10 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _023137E8 - ldr r0, [sp, #0x20] - cmp r0, #0 - beq _02313660 - ldr r1, _023137F4 ; =0x00000DCB - mov r0, r6 - bl CopyStringFromId - mov r1, r6 - mov r0, #1 - bl ov29_0234B0B4 - b _02313678 -_02313660: - ldr r1, _023137F8 ; =0x00000DCA - mov r0, r6 - bl CopyStringFromId - mov r1, r6 - mov r0, #1 - bl ov29_0234B0B4 -_02313678: - ldrb r0, [sp, #0x28] - cmp r0, #0 - beq _02313720 - ldrb r2, [sp, #0x2c] - mov r0, r8 - mov r1, r7 - bl IsProtectedFromStatDrops - cmp r0, #0 - bne _023137E8 - mov r0, r7 - mov r1, #0x12 - bl ItemIsActive__02311BF8 - cmp r0, #0 - beq _023136D4 - mov r0, #0 - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _023137FC ; =0x00000DB2 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _023137E8 -_023136D4: - mov r0, r8 - mov r1, r7 - mov r2, #9 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02313720 - ldr r0, [sp, #0x20] - cmp r0, #0 - bne _02313720 - mov r0, #0 - mov r1, r7 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _02313800 ; =0x00000D9E - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _023137E8 -_02313720: - mov r0, #0 - mov r1, r7 - mov r2, r0 - ldr r6, [r7, #0xb4] - bl SubstitutePlaceholderStringTags - add r1, sp, #0x20 - ldr r1, [r1] - mov r0, r7 - bl ov29_022E4D28 - mov r0, r7 - mov r1, #0x61 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, r5, lsl #0x11 - movne r5, r0, asr #0x10 - cmp r5, #1 - bne _02313780 - ldr r1, _02313804 ; =0x00000DCD - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #2 - bl ov29_0234B0B4 - b _02313798 -_02313780: - ldr r1, _02313808 ; =0x00000DCC - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #2 - bl ov29_0234B0B4 -_02313798: - ldr r1, [sp, #0x20] - add r0, r6, r1, lsl #1 - ldrsh r0, [r0, #0x24] - subs r4, r0, r5 - movmi r4, #0 - cmp r4, r0 - beq _023137D0 - ldr r2, _0231380C ; =0x00000D91 - add r3, r6, r1, lsl #1 - mov r0, r8 - mov r1, r7 - strh r4, [r3, #0x24] - bl LogMessageByIdWithPopupCheckUserTarget - b _023137E0 -_023137D0: - ldr r2, _02313810 ; =0x00000DD9 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_023137E0: - mov r0, r7 - bl UpdateStatusIconFlags -_023137E8: - ldmia sp!, {r4, r5, r6, r7, r8, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -#ifdef JAPAN -#define LOWER_OFFENSIVE_STAT_OFFSET -0x2C0 -#else -#define LOWER_OFFENSIVE_STAT_OFFSET 0 -#endif -_023137F4: .word 0x00000DCB + LOWER_OFFENSIVE_STAT_OFFSET -_023137F8: .word 0x00000DCA + LOWER_OFFENSIVE_STAT_OFFSET -_023137FC: .word 0x00000DB2 + LOWER_OFFENSIVE_STAT_OFFSET -_02313800: .word 0x00000D9E + LOWER_OFFENSIVE_STAT_OFFSET -_02313804: .word 0x00000DCD + LOWER_OFFENSIVE_STAT_OFFSET -_02313808: .word 0x00000DCC + LOWER_OFFENSIVE_STAT_OFFSET -_0231380C: .word 0x00000D91 + LOWER_OFFENSIVE_STAT_OFFSET -_02313810: .word 0x00000DD9 + LOWER_OFFENSIVE_STAT_OFFSET - arm_func_end LowerOffensiveStat - - arm_func_start LowerDefensiveStat -LowerDefensiveStat: ; 0x02313814 -#ifdef JAPAN -#define LOWER_DEFENSIVE_STAT_OFFSET -0x2C0 -#else -#define LOWER_DEFENSIVE_STAT_OFFSET 0 -#endif - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r1 - mov r5, r3 - mov r8, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r6, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r4, r0 - mov r1, r5, lsl #0x10 - mov r0, r7 - mov r5, r1, asr #0x10 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _0231397C - ldr r0, [sp, #0x20] - cmp r0, #0 - beq _02313878 - ldr r1, _02313988 ; =0x00000DC9 - mov r0, r6 - bl CopyStringFromId - mov r1, r6 - mov r0, #1 - bl ov29_0234B0B4 - b _02313890 -_02313878: - ldr r1, _0231398C ; =0x00000DC8 - mov r0, r6 - bl CopyStringFromId - mov r1, r6 - mov r0, #1 - bl ov29_0234B0B4 -_02313890: - ldrb r0, [sp, #0x28] - cmp r0, #0 - beq _023138B4 - ldrb r2, [sp, #0x2c] - mov r0, r8 - mov r1, r7 - bl IsProtectedFromStatDrops - cmp r0, #0 - bne _0231397C -_023138B4: - mov r0, #0 - mov r1, r7 - mov r2, r0 - ldr r6, [r7, #0xb4] - bl SubstitutePlaceholderStringTags - add r1, sp, #0x20 - ldr r1, [r1] - mov r0, r7 - bl ov29_022E4DCC - mov r0, r7 - mov r1, #0x61 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, r5, lsl #0x11 - movne r5, r0, asr #0x10 - cmp r5, #1 - bne _02313914 - ldr r1, _02313990 ; =0x00000DCD - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #2 - bl ov29_0234B0B4 - b _0231392C -_02313914: - ldr r1, _02313994 ; =0x00000DCC - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #2 - bl ov29_0234B0B4 -_0231392C: - ldr r1, [sp, #0x20] - add r0, r6, r1, lsl #1 - ldrsh r0, [r0, #0x28] - subs r4, r0, r5 - movmi r4, #0 - cmp r4, r0 - beq _02313964 - add r3, r6, r1, lsl #1 - mov r0, r8 - mov r1, r7 - mov r2, #0xd90 + LOWER_DEFENSIVE_STAT_OFFSET - strh r4, [r3, #0x28] - bl LogMessageByIdWithPopupCheckUserTarget - b _02313974 -_02313964: - ldr r2, _02313998 ; =0x00000DD7 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02313974: - mov r0, r7 - bl UpdateStatusIconFlags -_0231397C: - ldmia sp!, {r4, r5, r6, r7, r8, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_02313988: .word 0x00000DC9 + LOWER_DEFENSIVE_STAT_OFFSET -_0231398C: .word 0x00000DC8 + LOWER_DEFENSIVE_STAT_OFFSET -_02313990: .word 0x00000DCD + LOWER_DEFENSIVE_STAT_OFFSET -_02313994: .word 0x00000DCC + LOWER_DEFENSIVE_STAT_OFFSET -_02313998: .word 0x00000DD7 + LOWER_DEFENSIVE_STAT_OFFSET - arm_func_end LowerDefensiveStat - - arm_func_start BoostOffensiveStat -BoostOffensiveStat: ; 0x0231399C - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, r1 - mov r6, r3 - mov sb, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r4, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r5, r0 - mov r1, r6, lsl #0x10 - mov r0, r8 - mov r6, r1, asr #0x10 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _02313AE4 - mov r0, #0 - mov r1, r8 - mov r2, r0 - ldr r7, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - add r1, sp, #0x28 - ldr r1, [r1] - mov r0, r8 - bl ov29_022E4E74 - ldr r0, [sp, #0x28] - cmp r0, #0 - beq _02313A24 - ldr r1, _02313AF0 ; =0x00000DCB - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl ov29_0234B0B4 - b _02313A3C -_02313A24: - ldr r1, _02313AF4 ; =0x00000DCA - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl ov29_0234B0B4 -_02313A3C: - mov r0, r8 - mov r1, #0x61 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, r6, lsl #0x11 - movne r6, r0, asr #0x10 - cmp r6, #1 - bne _02313A78 - ldr r1, _02313AF8 ; =0x00000DCD - mov r0, r5 - bl CopyStringFromId - mov r1, r5 - mov r0, #2 - bl ov29_0234B0B4 - b _02313A90 -_02313A78: - ldr r1, _02313AFC ; =0x00000DCC - mov r0, r5 - bl CopyStringFromId - mov r1, r5 - mov r0, #2 - bl ov29_0234B0B4 -_02313A90: - ldr r1, [sp, #0x28] - add r0, r7, r1, lsl #1 - ldrsh r0, [r0, #0x24] - add r4, r0, r6 - cmp r4, #0x14 - movge r4, #0x14 - cmp r4, r0 - beq _02313ACC - ldr r2, _02313B00 ; =0x00000D8F - add r3, r7, r1, lsl #1 - mov r0, sb - mov r1, r8 - strh r4, [r3, #0x24] - bl LogMessageByIdWithPopupCheckUserTarget - b _02313ADC -_02313ACC: - ldr r2, _02313B04 ; =0x00000DD8 - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget -_02313ADC: - mov r0, r8 - bl UpdateStatusIconFlags -_02313AE4: - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -#ifdef JAPAN -#define BOOST_OFFENSIVE_STAT_OFFSET -0x2C0 -#else -#define BOOST_OFFENSIVE_STAT_OFFSET 0 -#endif -_02313AF0: .word 0x00000DCB + BOOST_OFFENSIVE_STAT_OFFSET -_02313AF4: .word 0x00000DCA + BOOST_OFFENSIVE_STAT_OFFSET -_02313AF8: .word 0x00000DCD + BOOST_OFFENSIVE_STAT_OFFSET -_02313AFC: .word 0x00000DCC + BOOST_OFFENSIVE_STAT_OFFSET -_02313B00: .word 0x00000D8F + BOOST_OFFENSIVE_STAT_OFFSET -_02313B04: .word 0x00000DD8 + BOOST_OFFENSIVE_STAT_OFFSET - arm_func_end BoostOffensiveStat - -; https://decomp.me/scratch/90P8f - arm_func_start BoostDefensiveStat -BoostDefensiveStat: ; 0x02313B08 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, r1 - mov r6, r3 - mov sb, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r4, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r5, r0 - mov r1, r6, lsl #0x10 - mov r0, r8 - mov r6, r1, asr #0x10 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _02313C50 - mov r0, #0 - mov r1, r8 - mov r2, r0 - ldr r7, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - add r1, sp, #0x28 - ldr r1, [r1] - mov r0, r8 - bl ov29_022E4F1C - ldr r0, [sp, #0x28] - cmp r0, #0 - beq _02313B90 - ldr r1, _02313C5C ; =0x00000DC9 - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl ov29_0234B0B4 - b _02313BA8 -_02313B90: - ldr r1, _02313C60 ; =0x00000DC8 - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl ov29_0234B0B4 -_02313BA8: - mov r0, r8 - mov r1, #0x61 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, r6, lsl #0x11 - movne r6, r0, asr #0x10 - cmp r6, #1 - bne _02313BE4 - ldr r1, _02313C64 ; =0x00000DCD - mov r0, r5 - bl CopyStringFromId - mov r1, r5 - mov r0, #2 - bl ov29_0234B0B4 - b _02313BFC -_02313BE4: - ldr r1, _02313C68 ; =0x00000DCC - mov r0, r5 - bl CopyStringFromId - mov r1, r5 - mov r0, #2 - bl ov29_0234B0B4 -_02313BFC: - ldr r1, [sp, #0x28] - add r0, r7, r1, lsl #1 - ldrsh r0, [r0, #0x28] - add r4, r0, r6 - cmp r4, #0x14 - movge r4, #0x14 - cmp r4, r0 - beq _02313C38 - ldr r2, _02313C6C ; =0x00000D8E - add r3, r7, r1, lsl #1 - mov r0, sb - mov r1, r8 - strh r4, [r3, #0x28] - bl LogMessageByIdWithPopupCheckUserTarget - b _02313C48 -_02313C38: - ldr r2, _02313C70 ; =0x00000DD6 - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget -_02313C48: - mov r0, r8 - bl UpdateStatusIconFlags -_02313C50: - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -#ifdef JAPAN -#define BOOST_DEFENSIVE_STAT_OFFSET -0x2C0 -#else -#define BOOST_DEFENSIVE_STAT_OFFSET 0 -#endif -_02313C5C: .word 0x00000DC9 + BOOST_DEFENSIVE_STAT_OFFSET -_02313C60: .word 0x00000DC8 + BOOST_DEFENSIVE_STAT_OFFSET -_02313C64: .word 0x00000DCD + BOOST_DEFENSIVE_STAT_OFFSET -_02313C68: .word 0x00000DCC + BOOST_DEFENSIVE_STAT_OFFSET -_02313C6C: .word 0x00000D8E + BOOST_DEFENSIVE_STAT_OFFSET -_02313C70: .word 0x00000DD6 + BOOST_DEFENSIVE_STAT_OFFSET - arm_func_end BoostDefensiveStat - - arm_func_start FlashFireShouldActivate -FlashFireShouldActivate: ; 0x02313C74 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, #0x6b - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - mov r2, #0x48 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, [r4, #0xb4] - ldrsh r0, [r0, #0x30] - cmp r0, #2 - movge r0, #1 - movlt r0, #2 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end FlashFireShouldActivate - - arm_func_start ActivateFlashFire -ActivateFlashFire: ; 0x02313CE4 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r0, r5 - bl EntityIsValid__023118B4 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0 - ldr r4, [r5, #0xb4] - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrsh r0, [r4, #0x30] - add r1, r0, #1 - cmp r1, #2 - movge r1, #2 - cmp r0, r1 - beq _02313D34 - mov r0, r5 - strh r1, [r4, #0x30] - bl ov29_022E4338 -_02313D34: - mov r0, r5 - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ActivateFlashFire - - arm_func_start ApplyOffensiveStatMultiplier -ApplyOffensiveStatMultiplier: ; 0x02313D40 -#ifdef JAPAN -#define APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET -0x2C0 -#else -#define APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET 0 -#endif - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, r1 - mov sb, r0 - mov r7, r3 - bl AllocateTemp1024ByteBufferFromPool - mov r4, r0 - mov r0, r8 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _02313F3C - ldr r0, [sp, #0x28] - cmp r0, #0 - beq _02313D94 - ldr r1, _02313F48 ; =0x00000DCB - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl ov29_0234B0B4 - b _02313DAC -_02313D94: - ldr r1, _02313F4C ; =0x00000DCA - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl ov29_0234B0B4 -_02313DAC: - cmp r7, #0x100 - bge _02313DCC - ldrb r2, [sp, #0x30] - mov r0, sb - mov r1, r8 - bl IsProtectedFromStatDrops - cmp r0, #0 - bne _02313F3C -_02313DCC: - mov r0, r8 - mov r1, #0x12 - bl ItemIsActive__02311BF8 - cmp r0, #0 - beq _02313E0C - cmp r7, #0x100 - bge _02313E0C - mov r0, #0 - mov r1, r8 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _02313F50 ; =0x00000DB2 - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget - b _02313F3C -_02313E0C: - mov r0, sb - mov r1, r8 - mov r2, #9 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02313E6C - ldr r0, [sp, #0x28] - cmp r0, #0 - bne _02313E6C - cmp r7, #0x100 - bge _02313E6C - ldrb r0, [sp, #0x30] - cmp r0, #0 - beq _02313F3C - mov r0, #0 - mov r1, r8 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _02313F54 ; =0x00000D9E - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget - b _02313F3C -_02313E6C: - mov r0, #0 - mov r1, r8 - mov r2, r0 - ldr r5, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - ldr r6, [sp, #0x28] - cmp r7, #0x100 - add r0, r5, r6, lsl #2 - ldr r4, [r0, #0x34] - add r1, sp, #0x28 - mov r0, r8 - bge _02313EA8 - ldr r1, [r1] - bl ov29_022E5068 - b _02313EB0 -_02313EA8: - ldr r1, [r1] - bl ov29_022E4FC0 -_02313EB0: - add r0, r5, r6, lsl #2 - ldr r0, [r0, #0x34] - mov r1, r7 - bl MultiplyByFixedPoint - add r1, r5, r6, lsl #2 - str r0, [r1, #0x34] - cmp r0, #2 - movlt r0, #2 - strlt r0, [r1, #0x34] - add r2, r5, r6, lsl #2 - ldr r1, [r2, #0x34] - ldr r0, _02313F58 ; =0x000063FD - cmp r1, r0 - strgt r0, [r2, #0x34] - add r0, r5, r6, lsl #2 - ldr r0, [r0, #0x34] - cmp r4, r0 - ble _02313F0C - ldr r2, _02313F5C ; =0x00000DD1 - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget - b _02313F34 -_02313F0C: - bge _02313F24 - mov r0, sb - mov r1, r8 - mov r2, #0xdd0 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET - bl LogMessageByIdWithPopupCheckUserTarget - b _02313F34 -_02313F24: - ldr r2, _02313F60 ; =0x00000DD3 - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget -_02313F34: - mov r0, r8 - bl UpdateStatusIconFlags -_02313F3C: - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_02313F48: .word 0x00000DCB + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET -_02313F4C: .word 0x00000DCA + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET -_02313F50: .word 0x00000DB2 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET -_02313F54: .word 0x00000D9E + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET -_02313F58: .word 0x000063FD -_02313F5C: .word 0x00000DD1 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET -_02313F60: .word 0x00000DD3 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET - arm_func_end ApplyOffensiveStatMultiplier - - arm_func_start ApplyDefensiveStatMultiplier -ApplyDefensiveStatMultiplier: ; 0x02313F64 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, r1 - mov sb, r0 - mov r7, r3 - bl AllocateTemp1024ByteBufferFromPool - mov r4, r0 - mov r0, r8 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _023140C0 - ldr r0, [sp, #0x28] - cmp r0, #0 - beq _02313FB8 - ldr r1, _023140CC ; =0x00000DC9 - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl ov29_0234B0B4 - b _02313FD0 -_02313FB8: - ldr r1, _023140D0 ; =0x00000DC8 - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl ov29_0234B0B4 -_02313FD0: - cmp r7, #0x100 - bge _02313FF0 - ldrb r2, [sp, #0x30] - mov r0, sb - mov r1, r8 - bl IsProtectedFromStatDrops - cmp r0, #0 - bne _023140C0 -_02313FF0: - mov r0, #0 - mov r1, r8 - mov r2, r0 - ldr r5, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - ldr r6, [sp, #0x28] - cmp r7, #0x100 - add r0, r5, r6, lsl #2 - ldr r4, [r0, #0x3c] - add r1, sp, #0x28 - mov r0, r8 - bge _0231402C - ldr r1, [r1] - bl ov29_022E51B0 - b _02314034 -_0231402C: - ldr r1, [r1] - bl ov29_022E510C -_02314034: - add r0, r5, r6, lsl #2 - ldr r0, [r0, #0x3c] - mov r1, r7 - bl MultiplyByFixedPoint - add r1, r5, r6, lsl #2 - str r0, [r1, #0x3c] - cmp r0, #2 - movlt r0, #2 - strlt r0, [r1, #0x3c] - add r2, r5, r6, lsl #2 - ldr r1, [r2, #0x3c] - ldr r0, _023140D4 ; =0x000063FD - cmp r1, r0 - strgt r0, [r2, #0x3c] - add r0, r5, r6, lsl #2 - ldr r0, [r0, #0x3c] - cmp r4, r0 - ble _02314090 - ldr r2, _023140D8 ; =0x00000DCF - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget - b _023140B8 -_02314090: - bge _023140A8 - ldr r2, _023140DC ; =0x00000DCE - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget - b _023140B8 -_023140A8: - ldr r2, _023140E0 ; =0x00000DD2 - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget -_023140B8: - mov r0, r8 - bl UpdateStatusIconFlags -_023140C0: - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -#ifdef JAPAN -#define APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET -0x2C0 -#else -#define APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET 0 -#endif -_023140CC: .word 0x00000DC9 + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET -_023140D0: .word 0x00000DC8 + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET -_023140D4: .word 0x000063FD -_023140D8: .word 0x00000DCF + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET -_023140DC: .word 0x00000DCE + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET -_023140E0: .word 0x00000DD2 + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET - arm_func_end ApplyDefensiveStatMultiplier - - arm_func_start BoostHitChanceStat -BoostHitChanceStat: ; 0x023140E4 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r6, r1 - mov r7, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r8, r0 - mov r0, r6 - mov r4, #1 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _0231420C - mov r0, #0 - mov r1, r6 - mov r2, r0 - ldr r5, [r6, #0xb4] - bl SubstitutePlaceholderStringTags - add r1, sp, #0x20 - ldr r1, [r1] - mov r0, r6 - bl ov29_022E5258 - ldr r0, [sp, #0x20] - cmp r0, #0 - beq _0231415C - ldr r1, _02314218 ; =0x00000DC7 - mov r0, r8 - bl CopyStringFromId - mov r1, r8 - mov r0, r4 - bl ov29_0234B0B4 - b _02314174 -_0231415C: - ldr r1, _0231421C ; =0x00000DC6 - mov r0, r8 - bl CopyStringFromId - mov r1, r8 - mov r0, r4 - bl ov29_0234B0B4 -_02314174: - mov r0, r6 - mov r1, #0x61 - bl AbilityIsActiveVeneer - ldr r1, [sp, #0x20] - cmp r0, #0 - movne r0, r4, lsl #0x11 - add r2, r5, r1, lsl #1 - movne r4, r0, asr #0x10 - ldrsh r0, [r2, #0x2c] - mov r3, r1, lsl #1 - cmp r0, #0x14 - bge _023141F4 - add r1, r5, #0x2c - ldrsh r0, [r1, r3] - add r0, r0, r4 - strh r0, [r1, r3] - ldrsh r0, [r2, #0x2c] - cmp r0, #0x14 - movgt r0, #0x14 - strgth r0, [r2, #0x2c] - cmp r4, #2 - blt _023141E0 - ldr r2, _02314220 ; =0x00000D95 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - b _02314204 -_023141E0: - ldr r2, _02314224 ; =0x00000D93 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - b _02314204 -_023141F4: - ldr r2, _02314228 ; =0x00000DD5 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02314204: - mov r0, r6 - bl UpdateStatusIconFlags -_0231420C: - ldmia sp!, {r4, r5, r6, r7, r8, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -#ifdef JAPAN -#define BOOST_HIT_CHANCE_STAT_OFFSET -0x2C0 -#else -#define BOOST_HIT_CHANCE_STAT_OFFSET 0 -#endif -_02314218: .word 0x00000DC7 + BOOST_HIT_CHANCE_STAT_OFFSET -_0231421C: .word 0x00000DC6 + BOOST_HIT_CHANCE_STAT_OFFSET -_02314220: .word 0x00000D95 + BOOST_HIT_CHANCE_STAT_OFFSET -_02314224: .word 0x00000D93 + BOOST_HIT_CHANCE_STAT_OFFSET -_02314228: .word 0x00000DD5 + BOOST_HIT_CHANCE_STAT_OFFSET - arm_func_end BoostHitChanceStat - - arm_func_start LowerHitChanceStat -LowerHitChanceStat: ; 0x0231422C - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r6, r1 - mov r7, r0 - mov r8, r3 - bl AllocateTemp1024ByteBufferFromPool - mov r5, r0 - mov r0, r6 - mov r4, #1 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _023143C4 - ldr r0, [sp, #0x20] - cmp r0, #0 - beq _02314284 - ldr r1, _023143D0 ; =0x00000DC7 - mov r0, r5 - bl CopyStringFromId - mov r1, r5 - mov r0, r4 - bl ov29_0234B0B4 - b _0231429C -_02314284: - ldr r1, _023143D4 ; =0x00000DC6 - mov r0, r5 - bl CopyStringFromId - mov r1, r5 - mov r0, r4 - bl ov29_0234B0B4 -_0231429C: - mov r0, r7 - mov r1, r6 - mov r2, r8 - bl IsProtectedFromStatDrops - cmp r0, #0 - bne _023143C4 - mov r0, r7 - mov r1, r6 - mov r2, #0x1e -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02314308 - ldr r0, [sp, #0x20] - cmp r0, #0 - bne _02314308 - cmp r8, #0 - beq _023143C4 - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _023143D8 ; =0x00000D9F - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - b _023143C4 -_02314308: - mov r0, r6 - mov r1, #0x61 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, r4, lsl #0x11 - movne r4, r0, asr #0x10 - mov r0, #0 - mov r1, r6 - mov r2, r0 - ldr r5, [r6, #0xb4] - bl SubstitutePlaceholderStringTags - add r1, sp, #0x20 - ldr r1, [r1] - mov r0, r6 - bl ov29_022E52F8 - ldr r1, [sp, #0x20] - add r2, r5, r1, lsl #1 - ldrsh r0, [r2, #0x2c] - mov r3, r1, lsl #1 - cmp r0, #0 - ble _023143AC - add r1, r5, #0x2c - ldrsh r0, [r1, r3] - sub r0, r0, r4 - strh r0, [r1, r3] - ldrsh r0, [r2, #0x2c] - cmp r0, #0 - movlt r0, #0 - strlth r0, [r2, #0x2c] - cmp r4, #2 - blt _02314398 - ldr r2, _023143DC ; =0x00000D94 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - b _023143BC -_02314398: - ldr r2, _023143E0 ; =0x00000D92 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - b _023143BC -_023143AC: - ldr r2, _023143E4 ; =0x00000DD4 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_023143BC: - mov r0, r6 - bl UpdateStatusIconFlags -_023143C4: - ldmia sp!, {r4, r5, r6, r7, r8, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -#ifdef JAPAN -#define LOWER_HIT_CHANCE_STAT_OFFSET -0x2C0 -#else -#define LOWER_HIT_CHANCE_STAT_OFFSET 0 -#endif -_023143D0: .word 0x00000DC7 + LOWER_HIT_CHANCE_STAT_OFFSET -_023143D4: .word 0x00000DC6 + LOWER_HIT_CHANCE_STAT_OFFSET -_023143D8: .word 0x00000D9F + LOWER_HIT_CHANCE_STAT_OFFSET -_023143DC: .word 0x00000D94 + LOWER_HIT_CHANCE_STAT_OFFSET -_023143E0: .word 0x00000D92 + LOWER_HIT_CHANCE_STAT_OFFSET -_023143E4: .word 0x00000DD4 + LOWER_HIT_CHANCE_STAT_OFFSET - arm_func_end LowerHitChanceStat - - arm_func_start TryInflictCringeStatus -TryInflictCringeStatus: ; 0x023143E8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r5, r2 - mov r4, r3 - bl AllocateTemp1024ByteBufferFromPool - mov r0, r6 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, #0x1f -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _02314498 - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - cmp r5, #0 - beq _02314490 - ldr r2, _02314534 ; =0x00000DA2 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02314490: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02314498: - cmp r4, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, #0 - ldr r4, [r6, #0xb4] - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r0, [r4, #0xd0] - cmp r0, #1 - beq _02314514 - ldr r1, _02314538 ; =ov10_022C4884 - mov r2, #1 - mov r0, r6 - strb r2, [r4, #0xd0] - bl CalcStatusDuration - add r1, r0, #1 - mov r0, r6 - strb r1, [r4, #0xd1] - bl ov29_022E539C - ldr r2, _0231453C ; =0x00000D02 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r7 - mov r1, r6 - bl TryActivateSteadfast - mov r0, r7 - mov r1, r6 - bl TryActivateQuickFeet - b _02314524 -_02314514: - ldr r2, _02314540 ; =0x00000D03 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02314524: - mov r0, r6 - bl UpdateStatusIconFlags - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -#define TRY_INFLICT_CRINGE_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_CRINGE_STATUS_OFFSET 0 -#endif -_02314534: .word 0x00000DA2 + TRY_INFLICT_CRINGE_STATUS_OFFSET -_02314538: .word ov10_022C4884 -_0231453C: .word 0x00000D02 + TRY_INFLICT_CRINGE_STATUS_OFFSET -_02314540: .word 0x00000D03 + TRY_INFLICT_CRINGE_STATUS_OFFSET - arm_func_end TryInflictCringeStatus - - arm_func_start TryInflictParalysisStatus -TryInflictParalysisStatus: ; 0x02314544 -#ifdef JAPAN -#define TRY_INFLICT_PARALYSIS_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_PARALYSIS_STATUS_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - mov sb, r1 - mov sl, r0 - mov r0, sb - mov r8, r2 - mov r4, r3 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - beq _023147D0 - mov r0, sl - mov r1, sb - mov r2, r8 - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - bne _023147D0 - mov r0, sl - mov r1, sb - mov r2, r8 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, #0 - bne _023147D0 - mov r0, sl - mov r1, sb - mov r2, #0x16 -#ifndef JAPAN - mov r3, #1 -#endif - bl DefenderAbilityIsActive__02311B94 - cmp r0, #0 - beq _023145F4 - mov r0, #0 - mov r1, sb - mov r2, r0 - bl SubstitutePlaceholderStringTags - cmp r8, #0 - beq _023145EC - mov r0, sl - mov r1, sb - mov r2, #0xda0 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET - bl LogMessageByIdWithPopupCheckUserTarget -_023145EC: - mov r0, #0 - b _023147D0 -_023145F4: - mov r0, sb - mov r1, #1 - bl ExclusiveItemEffectIsActive__023147EC - cmp r0, #0 - beq _02314654 - cmp r8, #0 - beq _0231464C - mov r0, #0 - mov r1, sb - mov r2, r0 - bl SubstitutePlaceholderStringTags - add r2, sp, #4 - mov r0, sb - mov r1, #1 - bl GetExclusiveItemWithEffectFromBag - add r1, sp, #4 - mov r0, #1 - bl ov29_02344B44 - ldr r2, _023147D8 ; =0x00000DA1 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_0231464C: - mov r0, #0 - b _023147D0 -_02314654: - cmp r4, #0 - movne r0, #1 - bne _023147D0 - mov r0, #0 - ldr r7, [sb, #0xb4] - mov r1, sb - mov r2, r0 - mov r4, #1 - bl SubstitutePlaceholderStringTags - ldrb r0, [r7, #0xbf] - cmp r0, #4 - beq _023146E0 - ldr r1, _023147DC ; =ov10_022C4894 - mov r3, #4 - mov r0, sb - mov r2, r4 - strb r3, [r7, #0xbf] - bl CalcStatusDuration - add r0, r0, #1 - strb r0, [r7, #0xc0] - mov r4, #0 - strb r4, [r7, #0xc1] - mov r0, sl - mov r1, sb - mov r2, #0xd00 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET - strb r4, [r7, #0xc2] - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, sb - bl ov29_022E4240 - mov r0, sb - bl CalcSpeedStageWrapper - mov r0, sl - mov r1, sb - bl TryActivateQuickFeet - b _023146F0 -_023146E0: - ldr r2, _023147E0 ; =0x00000D01 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_023146F0: - mov r0, sb - mov r1, #0x19 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _023147C4 - cmp r4, #0 - bne _023147C4 - mov r5, #0 - ldr fp, _023147E4 ; =DIRECTIONS_XY - mov r4, r5 -_02314718: - mov r1, r4, lsl #2 - add r0, fp, r4, lsl #2 - ldrsh r6, [sb, #4] - ldrsh r3, [fp, r1] - ldrsh r1, [r0, #2] - ldrsh r2, [sb, #6] - add r0, r6, r3 - add r1, r2, r1 - bl GetTile - ldr r6, [r0, #0xc] - mov r0, r6 - bl EntityIsValid__023118B4 - cmp r0, #0 - beq _023147B8 - ldr r0, [r6] - cmp r0, #1 - bne _023147B8 - cmp r5, #0 - bne _02314790 - mov r5, #1 - bl ov29_0234B034 - mov r1, #0 - mov r2, r7 - mov r3, r1 - str r1, [sp] - bl ov29_0230040C - ldr r2, _023147E8 ; =0x00000DC5 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_02314790: - mov r0, sb - mov r1, r6 - bl ov29_023018AC - cmp r0, #1 - bne _023147B8 - mov r0, sl - mov r1, r6 - mov r2, r8 - mov r3, #0 - bl TryInflictParalysisStatus -_023147B8: - add r4, r4, #1 - cmp r4, #8 - blt _02314718 -_023147C4: - mov r0, sb - bl UpdateStatusIconFlags - mov r0, #1 -_023147D0: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_023147D8: .word 0x00000DA1 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET -_023147DC: .word ov10_022C4894 -_023147E0: .word 0x00000D01 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET -_023147E4: .word DIRECTIONS_XY -_023147E8: .word 0x00000DC5 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET - arm_func_end TryInflictParalysisStatus - - arm_func_start ExclusiveItemEffectIsActive__023147EC -ExclusiveItemEffectIsActive__023147EC: ; 0x023147EC - stmdb sp!, {r3, lr} - ldr r2, [r0, #0xb4] - ldrb r0, [r2, #6] - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, pc} -#ifdef JAPAN - add r0, r2, #0x224 -#else - add r0, r2, #0x228 -#endif - bl ExclusiveItemEffectFlagTest - ldmia sp!, {r3, pc} - arm_func_end ExclusiveItemEffectIsActive__023147EC - - arm_func_start BoostSpeed -BoostSpeed: ; 0x02314810 -#ifdef JAPAN -#define BOOST_SPEED_OFFSET -4 -#else -#define BOOST_SPEED_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, r1 - mov sb, r0 - mov r0, r8 - mov r7, r2 - mov r6, r3 - bl EntityIsValid__023118B4 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - cmp r6, #0 - bne _02314850 - ldr r1, _0231492C ; =SPEED_BOOST_TURN_RANGE - mov r0, r8 - mov r2, #0 - bl CalcStatusDuration - add r6, r0, #1 -_02314850: - mov r0, #0 - mov r1, r8 - mov r2, r0 - ldr r5, [r8, #0xb4] - bl SubstitutePlaceholderStringTags - mov r0, r8 - mov r1, r7 - bl CalcSpeedStage - mov r4, r0 - cmp r4, #4 - bne _0231489C - ldrb r0, [sp, #0x20] - cmp r0, #0 - beq _02314920 - ldr r2, _02314930 ; =0x00000DDB - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget - b _02314920 -_0231489C: - mov r2, #0 - b _023148BC -_023148A4: - add r1, r5, r2 - ldrb r0, [r1, #0x114 + BOOST_SPEED_OFFSET] - cmp r0, #0 - streqb r6, [r1, #0x114 + BOOST_SPEED_OFFSET] - beq _023148C4 - add r2, r2, #1 -_023148BC: - cmp r2, #5 - blt _023148A4 -_023148C4: - mov r0, r8 - mov r1, r7 - bl CalcSpeedStage - mov r6, r0 - cmp r4, r6 - bne _023148F0 - ldr r2, _02314934 ; =0x00000DDA - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget - b _02314920 -_023148F0: - mov r0, r8 - bl ov29_022E44CC - ldr r0, _02314938 ; =ov29_02353318 - mov r1, r6, lsl #1 - ldrh r2, [r0, r1] - mov r0, sb - mov r1, r8 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, #1 - strb r0, [r5, #0x101] - mov r0, #0 - strb r0, [r5, #0x152 + BOOST_SPEED_OFFSET] -_02314920: - mov r0, r8 - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0231492C: .word SPEED_BOOST_TURN_RANGE -#ifdef JAPAN -_02314930: .word 0x00000B1B -_02314934: .word 0x00000B1A -#else -_02314930: .word 0x00000DDB -_02314934: .word 0x00000DDA -#endif -_02314938: .word ov29_02353318 - arm_func_end BoostSpeed - - arm_func_start BoostSpeedOneStage -BoostSpeedOneStage: ; 0x0231493C - stmdb sp!, {r3, lr} - str r3, [sp] - mov r3, r2 - mov r2, #1 - bl BoostSpeed - ldmia sp!, {r3, pc} - arm_func_end BoostSpeedOneStage - - arm_func_start LowerSpeed -LowerSpeed: ; 0x02314954 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sb, r1 - mov sl, r0 - mov r0, sb - mov r8, r2 - mov r7, r3 - bl EntityIsValid__023118B4 - cmp r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - mov r2, r7 - bl SafeguardIsActive - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - mov r2, r7 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, #0 - mov r1, sb - mov r2, r0 - ldr r4, [sb, #0xb4] - bl SubstitutePlaceholderStringTags - mov r0, sb - bl CalcSpeedStageWrapper - movs fp, r0 - bne _023149E8 - cmp r7, #0 - beq _02314AA0 - ldr r2, _02314AAC ; =0x00000DDC - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - b _02314AA0 -_023149E8: - mov r5, #0 - b _02314A34 -_023149F0: - mov r1, #0 - b _02314A28 -_023149F8: - add r6, r4, r1 -#ifdef JAPAN - ldrb r0, [r6, #0x115] -#else - ldrb r0, [r6, #0x119] -#endif - cmp r0, #0 - bne _02314A24 - ldr r1, _02314AB0 ; =ov10_022C488C - mov r0, sb - mov r2, #1 - bl CalcStatusDuration - add r0, r0, #1 -#ifdef JAPAN - strb r0, [r6, #0x115] -#else - strb r0, [r6, #0x119] -#endif - b _02314A30 -_02314A24: - add r1, r1, #1 -_02314A28: - cmp r1, #5 - blt _023149F8 -_02314A30: - add r5, r5, #1 -_02314A34: - cmp r5, r8 - blt _023149F0 - mov r0, sb - bl CalcSpeedStageWrapper - mov r4, r0 - cmp fp, r4 - bne _02314A6C - cmp r7, #0 - beq _02314AA0 - ldr r2, _02314AB4 ; =0x00000DDA - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - b _02314AA0 -_02314A6C: - mov r0, sb - bl ov29_022E451C - ldr r0, _02314AB8 ; =ov29_02353318 - mov r1, r4, lsl #1 - ldrh r2, [r0, r1] - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - cmp r4, #0 - bne _02314AA0 - mov r0, sl - mov r1, sb - bl TryActivateQuickFeet -_02314AA0: - mov r0, sb - bl UpdateStatusIconFlags - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -_02314AAC: .word 0x00000B1C -_02314AB0: .word ov10_022C488C -_02314AB4: .word 0x00000B1A -#else -_02314AAC: .word 0x00000DDC -_02314AB0: .word ov10_022C488C -_02314AB4: .word 0x00000DDA -#endif -_02314AB8: .word ov29_02353318 - arm_func_end LowerSpeed - - arm_func_start TrySealMove -TrySealMove: ; 0x02314ABC - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x14 - mov r5, #0 - movs r7, r1 - mov r8, r0 - mov r6, r2 - moveq r0, r5 - beq _02314C18 - mov r2, #1 - bl SafeguardIsActive - cmp r0, #0 - movne r0, r5 - bne _02314C18 - mov r0, r8 - mov r1, r7 - mov r2, #1 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - movne r0, r5 - bne _02314C18 - ldr r0, [r7, #0xb4] - mov r4, r5 -#ifdef JAPAN - add ip, r0, #0x120 -#else - add ip, r0, #0x124 -#endif - mov lr, r4 - mov r2, r5 - mov r3, #1 - add r0, sp, #4 -_02314B28: - ldrb r1, [ip, lr, lsl #3] - add sb, ip, lr, lsl #3 - tst r1, #1 - movne r1, r3 - moveq r1, r2 - tst r1, #0xff - beq _02314B54 - ldrh r1, [sb, #2] - tst r1, #1 - streq sb, [r0, r4, lsl #2] - addeq r4, r4, #1 -_02314B54: - add lr, lr, #1 - cmp lr, #4 - blt _02314B28 - cmp r6, #0 - beq _02314B74 - cmp r4, #0 - moveq r0, #0 - beq _02314C18 -_02314B74: - cmp r4, #0 - beq _02314BE8 - ldr r3, _02314C20 ; =0x00000DBE - mov r5, #8 - mov r0, r8 - mov r1, r7 - mov r2, #1 - str r5, [sp] - bl ExclusiveItemEffectIsActiveWithLogging - cmp r0, #0 - movne r0, #0 - bne _02314C18 - cmp r6, #0 - movne r0, #1 - bne _02314C18 - mov r0, r4 - bl DungeonRandInt - add r1, sp, #4 - ldr r2, [r1, r0, lsl #2] - mov r0, #0 - ldrh r1, [r2, #2] - orr r1, r1, #1 - strh r1, [r2, #2] - ldrh r1, [r2, #4] - bl ov29_0234B084 - mov r0, r8 - mov r1, r7 - mov r5, #1 - bl TryActivateQuickFeet -_02314BE8: - cmp r5, #0 - beq _02314C04 - ldr r2, _02314C24 ; =0x00000DE3 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02314C14 -_02314C04: - ldr r2, _02314C28 ; =0x00000DE4 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02314C14: - mov r0, #1 -_02314C18: - add sp, sp, #0x14 - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -#ifdef JAPAN -_02314C20: .word 0x00000AFE -_02314C24: .word 0x00000B23 -_02314C28: .word 0x00000B24 -#else -_02314C20: .word 0x00000DBE -_02314C24: .word 0x00000DE3 -_02314C28: .word 0x00000DE4 -#endif - arm_func_end TrySealMove - - arm_func_start BoostOrLowerSpeed -BoostOrLowerSpeed: ; 0x02314C2C - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl EntityIsValid__023118B4 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, #0x32 - bl DungeonRandOutcome__022EAB20 - cmp r0, #0 - mov r2, #1 - mov r0, r5 - beq _02314C74 - mov r1, r4 - mov r3, r2 - bl LowerSpeed - b _02314C84 -_02314C74: - mov r1, r4 - mov r3, #0 - str r2, [sp] - bl BoostSpeed -_02314C84: - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end BoostOrLowerSpeed - - arm_func_start ResetHitChanceStat -ResetHitChanceStat: ; 0x02314C8C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, r1 - mov r6, r0 - mov r0, r5 - mov r8, r2 - mov r4, r3 - mov r7, #0 - bl EntityIsValid__023118B4 - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - ldr r0, [r5, #0xb4] - add r1, r0, r8, lsl #1 - ldrsh r0, [r1, #0x2c] - cmp r0, #0xa - movne r0, #0xa - movne r7, #1 - strneh r0, [r1, #0x2c] - cmp r7, #0 - beq _02314CE4 - mov r0, r5 - bl ov29_022E543C - b _02314CF4 -_02314CE4: - cmp r4, #0 - beq _02314CF4 - mov r0, r5 - bl ov29_022E543C -_02314CF4: - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags - cmp r7, #0 - beq _02314D20 - mov r0, r6 - mov r1, r5 -#ifdef JAPAN - mov r2, #0xaa0 -#else - mov r2, #0xd60 -#endif - bl LogMessageByIdWithPopupCheckUserTarget - b _02314D30 -_02314D20: - ldr r2, _02314D3C ; =0x00000D61 - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_02314D30: - mov r0, r5 - bl UpdateStatusIconFlags - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -_02314D3C: .word 0x00000AA1 -#else -_02314D3C: .word 0x00000D61 -#endif - arm_func_end ResetHitChanceStat - - arm_func_start ExclusiveItemEffectIsActiveWithLogging -ExclusiveItemEffectIsActiveWithLogging: ; 0x02314D40 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #8 - mov r6, r1 - ldrb r1, [sp, #0x20] - mov r7, r0 - mov r0, r6 - mov r5, r2 - mov r4, r3 - bl ExclusiveItemEffectIsActive__023147EC - cmp r0, #0 - beq _02314DB8 - cmp r5, #0 - beq _02314DB0 - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldrb r1, [sp, #0x20] - add r2, sp, #0 - mov r0, r6 - bl GetExclusiveItemWithEffectFromBag - add r1, sp, #0 - mov r0, #1 - bl ov29_02344B44 - mov r0, r7 - mov r1, r6 - mov r2, r4 - bl LogMessageByIdWithPopupCheckUserTarget -_02314DB0: - mov r0, #1 - b _02314DBC -_02314DB8: - mov r0, #0 -_02314DBC: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ExclusiveItemEffectIsActiveWithLogging - - arm_func_start ov29_02314DC4 -ov29_02314DC4: ; 0x02314DC4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #8 - mov r7, r0 - mov r0, #0 - mov r5, r2 - mov r2, r0 - mov r6, r1 - mov r4, r3 - bl SubstitutePlaceholderStringTags - add r2, sp, #0 - mov r0, r6 - mov r1, r4 - bl GetExclusiveItemWithEffectFromBag - add r1, sp, #0 - mov r0, #1 - bl ov29_02344B44 - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl LogMessageByIdWithPopupCheckUserTarget - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end ov29_02314DC4 - - arm_func_start TryActivateQuickFeet -TryActivateQuickFeet: ; 0x02314E1C - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - mov r1, #0x6d - bl AbilityIsActiveVeneer - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r3, #0 - mov r0, r5 - mov r1, r4 - mov r2, #1 - str r3, [sp] - bl BoostSpeed - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end TryActivateQuickFeet - - arm_func_start TryInflictTerrifiedStatus -TryInflictTerrifiedStatus: ; 0x02314E60 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _02314EB0 ; =ov10_022C4618 - mov r4, r1 - ldr ip, [r4, #0xb4] - mov r3, #1 - mov r5, r0 - ldrsh r1, [r2] -#ifdef JAPAN - strb r3, [ip, #0x103] - mov r0, r4 - strb r1, [ip, #0x104] -#else - strb r3, [ip, #0x104] - mov r0, r4 - strb r1, [ip, #0x105] -#endif - bl ov29_022E60E4 - mov r0, #0 - mov r1, r4 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _02314EB4 ; =0x00000DE5 - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02314EB0: .word ov10_022C4618 -#ifdef JAPAN -_02314EB4: .word 0x00000B25 -#else -_02314EB4: .word 0x00000DE5 -#endif - arm_func_end TryInflictTerrifiedStatus - - arm_func_start TryInflictGrudgeStatus -TryInflictGrudgeStatus: ; 0x02314EB8 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r7, r1 - ldr r5, [r7, #0xb4] - mov r8, r0 - mov r4, #0 - mov r6, r2 - mov r2, r4 - mov r0, #1 - bl SubstitutePlaceholderStringTags - ldrb r0, [r5, #0xfd] - cmp r0, #0 - beq _02314F04 - cmp r6, #0 - beq _02314F2C - ldr r2, _02314F34 ; =0x00000ED1 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02314F2C -_02314F04: - mov r4, #1 - mov r0, r7 - strb r4, [r5, #0xfd] - bl UpdateStatusIconFlags - cmp r6, #0 - beq _02314F2C -#ifdef JAPAN - ldr r2, _0231640C ; =0x00000C12 - mov r0, r8 - mov r1, r7 -#else - mov r0, r8 - mov r1, r7 - mov r2, #0xed0 -#endif - bl LogMessageByIdWithPopupCheckUserTarget -_02314F2C: - mov r0, r4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -_02314F34: .word 0x00000C13 -_0231640C: .word 0x00000C12 -#else -_02314F34: .word 0x00000ED1 -#endif - arm_func_end TryInflictGrudgeStatus - - arm_func_start TryInflictConfusedStatus -TryInflictConfusedStatus: ; 0x02314F38 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r0, r6 - mov r5, r2 - mov r4, r3 - bl EntityIsValid__02315118 - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl SafeguardIsActive - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl IsProtectedFromNegativeStatus - cmp r0, #0 - mov r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r0, r6 - mov r1, #0x19 - bl ItemIsActive__0231513C - cmp r0, #0 - beq _02314FD8 - cmp r5, #0 - beq _02314FD0 - ldr r2, _02315100 ; =0x00000DAF - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02314FD0: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_02314FD8: - mov ip, #2 - ldr r3, _02315104 ; =0x00000DBA - mov r0, r7 - mov r1, r6 - mov r2, r5 - str ip, [sp] - bl ExclusiveItemEffectIsActiveWithLogging - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - cmp r7, r6 - beq _02315048 - cmp r7, #0 - moveq r0, #0 - beq _02315028 - ldr r0, [r7] - cmp r0, #1 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff -_02315028: - cmp r0, #0 - beq _02315048 - mov r0, r7 - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - bne _02315054 -_02315048: - mov r0, r6 - mov r1, #0x40 - bl AbilityIsActiveVeneer -_02315054: - cmp r0, #0 - beq _0231507C - cmp r5, #0 - beq _02315074 - ldr r2, _02315108 ; =0x00000DA7 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_02315074: - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0231507C: - cmp r4, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r6 - bl ov29_022E41CC - ldr r4, [r6, #0xb4] - ldrb r0, [r4, #0xd0] - cmp r0, #2 - beq _023150E0 - ldr r1, _0231510C ; =ov10_022C4890 - mov r3, #2 - mov r0, r6 - mov r2, #1 - strb r3, [r4, #0xd0] - bl CalcStatusDuration - add r3, r0, #1 - ldr r2, _02315110 ; =0x00000CFE - mov r0, r7 - mov r1, r6 - strb r3, [r4, #0xd1] - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r7 - mov r1, r6 - bl TryActivateQuickFeet - b _023150F0 -_023150E0: - ldr r2, _02315114 ; =0x00000CFF - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -_023150F0: - mov r0, r6 - bl UpdateStatusIconFlags - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -#define TRY_INFLICT_CONFUSED_STATUS_OFFSET -0x2C0 -#else -#define TRY_INFLICT_CONFUSED_STATUS_OFFSET 0 -#endif -_02315100: .word 0x00000DAF + TRY_INFLICT_CONFUSED_STATUS_OFFSET -_02315104: .word 0x00000DBA + TRY_INFLICT_CONFUSED_STATUS_OFFSET -_02315108: .word 0x00000DA7 + TRY_INFLICT_CONFUSED_STATUS_OFFSET -_0231510C: .word ov10_022C4890 -_02315110: .word 0x00000CFE + TRY_INFLICT_CONFUSED_STATUS_OFFSET -_02315114: .word 0x00000CFF + TRY_INFLICT_CONFUSED_STATUS_OFFSET - arm_func_end TryInflictConfusedStatus diff --git a/asm/overlay_29_02311C28.s b/asm/overlay_29_02311C28.s new file mode 100644 index 00000000..5e218948 --- /dev/null +++ b/asm/overlay_29_02311C28.s @@ -0,0 +1,4092 @@ + .include "asm/macros.inc" + .include "overlay_29_02311C28.inc" + + .text + + arm_func_start ov29_02311C28 +ov29_02311C28: ; 0x02311C28 + stmdb sp!, {r3, lr} + ldrb ip, [sp, #8] + str ip, [sp] + bl IsProtectedFromSleepClassStatus + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end ov29_02311C28 + + arm_func_start TryInflictNightmareStatus +TryInflictNightmareStatus: ; 0x02311C4C + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r8, r2 + mov r2, #1 + mov r3, r2 + mov r7, r0 + mov r6, r1 + str r2, [sp] + mov r4, #0 + bl IsProtectedFromSleepClassStatus + cmp r0, #0 + bne _02311D4C + ldr r5, [r6, #0xb4] + ldrb r0, [r5, #0xbd] + cmp r0, #2 + beq _02311D34 + mov r0, r6 + bl ov29_022E4B8C + ldrb r0, [r5, #0xbd] + cmp r0, #3 + beq _02311CE0 + mov r0, r7 + mov r1, r6 + mov r2, #0x2f +#ifndef JAPAN + mov r3, #1 +#endif + strb r8, [r5, #0xbe] + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02311CE4 + ldrb r0, [r5, #0xbe] + mov r1, r0, asr #1 + and r0, r1, #0xff + cmp r0, #1 + strb r1, [r5, #0xbe] + movlo r0, #1 + strlob r0, [r5, #0xbe] + b _02311CE4 +_02311CE0: + mov r4, #1 +_02311CE4: + mov r2, #3 + mov r0, r6 + mov r1, #8 + strb r2, [r5, #0xbd] + bl ov29_02304A48 + cmp r4, #0 + beq _02311D14 + ldr r2, _02311D54 ; =0x00000D0D + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + b _02311D44 +_02311D14: + ldr r2, _02311D58 ; =0x00000D0C + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r7 + mov r1, r6 + bl TryActivateQuickFeet + b _02311D44 +_02311D34: + ldr r2, _02311D5C ; =0x00000D0E + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02311D44: + mov r0, r6 + bl UpdateStatusIconFlags +_02311D4C: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +_02311D54: .word 0x00000A4D +_02311D58: .word 0x00000A4C +_02311D5C: .word 0x00000A4E +#else +_02311D54: .word 0x00000D0D +_02311D58: .word 0x00000D0C +_02311D5C: .word 0x00000D0E +#endif + arm_func_end TryInflictNightmareStatus + + arm_func_start TryInflictNappingStatus +TryInflictNappingStatus: ; 0x02311D60 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r4, #0 + mov r6, r2 + mov r5, #1 + mov r2, r4 + mov r3, r4 + mov r8, r0 + mov r7, r1 + str r5, [sp] + bl IsProtectedFromSleepClassStatus + cmp r0, #0 + bne _02311E5C + ldr r5, [r7, #0xb4] + ldrb r0, [r5, #0xbd] + cmp r0, #2 + beq _02311E44 + mov r0, r7 + bl ov29_022E4BA0 + ldrb r0, [r5, #0xbd] + cmp r0, #0 + cmpne r0, #4 + bne _02311DFC + mov r0, r8 + mov r1, r7 + mov r2, #0x2f +#ifndef JAPAN + mov r3, #1 +#endif + strb r6, [r5, #0xbe] + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02311E00 + ldrb r0, [r5, #0xbe] + mov r1, r0, asr #1 + and r0, r1, #0xff + cmp r0, #1 + strb r1, [r5, #0xbe] + movlo r0, #1 + strlob r0, [r5, #0xbe] + b _02311E00 +_02311DFC: + mov r4, #1 +_02311E00: + mov r2, #5 + mov r0, r7 + mov r1, #8 + strb r2, [r5, #0xbd] + bl ov29_02304A48 + cmp r4, #0 + beq _02311E30 + ldr r2, _02311E64 ; =0x00000D08 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02311E54 +_02311E30: + ldr r2, _02311E68 ; =0x00000D05 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02311E54 +_02311E44: + ldr r2, _02311E6C ; =0x00000D0B + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02311E54: + mov r0, r7 + bl UpdateStatusIconFlags +_02311E5C: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +_02311E64: .word 0x00000A48 +_02311E68: .word 0x00000A45 +_02311E6C: .word 0x00000A4B +#else +_02311E64: .word 0x00000D08 +_02311E68: .word 0x00000D05 +_02311E6C: .word 0x00000D0B +#endif + arm_func_end TryInflictNappingStatus + + arm_func_start TryInflictYawningStatus +TryInflictYawningStatus: ; 0x02311E70 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r4, r2 + mov r2, #1 + mov r3, r2 + mov r6, r0 + mov r5, r1 + str r2, [sp] + bl IsProtectedFromSleepClassStatus + cmp r0, #0 + bne _02311F6C + ldr r1, [r5, #0xb4] + ldrb r0, [r1, #0xbd] + cmp r0, #0 + bne _02311EEC + mov r0, #4 + strb r0, [r1, #0xbd] + mov r0, r5 + strb r4, [r1, #0xbe] + bl ov29_022E53EC + mov r0, r5 + mov r1, #8 + bl ov29_02304A48 + ldr r2, _02311F74 ; =0x00000D0F + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r6 + mov r1, r5 + bl TryActivateQuickFeet + b _02311F64 +_02311EEC: + cmp r0, #1 + cmpne r0, #3 + cmpne r0, #5 + bne _02311F10 + ldr r2, _02311F78 ; =0x00000D12 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _02311F64 +_02311F10: + cmp r0, #2 + bne _02311F2C + mov r0, r6 + mov r1, r5 +#ifdef JAPAN + mov r2, #0xa50 +#else + mov r2, #0xd10 +#endif + bl LogMessageByIdWithPopupCheckUserTarget + b _02311F64 +_02311F2C: + cmp r0, #4 + bne _02311F48 + ldr r2, _02311F7C ; =0x00000D11 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _02311F64 +_02311F48: + ldr r2, _02311F74 ; =0x00000D0F + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r6 + mov r1, r5 + bl TryActivateQuickFeet +_02311F64: + mov r0, r5 + bl UpdateStatusIconFlags +_02311F6C: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +_02311F74: .word 0x00000A4F +_02311F78: .word 0x00000A52 +_02311F7C: .word 0x00000A51 +#else +_02311F74: .word 0x00000D0F +_02311F78: .word 0x00000D12 +_02311F7C: .word 0x00000D11 +#endif + arm_func_end TryInflictYawningStatus + + arm_func_start TryInflictSleeplessStatus +TryInflictSleeplessStatus: ; 0x02311F80 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r4, #0 + bl EntityIsValid__023118B4 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + ldr r5, [r6, #0xb4] + mov r1, r6 + ldrb r0, [r5, #0xbd] + cmp r0, #1 + cmpne r0, #5 + cmpne r0, #3 + mov r0, #0 + mov r2, r0 + moveq r4, #1 + bl SubstitutePlaceholderStringTags + ldrb r0, [r5, #0xbd] + cmp r0, #2 + beq _02312040 + ldr r1, _0231205C ; =ov10_022C4728 + mov r3, #2 + mov r0, r6 + mov r2, #0 + strb r3, [r5, #0xbd] + bl CalcStatusDuration + add r0, r0, #1 + strb r0, [r5, #0xbe] + mov r1, #0xff +#ifdef JAPAN + strb r1, [r5, #0x174] + mov r0, r6 + strb r1, [r5, #0x173] +#else + strb r1, [r5, #0x178] + mov r0, r6 + strb r1, [r5, #0x177] +#endif + bl ov29_022E4BB4 + mov r0, r6 + mov r1, #8 + bl ov29_02304A48 + cmp r4, #0 + beq _0231202C + ldr r2, _02312060 ; =0x00000D13 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_0231202C: + ldr r2, _02312064 ; =0x00000D15 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + b _02312050 +_02312040: + ldr r2, _02312068 ; =0x00000D14 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02312050: + mov r0, r6 + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0231205C: .word ov10_022C4728 +#ifdef JAPAN +_02312060: .word 0x00000A53 +_02312064: .word 0x00000A55 +_02312068: .word 0x00000A54 +#else +_02312060: .word 0x00000D13 +_02312064: .word 0x00000D15 +_02312068: .word 0x00000D14 +#endif + arm_func_end TryInflictSleeplessStatus + + arm_func_start TryInflictPausedStatus +TryInflictPausedStatus: ; 0x0231206C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r4, r2 + mov r5, r3 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + cmp r4, #0 + ldr r4, [r6, #0xb4] + beq _023120BC + ldrb r2, [sp, #0x18] + mov r0, r7 + mov r1, r6 + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} +_023120BC: + ldrb r2, [sp, #0x18] + mov r0, r7 + mov r1, r6 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldrb r0, [sp, #0x1c] + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + bl ov29_0234B034 + mov r1, #0 + mov r2, r4 + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + ldrb r0, [r4, #0xd0] + cmp r0, #3 + beq _02312160 + mov r1, #3 + mov r0, r6 + strb r1, [r4, #0xd0] + add r1, r5, #1 + strb r1, [r4, #0xd1] + bl ov29_022E4428 + cmp r5, #1 + bne _02312140 + ldr r2, _0231219C ; =0x00000D16 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + b _02312150 +_02312140: + ldr r2, _023121A0 ; =0x00000D18 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02312150: + mov r0, r7 + mov r1, r6 + bl TryActivateQuickFeet + b _0231218C +_02312160: + cmp r5, #1 + bne _0231217C + ldr r2, _023121A4 ; =0x00000D17 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + b _0231218C +_0231217C: + ldr r2, _023121A8 ; =0x00000D19 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_0231218C: + mov r0, r6 + bl UpdateStatusIconFlags + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +#ifdef JAPAN +#define TRY_INFLICT_PAUSED_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_PAUSED_STATUS_OFFSET 0 +#endif +_0231219C: .word 0x00000D16 + TRY_INFLICT_PAUSED_STATUS_OFFSET +_023121A0: .word 0x00000D18 + TRY_INFLICT_PAUSED_STATUS_OFFSET +_023121A4: .word 0x00000D17 + TRY_INFLICT_PAUSED_STATUS_OFFSET +_023121A8: .word 0x00000D19 + TRY_INFLICT_PAUSED_STATUS_OFFSET + arm_func_end TryInflictPausedStatus + + arm_func_start TryInflictInfatuatedStatus +TryInflictInfatuatedStatus: ; 0x023121AC + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r4, r1 + mov r5, r0 + mov r0, r4 + mov r8, r2 + mov r7, r3 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + beq _0231231C + mov r0, r5 + mov r1, r4 + mov r2, r8 + ldr r6, [r4, #0xb4] + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + bne _0231231C + mov r0, r5 + mov r1, r4 + mov r2, r8 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, #0 + bne _0231231C + mov r0, r5 + mov r1, r4 + mov r2, #0x29 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02312260 + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SubstitutePlaceholderStringTags + cmp r8, #0 + beq _02312258 + ldr r2, _02312324 ; =0x00000DA3 + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget +_02312258: + mov r0, #0 + b _0231231C +_02312260: + ldr r3, _02312328 ; =0x00000DBB + mov ip, #3 + mov r0, r5 + mov r1, r4 + mov r2, r8 + str ip, [sp] + bl ExclusiveItemEffectIsActiveWithLogging + cmp r0, #0 + movne r0, #0 + bne _0231231C + cmp r7, #0 + movne r0, #1 + bne _0231231C + bl ov29_0234B034 + mov r1, #0 + mov r2, r6 + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + ldrb r0, [r6, #0xd0] + cmp r0, #7 + beq _02312300 + ldr r1, _0231232C ; =ov10_022C4804 + mov r3, #7 + mov r0, r4 + mov r2, #1 + strb r3, [r6, #0xd0] + bl CalcStatusDuration + add r1, r0, #1 + mov r0, r4 + strb r1, [r6, #0xd1] + bl ov29_022E4C00 + ldr r2, _02312330 ; =0x00000D1A + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r5 + mov r1, r4 + bl TryActivateQuickFeet + b _02312310 +_02312300: + ldr r2, _02312334 ; =0x00000D1B + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget +_02312310: + mov r0, r4 + bl UpdateStatusIconFlags + mov r0, #1 +_0231231C: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +#define TRY_INFLICT_INFATUATED_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_INFATUATED_STATUS_OFFSET 0 +#endif +_02312324: .word 0x00000DA3 + TRY_INFLICT_INFATUATED_STATUS_OFFSET +_02312328: .word 0x00000DBB + TRY_INFLICT_INFATUATED_STATUS_OFFSET +_0231232C: .word ov10_022C4804 +_02312330: .word 0x00000D1A + TRY_INFLICT_INFATUATED_STATUS_OFFSET +_02312334: .word 0x00000D1B + TRY_INFLICT_INFATUATED_STATUS_OFFSET + arm_func_end TryInflictInfatuatedStatus + + arm_func_start TryInflictBurnStatus +TryInflictBurnStatus: ; 0x02312338 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sb, r1 + mov sl, r0 + mov r0, sb + mov r4, r2 + mov r8, r3 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + mov r2, r8 + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + mov r2, r8 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r7, [sb, #0xb4] + bl ov29_0234B034 + mov r1, #0 + mov r2, r7 + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + mov r0, sl + mov r1, sb + mov r2, #0x42 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _023123F0 + cmp r8, #0 + beq _023123E8 + ldr r2, _023125F0 ; =0x00000DAB + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_023123E8: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_023123F0: + mov r0, sb + mov r1, #2 + bl MonsterIsType + cmp r0, #0 + beq _02312424 + cmp r8, #0 + beq _0231241C + ldr r2, _023125F4 ; =0x00000DAC + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_0231241C: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02312424: + mov r0, sb + bl GetTileAtEntity + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #2 + bne _0231247C + ldr r0, _023125F8 ; =DUNGEON_PTR + ldr r1, _023125FC ; =SECONDARY_TERRAIN_TYPES + ldr r0, [r0] + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x30] +#else + ldrsh r0, [r0, #0xd4] +#endif + ldrb r0, [r1, r0] + cmp r0, #1 + beq _0231247C + cmp r8, #0 + beq _02312474 + ldr r2, _02312600 ; =0x00000DB9 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_02312474: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0231247C: + ldrb r0, [sp, #0x28] + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r0, [r7, #0xbf] + mov r5, #1 + cmp r0, #1 + beq _023124F4 + ldr r1, _02312604 ; =ov10_022C4874 + mov r0, sb + mov r2, r5 + strb r5, [r7, #0xbf] + bl CalcStatusDuration + add r0, r0, #1 + strb r0, [r7, #0xc0] + mov r5, #0 + strb r5, [r7, #0xc1] + strb r5, [r7, #0xc2] + cmp r4, #0 + beq _023124D4 + mov r0, sb + bl ov29_022E4294 +_023124D4: + ldr r2, _02312608 ; =0x00000D1C + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, sl + mov r1, sb + bl TryActivateQuickFeet + b _02312504 +_023124F4: + ldr r2, _0231260C ; =0x00000D1D + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_02312504: + mov r0, sb + bl UpdateStatusIconFlags + mov r0, sb + mov r1, #0x19 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _023125E8 + cmp r5, #0 + bne _023125E8 + mov r5, #0 + ldr fp, _02312610 ; =DIRECTIONS_XY + mov r4, r5 +_02312534: + mov r1, r4, lsl #2 + add r0, fp, r4, lsl #2 + ldrsh r3, [fp, r1] + ldrsh r1, [r0, #2] + ldrsh r0, [sb, #4] + ldrsh r2, [sb, #6] + add r0, r0, r3 + add r1, r2, r1 + bl GetTile + ldr r6, [r0, #0xc] + mov r0, r6 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _023125DC + ldr r0, [r6] + cmp r0, #1 + bne _023125DC + cmp r5, #0 + bne _023125AC + mov r5, #1 + bl ov29_0234B034 + mov r1, #0 + mov r2, r7 + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + ldr r2, _02312614 ; =0x00000DC5 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_023125AC: + mov r0, sb + mov r1, r6 + bl ov29_023018AC + cmp r0, #1 + bne _023125DC + mov r2, #0 + str r2, [sp] + mov r0, sl + mov r1, r6 + mov r2, #1 + mov r3, r8 + bl TryInflictBurnStatus +_023125DC: + add r4, r4, #1 + cmp r4, #8 + blt _02312534 +_023125E8: + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +#define TRY_INFLICT_BURN_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_BURN_STATUS_OFFSET 0 +#endif +_023125F0: .word 0x00000DAB + TRY_INFLICT_BURN_STATUS_OFFSET +_023125F4: .word 0x00000DAC + TRY_INFLICT_BURN_STATUS_OFFSET +_023125F8: .word DUNGEON_PTR +_023125FC: .word SECONDARY_TERRAIN_TYPES +_02312600: .word 0x00000DB9 + TRY_INFLICT_BURN_STATUS_OFFSET +_02312604: .word ov10_022C4874 +_02312608: .word 0x00000D1C + TRY_INFLICT_BURN_STATUS_OFFSET +_0231260C: .word 0x00000D1D + TRY_INFLICT_BURN_STATUS_OFFSET +_02312610: .word DIRECTIONS_XY +_02312614: .word 0x00000DC5 + TRY_INFLICT_BURN_STATUS_OFFSET + arm_func_end TryInflictBurnStatus + + arm_func_start TryInflictBurnStatusWholeTeam +TryInflictBurnStatusWholeTeam: ; 0x02312618 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, #0 + ldr r4, _02312660 ; =DUNGEON_PTR + mov r6, r7 + mov r5, #1 +_0231262C: + ldr r0, [r4] + mov r2, r5 + add r0, r0, r7, lsl #2 + str r6, [sp] + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r0, [r0, #0xa84] +#else + ldr r0, [r0, #0xb28] +#endif + mov r3, r5 + mov r1, r0 + bl TryInflictBurnStatus + add r7, r7, #1 + cmp r7, #4 + blt _0231262C + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02312660: .word DUNGEON_PTR + arm_func_end TryInflictBurnStatusWholeTeam + + arm_func_start TryInflictPoisonedStatus +TryInflictPoisonedStatus: ; 0x02312664 +#ifdef JAPAN +#define TRY_INFLICT_POISONED_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_POISONED_STATUS_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sb, r1 + mov sl, r0 + mov r0, sb + mov r8, r2 + mov r4, r3 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + mov r2, r8 + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + mov r2, r8 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r7, [sb, #0xb4] + bl ov29_0234B034 + mov r1, #0 + mov r2, r7 + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + mov r0, sb + mov r1, #0x1b + bl ItemIsActive__02311BF8 + cmp r0, #0 + beq _02312714 + cmp r8, #0 + beq _0231270C + mov r0, sl + mov r1, sb + mov r2, #0xdb0 + TRY_INFLICT_POISONED_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUserTarget +_0231270C: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02312714: + mov r0, sl + mov r1, sb + mov r2, #0x45 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02312750 + cmp r8, #0 + beq _02312748 + ldr r2, _02312924 ; =0x00000DAD + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_02312748: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02312750: + mov r0, sb + mov r1, #8 + bl MonsterIsType + cmp r0, #0 + bne _02312778 + mov r0, sb + mov r1, #0x11 + bl MonsterIsType + cmp r0, #0 + beq _02312798 +_02312778: + cmp r8, #0 + beq _02312790 + ldr r2, _02312928 ; =0x00000DAE + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_02312790: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02312798: + cmp r4, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r0, [r7, #0xbf] + mov r4, #1 + cmp r0, #3 + beq _02312830 + cmp r0, #2 + beq _0231281C + ldr r1, _0231292C ; =ov10_022C4878 + mov r3, #2 + mov r0, sb + mov r2, r4 + strb r3, [r7, #0xbf] + bl CalcStatusDuration + add r0, r0, #1 + strb r0, [r7, #0xc0] + mov r4, #0 + strb r4, [r7, #0xc1] + mov r0, sb + strb r4, [r7, #0xc2] + bl ov29_022E4388 + ldr r2, _02312930 ; =0x00000D1E + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, sb + mov r1, #8 + bl ov29_02304A84 + mov r0, sl + mov r1, sb + bl TryActivateQuickFeet + b _02312840 +_0231281C: + mov r0, sl + mov r1, sb + mov r2, #0xd20 + TRY_INFLICT_POISONED_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUserTarget + b _02312840 +_02312830: + mov r0, sl + mov r1, sb + add r2, r4, #0xd20 + TRY_INFLICT_POISONED_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUserTarget +_02312840: + mov r0, sb + mov r1, #0x19 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _02312914 + cmp r4, #0 + bne _02312914 + mov r5, #0 + ldr fp, _02312934 ; =DIRECTIONS_XY + mov r4, r5 +_02312868: + mov r1, r4, lsl #2 + add r0, fp, r4, lsl #2 + ldrsh r6, [sb, #4] + ldrsh r3, [fp, r1] + ldrsh r1, [r0, #2] + ldrsh r2, [sb, #6] + add r0, r6, r3 + add r1, r2, r1 + bl GetTile + ldr r6, [r0, #0xc] + mov r0, r6 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _02312908 + ldr r0, [r6] + cmp r0, #1 + bne _02312908 + cmp r5, #0 + bne _023128E0 + mov r5, #1 + bl ov29_0234B034 + mov r1, #0 + mov r2, r7 + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + ldr r2, _02312938 ; =0x00000DC5 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_023128E0: + mov r0, sb + mov r1, r6 + bl ov29_023018AC + cmp r0, #1 + bne _02312908 + mov r0, sl + mov r1, r6 + mov r2, r8 + mov r3, #0 + bl TryInflictPoisonedStatus +_02312908: + add r4, r4, #1 + cmp r4, #8 + blt _02312868 +_02312914: + mov r0, sb + bl UpdateStatusIconFlags + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02312924: .word 0x00000DAD + TRY_INFLICT_POISONED_STATUS_OFFSET +_02312928: .word 0x00000DAE + TRY_INFLICT_POISONED_STATUS_OFFSET +_0231292C: .word ov10_022C4878 +_02312930: .word 0x00000D1E + TRY_INFLICT_POISONED_STATUS_OFFSET +_02312934: .word DIRECTIONS_XY +_02312938: .word 0x00000DC5 + TRY_INFLICT_POISONED_STATUS_OFFSET + arm_func_end TryInflictPoisonedStatus + + arm_func_start TryInflictBadlyPoisonedStatus +TryInflictBadlyPoisonedStatus: ; 0x0231293C +#ifdef JAPAN +#define TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sb, r1 + mov sl, r0 + mov r0, sb + mov r8, r2 + mov r4, r3 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + mov r2, r8 + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + mov r2, r8 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r7, [sb, #0xb4] + bl ov29_0234B034 + mov r1, #0 + mov r2, r7 + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + mov r0, sb + mov r1, #0x1b + bl ItemIsActive__02311BF8 + cmp r0, #0 + beq _023129EC + cmp r8, #0 + beq _023129E4 + mov r0, sl + mov r1, sb + mov r2, #0xdb0 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUserTarget +_023129E4: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_023129EC: + mov r0, sl + mov r1, sb + mov r2, #0x45 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02312A28 + cmp r8, #0 + beq _02312A20 + ldr r2, _02312BE0 ; =0x00000DAD + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_02312A20: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02312A28: + mov r0, sb + mov r1, #8 + bl MonsterIsType + cmp r0, #0 + bne _02312A50 + mov r0, sb + mov r1, #0x11 + bl MonsterIsType + cmp r0, #0 + beq _02312A70 +_02312A50: + cmp r8, #0 + beq _02312A68 + ldr r2, _02312BE4 ; =0x00000DAE + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_02312A68: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02312A70: + cmp r4, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldrb r0, [r7, #0xbf] + mov r4, #1 + cmp r0, #3 + beq _02312AEC + ldr r1, _02312BE8 ; =ov10_022C4880 + mov r3, #3 + mov r0, sb + mov r2, r4 + strb r3, [r7, #0xbf] + bl CalcStatusDuration + add r0, r0, #1 + strb r0, [r7, #0xc0] + mov r4, #0 + strb r4, [r7, #0xc1] + mov r0, sb + strb r4, [r7, #0xc2] + bl ov29_022E43D8 + ldr r2, _02312BEC ; =0x00000D1F + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, sb + mov r1, #8 + bl ov29_02304A84 + mov r0, sl + mov r1, sb + bl TryActivateQuickFeet + b _02312AFC +_02312AEC: + mov r0, sl + mov r1, sb + add r2, r4, #0xd20 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUserTarget +_02312AFC: + mov r0, sb + mov r1, #0x19 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _02312BD0 + cmp r4, #0 + bne _02312BD0 + mov r5, #0 + ldr fp, _02312BF0 ; =DIRECTIONS_XY + mov r4, r5 +_02312B24: + mov r1, r4, lsl #2 + add r0, fp, r4, lsl #2 + ldrsh r6, [sb, #4] + ldrsh r3, [fp, r1] + ldrsh r1, [r0, #2] + ldrsh r2, [sb, #6] + add r0, r6, r3 + add r1, r2, r1 + bl GetTile + ldr r6, [r0, #0xc] + mov r0, r6 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _02312BC4 + ldr r0, [r6] + cmp r0, #1 + bne _02312BC4 + cmp r5, #0 + bne _02312B9C + mov r5, #1 + bl ov29_0234B034 + mov r1, #0 + mov r2, r7 + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + ldr r2, _02312BF4 ; =0x00000DC5 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_02312B9C: + mov r0, sb + mov r1, r6 + bl ov29_023018AC + cmp r0, #1 + bne _02312BC4 + mov r0, sl + mov r1, r6 + mov r2, r8 + mov r3, #0 + bl TryInflictBadlyPoisonedStatus +_02312BC4: + add r4, r4, #1 + cmp r4, #8 + blt _02312B24 +_02312BD0: + mov r0, sb + bl UpdateStatusIconFlags + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02312BE0: .word 0x00000DAD + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET +_02312BE4: .word 0x00000DAE + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET +_02312BE8: .word ov10_022C4880 +_02312BEC: .word 0x00000D1F + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET +_02312BF0: .word DIRECTIONS_XY +_02312BF4: .word 0x00000DC5 + TRY_INFLICT_BADLY_POISONED_STATUS_OFFSET + arm_func_end TryInflictBadlyPoisonedStatus + + arm_func_start TryInflictFrozenStatus +TryInflictFrozenStatus: ; 0x02312BF8 +#ifdef JAPAN +#define TRY_INFLICT_FROZEN_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_FROZEN_STATUS_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r5, r2 + bl EntityIsValid__023118B4 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r4, [r6, #0xb4] + ldrb r0, [r4, #0xc4] + cmp r0, #1 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl SafeguardIsActive + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov ip, #4 + mov r0, r7 + mov r1, r6 + mov r2, r5 + rsb r3, ip, #0xdc0 + TRY_INFLICT_FROZEN_STATUS_OFFSET + str ip, [sp] + bl ExclusiveItemEffectIsActiveWithLogging + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, #0x41 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02312CC4 + cmp r5, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + ldr r2, _02312E00 ; =0x00000DA8 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02312CC4: + mov r0, r6 + mov r1, #6 + bl MonsterIsType + cmp r0, #0 + beq _02312CF4 + cmp r5, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + ldr r2, _02312E04 ; =0x00000DA9 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02312CF4: + mov r0, r6 + bl GetTileAtEntity + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #2 + bne _02312D48 + ldr r0, _02312E08 ; =DUNGEON_PTR + ldr r1, _02312E0C ; =SECONDARY_TERRAIN_TYPES + ldr r0, [r0] + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x30] +#else + ldrsh r0, [r0, #0xd4] +#endif + ldrb r0, [r1, r0] + cmp r0, #1 + bne _02312D48 + cmp r5, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + ldr r2, _02312E10 ; =0x00000DAA + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02312D48: + mov ip, #4 + mov r0, r7 + mov r1, r6 + mov r2, r5 + rsb r3, ip, #0xdc0 + TRY_INFLICT_FROZEN_STATUS_OFFSET + str ip, [sp] + bl ExclusiveItemEffectIsActiveWithLogging + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldrb r0, [r4, #0xc4] + add r0, r0, #0xfd + and r0, r0, #0xff + cmp r0, #1 + bhi _02312D88 + ldr r0, [r4, #0xb4] + bl FreeOtherWrappedMonsters +_02312D88: + mov r0, r6 + bl ov29_022E4C4C + mov r2, #1 + ldr r1, _02312E14 ; =ov10_022C4870 + mov r0, r6 + strb r2, [r4, #0xc4] + bl CalcStatusDuration + add r3, r0, #1 + strb r3, [r4, #0xcc] + mov r3, #0 + ldr r2, _02312E18 ; =0x00000D22 + mov r0, r7 + mov r1, r6 + strb r3, [r4, #0xcd] + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r6 + bl UpdateStatusIconFlags + mov r0, r7 + mov r1, r6 + bl TryActivateQuickFeet + mov r0, r6 + mov r1, #0 + bl ChangeShayminForme + cmp r0, #3 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r2, _02312E1C ; =0x00000D23 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02312E00: .word 0x00000DA8 + TRY_INFLICT_FROZEN_STATUS_OFFSET +_02312E04: .word 0x00000DA9 + TRY_INFLICT_FROZEN_STATUS_OFFSET +_02312E08: .word DUNGEON_PTR +_02312E0C: .word SECONDARY_TERRAIN_TYPES +_02312E10: .word 0x00000DAA + TRY_INFLICT_FROZEN_STATUS_OFFSET +_02312E14: .word ov10_022C4870 +_02312E18: .word 0x00000D22 + TRY_INFLICT_FROZEN_STATUS_OFFSET +_02312E1C: .word 0x00000D23 + TRY_INFLICT_FROZEN_STATUS_OFFSET + arm_func_end TryInflictFrozenStatus + + arm_func_start TryInflictConstrictionStatus +TryInflictConstrictionStatus: ; 0x02312E20 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r5, r2 + mov r4, r3 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, r4 + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, r4 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r4, [r6, #0xb4] + ldrb r1, [r4, #0xc4] + add r0, r1, #0xfd + and r0, r0, #0xff + cmp r0, #1 + bhi _02312EA4 + ldr r0, [r4, #0xb4] + bl FreeOtherWrappedMonsters + b _02312ECC +_02312EA4: + cmp r1, #5 + bne _02312ECC + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _02312F68 ; =0x00000C9B + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02312ECC: + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xc4] + cmp r0, #7 + beq _02312F48 + ldr r1, _02312F6C ; =ov10_022C48A0 + mov r3, #7 + mov r0, r6 + mov r2, #1 + strb r3, [r4, #0xc4] + bl CalcStatusDuration + add r0, r0, #1 + strb r0, [r4, #0xcc] + mov r0, #0 + strb r0, [r4, #0xcd] + mov r0, r6 + str r5, [r4, #0xc8] + bl ov29_022E42E4 + ldr r2, _02312F70 ; =0x00000D24 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r6 + mov r1, #8 + bl ov29_02304A84 + mov r0, r7 + mov r1, r6 + bl TryActivateQuickFeet + b _02312F58 +_02312F48: + ldr r2, _02312F74 ; =0x00000D25 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02312F58: + mov r0, r6 + bl UpdateStatusIconFlags + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +#ifdef JAPAN +#define TRY_INFLICT_CONSTRICTION_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_CONSTRICTION_STATUS_OFFSET 0 +#endif +_02312F68: .word 0x00000C9B + TRY_INFLICT_CONSTRICTION_STATUS_OFFSET +_02312F6C: .word ov10_022C48A0 +_02312F70: .word 0x00000D24 + TRY_INFLICT_CONSTRICTION_STATUS_OFFSET +_02312F74: .word 0x00000D25 + TRY_INFLICT_CONSTRICTION_STATUS_OFFSET + arm_func_end TryInflictConstrictionStatus + + arm_func_start TryInflictShadowHoldStatus +TryInflictShadowHoldStatus: ; 0x02312F78 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + mov r6, r0 + mov r0, r5 + mov r4, r2 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r1, r5 + mov r2, #1 + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r1, r5 + mov r2, #1 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r6 + mov r1, r5 + mov r2, #0x2b +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _0231302C + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r0, #1 + mov r1, #0x2b + bl ov29_0234B084 + cmp r4, #0 + bne _02313024 + ldr r2, _0231311C ; =0x00000D28 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget +_02313024: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} +_0231302C: + cmp r4, #0 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, pc} + ldr r4, [r5, #0xb4] + ldrb r1, [r4, #0xc4] + add r0, r1, #0xfd + and r0, r0, #0xff + cmp r0, #1 + bhi _0231305C + ldr r0, [r4, #0xb4] + bl FreeOtherWrappedMonsters + b _02313084 +_0231305C: + cmp r1, #5 + bne _02313084 + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _02313120 ; =0x00000C9B + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget +_02313084: + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xc4] + cmp r0, #2 + beq _023130FC + ldr r1, _02313124 ; =ov10_022C4898 + mov r3, #2 + mov r0, r5 + mov r2, #1 + strb r3, [r4, #0xc4] + bl CalcStatusDuration + add r1, r0, #1 + mov r0, r5 + strb r1, [r4, #0xcc] + mov r1, #0 + strb r1, [r4, #0xcd] + bl ov29_022E42E0 + ldr r2, _02313128 ; =0x00000D26 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r5 + mov r1, #8 + bl ov29_02304A84 + mov r0, r6 + mov r1, r5 + bl TryActivateQuickFeet + b _0231310C +_023130FC: + ldr r2, _0231312C ; =0x00000D27 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget +_0231310C: + mov r0, r5 + bl UpdateStatusIconFlags + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +#define TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET 0 +#endif +_0231311C: .word 0x00000D28 + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET +_02313120: .word 0x00000C9B + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET +_02313124: .word ov10_022C4898 +_02313128: .word 0x00000D26 + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET +_0231312C: .word 0x00000D27 + TRY_INFLICT_SHADOW_HOLD_STATUS_OFFSET + arm_func_end TryInflictShadowHoldStatus + + arm_func_start TryInflictIngrainStatus +TryInflictIngrainStatus: ; 0x02313130 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r1 + mov r6, r0 + mov r0, r5 + bl EntityIsValid__023118B4 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r4, [r5, #0xb4] + ldrb r0, [r4, #0xc4] + add r0, r0, #0xfd + and r0, r0, #0xff + cmp r0, #1 + bhi _0231316C + ldr r0, [r4, #0xb4] + bl FreeOtherWrappedMonsters +_0231316C: + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xc4] + cmp r0, #5 + beq _023131CC + ldr r1, _023131E8 ; =ov10_022C48B8 + mov r3, #5 + mov r0, r5 + mov r2, #0 + strb r3, [r4, #0xc4] + bl CalcStatusDuration + add r1, r0, #1 + mov r0, r5 + strb r1, [r4, #0xcc] + mov r1, #0 + strb r1, [r4, #0xcd] + bl ov29_022E4D24 + ldr r2, _023131EC ; =0x00000D29 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _023131DC +_023131CC: + ldr r2, _023131F0 ; =0x00000D2A + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget +_023131DC: + mov r0, r5 + bl UpdateStatusIconFlags + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_023131E8: .word ov10_022C48B8 +#ifdef JAPAN +_023131EC: .word 0x00000A69 +_023131F0: .word 0x00000A6A +#else +_023131EC: .word 0x00000D29 +_023131F0: .word 0x00000D2A +#endif + arm_func_end TryInflictIngrainStatus + + arm_func_start TryInflictWrappedStatus +TryInflictWrappedStatus: ; 0x023131F4 +#ifdef JAPAN +#define TRY_INFLICT_WRAPPED_STATUS_OFFSET -0xA4 +#else +#define TRY_INFLICT_WRAPPED_STATUS_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r0, r6 + bl EntityIsValid__023118B4 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, #1 + bl SafeguardIsActive + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, #1 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + ldr r4, [r7, #0xb4] + ldr r5, [r6, #0xb4] + ldrb r1, [r4, #0xc4] + cmp r1, #3 + cmpne r1, #4 + ldrneb r0, [r5, #0xc4] + cmpne r0, #3 + cmpne r0, #4 + beq _02313324 + mov r0, #3 + strb r0, [r4, #0xc4] + mov r0, #0x7f + strb r0, [r4, #0xcc] + mov r2, #0 + ldr r1, _023133DC ; =ov10_022C48AC + mov r0, r6 + strb r2, [r4, #0xcd] + mov r3, #4 + mov r2, #1 + strb r3, [r5, #0xc4] + bl CalcStatusDuration + add r0, r0, #1 + strb r0, [r5, #0xcc] + mov r0, #0 + ldr r3, _023133E0 ; =DUNGEON_PTR + strb r0, [r5, #0xcd] + ldr r1, [r3] + mov r0, r7 + add r1, r1, #0x3000 + ldr r2, [r1, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET] + mov r1, r6 + str r2, [r4, #0xb4] + ldr r2, [r3] + add r2, r2, #0x3000 + ldr r2, [r2, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET] + str r2, [r5, #0xb4] + ldr r2, [r3] + add r2, r2, #0x3000 + ldr r3, [r2, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET] + add r3, r3, #1 + str r3, [r2, #0xe30 + TRY_INFLICT_WRAPPED_STATUS_OFFSET] + bl ov29_022E4290 + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _023133E4 ; =0x00000D2B + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r6 + mov r1, #8 + bl ov29_02304A84 + mov r0, r7 + mov r1, r6 + bl TryActivateQuickFeet + b _023133D0 +_02313324: + cmp r1, #3 + bne _0231334C + mov r0, #0 + mov r1, r7 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _023133E8 ; =0x00000D2C + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_0231334C: + ldrb r0, [r5, #0xc4] + cmp r0, #3 + bne _02313378 + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _023133E8 ; =0x00000D2C + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02313378: + ldrb r0, [r4, #0xc4] + cmp r0, #4 + bne _023133A4 + mov r0, #0 + mov r1, r7 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _023133EC ; =0x00000D2D + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_023133A4: + ldrb r0, [r5, #0xc4] + cmp r0, #4 + bne _023133D0 + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _023133EC ; =0x00000D2D + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_023133D0: + mov r0, r6 + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +#ifdef JAPAN +#define TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET -0x2C0 +#else +#define TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET 0 +#endif +_023133DC: .word ov10_022C48AC +_023133E0: .word DUNGEON_PTR +_023133E4: .word 0x00000D2B + TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET +_023133E8: .word 0x00000D2C + TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET +_023133EC: .word 0x00000D2D + TRY_INFLICT_WRAPPED_STATUS_DATA_OFFSET + arm_func_end TryInflictWrappedStatus + + arm_func_start FreeOtherWrappedMonsters +FreeOtherWrappedMonsters: ; 0x023133F0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r4, #0 + ldr r7, _02313468 ; =DUNGEON_PTR + mov r6, r0 + mov sb, r4 + mov r8, r4 +_02313408: + ldr r0, [r7] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr r5, [r0, #0xad4] +#else + ldr r5, [r0, #0xb78] +#endif + mov r0, r5 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _02313458 + ldr r1, [r5, #0xb4] + ldr r0, [r1, #0xb4] + cmp r0, r6 + bne _02313450 + ldrb r0, [r1, #0xc4] + add r0, r0, #0xfd + and r0, r0, #0xff + cmp r0, #1 + strlsb sb, [r1, #0xc4] + str r8, [r1, #0xb4] +_02313450: + mov r0, r5 + bl UpdateStatusIconFlags +_02313458: + add r4, r4, #1 + cmp r4, #0x14 + blt _02313408 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02313468: .word DUNGEON_PTR + arm_func_end FreeOtherWrappedMonsters + + arm_func_start TryInflictPetrifiedStatus +TryInflictPetrifiedStatus: ; 0x0231346C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r5, r1 + mov r6, r0 + mov r0, r5 + bl EntityIsValid__023118B4 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r0, r6 + mov r1, r5 + mov r2, #1 + bl SafeguardIsActive + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r0, r6 + mov r1, r5 + mov r2, #1 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r0, r5 + bl ov29_022E41F0 + ldr r4, [r5, #0xb4] + ldrb r0, [r4, #0xc4] + add r0, r0, #0xfd + and r0, r0, #0xff + cmp r0, #1 + bhi _023134E0 + ldr r0, [r4, #0xb4] + bl FreeOtherWrappedMonsters +_023134E0: + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xc4] + cmp r0, #6 + beq _02313560 + mov r0, #6 + strb r0, [r4, #0xc4] + ldrb r0, [r4, #7] + mov r2, #1 + cmp r0, #0 + beq _02313524 + ldr r1, _023135E8 ; =ov10_022C479C + mov r0, r5 + bl CalcStatusDuration + b _02313530 +_02313524: + ldr r1, _023135EC ; =ov10_022C47A0 + mov r0, r5 + bl CalcStatusDuration +_02313530: + add r0, r0, #1 + strb r0, [r4, #0xcc] + mov r3, #0 + ldr r2, _023135F0 ; =0x00000D32 + mov r0, r6 + mov r1, r5 + strb r3, [r4, #0xcd] + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r6 + mov r1, r5 + bl TryActivateQuickFeet + b _02313570 +_02313560: + ldr r2, _023135F4 ; =0x00000D33 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget +_02313570: + ldrb r0, [r4, #6] + cmp r0, #0 + beq _023135DC + mov r4, #0 + ldr r6, _023135F8 ; =DUNGEON_PTR + mov r8, #6 + mov r7, r4 +_0231358C: + ldr r0, [r6] + add r0, r0, r4, lsl #2 + add r0, r0, #0x12000 +#ifdef JAPAN + ldr sb, [r0, #0xa84] +#else + ldr sb, [r0, #0xb28] +#endif + mov r0, sb + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _023135D0 + ldr r1, [sb, #0xb4] + ldrb r0, [r1, #0x7c] + cmp r0, #1 + ldreq r0, [r1, #0x84] + cmpeq r0, r5 + streqb r8, [r1, #0x7c] + streq r7, [r1, #0x84] + streqh r7, [r1, #0x80] + streqb r7, [r1, #0x7e] +_023135D0: + add r4, r4, #1 + cmp r4, #4 + blt _0231358C +_023135DC: + mov r0, r5 + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_023135E8: .word ov10_022C479C +_023135EC: .word ov10_022C47A0 +#ifdef JAPAN +_023135F0: .word 0x00000A72 +_023135F4: .word 0x00000A73 +#else +_023135F0: .word 0x00000D32 +_023135F4: .word 0x00000D33 +#endif +_023135F8: .word DUNGEON_PTR + arm_func_end TryInflictPetrifiedStatus + + arm_func_start LowerOffensiveStat +LowerOffensiveStat: ; 0x023135FC + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r1 + mov r5, r3 + mov r8, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r6, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r4, r0 + mov r1, r5, lsl #0x10 + mov r0, r7 + mov r5, r1, asr #0x10 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _023137E8 + ldr r0, [sp, #0x20] + cmp r0, #0 + beq _02313660 + ldr r1, _023137F4 ; =0x00000DCB + mov r0, r6 + bl CopyStringFromId + mov r1, r6 + mov r0, #1 + bl ov29_0234B0B4 + b _02313678 +_02313660: + ldr r1, _023137F8 ; =0x00000DCA + mov r0, r6 + bl CopyStringFromId + mov r1, r6 + mov r0, #1 + bl ov29_0234B0B4 +_02313678: + ldrb r0, [sp, #0x28] + cmp r0, #0 + beq _02313720 + ldrb r2, [sp, #0x2c] + mov r0, r8 + mov r1, r7 + bl IsProtectedFromStatDrops + cmp r0, #0 + bne _023137E8 + mov r0, r7 + mov r1, #0x12 + bl ItemIsActive__02311BF8 + cmp r0, #0 + beq _023136D4 + mov r0, #0 + mov r1, r7 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _023137FC ; =0x00000DB2 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _023137E8 +_023136D4: + mov r0, r8 + mov r1, r7 + mov r2, #9 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02313720 + ldr r0, [sp, #0x20] + cmp r0, #0 + bne _02313720 + mov r0, #0 + mov r1, r7 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _02313800 ; =0x00000D9E + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _023137E8 +_02313720: + mov r0, #0 + mov r1, r7 + mov r2, r0 + ldr r6, [r7, #0xb4] + bl SubstitutePlaceholderStringTags + add r1, sp, #0x20 + ldr r1, [r1] + mov r0, r7 + bl ov29_022E4D28 + mov r0, r7 + mov r1, #0x61 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, r5, lsl #0x11 + movne r5, r0, asr #0x10 + cmp r5, #1 + bne _02313780 + ldr r1, _02313804 ; =0x00000DCD + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #2 + bl ov29_0234B0B4 + b _02313798 +_02313780: + ldr r1, _02313808 ; =0x00000DCC + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #2 + bl ov29_0234B0B4 +_02313798: + ldr r1, [sp, #0x20] + add r0, r6, r1, lsl #1 + ldrsh r0, [r0, #0x24] + subs r4, r0, r5 + movmi r4, #0 + cmp r4, r0 + beq _023137D0 + ldr r2, _0231380C ; =0x00000D91 + add r3, r6, r1, lsl #1 + mov r0, r8 + mov r1, r7 + strh r4, [r3, #0x24] + bl LogMessageByIdWithPopupCheckUserTarget + b _023137E0 +_023137D0: + ldr r2, _02313810 ; =0x00000DD9 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_023137E0: + mov r0, r7 + bl UpdateStatusIconFlags +_023137E8: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +#ifdef JAPAN +#define LOWER_OFFENSIVE_STAT_OFFSET -0x2C0 +#else +#define LOWER_OFFENSIVE_STAT_OFFSET 0 +#endif +_023137F4: .word 0x00000DCB + LOWER_OFFENSIVE_STAT_OFFSET +_023137F8: .word 0x00000DCA + LOWER_OFFENSIVE_STAT_OFFSET +_023137FC: .word 0x00000DB2 + LOWER_OFFENSIVE_STAT_OFFSET +_02313800: .word 0x00000D9E + LOWER_OFFENSIVE_STAT_OFFSET +_02313804: .word 0x00000DCD + LOWER_OFFENSIVE_STAT_OFFSET +_02313808: .word 0x00000DCC + LOWER_OFFENSIVE_STAT_OFFSET +_0231380C: .word 0x00000D91 + LOWER_OFFENSIVE_STAT_OFFSET +_02313810: .word 0x00000DD9 + LOWER_OFFENSIVE_STAT_OFFSET + arm_func_end LowerOffensiveStat + + arm_func_start LowerDefensiveStat +LowerDefensiveStat: ; 0x02313814 +#ifdef JAPAN +#define LOWER_DEFENSIVE_STAT_OFFSET -0x2C0 +#else +#define LOWER_DEFENSIVE_STAT_OFFSET 0 +#endif + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r1 + mov r5, r3 + mov r8, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r6, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r4, r0 + mov r1, r5, lsl #0x10 + mov r0, r7 + mov r5, r1, asr #0x10 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _0231397C + ldr r0, [sp, #0x20] + cmp r0, #0 + beq _02313878 + ldr r1, _02313988 ; =0x00000DC9 + mov r0, r6 + bl CopyStringFromId + mov r1, r6 + mov r0, #1 + bl ov29_0234B0B4 + b _02313890 +_02313878: + ldr r1, _0231398C ; =0x00000DC8 + mov r0, r6 + bl CopyStringFromId + mov r1, r6 + mov r0, #1 + bl ov29_0234B0B4 +_02313890: + ldrb r0, [sp, #0x28] + cmp r0, #0 + beq _023138B4 + ldrb r2, [sp, #0x2c] + mov r0, r8 + mov r1, r7 + bl IsProtectedFromStatDrops + cmp r0, #0 + bne _0231397C +_023138B4: + mov r0, #0 + mov r1, r7 + mov r2, r0 + ldr r6, [r7, #0xb4] + bl SubstitutePlaceholderStringTags + add r1, sp, #0x20 + ldr r1, [r1] + mov r0, r7 + bl ov29_022E4DCC + mov r0, r7 + mov r1, #0x61 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, r5, lsl #0x11 + movne r5, r0, asr #0x10 + cmp r5, #1 + bne _02313914 + ldr r1, _02313990 ; =0x00000DCD + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #2 + bl ov29_0234B0B4 + b _0231392C +_02313914: + ldr r1, _02313994 ; =0x00000DCC + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #2 + bl ov29_0234B0B4 +_0231392C: + ldr r1, [sp, #0x20] + add r0, r6, r1, lsl #1 + ldrsh r0, [r0, #0x28] + subs r4, r0, r5 + movmi r4, #0 + cmp r4, r0 + beq _02313964 + add r3, r6, r1, lsl #1 + mov r0, r8 + mov r1, r7 + mov r2, #0xd90 + LOWER_DEFENSIVE_STAT_OFFSET + strh r4, [r3, #0x28] + bl LogMessageByIdWithPopupCheckUserTarget + b _02313974 +_02313964: + ldr r2, _02313998 ; =0x00000DD7 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02313974: + mov r0, r7 + bl UpdateStatusIconFlags +_0231397C: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_02313988: .word 0x00000DC9 + LOWER_DEFENSIVE_STAT_OFFSET +_0231398C: .word 0x00000DC8 + LOWER_DEFENSIVE_STAT_OFFSET +_02313990: .word 0x00000DCD + LOWER_DEFENSIVE_STAT_OFFSET +_02313994: .word 0x00000DCC + LOWER_DEFENSIVE_STAT_OFFSET +_02313998: .word 0x00000DD7 + LOWER_DEFENSIVE_STAT_OFFSET + arm_func_end LowerDefensiveStat + + arm_func_start BoostOffensiveStat +BoostOffensiveStat: ; 0x0231399C + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, r1 + mov r6, r3 + mov sb, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r4, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r5, r0 + mov r1, r6, lsl #0x10 + mov r0, r8 + mov r6, r1, asr #0x10 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _02313AE4 + mov r0, #0 + mov r1, r8 + mov r2, r0 + ldr r7, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + add r1, sp, #0x28 + ldr r1, [r1] + mov r0, r8 + bl ov29_022E4E74 + ldr r0, [sp, #0x28] + cmp r0, #0 + beq _02313A24 + ldr r1, _02313AF0 ; =0x00000DCB + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl ov29_0234B0B4 + b _02313A3C +_02313A24: + ldr r1, _02313AF4 ; =0x00000DCA + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl ov29_0234B0B4 +_02313A3C: + mov r0, r8 + mov r1, #0x61 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, r6, lsl #0x11 + movne r6, r0, asr #0x10 + cmp r6, #1 + bne _02313A78 + ldr r1, _02313AF8 ; =0x00000DCD + mov r0, r5 + bl CopyStringFromId + mov r1, r5 + mov r0, #2 + bl ov29_0234B0B4 + b _02313A90 +_02313A78: + ldr r1, _02313AFC ; =0x00000DCC + mov r0, r5 + bl CopyStringFromId + mov r1, r5 + mov r0, #2 + bl ov29_0234B0B4 +_02313A90: + ldr r1, [sp, #0x28] + add r0, r7, r1, lsl #1 + ldrsh r0, [r0, #0x24] + add r4, r0, r6 + cmp r4, #0x14 + movge r4, #0x14 + cmp r4, r0 + beq _02313ACC + ldr r2, _02313B00 ; =0x00000D8F + add r3, r7, r1, lsl #1 + mov r0, sb + mov r1, r8 + strh r4, [r3, #0x24] + bl LogMessageByIdWithPopupCheckUserTarget + b _02313ADC +_02313ACC: + ldr r2, _02313B04 ; =0x00000DD8 + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget +_02313ADC: + mov r0, r8 + bl UpdateStatusIconFlags +_02313AE4: + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +#ifdef JAPAN +#define BOOST_OFFENSIVE_STAT_OFFSET -0x2C0 +#else +#define BOOST_OFFENSIVE_STAT_OFFSET 0 +#endif +_02313AF0: .word 0x00000DCB + BOOST_OFFENSIVE_STAT_OFFSET +_02313AF4: .word 0x00000DCA + BOOST_OFFENSIVE_STAT_OFFSET +_02313AF8: .word 0x00000DCD + BOOST_OFFENSIVE_STAT_OFFSET +_02313AFC: .word 0x00000DCC + BOOST_OFFENSIVE_STAT_OFFSET +_02313B00: .word 0x00000D8F + BOOST_OFFENSIVE_STAT_OFFSET +_02313B04: .word 0x00000DD8 + BOOST_OFFENSIVE_STAT_OFFSET + arm_func_end BoostOffensiveStat + +; https://decomp.me/scratch/90P8f + arm_func_start BoostDefensiveStat +BoostDefensiveStat: ; 0x02313B08 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, r1 + mov r6, r3 + mov sb, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r4, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r5, r0 + mov r1, r6, lsl #0x10 + mov r0, r8 + mov r6, r1, asr #0x10 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _02313C50 + mov r0, #0 + mov r1, r8 + mov r2, r0 + ldr r7, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + add r1, sp, #0x28 + ldr r1, [r1] + mov r0, r8 + bl ov29_022E4F1C + ldr r0, [sp, #0x28] + cmp r0, #0 + beq _02313B90 + ldr r1, _02313C5C ; =0x00000DC9 + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl ov29_0234B0B4 + b _02313BA8 +_02313B90: + ldr r1, _02313C60 ; =0x00000DC8 + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl ov29_0234B0B4 +_02313BA8: + mov r0, r8 + mov r1, #0x61 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, r6, lsl #0x11 + movne r6, r0, asr #0x10 + cmp r6, #1 + bne _02313BE4 + ldr r1, _02313C64 ; =0x00000DCD + mov r0, r5 + bl CopyStringFromId + mov r1, r5 + mov r0, #2 + bl ov29_0234B0B4 + b _02313BFC +_02313BE4: + ldr r1, _02313C68 ; =0x00000DCC + mov r0, r5 + bl CopyStringFromId + mov r1, r5 + mov r0, #2 + bl ov29_0234B0B4 +_02313BFC: + ldr r1, [sp, #0x28] + add r0, r7, r1, lsl #1 + ldrsh r0, [r0, #0x28] + add r4, r0, r6 + cmp r4, #0x14 + movge r4, #0x14 + cmp r4, r0 + beq _02313C38 + ldr r2, _02313C6C ; =0x00000D8E + add r3, r7, r1, lsl #1 + mov r0, sb + mov r1, r8 + strh r4, [r3, #0x28] + bl LogMessageByIdWithPopupCheckUserTarget + b _02313C48 +_02313C38: + ldr r2, _02313C70 ; =0x00000DD6 + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget +_02313C48: + mov r0, r8 + bl UpdateStatusIconFlags +_02313C50: + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +#ifdef JAPAN +#define BOOST_DEFENSIVE_STAT_OFFSET -0x2C0 +#else +#define BOOST_DEFENSIVE_STAT_OFFSET 0 +#endif +_02313C5C: .word 0x00000DC9 + BOOST_DEFENSIVE_STAT_OFFSET +_02313C60: .word 0x00000DC8 + BOOST_DEFENSIVE_STAT_OFFSET +_02313C64: .word 0x00000DCD + BOOST_DEFENSIVE_STAT_OFFSET +_02313C68: .word 0x00000DCC + BOOST_DEFENSIVE_STAT_OFFSET +_02313C6C: .word 0x00000D8E + BOOST_DEFENSIVE_STAT_OFFSET +_02313C70: .word 0x00000DD6 + BOOST_DEFENSIVE_STAT_OFFSET + arm_func_end BoostDefensiveStat + + arm_func_start FlashFireShouldActivate +FlashFireShouldActivate: ; 0x02313C74 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, r5 + mov r1, #0x6b + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + mov r0, r5 + mov r1, r4 + mov r2, #0x48 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r0, [r4, #0xb4] + ldrsh r0, [r0, #0x30] + cmp r0, #2 + movge r0, #1 + movlt r0, #2 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end FlashFireShouldActivate + + arm_func_start ActivateFlashFire +ActivateFlashFire: ; 0x02313CE4 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r0, r5 + bl EntityIsValid__023118B4 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0 + ldr r4, [r5, #0xb4] + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrsh r0, [r4, #0x30] + add r1, r0, #1 + cmp r1, #2 + movge r1, #2 + cmp r0, r1 + beq _02313D34 + mov r0, r5 + strh r1, [r4, #0x30] + bl ov29_022E4338 +_02313D34: + mov r0, r5 + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ActivateFlashFire + + arm_func_start ApplyOffensiveStatMultiplier +ApplyOffensiveStatMultiplier: ; 0x02313D40 +#ifdef JAPAN +#define APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET -0x2C0 +#else +#define APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET 0 +#endif + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, r1 + mov sb, r0 + mov r7, r3 + bl AllocateTemp1024ByteBufferFromPool + mov r4, r0 + mov r0, r8 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _02313F3C + ldr r0, [sp, #0x28] + cmp r0, #0 + beq _02313D94 + ldr r1, _02313F48 ; =0x00000DCB + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl ov29_0234B0B4 + b _02313DAC +_02313D94: + ldr r1, _02313F4C ; =0x00000DCA + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl ov29_0234B0B4 +_02313DAC: + cmp r7, #0x100 + bge _02313DCC + ldrb r2, [sp, #0x30] + mov r0, sb + mov r1, r8 + bl IsProtectedFromStatDrops + cmp r0, #0 + bne _02313F3C +_02313DCC: + mov r0, r8 + mov r1, #0x12 + bl ItemIsActive__02311BF8 + cmp r0, #0 + beq _02313E0C + cmp r7, #0x100 + bge _02313E0C + mov r0, #0 + mov r1, r8 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _02313F50 ; =0x00000DB2 + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget + b _02313F3C +_02313E0C: + mov r0, sb + mov r1, r8 + mov r2, #9 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02313E6C + ldr r0, [sp, #0x28] + cmp r0, #0 + bne _02313E6C + cmp r7, #0x100 + bge _02313E6C + ldrb r0, [sp, #0x30] + cmp r0, #0 + beq _02313F3C + mov r0, #0 + mov r1, r8 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _02313F54 ; =0x00000D9E + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget + b _02313F3C +_02313E6C: + mov r0, #0 + mov r1, r8 + mov r2, r0 + ldr r5, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + ldr r6, [sp, #0x28] + cmp r7, #0x100 + add r0, r5, r6, lsl #2 + ldr r4, [r0, #0x34] + add r1, sp, #0x28 + mov r0, r8 + bge _02313EA8 + ldr r1, [r1] + bl ov29_022E5068 + b _02313EB0 +_02313EA8: + ldr r1, [r1] + bl ov29_022E4FC0 +_02313EB0: + add r0, r5, r6, lsl #2 + ldr r0, [r0, #0x34] + mov r1, r7 + bl MultiplyByFixedPoint + add r1, r5, r6, lsl #2 + str r0, [r1, #0x34] + cmp r0, #2 + movlt r0, #2 + strlt r0, [r1, #0x34] + add r2, r5, r6, lsl #2 + ldr r1, [r2, #0x34] + ldr r0, _02313F58 ; =0x000063FD + cmp r1, r0 + strgt r0, [r2, #0x34] + add r0, r5, r6, lsl #2 + ldr r0, [r0, #0x34] + cmp r4, r0 + ble _02313F0C + ldr r2, _02313F5C ; =0x00000DD1 + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget + b _02313F34 +_02313F0C: + bge _02313F24 + mov r0, sb + mov r1, r8 + mov r2, #0xdd0 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET + bl LogMessageByIdWithPopupCheckUserTarget + b _02313F34 +_02313F24: + ldr r2, _02313F60 ; =0x00000DD3 + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget +_02313F34: + mov r0, r8 + bl UpdateStatusIconFlags +_02313F3C: + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_02313F48: .word 0x00000DCB + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET +_02313F4C: .word 0x00000DCA + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET +_02313F50: .word 0x00000DB2 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET +_02313F54: .word 0x00000D9E + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET +_02313F58: .word 0x000063FD +_02313F5C: .word 0x00000DD1 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET +_02313F60: .word 0x00000DD3 + APPLY_OFFENSIVE_STAT_MULTIPLIER_OFFSET + arm_func_end ApplyOffensiveStatMultiplier + + arm_func_start ApplyDefensiveStatMultiplier +ApplyDefensiveStatMultiplier: ; 0x02313F64 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, r1 + mov sb, r0 + mov r7, r3 + bl AllocateTemp1024ByteBufferFromPool + mov r4, r0 + mov r0, r8 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _023140C0 + ldr r0, [sp, #0x28] + cmp r0, #0 + beq _02313FB8 + ldr r1, _023140CC ; =0x00000DC9 + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl ov29_0234B0B4 + b _02313FD0 +_02313FB8: + ldr r1, _023140D0 ; =0x00000DC8 + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl ov29_0234B0B4 +_02313FD0: + cmp r7, #0x100 + bge _02313FF0 + ldrb r2, [sp, #0x30] + mov r0, sb + mov r1, r8 + bl IsProtectedFromStatDrops + cmp r0, #0 + bne _023140C0 +_02313FF0: + mov r0, #0 + mov r1, r8 + mov r2, r0 + ldr r5, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + ldr r6, [sp, #0x28] + cmp r7, #0x100 + add r0, r5, r6, lsl #2 + ldr r4, [r0, #0x3c] + add r1, sp, #0x28 + mov r0, r8 + bge _0231402C + ldr r1, [r1] + bl ov29_022E51B0 + b _02314034 +_0231402C: + ldr r1, [r1] + bl ov29_022E510C +_02314034: + add r0, r5, r6, lsl #2 + ldr r0, [r0, #0x3c] + mov r1, r7 + bl MultiplyByFixedPoint + add r1, r5, r6, lsl #2 + str r0, [r1, #0x3c] + cmp r0, #2 + movlt r0, #2 + strlt r0, [r1, #0x3c] + add r2, r5, r6, lsl #2 + ldr r1, [r2, #0x3c] + ldr r0, _023140D4 ; =0x000063FD + cmp r1, r0 + strgt r0, [r2, #0x3c] + add r0, r5, r6, lsl #2 + ldr r0, [r0, #0x3c] + cmp r4, r0 + ble _02314090 + ldr r2, _023140D8 ; =0x00000DCF + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget + b _023140B8 +_02314090: + bge _023140A8 + ldr r2, _023140DC ; =0x00000DCE + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget + b _023140B8 +_023140A8: + ldr r2, _023140E0 ; =0x00000DD2 + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget +_023140B8: + mov r0, r8 + bl UpdateStatusIconFlags +_023140C0: + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +#ifdef JAPAN +#define APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET -0x2C0 +#else +#define APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET 0 +#endif +_023140CC: .word 0x00000DC9 + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET +_023140D0: .word 0x00000DC8 + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET +_023140D4: .word 0x000063FD +_023140D8: .word 0x00000DCF + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET +_023140DC: .word 0x00000DCE + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET +_023140E0: .word 0x00000DD2 + APPLY_DEFENSIVE_STAT_MULTIPLIER_OFFSET + arm_func_end ApplyDefensiveStatMultiplier + + arm_func_start BoostHitChanceStat +BoostHitChanceStat: ; 0x023140E4 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r6, r1 + mov r7, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r8, r0 + mov r0, r6 + mov r4, #1 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _0231420C + mov r0, #0 + mov r1, r6 + mov r2, r0 + ldr r5, [r6, #0xb4] + bl SubstitutePlaceholderStringTags + add r1, sp, #0x20 + ldr r1, [r1] + mov r0, r6 + bl ov29_022E5258 + ldr r0, [sp, #0x20] + cmp r0, #0 + beq _0231415C + ldr r1, _02314218 ; =0x00000DC7 + mov r0, r8 + bl CopyStringFromId + mov r1, r8 + mov r0, r4 + bl ov29_0234B0B4 + b _02314174 +_0231415C: + ldr r1, _0231421C ; =0x00000DC6 + mov r0, r8 + bl CopyStringFromId + mov r1, r8 + mov r0, r4 + bl ov29_0234B0B4 +_02314174: + mov r0, r6 + mov r1, #0x61 + bl AbilityIsActiveVeneer + ldr r1, [sp, #0x20] + cmp r0, #0 + movne r0, r4, lsl #0x11 + add r2, r5, r1, lsl #1 + movne r4, r0, asr #0x10 + ldrsh r0, [r2, #0x2c] + mov r3, r1, lsl #1 + cmp r0, #0x14 + bge _023141F4 + add r1, r5, #0x2c + ldrsh r0, [r1, r3] + add r0, r0, r4 + strh r0, [r1, r3] + ldrsh r0, [r2, #0x2c] + cmp r0, #0x14 + movgt r0, #0x14 + strgth r0, [r2, #0x2c] + cmp r4, #2 + blt _023141E0 + ldr r2, _02314220 ; =0x00000D95 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + b _02314204 +_023141E0: + ldr r2, _02314224 ; =0x00000D93 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + b _02314204 +_023141F4: + ldr r2, _02314228 ; =0x00000DD5 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02314204: + mov r0, r6 + bl UpdateStatusIconFlags +_0231420C: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +#ifdef JAPAN +#define BOOST_HIT_CHANCE_STAT_OFFSET -0x2C0 +#else +#define BOOST_HIT_CHANCE_STAT_OFFSET 0 +#endif +_02314218: .word 0x00000DC7 + BOOST_HIT_CHANCE_STAT_OFFSET +_0231421C: .word 0x00000DC6 + BOOST_HIT_CHANCE_STAT_OFFSET +_02314220: .word 0x00000D95 + BOOST_HIT_CHANCE_STAT_OFFSET +_02314224: .word 0x00000D93 + BOOST_HIT_CHANCE_STAT_OFFSET +_02314228: .word 0x00000DD5 + BOOST_HIT_CHANCE_STAT_OFFSET + arm_func_end BoostHitChanceStat + + arm_func_start LowerHitChanceStat +LowerHitChanceStat: ; 0x0231422C + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r6, r1 + mov r7, r0 + mov r8, r3 + bl AllocateTemp1024ByteBufferFromPool + mov r5, r0 + mov r0, r6 + mov r4, #1 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _023143C4 + ldr r0, [sp, #0x20] + cmp r0, #0 + beq _02314284 + ldr r1, _023143D0 ; =0x00000DC7 + mov r0, r5 + bl CopyStringFromId + mov r1, r5 + mov r0, r4 + bl ov29_0234B0B4 + b _0231429C +_02314284: + ldr r1, _023143D4 ; =0x00000DC6 + mov r0, r5 + bl CopyStringFromId + mov r1, r5 + mov r0, r4 + bl ov29_0234B0B4 +_0231429C: + mov r0, r7 + mov r1, r6 + mov r2, r8 + bl IsProtectedFromStatDrops + cmp r0, #0 + bne _023143C4 + mov r0, r7 + mov r1, r6 + mov r2, #0x1e +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02314308 + ldr r0, [sp, #0x20] + cmp r0, #0 + bne _02314308 + cmp r8, #0 + beq _023143C4 + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _023143D8 ; =0x00000D9F + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + b _023143C4 +_02314308: + mov r0, r6 + mov r1, #0x61 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, r4, lsl #0x11 + movne r4, r0, asr #0x10 + mov r0, #0 + mov r1, r6 + mov r2, r0 + ldr r5, [r6, #0xb4] + bl SubstitutePlaceholderStringTags + add r1, sp, #0x20 + ldr r1, [r1] + mov r0, r6 + bl ov29_022E52F8 + ldr r1, [sp, #0x20] + add r2, r5, r1, lsl #1 + ldrsh r0, [r2, #0x2c] + mov r3, r1, lsl #1 + cmp r0, #0 + ble _023143AC + add r1, r5, #0x2c + ldrsh r0, [r1, r3] + sub r0, r0, r4 + strh r0, [r1, r3] + ldrsh r0, [r2, #0x2c] + cmp r0, #0 + movlt r0, #0 + strlth r0, [r2, #0x2c] + cmp r4, #2 + blt _02314398 + ldr r2, _023143DC ; =0x00000D94 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + b _023143BC +_02314398: + ldr r2, _023143E0 ; =0x00000D92 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + b _023143BC +_023143AC: + ldr r2, _023143E4 ; =0x00000DD4 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_023143BC: + mov r0, r6 + bl UpdateStatusIconFlags +_023143C4: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +#ifdef JAPAN +#define LOWER_HIT_CHANCE_STAT_OFFSET -0x2C0 +#else +#define LOWER_HIT_CHANCE_STAT_OFFSET 0 +#endif +_023143D0: .word 0x00000DC7 + LOWER_HIT_CHANCE_STAT_OFFSET +_023143D4: .word 0x00000DC6 + LOWER_HIT_CHANCE_STAT_OFFSET +_023143D8: .word 0x00000D9F + LOWER_HIT_CHANCE_STAT_OFFSET +_023143DC: .word 0x00000D94 + LOWER_HIT_CHANCE_STAT_OFFSET +_023143E0: .word 0x00000D92 + LOWER_HIT_CHANCE_STAT_OFFSET +_023143E4: .word 0x00000DD4 + LOWER_HIT_CHANCE_STAT_OFFSET + arm_func_end LowerHitChanceStat + + arm_func_start TryInflictCringeStatus +TryInflictCringeStatus: ; 0x023143E8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r5, r2 + mov r4, r3 + bl AllocateTemp1024ByteBufferFromPool + mov r0, r6 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, #0x1f +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _02314498 + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + cmp r5, #0 + beq _02314490 + ldr r2, _02314534 ; =0x00000DA2 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02314490: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02314498: + cmp r4, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, #0 + ldr r4, [r6, #0xb4] + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r0, [r4, #0xd0] + cmp r0, #1 + beq _02314514 + ldr r1, _02314538 ; =ov10_022C4884 + mov r2, #1 + mov r0, r6 + strb r2, [r4, #0xd0] + bl CalcStatusDuration + add r1, r0, #1 + mov r0, r6 + strb r1, [r4, #0xd1] + bl ov29_022E539C + ldr r2, _0231453C ; =0x00000D02 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r7 + mov r1, r6 + bl TryActivateSteadfast + mov r0, r7 + mov r1, r6 + bl TryActivateQuickFeet + b _02314524 +_02314514: + ldr r2, _02314540 ; =0x00000D03 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02314524: + mov r0, r6 + bl UpdateStatusIconFlags + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +#ifdef JAPAN +#define TRY_INFLICT_CRINGE_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_CRINGE_STATUS_OFFSET 0 +#endif +_02314534: .word 0x00000DA2 + TRY_INFLICT_CRINGE_STATUS_OFFSET +_02314538: .word ov10_022C4884 +_0231453C: .word 0x00000D02 + TRY_INFLICT_CRINGE_STATUS_OFFSET +_02314540: .word 0x00000D03 + TRY_INFLICT_CRINGE_STATUS_OFFSET + arm_func_end TryInflictCringeStatus + + arm_func_start TryInflictParalysisStatus +TryInflictParalysisStatus: ; 0x02314544 +#ifdef JAPAN +#define TRY_INFLICT_PARALYSIS_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_PARALYSIS_STATUS_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + mov sb, r1 + mov sl, r0 + mov r0, sb + mov r8, r2 + mov r4, r3 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + beq _023147D0 + mov r0, sl + mov r1, sb + mov r2, r8 + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + bne _023147D0 + mov r0, sl + mov r1, sb + mov r2, r8 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, #0 + bne _023147D0 + mov r0, sl + mov r1, sb + mov r2, #0x16 +#ifndef JAPAN + mov r3, #1 +#endif + bl DefenderAbilityIsActive__02311B94 + cmp r0, #0 + beq _023145F4 + mov r0, #0 + mov r1, sb + mov r2, r0 + bl SubstitutePlaceholderStringTags + cmp r8, #0 + beq _023145EC + mov r0, sl + mov r1, sb + mov r2, #0xda0 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET + bl LogMessageByIdWithPopupCheckUserTarget +_023145EC: + mov r0, #0 + b _023147D0 +_023145F4: + mov r0, sb + mov r1, #1 + bl ExclusiveItemEffectIsActive__023147EC + cmp r0, #0 + beq _02314654 + cmp r8, #0 + beq _0231464C + mov r0, #0 + mov r1, sb + mov r2, r0 + bl SubstitutePlaceholderStringTags + add r2, sp, #4 + mov r0, sb + mov r1, #1 + bl GetExclusiveItemWithEffectFromBag + add r1, sp, #4 + mov r0, #1 + bl ov29_02344B44 + ldr r2, _023147D8 ; =0x00000DA1 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_0231464C: + mov r0, #0 + b _023147D0 +_02314654: + cmp r4, #0 + movne r0, #1 + bne _023147D0 + mov r0, #0 + ldr r7, [sb, #0xb4] + mov r1, sb + mov r2, r0 + mov r4, #1 + bl SubstitutePlaceholderStringTags + ldrb r0, [r7, #0xbf] + cmp r0, #4 + beq _023146E0 + ldr r1, _023147DC ; =ov10_022C4894 + mov r3, #4 + mov r0, sb + mov r2, r4 + strb r3, [r7, #0xbf] + bl CalcStatusDuration + add r0, r0, #1 + strb r0, [r7, #0xc0] + mov r4, #0 + strb r4, [r7, #0xc1] + mov r0, sl + mov r1, sb + mov r2, #0xd00 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET + strb r4, [r7, #0xc2] + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, sb + bl ov29_022E4240 + mov r0, sb + bl CalcSpeedStageWrapper + mov r0, sl + mov r1, sb + bl TryActivateQuickFeet + b _023146F0 +_023146E0: + ldr r2, _023147E0 ; =0x00000D01 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_023146F0: + mov r0, sb + mov r1, #0x19 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _023147C4 + cmp r4, #0 + bne _023147C4 + mov r5, #0 + ldr fp, _023147E4 ; =DIRECTIONS_XY + mov r4, r5 +_02314718: + mov r1, r4, lsl #2 + add r0, fp, r4, lsl #2 + ldrsh r6, [sb, #4] + ldrsh r3, [fp, r1] + ldrsh r1, [r0, #2] + ldrsh r2, [sb, #6] + add r0, r6, r3 + add r1, r2, r1 + bl GetTile + ldr r6, [r0, #0xc] + mov r0, r6 + bl EntityIsValid__023118B4 + cmp r0, #0 + beq _023147B8 + ldr r0, [r6] + cmp r0, #1 + bne _023147B8 + cmp r5, #0 + bne _02314790 + mov r5, #1 + bl ov29_0234B034 + mov r1, #0 + mov r2, r7 + mov r3, r1 + str r1, [sp] + bl ov29_0230040C + ldr r2, _023147E8 ; =0x00000DC5 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_02314790: + mov r0, sb + mov r1, r6 + bl ov29_023018AC + cmp r0, #1 + bne _023147B8 + mov r0, sl + mov r1, r6 + mov r2, r8 + mov r3, #0 + bl TryInflictParalysisStatus +_023147B8: + add r4, r4, #1 + cmp r4, #8 + blt _02314718 +_023147C4: + mov r0, sb + bl UpdateStatusIconFlags + mov r0, #1 +_023147D0: + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_023147D8: .word 0x00000DA1 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET +_023147DC: .word ov10_022C4894 +_023147E0: .word 0x00000D01 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET +_023147E4: .word DIRECTIONS_XY +_023147E8: .word 0x00000DC5 + TRY_INFLICT_PARALYSIS_STATUS_OFFSET + arm_func_end TryInflictParalysisStatus + + arm_func_start ExclusiveItemEffectIsActive__023147EC +ExclusiveItemEffectIsActive__023147EC: ; 0x023147EC + stmdb sp!, {r3, lr} + ldr r2, [r0, #0xb4] + ldrb r0, [r2, #6] + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, pc} +#ifdef JAPAN + add r0, r2, #0x224 +#else + add r0, r2, #0x228 +#endif + bl ExclusiveItemEffectFlagTest + ldmia sp!, {r3, pc} + arm_func_end ExclusiveItemEffectIsActive__023147EC + + arm_func_start BoostSpeed +BoostSpeed: ; 0x02314810 +#ifdef JAPAN +#define BOOST_SPEED_OFFSET -4 +#else +#define BOOST_SPEED_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, r1 + mov sb, r0 + mov r0, r8 + mov r7, r2 + mov r6, r3 + bl EntityIsValid__023118B4 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + cmp r6, #0 + bne _02314850 + ldr r1, _0231492C ; =SPEED_BOOST_TURN_RANGE + mov r0, r8 + mov r2, #0 + bl CalcStatusDuration + add r6, r0, #1 +_02314850: + mov r0, #0 + mov r1, r8 + mov r2, r0 + ldr r5, [r8, #0xb4] + bl SubstitutePlaceholderStringTags + mov r0, r8 + mov r1, r7 + bl CalcSpeedStage + mov r4, r0 + cmp r4, #4 + bne _0231489C + ldrb r0, [sp, #0x20] + cmp r0, #0 + beq _02314920 + ldr r2, _02314930 ; =0x00000DDB + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget + b _02314920 +_0231489C: + mov r2, #0 + b _023148BC +_023148A4: + add r1, r5, r2 + ldrb r0, [r1, #0x114 + BOOST_SPEED_OFFSET] + cmp r0, #0 + streqb r6, [r1, #0x114 + BOOST_SPEED_OFFSET] + beq _023148C4 + add r2, r2, #1 +_023148BC: + cmp r2, #5 + blt _023148A4 +_023148C4: + mov r0, r8 + mov r1, r7 + bl CalcSpeedStage + mov r6, r0 + cmp r4, r6 + bne _023148F0 + ldr r2, _02314934 ; =0x00000DDA + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget + b _02314920 +_023148F0: + mov r0, r8 + bl ov29_022E44CC + ldr r0, _02314938 ; =ov29_02353318 + mov r1, r6, lsl #1 + ldrh r2, [r0, r1] + mov r0, sb + mov r1, r8 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, #1 + strb r0, [r5, #0x101] + mov r0, #0 + strb r0, [r5, #0x152 + BOOST_SPEED_OFFSET] +_02314920: + mov r0, r8 + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0231492C: .word SPEED_BOOST_TURN_RANGE +#ifdef JAPAN +_02314930: .word 0x00000B1B +_02314934: .word 0x00000B1A +#else +_02314930: .word 0x00000DDB +_02314934: .word 0x00000DDA +#endif +_02314938: .word ov29_02353318 + arm_func_end BoostSpeed + + arm_func_start BoostSpeedOneStage +BoostSpeedOneStage: ; 0x0231493C + stmdb sp!, {r3, lr} + str r3, [sp] + mov r3, r2 + mov r2, #1 + bl BoostSpeed + ldmia sp!, {r3, pc} + arm_func_end BoostSpeedOneStage + + arm_func_start LowerSpeed +LowerSpeed: ; 0x02314954 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sb, r1 + mov sl, r0 + mov r0, sb + mov r8, r2 + mov r7, r3 + bl EntityIsValid__023118B4 + cmp r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + mov r2, r7 + bl SafeguardIsActive + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + mov r2, r7 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, #0 + mov r1, sb + mov r2, r0 + ldr r4, [sb, #0xb4] + bl SubstitutePlaceholderStringTags + mov r0, sb + bl CalcSpeedStageWrapper + movs fp, r0 + bne _023149E8 + cmp r7, #0 + beq _02314AA0 + ldr r2, _02314AAC ; =0x00000DDC + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + b _02314AA0 +_023149E8: + mov r5, #0 + b _02314A34 +_023149F0: + mov r1, #0 + b _02314A28 +_023149F8: + add r6, r4, r1 +#ifdef JAPAN + ldrb r0, [r6, #0x115] +#else + ldrb r0, [r6, #0x119] +#endif + cmp r0, #0 + bne _02314A24 + ldr r1, _02314AB0 ; =ov10_022C488C + mov r0, sb + mov r2, #1 + bl CalcStatusDuration + add r0, r0, #1 +#ifdef JAPAN + strb r0, [r6, #0x115] +#else + strb r0, [r6, #0x119] +#endif + b _02314A30 +_02314A24: + add r1, r1, #1 +_02314A28: + cmp r1, #5 + blt _023149F8 +_02314A30: + add r5, r5, #1 +_02314A34: + cmp r5, r8 + blt _023149F0 + mov r0, sb + bl CalcSpeedStageWrapper + mov r4, r0 + cmp fp, r4 + bne _02314A6C + cmp r7, #0 + beq _02314AA0 + ldr r2, _02314AB4 ; =0x00000DDA + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + b _02314AA0 +_02314A6C: + mov r0, sb + bl ov29_022E451C + ldr r0, _02314AB8 ; =ov29_02353318 + mov r1, r4, lsl #1 + ldrh r2, [r0, r1] + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + cmp r4, #0 + bne _02314AA0 + mov r0, sl + mov r1, sb + bl TryActivateQuickFeet +_02314AA0: + mov r0, sb + bl UpdateStatusIconFlags + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +_02314AAC: .word 0x00000B1C +_02314AB0: .word ov10_022C488C +_02314AB4: .word 0x00000B1A +#else +_02314AAC: .word 0x00000DDC +_02314AB0: .word ov10_022C488C +_02314AB4: .word 0x00000DDA +#endif +_02314AB8: .word ov29_02353318 + arm_func_end LowerSpeed + + arm_func_start TrySealMove +TrySealMove: ; 0x02314ABC + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x14 + mov r5, #0 + movs r7, r1 + mov r8, r0 + mov r6, r2 + moveq r0, r5 + beq _02314C18 + mov r2, #1 + bl SafeguardIsActive + cmp r0, #0 + movne r0, r5 + bne _02314C18 + mov r0, r8 + mov r1, r7 + mov r2, #1 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + movne r0, r5 + bne _02314C18 + ldr r0, [r7, #0xb4] + mov r4, r5 +#ifdef JAPAN + add ip, r0, #0x120 +#else + add ip, r0, #0x124 +#endif + mov lr, r4 + mov r2, r5 + mov r3, #1 + add r0, sp, #4 +_02314B28: + ldrb r1, [ip, lr, lsl #3] + add sb, ip, lr, lsl #3 + tst r1, #1 + movne r1, r3 + moveq r1, r2 + tst r1, #0xff + beq _02314B54 + ldrh r1, [sb, #2] + tst r1, #1 + streq sb, [r0, r4, lsl #2] + addeq r4, r4, #1 +_02314B54: + add lr, lr, #1 + cmp lr, #4 + blt _02314B28 + cmp r6, #0 + beq _02314B74 + cmp r4, #0 + moveq r0, #0 + beq _02314C18 +_02314B74: + cmp r4, #0 + beq _02314BE8 + ldr r3, _02314C20 ; =0x00000DBE + mov r5, #8 + mov r0, r8 + mov r1, r7 + mov r2, #1 + str r5, [sp] + bl ExclusiveItemEffectIsActiveWithLogging + cmp r0, #0 + movne r0, #0 + bne _02314C18 + cmp r6, #0 + movne r0, #1 + bne _02314C18 + mov r0, r4 + bl DungeonRandInt + add r1, sp, #4 + ldr r2, [r1, r0, lsl #2] + mov r0, #0 + ldrh r1, [r2, #2] + orr r1, r1, #1 + strh r1, [r2, #2] + ldrh r1, [r2, #4] + bl ov29_0234B084 + mov r0, r8 + mov r1, r7 + mov r5, #1 + bl TryActivateQuickFeet +_02314BE8: + cmp r5, #0 + beq _02314C04 + ldr r2, _02314C24 ; =0x00000DE3 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02314C14 +_02314C04: + ldr r2, _02314C28 ; =0x00000DE4 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02314C14: + mov r0, #1 +_02314C18: + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +#ifdef JAPAN +_02314C20: .word 0x00000AFE +_02314C24: .word 0x00000B23 +_02314C28: .word 0x00000B24 +#else +_02314C20: .word 0x00000DBE +_02314C24: .word 0x00000DE3 +_02314C28: .word 0x00000DE4 +#endif + arm_func_end TrySealMove + + arm_func_start BoostOrLowerSpeed +BoostOrLowerSpeed: ; 0x02314C2C + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl EntityIsValid__023118B4 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, #0x32 + bl DungeonRandOutcome__022EAB20 + cmp r0, #0 + mov r2, #1 + mov r0, r5 + beq _02314C74 + mov r1, r4 + mov r3, r2 + bl LowerSpeed + b _02314C84 +_02314C74: + mov r1, r4 + mov r3, #0 + str r2, [sp] + bl BoostSpeed +_02314C84: + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end BoostOrLowerSpeed + + arm_func_start ResetHitChanceStat +ResetHitChanceStat: ; 0x02314C8C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r5, r1 + mov r6, r0 + mov r0, r5 + mov r8, r2 + mov r4, r3 + mov r7, #0 + bl EntityIsValid__023118B4 + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [r5, #0xb4] + add r1, r0, r8, lsl #1 + ldrsh r0, [r1, #0x2c] + cmp r0, #0xa + movne r0, #0xa + movne r7, #1 + strneh r0, [r1, #0x2c] + cmp r7, #0 + beq _02314CE4 + mov r0, r5 + bl ov29_022E543C + b _02314CF4 +_02314CE4: + cmp r4, #0 + beq _02314CF4 + mov r0, r5 + bl ov29_022E543C +_02314CF4: + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags + cmp r7, #0 + beq _02314D20 + mov r0, r6 + mov r1, r5 +#ifdef JAPAN + mov r2, #0xaa0 +#else + mov r2, #0xd60 +#endif + bl LogMessageByIdWithPopupCheckUserTarget + b _02314D30 +_02314D20: + ldr r2, _02314D3C ; =0x00000D61 + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget +_02314D30: + mov r0, r5 + bl UpdateStatusIconFlags + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +_02314D3C: .word 0x00000AA1 +#else +_02314D3C: .word 0x00000D61 +#endif + arm_func_end ResetHitChanceStat + + arm_func_start ExclusiveItemEffectIsActiveWithLogging +ExclusiveItemEffectIsActiveWithLogging: ; 0x02314D40 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #8 + mov r6, r1 + ldrb r1, [sp, #0x20] + mov r7, r0 + mov r0, r6 + mov r5, r2 + mov r4, r3 + bl ExclusiveItemEffectIsActive__023147EC + cmp r0, #0 + beq _02314DB8 + cmp r5, #0 + beq _02314DB0 + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldrb r1, [sp, #0x20] + add r2, sp, #0 + mov r0, r6 + bl GetExclusiveItemWithEffectFromBag + add r1, sp, #0 + mov r0, #1 + bl ov29_02344B44 + mov r0, r7 + mov r1, r6 + mov r2, r4 + bl LogMessageByIdWithPopupCheckUserTarget +_02314DB0: + mov r0, #1 + b _02314DBC +_02314DB8: + mov r0, #0 +_02314DBC: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ExclusiveItemEffectIsActiveWithLogging + + arm_func_start ov29_02314DC4 +ov29_02314DC4: ; 0x02314DC4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #8 + mov r7, r0 + mov r0, #0 + mov r5, r2 + mov r2, r0 + mov r6, r1 + mov r4, r3 + bl SubstitutePlaceholderStringTags + add r2, sp, #0 + mov r0, r6 + mov r1, r4 + bl GetExclusiveItemWithEffectFromBag + add r1, sp, #0 + mov r0, #1 + bl ov29_02344B44 + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl LogMessageByIdWithPopupCheckUserTarget + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end ov29_02314DC4 + + arm_func_start TryActivateQuickFeet +TryActivateQuickFeet: ; 0x02314E1C + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + mov r1, #0x6d + bl AbilityIsActiveVeneer + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r3, #0 + mov r0, r5 + mov r1, r4 + mov r2, #1 + str r3, [sp] + bl BoostSpeed + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end TryActivateQuickFeet + + arm_func_start TryInflictTerrifiedStatus +TryInflictTerrifiedStatus: ; 0x02314E60 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _02314EB0 ; =ov10_022C4618 + mov r4, r1 + ldr ip, [r4, #0xb4] + mov r3, #1 + mov r5, r0 + ldrsh r1, [r2] +#ifdef JAPAN + strb r3, [ip, #0x103] + mov r0, r4 + strb r1, [ip, #0x104] +#else + strb r3, [ip, #0x104] + mov r0, r4 + strb r1, [ip, #0x105] +#endif + bl ov29_022E60E4 + mov r0, #0 + mov r1, r4 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _02314EB4 ; =0x00000DE5 + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02314EB0: .word ov10_022C4618 +#ifdef JAPAN +_02314EB4: .word 0x00000B25 +#else +_02314EB4: .word 0x00000DE5 +#endif + arm_func_end TryInflictTerrifiedStatus + + arm_func_start TryInflictGrudgeStatus +TryInflictGrudgeStatus: ; 0x02314EB8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r1 + ldr r5, [r7, #0xb4] + mov r8, r0 + mov r4, #0 + mov r6, r2 + mov r2, r4 + mov r0, #1 + bl SubstitutePlaceholderStringTags + ldrb r0, [r5, #0xfd] + cmp r0, #0 + beq _02314F04 + cmp r6, #0 + beq _02314F2C + ldr r2, _02314F34 ; =0x00000ED1 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02314F2C +_02314F04: + mov r4, #1 + mov r0, r7 + strb r4, [r5, #0xfd] + bl UpdateStatusIconFlags + cmp r6, #0 + beq _02314F2C +#ifdef JAPAN + ldr r2, _0231640C ; =0x00000C12 + mov r0, r8 + mov r1, r7 +#else + mov r0, r8 + mov r1, r7 + mov r2, #0xed0 +#endif + bl LogMessageByIdWithPopupCheckUserTarget +_02314F2C: + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +_02314F34: .word 0x00000C13 +_0231640C: .word 0x00000C12 +#else +_02314F34: .word 0x00000ED1 +#endif + arm_func_end TryInflictGrudgeStatus + + arm_func_start TryInflictConfusedStatus +TryInflictConfusedStatus: ; 0x02314F38 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r5, r2 + mov r4, r3 + bl EntityIsValid__02315118 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl SafeguardIsActive + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl IsProtectedFromNegativeStatus + cmp r0, #0 + mov r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r0, r6 + mov r1, #0x19 + bl ItemIsActive__0231513C + cmp r0, #0 + beq _02314FD8 + cmp r5, #0 + beq _02314FD0 + ldr r2, _02315100 ; =0x00000DAF + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02314FD0: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_02314FD8: + mov ip, #2 + ldr r3, _02315104 ; =0x00000DBA + mov r0, r7 + mov r1, r6 + mov r2, r5 + str ip, [sp] + bl ExclusiveItemEffectIsActiveWithLogging + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + cmp r7, r6 + beq _02315048 + cmp r7, #0 + moveq r0, #0 + beq _02315028 + ldr r0, [r7] + cmp r0, #1 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff +_02315028: + cmp r0, #0 + beq _02315048 + mov r0, r7 + mov r1, #0x53 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, #0 + bne _02315054 +_02315048: + mov r0, r6 + mov r1, #0x40 + bl AbilityIsActiveVeneer +_02315054: + cmp r0, #0 + beq _0231507C + cmp r5, #0 + beq _02315074 + ldr r2, _02315108 ; =0x00000DA7 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_02315074: + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_0231507C: + cmp r4, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r6 + bl ov29_022E41CC + ldr r4, [r6, #0xb4] + ldrb r0, [r4, #0xd0] + cmp r0, #2 + beq _023150E0 + ldr r1, _0231510C ; =ov10_022C4890 + mov r3, #2 + mov r0, r6 + mov r2, #1 + strb r3, [r4, #0xd0] + bl CalcStatusDuration + add r3, r0, #1 + ldr r2, _02315110 ; =0x00000CFE + mov r0, r7 + mov r1, r6 + strb r3, [r4, #0xd1] + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r7 + mov r1, r6 + bl TryActivateQuickFeet + b _023150F0 +_023150E0: + ldr r2, _02315114 ; =0x00000CFF + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +_023150F0: + mov r0, r6 + bl UpdateStatusIconFlags + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +#ifdef JAPAN +#define TRY_INFLICT_CONFUSED_STATUS_OFFSET -0x2C0 +#else +#define TRY_INFLICT_CONFUSED_STATUS_OFFSET 0 +#endif +_02315100: .word 0x00000DAF + TRY_INFLICT_CONFUSED_STATUS_OFFSET +_02315104: .word 0x00000DBA + TRY_INFLICT_CONFUSED_STATUS_OFFSET +_02315108: .word 0x00000DA7 + TRY_INFLICT_CONFUSED_STATUS_OFFSET +_0231510C: .word ov10_022C4890 +_02315110: .word 0x00000CFE + TRY_INFLICT_CONFUSED_STATUS_OFFSET +_02315114: .word 0x00000CFF + TRY_INFLICT_CONFUSED_STATUS_OFFSET + arm_func_end TryInflictConfusedStatus diff --git a/asm/overlay_29_0231513C.s b/asm/overlay_29_0231516C.s similarity index 99% rename from asm/overlay_29_0231513C.s rename to asm/overlay_29_0231516C.s index 8d798641..dbb791a5 100644 --- a/asm/overlay_29_0231513C.s +++ b/asm/overlay_29_0231516C.s @@ -1,24 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_0231513C.inc" + .include "overlay_29_0231516C.inc" .text - arm_func_start ItemIsActive__0231513C -ItemIsActive__0231513C: ; 0x0231513C - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__0231513C - arm_func_start TryInflictCoweringStatus TryInflictCoweringStatus: ; 0x0231516C stmdb sp!, {r3, r4, r5, r6, r7, lr} diff --git a/asm/overlay_29_023456BC.s b/asm/overlay_29_023456BC.s index 85c94503..78df5c43 100644 --- a/asm/overlay_29_023456BC.s +++ b/asm/overlay_29_023456BC.s @@ -3061,36 +3061,3 @@ _02347B48: .word 0x00000BE1 _02347B4C: .word 0x00000BE5 #endif arm_func_end ov29_02347518 - - arm_func_start ItemIsActive__02347B50 -ItemIsActive__02347B50: ; 0x02347B50 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r1, #0x6f - mov r5, r0 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - bl HasHeldItem - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ItemIsActive__02347B50 - - arm_func_start ExclusiveItemEffectIsActive__02347B80 -ExclusiveItemEffectIsActive__02347B80: ; 0x02347B80 - stmdb sp!, {r3, lr} - ldr r2, [r0, #0xb4] - ldrb r0, [r2, #6] - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, pc} -#ifdef JAPAN - add r0, r2, #0x224 -#else - add r0, r2, #0x228 -#endif - bl ExclusiveItemEffectFlagTest - ldmia sp!, {r3, pc} - arm_func_end ExclusiveItemEffectIsActive__02347B80 diff --git a/asm/overlay_29_02347B80.s b/asm/overlay_29_02347B80.s new file mode 100644 index 00000000..4a11c5b8 --- /dev/null +++ b/asm/overlay_29_02347B80.s @@ -0,0 +1,21 @@ + .include "asm/macros.inc" + .include "overlay_29_02347B80.inc" + + .text + + arm_func_start ExclusiveItemEffectIsActive__02347B80 +ExclusiveItemEffectIsActive__02347B80: ; 0x02347B80 + stmdb sp!, {r3, lr} + ldr r2, [r0, #0xb4] + ldrb r0, [r2, #6] + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, pc} +#ifdef JAPAN + add r0, r2, #0x224 +#else + add r0, r2, #0x228 +#endif + bl ExclusiveItemEffectFlagTest + ldmia sp!, {r3, pc} + arm_func_end ExclusiveItemEffectIsActive__02347B80 diff --git a/include/dg_camera.h b/include/dg_camera.h index 4e45f85a..992588c1 100644 --- a/include/dg_camera.h +++ b/include/dg_camera.h @@ -5,5 +5,7 @@ // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). bool8 EntityIsValid__022E32E8(struct entity *entity); +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__022E330C(struct entity *entity, enum item_id item_id); #endif //PMDSKY_OVERLAY_29_022E32E8_H diff --git a/include/overlay_29_022EE348.h b/include/overlay_29_022EE348.h index 969507be..750a3a70 100644 --- a/include/overlay_29_022EE348.h +++ b/include/overlay_29_022EE348.h @@ -3,6 +3,8 @@ #include "dungeon_mode.h" +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__022EE318(struct entity *entity, enum item_id item_id); // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). bool8 EntityIsValid__022EE348(struct entity *entity); diff --git a/include/overlay_29_022F5994.h b/include/overlay_29_022F5994.h new file mode 100644 index 00000000..574ae877 --- /dev/null +++ b/include/overlay_29_022F5994.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_022F5994_H +#define PMDSKY_OVERLAY_29_022F5994_H + +#include "dungeon_mode.h" + +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__022F5994(struct entity *entity, enum item_id item_id); + +#endif //PMDSKY_OVERLAY_29_022F5994_H diff --git a/include/overlay_29_022FF898.h b/include/overlay_29_022FF898.h new file mode 100644 index 00000000..f37984e9 --- /dev/null +++ b/include/overlay_29_022FF898.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_022FF898_H +#define PMDSKY_OVERLAY_29_022FF898_H + +#include "dungeon_mode.h" + +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__022FF898(struct entity *entity, enum item_id item_id); + +#endif //PMDSKY_OVERLAY_29_022FF898_H diff --git a/include/overlay_29_023026CC.h b/include/overlay_29_023026CC.h new file mode 100644 index 00000000..a7031201 --- /dev/null +++ b/include/overlay_29_023026CC.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_023026CC_H +#define PMDSKY_OVERLAY_29_023026CC_H + +#include "dungeon_mode.h" + +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__023026CC(struct entity *entity, enum item_id item_id); + +#endif //PMDSKY_OVERLAY_29_023026CC_H diff --git a/include/overlay_29_02307EF8.h b/include/overlay_29_02307EF8.h index e70a63fa..ed8ad50a 100644 --- a/include/overlay_29_02307EF8.h +++ b/include/overlay_29_02307EF8.h @@ -5,5 +5,7 @@ // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). bool8 EntityIsValid__02307EF8(struct entity *entity); +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__02307F1C(struct entity *entity, enum item_id item_id); #endif //PMDSKY_OVERLAY_29_02307EF8_H diff --git a/include/overlay_29_0230A9DC.h b/include/overlay_29_0230A9DC.h new file mode 100644 index 00000000..97caea87 --- /dev/null +++ b/include/overlay_29_0230A9DC.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_0230A9DC_H +#define PMDSKY_OVERLAY_29_0230A9DC_H + +#include "dungeon_mode.h" + +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__0230A9DC(struct entity *entity, enum item_id item_id); + +#endif //PMDSKY_OVERLAY_29_0230A9DC_H diff --git a/include/overlay_29_0230E578.h b/include/overlay_29_0230E578.h new file mode 100644 index 00000000..6e9b7804 --- /dev/null +++ b/include/overlay_29_0230E578.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_0230E578_H +#define PMDSKY_OVERLAY_29_0230E578_H + +#include "dungeon_mode.h" + +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__0230E578(struct entity *entity, enum item_id item_id); + +#endif //PMDSKY_OVERLAY_29_0230E578_H diff --git a/include/overlay_29_0230F810.h b/include/overlay_29_0230F810.h new file mode 100644 index 00000000..956f9346 --- /dev/null +++ b/include/overlay_29_0230F810.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_0230F810_H +#define PMDSKY_OVERLAY_29_0230F810_H + +#include "dungeon_mode.h" + +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__0230F810(struct entity *entity, enum item_id item_id); + +#endif //PMDSKY_OVERLAY_29_0230F810_H diff --git a/include/overlay_29_02311010.h b/include/overlay_29_02311010.h index cabb9df3..11cd9790 100644 --- a/include/overlay_29_02311010.h +++ b/include/overlay_29_02311010.h @@ -5,5 +5,7 @@ // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). bool8 EntityIsValid__02311010(struct entity *entity); +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__02311034(struct entity *entity, enum item_id item_id); #endif //PMDSKY_OVERLAY_29_02311010_H diff --git a/include/overlay_29_02311BF8.h b/include/overlay_29_02311BF8.h new file mode 100644 index 00000000..82978e93 --- /dev/null +++ b/include/overlay_29_02311BF8.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_02311BF8_H +#define PMDSKY_OVERLAY_29_02311BF8_H + +#include "dungeon_mode.h" + +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__02311BF8(struct entity *entity, enum item_id item_id); + +#endif //PMDSKY_OVERLAY_29_02311BF8_H diff --git a/include/overlay_29_02315118.h b/include/overlay_29_02315118.h index 3eab387a..76ae5c43 100644 --- a/include/overlay_29_02315118.h +++ b/include/overlay_29_02315118.h @@ -5,5 +5,7 @@ // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). bool8 EntityIsValid__02315118(struct entity *entity); +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__0231513C(struct entity *entity, enum item_id item_id); #endif //PMDSKY_OVERLAY_29_02315118_H diff --git a/include/overlay_29_02347B50.h b/include/overlay_29_02347B50.h new file mode 100644 index 00000000..73fa4757 --- /dev/null +++ b/include/overlay_29_02347B50.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_02347B50_H +#define PMDSKY_OVERLAY_29_02347B50_H + +#include "dungeon_mode.h" + +// Checks if a monster is holding a certain item that isn't disabled by Klutz. +bool8 ItemIsActive__02347B50(struct entity *entity, enum item_id item_id); + +#endif //PMDSKY_OVERLAY_29_02347B50_H diff --git a/main.lsf b/main.lsf index 4b057087..fa28ca99 100644 --- a/main.lsf +++ b/main.lsf @@ -238,7 +238,7 @@ Overlay OVY_29 Object src/dg_object.o Object asm/overlay_29_022E1AD4.o Object src/dg_camera.o - Object asm/overlay_29_022E330C.o + Object asm/overlay_29_022E333C.o Object src/dg_effect.o Object asm/overlay_29_022E37DC.o Object src/dg_uty.o @@ -261,6 +261,8 @@ Overlay OVY_29 Object asm/overlay_29_022F05B4.o Object src/overlay_29_022F528C.o Object asm/overlay_29_022F52B0.o + Object src/overlay_29_022F5994.o + Object asm/overlay_29_022F59C4.o Object src/overlay_29_022F62A8.o Object asm/overlay_29_022F62CC.o Object src/overlay_29_022F7364.o @@ -275,6 +277,8 @@ Overlay OVY_29 Object asm/overlay_29_022FE4BC.o Object src/overlay_29_022FED98.o Object asm/overlay_29_022FEDBC.o + Object src/overlay_29_022FF898.o + Object asm/overlay_29_022FF8C8.o Object src/overlay_29_023000E4.o Object asm/overlay_29_02300108.o Object src/dungeon_capabilities.o @@ -294,6 +298,8 @@ Overlay OVY_29 Object asm/overlay_29_02301D78.o Object src/dungeon_pokemon_attributes_1.o Object asm/overlay_29_02301F50.o + Object src/overlay_29_023026CC.o + Object asm/overlay_29_023026FC.o Object src/overlay_29_02302A38.o Object asm/overlay_29_02302A5C.o Object src/overlay_29_023047B8.o @@ -303,7 +309,7 @@ Overlay OVY_29 Object src/overlay_29_02305C04.o Object asm/overlay_29_02305C28.o Object src/overlay_29_02307EF8.o - Object asm/overlay_29_02307F1C.o + Object asm/overlay_29_02307F4C.o Object src/overlay_29_0230827C.o Object asm/overlay_29_023082A0.o Object src/dungeon_ai.o @@ -312,19 +318,27 @@ Overlay OVY_29 Object asm/overlay_29_02308FE0.o Object src/overlay_29_0230A994.o Object asm/overlay_29_0230A9B8.o + Object src/overlay_29_0230A9DC.o + Object asm/overlay_29_0230AA0C.o + Object src/overlay_29_0230E578.o + Object asm/overlay_29_0230E5A8.o Object src/dungeon_ai_items.o Object src/dungeon_ai_items_1.o Object asm/overlay_29_data_02353700.o Object asm/overlay_29_bss_0237CA18.o Object asm/overlay_29_0230F02C.o + Object src/overlay_29_0230F810.o + Object asm/overlay_29_0230F840.o Object src/overlay_29_0230F980.o Object asm/overlay_29_0230F9A4.o Object src/overlay_29_02311010.o - Object asm/overlay_29_02311034.o + Object asm/overlay_29_02311064.o Object src/overlay_29_023118B4.o Object asm/overlay_29_023118D8.o + Object src/overlay_29_02311BF8.o + Object asm/overlay_29_02311C28.o Object src/overlay_29_02315118.o - Object asm/overlay_29_0231513C.o + Object asm/overlay_29_0231516C.o Object src/dungeon_statuses.o Object asm/overlay_29_02317844.o Object src/overlay_29_02318AB0.o @@ -388,6 +402,8 @@ Overlay OVY_29 Object asm/overlay_29_02344B1C.o Object src/overlay_29_02345698.o Object asm/overlay_29_023456BC.o + Object src/overlay_29_02347B50.o + Object asm/overlay_29_02347B80.o Object src/overlay_29_02347BA4.o Object asm/overlay_29_02347BC8.o Object src/overlay_29_0234987C.o diff --git a/src/dg_camera.c b/src/dg_camera.c index b39d72a2..a509bf2c 100644 --- a/src/dg_camera.c +++ b/src/dg_camera.c @@ -2,6 +2,9 @@ // file starts at 0x022e26b68 +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + bool8 EntityIsValid__022E32E8(struct entity *entity) { if (entity == NULL) @@ -10,3 +13,11 @@ bool8 EntityIsValid__022E32E8(struct entity *entity) } return entity->type != ENTITY_NOTHING; } + +bool8 ItemIsActive__022E330C(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/dungeon_pokemon_attributes_1.c b/src/dungeon_pokemon_attributes_1.c index 073e1601..18668d4a 100644 --- a/src/dungeon_pokemon_attributes_1.c +++ b/src/dungeon_pokemon_attributes_1.c @@ -1,7 +1,6 @@ #include "dungeon_pokemon_attributes_1.h" #include "dungeon_util_static.h" - -extern bool8 ItemIsActive__022FF898(struct entity *entity, enum item_id item_id); +#include "overlay_29_022FF898.h" bool8 CanSeeInvisibleMonsters(struct entity *entity) { diff --git a/src/dungeon_statuses.c b/src/dungeon_statuses.c index 5f2a8815..1ed7337d 100644 --- a/src/dungeon_statuses.c +++ b/src/dungeon_statuses.c @@ -3,8 +3,6 @@ #include "item.h" #include "overlay_29_02315118.h" -extern bool8 ItemIsActive__0231513C(struct entity *entity, enum item_id item_id); - bool8 IsBlinded(struct entity *entity, bool8 check_held_item) { if (EntityIsValid__02315118(entity)) diff --git a/src/overlay_29_022EE348.c b/src/overlay_29_022EE348.c index fcaf3e4c..e1eb4f08 100644 --- a/src/overlay_29_022EE348.c +++ b/src/overlay_29_022EE348.c @@ -1,5 +1,16 @@ #include "overlay_29_022EE348.h" +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + +bool8 ItemIsActive__022EE318(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} + bool8 EntityIsValid__022EE348(struct entity *entity) { if (entity == NULL) diff --git a/src/overlay_29_022F5994.c b/src/overlay_29_022F5994.c new file mode 100644 index 00000000..587c28b9 --- /dev/null +++ b/src/overlay_29_022F5994.c @@ -0,0 +1,12 @@ +#include "overlay_29_022F5994.h" + +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + +bool8 ItemIsActive__022F5994(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_022FF898.c b/src/overlay_29_022FF898.c new file mode 100644 index 00000000..7e5a1916 --- /dev/null +++ b/src/overlay_29_022FF898.c @@ -0,0 +1,12 @@ +#include "overlay_29_022FF898.h" +#include "dungeon_pokemon_attributes.h" + +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + +bool8 ItemIsActive__022FF898(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActive(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_023026CC.c b/src/overlay_29_023026CC.c new file mode 100644 index 00000000..7406aeb8 --- /dev/null +++ b/src/overlay_29_023026CC.c @@ -0,0 +1,12 @@ +#include "overlay_29_023026CC.h" + +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + +bool8 ItemIsActive__023026CC(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_02307EF8.c b/src/overlay_29_02307EF8.c index d4650d45..7e072634 100644 --- a/src/overlay_29_02307EF8.c +++ b/src/overlay_29_02307EF8.c @@ -1,5 +1,8 @@ #include "overlay_29_02307EF8.h" +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + bool8 EntityIsValid__02307EF8(struct entity *entity) { if (entity == NULL) @@ -8,3 +11,11 @@ bool8 EntityIsValid__02307EF8(struct entity *entity) } return entity->type != ENTITY_NOTHING; } + +bool8 ItemIsActive__02307F1C(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_0230A9DC.c b/src/overlay_29_0230A9DC.c new file mode 100644 index 00000000..e5b8ebcb --- /dev/null +++ b/src/overlay_29_0230A9DC.c @@ -0,0 +1,12 @@ +#include "overlay_29_0230A9DC.h" + +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + +bool8 ItemIsActive__0230A9DC(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_0230E578.c b/src/overlay_29_0230E578.c new file mode 100644 index 00000000..9c581365 --- /dev/null +++ b/src/overlay_29_0230E578.c @@ -0,0 +1,12 @@ +#include "overlay_29_0230E578.h" + +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + +bool8 ItemIsActive__0230E578(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_0230F810.c b/src/overlay_29_0230F810.c new file mode 100644 index 00000000..324a9929 --- /dev/null +++ b/src/overlay_29_0230F810.c @@ -0,0 +1,12 @@ +#include "overlay_29_0230F810.h" + +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + +bool8 ItemIsActive__0230F810(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_02311010.c b/src/overlay_29_02311010.c index d93368e0..fd96518e 100644 --- a/src/overlay_29_02311010.c +++ b/src/overlay_29_02311010.c @@ -1,5 +1,8 @@ #include "overlay_29_02311010.h" +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + bool8 EntityIsValid__02311010(struct entity *entity) { if (entity == NULL) @@ -8,3 +11,11 @@ bool8 EntityIsValid__02311010(struct entity *entity) } return entity->type != ENTITY_NOTHING; } + +bool8 ItemIsActive__02311034(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_02311BF8.c b/src/overlay_29_02311BF8.c new file mode 100644 index 00000000..3330780f --- /dev/null +++ b/src/overlay_29_02311BF8.c @@ -0,0 +1,12 @@ +#include "overlay_29_02311BF8.h" + +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + +bool8 ItemIsActive__02311BF8(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_02315118.c b/src/overlay_29_02315118.c index 01e67f90..25004d2f 100644 --- a/src/overlay_29_02315118.c +++ b/src/overlay_29_02315118.c @@ -1,5 +1,8 @@ #include "overlay_29_02315118.h" +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + bool8 EntityIsValid__02315118(struct entity *entity) { if (entity == NULL) @@ -8,3 +11,11 @@ bool8 EntityIsValid__02315118(struct entity *entity) } return entity->type != ENTITY_NOTHING; } + +bool8 ItemIsActive__0231513C(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +} diff --git a/src/overlay_29_02347B50.c b/src/overlay_29_02347B50.c new file mode 100644 index 00000000..b32e763a --- /dev/null +++ b/src/overlay_29_02347B50.c @@ -0,0 +1,12 @@ +#include "overlay_29_02347B50.h" + +extern bool8 AbilityIsActiveVeneer(struct entity *entity, enum ability_id ability_id); +extern bool8 HasHeldItem(struct entity* entity, enum item_id item_id); + +bool8 ItemIsActive__02347B50(struct entity *entity, enum item_id item_id) +{ + if (AbilityIsActiveVeneer(entity, ABILITY_KLUTZ)) + return FALSE; + + return HasHeldItem(entity, item_id); +}