Implements most of the Damage Modifier calculation.
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
#include "DamageLibrary.hpp"
|
||||
#include <CreatureLib/Battling/Models/Battle.hpp>
|
||||
#include "../PkmnScriptHook.hpp"
|
||||
#include "../Pokemon/Pokemon.hpp"
|
||||
|
||||
using HitData = const CreatureLib::Battling::ExecutingAttack::HitData;
|
||||
|
||||
uint32_t PkmnLib::Battling::DamageLibrary::GetDamage(CreatureLib::Battling::ExecutingAttack* attack,
|
||||
@@ -63,6 +66,21 @@ float PkmnLib::Battling::DamageLibrary::GetDamageModifier(CreatureLib::Battling:
|
||||
CreatureLib::Battling::Creature* target, uint8_t hitIndex,
|
||||
const HitData& hitData) const {
|
||||
float mod = 1;
|
||||
if (attack->GetTargetCount() > 1)
|
||||
mod *= 0.75;
|
||||
if (hitData.IsCritical()) {
|
||||
float critModifier = 1.5;
|
||||
PKMN_HOOK(OverrideCriticalModifier, attack, attack, target, hitIndex, &critModifier);
|
||||
mod *= critModifier;
|
||||
}
|
||||
float randPercentage = 85 + attack->GetUser()->GetBattle()->GetRandom()->Get(0, 16);
|
||||
mod *= randPercentage / 100.0;
|
||||
if (attack->GetUser()->HasType(hitData.GetType())) {
|
||||
float stabModifier = 1.5;
|
||||
PKMN_HOOK(OverrideSTABModifier, attack, attack, target, hitIndex, &stabModifier);
|
||||
mod *= stabModifier;
|
||||
}
|
||||
|
||||
mod *= hitData.GetEffectiveness();
|
||||
// HOOK: Modify damage modifier.
|
||||
return mod;
|
||||
|
||||
@@ -7,6 +7,12 @@ namespace PkmnLib::Battling {
|
||||
public:
|
||||
virtual void ModifyCriticalStage(CreatureLib::Battling::ExecutingAttack* attack,
|
||||
CreatureLib::Battling::Creature* target, uint8_t hit, uint8_t* critStage){};
|
||||
virtual void OverrideCriticalModifier(CreatureLib::Battling::ExecutingAttack* attack,
|
||||
CreatureLib::Battling::Creature* target, uint8_t hit,
|
||||
float* critModifier){};
|
||||
virtual void OverrideSTABModifier(CreatureLib::Battling::ExecutingAttack* attack,
|
||||
CreatureLib::Battling::Creature* target, uint8_t hit, float* stabModifier){};
|
||||
|
||||
virtual void ModifyExperienceGain(CreatureLib::Battling::Creature* faintedMon,
|
||||
CreatureLib::Battling::Creature* winningMon, uint32_t* experienceGain){};
|
||||
virtual void DoesShareExperience(CreatureLib::Battling::Creature* faintedMon,
|
||||
|
||||
Reference in New Issue
Block a user