135 lines
8.0 KiB
C++
135 lines
8.0 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* non_null 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* non_null,
|
|
_par_ const ArbUt::List<CreatureLib::Library::EffectParameter*>& parameters){};
|
|
virtual void OnBeforeTurn(_par_ const BaseTurnChoice* non_null choice){};
|
|
|
|
virtual void ChangeSpeed(_par_ BaseTurnChoice* non_null choice, _par_ u32* non_null speed){};
|
|
virtual void ChangePriority(_par_ AttackTurnChoice* non_null choice, _par_ i8* non_null priority){};
|
|
virtual void ChangeAttack(_par_ AttackTurnChoice* non_null choice,
|
|
_par_ ArbUt::StringView* non_null outAttack){};
|
|
virtual void ModifyNumberOfHits(_par_ AttackTurnChoice* non_null choice, _par_ u8* non_null numberOfHits){};
|
|
virtual void PreventAttack(_par_ ExecutingAttack* non_null attack, _par_ bool* non_null outResult){};
|
|
virtual void FailAttack(_par_ ExecutingAttack* non_null attack, _par_ bool* non_null outFailed){};
|
|
virtual void StopBeforeAttack(_par_ ExecutingAttack* non_null attack, _par_ bool* non_null outResult){};
|
|
virtual void OnBeforeAttack(_par_ ExecutingAttack* non_null attack){};
|
|
|
|
virtual void FailIncomingAttack(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ bool* non_null outResult){};
|
|
virtual void IsInvulnerable(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ bool* non_null outResult){};
|
|
virtual void OnAttackMiss(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target){};
|
|
virtual void ChangeAttackType(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitNumber, _par_ u8* non_null outType){};
|
|
virtual void ChangeEffectiveness(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitNumber, _par_ float* non_null effectiveness){};
|
|
virtual void BlockCritical(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitNumber, _par_ bool* non_null blockCritical){};
|
|
|
|
virtual void OverrideBasePower(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitIndex, _par_ u8* non_null basePower){};
|
|
virtual void ChangeDamageStatsUser(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitIndex, _par_ Creature* non_null* non_null statsUser){};
|
|
|
|
virtual void BypassDefensiveStat(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitIndex, _par_ bool* non_null bypass){};
|
|
virtual void BypassOffensiveStat(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitIndex, _par_ bool* non_null bypass){};
|
|
virtual void ModifyStatModifier(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitIndex, _par_ float* non_null modifier){};
|
|
virtual void ModifyDamageModifier(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitIndex, _par_ float* non_null modifier){};
|
|
virtual void OverrideDamage(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitIndex, _par_ u32* non_null damage){};
|
|
virtual void OverrideIncomingDamage(_par_ ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitIndex, _par_ u32* non_null damage){};
|
|
|
|
virtual void OnIncomingHit(_par_ const ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitNumber){};
|
|
virtual void OnFaintingOpponent(_par_ const ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitNumber){};
|
|
|
|
virtual void PreventStatBoostChange(_par_ Creature* non_null target, _par_ Library::Statistic stat,
|
|
_par_ i8 diffAmount, _par_ bool selfInflicted,
|
|
_par_ bool* non_null prevent){};
|
|
virtual void ModifyStatBoostChange(_par_ Creature* non_null target, _par_ Library::Statistic stat,
|
|
_par_ i8* non_null diffAmount){};
|
|
virtual void PreventSecondaryEffects(_par_ const ExecutingAttack* non_null attack,
|
|
_par_ Creature* non_null target, _par_ u8 hitNumber,
|
|
_par_ bool* non_null outResult){};
|
|
virtual void OnSecondaryEffect(_par_ const ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ u8 hitNumber){};
|
|
|
|
virtual void OnAfterHits(_par_ const ExecutingAttack* non_null attack, _par_ Creature* non_null target){};
|
|
|
|
virtual void PreventSelfSwitch(_par_ const SwitchTurnChoice* non_null choice, _par_ bool* non_null outResult){};
|
|
virtual void PreventOpponentSwitch(_par_ const SwitchTurnChoice* non_null choice,
|
|
_par_ bool* non_null outResult){};
|
|
|
|
virtual void ModifyEffectChance(_par_ const ExecutingAttack* non_null attack, _par_ Creature* non_null target,
|
|
_par_ float* non_null chance){};
|
|
virtual void ModifyIncomingEffectChance(_par_ const ExecutingAttack* non_null attack,
|
|
_par_ Creature* non_null target, _par_ float* non_null chance){};
|
|
|
|
virtual void OnFail(_par_ Creature* non_null target){};
|
|
virtual void OnOpponentFail(_par_ Creature* non_null target){};
|
|
|
|
virtual void PreventRunAway(_par_ const FleeTurnChoice* non_null choice, _par_ bool* non_null result){};
|
|
virtual void PreventOpponentRunAway(_par_ const FleeTurnChoice* non_null choice, _par_ bool* non_null result){};
|
|
|
|
virtual void OnEndTurn(){};
|
|
virtual void OnDamage(Creature* non_null, DamageSource, _par_ u32 oldHealth, _par_ u32 newHealth){};
|
|
virtual void OnFaint(Creature* non_null, DamageSource){};
|
|
virtual void OnSwitchIn(Creature* non_null){};
|
|
|
|
virtual void OnAfterHeldItemConsume(Creature* non_null, const Library::Item* non_null){};
|
|
};
|
|
}
|
|
|
|
#endif // CREATURELIB_SCRIPT_HPP
|