Mech milestone: foundational layout analysis + proxy-layer resolution
Begins the Mech reconstruction milestone (analysis phase). Extends the existing MECH-LAYOUT.md worksheet with the findings needed to build MECH.HPP + the ctor: - Resolved the BT411 mechrecon.hpp proxy layer to real 1995 types (ReconAlarm -> AlarmIndicator, ReconSeq -> SequenceController, ReconFiltered -> AverageOf< Scalar>/NameFilter, ReconChain -> ChainOf, ReconMatrix -> AffineMatrix; StateIndicator/Reticle survive as-is; BTVal mostly base-class pose fields). - CRITICAL: AlarmIndicator, SequenceController, NameFilter, AverageOf are ALSO absent from the 4.10 archive -- additional helper classes the milestone must reconstruct first (their sizes set the embedded-member offsets). - Subsystem source availability mapped: full (GAUSS/PPC/SENSOR), .TCP partials (AMMOBIN/EMITTER/GNRATOR/HEAT/MISSILE/PROJTILE/PROJWEAP), decomp-only (rest). - Key tractability insight: StateIndicator is fixed-size (level count stored, not arrayed), so a FUNCTIONAL fresh build needs only the right member set/types in order -- byte-exact offset matching is a later refinement for network wire format, not required to boot. - Revised reconstruction order: helpers -> MechSubsystem+roster -> finalize MECH.HPP (probe sizeof==0x854) -> ctor+segment walk -> per-frame path. Everything below the Mech ctor runs real reconstructed code; the ctor is the live frontier (spawn factory validated last commit). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -64,3 +64,57 @@ binary alloc size is WRONG and must be fixed before use.
|
|||||||
2. Untangle the three offset CONFLICTs above (decomp reads).
|
2. Untangle the three offset CONFLICTs above (decomp reads).
|
||||||
3. Write the first staged MECH.HPP (interface + mapped runs + reserved[] filler) and
|
3. Write the first staged MECH.HPP (interface + mapped runs + reserved[] filler) and
|
||||||
compile-verify sizeof(Mech)==0x854 with the probe.
|
compile-verify sizeof(Mech)==0x854 with the probe.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ADDENDUM 2026-07-19 (later) — spawn factory reached the Mech ctor; proxy layer resolved
|
||||||
|
|
||||||
|
The boot ladder now runs the full spawn factory (CreatePlayerVehicle -> Mech::MakeMessage ->
|
||||||
|
MakeAndLinkViewpointEntity -> registry -> Mech::Make -> `new Mech` -> JointedMover base
|
||||||
|
streams the model) and halts at the Mech ctor. So the ctor is the live frontier and this
|
||||||
|
worksheet is the active blocker.
|
||||||
|
|
||||||
|
### Proxy layer resolved (BT411 mechrecon.hpp -> real 1995 types)
|
||||||
|
|
||||||
|
Settles the open item in the "Real 1995 types" bullet above:
|
||||||
|
|
||||||
|
| BT411 alias | real type | in 4.10 archive? |
|
||||||
|
|---|---|---|
|
||||||
|
| ReconAlarm (AlarmIndicator) | AlarmIndicator (multi-level, N levels sets size) | ❌ MISSING |
|
||||||
|
| ReconSeq | SequenceController (animation sequence) | ❌ MISSING |
|
||||||
|
| ReconFiltered / FilteredScalar | AverageOf<Scalar> (15-sample running avg) | ❌ MISSING |
|
||||||
|
| ReconFiltered (mechNameFilter) | NameFilter | ❌ MISSING |
|
||||||
|
| ReconChain<Subsystem*> | ChainOf<Subsystem*> | ✅ CHAIN.HPP |
|
||||||
|
| ReconMatrix / Matrix34 | AffineMatrix / Matrix | ✅ |
|
||||||
|
| StateIndicator | StateIndicator | ✅ STATE.HPP |
|
||||||
|
| Reticle | Reticle | ✅ RETICLE.HPP |
|
||||||
|
| BTVal (turretBase, mechName, torsoAim*, aimRate, headPitch, torsoTwist) | animated value/quaternion — **UNIDENTIFIED**; BT411 BTVal is a no-op placeholder. Most BTVal members are < 0x328 = BASE-class pose fields (re-attribute per §"Consequences"), so their type is a base concern, not Mech's. |
|
||||||
|
|
||||||
|
### CRITICAL new finding — embedded helper classes are ALSO missing
|
||||||
|
|
||||||
|
`AlarmIndicator`, `SequenceController`, `NameFilter`, `AverageOf` do **not** exist anywhere in
|
||||||
|
the 4.10 CODE archive (confirmed by full-tree grep). They are additional helper classes the
|
||||||
|
milestone must reconstruct, and their sizes set the embedded-member offsets — so the
|
||||||
|
`masterAlarm@0x39C`/`heatAlarm@0x450`/`stabilityAlarm@0x4C4`/`statusAlarm@0x714` spacing
|
||||||
|
DERIVES the AlarmIndicator per-level size (e.g. masterAlarm 33 levels spans 0x39C..0x450 =
|
||||||
|
0xB4; heatAlarm 3 levels spans 0x450..0x4C4 = 0x74 — a fixed header + N-level array; solve
|
||||||
|
the two equations for header size + per-level stride). Same method sizes AverageOf from
|
||||||
|
telemetryFilter[5]@0x7E0..0x81C (0x3C/5 = 0xC each) and SequenceController from the
|
||||||
|
legAnimation/bodyAnimation spacing.
|
||||||
|
|
||||||
|
### Subsystem roster source availability (VDATA 0xBxx ClassIDs)
|
||||||
|
|
||||||
|
- Full .CPP/.HPP in 4.10: **GAUSS, PPC, SENSOR**
|
||||||
|
- .TCP partial survivors (authoritative where present): **AMMOBIN, EMITTER, GNRATOR, HEAT,
|
||||||
|
MISSILE, PROJTILE, PROJWEAP**
|
||||||
|
- Decomp-only (BT411): MechSubsystem base, gyro, torso, hud, myomers, mechweap, mislanch,
|
||||||
|
powersub, + the rest of the "917 missing functions".
|
||||||
|
|
||||||
|
### Revised reconstruction order
|
||||||
|
|
||||||
|
1. **Helper classes** (block the layout): AlarmIndicator, SequenceController, NameFilter,
|
||||||
|
AverageOf<Scalar> — sizes solved from the offset-spacing equations above; identify BTVal.
|
||||||
|
2. **MechSubsystem base + roster** (GAUSS/PPC/SENSOR + .TCP partials + decomp).
|
||||||
|
3. **Finalize MECH.HPP** per the offset map; probe sizeof(Mech)==0x854.
|
||||||
|
4. **Mech ctor** (@004a1674): embedded construction + segment-table walk.
|
||||||
|
5. Per-frame path (mech2/3/4) + damage/weapon handlers.
|
||||||
|
|||||||
Reference in New Issue
Block a user