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>
57 lines
2.3 KiB
Bash
57 lines
2.3 KiB
Bash
#!/usr/bin/env bash
|
|
# #81/#45 FOUR-NODE CROSS-FIRE: real weapon kills, real attribution.
|
|
#
|
|
# No self-damage anywhere. All four pilots chase the nearest live peer
|
|
# (BT_GOTO=enemy), hold at 150m, and fire in bursts (BT_AF_PERIOD throttles
|
|
# BOTH the gun and missile groups -- unthrottled spam trips the documented
|
|
# FailureHeat all-weapons brick and combat dies). Every death is a weapon
|
|
# kill by another pilot, resolved cross-machine through the authentic path.
|
|
#
|
|
# Launched through bench_common.sh: every window is configured EXACTLY like a
|
|
# player's shortcut (cockpit view, glass cockpit, MFDs) on an EXPERT egg, so
|
|
# heat/crits/jams behave as they do in the field.
|
|
#
|
|
# PASS = matchlog KILL rows with killer != victim, panels mirror (SBMIRROR +
|
|
# panel DRAW), every death START -> RESET, 0 SWALLOWED / 0 MISMATCH /
|
|
# 0 DISCARDED / 0 GHOST / 0 crash.
|
|
set -x
|
|
. /c/git/bt411/scratchpad/night6/bench_common.sh
|
|
cd /c/git/bt411/content || exit 1
|
|
bt_assert_player_env
|
|
rm -f mp4c_a.log mp4c_b.log mp4c_c.log mp4c_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
|
|
PD=/c/git/bt411/scratchpad/night6/procdump.exe
|
|
|
|
launch () { # $1=log $2=affinity $3=port
|
|
BT_MP_LOG=1 BT_SCORE_LOG=1 BT_DEATH_LOG=1 BT_MATCHLOG=1 BT_TLOC_LOG=1 \
|
|
BT_GOTO=enemy BT_GOTO_STOP=150 BT_AUTOFIRE=1 BT_AF_MISSILE=1 BT_AF_PERIOD=7 \
|
|
bt_launch "$1" MP4X.EGG "$2" -net "$3"
|
|
sleep 2
|
|
# crash net: full dump on any unhandled exception (a node died silently once)
|
|
if [ -x "$PD" ]; then
|
|
for pid in $(tasklist //FI "IMAGENAME eq btl4.exe" //NH 2>/dev/null | awk '{print $2}'); do
|
|
[ -f "/c/git/bt411/scratchpad/night6/pd_$pid.txt" ] && continue
|
|
"$PD" -accepteula -e -ma "$pid" \
|
|
"/c/git/bt411/scratchpad/night6/crash_$pid.dmp" \
|
|
> "/c/git/bt411/scratchpad/night6/pd_$pid.txt" 2>&1 &
|
|
done
|
|
fi
|
|
}
|
|
rm -f /c/git/bt411/scratchpad/night6/pd_*.txt /c/git/bt411/scratchpad/night6/crash_*.dmp
|
|
launch mp4c_d.log 0xC0 1801
|
|
launch mp4c_c.log 0x30 1701
|
|
launch mp4c_b.log 0x0C 1601
|
|
launch mp4c_a.log 0x03 1501
|
|
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 480
|
|
kill $PC 2>/dev/null
|
|
taskkill //F //IM btl4.exe 2>/dev/null
|
|
rm -f MP4X.EGG
|
|
echo "=== DONE ==="
|