aoc: Manager is ksys, the DLC managers stay game-side

aoc::Manager is created during engine start-up and called by gdt, map
and StarterPackMgr; only game code uses HardModeManager and
ChampionBalladManager.

(AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
This commit is contained in:
Léo Lam
2026-09-28 03:39:31 +02:00
parent 38905c8c07
commit c4c7c00e85
22 changed files with 153 additions and 147 deletions
+44 -44
View File
@@ -40586,15 +40586,15 @@ Address,Quality,Size,Name
0x000000710067ef10,U,000472,
0x000000710067f0e8,U,000004,j__ZdlPv_290
0x000000710067f0ec,U,000008,
0x000000710067f0f4,O,000100,_ZN5uking21ChampionBalladManager18SingletonDisposer_D1Ev
0x000000710067f158,O,000108,_ZN5uking21ChampionBalladManager18SingletonDisposer_D0Ev
0x000000710067f1c4,O,000144,_ZN5uking21ChampionBalladManager14createInstanceEPN4sead4HeapE
0x000000710067f254,O,000004,_ZN5uking21ChampionBalladManagerD2Ev
0x000000710067f258,O,000004,_ZN5uking21ChampionBalladManagerD0Ev
0x000000710067f25c,O,000008,_ZN5uking21ChampionBalladManager4initEv
0x000000710067f264,O,000040,_ZN5uking21ChampionBalladManager21setBlightRematchCountEaNS_10BlightTypeE
0x000000710067f28c,O,000048,_ZN5uking21ChampionBalladManager27incrementBlightRematchCountENS_10BlightTypeE
0x000000710067f2bc,O,000028,_ZNK5uking21ChampionBalladManager21getBlightRematchCountENS_10BlightTypeE
0x000000710067f0f4,O,000100,_ZN5uking3aoc21ChampionBalladManager18SingletonDisposer_D1Ev
0x000000710067f158,O,000108,_ZN5uking3aoc21ChampionBalladManager18SingletonDisposer_D0Ev
0x000000710067f1c4,O,000144,_ZN5uking3aoc21ChampionBalladManager14createInstanceEPN4sead4HeapE
0x000000710067f254,O,000004,_ZN5uking3aoc21ChampionBalladManagerD2Ev
0x000000710067f258,O,000004,_ZN5uking3aoc21ChampionBalladManagerD0Ev
0x000000710067f25c,O,000008,_ZN5uking3aoc21ChampionBalladManager4initEv
0x000000710067f264,O,000040,_ZN5uking3aoc21ChampionBalladManager21setBlightRematchCountEaNS0_10BlightTypeE
0x000000710067f28c,O,000048,_ZN5uking3aoc21ChampionBalladManager27incrementBlightRematchCountENS0_10BlightTypeE
0x000000710067f2bc,O,000028,_ZNK5uking3aoc21ChampionBalladManager21getBlightRematchCountENS0_10BlightTypeE
0x000000710067f2d8,U,000100,StasisMgr::deleteInstance
0x000000710067f33c,U,000108,StasisMgr::deleteInstanceDelete
0x000000710067f3a8,U,000136,StasisMgr::createInstance
@@ -74880,45 +74880,45 @@ Address,Quality,Size,Name
0x0000007100d68e54,U,000188,
0x0000007100d68f10,U,000004,
0x0000007100d68f14,O,000412,_GLOBAL__sub_I_aocManager.cpp
0x0000007100d690b0,O,000092,_ZN5uking3aoc7Manager18SingletonDisposer_D1Ev
0x0000007100d6910c,O,000100,_ZN5uking3aoc7Manager18SingletonDisposer_D0Ev
0x0000007100d69170,O,000128,_ZN5uking3aoc7Manager14createInstanceEPN4sead4HeapE
0x0000007100d691f0,O,001560,_ZN5uking3aoc7ManagerC1Ev
0x0000007100d69808,O,000004,_ZN5uking3aoc7Manager11onGdtReinitEPN4ksys3gdt7Manager11ReinitEventE
0x0000007100d6980c,O,000380,_ZN5uking3aoc7ManagerD1Ev
0x0000007100d69988,O,000256,_ZN5uking3aoc7Manager4initEPN4sead4HeapE
0x0000007100d69a88,O,000204,_ZN5uking3aoc7Manager15loadVersionFileEv
0x0000007100d69b54,O,000180,_ZN5uking3aoc7Manager20loadAocMainFieldPackEPN4ksys12OverlayArenaE
0x0000007100d69c08,O,000152,_ZN5uking3aoc7Manager24registerAocMainFieldPackEv
0x0000007100d69ca0,O,000068,_ZN5uking3aoc7Manager22unloadAocMainFieldPackEv
0x0000007100d69ce4,O,000324,_ZNK5uking3aoc7Manager23getFileDeviceForMapFileERKN4sead14SafeStringBaseIcEE
0x0000007100d69e28,O,000292,_ZNK5uking3aoc7Manager14aocPackHasFileERKN4sead14SafeStringBaseIcEE
0x0000007100d69f4c,O,001064,_ZNK5uking3aoc7Manager9isAocFileERKN4sead14SafeStringBaseIcEES6_S6_S6_S6_
0x0000007100d6a374,O,000376,_ZN5uking3aoc7Manager19getFileDeviceForMapEPPN4sead10FileDeviceEPPN4ksys3res6HandleERKNS2_14SafeStringBaseIcEE
0x0000007100d6a4ec,O,000168,_ZNK5uking3aoc7Manager30getFileDeviceForStaticCompoundERKN4sead14SafeStringBaseIcEE
0x0000007100d6a594,O,000104,_ZNK5uking3aoc7Manager24getFileDeviceForTeraMeshERKN4sead14SafeStringBaseIcEE
0x0000007100d6a5fc,O,000168,_ZNK5uking3aoc7Manager23getFileDeviceForNavMeshERKN4sead14SafeStringBaseIcEE
0x0000007100d6a6a4,O,000104,_ZNK5uking3aoc7Manager23getFileDeviceForTerrainERKN4sead14SafeStringBaseIcEE
0x0000007100d6a70c,O,000104,_ZNK5uking3aoc7Manager20getFileDeviceForGameERKN4sead14SafeStringBaseIcEE
0x0000007100d6a774,O,000104,_ZNK5uking3aoc7Manager18getFileDeviceForUIERKN4sead14SafeStringBaseIcEE
0x0000007100d6a7dc,O,000516,_ZN5uking3aoc7Manager12isAocDungeonERKN4sead14SafeStringBaseIcEE
0x0000007100d6a9e0,O,000748,_ZN5uking3aoc7Manager8isAocMapERKN4sead14SafeStringBaseIcEES6_
0x0000007100d6accc,O,000140,_ZN5uking3aoc7Manager10isAocFieldERKN4sead14SafeStringBaseIcEE
0x0000007100d6ad58,O,000448,_ZNK5uking3aoc7Manager27getFileDeviceForDungeonPackERKN4sead14SafeStringBaseIcEE
0x0000007100d6af18,O,000172,_ZN5uking3aoc7Manager15registerAocPackEPN4ksys3res6HandleE
0x0000007100d6afc4,O,000660,_ZNK5uking3aoc7Manager15changeMoviePathERN4sead22BufferedSafeStringBaseIcEE
0x0000007100d690b0,O,000092,_ZN4ksys3aoc7Manager18SingletonDisposer_D1Ev
0x0000007100d6910c,O,000100,_ZN4ksys3aoc7Manager18SingletonDisposer_D0Ev
0x0000007100d69170,O,000128,_ZN4ksys3aoc7Manager14createInstanceEPN4sead4HeapE
0x0000007100d691f0,O,001560,_ZN4ksys3aoc7ManagerC1Ev
0x0000007100d69808,O,000004,_ZN4ksys3aoc7Manager11onGdtReinitEPNS_3gdt7Manager11ReinitEventE
0x0000007100d6980c,O,000380,_ZN4ksys3aoc7ManagerD1Ev
0x0000007100d69988,O,000256,_ZN4ksys3aoc7Manager4initEPN4sead4HeapE
0x0000007100d69a88,O,000204,_ZN4ksys3aoc7Manager15loadVersionFileEv
0x0000007100d69b54,O,000180,_ZN4ksys3aoc7Manager20loadAocMainFieldPackEPNS_12OverlayArenaE
0x0000007100d69c08,O,000152,_ZN4ksys3aoc7Manager24registerAocMainFieldPackEv
0x0000007100d69ca0,O,000068,_ZN4ksys3aoc7Manager22unloadAocMainFieldPackEv
0x0000007100d69ce4,O,000324,_ZNK4ksys3aoc7Manager23getFileDeviceForMapFileERKN4sead14SafeStringBaseIcEE
0x0000007100d69e28,O,000292,_ZNK4ksys3aoc7Manager14aocPackHasFileERKN4sead14SafeStringBaseIcEE
0x0000007100d69f4c,O,001064,_ZNK4ksys3aoc7Manager9isAocFileERKN4sead14SafeStringBaseIcEES6_S6_S6_S6_
0x0000007100d6a374,O,000376,_ZN4ksys3aoc7Manager19getFileDeviceForMapEPPN4sead10FileDeviceEPPNS_3res6HandleERKNS2_14SafeStringBaseIcEE
0x0000007100d6a4ec,O,000168,_ZNK4ksys3aoc7Manager30getFileDeviceForStaticCompoundERKN4sead14SafeStringBaseIcEE
0x0000007100d6a594,O,000104,_ZNK4ksys3aoc7Manager24getFileDeviceForTeraMeshERKN4sead14SafeStringBaseIcEE
0x0000007100d6a5fc,O,000168,_ZNK4ksys3aoc7Manager23getFileDeviceForNavMeshERKN4sead14SafeStringBaseIcEE
0x0000007100d6a6a4,O,000104,_ZNK4ksys3aoc7Manager23getFileDeviceForTerrainERKN4sead14SafeStringBaseIcEE
0x0000007100d6a70c,O,000104,_ZNK4ksys3aoc7Manager20getFileDeviceForGameERKN4sead14SafeStringBaseIcEE
0x0000007100d6a774,O,000104,_ZNK4ksys3aoc7Manager18getFileDeviceForUIERKN4sead14SafeStringBaseIcEE
0x0000007100d6a7dc,O,000516,_ZN4ksys3aoc7Manager12isAocDungeonERKN4sead14SafeStringBaseIcEE
0x0000007100d6a9e0,O,000748,_ZN4ksys3aoc7Manager8isAocMapERKN4sead14SafeStringBaseIcEES6_
0x0000007100d6accc,O,000140,_ZN4ksys3aoc7Manager10isAocFieldERKN4sead14SafeStringBaseIcEE
0x0000007100d6ad58,O,000448,_ZNK4ksys3aoc7Manager27getFileDeviceForDungeonPackERKN4sead14SafeStringBaseIcEE
0x0000007100d6af18,O,000172,_ZN4ksys3aoc7Manager15registerAocPackEPNS_3res6HandleE
0x0000007100d6afc4,O,000660,_ZNK4ksys3aoc7Manager15changeMoviePathERN4sead22BufferedSafeStringBaseIcEE
0x0000007100d6b258,U,002488,aocManager::parseMainFieldStaticForDlc
0x0000007100d6bc10,U,001224,aocManager::x
0x0000007100d6c0d8,m,000916,_ZN5uking3aoc7Manager12parseVersionEv
0x0000007100d6c46c,O,000384,_ZN5uking3aoc7Manager11VersionFile11readVersionEv
0x0000007100d6c5ec,O,000048,_ZN5uking3aoc7Manager12initGameDataEv
0x0000007100d6c61c,O,000460,_ZN5uking3aoc7Manager11reinitFlagsEv
0x0000007100d6c7e8,O,000220,_ZNK5uking3aoc7Manager16setGameDataFlagsEv
0x0000007100d6c8c4,O,000428,_ZN5uking3aoc7Manager12GameDataFlag5text_Ei
0x0000007100d6c0d8,m,000916,_ZN4ksys3aoc7Manager12parseVersionEv
0x0000007100d6c46c,O,000384,_ZN4ksys3aoc7Manager11VersionFile11readVersionEv
0x0000007100d6c5ec,O,000048,_ZN4ksys3aoc7Manager12initGameDataEv
0x0000007100d6c61c,O,000460,_ZN4ksys3aoc7Manager11reinitFlagsEv
0x0000007100d6c7e8,O,000220,_ZNK4ksys3aoc7Manager16setGameDataFlagsEv
0x0000007100d6c8c4,O,000428,_ZN4ksys3aoc7Manager12GameDataFlag5text_Ei
0x0000007100d6ca70,O,000004,_ZN4sead19FixedSafeStringBaseIcLi73EED0Ev
0x0000007100d6ca74,O,000240,_ZN4sead19FixedSafeStringBaseIcLi73EEaSERKNS_14SafeStringBaseIcEE
0x0000007100d6cb64,O,000048,_ZN4sead9Delegate1IN5uking3aoc7ManagerEPN4ksys3gdt7Manager11ReinitEventEE6invokeES8_
0x0000007100d6cb94,O,000092,_ZNK4sead9Delegate1IN5uking3aoc7ManagerEPN4ksys3gdt7Manager11ReinitEventEE5cloneEPNS_4HeapE
0x0000007100d6cb64,O,000048,_ZN4sead9Delegate1IN4ksys3aoc7ManagerEPNS1_3gdt7Manager11ReinitEventEE6invokeES7_
0x0000007100d6cb94,O,000092,_ZNK4sead9Delegate1IN4ksys3aoc7ManagerEPNS1_3gdt7Manager11ReinitEventEE5cloneEPNS_4HeapE
0x0000007100d6cbf0,O,000004,_ZN4sead15FixedSafeStringILi4EED0Ev
0x0000007100d6cbf4,O,000240,_ZN4sead15FixedSafeStringILi4EEaSERKNS_14SafeStringBaseIcEE
0x0000007100d6cce4,O,000092,_ZN5uking3aoc15HardModeManager18SingletonDisposer_D1Ev
Can't render this file because it is too large.
@@ -3,6 +3,4 @@ target_sources(uking PRIVATE
aocChampionBalladManager.h
aocHardModeManager.cpp
aocHardModeManager.h
aocManager.cpp
aocManager.h
)
@@ -1,6 +1,6 @@
#include "Game/DLC/aocChampionBalladManager.h"
#include "Game/AOC/aocChampionBalladManager.h"
namespace uking {
namespace uking::aoc {
SEAD_SINGLETON_DISPOSER_IMPL(ChampionBalladManager)
@@ -29,4 +29,4 @@ s8 ChampionBalladManager::getBlightRematchCount(BlightType blight_type) const {
return mBlightCounts[u32(blight_type)];
return 0;
}
} // namespace uking
} // namespace uking::aoc
@@ -4,7 +4,7 @@
#include <container/seadSafeArray.h>
#include <heap/seadDisposer.h>
namespace uking {
namespace uking::aoc {
enum class BlightType : u32 { Wind, Electric, Fire, Water };
@@ -23,4 +23,4 @@ private:
sead::SafeArray<u8, 4> mBlightCounts;
};
} // namespace uking
} // namespace uking::aoc
@@ -1,4 +1,4 @@
#include "Game/DLC/aocHardModeManager.h"
#include "Game/AOC/aocHardModeManager.h"
#include <math/seadMathCalcCommon.h>
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorUtil.h"
+1 -1
View File
@@ -1,5 +1,5 @@
#include "Game/Actor/AI/aiCookPotRoot.h"
#include "Game/DLC/aocHardModeManager.h"
#include "Game/AOC/aocHardModeManager.h"
#include "Game/UI/uiPauseMenuDataMgr.h"
#include "KingSystem/ActorSystem/Attention/actAttention.h"
#include "KingSystem/ActorSystem/actActor.h"
@@ -1,5 +1,5 @@
#include "Game/Actor/Action/actionCurseRRematchCount.h"
#include "Game/DLC/aocChampionBalladManager.h"
#include "Game/AOC/aocChampionBalladManager.h"
#include "KingSystem/GameData/gdtManager.h"
namespace uking::action {
@@ -19,12 +19,12 @@ void CurseRRematchCount::loadParams_() {
}
bool CurseRRematchCount::oneShot_() {
auto* manager = ChampionBalladManager::instance();
auto* manager = aoc::ChampionBalladManager::instance();
if (!manager)
return false;
auto blight = BlightType(*mCurseRType_d);
if (blight > BlightType::Water)
auto blight = aoc::BlightType(*mCurseRType_d);
if (blight > aoc::BlightType::Water)
return false;
if (*mRematchCount_d == 0)
@@ -1,6 +1,6 @@
#include "Game/Actor/Damage/dmgDamageManagerBase.h"
#include "Game/AOC/aocHardModeManager.h"
#include "Game/Actor/Damage/dmgDamageCallback.h"
#include "Game/DLC/aocHardModeManager.h"
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorParam.h"
@@ -1,6 +1,6 @@
#include "Game/Actor/Query/queryCheckCurseRRetryEverOnce.h"
#include <evfl/Query.h>
#include "Game/DLC/aocChampionBalladManager.h"
#include "Game/AOC/aocChampionBalladManager.h"
namespace uking::query {
@@ -10,12 +10,12 @@ CheckCurseRRetryEverOnce::CheckCurseRRetryEverOnce(const InitArg& arg)
CheckCurseRRetryEverOnce::~CheckCurseRRetryEverOnce() = default;
int CheckCurseRRetryEverOnce::doQuery() {
auto* manager = ChampionBalladManager::instance();
auto* manager = aoc::ChampionBalladManager::instance();
if (!manager)
return 0;
auto blight = BlightType(*mCurseRType);
if (blight <= BlightType::Water)
auto blight = aoc::BlightType(*mCurseRType);
if (blight <= aoc::BlightType::Water)
return manager->getBlightRematchCount(blight) > 0;
return 0;
}
+1 -1
View File
@@ -1,7 +1,7 @@
add_subdirectory(Actor)
add_subdirectory(AOC)
add_subdirectory(AutoPlacement)
add_subdirectory(Cooking)
add_subdirectory(DLC)
add_subdirectory(Scene)
add_subdirectory(UI)
+11 -8
View File
@@ -10,10 +10,10 @@
#include "Game/Actor/actPlayerCreateUtils.h"
#include "Game/Actor/actWeapon.h"
#include "Game/Cooking/cookManager.h"
#include "Game/DLC/aocManager.h"
#include "Game/Scene/gameScene.h"
#include "Game/UI/uiUtils.h"
#include "Game/gameItemUtils.h"
#include "KingSystem/AOC/aocManager.h"
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
#include "KingSystem/ActorSystem/actActorHeapUtil.h"
#include "KingSystem/ActorSystem/actActorUtil.h"
@@ -450,7 +450,7 @@ void PauseMenuDataMgr::doLoadFromGameData() {
}
// Add the Travel Medallion (Obj_WarpDLC) to the inventory if it is missing for some reason
if (aoc::Manager::instance()->hasAoc2() &&
if (ksys::aoc::Manager::instance()->hasAoc2() &&
!(found_travel_medallion | !gdt::getFlag_IsGet_Obj_WarpDLC())) {
addToPouch(sValues.Obj_WarpDLC.cstr(), PouchItemType::KeyItem, lists, 1, false, nullptr,
true);
@@ -986,12 +986,12 @@ void PauseMenuDataMgr::doAddToPouch(PouchItemType type, const sead::SafeString&
}
if (item_name_to_add == sValues.Obj_WarpDLC) {
if (!aoc::Manager::instance()->hasAoc2()) {
if (!ksys::aoc::Manager::instance()->hasAoc2()) {
return;
}
}
if (!aoc::Manager::instance()->hasAoc3()) {
if (!ksys::aoc::Manager::instance()->hasAoc3()) {
if (item_name_to_add == sValues.Obj_DLC_HeroSoul_Zora) {
item_name_to_add = sValues.Obj_HeroSoul_Zora;
} else if (item_name_to_add == sValues.Obj_DLC_HeroSoul_Rito) {
@@ -2621,23 +2621,26 @@ bool PauseMenuDataMgr::isHeroSoulEnabled(const sead::SafeString& name) const {
// NOLINTNEXTLINE(readability-convert-member-functions-to-static)
bool PauseMenuDataMgr::hasRitoSoulPlus() const {
return ksys::gdt::getFlag_IsGet_Obj_DLC_HeroSoul_Rito() && aoc::Manager::instance()->hasAoc3();
return ksys::gdt::getFlag_IsGet_Obj_DLC_HeroSoul_Rito() &&
ksys::aoc::Manager::instance()->hasAoc3();
}
// NOLINTNEXTLINE(readability-convert-member-functions-to-static)
bool PauseMenuDataMgr::hasGoronSoulPlus() const {
return ksys::gdt::getFlag_IsGet_Obj_DLC_HeroSoul_Goron() && aoc::Manager::instance()->hasAoc3();
return ksys::gdt::getFlag_IsGet_Obj_DLC_HeroSoul_Goron() &&
ksys::aoc::Manager::instance()->hasAoc3();
}
// NOLINTNEXTLINE(readability-convert-member-functions-to-static)
bool PauseMenuDataMgr::hasGerudoSoulPlus() const {
return ksys::gdt::getFlag_IsGet_Obj_DLC_HeroSoul_Gerudo() &&
aoc::Manager::instance()->hasAoc3();
ksys::aoc::Manager::instance()->hasAoc3();
}
// NOLINTNEXTLINE(readability-convert-member-functions-to-static)
bool PauseMenuDataMgr::hasZoraSoulPlus() const {
return ksys::gdt::getFlag_IsGet_Obj_DLC_HeroSoul_Zora() && aoc::Manager::instance()->hasAoc3();
return ksys::gdt::getFlag_IsGet_Obj_DLC_HeroSoul_Zora() &&
ksys::aoc::Manager::instance()->hasAoc3();
}
int PauseMenuDataMgr::countItemsWithCategoryByType(PouchCategory category) const {
+1 -1
View File
@@ -1,8 +1,8 @@
#include "Game/UI/uiUtils.h"
#include "Game/AOC/aocHardModeManager.h"
#include "Game/Actor/Damage/dmgInfoManager.h"
#include "Game/Actor/actPlayerCreateMgr.h"
#include "Game/Actor/actWeapon.h"
#include "Game/DLC/aocHardModeManager.h"
#include "Game/UI/uiPauseMenuDataMgr.h"
#include "KingSystem/ActorSystem/actInfoCommon.h"
#include "KingSystem/ActorSystem/actInfoData.h"
+4
View File
@@ -0,0 +1,4 @@
target_sources(uking PRIVATE
aocManager.cpp
aocManager.h
)
@@ -1,4 +1,4 @@
#include "Game/DLC/aocManager.h"
#include "KingSystem/AOC/aocManager.h"
#include <container/seadBuffer.h>
#include <filedevice/seadFileDeviceMgr.h>
#include <prim/seadStringBuilder.h>
@@ -15,7 +15,7 @@
#include <prim/seadStringUtil.h>
#endif
namespace uking::aoc {
namespace ksys::aoc {
namespace {
@@ -24,7 +24,7 @@ struct DungeonInfo {
sead::SafeString flag;
};
ksys::util::InitConstants sInitConstants;
util::InitConstants sInitConstants;
DungeonInfo sDungeonInfoData[] = {
{120, "Defeat_OneHitDungeon001"},
{121, "BalladOfHeroGerudo_AppearDungeon03"},
@@ -55,7 +55,7 @@ Manager::Manager() : mVersionFile(), mGdtReinitSlot{this, &Manager::onGdtReinit}
}
Manager::~Manager() {
if (auto* gdm = ksys::gdt::Manager::instance())
if (auto* gdm = gdt::Manager::instance())
gdm->removeReinitCallback(mGdtReinitSlot);
mAocMainFieldPackPrefix.deregister();
@@ -64,23 +64,23 @@ Manager::~Manager() {
if (mFileDevice) {
sead::FileDeviceMgr::instance()->unmount("aoc");
ksys::util::safeDelete(mFileDevice);
util::safeDelete(mFileDevice);
}
#ifdef NNSDK
if (mAocFsCache) {
nn::fs::Unmount("aoc");
ksys::util::safeDelete(mAocFsCache);
util::safeDelete(mAocFsCache);
}
#endif
}
void Manager::resetFlags() {
mFlagAocVerAtLastPlay = ksys::gdt::InvalidHandle;
mFlagLatestAocVerPlayed = ksys::gdt::InvalidHandle;
mFlagHasAocVer1 = ksys::gdt::InvalidHandle;
mFlagHasAocVer2 = ksys::gdt::InvalidHandle;
mFlagHasAocVer3 = ksys::gdt::InvalidHandle;
mFlagAocVerAtLastPlay = gdt::InvalidHandle;
mFlagLatestAocVerPlayed = gdt::InvalidHandle;
mFlagHasAocVer1 = gdt::InvalidHandle;
mFlagHasAocVer2 = gdt::InvalidHandle;
mFlagHasAocVer3 = gdt::InvalidHandle;
}
void Manager::init(sead::Heap* heap) {
@@ -108,7 +108,7 @@ void Manager::loadVersionFile() {
mVersionFileDevPrefix.registerPrefix("Aoc/0010/", mFileDevice, false);
ksys::res::LoadRequest req;
res::LoadRequest req;
req.mRequester = "aocManager";
req._26 = false;
req.mAocFileDevice = mFileDevice;
@@ -116,7 +116,7 @@ void Manager::loadVersionFile() {
mVersionFile.file_handle.requestLoad(path, &req);
}
void Manager::loadAocMainFieldPack(ksys::OverlayArena* arena) {
void Manager::loadAocMainFieldPack(OverlayArena* arena) {
if (!hasAoc3())
return;
@@ -124,7 +124,7 @@ void Manager::loadAocMainFieldPack(ksys::OverlayArena* arena) {
if (!device)
return;
ksys::res::LoadRequest req;
res::LoadRequest req;
req.mRequester = "aocManager";
req._8 = true;
req._26 = false;
@@ -166,7 +166,7 @@ sead::FileDevice* Manager::getFileDeviceForMapFile(const sead::SafeString& path)
return nullptr;
}
bool Manager::getFileDeviceForMap(sead::FileDevice** p_file_device, ksys::res::Handle** p_handle,
bool Manager::getFileDeviceForMap(sead::FileDevice** p_file_device, res::Handle** p_handle,
const sead::SafeString& path) {
if (!hasAoc2())
return false;
@@ -363,7 +363,7 @@ sead::FileDevice* Manager::getFileDeviceForDungeonPack(const sead::SafeString& p
return device;
}
void Manager::registerAocPack(ksys::res::Handle* pack) {
void Manager::registerAocPack(res::Handle* pack) {
mAocPack = pack;
if (pack) {
mAocPackPrefix.registerPrefix("Aoc/0010/", pack->getResource(), true);
@@ -382,7 +382,7 @@ bool Manager::aocPackHasFile(const sead::SafeString& path) const {
sead::FixedStringBuilder<0x81> builder;
builder.copy(path.cstr());
ksys::res::ResourceMgrTask::instance()->addSExtensionPrefix(builder);
res::ResourceMgrTask::instance()->addSExtensionPrefix(builder);
return res->isExistFile(builder);
}
@@ -489,7 +489,7 @@ bool Manager::VersionFile::readVersion() {
void Manager::initGameData() {
reinitFlags();
ksys::gdt::Manager::instance()->addReinitCallback(mGdtReinitSlot);
gdt::Manager::instance()->addReinitCallback(mGdtReinitSlot);
}
static const sead::SafeString& getDungeonFlag(int number) {
@@ -501,23 +501,23 @@ static const sead::SafeString& getDungeonFlag(int number) {
}
void Manager::reinitFlags() {
mFlagAocVerAtLastPlay = ksys::gdt::Manager::instance()->getS32Handle("AoCVerAtLastPlay");
mFlagLatestAocVerPlayed = ksys::gdt::Manager::instance()->getS32Handle("LatestAoCVerPlayed");
mFlagAocVerAtLastPlay = gdt::Manager::instance()->getS32Handle("AoCVerAtLastPlay");
mFlagLatestAocVerPlayed = gdt::Manager::instance()->getS32Handle("LatestAoCVerPlayed");
mFlagHasAocVer1 =
ksys::gdt::Manager::instance()->getBoolHandle(GameDataFlag::text(GameDataFlag::HasAoCVer1));
gdt::Manager::instance()->getBoolHandle(GameDataFlag::text(GameDataFlag::HasAoCVer1));
mFlagHasAocVer2 =
ksys::gdt::Manager::instance()->getBoolHandle(GameDataFlag::text(GameDataFlag::HasAoCVer2));
gdt::Manager::instance()->getBoolHandle(GameDataFlag::text(GameDataFlag::HasAoCVer2));
mFlagHasAocVer3 =
ksys::gdt::Manager::instance()->getBoolHandle(GameDataFlag::text(GameDataFlag::HasAoCVer3));
gdt::Manager::instance()->getBoolHandle(GameDataFlag::text(GameDataFlag::HasAoCVer3));
for (int i = 0; i < mDLCPositions.size(); ++i) {
ksys::gdt::FlagHandle handle = ksys::gdt::InvalidHandle;
gdt::FlagHandle handle = gdt::InvalidHandle;
if (i < NumDungeons) {
if (mDLCPositions[i].flag_handle == ksys::gdt::InvalidHandle)
if (mDLCPositions[i].flag_handle == gdt::InvalidHandle)
continue;
handle = ksys::gdt::Manager::instance()->getBoolHandle(getDungeonFlag(i + 120));
handle = gdt::Manager::instance()->getBoolHandle(getDungeonFlag(i + 120));
}
mDLCPositions[i].flag_handle = handle;
@@ -525,22 +525,22 @@ void Manager::reinitFlags() {
}
void Manager::setGameDataFlags() const {
ksys::gdt::Manager::instance()->setS32(mVersion, mFlagAocVerAtLastPlay);
gdt::Manager::instance()->setS32(mVersion, mFlagAocVerAtLastPlay);
s32 latest_ver;
if (ksys::gdt::Manager::instance()->getS32(mFlagLatestAocVerPlayed, &latest_ver)) {
if (gdt::Manager::instance()->getS32(mFlagLatestAocVerPlayed, &latest_ver)) {
if (u32(latest_ver) < mVersion)
ksys::gdt::Manager::instance()->setS32(mVersion, mFlagLatestAocVerPlayed);
gdt::Manager::instance()->setS32(mVersion, mFlagLatestAocVerPlayed);
}
const auto ver = mVersion;
ksys::gdt::Manager::instance()->setBool(ver >= 0x100, mFlagHasAocVer1);
ksys::gdt::Manager::instance()->setBool(ver >= 0x200, mFlagHasAocVer2);
ksys::gdt::Manager::instance()->setBool(ver >= 0x300, mFlagHasAocVer3);
gdt::Manager::instance()->setBool(ver >= 0x100, mFlagHasAocVer1);
gdt::Manager::instance()->setBool(ver >= 0x200, mFlagHasAocVer2);
gdt::Manager::instance()->setBool(ver >= 0x300, mFlagHasAocVer3);
}
void Manager::onGdtReinit(ksys::gdt::Manager::ReinitEvent* event) {
void Manager::onGdtReinit(gdt::Manager::ReinitEvent* event) {
reinitFlags();
}
} // namespace uking::aoc
} // namespace ksys::aoc
@@ -11,15 +11,15 @@
#include "KingSystem/Resource/resResourceMgrTask.h"
#include "KingSystem/Utils/Types.h"
namespace ksys {
class OverlayArena;
}
namespace sead {
class FileDevice;
}
namespace uking::aoc {
namespace ksys {
class OverlayArena;
}
namespace ksys::aoc {
// TODO
class Manager {
@@ -38,12 +38,12 @@ public:
/// @return Whether the Champion's Ballad DLC is supported.
bool hasAoc3() const { return mVersion >= 0x300; }
void loadAocMainFieldPack(ksys::OverlayArena* arena);
void loadAocMainFieldPack(OverlayArena* arena);
void registerAocMainFieldPack();
void unloadAocMainFieldPack();
sead::FileDevice* getFileDeviceForMapFile(const sead::SafeString& path) const;
bool getFileDeviceForMap(sead::FileDevice** p_file_device, ksys::res::Handle** p_handle,
bool getFileDeviceForMap(sead::FileDevice** p_file_device, res::Handle** p_handle,
const sead::SafeString& path);
sead::FileDevice* getFileDeviceForStaticCompound(const sead::SafeString& path) const;
sead::FileDevice* getFileDeviceForTeraMesh(const sead::SafeString& path) const;
@@ -61,7 +61,7 @@ public:
static bool isAocField(const sead::SafeString& map_type);
sead::FileDevice* getFileDeviceForDungeonPack(const sead::SafeString& path) const;
void registerAocPack(ksys::res::Handle* pack);
void registerAocPack(res::Handle* pack);
bool aocPackHasFile(const sead::SafeString& path) const;
bool changeMoviePath(sead::BufferedSafeString& path) const;
@@ -82,14 +82,14 @@ private:
sead::Vector3f rotate = sead::Vector3f::zero;
sead::Vector3f translate2 = sead::Vector3f::zero;
float scale = 0.0;
ksys::gdt::FlagHandle flag_handle = ksys::gdt::InvalidHandle;
gdt::FlagHandle flag_handle = gdt::InvalidHandle;
};
KSYS_CHECK_SIZE_NX150(DLCPosition, 0x2c);
struct VersionFile {
bool readVersion();
ksys::res::Handle file_handle;
res::Handle file_handle;
sead::FixedSafeString<16> string;
};
KSYS_CHECK_SIZE_NX150(VersionFile, 0x78);
@@ -100,27 +100,27 @@ private:
void resetFlags();
void initGameData();
void reinitFlags();
void onGdtReinit(ksys::gdt::Manager::ReinitEvent* event);
void onGdtReinit(gdt::Manager::ReinitEvent* event);
sead::FileDevice* mFileDevice{};
ksys::res::FileDevicePrefix mVersionFileDevPrefix;
res::FileDevicePrefix mVersionFileDevPrefix;
VersionFile mVersionFile{};
u32 mVersion{};
ksys::res::Handle mAocMainFieldPack;
ksys::res::FileDevicePrefix mAocMainFieldPackPrefix;
ksys::res::Handle* mAocPack{};
ksys::res::FileDevicePrefix mAocPackPrefix;
res::Handle mAocMainFieldPack;
res::FileDevicePrefix mAocMainFieldPackPrefix;
res::Handle* mAocPack{};
res::FileDevicePrefix mAocPackPrefix;
sead::SafeArray<DLCPosition, 20> mDLCPositions;
ksys::gdt::FlagHandle mFlagAocVerAtLastPlay{};
ksys::gdt::FlagHandle mFlagLatestAocVerPlayed{};
ksys::gdt::FlagHandle mFlagHasAocVer1{};
ksys::gdt::FlagHandle mFlagHasAocVer2{};
ksys::gdt::FlagHandle mFlagHasAocVer3{};
ksys::gdt::Manager::ReinitSignal::Slot mGdtReinitSlot;
gdt::FlagHandle mFlagAocVerAtLastPlay{};
gdt::FlagHandle mFlagLatestAocVerPlayed{};
gdt::FlagHandle mFlagHasAocVer1{};
gdt::FlagHandle mFlagHasAocVer2{};
gdt::FlagHandle mFlagHasAocVer3{};
gdt::Manager::ReinitSignal::Slot mGdtReinitSlot;
sead::BitFlag8 mVersionFlags{};
#ifdef NNSDK
@@ -129,4 +129,4 @@ private:
};
KSYS_CHECK_SIZE_NX150(Manager, 0x598);
} // namespace uking::aoc
} // namespace ksys::aoc
+1
View File
@@ -3,6 +3,7 @@ add_subdirectory(GameData)
add_subdirectory(Resource)
add_subdirectory(ActorSystem)
add_subdirectory(AOC)
add_subdirectory(Camera)
add_subdirectory(Chemical)
add_subdirectory(Ecosystem)
+2 -2
View File
@@ -8,7 +8,7 @@
#include <thread/seadThreadUtil.h>
#include <time/seadTickTime.h>
#include <type_traits>
#include "Game/DLC/aocManager.h"
#include "KingSystem/AOC/aocManager.h"
#include "KingSystem/GameData/gdtSaveMgr.h"
#include "KingSystem/GameData/gdtTriggerParam.h"
#include "KingSystem/Map/mapMubinIter.h"
@@ -426,7 +426,7 @@ void Manager::fixQuestFlags() {
}
void Manager::fixQuestFlagsDlc2() {
if (uking::aoc::Manager::instance()->hasAoc3())
if (aoc::Manager::instance()->hasAoc3())
return;
enum {
+4 -4
View File
@@ -1,6 +1,6 @@
#include "KingSystem/Map/mapLazyTraverseList.h"
#include "Game/DLC/aocManager.h"
#include "KingSystem/AOC/aocManager.h"
#include "KingSystem/GameData/gdtManager.h"
namespace ksys::map {
@@ -10,9 +10,9 @@ LazyTraverseList::LazyTraverseList(sead::Heap* heap) {
sead::SafeString path = "Map/MainField/LazyTraverseList.mubin";
ksys::res::LoadRequest request;
if (uking::aoc::Manager::instance())
uking::aoc::Manager::instance()->getFileDeviceForMap(&request.mAocFileDevice,
&request.mPackHandle, path);
if (aoc::Manager::instance())
aoc::Manager::instance()->getFileDeviceForMap(&request.mAocFileDevice, &request.mPackHandle,
path);
handle.load(path, &request);
+5 -5
View File
@@ -1,7 +1,7 @@
#include "KingSystem/Map/mapPlacementMap.h"
#include <prim/seadScopedLock.h>
#include <thread/seadReadWriteLock.h>
#include "Game/DLC/aocManager.h"
#include "KingSystem/AOC/aocManager.h"
#include "KingSystem/Map/mapObject.h"
#include "KingSystem/Physics/StaticCompound/physStaticCompound.h"
#include "KingSystem/Physics/StaticCompound/physStaticCompoundRigidBodyGroup.h"
@@ -201,8 +201,8 @@ bool PlacementMap::loadDynamicMap() {
} else {
path.append("_Dynamic_NoGrudgeMerge.mubin");
}
if (uking::aoc::Manager::instance()) {
arg.mAocFileDevice = uking::aoc::Manager::instance()->getFileDeviceForMapFile(path);
if (aoc::Manager::instance()) {
arg.mAocFileDevice = aoc::Manager::instance()->getFileDeviceForMapFile(path);
}
return mDynamicMubinRes.requestLoad(path, &arg, 0);
}
@@ -288,8 +288,8 @@ bool PlacementMap::loadStaticCompound(int hksc_idx, bool auto_gen_mu, bool req_a
path.format("Physics/StaticCompound/%s-%d.hksc", mFolderAndFile.cstr(), hksc_idx);
}
}
if (uking::aoc::Manager::instance()) {
arg.mAocFileDevice = uking::aoc::Manager::instance()->getFileDeviceForStaticCompound(path);
if (aoc::Manager::instance()) {
arg.mAocFileDevice = aoc::Manager::instance()->getFileDeviceForStaticCompound(path);
}
return mRes[hksc_idx].mRes.requestLoad(path, &arg, 0);
+6 -6
View File
@@ -117,8 +117,8 @@ void StarterPackMgr::loadTitleBGPacks() {
}
void StarterPackMgr::loadAocMainFieldPack() {
if (uking::aoc::Manager::instance())
uking::aoc::Manager::instance()->loadAocMainFieldPack(mOverlayArena);
if (aoc::Manager::instance())
aoc::Manager::instance()->loadAocMainFieldPack(mOverlayArena);
}
void StarterPackMgr::unloadBootupGraphicsPack() {
@@ -192,8 +192,8 @@ void StarterPackMgr::setPackToTitleBGPack() {
mTitleBGLangPack.waitForReady();
mTitleBGLangPack.parseResource(nullptr);
if (uking::aoc::Manager::instance())
uking::aoc::Manager::instance()->registerAocMainFieldPack();
if (aoc::Manager::instance())
aoc::Manager::instance()->registerAocMainFieldPack();
res::registerPackExtension(false, "");
res::setResourceMgrPack(&mTitleBGPack);
@@ -207,8 +207,8 @@ void StarterPackMgr::unloadTitleBGAndAocMainFieldPacksAndStuff() {
mTitleBGPack.requestUnload();
mTitleBGLangPack.requestUnload();
if (uking::aoc::Manager::instance())
uking::aoc::Manager::instance()->unloadAocMainFieldPack();
if (aoc::Manager::instance())
aoc::Manager::instance()->unloadAocMainFieldPack();
for (int x = 0; x < 5; x++)
res::ResourceMgrTask::instance()->waitForTaskQueuesToEmpty();
+1 -1
View File
@@ -3,7 +3,7 @@
#include <devenv/seadEnvUtil.h>
#include <heap/seadExpHeap.h>
#include <prim/seadSafeString.h>
#include "Game/DLC/aocManager.h"
#include "KingSystem/AOC/aocManager.h"
#include "KingSystem/Resource/resEntryFactory.h"
#include "KingSystem/Resource/resHandle.h"
#include "KingSystem/Resource/resLoadRequest.h"