fix(physics): port the Borland Real48 collision core
Add a bit-exact six-byte Real48 implementation for integer conversion, rounding, comparison, add/subtract, multiply/divide, and Newton square root. Use the normalized Borland random-register result and route speed clamps, segment/circle detection, moving flippers, captures, triggers, and magnetic fields through the recovered arithmetic instead of host floating formulas. Preserve Real48 spin per ball and feed it through the original tangent/spin response, separating zero-spin C fixtures from retained-spin Wine traces. Replace path-progress selection with surface-distance ordering and implement dynamic records 174/175, including impulse transfer to the other slot, normal_velocity-1000 response, and the second post-collision speed clamp. Test Plan: - `cargo test --all-targets` -- passed, 69 tests - `cargo clippy --all-targets -- -D warnings` -- passed - `rumdl check tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed
This commit is contained in:
@@ -10,6 +10,14 @@ and this project adheres to
|
||||
|
||||
### Fixed
|
||||
|
||||
- Add a bit-exact Borland Real48 core and route speed clamps, type-1 circles,
|
||||
type-2 segments, moving flippers, capture pulls, trigger randomization, and
|
||||
magnetic impulses through its original rounding behavior.
|
||||
- Preserve per-ball Real48 spin and use it in collision tangent response, so
|
||||
zero-spin C fixtures and retained-spin Wine traces are both represented.
|
||||
- Implement dynamic records 174/175 with bidirectional ball impulse transfer
|
||||
and the original post-collision speed clamp instead of a one-sided secondary
|
||||
bounce.
|
||||
- Split collision contact state into per-player 16-bit type-3 contact words and
|
||||
transient type-4 entry flags. Type-3 records now use the original deep-inside
|
||||
gate, `v*0.9 +/-150` pull, stationary sound/contact publication, 5-step age
|
||||
|
||||
Reference in New Issue
Block a user