diff --git a/context/combat-damage.md b/context/combat-damage.md index 22a6082..3b3dd13 100644 --- a/context/combat-damage.md +++ b/context/combat-damage.md @@ -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