CROUCH complete: full cycle + MP replication verified

The WIP's 'pose does not hold' was a chain of bench-instrument errors, not a
code bug: every capture ran in COCKPIT view (the pilot cannot see their own
legs; the eye-height residual masked as reversion).  Joint probes prove the
park holds indefinitely (knee 1.138, root -2.219 steady); the 2-node bench
shows the observer's replicant fully crouched and held (duckmpA_031 -- the
type-3 state record carries it with zero new replication code); the second
scripted press (new BT_BTNTEST2 env) verifies RISE -> standing zeros.
MP button delivery confirmed mode-mask-clean (the one miss was round-start
jitter).  Diags added, all BT_DUCK_LOG-gated: SetLegAnimation re-arm tracer,
1 Hz joint probe, RIO press mode-mask, BT_TREE_LOG topology dump, and the
squat-park log.  RESIDUAL filed: pilot's own cockpit eye does not ride the
root drop (DPLEyeRenderable chain composition; cosmetic).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-08-06 00:50:12 -05:00
co-authored by Claude Fable 5
parent dd70061e0e
commit 591d205b19
8 changed files with 136 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
#!/usr/bin/env bash
# SEARCHLIGHT bench 2 (external spot cone + replication): night 2-node.
# A walks to 40u of B and stands (facing B). B presses the searchlight button
# (BT_BTNTEST 0x14) at poll 300. B's lightState replicates (subsystem record
# 0x14) -> A's replicant Searchlight LightOn flips -> A's TickSearchlight shows
# the spot.bgf cone on B's mech.
# PASS: A log "[spot] searchlight pass: ... (external: spot cone)" for B's mech
# + "[spot] cone SHOWN (seg N)" after B's press; A BT_SHOT frames brighten near
# B post-toggle. B log: "[light] ... requested ON" + lightState 0 -> 1.
set -x
. /c/git/bt411/scratchpad/night6/bench_common.sh
cd /c/git/bt411/content || exit 1
bt_assert_player_env
taskkill //F //IM btl4.exe > /dev/null 2>&1
sleep 2
rm -f duckmp_a.log duckmp_b.log duckmp_relay.log duckmpA_*.png
bt_expert_egg MP.EGG SG4.EGG
sed -i "s/^map=.*/map=grass/; s/^time=.*/time=night/; s/^vehicle=.*/vehicle=madcat/" SG4.EGG
(
export BT_BTNTEST=0x13,900,960 BT_DUCK_LOG=1
export BT_FIRE_LOG=1 BT_FOG_LOG=1 BT_DEATH_LOG=1 BT_MP_LOG=1
bt_launch duckmp_b.log SG4.EGG 0x0C -net 1601
)
sleep 2
(
export BT_GOTO=enemy BT_GOTO_STOP=40 BT_KEY_NOFOCUS=1 BT_DUCK_LOG=1
export BT_SHOT_EVERY=60 BT_SHOT_PREFIX=duckmpA
export BT_FIRE_LOG=1 BT_FOG_LOG=1 BT_MP_LOG=1
bt_launch duckmp_a.log SG4.EGG 0x03 -net 1501
)
sleep 5
python ../tools/btconsole.py SG4.EGG 127.0.0.1:1501 127.0.0.1:1601 > duckmp_relay.log 2>&1 &
RELAY=$!
sleep 90
kill $RELAY 2>/dev/null
taskkill //F //IM btl4.exe > /dev/null 2>&1
sleep 3
echo "=== B (lamp owner):"
grep -aE "\[light\]|btntest|\[spot\]" duckmp_b.log | head -8
echo "=== A (observer -- cone events):"
grep -aE "\[spot\]" duckmp_a.log | head -8