fix(physics): restore binary record scan order

Interleave static ranges, type-three captures, type-four triggers, magnetic records, and dynamic ball records in exact ID order while tracking predicted position separately from mutable motion. Preserve type-three/dynamic broadphase and the raw stack quirk where fixed candidate slot one wins even when a later candidate is nearer; seal that behavior in both C and Rust harnesses.

Test Plan:
- bash original/tools/test_reconstructed_c.sh
- python3 original/tools/audit_reconstruction.py --require-complete
- cargo test --all-targets
- cargo clippy --all-targets --all-features -- -D warnings
- rumdl check original/C_RECONSTRUCTION_FINAL_AUDIT.md original/MECHANICS_PROGRESS.md tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md tdkpin-rs/README.md
- git diff --check
This commit is contained in:
2026-08-23 18:46:44 +02:00
parent 89880e9b45
commit f8dcceda5e
8 changed files with 458 additions and 105 deletions
+5 -4
View File
@@ -164,10 +164,11 @@ the associated magnetic gate; there is no recovered 1,500-per-target plus
scores and use the same enter-once contact bit, which clears after the ball
leaves their radius.
The collision scan at `1000:c79c` does not resolve the first matching object id.
It retains the smallest path-progress value while traversing all 175 records,
then applies that response from the previous position. The Rust fixed-point
solver now follows that ordering for recovered type-1 and type-2 objects.
Post-audit raw-stack correction: the collision scan at `1000:c79c` stores each
later, nearer candidate in the next 0x34-byte stack slot, but response code
continues to read the first slot at `SS:...d8a2`. The first detected object ID
therefore wins even when a later candidate has smaller surface distance. The
readable C harness and Rust scanner preserve this binary quirk.
`1000:b476` decodes the physical bank flags in `OBJECTS.tsv`. Flags `0x208a`
on records 90-104 deactivate five complete three-line groups; clearing all five