diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f9320a77d5..1c4b82883f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8629,6 +8629,7 @@ BattleScript_TerrainSeedLoop_NextBattler: addbyte gBattlerTarget, 0x1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TerrainSeedLoopIter restoretarget + call BattleScript_ActivateSwitchInAbilities return BattleScript_ActivateSwitchInAbilities: diff --git a/src/battle_main.c b/src/battle_main.c index 56b009cbb7..ab3ce58be6 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3720,6 +3720,10 @@ static void TryDoEventsBeforeFirstTurn(void) gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter++]; if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0) return; + if (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT && AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, gActiveBattler, 0, 0, 0) != 0) + return; + if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, gActiveBattler, 0, 0, 0) != 0) + return; } if (AbilityBattleEffects(ABILITYEFFECT_TRACE1, 0, 0, 0, 0) != 0) return; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 26c82fc748..aad5b763a1 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6785,6 +6785,7 @@ static void Cmd_switchineffects(void) gDisableStructs[gActiveBattler].truantSwitchInHack = 0; if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0) + || (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT && AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, gActiveBattler, 0, 0, 0)) || (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, gActiveBattler, 0, 0, 0)) || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE) || AbilityBattleEffects(ABILITYEFFECT_TRACE2, 0, 0, 0, 0) diff --git a/src/battle_util.c b/src/battle_util.c index 0145babc71..b3b1379f15 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4298,10 +4298,6 @@ static u8 ForewarnChooseMove(u32 battler) bool8 ChangeTypeBasedOnTerrain(u8 battlerId) { u8 battlerType; - u16 terrainFlags = VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY; - - if (terrainFlags && gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - gFieldStatuses = terrainFlags | STATUS_FIELD_TERRAIN_PERMANENT; // terrain is permanent if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) battlerType = TYPE_ELECTRIC;