From ce2cc67a8e6ce08da09a2401fe26ef31b9195241 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 3 Feb 2024 23:49:17 -0300 Subject: [PATCH 1/9] Renamed VAR_TERRAIN and introduced a var-based field terrains timer --- include/config/battle.h | 5 ++-- src/battle_script_commands.c | 6 ++++- src/battle_util.c | 46 +++++++++++++++++++++++++++++------- src/overworld.c | 4 ++-- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 49b0c5a073b1..3adf40e99c67 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -179,8 +179,9 @@ // Var Settings // To use the following features in scripting, replace the 0s with the var ID you're assigning it to. -// Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature. -#define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active +// Eg: Replace with VAR_UNUSED_0x40F7 so you can use B_VAR_TERRAIN for that feature. +#define B_VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active. +#define B_VAR_TERRAIN_TIMER 0 // If this var has a value greater or equal than 1, field terrains will last that number of turns. #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) // Sky Battles diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 5ea9d6563ac8..37397c33d9df 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16212,10 +16212,14 @@ void BS_SetRemoveTerrain(void) else { u16 atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); + u8 varTerrainTimer = VarGet(B_VAR_TERRAIN_TIMER); gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; gFieldStatuses |= statusFlag; - gFieldTimers.terrainTimer = (atkHoldEffect == HOLD_EFFECT_TERRAIN_EXTENDER) ? 8 : 5; + if (varTerrainTimer) + gFieldTimers.terrainTimer = varTerrainTimer; + else + gFieldTimers.terrainTimer = (atkHoldEffect == HOLD_EFFECT_TERRAIN_EXTENDER) ? 8 : 5; gBattlescriptCurrInstr = cmd->nextInstr; } } diff --git a/src/battle_util.c b/src/battle_util.c index d2d5c50925e2..dc6eaeb4a41d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1703,7 +1703,8 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { if (terrainFlag & STATUS_FIELD_GRASSY_TERRAIN) BattleScriptExecute(BattleScript_GrassyTerrainHeals); - if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0) + if ((!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0) + || (gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT && VarGet(B_VAR_TERRAIN_TIMER) >= 0 && --gFieldTimers.terrainTimer == 0)) { gFieldStatuses &= ~terrainFlag; TryToRevertMimicryAndFlags(); @@ -4016,12 +4017,24 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 switch (caseID) { case ABILITYEFFECT_SWITCH_IN_TERRAIN: + u8 varTerrainTimer = VarGet(B_VAR_TERRAIN_TIMER); + gBattleScripting.battler = battler; - if (VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) + if (VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) { - u16 terrainFlags = VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY; // only works for status flag (1 << 15) - gFieldStatuses = terrainFlags | STATUS_FIELD_TERRAIN_PERMANENT; // terrain is permanent - switch (VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) + u16 terrainFlags = VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY; // only works for status flag (1 << 15) + + if (varTerrainTimer == 0) + { + gFieldStatuses = terrainFlags | STATUS_FIELD_TERRAIN_PERMANENT; // terrain is permanent + } + else + { + gFieldStatuses |= terrainFlags; + gFieldTimers.terrainTimer = varTerrainTimer; + } + + switch (VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) { case STATUS_FIELD_ELECTRIC_TERRAIN: gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; @@ -4036,7 +4049,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; break; } - BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); effect++; } @@ -4045,7 +4057,15 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)) { // overworld weather started rain, so just do electric terrain anim - gFieldStatuses = (STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); + if (VarGet(B_VAR_TERRAIN_TIMER) == 0) + { + gFieldStatuses = (STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); + } + else + { + gFieldStatuses |= STATUS_FIELD_ELECTRIC_TERRAIN; + gFieldTimers.terrainTimer = varTerrainTimer; + } gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); effect++; @@ -4054,12 +4074,20 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && (GetCurrentWeather() == WEATHER_FOG_HORIZONTAL || GetCurrentWeather() == WEATHER_FOG_DIAGONAL) && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) { - gFieldStatuses = (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); + if (VarGet(B_VAR_TERRAIN_TIMER) == 0) + { + gFieldStatuses = (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); + } + else + { + gFieldStatuses |= STATUS_FIELD_ELECTRIC_TERRAIN; + gFieldTimers.terrainTimer = varTerrainTimer; + } gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); effect++; } - break; + break; case ABILITYEFFECT_SWITCH_IN_WEATHER: gBattleScripting.battler = battler; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) diff --git a/src/overworld.c b/src/overworld.c index e18ae583c416..820b4210e82c 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -401,8 +401,8 @@ void Overworld_ResetStateAfterDigEscRope(void) #if B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE void Overworld_ResetBattleFlagsAndVars(void) { - #if VAR_TERRAIN != 0 - VarSet(VAR_TERRAIN, 0); + #if B_VAR_TERRAIN != 0 + VarSet(B_VAR_TERRAIN, 0); #endif #if B_VAR_WILD_AI_FLAGS != 0 From 9cb8c45ae3196e63df8104e99e5521a2b2c70504 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 4 Feb 2024 00:11:58 -0300 Subject: [PATCH 2/9] Fixed sky battle configs alignment and syntax --- include/config/battle.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 3adf40e99c67..3c2478101f4d 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -185,10 +185,9 @@ #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) // Sky Battles -#define B_FLAG_SKY_BATTLE 0 // If this flag has a value, the player will be able to engage in scripted Sky Battles. -#define B_VAR_SKY_BATTLE 0 // If this var has a value, the game will remember the positions of Pokémon used in Sky Battles. - -#define B_SKY_BATTLE_STRICT_ELIGIBILITY FALSE //If TRUE, Sky Battles will use the eligibility from Pokémon XY. If FALSE, all Flying-types or Pokémon with Levitate are allowed. +#define B_FLAG_SKY_BATTLE 0 // If this flag has a value, the player will be able to engage in scripted Sky Battles. +#define B_VAR_SKY_BATTLE 0 // If this var has a value, the game will remember the positions of Pokémon used in Sky Battles. +#define B_SKY_BATTLE_STRICT_ELIGIBILITY FALSE // If TRUE, Sky Battles will use the eligibility from Pokémon XY. If FALSE, all Flying-types or Pokémon with Levitate are allowed. // Flag and Var settings #define B_RESET_FLAGS_VARS_AFTER_WHITEOUT TRUE // If TRUE, Overworld_ResetBattleFlagsAndVars will reset battle-related Flags and Vars when the player whites out. From 64e09f545cff2cfbf6671cf05e78798fd027dc40 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 4 Feb 2024 01:39:01 -0300 Subject: [PATCH 3/9] Added B_VAR_TERRAIN_TIMER handling to Overworld_ResetBattleFlagsAndVars --- src/overworld.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/overworld.c b/src/overworld.c index 820b4210e82c..e4161a32f609 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -399,12 +399,16 @@ void Overworld_ResetStateAfterDigEscRope(void) } #if B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE - void Overworld_ResetBattleFlagsAndVars(void) +void Overworld_ResetBattleFlagsAndVars(void) { #if B_VAR_TERRAIN != 0 VarSet(B_VAR_TERRAIN, 0); #endif + #if B_VAR_TERRAIN_TIMER != 0 + VarSet(B_VAR_TERRAIN_TIMER, 0); + #endif + #if B_VAR_WILD_AI_FLAGS != 0 VarSet(B_VAR_WILD_AI_FLAGS,0); #endif From 15c1d265d9adf344a3f24c943e300ea1aad210d6 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 4 Feb 2024 01:41:53 -0300 Subject: [PATCH 4/9] Removed pointless edits to EndTurnTerrain --- src/battle_util.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index dc6eaeb4a41d..e2a5d1a7000f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1703,8 +1703,7 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { if (terrainFlag & STATUS_FIELD_GRASSY_TERRAIN) BattleScriptExecute(BattleScript_GrassyTerrainHeals); - if ((!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0) - || (gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT && VarGet(B_VAR_TERRAIN_TIMER) >= 0 && --gFieldTimers.terrainTimer == 0)) + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0) { gFieldStatuses &= ~terrainFlag; TryToRevertMimicryAndFlags(); From bae4775b592384a88ddb5a5164fb7b1ea8b30228 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 4 Feb 2024 07:19:42 -0300 Subject: [PATCH 5/9] Updated B_VAR_TERRAIN_TIMER's comment --- include/config/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index 3c2478101f4d..163e4c0f08e3 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -181,7 +181,7 @@ // To use the following features in scripting, replace the 0s with the var ID you're assigning it to. // Eg: Replace with VAR_UNUSED_0x40F7 so you can use B_VAR_TERRAIN for that feature. #define B_VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active. -#define B_VAR_TERRAIN_TIMER 0 // If this var has a value greater or equal than 1, field terrains will last that number of turns. +#define B_VAR_TERRAIN_TIMER 0 // If this var has a value greater or equal than 1 field terrains will last that number of turns, otherwise they will last until they're overwritten. #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) // Sky Battles From 2a6421d5e05ddf15dcd56672da369eab521c7e62 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 4 Feb 2024 07:50:23 -0300 Subject: [PATCH 6/9] Updated the syntax of ABILITYEFFECT_SWITCH_IN_TERRAIN to comply with Agbcc --- src/battle_util.c | 124 +++++++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 61 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index e2a5d1a7000f..c8acb88df141 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4016,75 +4016,77 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 switch (caseID) { case ABILITYEFFECT_SWITCH_IN_TERRAIN: - u8 varTerrainTimer = VarGet(B_VAR_TERRAIN_TIMER); - - gBattleScripting.battler = battler; - if (VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) { - u16 terrainFlags = VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY; // only works for status flag (1 << 15) - - if (varTerrainTimer == 0) - { - gFieldStatuses = terrainFlags | STATUS_FIELD_TERRAIN_PERMANENT; // terrain is permanent - } - else + u8 varTerrainTimer = VarGet(B_VAR_TERRAIN_TIMER); + + gBattleScripting.battler = battler; + if (VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) { - gFieldStatuses |= terrainFlags; - gFieldTimers.terrainTimer = varTerrainTimer; + u16 terrainFlags = VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY; // only works for status flag (1 << 15) + + if (varTerrainTimer == 0) + { + gFieldStatuses = terrainFlags | STATUS_FIELD_TERRAIN_PERMANENT; // terrain is permanent + } + else + { + gFieldStatuses |= terrainFlags; + gFieldTimers.terrainTimer = varTerrainTimer; + } + + switch (VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) + { + case STATUS_FIELD_ELECTRIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; + break; + case STATUS_FIELD_MISTY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; + break; + case STATUS_FIELD_GRASSY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; + break; + } + BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); + effect++; } - - switch (VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) + else if (B_THUNDERSTORM_TERRAIN == TRUE + && GetCurrentWeather() == WEATHER_RAIN_THUNDERSTORM + && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)) { - case STATUS_FIELD_ELECTRIC_TERRAIN: + // overworld weather started rain, so just do electric terrain anim + if (VarGet(B_VAR_TERRAIN_TIMER) == 0) + { + gFieldStatuses = (STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); + } + else + { + gFieldStatuses |= STATUS_FIELD_ELECTRIC_TERRAIN; + gFieldTimers.terrainTimer = varTerrainTimer; + } gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; - break; - case STATUS_FIELD_MISTY_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; - break; - case STATUS_FIELD_GRASSY_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; - break; - case STATUS_FIELD_PSYCHIC_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; - break; - } - BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); - effect++; - } - else if (B_THUNDERSTORM_TERRAIN == TRUE - && GetCurrentWeather() == WEATHER_RAIN_THUNDERSTORM - && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)) - { - // overworld weather started rain, so just do electric terrain anim - if (VarGet(B_VAR_TERRAIN_TIMER) == 0) - { - gFieldStatuses = (STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); - } - else - { - gFieldStatuses |= STATUS_FIELD_ELECTRIC_TERRAIN; - gFieldTimers.terrainTimer = varTerrainTimer; - } - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; - BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); - effect++; - } - else if (B_FOG_TERRAIN == TRUE - && (GetCurrentWeather() == WEATHER_FOG_HORIZONTAL || GetCurrentWeather() == WEATHER_FOG_DIAGONAL) - && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) - { - if (VarGet(B_VAR_TERRAIN_TIMER) == 0) - { - gFieldStatuses = (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); + BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); + effect++; } - else + else if (B_FOG_TERRAIN == TRUE + && (GetCurrentWeather() == WEATHER_FOG_HORIZONTAL || GetCurrentWeather() == WEATHER_FOG_DIAGONAL) + && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) { - gFieldStatuses |= STATUS_FIELD_ELECTRIC_TERRAIN; - gFieldTimers.terrainTimer = varTerrainTimer; + if (VarGet(B_VAR_TERRAIN_TIMER) == 0) + { + gFieldStatuses = (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); + } + else + { + gFieldStatuses |= STATUS_FIELD_ELECTRIC_TERRAIN; + gFieldTimers.terrainTimer = varTerrainTimer; + } + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; + BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); + effect++; } - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; - BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); - effect++; } break; case ABILITYEFFECT_SWITCH_IN_WEATHER: From 0455354e03168a64e1af8563d27ca1838ea4aeaa Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 4 Feb 2024 08:00:04 -0300 Subject: [PATCH 7/9] Nuked pointless VarGet calls in the case ABILITYEFFECT_SWITCH_IN_TERRAIN of AbilityBattleEffects --- src/battle_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index c8acb88df141..1dc78684ae1a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4057,7 +4057,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)) { // overworld weather started rain, so just do electric terrain anim - if (VarGet(B_VAR_TERRAIN_TIMER) == 0) + if (varTerrainTimer == 0) { gFieldStatuses = (STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); } @@ -4074,7 +4074,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && (GetCurrentWeather() == WEATHER_FOG_HORIZONTAL || GetCurrentWeather() == WEATHER_FOG_DIAGONAL) && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) { - if (VarGet(B_VAR_TERRAIN_TIMER) == 0) + if (varTerrainTimer == 0) { gFieldStatuses = (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); } From 3e2c86c49d1f6d7d486a0d2ef425ad470aab7f89 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 4 Feb 2024 08:33:19 -0300 Subject: [PATCH 8/9] Reverted changes made to BS_SetRemoveTerrain I shouldn't have touched it at all since it's not involved with B_VAR_TERRAIN functionality. --- src/battle_script_commands.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 37397c33d9df..5ea9d6563ac8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16212,14 +16212,10 @@ void BS_SetRemoveTerrain(void) else { u16 atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - u8 varTerrainTimer = VarGet(B_VAR_TERRAIN_TIMER); gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; gFieldStatuses |= statusFlag; - if (varTerrainTimer) - gFieldTimers.terrainTimer = varTerrainTimer; - else - gFieldTimers.terrainTimer = (atkHoldEffect == HOLD_EFFECT_TERRAIN_EXTENDER) ? 8 : 5; + gFieldTimers.terrainTimer = (atkHoldEffect == HOLD_EFFECT_TERRAIN_EXTENDER) ? 8 : 5; gBattlescriptCurrInstr = cmd->nextInstr; } } From d07571892e962bbfa6e11e10e2c2c295cd979f5c Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 4 Feb 2024 08:46:28 -0300 Subject: [PATCH 9/9] Removed trailing spaces in the case ABILITYEFFECT_SWITCH_IN_TERRAIN of AbilityBattleEffects --- src/battle_util.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 1dc78684ae1a..735b286e24ae 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4018,12 +4018,12 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITYEFFECT_SWITCH_IN_TERRAIN: { u8 varTerrainTimer = VarGet(B_VAR_TERRAIN_TIMER); - + gBattleScripting.battler = battler; if (VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) { u16 terrainFlags = VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY; // only works for status flag (1 << 15) - + if (varTerrainTimer == 0) { gFieldStatuses = terrainFlags | STATUS_FIELD_TERRAIN_PERMANENT; // terrain is permanent @@ -4033,7 +4033,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gFieldStatuses |= terrainFlags; gFieldTimers.terrainTimer = varTerrainTimer; } - + switch (VarGet(B_VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY) { case STATUS_FIELD_ELECTRIC_TERRAIN: