#include "../../src/Battling/Models/Creature.hpp" #include "../Core.hpp" using namespace CreatureLib::Battling; export uint8_t CreatureLib_Creature_Construct(Creature*& out, const BattleLibrary* library, const CreatureLib::Library::CreatureSpecies* species, const CreatureLib::Library::SpeciesVariant* variant, level_int_t level, uint32_t experience, uint32_t uid, CreatureLib::Library::Gender gender, uint8_t coloring, const CreatureLib::Library::Item* heldItem, const char* nickname, bool secretTalent, uint8_t talent, LearnedAttack* attacks[], size_t attacksNum, bool allowedExperienceGain) { Try(auto attacksVec = std::vector(attacks, attacks + (attacksNum * sizeof(LearnedAttack*))); out = new Creature(library, ArbUt::BorrowedPtr(species), variant, level, experience, uid, gender, coloring, ArbUt::OptionalBorrowedPtr(heldItem), std::string(nickname), CreatureLib::Library::TalentIndex(secretTalent, talent), attacksVec, allowedExperienceGain);) }; export void CreatureLib_Creature_Destruct(const Creature* p) { delete p; } export uint8_t CreatureLib_Creature_Initialize(Creature* p) { Try(p->Initialize();) } BORROWED_GET_FUNC(Creature, GetLibrary, const CreatureLib::Battling::BattleLibrary*); BORROWED_GET_FUNC(Creature, GetSpecies, const CreatureLib::Library::CreatureSpecies*); BORROWED_GET_FUNC(Creature, GetVariant, const CreatureLib::Library::SpeciesVariant*); export uint8_t CreatureLib_Creature_ChangeSpecies(Creature* p, const CreatureLib::Library::CreatureSpecies* species, const CreatureLib::Library::SpeciesVariant* variant) { Try(p->ChangeSpecies(species, variant);) } export uint8_t CreatureLib_Creature_ChangeVariant(Creature* p, const CreatureLib::Library::SpeciesVariant* variant) { Try(p->ChangeVariant(variant);) } SIMPLE_GET_FUNC(Creature, GetLevel, level_int_t); SIMPLE_GET_FUNC(Creature, GetExperience, uint32_t); SIMPLE_GET_FUNC(Creature, GetUniqueIdentifier, uint32_t); SIMPLE_GET_FUNC(Creature, GetGender, CreatureLib::Library::Gender); SIMPLE_GET_FUNC(Creature, GetColoring, uint8_t); export bool CreatureLib_Creature_HasHeldItem(const Creature* p, const char* name) { return p->HasHeldItem(ArbUt::StringView(name)); } export bool CreatureLib_Creature_HasHeldItemWithHash(const Creature* p, uint32_t hash) { return p->HasHeldItem(hash); } OPTIONAL_GET_FUNC(Creature, GetHeldItem, const CreatureLib::Library::Item*); export uint8_t CreatureLib_Creature_SetHeldItem(Creature* p, const char* name) { Try(p->SetHeldItem(ArbUt::StringView(name));) } export uint8_t CreatureLib_Creature_SetHeldItemWithHash(Creature* p, uint32_t hash) { Try(p->SetHeldItem(hash);) } export void CreatureLib_Creature_SetHeldItemFromItem(Creature* p, const CreatureLib::Library::Item* item) { return p->SetHeldItem(ArbUt::BorrowedPtr(item)); } SIMPLE_GET_FUNC(Creature, GetCurrentHealth, uint32_t); OPTIONAL_GET_FUNC(Creature, GetBattle, Battle*); OPTIONAL_GET_FUNC(Creature, GetBattleSide, BattleSide*); SIMPLE_GET_FUNC(Creature, IsOnBattleField, bool); export const char* CreatureLib_Creature_GetNickname(Creature* p) { auto s = p->GetNickname(); if (s.has_value()) { return p->GetNickname().value().data(); } return ""; } export void CreatureLib_Creature_SetNickname(Creature* p, const char* nickname) { p->SetNickname(nickname); } export bool CreatureLib_Creature_HasType(Creature* p, uint8_t type) { return p->HasType(type); } export size_t CreatureLib_Creature_GetTypeCount(Creature* p) { return p->GetTypes().size(); } export const uint8_t* CreatureLib_Creature_GetTypes(Creature* p) { return p->GetTypes().data(); } SIMPLE_GET_FUNC(Creature, GetMaxHealth, uint32_t); export uint8_t CreatureLib_Creature_ChangeLevelBy(Creature* p, int8_t level) { Try(p->ChangeLevelBy(level);) } export uint8_t CreatureLib_Creature_Damage(Creature* p, uint32_t damage, DamageSource source) { Try(p->Damage(damage, source);) } export uint8_t CreatureLib_Creature_Heal(Creature* p, uint32_t health, bool canRevive) { Try(p->Heal(health, canRevive);) } export uint8_t CreatureLib_Creature_RestoreAllAttackUses(Creature* p) { Try(p->RestoreAllAttackUses();) } export bool CreatureLib_Creature_GetRealTalentIsSecret(const Creature* p) { return p->GetRealTalent().IsSecret(); } export bool CreatureLib_Creature_GetRealTalentIndex(const Creature* p) { return p->GetRealTalent().GetIndex(); } export uint8_t CreatureLib_Creature_GetActiveTalent(const Creature* p, const CreatureLib::Library::Talent*& out) { Try(out = p->GetActiveTalent().GetRaw();) } export uint8_t CreatureLib_Creature_OverrideActiveTalent(Creature* p, const char* talent) { Try(p->OverrideActiveTalent(ArbUt::StringView(talent));) } export uint8_t CreatureLib_Creature_AddExperience(Creature* p, uint32_t experience) { Try(p->AddExperience(experience);) } export uint8_t CreatureLib_Creature_ClearVolatileScripts(Creature* p) { Try(p->ClearVolatileScripts();) } export uint8_t CreatureLib_Creature_AddVolatileScriptByName(Creature* p, const char* scriptName) { Try(p->AddVolatileScript(ArbUt::StringView(scriptName));) } export uint8_t CreatureLib_Creature_AddVolatileScript(Creature* p, BattleScript* script) { Try(p->AddVolatileScript(script);) } export uint8_t CreatureLib_Creature_RemoveVolatileScriptByName(Creature* p, const char* scriptName) { Try(p->RemoveVolatileScript(ArbUt::StringView(scriptName));) } export uint8_t CreatureLib_Creature_RemoveVolatileScript(Creature* p, BattleScript* script) { Try(p->RemoveVolatileScript(script);) } export bool CreatureLib_Creature_HasVolatileScript(Creature* p, const char* scriptName) { return p->HasVolatileScript(ArbUt::StringView(scriptName)); } export size_t CreatureLib_Creature_GetAttacksCount(Creature* p) { return p->GetAttacks().Count(); } export LearnedAttack* const* CreatureLib_Creature_GetAttacks(Creature* p) { return p->GetAttacks().RawData(); } export bool CreatureLib_Creature_HasAttack(Creature* p, const char* scriptName) { return p->HasAttack(ArbUt::StringView(scriptName)); } OPTIONAL_GET_FUNC(Creature, GetDisplaySpecies, const CreatureLib::Library::CreatureSpecies*); OPTIONAL_GET_FUNC(Creature, GetDisplayVariant, const CreatureLib::Library::SpeciesVariant*); export void CreatureLib_Creature_SetDisplaySpecies(Creature* p, const CreatureLib::Library::CreatureSpecies* species) { return p->SetDisplaySpecies(ArbUt::BorrowedPtr(species)); } export void CreatureLib_Creature_SetDisplayVariant(Creature* p, const CreatureLib::Library::SpeciesVariant* variant) { return p->SetDisplayVariant(variant); } export bool CreatureLib_Creature_AllowedExperienceGain(Creature* p) { return p->AllowedExperienceGain(); } export void CreatureLib_Creature_SetAllowedExperienceGain(Creature* p, bool b) { p->SetAllowedExperienceGain(b); } export void CreatureLib_Creature_ChangeStatBoost(Creature* p, CreatureLib::Library::Statistic stat, int8_t diffAmount) { p->ChangeStatBoost(stat, diffAmount); } export uint32_t CreatureLib_Creature_GetFlatStat(Creature* p, CreatureLib::Library::Statistic stat) { return p->GetFlatStat(stat); } export uint32_t CreatureLib_Creature_GetBoostedStat(Creature* p, CreatureLib::Library::Statistic stat) { return p->GetBoostedStat(stat); } export uint32_t CreatureLib_Creature_GetBaseStat(Creature* p, CreatureLib::Library::Statistic stat) { return p->GetBaseStat(stat); } export int8_t CreatureLib_Creature_GetStatBoost(Creature* p, CreatureLib::Library::Statistic stat) { return p->GetStatBoost(stat); } SIMPLE_GET_FUNC(Creature, GetAvailableAttackSlot, uint8_t); export uint8_t CreatureLib_Creature_AddAttack(Creature* p, LearnedAttack* attack) { Try(p->AddAttack(attack);) } export uint8_t CreatureLib_Creature_ReplaceAttack(Creature* p, size_t index, LearnedAttack* attack) { Try(p->ReplaceAttack(index, attack);) } export uint8_t CreatureLib_Creature_SwapAttack(Creature* p, size_t a, size_t b) { Try(p->SwapAttacks(a, b);) } export u8 CreatureLib_Creature_SetStatus(Creature* p, const char* name) { Try(p->SetStatus(ArbUt::StringView(name))); }; export u8 CreatureLib_Creature_ClearStatus(Creature* p) { Try(p->ClearStatus()); }; export const char* CreatureLib_Creature_GetStatusName(Creature* p) { return p->GetStatusName().c_str(); }