Fix field abilities activating when an other mon switches in (#8743)

This commit is contained in:
Alex 2026-01-06 16:04:11 +01:00 committed by GitHub
parent ec0db10694
commit 2183fa748a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 43 additions and 1 deletions

View File

@ -1846,7 +1846,7 @@ static void TryClearChargeVolatile(enum Type moveType)
for (u32 battler = 0; battler < gBattlersCount; battler++)
{
if (gBattleMons[battler].volatiles.chargeTimer == 2) // Has been set this turn by move
if (gBattleMons[battler].volatiles.chargeTimer == 2) // Has been set this turn by move or ability
gBattleMons[battler].volatiles.chargeTimer--;
}
}

View File

@ -4580,6 +4580,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_DRIZZLE:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_RAIN, gLastUsedAbility))
{
BattleScriptCall(BattleScript_WeatherAbilityActivates);
@ -4592,6 +4594,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_SAND_STREAM:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SANDSTORM, gLastUsedAbility))
{
BattleScriptCall(BattleScript_WeatherAbilityActivates);
@ -4605,6 +4609,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
break;
case ABILITY_ORICHALCUM_PULSE:
case ABILITY_DROUGHT:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN, gLastUsedAbility))
{
BattleScriptCall(BattleScript_WeatherAbilityActivates);
@ -4617,6 +4623,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_SNOW_WARNING:
if (!shouldAbilityTrigger)
break;
{
u32 weather = (GetConfig(CONFIG_SNOW_WARNING) >= GEN_9 ? BATTLE_WEATHER_SNOW : BATTLE_WEATHER_HAIL);
if (TryChangeBattleWeather(battler, weather, gLastUsedAbility))
@ -4633,6 +4641,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
break;
case ABILITY_ELECTRIC_SURGE:
case ABILITY_HADRON_ENGINE:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN))
{
BattleScriptCall(BattleScript_ElectricSurgeActivates);
@ -4640,6 +4650,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_GRASSY_SURGE:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleTerrain(battler, STATUS_FIELD_GRASSY_TERRAIN))
{
BattleScriptCall(BattleScript_GrassySurgeActivates);
@ -4647,6 +4659,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_MISTY_SURGE:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleTerrain(battler, STATUS_FIELD_MISTY_TERRAIN))
{
BattleScriptCall(BattleScript_MistySurgeActivates);
@ -4654,6 +4668,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_PSYCHIC_SURGE:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleTerrain(battler, STATUS_FIELD_PSYCHIC_TERRAIN))
{
BattleScriptCall(BattleScript_PsychicSurgeActivates);
@ -4748,6 +4764,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_DESOLATE_LAND:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN_PRIMAL, gLastUsedAbility))
{
BattleScriptCall(BattleScript_WeatherAbilityActivates);
@ -4755,6 +4773,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_PRIMORDIAL_SEA:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_RAIN_PRIMAL, gLastUsedAbility))
{
BattleScriptCall(BattleScript_WeatherAbilityActivates);
@ -4762,6 +4782,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
}
break;
case ABILITY_DELTA_STREAM:
if (!shouldAbilityTrigger)
break;
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_STRONG_WINDS, gLastUsedAbility))
{
BattleScriptCall(BattleScript_WeatherAbilityActivates);

View File

@ -247,3 +247,23 @@ ONE_VS_TWO_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO
}
}
}
DOUBLE_BATTLE_TEST("Status setting abilities don't re-activate when a new mon switches in")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { ABILITY_POPUP(opponentRight, ABILITY_ELECTRIC_SURGE); }
TURN {}
TURN {}
TURN {}
TURN {}
TURN { SWITCH(opponentLeft, 2); NOT ABILITY_POPUP(opponentRight, ABILITY_ELECTRIC_SURGE); }
} THEN {
EXPECT(!(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN));
}
}