128 lines
6.9 KiB
C++
128 lines
6.9 KiB
C++
#ifndef CREATURELIB_SCRIPT_HPP
|
|
#define CREATURELIB_SCRIPT_HPP
|
|
|
|
#include <Arbutils/Collections/List.hpp>
|
|
#include <Arbutils/Memory/Memory.hpp>
|
|
#include <Arbutils/Misc.hpp>
|
|
#include "../../Library/EffectParameter.hpp"
|
|
#include "../../Library/Items/Item.hpp"
|
|
#include "../../Library/Statistic.hpp"
|
|
#include "../Models/DamageSource.hpp"
|
|
|
|
namespace CreatureLib::Battling {
|
|
class BaseTurnChoice;
|
|
class AttackTurnChoice;
|
|
class SwitchTurnChoice;
|
|
class FleeTurnChoice;
|
|
class ExecutingAttack;
|
|
class Creature;
|
|
class BattleLibrary;
|
|
|
|
class BattleScript {
|
|
ArbUt::OptionalBorrowedPtr<void> _owner;
|
|
size_t _suppressed = 0;
|
|
|
|
public:
|
|
BattleScript(const ArbUt::OptionalBorrowedPtr<void>& owner) { _owner = owner; };
|
|
NO_COPY_OR_MOVE(BattleScript);
|
|
|
|
inline ArbUt::OptionalBorrowedPtr<void> GetOwner() const noexcept { return _owner; }
|
|
inline bool IsSuppressed() const noexcept { return _suppressed > 0; }
|
|
inline void Suppress() { _suppressed++; }
|
|
inline void Unsuppress() {
|
|
if (_suppressed > 0)
|
|
_suppressed--;
|
|
}
|
|
|
|
virtual ~BattleScript() = default;
|
|
|
|
virtual BattleScript* Clone(const ArbUt::OptionalBorrowedPtr<void>& owner) = 0;
|
|
|
|
virtual void Stack(){};
|
|
virtual void OnRemove(){};
|
|
|
|
[[nodiscard]] virtual const ArbUt::StringView& GetName() const noexcept = 0;
|
|
|
|
#define _par_ [[maybe_unused]]
|
|
|
|
virtual void OnInitialize(_par_ const BattleLibrary*,
|
|
_par_ const ArbUt::List<CreatureLib::Library::EffectParameter*>& parameters){};
|
|
virtual void OnBeforeTurn(_par_ const BaseTurnChoice* choice){};
|
|
|
|
virtual void ChangeSpeed(_par_ BaseTurnChoice* choice, _par_ uint32_t* speed){};
|
|
virtual void ChangePriority(_par_ AttackTurnChoice* choice, _par_ int8_t* priority){};
|
|
virtual void ChangeAttack(_par_ AttackTurnChoice* choice, _par_ ArbUt::StringView* outAttack){};
|
|
virtual void ModifyNumberOfHits(_par_ AttackTurnChoice* choice, _par_ u8* numberOfHits){};
|
|
virtual void PreventAttack(_par_ ExecutingAttack* attack, _par_ bool* outResult){};
|
|
virtual void FailAttack(_par_ ExecutingAttack* attack, _par_ bool* outFailed){};
|
|
virtual void StopBeforeAttack(_par_ ExecutingAttack* attack, _par_ bool* outResult){};
|
|
virtual void OnBeforeAttack(_par_ ExecutingAttack* attack){};
|
|
|
|
virtual void FailIncomingAttack(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ bool* outResult){};
|
|
virtual void IsInvulnerable(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ bool* outResult){};
|
|
virtual void OnAttackMiss(_par_ ExecutingAttack* attack, _par_ Creature* target){};
|
|
virtual void ChangeAttackType(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitNumber,
|
|
_par_ u8* outType){};
|
|
virtual void ChangeEffectiveness(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitNumber,
|
|
_par_ float* effectiveness){};
|
|
virtual void BlockCritical(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitNumber,
|
|
_par_ bool* blockCritical){};
|
|
|
|
virtual void OverrideBasePower(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitIndex,
|
|
_par_ u8* basePower){};
|
|
virtual void ChangeDamageStatsUser(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitIndex,
|
|
_par_ Creature** statsUser){};
|
|
|
|
virtual void BypassDefensiveStat(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitIndex,
|
|
_par_ bool* bypass){};
|
|
virtual void BypassOffensiveStat(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitIndex,
|
|
_par_ bool* bypass){};
|
|
virtual void ModifyStatModifier(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitIndex,
|
|
_par_ float* modifier){};
|
|
virtual void ModifyDamageModifier(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitIndex,
|
|
_par_ float* modifier){};
|
|
virtual void OverrideDamage(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitIndex,
|
|
_par_ u32* damage){};
|
|
virtual void OverrideIncomingDamage(_par_ ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitIndex,
|
|
_par_ u32* damage){};
|
|
|
|
virtual void OnIncomingHit(_par_ const ExecutingAttack* attack, _par_ Creature* target, _par_ u8 hitNumber){};
|
|
virtual void OnFaintingOpponent(_par_ const ExecutingAttack* attack, _par_ Creature* target,
|
|
_par_ u8 hitNumber){};
|
|
|
|
virtual void PreventStatBoostChange(_par_ Creature* target, _par_ Library::Statistic stat,
|
|
_par_ int8_t diffAmount, _par_ bool selfInflicted, _par_ bool* prevent){};
|
|
virtual void ModifyStatBoostChange(_par_ Creature* target, _par_ Library::Statistic stat,
|
|
_par_ int8_t* diffAmount){};
|
|
virtual void PreventSecondaryEffects(_par_ const ExecutingAttack* attack, _par_ Creature* target,
|
|
_par_ u8 hitNumber, _par_ bool* outResult){};
|
|
virtual void OnSecondaryEffect(_par_ const ExecutingAttack* attack, _par_ Creature* target,
|
|
_par_ u8 hitNumber){};
|
|
|
|
virtual void OnAfterHits(_par_ const ExecutingAttack* attack, _par_ Creature* target){};
|
|
|
|
virtual void PreventSelfSwitch(_par_ const SwitchTurnChoice* choice, _par_ bool* outResult){};
|
|
virtual void PreventOpponentSwitch(_par_ const SwitchTurnChoice* choice, _par_ bool* outResult){};
|
|
|
|
virtual void ModifyEffectChance(_par_ const ExecutingAttack* attack, _par_ Creature* target,
|
|
_par_ float* chance){};
|
|
virtual void ModifyIncomingEffectChance(_par_ const ExecutingAttack* attack, _par_ Creature* target,
|
|
_par_ float* chance){};
|
|
|
|
virtual void OnFail(_par_ Creature* target){};
|
|
virtual void OnOpponentFail(_par_ Creature* target){};
|
|
|
|
virtual void PreventRunAway(_par_ const FleeTurnChoice* choice, _par_ bool* result){};
|
|
virtual void PreventOpponentRunAway(_par_ const FleeTurnChoice* choice, _par_ bool* result){};
|
|
|
|
virtual void OnEndTurn(){};
|
|
virtual void OnDamage(Creature*, DamageSource, _par_ u32 oldHealth, _par_ u32 newHealth){};
|
|
virtual void OnFaint(Creature*, DamageSource){};
|
|
virtual void OnSwitchIn(Creature*){};
|
|
|
|
virtual void OnAfterHeldItemConsume(Creature*, const Library::Item*){};
|
|
};
|
|
}
|
|
|
|
#endif // CREATURELIB_SCRIPT_HPP
|