From b2ba3d96badfaa610a32ef21b88bd3ef6bfca9fe Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 7 Jun 2025 10:58:58 +0200 Subject: [PATCH] Adds more abilities --- PkmnLib.Dynamic/Events/AbilityTriggerEvent.cs | 12 ++++- .../DataLoaders/Models/SerializedAbility.cs | 3 ++ PkmnLib.Dynamic/Models/Pokemon.cs | 5 ++ PkmnLib.Dynamic/ScriptHandling/Script.cs | 7 +++ .../ScriptHandling/ScriptExecution.cs | 28 +++++++++++ PkmnLib.NET.sln.DotSettings | 1 + PkmnLib.Static/Species/Ability.cs | 3 ++ .../PkmnLib.Plugin.Gen7/Data/Abilities.jsonc | 49 ++++++++++++++----- .../Scripts/Abilities/AuraBreak.cs | 27 +++++++++- .../Scripts/Abilities/Comatose.cs | 32 ++++++++++++ .../Scripts/Abilities/Competitive.cs | 27 ++++++++++ .../Scripts/Abilities/CompoundEyes.cs | 18 +++++++ .../Scripts/Abilities/Contrary.cs | 20 ++++++++ .../Scripts/Abilities/Corrosion.cs | 13 +++++ .../Scripts/Abilities/CursedBody.cs | 25 ++++++++++ .../Scripts/Abilities/CuteCharm.cs | 34 +++++++++++++ .../Scripts/Abilities/Damp.cs | 21 ++++++++ .../Scripts/Abilities/Dancer.cs | 13 +++++ .../Scripts/Abilities/DarkAura.cs | 35 +++++++++++++ .../Scripts/Abilities/Dazzling.cs | 20 ++++++++ .../Scripts/Abilities/Defeatist.cs | 20 ++++++++ .../Scripts/Abilities/Defiant.cs | 27 ++++++++++ .../Abilities/SpeedModifierInWeather.cs | 2 +- .../Scripts/CustomTriggers.cs | 2 + .../Scripts/Status/Burned.cs | 1 - 25 files changed, 429 insertions(+), 16 deletions(-) create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Comatose.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Competitive.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/CompoundEyes.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Contrary.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Corrosion.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/CursedBody.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/CuteCharm.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Damp.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Dancer.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/DarkAura.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Dazzling.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defeatist.cs create mode 100644 Plugins/PkmnLib.Plugin.Gen7/Scripts/Abilities/Defiant.cs diff --git a/PkmnLib.Dynamic/Events/AbilityTriggerEvent.cs b/PkmnLib.Dynamic/Events/AbilityTriggerEvent.cs index 1d140d2..ddfee0a 100644 --- a/PkmnLib.Dynamic/Events/AbilityTriggerEvent.cs +++ b/PkmnLib.Dynamic/Events/AbilityTriggerEvent.cs @@ -1,14 +1,24 @@ using PkmnLib.Dynamic.Models; using PkmnLib.Static.Species; -using PkmnLib.Static.Utils; namespace PkmnLib.Dynamic.Events; +/// +/// AbilityTriggerEvent is triggered when a Pokémon's ability is activated. +/// public record AbilityTriggerEvent : IEventData { + /// + /// The Pokémon whose ability is being triggered. + /// public IPokemon Pokemon { get; } + + /// + /// The ability that is being triggered for the Pokémon. + /// public IAbility? Ability { get; } + /// public AbilityTriggerEvent(IPokemon pokemon) { Pokemon = pokemon; diff --git a/PkmnLib.Dynamic/Libraries/DataLoaders/Models/SerializedAbility.cs b/PkmnLib.Dynamic/Libraries/DataLoaders/Models/SerializedAbility.cs index c2fb6ad..cf9afdd 100644 --- a/PkmnLib.Dynamic/Libraries/DataLoaders/Models/SerializedAbility.cs +++ b/PkmnLib.Dynamic/Libraries/DataLoaders/Models/SerializedAbility.cs @@ -20,5 +20,8 @@ public class SerializedAbility /// public string[] Flags { get; set; } = []; + /// + /// Indicates whether the ability can be changed by effects such as Skill Swap or Role Play. + /// public bool? CanBeChanged { get; set; } } \ No newline at end of file diff --git a/PkmnLib.Dynamic/Models/Pokemon.cs b/PkmnLib.Dynamic/Models/Pokemon.cs index 217cb4b..b7761a2 100644 --- a/PkmnLib.Dynamic/Models/Pokemon.cs +++ b/PkmnLib.Dynamic/Models/Pokemon.cs @@ -814,6 +814,10 @@ public class PokemonImpl : ScriptSource, IPokemon return true; } + /// + /// Uses an item on this Pokémon. + /// + /// public void UseItem(IItem item) { // TODO: actually consume the item @@ -851,6 +855,7 @@ public class PokemonImpl : ScriptSource, IPokemon } RecalculateBoostedStats(); + this.RunScriptHook(script => script.OnAfterStatBoostChange(this, stat, selfInflicted, change)); return true; } diff --git a/PkmnLib.Dynamic/ScriptHandling/Script.cs b/PkmnLib.Dynamic/ScriptHandling/Script.cs index e6ec591..511aaa4 100644 --- a/PkmnLib.Dynamic/ScriptHandling/Script.cs +++ b/PkmnLib.Dynamic/ScriptHandling/Script.cs @@ -418,6 +418,13 @@ public abstract class Script : IDeepCloneable { } + /// + /// This function allows a script to run after a stat boost change has been applied. + /// + public virtual void OnAfterStatBoostChange(IPokemon pokemon, Statistic stat, bool selfInflicted, sbyte change) + { + } + /// /// This function allows a script attached to a Pokemon or its parents to prevent an incoming /// secondary effect. This means the move will still hit and do damage, but not trigger its diff --git a/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs b/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs index 06154d8..f1e6430 100644 --- a/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs +++ b/PkmnLib.Dynamic/ScriptHandling/ScriptExecution.cs @@ -37,6 +37,34 @@ public static class ScriptExecution } } + /// + /// Executes a hook on all scripts in a source. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void RunScriptHook(this IEnumerable sources, Action