From 9d6a597e91fac5ecdca3f9903f90c7bdf5accd96 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: Actor: ActorFactory is game, CurrentResNameMgr is ksys ActorFactory's static initialiser fills its table with uking actor ctors. CurrentResNameMgr (0x71010b770c) links in KingSystem/System right before GameConfig. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5) --- src/Game/Actor/CMakeLists.txt | 2 ++ src/Game/Actor/actActorFactory.cpp | 21 ++++++++++++++++ src/Game/Actor/actActorFactory.h | 27 ++++++++++++++++++++ src/KingSystem/ActorSystem/CMakeLists.txt | 2 -- src/KingSystem/ActorSystem/actActorCreator.h | 13 +++++++--- src/KingSystem/ActorSystem/actActorFactory.cpp | 21 ---------------- src/KingSystem/ActorSystem/actActorFactory.h | 29 ---------------------- .../Resource/Actor/resResourceAIProgram.cpp | 2 +- src/KingSystem/Resource/CMakeLists.txt | 2 -- src/KingSystem/Resource/resCurrentResNameMgr.cpp | 13 ---------- src/KingSystem/Resource/resCurrentResNameMgr.h | 21 ---------------- src/KingSystem/System/CMakeLists.txt | 2 ++ src/KingSystem/System/CurrentResNameMgr.cpp | 13 ++++++++++ src/KingSystem/System/CurrentResNameMgr.h | 21 ++++++++++++++++ 14 files changed, 97 insertions(+), 92 deletions(-) create mode 100644 src/Game/Actor/actActorFactory.cpp create mode 100644 src/Game/Actor/actActorFactory.h delete mode 100644 src/KingSystem/ActorSystem/actActorFactory.cpp delete mode 100644 src/KingSystem/ActorSystem/actActorFactory.h delete mode 100644 src/KingSystem/Resource/resCurrentResNameMgr.cpp delete mode 100644 src/KingSystem/Resource/resCurrentResNameMgr.h create mode 100644 src/KingSystem/System/CurrentResNameMgr.cpp create mode 100644 src/KingSystem/System/CurrentResNameMgr.h (limited to 'src') diff --git a/src/Game/Actor/CMakeLists.txt b/src/Game/Actor/CMakeLists.txt index 7a61adbc..a48223b9 100644 --- a/src/Game/Actor/CMakeLists.txt +++ b/src/Game/Actor/CMakeLists.txt @@ -16,6 +16,8 @@ target_sources(uking PRIVATE aiAiFactories.h aiQueryFactories.cpp aiQueryFactories.h + actActorFactory.cpp + actActorFactory.h actDragon.cpp actDragon.h actPlayerCreateMgr.cpp diff --git a/src/Game/Actor/actActorFactory.cpp b/src/Game/Actor/actActorFactory.cpp new file mode 100644 index 00000000..16f2b916 --- /dev/null +++ b/src/Game/Actor/actActorFactory.cpp @@ -0,0 +1,21 @@ +#include "Game/Actor/actActorFactory.h" +#include "KingSystem/ActorSystem/actActorCreator.h" + +namespace uking::act { + +SEAD_SINGLETON_DISPOSER_IMPL(ActorFactoryHolder) + +void ActorFactory::dummy() {} + +void ActorFactory::dummy2() {} + +ActorFactoryHolder::~ActorFactoryHolder() { + ksys::act::ActorCreator::deleteInstance(); +} + +void ActorFactoryHolder::init(sead::Heap* heap) { + ksys::act::ActorCreator::createInstance(heap); + ksys::act::ActorCreator::instance()->setActorFactory(&mFactory); +} + +} // namespace uking::act diff --git a/src/Game/Actor/actActorFactory.h b/src/Game/Actor/actActorFactory.h new file mode 100644 index 00000000..3514f114 --- /dev/null +++ b/src/Game/Actor/actActorFactory.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include "KingSystem/ActorSystem/actActorCreator.h" + +namespace uking::act { + +class ActorFactory : public ksys::act::IActorFactory { +public: + void dummy() override; + ksys::act::BaseProc* createActor(const ksys::act::ActorCreateArg& arg) override; + void dummy2() override; +}; + +class ActorFactoryHolder { + SEAD_SINGLETON_DISPOSER(ActorFactoryHolder) + ActorFactoryHolder() = default; + virtual ~ActorFactoryHolder(); + +public: + void init(sead::Heap* heap); + +private: + ActorFactory mFactory; +}; + +} // namespace uking::act diff --git a/src/KingSystem/ActorSystem/CMakeLists.txt b/src/KingSystem/ActorSystem/CMakeLists.txt index 258cde69..1a549493 100644 --- a/src/KingSystem/ActorSystem/CMakeLists.txt +++ b/src/KingSystem/ActorSystem/CMakeLists.txt @@ -31,8 +31,6 @@ target_sources(uking PRIVATE actActorCreator.h actActorEditorNode.cpp actActorEditorNode.h - actActorFactory.cpp - actActorFactory.h actActorHeapUtil.cpp actActorHeapUtil.h actActorLimiter.cpp diff --git a/src/KingSystem/ActorSystem/actActorCreator.h b/src/KingSystem/ActorSystem/actActorCreator.h index 7560230d..cc1d1657 100644 --- a/src/KingSystem/ActorSystem/actActorCreator.h +++ b/src/KingSystem/ActorSystem/actActorCreator.h @@ -17,11 +17,18 @@ class Object; namespace ksys::act { class Actor; -class ActorFactory; +struct ActorCreateArg; class BaseProc; struct BaseProcCreateArg; class BaseProcHandle; +class IActorFactory { +public: + virtual void dummy() = 0; + virtual BaseProc* createActor(const ActorCreateArg& arg) = 0; + virtual void dummy2() = 0; +}; + class ActorCreator { SEAD_SINGLETON_DISPOSER(ActorCreator) ActorCreator(); @@ -39,7 +46,7 @@ public: void enableDistanceUnloadChecks(); void eraseActor(Actor* actor); - void setActorFactory(ActorFactory* factory) { mActorFactory = factory; } + void setActorFactory(IActorFactory* factory) { mActorFactory = factory; } bool get5a() const { return _5a; } sead::OffsetList& getActorList() { return mActorList; } @@ -81,7 +88,7 @@ private: this, &ActorCreator::doCreateProc}; TaskRemoveCallbackT mTaskRemovedDelegate{this, &ActorCreator::onTaskRemoved}; sead::CriticalSection mActorListCS; - ActorFactory* mActorFactory; + IActorFactory* mActorFactory; }; KSYS_CHECK_SIZE_NX150(ActorCreator, 0xf0); diff --git a/src/KingSystem/ActorSystem/actActorFactory.cpp b/src/KingSystem/ActorSystem/actActorFactory.cpp deleted file mode 100644 index 6a835f3f..00000000 --- a/src/KingSystem/ActorSystem/actActorFactory.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "KingSystem/ActorSystem/actActorFactory.h" -#include "KingSystem/ActorSystem/actActorCreator.h" - -namespace ksys::act { - -SEAD_SINGLETON_DISPOSER_IMPL(ActorFactoryHolder) - -void ActorFactory::dummy() {} - -void ActorFactory::dummy2() {} - -ActorFactoryHolder::~ActorFactoryHolder() { - ActorCreator::deleteInstance(); -} - -void ActorFactoryHolder::init(sead::Heap* heap) { - ActorCreator::createInstance(heap); - ActorCreator::instance()->setActorFactory(&mFactory); -} - -} // namespace ksys::act diff --git a/src/KingSystem/ActorSystem/actActorFactory.h b/src/KingSystem/ActorSystem/actActorFactory.h deleted file mode 100644 index 6fed82f4..00000000 --- a/src/KingSystem/ActorSystem/actActorFactory.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include - -namespace ksys::act { - -struct ActorCreateArg; -class BaseProc; - -class ActorFactory { -public: - virtual void dummy(); - virtual BaseProc* createActor(const ActorCreateArg& arg); - virtual void dummy2(); -}; - -class ActorFactoryHolder { - SEAD_SINGLETON_DISPOSER(ActorFactoryHolder) - ActorFactoryHolder() = default; - virtual ~ActorFactoryHolder(); - -public: - void init(sead::Heap* heap); - -private: - ActorFactory mFactory; -}; - -} // namespace ksys::act diff --git a/src/KingSystem/Resource/Actor/resResourceAIProgram.cpp b/src/KingSystem/Resource/Actor/resResourceAIProgram.cpp index bbe70ba1..1e0454d0 100644 --- a/src/KingSystem/Resource/Actor/resResourceAIProgram.cpp +++ b/src/KingSystem/Resource/Actor/resResourceAIProgram.cpp @@ -3,7 +3,7 @@ #include #include "KingSystem/ActorSystem/actAiActionBase.h" #include "KingSystem/ActorSystem/actAiClassDef.h" -#include "KingSystem/Resource/resCurrentResNameMgr.h" +#include "KingSystem/System/CurrentResNameMgr.h" #include "KingSystem/Utils/HeapUtil.h" namespace ksys::res { diff --git a/src/KingSystem/Resource/CMakeLists.txt b/src/KingSystem/Resource/CMakeLists.txt index 67177e15..1a9e5b28 100644 --- a/src/KingSystem/Resource/CMakeLists.txt +++ b/src/KingSystem/Resource/CMakeLists.txt @@ -94,8 +94,6 @@ target_sources(uking PRIVATE resControlTask.h resCounter.cpp resCounter.h - resCurrentResNameMgr.cpp - resCurrentResNameMgr.h resEntryFactory.cpp resEntryFactory.h resGameResourceSystem.cpp diff --git a/src/KingSystem/Resource/resCurrentResNameMgr.cpp b/src/KingSystem/Resource/resCurrentResNameMgr.cpp deleted file mode 100644 index f949afb7..00000000 --- a/src/KingSystem/Resource/resCurrentResNameMgr.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "KingSystem/Resource/resCurrentResNameMgr.h" - -namespace ksys::res { - -SEAD_SINGLETON_DISPOSER_IMPL(CurrentResNameMgr) - -void CurrentResNameMgr::init(sead::Heap*) {} - -sead::SafeString CurrentResNameMgr::getCurrentResName() const { - return sead::SafeString::cEmptyString; -} - -} // namespace ksys::res diff --git a/src/KingSystem/Resource/resCurrentResNameMgr.h b/src/KingSystem/Resource/resCurrentResNameMgr.h deleted file mode 100644 index b46487b7..00000000 --- a/src/KingSystem/Resource/resCurrentResNameMgr.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include -#include -#include "KingSystem/Utils/Types.h" - -namespace ksys::res { - -/// Current Resource Name Manager? -/// Stubbed in release builds. -class CurrentResNameMgr { - SEAD_SINGLETON_DISPOSER(CurrentResNameMgr) - CurrentResNameMgr() = default; - -public: - void init(sead::Heap* heap); - sead::SafeString getCurrentResName() const; -}; -KSYS_CHECK_SIZE_NX150(CurrentResNameMgr, 0x20); - -} // namespace ksys::res diff --git a/src/KingSystem/System/CMakeLists.txt b/src/KingSystem/System/CMakeLists.txt index 835eb40f..a2eb28ba 100644 --- a/src/KingSystem/System/CMakeLists.txt +++ b/src/KingSystem/System/CMakeLists.txt @@ -13,6 +13,8 @@ target_sources(uking PRIVATE CameraEditor.cpp CameraEditor.h CoreInfo.h + CurrentResNameMgr.cpp + CurrentResNameMgr.h DebugFinder.cpp DebugFinder.h DebugMessage.h diff --git a/src/KingSystem/System/CurrentResNameMgr.cpp b/src/KingSystem/System/CurrentResNameMgr.cpp new file mode 100644 index 00000000..53e7e755 --- /dev/null +++ b/src/KingSystem/System/CurrentResNameMgr.cpp @@ -0,0 +1,13 @@ +#include "KingSystem/System/CurrentResNameMgr.h" + +namespace ksys { + +SEAD_SINGLETON_DISPOSER_IMPL(CurrentResNameMgr) + +void CurrentResNameMgr::init(sead::Heap*) {} + +sead::SafeString CurrentResNameMgr::getCurrentResName() const { + return sead::SafeString::cEmptyString; +} + +} // namespace ksys diff --git a/src/KingSystem/System/CurrentResNameMgr.h b/src/KingSystem/System/CurrentResNameMgr.h new file mode 100644 index 00000000..dcdb261e --- /dev/null +++ b/src/KingSystem/System/CurrentResNameMgr.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include "KingSystem/Utils/Types.h" + +namespace ksys { + +/// Current Resource Name Manager? +/// Stubbed in release builds. +class CurrentResNameMgr { + SEAD_SINGLETON_DISPOSER(CurrentResNameMgr) + CurrentResNameMgr() = default; + +public: + void init(sead::Heap* heap); + sead::SafeString getCurrentResName() const; +}; +KSYS_CHECK_SIZE_NX150(CurrentResNameMgr, 0x20); + +} // namespace ksys -- cgit v1.2.3