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>
32 lines
1.3 KiB
Bash
32 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
# #81 GHOST REPRO: two nodes, BOTH die, watch the respawn handshake.
|
|
#
|
|
# Looking for, on either node:
|
|
# [dzreq] ... msgDeath= ourDeathCount= (the request side)
|
|
# [dz] GRANTED / STALL (the drop zone's answer)
|
|
# [ghost] DROP-ZONE REPLY DISCARDED (the silent-discard path)
|
|
# [respawn] ... RESET at drop zone (success)
|
|
# A node with a death cycle START and no RESET has reproduced the field ghost.
|
|
set -x
|
|
cd /c/git/bt411/content || exit 1
|
|
rm -f mp_a.log mp_b.log
|
|
sed 's/^experience=expert/experience=novice/' MP.EGG > MPG.EGG
|
|
|
|
# B first (listener), then A -- same order as the working mp_skate.sh
|
|
BT_LOG=mp_b.log BT_AFFINITY=0x2 BT_MP_LOG=1 BT_SCORE_LOG=1 BT_DEATH_LOG=1 \
|
|
BT_TLOC_LOG=1 BT_SELF_DAMAGE=60 BT_SELF_DAMAGE_DELAY=40 BT_SELF_DAMAGE_REPEAT=1 \
|
|
../build/Release/btl4.exe -egg MPG.EGG -net 1601 &
|
|
sleep 2
|
|
BT_LOG=mp_a.log BT_AFFINITY=0x1 BT_MP_LOG=1 BT_SCORE_LOG=1 BT_DEATH_LOG=1 \
|
|
BT_TLOC_LOG=1 BT_SELF_DAMAGE=60 BT_SELF_DAMAGE_DELAY=55 BT_SELF_DAMAGE_REPEAT=1 \
|
|
../build/Release/btl4.exe -egg MPG.EGG -net 1501 &
|
|
sleep 4
|
|
python ../tools/btconsole.py MPG.EGG 127.0.0.1:1501 127.0.0.1:1601 &
|
|
PC=$!
|
|
|
|
sleep 175
|
|
kill $PC 2>/dev/null
|
|
taskkill //F //IM btl4.exe 2>/dev/null
|
|
rm -f MPG.EGG
|
|
echo "=== DONE ==="
|