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){};