From 44c75aa78a9d67fffcb67bccacb56b7f7878e21f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Mon, 28 Sep 2026 03:39:31 +0200 Subject: [PATCH] SystemPauseMgr and NXArgs are game code Both link in the game archive, and NXArgs uses game classes such as GameScene. The engine only calls SystemPauseMgr's virtuals, so it now goes through ksys::ISystemPauseMgr and no longer includes Game/. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5) --- data/uking_functions.csv | 42 +++++++++---------- src/Game/CMakeLists.txt | 4 ++ src/{KingSystem/System => Game}/NXArgs.cpp | 6 +-- src/{KingSystem/System => Game}/NXArgs.h | 4 +- .../System => Game}/SystemPauseMgr.cpp | 6 +-- src/Game/SystemPauseMgr.h | 34 +++++++++++++++ src/KingSystem/System/CMakeLists.txt | 4 -- src/KingSystem/System/OverlayArenaSystem.cpp | 1 - src/KingSystem/System/OverlayArenaSystem.h | 24 +++++++++-- src/KingSystem/System/OverlayArenaSystemS2.h | 4 +- src/KingSystem/System/SystemPauseMgr.h | 33 --------------- 11 files changed, 90 insertions(+), 72 deletions(-) rename src/{KingSystem/System => Game}/NXArgs.cpp (97%) rename src/{KingSystem/System => Game}/NXArgs.h (98%) rename src/{KingSystem/System => Game}/SystemPauseMgr.cpp (52%) create mode 100644 src/Game/SystemPauseMgr.h delete mode 100644 src/KingSystem/System/SystemPauseMgr.h diff --git a/data/uking_functions.csv b/data/uking_functions.csv index d9322b37..551ef6fd 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -54423,12 +54423,12 @@ Address,Quality,Size,Name 0x0000007100901a90,U,000068, 0x0000007100901ad4,U,000100, 0x0000007100901b38,U,000108, -0x0000007100901ba4,O,000164,_ZN4ksys6nxargs14createInstanceEPN4sead4HeapE -0x0000007100901c48,U,000152,nxargs::dtor -0x0000007100901ce0,U,000148,nxargs::dtorDelete -0x0000007100901d74,O,000804,_ZN4ksys6nxargs4initEPN4sead4HeapE -0x0000007100902098,O,000632,_ZN4ksys6nxargs12allocEntriesEPN4sead4HeapEPKh -0x0000007100902310,U,000320,_ZN4ksys6nxargs10handleArgsEv +0x0000007100901ba4,O,000164,_ZN5uking6nxargs14createInstanceEPN4sead4HeapE +0x0000007100901c48,U,000152,uking::nxargs::dtor +0x0000007100901ce0,U,000148,uking::nxargs::dtorDelete +0x0000007100901d74,O,000804,_ZN5uking6nxargs4initEPN4sead4HeapE +0x0000007100902098,O,000632,_ZN5uking6nxargs12allocEntriesEPN4sead4HeapEPKh +0x0000007100902310,U,000320,_ZN5uking6nxargs10handleArgsEv 0x0000007100902450,U,002848, 0x0000007100902f70,U,000004,j__ZdlPv_410 0x0000007100902f74,U,000240,_ZN4sead15FixedSafeStringILi37EEaSERKNS_14SafeStringBaseIcEE @@ -54583,22 +54583,22 @@ Address,Quality,Size,Name 0x000000710090add8,U,000008, 0x000000710090ade0,U,000040, 0x000000710090ae08,U,000384, -0x000000710090af88,O,000028,_ZN4ksys14SystemPauseMgrC1Ev -0x000000710090afa4,O,000004,_ZN4ksys14SystemPauseMgrD1Ev -0x000000710090afa8,O,000004,_ZN4ksys14SystemPauseMgrD0Ev +0x000000710090af88,O,000028,_ZN5uking14SystemPauseMgrC1Ev +0x000000710090afa4,O,000004,_ZN5uking14SystemPauseMgrD1Ev +0x000000710090afa8,O,000004,_ZN5uking14SystemPauseMgrD0Ev 0x000000710090afac,U,000004,j_nullsub_3106 -0x000000710090afb0,U,000152, -0x000000710090b048,U,000224, -0x000000710090b128,U,000124, -0x000000710090b1a4,U,000096, -0x000000710090b204,U,000252, -0x000000710090b300,U,000072, -0x000000710090b348,U,000096, -0x000000710090b3a8,U,000280, -0x000000710090b4c0,U,000240, -0x000000710090b5b0,U,000236,RootTaskStuff::openFadeScreen -0x000000710090b69c,U,000312, -0x000000710090b7d4,U,000072, +0x000000710090afb0,U,000152,uking::SystemPauseMgr::waitForOnUiActorMgrAndBlockSaveMaybe +0x000000710090b048,U,000224,uking::SystemPauseMgr::stopNfpAndWaitForSaveMgr +0x000000710090b128,U,000124,uking::SystemPauseMgr::waitForOnUiActorMgr +0x000000710090b1a4,U,000096,uking::SystemPauseMgr::pauseGameSceneAndWait +0x000000710090b204,U,000252,uking::SystemPauseMgr::releaseScreensAndShowMainLayer +0x000000710090b300,U,000072,uking::SystemPauseMgr::onSystemPauseResume +0x000000710090b348,U,000096,uking::SystemPauseMgr::waitForStageGenFinalStep +0x000000710090b3a8,U,000280,uking::SystemPauseMgr::restoreMainLayerAndResumeGameScene +0x000000710090b4c0,U,000240,uking::SystemPauseMgr::hideMainLayer +0x000000710090b5b0,U,000236,uking::SystemPauseMgr::openFadeScreen +0x000000710090b69c,U,000312,uking::SystemPauseMgr::showMainLayerAndResumeProcJobs +0x000000710090b7d4,U,000072,uking::SystemPauseMgr::clearHideMainLayerAndResumeEvents 0x000000710090b81c,U,001044, 0x000000710090bc30,U,000268,setPauseState1 0x000000710090bd3c,U,000300,setPauseState0 diff --git a/src/Game/CMakeLists.txt b/src/Game/CMakeLists.txt index e7a19dc2..47255a1a 100644 --- a/src/Game/CMakeLists.txt +++ b/src/Game/CMakeLists.txt @@ -12,4 +12,8 @@ target_sources(uking PRIVATE gamePlayReport.h E3Mgr.cpp E3Mgr.h + NXArgs.cpp + NXArgs.h + SystemPauseMgr.cpp + SystemPauseMgr.h ) diff --git a/src/KingSystem/System/NXArgs.cpp b/src/Game/NXArgs.cpp similarity index 97% rename from src/KingSystem/System/NXArgs.cpp rename to src/Game/NXArgs.cpp index 46df7f39..9fa4b397 100644 --- a/src/KingSystem/System/NXArgs.cpp +++ b/src/Game/NXArgs.cpp @@ -1,6 +1,6 @@ -#include "KingSystem/System/NXArgs.h" +#include "Game/NXArgs.h" -namespace ksys { +namespace uking { SEAD_SINGLETON_DISPOSER_IMPL(nxargs) @@ -75,4 +75,4 @@ void nxargs::allocEntries(sead::Heap* heap, const u8* data) { } } -} // namespace ksys \ No newline at end of file +} // namespace uking \ No newline at end of file diff --git a/src/KingSystem/System/NXArgs.h b/src/Game/NXArgs.h similarity index 98% rename from src/KingSystem/System/NXArgs.h rename to src/Game/NXArgs.h index 6ba6696e..8246d017 100644 --- a/src/KingSystem/System/NXArgs.h +++ b/src/Game/NXArgs.h @@ -9,7 +9,7 @@ #include #include "KingSystem/Utils/Types.h" -namespace ksys { +namespace uking { class nxargs { SEAD_SINGLETON_DISPOSER(nxargs) @@ -96,4 +96,4 @@ private: }; KSYS_CHECK_SIZE_NX150(nxargs, 0x48); -} // namespace ksys \ No newline at end of file +} // namespace uking \ No newline at end of file diff --git a/src/KingSystem/System/SystemPauseMgr.cpp b/src/Game/SystemPauseMgr.cpp similarity index 52% rename from src/KingSystem/System/SystemPauseMgr.cpp rename to src/Game/SystemPauseMgr.cpp index ce8ddbdf..120f165f 100644 --- a/src/KingSystem/System/SystemPauseMgr.cpp +++ b/src/Game/SystemPauseMgr.cpp @@ -1,9 +1,9 @@ -#include "KingSystem/System/SystemPauseMgr.h" +#include "Game/SystemPauseMgr.h" -namespace ksys { +namespace uking { SystemPauseMgr::SystemPauseMgr() = default; SystemPauseMgr::~SystemPauseMgr() = default; -} // namespace ksys +} // namespace uking diff --git a/src/Game/SystemPauseMgr.h b/src/Game/SystemPauseMgr.h new file mode 100644 index 00000000..bbfdd218 --- /dev/null +++ b/src/Game/SystemPauseMgr.h @@ -0,0 +1,34 @@ +#pragma once + +#include "KingSystem/System/OverlayArenaSystem.h" +#include "KingSystem/Utils/Types.h" + +namespace uking { + +class SystemPauseMgr : public ksys::ISystemPauseMgr { +public: + SystemPauseMgr(); + ~SystemPauseMgr() override; + + void m2() override; + void waitForOnUiActorMgrAndBlockSaveMaybe() override; + void stopNfpAndWaitForSaveMgr() override; + void waitForOnUiActorMgr() override; + void pauseGameSceneAndWait() override; + bool releaseScreensAndShowMainLayer() override; + void onSystemPauseResume() override; + void waitForStageGenFinalStep() override; + void restoreMainLayerAndResumeGameScene() override; + bool hideMainLayer() override; + void openFadeScreen() override; + void showMainLayerAndResumeProcJobs() override; + void clearHideMainLayerAndResumeEvents() override; + + bool wasMainLayerVisible() const { return mMainLayerWasVisible; } + +private: + bool mMainLayerWasVisible = true; +}; +KSYS_CHECK_SIZE_NX150(SystemPauseMgr, 0x10); + +} // namespace uking diff --git a/src/KingSystem/System/CMakeLists.txt b/src/KingSystem/System/CMakeLists.txt index 340ab774..835eb40f 100644 --- a/src/KingSystem/System/CMakeLists.txt +++ b/src/KingSystem/System/CMakeLists.txt @@ -27,8 +27,6 @@ target_sources(uking PRIVATE MemoryProfiler.h MessageCapture.cpp MessageCapture.h - NXArgs.cpp - NXArgs.h OcclusionQueryCylinder.cpp OcclusionQueryCylinder.h OverlayArena.cpp @@ -50,8 +48,6 @@ target_sources(uking PRIVATE StarterPackMgr.cpp StarterPackMgr.h StringBoard.h - SystemPauseMgr.cpp - SystemPauseMgr.h SystemTimers.cpp SystemTimers.h Terminal.cpp diff --git a/src/KingSystem/System/OverlayArenaSystem.cpp b/src/KingSystem/System/OverlayArenaSystem.cpp index 1731b491..bafb705a 100644 --- a/src/KingSystem/System/OverlayArenaSystem.cpp +++ b/src/KingSystem/System/OverlayArenaSystem.cpp @@ -6,7 +6,6 @@ #include "KingSystem/Resource/resSystem.h" #include "KingSystem/Sound/sndResource.h" #include "KingSystem/System/OverlayArena.h" -#include "KingSystem/System/SystemPauseMgr.h" #include "KingSystem/Terrain/teraSystem.h" #include "KingSystem/Utils/Thread/Task.h" #include "KingSystem/Utils/Thread/TaskThread.h" diff --git a/src/KingSystem/System/OverlayArenaSystem.h b/src/KingSystem/System/OverlayArenaSystem.h index 73d55373..a0a3cd71 100644 --- a/src/KingSystem/System/OverlayArenaSystem.h +++ b/src/KingSystem/System/OverlayArenaSystem.h @@ -23,7 +23,25 @@ class TaskThread; } // namespace util class OverlayArena; -class SystemPauseMgr; + +class ISystemPauseMgr { +public: + virtual ~ISystemPauseMgr() = default; + + virtual void m2() = 0; + virtual void waitForOnUiActorMgrAndBlockSaveMaybe() = 0; + virtual void stopNfpAndWaitForSaveMgr() = 0; + virtual void waitForOnUiActorMgr() = 0; + virtual void pauseGameSceneAndWait() = 0; + virtual bool releaseScreensAndShowMainLayer() = 0; + virtual void onSystemPauseResume() = 0; + virtual void waitForStageGenFinalStep() = 0; + virtual void restoreMainLayerAndResumeGameScene() = 0; + virtual bool hideMainLayer() = 0; + virtual void openFadeScreen() = 0; + virtual void showMainLayerAndResumeProcJobs() = 0; + virtual void clearHideMainLayerAndResumeEvents() = 0; +}; // FIXME: incomplete class OverlayArenaSystem { @@ -34,7 +52,7 @@ class OverlayArenaSystem { public: struct InitArg { - SystemPauseMgr* system_pause_mgr; + ISystemPauseMgr* system_pause_mgr; }; bool init(const InitArg& arg, sead::Heap* heap); @@ -95,7 +113,7 @@ private: OverlayArena* mAudioArena = nullptr; OverlayArena* mUnknownArena = nullptr; sead::Heap* mJpegHeap = nullptr; - SystemPauseMgr* mSystemPauseMgr = nullptr; + ISystemPauseMgr* mSystemPauseMgr = nullptr; OverlayArenaSystemS1 mS1; u32 _b8 = 0; util::TaskThread* mPrepareThread = nullptr; diff --git a/src/KingSystem/System/OverlayArenaSystemS2.h b/src/KingSystem/System/OverlayArenaSystemS2.h index f40f735c..792cc12f 100644 --- a/src/KingSystem/System/OverlayArenaSystemS2.h +++ b/src/KingSystem/System/OverlayArenaSystemS2.h @@ -6,15 +6,15 @@ namespace ksys { +class ISystemPauseMgr; class OverlayArenaSystemS1; -class SystemPauseMgr; // FIXME: incomplete class OverlayArenaSystemS2 { public: struct InitArg { OverlayArenaSystemS1* s1; - SystemPauseMgr* system_pause_mgr; + ISystemPauseMgr* system_pause_mgr; }; OverlayArenaSystemS2(); diff --git a/src/KingSystem/System/SystemPauseMgr.h b/src/KingSystem/System/SystemPauseMgr.h deleted file mode 100644 index 43ca4efc..00000000 --- a/src/KingSystem/System/SystemPauseMgr.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include "KingSystem/Utils/Types.h" - -namespace ksys { - -class SystemPauseMgr { -public: - SystemPauseMgr(); - virtual ~SystemPauseMgr(); - - virtual void m2(); - virtual void m3(); - virtual void m4(); - virtual void m5(); - virtual void m6(); - virtual bool m7(); - virtual void m8(); - virtual void m9(); - virtual void m10(); - virtual bool m11(); - virtual void m12(); - virtual void m13(); - virtual void m14(); - - bool get8() const { return _8; } - -private: - bool _8 = true; -}; -KSYS_CHECK_SIZE_NX150(SystemPauseMgr, 0x10); - -} // namespace ksys