From a5fb0a1632c05166d18489bfeeee53ba173cdabd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Tue, 29 Sep 2026 03:50:00 +0200 Subject: [PATCH 1/4] aoc: fix the HardMode flag name The flag is "AoC_HardMode_Enabled", as 0x71008e3dbc returns; tools/check ignores string literals, so the misspelling still matched. (AI assisted using Claude Opus 5.5) --- data/uking_functions.csv | 2 +- src/KingSystem/GameData/gdtSpecialFlagNames.cpp | 2 +- src/KingSystem/GameData/gdtSpecialFlagNames.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 61735102..be9e0c43 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -53691,7 +53691,7 @@ Address,Quality,Size,Name 0x00000071008bf844,U,000092, 0x00000071008bf8a0,O,000004,_ZN4ksys3gdt15initCommonFlagsEv 0x00000071008bf8a4,O,148760,_ZN4ksys3gdt16initCommonFlags_Ev -0x00000071008e3dbc,O,000012,_ZN4ksys3gdt8flagname20Aoc_HardMode_EnabledEv +0x00000071008e3dbc,O,000012,_ZN4ksys3gdt8flagname20AoC_HardMode_EnabledEv 0x00000071008e3dc8,O,000012,_ZN4ksys3gdt8flagname16BowPorchStockNumEv 0x00000071008e3dd4,O,000012,_ZN4ksys3gdt8flagname15CaptionPictSizeEv 0x00000071008e3de0,O,000012,_ZN4ksys3gdt8flagname11CurrentHartEv diff --git a/src/KingSystem/GameData/gdtSpecialFlagNames.cpp b/src/KingSystem/GameData/gdtSpecialFlagNames.cpp index 7ff7cdac..3c08f75f 100644 --- a/src/KingSystem/GameData/gdtSpecialFlagNames.cpp +++ b/src/KingSystem/GameData/gdtSpecialFlagNames.cpp @@ -7,7 +7,7 @@ namespace ksys::gdt::flagname { return #name; \ } -GDT_DEFINE_SPECIAL_FLAG_NAME(Aoc_HardMode_Enabled) +GDT_DEFINE_SPECIAL_FLAG_NAME(AoC_HardMode_Enabled) GDT_DEFINE_SPECIAL_FLAG_NAME(BowPorchStockNum) GDT_DEFINE_SPECIAL_FLAG_NAME(CaptionPictSize) GDT_DEFINE_SPECIAL_FLAG_NAME(CurrentHart) diff --git a/src/KingSystem/GameData/gdtSpecialFlagNames.h b/src/KingSystem/GameData/gdtSpecialFlagNames.h index 6494c33e..729b55b8 100644 --- a/src/KingSystem/GameData/gdtSpecialFlagNames.h +++ b/src/KingSystem/GameData/gdtSpecialFlagNames.h @@ -2,7 +2,7 @@ namespace ksys::gdt::flagname { -const char* Aoc_HardMode_Enabled(); +const char* AoC_HardMode_Enabled(); const char* BowPorchStockNum(); const char* CaptionPictSize(); const char* CurrentHart(); From b0404a363045479527eb365e4724f632cf1d0fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Tue, 29 Sep 2026 03:50:01 +0200 Subject: [PATCH 2/4] data: fix O rows tools/check cannot tell apart Each pair differs only in the vtable it installs or slot it fills, which tools/check ignores. E.g. 0x7100b15bf4 installs FileDeviceReadStream's vtable, and the ASAssetResource/ASAssetExResource D0 rows were swapped. (AI assisted using Claude Opus 5.5) --- data/uking_functions.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index be9e0c43..9c9301e8 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -63895,7 +63895,7 @@ Address,Quality,Size,Name 0x0000007100b15a18,O,000160,_ZN4sead21FileDeviceWriteStreamC1EPNS_10FileHandleENS_6Stream5ModesE 0x0000007100b15ab8,O,000160,_ZN4sead21FileDeviceWriteStreamD2Ev 0x0000007100b15b58,O,000156,_ZN4sead21FileDeviceWriteStreamD0Ev -0x0000007100b15bf4,O,000132,_ZN4sead21FileDeviceWriteStreamC1ENS_6Stream5ModesE +0x0000007100b15bf4,O,000132,_ZN4sead20FileDeviceReadStreamC1ENS_6Stream5ModesE 0x0000007100b15c78,O,000124,_ZN4sead20FileDeviceReadStreamD2Ev 0x0000007100b15cf4,O,000120,_ZN4sead20FileDeviceReadStreamD0Ev 0x0000007100b15d6c,O,000080,_ZN4sead20FileDeviceReadStream13setFileHandleEPNS_10FileHandleE @@ -97135,7 +97135,7 @@ Address,Quality,Size,Name 0x00000071012eed30,O,000132,_ZN4ksys3res17ASBlenderResourceD0Ev 0x00000071012eedb4,O,000204,_ZNK4ksys3res15ASAssetResource27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE 0x00000071012eee80,O,000092,_ZNK4ksys3res15ASAssetResource18getRuntimeTypeInfoEv -0x00000071012eeedc,O,000088,_ZN4ksys3res17ASAssetExResourceD0Ev +0x00000071012eeedc,O,000088,_ZN4ksys3res15ASAssetResourceD0Ev 0x00000071012eef34,O,000008,_ZN4ksys3res10ASResource2m4Ev 0x00000071012eef3c,O,000008,_ZN4ksys3res10ASResource2m5Ev 0x00000071012eef44,O,000008,_ZN4ksys3res10ASResource2m6Ev @@ -97193,7 +97193,7 @@ Address,Quality,Size,Name 0x00000071012f03fc,O,000288,_ZNK4ksys3res17ASAssetExResource27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE 0x00000071012f051c,O,000092,_ZNK4ksys3res17ASAssetExResource18getRuntimeTypeInfoEv 0x00000071012f0578,O,000100,_ZN4ksys3res15ASAssetResourceD2Ev -0x00000071012f05dc,O,000088,_ZN4ksys3res15ASAssetResourceD0Ev +0x00000071012f05dc,O,000088,_ZN4ksys3res17ASAssetExResourceD0Ev 0x00000071012f0634,O,000008,_ZN4ksys3res17ASAssetExResource2m5Ev 0x00000071012f063c,O,000708,_ZN4ksys3res17ASFrameCtrlParser5parseERKNS0_13ASParamParser9ParseArgsE 0x00000071012f0900,O,001036,_ZN4ksys3res21ASTriggerEventsParser5parseERKNS0_13ASParamParser9ParseArgsE From 8b562cb79124a6eb4cac36218291f734c0a0ca8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Tue, 29 Sep 2026 03:50:01 +0200 Subject: [PATCH 3/4] gdt: rename IncreaseLogger to DeferredFlagWriter It logs nothing: it queues flag increments per core and GameDataMgr::calc0 applies them once per frame. The IDB already uses this name. (AI assisted using Claude Opus 5.5) --- data/uking_functions.csv | 4 ++-- src/KingSystem/GameData/gdtManager.cpp | 14 +++++++------- src/KingSystem/GameData/gdtManager.h | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 9c9301e8..913929c7 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -76506,7 +76506,7 @@ Address,Quality,Size,Name 0x0000007100dcf088,O,000280,_ZN4sead9SafeArrayIN4ksys3res6HandleELi32EED2Ev 0x0000007100dcf1a0,O,000036,_ZN4ksys3gdt7ManagerD0Ev 0x0000007100dcf1c4,m,001264,_ZN4ksys3gdt7Manager4initEPN4sead4HeapEPNS2_9FrameworkE -0x0000007100dcf6b4,O,000704,_ZN4ksys3gdt7Manager14IncreaseLoggerC2Ev +0x0000007100dcf6b4,O,000704,_ZN4ksys3gdt7Manager18DeferredFlagWriterC2Ev 0x0000007100dcf974,O,000068,_ZN4ksys3res12EntryFactoryINS0_8GameDataEED2Ev 0x0000007100dcf9b8,U,001692,GameDataMgr::loadGameDataFromArc 0x0000007100dd0054,O,000600,_ZN4ksys3gdt7Manager20loadShopGameDataInfoERKN4sead14SafeStringBaseIcEE @@ -77263,7 +77263,7 @@ Address,Quality,Size,Name 0x0000007100e02ba8,O,000068,_ZNK4ksys3gdt8FlagBase10isBoolean_Ev 0x0000007100e02bec,O,000088,_ZNK4ksys3gdt8FlagBase19setCategoryForBool_EPvj 0x0000007100e02c44,O,000080,_ZNK4ksys3gdt8FlagBase19getCategoryForBool_EPKv -0x0000007100e02c94,O,000248,_ZN4ksys3gdt7Manager14IncreaseLogger9addRecordEiRKN4sead14SafeStringBaseIcEEib +0x0000007100e02c94,O,000248,_ZN4ksys3gdt7Manager18DeferredFlagWriter9addRecordEiRKN4sead14SafeStringBaseIcEEib 0x0000007100e02d8c,U,000952,gdt::HorribleMess::x_2 0x0000007100e03144,U,000100,SaveMgr::Disposer::dtor 0x0000007100e031a8,U,000108,SaveMgr::Disposer::dtorDelete diff --git a/src/KingSystem/GameData/gdtManager.cpp b/src/KingSystem/GameData/gdtManager.cpp index 2e68921f..c067801d 100644 --- a/src/KingSystem/GameData/gdtManager.cpp +++ b/src/KingSystem/GameData/gdtManager.cpp @@ -83,7 +83,7 @@ void Manager::init(sead::Heap* heap, sead::Framework* framework) { mGameDataHeap = util::DualHeap::create(0xf00000, "GameDataHeap", heap, nullptr, sizeof(void*), sead::Heap::cHeapDirection_Forward, true); - mIncreaseLogger = new (mGameDataHeap) IncreaseLogger; + mDeferredFlagWriter = new (mGameDataHeap) DeferredFlagWriter; SaveMgr::createInstance(mGameDataHeap); SaveMgr::InitArg arg; @@ -556,8 +556,8 @@ void Manager::incrementS32NoCheck(s32 value, const sead::SafeString& name) { s32 current = 0; if (getParamBypassPerm().get().getS32(¤t, name)) setS32NoCheck(current + value, name); - } else if (mIncreaseLogger) { - mIncreaseLogger->addRecord(value, name, -1, true); + } else if (mDeferredFlagWriter) { + mDeferredFlagWriter->addRecord(value, name, -1, true); } } @@ -569,13 +569,13 @@ void Manager::incrementS32(s32 value, const sead::SafeString& name) { s32 current = 0; if (getParam().get().getS32(¤t, name)) setS32(current + value, name); - } else if (mIncreaseLogger) { - mIncreaseLogger->addRecord(value, name, -1, false); + } else if (mDeferredFlagWriter) { + mDeferredFlagWriter->addRecord(value, name, -1, false); } } -void Manager::IncreaseLogger::addRecord(s32 value, const sead::SafeString& name, s32 sub_idx, - bool debug) { +void Manager::DeferredFlagWriter::addRecord(s32 value, const sead::SafeString& name, s32 sub_idx, + bool debug) { const u32 name_hash = sead::HashCRC32::calcStringHash(name); const auto core = sead::CoreInfo::getCurrentCoreId(); const u32 platform_core_id = sead::CoreInfo::getPlatformCoreId(core); diff --git a/src/KingSystem/GameData/gdtManager.h b/src/KingSystem/GameData/gdtManager.h index 923cea2d..add2ba02 100644 --- a/src/KingSystem/GameData/gdtManager.h +++ b/src/KingSystem/GameData/gdtManager.h @@ -481,10 +481,10 @@ public: void incrementS32(s32 value, const sead::SafeString& name); void increaseS32CommonFlag(s32 value, const sead::SafeString& name, s32 sub_idx, bool debug) { - if (!mIncreaseLogger) + if (!mDeferredFlagWriter) return; - mIncreaseLogger->addRecord(value, name, sub_idx, debug); + mDeferredFlagWriter->addRecord(value, name, sub_idx, debug); if (debug) onChangedByDebug(); } @@ -554,7 +554,7 @@ private: sead::MethodTreeMgr* method_tree_mgr = nullptr; }; - struct IncreaseLogger { + struct DeferredFlagWriter { struct Record { bool debug = false; u32 name_hash = 0; @@ -646,7 +646,7 @@ private: TriggerParamRef mParamBypassPerm{&mFlagBuffer1, &mFlagBuffer, false, false, false}; TriggerParamRef mParam{&mFlagBuffer1, &mFlagBuffer, true, false, false}; - IncreaseLogger* mIncreaseLogger = nullptr; + DeferredFlagWriter* mDeferredFlagWriter = nullptr; TriggerParam* mFlagBuffer1; TriggerParam* mFlagBuffer; From 98c1e3bdbfefaefd7386509c09a64b6f3213154f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Tue, 29 Sep 2026 03:50:01 +0200 Subject: [PATCH 4/4] OverlayArenaSystem: S2's delegate is a task delegate The vtable its ctor installs (0x710251A960) is a Delegate1R, and the callback returns bool. (AI assisted using Claude Opus 5.5) --- src/KingSystem/System/OverlayArenaSystemS2.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KingSystem/System/OverlayArenaSystemS2.h b/src/KingSystem/System/OverlayArenaSystemS2.h index 2a43c72a..f40f735c 100644 --- a/src/KingSystem/System/OverlayArenaSystemS2.h +++ b/src/KingSystem/System/OverlayArenaSystemS2.h @@ -23,7 +23,7 @@ public: private: u32 _0 = 0; - sead::Delegate1 mDelegate; + sead::Delegate1R mDelegate; u32 _28 = 1; void* _30 = nullptr; void* _38 = nullptr;