diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 41792f30..528a66bc 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -93045,13 +93045,13 @@ 0x0000007101201af4,Res::getError,8,_ZNK4ksys3res6Handle9getStatusEv 0x0000007101201afc,Res::setError,12,_ZN4ksys3res6Handle24setStatusForResourceMgr_ERKNS1_6StatusE 0x0000007101201b08,Res::submitLoadForSyncRequestAndGetResource,444,_ZN4ksys3res6Handle4loadERKN4sead14SafeStringBaseIcEEPKNS0_12ILoadRequestEPNS1_6StatusE -0x0000007101201cc4,Res::isStartedLoadAndFailed,12,_ZNK4ksys3res6Handle10isFlag2SetEv +0x0000007101201cc4,Res::isStartedLoadAndFailed,12,_ZNK4ksys3res6Handle13requestedLoadEv 0x0000007101201cd0,ResourceLoadArg::dtor,20,_ZN4ksys3res11LoadRequestD2Ev 0x0000007101201ce4,Res::submitLoadRequest,380,_ZN4ksys3res6Handle11requestLoadERKN4sead14SafeStringBaseIcEEPKNS0_12ILoadRequestEPNS1_6StatusE 0x0000007101201e60,Res::waitForReady,68,_ZN4ksys3res6Handle12waitForReadyEv 0x0000007101201ea4,sub_7101201EA4,104,_ZN4ksys3res6Handle12waitForReadyERKN4sead8TickSpanE 0x0000007101201f0c,Res::parseResource,404,_ZN4ksys3res6Handle13parseResourceEPNS0_7ContextE -0x00000071012020a0,Res::k,12,_ZNK4ksys3res6Handle10isFlag8SetEv +0x00000071012020a0,Res::k,12,_ZNK4ksys3res6Handle17hasParsedResourceEv 0x00000071012020ac,Res::setSomeFlagOnResMgrDependingOnPath,784,_ZN4ksys3res6Handle22updateResourceMgrFlag_Ev! 0x00000071012023bc,Res::c,260,_ZN4ksys3res6Handle22updateStatusAndUnload_Ev 0x00000071012024c0,Res::submitUnloadRequest,136,_ZN4ksys3res6Handle14requestUnload2Ev diff --git a/src/Game/DLC/aocManager.cpp b/src/Game/DLC/aocManager.cpp index 41e4fdd3..46e66553 100644 --- a/src/Game/DLC/aocManager.cpp +++ b/src/Game/DLC/aocManager.cpp @@ -471,7 +471,7 @@ void Manager::checkVersion() { } bool Manager::VersionFile::readVersion() { - if (!file_handle.isFlag2Set()) + if (!file_handle.requestedLoad()) return true; if (file_handle.isSuccess()) { diff --git a/src/KingSystem/ActorSystem/actActorParamMgr.cpp b/src/KingSystem/ActorSystem/actActorParamMgr.cpp index e75eb43f..cf595074 100644 --- a/src/KingSystem/ActorSystem/actActorParamMgr.cpp +++ b/src/KingSystem/ActorSystem/actActorParamMgr.cpp @@ -201,7 +201,7 @@ T* ActorParamMgr::handleAsyncFileLoad(ActorParam* param, s32* idx, ActorParam::R return res; } - if (handle.isFlag8Set()) + if (handle.hasParsedResource()) return sead::DynamicCast(handle.getResource()); if (!handle.isReadyOrNeedsParse()) @@ -427,7 +427,7 @@ bool ActorParamMgr::finishLoadingExtraRes(ActorParam* param, void* x) { ++idx; } else { const res::Handle& handle = param->mHandles[1][idx]; - if (handle.isFlag8Set()) { + if (handle.hasParsedResource()) { ++idx; continue; } @@ -455,7 +455,7 @@ bool ActorParamMgr::finishLoadingExtraRes(ActorParam* param, void* x) { ++idx; } else { const res::Handle& handle = param->mHandles[1][idx]; - if (handle.isFlag8Set()) { + if (handle.hasParsedResource()) { ++idx; continue; } @@ -482,7 +482,7 @@ bool ActorParamMgr::finishLoadingExtraRes(ActorParam* param, void* x) { ++idx; } else { const res::Handle& handle = param->mHandles[1][idx]; - if (handle.isFlag8Set()) { + if (handle.hasParsedResource()) { ++idx; continue; } diff --git a/src/KingSystem/Resource/resHandle.cpp b/src/KingSystem/Resource/resHandle.cpp index 81e43aa2..e47cb65e 100644 --- a/src/KingSystem/Resource/resHandle.cpp +++ b/src/KingSystem/Resource/resHandle.cpp @@ -65,17 +65,17 @@ Handle::~Handle() { } void Handle::requestUnload() { - if (!mFlags.isOn(Flag::_2)) + if (!mFlags.isOn(Flag::LoadRequested)) return; - mFlags.reset(Flag::_7); - mFlags.set(Flag::_4); + mFlags.reset(Flag::LoadUnloadFlags); + mFlags.set(Flag::UnloadRequested); if (mTaskHandle.hasTask()) { mTaskHandle.removeTaskFromQueue(); if (!mUnit) { stubbedLogFunction(); - mStatus = Status::_14; + mStatus = Status::Cancelled; return; } } @@ -94,7 +94,7 @@ sead::DirectResource* Handle::getResource() const { } bool Handle::isSuccess() const { - if (mFlags.isOff(Flag::_2)) + if (mFlags.isOff(Flag::LoadRequested)) return false; if (isBusy()) @@ -119,7 +119,7 @@ void Handle::setStatusForResourceMgr_(const Status& status) { } inline bool Handle::checkPathChange_(const sead::SafeString& path) { - if (!mFlags.isOn(Flag::_2)) + if (!mFlags.isOn(Flag::LoadRequested)) return true; stubbedLogFunction(); @@ -132,9 +132,9 @@ inline bool Handle::checkPathChange_(const sead::SafeString& path) { sead::DirectResource* Handle::load(const sead::SafeString& path, const ILoadRequest* request, Handle::Status* out_status) { if (checkPathChange_(path)) { - mFlags.reset(Flag::_F); - mFlags.set(Flag::_2); - mStatus = Status::_0; + mFlags.reset(Flag::AllStatusFlags); + mFlags.set(Flag::LoadRequested); + mStatus = Status::NoFile; if (request) { ResourceMgrTask::instance()->requestLoadForSync(this, path, *request); } else { @@ -151,16 +151,16 @@ sead::DirectResource* Handle::load(const sead::SafeString& path, const ILoadRequ return getResource(); } -bool Handle::isFlag2Set() const { - return mFlags.isOn(Flag::_2); +bool Handle::requestedLoad() const { + return mFlags.isOn(Flag::LoadRequested); } bool Handle::requestLoad(const sead::SafeString& path, const ILoadRequest* request, Handle::Status* out_status) { if (checkPathChange_(path)) { - mFlags.reset(Flag::_F); - mFlags.set(Flag::_2); - mStatus = Status::_0; + mFlags.reset(Flag::AllStatusFlags); + mFlags.set(Flag::LoadRequested); + mStatus = Status::NoFile; Handle::Status ret; if (request) { @@ -203,33 +203,34 @@ bool Handle::waitForReady(const sead::TickSpan& span) { } bool Handle::parseResource(Context* context) { - if (mFlags.isOn(Flag::_8)) + if (mFlags.isOn(Flag::Parsed)) return true; - if (mFlags.isOn(Flag::_4)) + if (mFlags.isOn(Flag::UnloadRequested)) return false; if (mTaskHandle.getStatus() == util::ManagedTaskHandle::Status::TaskRemoved || (mUnit && mUnit->isTask1NotQueued())) { stubbedLogFunction(); - mStatus = Status::_14; + mStatus = Status::Cancelled; updateResourceMgrFlag_(); requestUnload(); - mFlags.set(Flag::_8); + mFlags.set(Flag::Parsed); return true; } - if (mStatus == Status::_1 || mStatus == Status::_2 || mStatus == Status::_3 || - mStatus == Status::_8 || mStatus == Status::_9 || mStatus == Status::_10 || - mStatus == Status::_11 || mStatus == Status::_12 || mStatus == Status::_13 || - mStatus == Status::_14) { + if (mStatus == Status::_1 || mStatus == Status::SizeZero || mStatus == Status::_3 || + mStatus == Status::_8 || mStatus == Status::ParseFailed || + mStatus == Status::BadAllocSize || mStatus == Status::Edited || + mStatus == Status::BadHeapSize || mStatus == Status::FileDeviceError || + mStatus == Status::Cancelled) { updateResourceMgrFlag_(); requestUnload(); - mFlags.set(Flag::_8); + mFlags.set(Flag::Parsed); return true; } - if (mStatus == Status::_0) + if (mStatus == Status::NoFile) return false; if (!mUnit) { @@ -252,10 +253,10 @@ bool Handle::parseResource(Context* context) { break; case ResourceUnit::Status::_12: case ResourceUnit::Status::_15: - mStatus = Status::_9; + mStatus = Status::ParseFailed; updateResourceMgrFlag_(); requestUnload(); - mFlags.set(Flag::_8); + mFlags.set(Flag::Parsed); return true; case ResourceUnit::Status::_14: if (mStatus == Status::_7) @@ -266,12 +267,12 @@ bool Handle::parseResource(Context* context) { break; } - mFlags.set(Flag::_8); + mFlags.set(Flag::Parsed); return true; } -bool Handle::isFlag8Set() const { - return mFlags.isOn(Flag::_8); +bool Handle::hasParsedResource() const { + return mFlags.isOn(Flag::Parsed); } // NON_MATCHING: switch @@ -329,17 +330,17 @@ void Handle::updateStatusAndUnload_() { if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FailedMaybe)) return Status::_1; if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FileSizeIsZero)) - return Status::_2; + return Status::SizeZero; if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::_400)) - return Status::_9; + return Status::ParseFailed; if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FileSizeExceedsAllocSize)) - return Status::_10; - if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::_1000)) - return Status::_11; + return Status::BadAllocSize; + if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::Edited)) + return Status::Edited; if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::FileOrResInstanceTooLargeForHeap)) - return Status::_12; + return Status::BadHeapSize; if (unit->mStatusFlags.isOn(ResourceUnit::StatusFlag::LoadFailed)) - return Status::_13; + return Status::FileDeviceError; #ifdef MATCHING_HACK_NX_CLANG asm(""); @@ -356,17 +357,17 @@ void Handle::requestUnload2() { } void Handle::unload() { - if (!mFlags.isOn(Flag::_2)) + if (!mFlags.isOn(Flag::LoadRequested)) return; - mFlags.reset(Flag::_7); - mFlags.set(Flag::_4); + mFlags.reset(Flag::LoadUnloadFlags); + mFlags.set(Flag::UnloadRequested); if (mTaskHandle.hasTask()) { mTaskHandle.removeTaskFromQueue(); if (!mUnit) { stubbedLogFunction(); - mStatus = Status::_14; + mStatus = Status::Cancelled; return; } } @@ -376,17 +377,17 @@ void Handle::unload() { } void Handle::unloadAndResetUnitFlag20000() { - if (!mFlags.isOn(Flag::_2)) + if (!mFlags.isOn(Flag::LoadRequested)) return; - mFlags.reset(Flag::_7); - mFlags.set(Flag::_4); + mFlags.reset(Flag::LoadUnloadFlags); + mFlags.set(Flag::UnloadRequested); if (mTaskHandle.hasTask()) { mTaskHandle.removeTaskFromQueue(); if (!mUnit) { stubbedLogFunction(); - mStatus = Status::_14; + mStatus = Status::Cancelled; return; } } @@ -401,7 +402,7 @@ void Handle::unloadAndResetUnitFlag20000() { } void Handle::resetUnitFlag20000IfSuccess() { - if (mFlags.isOff(Flag::_2)) + if (mFlags.isOff(Flag::LoadRequested)) return; ResourceUnit* unit = mUnit; @@ -420,14 +421,14 @@ bool Handle::isBusy() const { if (mTaskHandle.isTaskAttached()) return true; - if (mFlags.isOn(Flag::_2) && mUnit) + if (mFlags.isOn(Flag::LoadRequested) && mUnit) return mUnit->isTask1ActiveOrStatus7(); return false; } bool Handle::isReadyOrNeedsParse() const { - if ((mFlags.getDirect() & 0xA) != u32(Flag::_2) || isBusy()) + if ((mFlags.getDirect() & 0xA) != u32(Flag::LoadRequested) || isBusy()) return false; if (isReady()) @@ -448,13 +449,14 @@ bool Handle::checkLoadStatus() const { return false; bool ok = false; - if (mFlags.isOn(Flag::_2) && mUnit) + if (mFlags.isOn(Flag::LoadRequested) && mUnit) ok = mUnit->isStatus9_12_15(); - ok |= mStatus == Status::_1 || mStatus == Status::_2 || mStatus == Status::_3 || - mStatus == Status::_8 || mStatus == Status::_9 || mStatus == Status::_10 || - mStatus == Status::_11 || mStatus == Status::_12 || mStatus == Status::_13 || - mStatus == Status::_14; + ok |= mStatus == Status::_1 || mStatus == Status::SizeZero || mStatus == Status::_3 || + mStatus == Status::_8 || mStatus == Status::ParseFailed || + mStatus == Status::BadAllocSize || mStatus == Status::Edited || + mStatus == Status::BadHeapSize || mStatus == Status::FileDeviceError || + mStatus == Status::Cancelled; return ok; } @@ -476,7 +478,7 @@ void Handle::waitForResourceAndParse_(Context* context) { return; } - mStatus = Status::_9; + mStatus = Status::ParseFailed; updateResourceMgrFlag_(); requestUnload(); } diff --git a/src/KingSystem/Resource/resHandle.h b/src/KingSystem/Resource/resHandle.h index e97ff259..02fc311c 100644 --- a/src/KingSystem/Resource/resHandle.h +++ b/src/KingSystem/Resource/resHandle.h @@ -21,21 +21,29 @@ class Handle { SEAD_RTTI_BASE(Handle) public: enum class Status { - _0 = 0, + /// "No File" (2) + NoFile = 0, _1 = 1, - _2 = 2, + /// "Size Zero" (8) + SizeZero = 2, _3 = 3, _4 = 4, _5 = 5, _6 = 6, _7 = 7, _8 = 8, - _9 = 9, - _10 = 10, - _11 = 11, - _12 = 12, - _13 = 13, - _14 = 14, + /// "Compose NG" (9) + ParseFailed = 9, + /// "AllocSizeNG" (10) + BadAllocSize = 10, + /// "Edited" (11)? + Edited = 11, + /// "HeapSizeNG" (12) + BadHeapSize = 12, + /// "FileDeviceNG" (13) + FileDeviceError = 13, + /// "Canceled" (16) + Cancelled = 14, }; Handle(); @@ -49,7 +57,7 @@ public: sead::DirectResource* load(const sead::SafeString& path, const ILoadRequest* request, Status* out_status = nullptr); - bool isFlag2Set() const; + bool requestedLoad() const; bool requestLoad(const sead::SafeString& path, const ILoadRequest* request, Status* out_status = nullptr); @@ -57,7 +65,7 @@ public: bool waitForReady(const sead::TickSpan& span); bool parseResource(Context* context); - bool isFlag8Set() const; + bool hasParsedResource() const; void requestUnload(); void unload(); @@ -84,12 +92,12 @@ public: private: enum class Flag : u8 { - _1 = 0x1, - _2 = 0x2, - _4 = 0x4, - _7 = 0x7, - _8 = 0x8, - _F = 0xF, + Dummy = 0x1, + LoadRequested = 0x2, + UnloadRequested = 0x4, + LoadUnloadFlags = Dummy | LoadRequested | UnloadRequested, + Parsed = 0x8, + AllStatusFlags = LoadUnloadFlags | Parsed, }; void updateResourceMgrFlag_(); @@ -98,8 +106,8 @@ private: inline bool checkPathChange_(const sead::SafeString& path); - sead::TypedBitFlag mFlags = Flag::_1; - Status mStatus = Status::_0; + sead::TypedBitFlag mFlags = Flag::Dummy; + Status mStatus = Status::NoFile; ResourceUnit* mUnit = nullptr; util::ManagedTaskHandle mTaskHandle; sead::ListNode mListNode; diff --git a/src/KingSystem/Resource/resTempResourceLoader.cpp b/src/KingSystem/Resource/resTempResourceLoader.cpp index 704c7e30..f01f9aaf 100644 --- a/src/KingSystem/Resource/resTempResourceLoader.cpp +++ b/src/KingSystem/Resource/resTempResourceLoader.cpp @@ -74,7 +74,7 @@ void TempResourceLoader::requestLoad(LoadArg& arg) { } sead::DirectResource* TempResourceLoader::getResourceForLoadRequest(Context* context) { - if (!mLoadArg.use_handle || !mHandle.isFlag2Set() || mHandle.isFlag8Set() || + if (!mLoadArg.use_handle || !mHandle.requestedLoad() || mHandle.hasParsedResource() || !mHandle.isReadyOrNeedsParse()) { return nullptr; } diff --git a/src/KingSystem/Resource/resUnit.h b/src/KingSystem/Resource/resUnit.h index 61a5b544..26452773 100644 --- a/src/KingSystem/Resource/resUnit.h +++ b/src/KingSystem/Resource/resUnit.h @@ -177,7 +177,7 @@ private: FileSizeIsZero = 0x200, _400 = 0x400, FileSizeExceedsAllocSize = 0x800, - _1000 = 0x1000, + Edited = 0x1000, FileOrResInstanceTooLargeForHeap = 0x2000, LoadFailed = 0x4000, NeedToIncrementRefCount = 0x8000,