diff --git a/src/Battling/Library/DamageLibrary.cpp b/src/Battling/Library/DamageLibrary.cpp index 48d7c2d..24383c9 100644 --- a/src/Battling/Library/DamageLibrary.cpp +++ b/src/Battling/Library/DamageLibrary.cpp @@ -1,4 +1,5 @@ #include "DamageLibrary.hpp" +#include "../ScriptHandling/ScriptMacros.cpp" using namespace CreatureLib::Battling; int DamageLibrary::GetDamage(ExecutingAttack* attack, Creature* target, uint8_t hitIndex) const { @@ -6,22 +7,22 @@ int DamageLibrary::GetDamage(ExecutingAttack* attack, Creature* target, uint8_t auto hit = attack->GetAttackDataForTarget(target)->GetHit(hitIndex); auto bp = hit->GetBasePower(); auto statMod = GetStatModifier(attack, target, hitIndex); - // HOOK: Modify stat modifier - int damage = static_cast((((levelMod * static_cast(bp) * statMod) / 50) + 2) * - GetDamageModifier(attack, target, hitIndex)); - // HOOK: Override damage + HOOK(ModifyStatModifier, attack, attack, target, hitIndex, &statMod); + int32_t damage = static_cast((((levelMod * static_cast(bp) * statMod) / 50) + 2) * + GetDamageModifier(attack, target, hitIndex)); + HOOK(OverrideDamage, attack, attack, target, hitIndex, &damage); return damage; } int DamageLibrary::GetBasePower(ExecutingAttack* attack, Creature* target, uint8_t hitIndex) const { auto bp = attack->GetAttack()->GetAttack()->GetBasePower(); - // HOOK: modify base power. + HOOK(OverrideBasePower, attack, attack, target, hitIndex, &bp); return bp; } float DamageLibrary::GetStatModifier(ExecutingAttack* attack, Creature* target, uint8_t hitIndex) const { auto user = attack->GetUser(); - // HOOK: allow overriding for which users stat we use. + HOOK(ChangeDamageStatsUser, attack, attack, target, hitIndex, &user); auto hit = attack->GetAttackDataForTarget(target)->GetHit(hitIndex); Core::Statistic offensiveStat; Core::Statistic defensiveStat; @@ -34,9 +35,9 @@ float DamageLibrary::GetStatModifier(ExecutingAttack* attack, Creature* target, } auto bypassDefensive = hit->IsCritical() && target->GetStatBoost(defensiveStat) > 0; - // HOOK: allow bypassing defensive stat modifiers. + HOOK(BypassDefensiveStat, attack, attack, target, hitIndex, &bypassDefensive); auto bypassOffensive = hit->IsCritical() && user->GetStatBoost(offensiveStat) < 0; - // HOOK: Allow bypassing offensive stat modifiers. + HOOK(BypassOffensiveStat, attack, attack, target, hitIndex, &bypassOffensive); float offensiveValue; float defensiveValue; @@ -59,6 +60,6 @@ float DamageLibrary::GetDamageModifier(ExecutingAttack* attack, Creature* target float mod = 1; auto hit = attack->GetAttackDataForTarget(target)->GetHit(hitIndex); mod *= hit->GetEffectiveness(); - // HOOK: Modify damage modifier. + HOOK(ModifyDamageModifier, attack, attack, target, hitIndex, &mod); return mod; } diff --git a/src/Battling/ScriptHandling/Script.hpp b/src/Battling/ScriptHandling/Script.hpp index 6f919b5..edf4d20 100644 --- a/src/Battling/ScriptHandling/Script.hpp +++ b/src/Battling/ScriptHandling/Script.hpp @@ -38,6 +38,19 @@ namespace CreatureLib::Battling { virtual void IsInvulnerable(ExecutingAttack* attack, Creature* target, bool* outResult){}; virtual void OnAttackMiss(ExecutingAttack* attack, Creature* target){}; virtual void ChangeAttackType(ExecutingAttack* attack, Creature* target, uint8_t hitNumber, uint8_t* outType){}; + + virtual void OverrideBasePower(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, + uint8_t* basePower){}; + virtual void ChangeDamageStatsUser(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, + Creature** statsUser){}; + + virtual void BypassDefensiveStat(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, bool* bypass){}; + virtual void BypassOffensiveStat(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, bool* bypass){}; + virtual void ModifyStatModifier(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, float* modifier){}; + virtual void ModifyDamageModifier(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, + float* modifier){}; + virtual void OverrideDamage(ExecutingAttack* attack, Creature* target, uint8_t hitIndex, int32_t* damage){}; + virtual void OnStatusMove(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber){}; virtual void PreventSecondaryEffects(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber, bool* outResult){};