The gauge framebuffer is PLANE-PACKED: L4GAUGE.CFG gives each port a bit
mask, not a rectangle, so all six heads share the same x/y and are separated
only by bit -- the packing the VDB splits into the pod's physical screens.
Comparing RGB was therefore measuring nothing useful; the "magenta artifact"
just meant the wrong heads were lit at that pixel.
New instruments (emulator/render-bridge/gauge-ab/, with a README):
planes.py per-head scoreboard -- shipped vs ours, missing vs extra, per
port mask, recovering the 16-bit word from DOSBox's RGB565
BT_VIS_LOG a complete cockpit widget map from the single dispatch every
gauge widget is built through (MethodDescription::Execute),
printing name + port + authored position
ab.sh stages the fresh build over BTL4REC.EXE and kills any running
DOSBox before launching -- see below
The fix: the Comm page's pilot roster is the POD roster (the viewpoint mech's
ControlsMapper pilot array, mapper attributes 15/16), not the mission's
player list. It is zero in a solo mission, so the shipped page draws empty;
ours resolved the local player and painted its icon in colour 0xff. The gate
belongs in the row source, not PilotList::Execute -- Execute's empty branch
still has to run, because erasing is what the shipped page draws.
head shipped ours missing extra (was)
Eng1 17981 17981 0 0 (0 / 1030)
Eng2 17981 17981 0 0
Eng3 17981 17981 0 0
Comm 15656 13557 2099 0 (2099 / 1253)
Heat 21374 20913 566 105 (566 / 990)
Title-band magenta 404 -> 0. The 2099 Comm pixels we are missing were
missing before the gate, so it is a strict improvement.
Method note, which cost more than the bug: the rig's confs run BTL4REC.EXE
out of the mount while the build writes build410/btl4opt.exe, and nothing
connected the two. Three measurements ran an hour-old binary, so a change
that "did nothing" three times had never been tested -- and the correct first
hypothesis was discarded on that evidence. ab.sh now re-stages every launch.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
44 lines
1.5 KiB
Bash
44 lines
1.5 KiB
Bash
#!/bin/bash
|
|
#
|
|
# gauge-ab: stage + run one side of the cockpit A/B rig.
|
|
#
|
|
# ab.sh rec -- stage the freshly built reconstruction and run it
|
|
# ab.sh shp -- run the shipped 4.10 binary
|
|
#
|
|
# STAGING IS THE WHOLE POINT. The rig's confs run BTL4REC.EXE / BTL4SHP.EXE
|
|
# out of the shared mount, NOT build410/btl4opt.exe. Forgetting to copy the
|
|
# new build over BTL4REC.EXE silently measures the PREVIOUS binary -- which
|
|
# on 2026-07-27 cost a full round of wrong conclusions (a change "did
|
|
# nothing" three times because the tested exe never changed). So: always
|
|
# launch through this script, and it always re-stages first.
|
|
#
|
|
set -e
|
|
|
|
R=/c/VWE/TeslaRel410/restoration
|
|
IMG=$R/build410/run/image
|
|
SIDE=${1:-rec}
|
|
|
|
# one instance at a time -- two DOSBoxes share OUT.TXT and corrupt the trace
|
|
if tasklist //FI "IMAGENAME eq dosbox-x.exe" 2>/dev/null | grep -qi dosbox-x; then
|
|
echo "killing running dosbox-x"
|
|
taskkill //F //IM dosbox-x.exe > /dev/null 2>&1 || true
|
|
sleep 2
|
|
fi
|
|
|
|
if [ "$SIDE" = "rec" ]; then
|
|
SRC=$R/build410/btl4opt.exe
|
|
DST=$IMG/BTL4REC.EXE
|
|
[ -f "$SRC" ] || { echo "no build at $SRC -- run build410.sh link"; exit 1; }
|
|
cp -f "$SRC" "$DST"
|
|
echo "staged $(ls -la "$DST" | awk '{print $5, $6, $7, $8}') <- $(basename $SRC)"
|
|
CONF=$R/build410/run/vis_rec.conf
|
|
else
|
|
echo "shipped side (no staging)"
|
|
CONF=$R/build410/run/vis_shp.conf
|
|
fi
|
|
|
|
rm -f "$IMG/OUT.TXT"
|
|
cd /c/VWE/TeslaRel410/emulator/src/src
|
|
./dosbox-x.exe -conf "$CONF" > /dev/null 2>&1 &
|
|
echo "launched $SIDE ($(basename $CONF)) -- pid $!"
|