#include "MiscLibrary.hpp" #include "../Models/Battle.hpp" #include "../TurnChoices/AttackTurnChoice.hpp" bool CreatureLib::Battling::MiscLibrary::IsCritical([[maybe_unused]] CreatureLib::Battling::ExecutingAttack* attack, CreatureLib::Battling::Creature* target, [[maybe_unused]] uint8_t hit) const { EnsureNotNull(target) Ensure(target->GetBattle().HasValue()) auto rand = target->GetBattle().GetValue()->GetRandom(); return rand->Get(10) <= 0; } static CreatureLib::Battling::LearnedAttack* _replacementAttack = nullptr; static std::unique_ptr _replacementAttackData = nullptr; static ArbUt::BorrowedPtr GetReplacementAttackData() { if (_replacementAttackData == nullptr) { _replacementAttackData = std::unique_ptr(new CreatureLib::Library::AttackData( "replacement"_cnc, 0, CreatureLib::Library::AttackCategory::Physical, 30, 255, 255, CreatureLib::Library::AttackTarget::Any, 0, new CreatureLib::Library::SecondaryEffect(), {})); } return _replacementAttackData; } static CreatureLib::Battling::LearnedAttack* GetReplacementAttack() { if (_replacementAttack == nullptr) { _replacementAttack = new CreatureLib::Battling::LearnedAttack( GetReplacementAttackData(), CreatureLib::Battling::AttackLearnMethod::Unknown); } return _replacementAttack; } bool CreatureLib::Battling::MiscLibrary::CanFlee([[maybe_unused]] FleeTurnChoice* switchChoice) const { return true; } CreatureLib::Battling::BaseTurnChoice* CreatureLib::Battling::MiscLibrary::ReplacementAttack(Creature* user, [[maybe_unused]] CreatureIndex target) const { EnsureNotNull(user) Ensure(user->GetBattleSide().HasValue()) auto sideTarget = 0; if (user->GetBattleSide().GetValue()->GetSideIndex() == 0) sideTarget = 1; auto side = user->GetBattle().GetValue()->GetSides()[sideTarget]; auto random_mon = side->GetRandomCreatureIndex(); return new AttackTurnChoice(user, GetReplacementAttack(), CreatureIndex(side->GetSideIndex(), random_mon)); }