diff --git a/src/Battling/Library/DamageLibrary.cpp b/src/Battling/Library/DamageLibrary.cpp index f6ebf9f..9754a80 100644 --- a/src/Battling/Library/DamageLibrary.cpp +++ b/src/Battling/Library/DamageLibrary.cpp @@ -11,9 +11,18 @@ uint32_t PkmnLib::Battling::DamageLibrary::GetDamage(CreatureLib::Battling::Exec auto levelMod = static_cast(2 * attack->GetUser()->GetLevel()); auto bp = hitData.GetBasePower(); auto statMod = GetStatModifier(attack, target, hitIndex, hitData); + auto damageMod = GetDamageModifier(attack, target, hitIndex, hitData); // HOOK: Modify stat modifier - int damage = static_cast((((levelMod * static_cast(bp) * statMod) / 50) + 2) * - GetDamageModifier(attack, target, hitIndex, hitData)); + + auto floatDamage = (((levelMod * static_cast(bp) * statMod) / 50) + 2) * damageMod; + uint32_t damage; + if (floatDamage < 0) { + damage = 0; + } else if (floatDamage > (float)UINT32_MAX) { + damage = UINT32_MAX; + } else { // TODO: C++ 20 - add [[likely]] attribute when supported by both gcc and Clang + damage = static_cast(floatDamage); + } // HOOK: Override damage return damage; }