Full migration of the 2236-line monolithic CLAUDE.md into the progressive-context knowledge graph (per spark-lesson / expert-seed.md), so the deep RE knowledge loads on-demand instead of every session. ZERO CONTEXT LOST: - docs/PROGRESS_LOG.md = the complete old CLAUDE.md, VERBATIM (byte-identical) -- the lossless safety net + the "full detail" quick-lookup fallback. - 18 context/*.md topic files (1343 lines) digest every section (§1-3 -> project-overview, §4 -> content-archives, §5 -> asset-formats/bgf-format, §5a -> source-completeness, §5b/§8 -> wintesla-port, §7/§10 -> locomotion, §10a -> build-and-run, §10b -> reconstruction-method, §10c -> combat-damage + reconstruction-gotchas, §10d -> subsystems, render notes -> rendering, gauges -> gauges-hud, MP -> multiplayer, §9 -> open-questions). - reference/glossary.yaml (53 terms). decomp-reference.md = the offsets/ClassIDs/addresses hub. CLAUDE.md (160 lines) = router: identity, answer/reason protocols, quick-lookup table, evidence tiers (T0 engine-truth / T1 decompiled+verified / T2 reconstructed+runtime / T3 guarded / T4 hypothesis), conventions + DO-NOT (the systemic bug classes), structure. Retains the load-bearing work directives (build recipe pointer, "keep current" mandate). Knowledge graph validates CLEAN (scratchpad/checkctx.py -- all [[links]] + quick-lookup + docs refs resolve; [[name]] -> topic file or glossary term). docs/*.md ledgers stay as the detailed logs; context/*.md are the curated digests that route into them. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69 lines
4.4 KiB
Markdown
69 lines
4.4 KiB
Markdown
---
|
|
id: subsystems
|
|
title: "Subsystems — the factory + the reconstruction waves"
|
|
status: established
|
|
source_sections: "PROGRESS_LOG.md §10d; docs/SUBSYS_PLAN.md; docs/VEHICLE_SUBSYSTEMS.md; docs/RESOURCE_AUDIT.md"
|
|
related_topics: [decomp-reference, reconstruction-gotchas, combat-damage, gauges-hud]
|
|
key_terms: [subsystem, factory, ClassID, subsystem-roster, PoweredSubsystem, bridge]
|
|
open_questions:
|
|
- "Gyroscope (0xBC4) integrator; Myomers authentic coupling; 0xBD3 message manager (WAVE 8)"
|
|
---
|
|
|
|
# Subsystems
|
|
|
|
The mech's components (heat/power/weapons/sensor/gyro/torso/myomers/…), built by the Mech-ctor
|
|
factory. Full per-family plan: `docs/SUBSYS_PLAN.md`; the engineering-cluster panels:
|
|
`docs/VEHICLE_SUBSYSTEMS.md`; the layout audit: `docs/RESOURCE_AUDIT.md`. ClassID map:
|
|
[[decomp-reference]] §2.
|
|
|
|
## The factory
|
|
The Mech ctor switches on the resource ClassID to build each subsystem into the [[subsystem-roster]]
|
|
(`subsystemArray@0x128`). **The `case <Name>ClassID` LABELS are systematically MISLABELED** — the
|
|
real class is the `// FUN_004xxxxx` ctor-address comment reconciled via `CLASSMAP.md`, not the case
|
|
name (e.g. 0xBBE case="Sensor" is actually AggregateHeatSink). Each real class is wired via a
|
|
`Create<Class>Subsystem(Mech*,int,void*)` **bridge** in the class's own `.cpp` (do NOT `#include` the
|
|
real subsystem headers into mech.cpp — the local stubs collide). Keep the alloc SIZE + special-cache.
|
|
[T2]
|
|
|
|
## Class hierarchy (two branches, shared only at MechSubsystem)
|
|
- **Heat leaf:** `PoweredSubsystem : HeatSink : HeatableSubsystem : MechSubsystem`. Emitter/PPC/
|
|
Sensor/Myomers/ProjectileWeapon/MissileLauncher/GaussRifle chain here. Uses 0xC `SubsystemConnection`
|
|
+ 0x54 `GaugeAlarm54` (alarm level at +0x14). [T1]
|
|
- **Watcher branch:** `Torso/Gyroscope/Searchlight/ThermalSight/HUD : PowerWatcher : HeatWatcher :
|
|
MechSubsystem`; `AmmoBin : HeatWatcher`. Uses a 0xC `WatchedConnection` + 0x54 `WatcherGaugeAlarm`. [T1]
|
|
Making a base byte-exact GROWS every subclass — they must be re-based TOGETHER in one build, each
|
|
`static_assert`-locked (the P7 alarm-unification: HeatSink 0x1D0 → PoweredSubsystem 0x31C → MechWeapon
|
|
0x3F0 → Emitter 0x478). [T2]
|
|
|
|
## Reconstruction waves (state: ~18-19 of 20 factory cases wired to real classes)
|
|
- **WAVE 1** — HeatableSubsystem re-based onto MechSubsystem (de-shadow cascade).
|
|
- **WAVE 2** — heat family (Condenser/AggregateHeatSink/Reservoir) + HUD + MechTech (un-swap).
|
|
- **WAVE 3** — power bus (Generator/PoweredSubsystem) + Emitter/PPC fire-path (end-to-end fire; heat
|
|
conducts to the central sink via the linked-sink roster).
|
|
- **WAVE 4** — standalone readouts: Sensor/Searchlight/ThermalSight/AmmoBin (de-shim, gate fixes).
|
|
- **WAVE 5** — Torso (aim twist/elevation; joint-I/O reconstructed; the BLH record disables torso →
|
|
faithfully no visible twist).
|
|
- **WAVE 6** — Myomers (mover-coupled; structural un-stub is INERT — no live mover/heat coupling).
|
|
- **WAVE 7** — projectile/missile weapons (byte-exact; flying projectiles are a PORT reconstruction —
|
|
the 2007 Entity is 0x1BC vs the binary's 0x300, so raw base-offset reads fail).
|
|
- **DEFERRED** — Gyroscope 0xBC4 (NaN integrator), SubsystemMessageManager 0xBD3 (WAVE 8 — the valve/
|
|
message/advanced-damage hub @mech+0x190). [T2]
|
|
|
|
## The four systemic checks (every subsystem)
|
|
See [[reconstruction-gotchas]]: (1) shadowing (re-declared engine-base fields), (2) the `Wword` trap,
|
|
(3) message-handler chaining, (4) entity validity. Plus resource-struct layout (must mirror the class
|
|
hierarchy, byte-exact — the RESOURCE_AUDIT found 8 bugs) and object-layout (alias/phantom/interior
|
|
fields). A `+0x128`-style owner offset is the ROSTER, not the segment table (the heat-link type
|
|
confusion that caused a heap-corruption via OOB `ConductHeat` writes). [T2]
|
|
|
|
## Engineering cluster panels (`vehicleSubSystems`)
|
|
Not a widget — a per-subsystem FACTORY (`FUN_004cbaf0`) building a status CLUSTER onto one of 12 aux
|
|
MFD positions, dispatching on classID → HeatSinkCluster/MyomerCluster/EnergyWeaponCluster/
|
|
BallisticWeaponCluster. Reads `PoweredSubsystem::auxScreenNumber/Placement/Label` (res +0x104/8/C) via
|
|
the `BTGetSubsystemAuxScreen` bridge. See `docs/VEHICLE_SUBSYSTEMS.md` + [[gauges-hud]]. [T2]
|
|
|
|
## Key Relationships
|
|
- Data: [[decomp-reference]] (ClassIDs/hierarchy). Bugs: [[reconstruction-gotchas]].
|
|
- Feeds: [[combat-damage]] (weapons/damage), [[gauges-hud]] (attribute state).
|
|
- Plan: `docs/SUBSYS_PLAN.md`.
|