From 16625875b3501b69c6463422697da4cc44d1eb39 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Thu, 12 Nov 2026 03:18:35 +0000 Subject: [PATCH] Decompile fn_18111 (PakRegistry::Add) Batch #17750 by eAthena: 0 byte-identical, 1 confirmed by peer review. - fn_18111 PakRegistry::Add: logic confirmed by peer review Peer-reviewed-by: Yommy, alisonrag, bibinir Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/Archive/MemMapPakFile.cpp | 5 +---- Source/Archive/MemMapPakFile.h | 22 +++++++++++++--------- Source/Archive/PakRegistry.cpp | 5 +---- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/Source/Archive/MemMapPakFile.cpp b/Source/Archive/MemMapPakFile.cpp index bb7fa2c9e..97ef73446 100644 --- a/Source/Archive/MemMapPakFile.cpp +++ b/Source/Archive/MemMapPakFile.cpp @@ -1,9 +1,6 @@ #include "Archive/MemMapPakFile.h" -// INLINED -CMemMapPakFile::CMemMapPakFile() { - this->Initialize(); -} +template __declspec(noinline) std::vector::~vector() noexcept; // OFFSET: 0x00AECAA0 // FUNCTION: fn_18140 diff --git a/Source/Archive/MemMapPakFile.h b/Source/Archive/MemMapPakFile.h index 2f41b381f..0b2dc3296 100644 --- a/Source/Archive/MemMapPakFile.h +++ b/Source/Archive/MemMapPakFile.h @@ -5,7 +5,11 @@ class CMemMapPakFile : public CPakFile { public: - CMemMapPakFile(); + // INLINED + explicit CMemMapPakFile(const char* filename) { + this->Initialize(); + this->Open(filename); + } ~CMemMapPakFile() override; void Initialize(); @@ -15,14 +19,14 @@ public: std::uint8_t* Read(std::uint64_t offset, std::uint32_t length) override; protected: - /* 0004 */ HANDLE m_handle; - /* 0008 */ HANDLE m_mapping; - /* 000C */ std::uint32_t m_viewSize; - /* 0010 */ std::uint32_t m_windowSize; - /* 0018 */ std::uint64_t m_size; - /* 0020 */ std::uint64_t m_viewOffset; - /* 0028 */ std::uint64_t m_offsetMask; - /* 0030 */ std::uint8_t* m_view; + /* 0004 */ HANDLE m_handle = nullptr; + /* 0008 */ HANDLE m_mapping = nullptr; + /* 000C */ std::uint32_t m_viewSize = 0; + /* 0010 */ std::uint32_t m_windowSize = 0; + /* 0018 */ std::uint64_t m_size = 0; + /* 0020 */ std::uint64_t m_viewOffset = 0; + /* 0028 */ std::uint64_t m_offsetMask = 0; + /* 0030 */ std::uint8_t* m_view = nullptr; /* 0034 */ std::vector m_buffer; }; diff --git a/Source/Archive/PakRegistry.cpp b/Source/Archive/PakRegistry.cpp index 6448ac86f..898e83722 100644 --- a/Source/Archive/PakRegistry.cpp +++ b/Source/Archive/PakRegistry.cpp @@ -20,10 +20,7 @@ PakRegistry::~PakRegistry() { // FUNCTION: fn_18111 bool PakRegistry::Add(const char* filename) { CGPak* archive = new CGPak; - CMemMapPakFile* file = new CMemMapPakFile; - if (file) { - file->Open(filename); - } + CMemMapPakFile* file = new CMemMapPakFile(filename); this->m_archives.emplace_front(file, archive); return this->m_archives.front().second->Open(this->m_archives.front().first);