diff --git a/PkmnLib.Dynamic/Models/BattleFlow/TurnRunner.cs b/PkmnLib.Dynamic/Models/BattleFlow/TurnRunner.cs
index 8195e99..bc2d502 100644
--- a/PkmnLib.Dynamic/Models/BattleFlow/TurnRunner.cs
+++ b/PkmnLib.Dynamic/Models/BattleFlow/TurnRunner.cs
@@ -163,30 +163,13 @@ public static class TurnRunner
var battleData = user.BattleData;
if (battleData == null)
return;
- if (!battle.Library.ScriptResolver.TryResolveBattleItemScript(itemChoice.Item, out var itemScript))
- {
- return;
- }
- if (!itemScript.IsItemUsable)
- return;
- itemScript.OnInitialize(itemChoice.Item.BattleEffect!.Parameters);
IPokemon? target = null;
if (itemChoice is { TargetSide: not null, TargetPosition: not null })
{
var side = battle.Sides[itemChoice.TargetSide.Value];
target = side.Pokemon[itemChoice.TargetPosition.Value];
}
-
- var requiresTarget = itemScript.RequiresTarget;
- if (requiresTarget)
- {
- target ??= user;
- itemScript.OnUseWithTarget(target);
- }
- else
- {
- itemScript.OnUse();
- }
+ itemChoice.Item.RunItemScript(battle.Library.ScriptResolver, target ?? user);
}
}
\ No newline at end of file
diff --git a/PkmnLib.Dynamic/Models/Pokemon.cs b/PkmnLib.Dynamic/Models/Pokemon.cs
index 3021b5f..18713cc 100644
--- a/PkmnLib.Dynamic/Models/Pokemon.cs
+++ b/PkmnLib.Dynamic/Models/Pokemon.cs
@@ -313,6 +313,10 @@ public interface IPokemon : IScriptSource, IDeepCloneable
///
void LearnMove(StringKey moveName, MoveLearnMethod method, byte index);
+ ///
+ /// Checks whether the Pokémon has a specific non-volatile status.
+ ///
+ bool HasStatus(StringKey status);
///
/// Adds a non-volatile status to the Pokemon.
///
@@ -347,6 +351,17 @@ public interface IPokemon : IScriptSource, IDeepCloneable
/// Marks a Pokemon as seen in the battle.
///
void MarkOpponentAsSeen(IPokemon pokemon);
+
+ ///
+ /// Removes a type from the Pokémon. Returns whether the type was removed.
+ ///
+ bool RemoveType(TypeIdentifier type);
+
+ ///
+ /// Adds a type to the Pokémon. Returns whether the type was added. It will not add the type if
+ /// the Pokémon already has it.
+ ///
+ bool AddType(TypeIdentifier type);
///
/// Converts the data structure to a serializable format.
@@ -639,8 +654,10 @@ public class PokemonImpl : ScriptSource, IPokemon
///
public bool AllowedExperience { get; set; }
+ private List _types = new();
+
///
- public IReadOnlyList Types { get; private set; }
+ public IReadOnlyList Types { get => _types; private set => _types = value.ToList(); }
///
public bool IsEgg { get; private set; }
@@ -940,6 +957,9 @@ public class PokemonImpl : ScriptSource, IPokemon
_learnedMoves[index] = new LearnedMoveImpl(move, method);
}
+ ///
+ public bool HasStatus(StringKey status) => StatusScript.Script?.Name == status;
+
///
public void SetStatus(StringKey status)
{
@@ -1000,6 +1020,18 @@ public class PokemonImpl : ScriptSource, IPokemon
///
public void MarkOpponentAsSeen(IPokemon pokemon) => BattleData?.MarkOpponentAsSeen(pokemon);
+ ///
+ public bool RemoveType(TypeIdentifier type) => _types.Remove(type);
+
+ ///
+ public bool AddType(TypeIdentifier type)
+ {
+ if (_types.Contains(type))
+ return false;
+ _types.Add(type);
+ return true;
+ }
+
///
public SerializedPokemon Serialize() => new(this);
diff --git a/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs b/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs
index e21c328..1d422b8 100644
--- a/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs
+++ b/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs
@@ -1,4 +1,6 @@
using System.Runtime.CompilerServices;
+using PkmnLib.Dynamic.Models;
+using PkmnLib.Static;
namespace PkmnLib.Dynamic.ScriptHandling;
@@ -42,4 +44,27 @@ public static class ScriptExecution
}
}
+ public static void RunItemScript(this IItem item, ScriptResolver scriptResolver, IPokemon? target)
+ {
+ if (!scriptResolver.TryResolveBattleItemScript(item, out var itemScript))
+ {
+ return;
+ }
+ if (!itemScript.IsItemUsable)
+ return;
+
+ itemScript.OnInitialize(item.BattleEffect!.Parameters);
+ var requiresTarget = itemScript.RequiresTarget;
+ if (requiresTarget)
+ {
+ if (target == null)
+ throw new ArgumentNullException(nameof(target), "Item script requires a target.");
+ itemScript.OnUseWithTarget(target);
+ }
+ else
+ {
+ itemScript.OnUse();
+ }
+ }
+
}
\ No newline at end of file
diff --git a/PkmnLib.Dynamic/ScriptHandling/ScriptSet.cs b/PkmnLib.Dynamic/ScriptHandling/ScriptSet.cs
index 26a4408..f608de1 100644
--- a/PkmnLib.Dynamic/ScriptHandling/ScriptSet.cs
+++ b/PkmnLib.Dynamic/ScriptHandling/ScriptSet.cs
@@ -32,7 +32,7 @@ public interface IScriptSet : IEnumerable
/// Gets a script from the set using its type.
///
T? Get() where T : Script;
-
+
///
/// Removes a script from the set using its unique name.
///
@@ -43,6 +43,11 @@ public interface IScriptSet : IEnumerable
///
void Clear();
+ ///
+ /// Checks if the set has a script with the given type.
+ ///
+ bool Contains() where T : Script => Contains(ScriptUtils.ResolveName());
+
///
/// Checks if the set has a script with the given name.
///
diff --git a/PkmnLib.Tests/Data/Moves.json b/PkmnLib.Tests/Data/Moves.json
index baff058..f5b1225 100755
--- a/PkmnLib.Tests/Data/Moves.json
+++ b/PkmnLib.Tests/Data/Moves.json
@@ -864,7 +864,11 @@
"protect",
"mirror",
"bite"
- ]
+ ],
+ "effect": {
+ "name": "flinch",
+ "chance": 30
+ }
},
{
"name": "black_hole_eclipse__physical",
@@ -901,7 +905,10 @@
"recharge",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "requires_recharge"
+ }
},
{
"name": "blaze_kick",
@@ -916,7 +923,14 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "set_status",
+ "chance": 10,
+ "parameters": {
+ "status": "burned"
+ }
+ }
},
{
"name": "blizzard",
@@ -930,7 +944,14 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "set_status",
+ "chance": 10,
+ "parameters": {
+ "status": "frozen"
+ }
+ }
},
{
"name": "block",
@@ -944,7 +965,10 @@
"flags": [
"reflectable",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "block"
+ }
},
{
"name": "bloom_doom__physical",
@@ -980,7 +1004,14 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "set_status",
+ "chance": 20,
+ "parameters": {
+ "status": "burned"
+ }
+ }
},
{
"name": "body_slam",
@@ -996,7 +1027,14 @@
"protect",
"mirror",
"nonskybattle"
- ]
+ ],
+ "effect": {
+ "name": "set_status",
+ "chance": 30,
+ "parameters": {
+ "status": "paralyzed"
+ }
+ }
},
{
"name": "bolt_strike",
@@ -1011,7 +1049,14 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "set_status",
+ "chance": 20,
+ "parameters": {
+ "status": "paralyzed"
+ }
+ }
},
{
"name": "bone_club",
@@ -1025,7 +1070,11 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "flinch",
+ "chance": 10
+ }
},
{
"name": "bone_rush",
@@ -1039,7 +1088,10 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "2_5_hit_move"
+ }
},
{
"name": "bonemerang",
@@ -1053,7 +1105,10 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "2_hit_move"
+ }
},
{
"name": "boomburst",
@@ -1087,7 +1142,10 @@
"mirror",
"gravity",
"distance"
- ]
+ ],
+ "effect": {
+ "name": "bounce"
+ }
},
{
"name": "brave_bird",
@@ -1103,7 +1161,13 @@
"protect",
"mirror",
"distance"
- ]
+ ],
+ "effect": {
+ "name": "recoil",
+ "parameters": {
+ "amount": 0.33333
+ }
+ }
},
{
"name": "breakneck_blitz__physical",
@@ -1140,7 +1204,10 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "brick_break"
+ }
},
{
"name": "brine",
@@ -1154,7 +1221,10 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "brine"
+ }
},
{
"name": "brutal_swing",
@@ -1183,7 +1253,14 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "change_target_speed",
+ "chance": 10,
+ "parameters": {
+ "amount": -1
+ }
+ }
},
{
"name": "bubble_beam",
@@ -1197,7 +1274,14 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "change_target_speed",
+ "chance": 10,
+ "parameters": {
+ "amount": -1
+ }
+ }
},
{
"name": "bug_bite",
@@ -1212,7 +1296,10 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "bug_bite"
+ }
},
{
"name": "bug_buzz",
@@ -1228,7 +1315,14 @@
"mirror",
"sound",
"ignore-substitute"
- ]
+ ],
+ "effect": {
+ "name": "change_target_special_defense",
+ "chance": 10,
+ "parameters": {
+ "amount": -1
+ }
+ }
},
{
"name": "bulk_up",
@@ -1241,7 +1335,10 @@
"category": "status",
"flags": [
"snatch"
- ]
+ ],
+ "effect": {
+ "name": "bulk_up"
+ }
},
{
"name": "bulldoze",
@@ -1256,7 +1353,13 @@
"protect",
"mirror",
"nonskybattle"
- ]
+ ],
+ "effect": {
+ "name": "change_target_speed",
+ "parameters": {
+ "amount": -1
+ }
+ }
},
{
"name": "bullet_punch",
@@ -1287,7 +1390,10 @@
"protect",
"mirror",
"ballistics"
- ]
+ ],
+ "effect": {
+ "name": "2_5_hit_move"
+ }
},
{
"name": "burn_up",
@@ -1302,7 +1408,10 @@
"protect",
"mirror",
"defrost"
- ]
+ ],
+ "effect": {
+ "name": "burn_up"
+ }
},
{
"name": "calm_mind",
@@ -3957,7 +4066,9 @@
"flags": [
"protect",
"mirror",
- "distance"
+ "distance",
+ "hit_flying",
+ "effective_against_fly"
]
},
{
@@ -8165,7 +8276,8 @@
"contact",
"protect",
"mirror",
- "punch"
+ "punch",
+ "hit_flying"
]
},
{
@@ -8295,7 +8407,8 @@
"flags": [
"protect",
"mirror",
- "nonskybattle"
+ "nonskybattle",
+ "hit_flying"
]
},
{
@@ -9537,7 +9650,8 @@
"category": "special",
"flags": [
"protect",
- "mirror"
+ "mirror",
+ "hit_flying"
]
},
{
@@ -9866,7 +9980,9 @@
"category": "special",
"flags": [
"protect",
- "mirror"
+ "mirror",
+ "hit_flying",
+ "effective_against_fly"
]
},
{
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Gen7Plugin.cs b/Plugins/PkmnLib.Plugin.Gen7/Gen7Plugin.cs
index 58efd16..fee1971 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Gen7Plugin.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Gen7Plugin.cs
@@ -1,4 +1,3 @@
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Libraries;
namespace PkmnLib.Plugin.Gen7;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/GlobalUsings.cs b/Plugins/PkmnLib.Plugin.Gen7/GlobalUsings.cs
new file mode 100644
index 0000000..f73a374
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/GlobalUsings.cs
@@ -0,0 +1,5 @@
+global using PkmnLib.Dynamic.ScriptHandling;
+global using PkmnLib.Dynamic.ScriptHandling.Registry;
+global using PkmnLib.Dynamic.Events;
+global using PkmnLib.Dynamic.Models;
+global using PkmnLib.Dynamic.Models.Choices;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7BattleStatCalculator.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7BattleStatCalculator.cs
index e64ac8b..8f2aa3f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7BattleStatCalculator.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7BattleStatCalculator.cs
@@ -1,7 +1,5 @@
using System;
using PkmnLib.Dynamic.Libraries;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Libraries;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7CaptureLibrary.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7CaptureLibrary.cs
index d3fa8c1..dc676a1 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7CaptureLibrary.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7CaptureLibrary.cs
@@ -1,8 +1,5 @@
using System;
using PkmnLib.Dynamic.Libraries;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Libraries;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7DamageCalculator.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7DamageCalculator.cs
index cb498dd..cc791ba 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7DamageCalculator.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7DamageCalculator.cs
@@ -1,8 +1,6 @@
using System;
using System.Linq;
using PkmnLib.Dynamic.Libraries;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
using PkmnLib.Static;
using PkmnLib.Static.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7MiscLibrary.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7MiscLibrary.cs
index 5733d87..4e59e18 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7MiscLibrary.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7MiscLibrary.cs
@@ -2,8 +2,6 @@ using System.Collections.Generic;
using System.Linq;
using PkmnLib.Dynamic;
using PkmnLib.Dynamic.Libraries;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.Models.Choices;
using PkmnLib.Static;
using PkmnLib.Static.Moves;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs
index 60a17e2..6ebc9b9 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs
@@ -1,7 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs
index cf24262..4bd7f72 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs
@@ -1,7 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs
index 9703584..960d218 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs
@@ -1,6 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acupressure.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acupressure.cs
index c9983bc..da4fc07 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acupressure.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acupressure.cs
@@ -1,7 +1,4 @@
using System.Linq;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AfterYou.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AfterYou.cs
index 73262f7..849e6b1 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AfterYou.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AfterYou.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Moves;
///
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Assist.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Assist.cs
index 85ce3f2..ac4ea6f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Assist.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Assist.cs
@@ -1,9 +1,5 @@
using System.Collections.Generic;
using System.Linq;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Utils;
using PkmnLib.Static.Moves;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Attract.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Attract.cs
index 54f4cd8..b7a0cdb 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Attract.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Attract.cs
@@ -1,6 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
using PkmnLib.Static.Species;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AuroraVeil.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AuroraVeil.cs
index b9b1c6f..e0bbe03 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AuroraVeil.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/AuroraVeil.cs
@@ -1,7 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts;
using PkmnLib.Plugin.Gen7.Scripts.Side;
using PkmnLib.Plugin.Gen7.Scripts.Weather;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Autotomize.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Autotomize.cs
index e82c69a..0ca256c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Autotomize.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Autotomize.cs
@@ -1,8 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Dynamic.Events;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BanefulBunker.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BanefulBunker.cs
index 08478e0..2f87b57 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BanefulBunker.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BanefulBunker.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
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 72e1187..fc8d24f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BatonPass.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BatonPass.cs
@@ -1,8 +1,5 @@
using System;
using System.Linq;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeakBlast.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeakBlast.cs
index d54ce98..be83d6c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeakBlast.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeakBlast.cs
@@ -1,9 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Dynamic.Events;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
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 78c341d..c8f254a 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs
@@ -1,9 +1,5 @@
using System.Collections.Generic;
using System.Linq;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs
index cae9af9..99bbbd3 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs
@@ -1,6 +1,4 @@
using System.Linq;
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BellyDrum.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BellyDrum.cs
index c0a28b5..6770636 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BellyDrum.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BellyDrum.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Events;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bestow.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bestow.cs
index 6a3f3fa..1a84d2e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bestow.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bestow.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "bestow")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bide.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bide.cs
index 521e873..c473007 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bide.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bide.cs
@@ -1,7 +1,4 @@
using System.Linq;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bind.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bind.cs
index 70bbda2..9c5696d 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bind.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bind.cs
@@ -1,7 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Block.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Block.cs
new file mode 100644
index 0000000..20ca3e3
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Block.cs
@@ -0,0 +1,13 @@
+using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "block")]
+public class Block : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ target.Volatile.Add(new BlockEffect());
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bounce.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bounce.cs
new file mode 100644
index 0000000..1601684
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bounce.cs
@@ -0,0 +1,36 @@
+using System.Collections.Generic;
+using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "bounce")]
+public class Bounce : Script
+{
+ ///
+ public override void PreventMove(IExecutingMove move, ref bool prevent)
+ {
+ if (move.User.Volatile.Contains())
+ return;
+
+ move.User.Volatile.Add(new ChargeBounceEffect(move.User));
+ move.User.BattleData?.Battle.EventHook.Invoke(new DialogEvent("bounce_charge", new Dictionary()
+ {
+ { "user", move.User }
+ }));
+ prevent = true;
+ }
+
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ var battle = move.User.BattleData?.Battle;
+ if (battle == null)
+ return;
+ var random = battle.Random;
+ if (random.EffectChance(30, move, target, hit))
+ {
+ target.SetStatus("paralyzed");
+ }
+ move.User.Volatile.Remove(ScriptUtils.ResolveName());
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BrickBreak.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BrickBreak.cs
new file mode 100644
index 0000000..1fc4af1
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BrickBreak.cs
@@ -0,0 +1,22 @@
+using PkmnLib.Plugin.Gen7.Scripts.Side;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "brick_break")]
+public class BrickBreak : Script
+{
+ ///
+ public override void OnBeforeMove(IExecutingMove move)
+ {
+ var sides = move.User.BattleData?.Battle.Sides;
+ if (sides == null)
+ return;
+
+ foreach (var side in sides)
+ {
+ side.VolatileScripts.Remove(ScriptUtils.ResolveName());
+ side.VolatileScripts.Remove(ScriptUtils.ResolveName());
+ side.VolatileScripts.Remove(ScriptUtils.ResolveName());
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs
new file mode 100644
index 0000000..6bad12d
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs
@@ -0,0 +1,17 @@
+using System;
+using PkmnLib.Static.Utils;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "brine")]
+public class Brine : Script
+{
+ ///
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ {
+ if (target.CurrentHealth <= target.BoostedStats.Hp / 2)
+ {
+ basePower = basePower.MultiplyOrMax(2);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BugBite.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BugBite.cs
new file mode 100644
index 0000000..66032e0
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BugBite.cs
@@ -0,0 +1,26 @@
+using PkmnLib.Static;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "bug_bite")]
+public class BugBite : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ var user = move.User;
+ var battleData = user.BattleData;
+ if (battleData == null)
+ return;
+
+ var targetHeldItem = target.HeldItem;
+
+ if (targetHeldItem is not { Category: ItemCategory.Berry })
+ {
+ move.GetHitData(target, hit).Fail();
+ return;
+ }
+ _ = target.SetHeldItem(null);
+ targetHeldItem.RunItemScript(battleData.Battle.Library.ScriptResolver, user);
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BulkUp.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BulkUp.cs
new file mode 100644
index 0000000..37832ce
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BulkUp.cs
@@ -0,0 +1,14 @@
+using PkmnLib.Static;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "bulk_up")]
+public class BulkUp : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ move.User.ChangeStatBoost(Statistic.Attack, 1, true);
+ move.User.ChangeStatBoost(Statistic.Defense, 1, true);
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BurnUp.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BurnUp.cs
new file mode 100644
index 0000000..6e1fc3a
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BurnUp.cs
@@ -0,0 +1,27 @@
+using System.Linq;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "burn_up")]
+public class BurnUp : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ var battleData = move.User.BattleData;
+ if (battleData == null)
+ return;
+ var typeLibrary = battleData.Battle.Library.StaticLibrary.Types;
+ if (!typeLibrary.TryGetTypeIdentifier("fire", out var fireType))
+ return;
+ if (!move.User.Types.Contains(fireType))
+ {
+ move.GetHitData(target, hit).Fail();
+ return;
+ }
+
+ if (move.User.HasStatus("frozen"))
+ move.User.ClearStatus();
+ move.User.RemoveType(fireType);
+ }
+}
\ 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 043b8a2..f7a7c11 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs
index 85e083f..7f2bb6f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CurePartyStatus.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CurePartyStatus.cs
index 870245f..3ebc960 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CurePartyStatus.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CurePartyStatus.cs
@@ -1,7 +1,4 @@
using System.Linq;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoubleHitMove.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoubleHitMove.cs
new file mode 100644
index 0000000..670e19b
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoubleHitMove.cs
@@ -0,0 +1,10 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "2_hit_move")]
+public class DoubleHitMove : Script
+{
+ public override void ChangeNumberOfHits(IMoveChoice choice, ref byte numberOfHits)
+ {
+ numberOfHits = 2;
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoublePowerIfTargetDamagedInTurn.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoublePowerIfTargetDamagedInTurn.cs
index 83447ed..8568a06 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoublePowerIfTargetDamagedInTurn.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoublePowerIfTargetDamagedInTurn.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Side;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Drain.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Drain.cs
index 01092c9..c7336b2 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Drain.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Drain.cs
@@ -1,7 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flinch.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flinch.cs
index 8bba10a..651c3d0 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flinch.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flinch.cs
@@ -1,6 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
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 063bf2f..7a1d974 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HealEachEndOfTurn.cs
@@ -1,7 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IncreasedCriticalStage.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IncreasedCriticalStage.cs
index cc0e5d6..fd68924 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IncreasedCriticalStage.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IncreasedCriticalStage.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "increased_critical_stage")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MultiHitMove.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MultiHitMove.cs
index 0784f6c..e5dad7e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MultiHitMove.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MultiHitMove.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "2_5_hit_move")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PreventFoesExit.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PreventFoesExit.cs
index 4b471d1..1cbbeeb 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PreventFoesExit.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PreventFoesExit.cs
@@ -1,6 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ProtectionScript.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ProtectionScript.cs
index cece74c..450c882 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ProtectionScript.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ProtectionScript.cs
@@ -1,6 +1,4 @@
using System;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Recoil.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Recoil.cs
new file mode 100644
index 0000000..450c676
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Recoil.cs
@@ -0,0 +1,30 @@
+using System.Collections.Generic;
+using PkmnLib.Dynamic.Models.BattleFlow;
+using PkmnLib.Static.Utils;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "recoil")]
+public class Recoil : Script
+{
+ private float _recoilPercentage;
+
+ ///
+ public override void OnInitialize(IReadOnlyDictionary? parameters)
+ {
+ if (parameters == null)
+ return;
+ if (parameters.TryGetValue("recoil_percentage", out var recoilPercentage))
+ _recoilPercentage = recoilPercentage as float? ?? 0f;
+ }
+
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ if (_recoilPercentage <= 0)
+ return;
+ var hitData = move.GetHitData(target, hit);
+ var recoilDamage = (uint)(hitData.Damage * _recoilPercentage);
+ move.User.Damage(recoilDamage, DamageSource.Misc);
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RequiresRecharge.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RequiresRecharge.cs
new file mode 100644
index 0000000..3c65a80
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RequiresRecharge.cs
@@ -0,0 +1,13 @@
+using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "requires_recharge")]
+public class RequiresRecharge : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ move.User.Volatile.Add(new RequiresRechargeEffect(move.User));
+ }
+}
\ 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
new file mode 100644
index 0000000..e6dffc9
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using PkmnLib.Static.Utils;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "set_status")]
+public class SetStatus : Script
+{
+ private string? _status;
+
+ ///
+ public override void OnInitialize(IReadOnlyDictionary? parameters)
+ {
+ if (parameters?.TryGetValue("status", out var s) != true)
+ throw new Exception("Missing required parameter 'status'");
+ _status = s as string ?? throw new Exception("Missing required parameter 'status'");
+ }
+
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ if (_status == null)
+ throw new Exception("Missing required parameter 'status'");
+ target.SetStatus(_status);
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Struggle.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Struggle.cs
index f32693e..7d26682 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Struggle.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Struggle.cs
@@ -1,8 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "struggle")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BanefulBunkerEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BanefulBunkerEffect.cs
index 38eb12c..c562e25 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BanefulBunkerEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BanefulBunkerEffect.cs
@@ -1,4 +1,3 @@
-using PkmnLib.Dynamic.Models;
using PkmnLib.Static.Moves;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BeakBlastEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BeakBlastEffect.cs
index 4a4366b..8b00dcb 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BeakBlastEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BeakBlastEffect.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "beak_blast_effect")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BideEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BideEffect.cs
index 9a952c5..7f463d6 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BideEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BideEffect.cs
@@ -1,10 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
+using PkmnLib.Plugin.Gen7.Scripts.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
@@ -54,16 +51,7 @@ public class BideEffect : Script
choice = _choice;
return;
}
-
- var bideMove = _owner.Moves.FirstOrDefault(x => x?.MoveData.Name == "bide");
- if (bideMove == null)
- {
- if (!_owner.Library.StaticLibrary.Moves.TryGet("bide", out var moveData))
- throw new Exception("Move 'bide' not found in move library.");
-
- bideMove = new LearnedMoveImpl(moveData, MoveLearnMethod.Unknown);
- }
-
- choice = _choice = new MoveChoice(_owner, bideMove, sideIndex, position);
+ var opposingSideIndex = (byte)(_owner.BattleData?.SideIndex == 0 ? 1 : 0);
+ choice = TurnChoiceHelper.CreateMoveChoice(_owner, "bide", opposingSideIndex, position);
}
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs
index 946be2e..5a296de 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BindEffect.cs
@@ -1,8 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "bind")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BlockEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BlockEffect.cs
new file mode 100644
index 0000000..342ef82
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BlockEffect.cs
@@ -0,0 +1,11 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+[Script(ScriptCategory.Pokemon, "block")]
+public class BlockEffect : Script
+{
+ ///
+ public override void PreventSelfRunAway(IFleeChoice choice, ref bool prevent) => prevent = true;
+
+ ///
+ public override void PreventSelfSwitch(ISwitchChoice choice, ref bool prevent) => prevent = true;
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeBounceEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeBounceEffect.cs
new file mode 100644
index 0000000..52a4faf
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeBounceEffect.cs
@@ -0,0 +1,35 @@
+using PkmnLib.Plugin.Gen7.Scripts.Utils;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+[Script(ScriptCategory.Pokemon, "charge_bounce")]
+public class ChargeBounceEffect : Script
+{
+ private readonly IPokemon _owner;
+
+ public ChargeBounceEffect(IPokemon owner)
+ {
+ _owner = owner;
+ }
+
+ ///
+ public override void ForceTurnSelection(byte sideIndex, byte position, ref ITurnChoice? choice)
+ {
+ var opposingSideIndex = (byte)(_owner.BattleData?.SideIndex == 0 ? 1 : 0);
+ choice = TurnChoiceHelper.CreateMoveChoice(_owner, "bounce", opposingSideIndex, position);
+ }
+
+ ///
+ public override void BlockIncomingHit(IExecutingMove executingMove, IPokemon target, byte hitIndex, ref bool block)
+ {
+ if (!executingMove.UseMove.HasFlag("hit_flying"))
+ block = true;
+ }
+
+ ///
+ public override void ChangeIncomingDamage(IExecutingMove move, IPokemon target, byte hit, ref uint damage)
+ {
+ if (!move.UseMove.HasFlag("effective_against_fly"))
+ damage *= 2;
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FlinchEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FlinchEffect.cs
index 6602a9b..e01e157 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FlinchEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/FlinchEffect.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "flinch_effect")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealEachEndOfTurnEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealEachEndOfTurnEffect.cs
index 6c1f379..6f2e38b 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealEachEndOfTurnEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HealEachEndOfTurnEffect.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "heal_each_end_of_turn_effect")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/Infatuated.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/Infatuated.cs
index c86a4e1..48edfb0 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/Infatuated.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/Infatuated.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
///
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PreventFoesExitEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PreventFoesExitEffect.cs
index 336f51c..2c8a31c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PreventFoesExitEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PreventFoesExitEffect.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "prevent_foes_exit_effect")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionEffectScript.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionEffectScript.cs
index 52f9c8c..84f7ed1 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionEffectScript.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionEffectScript.cs
@@ -1,7 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Static.Moves;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
public abstract class ProtectionEffectScript : Script
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionFailureScript.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionFailureScript.cs
index 1c5eec0..62c631a 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionFailureScript.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ProtectionFailureScript.cs
@@ -1,8 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.Models.Choices;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
///
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RequiresRechargeEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RequiresRechargeEffect.cs
new file mode 100644
index 0000000..fc1e1c5
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RequiresRechargeEffect.cs
@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+[Script(ScriptCategory.Pokemon, "requires_recharge")]
+public class RequiresRechargeEffect : Script
+{
+ private readonly IPokemon _owner;
+
+ public RequiresRechargeEffect(IPokemon owner)
+ {
+ _owner = owner;
+ }
+
+ ///
+ public override void ForceTurnSelection(byte sideIndex, byte position, ref ITurnChoice? choice)
+ {
+ choice = new PassChoice(_owner);
+ }
+
+ ///
+ public override void OnBeforeTurnStart(ITurnChoice choice)
+ {
+ RemoveSelf();
+ _owner.BattleData?.Battle.EventHook.Invoke(new DialogEvent("pokemon_must_recharge",
+ new Dictionary()
+ {
+ { "pokemon", _owner }
+ }));
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AuroraVeilEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AuroraVeilEffect.cs
index 7e1f2f7..f0ec0a0 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AuroraVeilEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/AuroraVeilEffect.cs
@@ -1,6 +1,3 @@
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static.Moves;
namespace PkmnLib.Plugin.Gen7.Scripts.Side;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoublePowerIfTargetDamagedInTurnData.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoublePowerIfTargetDamagedInTurnData.cs
index 302c2d7..77c7cb9 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoublePowerIfTargetDamagedInTurnData.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/DoublePowerIfTargetDamagedInTurnData.cs
@@ -1,7 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
namespace PkmnLib.Plugin.Gen7.Scripts.Side;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LightScreenEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LightScreenEffect.cs
index eb50c81..a363d02 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LightScreenEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LightScreenEffect.cs
@@ -1,6 +1,3 @@
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Side;
[Script(ScriptCategory.Side, "light_screen")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ReflectEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ReflectEffect.cs
index 58f8c60..84c28e0 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ReflectEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/ReflectEffect.cs
@@ -1,6 +1,3 @@
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Side;
[Script(ScriptCategory.Side, "reflect")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Burned.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Burned.cs
index 9d5cb08..095f13c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Burned.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Burned.cs
@@ -1,6 +1,3 @@
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Status;
[Script(ScriptCategory.Status, "burned")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Frozen.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Frozen.cs
new file mode 100644
index 0000000..360e9cc
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Frozen.cs
@@ -0,0 +1,7 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Status;
+
+[Script(ScriptCategory.Status, "frozen")]
+public class Frozen : Script
+{
+ // TODO: Implement the Frozen status effect.
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Paralyzed.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Paralyzed.cs
new file mode 100644
index 0000000..4ec5ca3
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Paralyzed.cs
@@ -0,0 +1,7 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Status;
+
+[Script(ScriptCategory.Status, "paralyzed")]
+public class Paralyzed : Script
+{
+ // TODO: Implement the Paralyzed status effect.
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Poisoned.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Poisoned.cs
index a281443..b992c26 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Poisoned.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Poisoned.cs
@@ -1,6 +1,3 @@
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Status;
[Script(ScriptCategory.Status, "poisoned")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/TurnChoiceHelper.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/TurnChoiceHelper.cs
new file mode 100644
index 0000000..7bcd641
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/TurnChoiceHelper.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Linq;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Utils;
+
+public static class TurnChoiceHelper
+{
+ public static IMoveChoice CreateMoveChoice(IPokemon owner, string moveName, byte targetSide, byte targetPosition)
+ {
+ var move = owner.Moves.FirstOrDefault(x => x?.MoveData.Name == moveName);
+ if (move == null)
+ {
+ if (!owner.Library.StaticLibrary.Moves.TryGet(moveName, out var moveData))
+ throw new Exception($"Move '{moveName}' not found in move library.");
+
+ move = new LearnedMoveImpl(moveData, MoveLearnMethod.Unknown);
+ }
+ return new MoveChoice(owner, move, targetSide, targetPosition);
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs
index 277be46..f81cf64 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs
@@ -1,9 +1,5 @@
using System.Collections.Generic;
using System.Linq;
-using PkmnLib.Dynamic.Events;
-using PkmnLib.Dynamic.Models;
-using PkmnLib.Dynamic.ScriptHandling;
-using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static;
using PkmnLib.Static.Utils;