New function to check ability stat loss
This commit is contained in:
parent
f3580aa3f5
commit
ab6c5bafe9
2 changed files with 22 additions and 10 deletions
|
@ -355,6 +355,7 @@ static void TryUpdateRoundTurnOrder(void);
|
|||
static bool32 ChangeOrderTargetAfterAttacker(void);
|
||||
void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler);
|
||||
static void RemoveAllTerrains(void);
|
||||
static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 isIntimidate);
|
||||
|
||||
static void Cmd_attackcanceler(void);
|
||||
static void Cmd_accuracycheck(void);
|
||||
|
@ -11390,15 +11391,8 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr
|
|||
gBattlescriptCurrInstr = BattleScript_ButItFailed;
|
||||
return STAT_CHANGE_DIDNT_WORK;
|
||||
}
|
||||
else if (((battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET
|
||||
|| battlerAbility == ABILITY_CLEAR_BODY
|
||||
|| battlerAbility == ABILITY_FULL_METAL_BODY
|
||||
|| battlerAbility == ABILITY_WHITE_SMOKE)
|
||||
|| ((B_UPDATED_INTIMIDATE >= GEN_8) && statId == STAT_ATK
|
||||
&& (battlerAbility == ABILITY_INNER_FOCUS
|
||||
|| battlerAbility == ABILITY_SCRAPPY
|
||||
|| battlerAbility == ABILITY_OWN_TEMPO
|
||||
|| battlerAbility == ABILITY_OBLIVIOUS)))
|
||||
else if ((battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET
|
||||
|| CanAbilityPreventStatLoss(battlerAbility, GetBattlerAbility(gBattlerAttacker) == ABILITY_INTIMIDATE))
|
||||
&& (!affectsUser || mirrorArmored) && !certain && gCurrentMove != MOVE_CURSE)
|
||||
{
|
||||
if (flags == STAT_CHANGE_ALLOW_PTR)
|
||||
|
@ -15703,6 +15697,25 @@ static bool8 IsFinalStrikeEffect(u16 move)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 isIntimidate)
|
||||
{
|
||||
switch (abilityDef)
|
||||
{
|
||||
case ABILITY_CLEAR_BODY:
|
||||
case ABILITY_FULL_METAL_BODY:
|
||||
case ABILITY_WHITE_SMOKE:
|
||||
return TRUE;
|
||||
case ABILITY_INNER_FOCUS:
|
||||
case ABILITY_SCRAPPY:
|
||||
case ABILITY_OWN_TEMPO:
|
||||
case ABILITY_OBLIVIOUS:
|
||||
if (isIntimidate && (B_UPDATED_INTIMIDATE >= GEN_8))
|
||||
return TRUE;
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void BS_CheckParentalBondCounter(void)
|
||||
{
|
||||
NATIVE_ARGS(u8 counter, const u8 *jumpInstr);
|
||||
|
|
|
@ -2792,7 +2792,6 @@ u8 DoBattlerEndTurnEffects(void)
|
|||
break;
|
||||
case ENDTURN_OCTOLOCK:
|
||||
{
|
||||
u16 battlerAbility = GetBattlerAbility(battler);
|
||||
if (gDisableStructs[battler].octolock)
|
||||
{
|
||||
gBattlerTarget = battler;
|
||||
|
|
Loading…
Reference in a new issue