Files
BT411/scratchpad/night10/zonewalk.sh
T
Joe DiPrimaandClaude Fable 5 fe48accb6b #87 root cause: the level-crossing zone-record send was missing -- observers never saw damage
The binary's effect watcher (FUN_0042aa2c) raises
ForceUpdate(DamageZoneUpdateModelFlag) when a zone's damageLevel CROSSES a
band-descriptor threshold (FUN_0042a5f4, master-gated on entity+0x28 & 0xc)
-- that send is how every other pod's replicant learns zone levels
mid-fight. The port's band hub kept only the graphic-state branch, so an
observer's copy sat at 0.0 until destruction: no enemy hull darkening, no
doll movement, ever (the night-10 "no armour discoloration" report).

Restored the level branch with the already-reconstructed DescriptorCrossed
(@0042a5f4) + the master gate on both branches (mesh swap still runs on
every instance). 2-node verified: A-side armour watcher pushed 114 level
changes; every replicant peak matched the master's finals to 4 decimals
(dtorso 0.9321 == 0.9321).

Render path cleared separately (gotcha #23 discharged): BT_ARMOR_FORCE 0/1
A/B captures prove the tint renders (hull -> charcoal at 1.0). Solo
perception is the authentic economy: 2-25 pt lasers vs 68-185 pt pools.

Bench: zonewalk.sh node A now carries BT_ARMOR_LOG + BT_SHOT_EVERY (the
standing zone-replication receipt) + digest_walk.py; armorpx.sh is the
force-pair pixel rig.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 12:24:36 -05:00

38 lines
1.9 KiB
Bash

#!/usr/bin/env bash
# #124 ZONE-WALK MATRIX -- the systematic per-panel targeting session (2-node,
# operator-watchable). Node B (right window) = the TARGET: spins in place
# (BT_SPIN_SELF), its paper doll shows every hit landing. Node A = the
# SHOOTER: BT_ZONE_WALK servo-aims the real boresight at each of B's zones'
# carrier segments in turn, settles, fires 3 laser pulses, advances. One
# B-revolution per ~24 s x 6 s/zone => every zone gets aimed shots from many
# aspects over a few minutes.
# READ: A's log [walk] ZONE/FIRE lines vs B's log [dmghit] zone= lines.
# The session STAYS UP for observation -- close the windows (or taskkill
# btl4.exe) when done; the relay dies with this script's 60-min tail.
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 zw_a.log zw_b.log
bt_expert_egg MP.EGG ZW.EGG
sed -i "s/^map=.*/map=grass/; s/^time=.*/time=day/; 0,/^vehicle=.*/s//vehicle=madcat/" ZW.EGG
# TARGET first (right/back window): spins, logs every damage application.
BT_SPIN_SELF=15 BT_DMG_LOG=1 BT_DEATH_LOG=1 BT_MP_LOG=1 BT_MATCHLOG=1 \
bt_launch zw_b.log ZW.EGG 0x0C -net 1601
sleep 2
# SHOOTER second (foreground -- owns the pick focus): the walker.
# BT_ARMOR_LOG on A: the watcher logs the REPLICANT's zone levels as A renders
# B -- decides whether damage darkening ever reaches the observer node (#87 MP).
# BT_SHOT_EVERY: periodic captures of A's view of B's hull (real-fight pixels).
rm -f zwA_*.png
BT_ZONE_WALK=6 BT_PICK_LOG=1 BT_GOTO=enemy BT_GOTO_STOP=90 BT_KEY_NOFOCUS=1 \
BT_DMG_LOG=1 BT_RANGE_LOG=1 BT_MP_LOG=1 BT_MATCHLOG=1 \
BT_ARMOR_LOG=1 BT_SHOT_EVERY=300 BT_SHOT_PREFIX=zwA \
bt_launch zw_a.log ZW.EGG 0x03 -net 1501
sleep 5
python ../tools/btconsole.py ZW.EGG 127.0.0.1:1501 127.0.0.1:1601 > zw_relay.log 2>&1 &
sleep 3600 # keep the relay's parent alive for the observation hour