Decompile Enemy/bosseel#128
Conversation
Report for GMSJ01 (a4e0950 - 794f6a7)📈 Matched code: 35.09% (+0.25%, +9068 bytes) ✅ 95 new matches
...and 65 more new matches 📈 54 improvements in unmatched items
...and 24 more improvements in unmatched items |
…t refinements __sinit registers the JAL sound lists (MSBgm/MSSetSound(Grp)/JALSeMod*), which come from MSSetSound.hpp - it was missing from the includes so __sinit was 9.7%. Adding it before MSoundBGM.hpp (same as MapObjSample.cpp) reproduces the exact registration order: 9.7% -> 100%. Also refine the TBEelTears/TOilBall moveObject push handling and TNerveBEelTearsMarioRecover. Unit 91.9% -> 93.4%. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…init The target float-copies mPosition into mInitialPosition (lfs/stfs); operator= was compiling to an integer lwz/stw copy. 76.3% -> 78.1% on init. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The target constructs the Mario target vec with y=10 then overwrites y=15; that redundant write was missing (mine built it with y=15 directly). 93.1% -> 99.6%. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The target inlines mMActor->getModel() (mMActor->unk4) and caches it, but getModel() is out-of-line so it emitted a bl each time. Using mMActor->getModel() directly (cached in a local for the skin-deform block) matches the inline fetch. 76.3% -> 80.5%. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Same as init: getModel() is out-of-line; the target inlines mMActor->getModel(). 76.9% -> 78.8%. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The map marks ExecBackNerve_Sub as local, but it was declared in the header (extern) and emitted global. Drop the header declaration and make the definition static. Verified with tools/validate-symbol-order.py. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
getFrameCtrl(0)->getEnd() returns an int; the target doubles it as an integer (slwi) before the float divide, not getEnd() * 2.0f. 97.3% -> 99.9%. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Same as ExecBackNerve_Sub: getEnd() * 2 (integer slwi) not * 2.0f. 95.7% -> 98.3%. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
mPosition (0x70, on TSharedParts) is copied with a batched float load/store, not the integer operator=. Spelling it set(position.x, position.y, position.z) evaluates all three loads before the stores. 92.8% -> 100%. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Marking ready for review. The whole TU is implemented end-to-end (every function and symbol from the map present, reverse definition order preserved for the State: ~94%, 91/142 functions at 100% (22 more at ≥99%, 11 at 95–99%). Recent structural passes:
Known-remaining residuals, all verified as the human-tier category (instruction streams and logic match): stack-frame size, register allocation, and the 🤖 Posted by Claude Code |
The symbol-order validator flagged this UNUSED helper as the sole non-weak symbol out of order: it sat after the whole nerve block, but the map emits it between theNerve(FirstSpin) and execute(WaitAppear). Since -inline deferred emits in reverse of source order, moving its definition to just after the WaitAppear nerve (before FirstSpin) reproduces the map order. validate-symbol-order.py now passes (non-weak order + linkage + presence). No fuzzy change (ordering doesn't affect per-function matching). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Ran the new symbol-order validator (the CI check from the
No fuzzy change from either fix — ordering/linkage don't affect per-function matching; the TU stays at ~94% (91/142 at 100%). 🤖 Posted by Claude Code |
Fixes the lint CI check (variable-declaration alignment and multi-line continuation indentation). Whitespace only; no codegen change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Summary
Enemy/bosseel.cppend-to-end, including the tears/oil-ball subsystem, manager parameters, teeth, eyes, vortex, heart coins, collision actors, Boss Eel initialization, the mainperformloop, and the complete battle nerve graph-inline deferredbuildmario.MAPUNUSED entries; reconstruct the recoverable inline helpers and mark dead-stripped bodies with focused human-review TODOs and retail sizesMatching
mario/Enemy/bosseel: 79.24% fuzzy matchTBossEel::perform: 76.81%Several nerves and support routines are above 90%, with many weak functions and small routines fully matching.
Validation
ninja changes_allpassesgit diff --checkpassesThe existing warnings in
JGadget/std-list.hppandMoveBG/MapObjGeneral.hppare unchanged.Human review
The remaining TODOs are primarily dead-stripped UNUSED routines whose original bodies do not survive in linked assembly. Each is explicitly labeled with its retail MAP size so it can be reviewed or completed separately.