diff --git a/asm/include/overlay_29_022F9194.inc b/asm/include/overlay_29_022F9194.inc index 1936adce..11fdd59a 100644 --- a/asm/include/overlay_29_022F9194.inc +++ b/asm/include/overlay_29_022F9194.inc @@ -2,24 +2,24 @@ .public AbilityIsActiveVeneer .public CASTFORM_WEATHER_ATTRIBUTE_TABLE .public DUNGEON_PTR +.public DefenderAbilityIsActive__022F96CC .public DungeonRandInt .public EntityIsValid__022F7364 .public GetAbility .public GetApparentWeather .public GetMoveTypeForMonster .public GetType -.public IsMonster__022F9720 .public IsSecretBazaarNpcBehavior .public IsSecretFloor .public LogMessageByIdWithPopupCheckUser .public LogMessageByIdWithPopupCheckUserTarget .public LowerSpeed .public MonsterIsType -.public ov10_022C4C6E -.public ov10_022C4C70 -.public ov29_022E6260 -.public ov29_022E647C .public SetPreprocessorArgsIdVal .public SubstitutePlaceholderStringTags .public TryEndStatusWithAbility .public WEATHER_BALL_TYPE_TABLE +.public ov10_022C4C6E +.public ov10_022C4C70 +.public ov29_022E6260 +.public ov29_022E647C diff --git a/asm/include/overlay_29_023018AC.inc b/asm/include/overlay_29_023018AC.inc index ba00d5d7..1943e4de 100644 --- a/asm/include/overlay_29_023018AC.inc +++ b/asm/include/overlay_29_023018AC.inc @@ -1,7 +1,6 @@ #pragma once -.public AbilityIsActive +.public DefenderAbilityIsActive__02301A0C .public GetApparentWeather .public IsExperienceLocked -.public IsMonster__02301A60 .public LogMessageByIdWithPopupCheckUserTarget .public SubstitutePlaceholderStringTags diff --git a/asm/include/overlay_29_02308FE0.inc b/asm/include/overlay_29_02308FE0.inc index f3845179..942c0ccc 100644 --- a/asm/include/overlay_29_02308FE0.inc +++ b/asm/include/overlay_29_02308FE0.inc @@ -1,6 +1,5 @@ #pragma once .public AbilityIsActiveVeneer -.public abs .public ActivateMotorDrive .public AddExpSpecial .public AdvanceFrame @@ -11,14 +10,15 @@ .public ChangeDungeonMusic .public ChangeMonsterAnimation .public DAMAGE_STRING_IDS -.public DisplayAnimatedNumbers .public DUNGEON_PTR +.public DefenderAbilityIsActive__0230A940 +.public DisplayAnimatedNumbers .public DungeonRandOutcome__022EAB20 .public EndCurseClassStatus .public EndInvisibleClassStatus .public EntityIsValid__02308FBC -.public ExclusiveItemEffectIsActive__0230A9B8 .public ExclusiveItemEffectIsActiveWithLogging +.public ExclusiveItemEffectIsActive__0230A9B8 .public FreeOtherWrappedMonsters .public GetActiveTeamMember .public GetDirectionTowardsPosition @@ -30,7 +30,6 @@ .public IsBlinded .public IsCurrentMissionType .public IsExperienceLocked -.public IsMonster__0230A994 .public IsMonsterIdInNormalRangeVeneer .public IsSecretBazaarNpcBehavior .public IsSpecialStoryAlly @@ -42,6 +41,30 @@ .public LogMessageByIdWithPopupCheckUserTarget .public MoveMonsterToPos .public MusicTableIdxToMusicId +.public PlayEffectAnimationEntity +.public RecruitCheck +.public RemoveHolderForItemInBag +.public RestorePpAllMovesSetFlags +.public RestoreRandomMovePP +.public SET_DAMAGE_STATUS_DAMAGE +.public SetMessageLogPreprocessorArgsNumberVal +.public SetMonsterFlag2 +.public SetPokemonBattled +.public ShouldDisplayEntityWrapper +.public SpawnDroppedItemWrapper +.public SubInitMonster +.public SubstitutePlaceholderStringTags +.public TYPE_DAMAGE_NEGATING_EXCLUSIVE_ITEM_EFFECTS +.public TryEndPetrifiedOrSleepStatus +.public TryIncreaseHp +.public TryRecruit +.public TrySpawnEnemyItemDrop +.public UpdateAiTargetPos +.public UpdateEntityPixelPos +.public UpdateShopkeeperModeAfterAttack +.public UpdateStatusIconFlags +.public UpdateTrapsVisibility +.public abs .public ov10_022BDC68 .public ov10_022BDE50 .public ov10_022BF964 @@ -95,27 +118,4 @@ .public ov29_02353234 .public ov29_023535D4 .public ov29_0237CA6C -.public PlayEffectAnimationEntity -.public RecruitCheck -.public RemoveHolderForItemInBag -.public RestorePpAllMovesSetFlags -.public RestoreRandomMovePP -.public SET_DAMAGE_STATUS_DAMAGE -.public SetMessageLogPreprocessorArgsNumberVal -.public SetMonsterFlag2 -.public SetPokemonBattled -.public ShouldDisplayEntityWrapper -.public SpawnDroppedItemWrapper .public sub_0204AF00 -.public SubInitMonster -.public SubstitutePlaceholderStringTags -.public TryEndPetrifiedOrSleepStatus -.public TryIncreaseHp -.public TryRecruit -.public TrySpawnEnemyItemDrop -.public TYPE_DAMAGE_NEGATING_EXCLUSIVE_ITEM_EFFECTS -.public UpdateAiTargetPos -.public UpdateEntityPixelPos -.public UpdateShopkeeperModeAfterAttack -.public UpdateStatusIconFlags -.public UpdateTrapsVisibility diff --git a/asm/include/overlay_29_0230AA0C.inc b/asm/include/overlay_29_0230AA0C.inc index 2d8b2f38..bd1d31b4 100644 --- a/asm/include/overlay_29_0230AA0C.inc +++ b/asm/include/overlay_29_0230AA0C.inc @@ -1,188 +1,11 @@ #pragma once -.public _s32_div_f -.public AbilityIsActiveVeneer -.public abs -.public AddFixedPoint64 -.public AdvanceFrame .public AFTERMATH_CHANCE -.public AIR_BLADE_DAMAGE_MULTIPLIER -.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 AbilityIsActiveVeneer .public DUNGEON_PTR -.public DungeonModeSetupAndShowNameKeyboard -.public DungeonRandInt +.public DefenderAbilityIsActive__0230A940 .public DungeonRandOutcome__022EAB20 -.public EnableAllLearnableIqSkills -.public EnsureCanStandCurrentTile -.public EntityIsValid__02308FBC -.public ExclusiveItemDefenseBoost .public ExclusiveItemEffectIsActive__0230A9B8 -.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 GetMessageLogPreprocessorArgs -.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 IsMonster__0230A994 -.public IsMonsterOnTeam -.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 MemZero -.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_022E68BC -.public ov29_022E8104 -.public ov29_022E81F8 -.public ov29_022EACAC -.public ov29_022FBDE0 -.public ov29_02304A48 -.public ov29_02305F60 -.public ov29_0230E5A8 -.public ov29_0230E5FC -.public ov29_0230E658 -.public ov29_02337EC0 -.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 WEAK_TYPE_PICKER_MATCHUP_MULTIPLIERS -.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 RECRUITMENT_LEVEL_BOOST_TABLE -.public ResetDamageData -.public RoundUpDiv256 -.public SCOPE_LENS_CRIT_RATE_BOOST -.public SetItemAcquired -.public SetMessageLogPreprocessorArgsString -.public SetPokemonJoined -.public SetPreprocessorArgsIdVal -.public SetPreprocessorArgsStringToName -.public SOLID_ROCK_MULTIPLIER -.public SPECIAL_BAND_STAT_BOOST -.public StrcpySimple -.public StrncpyName -.public StrncpySimpleNoPad -.public sub_02056698 -.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 GetTypeMatchup .public TYPE_MATCHUP_COMBINATOR_TABLE -.public TYPE_MATCHUP_TABLE -.public UpdateStateFlags -.public ZINC_BAND_STAT_BOOST +.public TryAftermathExplosion +.public ov29_02352838 diff --git a/asm/include/overlay_29_0230AD04.inc b/asm/include/overlay_29_0230AD04.inc new file mode 100644 index 00000000..9747b6eb --- /dev/null +++ b/asm/include/overlay_29_0230AD04.inc @@ -0,0 +1,45 @@ +#pragma once +.public AbilityIsActiveVeneer +.public BURN_DAMAGE_MULTIPLIER +.public CLOUDY_DAMAGE_MULTIPLIER +.public DAMAGE_MULTIPLIER_0_5 +.public DAMAGE_MULTIPLIER_1_5 +.public DAMAGE_MULTIPLIER_2 +.public DUNGEON_PTR +.public DefenderAbilityIsActive__0230A940 +.public EntityIsValid__02308FBC +.public ExclusiveItemEffectIsActive__0230A9B8 +.public FixedPoint32To64 +.public FixedPoint64IsZero +.public FlashFireShouldActivate +.public GetApparentWeather +.public GetTypeMatchup +.public GhostImmunityIsActive +.public IntToFixedPoint64 +.public IqSkillIsEnabled +.public IsFloating +.public IsTypeIneffectiveAgainstGhost +.public LevitateIsActive +.public LogMessageByIdWithPopupCheckParticipants +.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 MonsterIsType +.public MultiplyFixedPoint64 +.public PlayEffectAnimation0x1A9__022E61C8 +.public PlayEffectAnimation0x1A9__022E6214 +.public PlayEffectAnimation0x1A9__022E64C4 +.public PlayEffectAnimation0x1A9__022E6510 +.public SOLID_ROCK_MULTIPLIER +.public ScrappyShouldActivate +.public TECHNICIAN_MOVE_POWER_THRESHOLD +.public TINTED_LENS_MULTIPLIER +.public TYPE_MATCHUP_COMBINATOR_TABLE +.public UpdateStateFlags +.public ov29_02352838 diff --git a/asm/include/overlay_29_0230BBAC.inc b/asm/include/overlay_29_0230BBAC.inc new file mode 100644 index 00000000..37ba4418 --- /dev/null +++ b/asm/include/overlay_29_0230BBAC.inc @@ -0,0 +1,163 @@ +#pragma once +.public AIR_BLADE_DAMAGE_MULTIPLIER +.public AURA_BOW_STAT_BOOST +.public AbilityIsActiveVeneer +.public AddFixedPoint64 +.public AdvanceFrame +.public ApplyDamageAndEffects +.public AuraBowIsActive +.public CalcTypeBasedDamageEffects +.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 EnableAllLearnableIqSkills +.public EnsureCanStandCurrentTile +.public EntityIsValid__02308FBC +.public ExclusiveItemDefenseBoost +.public ExclusiveItemEffectIsActiveWithLogging +.public ExclusiveItemEffectIsActive__0230A9B8 +.public ExclusiveItemOffenseBoost +.public FixedPoint32To64 +.public FixedPoint64CmpLt +.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 GetMessageLogPreprocessorArgs +.public GetMonsterGenderVeneer +.public GetMoveCategory +.public GetNameString +.public GetRecruitRate1 +.public GetRecruitRate2 +.public GetTypeMatchup +.public HandleFaint +.public HasPlayedOldGame +.public InitTeamMember +.public IntToFixedPoint64 +.public IqSkillIsEnabled +.public IsCurrentMissionTypeExact +.public IsFullFloorFixedRoom +.public IsLegendaryChallengeFloor +.public IsMonsterOnTeam +.public IsMonster__0230A994 +.public IsPunchMove +.public IsRecoilMove +.public IsRecruitingAllowed +.public IsRegularAttackOrProjectile +.public ItemIsActive__0230A9DC +.public ItemIsActive__0230E578 +.public LogMessageByIdWithPopupCheckUser +.public LogMessageByIdWithPopupCheckUserTarget +.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 PlayEffectAnimationEntity +.public PointCameraToMonster +.public RECRUITMENT_LEVEL_BOOST_TABLE +.public ResetDamageData +.public RoundUpDiv256 +.public SCOPE_LENS_CRIT_RATE_BOOST +.public SPECIAL_BAND_STAT_BOOST +.public SUPER_LUCK_CRIT_RATE_BOOST +.public SetItemAcquired +.public SetMessageLogPreprocessorArgsString +.public SetPokemonJoined +.public SetPreprocessorArgsIdVal +.public SetPreprocessorArgsStringToName +.public StrcpySimple +.public StrncpyName +.public StrncpySimpleNoPad +.public SubstitutePlaceholderStringTags +.public TYPE_ADVANTAGE_MASTER_CRIT_RATE +.public TYPE_MATCHUP_COMBINATOR_TABLE +.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_02304A48 +.public ov29_02305F60 +.public ov29_0230E5A8 +.public ov29_0230E5FC +.public ov29_0230E658 +.public ov29_02337EC0 +.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_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_023118D8.inc b/asm/include/overlay_29_023118D8.inc index 048facb6..eac98ebc 100644 --- a/asm/include/overlay_29_023118D8.inc +++ b/asm/include/overlay_29_023118D8.inc @@ -1,5 +1,5 @@ #pragma once -.public AbilityIsActiveVeneer +.public DefenderAbilityIsActive__02311B94 .public EntityIsValid__023118B4 .public ExclusiveItemEffectIsActiveWithLogging .public InflictSleepStatusSingle @@ -7,8 +7,8 @@ .public IsProtectedFromNegativeStatus .public ItemIsActive__02311BF8 .public LogMessageByIdWithPopupCheckUserTarget -.public ov29_022E3E74 -.public ov29_02304A48 .public SafeguardIsActive .public SubstitutePlaceholderStringTags .public TryActivateQuickFeet +.public ov29_022E3E74 +.public ov29_02304A48 diff --git a/asm/include/overlay_29_02311C28.inc b/asm/include/overlay_29_02311C28.inc index b5ebe662..cca821f7 100644 --- a/asm/include/overlay_29_02311C28.inc +++ b/asm/include/overlay_29_02311C28.inc @@ -1,17 +1,14 @@ #pragma once .public AbilityIsActiveVeneer .public AllocateTemp1024ByteBufferFromPool -.public CalcSpeedStageWrapper .public CalcStatusDuration .public ChangeShayminForme .public CopyStringFromId -.public DefenderAbilityIsActive__02311B94 .public DIRECTIONS_XY .public DUNGEON_PTR +.public DefenderAbilityIsActive__02311B94 .public EntityIsValid__023118B4 -.public ExclusiveItemEffectIsActive__023147EC .public ExclusiveItemEffectIsActiveWithLogging -.public GetExclusiveItemWithEffectFromBag .public GetMessageLogPreprocessorArgs .public GetTile .public GetTileAtEntity @@ -21,7 +18,14 @@ .public ItemIsActive__02311BF8 .public LogMessageByIdWithPopupCheckUserTarget .public MonsterIsType -.public MultiplyByFixedPoint +.public SECONDARY_TERRAIN_TYPES +.public SafeguardIsActive +.public SetMessageLogPreprocessorArgsString +.public SetPreprocessorArgsIdVal +.public SetPreprocessorArgsStringToName +.public SubstitutePlaceholderStringTags +.public TryActivateQuickFeet +.public UpdateStatusIconFlags .public ov10_022C4728 .public ov10_022C479C .public ov10_022C47A0 @@ -30,19 +34,15 @@ .public ov10_022C4874 .public ov10_022C4878 .public ov10_022C4880 -.public ov10_022C4884 -.public ov10_022C4894 .public ov10_022C4898 .public ov10_022C48A0 .public ov10_022C48AC .public ov10_022C48B8 .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 @@ -56,24 +56,7 @@ .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_022E53EC .public ov29_023018AC .public ov29_02304A48 .public ov29_02304A84 -.public PlayExclamationPointEffect__022E5D4C -.public PrepareItemForPrinting__02345728 -.public SafeguardIsActive -.public SECONDARY_TERRAIN_TYPES -.public SetMessageLogPreprocessorArgsString -.public SetPreprocessorArgsIdVal -.public SetPreprocessorArgsStringToName -.public SubstitutePlaceholderStringTags -.public TryActivateQuickFeet -.public TryActivateSteadfast -.public UpdateStatusIconFlags diff --git a/asm/include/overlay_29_02313CE4.inc b/asm/include/overlay_29_02313CE4.inc new file mode 100644 index 00000000..894371dd --- /dev/null +++ b/asm/include/overlay_29_02313CE4.inc @@ -0,0 +1,38 @@ +#pragma once +.public AbilityIsActiveVeneer +.public AllocateTemp1024ByteBufferFromPool +.public CalcSpeedStageWrapper +.public CalcStatusDuration +.public CopyStringFromId +.public DIRECTIONS_XY +.public DefenderAbilityIsActive__02311B94 +.public EntityIsValid__023118B4 +.public ExclusiveItemEffectIsActive__023147EC +.public GetExclusiveItemWithEffectFromBag +.public GetMessageLogPreprocessorArgs +.public GetTile +.public IsProtectedFromNegativeStatus +.public IsProtectedFromStatDrops +.public ItemIsActive__02311BF8 +.public LogMessageByIdWithPopupCheckUserTarget +.public MultiplyByFixedPoint +.public PlayExclamationPointEffect__022E5D4C +.public PrepareItemForPrinting__02345728 +.public SafeguardIsActive +.public SetMessageLogPreprocessorArgsString +.public SetPreprocessorArgsStringToName +.public SubstitutePlaceholderStringTags +.public TryActivateQuickFeet +.public TryActivateSteadfast +.public UpdateStatusIconFlags +.public ov10_022C4884 +.public ov10_022C4894 +.public ov29_022E4240 +.public ov29_022E4338 +.public ov29_022E4FC0 +.public ov29_022E5068 +.public ov29_022E510C +.public ov29_022E51B0 +.public ov29_022E5258 +.public ov29_022E52F8 +.public ov29_023018AC diff --git a/asm/include/overlay_29_0232145C.inc b/asm/include/overlay_29_0232145C.inc index 08581034..ecd226c9 100644 --- a/asm/include/overlay_29_0232145C.inc +++ b/asm/include/overlay_29_0232145C.inc @@ -9,6 +9,7 @@ .public BuildMoveTargetList .public CalcStatusDuration .public CanMonsterUseMove +.public DefenderAbilityIsActive__02322D64 .public DungeonRandInt .public EndFrozenClassStatus .public EndLeechSeedClassStatus @@ -24,15 +25,15 @@ .public GetMoveNbStrikes .public GetNaturePowerVariant .public GravityIsActive +.public INTIMIDATOR_ACTIVATION_CHANCE .public InitMove .public InitMoveCheckId -.public INTIMIDATOR_ACTIVATION_CHANCE .public IqSkillIsEnabled .public Is2TurnsMove .public IsChargingTwoTurnMove .public IsFloorOver -.public IsMonster__02322DB8 .public IsMonsterSleeping +.public IsMonster__02322DB8 .public IsTrappingMove .public LogMessageByIdWithPopupCheckUser .public LogMessageWithPopupCheckUser @@ -42,6 +43,30 @@ .public MonsterCannotAttack .public NATURE_POWER_TABLE .public NIGHTMARE_TURN_RANGE +.public ResetTriggerFlags +.public SLEEP_TURN_RANGE +.public SetPreprocessorArgsIdVal +.public SetPreprocessorArgsStringToName +.public StringFromId +.public SubstitutePlaceholderStringTags +.public TryInflictBlinkerStatus +.public TryInflictBurnStatus +.public TryInflictConfusedStatus +.public TryInflictConstrictionStatus +.public TryInflictCringeStatus +.public TryInflictFrozenStatus +.public TryInflictInfatuatedStatus +.public TryInflictInvisibleStatus +.public TryInflictNightmareStatus +.public TryInflictParalysisStatus +.public TryInflictPausedStatus +.public TryInflictPerishSongStatus +.public TryInflictPoisonedStatus +.public TryInflictShadowHoldStatus +.public TryInflictSleepStatus +.public TrySealMove +.public TryWarp +.public UpdateAiTargetPos .public ov10_022BFD6C .public ov10_022C4584 .public ov10_022C4714 @@ -62,28 +87,4 @@ .public ov29_02344B9C .public ov29_0235370C .public ov29_0237CA68 -.public ResetTriggerFlags -.public SetPreprocessorArgsIdVal -.public SetPreprocessorArgsStringToName -.public SLEEP_TURN_RANGE -.public StringFromId .public sub_0201D1B0 -.public SubstitutePlaceholderStringTags -.public TryInflictBlinkerStatus -.public TryInflictBurnStatus -.public TryInflictConfusedStatus -.public TryInflictConstrictionStatus -.public TryInflictCringeStatus -.public TryInflictFrozenStatus -.public TryInflictInfatuatedStatus -.public TryInflictInvisibleStatus -.public TryInflictNightmareStatus -.public TryInflictParalysisStatus -.public TryInflictPausedStatus -.public TryInflictPerishSongStatus -.public TryInflictPoisonedStatus -.public TryInflictShadowHoldStatus -.public TryInflictSleepStatus -.public TrySealMove -.public TryWarp -.public UpdateAiTargetPos diff --git a/asm/include/overlay_29_02332A0C.inc b/asm/include/overlay_29_02332A70.inc similarity index 60% rename from asm/include/overlay_29_02332A0C.inc rename to asm/include/overlay_29_02332A70.inc index 3825ac7e..10ae242b 100644 --- a/asm/include/overlay_29_02332A0C.inc +++ b/asm/include/overlay_29_02332A70.inc @@ -1,18 +1,11 @@ #pragma once -.public AbilityIsActiveVeneer -.public abs .public ApplyDamageAndEffects .public CalcDamage .public CanAttackInDirection -.public CanLayTrap -.public CanSeeTarget -.public CeilFixedPoint -.public Conversion2IsActive -.public DisplayAnimatedNumbers .public DUNGEON_PTR +.public DefenderAbilityIsActive__02332A0C +.public DisplayAnimatedNumbers .public EntityIsValid__0232E840 -.public EntityIsValid__02333FAC -.public GetApparentWeather .public GetDamageSourceWrapper .public GetDirectionTowardsPosition .public GetMessageLogPreprocessorArgs @@ -20,20 +13,12 @@ .public GetMoveCritChance .public GetMovePower .public GetMoveTypeForMonster -.public GetTileAtEntity -.public IsCurrentFixedRoomBossFight -.public IsTileGround .public LogMessageByIdQuietCheckUserTarget .public LogMessageByIdWithPopupCheckUserTarget -.public MirrorMoveIsActive -.public MistIsActive -.public MonsterHasNegativeStatus -.public MonsterHasQuarterHp -.public MonsterIsType .public MoveHitCheck -.public ov10_022C6322 +.public SetPreprocessorArgsStringToName +.public ShouldDisplayEntityWrapper +.public abs .public ov29_022E576C .public ov29_02304A48 .public ov29_0230D088 -.public SetPreprocessorArgsStringToName -.public ShouldDisplayEntityWrapper diff --git a/asm/include/overlay_29_rodata_023527C0.inc b/asm/include/overlay_29_rodata_023527C0.inc index 89dfe938..6f70f09b 100644 --- a/asm/include/overlay_29_rodata_023527C0.inc +++ b/asm/include/overlay_29_rodata_023527C0.inc @@ -1,3 +1 @@ #pragma once -.public ov29_023529C4 -.public ov29_023529EC diff --git a/asm/include/overlay_29_rodata_02352894.inc b/asm/include/overlay_29_rodata_02352894.inc new file mode 100644 index 00000000..89dfe938 --- /dev/null +++ b/asm/include/overlay_29_rodata_02352894.inc @@ -0,0 +1,3 @@ +#pragma once +.public ov29_023529C4 +.public ov29_023529EC diff --git a/asm/overlay_29_022F9194.s b/asm/overlay_29_022F9194.s index adb505c8..49512a8f 100644 --- a/asm/overlay_29_022F9194.s +++ b/asm/overlay_29_022F9194.s @@ -428,51 +428,3 @@ _022F96C4: .word WEATHER_BALL_TYPE_TABLE _022F96C8: .word 0x00000C19 #endif arm_func_end TryActivateTraceAndColorChange - - arm_func_start DefenderAbilityIsActive__022F96CC -DefenderAbilityIsActive__022F96CC: ; 0x022F96CC -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - cmp r6, r5 -#else - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - cmp r7, r6 -#endif - beq _022F9710 - bl IsMonster__022F9720 - cmp r0, #0 -#ifdef JAPAN - beq _022F9710 - mov r0, r6 -#else - cmpne r4, #0 - beq _022F9710 - mov r0, r7 -#endif - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 -#ifdef JAPAN - ldmneia sp!, {r4, r5, r6, pc} -_022F9710: - mov r0, r5 - mov r1, r4 - bl AbilityIsActiveVeneer - ldmia sp!, {r4, r5, r6, pc} -#else - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_022F9710: - mov r0, r6 - mov r1, r5 - bl AbilityIsActiveVeneer - ldmia sp!, {r3, r4, r5, r6, r7, pc} -#endif - arm_func_end DefenderAbilityIsActive__022F96CC diff --git a/asm/overlay_29_023018AC.s b/asm/overlay_29_023018AC.s index 5e258a51..9729a2ac 100644 --- a/asm/overlay_29_023018AC.s +++ b/asm/overlay_29_023018AC.s @@ -125,51 +125,3 @@ _02301A08: .word 0x00000976 _02301A08: .word 0x00000C37 #endif arm_func_end LeafGuardIsActive - - arm_func_start DefenderAbilityIsActive__02301A0C -DefenderAbilityIsActive__02301A0C: ; 0x02301A0C -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - cmp r6, r5 -#else - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - cmp r7, r6 -#endif - beq _02301A50 - bl IsMonster__02301A60 - cmp r0, #0 -#ifdef JAPAN - beq _02301A50 - mov r0, r6 -#else - cmpne r4, #0 - beq _02301A50 - mov r0, r7 -#endif - mov r1, #0x53 - bl AbilityIsActive - cmp r0, #0 - movne r0, #0 -#ifdef JAPAN - ldmneia sp!, {r4, r5, r6, pc} -_02301A50: - mov r0, r5 - mov r1, r4 - bl AbilityIsActive - ldmia sp!, {r4, r5, r6, pc} -#else - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_02301A50: - mov r0, r6 - mov r1, r5 - bl AbilityIsActive - ldmia sp!, {r3, r4, r5, r6, r7, pc} -#endif - arm_func_end DefenderAbilityIsActive__02301A0C diff --git a/asm/overlay_29_02308FE0.s b/asm/overlay_29_02308FE0.s index 27ba993a..0564aa0b 100644 --- a/asm/overlay_29_02308FE0.s +++ b/asm/overlay_29_02308FE0.s @@ -3514,51 +3514,3 @@ _0230B3A8: .word 0x02353E40 _0230A938: .word ov10_022C593C _0230A93C: .word ov29_0237CA6C arm_func_end ApplyDamage - - arm_func_start DefenderAbilityIsActive__0230A940 -DefenderAbilityIsActive__0230A940: ; 0x0230A940 -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - cmp r6, r5 -#else - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - cmp r7, r6 -#endif - beq _0230A984 - bl IsMonster__0230A994 - cmp r0, #0 -#ifdef JAPAN - beq _0230A984 - mov r0, r6 -#else - cmpne r4, #0 - beq _0230A984 - mov r0, r7 -#endif - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 -#ifdef JAPAN - ldmneia sp!, {r4, r5, r6, pc} -_0230A984: - mov r0, r5 - mov r1, r4 - bl AbilityIsActiveVeneer - ldmia sp!, {r4, r5, r6, pc} -#else - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_0230A984: - mov r0, r6 - mov r1, r5 - bl AbilityIsActiveVeneer - ldmia sp!, {r3, r4, r5, r6, r7, pc} -#endif - arm_func_end DefenderAbilityIsActive__0230A940 diff --git a/asm/overlay_29_0230AA0C.s b/asm/overlay_29_0230AA0C.s index 3e445b8a..90807baa 100644 --- a/asm/overlay_29_0230AA0C.s +++ b/asm/overlay_29_0230AA0C.s @@ -187,4141 +187,3 @@ _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 WeightWeakTypePicker -WeightWeakTypePicker: ; 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 ; =WEAK_TYPE_PICKER_MATCHUP_MULTIPLIERS - 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 WEAK_TYPE_PICKER_MATCHUP_MULTIPLIERS -_0230BBA4: .word DUNGEON_PTR -_0230BBA8: .word 0x000003E7 - arm_func_end WeightWeakTypePicker - - 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 GetMessageLogPreprocessorArgs - mov r1, #1 - str r1, [sp] - mov r1, r5 - ldr r2, [sb, #0xb4] - mov r3, r1 - bl SetPreprocessorArgsStringToName - b _0230E114 -_0230E0FC: - bl GetMessageLogPreprocessorArgs - mov r1, r5 - str r1, [sp] - ldr r2, [sb, #0xb4] - mov r3, r1 - bl SetPreprocessorArgsStringToName -_0230E114: - bl GetMessageLogPreprocessorArgs - 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 GetMessageLogPreprocessorArgs - 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 SetMessageLogPreprocessorArgsString - mov r0, #1 - mov r1, #0 - bl SetPreprocessorArgsIdVal - 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 SetMessageLogPreprocessorArgsString - mov r0, #1 - mov r1, sl - mov r2, #0 - bl SubstitutePlaceholderStringTags - bl GetMessageLogPreprocessorArgs - 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_0230AD04.s b/asm/overlay_29_0230AD04.s new file mode 100644 index 00000000..19702152 --- /dev/null +++ b/asm/overlay_29_0230AD04.s @@ -0,0 +1,786 @@ + .include "asm/macros.inc" + .include "overlay_29_0230AD04.inc" + + .text + + 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 diff --git a/asm/overlay_29_0230BBAC.s b/asm/overlay_29_0230BBAC.s new file mode 100644 index 00000000..b24d71e3 --- /dev/null +++ b/asm/overlay_29_0230BBAC.s @@ -0,0 +1,3023 @@ + .include "asm/macros.inc" + .include "overlay_29_0230BBAC.inc" + + .text + + 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 GetMessageLogPreprocessorArgs + mov r1, #1 + str r1, [sp] + mov r1, r5 + ldr r2, [sb, #0xb4] + mov r3, r1 + bl SetPreprocessorArgsStringToName + b _0230E114 +_0230E0FC: + bl GetMessageLogPreprocessorArgs + mov r1, r5 + str r1, [sp] + ldr r2, [sb, #0xb4] + mov r3, r1 + bl SetPreprocessorArgsStringToName +_0230E114: + bl GetMessageLogPreprocessorArgs + 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 GetMessageLogPreprocessorArgs + 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 SetMessageLogPreprocessorArgsString + mov r0, #1 + mov r1, #0 + bl SetPreprocessorArgsIdVal + 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 SetMessageLogPreprocessorArgsString + mov r0, #1 + mov r1, sl + mov r2, #0 + bl SubstitutePlaceholderStringTags + bl GetMessageLogPreprocessorArgs + 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_023118D8.s b/asm/overlay_29_023118D8.s index 88b9a9a9..c52c0ea8 100644 --- a/asm/overlay_29_023118D8.s +++ b/asm/overlay_29_023118D8.s @@ -216,36 +216,3 @@ _02311B88: .word 0x00000DA6 + IS_PROTECTED_FROM_SLEEP_CLASS_STATUS_OFFSET _02311B8C: .word 0x00000DB1 + IS_PROTECTED_FROM_SLEEP_CLASS_STATUS_OFFSET _02311B90: .word 0x00000DC2 + IS_PROTECTED_FROM_SLEEP_CLASS_STATUS_OFFSET arm_func_end IsProtectedFromSleepClassStatus - - arm_func_start DefenderAbilityIsActive__02311B94 -DefenderAbilityIsActive__02311B94: ; 0x02311B94 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r4, r2 - cmp r0, r5 - beq _02311BE8 - cmp r0, #0 - moveq r1, #0 - beq _02311BC8 - ldr r1, [r0] - cmp r1, #1 - moveq r1, #1 - movne r1, #0 - and r1, r1, #0xff -_02311BC8: - cmp r1, #0 -#ifndef JAPAN - cmpne r3, #0 -#endif - beq _02311BE8 - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} -_02311BE8: - mov r0, r5 - mov r1, r4 - bl AbilityIsActiveVeneer - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DefenderAbilityIsActive__02311B94 diff --git a/asm/overlay_29_02311C28.s b/asm/overlay_29_02311C28.s index 0196fd16..fe2b654e 100644 --- a/asm/overlay_29_02311C28.s +++ b/asm/overlay_29_02311C28.s @@ -2468,864 +2468,3 @@ _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 SetMessageLogPreprocessorArgsString - b _02313DAC -_02313D94: - ldr r1, _02313F4C ; =0x00000DCA - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl SetMessageLogPreprocessorArgsString -_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 SetMessageLogPreprocessorArgsString - b _02313FD0 -_02313FB8: - ldr r1, _023140D0 ; =0x00000DC8 - mov r0, r4 - bl CopyStringFromId - mov r1, r4 - mov r0, #1 - bl SetMessageLogPreprocessorArgsString -_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 SetMessageLogPreprocessorArgsString - b _02314174 -_0231415C: - ldr r1, _0231421C ; =0x00000DC6 - mov r0, r8 - bl CopyStringFromId - mov r1, r8 - mov r0, r4 - bl SetMessageLogPreprocessorArgsString -_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 SetMessageLogPreprocessorArgsString - b _0231429C -_02314284: - ldr r1, _023143D4 ; =0x00000DC6 - mov r0, r5 - bl CopyStringFromId - mov r1, r5 - mov r0, r4 - bl SetMessageLogPreprocessorArgsString -_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 PlayExclamationPointEffect__022E5D4C - 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 PrepareItemForPrinting__02345728 - 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 GetMessageLogPreprocessorArgs - mov r1, #0 - mov r2, r7 - mov r3, r1 - str r1, [sp] - bl SetPreprocessorArgsStringToName - 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 diff --git a/asm/overlay_29_02313CE4.s b/asm/overlay_29_02313CE4.s new file mode 100644 index 00000000..15d7130a --- /dev/null +++ b/asm/overlay_29_02313CE4.s @@ -0,0 +1,831 @@ + .include "asm/macros.inc" + .include "overlay_29_02313CE4.inc" + + .text + + 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 SetMessageLogPreprocessorArgsString + b _02313DAC +_02313D94: + ldr r1, _02313F4C ; =0x00000DCA + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl SetMessageLogPreprocessorArgsString +_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 SetMessageLogPreprocessorArgsString + b _02313FD0 +_02313FB8: + ldr r1, _023140D0 ; =0x00000DC8 + mov r0, r4 + bl CopyStringFromId + mov r1, r4 + mov r0, #1 + bl SetMessageLogPreprocessorArgsString +_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 SetMessageLogPreprocessorArgsString + b _02314174 +_0231415C: + ldr r1, _0231421C ; =0x00000DC6 + mov r0, r8 + bl CopyStringFromId + mov r1, r8 + mov r0, r4 + bl SetMessageLogPreprocessorArgsString +_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 SetMessageLogPreprocessorArgsString + b _0231429C +_02314284: + ldr r1, _023143D4 ; =0x00000DC6 + mov r0, r5 + bl CopyStringFromId + mov r1, r5 + mov r0, r4 + bl SetMessageLogPreprocessorArgsString +_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 PlayExclamationPointEffect__022E5D4C + 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 PrepareItemForPrinting__02345728 + 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 GetMessageLogPreprocessorArgs + mov r1, #0 + mov r2, r7 + mov r3, r1 + str r1, [sp] + bl SetPreprocessorArgsStringToName + 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 diff --git a/asm/overlay_29_0232145C.s b/asm/overlay_29_0232145C.s index 30965885..f30ffef7 100644 --- a/asm/overlay_29_0232145C.s +++ b/asm/overlay_29_0232145C.s @@ -1845,51 +1845,3 @@ _02322D58: .word ov29_0235370C _02322D5C: .word 0x00000EA9 + OV29_02322374_DATA_OFFSET _02322D60: .word 0x000001F6 arm_func_end ov29_02322374 - - arm_func_start DefenderAbilityIsActive__02322D64 -DefenderAbilityIsActive__02322D64: ; 0x02322D64 -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - cmp r6, r5 -#else - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - cmp r7, r6 -#endif - beq _02322DA8 - bl IsMonster__02322DB8 - cmp r0, #0 -#ifdef JAPAN - beq _02322DA8 - mov r0, r6 -#else - cmpne r4, #0 - beq _02322DA8 - mov r0, r7 -#endif - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 -#ifdef JAPAN - ldmneia sp!, {r4, r5, r6, pc} -_02322DA8: - mov r0, r5 - mov r1, r4 - bl AbilityIsActiveVeneer - ldmia sp!, {r4, r5, r6, pc} -#else - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_02322DA8: - mov r0, r6 - mov r1, r5 - bl AbilityIsActiveVeneer - ldmia sp!, {r3, r4, r5, r6, r7, pc} -#endif - arm_func_end DefenderAbilityIsActive__02322D64 diff --git a/asm/overlay_29_02332A0C.s b/asm/overlay_29_02332A70.s similarity index 92% rename from asm/overlay_29_02332A0C.s rename to asm/overlay_29_02332A70.s index d507e705..2b44f860 100644 --- a/asm/overlay_29_02332A0C.s +++ b/asm/overlay_29_02332A70.s @@ -1,41 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_02332A0C.inc" + .include "overlay_29_02332A70.inc" .text - arm_func_start DefenderAbilityIsActive__02332A0C -DefenderAbilityIsActive__02332A0C: ; 0x02332A0C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r4, r2 - cmp r0, r5 - beq _02332A60 - cmp r0, #0 - moveq r1, #0 - beq _02332A40 - ldr r1, [r0] - cmp r1, #1 - moveq r1, #1 - movne r1, #0 - and r1, r1, #0xff -_02332A40: - cmp r1, #0 -#ifndef JAPAN - cmpne r3, #0 -#endif - beq _02332A60 - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} -_02332A60: - mov r0, r5 - mov r1, r4 - bl AbilityIsActiveVeneer - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DefenderAbilityIsActive__02332A0C - arm_func_start DoMoveDamageInlined DoMoveDamageInlined: ; 0x02332A70 stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} diff --git a/asm/overlay_29_rodata_023527C0.s b/asm/overlay_29_rodata_023527C0.s index 426501a8..76d0c306 100644 --- a/asm/overlay_29_rodata_023527C0.s +++ b/asm/overlay_29_rodata_023527C0.s @@ -62,70 +62,3 @@ DAMAGE_FORMULA_MAX_BASE: .global DAMAGE_FORMULA_MIN_BASE DAMAGE_FORMULA_MIN_BASE: .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 - .global WEAK_TYPE_PICKER_MATCHUP_MULTIPLIERS -WEAK_TYPE_PICKER_MATCHUP_MULTIPLIERS: - .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 - .global ov29_02352894 -ov29_02352894: - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .global TYPE_DAMAGE_NEGATING_EXCLUSIVE_ITEM_EFFECTS -TYPE_DAMAGE_NEGATING_EXCLUSIVE_ITEM_EFFECTS: - .byte 0x02, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00 - .byte 0x05, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00 - .byte 0x09, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00 - .byte 0x0B, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00 - .byte 0x0F, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00 - .byte 0x11, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00 - .byte 0x05, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00 - .byte 0x07, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00 - .byte 0x0A, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00 - .byte 0x0E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 - .byte 0x12, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00 - .global ov29_02352984 -ov29_02352984: - .byte 0x46, 0x4C, 0x56, 0x20, 0x3A, 0x20, 0x25, 0x64 - .byte 0x0A, 0x00, 0x00, 0x00 - .global ov29_02352990 -ov29_02352990: - .byte 0x41, 0x54, 0x20, 0x3A, 0x20, 0x25, 0x64, 0x0A, 0x00, 0x00, 0x00, 0x00 - .global ov29_0235299C -ov29_0235299C: - .byte 0x44, 0x45, 0x46, 0x20, 0x3A, 0x20, 0x25, 0x64, 0x0A, 0x00, 0x00, 0x00 - .global ov29_023529A8 -ov29_023529A8: - .byte 0x0D, 0x00, 0x00, 0x00 - .global ov29_023529AC -ov29_023529AC: - .byte 0x00, 0x00, 0x00, 0x00 - .global ov29_023529B0 -ov29_023529B0: - .byte 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00 - .global ov29_023529B8 -ov29_023529B8: - .word ov29_023529C4 - .word ov29_023529C4 - .word ov29_023529EC - .global ov29_023529C4 -ov29_023529C4: - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 - .byte 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x63, 0x00, 0x63, 0x00 - .global ov29_023529EC -ov29_023529EC: - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00 - .byte 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00 - .byte 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xFE, 0xFF - .byte 0x01, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF - .byte 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0x02, 0x00 - .byte 0xFF, 0xFF, 0x02, 0x00, 0x63, 0x00, 0x63, 0x00 - .global ov29_02352A54 -ov29_02352A54: - .byte 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0xFF, 0xFF, 0xFF, 0xFF diff --git a/asm/overlay_29_rodata_02352894.s b/asm/overlay_29_rodata_02352894.s new file mode 100644 index 00000000..7ff7f3a1 --- /dev/null +++ b/asm/overlay_29_rodata_02352894.s @@ -0,0 +1,67 @@ + .include "asm/macros.inc" + .include "overlay_29_rodata_02352894.inc" + + .rodata + .global ov29_02352894 +ov29_02352894: + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .global TYPE_DAMAGE_NEGATING_EXCLUSIVE_ITEM_EFFECTS +TYPE_DAMAGE_NEGATING_EXCLUSIVE_ITEM_EFFECTS: + .byte 0x02, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00 + .byte 0x05, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00 + .byte 0x09, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00 + .byte 0x0B, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00 + .byte 0x0F, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00 + .byte 0x11, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00 + .byte 0x05, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00 + .byte 0x07, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00 + .byte 0x0A, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00 + .byte 0x0C, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00 + .byte 0x0E, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 + .byte 0x12, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00 + .global ov29_02352984 +ov29_02352984: + .byte 0x46, 0x4C, 0x56, 0x20, 0x3A, 0x20, 0x25, 0x64 + .byte 0x0A, 0x00, 0x00, 0x00 + .global ov29_02352990 +ov29_02352990: + .byte 0x41, 0x54, 0x20, 0x3A, 0x20, 0x25, 0x64, 0x0A, 0x00, 0x00, 0x00, 0x00 + .global ov29_0235299C +ov29_0235299C: + .byte 0x44, 0x45, 0x46, 0x20, 0x3A, 0x20, 0x25, 0x64, 0x0A, 0x00, 0x00, 0x00 + .global ov29_023529A8 +ov29_023529A8: + .byte 0x0D, 0x00, 0x00, 0x00 + .global ov29_023529AC +ov29_023529AC: + .byte 0x00, 0x00, 0x00, 0x00 + .global ov29_023529B0 +ov29_023529B0: + .byte 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00 + .global ov29_023529B8 +ov29_023529B8: + .word ov29_023529C4 + .word ov29_023529C4 + .word ov29_023529EC + .global ov29_023529C4 +ov29_023529C4: + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 + .byte 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x63, 0x00, 0x63, 0x00 + .global ov29_023529EC +ov29_023529EC: + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00 + .byte 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00 + .byte 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xFE, 0xFF + .byte 0x01, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF + .byte 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0x02, 0x00 + .byte 0xFF, 0xFF, 0x02, 0x00, 0x63, 0x00, 0x63, 0x00 + .global ov29_02352A54 +ov29_02352A54: + .byte 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0xFF, 0xFF, 0xFF, 0xFF diff --git a/include/dungeon_damage.h b/include/dungeon_damage.h new file mode 100644 index 00000000..e3362de4 --- /dev/null +++ b/include/dungeon_damage.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_DUNGEON_DAMAGE_H +#define PMDSKY_DUNGEON_DAMAGE_H + +#include "dungeon_mode.h" + +s32 WeightWeakTypePicker(struct entity *user, struct entity *target, enum type_id move_type); + +#endif //PMDSKY_DUNGEON_DAMAGE_H diff --git a/include/enums.h b/include/enums.h index b73a5ee1..ef64bc91 100644 --- a/include/enums.h +++ b/include/enums.h @@ -1164,6 +1164,8 @@ enum type_id { TYPE_NEUTRAL = 18, }; +#define NUM_TYPES TYPE_NEUTRAL + // Modes related to shopkeeper behavior enum shopkeeper_mode { SHOPKEEPER_MODE_NORMAL = 0, diff --git a/include/move_orb_effects.h b/include/move_orb_effects.h new file mode 100644 index 00000000..39fb09e2 --- /dev/null +++ b/include/move_orb_effects.h @@ -0,0 +1,16 @@ +#ifndef PMDSKY_MOVE_ORB_EFFECTS_H +#define PMDSKY_MOVE_ORB_EFFECTS_H + +#include "dungeon_mode.h" + +enum flash_fire_status { + FLASH_FIRE_STATUS_NONE = 0, + FLASH_FIRE_STATUS_MAXED = 1, + FLASH_FIRE_STATUS_NOT_MAXED = 2 +}; + +// Checks whether Flash Fire should activate, assuming the defender is being hit by a Fire-type move. +// This checks that the defender is valid and Flash Fire is active, and that Normalize isn't active on the attacker. +enum flash_fire_status FlashFireShouldActivate(struct entity *attacker, struct entity *defender); + +#endif //PMDSKY_MOVE_ORB_EFFECTS_H diff --git a/include/overlay_29_022F9720.h b/include/overlay_29_022F9720.h index bf61f757..7d53ac6c 100644 --- a/include/overlay_29_022F9720.h +++ b/include/overlay_29_022F9720.h @@ -3,6 +3,12 @@ #include "dungeon_mode.h" +// Checks if a defender has an active ability that isn't disabled by an attacker's Mold Breaker. +#ifdef JAPAN +bool8 DefenderAbilityIsActive__022F96CC(struct entity *attacker, struct entity *defender, enum ability_id ability_id); +#else +bool8 DefenderAbilityIsActive__022F96CC(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled); +#endif // Checks if an entity is a monster (entity type 1). bool8 IsMonster__022F9720(struct entity *entity); diff --git a/include/overlay_29_02301A60.h b/include/overlay_29_02301A60.h index 88bcc5d4..f8d25043 100644 --- a/include/overlay_29_02301A60.h +++ b/include/overlay_29_02301A60.h @@ -3,6 +3,12 @@ #include "dungeon_mode.h" +// Checks if a defender has an active ability that isn't disabled by an attacker's Mold Breaker. +#ifdef JAPAN +bool8 DefenderAbilityIsActive__02301A0C(struct entity *attacker, struct entity *defender, enum ability_id ability_id); +#else +bool8 DefenderAbilityIsActive__02301A0C(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled); +#endif // Checks if an entity is a monster (entity type 1). bool8 IsMonster__02301A60(struct entity *entity); diff --git a/include/overlay_29_0230A994.h b/include/overlay_29_0230A994.h index 51b8068a..0360636e 100644 --- a/include/overlay_29_0230A994.h +++ b/include/overlay_29_0230A994.h @@ -3,6 +3,12 @@ #include "dungeon_mode.h" +// Checks if a defender has an active ability that isn't disabled by an attacker's Mold Breaker. +#ifdef JAPAN +bool8 DefenderAbilityIsActive__0230A940(struct entity *attacker, struct entity *defender, enum ability_id ability_id); +#else +bool8 DefenderAbilityIsActive__0230A940(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled); +#endif // Checks if an entity is a monster (entity type 1). bool8 IsMonster__0230A994(struct entity *entity); // Checks if a monster is a team member under the effects of a certain exclusive item effect. diff --git a/include/overlay_29_02311BF8.h b/include/overlay_29_02311BF8.h index 82978e93..03713217 100644 --- a/include/overlay_29_02311BF8.h +++ b/include/overlay_29_02311BF8.h @@ -3,6 +3,12 @@ #include "dungeon_mode.h" +// Checks if a defender has an active ability that isn't disabled by an attacker's Mold Breaker. +#ifdef JAPAN +bool8 DefenderAbilityIsActive__02311B94(struct entity *attacker, struct entity *defender, enum ability_id ability_id); +#else +bool8 DefenderAbilityIsActive__02311B94(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled); +#endif // 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); diff --git a/include/overlay_29_02322DB8.h b/include/overlay_29_02322DB8.h index e6b7268b..1fd5e8e1 100644 --- a/include/overlay_29_02322DB8.h +++ b/include/overlay_29_02322DB8.h @@ -3,6 +3,12 @@ #include "dungeon_mode.h" +// Checks if a defender has an active ability that isn't disabled by an attacker's Mold Breaker. +#ifdef JAPAN +bool8 DefenderAbilityIsActive__02322D64(struct entity *attacker, struct entity *defender, enum ability_id ability_id); +#else +bool8 DefenderAbilityIsActive__02322D64(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled); +#endif // Checks if an entity is a monster (entity type 1). bool8 IsMonster__02322DB8(struct entity *entity); diff --git a/include/overlay_29_023329E8.h b/include/overlay_29_023329E8.h index 2207f7d0..24c31c92 100644 --- a/include/overlay_29_023329E8.h +++ b/include/overlay_29_023329E8.h @@ -5,5 +5,11 @@ // Checks if a monster is a team member under the effects of a certain exclusive item effect. bool8 ExclusiveItemEffectIsActive__023329E8(struct entity *entity, enum exclusive_item_effect_id effect_id); +// Checks if a defender has an active ability that isn't disabled by an attacker's Mold Breaker. +#ifdef JAPAN +bool8 DefenderAbilityIsActive__02332A0C(struct entity *attacker, struct entity *defender, enum ability_id ability_id); +#else +bool8 DefenderAbilityIsActive__02332A0C(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled); +#endif #endif //PMDSKY_OVERLAY_29_023329E8_H diff --git a/include/type_effectiveness.h b/include/type_effectiveness.h new file mode 100644 index 00000000..d0c71dfb --- /dev/null +++ b/include/type_effectiveness.h @@ -0,0 +1,19 @@ +#ifndef PMDSKY_TYPE_EFFECTIVENESS_H +#define PMDSKY_TYPE_EFFECTIVENESS_H + +#include "dungeon_mode.h" + +// Type matchup table, not including TYPE_NEUTRAL. +// Note that Ghost's immunities seem to be hard-coded elsewhere. In this table, both Normal and +// Fighting are encoded as neutral against Ghost. +// +// Row index corresponds to the attack type and the column index corresponds to the defender type. +// C-style access: type_matchup_table[attack_type][target_type] or +// *(&type_matchup_table[0][0] + attack_type*18 + target_type) +struct type_matchup_table { + s16 matchups[NUM_TYPES][NUM_TYPES]; +}; + +s16 GetTypeMatchup(struct entity *attacker, struct entity *defender, s16 target_type_idx, enum type_id attack_type); + +#endif //PMDSKY_TYPE_EFFECTIVENESS_H diff --git a/main.lsf b/main.lsf index 8126dda8..e8b1de41 100644 --- a/main.lsf +++ b/main.lsf @@ -474,6 +474,11 @@ Overlay OVY_29 Object src/overlay_29_0230A994.o Object src/overlay_29_0230A9DC.o Object asm/overlay_29_0230AA0C.o + Object src/type_effectiveness.o + Object asm/overlay_29_0230AD04.o + Object src/dungeon_damage.o + Object asm/overlay_29_rodata_02352894.o + Object asm/overlay_29_0230BBAC.o Object src/overlay_29_0230E578.o Object asm/overlay_29_0230E5A8.o Object src/dungeon_ai_items.o @@ -493,6 +498,8 @@ Overlay OVY_29 Object asm/overlay_29_023118D8.o Object src/overlay_29_02311BF8.o Object asm/overlay_29_02311C28.o + Object src/move_orb_effects.o + Object asm/overlay_29_02313CE4.o Object src/overlay_29_023147EC.o Object asm/overlay_29_02314810.o Object src/overlay_29_02315118.o @@ -562,7 +569,7 @@ Overlay OVY_29 Object src/overlay_29_0232E840.o Object asm/overlay_29_0232E864.o Object src/overlay_29_023329E8.o - Object asm/overlay_29_02332A0C.o + Object asm/overlay_29_02332A70.o Object src/move_checks.o Object src/weather.o Object asm/overlay_29_02334D58.o diff --git a/src/dungeon_ai_attack.c b/src/dungeon_ai_attack.c index 6f5bbc89..84e46fd5 100644 --- a/src/dungeon_ai_attack.c +++ b/src/dungeon_ai_attack.c @@ -4,6 +4,7 @@ #include "dungeon_ai_targeting_1.h" #include "dungeon_capabilities.h" #include "dungeon_capabilities_4.h" +#include "dungeon_damage.h" #include "dungeon_items.h" #include "dungeon_logic.h" #include "dungeon_logic_4.h" @@ -29,8 +30,6 @@ extern u8 AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS[NUM_DIRECTIONS]; extern s32 AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[NUM_DIRECTIONS]; extern struct entity *AI_POTENTIAL_ATTACK_TARGETS[NUM_DIRECTIONS]; -extern s32 WeightWeakTypePicker(struct entity *user, struct entity *target, enum type_id move_type); - void ResetAiCanAttackInDirection() { for (s32 i = 0; i < NUM_DIRECTIONS; i++) diff --git a/src/dungeon_damage.c b/src/dungeon_damage.c new file mode 100644 index 00000000..dc77423d --- /dev/null +++ b/src/dungeon_damage.c @@ -0,0 +1,144 @@ +#include "dungeon_damage.h" +#include "dungeon_logic_3.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_util_static.h" +#include "move_orb_effects.h" +#include "overlay_29_02308FBC.h" +#include "overlay_29_0230A994.h" +#include "overlay_29_02318A4C.h" +#include "weather.h" + +#define NUM_EFFECTIVENESS 4 + +extern enum type_matchup GetTypeMatchup(struct entity *attacker, struct entity *defender, s16 target_type_idx, enum type_id attack_type); +extern bool8 LevitateIsActive(struct entity* entity); +extern bool8 ScrappyShouldActivate(struct entity *attacker, struct entity *defender, enum type_id attack_type); + +// https://decomp.me/scratch/j2xpy +// https://decomp.me/scratch/fk1Fo +s32 WeightWeakTypePicker(struct entity *user, struct entity *target, enum type_id move_type) +{ + s32 weight = 1; + bool8 check_exposed = FALSE; + s32 i; + if (!EntityIsValid__02308FBC(target)) + return 1; + + struct monster *user_data = GetEntInfo(user); + struct monster *target_data = GetEntInfo(target); + if (AbilityIsActiveVeneer(user, ABILITY_NORMALIZE)) + move_type = TYPE_NORMAL; + + if (move_type == TYPE_NORMAL || move_type == TYPE_FIGHTING) + check_exposed = TRUE; + + if (move_type == TYPE_FIRE && FlashFireShouldActivate(user, target) != FLASH_FIRE_STATUS_NONE) + return 0; + +#ifdef JAPAN + if (move_type == TYPE_ELECTRIC && DefenderAbilityIsActive__0230A940(user, target, ABILITY_VOLT_ABSORB)) +#else + if (move_type == TYPE_ELECTRIC && DefenderAbilityIsActive__0230A940(user, target, ABILITY_VOLT_ABSORB, TRUE)) +#endif + return 0; + +#ifdef JAPAN + if (move_type == TYPE_WATER && DefenderAbilityIsActive__0230A940(user, target, ABILITY_WATER_ABSORB)) +#else + if (move_type == TYPE_WATER && DefenderAbilityIsActive__0230A940(user, target, ABILITY_WATER_ABSORB, TRUE)) +#endif + return 0; + + if (move_type == TYPE_GROUND && + ((!AbilityIsActiveVeneer(user, ABILITY_MOLD_BREAKER) && LevitateIsActive(target)) || IsFloating(target))) + return 1; + + bool8 scrappy_active = ScrappyShouldActivate(user, target, move_type); + + for (i = 0; i < 2; i++) + { + s32 effectiveness; + u32 type_effectiveness_multipliers[NUM_EFFECTIVENESS] = {0, 1, 2, 4}; + if (!scrappy_active && check_exposed && target_data->types[i] == TYPE_GHOST && !target_data->exposed) + { + effectiveness = 0; + DUNGEON_PTR[0]->last_damage_calc.ghost_immunity_activated = TRUE; + } + else + effectiveness = GetTypeMatchup(user, target, i, move_type); + + if (weight == 0) + break; + + weight *= type_effectiveness_multipliers[effectiveness]; + weight /= 2; + if (weight == 0) + // BUG: If the Pokémon's first type resists the move, the second type is ignored. + // This calculates type effectiveness incorrectly if the first type resists the move and the second type is weak to the move. + // For example, a Fire-type move is considered not very effective against a Rock/Bug-type like Anorith. + return 2; + } + +#ifdef JAPAN + if ((move_type == TYPE_FIRE || move_type == TYPE_ICE) && DefenderAbilityIsActive__0230A940(user, target, ABILITY_THICK_FAT)) +#else + if ((move_type == TYPE_FIRE || move_type == TYPE_ICE) && DefenderAbilityIsActive__0230A940(user, target, ABILITY_THICK_FAT, TRUE)) +#endif + return 2; + + if (move_type == TYPE_WATER && AbilityIsActiveVeneer(user, ABILITY_TORRENT)) + { + s32 max_hp_stat = MIN(user_data->max_hp_stat + user_data->max_hp_boost, 999); + if (max_hp_stat / 4 >= user_data->hp) + weight *= 2; + } + + if (move_type == TYPE_GRASS && AbilityIsActiveVeneer(user, ABILITY_OVERGROW)) + { + s32 max_hp_stat = MIN(user_data->max_hp_stat + user_data->max_hp_boost, 999); + if (max_hp_stat / 4 >= user_data->hp) + weight *= 2; + } + + if (move_type == TYPE_BUG && AbilityIsActiveVeneer(user, ABILITY_SWARM)) + { + s32 max_hp_stat = MIN(user_data->max_hp_stat + user_data->max_hp_boost, 999); + if (max_hp_stat / 4 >= user_data->hp) + weight *= 2; + } + + if (move_type == TYPE_FIRE && AbilityIsActiveVeneer(user, ABILITY_BLAZE)) + { + s32 max_hp_stat = MIN(user_data->max_hp_stat + user_data->max_hp_boost, 999); + if (max_hp_stat / 4 >= user_data->hp) + weight *= 2; + } + + if (weight == 0) + return 2; + + if (MonsterIsType(user, move_type)) + weight *= 2; + + if (GetApparentWeather(user) == WEATHER_SUNNY) + { + if (move_type == TYPE_FIRE) + weight *= 2; + else if (move_type == TYPE_WATER) + return 2; + } + + if (DUNGEON_PTR[0]->weather.mud_sport_turns != 0 && move_type == TYPE_ELECTRIC) + return 2; + + if (DUNGEON_PTR[0]->weather.water_sport_turns != 0 && move_type == TYPE_FIRE) + return 2; + + if (move_type == TYPE_ELECTRIC && user_data->bide_class_status.bide == STATUS_TWO_TURN_CHARGING) + weight *= 2; + + if (weight >= 3) + weight = 3; + + return weight + 2; +} diff --git a/src/move_orb_effects.c b/src/move_orb_effects.c new file mode 100644 index 00000000..146d110f --- /dev/null +++ b/src/move_orb_effects.c @@ -0,0 +1,26 @@ +#include "move_orb_effects.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_util_static.h" +#include "overlay_29_023118B4.h" +#include "overlay_29_02311BF8.h" + +enum flash_fire_status FlashFireShouldActivate(struct entity *attacker, struct entity *defender) +{ + if (!EntityIsValid__023118B4(defender)) + return FLASH_FIRE_STATUS_NONE; + + if (AbilityIsActiveVeneer(attacker, ABILITY_NORMALIZE)) + return FLASH_FIRE_STATUS_NONE; + +#ifdef JAPAN + if (!DefenderAbilityIsActive__02311B94(attacker, defender, ABILITY_FLASH_FIRE)) +#else + if (!DefenderAbilityIsActive__02311B94(attacker, defender, ABILITY_FLASH_FIRE, TRUE)) +#endif + return FLASH_FIRE_STATUS_NONE; + + if (GetEntInfo(defender)->stat_modifiers.flash_fire_boost >= 2) + return FLASH_FIRE_STATUS_MAXED; + + return FLASH_FIRE_STATUS_NOT_MAXED; +} diff --git a/src/overlay_29_022F9720.c b/src/overlay_29_022F9720.c index 3160106e..c95548a3 100644 --- a/src/overlay_29_022F9720.c +++ b/src/overlay_29_022F9720.c @@ -1,6 +1,24 @@ #include "overlay_29_022F9720.h" +#include "dungeon_pokemon_attributes.h" #include "dungeon_util_static.h" +#ifdef JAPAN +bool8 DefenderAbilityIsActive__022F96CC(struct entity *attacker, struct entity *defender, enum ability_id ability_id) +#else +bool8 DefenderAbilityIsActive__022F96CC(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled) +#endif +{ + if (attacker != defender && + IsMonster__022F9720(attacker) && +#ifndef JAPAN + attacker_ability_enabled && +#endif + AbilityIsActiveVeneer(attacker, ABILITY_MOLD_BREAKER)) + return FALSE; + + return AbilityIsActiveVeneer(defender, ability_id); +} + bool8 IsMonster__022F9720(struct entity *entity) { if (entity == NULL) diff --git a/src/overlay_29_02301A60.c b/src/overlay_29_02301A60.c index cbfeea33..6b45510b 100644 --- a/src/overlay_29_02301A60.c +++ b/src/overlay_29_02301A60.c @@ -1,5 +1,23 @@ #include "overlay_29_02301A60.h" #include "dungeon_util_static.h" +#include "dungeon_pokemon_attributes.h" + +#ifdef JAPAN +bool8 DefenderAbilityIsActive__02301A0C(struct entity *attacker, struct entity *defender, enum ability_id ability_id) +#else +bool8 DefenderAbilityIsActive__02301A0C(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled) +#endif +{ + if (attacker != defender && + IsMonster__02301A60(attacker) && +#ifndef JAPAN + attacker_ability_enabled && +#endif + AbilityIsActive(attacker, ABILITY_MOLD_BREAKER)) + return FALSE; + + return AbilityIsActive(defender, ability_id); +} bool8 IsMonster__02301A60(struct entity *entity) { diff --git a/src/overlay_29_0230A994.c b/src/overlay_29_0230A994.c index 3009fd2d..c1d278ad 100644 --- a/src/overlay_29_0230A994.c +++ b/src/overlay_29_0230A994.c @@ -1,7 +1,25 @@ #include "overlay_29_0230A994.h" +#include "dungeon_pokemon_attributes.h" #include "dungeon_util_static.h" #include "exclusive_item.h" +#ifdef JAPAN +bool8 DefenderAbilityIsActive__0230A940(struct entity *attacker, struct entity *defender, enum ability_id ability_id) +#else +bool8 DefenderAbilityIsActive__0230A940(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled) +#endif +{ + if (attacker != defender && + IsMonster__0230A994(attacker) && +#ifndef JAPAN + attacker_ability_enabled && +#endif + AbilityIsActiveVeneer(attacker, ABILITY_MOLD_BREAKER)) + return FALSE; + + return AbilityIsActiveVeneer(defender, ability_id); +} + bool8 IsMonster__0230A994(struct entity *entity) { if (entity == NULL) diff --git a/src/overlay_29_02311BF8.c b/src/overlay_29_02311BF8.c index 6a5224cd..33f1cbeb 100644 --- a/src/overlay_29_02311BF8.c +++ b/src/overlay_29_02311BF8.c @@ -1,6 +1,31 @@ #include "overlay_29_02311BF8.h" #include "dungeon_items.h" #include "dungeon_pokemon_attributes.h" +#include "dungeon_util_static.h" + +#ifdef JAPAN +bool8 DefenderAbilityIsActive__02311B94(struct entity *attacker, struct entity *defender, enum ability_id ability_id) +#else +bool8 DefenderAbilityIsActive__02311B94(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled) +#endif +{ + if (attacker != defender) + { + bool8 is_monster; + if (attacker == NULL) + is_monster = FALSE; + else + is_monster = GetEntityType(attacker) == ENTITY_MONSTER; + if (is_monster && +#ifndef JAPAN + attacker_ability_enabled && +#endif + AbilityIsActiveVeneer(attacker, ABILITY_MOLD_BREAKER)) + return FALSE; + } + + return AbilityIsActiveVeneer(defender, ability_id); +} bool8 ItemIsActive__02311BF8(struct entity *entity, enum item_id item_id) { diff --git a/src/overlay_29_02322DB8.c b/src/overlay_29_02322DB8.c index 3c668291..e903466f 100644 --- a/src/overlay_29_02322DB8.c +++ b/src/overlay_29_02322DB8.c @@ -1,6 +1,24 @@ #include "overlay_29_02322DB8.h" +#include "dungeon_pokemon_attributes.h" #include "dungeon_util_static.h" +#ifdef JAPAN +bool8 DefenderAbilityIsActive__02322D64(struct entity *attacker, struct entity *defender, enum ability_id ability_id) +#else +bool8 DefenderAbilityIsActive__02322D64(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled) +#endif +{ + if (attacker != defender && + IsMonster__02322DB8(attacker) && +#ifndef JAPAN + attacker_ability_enabled && +#endif + AbilityIsActiveVeneer(attacker, ABILITY_MOLD_BREAKER)) + return FALSE; + + return AbilityIsActiveVeneer(defender, ability_id); +} + bool8 IsMonster__02322DB8(struct entity *entity) { if (entity == NULL) diff --git a/src/overlay_29_023329E8.c b/src/overlay_29_023329E8.c index c38a137d..f895b130 100644 --- a/src/overlay_29_023329E8.c +++ b/src/overlay_29_023329E8.c @@ -1,4 +1,5 @@ #include "overlay_29_023329E8.h" +#include "dungeon_pokemon_attributes.h" #include "dungeon_util_static.h" #include "exclusive_item.h" @@ -10,3 +11,27 @@ bool8 ExclusiveItemEffectIsActive__023329E8(struct entity *entity, enum exclusiv return FALSE; } + +#ifdef JAPAN +bool8 DefenderAbilityIsActive__02332A0C(struct entity *attacker, struct entity *defender, enum ability_id ability_id) +#else +bool8 DefenderAbilityIsActive__02332A0C(struct entity *attacker, struct entity *defender, enum ability_id ability_id, bool8 attacker_ability_enabled) +#endif +{ + if (attacker != defender) + { + bool8 is_monster; + if (attacker == NULL) + is_monster = FALSE; + else + is_monster = GetEntityType(attacker) == ENTITY_MONSTER; + if (is_monster && +#ifndef JAPAN + attacker_ability_enabled && +#endif + AbilityIsActiveVeneer(attacker, ABILITY_MOLD_BREAKER)) + return FALSE; + } + + return AbilityIsActiveVeneer(defender, ability_id); +} diff --git a/src/type_effectiveness.c b/src/type_effectiveness.c new file mode 100644 index 00000000..8e07184c --- /dev/null +++ b/src/type_effectiveness.c @@ -0,0 +1,27 @@ +#include "type_effectiveness.h" +#include "dungeon_util_static.h" +#include "overlay_29_0230A994.h" +#include "overlay_29_02318A4C.h" +#include "overlay_29_02338390.h" + +extern struct type_matchup_table TYPE_MATCHUP_TABLE; + +s16 GetTypeMatchup(struct entity *attacker, struct entity *defender, s16 target_type_idx, enum type_id attack_type) +{ + struct monster *defender_monster = GetEntInfo(defender); + if ((defender_monster->miracle_eye == 1 || ExclusiveItemEffectIsActive__0230A9B8(attacker, EXCLUSIVE_EFF_MIRACLE_EYE)) && attack_type == TYPE_PSYCHIC && defender_monster->types[target_type_idx] == TYPE_DARK) + return MATCHUP_NEUTRAL; + + if (attack_type == TYPE_GROUND) + { + if (GravityIsActive()) + { + if (defender_monster->types[target_type_idx] == TYPE_FLYING) + return MATCHUP_NEUTRAL; + } + else if (IsFloating(defender)) + return MATCHUP_IMMUNE; + } + + return TYPE_MATCHUP_TABLE.matchups[attack_type][defender_monster->types[target_type_idx]]; +}