diff --git a/PkmnLib.Dynamic/Libraries/DamageCalculator.cs b/PkmnLib.Dynamic/Libraries/DamageCalculator.cs
index 39fbcfa..c589e54 100644
--- a/PkmnLib.Dynamic/Libraries/DamageCalculator.cs
+++ b/PkmnLib.Dynamic/Libraries/DamageCalculator.cs
@@ -15,7 +15,7 @@ public interface IDamageCalculator
///
/// Calculate the base power for a given hit on a Pokemon.
///
- byte GetBasePower(IExecutingMove executingMove, IPokemon target, byte hitNumber, IHitData hitData);
+ ushort GetBasePower(IExecutingMove executingMove, IPokemon target, byte hitNumber, IHitData hitData);
///
/// Returns whether a specified hit should be critical or not.
diff --git a/PkmnLib.Dynamic/Models/BattleFlow/MoveTurnExecutor.cs b/PkmnLib.Dynamic/Models/BattleFlow/MoveTurnExecutor.cs
index 8574696..48c3575 100644
--- a/PkmnLib.Dynamic/Models/BattleFlow/MoveTurnExecutor.cs
+++ b/PkmnLib.Dynamic/Models/BattleFlow/MoveTurnExecutor.cs
@@ -76,9 +76,16 @@ public static class MoveTurnExecutor
if (failed)
{
// TODO: fail handling
+ executingMove.MoveChoice.Fail();
return;
}
ExecuteMove(executingMove);
+
+ if (executingMove.Hits.All(x => x.HasFailed) || (executingMove.UseMove.Category != MoveCategory.Status &&
+ executingMove.Hits.All(x => x.Damage == 0)))
+ {
+ executingMove.MoveChoice.Fail();
+ }
}
public static void ExecuteMove(IExecutingMove executingMove)
diff --git a/PkmnLib.Dynamic/Models/ExecutingMove.cs b/PkmnLib.Dynamic/Models/ExecutingMove.cs
index 757bb03..dca6b79 100644
--- a/PkmnLib.Dynamic/Models/ExecutingMove.cs
+++ b/PkmnLib.Dynamic/Models/ExecutingMove.cs
@@ -20,7 +20,7 @@ public interface IHitData
///
/// The base power of the hit.
///
- byte BasePower { get; }
+ ushort BasePower { get; }
///
/// The effectiveness of the hit.
@@ -55,7 +55,7 @@ public record HitData : IHitData
public bool IsCritical { get; internal set; }
///
- public byte BasePower { get; internal set; }
+ public ushort BasePower { get; internal set; }
///
public float Effectiveness { get; internal set; }
diff --git a/PkmnLib.Dynamic/Models/LearnedMove.cs b/PkmnLib.Dynamic/Models/LearnedMove.cs
index c84af85..76dbff2 100644
--- a/PkmnLib.Dynamic/Models/LearnedMove.cs
+++ b/PkmnLib.Dynamic/Models/LearnedMove.cs
@@ -76,6 +76,11 @@ public interface ILearnedMove : IDeepCloneable
///
bool TryUse(byte amount = 1);
+ ///
+ /// Reduce the remaining PP by a certain amount. If the number of PP is already 0, return false.
+ ///
+ bool ReduceUses(byte amount = 1);
+
///
/// Set the remaining PP to the max amount of PP.
///
@@ -139,6 +144,20 @@ public class LearnedMoveImpl : ILearnedMove
return true;
}
+ ///
+ public bool ReduceUses(byte amount = 1)
+ {
+ if (CurrentPp == 0)
+ return false;
+
+ if (CurrentPp >= amount)
+ CurrentPp -= amount;
+ else
+ CurrentPp = 0;
+
+ return true;
+ }
+
///
/// Restore the PP to the maximum amount of PP.
///
diff --git a/PkmnLib.Dynamic/Models/Pokemon.cs b/PkmnLib.Dynamic/Models/Pokemon.cs
index d158e9a..f80f596 100644
--- a/PkmnLib.Dynamic/Models/Pokemon.cs
+++ b/PkmnLib.Dynamic/Models/Pokemon.cs
@@ -403,6 +403,12 @@ public interface IPokemon : IScriptSource, IDeepCloneable
///
void ChangeAbility(IAbility ability);
+ ///
+ /// Whether the Pokémon is levitating. This is used for moves like Magnet Rise, and abilities such as
+ /// Levitate.
+ ///
+ bool IsFloating { get; }
+
///
/// Converts the data structure to a serializable format.
///
@@ -1206,6 +1212,17 @@ public class PokemonImpl : ScriptSource, IPokemon
}
}
+ ///
+ public bool IsFloating
+ {
+ get
+ {
+ var isFloating = Types.Any(x => x.Name == "flying");
+ this.RunScriptHook(x => x.IsFloating(this, ref isFloating));
+ return isFloating;
+ }
+ }
+
///
public SerializedPokemon Serialize() => new(this);
diff --git a/PkmnLib.Dynamic/ScriptHandling/Script.cs b/PkmnLib.Dynamic/ScriptHandling/Script.cs
index 43f9759..9f6f29c 100644
--- a/PkmnLib.Dynamic/ScriptHandling/Script.cs
+++ b/PkmnLib.Dynamic/ScriptHandling/Script.cs
@@ -307,7 +307,7 @@ public abstract class Script : IDeepCloneable
///
/// This function allows a script to change the effective base power of a move hit.
///
- public virtual void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public virtual void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
}
@@ -697,4 +697,8 @@ public abstract class Script : IDeepCloneable
public virtual void PreventVolatileAdd(Script script, ref bool preventVolatileAdd)
{
}
+
+ public virtual void IsFloating(IPokemon pokemon, ref bool isFloating)
+ {
+ }
}
\ No newline at end of file
diff --git a/PkmnLib.Static/Utils/NumericHelpers.cs b/PkmnLib.Static/Utils/NumericHelpers.cs
index d6424cc..7729dc5 100644
--- a/PkmnLib.Static/Utils/NumericHelpers.cs
+++ b/PkmnLib.Static/Utils/NumericHelpers.cs
@@ -41,6 +41,15 @@ public static class NumericHelpers
return result > ushort.MaxValue ? ushort.MaxValue : (ushort)result;
}
+ ///
+ /// Multiplies two values. If this overflows, returns .
+ ///
+ public static ushort MultiplyOrMax(this ushort value, float multiplier)
+ {
+ var result = value * multiplier;
+ return result > ushort.MaxValue ? ushort.MaxValue : (ushort)result;
+ }
+
///
/// Multiplies two values. If this overflows, returns .
///
diff --git a/PkmnLib.Tests/Data/Moves.jsonc b/PkmnLib.Tests/Data/Moves.jsonc
index e46fc9f..21935fb 100755
--- a/PkmnLib.Tests/Data/Moves.jsonc
+++ b/PkmnLib.Tests/Data/Moves.jsonc
@@ -10608,7 +10608,10 @@
"flags": [
"reflectable",
"nonskybattle"
- ]
+ ],
+ "effect": {
+ "name": "spikes"
+ }
},
{
"name": "spiky_shield",
@@ -10619,7 +10622,10 @@
"priority": 4,
"target": "Self",
"category": "status",
- "flags": []
+ "flags": [],
+ "effect": {
+ "name": "spiky_shield"
+ }
},
{
"name": "spirit_shackle",
@@ -10633,7 +10639,10 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "prevent_foes_exit"
+ }
},
{
"name": "spit_up",
@@ -10646,7 +10655,10 @@
"category": "special",
"flags": [
"protect"
- ]
+ ],
+ "effect": {
+ "name": "spit_up"
+ }
},
{
"name": "spite",
@@ -10662,7 +10674,10 @@
"reflectable",
"mirror",
"ignore-substitute"
- ]
+ ],
+ "effect": {
+ "name": "spite"
+ }
},
{
"name": "splash",
@@ -10676,6 +10691,7 @@
"flags": [
"gravity"
]
+ // No secondary effect
},
{
"name": "spore",
@@ -10691,7 +10707,13 @@
"reflectable",
"mirror",
"powder"
- ]
+ ],
+ "effect": {
+ "name": "set_status",
+ "parameters": {
+ "status": "sleep"
+ }
+ }
},
{
"name": "spotlight",
@@ -10705,7 +10727,10 @@
"flags": [
"protect",
"reflectable"
- ]
+ ],
+ "effect": {
+ "name": "spotlight"
+ }
},
{
"name": "stealth_rock",
@@ -10718,7 +10743,10 @@
"category": "status",
"flags": [
"reflectable"
- ]
+ ],
+ "effect": {
+ "name": "stealth_rock"
+ }
},
{
"name": "steam_eruption",
@@ -10733,7 +10761,14 @@
"protect",
"mirror",
"defrost"
- ]
+ ],
+ "effect": {
+ "name": "set_status",
+ "chance": 30,
+ "parameters": {
+ "status": "burned"
+ }
+ }
},
{
"name": "steamroller",
@@ -10748,7 +10783,11 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "flinch",
+ "chance": 30
+ }
},
{
"name": "steel_wing",
@@ -10763,7 +10802,13 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "change_user_defense",
+ "parameters": {
+ "amount": 1
+ }
+ }
},
{
"name": "sticky_web",
@@ -10776,7 +10821,10 @@
"category": "status",
"flags": [
"reflectable"
- ]
+ ],
+ "effect": {
+ "name": "sticky_web"
+ }
},
{
"name": "stockpile",
@@ -10789,7 +10837,10 @@
"category": "status",
"flags": [
"snatch"
- ]
+ ],
+ "effect": {
+ "name": "stockpile"
+ }
},
{
"name": "stoked_sparksurfer",
@@ -10800,7 +10851,13 @@
"priority": 0,
"target": "Any",
"category": "special",
- "flags": []
+ "flags": [],
+ "effect": {
+ "name": "set_status",
+ "parameters": {
+ "status": "paralyzed"
+ }
+ }
},
{
"name": "stomp",
@@ -10816,7 +10873,11 @@
"protect",
"mirror",
"nonskybattle"
- ]
+ ],
+ "effect": {
+ "name": "flinch",
+ "chance": 30
+ }
},
{
"name": "stomping_tantrum",
@@ -10831,7 +10892,10 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "stomping_tantrum"
+ }
},
{
"name": "stone_edge",
@@ -10845,7 +10909,10 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "increased_critical_stage"
+ }
},
{
"name": "stored_power",
@@ -10859,7 +10926,10 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "power_trip"
+ }
},
{
"name": "storm_throw",
@@ -10874,7 +10944,10 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "storm_throw"
+ }
},
{
"name": "strength",
@@ -10890,6 +10963,7 @@
"protect",
"mirror"
]
+ // No secondary effect
},
{
"name": "strength_sap",
@@ -10905,7 +10979,10 @@
"reflectable",
"mirror",
"heal"
- ]
+ ],
+ "effect": {
+ "name": "strength_sap"
+ }
},
{
"name": "string_shot",
@@ -10920,7 +10997,13 @@
"protect",
"reflectable",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "change_target_speed",
+ "parameters": {
+ "amount": -2
+ }
+ }
},
{
"name": "struggle_bug",
@@ -10934,7 +11017,13 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "change_target_special_attack",
+ "parameters": {
+ "amount": -1
+ }
+ }
},
{
"name": "stun_spore",
@@ -10950,7 +11039,13 @@
"reflectable",
"mirror",
"powder"
- ]
+ ],
+ "effect": {
+ "name": "set_status",
+ "parameters": {
+ "status": "paralyzed"
+ }
+ }
},
{
"name": "submission",
@@ -10965,7 +11060,13 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "recoil",
+ "parameters": {
+ "recoilPercent": 0.25
+ }
+ }
},
{
"name": "substitute",
diff --git a/PkmnLib.Tests/DataTests/MoveDataTests.cs b/PkmnLib.Tests/DataTests/MoveDataTests.cs
index a8b1f05..a62cf8b 100644
--- a/PkmnLib.Tests/DataTests/MoveDataTests.cs
+++ b/PkmnLib.Tests/DataTests/MoveDataTests.cs
@@ -56,4 +56,35 @@ public class MoveDataTests
e);
}
}
+
+ public record SetStatusTestCaseData(IDynamicLibrary Library, IMoveData Move)
+ {
+ ///
+ public override string ToString() => Move.Name + " has valid status: " +
+ Move.SecondaryEffect?.Parameters.GetValueOrDefault("status");
+ }
+
+ public static IEnumerable> SetStatusMovesHaveValidStatusData()
+ {
+ var library = LibraryHelpers.LoadLibrary();
+ var moveLibrary = library.StaticLibrary.Moves;
+ foreach (var move in moveLibrary)
+ {
+ if (move.SecondaryEffect?.Name != "set_status")
+ continue;
+ yield return () => new SetStatusTestCaseData(library, move);
+ }
+ }
+
+ [Test, MethodDataSource(nameof(SetStatusMovesHaveValidStatusData))]
+ public async Task SetStatusMovesHaveValidStatus(SetStatusTestCaseData test)
+ {
+ if (test.Move.SecondaryEffect == null)
+ return;
+ var status = test.Move.SecondaryEffect.Parameters["status"]?.ToString();
+ if (status == null)
+ throw new Exception("Missing required parameter 'status'");
+
+ await Assert.That(test.Library.ScriptResolver.TryResolve(ScriptCategory.Status, status, null, out _)).IsTrue();
+ }
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7.Tests/Scripts/Moves/AcrobaticsTests.cs b/Plugins/PkmnLib.Plugin.Gen7.Tests/Scripts/Moves/AcrobaticsTests.cs
index 2529729..66fe2aa 100644
--- a/Plugins/PkmnLib.Plugin.Gen7.Tests/Scripts/Moves/AcrobaticsTests.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7.Tests/Scripts/Moves/AcrobaticsTests.cs
@@ -12,7 +12,7 @@ public class AcrobaticsTests
// Arrange
var move = Substitute.For();
var target = Substitute.For();
- byte basePower = 10;
+ ushort basePower = 10;
var user = Substitute.For();
user.HeldItem.Returns((IItem?)null);
move.User.Returns(user);
@@ -31,7 +31,7 @@ public class AcrobaticsTests
// Arrange
var move = Substitute.For();
var target = Substitute.For();
- byte basePower = 10;
+ ushort basePower = 10;
var user = Substitute.For();
user.HeldItem.Returns(Substitute.For());
move.User.Returns(user);
@@ -50,7 +50,7 @@ public class AcrobaticsTests
// Arrange
var move = Substitute.For();
var target = Substitute.For();
- byte basePower = 200;
+ ushort basePower = ushort.MaxValue - 100;
var user = Substitute.For();
move.User.Returns(user);
user.HeldItem.Returns((IItem?)null);
@@ -60,6 +60,6 @@ public class AcrobaticsTests
acrobatics.ChangeBasePower(move, target, 0, ref basePower);
// Assert
- await Assert.That(basePower).IsEqualTo(byte.MaxValue);
+ await Assert.That(basePower).IsEqualTo(ushort.MaxValue);
}
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7.Tests/Scripts/Moves/HiddenPowerTests.cs b/Plugins/PkmnLib.Plugin.Gen7.Tests/Scripts/Moves/HiddenPowerTests.cs
index b9c9e51..05d11d4 100644
--- a/Plugins/PkmnLib.Plugin.Gen7.Tests/Scripts/Moves/HiddenPowerTests.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7.Tests/Scripts/Moves/HiddenPowerTests.cs
@@ -82,7 +82,7 @@ public class HiddenPowerTests
dynamicLibrary.StaticLibrary.Returns(staticLibrary);
var hiddenPower = new HiddenPower();
- byte power = 0;
+ ushort power = 0;
hiddenPower.ChangeBasePower(executingMove, target, 0, ref power);
await Assert.That(power).IsEqualTo(test.ExpectedPower);
diff --git a/Plugins/PkmnLib.Plugin.Gen7/GlobalUsings.cs b/Plugins/PkmnLib.Plugin.Gen7/GlobalUsings.cs
index 99c8bc9..ab5c8e9 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/GlobalUsings.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/GlobalUsings.cs
@@ -2,4 +2,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;
\ No newline at end of file
+global using PkmnLib.Dynamic.Models.Choices;
+global using PkmnLib.Static;
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7BattleStatCalculator.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7BattleStatCalculator.cs
index f013ab1..572111c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7BattleStatCalculator.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7BattleStatCalculator.cs
@@ -1,6 +1,5 @@
using System;
using PkmnLib.Dynamic.Libraries;
-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 de00e9c..135d72c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7CaptureLibrary.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7CaptureLibrary.cs
@@ -1,6 +1,5 @@
using System;
using PkmnLib.Dynamic.Libraries;
-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 bebd1f6..96628db 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7DamageCalculator.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7DamageCalculator.cs
@@ -1,7 +1,6 @@
using System;
using System.Linq;
using PkmnLib.Dynamic.Libraries;
-using PkmnLib.Static;
using PkmnLib.Static.Moves;
namespace PkmnLib.Plugin.Gen7.Libraries;
@@ -69,11 +68,11 @@ public class Gen7DamageCalculator(bool hasRandomness) : IDamageCalculator
}
///
- public byte GetBasePower(IExecutingMove executingMove, IPokemon target, byte hitNumber, IHitData hitData)
+ public ushort GetBasePower(IExecutingMove executingMove, IPokemon target, byte hitNumber, IHitData hitData)
{
if (executingMove.UseMove.Category == MoveCategory.Status)
return 0;
- var basePower = executingMove.UseMove.BasePower;
+ var basePower = (ushort)executingMove.UseMove.BasePower;
executingMove.RunScriptHook(script => script.ChangeBasePower(executingMove, target, hitNumber, ref basePower));
return basePower;
}
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7MiscLibrary.cs b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7MiscLibrary.cs
index 788d450..8108b40 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7MiscLibrary.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Libraries/Gen7MiscLibrary.cs
@@ -2,7 +2,6 @@ using System.Collections.Generic;
using System.Linq;
using PkmnLib.Dynamic;
using PkmnLib.Dynamic.Libraries;
-using PkmnLib.Static;
using PkmnLib.Static.Moves;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs
index b86ccb0..4b258ad 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/Gravity.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Battle;
@@ -7,6 +6,8 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Battle;
[Script(ScriptCategory.Battle, "gravity")]
public class Gravity : Script
{
+ private int _turns = 5;
+
///
public override void ChangeTypesForIncomingMove(IExecutingMove executingMove, IPokemon target, byte hitIndex,
IList types)
@@ -25,4 +26,21 @@ public class Gravity : Script
if (move.UseMove.HasFlag("gravity"))
fail = true;
}
+
+ ///
+ public override void IsFloating(IPokemon pokemon, ref bool isFloating)
+ {
+ // Gravity makes all Pokémon susceptible to Ground-type moves
+ isFloating = false;
+ }
+
+ ///
+ public override void OnEndTurn(IBattle battle)
+ {
+ _turns--;
+ if (_turns > 0)
+ return;
+
+ RemoveSelf();
+ }
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/IonDelugeEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/IonDelugeEffect.cs
index d10121b..a9b2d31 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/IonDelugeEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/IonDelugeEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Battle;
[Script(ScriptCategory.Move, "ion_deluge")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MagicRoomEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MagicRoomEffect.cs
index 59dfad8..cc17193 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MagicRoomEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MagicRoomEffect.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Battle;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs
index cce1a04..4e4105d 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Battle/MudSportEffect.cs
@@ -8,7 +8,7 @@ public class MudSportEffect : Script
private int _turnsLeft = 5;
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
if (move.UseMove.MoveType.Name == "electric")
{
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs
index 6ebc9b9..96eaa36 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/HealingItem.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Items;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs
index a20e42c..480de47 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Items/StaticPokeball.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Items;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/ElectrifyEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/ElectrifyEffect.cs
index aaa012d..a786558 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/ElectrifyEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/ElectrifyEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.MoveVolatile;
[Script(ScriptCategory.MoveVolatile, "electrify")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/MeFirstPowerBoost.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/MeFirstPowerBoost.cs
index f855d47..e7d23a6 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/MeFirstPowerBoost.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/MeFirstPowerBoost.cs
@@ -6,6 +6,6 @@ namespace PkmnLib.Plugin.Gen7.Scripts.MoveVolatile;
public class MeFirstPowerBoost : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower) =>
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower) =>
basePower = basePower.MultiplyOrMax(1.5f);
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/RoundPowerBoost.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/RoundPowerBoost.cs
index 2983690..d6e5121 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/RoundPowerBoost.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/MoveVolatile/RoundPowerBoost.cs
@@ -6,6 +6,6 @@ namespace PkmnLib.Plugin.Gen7.Scripts.MoveVolatile;
public class RoundPowerBoost : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower) =>
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower) =>
basePower = basePower.MultiplyOrMax(2f);
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs
index 7099e64..12769e4 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acrobatics.cs
@@ -12,7 +12,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Acrobatics : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
if (move.User.HeldItem == null)
basePower = basePower.MultiplyOrMax(2);
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acupressure.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acupressure.cs
index c8235de..613a2a6 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acupressure.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Acupressure.cs
@@ -1,5 +1,4 @@
using System.Linq;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Autotomize.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Autotomize.cs
index e10965b..5379acd 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Autotomize.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Autotomize.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
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 0ee8683..2b223ae 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BatonPass.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BatonPass.cs
@@ -1,6 +1,5 @@
using System;
using System.Linq;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs
index ba5cf1c..5d76b33 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BeatUp.cs
@@ -30,7 +30,7 @@ public class BeatUp : Script
}
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var relevantPartyMembers = _relevantPartyMembers ??= GetRelevantPartyMembers(move.User).ToArray();
var hittingPokemon = relevantPartyMembers.ElementAtOrDefault(hit);
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs
index 82e6103..de32fef 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Belch.cs
@@ -1,5 +1,4 @@
using System.Linq;
-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 6f8715b..acb75e9 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BellyDrum.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BellyDrum.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "belly_drum")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs
index 7b152b8..ee620ae 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Brine.cs
@@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Brine : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
if (target.CurrentHealth <= target.BoostedStats.Hp / 2)
{
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BugBite.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BugBite.cs
index d8139b0..86aeb66 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BugBite.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/BugBite.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "bug_bite")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Captivate.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Captivate.cs
index 8843f2c..bc23347 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Captivate.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Captivate.cs
@@ -1,4 +1,3 @@
-using PkmnLib.Static;
using PkmnLib.Static.Species;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs
index f69d287..cef0ec0 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeAllTargetStats.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs
index 4d10db4..7771e65 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleTargetStatBoosts.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs
index 9baee2d..d47bfdb 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeMultipleUserStatBoosts.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs
index aa66775..daea692 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeTargetStats.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs
index a0f3953..cd83284 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ChangeUserStats.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Charge.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Charge.cs
index 6ec9fce..6e5a69c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Charge.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Charge.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CrushGrip.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CrushGrip.cs
index b964bad..65a6e5d 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CrushGrip.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/CrushGrip.cs
@@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class CrushGrip : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
basePower = Math.Max((byte)(120 * target.CurrentHealth / target.BoostedStats.Hp), (byte)1);
}
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Curse.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Curse.cs
index ff62696..a837f4b 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Curse.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Curse.cs
@@ -1,6 +1,5 @@
using System.Linq;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Defog.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Defog.cs
index d274a78..bd933b4 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Defog.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Defog.cs
@@ -14,7 +14,8 @@ public class Defog : Script
ScriptUtils.ResolveName(),
ScriptUtils.ResolveName(),
ScriptUtils.ResolveName(),
- "spikes",
+ ScriptUtils.ResolveName(),
+ ScriptUtils.ResolveName(),
"toxic_spikes",
"stealth_rock",
];
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoublePowerIfTargetDamagedInTurn.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoublePowerIfTargetDamagedInTurn.cs
index d4e7d4e..a306b1e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoublePowerIfTargetDamagedInTurn.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DoublePowerIfTargetDamagedInTurn.cs
@@ -19,7 +19,7 @@ public class DoublePowerIfTargetDamagedInTurn : Script
}
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var battle = move.User.BattleData?.Battle;
if (battle == null)
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DragonAscent.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DragonAscent.cs
index 053e84d..5c3abc8 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DragonAscent.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/DragonAscent.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "dragon_ascent")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ElectroBall.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ElectroBall.cs
index 1100bd9..d61b1a8 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ElectroBall.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ElectroBall.cs
@@ -4,7 +4,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class ElectroBall : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var user = move.User;
var targetSpeed = target.BoostedStats.Speed;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Eruption.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Eruption.cs
index da4e3cc..a57ae4f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Eruption.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Eruption.cs
@@ -5,7 +5,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "eruption")]
public class Eruption : Script
{
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
basePower = Math.Max((byte)(150 * move.User.CurrentHealth / move.User.BoostedStats.Hp), (byte)1);
}
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Facade.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Facade.cs
index 33aeed1..60a64e7 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Facade.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Facade.cs
@@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Facade : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var status = move.User.StatusScript.Script?.Name;
if (status == "paralyzed" || status == "burned" || status == "poisoned")
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FellStinger.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FellStinger.cs
index 85ebc89..8808f1e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FellStinger.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FellStinger.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "fell_stinger")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flail.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flail.cs
index c7f36e1..73452ea 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flail.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flail.cs
@@ -4,7 +4,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Flail : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var remainingHealth = move.User.CurrentHealth / move.User.BoostedStats.Hp;
var fraction = remainingHealth * 48;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flatter.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flatter.cs
index 2dd6e79..a40b50a 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flatter.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Flatter.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Fling.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Fling.cs
index b3f4d52..862f0d5 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Fling.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Fling.cs
@@ -1,12 +1,10 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "fling")]
public class Fling : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var item = move.User.HeldItem;
if (item == null)
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlowerShield.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlowerShield.cs
index 3c4de61..7538481 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlowerShield.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlowerShield.cs
@@ -1,5 +1,4 @@
using System.Linq;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlyingPress.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlyingPress.cs
index df9c279..39676c1 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlyingPress.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FlyingPress.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Foresight.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Foresight.cs
index e8c2a91..45086b6 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Foresight.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Foresight.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FoulPlay.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FoulPlay.cs
index 4bf3df5..d4b0ffa 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FoulPlay.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FoulPlay.cs
@@ -1,4 +1,3 @@
-using PkmnLib.Static;
using PkmnLib.Static.Moves;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Frustration.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Frustration.cs
index d9c80ed..33392c3 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Frustration.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Frustration.cs
@@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Frustration : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var friendship = move.User.Happiness;
basePower = Math.Max((byte)1, (byte)((255 - friendship) * 2 / 5));
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FuryCutter.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FuryCutter.cs
index dd88079..828aceb 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FuryCutter.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/FuryCutter.cs
@@ -8,7 +8,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class FuryCutter : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var userEffect = move.User.Volatile.Get();
if (userEffect == null)
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GearUp.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GearUp.cs
index f0f9e00..3b81930 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GearUp.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GearUp.cs
@@ -1,4 +1,3 @@
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Geomancy.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Geomancy.cs
index 3813fef..7b8d0df 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Geomancy.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Geomancy.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GrassKnot.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GrassKnot.cs
index e4337b7..70983cc 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GrassKnot.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GrassKnot.cs
@@ -4,7 +4,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class GrassKnot : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var targetWeight = target.WeightInKg;
basePower = targetWeight switch
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardSplit.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardSplit.cs
index 0ebb9bc..36ba8ae 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardSplit.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardSplit.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "guard_split")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardSwap.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardSwap.cs
index 74c2388..716702b 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardSwap.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GuardSwap.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "guard_swap")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GyroBall.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GyroBall.cs
index 0cf24d1..427e69f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GyroBall.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/GyroBall.cs
@@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class GyroBall : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
basePower = Math.Min((byte)150, (byte)(25 * target.BoostedStats.Speed / move.User.BoostedStats.Speed + 1));
}
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HeartSwap.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HeartSwap.cs
index 8fc2073..27f9470 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HeartSwap.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HeartSwap.cs
@@ -1,5 +1,4 @@
using System;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HeatCrash.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HeatCrash.cs
index 2d0330d..3b49c99 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HeatCrash.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HeatCrash.cs
@@ -4,7 +4,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class HeatCrash : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var weightMultiplier = move.User.WeightInKg / target.WeightInKg;
basePower = weightMultiplier switch
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Hex.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Hex.cs
index 3cb2883..bd8fad4 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Hex.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Hex.cs
@@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Hex : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
if (!target.StatusScript.IsEmpty)
{
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HiddenPower.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HiddenPower.cs
index 465b0b1..9f8ed28 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HiddenPower.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/HiddenPower.cs
@@ -1,5 +1,4 @@
using System;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
@@ -18,7 +17,7 @@ public class HiddenPower : Script
}
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var ivs = move.User.IndividualValues;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBall.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBall.cs
index 5fdf1a3..f9b0932 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBall.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/IceBall.cs
@@ -8,7 +8,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class IceBall : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var userEffect = move.User.Volatile.Get();
if (userEffect == null)
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Incinerate.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Incinerate.cs
index 9ee4e26..937f037 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Incinerate.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Incinerate.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "incinerate")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Instruct.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Instruct.cs
index 9761f0f..235cd1c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Instruct.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Instruct.cs
@@ -15,7 +15,7 @@ public class Instruct : Script
if (battleData == null)
return;
- var lastMoveChoiceByTarget = battleData.Battle.PreviousTurnChoices.SelectMany(x => x)
+ var lastMoveChoiceByTarget = battleData.Battle.PreviousTurnChoices.SelectMany(x => x).Reverse()
.SkipWhile(x => x != move.MoveChoice).OfType().FirstOrDefault(x => x.User == target);
if (lastMoveChoiceByTarget == null || !battleData.Battle.CanUse(lastMoveChoiceByTarget))
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Judgement.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Judgement.cs
index f4158ff..fb54de4 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Judgement.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Judgement.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "judgement")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LowKick.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LowKick.cs
index c9401e3..df96cc6 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LowKick.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LowKick.cs
@@ -4,7 +4,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class LowKick : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
basePower = target.WeightInKg switch
{
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Magnitude.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Magnitude.cs
index 3ae761a..3d11dc1 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Magnitude.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Magnitude.cs
@@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Magnitude : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var battleData = move.User.BattleData;
if (battleData == null)
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Memento.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Memento.cs
index 6edcddf..17b02fe 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Memento.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Memento.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "memento")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MiracleEye.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MiracleEye.cs
index 7b570e5..2e7e2fc 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MiracleEye.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MiracleEye.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MultiAttack.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MultiAttack.cs
index 4de0b8a..f537e27 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MultiAttack.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/MultiAttack.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "multi_attack")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturalGift.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturalGift.cs
index b6fc112..308811a 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturalGift.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/NaturalGift.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
@@ -8,7 +7,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class NaturalGift : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var naturalGiftData = GetNaturalGiftData(move.User.HeldItem);
if (naturalGiftData == null)
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PartingShot.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PartingShot.cs
index 2f4aed4..8719314 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PartingShot.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PartingShot.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
///
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Payback.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Payback.cs
index ba587f4..58cdd99 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Payback.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Payback.cs
@@ -9,7 +9,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Payback : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var battleData = move.User.BattleData;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerSplit.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerSplit.cs
index 9121939..0f8679b 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerSplit.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerSplit.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "power_split")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerSwap.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerSwap.cs
index 12a232f..a62ff07 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerSwap.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerSwap.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "power_swap")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs
index 740fa00..f23eeac 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PowerTrip.cs
@@ -1,5 +1,4 @@
using System;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Present.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Present.cs
index b9f77b9..2f02ef1 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Present.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Present.cs
@@ -40,7 +40,7 @@ public class Present : Script
}
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
basePower = _basePower;
}
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PsychUp.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PsychUp.cs
index 39c98b7..1d8dd1d 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PsychUp.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/PsychUp.cs
@@ -1,5 +1,4 @@
using System;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psyshock.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psyshock.cs
index ad5bca3..f4719e9 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psyshock.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Psyshock.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "psyshock")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Punishment.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Punishment.cs
index 85fe709..77520a9 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Punishment.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Punishment.cs
@@ -1,5 +1,4 @@
using System.Linq;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
@@ -7,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Punishment : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
if (move.User.BattleData == null)
return;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RapidSpin.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RapidSpin.cs
index d3502eb..65b4c4a 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RapidSpin.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RapidSpin.cs
@@ -1,4 +1,5 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+using PkmnLib.Plugin.Gen7.Scripts.Side;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
@@ -12,12 +13,16 @@ public class RapidSpin : Script
move.User.Volatile.Remove();
move.User.Volatile.Remove();
move.User.Volatile.Remove();
- // TODO: Sand Tomb effect removal
// TODO: Whirlpool effect removal
// TODO: Wrap effect removal
- // TODO: Remove Spikes
- // TODO: Remove Toxic Spikes
- // TODO: Remove Stealth Rock
+ var battleData = move.User.BattleData;
+ if (battleData != null)
+ {
+ battleData.BattleSide.VolatileScripts.Remove();
+ battleData.BattleSide.VolatileScripts.Remove();
+ // TODO: Remove Toxic Spikes
+ // TODO: Remove Stealth Rock
+ }
}
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ResetTargetStats.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ResetTargetStats.cs
index a0d6dc4..e88e1ba 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ResetTargetStats.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ResetTargetStats.cs
@@ -1,5 +1,4 @@
using System;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Retaliate.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Retaliate.cs
index 0359410..4c6fbe7 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Retaliate.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Retaliate.cs
@@ -6,7 +6,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Retaliate : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var battleData = move.User.BattleData;
if (battleData is null)
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Return.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Return.cs
index bcc1222..5e9fc2e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Return.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Return.cs
@@ -4,7 +4,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
public class Return : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
var friendship = move.User.Happiness;
var power = friendship * 2 / 5;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RevelationDance.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RevelationDance.cs
index b805a3c..0d4239c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RevelationDance.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/RevelationDance.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "revelation_dance")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rototiller.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rototiller.cs
index 9c25d01..726ad2c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rototiller.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Rototiller.cs
@@ -1,5 +1,4 @@
using System.Linq;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ShellSmash.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ShellSmash.cs
index 0bd335a..1d1b92f 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ShellSmash.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/ShellSmash.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "shell_smash")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SkullBash.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SkullBash.cs
index db0070c..906d526 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SkullBash.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SkullBash.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SkyAttack.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SkyAttack.cs
index a4b3c11..2225077 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SkyAttack.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SkyAttack.cs
@@ -1,5 +1,4 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SleepTalk.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SleepTalk.cs
index 391d40b..5ba7b27 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SleepTalk.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SleepTalk.cs
@@ -1,4 +1,3 @@
-using System;
using System.Linq;
using PkmnLib.Plugin.Gen7.Scripts.MoveVolatile;
using PkmnLib.Plugin.Gen7.Scripts.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SmackDown.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SmackDown.cs
index 228e073..ffb355e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SmackDown.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SmackDown.cs
@@ -1,7 +1,4 @@
-using System.Collections.Generic;
-using System.Linq;
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
-using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpeedSwap.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpeedSwap.cs
index 52cca31..c7b015c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpeedSwap.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpeedSwap.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "speed_swap")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Spikes.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Spikes.cs
new file mode 100644
index 0000000..38ad885
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Spikes.cs
@@ -0,0 +1,13 @@
+using PkmnLib.Plugin.Gen7.Scripts.Side;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "spikes")]
+public class Spikes : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ target.BattleData?.Battle.Volatile.Add(new SpikesEffect());
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpikyShield.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpikyShield.cs
new file mode 100644
index 0000000..d3ab69d
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpikyShield.cs
@@ -0,0 +1,10 @@
+using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "spiky_shield")]
+public class SpikyShield : ProtectionScript
+{
+ ///
+ protected override Script GetEffectScript() => new SpikyShieldEffect();
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpitUp.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpitUp.cs
new file mode 100644
index 0000000..9e8e58f
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SpitUp.cs
@@ -0,0 +1,21 @@
+using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+using PkmnLib.Static.Utils;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "spit_up")]
+public class SpitUp : Script
+{
+ ///
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
+ {
+ var stockpileEffect = move.User.Volatile.Get();
+ if (stockpileEffect == null || stockpileEffect.StockpileCount == 0)
+ {
+ move.GetHitData(target, hit).Fail();
+ return;
+ }
+ var stockpileCount = stockpileEffect.StockpileCount;
+ basePower = basePower.MultiplyOrMax(stockpileCount);
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Spite.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Spite.cs
new file mode 100644
index 0000000..81ba5fd
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Spite.cs
@@ -0,0 +1,24 @@
+using System.Linq;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "spite")]
+public class Spite : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ var lastMoveChoiceByTarget = move.Battle.PreviousTurnChoices.SelectMany(x => x).Reverse()
+ .SkipWhile(x => x != move.MoveChoice).OfType().FirstOrDefault(x => x.User == target);
+ if (lastMoveChoiceByTarget == null || lastMoveChoiceByTarget.HasFailed)
+ {
+ move.GetHitData(target, hit).Fail();
+ return;
+ }
+ if (!lastMoveChoiceByTarget.ChosenMove.ReduceUses(4))
+ {
+ move.GetHitData(target, hit).Fail();
+ return;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SplinteredStormshards.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SplinteredStormshards.cs
new file mode 100644
index 0000000..1059b7a
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/SplinteredStormshards.cs
@@ -0,0 +1,11 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "splintered_stormshards")]
+public class SplinteredStormshards : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ move.Battle.SetTerrain(null);
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Spotlight.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Spotlight.cs
new file mode 100644
index 0000000..38385a8
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Spotlight.cs
@@ -0,0 +1,14 @@
+using PkmnLib.Plugin.Gen7.Scripts.Side;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "spotlight")]
+public class Spotlight : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ var battleData = target.BattleData;
+ battleData?.BattleSide.VolatileScripts.Add(new SpotlightEffect(battleData.BattleSide, battleData.Position));
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StealthRock.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StealthRock.cs
new file mode 100644
index 0000000..290279e
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StealthRock.cs
@@ -0,0 +1,13 @@
+using PkmnLib.Plugin.Gen7.Scripts.Side;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "stealth_rock")]
+public class StealthRock : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ target.BattleData?.BattleSide.VolatileScripts.Add(new StealthRockEffect());
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StickyWeb.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StickyWeb.cs
new file mode 100644
index 0000000..0a8ac18
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StickyWeb.cs
@@ -0,0 +1,13 @@
+using PkmnLib.Plugin.Gen7.Scripts.Side;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "sticky_web")]
+public class StickyWeb : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ target.BattleData?.BattleSide.VolatileScripts.Add(new StickyWebEffect());
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Stockpile.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Stockpile.cs
new file mode 100644
index 0000000..31107be
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/Stockpile.cs
@@ -0,0 +1,17 @@
+using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "stockpile")]
+public class Stockpile : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ EventBatchId batchId = new();
+ move.User.ChangeStatBoost(Statistic.Defense, 1, true, batchId);
+ move.User.ChangeStatBoost(Statistic.SpecialDefense, 1, true, batchId);
+
+ move.User.Volatile.StackOrAdd(ScriptUtils.ResolveName(), () => new StockpileEffect());
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StompingTantrum.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StompingTantrum.cs
new file mode 100644
index 0000000..91c7103
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StompingTantrum.cs
@@ -0,0 +1,19 @@
+using System.Linq;
+using PkmnLib.Static.Utils;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "stomping_tantrum")]
+public class StompingTantrum : Script
+{
+ ///
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
+ {
+ var lastMoveChoice = move.Battle.PreviousTurnChoices.Reverse().Skip(1).SelectMany(x => x.Reverse())
+ .OfType().FirstOrDefault(x => x.User == move.User);
+ if (lastMoveChoice is { HasFailed: true })
+ {
+ basePower = basePower.MultiplyOrMax(2);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StormThrow.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StormThrow.cs
new file mode 100644
index 0000000..9a770c3
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StormThrow.cs
@@ -0,0 +1,13 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "storm_throw")]
+public class StormThrow : Script
+{
+ ///
+ public override void ChangeCriticalStage(IExecutingMove move, IPokemon target, byte hit, ref byte stage)
+ {
+ // Storm Throw always results in a critical hit
+ // Setting to any value higher than 2 will always result in a critical hit.
+ stage = 100;
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StrengthSap.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StrengthSap.cs
new file mode 100644
index 0000000..32dacd5
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/StrengthSap.cs
@@ -0,0 +1,17 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "strength_sap")]
+public class StrengthSap : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ var attack = target.BoostedStats.Attack;
+ if (!target.ChangeStatBoost(Statistic.Attack, -1, false))
+ {
+ move.GetHitData(target, hit).Fail();
+ return;
+ }
+ move.User.Heal(attack);
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EmbargoEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EmbargoEffect.cs
index c9eb0ab..dd3d3fd 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EmbargoEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/EmbargoEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "embargo")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs
index e1570cb..76978f8 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/ForesightEffect.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Libraries;
using PkmnLib.Static.Utils;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs
index 18aa2a1..1bc7912 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/HelpingHandEffect.cs
@@ -5,7 +5,7 @@ namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
public class HelpingHandEffect : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower) =>
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower) =>
basePower = basePower.MultiplyOrMax(1.5f);
///
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs
index 848b73a..9ba63bc 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/IngrainEffect.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/KingsShield.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/KingsShield.cs
index 52c33e6..1cd6cc9 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/KingsShield.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/KingsShield.cs
@@ -1,4 +1,3 @@
-using PkmnLib.Static;
using PkmnLib.Static.Moves;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MiracleEyeEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MiracleEyeEffect.cs
index d765b6a..c907570 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MiracleEyeEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/MiracleEyeEffect.cs
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Linq;
-using PkmnLib.Static;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PowerTrickEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PowerTrickEffect.cs
index 3187079..7d006ea 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PowerTrickEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PowerTrickEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "power_trick")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PursuitEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PursuitEffect.cs
index bcb6699..d68ef41 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PursuitEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/PursuitEffect.cs
@@ -44,7 +44,7 @@ public class PursuitEffect : Script
private class PursuitDoublePowerEffect : Script
{
///
- public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref ushort basePower)
{
basePower = basePower.MultiplyOrMax(2);
}
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RageEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RageEffect.cs
index a57f565..4ca1c95 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RageEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RageEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
[Script(ScriptCategory.Pokemon, "rage")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs
index 0a4fe5d..5b0e41c 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/RoostEffect.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SmackDownEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SmackDownEffect.cs
index 273d683..ef8657e 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SmackDownEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SmackDownEffect.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
@@ -18,4 +17,10 @@ public class SmackDownEffect : Script
// Remove all types that are immune to ground moves
types.RemoveAll(x => typeLibrary.GetSingleEffectiveness(executingMove.UseMove.MoveType, x) == 0);
}
+
+ ///
+ public override void IsFloating(IPokemon pokemon, ref bool isFloating)
+ {
+ isFloating = false;
+ }
}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SpiderWebEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SpiderWebEffect.cs
index 748007e..6e853b2 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SpiderWebEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SpiderWebEffect.cs
@@ -1,4 +1,3 @@
-using System;
using System.Collections.Generic;
namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SpikyShieldEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SpikyShieldEffect.cs
new file mode 100644
index 0000000..a56b6f3
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/SpikyShieldEffect.cs
@@ -0,0 +1,14 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+public class SpikyShieldEffect : ProtectionEffectScript
+{
+ ///
+ public override void BlockIncomingHit(IExecutingMove executingMove, IPokemon target, byte hitIndex, ref bool block)
+ {
+ base.BlockIncomingHit(executingMove, target, hitIndex, ref block);
+ if (block)
+ {
+ executingMove.User.Damage(executingMove.User.MaxHealth / 8, DamageSource.Misc);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/StockpileEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/StockpileEffect.cs
new file mode 100644
index 0000000..4ce7a1a
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/StockpileEffect.cs
@@ -0,0 +1,16 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+[Script(ScriptCategory.Pokemon, "stockpile_effect")]
+public class StockpileEffect : Script
+{
+ public int StockpileCount { get; set; } = 1;
+
+ ///
+ public override void Stack()
+ {
+ if (StockpileCount < 3)
+ {
+ StockpileCount++;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MistEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MistEffect.cs
index 620f26b..99cd1b5 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MistEffect.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/MistEffect.cs
@@ -1,5 +1,3 @@
-using PkmnLib.Static;
-
namespace PkmnLib.Plugin.Gen7.Scripts.Side;
[Script(ScriptCategory.Side, "mist")]
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpikesEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpikesEffect.cs
new file mode 100644
index 0000000..7178ddb
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpikesEffect.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using PkmnLib.Static.Utils;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Side;
+
+[Script(ScriptCategory.Side, "spikes")]
+public class SpikesEffect : Script
+{
+ private int _layers = 1;
+
+ ///
+ public override void Stack()
+ {
+ if (_layers < 3)
+ _layers++;
+ }
+
+ ///
+ public override void OnSwitchIn(IPokemon pokemon, byte position)
+ {
+ if (pokemon.IsFloating)
+ return;
+
+ var modifier = _layers switch
+ {
+ 1 => 1 / 16f,
+ 2 => 3 / 16f,
+ 3 => 1 / 4f,
+ _ => throw new ArgumentOutOfRangeException(),
+ };
+ var damage = (uint)(pokemon.MaxHealth * modifier);
+
+ EventBatchId eventBatch = new();
+ pokemon.Damage(damage, DamageSource.Misc, eventBatch);
+ pokemon.BattleData?.Battle.EventHook.Invoke(new DialogEvent("spikes_damage", new Dictionary
+ {
+ { "pokemon", pokemon },
+ })
+ {
+ BatchId = eventBatch,
+ });
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpotlightEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpotlightEffect.cs
new file mode 100644
index 0000000..cf5c59a
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/SpotlightEffect.cs
@@ -0,0 +1,33 @@
+using System.Collections.Generic;
+using PkmnLib.Dynamic.Models.BattleFlow;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Side;
+
+public class SpotlightEffect : Script
+{
+ private readonly byte _position;
+ private readonly IBattleSide _side;
+
+ public SpotlightEffect(IBattleSide side, byte position)
+ {
+ _side = side;
+ _position = position;
+ }
+
+ ///
+ public override void ChangeIncomingTargets(IMoveChoice moveChoice, ref IReadOnlyList targets)
+ {
+ if (!TargetResolver.IsValidTarget(_side.Index, _position, moveChoice.ChosenMove.MoveData.Target,
+ moveChoice.User))
+ return;
+ if (_side.Pokemon[_position] == null)
+ return;
+ targets = [_side.Pokemon[_position]!];
+ }
+
+ ///
+ public override void OnEndTurn(IBattle battle)
+ {
+ RemoveSelf();
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/StealthRockEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/StealthRockEffect.cs
new file mode 100644
index 0000000..275adeb
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/StealthRockEffect.cs
@@ -0,0 +1,26 @@
+using System.Collections.Generic;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Side;
+
+[Script(ScriptCategory.Side, "stealth_rock")]
+public class StealthRockEffect : Script
+{
+ ///
+ public override void OnSwitchIn(IPokemon pokemon, byte position)
+ {
+ var typeLibrary = pokemon.Library.StaticLibrary.Types;
+ var effectiveness = 1.0f;
+ if (typeLibrary.TryGetTypeIdentifier("rock", out var rockType))
+ {
+ effectiveness = typeLibrary.GetEffectiveness(rockType, pokemon.Types);
+ }
+ var damage = (uint)(pokemon.MaxHealth / 8f * effectiveness);
+ EventBatchId batchId = new();
+ pokemon.Damage(damage, DamageSource.Misc, batchId);
+ pokemon.BattleData?.Battle.EventHook.Invoke(new DialogEvent("stealth_rock_damage",
+ new Dictionary
+ {
+ { "pokemon", pokemon },
+ }));
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/StickyWebEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/StickyWebEffect.cs
new file mode 100644
index 0000000..e3d9792
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/StickyWebEffect.cs
@@ -0,0 +1,13 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Side;
+
+[Script(ScriptCategory.Side, "sticky_web")]
+public class StickyWebEffect : Script
+{
+ ///
+ public override void OnSwitchIn(IPokemon pokemon, byte position)
+ {
+ if (pokemon.IsFloating)
+ return;
+ pokemon.ChangeStatBoost(Statistic.Speed, -1, false);
+ }
+}
\ 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 ddd4b44..cde3a7a 100644
--- a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Weather/Hail.cs
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Linq;
-using PkmnLib.Static;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Weather;