diff options
Diffstat (limited to 'src')
51 files changed, 421 insertions, 86 deletions
diff --git a/src/Game/AI/Query/queryCheckHorseCustomizeSelect.cpp b/src/Game/AI/Query/queryCheckHorseCustomizeSelect.cpp index 6244cffe..37ac8f43 100644 --- a/src/Game/AI/Query/queryCheckHorseCustomizeSelect.cpp +++ b/src/Game/AI/Query/queryCheckHorseCustomizeSelect.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCheckHorseCustomizeSelect.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtCommonFlagsUtils.h" namespace uking::query { @@ -8,9 +9,15 @@ CheckHorseCustomizeSelect::CheckHorseCustomizeSelect(const InitArg& arg) CheckHorseCustomizeSelect::~CheckHorseCustomizeSelect() = default; -// FIXME: implement int CheckHorseCustomizeSelect::doQuery() { - return -1; + if (ksys::gdt::getFlag_Shop_IsDecide()) { + s32 state = ksys::gdt::getFlag_Shop_CurrentItemState(); + if (state == 0) + return 0; + if (state == 0xF) + return 1; + } + return 2; } void CheckHorseCustomizeSelect::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryCheckHorseTakenOut.cpp b/src/Game/AI/Query/queryCheckHorseTakenOut.cpp index fbaa8bed..d1b25b35 100644 --- a/src/Game/AI/Query/queryCheckHorseTakenOut.cpp +++ b/src/Game/AI/Query/queryCheckHorseTakenOut.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCheckHorseTakenOut.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtSpecialFlags.h" namespace uking::query { @@ -7,9 +8,13 @@ CheckHorseTakenOut::CheckHorseTakenOut(const InitArg& arg) : ksys::act::ai::Quer CheckHorseTakenOut::~CheckHorseTakenOut() = default; -// FIXME: implement int CheckHorseTakenOut::doQuery() { - return -1; + s32 active = ksys::gdt::getS32ByKey("Horse_ActiveIndex"); + if (active < 0) + return 2; + + s32 selected = ksys::gdt::getS32ByKey("Horse_SelectedIndex"); + return active == selected; } void CheckHorseTakenOut::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryCheckManufactResult.cpp b/src/Game/AI/Query/queryCheckManufactResult.cpp index 25bdf663..d87c84de 100644 --- a/src/Game/AI/Query/queryCheckManufactResult.cpp +++ b/src/Game/AI/Query/queryCheckManufactResult.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCheckManufactResult.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtCommonFlagsUtils.h" namespace uking::query { @@ -7,9 +8,15 @@ CheckManufactResult::CheckManufactResult(const InitArg& arg) : ksys::act::ai::Qu CheckManufactResult::~CheckManufactResult() = default; -// FIXME: implement +static constexpr s32 sManufactResults[8] = {0, 6, 4, 6, 1, 2, 3, 5}; + int CheckManufactResult::doQuery() { - return -1; + if (ksys::gdt::getFlag_Shop_IsDecide()) { + s32 state = ksys::gdt::getFlag_Shop_CurrentItemState(); + if (state < 8 && state >= 0) + return sManufactResults[state]; + } + return 6; } void CheckManufactResult::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryCheckPorchInItem.cpp b/src/Game/AI/Query/queryCheckPorchInItem.cpp index e848e0bf..585d5b7b 100644 --- a/src/Game/AI/Query/queryCheckPorchInItem.cpp +++ b/src/Game/AI/Query/queryCheckPorchInItem.cpp @@ -1,5 +1,7 @@ #include "Game/AI/Query/queryCheckPorchInItem.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actActorUtil.h" +#include "KingSystem/ActorSystem/actTag.h" namespace uking::query { @@ -7,9 +9,8 @@ CheckPorchInItem::CheckPorchInItem(const InitArg& arg) : ksys::act::ai::Query(ar CheckPorchInItem::~CheckPorchInItem() = default; -// FIXME: implement int CheckPorchInItem::doQuery() { - return -1; + return ksys::act::hasTag(mPorchItemName, ksys::act::tags::CanGetPouch); } void CheckPorchInItem::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryCheckProConUse.cpp b/src/Game/AI/Query/queryCheckProConUse.cpp index 8a0fd1f2..ce740b77 100644 --- a/src/Game/AI/Query/queryCheckProConUse.cpp +++ b/src/Game/AI/Query/queryCheckProConUse.cpp @@ -7,9 +7,8 @@ CheckProConUse::CheckProConUse(const InitArg& arg) : ksys::act::ai::Query(arg) { CheckProConUse::~CheckProConUse() = default; -// FIXME: implement int CheckProConUse::doQuery() { - return -1; + return 0; } void CheckProConUse::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryCheckRupee.cpp b/src/Game/AI/Query/queryCheckRupee.cpp index c0ae87b3..59dcb572 100644 --- a/src/Game/AI/Query/queryCheckRupee.cpp +++ b/src/Game/AI/Query/queryCheckRupee.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCheckRupee.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtManager.h" namespace uking::query { @@ -7,9 +8,12 @@ CheckRupee::CheckRupee(const InitArg& arg) : ksys::act::ai::Query(arg) {} CheckRupee::~CheckRupee() = default; -// FIXME: implement +// NON_MATCHING int CheckRupee::doQuery() { - return -1; + s32 value = 0; + if (!ksys::gdt::Manager::instance()->getParamBypassPerm().get().getS32(&value, "CurrentRupee")) + return 0; + return value >= *mValue; } void CheckRupee::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryCheckSellResult.cpp b/src/Game/AI/Query/queryCheckSellResult.cpp index db9a2718..b68dd89a 100644 --- a/src/Game/AI/Query/queryCheckSellResult.cpp +++ b/src/Game/AI/Query/queryCheckSellResult.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCheckSellResult.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtCommonFlagsUtils.h" namespace uking::query { @@ -7,9 +8,17 @@ CheckSellResult::CheckSellResult(const InitArg& arg) : ksys::act::ai::Query(arg) CheckSellResult::~CheckSellResult() = default; -// FIXME: implement int CheckSellResult::doQuery() { - return -1; + if (ksys::gdt::getFlag_Shop_IsDecide()) { + s32 flag = ksys::gdt::getFlag_Shop_CurrentItemState(); + if (flag == 0) + return 0; + if (flag == 0xD) + return 1; + if (flag == 0xE) + return 2; + } + return 3; } void CheckSellResult::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryCheckShopSelectedItemName.cpp b/src/Game/AI/Query/queryCheckShopSelectedItemName.cpp index 85a4d04b..e78a3009 100644 --- a/src/Game/AI/Query/queryCheckShopSelectedItemName.cpp +++ b/src/Game/AI/Query/queryCheckShopSelectedItemName.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCheckShopSelectedItemName.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtSpecialFlags.h" namespace uking::query { @@ -8,9 +9,10 @@ CheckShopSelectedItemName::CheckShopSelectedItemName(const InitArg& arg) CheckShopSelectedItemName::~CheckShopSelectedItemName() = default; -// FIXME: implement int CheckShopSelectedItemName::doQuery() { - return -1; + const char* result = &sead::SafeString::cNullChar; + ksys::gdt::getStr64ByKey(&result, "Shop_SelectItemName"); + return mPorchItemName == result; } void CheckShopSelectedItemName::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryCheckTimeType.cpp b/src/Game/AI/Query/queryCheckTimeType.cpp index b66d2c06..287059b1 100644 --- a/src/Game/AI/Query/queryCheckTimeType.cpp +++ b/src/Game/AI/Query/queryCheckTimeType.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCheckTimeType.h" #include <evfl/Query.h> +#include "KingSystem/World/worldManager.h" namespace uking::query { @@ -7,9 +8,19 @@ CheckTimeType::CheckTimeType(const InitArg& arg) : ksys::act::ai::Query(arg) {} CheckTimeType::~CheckTimeType() = default; -// FIXME: implement int CheckTimeType::doQuery() { - return -1; + auto* wm = ksys::world::Manager::instance(); + if (wm == nullptr) + return 0; + + auto* tm = wm->getTimeMgr(); + if (tm == nullptr) + return 0; + + u32 division = tm->getTimeDivision(); + if (division < 8) + return division; + return 0; } void CheckTimeType::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryCheckWarpMist.cpp b/src/Game/AI/Query/queryCheckWarpMist.cpp index 7f129694..e6533cba 100644 --- a/src/Game/AI/Query/queryCheckWarpMist.cpp +++ b/src/Game/AI/Query/queryCheckWarpMist.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCheckWarpMist.h" #include <evfl/Query.h> +#include "KingSystem/World/worldManager.h" namespace uking::query { @@ -7,9 +8,8 @@ CheckWarpMist::CheckWarpMist(const InitArg& arg) : ksys::act::ai::Query(arg) {} CheckWarpMist::~CheckWarpMist() = default; -// FIXME: implement int CheckWarpMist::doQuery() { - return -1; + return ksys::world::Manager::instance()->getEnvMgr()->getWarpMistIntensity() > 0.0f; } void CheckWarpMist::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryComparePlayerHeart.cpp b/src/Game/AI/Query/queryComparePlayerHeart.cpp index 10b81ba2..b7742ad6 100644 --- a/src/Game/AI/Query/queryComparePlayerHeart.cpp +++ b/src/Game/AI/Query/queryComparePlayerHeart.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryComparePlayerHeart.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actPlayerInfo.h" namespace uking::query { @@ -7,9 +8,12 @@ ComparePlayerHeart::ComparePlayerHeart(const InitArg& arg) : ksys::act::ai::Quer ComparePlayerHeart::~ComparePlayerHeart() = default; -// FIXME: implement int ComparePlayerHeart::doQuery() { - return -1; + auto* pi = ksys::act::PlayerInfo::instance(); + if (pi == nullptr) + return 0; + + return pi->getLife() >= *mThreshold; } void ComparePlayerHeart::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryComparePlayerMaxHeart.cpp b/src/Game/AI/Query/queryComparePlayerMaxHeart.cpp index 08b49cb7..4482a6f7 100644 --- a/src/Game/AI/Query/queryComparePlayerMaxHeart.cpp +++ b/src/Game/AI/Query/queryComparePlayerMaxHeart.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryComparePlayerMaxHeart.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actPlayerInfo.h" namespace uking::query { @@ -7,9 +8,13 @@ ComparePlayerMaxHeart::ComparePlayerMaxHeart(const InitArg& arg) : ksys::act::ai ComparePlayerMaxHeart::~ComparePlayerMaxHeart() = default; -// FIXME: implement int ComparePlayerMaxHeart::doQuery() { - return -1; + auto* pi = ksys::act::PlayerInfo::instance(); + if (pi == nullptr) + return 0; + + s32 full_hearts = pi->getMaxHearts() / 4; + return full_hearts >= *mThreshold; } void ComparePlayerMaxHeart::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryComparePlayerMaxStamina.cpp b/src/Game/AI/Query/queryComparePlayerMaxStamina.cpp index 44706d71..fa2c8c54 100644 --- a/src/Game/AI/Query/queryComparePlayerMaxStamina.cpp +++ b/src/Game/AI/Query/queryComparePlayerMaxStamina.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryComparePlayerMaxStamina.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actPlayerInfo.h" namespace uking::query { @@ -7,9 +8,16 @@ ComparePlayerMaxStamina::ComparePlayerMaxStamina(const InitArg& arg) : ksys::act ComparePlayerMaxStamina::~ComparePlayerMaxStamina() = default; -// FIXME: implement int ComparePlayerMaxStamina::doQuery() { - return -1; + auto* pi = ksys::act::PlayerInfo::instance(); + if (pi == nullptr) + return 0; + + s32 stamina = pi->getMaxStamina(); + if (stamina % 200 <= 0) + return stamina / 200 >= *mThreshold; + else + return stamina / 200 + 1 >= *mThreshold; } void ComparePlayerMaxStamina::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp b/src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp index 8c0422dd..a107699a 100644 --- a/src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp +++ b/src/Game/AI/Query/queryComparePlayerOriginalHeart.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryComparePlayerOriginalHeart.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actPlayerInfo.h" namespace uking::query { @@ -8,9 +9,20 @@ ComparePlayerOriginalHeart::ComparePlayerOriginalHeart(const InitArg& arg) ComparePlayerOriginalHeart::~ComparePlayerOriginalHeart() = default; -// FIXME: implement int ComparePlayerOriginalHeart::doQuery() { - return -1; + using PlayerInfo = ksys::act::PlayerInfo; + + if (PlayerInfo::instance() == nullptr) + return 0; + + s32 life = PlayerInfo::instance()->getLife(); + s32 hearts = PlayerInfo::instance()->getMaxHearts(); + s32 compare; + if (life <= hearts) + compare = life; + else + compare = hearts; + return compare >= *mThreshold; } void ComparePlayerOriginalHeart::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryCountFlag4.cpp b/src/Game/AI/Query/queryCountFlag4.cpp index 0b7210b4..e3a163e3 100644 --- a/src/Game/AI/Query/queryCountFlag4.cpp +++ b/src/Game/AI/Query/queryCountFlag4.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryCountFlag4.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtManager.h" namespace uking::query { @@ -7,9 +8,30 @@ CountFlag4::CountFlag4(const InitArg& arg) : ksys::act::ai::Query(arg) {} CountFlag4::~CountFlag4() = default; -// FIXME: implement int CountFlag4::doQuery() { - return -1; + auto* gdm = ksys::gdt::Manager::instance(); + if (gdm == nullptr) + return 0; + + bool x = false; + int result = 0; + + auto isOn = [&](const sead::SafeString& s) { + return gdm->getParamBypassPerm().get().getBool(&x, s) && x; + }; + + if (!mGameDataFlagNo0.isEmpty()) + result += isOn(mGameDataFlagNo0); + if (!mGameDataFlagNo1.isEmpty()) + result += isOn(mGameDataFlagNo1); + if (!mGameDataFlagNo2.isEmpty()) + result += isOn(mGameDataFlagNo2); + if (!mGameDataFlagNo3.isEmpty()) + result += isOn(mGameDataFlagNo3); + if (!mGameDataFlagNo4.isEmpty()) + result += isOn(mGameDataFlagNo4); + + return result; } void CountFlag4::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryEnemyDieCheck.cpp b/src/Game/AI/Query/queryEnemyDieCheck.cpp index 6d52c5e5..16068b31 100644 --- a/src/Game/AI/Query/queryEnemyDieCheck.cpp +++ b/src/Game/AI/Query/queryEnemyDieCheck.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryEnemyDieCheck.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actActor.h" namespace uking::query { @@ -7,9 +8,8 @@ EnemyDieCheck::EnemyDieCheck(const InitArg& arg) : ksys::act::ai::Query(arg) {} EnemyDieCheck::~EnemyDieCheck() = default; -// FIXME: implement int EnemyDieCheck::doQuery() { - return -1; + return mActor->getActorFlags2().isOff(ksys::act::Actor::ActorFlag2::Alive); } void EnemyDieCheck::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryEnemyRestLifeRate.cpp b/src/Game/AI/Query/queryEnemyRestLifeRate.cpp index a119fd9a..0d98b36f 100644 --- a/src/Game/AI/Query/queryEnemyRestLifeRate.cpp +++ b/src/Game/AI/Query/queryEnemyRestLifeRate.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryEnemyRestLifeRate.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actActor.h" namespace uking::query { @@ -7,9 +8,16 @@ EnemyRestLifeRate::EnemyRestLifeRate(const InitArg& arg) : ksys::act::ai::Query( EnemyRestLifeRate::~EnemyRestLifeRate() = default; -// FIXME: implement int EnemyRestLifeRate::doQuery() { - return -1; + s32* life = mActor->getLife(); + float value; + + if (life != nullptr) + value = *life; + else + value = 1.0f; + + return mActor->getMaxLife() * *mCheckRate <= value; } void EnemyRestLifeRate::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryGeneralChoice2.cpp b/src/Game/AI/Query/queryGeneralChoice2.cpp index 7ff555df..9bb73aaf 100644 --- a/src/Game/AI/Query/queryGeneralChoice2.cpp +++ b/src/Game/AI/Query/queryGeneralChoice2.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryGeneralChoice2.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actActorUtil.h" namespace uking::query { @@ -7,9 +8,12 @@ GeneralChoice2::GeneralChoice2(const InitArg& arg) : ksys::act::ai::Query(arg) { GeneralChoice2::~GeneralChoice2() = default; -// FIXME: implement int GeneralChoice2::doQuery() { - return -1; + s32 idx = ksys::act::getSelectedChoiceIdx(2, getName()); + if (idx < 0) + return 0; + + return idx; } void GeneralChoice2::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryGeneralChoice3.cpp b/src/Game/AI/Query/queryGeneralChoice3.cpp index e805e35a..39862387 100644 --- a/src/Game/AI/Query/queryGeneralChoice3.cpp +++ b/src/Game/AI/Query/queryGeneralChoice3.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryGeneralChoice3.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actActorUtil.h" namespace uking::query { @@ -7,9 +8,12 @@ GeneralChoice3::GeneralChoice3(const InitArg& arg) : ksys::act::ai::Query(arg) { GeneralChoice3::~GeneralChoice3() = default; -// FIXME: implement int GeneralChoice3::doQuery() { - return -1; + s32 idx = ksys::act::getSelectedChoiceIdx(3, getName()); + if (idx < 0) + return 0; + + return idx; } void GeneralChoice3::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryGeneralChoice4.cpp b/src/Game/AI/Query/queryGeneralChoice4.cpp index 290602f4..cc7b9599 100644 --- a/src/Game/AI/Query/queryGeneralChoice4.cpp +++ b/src/Game/AI/Query/queryGeneralChoice4.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryGeneralChoice4.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actActorUtil.h" namespace uking::query { @@ -9,7 +10,11 @@ GeneralChoice4::~GeneralChoice4() = default; // FIXME: implement int GeneralChoice4::doQuery() { - return -1; + s32 idx = ksys::act::getSelectedChoiceIdx(4, getName()); + if (idx < 0) + return 0; + + return idx; } void GeneralChoice4::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryGeneralChoice8.cpp b/src/Game/AI/Query/queryGeneralChoice8.cpp index c6345b8f..74a9784a 100644 --- a/src/Game/AI/Query/queryGeneralChoice8.cpp +++ b/src/Game/AI/Query/queryGeneralChoice8.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryGeneralChoice8.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actActorUtil.h" namespace uking::query { @@ -9,7 +10,11 @@ GeneralChoice8::~GeneralChoice8() = default; // FIXME: implement int GeneralChoice8::doQuery() { - return -1; + s32 idx = ksys::act::getSelectedChoiceIdx(8, getName()); + if (idx < 0) + return 0; + + return idx; } void GeneralChoice8::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryHasArmorAlreadyDyed.cpp b/src/Game/AI/Query/queryHasArmorAlreadyDyed.cpp index 7ad39f2c..b042a651 100644 --- a/src/Game/AI/Query/queryHasArmorAlreadyDyed.cpp +++ b/src/Game/AI/Query/queryHasArmorAlreadyDyed.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryHasArmorAlreadyDyed.h" #include <evfl/Query.h> +#include "Game/UI/uiPauseMenuDataMgr.h" namespace uking::query { @@ -7,9 +8,12 @@ HasArmorAlreadyDyed::HasArmorAlreadyDyed(const InitArg& arg) : ksys::act::ai::Qu HasArmorAlreadyDyed::~HasArmorAlreadyDyed() = default; -// FIXME: implement int HasArmorAlreadyDyed::doQuery() { - return -1; + auto* pm = ui::PauseMenuDataMgr::instance(); + if (pm == nullptr) + return 0; + + return pm->countAlreadyDyedArmor() > 0; } void HasArmorAlreadyDyed::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryHasArmorDye.cpp b/src/Game/AI/Query/queryHasArmorDye.cpp index 20c209a4..3910b5ee 100644 --- a/src/Game/AI/Query/queryHasArmorDye.cpp +++ b/src/Game/AI/Query/queryHasArmorDye.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryHasArmorDye.h" #include <evfl/Query.h> +#include "Game/UI/uiPauseMenuDataMgr.h" namespace uking::query { @@ -7,9 +8,12 @@ HasArmorDye::HasArmorDye(const InitArg& arg) : ksys::act::ai::Query(arg) {} HasArmorDye::~HasArmorDye() = default; -// FIXME: implement int HasArmorDye::doQuery() { - return -1; + auto* pm = ui::PauseMenuDataMgr::instance(); + if (pm == nullptr) + return 0; + + return pm->countArmorDye() > 0; } void HasArmorDye::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryHasCookResultInPorch.cpp b/src/Game/AI/Query/queryHasCookResultInPorch.cpp index 581803ec..534de0f5 100644 --- a/src/Game/AI/Query/queryHasCookResultInPorch.cpp +++ b/src/Game/AI/Query/queryHasCookResultInPorch.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryHasCookResultInPorch.h" #include <evfl/Query.h> +#include "Game/UI/uiUtils.h" namespace uking::query { @@ -7,8 +8,48 @@ HasCookResultInPorch::HasCookResultInPorch(const InitArg& arg) : ksys::act::ai:: HasCookResultInPorch::~HasCookResultInPorch() = default; -// FIXME: implement int HasCookResultInPorch::doQuery() { + s32 num; + + if (mCookEffectType == "AllOK") + num = ui::countCookResultsAllOk(mPorchItemName); + else + num = ui::countCookResultsCheck(mPorchItemName, getEffect()); + + if (num < *mCount) + return 0; + else if (num == *mCount) + return 1; + else if (num > *mCount) + return 2; + return 0; +} + +int HasCookResultInPorch::getEffect() const { + if (mCookEffectType == "None") + return -1; + if (mCookEffectType == "ResistHot") + return 4; + if (mCookEffectType == "ResistCold") + return 5; + if (mCookEffectType == "ResistElectric") + return 6; + if (mCookEffectType == "AttackUp") + return 10; + if (mCookEffectType == "DefenseUp") + return 11; + if (mCookEffectType == "Quietness") + return 12; + if (mCookEffectType == "AllSpeed") + return 13; + if (mCookEffectType == "Fireproof") + return 16; + if (mCookEffectType == "GutsRecover") + return 14; + if (mCookEffectType == "ExGutsMaxUp") + return 15; + if (mCookEffectType == "LifeMaxUp") + return 2; return -1; } diff --git a/src/Game/AI/Query/queryHasCookResultInPorch.h b/src/Game/AI/Query/queryHasCookResultInPorch.h index 592eeb91..0c3606d1 100644 --- a/src/Game/AI/Query/queryHasCookResultInPorch.h +++ b/src/Game/AI/Query/queryHasCookResultInPorch.h @@ -11,6 +11,8 @@ public: ~HasCookResultInPorch() override; int doQuery() override; + int getEffect() const; + void loadParams() override; void loadParams(const evfl::QueryArg& arg) override; diff --git a/src/Game/AI/Query/queryHasEnoughPayment.cpp b/src/Game/AI/Query/queryHasEnoughPayment.cpp index 5ef119da..52b86453 100644 --- a/src/Game/AI/Query/queryHasEnoughPayment.cpp +++ b/src/Game/AI/Query/queryHasEnoughPayment.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryHasEnoughPayment.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtManager.h" namespace uking::query { @@ -7,9 +8,16 @@ HasEnoughPayment::HasEnoughPayment(const InitArg& arg) : ksys::act::ai::Query(ar HasEnoughPayment::~HasEnoughPayment() = default; -// FIXME: implement int HasEnoughPayment::doQuery() { - return -1; + auto* gdm = ksys::gdt::Manager::instance(); + if (gdm != nullptr) { + s32 state = -1; + if (!gdm->getParam().get().getS32(&state, "Shop_CurrentItemState")) + return 1; + if (state == 2 || state == 3) + return 0; + } + return 1; } void HasEnoughPayment::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryHasItemDye.cpp b/src/Game/AI/Query/queryHasItemDye.cpp index cdb5b6f0..f78b0e8b 100644 --- a/src/Game/AI/Query/queryHasItemDye.cpp +++ b/src/Game/AI/Query/queryHasItemDye.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryHasItemDye.h" #include <evfl/Query.h> +#include "Game/UI/uiPauseMenuDataMgr.h" namespace uking::query { @@ -7,9 +8,11 @@ HasItemDye::HasItemDye(const InitArg& arg) : ksys::act::ai::Query(arg) {} HasItemDye::~HasItemDye() = default; -// FIXME: implement int HasItemDye::doQuery() { - return -1; + auto* pm = ui::PauseMenuDataMgr::instance(); + if (pm == nullptr) + return 0; + return pm->hasItemDye(); } void HasItemDye::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryHasPorchArrow.cpp b/src/Game/AI/Query/queryHasPorchArrow.cpp index 3d571d30..b29c2b37 100644 --- a/src/Game/AI/Query/queryHasPorchArrow.cpp +++ b/src/Game/AI/Query/queryHasPorchArrow.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryHasPorchArrow.h" #include <evfl/Query.h> +#include "Game/UI/uiUtils.h" namespace uking::query { @@ -7,9 +8,11 @@ HasPorchArrow::HasPorchArrow(const InitArg& arg) : ksys::act::ai::Query(arg) {} HasPorchArrow::~HasPorchArrow() = default; -// FIXME: implement int HasPorchArrow::doQuery() { - return -1; + s32 arrow_cnt = ui::getItemValue("NormalArrow") + ui::getItemValue("FireArrow") + + ui::getItemValue("IceArrow") + ui::getItemValue("ElectricArrow") + + ui::getItemValue("BombArrow_A") + ui::getItemValue("AncientArrow"); + return arrow_cnt < *mCheckNum; } void HasPorchArrow::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryHasPorchItem.cpp b/src/Game/AI/Query/queryHasPorchItem.cpp index dbfb4b46..1d14acae 100644 --- a/src/Game/AI/Query/queryHasPorchItem.cpp +++ b/src/Game/AI/Query/queryHasPorchItem.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryHasPorchItem.h" #include <evfl/Query.h> +#include "Game/UI/uiUtils.h" namespace uking::query { @@ -7,9 +8,8 @@ HasPorchItem::HasPorchItem(const InitArg& arg) : ksys::act::ai::Query(arg) {} HasPorchItem::~HasPorchItem() = default; -// FIXME: implement int HasPorchItem::doQuery() { - return -1; + return ui::getItemValue(mPorchItemName) >= *mCount; } void HasPorchItem::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryHasPorchItemByCategory.cpp b/src/Game/AI/Query/queryHasPorchItemByCategory.cpp index e9ac46a9..fea15c52 100644 --- a/src/Game/AI/Query/queryHasPorchItemByCategory.cpp +++ b/src/Game/AI/Query/queryHasPorchItemByCategory.cpp @@ -1,5 +1,7 @@ #include "Game/AI/Query/queryHasPorchItemByCategory.h" #include <evfl/Query.h> +#include "Game/UI/uiPauseMenuDataMgr.h" +#include "KingSystem/ActorSystem/actTag.h" namespace uking::query { @@ -7,9 +9,72 @@ HasPorchItemByCategory::HasPorchItemByCategory(const InitArg& arg) : ksys::act:: HasPorchItemByCategory::~HasPorchItemByCategory() = default; -// FIXME: implement int HasPorchItemByCategory::doQuery() { - return -1; + s32 result = 0; + using namespace ksys::act::tags; + + auto* pm = ui::PauseMenuDataMgr::instance(); + if (pm == nullptr) + return 1; + + switch (*mCategory) { + case 0: + result = pm->countItemsWithProfile("WeaponBow", true); + break; + case 1: + result = pm->countItemsWithProfile("WeaponShield", true); + break; + case 2: + result = pm->countItemsWithProfile("WeaponSpear", true); + break; + case 3: + result = pm->countItemsWithProfile("WeaponSmallSword", true); + break; + case 4: + result = pm->countItemsWithTag(Arrow, false); + break; + case 16: + result = pm->countItemsWithTag(Arrow, true); + break; + case 5: + result = pm->countItemsWithProfile("WeaponLargeSword", true); + break; + case 6: + result = pm->countItemsWithTag(CookMushroom, true); + break; + case 7: + result = pm->countItemsWithTag(RoastItem, true); + break; + case 8: + result = pm->countItemsWithTag(CookFruit, true); + break; + case 9: + result = pm->countItemsWithTag(CookOre, true); + break; + case 10: + result = pm->countItemsWithTag(CookPlant, true); + break; + case 11: + result = pm->countItemsWithTag(EnemyMaterial, true); + break; + case 12: + result = pm->countItemsWithTag(CookMeat, true); + break; + case 13: + result = pm->countItemsWithTag(CookMaterial, true); + break; + case 14: + result = pm->countItemsWithProfile("HorseReins", true); + break; + case 15: + result = pm->countItemsWithProfile("HorseSaddle", true); + break; + default: + result = 0; + break; + } + + return result < *mCount; } void HasPorchItemByCategory::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryHasPouchItemByPouchCategory.cpp b/src/Game/AI/Query/queryHasPouchItemByPouchCategory.cpp index c38664ab..30f4e2bc 100644 --- a/src/Game/AI/Query/queryHasPouchItemByPouchCategory.cpp +++ b/src/Game/AI/Query/queryHasPouchItemByPouchCategory.cpp @@ -1,5 +1,7 @@ #include "Game/AI/Query/queryHasPouchItemByPouchCategory.h" #include <evfl/Query.h> +#include "Game/UI/uiPauseMenuDataMgr.h" +#include "KingSystem/ActorSystem/actTag.h" namespace uking::query { @@ -8,9 +10,44 @@ HasPouchItemByPouchCategory::HasPouchItemByPouchCategory(const InitArg& arg) HasPouchItemByPouchCategory::~HasPouchItemByPouchCategory() = default; -// FIXME: implement int HasPouchItemByPouchCategory::doQuery() { - return -1; + s32 result = 0; + using namespace ksys::act::tags; + + auto* pm = ui::PauseMenuDataMgr::instance(); + if (pm == nullptr) + return 1; + + switch (*mCategory) { + case 0: + result = pm->countItemsWithCategory(ui::PouchCategory::Sword); + break; + case 1: + result = pm->countItemsWithProfile("WeaponBow", false); + break; + case 2: + result = pm->countItemsWithTag(Arrow, false); + break; + case 3: + result = pm->countItemsWithCategory(ui::PouchCategory::Shield); + break; + case 4: + result = pm->countItemsWithCategory(ui::PouchCategory::Armor); + break; + case 5: + result = pm->countItemsWithCategory(ui::PouchCategory::Material); + break; + case 6: + result = pm->countItemsWithCategory(ui::PouchCategory::Food); + break; + case 7: + result = pm->countItemsWithCategory(ui::PouchCategory::KeyItem); + break; + default: + result = 0; + break; + } + return result < *mCount; } void HasPouchItemByPouchCategory::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryHasSetItem.cpp b/src/Game/AI/Query/queryHasSetItem.cpp index aff0ede7..7b8ccd7d 100644 --- a/src/Game/AI/Query/queryHasSetItem.cpp +++ b/src/Game/AI/Query/queryHasSetItem.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryHasSetItem.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtManager.h" namespace uking::query { @@ -7,9 +8,24 @@ HasSetItem::HasSetItem(const InitArg& arg) : ksys::act::ai::Query(arg) {} HasSetItem::~HasSetItem() = default; -// FIXME: implement +// NON_MATCHING: temp duplication int HasSetItem::doQuery() { - return -1; + auto* gdm = ksys::gdt::Manager::instance(); + if (gdm == nullptr) + return 0; + + auto flag_type = gdm->getParam().get1().getBuffer()->getFlagType(mItemName); + + if (flag_type == ksys::gdt::FlagType::Bool) { + bool value = false; + if (gdm->getParamBypassPerm().get().getBool(&value, mItemName)) + return value; + } else if (flag_type == ksys::gdt::FlagType::S32) { + s32 value = 0; + if (gdm->getParamBypassPerm().get().getS32(&value, mItemName)) + return value >= *mCount; + } + return 0; } void HasSetItem::loadParams(const evfl::QueryArg& arg) { diff --git a/src/Game/AI/Query/queryIsAppAlreadyExchanged.cpp b/src/Game/AI/Query/queryIsAppAlreadyExchanged.cpp index a70d5909..d665a0db 100644 --- a/src/Game/AI/Query/queryIsAppAlreadyExchanged.cpp +++ b/src/Game/AI/Query/queryIsAppAlreadyExchanged.cpp @@ -7,9 +7,8 @@ IsAppAlreadyExchanged::IsAppAlreadyExchanged(const InitArg& arg) : ksys::act::ai IsAppAlreadyExchanged::~IsAppAlreadyExchanged() = default; -// FIXME: implement int IsAppAlreadyExchanged::doQuery() { - return -1; + return 1; } void IsAppAlreadyExchanged::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryIsBloodyMoonTrig.cpp b/src/Game/AI/Query/queryIsBloodyMoonTrig.cpp index 81a31bcc..9c65fbed 100644 --- a/src/Game/AI/Query/queryIsBloodyMoonTrig.cpp +++ b/src/Game/AI/Query/queryIsBloodyMoonTrig.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryIsBloodyMoonTrig.h" #include <evfl/Query.h> +#include "KingSystem/World/worldManager.h" namespace uking::query { @@ -7,9 +8,8 @@ IsBloodyMoonTrig::IsBloodyMoonTrig(const InitArg& arg) : ksys::act::ai::Query(ar IsBloodyMoonTrig::~IsBloodyMoonTrig() = default; -// FIXME: implement int IsBloodyMoonTrig::doQuery() { - return -1; + return ksys::world::Manager::instance()->getTimeMgr()->wasBloodyDayAndDayPassed(); } void IsBloodyMoonTrig::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryIsCurrentAocFieldStage.cpp b/src/Game/AI/Query/queryIsCurrentAocFieldStage.cpp index 58a52f3d..fab8122e 100644 --- a/src/Game/AI/Query/queryIsCurrentAocFieldStage.cpp +++ b/src/Game/AI/Query/queryIsCurrentAocFieldStage.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryIsCurrentAocFieldStage.h" #include <evfl/Query.h> +#include "KingSystem/System/StageInfo.h" namespace uking::query { @@ -7,9 +8,8 @@ IsCurrentAocFieldStage::IsCurrentAocFieldStage(const InitArg& arg) : ksys::act:: IsCurrentAocFieldStage::~IsCurrentAocFieldStage() = default; -// FIXME: implement int IsCurrentAocFieldStage::doQuery() { - return -1; + return ksys::StageInfo::sIsAocField; } void IsCurrentAocFieldStage::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryIsCurrentCDungeonStage.cpp b/src/Game/AI/Query/queryIsCurrentCDungeonStage.cpp index a2a6c1d9..dc422aa8 100644 --- a/src/Game/AI/Query/queryIsCurrentCDungeonStage.cpp +++ b/src/Game/AI/Query/queryIsCurrentCDungeonStage.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryIsCurrentCDungeonStage.h" #include <evfl/Query.h> +#include "KingSystem/System/StageInfo.h" namespace uking::query { @@ -7,9 +8,8 @@ IsCurrentCDungeonStage::IsCurrentCDungeonStage(const InitArg& arg) : ksys::act:: IsCurrentCDungeonStage::~IsCurrentCDungeonStage() = default; -// FIXME: implement int IsCurrentCDungeonStage::doQuery() { - return -1; + return ksys::StageInfo::sIsCDungeon; } void IsCurrentCDungeonStage::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryIsCurrentMainFieldDungeonStage.cpp b/src/Game/AI/Query/queryIsCurrentMainFieldDungeonStage.cpp index e3eedd18..08e3bfe1 100644 --- a/src/Game/AI/Query/queryIsCurrentMainFieldDungeonStage.cpp +++ b/src/Game/AI/Query/queryIsCurrentMainFieldDungeonStage.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryIsCurrentMainFieldDungeonStage.h" #include <evfl/Query.h> +#include "KingSystem/System/StageInfo.h" namespace uking::query { @@ -8,9 +9,8 @@ IsCurrentMainFieldDungeonStage::IsCurrentMainFieldDungeonStage(const InitArg& ar IsCurrentMainFieldDungeonStage::~IsCurrentMainFieldDungeonStage() = default; -// FIXME: implement int IsCurrentMainFieldDungeonStage::doQuery() { - return -1; + return ksys::StageInfo::sIsMainFieldDungeon; } void IsCurrentMainFieldDungeonStage::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryIsCurrentMainFieldStage.cpp b/src/Game/AI/Query/queryIsCurrentMainFieldStage.cpp index ca4bc4c4..ddd0aa88 100644 --- a/src/Game/AI/Query/queryIsCurrentMainFieldStage.cpp +++ b/src/Game/AI/Query/queryIsCurrentMainFieldStage.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryIsCurrentMainFieldStage.h" #include <evfl/Query.h> +#include "KingSystem/System/StageInfo.h" namespace uking::query { @@ -7,9 +8,8 @@ IsCurrentMainFieldStage::IsCurrentMainFieldStage(const InitArg& arg) : ksys::act IsCurrentMainFieldStage::~IsCurrentMainFieldStage() = default; -// FIXME: implement int IsCurrentMainFieldStage::doQuery() { - return -1; + return ksys::StageInfo::getCurrentMapType() == "MainField"; } void IsCurrentMainFieldStage::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryIsItemInStock.cpp b/src/Game/AI/Query/queryIsItemInStock.cpp index 9f957af8..f3d40e8e 100644 --- a/src/Game/AI/Query/queryIsItemInStock.cpp +++ b/src/Game/AI/Query/queryIsItemInStock.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryIsItemInStock.h" #include <evfl/Query.h> +#include "KingSystem/GameData/gdtManager.h" namespace uking::query { @@ -7,9 +8,16 @@ IsItemInStock::IsItemInStock(const InitArg& arg) : ksys::act::ai::Query(arg) {} IsItemInStock::~IsItemInStock() = default; -// FIXME: implement int IsItemInStock::doQuery() { - return -1; + auto* gdm = ksys::gdt::Manager::instance(); + if (gdm != nullptr) { + s32 state = -1; + if (!gdm->getParam().get().getS32(&state, "Shop_CurrentItemState")) + return 1; + if (state == 1) + return 0; + } + return 1; } void IsItemInStock::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryIsOnInstEventFlag.cpp b/src/Game/AI/Query/queryIsOnInstEventFlag.cpp index e46a17e7..987b69c6 100644 --- a/src/Game/AI/Query/queryIsOnInstEventFlag.cpp +++ b/src/Game/AI/Query/queryIsOnInstEventFlag.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryIsOnInstEventFlag.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actActor.h" namespace uking::query { @@ -7,9 +8,8 @@ IsOnInstEventFlag::IsOnInstEventFlag(const InitArg& arg) : ksys::act::ai::Query( IsOnInstEventFlag::~IsOnInstEventFlag() = default; -// FIXME: implement int IsOnInstEventFlag::doQuery() { - return -1; + return mActor->getActorFlags2().isOn(ksys::act::Actor::ActorFlag2::InstEvent); } void IsOnInstEventFlag::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryIsSuccessEndLastDemoAction.cpp b/src/Game/AI/Query/queryIsSuccessEndLastDemoAction.cpp index a34df9e3..37d33fc2 100644 --- a/src/Game/AI/Query/queryIsSuccessEndLastDemoAction.cpp +++ b/src/Game/AI/Query/queryIsSuccessEndLastDemoAction.cpp @@ -1,5 +1,7 @@ #include "Game/AI/Query/queryIsSuccessEndLastDemoAction.h" #include <evfl/Query.h> +#include "KingSystem/ActorSystem/actActor.h" +#include "KingSystem/ActorSystem/actAiRoot.h" namespace uking::query { @@ -8,9 +10,16 @@ IsSuccessEndLastDemoAction::IsSuccessEndLastDemoAction(const InitArg& arg) IsSuccessEndLastDemoAction::~IsSuccessEndLastDemoAction() = default; -// FIXME: implement int IsSuccessEndLastDemoAction::doQuery() { - return -1; + if (mActor != nullptr && mActor->getRootAi() != nullptr) { + auto* action = mActor->getRootAi()->getCurrentAction(); + if (action == nullptr) + return 0; + + if (action->isFinished()) + return 1; + } + return 0; } void IsSuccessEndLastDemoAction::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryIsTerrorDisappeared.cpp b/src/Game/AI/Query/queryIsTerrorDisappeared.cpp index 58731f5c..b535891d 100644 --- a/src/Game/AI/Query/queryIsTerrorDisappeared.cpp +++ b/src/Game/AI/Query/queryIsTerrorDisappeared.cpp @@ -7,9 +7,8 @@ IsTerrorDisappeared::IsTerrorDisappeared(const InitArg& arg) : ksys::act::ai::Qu IsTerrorDisappeared::~IsTerrorDisappeared() = default; -// FIXME: implement int IsTerrorDisappeared::doQuery() { - return -1; + return 0; } void IsTerrorDisappeared::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryWhatDayOfTheWeek.cpp b/src/Game/AI/Query/queryWhatDayOfTheWeek.cpp index 77da0090..f5c7f78b 100644 --- a/src/Game/AI/Query/queryWhatDayOfTheWeek.cpp +++ b/src/Game/AI/Query/queryWhatDayOfTheWeek.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryWhatDayOfTheWeek.h" #include <evfl/Query.h> +#include "KingSystem/World/worldManager.h" namespace uking::query { @@ -7,9 +8,8 @@ WhatDayOfTheWeek::WhatDayOfTheWeek(const InitArg& arg) : ksys::act::ai::Query(ar WhatDayOfTheWeek::~WhatDayOfTheWeek() = default; -// FIXME: implement int WhatDayOfTheWeek::doQuery() { - return -1; + return u8(ksys::world::Manager::instance()->getTimeMgr()->getNumberOfDays() % 7); } void WhatDayOfTheWeek::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryWhatDungeonType.cpp b/src/Game/AI/Query/queryWhatDungeonType.cpp index de51f151..ae02bdb8 100644 --- a/src/Game/AI/Query/queryWhatDungeonType.cpp +++ b/src/Game/AI/Query/queryWhatDungeonType.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryWhatDungeonType.h" #include <evfl/Query.h> +#include "KingSystem/World/worldManager.h" namespace uking::query { @@ -7,9 +8,8 @@ WhatDungeonType::WhatDungeonType(const InitArg& arg) : ksys::act::ai::Query(arg) WhatDungeonType::~WhatDungeonType() = default; -// FIXME: implement int WhatDungeonType::doQuery() { - return -1; + return u8(ksys::world::Manager::instance()->getDungeonType()); } void WhatDungeonType::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/AI/Query/queryWhatMoonName.cpp b/src/Game/AI/Query/queryWhatMoonName.cpp index df5cc2dd..11c4c275 100644 --- a/src/Game/AI/Query/queryWhatMoonName.cpp +++ b/src/Game/AI/Query/queryWhatMoonName.cpp @@ -1,5 +1,6 @@ #include "Game/AI/Query/queryWhatMoonName.h" #include <evfl/Query.h> +#include "KingSystem/World/worldManager.h" namespace uking::query { @@ -7,9 +8,9 @@ WhatMoonName::WhatMoonName(const InitArg& arg) : ksys::act::ai::Query(arg) {} WhatMoonName::~WhatMoonName() = default; -// FIXME: implement int WhatMoonName::doQuery() { - return -1; + auto* tm = ksys::world::Manager::instance()->getTimeMgr(); + return static_cast<int>(tm->getMoonType()); } void WhatMoonName::loadParams(const evfl::QueryArg& arg) {} diff --git a/src/Game/UI/uiUtils.h b/src/Game/UI/uiUtils.h index ace7653e..e39d53c9 100644 --- a/src/Game/UI/uiUtils.h +++ b/src/Game/UI/uiUtils.h @@ -34,4 +34,8 @@ int getItemGeneralLife(const char* name); // TODO: move this to yet another translation unit (TBD but not the same one as the above) void addItemForDebug(const sead::SafeString& name, int value); +int countCookResultsCheck(const sead::SafeString& name, s32 effect_type); +int countCookResultsAllOk(const sead::SafeString& name); +int getItemValue(const sead::SafeString& name); + } // namespace uking::ui diff --git a/src/KingSystem/ActorSystem/actActor.h b/src/KingSystem/ActorSystem/actActor.h index 3c109432..6b077653 100644 --- a/src/KingSystem/ActorSystem/actActor.h +++ b/src/KingSystem/ActorSystem/actActor.h @@ -40,7 +40,9 @@ public: }; enum class ActorFlag2 { + InstEvent = 0x8, NoDistanceCheck = 0x80, + Alive = 0x4000000, }; enum class DeleteType { @@ -70,7 +72,7 @@ public: bool is_life_infinite, int i, int life) const; virtual s32 getMaxLife(); - + virtual s32* getLife(); virtual LifeRecoverInfo* getLifeRecoverInfo(); void emitBasicSigOn(); diff --git a/src/KingSystem/ActorSystem/actActorUtil.h b/src/KingSystem/ActorSystem/actActorUtil.h index b8ec6b79..cc642e99 100644 --- a/src/KingSystem/ActorSystem/actActorUtil.h +++ b/src/KingSystem/ActorSystem/actActorUtil.h @@ -165,4 +165,6 @@ bool getSameGroupActorName(sead::SafeString* name, const sead::SafeString& defau al::ByamlIter* actor_info); bool getSameGroupActorName(sead::SafeString* name, const sead::SafeString& actor_name); +s32 getSelectedChoiceIdx(s32 max, const char* query_name); + } // namespace ksys::act diff --git a/src/KingSystem/ActorSystem/actPlayerInfo.h b/src/KingSystem/ActorSystem/actPlayerInfo.h index 9ceb53b2..c356c3f9 100644 --- a/src/KingSystem/ActorSystem/actPlayerInfo.h +++ b/src/KingSystem/ActorSystem/actPlayerInfo.h @@ -14,6 +14,9 @@ class PlayerInfo { public: PlayerBase* getPlayer() const; + s32 getLife() const; + u32 getMaxHearts() const; + f32 getMaxStamina() const; }; } // namespace ksys::act diff --git a/src/KingSystem/World/worldEnvMgr.h b/src/KingSystem/World/worldEnvMgr.h index 3c861f3f..6956a18d 100644 --- a/src/KingSystem/World/worldEnvMgr.h +++ b/src/KingSystem/World/worldEnvMgr.h @@ -207,6 +207,8 @@ public: void allowPaletteOverride(); + float getWarpMistIntensity() const { return mWarpMistIntensity; } + protected: void init_(sead::Heap* heap) override; void calc_() override; diff --git a/src/KingSystem/World/worldTimeMgr.h b/src/KingSystem/World/worldTimeMgr.h index 4320ead0..107b5836 100644 --- a/src/KingSystem/World/worldTimeMgr.h +++ b/src/KingSystem/World/worldTimeMgr.h @@ -98,6 +98,7 @@ public: BloodMoonForceMode getBloodMoonForceMode() const { return mBloodMoonForceMode; } bool isPlayedDemo103Or997() const { return mPlayedDemo103Or997; } bool isFindDungeonActivated() const { return mFindDungeonActivated; } + bool wasBloodyDayAndDayPassed() const { return mWasBloodyDayAndDayPassed; } bool isResetGdtOnNextSceneUnloadForBloodMoon() const { return mResetGdtOnNextSceneUnloadForBloodMoon; } |
