Combat: the AUTHENTIC consolidated damage delivery -- TakeDamageStream through the message manager (task #7 tail)
ConsolidateAndSendDamage @0049b784 fully implemented: the beam path submits
into AddDamageMessage; each messmgr tick builds ONE Entity::
TakeDamageStreamMessage (id 0x13; wire-verified 0x34+4+Nx12) with the
common impact record + appended {type, amount, subsystemID} entries and
Dispatches it at the victim -- the T0 handler (ENTITY.cpp:817) re-splits
into per-record TakeDamage; replicants reroute cross-pod. Real
ResolveExplosionID (firing weapon's +0x3E4, guarded) + SubmitExplosion via
the Explosion::Make port; TWO chain-purge bugs fixed (the "iterator dtor
clears it" assumption was wrong -- records re-applied every tick, observed
1->2->3->4 double-counting). @004b9728 identity corrected (SendDamageMessage,
not DrawWeaponPip). Verified solo: 25 clean single-record consolidations ->
kill -> death transition. Residue: weapon-side submission awaits the
damage-economy reconciliation (authored 0.25-scale vs kShotDamage=12).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
afefaeece5
commit
77190c93e5
+20
-12
@@ -22,18 +22,26 @@ authentic path scoped.
|
||||
Win10+wrapper pod config. Status: OPEN.
|
||||
|
||||
## Deferred subsystems / feeds (authentic path scoped, marked in code)
|
||||
- **0xBD3 SubsystemMessageManager (WAVE 8)** — a per-mech **damage/explosion consolidation hub**
|
||||
(`ConsolidateAndSendDamage` Performance @0049b784, `weaponExplosions` queue, `CommonDamageInformation`;
|
||||
messmgr.hpp). ctor `FUN_0049bca4` (vtable 0x50b954, installs a Performance → ticks). The factory
|
||||
caches it to **`Mech[0x10d]` = byte 0x434**. What wiring it needs: an untangle — our reconstruction
|
||||
MISLABELED `Mech[0x10d]` as `controlsMapper` and `mech4`'s live drive reads it as the mapper, so the
|
||||
real messmgr can't land there until the drive is re-pointed to the true mapper (**roster slot 0**,
|
||||
installed by `SetMappingSubsystem`/`MakeViewpointEntity`; a `MechRIOMapper`). Payoff = authentic
|
||||
damage/explosion consolidation (a COMBAT-fidelity improvement) + fixing the mapper/messmgr conflation.
|
||||
⚠ **CORRECTION (verified 2026-07):** 0xBD3 does NOT gate the valve/Myomers/MessageBoard — those read a
|
||||
DIFFERENT object at **`mech+0x190`** (both `FUN_004ac9c8` the valve guard `→+0x274` and `FUN_004ad7d4`
|
||||
the Myomers gate `→+0x260` deref `owner+0x190`, which ≠ the 0x434 messmgr cache). The earlier
|
||||
"0xBD3 gates 4 things" note was wrong.
|
||||
- **✅ 0xBD3 SubsystemMessageManager — UNTANGLED + LIVE (task #7, 2026-07-11) [T1/T2].**
|
||||
Both halves landed: (1) the factory case builds the REAL messmgr (ctor @0049bca4, 0x130,
|
||||
static reconstruction messmgr.cpp) cached at `mech+0x434` — the binary-wide census found
|
||||
exactly ONE reader (@0x4b984b in `MechWeapon::SendDamageMessage` @004b9728, which was ALSO
|
||||
mislabeled, as "DrawWeaponPip"); every mapper consumer re-pointed to roster slot 0
|
||||
(`MappingMapper()`; `SetMappingSubsystem` @0049fe40 touches only slot 0); non-viewpoint mechs
|
||||
carry a slot-0 demand LATCH ([T3] accommodation for the port's wider drive/gait reachability).
|
||||
(2) The authentic CONSOLIDATED damage delivery is live: the beam path submits TakeDamage into
|
||||
`AddDamageMessage` → per-frame `ConsolidateAndSendDamage` (@0049b784) builds ONE
|
||||
`Entity::TakeDamageStreamMessage` (id 0x13, wire-verified 0x34+4+N×12) dispatched at the
|
||||
victim, whose T0 handler (ENTITY.cpp:817) re-splits it; replicant victims reroute cross-pod.
|
||||
Explosion bundling (weapon+0x3E4 per record, unique-queued, Explosion::Make at the impact)
|
||||
implemented; TWO latent chain-purge bugs fixed (records re-applied every tick). RESIDUE
|
||||
([T3], next task): the weapon-side submission with per-weapon `damageData` +
|
||||
`inflictingSubsystemID` awaits the DAMAGE-ECONOMY reconciliation (authored 0.25-scale
|
||||
amounts vs the bring-up kShotDamage=12); the 0.1s explosion stagger + the terrain-hit
|
||||
derivation check are noted in messmgr.cpp.
|
||||
⚠ The earlier "0xBD3 gates the valve/Myomers" claim remains WRONG (those read the owning
|
||||
BTPlayer at mech+0x190 — see the next entry); the old wiring notes are superseded by this
|
||||
landing.
|
||||
- **✅ `mech+0x190` IDENTIFIED (2026-07): it is the owning `BTPlayer`** (`Mech::GetPlayerLink()`,
|
||||
`MECH_OWNING_PLAYER`; ENTITY.h:430). Set by `FUN_0049f624` (the mech↔player bind: `mech+0x190 = player`
|
||||
AND `player->playerVehicle(+0x1fc) = mech`), which resolves the player from the mission player registry
|
||||
|
||||
@@ -35,7 +35,7 @@ Making a base byte-exact GROWS every subclass — they must be re-based TOGETHER
|
||||
`static_assert`-locked (the P7 alarm-unification: HeatSink 0x1D0 → PoweredSubsystem 0x31C → MechWeapon
|
||||
0x3F0 → Emitter 0x478). [T2]
|
||||
|
||||
## Reconstruction waves (state: 19 of 20 factory cases wired to real classes — only 0xBD3 remains, the MechControlsMapper squatter)
|
||||
## Reconstruction waves (state: ALL 20 factory cases wired to real classes — 0xBD3 = the real SubsystemMessageManager since task #7, 2026-07-11; the mapper lives in roster slot 0)
|
||||
- **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
|
||||
|
||||
Reference in New Issue
Block a user