Skip to content

SMS decomp: current harness progress - #161

Closed
fjooord wants to merge 1145 commits into
doldecomp:mainfrom
fjooord:setup/sms-registration
Closed

fjooord wants to merge 1145 commits into
doldecomp:mainfrom
fjooord:setup/sms-registration

Conversation

@fjooord

@fjooord fjooord commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Harness snapshot of accumulated SMS work, force-updated on 2026-09-16 after a source-fidelity audit, lint cleanup, and re-land. Head 3a5c585b, which merges upstream 9c2f2f3b.

What changed since the last push

  • Merged upstream through 9c2f2f3b (35 commits, CI: speed up formatting and check symbol regressions against the base #162 to GC2D/SunGlass: default the ctor colour so getNameRef stops inlining it #187 plus the toolchain bump to dtk v1.8.4, objdiff v3.8.1, wibo 1.1.0). In the final merge six files that conflicted were taken whole from upstream: Menu.cpp, GCLogoDir.cpp, MarDirectorEvent.cpp, MarNameRefGen_BossEnemy.cpp, MarNameRefGen_Enemy.cpp, MarioGamePad.cpp.
  • 820 further worker integrations since the previous snapshot aea424cd.
  • A source-fidelity audit found accepted integrations that reached their score with constructs no original developer would have written: hand-mangled extern "C" statics, hand-written vtable arrays, discarded literals, unused padding locals, guard-override macros, unmarked pragmas. Those rules are now enforced by the harness lint gate.
  • 104 integrations that fail the new lints were handled: 62 reverted (each revert(lint): commit names the failed rules and the target to requeue; git notes mark the original commits), 42 already superseded by the upstream merge. One transiently flagged definition (sFogOffColor) was restored because a later clean integration uses it.
  • 31 reland(lint): commits then restored the reverted data the way the original code would have spelled it: class statics declared in the owning headers (include/Enemy, include/MoveBG) and defined in map order, PCH string includes instead of hand copies, an inline destructor in FeetInv.hpp, and the FifoSetFog body. Fabricated header classes are marked as such.

Validation

  • Full Linux rebuild in a Daytona sandbox from the sandbox image: all 740 all_source objects compile, progress and report.json generate.
  • Versus the pre-cleanup report: matched code 40.92% to 40.73%, matched functions 8432 to 8395 of 12881, matched data 62.55% to 59.65%. Every change is inside the reverted units; nothing outside them moved. 17 sections and 1 function came back through the re-land; 63 sections and 50 functions remain below their pre-cleanup score and are the requeue set.
  • The cumulative delta against upstream scans at zero lint errors (49 review-tier warnings). Rebuilt in Daytona after the merge: 739 objects, 0 failures.
  • Symbol-order validation could not run: orig/GMSJ01/files/mario.MAP is not in the image or the checkout.

Pending

🤖 Generated with Claude Code

…eHino2TurnCFP24TSpineBase<10TLiveActor> [checkpoint accac66b]
…lesaAttackMarioCFP24TSpineBase<10TLiveActor> [checkpoint b9472e28]
…veSmallEnemyJumpCFP24TSpineBase<10TLiveActor> [checkpoint f6616c4c]
…__6TMarioFPQ26JDrama9TGraphics [checkpoint f9f0164a]
…Talk__FP32TSpcTypedInterp<13TEventWatcher>Ul [checkpoint a4a21bac]
…veSmallEnemyHitWaterJumpCFP24TSpineBase<10TLiveActor> [checkpoint a2418664]
…_11TFireWanwanFP9THitActorUl [checkpoint ad928fb0]
…eHino2PrePolCFP24TSpineBase<10TLiveActor> [checkpoint b52f585b]
…TBathWaterManagerFUlPQ26JDrama9TGraphics [checkpoint 1e9cd9b6]
…TamaNokoThrownCFP24TSpineBase<10TLiveActor> [checkpoint d6b59865]
…BathtubKillerFUlPQ26JDrama9TGraphics [checkpoint 639e92f2]
…eHino2PolluteCFP24TSpineBase<10TLiveActor> [checkpoint 0d8015e8]
…r__FP32TSpcTypedInterp<13TEventWatcher>Ul [checkpoint e8c093c1]
…TamaNokoSinkCFP24TSpineBase<10TLiveActor> [checkpoint 592b2ce9]
fjooord and others added 27 commits September 16, 2026 17:11
Header edited: include/MoveBG/MapObjRicco.hpp
Symbols: 14 class statics, map order
Original commit: 4dc5225
Lint (worker surface, cumulative diff vs 219e9aa): 0 errors, 0 warnings
Header edited: include/MoveBG/MapObjPinna.hpp (TShellCup, TMerrygoround)
Symbols: 5 class statics, map order
Original commit: 6c20630
Lint (worker surface, cumulative diff vs 219e9aa): 0 errors, 0 warnings
Header edited: include/MoveBG/MapObjBianco.hpp (new; 4 fabricated statics-only classes on TMapObjBase; file-local sRadius/sSubZ/sSpeed/sMessengerPosZ/Y dropped: unreferenced file-scope statics fail unused_static_data)
Symbols: 14 class statics, map order
Original commit: 4345454
Lint (worker surface, cumulative diff vs 219e9aa): 0 errors, 0 warnings
Re-lands worker-integration 5b524b3 (job-32e2, checkpoint 4e8fc8b7), reverted in 921a7b9 for sms_pch_string_convention + unused_static_data. The hand-copied dummyMactorStringValue1 / SMS_NO_MEMORY_MESSAGE definitions are replaced by #include <System/DummyStrings.hpp> at the same position in the include order. The related .sdata2 change ac34880 ((void)180.0f;) is not re-landed.

Lint (scan_diff.py, surface worker, vs 219e9aa): 0 findings, 0 errors.
…nclude

Partial re-land of worker-integration da9c92d (job-6ba9, checkpoint 8a91f041), reverted in 4c0e46d for sms_pch_string_convention + unused_static_data. Only the PCH string portion is re-landed: the hand-copied dummyMactorStringValue1 / SMS_NO_MEMORY_MESSAGE / MtxCalcTypeName definitions become #include <M3DUtil/InfectiousStrings.hpp> (which pulls System/DummyStrings.hpp first). The unused bossEnemyNames[] array and the local cDirtyFileName / cDirtyTexName copies are not re-landed; the target stays on the board for those. The follow-up .sdata2 change 711ad8e (cBossEnemy* arrays) is not re-landed.

Lint (scan_diff.py, surface worker, vs 219e9aa): 0 findings, 0 errors.
…ArchiveP19TSelectShineManagerP10TSelectDir via PCH include

Re-lands worker-integration e8871a7 (job-653c, checkpoint a22c9b31), reverted in a7972b6 for sms_pch_string_convention + unused_static_data. The function changes (pArch passed to J2DSetScreen, sc_number_%d uses i + 1, stages[] table filled from StageUtil.hpp scShineTable*Etc, stagename.bmg, memset instead of the fabricated bzero) are kept as-is; the hand-copied dummyMactorStringValue1 / SMS_NO_MEMORY_MESSAGE definitions are replaced by #include <System/DummyStrings.hpp>.

Lint (scan_diff.py, surface worker, vs 219e9aa): 0 findings, 0 errors.
…clude

Re-lands worker-integration e759b42 (job-6852, checkpoint a10e7812), reverted in 0f138b0 for sms_pch_string_convention + unused_static_data. The hand-copied dummyMactorStringValue1 / SMS_NO_MEMORY_MESSAGE definitions are replaced by #include <System/DummyStrings.hpp> at the same position.

Lint (scan_diff.py, surface worker, vs 219e9aa): 0 findings, 0 errors.
…a PCH include

Re-lands worker-integration 58d7cc7 (job-c3b9, checkpoint 6d56a22a), reverted in 757d976 for sms_pch_string_convention + unused_static_data. The hand-copied dummyMactorStringValue1 / SMS_NO_MEMORY_MESSAGE definitions are replaced by #include <System/DummyStrings.hpp> at the same position.

Lint (scan_diff.py, surface worker, vs 219e9aa): 0 findings, 0 errors.
…ameRefGenCFPCc via PCH include

Re-lands worker-integration 10fb32f (job-6a16, checkpoint 80c34038), reverted in cc8f56a for sms_pch_string_convention + unused_static_data. The hand-copied dummyMactorStringValue1 / SMS_NO_MEMORY_MESSAGE / MtxCalcTypeName definitions are replaced by #include <M3DUtil/InfectiousStrings.hpp>. The later .rodata change c4d25c4 (local TPollutionTest copy) is not re-landed.

Lint (scan_diff.py, surface worker, vs 219e9aa): 0 findings, 0 errors.
Header: include/Enemy/Rocket.hpp
Symbols: TRocket::mTestAng_y, mNozzleOffsetZ, mColOffsetY (3, f32)
Original commit: 53ff3ce
Statics added to the existing TRocket class; bare mangled globals replaced by T TClass::m = v definitions in map order.
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/Popo.hpp
Symbols: TPopo::mRollSw, mTriggerSw, mTestAng_x, mTestAng_y, mNozzleOffsetZ, mCenterJntIndex, mMouthJntIndex, mRLegJntIndex, mLLegJntIndex, mRHandJntIndex, mLHandJntIndex, mTestBodyScale, mBrkFlag, mColOffsetY, mColMinVal, mLevelShootSw (16)
Original commit: 563f1b5
New statics-only TPopo declaration (fabricated marker; base TWalkerEnemy chosen from __vt__5TPopo size 0x1B8 == __vt__12TWalkerEnemy).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/Cannon.hpp
Symbols: TCannon::mChorobeiJntIdx, mChorobeiHandJntIdx, mVelocityRate, mSearchRate (4)
Original commit: 722ce94
New statics-only TCannon declaration (fabricated marker; base TSmallEnemy, __vt__7TCannon 0x1AC).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/ElecNokonoko.hpp
Symbols: TElecNokonoko::mReflectSw (1)
Original commit: 761b5d3
New statics-only TElecNokonoko declaration (fabricated marker; base TWalkerEnemy, __vt__13TElecNokonoko 0x1BC).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/BombHei.hpp
Symbols: TBombHei::mSerialBomb (1)
Original commit: 04fbdf7
Not reverted; placeholder class moved out of bombhei.cpp into the owning header (fabricated marker; base TWalkerEnemy, __vt__8TBombHei 0x1B8).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/BossTelesa.hpp
Symbols: TBossTelesa::mEnemyGenRate, mItemGenRate, mNormalAlpha, mBaseHoseiPosY, mRouletteUpRate, mTelesaGenerateInterval, mCameraMoveLimit, mCameraMoveSp (8)
Original commit: a0262d0
Not reverted; placeholder class moved out of bosstelesa.cpp into the owning header (fabricated marker; base TSpineEnemy, __vt__11TBossTelesa 0x114 == __vt__11TSpineEnemy).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/ChuuHana.hpp
Symbols: TChuuHana::mCheckOnPanelTimeRoll, mCheckOnPanelTime, mBodyJntIndex, mEyeJntIndex, mFootJntIndex, mNewSw, mCompareHeight, mSmallMirrorR, mMediumMirrorR, mLargeMirrorR, mAttackVersion, mDamageSw (12)
Original commit: 1fe0310
Not reverted; placeholder class moved out of chuuhana.cpp into the owning header (fabricated marker; base TWalkerEnemy, __vt__9TChuuHana 0x1B8).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/TobiPuku.hpp
Symbols: TTobiPuku::mLandAngle, mBoundSw, mBoundVelocityY, mReturnLaunchSw (4)
Original commit: 4691bcc
Not reverted; placeholder class moved out of tobiPuku.cpp into the owning header (fabricated marker; base TWalkerEnemy, __vt__9TTobiPuku 0x200).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/Pakkun.hpp
Symbols: TPakkunManager::mRootExplosionScaleRate, mTestFlyAngX, mIgnoreHitWaterY (3)
Original commit: 45d3b47
Not reverted; placeholder class moved out of pakkun.cpp into the owning header (fabricated marker; base TSmallEnemyManager, __vt__14TPakkunManager 0x58 == __vt__18TSmallEnemyManager).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/Killer.hpp
Symbols: TKiller::mSerialBomb, mTrampleDie; TFlyEnemy::mTestSp, mInvalidTime, mTestMarioSpMax (5)
Original commit: 15d8791
Not reverted; placeholder classes moved out of killer.cpp into the owning header (fabricated marker; TFlyEnemy : TWalkerEnemy, TKiller : TFlyEnemy, both vtables 0x1C4).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: (none edited)
Symbols: MtxCalcTypeName / dummyMactorStringValue1 / SMS_NO_MEMORY_MESSAGE via #include <M3DUtil/InfectiousStrings.hpp> (3)
Original commit: 1e4e632
Hand-copied PCH strings replaced by the upstream include. Dropped from the original: killer_bastable and entry (map-named but unreferenced; unused_static_data is an error on the worker surface, requeue with the owning functions), extern "C" mangled prototypes, hand-written vtables, anonymous @1431/@1411/@1210 arrays.
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: include/Enemy/FeetInv.hpp
Symbols: TMtxCalcFootInv::~TMtxCalcFootInv (inline, weak; map __dt__15TMtxCalcFootInvFv scope:weak in feetinv .text) -> __vt__15TMtxCalcFootInv
Original commit: 4b8be3a
Local class shadowing include/Enemy/FeetInv.hpp replaced by including the header; the missing virtual destructor added to the header class. Nothing is defined in the .cpp, so vtable emission depends on the sandbox build (verify).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: (none edited)
Symbols: @1490/@1937/@2015-@2018 via #include <M3DUtil/InfectiousStrings.hpp> (dummyMactorStringValue1, SMS_NO_MEMORY_MESSAGE, MtxCalcTypeName)
Original commit: d453e18
Placed with the rogue includes per the matched-TU convention (tamaNoko.cpp). Not re-landed: anonymous unk2602/unk2604 {0,0,0}/{1,1,1} arrays (map @2602/@2604, no name).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: (none edited)
Symbols: MtxCalcTypeName / dummyMactorStringValue1 / SMS_NO_MEMORY_MESSAGE via #include <M3DUtil/InfectiousStrings.hpp>, plus #include <Enemy/BossWanwan.hpp>
Original commit: eab1dea
Dropped from the original: cDefaultScaleA/B, cMtxCalcOrder (anonymous @1431/@1411/@1210, emitted upstream by J3DJoint.hpp inlines), bwanwan_bastable (map-named but unreferenced; unused_static_data is an error on the worker surface, requeue with the owning functions).
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Header: (none edited)
Symbols: MtxCalcTypeName / dummyMactorStringValue1 / SMS_NO_MEMORY_MESSAGE via #include <M3DUtil/InfectiousStrings.hpp>
Original commit: 9632e52
Dropped from the original: tinkoopa_bastable, TTinKoopa_jointNameTable, *TrackJointNameTable (map-named but unreferenced; unused_static_data is an error on the worker surface, requeue with the owning functions); table_NNNN, onetimeFilenames, loopFilenames (function-local statics table$/onetimeFilenames$/loopFilenames$ in the map, need the owning functions). The original's ASCII-only MtxCalcTypeName strings were wrong: tinkoopa .rodata @2194-@2197 sizes 0x2F/0x35/0x31/0x24 match the Japanese-suffixed upstream strings.
review_lint scan_diff (worker surface, cumulative vs 219e9aa): 0 error(s), 0 warning(s)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…7GXColor body

Re-lands the FifoSetFog body from integration 8eb0320 (1.16% -> 100%).
Its only lint finding was sFogOffColor flagged unused at the time; the
definition is now used by ShapePacketCallBackFunc (eeb6cb6) and was
restored in 219e9aa. Includes <dolphin/gd/GDPixel.h> for BP_FOG_*.
Lint: 0 errors, 0 warnings.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…lasses

MWCC synthesizes an implicit default constructor at the class's closing
brace and fails with 'cannot construct base class' because TWalkerEnemy,
TSpineEnemy and TSmallEnemy have no default constructor. A declared
(const char*) constructor suppresses the implicit one; nothing defines or
calls it. Fixes the 8 compile failures found by the Daytona rebuild of
reland-20260916 (elecNokonoko, tobiPuku, chuuhana, bosstelesa, bombhei,
cannon, killer, popo). Lint: 0 errors, 0 warnings.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Brings in 7 upstream commits (4410e51..9c2f2f3): Update getNameRef_Enemy,
Boss name ref gen updated, Downgrade wibo to 1.1.0, Update to dtk-template
commit 95a941f7, MarioGamePad better, GC2D/SunGlass (doldecomp#187), GCLogoDir closer.

Six files taken whole from upstream/main instead of the -X theirs hunk merge:
- src/GC2D/Menu.cpp
- src/System/GCLogoDir.cpp
- src/System/MarDirectorEvent.cpp
- src/System/MarNameRefGen_BossEnemy.cpp
- src/System/MarNameRefGen_Enemy.cpp
- src/System/MarioGamePad.cpp

Reason: the hunk-level merge spliced our switch-statement prefixes onto
upstream's rewritten function bodies (MarDirectorEvent::movement_game failed
to compile with "illegal function definition" in the harness Sync build) and
left our superseded includes/inline constructors above upstream's rewritten
getNameRef_* bodies. Upstream's versions replace our earlier placeholder or
reverted work on these units; the MarNameRefGen_BossEnemy reland (31f5783)
only added a PCH include that upstream's rewrite makes moot.

All other auto-merged files (SelectDir.cpp, SelectMenu.cpp, MovieDirector.cpp,
MarioCollision.cpp, MarioWait.cpp, Yoshi.cpp, tools/project.py) keep the
three-way merge result, including the reland PCH includes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@fjooord

fjooord commented Sep 17, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #189, a single squashed commit with an identical tree on top of upstream 9c2f2f3. This branch keeps the full harness history (per-target revert(lint) and reland(lint) commits with git notes) for provenance.

@fjooord fjooord closed this Sep 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant