47 lines
2.2 KiB
C++
47 lines
2.2 KiB
C++
#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<const CreatureLib::Library::AttackData> _replacementAttackData = nullptr;
|
|
|
|
static ArbUt::BorrowedPtr<const CreatureLib::Library::AttackData> GetReplacementAttackData() {
|
|
if (_replacementAttackData == nullptr) {
|
|
_replacementAttackData =
|
|
std::unique_ptr<const CreatureLib::Library::AttackData>(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));
|
|
}
|