fix(physics): port retail slope landing stop

This commit is contained in:
Erik 2026-07-31 09:10:53 +02:00
parent 1d8371dbe5
commit 5a0f9868a6
13 changed files with 870 additions and 103 deletions

View file

@ -142,7 +142,7 @@ remain in place (ride ACDREAM_DUMP_MOTION=1) until the user gate passes.
## #269 — Slope-stop slide runs too far (post-bounce-rework residual)
**Status:** OPEN (user live gate 2026-07-30 — "almost pass with merits")
**Status:** DONE — 2026-07-31 (implementation + user live gate)
**Severity:** LOW-MEDIUM (feel residual; bounce family otherwise accepted)
**Component:** physics / landing slide decay
@ -162,14 +162,24 @@ cos(10°) with base 0.2); the jump chain end-to-end (`GetJumpHeight`
Sledding auto-toggle (P2 finding re-confirmed; no `state |= 0x800000`
writer exists).
**Next step (behavior question, not code):** live A/B per the cdb
workflow — breakpoints on `calc_friction`/`handle_all_collisions` dumping
velocity per tick while the retail client lands + slides on a slope, vs an
`ACDREAM_CAPTURE_RESOLVE` capture of the same maneuver on the same slope.
Compare the decay curves; the first diverging tick names the mechanism.
Candidates the trace discriminates: hop-chain cadence (friction skips
airborne micro-hop ticks), gravity-tangential rebuild timing, quantum
alignment.
**Resolution (2026-07-31):** a 2,184-quantum live capture isolated the
first divergence. The landing tick produced retail's correct 5% reflect,
but the following quanta repeatedly restored
`LastKnownContactPlane` while retaining the reflected velocity. The body
therefore remained Contact + OnWalkable with `v·n > 0.25`, where retail
`calc_friction` intentionally does no work, and slid at full speed.
Named-retail `CTransition::validate_transition @ 0x0050AA70` revealed the
omission: its non-OK remembered-plane recovery calls
`OBJECTINFO::kill_velocity @ 0x0050CFE0` *before* the proximity test and
plane restore (`0x0050AAED0x0050AB42`). It also consumes the remembered
plane only in that non-OK branch and overwrites last-known validity from
the final contact plane at `0x0050ACFF`. ACDream now follows that exact
ordering. Focused collision-recovery and clean-advance pins pass; full
Core (4,107/2 skips) and Runtime (439/0) suites pass; the user repeated the
slope-jump test and accepted the result (“Perfect! Works great!”).
Capture and decode:
`docs/research/2026-07-31-269-slope-stop-capture.md`.
---