#124 CORRECTION: aimed hull hits resolve the struck dz_* PANEL -- players were right

The 08-03 zone rule (struck SEGMENT's SKL dzone, ALWAYS -> every aimed
torso hit = center torso) was wrong, and era players' pushback caught it.
Byte-level proof: MAD_TOR.BGF zone-tags the hull PER PANEL (dz_utorso x36,
dz_ltorso/rtorso x18, dz_dtorso x16, all four rear panels, searchlight);
the dpl hit result kept GEOGROUP granularity (dplHitGeoGroup, T0); and the
binary's segment->zone map @49db20 has NO runtime caller (raw call-scan:
sole caller = CreateStreamedDamageZone, load time) -- no segment-level
collapse mechanism exists.  Oracle's night-10 'only LCT gets hits' audit
was the BUG's fingerprint, not the pod's design.

Fix: MechSegmentPick attributes the struck triangle to its draw op (index
range) and takes the op's .DZM-bound zone -- the #87 armour-darkening
bindings, the same authored patch->zone mapping that already paints the
panels -- with the segment dzone as the untagged fallback.  ZoneAimPoint
now aims hull zones at their patch CENTROIDS (all hull zones previously
shared the chest cull-center), which also upgrades the zone walker.

Bench (2-node zone-walk vs spinning madcat, zonewalk_madcat.sh): every
hull panel resolves individually -- utorso 11/12 in-zone, no L/R
mirroring, all four rear panels register; misses are the panel facing the
shooter mid-spin (correct geometry, not misattribution).  Victim applied
254 hits spread across every panel family.  Was 102/102 hull aims ->
dtorso before the fix.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-08-04 17:57:14 -05:00
co-authored by Claude Fable 5
parent 98234c8b15
commit 1d3616cceb
3 changed files with 147 additions and 27 deletions
+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/env bash
# #124-PATCH verify: per-panel hull zone resolution vs a MADCAT target.
# cured by the #124 triangle-pick work? The zone-walk matrix vs a LOKI target:
# shooter servo-aims every zone (feet included) through the real reticle path,
# 3 laser pulses each; read A's [walk] FIRE lines vs B's [dmghit] zone= lines.
# Same rig as scratchpad/night10/zonewalk.sh, target vehicle=madcat, ~7 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 zwm_a.log zwm_b.log
bt_expert_egg MP.EGG ZWM.EGG
sed -i "s/^map=.*/map=grass/; s/^time=.*/time=day/" ZWM.EGG
# pilot 1 (node A, shooter) = madcat (proven servo constraints);
# pilot 2 (node B, target) = LOKI (the #92 chassis)
python - << 'EOF'
lines = open('ZWM.EGG').read().splitlines(True)
n = 0
for i, l in enumerate(lines):
if l.startswith('vehicle='):
n += 1
lines[i] = 'vehicle=madcat\n' if n == 1 else 'vehicle=madcat\n'
open('ZWM.EGG', 'w').writelines(lines)
print('vehicles set:', n)
EOF
BT_SPIN_SELF=15 BT_DMG_LOG=1 BT_DEATH_LOG=1 BT_MP_LOG=1 \
bt_launch zwm_b.log ZWM.EGG 0x0C -net 1601
sleep 2
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_launch zwm_a.log ZWM.EGG 0x03 -net 1501
sleep 5
python ../tools/btconsole.py ZWM.EGG 127.0.0.1:1501 127.0.0.1:1601 > zwm_relay.log 2>&1 &
sleep 400 # ~7 min: enough for a full zone walk incl. both feet