fix(physics): preserve retail step-down probe state
This commit is contained in:
parent
1fd5da67b4
commit
acec33eca8
5 changed files with 249 additions and 36 deletions
|
|
@ -1146,6 +1146,14 @@ the `EdgeSlide && !StepUp` walkable-support gate, and then always:
|
|||
4. restores the saved insert type; and
|
||||
5. returns true only for `OK_TS`.
|
||||
|
||||
The `walk_interp = 1` assignment occurs once at `step_down` entry. Retail does
|
||||
not reset it again before the final Placement insertion: that insertion sees
|
||||
and carries the exact interpolation value left by the support probe. Likewise,
|
||||
`CTransition::check_walkable` (`0x0050AFF0`, pseudo-C:272811–272856) saves its
|
||||
temporary `check_pos` and cell in stack locals. It does not overwrite
|
||||
`SPHEREPATH::backup_check_pos`/`backup_cell`, because the enclosing edge-slide
|
||||
still needs that outer failed candidate after the nested support probe.
|
||||
|
||||
This is the same tail for normal grounded contact maintenance, the
|
||||
`edge_slide` current-position back-probe, and StepUp. The former acdream
|
||||
`runPlacement: false` argument on the first two callers was therefore a real
|
||||
|
|
@ -1161,12 +1169,16 @@ epsilon is rejected. With the response-order fixes from §8 in place, restoring
|
|||
the mandatory placement tail does not reproduce the old wall stall.
|
||||
|
||||
`RetailStepDownPlacementTests` pins the mechanism end to end for one- and
|
||||
two-sphere movers, ordinary contact maintenance, StepUp, and a supported
|
||||
candidate that overlaps only during final Placement. It also compares graph
|
||||
and prepared-flat Placement at exact wall tangency and beyond-epsilon overlap.
|
||||
The existing multi-frame roof/edge fixtures continue to compare the complete
|
||||
`ResolveResult` and persistent `PhysicsBody` state by raw bits, and the #273,
|
||||
#271, #185, StepUp, transition-retry, and TS-4 controls remain unchanged. AP-5
|
||||
is retired; TS-4 is intentionally untouched.
|
||||
two-sphere movers, including raw-bit `walk_interp` carry, nested
|
||||
`check_walkable` backup preservation, ordinary contact maintenance, StepUp,
|
||||
and a supported candidate that overlaps only during final Placement. It also
|
||||
compares graph and prepared-flat Placement at exact wall tangency and
|
||||
beyond-epsilon overlap. The full-engine floor-plus-wall replay drives ten
|
||||
grounded maintenance frames for both sphere counts, requires one Placement for
|
||||
every successful support maintenance, proves no freeze or penetration plus
|
||||
tangential progress, and compares complete `ResolveResult` and persistent
|
||||
`PhysicsBody` state by raw bits between parsed-graph and prepared-flat paths.
|
||||
The #273, #271, #185, StepUp, transition-retry, and TS-4 controls remain
|
||||
unchanged. AP-5 is retired; TS-4 is intentionally untouched.
|
||||
|
||||
---
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue