mirror of
https://github.com/Cesarus85/ringfall-mjolnir-vr.git
synced 2026-10-29 04:01:10 +01:00
Renames the function's parameters and locals to the names HCEX.pdb records: point0 -> p0, cluster0 -> p0_cluster_index, point1 -> p1, cluster1 -> p1_cluster_index, collision_fraction -> collision_t, and the expand-source / expand-target corners to p0a/p0b and p1a/p1b/p1c. Per the house rule on real names. All 128 non-debug sections of ai.obj are byte-identical before and after, so the parked entry stays valid and nothing is scoreboard movement. WHAT WAVE H ESTABLISHED ABOUT THIS FUNCTION - recorded because it overturns a committed "proof". R11, R25 and res7 said no shape closes its 12-byte frame gap. Every probe behind that kept four separate objects and only changed scopes. The ledger now closes to the byte: 34 real bytes = the 7-byte collision_t initialiser (the correct behaviour we keep, since January's bytes prove it reads an uninitialised slot on the heavy-fog path) + 27 bytes from ONE surplus 12-byte frame cell - 24 bytes of disp8 -> disp32 lea widening because our frame crosses 0x80, and 3 bytes for a cross-jump January can take and we cannot. The mechanism: ai.c's TU-private REAL_MATH_EXTERNAL_NORMALIZE3D and REAL_MATH_EXTERNAL_POINT_FROM_LINE3D defines make perpendicular address-exposed, which blocks liveness packing and forces the interleaved struct copy. With the helper bodies visible, the separate-locals source HCEX attests reproduces January's frame, slot census and copy order exactly; size, 50 relocations and 331 instructions all match, and 37 ModRM bytes plus one esi/edi decision remain. That route is dead under the 2026-09-20 ownership ruling: visible bodies make ai.obj emit a _point_from_line3d COMDAT that January's split does not attribute to it. So the function stays residual, now for a stated reason rather than a false impossibility proof. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>