Fixes Wonder Room interactions with Defense/Special Defense boosting effects (#7626)
This commit is contained in:
parent
2fbf45d057
commit
f0bd3d544e
@ -8865,6 +8865,14 @@ static inline u32 CalcAttackStat(struct DamageCalculationData *damageCalcData, u
|
||||
RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT);
|
||||
}
|
||||
break;
|
||||
case ABILITY_PURIFYING_SALT:
|
||||
if (moveType == TYPE_GHOST)
|
||||
{
|
||||
modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5));
|
||||
if (damageCalcData->updateFlags)
|
||||
RecordAbilityBattle(battlerDef, ABILITY_PURIFYING_SALT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// ally's abilities
|
||||
@ -8947,31 +8955,38 @@ static inline u32 CalcDefenseStat(struct DamageCalculationData *damageCalcData,
|
||||
uq4_12_t modifier;
|
||||
u32 battlerDef = damageCalcData->battlerDef;
|
||||
u32 move = damageCalcData->move;
|
||||
u32 moveType = damageCalcData->moveType;
|
||||
enum BattleMoveEffects moveEffect = GetMoveEffect(move);
|
||||
|
||||
if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped
|
||||
{
|
||||
def = gBattleMons[battlerDef].spDefense;
|
||||
spDef = gBattleMons[battlerDef].defense;
|
||||
}
|
||||
else
|
||||
{
|
||||
def = gBattleMons[battlerDef].defense;
|
||||
spDef = gBattleMons[battlerDef].spDefense;
|
||||
}
|
||||
def = gBattleMons[battlerDef].defense;
|
||||
spDef = gBattleMons[battlerDef].spDefense;
|
||||
|
||||
if (moveEffect == EFFECT_PSYSHOCK || IsBattleMovePhysical(move)) // uses defense stat instead of sp.def
|
||||
{
|
||||
defStat = def;
|
||||
if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped
|
||||
{
|
||||
defStat = spDef;
|
||||
usesDefStat = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
defStat = def;
|
||||
usesDefStat = TRUE;
|
||||
}
|
||||
defStage = gBattleMons[battlerDef].statStages[STAT_DEF];
|
||||
usesDefStat = TRUE;
|
||||
}
|
||||
else // is special
|
||||
{
|
||||
defStat = spDef;
|
||||
if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped
|
||||
{
|
||||
defStat = def;
|
||||
usesDefStat = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
defStat = spDef;
|
||||
usesDefStat = FALSE;
|
||||
}
|
||||
defStage = gBattleMons[battlerDef].statStages[STAT_SPDEF];
|
||||
usesDefStat = FALSE;
|
||||
}
|
||||
|
||||
// Self-destruct / Explosion cut defense in half
|
||||
@ -9025,10 +9040,6 @@ static inline u32 CalcDefenseStat(struct DamageCalculationData *damageCalcData,
|
||||
if (gBattleMons[battlerDef].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat)
|
||||
modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5));
|
||||
break;
|
||||
case ABILITY_PURIFYING_SALT:
|
||||
if (moveType == TYPE_GHOST)
|
||||
modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0));
|
||||
break;
|
||||
}
|
||||
|
||||
// ally's abilities
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user