KB: #124 close-out -- triangle pick + the authored one-hull-segment zone rule

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Joe DiPrima
2026-08-03 11:32:26 -05:00
co-authored by Claude Fable 5
parent 00dfbf8f9f
commit cb5426cc7f
+16
View File
@@ -102,6 +102,22 @@ the DCS = the struck SEGMENT → its `dzone` (the SKL segment→zone map, `GetSe
`targetDamageZone`. The cylinder lottery (STEP 6) was only ever the UNAIMED path. The port's
whole-mech box pick + "STEP-6 zone under the boresight" funnels AIMED fire through the unaimed
lottery — which is exactly the night-6 report (#73): aim at the arm, get the spray.
**COMPLETED 2026-08-03 (#124, the zone-walk matrix): the pick is now TRIANGLE-ACCURATE and the
zone rule is settled against the authored skeleton [T0 data + T2 matrix].** The sphere
approximation measurably mis-picked (aim dead-on dtorso -> picked rgun/ruleg; its own comments
admitted a foot could be unhittable behind its own knee) — `MechSegmentPick` now runs a sphere
PRE-FILTER then Moller-Trumbore nearest-hit over the threaded segments' posed meshes (CPU
triangle cache from each object's own BGF buffers, `BTGetPickMesh`). **The zone is the struck
segment's SKL dzone, ALWAYS**: the madcat's pickable skeleton authors 18 segments — hip,
shoulders, guns, thighs, knees, ankles+toes, and ONE hull piece (`jointshakey` -> dtorso). No
ltorso/rtorso/utorso/rear/door/searchlight segments exist, so aimed fire at any torso panel
authentically designates CENTER TORSO — the side/rear/upper panels strip only via the UNAIMED
path (missiles/splash/rams through the cylinder). A brief shared-carrier->cylinder override was
an embellishment and was removed same-day. Final matrix (two-node, spinning target, servo
walker): limbs 55/70 in-zone (legs/feet 6/6), hull-family aims -> dtorso 56/69, victim
consumption matching. **The night-10 field audit table is this model's fingerprint** — 'only
LCT gets hits' from aimed energy IS the pod's design. Bench: [[test-harness]] §zone-walk.
**IMPLEMENTED (2026-07-29/30) [T2 bench]: the aimed PER-PART pick.**
`BTL4VideoRenderer::MechSegmentPick` (btl4vid.cpp): at tree build, each segment's draw object +
`GetPrimaryDamageZone()` (SEGMENT.h — carried per segment in the skeleton STREAM, read by