summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
34 hoursMerge pull request #238 from leoetlino/stack/05a-csv-uking-mechanicalHEADmasterLéo Lam
CSV: mechanical renames for uking functions
44 hoursMerge pull request #237 from leoetlino/stack/04b-sinitsLéo Lam
data: name TU static initialisers
5 daystools: Force the linker to use clang hashes for ELF (#235)Michael Zhao
6 daystools: Force the linker to use clang hashes for ELFSebastian August Snoer
2026-10-19Merge pull request #233 from leoetlino/stack/04-csv-librariesLéo Lam
Update functions CSV for library functions
2026-10-19data: name uking ctors, dtors, RTTI and thunksLéo Lam
Names come from the shape of each body, its vtable slot and the singleton disposer pattern. Thunks are named after the slot they forward to (e.g. IndoorStageMapProps::m2 is actually IndoorStage::getMapFileNameForPlayerPos_thunk10). Also renames the j__ZdlPv_NNN operator delete stubs to dtorDelete, and two j_ stubs after the uking functions they jump to. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: move game rows into namespace ukingLéo Lam
The decomp's top-level game headers declare namespace uking. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: apply mechanical name fixes to uking::uiLéo Lam
Most of these just gain the uking::ui namespace, the owner class the CSV already uses for that code, or the SingletonDisposer_ spelling. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name uking::ui ctors, dtors, RTTI getters and thunksLéo Lam
In the IDB, UI parts are identified by vtables that derive from the common part base; map icons, markers, resources and managers by their own vtables. Type info getters are named after eui's GetRuntimeTypeInfo (from Labo symbols), and sead-style ones keep sead's names. SingletonDisposer_ dtors follow sead's singleton macro. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: apply mechanical name fixes to uking::ui screensLéo Lam
Screen rows that already had a decomp name move into uking::ui. ScreenEx and ScreenAppCamera overrides take the trailing underscore of the eui::Screen virtuals they override, such as doBuildLayout_. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name uking::ui screen dtors, thunks and RTTI gettersLéo Lam
Screens have secondary vtables at +0x108 and +0x110, hence the _thunk108/_thunk110 suffixes on the dtor thunks. The 4-byte j_ScreenEx::m0 jump stubs are screen dtors; most of them sit right before their screen's dtor_thunk108. RTTI getters take sead's checkDerivedRuntimeTypeInfo/getRuntimeTypeInfo names. The namespace is uking::ui, as in src/Game/UI. Also renames some PauseMenuScreen rows to ScreenPauseMenu, the name its ctor row uses. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: propagate vtable slot names in uking::actLéo Lam
m<N> placeholders take the name of the slot they override. Slot names come from actBaseProc.h/actActor.h where declared, otherwise from the IDB's name for the base class's slot. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name uking::act ctors, dtors, RTTI getters and thunksLéo Lam
Adjustor thunks keep a suffix taken from their vtable's offset-to-top, e.g. _thunk180 for actors' first secondary vtable. A few ActorOption and DamageMgrBow dtor thunks use mangled non-virtual thunk names instead. Plain forwarding thunks take a j_ prefix on their target's name. Also names five deleteInstance functions. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: move uking::act rows into the decomp's namespaceLéo Lam
uking::act follows the decomp's src/Game/Actor headers, which already declare it. acc:: was never a namespace: its accessors move into uking::act, most of them taking an ActorLinkConstDataAccess, and so do the dlc::, dragon:: and wm:: free functions. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: propagate vtable slot names in uking::aiLéo Lam
Base class slots were named in the IDB from the base class body and how the overrides use them, and each name is carried to the overrides, e.g. WolfLinkRoot::m34 becomes shouldChangeToWaterAction. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name uking::ai dtors, RTTI functions and thunksLéo Lam
Most rows are dtors of AI helper classes (actor filters, message senders and receivers, damage callbacks), identified by the base class vtable their dtor reinstalls. Damage callbacks are nested in the AI that installs them, e.g. GolemRoot::DamageCallback. Also names the camera AIs' dtors, dtorDelete rows that were j__ZdlPv_NN placeholders, a few secondary-base thunks and IsPlayerOrWolfLinkActorFilter's ctor. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: propagate vtable slot names in uking::actionLéo Lam
Base class slots were named in the IDB from how the base class calls them and what the overrides do, and each name is carried to every override, e.g. m32 becomes playGrabAS in Grab and the other grab actions. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name uking::action ctors, dtors, RTTI and thunksLéo Lam
Names follow the owning vtable. Thunks of other virtuals in secondary vtables keep a _thunkNN suffix (e.g. SandwichDetectionAreaTag::observeActor_thunk20). One ctor and its dtors belong to an observer, not an action, so they're named uking::act::ChemicalElementObserver. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: propagate vtable slot names in uking::behaviorLéo Lam
Slot names are the virtual functions that ksys::act::ai::Behavior declares, applied by vtable position. Nearly all of these rows also move from the AI_Behavior prefix into uking::behavior. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name uking::behavior RTTI getters, dtors and thunksLéo Lam
The IDB's rtti1/rtti2 placeholders become checkDerivedRuntimeTypeInfo and getRuntimeTypeInfo, and j_ thunks take their target's slot name (e.g. m6 becomes init_). A damage callback that only one behaviour installs in the IDB is nested in it, e.g. SetAllOneDamageDCCallback::DamageCallback. Also fixes two deleting dtors that were misnamed Enemy::dtor_delete and Guardian::dtor_delete. They follow the EnemyFrontNeckRotate and SwarmPatternCross ctors, so they're those behaviours' dtors. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: move behaviour ctors, dtors and loadParams to uking::behaviorLéo Lam
The IDB's AI_Behavior prefix becomes uking::behavior on these rows, matching uking::action and uking::ai. There's no game-side behaviour source in the decomp yet. Some rows also change class. Registered names come from AIDef_Game.product.yml; base class names come from the IDB, based on the base class ctor each ctor calls. The XBase names, CreateEaselFromMapUnit, NoiseWithSensor, NoisySwarmPattern and the existing SetDamageCallback aren't official. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: move AI_Action/AI_AI/AI_Query rows into the decomp's namespacesLéo Lam
The IDB's AI_Action, AI_AI and AI_Query prefixes become uking::action, uking::ai and uking::query. Most AI_Action<Name>/AI_AI<Name> ctors also move to the class whose vtable they install in the IDB; nearly all of them sit right before that class's members (e.g. uking::ai::VacuumEnemyRoot's). (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name AI factory functions as their make<T> instantiationsLéo Lam
Each of these is the create_fn that the AI factory tables pair with a class name hash, so it's the make<T> for the class that AIDef_Game.product.yml gives that hash. Unknown_<hash> entries are resolved by crc32 (e.g. crc32("Die") = 0x0135b937). The ones whose make<T> the decomp already instantiates are now marked as compiled (matching or non-matching). (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: fix the ActionBase parameter in reenter_ namesLéo Lam
Some uking::action and uking::ai reenter_ names had copied ActionBase's own mangling, so their S2_ back-reference pointed at nothing and they couldn't be demangled. They now spell out ksys::act::ai::ActionBase*, as declared in actAiActionBase.h. (AI assisted using Claude Opus 5.5)
2026-10-19data: name TU static initialisersLéo Lam
Named sinit_ plus a best guess at their TU's file name, from the functions around them; Maybe marks the weak guesses. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: fix a library dtor's owner, rename a sinit, name two library rowsLéo Lam
0x71013f2cd0 installs the same vtables as OfxLensFlare's ctor and is called by its deleting dtor, so it's OfxLensFlare's dtor, not OfxLensFlareDynamic's. The other three are named from where they are and what's around them (the sinit between sead::CalendarTime and sead::DateSpan, createInstance between ParticleMgr's singleton disposer and deleteInstance, and getLerp after SHUtil's setConstantColor with the same size as Labo's). (AI assisted using Claude Opus 5.5)
2026-10-19data: fix two nn vfx emitter names and name an atk ctorLéo Lam
In Labo, the 1108-byte EmitBySearchOrder comes before InitializeParticle and the 8-byte Emit comes after it, and BotW's functions there have the same sizes. The atk ctor is where Labo has StreamSoundPrefetchFileReader's ctor, right after StreamSoundPlayer's sound-thread thunks and before its Initialize. (AI assisted using Claude Opus 5.5)
2026-10-19data: name gsys::ModelScene::skipDrawLéo Lam
0x7100c1016c had an agl::pfx name that was only based on a similar function body. Labo's gsys has ModelScene::skipDraw with the same body, also right before isBoundLayer_. (AI assisted using Claude Opus 5.5)
2026-10-19data: name library functions from Splatoon 2 and Labo symbolsLéo Lam
Names unnamed and placeholder rows, mostly gsys, agl, nn and eui, by lining up address order, call sequences, vtables and callees with already named functions, then reading the rest. A spot check on an earlier, larger version of this set found 210 of 215 names right. Also fixes about 40 wrong names (e.g. swapped agl::ShaderProgram create/destroy pairs), moves the GPUMemBlock<sead::Vector4f> dtor name to 0x71013bd2c4 and blanks four nullsub_ placeholders. Three GPUMemBlock dtors get placeholder classes until T is known. (AI assisted using Claude Opus 5.5)
2026-10-19data: name or fix 8 library rows from vtable slotsLéo Lam
Each function is named in the IDB after the vtable slot it fills. The sead NinJoyNpadController and eui GetRuntimeTypeInfo names are in Labo's symbols, and getSortKey is the xlink2::IUser slot that Labo's own override is named after. The hcl and nn::nex names match other overrides of the same slot that are already in the CSV. Also marks the hcl row as L since Havok is excluded from the decomp. (AI assisted using Claude Opus 5.5)
2026-10-19data: respell library ctors and dtorsLéo Lam
Out-of-line ctors and dtors are C1/D1 like in the reference builds, and inline ones are C2/D2. Only the symbol variant changes, except that sead::FrameHeap's dtor also drops a _0 suffix it doesn't need. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: import sead/agl/gsys/eui/aal/xlink2/LMS/evfl names from the IDBLéo Lam
The IDB names come from Super Mario Odyssey, Labo and Splatoon 2 matches, vtable installs, and, for delegates, the owner and member function stored where each one is constructed. Most rows had no name or were nullsub_. The rest had placeholders or wrong names, like nn::nex::SecureStream::ReleaseURL on sead::TreeMap::deleteValue. The RIDDemoSaveFileDevice rows are actually sead::PathPrefixFileDevice, and the LightPrePassLightMgr rows use agl's light types, not al:: ones. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: import sead/agl/gsys/eui/aal names from other games' symbolsLéo Lam
These function bodies match builds with symbols of Super Mario Odyssey 1.0, Labo or Splatoon 2 3.1.0; fuzzy matches were checked against callees in the IDB. Most rows had no name and the rest were nullsub_ placeholders. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name vtable slots and fix names in sead/agl/gsys/eui/aalLéo Lam
Unnamed and nullsub_ rows get the name of the virtual they implement, from the vtable types in the lib/ headers and, in the IDB, from Super Mario Odyssey vtables with identical bodies. Also makes FixedSafeString rows carry the size each caller constructs (0x7100b70d20 is actually EnvObj::setGroupNameCopy in the IDB, which frees FixedSafeString<59> for 0x7101026ec0), drops unneeded _0 suffixes, adds missing namespaces, removes stray `$`s, and gives a few rows the class or type the IDB has for them (e.g. FxReverbI3DL2::setupGains_). (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name sead/agl/gsys/eui/aal/xlink2 ctors, dtors, RTTI and thunksLéo Lam
Classes come from the vtable a ctor or dtor installs, or from matching vtables slot by slot against Super Mario Odyssey and Splatoon 2. The RTTI rows include sead::RuntimeTypeInfo::Derive<>::isDerived instantiations over ksys and uking classes. Also fixes dtor names that a body shape match had put on the wrong class, and the this-adjustment of three aal::AuxBusRootFx thunks. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: import nn/curl names from the IDBLéo Lam
For code that isn't in the decomp yet. The IDB names mostly come from Splatoon 2 and Super Mario Odyssey matches and from names carried over between vtables with the same RTTI class. Some of these replace wrong names rather than placeholders: agl, eui and gsys names that sat on nex, atk, g3d and ui2d functions, DataStore *_PrepareRequest names on NATTraversalEngine and SocketTransport functions, and DataStore Call* stubs, which are now named after the RMC method ID each one passes. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: import nn/curl names from other games' symbolsLéo Lam
These function bodies match builds with symbols of Super Mario Odyssey 1.0, Splatoon 2 3.1.0 or Labo. Fuzzy matches are checked against callees and strings, and the weakest ones get a Maybe suffix. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: fix namespaces and class names in nn/curlLéo Lam
These rows had the right member function on the wrong class, mostly PseudoGlobalVariable<X> names shifted between instantiations and sibling atk sound classes. Classes come from vtable RTTI matched against Super Mario Odyssey, or from identical Labo/Splatoon 2 bodies. Also moves 0x710133adb4 to the one-argument SoundArchivePlayer::GetRequiredMemSize overload. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: propagate vtable slot names in nnLéo Lam
Slot names come from Super Mario Odyssey's vtable for the class with the same RTTI name, kept only where the neighbouring slots and the function body agree. The two names that no symbol spells out get a Maybe suffix. Also fixes a few wrong names, e.g. 0x7100abe02c is Window::DrawSelf, not Picture's. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name nn/curl dtors and thunksLéo Lam
Classes come from each vtable's RTTI name, and symbols from the same vtable slot in Super Mario Odyssey or Splatoon 2, checked against the function body. Also fixes rows that a body shape match had given another nex class's name (e.g. 0x7100cafa3c is LockChecker's dtor, not Event's), and a few nex thunks with the wrong this-adjustment. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: import hk/hkai/hka/hcl names from the IDBLéo Lam
Most static initialisers are named after the reflection record they build, and the hkSingletonRegister ones after the singleton they register. The rest are the IDB's names, which came from the Havok 2014.1 headers, the Havok Project Anarchy headers (for hkai) or a Win32 Havok build with symbols. Also replaces a few agl/aal/nn::font/game names that a body match had put on Havok code (e.g. SnowVolume::clearModifyFlag). (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: propagate vtable slot names in hk/hkai/hka/hclLéo Lam
hk and hka slots follow the Havok 2014.1 headers, and hkai slots the Havok Project Anarchy headers (2014.0.5, two minor versions older than the game's 2014.2.0). hcl has no public headers, so its names, and the hkai slots that 2014.2 added, are inferred from reflected fields, asserts and timer labels; the least certain ones get a Maybe suffix. As in hkp, ctorFinish rows take the class of the finishFunctionImpl<T> that calls them. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name hk/hkai/hka/hcl ctors, dtors and thunksLéo Lam
Dtors fill slots 0 and 1 of a vtable found through hkTypeInfo or through the ctor that installs it, which also names the ctor. D1 vs D2 follows the IDB, which took it from the reference builds' symbols. Most thunks take their target's IDB name with a _thunkNN suffix; dtor thunks for secondary bases take their _ZThn symbol. Nested classes such as hkaiPathfindingUtil::FindPathInput take the scoped name from their hkTypeInfo. Also fixes hkBinaryPackfileWriter::save, which is actually the D1 dtor. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: import hkp names from the IDBLéo Lam
Covers hkp rows that aren't in the decomp source yet. The IDB named them mostly from Havok reflection and the Havok 2014.1 headers; static initialisers are named after the reflection records they build. Also replaces a few nex, atk, ui2d and Super Mario Odyssey names that a matcher had put on Havok code because the bodies looked similar, and fixes some older hkp names (e.g. hkpRigidBody::getClass is actually staticClass). (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: propagate vtable slot names in hkpLéo Lam
Vtables are found through hkTypeInfo and named from the Havok 2014.1 headers, but only where the slot count matches exactly. ctorFinish rows take the class of the finishFunctionImpl<T> that calls them. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-19data: name hkp ctors, dtors and thunksLéo Lam
Classes come from hkTypeInfo/hkClass registration and vtable slots from the Havok 2014.1 headers. Thunks take their target's IDB name and this-offset, e.g. hkpListShape::dtor_thunk18. Also respells some older hkp dtor names as D0/D1/D2 symbols, and moves one dtor from hkpClosestCdPointCollector to the base dtor of hkpCdPointCollector. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-18data: name Havok reflection type-info helpersLéo Lam
Almost all of these are the finish or cleanup function of an hkTypeInfo record. The IDB names them after the record's type name string, e.g. finishFunctionImpl<hclClothContainer>. The odd one out is hkTypeInfo::cleanupLoadedObject. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-18data: mark Havok as an excluded libraryLéo Lam
Only parts of Havok were marked L, so the progress percentage measured neither all code nor in-scope code. The rest of the Havok TUs are now L too. Havok header code emitted in KingSystem TUs (e.g. the hkMemorySystem defaults in FreeListMemorySystem, and the hkaiEdgePath and hclCollidable dtors in the NavMeshUtil and ClothSet TUs) stays in scope, like hkStubs and the rest of ksys::phys and gsys. (AI assisted using Claude Fable 5.1 and Claude Opus 5.5)
2026-10-18Merge pull request #232 from leoetlino/stack/03g-row-bindingsLéo Lam
Fix various issues in the functions CSV
2026-10-18tools: leave library code and weak copies out of the order checkLéo Lam
The decomp links all libraries before the game code, whereas the original interleaves them with it, so every library object counted as misordered (156 of 157) and each newly bound library row added one. A weak function's copy in the original comes from whichever object the linker saw first, so it says nothing about where its decomp object belongs: 172 of 248 strays were weak copies. Weak functions now only count for order within their object's main block. (AI assisted using Claude Opus 5.5)