namespace PkmnLib.Plugin.Gen7.Scripts.Side; [Script(ScriptCategory.Side, "spikes")] public class SpikesEffect : Script, IScriptOnSwitchIn, IScriptStack, IAIInfoScriptExpectedEntryDamage { private int _layers = 1; /// public void Stack() { if (_layers < 3) _layers++; } /// public void OnSwitchIn(IPokemon pokemon, byte position) { if (pokemon.IsFloating) return; var damage = CalculateDamage(pokemon); EventBatchId eventBatch = new(); pokemon.Damage(damage, DamageSource.Misc, eventBatch); pokemon.BattleData?.Battle.EventHook.Invoke(new DialogEvent("spikes_damage", new Dictionary { { "pokemon", pokemon }, }) { BatchId = eventBatch, }); } private uint CalculateDamage(IPokemon pokemon) { var modifier = _layers switch { 1 => 1 / 16f, 2 => 3 / 16f, 3 => 1 / 4f, _ => throw new ArgumentOutOfRangeException(), }; var damage = (uint)(pokemon.MaxHealth * modifier); return damage; } /// public void ExpectedEntryDamage(IPokemon pokemon, ref uint damage) { if (pokemon.IsFloating) return; damage += CalculateDamage(pokemon); } }