From 377aec92b0c3e551db81d60597983c7dd19770ff Mon Sep 17 00:00:00 2001 From: Cyd Date: Mon, 27 Jul 2026 12:48:34 -0500 Subject: [PATCH] BT410: the MFD wave landing report (5.3.33-38) Where the cockpit stands per head, the five defects the rig found and the order they fell, and the measurement lesson: a large overlapping error makes a small one measure as already-optimal, which is exactly what I recorded for the title banner before the strip art was fixed. Co-Authored-By: Claude Fable 5 --- .../source410/BT_L4/GAUGE-BLOCK.NOTES.md | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/restoration/source410/BT_L4/GAUGE-BLOCK.NOTES.md b/restoration/source410/BT_L4/GAUGE-BLOCK.NOTES.md index 7aca7c0d..80abd11a 100644 --- a/restoration/source410/BT_L4/GAUGE-BLOCK.NOTES.md +++ b/restoration/source410/BT_L4/GAUGE-BLOCK.NOTES.md @@ -778,3 +778,85 @@ Everything in this list came from the per-head instrument in one sitting; none of it was visible in the whole-frame score, which moved less than a point across the entire session even as Eng1/2/3 went to exact. Score the heads, not the frame. + +================================================================================ +5.3.33-38 -- THE MFD WAVE: the weapon panels close to a few dozen pixels +================================================================================ + +Where the cockpit stands against the shipped 4.10 binary (planes.py): + + head shipped ours missing extra + Eng1 17981 17981 0 0 + Eng2 17981 17981 0 0 + Eng3 17981 17981 0 0 + Mfd1 41784 41651 140 7 + Mfd2 40799 40716 97 14 + Mfd3 32146 32128 31 13 + Heat 21374 20971 483 80 + Comm 15656 13557 2099 0 + overlay 3283 3325 55 97 + sec 35423 36137 325 1039 <- the 3-D scene (btl4vid) + +Whole frame: 98.2% pixel-identical / 97% coverage, from 89.7% / 92% at the +start of the session. Six of the ten heads are exact or within ~150px. + +FIVE DEFECTS, ALL FOUND BY THE RIG, IN THE ORDER THEY FELL: + +1. MissileLauncher::DefaultData carried Subsystem's shared-data tables where + every sibling weapon carries MechWeapon's -- so EVERY weapon attribute on + a launcher resolved to nothing and the gauge read the unbound zero cell. + The tell was a fire-ready disc the shipped STREAK 6 panel draws and ours + never did, while [proj-state] showed the launcher itself at state=Loaded + recoil=0 level=1 bin=24. A healthy weapon behind a dead binding. ~7.6K + pixels. This one reaches well past the cockpit: PercentDone, + TriggerState, WeaponState, DistanceToTarget and RearFiring were all dead + on both SRM6 launchers. + +2. The strip art (image_names[auxScreenPlacement], qblh0..qblh6 -- the mech + diagram with this subsystem's segment lit) drew at the panel ORIGIN + instead of the quadrant's middle. Solved rather than guessed: our extra + pixels clustered at panel x 0..70 against shipped's missing at x 140..230, + and a cross-correlation of the two sets peaked at dx=+144 dy=-54 + independently on all three panels. +144 is 0x90 exactly. ~10.9K missing + and ~6.7K extra pixels. + +3. The ammo readout was inert (ammoBinLink protected, no accessor). + ProjectileWeapon now publishes GetAmmoCount() and the cluster copies it + into a live cell each Execute -- the pattern it already used for jammed + and reloadSeconds. The STREAK 6 panel reads 0024 against shipped's 0024. + +4. CoolingLoopConnection::Update wrote a constant 0, so every panel's state + box read "OFF" where shipped shows the loop digit. heat.hpp now publishes + GetCoolantAvailable() / ResolveCoolingMaster() / GetCondenserNumber() and + the connection follows the binary. The box reads 4 / A against shipped's + 4 / A, pixel for pixel. + +5. SegmentArc270 computed segmentSpan = 0.75 in its ctor and NOTHING read it + -- the engine base has no span member and the class declared no Execute, + so the dial lit all 20 segments where shipped lights 15. A derived + Execute now scales the fraction, draws, and restores it (the connection + only rewrites currentValue on change, so scaling in place would compound + and walk the dial to zero). Extra: 679/462/461 -> 7/14/13. + +-------------------------------------------------------------------------------- +THE MEASUREMENT LESSON, WHICH IS THE REUSABLE PART +-------------------------------------------------------------------------------- +Mid-session I measured the title banner at y+0xb3 as the OPTIMUM and wrote in +this file that it was at most 1-2px off: +3 and -3 both scored worse, and the +correlation peaked at only 30%. That reading was CONFOUNDED. The strip-art +error (defect 2) was ten times larger and lived in the same bands, so it +dominated the metric and hid a clean one-row error underneath. Once the +strip art was right, the title fringe isolated at exactly 553/553 +missing/extra per head and +1 collapsed it to nothing. + +So: fix the LARGEST error on a head first, then re-measure the small ones. A +big overlapping defect makes a small one measure as noise -- or worse, as +already-optimal, which is what I recorded. + +WHAT IS LEFT, LARGEST FIRST: + * sec (325 missing / 1039 extra) -- the 3-D scene head. This is btl4vid, + the world renderer, and the next big climb; the gauge work cannot move it. + * Comm (2099 missing / 0 extra) -- content the shipped Comm page draws that + we never build at all. Zero extra means nothing we draw there is wrong, + so this is a build-it wave, not a fix-it one. + * Heat (483 / 80) and the MFD remainders (~270 / ~34) -- fine detail.