From a3b7002cd455310076c806f1c3e2ed3800d8e13e Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 28 Mar 2021 19:43:26 +0200 Subject: [PATCH] Adds script hook to modify number of hits Signed-off-by: Deukhoofd --- src/Battling/Flow/TurnHandler.cpp | 8 +++++++- src/Battling/ScriptHandling/BattleScript.hpp | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Battling/Flow/TurnHandler.cpp b/src/Battling/Flow/TurnHandler.cpp index a38cf24..e78fe10 100644 --- a/src/Battling/Flow/TurnHandler.cpp +++ b/src/Battling/Flow/TurnHandler.cpp @@ -96,8 +96,14 @@ void TurnHandler::ExecuteAttackChoice(const ArbUt::BorrowedPtr try_creature(targets = TargetResolver::ResolveTargets(choice->GetTarget(), targetType, battle.GetValue()); , "Exception during target determination"); + u8 numberHits = 1; + HOOK(ModifyNumberOfHits, choice, choice, &numberHits); + if (numberHits == 0) { + return; + } + auto attackScoped = ArbUt::ScopedPtr( - new ExecutingAttack(targets, 1, choice->GetUser(), choice->GetAttack(), choice->GetAttackScript())); + new ExecutingAttack(targets, numberHits, choice->GetUser(), choice->GetAttack(), choice->GetAttackScript())); bool prevented = false; HOOK(PreventAttack, attackScoped, attackScoped, &prevented); if (prevented) { diff --git a/src/Battling/ScriptHandling/BattleScript.hpp b/src/Battling/ScriptHandling/BattleScript.hpp index 5090368..7420fc7 100644 --- a/src/Battling/ScriptHandling/BattleScript.hpp +++ b/src/Battling/ScriptHandling/BattleScript.hpp @@ -30,6 +30,7 @@ namespace CreatureLib::Battling { virtual void ChangePriority([[maybe_unused]] AttackTurnChoice* choice, [[maybe_unused]] int8_t* priority){}; virtual void ChangeAttack([[maybe_unused]] AttackTurnChoice* choice, [[maybe_unused]] ArbUt::StringView* outAttack){}; + virtual void ModifyNumberOfHits([[maybe_unused]] AttackTurnChoice* choice, [[maybe_unused]] u8* numberOfHits){}; virtual void PreventAttack([[maybe_unused]] ExecutingAttack* attack, [[maybe_unused]] bool* outResult){}; virtual void FailAttack([[maybe_unused]] ExecutingAttack* attack, [[maybe_unused]] bool* outFailed){}; virtual void StopBeforeAttack([[maybe_unused]] ExecutingAttack* attack, [[maybe_unused]] bool* outResult){};