From cdc3c895f1c1710fc46c8bb011f775c61bca60d7 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Wed, 28 Oct 2026 12:08:03 +0000 Subject: [PATCH] Decompile 2 functions in Source/Resource/ResourceMgr.cpp, Source/Resource/ResourceMgr.h Batch #1385 by Yommy: 0 byte-identical, 2 confirmed by peer review. - fn_18209 ResourceMgr::Instance: logic confirmed by peer review - fn_18189 ResourceMgr::UnloadAll: logic confirmed by peer review Reviewed-by: ragnarok-clanker --- Source/Resource/ResourceMgr.cpp | 26 +++++++++++++++++++++++++- Source/Resource/ResourceMgr.h | 6 +++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Source/Resource/ResourceMgr.cpp b/Source/Resource/ResourceMgr.cpp index 97b291c..bb86b1e 100644 --- a/Source/Resource/ResourceMgr.cpp +++ b/Source/Resource/ResourceMgr.cpp @@ -20,10 +20,18 @@ bool ResourceNameLess::operator()(const ResourceName* left, const ResourceName* } // INLINED -ResourceMgr::ResourceMgr(ResourceFailures& failures) : m_failures(&failures) { +ResourceMgr::ResourceMgr() : unknown_004C{} { InitializeCriticalSection(&this->m_lock); } +// OFFSET: 0x00AF1620 +// FUNCTION: fn_18209 +ResourceMgr& ResourceMgr::Instance() { + // GLOBAL: gl_24488 + static ResourceMgr g_resourceMgr; + return g_resourceMgr; +} + // OFFSET: 0x00AEE070 // FUNCTION: fn_18169 ResourceMgr::~ResourceMgr() { @@ -186,6 +194,22 @@ void ResourceMgr::EraseTransient(CRes* resource) { } } +// OFFSET: 0x00AF0680 +// FUNCTION: fn_18189 +void ResourceMgr::UnloadAll() { + this->m_transient.clear(); + + for (std::size_t type = 0; type < this->m_resources.size(); ++type) { + auto& resources = this->m_resources[type]; + for (auto entry = resources.begin(); entry != resources.end(); ++entry) { + entry->second->Unload(); + delete entry->second; + } + + resources.clear(); + } +} + // OFFSET: 0x00AF0A10 // FUNCTION: fn_18192 void ResourceMgr::ClearUnused(const char* extension) { diff --git a/Source/Resource/ResourceMgr.h b/Source/Resource/ResourceMgr.h index e057186..385bf7d 100644 --- a/Source/Resource/ResourceMgr.h +++ b/Source/Resource/ResourceMgr.h @@ -4,6 +4,7 @@ #include "Resource/Resource.h" #include "Resource/ResourceAliases.h" +#include #include #include #include @@ -16,14 +17,16 @@ struct ResourceNameLess { class ResourceMgr { public: - explicit ResourceMgr(ResourceFailures& failures); + ResourceMgr(); ~ResourceMgr(); + static ResourceMgr& Instance(); void Register(const char* extension, const char* prefix, CRes* prototype); int FindType(const char* extension) const; CRes* Find(int type, const char* name) const; CRes* Load(const char* name); void Remove(CRes* resource); bool Exists(const char* name); + void UnloadAll(); void ClearUnused(const char* extension); void ClearUnused(); void ClearExpired(const unsigned& reuseDelay); @@ -38,6 +41,7 @@ private: CRITICAL_SECTION m_lock; std::vector m_transient; ResourceFailures* m_failures; + std::uint32_t unknown_004C[17]; void EraseTransient(CRes* resource); ResourceMgr(const ResourceMgr&) = delete; ResourceMgr& operator=(const ResourceMgr&) = delete;