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