diff --git a/PkmnLib.Dynamic/AI/PokemonAI.cs b/PkmnLib.Dynamic/AI/PokemonAI.cs
index fcf6805..b63775a 100644
--- a/PkmnLib.Dynamic/AI/PokemonAI.cs
+++ b/PkmnLib.Dynamic/AI/PokemonAI.cs
@@ -1,4 +1,3 @@
-using JetBrains.Annotations;
using PkmnLib.Dynamic.Models;
using PkmnLib.Dynamic.Models.Choices;
using PkmnLib.Static.Moves;
diff --git a/PkmnLib.Dynamic/BattleFlow/MoveTurnExecutor.cs b/PkmnLib.Dynamic/BattleFlow/MoveTurnExecutor.cs
index 03c2b2b..9e88cb2 100644
--- a/PkmnLib.Dynamic/BattleFlow/MoveTurnExecutor.cs
+++ b/PkmnLib.Dynamic/BattleFlow/MoveTurnExecutor.cs
@@ -132,7 +132,7 @@ public static class MoveTurnExecutor
target.RunScriptHook(x => x.IsInvulnerableToMove(executingMove, target, ref isInvulnerable));
if (isInvulnerable)
{
- // TODO: event?
+ battle.EventHook.Invoke(new MoveInvulnerableEvent(executingMove, target));
return;
}
diff --git a/PkmnLib.Dynamic/Events/Handling/EventData.cs b/PkmnLib.Dynamic/Events/Handling/EventData.cs
index 4062393..c637313 100644
--- a/PkmnLib.Dynamic/Events/Handling/EventData.cs
+++ b/PkmnLib.Dynamic/Events/Handling/EventData.cs
@@ -1,5 +1,3 @@
-using JetBrains.Annotations;
-
namespace PkmnLib.Dynamic.Events;
///
diff --git a/PkmnLib.Dynamic/Events/MoveInvulnerableEvent.cs b/PkmnLib.Dynamic/Events/MoveInvulnerableEvent.cs
new file mode 100644
index 0000000..d8a7bf1
--- /dev/null
+++ b/PkmnLib.Dynamic/Events/MoveInvulnerableEvent.cs
@@ -0,0 +1,18 @@
+using PkmnLib.Dynamic.Models;
+
+namespace PkmnLib.Dynamic.Events;
+
+public class MoveInvulnerableEvent : IEventData
+{
+ public IExecutingMove ExecutingMove { get; }
+ public IPokemon Target { get; }
+
+ public MoveInvulnerableEvent(IExecutingMove executingMove, IPokemon target)
+ {
+ ExecutingMove = executingMove;
+ Target = target;
+ }
+
+ ///
+ public EventBatchId BatchId { get; init; }
+}
\ No newline at end of file
diff --git a/PkmnLib.Dynamic/GlobalUsings.cs b/PkmnLib.Dynamic/GlobalUsings.cs
index dc69b25..87fb77a 100644
--- a/PkmnLib.Dynamic/GlobalUsings.cs
+++ b/PkmnLib.Dynamic/GlobalUsings.cs
@@ -1,4 +1,5 @@
global using LevelInt = byte;
+global using JetBrains.Annotations;
namespace PkmnLib.Dynamic;
diff --git a/PkmnLib.Dynamic/Libraries/DataLoaders/ItemDataLoader.cs b/PkmnLib.Dynamic/Libraries/DataLoaders/ItemDataLoader.cs
index 4a86f65..9be36b2 100644
--- a/PkmnLib.Dynamic/Libraries/DataLoaders/ItemDataLoader.cs
+++ b/PkmnLib.Dynamic/Libraries/DataLoaders/ItemDataLoader.cs
@@ -1,6 +1,5 @@
using System.Collections.Immutable;
using System.Text.Json;
-using JetBrains.Annotations;
using PkmnLib.Dynamic.Libraries.DataLoaders.Models;
using PkmnLib.Static;
using PkmnLib.Static.Libraries;
diff --git a/PkmnLib.Dynamic/Libraries/DataLoaders/MoveDataLoader.cs b/PkmnLib.Dynamic/Libraries/DataLoaders/MoveDataLoader.cs
index 7f382ca..636d59c 100644
--- a/PkmnLib.Dynamic/Libraries/DataLoaders/MoveDataLoader.cs
+++ b/PkmnLib.Dynamic/Libraries/DataLoaders/MoveDataLoader.cs
@@ -1,6 +1,5 @@
using System.Collections.Immutable;
using System.Text.Json;
-using JetBrains.Annotations;
using PkmnLib.Dynamic.Libraries.DataLoaders.Models;
using PkmnLib.Static;
using PkmnLib.Static.Libraries;
diff --git a/PkmnLib.Dynamic/Libraries/DataLoaders/SpeciesDataLoader.cs b/PkmnLib.Dynamic/Libraries/DataLoaders/SpeciesDataLoader.cs
index e75107f..facddf6 100644
--- a/PkmnLib.Dynamic/Libraries/DataLoaders/SpeciesDataLoader.cs
+++ b/PkmnLib.Dynamic/Libraries/DataLoaders/SpeciesDataLoader.cs
@@ -1,7 +1,6 @@
using System.Collections.Immutable;
using System.Text.Json;
using System.Text.Json.Nodes;
-using JetBrains.Annotations;
using PkmnLib.Dynamic.Libraries.DataLoaders.Models;
using PkmnLib.Static;
using PkmnLib.Static.Libraries;
diff --git a/PkmnLib.Dynamic/Models/Battle.cs b/PkmnLib.Dynamic/Models/Battle.cs
index 335d254..fa245b2 100644
--- a/PkmnLib.Dynamic/Models/Battle.cs
+++ b/PkmnLib.Dynamic/Models/Battle.cs
@@ -40,6 +40,13 @@ public interface IBattle : IScriptSource, IDeepCloneable, IDisposable
///
byte PositionsPerSide { get; }
+ ///
+ /// The name of the environment the battle is taking place in, such as "grass", "cave", etc.
+ /// This is sometimes referred to as the "terrain" in the games, but is not the same as the
+ /// which is a battle condition that can be set by scripts.
+ ///
+ StringKey EnvironmentName { get; }
+
///
/// Whether this battle is a wild battle. In a wild battle, the player can catch the opposing Pokemon,
/// and moves like roar will end the battle instead of switching out the Pokemon.
@@ -173,9 +180,12 @@ public class BattleImpl : ScriptSource, IBattle
/// Whether Pokémon are allowed to flee from the battle.
/// The number of sides in the battle. Generally 2.
/// The number of spots there are on each side for Pokémon. 1 for singles, 2 for doubles, etc.
+ /// Whether this battle is a wild battle. In a wild battle, the player can catch the opposing Pokémon,
+ /// and moves like roar will end the battle instead of switching out the Pokémon.
+ /// The name of the environment the battle is taking place in, such as "grass", "cave", etc.
/// The seed for the RNG. If null, this uses a time-dependent seed.
public BattleImpl(IDynamicLibrary library, IReadOnlyList parties, bool canFlee, byte numberOfSides,
- byte positionsPerSide, bool isWildBattle, int? randomSeed = null)
+ byte positionsPerSide, bool isWildBattle, StringKey environmentName, int? randomSeed = null)
{
Library = library;
Parties = parties;
@@ -183,6 +193,7 @@ public class BattleImpl : ScriptSource, IBattle
NumberOfSides = numberOfSides;
PositionsPerSide = positionsPerSide;
IsWildBattle = isWildBattle;
+ EnvironmentName = environmentName;
Volatile = new ScriptSet(this);
var sides = new IBattleSide[numberOfSides];
for (byte i = 0; i < numberOfSides; i++)
@@ -207,6 +218,9 @@ public class BattleImpl : ScriptSource, IBattle
///
public byte PositionsPerSide { get; }
+ ///
+ public StringKey EnvironmentName { get; }
+
///
public bool IsWildBattle { get; }
diff --git a/PkmnLib.Dynamic/Models/Choices/MoveChoice.cs b/PkmnLib.Dynamic/Models/Choices/MoveChoice.cs
index f82c724..28aba15 100644
--- a/PkmnLib.Dynamic/Models/Choices/MoveChoice.cs
+++ b/PkmnLib.Dynamic/Models/Choices/MoveChoice.cs
@@ -1,4 +1,3 @@
-using JetBrains.Annotations;
using PkmnLib.Dynamic.ScriptHandling;
using PkmnLib.Static.Utils;
diff --git a/PkmnLib.Dynamic/Models/Pokemon.cs b/PkmnLib.Dynamic/Models/Pokemon.cs
index 78b0112..7978925 100644
--- a/PkmnLib.Dynamic/Models/Pokemon.cs
+++ b/PkmnLib.Dynamic/Models/Pokemon.cs
@@ -1,5 +1,4 @@
using System.Diagnostics.CodeAnalysis;
-using JetBrains.Annotations;
using PkmnLib.Dynamic.Events;
using PkmnLib.Dynamic.Libraries;
using PkmnLib.Dynamic.Models.Serialized;
diff --git a/PkmnLib.Dynamic/ScriptHandling/Registry/ItemScriptAttribute.cs b/PkmnLib.Dynamic/ScriptHandling/Registry/ItemScriptAttribute.cs
index a8f3519..47b15f5 100644
--- a/PkmnLib.Dynamic/ScriptHandling/Registry/ItemScriptAttribute.cs
+++ b/PkmnLib.Dynamic/ScriptHandling/Registry/ItemScriptAttribute.cs
@@ -1,4 +1,3 @@
-using JetBrains.Annotations;
using PkmnLib.Static.Utils;
namespace PkmnLib.Dynamic.ScriptHandling.Registry;
diff --git a/PkmnLib.Dynamic/ScriptHandling/Registry/Plugin.cs b/PkmnLib.Dynamic/ScriptHandling/Registry/Plugin.cs
index f003b72..2a9c42d 100644
--- a/PkmnLib.Dynamic/ScriptHandling/Registry/Plugin.cs
+++ b/PkmnLib.Dynamic/ScriptHandling/Registry/Plugin.cs
@@ -1,5 +1,3 @@
-using JetBrains.Annotations;
-
namespace PkmnLib.Dynamic.ScriptHandling.Registry;
///
diff --git a/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptAttribute.cs b/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptAttribute.cs
index b2cc6a8..37ae68a 100644
--- a/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptAttribute.cs
+++ b/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptAttribute.cs
@@ -1,4 +1,3 @@
-using JetBrains.Annotations;
using PkmnLib.Static.Utils;
namespace PkmnLib.Dynamic.ScriptHandling.Registry;
diff --git a/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptRegistry.cs b/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptRegistry.cs
index c1d17a3..0b7d9bf 100644
--- a/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptRegistry.cs
+++ b/PkmnLib.Dynamic/ScriptHandling/Registry/ScriptRegistry.cs
@@ -1,6 +1,5 @@
using System.Linq.Expressions;
using System.Reflection;
-using JetBrains.Annotations;
using PkmnLib.Dynamic.Libraries;
using PkmnLib.Static;
using PkmnLib.Static.Utils;
diff --git a/PkmnLib.Dynamic/StaticHelpers.cs b/PkmnLib.Dynamic/StaticHelpers.cs
index 319dd3d..b1a2abf 100644
--- a/PkmnLib.Dynamic/StaticHelpers.cs
+++ b/PkmnLib.Dynamic/StaticHelpers.cs
@@ -5,11 +5,17 @@ namespace PkmnLib.Dynamic;
///
public static class StaticHelpers
{
+ ///
+ /// A delegate that provides the current date and time.
+ ///
+ public delegate DateTimeOffset DateTimeProviderDelegate();
+
///
/// A function to get the current date and time. This can be replaced in cases where the date and time
/// may not be the same as the system time.
///
- public static Func DateTimeProvider { get; set; } = () => DateTimeOffset.Now;
+ [PublicAPI]
+ public static DateTimeProviderDelegate DateTimeProvider { get; set; } = () => DateTimeOffset.Now;
///
/// Get the current date and time.
diff --git a/PkmnLib.Static/Utils/StringKey.cs b/PkmnLib.Static/Utils/StringKey.cs
index ea30cd4..334fee8 100644
--- a/PkmnLib.Static/Utils/StringKey.cs
+++ b/PkmnLib.Static/Utils/StringKey.cs
@@ -71,4 +71,6 @@ public readonly record struct StringKey
///
public static bool operator !=(StringKey? left, StringKey right) => !(left == right);
+
+ public bool Contains(StringKey other) => _key.IndexOf(other._key, StringComparison.InvariantCultureIgnoreCase) >= 0;
}
\ No newline at end of file
diff --git a/PkmnLib.Tests/Integration/IntegrationTestRunner.cs b/PkmnLib.Tests/Integration/IntegrationTestRunner.cs
index 2cc21c8..dccd86e 100644
--- a/PkmnLib.Tests/Integration/IntegrationTestRunner.cs
+++ b/PkmnLib.Tests/Integration/IntegrationTestRunner.cs
@@ -87,7 +87,8 @@ public class IntegrationTestRunner
return new BattlePartyImpl(party, x.Indices.Select(y => new ResponsibleIndex(y[0], y[1])).ToArray());
}).ProcessOneAtATime().GetResultsAsync();
using var battle = new BattleImpl(library, parties, test.BattleSetup.CanFlee, test.BattleSetup.NumberOfSides,
- test.BattleSetup.PositionsPerSide, false, test.BattleSetup.Seed);
+ test.BattleSetup.PositionsPerSide, false, test.BattleSetup.EnvironmentName ?? "grass",
+ test.BattleSetup.Seed);
foreach (var action in test.Actions)
{
diff --git a/PkmnLib.Tests/Integration/Models/IntegrationTestModel.cs b/PkmnLib.Tests/Integration/Models/IntegrationTestModel.cs
index a1d896f..42819b3 100644
--- a/PkmnLib.Tests/Integration/Models/IntegrationTestModel.cs
+++ b/PkmnLib.Tests/Integration/Models/IntegrationTestModel.cs
@@ -19,6 +19,7 @@ public class IntegrationTestBattleSetup
public byte NumberOfSides { get; set; }
public byte PositionsPerSide { get; set; }
public bool HasDamageRandomness { get; set; }
+ public string? EnvironmentName { get; set; }
public IntegrationTestParty[] Parties { get; set; } = null!;
}
diff --git a/PkmnLib.Tests/Static/DeepCloneTests.cs b/PkmnLib.Tests/Static/DeepCloneTests.cs
index 9895562..a357468 100644
--- a/PkmnLib.Tests/Static/DeepCloneTests.cs
+++ b/PkmnLib.Tests/Static/DeepCloneTests.cs
@@ -108,7 +108,7 @@ public class DeepCloneTests
new BattlePartyImpl(party1, [new ResponsibleIndex(0, 0)]),
new BattlePartyImpl(party2, [new ResponsibleIndex(1, 0)]),
};
- using var battle = new BattleImpl(library, parties, false, 2, 3, false, 0);
+ using var battle = new BattleImpl(library, parties, false, 2, 3, false, "grass", 0);
battle.Sides[0].SwapPokemon(0, party1[0]);
battle.Sides[1].SwapPokemon(0, party2[0]);
party1[0]!.ChangeStatBoost(Statistic.Defense, 2, true, false);
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7MiscLibrary.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7MiscLibrary.cs
index 6ddf241..cb5dc5f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7MiscLibrary.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Battling/Gen7MiscLibrary.cs
@@ -1,7 +1,6 @@
using PkmnLib.Dynamic;
using PkmnLib.Dynamic.Libraries;
using PkmnLib.Static.Moves;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Libraries.Battling;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Teravolt.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Teravolt.cs
index 2710738..76e6ab2 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Teravolt.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Teravolt.cs
@@ -1,4 +1,3 @@
-using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
using PkmnLib.Plugin.Gen7.Scripts.Side;
namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs
index c079888..9167339 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Battle;
[Script(ScriptCategory.Battle, "gravity")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs
index 4dd52d9..ee5b0a0 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Battle;
[Script(ScriptCategory.Battle, "mud_sport")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/UproarEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/UproarEffect.cs
index fdc4d83..819c7be 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/UproarEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/UproarEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Battle;
[Script(ScriptCategory.Battle, "uproar_effect")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs
index dc9cea7..6379167 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Items;
[ItemScript("healing_item")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs
index a168f22..d3fa250 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Items;
///
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/BypassSleepVolatile.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/BypassSleepVolatile.cs
index 9c4ac2a..0566327 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/BypassSleepVolatile.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/BypassSleepVolatile.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.MoveVolatile;
[Script(ScriptCategory.MoveVolatile, "bypass_sleep")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/MeFirstPowerBoost.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/MeFirstPowerBoost.cs
index e7d23a6..0bdf673 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/MeFirstPowerBoost.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/MeFirstPowerBoost.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.MoveVolatile;
[Script(ScriptCategory.MoveVolatile, "me_first")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/RoundPowerBoost.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/RoundPowerBoost.cs
index d6e5121..00f4a84 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/RoundPowerBoost.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/RoundPowerBoost.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.MoveVolatile;
[Script(ScriptCategory.MoveVolatile, "round")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs
index 12769e4..b065534 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
///
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Assist.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Assist.cs
index 0a1ae34..5c8bc65 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Assist.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Assist.cs
@@ -1,6 +1,5 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
using PkmnLib.Static.Moves;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AuroraVeil.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AuroraVeil.cs
index 0e8c381..6fbc4df 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AuroraVeil.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AuroraVeil.cs
@@ -1,6 +1,5 @@
using PkmnLib.Plugin.Gen7.Scripts.Side;
using PkmnLib.Plugin.Gen7.Scripts.Weather;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BatonPass.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BatonPass.cs
index 7a2d51d..aafc590 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BatonPass.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BatonPass.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs
index 271bfc6..5c7af57 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "beat_up")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bind.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bind.cs
index 492bb47..a1267e9 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bind.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bind.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs
index ee620ae..94d1017 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "brine")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Camouflage.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Camouflage.cs
index 112759d..fa9d738 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Camouflage.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Camouflage.cs
@@ -1,7 +1,44 @@
+using PkmnLib.Plugin.Gen7.Scripts.Utils;
+
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "camouflage")]
public class Camouflage : Script
{
- // FIXME: Implement this. How to get the terrain in a sane manner? See also SecretPower.cs
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ var type = GetTypeIdentifier(move.Battle);
+ if (type == null)
+ return;
+ move.User.SetTypes([type.Value]);
+ }
+
+ private static TypeIdentifier? GetTypeIdentifier(IBattle battle)
+ {
+ var typesLibrary = battle.Library.StaticLibrary.Types;
+ var environmentCategory = battle.GetEnvironmentCategory();
+ return environmentCategory switch
+ {
+ EnvironmentHelper.EnvironmentCategory.Electric when typesLibrary.TryGetTypeIdentifier("electric",
+ out var electricType) => electricType,
+ EnvironmentHelper.EnvironmentCategory.Fairy when typesLibrary.TryGetTypeIdentifier("fairy",
+ out var fairyType) => fairyType,
+ EnvironmentHelper.EnvironmentCategory.Grass when typesLibrary.TryGetTypeIdentifier("grass",
+ out var grassType) => grassType,
+ EnvironmentHelper.EnvironmentCategory.Psychic when typesLibrary.TryGetTypeIdentifier("psychic",
+ out var psychicType) => psychicType,
+ EnvironmentHelper.EnvironmentCategory.Rock when typesLibrary.TryGetTypeIdentifier("rock", out var rockType)
+ => rockType,
+ EnvironmentHelper.EnvironmentCategory.Ground when typesLibrary.TryGetTypeIdentifier("ground",
+ out var groundType) => groundType,
+ EnvironmentHelper.EnvironmentCategory.Ice when typesLibrary.TryGetTypeIdentifier("ice", out var iceType) =>
+ iceType,
+ EnvironmentHelper.EnvironmentCategory.Water when typesLibrary.TryGetTypeIdentifier("water",
+ out var waterType) => waterType,
+ EnvironmentHelper.EnvironmentCategory.Normal when typesLibrary.TryGetTypeIdentifier("normal",
+ out var normalType) => normalType,
+ _ => null,
+ };
+ }
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs
index 5091fde..a11111f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "change_all_target_stats")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs
index b897247..0b43dbd 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "change_multiple_target_stat_boosts")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs
index 06dd718..66ac7ca 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "change_multiple_user_stat_boosts")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs
index fda2959..4bd0960 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public abstract class ChangeTargetStats : Script
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs
index 1ca91ca..f96553f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public abstract class ChangeUserStats : Script
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Conversion.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Conversion.cs
index 10c9ad3..bdeb000 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Conversion.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Conversion.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "conversion")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Conversion2.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Conversion2.cs
index 65bdc19..5b169d1 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Conversion2.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Conversion2.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "conversion_2")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Copycat.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Copycat.cs
index 3877407..79c55bd 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Copycat.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Copycat.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CoreEnforcer.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CoreEnforcer.cs
index 6fabcd5..7fd47bb 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CoreEnforcer.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CoreEnforcer.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "core_enforcer")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Counter.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Counter.cs
index fc61eb4..3df0caa 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Counter.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Counter.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CurePartyStatus.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CurePartyStatus.cs
index 5a2c520..ee5dcdd 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CurePartyStatus.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CurePartyStatus.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "cure_party_status")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Defog.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Defog.cs
index 40385a8..a413eb3 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Defog.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Defog.cs
@@ -1,6 +1,5 @@
using JetBrains.Annotations;
using PkmnLib.Plugin.Gen7.Scripts.Side;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Facade.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Facade.cs
index 60a64e7..1a6b33e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Facade.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Facade.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "facade")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameBurst.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameBurst.cs
index 3ece355..626fdb5 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameBurst.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameBurst.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "flame_burst")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs
index ac307da..149fd12 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlameWheel.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "flame_wheel")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FuryCutter.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FuryCutter.cs
index 74f1504..6365510 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FuryCutter.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FuryCutter.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GearUp.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GearUp.cs
index ef85cb1..90fab6e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GearUp.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GearUp.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "gear_up")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Gravity.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Gravity.cs
index 323db05..f09fc99 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Gravity.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Gravity.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Grudge.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Grudge.cs
index 2be3fcc..c5e1960 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Grudge.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Grudge.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "grudge")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealBell.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealBell.cs
index 9bab50e..bf3fbe4 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealBell.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealBell.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs
index f2e5bee..8994cfb 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealPercent.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealPercent.cs
index 8230286..26fc991 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealPercent.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealPercent.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "heal_percent")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Hex.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Hex.cs
index bd8fad4..aab7cc3 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Hex.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Hex.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "hex")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBall.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBall.cs
index 35c0195..c10cd36 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBall.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBall.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LastResort.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LastResort.cs
index 95f2b39..0a20186 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LastResort.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LastResort.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "last_resort")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LightScreen.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LightScreen.cs
index 16fa1cb..dc61e72 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LightScreen.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LightScreen.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Side;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MagneticFlux.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MagneticFlux.cs
index 940bade..762398b 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MagneticFlux.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MagneticFlux.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "magnetic_flux")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MeFirst.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MeFirst.cs
index a71d503..d348a85 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MeFirst.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MeFirst.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.MoveVolatile;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MetalBurst.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MetalBurst.cs
index 3704c8d..f1b2539 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MetalBurst.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MetalBurst.cs
@@ -1,5 +1,4 @@
using PkmnLib.Static.Moves;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Metronome.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Metronome.cs
index ba1ea40..20d070f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Metronome.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Metronome.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorCoat.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorCoat.cs
index ea196fa..8da449c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorCoat.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorCoat.cs
@@ -1,5 +1,4 @@
using PkmnLib.Static.Moves;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorMove.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorMove.cs
index 6e415dd..8a588a6 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorMove.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MirrorMove.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Moonlight.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Moonlight.cs
index a0e502c..562a532 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Moonlight.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Moonlight.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Weather;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturalGift.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturalGift.cs
index fbbc788..8d03beb 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturalGift.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturalGift.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "natural_gift")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturePower.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturePower.cs
index 8da4beb..a1770ec 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturePower.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturePower.cs
@@ -1,7 +1,52 @@
+using PkmnLib.Plugin.Gen7.Scripts.Utils;
+using PkmnLib.Static.Moves;
+
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "nature_power")]
public class NaturePower : Script
{
- // FIXME: Implement this. How to get the terrain in a sane manner?
+ ///
+ public override void ChangeMove(IMoveChoice choice, ref StringKey moveName)
+ {
+ var battleData = choice.User.BattleData;
+ if (battleData is null)
+ return;
+ var newMoveName = GetMoveName(battleData.Battle);
+ if (newMoveName is null)
+ {
+ choice.Fail();
+ return;
+ }
+ moveName = newMoveName.Value;
+ }
+
+ private static StringKey? GetMoveName(IBattle battle)
+ {
+ var movesLibrary = battle.Library.StaticLibrary.Moves;
+ var environmentCategory = battle.GetEnvironmentCategory();
+ var moveName = environmentCategory switch
+ {
+ EnvironmentHelper.EnvironmentCategory.Electric when movesLibrary.TryGet("thunderbolt",
+ out var thunderboltMove) => (StringKey?)thunderboltMove.Name,
+ EnvironmentHelper.EnvironmentCategory.Fairy when movesLibrary.TryGet("moonblast", out var moonblastMove) =>
+ moonblastMove.Name,
+ EnvironmentHelper.EnvironmentCategory.Grass when movesLibrary.TryGet("energy_ball", out var energyballMove)
+ => energyballMove.Name,
+ EnvironmentHelper.EnvironmentCategory.Psychic when movesLibrary.TryGet("psychic", out var psychicMove) =>
+ psychicMove.Name,
+ EnvironmentHelper.EnvironmentCategory.Rock when movesLibrary.TryGet("power_gem", out var rockMove) =>
+ rockMove.Name,
+ EnvironmentHelper.EnvironmentCategory.Ground when movesLibrary.TryGet("earth_power", out var groundMove) =>
+ groundMove.Name,
+ EnvironmentHelper.EnvironmentCategory.Ice when movesLibrary.TryGet("ice_beam", out var iceMove) => iceMove
+ .Name,
+ EnvironmentHelper.EnvironmentCategory.Water when movesLibrary.TryGet("hydro_pump", out var waterMove) =>
+ waterMove.Name,
+ EnvironmentHelper.EnvironmentCategory.Normal when movesLibrary.TryGet("tri_attack", out var normalMove) =>
+ normalMove.Name,
+ _ => null,
+ };
+ return moveName;
+ }
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/OneHitKo.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/OneHitKo.cs
index f7e8752..9a17ff2 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/OneHitKo.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/OneHitKo.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "one_hit_ko")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Payback.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Payback.cs
index 58cdd99..76eed68 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Payback.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Payback.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
///
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PerishSong.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PerishSong.cs
index 11f9566..2ba20a8 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PerishSong.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PerishSong.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs
index 8ce88f4..2eca981 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "power_trip")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psywave.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psywave.cs
index b35f974..1194bac 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psywave.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psywave.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "psywave")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RapidSpin.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RapidSpin.cs
index 65b4c4a..70b1dbe 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RapidSpin.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RapidSpin.cs
@@ -13,16 +13,15 @@ public class RapidSpin : Script
move.User.Volatile.Remove();
move.User.Volatile.Remove();
move.User.Volatile.Remove();
- // TODO: Whirlpool effect removal
- // TODO: Wrap effect removal
+ move.User.Volatile.Remove();
var battleData = move.User.BattleData;
if (battleData != null)
{
battleData.BattleSide.VolatileScripts.Remove();
battleData.BattleSide.VolatileScripts.Remove();
- // TODO: Remove Toxic Spikes
- // TODO: Remove Stealth Rock
+ battleData.BattleSide.VolatileScripts.Remove();
+ battleData.BattleSide.VolatileScripts.Remove();
}
}
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Reflect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Reflect.cs
index 5058b75..6db2b6e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Reflect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Reflect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "reflect")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Retaliate.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Retaliate.cs
index 4c6fbe7..76df525 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Retaliate.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Retaliate.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "retaliate")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rototiller.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rototiller.cs
index fae83e7..bc0f514 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rototiller.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rototiller.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "rototiller")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SecretPower.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SecretPower.cs
index 9941700..3dd7b62 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SecretPower.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SecretPower.cs
@@ -1,7 +1,46 @@
+using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+using PkmnLib.Plugin.Gen7.Scripts.Utils;
+
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "secret_power")]
public class SecretPower : Script
{
- // FIXME: Implement this. How to get the terrain in a sane manner? See also Camouflage.cs
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ var environmentCategory = move.Battle.GetEnvironmentCategory();
+ switch (environmentCategory)
+ {
+ case EnvironmentHelper.EnvironmentCategory.Electric:
+ case EnvironmentHelper.EnvironmentCategory.Normal:
+ target.SetStatus(ScriptUtils.ResolveName(), move.User);
+ break;
+ case EnvironmentHelper.EnvironmentCategory.Rock:
+ target.Volatile.Add(new FlinchEffect());
+ break;
+ case EnvironmentHelper.EnvironmentCategory.Ground:
+ target.ChangeStatBoost(Statistic.Accuracy, -1, false, false);
+ break;
+ case EnvironmentHelper.EnvironmentCategory.Water:
+ target.ChangeStatBoost(Statistic.Attack, -1, false, false);
+ break;
+ case EnvironmentHelper.EnvironmentCategory.Ice:
+ target.SetStatus(ScriptUtils.ResolveName(), move.User);
+ break;
+ case EnvironmentHelper.EnvironmentCategory.Grass:
+ target.SetStatus(ScriptUtils.ResolveName(), move.User);
+ break;
+ case EnvironmentHelper.EnvironmentCategory.Fairy:
+ target.ChangeStatBoost(Statistic.SpecialAttack, -1, false, false);
+ break;
+ case EnvironmentHelper.EnvironmentCategory.Psychic:
+ target.ChangeStatBoost(Statistic.Speed, -1, false, false);
+ break;
+ // ReSharper disable once RedundantEmptySwitchSection
+ default:
+ // No effect for unrecognized environments
+ break;
+ }
+ }
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs
index 1ea07c9..7e7ae32 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "set_status")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetWeather.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetWeather.cs
index ec9af58..3710300 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetWeather.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetWeather.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "set_weather")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Sketch.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Sketch.cs
index 530f46c..a97cf67 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Sketch.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Sketch.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "sketch")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SleepTalk.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SleepTalk.cs
index 86f06da..3e67025 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SleepTalk.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SleepTalk.cs
@@ -1,6 +1,5 @@
using PkmnLib.Plugin.Gen7.Scripts.MoveVolatile;
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpitUp.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpitUp.cs
index d06f5e5..cc6eed4 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpitUp.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpitUp.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs
index 36d8b52..7b48cf6 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StaticDamage.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "static_damage")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StompingTantrum.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StompingTantrum.cs
index 4dd314b..5c7805d 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StompingTantrum.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StompingTantrum.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "stomping_tantrum")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Synchronoise.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Synchronoise.cs
index 5680571..b296e97 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Synchronoise.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Synchronoise.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "synchronoise")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Uproar.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Uproar.cs
index 694bbb6..2ac6757 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Uproar.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Uproar.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Battle;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/WakeUpSlap.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/WakeUpSlap.cs
index 1973626..2abef9f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/WakeUpSlap.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/WakeUpSlap.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "wake_up_slap")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/WeatherBall.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/WeatherBall.cs
index b806f0f..17ef486 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/WeatherBall.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/WeatherBall.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "weather_ball")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Whirlpool.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Whirlpool.cs
index af9b84b..a6cc9b7 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Whirlpool.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Whirlpool.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BaseChargeEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BaseChargeEffect.cs
index 77dc003..d11a063 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BaseChargeEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BaseChargeEffect.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeMoveEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeMoveEffect.cs
index ba380a1..d99e214 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeMoveEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeMoveEffect.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DisableEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DisableEffect.cs
index c110f7b..b5959df 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DisableEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/DisableEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "disable")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EncoreEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EncoreEffect.cs
index 6f79ba4..44513bb 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EncoreEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EncoreEffect.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs
index 119f393..afd5b19 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs
@@ -1,5 +1,4 @@
using PkmnLib.Static.Libraries;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FreezeShockEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FreezeShockEffect.cs
index bbf9298..3dbf6f4 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FreezeShockEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FreezeShockEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
public class RequireChargeEffect(IPokemon owner, StringKey moveName) : BaseChargeEffect(owner, moveName);
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs
index a0b7cf9..7e8ff5f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
public class HelpingHandEffect : Script
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IceBallEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IceBallEffect.cs
index 892b92b..937a8ad 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IceBallEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IceBallEffect.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ImprisonEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ImprisonEffect.cs
index 536a111..8015568 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ImprisonEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ImprisonEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "imprison")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs
index 2b3c450..bc4345a 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "ingrain")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/OutrageLikeEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/OutrageLikeEffect.cs
index d4a2f1a..d752376 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/OutrageLikeEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/OutrageLikeEffect.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Utils;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PursuitEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PursuitEffect.cs
index d7ca0df..d4b3405 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PursuitEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PursuitEffect.cs
@@ -1,5 +1,4 @@
using PkmnLib.Dynamic.BattleFlow;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs
index 9ac0bd6..54df028 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "roost_effect")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SmackDownEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SmackDownEffect.cs
index b6985d1..b7737d3 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SmackDownEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SmackDownEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "smack_down")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ThousandArrowsEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ThousandArrowsEffect.cs
index 5a35530..302e7b5 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ThousandArrowsEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ThousandArrowsEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Move, "thousand_arrows")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SafeguardEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SafeguardEffect.cs
index 71ff07f..590d3b5 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SafeguardEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SafeguardEffect.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Side;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Sleep.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Sleep.cs
index eeb8376..f63a408 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Sleep.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Sleep.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static.Utils;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Status;
[Script(ScriptCategory.Status, "sleep")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/CopyableMoves.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/CopyableMoves.cs
index 6e0e395..01d20ce 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/CopyableMoves.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/CopyableMoves.cs
@@ -1,5 +1,4 @@
using PkmnLib.Static.Moves;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/EnvironmentHelper.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/EnvironmentHelper.cs
new file mode 100644
index 0000000..d752c20
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/EnvironmentHelper.cs
@@ -0,0 +1,43 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Utils;
+
+public static class EnvironmentHelper
+{
+ public enum EnvironmentCategory
+ {
+ Electric,
+ Fairy,
+ Grass,
+ Psychic,
+ Rock,
+ Ground,
+ Ice,
+ Water,
+ Normal,
+ }
+
+ public static EnvironmentCategory GetEnvironmentCategory(this IBattle battle)
+ {
+ var terrainName = battle.TerrainName;
+ if (terrainName == ScriptUtils.ResolveName())
+ return EnvironmentCategory.Electric;
+ if (terrainName == ScriptUtils.ResolveName())
+ return EnvironmentCategory.Fairy;
+ if (terrainName == ScriptUtils.ResolveName())
+ return EnvironmentCategory.Grass;
+ if (terrainName == ScriptUtils.ResolveName())
+ return EnvironmentCategory.Psychic;
+
+ var environment = battle.EnvironmentName;
+ if (environment.Contains("cave"))
+ return EnvironmentCategory.Rock;
+ if (environment.Contains("mountain") || environment.Contains("beach"))
+ return EnvironmentCategory.Ground;
+ if (environment.Contains("snow"))
+ return EnvironmentCategory.Ice;
+ if (environment.Contains("sea") || environment.Contains("lake") || environment.Contains("river"))
+ return EnvironmentCategory.Water;
+ if (environment.Contains("forest") || environment.Contains("field"))
+ return EnvironmentCategory.Normal;
+ return EnvironmentCategory.Normal; // Default case if no specific environment is matched
+ }
+}
\ No newline at end of file