Re-read the material damage watcher RAW (@004573e4 ctor / @00457784 change-push): 16 floats snapshotted, damaged = pristine x 0.1 (literal at the MakeMechRenderables call site, watching zone+0x158), linear lerp, 13 floats written back, then FUN_0048d4d4 -- which is "flush_material": a dpl command-stream marshal (opcode 100) to the i860 division card. The material->ramp->texel response curve was CARD firmware and is not in BTL4OPT.EXE; logged as an open question (ask: firmware/DIV docs/period screenshots). Field reconciliation, measured live: one 25-pt hit (ERLG class) snaps a 77-pt arm 0 -> 0.3247 in a frame -- "a single missile leaves visible armor damage" holds under the linear curve for heavy hits; 2-pt ERS creep (the leg-audit weapon) is the invisible case. Bench additions: BT_WALK_ZONES=<name-list> walker filter (concentrated per-region audits, scratchpad/night10/legwalk.sh) + BindArmourDamage ORPHAN inventory under BT_ARMOR_LOG (proved every drawn op is zone-claimed on the full tree). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
35 lines
1.6 KiB
Bash
35 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
# LEG/FOOT AUDIT -- the zone-walk restricted to the six leg/foot zones
|
|
# (BT_WALK_ZONES name filter), so repeated passes concentrate fire and the
|
|
# victim's ARMOR DAMAGE doll movement is unmistakable. Node B captures its
|
|
# OWN screen every ~10 s (zwB_*.png) -- the doll's climb is in the pixel
|
|
# record; node A's captures (zwA_*.png) record the hull darkening the
|
|
# observer now receives (the fe48acc level-crossing send).
|
|
# READ: python scratchpad/night10/digest_walk.py (zw_a/zw_b logs as usual)
|
|
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 zwA_*.png zwB_*.png
|
|
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,
|
|
# films its own cockpit (the doll is bottom-center of every zwB frame).
|
|
BT_SPIN_SELF=15 BT_DMG_LOG=1 BT_DEATH_LOG=1 BT_MP_LOG=1 BT_MATCHLOG=1 \
|
|
BT_SHOT_EVERY=300 BT_SHOT_PREFIX=zwB \
|
|
bt_launch zw_b.log ZW.EGG 0x0C -net 1601
|
|
sleep 2
|
|
# SHOOTER second (foreground -- owns the pick focus): legs + feet only,
|
|
# 5 s per zone => a full 6-zone cycle every ~30 s.
|
|
BT_ZONE_WALK=5 BT_WALK_ZONES=leg,foot 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 # session stays up for observation
|