Files
BT411/scratchpad/night6/mp4_panel.sh
T
Joe DiPrimaandClaude Fable 5 4e89baeff3 bench parity: local nodes now launch exactly like a player's shortcut
Local benches had drifted from the shipped launchers and every divergence
cost a debugging session:

  * no BT_START_INSIDE -> benches opened in the EXTERNAL CHASE camera while
    every player starts in the COCKPIT.  The first first-person look at a
    bench window was misread as a broken HUD.
  * novice bench eggs  -> every SHIPPED egg is expert; novice gates off the
    entire heat model, crits and jams, so bench combat was not field combat.
    (Verified: the aligned node now boots experience=3 simLive=1
    heatModelOn=1, where it used to boot 0/0/0.)
  * 1-LP affinity pins -> starved the gauge executive and produced a false
    "the comms panel never counts deaths" reading.  Two LPs per node keeps
    the documented single-box jitter fix without the starvation.

scratchpad/night6/bench_common.sh now owns the contract (bt_player_env,
bt_launch, bt_expert_egg, bt_novice_egg) copied verbatim from play_solo.bat,
with bt_assert_player_env warning if the shipped bat ever drifts.  All three
4-node benches source it.  The limp bench keeps a novice egg -- expert crits
the aimed leg and the mech turns-but-never-moves -- and now says so loudly.

Also: BT_SHOT_EVERY=<n> headless backbuffer capture (btl4vid.cpp), the tool
this was diagnosed with.  It must sit above the warp phase-0 early-out since
that fn is the per-frame alpha-pass hook.  OS screen-capture is off-limits:
a foreground-lock failure photographed the user's browser instead of the game.

KB: build-and-run.md gains the bench-parity rule + the capture diag;
cockpit-view.md gains the measured aspect/FOV finding (the surround's 2.05:1
view collapses vertical FOV to 31.5 deg vs the pod's 46.8, so fixed canopy
geometry covers 68.6% of the lower half -- NOT a regression: the shipped 643
binary reports identical geometry).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 13:30:30 -05:00

49 lines
1.8 KiB
Bash

#!/usr/bin/env bash
# #81/#45 FOUR-NODE RESPAWN + SCOREBOARD BENCH.
#
# Four networked instances, ALL dying repeatedly on staggered timers so death
# cycles overlap (the field condition: several respawn handshakes in flight at
# once, each answered by an arbitrary peer's DropZone).
#
# Launched through bench_common.sh, so every window is configured EXACTLY like
# a player's play_solo/join shortcut (cockpit view, glass cockpit, MFDs) and
# flies an EXPERT egg like every shipped one. What you see here is what the
# field sees.
#
# PASS = every death cycle pairs START -> RESET on its own node
# 0 SWALLOWED / 0 MISMATCH / 0 DISCARDED / 0 GHOST / 0 crash
# and each node's PLAYER_DEAD tally increments 1 per death.
# WATCH = the comms panel KILLS/DEATHS columns, and the blue respawn vortex.
set -x
. /c/git/bt411/scratchpad/night6/bench_common.sh
cd /c/git/bt411/content || exit 1
bt_assert_player_env
rm -f mp4p_a.log mp4p_b.log mp4p_c.log mp4p_d.log
A=/c/git/bt411/scratchpad/night6/runs/$(date +%H%M%S); mkdir -p "$A"; mv matchlog_*.txt "$A"/ 2>/dev/null
bt_expert_egg MP4.EGG MP4X.EGG
# staggered first deaths so the cycles interleave instead of lining up
launch () { # $1=log $2=affinity $3=port $4=delay
BT_MP_LOG=1 BT_SCORE_LOG=1 BT_DEATH_LOG=1 BT_MATCHLOG=1 BT_PERF=1 \
BT_SELF_DAMAGE=60 BT_SELF_DAMAGE_DELAY=$4 BT_SELF_DAMAGE_REPEAT=1 \
bt_launch "$1" MP4X.EGG "$2" -net "$3"
}
launch mp4p_d.log 0xC0 1801 34
sleep 1
launch mp4p_c.log 0x30 1701 41
sleep 1
launch mp4p_b.log 0x0C 1601 48
sleep 1
launch mp4p_a.log 0x03 1501 55
sleep 5
python ../tools/btconsole.py MP4X.EGG 127.0.0.1:1501 127.0.0.1:1601 \
127.0.0.1:1701 127.0.0.1:1801 &
PC=$!
sleep 150
kill $PC 2>/dev/null
taskkill //F //IM btl4.exe 2>/dev/null
rm -f MP4X.EGG
echo "=== DONE ==="