Files
BT411/scratchpad/night9/mp_armchain.sh
T
Joe DiPrimaandClaude Opus 5 5d6ded73f0 #110: cross-pod verified BOTH ways -- the cascade replicates, and peer fire alone drives it
Two two-node benches close the last stated gap ("no two-node run has watched a
peer's view of an arm death"), the second at the user's insistence on the REAL
field composition after the first used the self-damage scalpel:

1. mp_armchain.sh (scalpel): B self-destroys dz_rarm mid-fight.  A's screen
   receives the whole cascade -- [zone-repl] dz_rarm lvl 0->1 AND the cascaded
   dz_rgun lvl 0->1 -- plus the respawn reset coming back clean (1->0).  B's
   post-cascade AFC pushes turned out to be the RESPAWN RE-ARM, correct
   behavior, not a gate failure.  (Also confirmed: the self-damage harness
   dispatches a real Entity::TakeDamageMessage -- the identical path a peer's
   round takes, so the scalpel and the field share every line from the handler
   down.)

2. mp_armgrind.sh (the field composition): stand-off at 180, NO self-damage
   anywhere, A grinding B with real cross-pod fire for six minutes.  On B:
     * 25 incremental arm-zone hits from A's weapons via the cylinder tables
       (dz_rgun reached 1.0 from pure accumulation -- 15 cascades on rehits)
     * dz_rarm finished by B's OWN AFC bay cooking off (AmmoBinAFC100 BAY FIRE
       350, half into dz_rarm) -- itself lit by A's fire crits: peer-originated
       end to end
     * [cascade] zone 9 -> AFC100 + AmmoBinAFC100 + Condenser6 force-failed,
       fire gate refusals logged
   On A: [zone-repl] dz_rarm 0->1 and dz_rgun 0->1 -- the shooter SEES the arm
   and pod die.  B symmetrically received A's torso deaths.

Also: DamageZone::ReadUpdateRecord gets a change-only [zone-repl] diagnostic
(BT_MP_LOG) -- the probe that made the peer side measurable; mp_armgrind.sh
opens with the stale-node taskkill the other benches already had (a leftover
node from an aborted launch joined a later lobby as a third instance).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 09:09:49 -05:00

31 lines
1020 B
Bash

#!/usr/bin/env bash
# #110 MP: node B's ARM ZONE dies (self-damage); what does PEER node A see?
# PASS on A's log:
# [zone-repl] B's arm zone -> gstate 1, its child gun zone -> gstate 2 (Gone)
# B's arm-weapon salvo mirrors STOP after the cascade
set -x
. /c/git/bt411/scratchpad/night6/bench_common.sh
cd /c/git/bt411/content || exit 1
bt_assert_player_env
rm -f mpc_a.log mpc_b.log
bt_expert_egg MP.EGG MPC.EGG
# node B: the victim -- self-destroys its right arm mid-fight
BT_MP_LOG=1 BT_DMG_LOG=1 BT_DEATH_LOG=1 BT_PROJ_LOG=1 \
BT_SELF_DAMAGE=4 BT_SELF_DAMAGE_ZONE=dz_rarm \
BT_GOTO=enemy BT_GOTO_STOP=100 BT_AUTOFIRE=1 BT_AF_PERIOD=5 \
bt_launch mpc_b.log MPC.EGG 0x0C -net 1601
sleep 2
# node A: the observer
BT_MP_LOG=1 BT_DMG_LOG=1 BT_PROJ_LOG=1 \
BT_GOTO=enemy BT_GOTO_STOP=100 BT_AUTOFIRE=1 BT_AF_PERIOD=5 \
bt_launch mpc_a.log MPC.EGG 0x03 -net 1501
sleep 5
python ../tools/btconsole.py MPC.EGG 127.0.0.1:1501 127.0.0.1:1601 &
PC=$!
sleep 200
kill $PC 2>/dev/null
bt_kill_ours
rm -f MPC.EGG
echo DONE