From 91b2e1bb50288cc56e2a10c30b1a452b4c736eab Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 9 Jan 2023 07:53:59 -0300 Subject: [PATCH] More review changes and added lackings -Removed unnecessary special handling of terrain-inducing overworld weather states from ChangeTypeBasedOnTerrain. -Mimicry now activates normally for terrain-inducing overworld weather states. -Weather abilities now activate normally when switchineffects is called, and at the beginning of a battle. -Terrain abilities now activate normally at the beginning of a battle. --- data/battle_scripts_1.s | 1 + src/battle_main.c | 4 ++++ src/battle_script_commands.c | 1 + src/battle_util.c | 4 ---- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f9320a77d..1c4b82883 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 56b009cbb..ab3ce58be 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 26c82fc74..aad5b763a 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 0145babc7..b3b1379f1 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;