From 5160906b56e1870c1e15c2f2ba6a39243a7900c1 Mon Sep 17 00:00:00 2001 From: robojumper Date: Mon, 18 Aug 2025 13:36:47 +0200 Subject: [PATCH 1/3] Small status/result cleanups for arc managers --- include/d/d_rawarchive.h | 23 +++++--- include/m/m_dvd.h | 6 ++ .../arc_managers/current_stage_arc_manager.h | 2 +- .../arc_managers/layout_arc_manager.h | 6 +- .../toBeSorted/arc_managers/oarc_manager.h | 6 +- src/DynamicLink.cpp | 2 +- src/REL/d/d_s_boot.cpp | 12 ++-- src/d/a/obj/d_a_obj_tbox.cpp | 7 ++- src/d/d_dvd.cpp | 2 +- src/d/d_dylink.cpp | 2 +- src/d/d_rawarchive.cpp | 56 +++++++++---------- src/d/d_sc_game.cpp | 4 +- src/d/d_sc_title.cpp | 13 ++--- src/d/d_stage_mgr.cpp | 14 ++--- src/d/d_thp_player.cpp | 4 +- .../arc_managers/layout_arc_manager.cpp | 4 +- src/toBeSorted/arc_managers/oarc_manager.cpp | 6 +- 17 files changed, 88 insertions(+), 81 deletions(-) diff --git a/include/d/d_rawarchive.h b/include/d/d_rawarchive.h index 3835ae10..aead942f 100644 --- a/include/d/d_rawarchive.h +++ b/include/d/d_rawarchive.h @@ -6,6 +6,13 @@ #include "nw4r/g3d/res/g3d_resfile.h" #include "sized_string.h" +enum dArcResult_e { + D_ARC_RESULT_WAIT = 1, + D_ARC_RESULT_OK = 0, + D_ARC_RESULT_ERROR_INTERNAL = -1, + D_ARC_RESULT_ERROR_NOT_FOUND = -2, +}; + class ArcCallbackHandlerBase { public: ArcCallbackHandlerBase() : mPrefix(' ') {} @@ -26,8 +33,6 @@ public: void BindSystemModelsAndLighting(nw4r::g3d::ResFile); -// TODO: loading status could be an enum (-2/-1/0/+1) - // Ghidra: ArcManagerEntry // size: 0x40 class dRawArcEntry_c { @@ -41,10 +46,10 @@ public: static BOOL checkArcExistsOnDisk(const char *fileName, const char *dirName); static BOOL checkArcExistsOnDiskInner(SizedString<128> &path, const char *fileName, const char *dirName); - int mount(const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap); - int onMount(void *callbackArg); + dArcResult_e mount(const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap); + dArcResult_e onMount(void *callbackArg); - int ensureLoadedMaybe(void *callbackArg); + dArcResult_e ensureLoadedMaybe(void *callbackArg); inline bool isReferenced() { return mRefCount != 0; @@ -105,14 +110,14 @@ public: bool init(u16 count, ArcCallbackHandler *callbackArg, EGG::Heap *heap); BOOL getArcOrLoadFromDisk(const char *name, const char *dirName, u8 mountDirection, EGG::Heap *heap); BOOL addEntryFromSuperArc(const char *name, void *data, u8 mountDirection, EGG::Heap *heap); - int ensureLoadedMaybe2(const char *name); - int ensureLoadedMaybe(const char *name); + dArcResult_e ensureLoadedMaybe2(const char *name); + dArcResult_e ensureLoadedMaybe(const char *name); bool hasEntry(const char *name); BOOL decreaseRefCount(const char *name); void *getDataFromOarc(const char *name, const char *path); void *getSubEntryData(const char *name, const char *path); void *getLoadedArcData(const char *name); - int ensureAllEntriesLoaded(); + dArcResult_e ensureAllEntriesLoaded(); dRawArcEntry_c *findEntry(const char *name) const; dRawArcEntry_c *findEmptySlot(); dRawArcEntry_c *findLoadedEntry(const char *name); @@ -123,4 +128,4 @@ private: /* 0x8 */ ArcCallbackHandler *mCallbackArg; }; -#endif; +#endif diff --git a/include/m/m_dvd.h b/include/m/m_dvd.h index 6dc49b88..64272a18 100644 --- a/include/m/m_dvd.h +++ b/include/m/m_dvd.h @@ -47,6 +47,7 @@ EGG::Heap *getArchiveHeap(); } // namespace mDvd class mDvd_command_c { + friend class mDvd_param_c; public: mDvd_command_c(); virtual ~mDvd_command_c(); @@ -60,9 +61,14 @@ public: static void destroy(mDvd_command_c **cmd); void do_delete(); + bool isDone() const { + return mStatus != 0; + } + void *operator new(size_t size); void operator delete(void *ptr); +protected: mDvd_command_c *mNext; u8 mStatus; u8 mMountDirection; diff --git a/include/toBeSorted/arc_managers/current_stage_arc_manager.h b/include/toBeSorted/arc_managers/current_stage_arc_manager.h index 1fadc389..25afab1f 100644 --- a/include/toBeSorted/arc_managers/current_stage_arc_manager.h +++ b/include/toBeSorted/arc_managers/current_stage_arc_manager.h @@ -30,7 +30,7 @@ public: EGG::ExpHeap *getHeap(s32 roomid); - inline int ensureAllEntriesLoaded() { + inline dArcResult_e ensureAllEntriesLoaded() { return mArcTable.ensureAllEntriesLoaded(); } diff --git a/include/toBeSorted/arc_managers/layout_arc_manager.h b/include/toBeSorted/arc_managers/layout_arc_manager.h index 0c036acc..ad43f903 100644 --- a/include/toBeSorted/arc_managers/layout_arc_manager.h +++ b/include/toBeSorted/arc_managers/layout_arc_manager.h @@ -14,13 +14,13 @@ public: void init(EGG::Heap *heap); - inline int ensureAllEntriesLoaded() { + inline dArcResult_e ensureAllEntriesLoaded() { return mArcTable.ensureAllEntriesLoaded(); } bool loadLayoutArcFromDisk(const char *object, EGG::Heap *heap); - int ensureLoaded1(const char *object); - int ensureLoaded2(const char *object); + dArcResult_e ensureLoaded1(const char *object); + dArcResult_e ensureLoaded2(const char *object); bool hasEntry(const char *object); bool decrement(const char *path); void *getData(const char *oarcName, const char *fileName); diff --git a/include/toBeSorted/arc_managers/oarc_manager.h b/include/toBeSorted/arc_managers/oarc_manager.h index 8d75dd75..52f2ab2c 100644 --- a/include/toBeSorted/arc_managers/oarc_manager.h +++ b/include/toBeSorted/arc_managers/oarc_manager.h @@ -13,15 +13,15 @@ public: void init(EGG::Heap *heap); - inline int ensureAllEntriesLoaded() { + inline dArcResult_e ensureAllEntriesLoaded() { return mArcTable.ensureAllEntriesLoaded(); } bool checkIfObjectArcExistsOnDisk(const char *object); bool loadObjectArcFromDisk(const char *object, EGG::Heap *heap); bool addEntryFromSuperArc(const char *object, void *data, EGG::Heap *heap); - int ensureLoaded1(const char *object); - void ensureLoaded2(const char *object); + dArcResult_e ensureLoaded1(const char *object); + dArcResult_e ensureLoaded2(const char *object); bool decrement(const char *path); void *getData(const char *oarcName, const char *fileName); diff --git a/src/DynamicLink.cpp b/src/DynamicLink.cpp index cf9c5e52..5154cf57 100644 --- a/src/DynamicLink.cpp +++ b/src/DynamicLink.cpp @@ -197,7 +197,7 @@ BOOL DynamicModuleControl::do_load_async() { mDvdCallbackRequest = mDvd_callback_c::create(callback, this); } - if (mDvdCallbackRequest != nullptr && mDvdCallbackRequest->mStatus != 0) { + if (mDvdCallbackRequest != nullptr && mDvdCallbackRequest->isDone()) { mDvdCallbackRequest->do_delete(); mDvdCallbackRequest = nullptr; return true; diff --git a/src/REL/d/d_s_boot.cpp b/src/REL/d/d_s_boot.cpp index ea55d6c0..758a75ef 100644 --- a/src/REL/d/d_s_boot.cpp +++ b/src/REL/d/d_s_boot.cpp @@ -69,10 +69,10 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb1() { } sFPhaseBase::sFPhaseState dScBoot_c::cb2() { - if (OarcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (OarcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } - if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } @@ -104,7 +104,7 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb5() { return sFPhaseBase::PHASE_RETRY; } } - if (mpDvdCallback->mStatus == 0) { + if (!mpDvdCallback->isDone()) { return sFPhaseBase::PHASE_RETRY; } else { mpDvdCallback->do_delete(); @@ -271,11 +271,11 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb7() { return sFPhaseBase::PHASE_RETRY; } - if (OarcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (OarcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } - if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } @@ -341,7 +341,7 @@ dScBoot_c::strap_c::strap_c() { bool dScBoot_c::strap_c::create() { if (!field_0x4EC) { - if (LayoutArcManager::GetInstance()->ensureLoaded1(mArcName)) { + if (LayoutArcManager::GetInstance()->ensureLoaded1(mArcName) != D_ARC_RESULT_OK) { return false; } void *data = LayoutArcManager::GetInstance()->getLoadedData(mArcName); diff --git a/src/d/a/obj/d_a_obj_tbox.cpp b/src/d/a/obj/d_a_obj_tbox.cpp index 6c9e99dd..5a92ed1e 100644 --- a/src/d/a/obj/d_a_obj_tbox.cpp +++ b/src/d/a/obj/d_a_obj_tbox.cpp @@ -13,6 +13,7 @@ #include "d/col/cc/d_cc_s.h" #include "d/d_light_env.h" #include "d/d_pouch.h" +#include "d/d_rawarchive.h" #include "d/d_room.h" #include "d/d_stage.h" #include "d/flag/sceneflag_manager.h" @@ -1165,7 +1166,7 @@ int dAcTbox_c::doDelete() { } if (sCurrentObtainingItemOarcName != nullptr) { OarcManager *mng = OarcManager::GetInstance(); - if (!mng->ensureLoaded1(sCurrentObtainingItemOarcName)) { + if (mng->ensureLoaded1(sCurrentObtainingItemOarcName) != D_ARC_RESULT_OK) { mng->decrement(sCurrentObtainingItemOarcName); sCurrentObtainingItemOarcName = nullptr; } @@ -1884,7 +1885,7 @@ void dAcTbox_c::initializeState_DeleteArchive() { void dAcTbox_c::executeState_DeleteArchive() { if (sCurrentObtainingItemOarcName != nullptr) { OarcManager *mng = OarcManager::GetInstance(); - if (!mng->ensureLoaded1(sCurrentObtainingItemOarcName)) { + if (mng->ensureLoaded1(sCurrentObtainingItemOarcName) != D_ARC_RESULT_OK) { mng->decrement(sCurrentObtainingItemOarcName); sCurrentObtainingItemOarcName = nullptr; } @@ -1922,7 +1923,7 @@ void dAcTbox_c::initializeState_LoadArchive() { field_0x120C = 0; } void dAcTbox_c::executeState_LoadArchive() { - if (!OarcManager::GetInstance()->ensureLoaded1(sCurrentObtainingItemOarcName)) { + if (OarcManager::GetInstance()->ensureLoaded1(sCurrentObtainingItemOarcName) != D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_Open); } } diff --git a/src/d/d_dvd.cpp b/src/d/d_dvd.cpp index 464702e5..9cdbb85a 100644 --- a/src/d/d_dvd.cpp +++ b/src/d/d_dvd.cpp @@ -38,7 +38,7 @@ void *loader_c::request(const char *path, u8 mountDirection, EGG::Heap *heap) { } mpCommand = mDvd_toMainRam_normal_c::create(buf, mountDirection, heap); } - if (mpCommand != nullptr && mpCommand->mStatus != 0) { + if (mpCommand != nullptr && mpCommand->isDone()) { mpBuffer = mpCommand->mDataPtr; mSize = mpCommand->mAmountRead; mpCommand->mDataPtr = nullptr; diff --git a/src/d/d_dylink.cpp b/src/d/d_dylink.cpp index 2c17a470..9ba0d681 100644 --- a/src/d/d_dylink.cpp +++ b/src/d/d_dylink.cpp @@ -336,7 +336,7 @@ bool destroy() { return true; } - if (DVD->mStatus != 0) { + if (DVD->isDone()) { DVD->do_delete(); DVD = nullptr; return true; diff --git a/src/d/d_rawarchive.cpp b/src/d/d_rawarchive.cpp index d3854d37..99b393c6 100644 --- a/src/d/d_rawarchive.cpp +++ b/src/d/d_rawarchive.cpp @@ -36,10 +36,10 @@ dRawArcEntry_c::dRawArcEntry_c() { dRawArcEntry_c::~dRawArcEntry_c() { // Wait for request to complete before destroying - if (mpDvdReq->mStatus == 0) { + if (!mpDvdReq->isDone()) { do { VIWaitForRetrace(); - } while (mpDvdReq->mStatus == 0); + } while (!mpDvdReq->isDone()); } destroy(nullptr); } @@ -72,7 +72,7 @@ void dRawArcEntry_c::searchCallback2(void *a, void *b, const ARCDirEntry *c, con bool dRawArcEntry_c::destroy(void *arg) { if (mpDvdReq != nullptr) { - if (mpDvdReq->mStatus == 0) { + if (!mpDvdReq->isDone()) { // Can't destroy if the request is still ongoing return false; } @@ -144,31 +144,27 @@ BOOL dRawArcEntry_c::checkArcExistsOnDiskInner(SizedString<128> &path, const cha return true; } -int dRawArcEntry_c::mount( +dArcResult_e dRawArcEntry_c::mount( const char *name, void *data, ArcCallbackHandler *callbackArg, u8 mountDirection, EGG::Heap *heap ) { mArcName = name; mpArc = EGG::Archive::mount(data, heap, (mountDirection == 0 || mountDirection == 1) ? 4 : -4); if (mpArc == nullptr) { - return -1; + return D_ARC_RESULT_ERROR_INTERNAL; } else { - int result = onMount(callbackArg); - int ret = 0; - if (result == -1) { - ret = result; - } - return ret; + dArcResult_e result = onMount(callbackArg); + return result == D_ARC_RESULT_ERROR_INTERNAL ? result : D_ARC_RESULT_OK; } } -int dRawArcEntry_c::ensureLoadedMaybe(void *callbackArg) { +dArcResult_e dRawArcEntry_c::ensureLoadedMaybe(void *callbackArg) { if (mpArc == nullptr) { if (mpDvdReq == nullptr) { - return -1; + return D_ARC_RESULT_ERROR_INTERNAL; } - if (mpDvdReq->mStatus == 0) { - return 1; + if (!mpDvdReq->isDone()) { + return D_ARC_RESULT_WAIT; } mpArc = mpDvdReq->mDataPtr; @@ -185,31 +181,31 @@ int dRawArcEntry_c::ensureLoadedMaybe(void *callbackArg) { mpDvdReq->do_delete(); mpDvdReq = nullptr; if (mpArc == nullptr) { - return -1; + return D_ARC_RESULT_ERROR_INTERNAL; } mpFrmHeap = mHeap::makeHeapOnCurrentGameHeap(-1, name(), 0x20, mHeap::OPT_NONE); if (mpFrmHeap == nullptr) { - return -1; + return D_ARC_RESULT_ERROR_INTERNAL; } - int result = onMount(callbackArg); + dArcResult_e result = onMount(callbackArg); mHeap::restoreCurrentHeap(); mHeap::adjustFrmHeap(mpFrmHeap); mChecksum = computeChecksum(mpData, mAmountRead); - if (result == -1) { + if (result == D_ARC_RESULT_ERROR_INTERNAL) { return result; } DCStoreRange(mpFrmHeap, mpFrmHeap->mHeapHandle->end - (u8 *)mpFrmHeap); } - return 0; + return D_ARC_RESULT_OK; } -int dRawArcEntry_c::onMount(void *callbackArg) { +dArcResult_e dRawArcEntry_c::onMount(void *callbackArg) { mpArc->countFile(); if (callbackArg != nullptr) { mpArc->searchInside(searchCallback1, callbackArg); } - return 0; + return D_ARC_RESULT_OK; } dRawArcTable_c::dRawArcTable_c() { @@ -271,18 +267,18 @@ BOOL dRawArcTable_c::addEntryFromSuperArc(const char *name, void *data, u8 mount return true; } -int dRawArcTable_c::ensureLoadedMaybe2(const char *name) { +dArcResult_e dRawArcTable_c::ensureLoadedMaybe2(const char *name) { dRawArcEntry_c *entry = findEntry(name); if (entry == nullptr) { - return -2; + return D_ARC_RESULT_ERROR_NOT_FOUND; } return entry->ensureLoadedMaybe(mCallbackArg); } -int dRawArcTable_c::ensureLoadedMaybe(const char *name) { +dArcResult_e dRawArcTable_c::ensureLoadedMaybe(const char *name) { dRawArcEntry_c *entry = findEntry(name); if (entry == nullptr) { - return -2; + return D_ARC_RESULT_ERROR_NOT_FOUND; } return entry->ensureLoadedMaybe(mCallbackArg); } @@ -335,20 +331,20 @@ void *dRawArcTable_c::getLoadedArcData(const char *name) { return entry == nullptr ? nullptr : entry->getData(); } -int dRawArcTable_c::ensureAllEntriesLoaded() { +dArcResult_e dRawArcTable_c::ensureAllEntriesLoaded() { dRawArcEntry_c *entry = mpEntries; - int result = 0; + dArcResult_e result = D_ARC_RESULT_OK; for (int i = 0; i < mCount; i++) { if (entry->isLoading()) { result = entry->ensureLoadedMaybe(mCallbackArg); - if (result != 0) { + if (result != D_ARC_RESULT_OK) { return result; } } entry++; } - return 0; + return D_ARC_RESULT_OK; } dRawArcEntry_c *dRawArcTable_c::findEntry(const char *name) const { diff --git a/src/d/d_sc_game.cpp b/src/d/d_sc_game.cpp index 0399b3de..10f2c796 100644 --- a/src/d/d_sc_game.cpp +++ b/src/d/d_sc_game.cpp @@ -117,11 +117,11 @@ sFPhaseBase::sFPhaseState dScGame_c::cb2() { return sFPhaseBase::PHASE_RETRY; } - if (OarcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (OarcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } - if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded()) { + if (LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() != D_ARC_RESULT_OK) { return sFPhaseBase::PHASE_RETRY; } diff --git a/src/d/d_sc_title.cpp b/src/d/d_sc_title.cpp index 73e578d7..91cede66 100644 --- a/src/d/d_sc_title.cpp +++ b/src/d/d_sc_title.cpp @@ -112,32 +112,31 @@ int dScTitle_c::execute() { } int dScTitle_c::doDelete() { - // TODO return codes int result; result = LayoutArcManager::GetInstance()->ensureLoaded2(sFileSelect); - if (result != -2) { - if (result != 0) { + if (result != D_ARC_RESULT_ERROR_NOT_FOUND) { + if (result != D_ARC_RESULT_OK) { return NOT_READY; } LayoutArcManager::GetInstance()->decrement(sFileSelect); } result = LayoutArcManager::GetInstance()->ensureLoaded2(sSkb); - if (result != -2) { - if (result != 0) { + if (result != D_ARC_RESULT_ERROR_NOT_FOUND) { + if (result != D_ARC_RESULT_OK) { return NOT_READY; } LayoutArcManager::GetInstance()->decrement(sSkb); } // TODO here's the other half of the ::destroy fakematch... - if (mpSkbArc->mStatus != 0) { + if (mpSkbArc->isDone()) { mDvd_command_c::destroy((mDvd_command_c **)&mpSkbArc); } else { return NOT_READY; } - if (mpSkbFont->mStatus != 0) { + if (mpSkbFont->isDone()) { mDvd_command_c::destroy((mDvd_command_c **)&mpSkbFont); } else { return NOT_READY; diff --git a/src/d/d_stage_mgr.cpp b/src/d/d_stage_mgr.cpp index f300116f..678848e0 100644 --- a/src/d/d_stage_mgr.cpp +++ b/src/d/d_stage_mgr.cpp @@ -45,7 +45,7 @@ void dStageMgr_c::initializeState_ReadStageRes() { } void dStageMgr_c::executeState_ReadStageRes() { - if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == 0) { + if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_ReadRoomRes); } } @@ -62,8 +62,8 @@ void dStageMgr_c::finalizeState_ReadStageRes() { void dStageMgr_c::initializeState_ReadRoomRes() {} void dStageMgr_c::executeState_ReadRoomRes() { - if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == 0 && - LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() == 0) { + if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK && + LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_ReadObjectRes); } } @@ -100,7 +100,7 @@ void dStageMgr_c::initializeState_ReadStageLayerRes() { } void dStageMgr_c::executeState_ReadStageLayerRes() { - if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == 0) { + if (CurrentStageArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_ReadLayerObjectRes); } } @@ -142,7 +142,7 @@ void dStageMgr_c::initializeState_ReadLayerObjectRes() { } void dStageMgr_c::executeState_ReadLayerObjectRes() { - if (mLayerObjCtrl.isLoaded() && LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() == 0) { + if (mLayerObjCtrl.isLoaded() && LayoutArcManager::GetInstance()->ensureAllEntriesLoaded() == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_SoundLoadSceneData); } } @@ -172,7 +172,7 @@ void dStageMgr_c::initializeState_SoundLoadSceneData() { } void dStageMgr_c::executeState_SoundLoadSceneData() { - if (mpDvdCallback != nullptr && mpDvdCallback->mStatus != 0) { + if (mpDvdCallback != nullptr && mpDvdCallback->isDone()) { mStateMgr.changeState(StateID_CreateObject); } } @@ -208,7 +208,7 @@ void dStageMgr_c::executeState_ReadObjectSound() { return; } - if (mpDvdCallback2->mStatus == 0) { + if (!mpDvdCallback2->isDone()) { return; } diff --git a/src/d/d_thp_player.cpp b/src/d/d_thp_player.cpp index 3728ec60..2e08fd1d 100644 --- a/src/d/d_thp_player.cpp +++ b/src/d/d_thp_player.cpp @@ -91,7 +91,7 @@ void dThpPlayer_c::setupFile(char* filename, s32 loadAllAtOnce) { static const u8 SPECIAL_TYPES[] = {0x7A, 0x78, 0x78}; void dThpPlayer_c::reallyExecute() { - if (mDvdCallback == nullptr || mDvdCallback->mStatus == 0 || !mFilenameSet || mSetupDone) { + if (mDvdCallback == nullptr || !mDvdCallback->isDone() || !mFilenameSet || mSetupDone) { return; } if (mFilename == "THP/Demo01_01.thp") { @@ -139,7 +139,7 @@ s32 dThpPlayer_c::play() { s32 dThpPlayer_c::destroy() { if (mDvdCallback != nullptr) { - if (mDvdCallback->mStatus == 0) { + if (!mDvdCallback->isDone()) { return NOT_READY; } THPPlayerStop(); diff --git a/src/toBeSorted/arc_managers/layout_arc_manager.cpp b/src/toBeSorted/arc_managers/layout_arc_manager.cpp index 464a4022..ce329680 100644 --- a/src/toBeSorted/arc_managers/layout_arc_manager.cpp +++ b/src/toBeSorted/arc_managers/layout_arc_manager.cpp @@ -24,11 +24,11 @@ bool LayoutArcManager::loadLayoutArcFromDisk(const char *object, EGG::Heap *heap return mArcTable.getArcOrLoadFromDisk(object, "Layout", 0, heap); } -int LayoutArcManager::ensureLoaded1(const char *object) { +dArcResult_e LayoutArcManager::ensureLoaded1(const char *object) { return mArcTable.ensureLoadedMaybe2(object); } -int LayoutArcManager::ensureLoaded2(const char *object) { +dArcResult_e LayoutArcManager::ensureLoaded2(const char *object) { return mArcTable.ensureLoadedMaybe(object); } diff --git a/src/toBeSorted/arc_managers/oarc_manager.cpp b/src/toBeSorted/arc_managers/oarc_manager.cpp index 351e31c2..784f88db 100644 --- a/src/toBeSorted/arc_managers/oarc_manager.cpp +++ b/src/toBeSorted/arc_managers/oarc_manager.cpp @@ -34,12 +34,12 @@ bool OarcManager::addEntryFromSuperArc(const char *object, void *data, EGG::Heap return mArcTable.addEntryFromSuperArc(object, data, 0, heap); } -int OarcManager::ensureLoaded1(const char *object) { +dArcResult_e OarcManager::ensureLoaded1(const char *object) { return mArcTable.ensureLoadedMaybe2(object); } -void OarcManager::ensureLoaded2(const char *object) { - mArcTable.ensureLoadedMaybe(object); +dArcResult_e OarcManager::ensureLoaded2(const char *object) { + return mArcTable.ensureLoadedMaybe(object); } bool OarcManager::decrement(const char *path) { From 816086d764f95400ae44a72d5f83bdaa968e3456 Mon Sep 17 00:00:00 2001 From: robojumper Date: Mon, 18 Aug 2025 13:42:37 +0200 Subject: [PATCH 2/3] Small status/result cleanups for arc managers --- src/d/a/obj/d_a_obj_tbox.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/d/a/obj/d_a_obj_tbox.cpp b/src/d/a/obj/d_a_obj_tbox.cpp index 5a92ed1e..ef3c05de 100644 --- a/src/d/a/obj/d_a_obj_tbox.cpp +++ b/src/d/a/obj/d_a_obj_tbox.cpp @@ -1166,7 +1166,7 @@ int dAcTbox_c::doDelete() { } if (sCurrentObtainingItemOarcName != nullptr) { OarcManager *mng = OarcManager::GetInstance(); - if (mng->ensureLoaded1(sCurrentObtainingItemOarcName) != D_ARC_RESULT_OK) { + if (mng->ensureLoaded1(sCurrentObtainingItemOarcName) == D_ARC_RESULT_OK) { mng->decrement(sCurrentObtainingItemOarcName); sCurrentObtainingItemOarcName = nullptr; } @@ -1885,7 +1885,7 @@ void dAcTbox_c::initializeState_DeleteArchive() { void dAcTbox_c::executeState_DeleteArchive() { if (sCurrentObtainingItemOarcName != nullptr) { OarcManager *mng = OarcManager::GetInstance(); - if (mng->ensureLoaded1(sCurrentObtainingItemOarcName) != D_ARC_RESULT_OK) { + if (mng->ensureLoaded1(sCurrentObtainingItemOarcName) == D_ARC_RESULT_OK) { mng->decrement(sCurrentObtainingItemOarcName); sCurrentObtainingItemOarcName = nullptr; } @@ -1923,7 +1923,7 @@ void dAcTbox_c::initializeState_LoadArchive() { field_0x120C = 0; } void dAcTbox_c::executeState_LoadArchive() { - if (OarcManager::GetInstance()->ensureLoaded1(sCurrentObtainingItemOarcName) != D_ARC_RESULT_OK) { + if (OarcManager::GetInstance()->ensureLoaded1(sCurrentObtainingItemOarcName) == D_ARC_RESULT_OK) { mStateMgr.changeState(StateID_Open); } } From da63feb111ea145e33be6d6bf108e6d8f559e77b Mon Sep 17 00:00:00 2001 From: robojumper Date: Thu, 21 Aug 2025 12:16:10 +0200 Subject: [PATCH 3/3] Fix a bunch of splits and implement LayoutArc/ObjectArcControl --- config/SOUE01/splits.txt | 182 +++++++++--------- config/SOUE01/symbols.txt | 14 +- .../arc_managers/layout_arc_manager.h | 27 +-- .../toBeSorted/arc_managers/oarc_manager.h | 26 +-- .../arc_managers/layout_arc_manager.cpp | 66 ++++++- src/toBeSorted/arc_managers/oarc_manager.cpp | 49 +++++ 6 files changed, 236 insertions(+), 128 deletions(-) diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 0d8c04d4..528ea820 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -165,7 +165,7 @@ d/d_ac_npc_kyui.cpp: d/d_base.cpp: .text start:0x80050800 end:0x80050A14 align:16 .data start:0x80503380 end:0x805033D0 - .sbss start:0x805750C0 end:0x805750CC + .sbss start:0x805750C0 end:0x805750D0 d/d_linkage.cpp: .text start:0x80050A20 end:0x80051BF8 align:16 @@ -199,7 +199,7 @@ d/d_dylink.cpp: .rodata start:0x804DDFD0 end:0x804DDFF0 .data start:0x8050D2D8 end:0x8050D348 .sdata start:0x80571C40 end:0x80571C50 - .sbss start:0x805750E0 end:0x805750FC + .sbss start:0x805750E0 end:0x80575100 .bss start:0x805975B0 end:0x80597608 d/d_fader.cpp: @@ -327,9 +327,9 @@ d/d_cursor_hit_check.cpp: d/d_rumble.cpp: .text start:0x800664F0 end:0x80066F58 align:16 .ctors start:0x804DB6A0 end:0x804DB6A4 - .data start:0x8050DFA0 end:0x8050DFAC + .data start:0x8050DFA0 end:0x8050DFB0 .sbss start:0x80575268 end:0x80575270 - .sdata2 start:0x80577958 end:0x80577994 + .sdata2 start:0x80577958 end:0x80577998 .bss start:0x805A0778 end:0x805A0868 toBeSorted/string_util.cpp: @@ -362,23 +362,17 @@ toBeSorted/arc_managers/current_stage_arc_manager.cpp: .bss start:0x805A0868 end:0x805A08C8 toBeSorted/arc_managers/oarc_manager.cpp: - .text start:0x80069910 end:0x80069ED4 align:16 - .data start:0x8050E010 end:0x8050E038 + .text start:0x80069910 end:0x8006A0B4 align:16 + .data start:0x8050E010 end:0x8050E048 .sdata start:0x80571D40 end:0x80571D68 .sbss start:0x80575280 end:0x80575288 -toBeSorted/arc_managers/oarc_control.cpp: - .text start:0x80069EE0 end:0x8006A0B4 align:16 - toBeSorted/arc_managers/layout_arc_manager.cpp: - .text start:0x8006A0C0 end:0x8006A2D4 align:16 - .data start:0x8050E048 end:0x8050E054 + .text start:0x8006A0C0 end:0x8006A544 align:16 + .data start:0x8050E048 end:0x8050E060 .sdata start:0x80571D68 end:0x80571D70 .sbss start:0x80575288 end:0x80575290 -toBeSorted/arc_managers/layout_arc_control.cpp: - .text start:0x8006A2E0 end:0x8006A544 align:16 - toBeSorted/actor_info.cpp: .text start:0x8006A550 end:0x8006A8C8 align:16 .rodata start:0x804E0FA8 end:0x804E3418 @@ -1833,7 +1827,7 @@ f/f_base.cpp: .text start:0x802E12F0 end:0x802E2674 align:16 .ctors start:0x804DB8C0 end:0x804DB8C4 .data start:0x80542278 end:0x805423A8 - .sdata start:0x80573FB8 end:0x80573FBC + .sdata start:0x80573FB8 end:0x80573FC0 .sbss start:0x80575BA8 end:0x80575BB8 .bss start:0x805B84C8 end:0x805B84D8 @@ -1864,7 +1858,7 @@ m/m2d.cpp: m/m3d/m3d.cpp: .text start:0x802E3E50 end:0x802E4714 align:16 .sbss start:0x80575BD0 end:0x80575BF0 - .sdata2 start:0x8057CCB8 end:0x8057CCBC + .sdata2 start:0x8057CCB8 end:0x8057CCC0 m/m3d/m_proc.cpp: .text start:0x802E4720 end:0x802E48D4 align:16 @@ -1920,7 +1914,7 @@ m/m3d/m_bline.cpp: m/m3d/m_bmdl.cpp: .text start:0x802E9270 end:0x802EA6EC align:16 - .data start:0x80542668 end:0x80542694 + .data start:0x80542668 end:0x80542698 m/m3d/m_calc_ratio.cpp: .text start:0x802EA6F0 end:0x802EA898 align:16 @@ -1942,13 +1936,13 @@ m/m3d/m_mdl.cpp: m/m3d/m_scnleaf.cpp: .text start:0x802EBBD0 end:0x802EBFF8 align:16 - .data start:0x80542708 end:0x8054272C + .data start:0x80542708 end:0x80542730 m/m3d/m_shadow.cpp: .text start:0x802EC000 end:0x802EDF2C align:16 .ctors start:0x804DB8C8 end:0x804DB8CC - .data start:0x80542730 end:0x805427EC - .sdata start:0x80573FC8 end:0x80573FCC + .data start:0x80542730 end:0x805427F0 + .sdata start:0x80573FC8 end:0x80573FD0 .sbss start:0x80575BF0 end:0x80575C08 .sdata2 start:0x8057CD68 end:0x8057CD90 @@ -2405,18 +2399,18 @@ d/col/c/c_m3d_g_aab.cpp: d/col/c/c_m3d_g_cps.cpp: .text start:0x80337EA0 end:0x80338018 align:16 - .sdata2 start:0x8057D038 end:0x8057D03C + .sdata2 start:0x8057D038 end:0x8057D040 d/col/c/c_m3d_g_cyl.cpp: .text start:0x80338020 end:0x80338348 align:16 - .sdata2 start:0x8057D040 end:0x8057D044 + .sdata2 start:0x8057D040 end:0x8057D048 d/col/c/c_m3d_g_lin.cpp: .text start:0x80338350 end:0x8033842C align:16 d/col/c/c_m3d_g_pla.cpp: .text start:0x80338430 end:0x80338678 align:16 - .sdata2 start:0x8057D048 end:0x8057D04C + .sdata2 start:0x8057D048 end:0x8057D050 d/col/c/c_m3d_g_sph.cpp: .text start:0x80338680 end:0x803388D8 align:16 @@ -2432,7 +2426,7 @@ d/col/c/c_m3d_g_unk.cpp: d/col/c/c_partition.cpp: .text start:0x80338F50 end:0x80339BAC align:16 .ctors start:0x804DB8FC end:0x804DB900 - .data start:0x80547688 end:0x80547694 + .data start:0x80547688 end:0x80547698 .sbss start:0x80575CD0 end:0x80575CF0 d/col/bg/d_bg_pc.cpp: @@ -2447,12 +2441,12 @@ d/col/bg/d_bg_s.cpp: .data start:0x80547698 end:0x805477C0 .sdata start:0x80574060 end:0x80574070 .sbss start:0x80575CF0 end:0x80575CF8 - .sdata2 start:0x8057D068 end:0x8057D0FC + .sdata2 start:0x8057D068 end:0x8057D100 d/col/bg/d_bg_s_acch.cpp: .text start:0x8033F150 end:0x803412F8 align:16 .data start:0x805477C0 end:0x80547868 - .sdata2 start:0x8057D100 end:0x8057D13C + .sdata2 start:0x8057D100 end:0x8057D140 d/col/bg/d_bg_s_chk.cpp: .text start:0x80341300 end:0x80341488 align:16 @@ -2461,14 +2455,14 @@ d/col/bg/d_bg_s_chk.cpp: d/col/bg/d_bg_s_gnd_chk.cpp: .text start:0x80341490 end:0x80341D68 align:16 .ctors start:0x804DB900 end:0x804DB904 - .data start:0x80547898 end:0x80547994 + .data start:0x80547898 end:0x80547998 .sbss start:0x80575CF8 end:0x80575D00 - .sdata2 start:0x8057D140 end:0x8057D144 + .sdata2 start:0x8057D140 end:0x8057D148 .bss start:0x805D01C8 end:0x805D0268 d/col/bg/d_bg_s_grp_pass_chk.cpp: .text start:0x80341D70 end:0x80341E18 align:16 - .data start:0x80547998 end:0x805479A4 + .data start:0x80547998 end:0x805479A8 d/col/bg/d_bg_s_lin_chk.cpp: .text start:0x80341E20 end:0x80342C98 align:16 @@ -2479,7 +2473,7 @@ d/col/bg/d_bg_s_lin_chk.cpp: d/col/bg/d_bg_s_poly_pass_chk.cpp: .text start:0x80342CA0 end:0x80342D68 align:16 - .data start:0x80547B88 end:0x80547B94 + .data start:0x80547B88 end:0x80547B98 d/col/bg/d_bg_s_roof_chk.cpp: .text start:0x80342D70 end:0x803431A8 align:16 @@ -2492,12 +2486,12 @@ d/col/bg/d_bg_s_roof_chk.cpp: d/col/bg/d_bg_s_sph_chk.cpp: .text start:0x803431B0 end:0x80343428 align:16 .data start:0x80547C28 end:0x80547C88 - .sdata2 start:0x8057D158 end:0x8057D15C + .sdata2 start:0x8057D158 end:0x8057D160 d/col/bg/d_bg_s_spl_grp_chk.cpp: .text start:0x80343430 end:0x803435C8 align:16 .data start:0x80547C88 end:0x80547CB8 - .sdata2 start:0x8057D160 end:0x8057D16C + .sdata2 start:0x8057D160 end:0x8057D170 d/col/bg/d_bg_s_wtr_chk.cpp: .text start:0x803435D0 end:0x80343818 align:16 @@ -2511,7 +2505,7 @@ d/col/bg/d_bg_w.cpp: .ctors start:0x804DB910 end:0x804DB914 .data start:0x80547CE8 end:0x80547F10 .sbss start:0x80575D10 end:0x80575D20 - .sdata2 start:0x8057D170 end:0x8057D1AC + .sdata2 start:0x8057D170 end:0x8057D1B0 .bss start:0x805D0500 end:0x805D0A50 d/col/bg/d_bg_w_base.cpp: @@ -2527,7 +2521,7 @@ d/col/bg/d_bg_w_kcol.cpp: d/col/bg/d_bg_w_sv.cpp: .text start:0x80352140 end:0x80352920 align:16 - .data start:0x80548120 end:0x80548234 + .data start:0x80548120 end:0x80548238 .sdata2 start:0x8057D228 end:0x8057D230 d/col/bg/d_bg_w_time.cpp: @@ -2559,7 +2553,7 @@ d/col/cc/d_cc_s.cpp: d/d_jnt_col.cpp: .text start:0x80358660 end:0x803598C4 align:16 - .sdata start:0x80574088 end:0x8057408C + .sdata start:0x80574088 end:0x80574090 .sdata2 start:0x8057D298 end:0x8057D2B8 toBeSorted/col/cc/misc_unks.cpp: @@ -3763,8 +3757,8 @@ nw4r/db/db_directPrint.cpp: .text start:0x804342A0 end:0x80434E9C align:16 .rodata start:0x804F5D28 end:0x804F5FE0 .data start:0x8056C000 end:0x8056C010 - .sbss start:0x805765E8 end:0x805765EC - .bss start:0x80636B80 end:0x80636BA4 + .sbss start:0x805765E8 end:0x805765F0 + .bss start:0x80636B80 end:0x80636BA8 nw4r/db/db_console.cpp: .text start:0x80434EA0 end:0x8043598C align:16 @@ -3785,7 +3779,7 @@ nw4r/db/db_mapFile.cpp: .text start:0x80436A50 end:0x804373B4 align:16 .data start:0x8056C5F0 end:0x8056C600 .sdata start:0x80574E10 end:0x80574E28 - .sbss start:0x80576600 end:0x8057660C + .sbss start:0x80576600 end:0x80576610 .bss start:0x8063B320 end:0x8063B560 nw4r/db/db_assert.cpp: @@ -3837,7 +3831,7 @@ nw4r/g3d/res/g3d_restev.cpp: nw4r/g3d/res/g3d_resmat.cpp: .text start:0x8043C2C0 end:0x8043E17C align:16 .data start:0x8056D190 end:0x8056D200 - .sdata2 start:0x8057EC18 end:0x8057EC4C + .sdata2 start:0x8057EC18 end:0x8057EC50 nw4r/g3d/res/g3d_resvtx.cpp: .text start:0x8043E180 end:0x8043E598 align:16 @@ -3847,11 +3841,11 @@ nw4r/g3d/res/g3d_restex.cpp: nw4r/g3d/res/g3d_resnode.cpp: .text start:0x8043E750 end:0x8043EA58 align:16 - .sdata2 start:0x8057EC50 end:0x8057EC5C + .sdata2 start:0x8057EC50 end:0x8057EC60 nw4r/g3d/res/g3d_resanm.cpp: .text start:0x8043EA60 end:0x8043ECB8 align:16 - .sdata2 start:0x8057EC60 end:0x8057EC74 + .sdata2 start:0x8057EC60 end:0x8057EC78 nw4r/g3d/res/g3d_resanmvis.cpp: .text start:0x8043ECC0 end:0x8043EDE0 align:16 @@ -3871,7 +3865,7 @@ nw4r/g3d/res/g3d_resanmtexsrt.cpp: nw4r/g3d/res/g3d_resanmchr.cpp: .text start:0x8043F740 end:0x804419EC align:16 .rodata start:0x804F7050 end:0x804F7070 - .sdata2 start:0x8057ECA0 end:0x8057ECCC + .sdata2 start:0x8057ECA0 end:0x8057ECD0 nw4r/g3d/res/g3d_reslightset.cpp: .text start:0x804419F0 end:0x80441B5C align:16 @@ -3893,15 +3887,15 @@ nw4r/g3d/res/g3d_resanmscn.cpp: nw4r/g3d/res/g3d_resanmshp.cpp: .text start:0x80442980 end:0x80442AE8 align:16 - .sdata2 start:0x8057ECF0 end:0x8057ECF4 + .sdata2 start:0x8057ECF0 end:0x8057ECF8 nw4r/g3d/g3d_transform.cpp: .text start:0x80442AF0 end:0x80442DF4 align:16 - .sdata2 start:0x8057ECF8 end:0x8057ECFC + .sdata2 start:0x8057ECF8 end:0x8057ED00 nw4r/g3d/g3d_anmvis.cpp: .text start:0x80442E00 end:0x8044358C align:16 - .rodata start:0x804F7070 end:0x804F7094 + .rodata start:0x804F7070 end:0x804F7098 .data start:0x8056D280 end:0x8056D308 .sdata start:0x80574E38 end:0x80574E40 .sdata2 start:0x8057ED00 end:0x8057ED10 @@ -3926,13 +3920,13 @@ nw4r/g3d/g3d_anmtexsrt.cpp: nw4r/g3d/g3d_anmchr.cpp: .text start:0x804479B0 end:0x804499CC align:16 - .rodata start:0x804F71D0 end:0x804F721C + .rodata start:0x804F71D0 end:0x804F7220 .data start:0x8056D668 end:0x8056D7C8 .sdata2 start:0x8057ED50 end:0x8057ED68 nw4r/g3d/g3d_anmshp.cpp: .text start:0x804499D0 end:0x8044A3BC align:16 - .rodata start:0x804F7220 end:0x804F7244 + .rodata start:0x804F7220 end:0x804F7248 .data start:0x8056D7C8 end:0x8056D868 .sdata2 start:0x8057ED68 end:0x8057ED78 @@ -3941,14 +3935,14 @@ nw4r/g3d/g3d_anmscn.cpp: nw4r/g3d/g3d_obj.cpp: .text start:0x8044A6F0 end:0x8044A85C align:16 - .rodata start:0x804F7248 end:0x804F7254 - .data start:0x8056D868 end:0x8056D884 + .rodata start:0x804F7248 end:0x804F7258 + .data start:0x8056D868 end:0x8056D888 nw4r/g3d/g3d_anmobj.cpp: .text start:0x8044A860 end:0x8044A928 align:16 - .rodata start:0x804F7258 end:0x804F7264 - .sdata start:0x80574E40 end:0x80574E44 - .sdata2 start:0x8057ED78 end:0x8057ED7C + .rodata start:0x804F7258 end:0x804F7268 + .sdata start:0x80574E40 end:0x80574E48 + .sdata2 start:0x8057ED78 end:0x8057ED80 nw4r/g3d/platform/g3d_gpu.cpp: .text start:0x8044A930 end:0x8044AE50 align:16 @@ -3962,7 +3956,7 @@ nw4r/g3d/platform/g3d_tmem.cpp: nw4r/g3d/platform/g3d_cpu.cpp: .text start:0x8044B1B0 end:0x8044B35C align:16 - .sdata2 start:0x8057ED98 end:0x8057ED9C + .sdata2 start:0x8057ED98 end:0x8057EDA0 nw4r/g3d/g3d_state.cpp: .text start:0x8044B360 end:0x8044EAB0 align:16 @@ -3981,8 +3975,8 @@ nw4r/g3d/g3d_draw1mat1shp.cpp: nw4r/g3d/g3d_calcview.cpp: .text start:0x8044F800 end:0x80451A9C align:16 - .rodata start:0x804F7A28 end:0x804F7A44 - .sdata2 start:0x8057EDE8 end:0x8057EDF4 + .rodata start:0x804F7A28 end:0x804F7A48 + .sdata2 start:0x8057EDE8 end:0x8057EDF8 nw4r/g3d/g3d_dcc.cpp: .text start:0x80451AA0 end:0x80451B84 align:16 @@ -4000,7 +3994,7 @@ nw4r/g3d/g3d_calcworld.cpp: nw4r/g3d/g3d_draw.cpp: .text start:0x80452750 end:0x804545F0 align:16 .sdata start:0x80574E58 end:0x80574E60 - .sdata2 start:0x8057EE00 end:0x8057EE0C + .sdata2 start:0x8057EE00 end:0x8057EE10 nw4r/g3d/g3d_camera.cpp: .text start:0x804545F0 end:0x804556AC align:16 @@ -4008,22 +4002,22 @@ nw4r/g3d/g3d_camera.cpp: nw4r/g3d/dcc/g3d_basic.cpp: .text start:0x804556B0 end:0x80455978 align:16 - .sdata2 start:0x8057EE48 end:0x8057EE54 + .sdata2 start:0x8057EE48 end:0x8057EE58 nw4r/g3d/dcc/g3d_maya.cpp: .text start:0x80455980 end:0x80456684 align:16 .rodata start:0x804F7A48 end:0x804F7A80 - .sdata2 start:0x8057EE58 end:0x8057EE6C + .sdata2 start:0x8057EE58 end:0x8057EE70 nw4r/g3d/dcc/g3d_xsi.cpp: .text start:0x80456690 end:0x804572A4 align:16 .rodata start:0x804F7A80 end:0x804F7AB8 - .sdata2 start:0x8057EE70 end:0x8057EE7C + .sdata2 start:0x8057EE70 end:0x8057EE80 nw4r/g3d/dcc/g3d_3dsmax.cpp: .text start:0x804572B0 end:0x80457DCC align:16 .rodata start:0x804F7AB8 end:0x804F7AF0 - .sdata2 start:0x8057EE80 end:0x8057EE94 + .sdata2 start:0x8057EE80 end:0x8057EE98 nw4r/g3d/g3d_scnobj.cpp: .text start:0x80457DD0 end:0x8045980C align:16 @@ -4037,14 +4031,14 @@ nw4r/g3d/g3d_scnroot.cpp: .rodata start:0x804F7B20 end:0x804F7B30 .data start:0x8056D9A8 end:0x8056DA18 .sdata start:0x80574E60 end:0x80574E70 - .sdata2 start:0x8057EEA0 end:0x8057EEA4 + .sdata2 start:0x8057EEA0 end:0x8057EEA8 nw4r/g3d/g3d_scnmdlsmpl.cpp: .text start:0x8045B1C0 end:0x8045D25C align:16 .rodata start:0x804F7B30 end:0x804F7B48 .data start:0x8056DA18 end:0x8056DA70 .sdata start:0x80574E70 end:0x80574E88 - .sdata2 start:0x8057EEA8 end:0x8057EEAC + .sdata2 start:0x8057EEA8 end:0x8057EEB0 nw4r/g3d/g3d_scnmdl.cpp: .text start:0x8045D260 end:0x8045FDAC align:16 @@ -4066,15 +4060,15 @@ nw4r/g3d/g3d_scnproc.cpp: .text start:0x804600F0 end:0x804603F0 align:16 .rodata start:0x804F7B70 end:0x804F7B80 .data start:0x8056DB00 end:0x8056DB38 - .sdata2 start:0x8057EEB0 end:0x8057EEB4 + .sdata2 start:0x8057EEB0 end:0x8057EEB8 nw4r/g3d/g3d_fog.cpp: .text start:0x804603F0 end:0x80460560 align:16 - .sdata2 start:0x8057EEB8 end:0x8057EEBC + .sdata2 start:0x8057EEB8 end:0x8057EEC0 nw4r/g3d/g3d_light.cpp: .text start:0x80460560 end:0x80460F68 align:16 - .sdata2 start:0x8057EEC0 end:0x8057EEEC + .sdata2 start:0x8057EEC0 end:0x8057EEF0 nw4r/g3d/g3d_calcvtx.cpp: .text start:0x80460F70 end:0x804616F8 align:16 @@ -4402,41 +4396,41 @@ nw4r/lyt/lyt_pane.cpp: nw4r/lyt/lyt_group.cpp: .text start:0x80487EB0 end:0x8048820C align:16 - .data start:0x8056E4A8 end:0x8056E4B4 + .data start:0x8056E4A8 end:0x8056E4B8 nw4r/lyt/lyt_layout.cpp: .text start:0x80488210 end:0x80489268 align:16 .data start:0x8056E4B8 end:0x8056E4F8 - .sbss start:0x805766F8 end:0x805766FC + .sbss start:0x805766F8 end:0x80576700 .sdata2 start:0x8057F240 end:0x8057F248 nw4r/lyt/lyt_picture.cpp: .text start:0x80489270 end:0x804897FC align:16 .ctors start:0x804DB978 end:0x804DB97C .data start:0x8056E4F8 end:0x8056E570 - .sbss start:0x80576700 end:0x80576704 + .sbss start:0x80576700 end:0x80576708 .sdata2 start:0x8057F248 end:0x8057F250 nw4r/lyt/lyt_textBox.cpp: .text start:0x80489800 end:0x8048B16C align:16 .ctors start:0x804DB97C end:0x804DB980 - .data start:0x8056E570 end:0x8056E5F4 - .sdata start:0x80574EB8 end:0x80574EBC - .sbss start:0x80576708 end:0x8057670C + .data start:0x8056E570 end:0x8056E5F8 + .sdata start:0x80574EB8 end:0x80574EC0 + .sbss start:0x80576708 end:0x80576710 .sdata2 start:0x8057F250 end:0x8057F268 nw4r/lyt/lyt_window.cpp: .text start:0x8048B170 end:0x8048D6FC align:16 .ctors start:0x804DB980 end:0x804DB984 .data start:0x8056E5F8 end:0x8056E6C0 - .sbss start:0x80576710 end:0x80576714 + .sbss start:0x80576710 end:0x80576718 .sdata2 start:0x8057F268 end:0x8057F280 nw4r/lyt/lyt_bounding.cpp: .text start:0x8048D700 end:0x8048D7CC align:16 .ctors start:0x804DB984 end:0x804DB988 - .data start:0x8056E6C0 end:0x8056E734 - .sbss start:0x80576718 end:0x8057671C + .data start:0x8056E6C0 end:0x8056E738 + .sbss start:0x80576718 end:0x80576720 nw4r/lyt/lyt_material.cpp: .text start:0x8048D7D0 end:0x804905D0 align:16 @@ -4446,16 +4440,16 @@ nw4r/lyt/lyt_material.cpp: nw4r/lyt/lyt_texMap.cpp: .text start:0x804905D0 end:0x80490980 align:16 - .sdata2 start:0x8057F2A0 end:0x8057F2B4 + .sdata2 start:0x8057F2A0 end:0x8057F2B8 nw4r/lyt/lyt_drawInfo.cpp: .text start:0x80490980 end:0x80490A40 align:16 - .data start:0x8056E7A8 end:0x8056E7B4 + .data start:0x8056E7A8 end:0x8056E7B8 .sdata2 start:0x8057F2B8 end:0x8057F2C0 nw4r/lyt/lyt_animation.cpp: .text start:0x80490A40 end:0x80491FF4 align:16 - .data start:0x8056E7B8 end:0x8056E7DC + .data start:0x8056E7B8 end:0x8056E7E0 .sdata2 start:0x8057F2C0 end:0x8057F2E0 nw4r/lyt/lyt_resourceAccessor.cpp: @@ -4475,25 +4469,25 @@ nw4r/lyt/lyt_common.cpp: nw4r/lyt/lyt_util.cpp: .text start:0x804932E0 end:0x8049350C align:16 - .sdata2 start:0x8057F2E8 end:0x8057F2EC + .sdata2 start:0x8057F2E8 end:0x8057F2F0 egg/core/eggArchive.cpp: .text start:0x80493510 end:0x80494254 align:16 - .data start:0x8056E820 end:0x8056E82C + .data start:0x8056E820 end:0x8056E830 .sdata start:0x80574EC8 end:0x80574ECA .sbss start:0x80576728 end:0x80576729 - .bss start:0x80673AC8 end:0x80673AD4 + .bss start:0x80673AC8 end:0x80673AD8 egg/core/eggDvdFile.cpp: .text start:0x80494260 end:0x80494678 align:16 .data start:0x8056E830 end:0x8056E858 .sbss start:0x80576730 end:0x80576731 - .bss start:0x80673AD8 end:0x80673AE4 + .bss start:0x80673AD8 end:0x80673AE8 egg/core/eggDvdRipper.cpp: .text start:0x80494680 end:0x80494C80 align:16 .sdata start:0x80574ED0 end:0x80574ED1 - .sbss start:0x80576738 end:0x8057673C + .sbss start:0x80576738 end:0x80576740 egg/core/eggStreamDecomp.cpp: .text start:0x80494C80 end:0x804952C8 align:16 @@ -4508,7 +4502,7 @@ egg/core/eggHeap.cpp: .text start:0x804953F0 end:0x80495AB0 align:16 .data start:0x8056E8E8 end:0x8056E980 .sdata start:0x80574ED8 end:0x80574EE8 - .sbss start:0x80576740 end:0x8057676C + .sbss start:0x80576740 end:0x80576770 .bss start:0x80673AE8 end:0x80673B10 egg/core/eggExpHeap.cpp: @@ -4525,7 +4519,7 @@ egg/core/eggAssertHeap.cpp: egg/core/eggDisposer.cpp: .text start:0x80496830 end:0x80496904 align:16 - .data start:0x8056EA30 end:0x8056EA3C + .data start:0x8056EA30 end:0x8056EA40 egg/core/eggThread.cpp: .text start:0x80496910 end:0x80496DD8 align:16 @@ -4546,7 +4540,7 @@ egg/core/eggDisplay.cpp: .text start:0x80497530 end:0x8049792C align:16 .ctors start:0x804DB988 end:0x804DB98C .data start:0x8056EAC8 end:0x8056EAE8 - .sbss start:0x80576788 end:0x8057678C + .sbss start:0x80576788 end:0x80576790 .sdata2 start:0x8057F2F8 end:0x8057F308 egg/core/eggColorFader.cpp: @@ -4558,7 +4552,7 @@ egg/core/eggAsyncDisplay.cpp: .text start:0x80497E40 end:0x80498688 align:16 .data start:0x8056EB10 end:0x8056EB80 .sbss start:0x80576790 end:0x80576798 - .sdata2 start:0x8057F310 end:0x8057F324 + .sdata2 start:0x8057F310 end:0x8057F328 .bss start:0x80673B20 end:0x80673B40 egg/core/eggVideo.cpp: @@ -4575,14 +4569,14 @@ egg/core/eggXfbManager.cpp: egg/core/eggGraphicsFifo.cpp: .text start:0x80498E20 end:0x80498F90 align:16 .data start:0x8056EB80 end:0x8056EB90 - .sbss start:0x80576798 end:0x805767A4 + .sbss start:0x80576798 end:0x805767A8 egg/core/eggController.cpp: .text start:0x80498F90 end:0x8049AB58 align:16 .ctors start:0x804DB98C end:0x804DB990 .rodata start:0x804FBA20 end:0x804FBA30 .data start:0x8056EB90 end:0x8056EC88 - .sdata start:0x80574EE8 end:0x80574EEC + .sdata start:0x80574EE8 end:0x80574EF0 .sbss start:0x805767A8 end:0x805767C0 .sdata2 start:0x8057F338 end:0x8057F360 .bss start:0x80673B40 end:0x80674C00 @@ -4690,7 +4684,7 @@ egg/gfx/eggFrustum.cpp: .ctors start:0x804DB99C end:0x804DB9A0 .data start:0x8056F030 end:0x8056F048 .sbss start:0x80576810 end:0x80576820 - .sdata2 start:0x8057F618 end:0x8057F63C + .sdata2 start:0x8057F618 end:0x8057F640 egg/gfx/eggG3DUtility.cpp: .text start:0x804A6860 end:0x804A75B0 align:16 @@ -4762,14 +4756,14 @@ egg/gfx/eggPostEffectBlur.cpp: egg/gfx/eggPostEffectBlurGather.cpp: .text start:0x804AFC10 end:0x804B0098 align:16 - .data start:0x8056F190 end:0x8056F1AC + .data start:0x8056F190 end:0x8056F1B0 .sdata2 start:0x8057F788 end:0x8057F798 egg/gfx/eggPostEffectUnk2.cpp: .text start:0x804B00A0 end:0x804B0AA4 align:16 .rodata start:0x804FBD50 end:0x804FBD88 .data start:0x8056F1B0 end:0x8056F1D0 - .sdata2 start:0x8057F798 end:0x8057F7C4 + .sdata2 start:0x8057F798 end:0x8057F7C8 egg/gfx/eggPostEffectMask.cpp: .text start:0x804B0AB0 end:0x804B0F60 align:16 @@ -4779,8 +4773,8 @@ egg/gfx/eggPostEffectMask.cpp: egg/gfx/eggPostEffectMaskDOF.cpp: .text start:0x804B0F60 end:0x804B1BE8 align:16 .rodata start:0x804FBD88 end:0x804FBDA0 - .data start:0x8056F1F0 end:0x8056F20C - .sdata2 start:0x8057F7D0 end:0x8057F80C + .data start:0x8056F1F0 end:0x8056F210 + .sdata2 start:0x8057F7D0 end:0x8057F810 .sbss2 start:0x8057FFC8 end:0x8057FFCC egg/gfx/eggPostEffectSimple.cpp: @@ -4843,7 +4837,7 @@ egg/audio/eggAudioMgr.cpp: egg/audio/eggAudioRmtSpeakerMgr.cpp: .text start:0x804B69D0 end:0x804B6F58 align:16 - .sdata start:0x80574F68 end:0x80574F6C + .sdata start:0x80574F68 end:0x80574F70 .sbss start:0x805768D8 end:0x805768E8 .bss start:0x80675390 end:0x80675480 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 29eb77f1..3ecd0716 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -3019,10 +3019,10 @@ getDzbFromArc__11OarcManagerFPCcPCc = .text:0x80069B60; // type:function size:0x getPlcFromArc__11OarcManagerFPCcPCc = .text:0x80069CE0; // type:function size:0x178 getSubEntryData__11OarcManagerFPCcPCc = .text:0x80069E60; // type:function size:0x8 create__11OarcManagerFPQ23EGG4Heap = .text:0x80069E70; // type:function size:0x64 -fn_80069EE0 = .text:0x80069EE0; // type:function size:0x6C -ArcnManager__set = .text:0x80069F50; // type:function size:0xC -ArcnManager__doLoad = .text:0x80069F60; // type:function size:0x88 -fn_80069FF0 = .text:0x80069FF0; // type:function size:0xC4 +__dt__16ObjectArcControlFv = .text:0x80069EE0; // type:function size:0x6C +set__16ObjectArcControlFPCPCcl = .text:0x80069F50; // type:function size:0xC +load__16ObjectArcControlCFPQ23EGG4Heap = .text:0x80069F60; // type:function size:0x88 +release__16ObjectArcControlFv = .text:0x80069FF0; // type:function size:0xC4 __ct__16LayoutArcManagerFv = .text:0x8006A0C0; // type:function size:0x44 __dt__16LayoutArcManagerFv = .text:0x8006A110; // type:function size:0x64 init__16LayoutArcManagerFPQ23EGG4Heap = .text:0x8006A180; // type:function size:0x14 @@ -3036,8 +3036,8 @@ getLoadedData__16LayoutArcManagerFPCc = .text:0x8006A260; // type:function size: create__16LayoutArcManagerFPQ23EGG4Heap = .text:0x8006A270; // type:function size:0x64 __dt__16LayoutArcControlFv = .text:0x8006A2E0; // type:function size:0x6C set__16LayoutArcControlFPCPCcl = .text:0x8006A350; // type:function size:0xC -load__16LayoutArcControlFPQ23EGG4Heap = .text:0x8006A360; // type:function size:0x88 -fn_8006A3F0 = .text:0x8006A3F0; // type:function size:0x88 +load__16LayoutArcControlCFPQ23EGG4Heap = .text:0x8006A360; // type:function size:0x88 +allLoaded__16LayoutArcControlCFv = .text:0x8006A3F0; // type:function size:0x88 release__16LayoutArcControlFv = .text:0x8006A480; // type:function size:0xC4 getActorInfoByName__FPCc = .text:0x8006A550; // type:function size:0x98 getProfileIdForName__FPCc = .text:0x8006A5F0; // type:function size:0x34 @@ -30885,7 +30885,7 @@ __vt__22CurrentStageArcManager = .data:0x8050E004; // type:object size:0xC @4271 = .data:0x8050E010; // type:object size:0x10 scope:local data:string @4278 = .data:0x8050E020; // type:object size:0xC scope:local data:string __vt__11OarcManager = .data:0x8050E02C; // type:object size:0xC -lbl_8050E038 = .data:0x8050E038; // type:object size:0x10 +__vt__16ObjectArcControl = .data:0x8050E038; // type:object size:0x10 __vt__16LayoutArcManager = .data:0x8050E048; // type:object size:0xC __vt__16LayoutArcControl = .data:0x8050E054; // type:object size:0xC lbl_8050E060 = .data:0x8050E060; // type:object size:0x30 diff --git a/include/toBeSorted/arc_managers/layout_arc_manager.h b/include/toBeSorted/arc_managers/layout_arc_manager.h index ad43f903..48b38789 100644 --- a/include/toBeSorted/arc_managers/layout_arc_manager.h +++ b/include/toBeSorted/arc_managers/layout_arc_manager.h @@ -5,6 +5,20 @@ #include "d/d_rawarchive.h" #include "egg/core/eggHeap.h" +class LayoutArcControl { +public: + LayoutArcControl() : mLayoutArcs(nullptr), mNumArcs(0) {} + virtual ~LayoutArcControl(); + void set(const char *const *layoutArcs, s32 numArcs); + bool load(EGG::Heap *heap) const; + bool allLoaded() const; + bool release(); + +private: + const char *const *mLayoutArcs; + s32 mNumArcs; +}; + class LayoutArcManager { public: LayoutArcManager(); @@ -35,17 +49,4 @@ private: dRawArcTable_c mArcTable; }; -class LayoutArcControl { -public: - LayoutArcControl() : mLayoutArcs(nullptr), mNumArcs(0) {} - virtual ~LayoutArcControl(); - void set(const char *const *layoutArcs, s32 numArcs); - void load(EGG::Heap *heap); - void release(); - -private: - const char **mLayoutArcs; - s32 mNumArcs; -}; - #endif diff --git a/include/toBeSorted/arc_managers/oarc_manager.h b/include/toBeSorted/arc_managers/oarc_manager.h index 52f2ab2c..ec127221 100644 --- a/include/toBeSorted/arc_managers/oarc_manager.h +++ b/include/toBeSorted/arc_managers/oarc_manager.h @@ -4,6 +4,19 @@ #include "d/d_rawarchive.h" #include "egg/core/eggHeap.h" +class ObjectArcControl { +public: + ObjectArcControl() : mObjectArcs(nullptr), mNumArcs(0) {} + virtual ~ObjectArcControl(); + void set(const char *const *objectArcs, s32 numArcs); + bool load(EGG::Heap *heap) const; + bool release(); + +private: + const char *const *mObjectArcs; + s32 mNumArcs; +}; + class OarcManager { public: OarcManager(); @@ -41,17 +54,4 @@ private: dRawArcTable_c mArcTable; }; -class ObjectArcControl { -public: - ObjectArcControl() : mObjectArcs(nullptr), mNumArcs(0) {} - virtual ~ObjectArcControl(); - void set(const char *const *objectArcs, s32 numArcs); - void load(EGG::Heap *heap); - void release(); - -private: - const char **mObjectArcs; - s32 mNumArcs; -}; - #endif diff --git a/src/toBeSorted/arc_managers/layout_arc_manager.cpp b/src/toBeSorted/arc_managers/layout_arc_manager.cpp index ce329680..091fe504 100644 --- a/src/toBeSorted/arc_managers/layout_arc_manager.cpp +++ b/src/toBeSorted/arc_managers/layout_arc_manager.cpp @@ -2,7 +2,6 @@ #include "d/d_heap.h" - LayoutArcManager *LayoutArcManager::sInstance; LayoutArcManager::LayoutArcManager() { @@ -57,3 +56,68 @@ bool LayoutArcManager::create(EGG::Heap *heap) { GetInstance()->init(heap); return true; } + +LayoutArcControl::~LayoutArcControl() { + if (mLayoutArcs != nullptr) { + release(); + } +} + +void LayoutArcControl::set(const char *const *layoutArcs, s32 numArcs) { + mLayoutArcs = layoutArcs; + mNumArcs = numArcs; +} + +bool LayoutArcControl::load(EGG::Heap *heap) const { + if (mLayoutArcs == nullptr) { + return true; + } + + const char *const *ptr = mLayoutArcs; + for (int i = 0; i < mNumArcs; i++) { + LayoutArcManager::GetInstance()->loadLayoutArcFromDisk(*ptr, heap); + ptr++; + } + + return true; +} + +bool LayoutArcControl::allLoaded() const { + if (mLayoutArcs == nullptr) { + return true; + } + + const char *const *ptr = mLayoutArcs; + for (int i = 0; i < mNumArcs; i++) { + dArcResult_e res = LayoutArcManager::GetInstance()->ensureLoaded1(*ptr); + if (res != D_ARC_RESULT_OK) { + return false; + } + ptr++; + } + return true; +} + +bool LayoutArcControl::release() { + if (mLayoutArcs == nullptr) { + return true; + } + + const char *const *ptr = mLayoutArcs; + for (int i = 0; i < mNumArcs; i++) { + dArcResult_e res = LayoutArcManager::GetInstance()->ensureLoaded2(*ptr); + if (res != D_ARC_RESULT_ERROR_NOT_FOUND && res != D_ARC_RESULT_OK) { + return false; + } + ptr++; + } + + ptr = mLayoutArcs; + for (int i = 0; i < mNumArcs; i++) { + LayoutArcManager::GetInstance()->decrement(*ptr); + ptr++; + } + mLayoutArcs = nullptr; + + return true; +} diff --git a/src/toBeSorted/arc_managers/oarc_manager.cpp b/src/toBeSorted/arc_managers/oarc_manager.cpp index 784f88db..aa284e3f 100644 --- a/src/toBeSorted/arc_managers/oarc_manager.cpp +++ b/src/toBeSorted/arc_managers/oarc_manager.cpp @@ -89,3 +89,52 @@ bool OarcManager::create(EGG::Heap *heap) { GetInstance()->init(heap); return true; } + +ObjectArcControl::~ObjectArcControl() { + if (mObjectArcs != nullptr) { + release(); + } +} + +void ObjectArcControl::set(const char *const *objectArcs, s32 numArcs) { + mObjectArcs = objectArcs; + mNumArcs = numArcs; +} + +bool ObjectArcControl::load(EGG::Heap *heap) const { + if (mObjectArcs == nullptr) { + return true; + } + + const char *const *ptr = mObjectArcs; + for (int i = 0; i < mNumArcs; i++) { + OarcManager::GetInstance()->loadObjectArcFromDisk(*ptr, heap); + ptr++; + } + + return true; +} + +bool ObjectArcControl::release() { + if (mObjectArcs == nullptr) { + return true; + } + + const char *const *ptr = mObjectArcs; + for (int i = 0; i < mNumArcs; i++) { + dArcResult_e res = OarcManager::GetInstance()->ensureLoaded2(*ptr); + if (res != D_ARC_RESULT_ERROR_NOT_FOUND && res != D_ARC_RESULT_OK) { + return false; + } + ptr++; + } + + ptr = mObjectArcs; + for (int i = 0; i < mNumArcs; i++) { + OarcManager::GetInstance()->decrement(*ptr); + ptr++; + } + mObjectArcs = nullptr; + + return true; +}