diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 72b086d1..2f9189b8 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -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