From d41d55ebd49ab787d9064a2e5cc44ab8ffcae3e1 Mon Sep 17 00:00:00 2001 From: Pistonight Date: Wed, 7 Aug 2024 21:07:55 -0700 Subject: [PATCH] loadMsgPack --- data/uking_functions.csv | 2 +- .../System/UI/LayoutResourceMgr.cpp | 30 +++++++++++++++++-- src/KingSystem/System/UI/LayoutResourceMgr.h | 3 +- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 462b2a60..5b2a5b70 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -88332,7 +88332,7 @@ Address,Quality,Size,Name 0x00000071010a24a8,U,000120, 0x00000071010a2520,O,000284,_ZN4ksys2ui17LayoutResourceMgr14createInstanceEPN4sead4HeapE 0x00000071010a263c,O,000268,_ZN4ksys2ui17LayoutResourceMgr4initEPN4sead4HeapE -0x00000071010a2748,U,000424,LayoutResourceMgr::loadMsgPack +0x00000071010a2748,O,000424,_ZN4ksys2ui17LayoutResourceMgr11loadMsgPackEPj 0x00000071010a28f0,U,000384,LayoutResourceMgr::__auto2 0x00000071010a2a70,U,000260,LayoutResourceMgr::loadLangFont 0x00000071010a2b74,U,000388,LayoutResourceMgr::__auto0 diff --git a/src/KingSystem/System/UI/LayoutResourceMgr.cpp b/src/KingSystem/System/UI/LayoutResourceMgr.cpp index 1620a782..99d80651 100644 --- a/src/KingSystem/System/UI/LayoutResourceMgr.cpp +++ b/src/KingSystem/System/UI/LayoutResourceMgr.cpp @@ -1,13 +1,15 @@ +#include +#include "KingSystem/Resource/resLoadRequest.h" +#include "KingSystem/System/StarterPackMgr.h" #include "LayoutResourceMgr.h" -#include "devenv/seadEnvUtil.h" namespace ksys::ui { SEAD_SINGLETON_DISPOSER_IMPL(LayoutResourceMgr) void LayoutResourceMgr::init(sead::Heap* heap) { - mHandleAtx28 = new (heap) res::Handle; + mMsgPackHandle = new (heap) res::Handle; mLangFontTodo = new (heap) res::Handle; mVersionRes = new (heap) res::Handle; int count; @@ -30,4 +32,28 @@ void LayoutResourceMgr::init(sead::Heap* heap) { } } +u8* LayoutResourceMgr::loadMsgPack(u32* size) { + mMsgPackHandle->resetUnitFlag20000IfSuccess(); + mMsgPackHandle->unload(); + + res::LoadRequest req; + req.mRequester = "LayoutResourceMgr"; + req._22 = true; + req._21 = true; + req.mLoadDataAlignment = 0x80; + req._26 = false; + req.mPackHandle = StarterPackMgr::instance()->getBootupLangPack(); + + sead::FixedSafeString<0x20> path; + path.format("Message/Msg_%s.product.sarc", sead::EnvUtil::getRegionLanguage().text()); + + res::Handle::Status status; + auto* resource = sead::DynamicCast( + mMsgPackHandle->load(path, &req, &status) + ); + + *size = resource->getRawSize(); + return resource->getRawData(); +} + } // namespace ksys::ui diff --git a/src/KingSystem/System/UI/LayoutResourceMgr.h b/src/KingSystem/System/UI/LayoutResourceMgr.h index 40800a9d..85e1c407 100644 --- a/src/KingSystem/System/UI/LayoutResourceMgr.h +++ b/src/KingSystem/System/UI/LayoutResourceMgr.h @@ -19,8 +19,9 @@ class LayoutResourceMgr { public: void init(sead::Heap* heap); + u8* loadMsgPack(u32* size); private: - res::Handle* mHandleAtx28 = nullptr; + res::Handle* mMsgPackHandle = nullptr; res::Handle* mLangFontTodo = nullptr; res::Handle* mVersionRes = nullptr; sead::FixedPtrArray mArray;