diff --git a/PkmnLib.Tests/Data/Moves.json b/PkmnLib.Tests/Data/Moves.json
index 8a9fccd..55ff07d 100755
--- a/PkmnLib.Tests/Data/Moves.json
+++ b/PkmnLib.Tests/Data/Moves.json
@@ -6297,7 +6297,10 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "lock_on"
+ }
},
{
"name": "lovely_kiss",
@@ -6312,7 +6315,13 @@
"protect",
"reflectable",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "set_status",
+ "parameters": {
+ "status": "sleep"
+ }
+ }
},
{
"name": "low_kick",
@@ -6327,7 +6336,10 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "low_kick"
+ }
},
{
"name": "low_sweep",
@@ -6342,7 +6354,13 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "change_target_speed",
+ "parameters": {
+ "amount": -1
+ }
+ }
},
{
"name": "lucky_chant",
@@ -6355,7 +6373,10 @@
"category": "status",
"flags": [
"snatch"
- ]
+ ],
+ "effect": {
+ "name": "lucky_chant"
+ }
},
{
"name": "lunar_dance",
@@ -6370,7 +6391,10 @@
"snatch",
"heal",
"dance"
- ]
+ ],
+ "effect": {
+ "name": "lunar_dance"
+ }
},
{
"name": "lunge",
@@ -6385,7 +6409,13 @@
"contact",
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "change_target_attack",
+ "parameters": {
+ "amount": -1
+ }
+ }
},
{
"name": "luster_purge",
@@ -6399,7 +6429,14 @@
"flags": [
"protect",
"mirror"
- ]
+ ],
+ "effect": {
+ "name": "change_target_special_defense",
+ "chance": 50,
+ "parameters": {
+ "amount": -1
+ }
+ }
},
{
"name": "mach_punch",
@@ -6416,17 +6453,19 @@
"mirror",
"punch"
]
+ // No secondary effect
},
{
"name": "magic_coat",
"type": "psychic",
"power": 0,
"pp": 15,
- "accuracy": 0,
+ "accuracy": 255,
"priority": 4,
"target": "Self",
"category": "status",
"flags": []
+ // No secondary effect
},
{
"name": "magic_room",
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LockOn.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LockOn.cs
new file mode 100644
index 0000000..011b540
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LockOn.cs
@@ -0,0 +1,13 @@
+using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "lock_on")]
+public class LockOn : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ target.Volatile.Add(new LockOnEffect(target));
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LowKick.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LowKick.cs
new file mode 100644
index 0000000..c9401e3
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LowKick.cs
@@ -0,0 +1,19 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "low_kick")]
+public class LowKick : Script
+{
+ ///
+ public override void ChangeBasePower(IExecutingMove move, IPokemon target, byte hit, ref byte basePower)
+ {
+ basePower = target.WeightInKg switch
+ {
+ < 10 => 20,
+ < 25 => 40,
+ < 50 => 60,
+ < 100 => 80,
+ < 200 => 100,
+ _ => 120,
+ };
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LuckyChant.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LuckyChant.cs
new file mode 100644
index 0000000..ad9b0c5
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LuckyChant.cs
@@ -0,0 +1,13 @@
+using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "lucky_chant")]
+public class LuckyChant : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ target.Volatile.Add(new LuckyChantEffect());
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LunarDance.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LunarDance.cs
new file mode 100644
index 0000000..39874e8
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Moves/LunarDance.cs
@@ -0,0 +1,14 @@
+using PkmnLib.Plugin.Gen7.Scripts.Side;
+
+namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
+
+[Script(ScriptCategory.Move, "lunar_dance")]
+public class LunarDance : Script
+{
+ ///
+ public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
+ {
+ var battleData = move.User.BattleData;
+ battleData?.BattleSide.VolatileScripts.Add(new LunarDanceEffect(battleData.Position));
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LockOnEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LockOnEffect.cs
new file mode 100644
index 0000000..021ea47
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LockOnEffect.cs
@@ -0,0 +1,27 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+[Script(ScriptCategory.Pokemon, "lock_on")]
+public class LockOnEffect : Script
+{
+ private readonly IPokemon _placer;
+
+ public LockOnEffect(IPokemon placer)
+ {
+ _placer = placer;
+ }
+
+ ///
+ public override void ChangeAccuracy(IExecutingMove executingMove, IPokemon target, byte hitIndex,
+ ref int modifiedAccuracy)
+ {
+ if (_placer != target)
+ return;
+ modifiedAccuracy = 255;
+ }
+
+ ///
+ public override void OnEndTurn(IBattle battle)
+ {
+ RemoveSelf();
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LuckyChantEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LuckyChantEffect.cs
new file mode 100644
index 0000000..9243d69
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Pokemon/LuckyChantEffect.cs
@@ -0,0 +1,21 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;
+
+public class LuckyChantEffect : Script
+{
+ private int _turnsLeft = 5;
+
+ ///
+ public override void BlockCriticalHit(IExecutingMove move, IPokemon target, byte hit, ref bool block)
+ {
+ block = true;
+ }
+
+ ///
+ public override void OnEndTurn(IBattle battle)
+ {
+ _turnsLeft--;
+ if (_turnsLeft > 0)
+ return;
+ RemoveSelf();
+ }
+}
\ No newline at end of file
diff --git a/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LunarDanceEffect.cs b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LunarDanceEffect.cs
new file mode 100644
index 0000000..8432121
--- /dev/null
+++ b/Plugins/PkmnLib.Plugin.Gen7/Scripts/Side/LunarDanceEffect.cs
@@ -0,0 +1,17 @@
+namespace PkmnLib.Plugin.Gen7.Scripts.Side;
+
+[Script(ScriptCategory.Side, "lunar_dance")]
+public class LunarDanceEffect(byte position) : Script
+{
+ ///
+ public override void OnSwitchIn(IPokemon pokemon, byte position1)
+ {
+ if (position != position1)
+ return;
+
+ pokemon.Heal(pokemon.MaxHealth);
+ pokemon.RestoreAllPP();
+ pokemon.ClearStatus();
+ RemoveSelf();
+ }
+}
\ No newline at end of file