From 5b7f3a1c40112bffd8399b9425cb7ed7d6d74fd2 Mon Sep 17 00:00:00 2001 From: arcattack Date: Tue, 7 Jul 2026 23:01:45 -0500 Subject: [PATCH] context: sweep the 0xBD3/mech+0x190 correction across all topic files Propagate the verified finding (0xBD3 = damage/explosion hub @0x434, NOT the valve/message gate; the valve/Myomers gates read the owning BTPlayer @mech+0x190) into the topic files that still carried the old claim: decomp-reference (ClassID row + both offset rows), gauges-hud, subsystems, open-questions (Myomers coupling), + frontmatter. Graph validates clean. Co-Authored-By: Claude Opus 4.8 (1M context) --- context/decomp-reference.md | 4 ++-- context/gauges-hud.md | 12 ++++++++---- context/open-questions.md | 5 +++-- context/subsystems.md | 9 ++++++--- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/context/decomp-reference.md b/context/decomp-reference.md index c6b79c1..4a5d68c 100644 --- a/context/decomp-reference.md +++ b/context/decomp-reference.md @@ -64,7 +64,7 @@ reconciled via `CLASSMAP.md`, not the case label. [T1] | 0xBCD | **ProjectileWeapon** | @4bc3fc | sizeof 0x448 (`case`≠ this — see VDATA.h) | | 0xBCE | **GaussRifle** | @4bdcb4 | : Emitter; FireWeapon is a **no-op** in this build | | 0xBD0 | **MissileLauncher** | @4bcff0 | sizeof 0x44C | -| 0xBD3 | **SubsystemMessageManager** | — | DEFERRED (WAVE 8; the valve/message control hub @mech+0x190) | +| 0xBD3 | **SubsystemMessageManager** | @0049bca4 | damage/explosion consolidation hub (ConsolidateAndSendDamage, weaponExplosions); cached to `Mech[0x10d]`=**0x434** (recon MISLABELS it `controlsMapper`; the drive squats there — the real mapper is roster slot 0). NOT the valve/Myomers gate (that's the owning **BTPlayer** @mech+0x190). WAVE 8 = untangle + damage-hub. | | 0xBD4 | **PPC** (: Emitter) | — | same FireWeapon as Emitter; `factory calls it GaussRifle` | | 0xBD6 | **HUD** | — | alloc 0x2a4; `case`=MechDisplay-ish | | 0xBD8 | **Searchlight** | — | `case`=LegSubsystem | @@ -88,7 +88,7 @@ valid for reading the decomp, NOT for our compiled layout (see [[reconstruction- |---|---|---| | +0x11c / +0x120 | `damageZoneCount` / `damageZones[]` | inherited Entity; Mech ctor populates the array | | +0x124 / +0x128 | `subsystemCount` / `subsystemArray[]` | the [[subsystem-roster]] (NOT the segment table) | -| +0x190 | gate object (UNIDENTIFIED) | a per-mech status/damage-state object; the valve guard (`FUN_004ac9c8 →+0x274`) + Myomers gate (`FUN_004ad7d4 →+0x260`) deref `owner+0x190`. NOT the messmgr (which is at 0x434). No decompiled writer found yet — see [[open-questions]]. | +| +0x190 | **owning `BTPlayer`** (`GetPlayerLink()`) | set by `FUN_0049f624` (mech↔player bind; also `player->playerVehicle(+0x1fc)=mech`). The valve guard (`FUN_004ac9c8 →player+0x274`) + Myomers gate (`FUN_004ad7d4 →player+0x260`) read the owning player's game-mode flags (NOT the messmgr @0x434). `MECH_OWNING_PLAYER`. | | +0x434 (word 0x10d) | `SubsystemMessageManager` cache | the 0xBD3 damage/explosion hub (factory @10142). Our recon MISLABELS this `controlsMapper` + the drive squats here; the real mapper is roster slot 0. | | +0x260 / +0x26c | `localOrigin` = { Point3D linearPosition; Quaternion angularPosition } | ORIGIN.h:15; position@+0x100 in some subsystem views | | +0x300 | segment table | skeleton `EntitySegment`s (muzzle sites, joints) | diff --git a/context/gauges-hud.md b/context/gauges-hud.md index bd9d8cd..94a981a 100644 --- a/context/gauges-hud.md +++ b/context/gauges-hud.md @@ -6,7 +6,7 @@ source_sections: "docs/GAUGE_COMPOSITE.md (full map); CLAUDE.md §8" related_topics: [reconstruction-gotchas, decomp-reference, subsystems, pod-hardware] key_terms: [gauge, methodDescription, attribute-pointer, GaugeRenderer, MFD, PCC] open_questions: - - "Valve/message CONTROL routes need the 0xBD3 SubsystemMessageManager (WAVE 8)" + - "Condenser valve control gates on the owning BTPlayer game-mode flag (mech+0x190), likely off in basic missions" - "Status-message queue (StatusMessagePool) is a NULL stub -> MessageBoard is empty" --- @@ -76,9 +76,13 @@ RANK 1 solo; MessageBoard empty (no status messages exist in bring-up). The Heat authentically NEAR-STATIC, not a live heat-accumulation display. [T2] ## Remaining = DATA FEEDS, not widgets (deferred systems) -The valve/message CONTROL routes need the **0xBD3 SubsystemMessageManager** (WAVE 8); the -status-message queue needs **StatusMessagePool** (a NULL stub); `SeekVoltageGraph`'s 4 Seek* -attrs are a cluster-child (not config-called). See [[open-questions]]. [T2] +The **condenser valve CONTROL** gates on the owning **BTPlayer**'s game-mode flag (`mech+0x190`, +`GetPlayerLink()`, via `MechSubsystem::IsDamaged`/`FUN_004ac9c8` reading `player+0x274`) — NOT the +0xBD3 messmgr (a common earlier misconception; 0xBD3 is a damage/explosion hub at `Mech[0x10d]`=0x434). +In a basic mission the valve/mode flags are likely off, so the dormant valve is plausibly AUTHENTIC — +see [[open-questions]] `mech+0x190`. The **MessageBoard** feed needs **StatusMessagePool** (a NULL +stub) + the per-player status queue. `SeekVoltageGraph`'s 4 Seek* attrs are a cluster-child (not +config-called). [T2] ## Key Relationships - Full history: `docs/GAUGE_COMPOSITE.md`. diff --git a/context/open-questions.md b/context/open-questions.md index 356c50d..6c43610 100644 --- a/context/open-questions.md +++ b/context/open-questions.md @@ -62,8 +62,9 @@ authentic path scoped. members; arbitrate before enabling (no port consumer yet). The fire-trigger-through-mapper is still the `gBTWeaponTrigger` bring-up. - **Myomers authentic coupling** — the structural un-stub is INERT (mover feed + heat-gen no-op). - Real coupling needs the 0xBD3 advanced-damage gate + `MoverAttach` routing into the LIVE - JointedMover (must be reconciled with the gait cutover first). + Real coupling needs the advanced-damage gate (`OwnerAdvancedDamage`/`FUN_004ad7d4` → the owning + **BTPlayer** `mech+0x190`+0x260, NOT 0xBD3 — see the mech+0x190 item above) + `MoverAttach` routing + into the LIVE JointedMover (must be reconciled with the gait cutover first). - **SeekVoltageGraph** — 4 Seek* attrs unpublished (a cluster-child, not config-called; non-blocking). ## Locomotion / combat polish (non-gating) diff --git a/context/subsystems.md b/context/subsystems.md index 0345fca..a95fae6 100644 --- a/context/subsystems.md +++ b/context/subsystems.md @@ -6,7 +6,7 @@ source_sections: "PROGRESS_LOG.md §10d; docs/SUBSYS_PLAN.md; docs/VEHICLE_SUBSY 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)" + - "Gyroscope (0xBC4) integrator; Myomers coupling (gates on owning-player @mech+0x190); 0xBD3 damage-hub untangle (WAVE 8)" --- # Subsystems @@ -46,8 +46,11 @@ Making a base byte-exact GROWS every subclass — they must be re-based TOGETHER - **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] +- **DEFERRED** — Gyroscope 0xBC4 (NaN integrator); SubsystemMessageManager 0xBD3 (WAVE 8 — a + **damage/explosion consolidation hub** cached to `Mech[0x10d]`=0x434; recon MISLABELS the slot + `controlsMapper` + the drive squats there while the real mapper is roster slot 0, so wiring it needs + an untangle. NOT the valve/advanced-damage gate — that's the owning **BTPlayer** @mech+0x190, see + [[combat-damage]]/[[open-questions]]). [T2] ## The four systemic checks (every subsystem) See [[reconstruction-gotchas]]: (1) shadowing (re-declared engine-base fields), (2) the `Wword` trap,