Files
BT411/scratchpad/night6/mp4_cross.sh
T
Joe DiPrimaandClaude Fable 5 e91d447405 #82 FINAL LAYER: the peer body-channel trn-lock -- a circling limper skated because the peer's turn-arm had no walk-demand yield and the trn speed exit read a dead replicant mapper cell
The master limped clean (218x gimp-cycle records, zero trn) -- a _ReturnAddress
trap on SetAnimationState(4) proved ALL peer trn arming came from the port's own
mech4 turn-step block, not the type-3 reader.  Two dead ends, one root:
- mech4 peer arm: gated on !wantsWalk (standSpeed < bodyTargetSpeed), exits trn
  when walking demand appears -- the leg twin's authentic precedence
  (part_012.c:12013, the Standing speed test outranks the turn test).
- mech2 body case 4: bspd reads bodyTargetSpeed on ReplicantInstance; the local
  mapper's speedDemand is a dead cell on a peer (reads 0 forever -> no exit).
Verified 2-node timeline: arena circle replicant 218x state-24 / 0x state-4
(was 116x trn churn), grass circle 235-clean, knockdowns bounded, 0 deaths.
Diagnostics kept: BT_TRNTRAP ra-trap, BT_ANIMIND_CAP, [gimpfeed], [replgimp]
extension.  KB: locomotion.md trn-lock entry + the dead-mapper-cell lesson.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QRjrTQpJd6u9XyfnUbTB3v
2026-07-30 18:26:15 -05:00

57 lines
2.2 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
bt_kill_ours
rm -f MP4X.EGG
echo "=== DONE ==="