Add support for turning off the random damage modifier.
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Deukhoofd 2021-08-24 20:57:45 +02:00
parent dfcdfd8343
commit 7fe7c8becf
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
3 changed files with 25 additions and 3 deletions

View File

@ -83,8 +83,10 @@ float PkmnLib::Battling::DamageLibrary::GetDamageModifier(CreatureLib::Battling:
mod *= critModifier; mod *= critModifier;
} }
Ensure(attack->GetUser()->GetBattle().GetValue()); Ensure(attack->GetUser()->GetBattle().GetValue());
if (_hasRandomness) {
float randPercentage = 85 + attack->GetUser()->GetBattle().GetValue()->GetRandom()->Get(0, 16); float randPercentage = 85 + attack->GetUser()->GetBattle().GetValue()->GetRandom()->Get(0, 16);
mod *= randPercentage / 100.0; mod *= randPercentage / 100.0;
}
if (attack->GetUser()->HasType(hitData.GetType())) { if (attack->GetUser()->HasType(hitData.GetType())) {
float stabModifier = 1.5; float stabModifier = 1.5;
PKMN_HOOK(OverrideSTABModifier, attack, attack, target, hitIndex, &stabModifier); PKMN_HOOK(OverrideSTABModifier, attack, attack, target, hitIndex, &stabModifier);

View File

@ -4,7 +4,11 @@
#include <CreatureLib/Battling/Library/DamageLibrary.hpp> #include <CreatureLib/Battling/Library/DamageLibrary.hpp>
namespace PkmnLib::Battling { namespace PkmnLib::Battling {
class DamageLibrary final : public CreatureLib::Battling::DamageLibrary { class DamageLibrary final : public CreatureLib::Battling::DamageLibrary {
bool _hasRandomness;
public: public:
explicit DamageLibrary(bool hasRandomness = true) : _hasRandomness(hasRandomness) {}
uint32_t GetDamage(CreatureLib::Battling::ExecutingAttack* attack, CreatureLib::Battling::Creature* target, uint32_t GetDamage(CreatureLib::Battling::ExecutingAttack* attack, CreatureLib::Battling::Creature* target,
uint8_t hitIndex, uint8_t hitIndex,
const CreatureLib::Battling::ExecutingAttack::HitData& hitData) const override; const CreatureLib::Battling::ExecutingAttack::HitData& hitData) const override;

View File

@ -26,6 +26,7 @@ class testScript1 : PkmnScript {
bool testMove(Pokemon@ p, uint index, LearnedMove@ move){ return p.GetMoves()[index] is move; } bool testMove(Pokemon@ p, uint index, LearnedMove@ move){ return p.GetMoves()[index] is move; }
bool testHasHeldItem(Pokemon@ p, const constString &in item){ return p.HasHeldItem(item); } bool testHasHeldItem(Pokemon@ p, const constString &in item){ return p.HasHeldItem(item); }
void testSetHeldItem(Pokemon@ p, const constString &in item){ p.SetHeldItem(item); } void testSetHeldItem(Pokemon@ p, const constString &in item){ p.SetHeldItem(item); }
void testSetHeldItem2(Pokemon@ p){ p.SetHeldItem("testItem"); }
}} }}
)"}}; )"}};
@ -347,11 +348,26 @@ TEST_CASE("Test Pokemon SetHeldItem in Script") {
data.Context->SetArgAddress(1, &item); data.Context->SetArgAddress(1, &item);
REQUIRE(data.Context->Execute() == asEXECUTION_FINISHED); REQUIRE(data.Context->Execute() == asEXECUTION_FINISHED);
REQUIRE((bool)data.Context->GetReturnDWord()); REQUIRE(mon->HasHeldItem("testItem"_cnc));
delete mon;
}
TEST_CASE("Test Pokemon SetHeldItem2 in Script") {
auto mainLib = TestLibrary::GetLibrary();
auto mon = PkmnLib::Battling::CreatePokemon(mainLib, "testSpecies3"_cnc, 30)
.WithForme("default"_cnc)
.Build();
auto data = GetScript(mainLib, "testSetHeldItem2"_cnc);
data.Context->SetArgObject(0, const_cast<PkmnLib::Battling::Pokemon*>(mon));
REQUIRE(data.Context->Execute() == asEXECUTION_FINISHED);
REQUIRE(mon->HasHeldItem("testItem"_cnc)); REQUIRE(mon->HasHeldItem("testItem"_cnc));
delete mon; delete mon;
} }
#endif #endif