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)
This commit is contained in:
Léo Lam
2026-09-28 03:39:31 +02:00
parent 98f0c80f1d
commit 9d6a597e91
12 changed files with 66 additions and 61 deletions
+13 -13
View File
@@ -44846,15 +44846,15 @@ Address,Quality,Size,Name
0x00000071006cb0e4,U,000056,AI_F_AI_BowlPin
0x00000071006cb11c,U,000004,nullsub_5404
0x00000071006cb120,U,001872,sinitActors
0x00000071006cb870,O,000100,_ZN4ksys3act18ActorFactoryHolder18SingletonDisposer_D1Ev
0x00000071006cb8d4,O,000108,_ZN4ksys3act18ActorFactoryHolder18SingletonDisposer_D0Ev
0x00000071006cb940,O,000160,_ZN4ksys3act18ActorFactoryHolder14createInstanceEPN4sead4HeapE
0x00000071006cb9e0,O,000020,_ZN4ksys3act18ActorFactoryHolderD1Ev
0x00000071006cb9f4,O,000052,_ZN4ksys3act18ActorFactoryHolderD0Ev
0x00000071006cba28,O,000056,_ZN4ksys3act18ActorFactoryHolder4initEPN4sead4HeapE
0x00000071006cb870,O,000100,_ZN5uking3act18ActorFactoryHolder18SingletonDisposer_D1Ev
0x00000071006cb8d4,O,000108,_ZN5uking3act18ActorFactoryHolder18SingletonDisposer_D0Ev
0x00000071006cb940,O,000160,_ZN5uking3act18ActorFactoryHolder14createInstanceEPN4sead4HeapE
0x00000071006cb9e0,O,000020,_ZN5uking3act18ActorFactoryHolderD1Ev
0x00000071006cb9f4,O,000052,_ZN5uking3act18ActorFactoryHolderD0Ev
0x00000071006cba28,O,000056,_ZN5uking3act18ActorFactoryHolder4initEPN4sead4HeapE
0x00000071006cba60,U,000412,constructActor
0x00000071006cbbfc,O,000004,_ZN4ksys3act12ActorFactory5dummyEv
0x00000071006cbc00,O,000004,_ZN4ksys3act12ActorFactory6dummy2Ev
0x00000071006cbbfc,O,000004,_ZN5uking3act12ActorFactory5dummyEv
0x00000071006cbc00,O,000004,_ZN5uking3act12ActorFactory6dummy2Ev
0x00000071006cbc04,U,000016,AI::initBehaviors
0x00000071006cbc14,U,000056,AI_F_Behavior_SetEnableResetToInitialState
0x00000071006cbc4c,U,000056,AI_F_Behavior_SetWindForceScale
@@ -89239,11 +89239,11 @@ Address,Quality,Size,Name
0x00000071010b7600,U,000056,
0x00000071010b7638,U,000092,
0x00000071010b7694,U,000120,
0x00000071010b770c,O,000056,_ZN4ksys3res17CurrentResNameMgr18SingletonDisposer_D1Ev
0x00000071010b7744,O,000092,_ZN4ksys3res17CurrentResNameMgr18SingletonDisposer_D0Ev
0x00000071010b77a0,O,000120,_ZN4ksys3res17CurrentResNameMgr14createInstanceEPN4sead4HeapE
0x00000071010b7818,O,000004,_ZN4ksys3res17CurrentResNameMgr4initEPN4sead4HeapE
0x00000071010b781c,O,000032,_ZNK4ksys3res17CurrentResNameMgr17getCurrentResNameEv
0x00000071010b770c,O,000056,_ZN4ksys17CurrentResNameMgr18SingletonDisposer_D1Ev
0x00000071010b7744,O,000092,_ZN4ksys17CurrentResNameMgr18SingletonDisposer_D0Ev
0x00000071010b77a0,O,000120,_ZN4ksys17CurrentResNameMgr14createInstanceEPN4sead4HeapE
0x00000071010b7818,O,000004,_ZN4ksys17CurrentResNameMgr4initEPN4sead4HeapE
0x00000071010b781c,O,000032,_ZNK4ksys17CurrentResNameMgr17getCurrentResNameEv
0x00000071010b783c,U,000004,j__ZN4sead16ExceptionHandler10initializeEv
0x00000071010b7840,U,000224,
0x00000071010b7920,U,000444,GameConfig::initProperties
Can't render this file because it is too large.
+2
View File
@@ -16,6 +16,8 @@ target_sources(uking PRIVATE
aiAiFactories.h
aiQueryFactories.cpp
aiQueryFactories.h
actActorFactory.cpp
actActorFactory.h
actDragon.cpp
actDragon.h
actPlayerCreateMgr.cpp
@@ -1,7 +1,7 @@
#include "KingSystem/ActorSystem/actActorFactory.h"
#include "Game/Actor/actActorFactory.h"
#include "KingSystem/ActorSystem/actActorCreator.h"
namespace ksys::act {
namespace uking::act {
SEAD_SINGLETON_DISPOSER_IMPL(ActorFactoryHolder)
@@ -10,12 +10,12 @@ void ActorFactory::dummy() {}
void ActorFactory::dummy2() {}
ActorFactoryHolder::~ActorFactoryHolder() {
ActorCreator::deleteInstance();
ksys::act::ActorCreator::deleteInstance();
}
void ActorFactoryHolder::init(sead::Heap* heap) {
ActorCreator::createInstance(heap);
ActorCreator::instance()->setActorFactory(&mFactory);
ksys::act::ActorCreator::createInstance(heap);
ksys::act::ActorCreator::instance()->setActorFactory(&mFactory);
}
} // namespace ksys::act
} // namespace uking::act
+27
View File
@@ -0,0 +1,27 @@
#pragma once
#include <heap/seadDisposer.h>
#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
@@ -31,8 +31,6 @@ target_sources(uking PRIVATE
actActorCreator.h
actActorEditorNode.cpp
actActorEditorNode.h
actActorFactory.cpp
actActorFactory.h
actActorHeapUtil.cpp
actActorHeapUtil.h
actActorLimiter.cpp
+10 -3
View File
@@ -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<Actor>& getActorList() { return mActorList; }
@@ -81,7 +88,7 @@ private:
this, &ActorCreator::doCreateProc};
TaskRemoveCallbackT<ActorCreator> mTaskRemovedDelegate{this, &ActorCreator::onTaskRemoved};
sead::CriticalSection mActorListCS;
ActorFactory* mActorFactory;
IActorFactory* mActorFactory;
};
KSYS_CHECK_SIZE_NX150(ActorCreator, 0xf0);
@@ -1,29 +0,0 @@
#pragma once
#include <heap/seadDisposer.h>
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
@@ -3,7 +3,7 @@
#include <utility/aglParameter.h>
#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 {
-2
View File
@@ -94,8 +94,6 @@ target_sources(uking PRIVATE
resControlTask.h
resCounter.cpp
resCounter.h
resCurrentResNameMgr.cpp
resCurrentResNameMgr.h
resEntryFactory.cpp
resEntryFactory.h
resGameResourceSystem.cpp
+2
View File
@@ -13,6 +13,8 @@ target_sources(uking PRIVATE
CameraEditor.cpp
CameraEditor.h
CoreInfo.h
CurrentResNameMgr.cpp
CurrentResNameMgr.h
DebugFinder.cpp
DebugFinder.h
DebugMessage.h
@@ -1,6 +1,6 @@
#include "KingSystem/Resource/resCurrentResNameMgr.h"
#include "KingSystem/System/CurrentResNameMgr.h"
namespace ksys::res {
namespace ksys {
SEAD_SINGLETON_DISPOSER_IMPL(CurrentResNameMgr)
@@ -10,4 +10,4 @@ sead::SafeString CurrentResNameMgr::getCurrentResName() const {
return sead::SafeString::cEmptyString;
}
} // namespace ksys::res
} // namespace ksys
@@ -4,7 +4,7 @@
#include <prim/seadSafeString.h>
#include "KingSystem/Utils/Types.h"
namespace ksys::res {
namespace ksys {
/// Current Resource Name Manager?
/// Stubbed in release builds.
@@ -18,4 +18,4 @@ public:
};
KSYS_CHECK_SIZE_NX150(CurrentResNameMgr, 0x20);
} // namespace ksys::res
} // namespace ksys