func CanBreakThroughAbility
This commit is contained in:
parent
89563cb9b1
commit
dfd63fd34f
@ -6216,11 +6216,22 @@ bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability)
|
|||||||
|| (ability == ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)));
|
|| (ability == ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 ability)
|
||||||
|
{
|
||||||
|
return ((IsMoldBreakerTypeAbility(battlerAtk, ability) || gMovesInfo[gCurrentMove].ignoresTargetAbility)
|
||||||
|
&& battlerDef != battlerAtk
|
||||||
|
&& gAbilitiesInfo[gBattleMons[battlerDef].ability].breakable
|
||||||
|
&& gBattlerByTurnOrder[gCurrentTurnActionNumber] == battlerAtk
|
||||||
|
&& gActionsByTurnOrder[gCurrentTurnActionNumber] == B_ACTION_USE_MOVE
|
||||||
|
&& gCurrentTurnActionNumber < gBattlersCount);
|
||||||
|
}
|
||||||
|
|
||||||
u32 GetBattlerAbility(u32 battler)
|
u32 GetBattlerAbility(u32 battler)
|
||||||
{
|
{
|
||||||
bool32 noAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD;
|
bool32 noAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD;
|
||||||
|
bool32 abilityCantBeSuppressed = gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed;
|
||||||
|
|
||||||
if (gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed)
|
if (abilityCantBeSuppressed)
|
||||||
{
|
{
|
||||||
// Edge case: pokemon under the effect of gastro acid transforms into a pokemon with Comatose (Todo: verify how other unsuppressable abilities behave)
|
// Edge case: pokemon under the effect of gastro acid transforms into a pokemon with Comatose (Todo: verify how other unsuppressable abilities behave)
|
||||||
if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED
|
if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED
|
||||||
@ -6228,8 +6239,10 @@ u32 GetBattlerAbility(u32 battler)
|
|||||||
&& gBattleMons[battler].ability == ABILITY_COMATOSE)
|
&& gBattleMons[battler].ability == ABILITY_COMATOSE)
|
||||||
return ABILITY_NONE;
|
return ABILITY_NONE;
|
||||||
|
|
||||||
if (!gAbilitiesInfo[gBattleMons[battler].ability].breakable)
|
if (CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
|
||||||
return gBattleMons[battler].ability;
|
return ABILITY_NONE;
|
||||||
|
|
||||||
|
return gBattleMons[battler].ability;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gStatuses3[battler] & STATUS3_GASTRO_ACID)
|
if (gStatuses3[battler] & STATUS3_GASTRO_ACID)
|
||||||
@ -6240,13 +6253,7 @@ u32 GetBattlerAbility(u32 battler)
|
|||||||
&& noAbilityShield)
|
&& noAbilityShield)
|
||||||
return ABILITY_NONE;
|
return ABILITY_NONE;
|
||||||
|
|
||||||
if ((IsMoldBreakerTypeAbility(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability) || gMovesInfo[gCurrentMove].ignoresTargetAbility)
|
if (noAbilityShield && CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
|
||||||
&& battler != gBattlerAttacker
|
|
||||||
&& gAbilitiesInfo[gBattleMons[battler].ability].breakable
|
|
||||||
&& noAbilityShield
|
|
||||||
&& gBattlerByTurnOrder[gCurrentTurnActionNumber] == gBattlerAttacker
|
|
||||||
&& gActionsByTurnOrder[gCurrentTurnActionNumber] == B_ACTION_USE_MOVE
|
|
||||||
&& gCurrentTurnActionNumber < gBattlersCount)
|
|
||||||
return ABILITY_NONE;
|
return ABILITY_NONE;
|
||||||
|
|
||||||
return gBattleMons[battler].ability;
|
return gBattleMons[battler].ability;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user