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>
38 lines
1.9 KiB
Bash
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
|