|
|
|
|
@@ -4465,8 +4465,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT)
|
|
|
|
|
&& IsBattlerAlive(gBattlerAttacker)
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker)
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move)
|
|
|
|
|
&& gDisableStructs[gBattlerAttacker].overwrittenAbility != GetBattlerAbility(gBattlerTarget)
|
|
|
|
|
&& gBattleMons[gBattlerAttacker].ability != ABILITY_MUMMY
|
|
|
|
|
&& gBattleMons[gBattlerAttacker].ability != ABILITY_LINGERING_AROMA
|
|
|
|
|
@@ -4490,8 +4489,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT)
|
|
|
|
|
&& IsBattlerAlive(gBattlerAttacker)
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker)
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move)
|
|
|
|
|
&& !(GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)
|
|
|
|
|
&& !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSwapped)
|
|
|
|
|
{
|
|
|
|
|
@@ -4547,8 +4545,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
&& (CompareStat(gBattlerAttacker, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN) || GetBattlerAbility(gBattlerAttacker) == ABILITY_MIRROR_ARMOR)
|
|
|
|
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker))
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move))
|
|
|
|
|
{
|
|
|
|
|
SET_STATCHANGER(STAT_SPEED, 1, TRUE);
|
|
|
|
|
PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
|
|
|
|
|
@@ -4564,8 +4561,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
&& IsBattlerAlive(gBattlerAttacker)
|
|
|
|
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker))
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move))
|
|
|
|
|
{
|
|
|
|
|
gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / (B_ROUGH_SKIN_DMG >= GEN_4 ? 8 : 16);
|
|
|
|
|
if (gBattleStruct->moveDamage[gBattlerAttacker] == 0)
|
|
|
|
|
@@ -4580,8 +4576,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
|
|
|
|
|
&& !IsBattlerAlive(gBattlerTarget)
|
|
|
|
|
&& IsBattlerAlive(gBattlerAttacker)
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker))
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move))
|
|
|
|
|
{
|
|
|
|
|
if ((battler = IsAbilityOnField(ABILITY_DAMP)))
|
|
|
|
|
{
|
|
|
|
|
@@ -4650,8 +4645,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& CanBeSlept(gBattlerAttacker, gBattlerTarget, ability, NOT_BLOCKED_BY_SLEEP_CLAUSE)
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker))
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move))
|
|
|
|
|
{
|
|
|
|
|
if (IsSleepClauseEnabled())
|
|
|
|
|
gBattleStruct->battlerState[gBattlerAttacker].sleepClauseEffectExempt = TRUE;
|
|
|
|
|
@@ -4674,8 +4668,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& CanBePoisoned(gBattlerTarget, gBattlerAttacker, gLastUsedAbility, GetBattlerAbility(gBattlerAttacker))
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker))
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move))
|
|
|
|
|
{
|
|
|
|
|
gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON;
|
|
|
|
|
PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
|
|
|
|
|
@@ -4695,8 +4688,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& CanBeParalyzed(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker))
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move))
|
|
|
|
|
{
|
|
|
|
|
gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS;
|
|
|
|
|
PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
|
|
|
|
|
@@ -4711,8 +4703,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
|
|
|
|
|
&& IsBattlerAlive(gBattlerAttacker)
|
|
|
|
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& (IsMoveMakingContact(move, gBattlerAttacker))
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move)
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& CanBeBurned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))
|
|
|
|
|
&& (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3)))
|
|
|
|
|
@@ -4735,8 +4726,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
&& !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
|
|
|
|
|
&& AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)
|
|
|
|
|
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker)
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move)
|
|
|
|
|
&& !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL))
|
|
|
|
|
{
|
|
|
|
|
gBattleMons[gBattlerAttacker].status2 |= STATUS2_INFATUATED_WITH(gBattlerTarget);
|
|
|
|
|
@@ -4806,8 +4796,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& IsBattlerAlive(battler)
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& (IsMoveMakingContact(move, gBattlerAttacker))
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move)
|
|
|
|
|
&& !(gStatuses3[gBattlerAttacker] & STATUS3_PERISH_SONG))
|
|
|
|
|
{
|
|
|
|
|
if (!(gStatuses3[battler] & STATUS3_PERISH_SONG))
|
|
|
|
|
@@ -4932,8 +4921,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|
|
|
|
&& IsBattlerAlive(gBattlerTarget)
|
|
|
|
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
|
|
|
|
&& CanBePoisoned(gBattlerAttacker, gBattlerTarget, gLastUsedAbility, GetBattlerAbility(gBattlerTarget))
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(move, gBattlerAttacker)
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move)
|
|
|
|
|
&& IsBattlerTurnDamaged(gBattlerTarget) // Need to actually hit the target
|
|
|
|
|
&& RandomPercentage(RNG_POISON_TOUCH, 30))
|
|
|
|
|
{
|
|
|
|
|
@@ -7191,8 +7179,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
|
|
|
|
break;
|
|
|
|
|
case HOLD_EFFECT_ROCKY_HELMET:
|
|
|
|
|
if (IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(gCurrentMove, gBattlerAttacker)
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), gCurrentMove)
|
|
|
|
|
&& IsBattlerAlive(gBattlerAttacker)
|
|
|
|
|
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
|
|
|
|
|
{
|
|
|
|
|
@@ -7324,8 +7311,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
|
|
|
|
case HOLD_EFFECT_STICKY_BARB:
|
|
|
|
|
if (IsBattlerTurnDamaged(gBattlerTarget)
|
|
|
|
|
&& !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
|
|
|
|
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
|
|
|
|
&& IsMoveMakingContact(gCurrentMove, gBattlerAttacker)
|
|
|
|
|
&& !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), gCurrentMove)
|
|
|
|
|
&& !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove)
|
|
|
|
|
&& IsBattlerAlive(gBattlerAttacker)
|
|
|
|
|
&& CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item)
|
|
|
|
|
@@ -7691,26 +7677,35 @@ u32 GetBattlerHoldEffectParam(u32 battler)
|
|
|
|
|
return GetItemHoldEffectParam(gBattleMons[battler].item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool32 IsMoveMakingContact(u32 move, u32 battlerAtk)
|
|
|
|
|
bool32 CanBattlerAvoidContactEffects(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, enum ItemHoldEffect holdEffectAtk, u32 move)
|
|
|
|
|
{
|
|
|
|
|
enum ItemHoldEffect atkHoldEffect = GetBattlerHoldEffect(battlerAtk, TRUE);
|
|
|
|
|
|
|
|
|
|
if (!MoveMakesContact(move))
|
|
|
|
|
if (holdEffectAtk == HOLD_EFFECT_PROTECTIVE_PADS)
|
|
|
|
|
{
|
|
|
|
|
if (GetMoveEffect(move) == EFFECT_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][gBattlerTarget] == DAMAGE_CATEGORY_PHYSICAL)
|
|
|
|
|
return TRUE;
|
|
|
|
|
else
|
|
|
|
|
return FALSE;
|
|
|
|
|
RecordItemEffectBattle(battlerAtk, HOLD_EFFECT_PROTECTIVE_PADS);
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
else if ((atkHoldEffect == HOLD_EFFECT_PUNCHING_GLOVE && IsPunchingMove(move))
|
|
|
|
|
|| GetBattlerAbility(battlerAtk) == ABILITY_LONG_REACH)
|
|
|
|
|
|
|
|
|
|
return !IsMoveMakingContact(battlerAtk, battlerDef, abilityAtk, holdEffectAtk, move);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool32 IsMoveMakingContact(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, enum ItemHoldEffect holdEffectAtk, u32 move)
|
|
|
|
|
{
|
|
|
|
|
if (!(MoveMakesContact(move) || (GetMoveEffect(move) == EFFECT_SHELL_SIDE_ARM
|
|
|
|
|
&& gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL)))
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
else if (holdEffectAtk == HOLD_EFFECT_PUNCHING_GLOVE && IsPunchingMove(move))
|
|
|
|
|
{
|
|
|
|
|
return TRUE;
|
|
|
|
|
RecordItemEffectBattle(battlerAtk, HOLD_EFFECT_PUNCHING_GLOVE);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
else if (abilityAtk == ABILITY_LONG_REACH)
|
|
|
|
|
{
|
|
|
|
|
RecordAbilityBattle(battlerAtk, ABILITY_LONG_REACH);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline bool32 IsSideProtected(u32 battler, enum ProtectMethod method)
|
|
|
|
|
@@ -7729,7 +7724,8 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move)
|
|
|
|
|
{
|
|
|
|
|
if (IsZMove(move) || IsMaxMove(move))
|
|
|
|
|
return FALSE; // Z-Moves and Max Moves bypass protection (except Max Guard).
|
|
|
|
|
if (IsMoveMakingContact(move, battlerAtk) && GetBattlerAbility(battlerAtk) == ABILITY_UNSEEN_FIST)
|
|
|
|
|
if (GetBattlerAbility(battlerAtk) == ABILITY_UNSEEN_FIST
|
|
|
|
|
&& IsMoveMakingContact(battlerAtk, battlerDef, ABILITY_UNSEEN_FIST, GetBattlerHoldEffect(battlerAtk, TRUE), move))
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -8431,7 +8427,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageCalculationData *
|
|
|
|
|
modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
|
|
|
|
|
break;
|
|
|
|
|
case ABILITY_TOUGH_CLAWS:
|
|
|
|
|
if (IsMoveMakingContact(move, battlerAtk))
|
|
|
|
|
if (IsMoveMakingContact(battlerAtk, battlerDef, atkAbility, holdEffectAtk, move))
|
|
|
|
|
modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
|
|
|
|
|
break;
|
|
|
|
|
case ABILITY_STRONG_JAW:
|
|
|
|
|
@@ -9242,7 +9238,7 @@ static inline uq4_12_t GetAttackerAbilitiesModifier(u32 battlerAtk, uq4_12_t typ
|
|
|
|
|
return UQ_4_12(1.0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline uq4_12_t GetDefenderAbilitiesModifier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, uq4_12_t typeEffectivenessModifier, u32 abilityDef)
|
|
|
|
|
static inline uq4_12_t GetDefenderAbilitiesModifier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, uq4_12_t typeEffectivenessModifier, u32 abilityDef, enum ItemHoldEffect holdEffectAtk)
|
|
|
|
|
{
|
|
|
|
|
switch (abilityDef)
|
|
|
|
|
{
|
|
|
|
|
@@ -9258,9 +9254,9 @@ static inline uq4_12_t GetDefenderAbilitiesModifier(u32 move, u32 moveType, u32
|
|
|
|
|
return UQ_4_12(0.75);
|
|
|
|
|
break;
|
|
|
|
|
case ABILITY_FLUFFY:
|
|
|
|
|
if (!IsMoveMakingContact(move, battlerAtk) && moveType == TYPE_FIRE)
|
|
|
|
|
if (moveType == TYPE_FIRE && !IsMoveMakingContact(battlerAtk, battlerDef, ABILITY_NONE, holdEffectAtk, move))
|
|
|
|
|
return UQ_4_12(2.0);
|
|
|
|
|
if (IsMoveMakingContact(move, battlerAtk) && moveType != TYPE_FIRE)
|
|
|
|
|
if (moveType != TYPE_FIRE && IsMoveMakingContact(battlerAtk, battlerDef, ABILITY_NONE, holdEffectAtk, move))
|
|
|
|
|
return UQ_4_12(0.5);
|
|
|
|
|
break;
|
|
|
|
|
case ABILITY_PUNK_ROCK:
|
|
|
|
|
@@ -9375,14 +9371,14 @@ static inline uq4_12_t GetOtherModifiers(struct DamageCalculationData *damageCal
|
|
|
|
|
if (unmodifiedAttackerSpeed >= unmodifiedDefenderSpeed)
|
|
|
|
|
{
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetAttackerAbilitiesModifier(battlerAtk, typeEffectivenessModifier, isCrit, abilityAtk));
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier, abilityDef));
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier, abilityDef, holdEffectAtk));
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner));
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetAttackerItemsModifier(battlerAtk, typeEffectivenessModifier, holdEffectAtk));
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(damageCalcData, typeEffectivenessModifier, abilityDef, holdEffectDef));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier, abilityDef));
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier, abilityDef, holdEffectAtk));
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner));
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetAttackerAbilitiesModifier(battlerAtk, typeEffectivenessModifier, isCrit, abilityAtk));
|
|
|
|
|
DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(damageCalcData, typeEffectivenessModifier, abilityDef, holdEffectDef));
|
|
|
|
|
|