Make another pass through moves file
All checks were successful
Build / Build (push) Successful in 47s

This commit is contained in:
2025-05-18 14:15:37 +02:00
parent 9ff4745c0a
commit cbd4340b13
11 changed files with 322 additions and 17 deletions

View File

@@ -0,0 +1,16 @@
using PkmnLib.Plugin.Gen7.Scripts.Pokemon;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "feint")]
public class Feint : Script
{
/// <inheritdoc />
public override void OnBeforeHit(IExecutingMove move, IPokemon target, byte hitIndex)
{
if (target.Volatile.Contains<ProtectionEffectScript>())
{
target.Volatile.Remove<ProtectionEffectScript>();
}
}
}

View File

@@ -0,0 +1,7 @@
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "happy_hour")]
public class HappyHour : Script
{
// TODO: Implement Happy Hour
}

View File

@@ -8,10 +8,7 @@ public class IncreasedCriticalStage : Script
{
// Extreme edge case, should never happen
if (stage == byte.MaxValue)
{
move.GetHitData(target, hit).Fail();
return;
}
stage += 1;
}
}

View File

@@ -0,0 +1,25 @@
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "magnetic_flux")]
public class MagneticFlux : Script
{
/// <inheritdoc />
public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
{
var battleData = move.User.BattleData;
if (battleData is null)
return;
foreach (var pokemon in battleData.BattleSide.Pokemon.WhereNotNull())
{
if (pokemon.ActiveAbility?.Name != "plus" && pokemon.ActiveAbility?.Name != "minus")
continue;
EventBatchId batch = new();
pokemon.ChangeStatBoost(Statistic.Defense, 1, pokemon == move.User, batch);
pokemon.ChangeStatBoost(Statistic.SpecialDefense, 1, pokemon == move.User, batch);
}
}
}

View File

@@ -0,0 +1,27 @@
using PkmnLib.Plugin.Gen7.Scripts.Battle;
using PkmnLib.Static.Utils;
namespace PkmnLib.Plugin.Gen7.Scripts.Moves;
[Script(ScriptCategory.Move, "uproar")]
public class Uproar : Script
{
/// <inheritdoc />
public override void OnSecondaryEffect(IExecutingMove move, IPokemon target, byte hit)
{
var battle = move.Battle;
foreach (var pokemon in battle.Sides.SelectMany(x => x.Pokemon).WhereNotNull())
{
if (pokemon.HasStatus(ScriptUtils.ResolveName<Status.Sleep>()))
{
pokemon.ClearStatus();
}
}
var script = battle.Volatile.Add(new UproarEffect());
if (script?.Script is UproarEffect uproarEffect)
{
uproarEffect.SetPlacer(move.User);
}
}
}