Files
BT411/game
Joe DiPrimaandClaude Opus 5 566daf358f #191 FIXED + 2-node benched: peers can see a coolant flush again. The manual promises it (p24 'other pilots will see steam rise from your Mech on the battlefield') and on the machine it was FREE: BTL4VID.CPP built a mode-1 effect renderable per Reservoir on its ReservoirState ATTRIBUTE (part_014.c:10308 -- FUN_0041bfc0(sub,'ReservoirState') resolves to the alarm's own address) and the renderable's tick started the pfx when the watched state changed to 1, on whichever node it was built on. The port consolidated those renderables into the psfx layer and hung the spawn off Reservoir::InjectCoolantMessageHandler, which mech4 dispatches for the VIEWPOINT mech only and delivers with a local Dispatch -- so nothing about a flush ever left the flusher's machine.
Fixed the way the binary does subsystem replication (MechWeapon::WriteUpdateRecord @004b9690, Emitter @004ba65c, already mirrored in emitter.cpp): extend the record, set recordLength, append the field; the receive half applies it on the EDGE only, so a long flush spawns ONE cloud rather than one per packet.

TRAP AVOIDED, worth recording: the obvious route was Simulation::simulationState, which every subsystem record already carries -- but on a MechSubsystem that cell is the TECH STATUS vocabulary (StateCount 7) and state 1 is DestroyedState, which btl4gaug.cpp:427 paints as a full critical tint. Publishing the flush there would have drawn the reservoir as DESTROYED on every damage schematic for the duration of a flush. Surfaced only because a [flush-tx] probe read the state back as 0 and I went looking for why.

Bench (scratchpad/night18/mp_flush7.sh, madcat/grass, A flushes at frame 900 under BT_FLUSH_TEST): before = A logs the cloud, B logs nothing; after = B spawns the cloud at A's exact position (-241.894,7,-904.136) with a clean STARTED/ended pair.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-15 10:44:58 -05:00
..