KB: record the CoolingLoopConnection databinding-trap AV fix (gauges-hud)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-16 19:46:50 -05:00
co-authored by Claude Fable 5
parent cefbc3a686
commit 2bb9b602bb
+11
View File
@@ -63,6 +63,17 @@ TestInstance/BecameActive/Execute. **Gotchas that bite EVERY widget:**
- **Condenser valve gauge:** ValveSetting→coolantFlowScale reads the authentic **1/N**
(`RecomputeCondenserValves`, FUN_0049f788, was a no-op stub). [T2]
## CoolingLoopConnection AV — FIXED 2026-07-14 [T3]
`CoolingLoopConnection::Update` (btl4gau2.cpp) walked the binary's plug→link→subsystem chain via
raw `+8` offsets; our reconstructed subsystem layout isn't byte-identical, so an intermediate
`link` came out non-null-but-garbage and `*(link+8)` AV'd — **the moment a mech's coolant loop
goes active** (`source+0x134==1`), so it crashed the **real pod path too**, not just
`BT_DEV_GAUGES` (the gauge background task runs `Update` whenever gauges are active). Pre-existing
(byte-identical across the 2026-07-14 BT411 merge). Fix: `BTPtrReadable` (VirtualQuery) guards
each raw deref → an invalid chain resolves to the authentic "no source" branch (0). Classic
[[reconstruction-gotchas]] databinding trap; the proper follow-up is named Plug/Link accessors in
a complete-type TU instead of raw offsets. With the guard, the full cockpit MFD suite renders.
## Dev composite (off-pod)
`BT_DEV_GAUGES` renders the 6 pod [[MFD]] surfaces in a separate 960×384 window (bit-plane masks
over one shared `SVGA16` pixelBuffer; `SVGA16::DrawDevSurface`). On the POD they come from