docs: #341 — Ghidra cross-check confirms the tangent-rest solve, BN's garbled denominator restored

The divide-by-itself artifact in the BN text resolves in Ghidra to
t = (dist -/+ r) / dot(N, stepDir): a ray-vs-plane interpolation to
perpendicular-distance == radius. Two independent decompilers agree on
the mechanism the #341 resolution rests on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-07 07:17:58 +02:00
parent 6439b9d48e
commit 4885629fbd

View file

@ -212,10 +212,13 @@ which is test-ORDER state, not physics.
### MECHANISM RESOLVED, same morning — the trigger and the resting geometry are one family
`CPolygon::adjust_sphere_to_plane` @0x00538210 (pseudo-C 322032): retail's
walkable placement solves the interpolation for the point where the sphere's
PERPENDICULAR distance to the walkable plane equals the RADIUS — the sphere
rests TANGENT to the slope. Consequences, closing the loop on the live A/B:
`CPolygon::adjust_sphere_to_plane` @0x00538210 (pseudo-C 322032, **cross-
confirmed in Ghidra**, which restores Binary Ninja's garbled denominator: the
solve is `t = (dist ∓ r) / dot(N, stepDir)`, a ray-vs-plane interpolation to
the point where the sphere's PERPENDICULAR distance to the walkable plane
equals the RADIUS, sign per approach side, guarded by ±F_EPSILON on the
denominator and a [0.5, walk_interp) window on the fraction) — the sphere
rests TANGENT to the slope. Two independent decompilers now agree. Consequences, closing the loop on the live A/B:
- **Retail:** tangent rest (perp = r) makes the bare-radius trigger
(`dist < r ε`) structurally INERT — equality minus epsilon. No fight, no