Files
BT411/scratchpad/night11/respawnreset.sh
T
Joe DiPrimaandClaude Fable 5 26ab2fee3a Respawn-reset audit: valve restore + peer smoke cleanup (both binary-grounded)
Operator reports audited vs the binary (full matrix in RESPAWN_REARM_PLAN
addendum):
- VALVES (real gap): Condenser reset @004ae534 was missing from the decomp
  export -- raw disasm shows it chains HEATSINK (coolant refill runs; the
  old body chained HeatableSubsystem per the stale TCP shard) then, respawn-
  side, resets valveState to detent 1 and restores massScale from
  refrigerationFactor.  Mech::Reset now also runs the binary's tail call
  (@0049f788 BTRecomputeCondenserValves) so flow fractions rebuild from the
  reset detents.  Bench: detent 5 -> death -> "[respawn] Condenser1 valve
  detent 5 -> 1".
- #129 SMOKE (real gap, peers-only): the replicant un-wreck edge rebuilt
  the model without the @004d0c14 per-entity effect cleanup, so the
  observer's last 10s wreck-plume window rode the teleport onto the fresh
  mech.  BTStopEntityPfx now runs on the edge; bench shows no plume line
  after any un-wreck until the next death.
- AUTHENTIC (no fix): weapon->generator taps persist (@004b0e6c only
  resolves the link) and MFD display/control modes persist (mapper vtables
  0050f45c/0051e440 slots 8-11 = plain root bodies, read from the exe).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 16:14:10 -05:00

38 lines
1.5 KiB
Bash

#!/usr/bin/env bash
# RESPAWN-RESET VERIFY (2026-08-04 audit): valve detents + peer smoke.
# A (victim): BT_VALVE_TEST moves a coolant valve to detent 5 (~10s in);
# B (killer): BT_MP_FORCE_DMG kills A; A respawns (5s). PASS:
# A log: [valve] ... detent 5 then [respawn] ... valve detent 5 -> 1
# B log: [respawn] replicant un-wrecked with NO later "wreck smoke plume
# re-armed" for that entity until the next death;
# B captures: fresh A mech smoke-free after un-wreck.
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 rr_a.log rr_b.log rrB_*.png
bt_expert_egg MP.EGG RR.EGG
sed -i "s/^map=.*/map=grass/; s/^time=.*/time=day/; s/^vehicle=.*/vehicle=madcat/" RR.EGG
# A = victim: sets a valve, waits to die, logs the reset sweep.
BT_VALVE_TEST=1 BT_DEATH_LOG=1 BT_DMG_LOG=1 BT_MP_LOG=1 \
bt_launch rr_a.log RR.EGG 0x0C -net 1601
sleep 2
# B = killer: force-damages A's replicant; captures A's fresh spawn.
BT_MP_FORCE_DMG=1 BT_DEATH_LOG=1 BT_MP_LOG=1 \
BT_SHOT_EVERY=150 BT_SHOT_PREFIX=rrB \
bt_launch rr_b.log RR.EGG 0x03 -net 1501
sleep 5
python ../tools/btconsole.py RR.EGG 127.0.0.1:1501 127.0.0.1:1601 > rr_relay.log 2>&1 &
RELAY=$!
sleep 200
kill $RELAY 2>/dev/null
taskkill //F //IM btl4.exe > /dev/null 2>&1
sleep 3
echo "=== A valve + respawn lines:"
grep -E "\[valve\]|\[respawn\]" rr_a.log | head -12
echo "=== B un-wreck + smoke lines:"
grep -E "un-wrecked|plume" rr_b.log | head -12