#ifndef CREATURELIB_SCRIPT_HPP #define CREATURELIB_SCRIPT_HPP #include #include #include "../../Library/EffectParameter.hpp" namespace CreatureLib::Battling { class BaseTurnChoice; class AttackTurnChoice; class SwitchTurnChoice; class ExecutingAttack; class Creature; class Script { public: virtual ~Script() = default; virtual void Stack(){}; virtual void OnRemove(){}; virtual const ArbUt::StringView& GetName() const noexcept = 0; virtual void OnInitialize(const ArbUt::List& parameters){}; virtual void OnBeforeTurn(const BaseTurnChoice* choice){}; virtual void ChangePriority(AttackTurnChoice* choice, int8_t* priority){}; virtual void ChangeAttack(AttackTurnChoice* choice, ArbUt::StringView* outAttack){}; virtual void PreventAttack(ExecutingAttack* attack, bool* outResult){}; virtual void FailAttack(ExecutingAttack* attack, bool* outFailed){}; virtual void StopBeforeAttack(ExecutingAttack* attack, bool* outResult){}; virtual void OnBeforeAttack(ExecutingAttack* attack){}; virtual void FailIncomingAttack(ExecutingAttack* attack, Creature* target, bool* outResult){}; virtual void IsInvulnerable(ExecutingAttack* attack, Creature* target, bool* outResult){}; virtual void OnAttackMiss(ExecutingAttack* attack, Creature* target){}; virtual void ChangeAttackType(ExecutingAttack* attack, Creature* target, uint8_t hitNumber, uint8_t* outType){}; virtual void ChangeEffectiveness(ExecutingAttack* attack, Creature* target, uint8_t hitNumber, float* effectiveness){}; virtual void OverrideBasePower(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, uint8_t* basePower){}; virtual void ChangeDamageStatsUser(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, Creature** statsUser){}; virtual void BypassDefensiveStat(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, bool* bypass){}; virtual void BypassOffensiveStat(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, bool* bypass){}; virtual void ModifyStatModifier(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, float* modifier){}; virtual void ModifyDamageModifier(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, float* modifier){}; virtual void OverrideDamage(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, uint32_t* damage){}; virtual void PreventSecondaryEffects(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber, bool* outResult){}; virtual void OnSecondaryEffect(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber){}; virtual void OnAfterHits(const ExecutingAttack* attack, Creature* target){}; virtual void PreventSelfSwitch(const SwitchTurnChoice* choice, bool* outResult){}; virtual void ModifyEffectChance(const ExecutingAttack* attack, Creature* target, float* chance){}; virtual void ModifyIncomingEffectChance(const ExecutingAttack* attack, Creature* target, float* chance){}; }; } #endif // CREATURELIB_SCRIPT_HPP