From 549b92048a8313dcd94662ac96c0f2341c3cfe21 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 26 Jan 2025 11:55:13 +0100 Subject: [PATCH] Adds a lot more move effects --- .../Models/BattleFlow/TurnRunner.cs | 19 +- PkmnLib.Dynamic/Models/Pokemon.cs | 34 +++- .../ScriptHandling/ScriptExecution.cs | 25 +++ PkmnLib.Dynamic/ScriptHandling/ScriptSet.cs | 7 +- PkmnLib.Tests/Data/Moves.json | 172 +++++++++++++++--- Plugins/PkmnLib.Plugin.Gen7/Gen7Plugin.cs | 1 - Plugins/PkmnLib.Plugin.Gen7/GlobalUsings.cs | 5 + .../Libraries/Gen7BattleStatCalculator.cs | 2 - .../Libraries/Gen7CaptureLibrary.cs | 3 - .../Libraries/Gen7DamageCalculator.cs | 2 - .../Libraries/Gen7MiscLibrary.cs | 2 - .../Scripts/Items/HealingItem.cs | 3 - .../Scripts/Items/StaticPokeball.cs | 3 - .../Scripts/Moves/Acrobatics.cs | 3 - .../Scripts/Moves/Acupressure.cs | 3 - .../Scripts/Moves/AfterYou.cs | 4 - .../Scripts/Moves/Assist.cs | 4 - .../Scripts/Moves/Attract.cs | 3 - .../Scripts/Moves/AuroraVeil.cs | 3 - .../Scripts/Moves/Autotomize.cs | 4 - .../Scripts/Moves/BanefulBunker.cs | 2 - .../Scripts/Moves/BatonPass.cs | 3 - .../Scripts/Moves/BeakBlast.cs | 5 - .../Scripts/Moves/BeatUp.cs | 4 - .../Scripts/Moves/Belch.cs | 2 - .../Scripts/Moves/BellyDrum.cs | 4 - .../Scripts/Moves/Bestow.cs | 4 - .../PkmnLib.Plugin.Gen7/Scripts/Moves/Bide.cs | 3 - .../PkmnLib.Plugin.Gen7/Scripts/Moves/Bind.cs | 3 - .../Scripts/Moves/Block.cs | 13 ++ .../Scripts/Moves/Bounce.cs | 36 ++++ .../Scripts/Moves/BrickBreak.cs | 22 +++ .../Scripts/Moves/Brine.cs | 17 ++ .../Scripts/Moves/BugBite.cs | 26 +++ .../Scripts/Moves/BulkUp.cs | 14 ++ .../Scripts/Moves/BurnUp.cs | 27 +++ .../Scripts/Moves/ChangeAllTargetStats.cs | 3 - .../Scripts/Moves/ChangeTargetStats.cs | 3 - .../Scripts/Moves/CurePartyStatus.cs | 3 - .../Scripts/Moves/DoubleHitMove.cs | 10 + .../Moves/DoublePowerIfTargetDamagedInTurn.cs | 4 - .../Scripts/Moves/Drain.cs | 3 - .../Scripts/Moves/Flinch.cs | 3 - .../Scripts/Moves/HealEachEndOfTurn.cs | 3 - .../Scripts/Moves/IncreasedCriticalStage.cs | 4 - .../Scripts/Moves/MultiHitMove.cs | 4 - .../Scripts/Moves/PreventFoesExit.cs | 3 - .../Scripts/Moves/ProtectionScript.cs | 2 - .../Scripts/Moves/Recoil.cs | 30 +++ .../Scripts/Moves/RequiresRecharge.cs | 13 ++ .../Scripts/Moves/SetStatus.cs | 27 +++ .../Scripts/Moves/Struggle.cs | 5 - .../Scripts/Pokemon/BanefulBunkerEffect.cs | 1 - .../Scripts/Pokemon/BeakBlastEffect.cs | 4 - .../Scripts/Pokemon/BideEffect.cs | 18 +- .../Scripts/Pokemon/BindEffect.cs | 5 - .../Scripts/Pokemon/BlockEffect.cs | 11 ++ .../Scripts/Pokemon/ChargeBounceEffect.cs | 35 ++++ .../Scripts/Pokemon/FlinchEffect.cs | 4 - .../Pokemon/HealEachEndOfTurnEffect.cs | 4 - .../Scripts/Pokemon/Infatuated.cs | 4 - .../Scripts/Pokemon/PreventFoesExitEffect.cs | 4 - .../Scripts/Pokemon/ProtectionEffectScript.cs | 4 - .../Pokemon/ProtectionFailureScript.cs | 5 - .../Scripts/Pokemon/RequiresRechargeEffect.cs | 31 ++++ .../Scripts/Side/AuroraVeilEffect.cs | 3 - .../DoublePowerIfTargetDamagedInTurnData.cs | 3 - .../Scripts/Side/LightScreenEffect.cs | 3 - .../Scripts/Side/ReflectEffect.cs | 3 - .../Scripts/Status/Burned.cs | 3 - .../Scripts/Status/Frozen.cs | 7 + .../Scripts/Status/Paralyzed.cs | 7 + .../Scripts/Status/Poisoned.cs | 3 - .../Scripts/Utils/TurnChoiceHelper.cs | 20 ++ .../Scripts/Weather/Hail.cs | 4 - 75 files changed, 563 insertions(+), 230 deletions(-) create mode 100644 Plugins/PkmnLib.Plugin.Gen7/GlobalUsings.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Block.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Bounce.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BrickBreak.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BugBite.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BulkUp.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BurnUp.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoubleHitMove.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Recoil.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RequiresRecharge.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SetStatus.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/BlockEffect.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ChargeBounceEffect.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RequiresRechargeEffect.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Frozen.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Status/Paralyzed.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Utils/TurnChoiceHelper.cs 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;