From 5fce541ffb05c4ea74e831dbcf2c86f208903b7b Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 19 Feb 2022 16:11:25 +0100 Subject: [PATCH] Adds script hook to change choice speed when determining turn order --- src/Battling/Flow/TurnOrdering.cpp | 12 ++++++------ src/Battling/ScriptHandling/BattleScript.hpp | 1 + src/Battling/TurnChoices/BaseTurnChoice.hpp | 4 ++++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Battling/Flow/TurnOrdering.cpp b/src/Battling/Flow/TurnOrdering.cpp index 5766c8c..9a30993 100644 --- a/src/Battling/Flow/TurnOrdering.cpp +++ b/src/Battling/Flow/TurnOrdering.cpp @@ -22,12 +22,8 @@ public: if (aPriority != bPriority) return aPriority > bPriority; } - auto aUser = a->GetUser(); - auto bUser = b->GetUser(); - auto aSpeed = aUser->GetBoostedStat(Library::Statistic::Speed); - auto bSpeed = bUser->GetBoostedStat(Library::Statistic::Speed); - if (aSpeed != bSpeed) - return aSpeed > bSpeed; + if (a->__GetSpeed() != b->__GetSpeed()) + return a->__GetSpeed() > b->__GetSpeed(); return a->__GetRandomValue() > b->__GetRandomValue(); } @@ -43,6 +39,10 @@ void TurnOrdering::OrderChoices(std::vector>& ve HOOK(ChangePriority, attackChoice, attackChoice.get(), &priority); attackChoice->SetPriority(priority); } + + auto speed = item->GetUser()->GetBoostedStat(Library::Statistic::Speed); + HOOK(ChangeSpeed, item, item.get(), &speed); + item->__SetSpeed(speed); } std::sort(vec.begin(), vec.end(), ChoiceCompare()); } diff --git a/src/Battling/ScriptHandling/BattleScript.hpp b/src/Battling/ScriptHandling/BattleScript.hpp index b940fa1..30f8e0c 100644 --- a/src/Battling/ScriptHandling/BattleScript.hpp +++ b/src/Battling/ScriptHandling/BattleScript.hpp @@ -49,6 +49,7 @@ namespace CreatureLib::Battling { _par_ const ArbUt::List& 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){}; diff --git a/src/Battling/TurnChoices/BaseTurnChoice.hpp b/src/Battling/TurnChoices/BaseTurnChoice.hpp index 9ffa6dc..3cf1519 100644 --- a/src/Battling/TurnChoices/BaseTurnChoice.hpp +++ b/src/Battling/TurnChoices/BaseTurnChoice.hpp @@ -9,6 +9,7 @@ namespace CreatureLib::Battling { class BaseTurnChoice : public ScriptSource { int32_t _randomValue; + uint32_t _speed; protected: ArbUt::BorrowedPtr _user; @@ -21,6 +22,9 @@ namespace CreatureLib::Battling { inline void __SetRandomValue(int32_t val) noexcept { _randomValue = val; } inline int32_t __GetRandomValue() const noexcept { return _randomValue; } + + inline void __SetSpeed(uint32_t val) noexcept { _speed = val; } + inline uint32_t __GetSpeed() const noexcept { return _speed; } }; }