Files
BT411/scratchpad/night10/armorpx.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

25 lines
1.1 KiB
Bash

#!/bin/bash
# #87 pixel-verification A/B: identical solo scene, all zones' draw-op damage
# level FORCED 0.0 vs 1.0 (BT_ARMOR_FORCE pins at the watcher, bypassing the
# sim), numbered backbuffer captures -> pixel diff decides whether the damage
# tint RENDERS at all (gotcha #23: a colour change that logs perfectly and
# renders nothing).
set -e
cd /c/git/bt411/content
. /c/git/bt411/scratchpad/night6/bench_common.sh
taskkill //F //IM btl4.exe > /dev/null 2>&1 || true; sleep 2
rm -f apxA_*.png apxB_*.png
sed "s/^map=.*/map=grass/; s/^time=.*/time=day/; 0,/^vehicle=.*/s//vehicle=madcat/" MP.EGG > APX.EGG
for F in 0.0 1.0; do
TAG=A; [ "$F" = "1.0" ] && TAG=B
rm -f "apx_$F.log"
BT_ARMOR_FORCE=$F BT_ARMOR_LOG=1 BT_SHOT_EVERY=120 BT_SHOT_PREFIX=apx$TAG \
BT_SPAWN_ENEMY=1 BT_GOTO=enemy BT_GOTO_STOP=55 \
bt_launch "apx_$F.log" APX.EGG 0x03
sleep 75
taskkill //F //IM btl4.exe > /dev/null 2>&1 || true; sleep 3
done
echo "=== captures:"; ls apxA_*.png apxB_*.png 2>/dev/null
echo "=== [armor] lines force=1.0:"; grep -c "\[armor\]" apx_1.0.log || true
grep -m2 "\[armor\]" apx_1.0.log || true