diff --git a/src/ScriptTests/Moves/Struggle.cpp b/src/ScriptTests/Moves/Struggle.cpp new file mode 100644 index 0000000..b73d4ce --- /dev/null +++ b/src/ScriptTests/Moves/Struggle.cpp @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include "../../../extern/catch.hpp" +#include "../Macros/MoveMacros.hpp" + +TEST_CASE("Struggle - Damages by 1/4th of users max health", "[moves]") { + auto library = Library::GetLibrary(); + auto userMon = PkmnLib::Battling::CreatePokemon(library, "charizard"_cnc, 50).Build(); + auto targetMon = PkmnLib::Battling::CreatePokemon(library, "venusaur"_cnc, 50).Build(); + + auto userParty = new CreatureLib::Battling::CreatureParty({userMon}); + auto targetParty = new CreatureLib::Battling::CreatureParty({targetMon}); + auto battle = new PkmnLib::Battling::Battle( + library, { + new CreatureLib::Battling::BattleParty(userParty, {CreatureLib::Battling::CreatureIndex(0, 0)}), + new CreatureLib::Battling::BattleParty(targetParty, {CreatureLib::Battling::CreatureIndex(1, 0)}), + }); + + userMon->SetBattleData(battle, battle->GetSides()[0]); + targetMon->SetBattleData(battle, battle->GetSides()[1]); + + auto script = library->LoadScript(ScriptCategory::Attack, "Struggle"_cnc); + REQUIRE(script != nullptr); + + auto choice = (CreatureLib::Battling::AttackTurnChoice*)library->GetMiscLibrary()->ReplacementAttack( + userMon, CreatureLib::Battling::CreatureIndex(1, 0)); + auto executingMove = new CreatureLib::Battling::ExecutingAttack({targetMon}, 1, userMon, choice->GetAttack(), + choice->GetAttackScript()); + + script->OnSecondaryEffect(executingMove, targetMon, 0); + CHECK(userMon->GetCurrentHealth() == userMon->GetMaxHealth() - (userMon->GetMaxHealth() / 4)); + delete choice; + delete script; + delete executingMove; + delete targetParty; + delete userParty; + delete battle; +}