fix(physics): restore retail edge-response ordering
This commit is contained in:
parent
4ca7230b36
commit
c559c48d80
4 changed files with 525 additions and 180 deletions
|
|
@ -1,7 +1,7 @@
|
|||
# P2 — Collision response-layer edge family: port-ready pseudocode
|
||||
|
||||
**Status: RESEARCH PASS COMPLETE (2026-07-30); IMPLEMENTATION PASS PARTIAL
|
||||
(2026-07-30).** Originally a research-only doc for Campaign P Slice P2
|
||||
**Status: RESEARCH PASS COMPLETE (2026-07-30); RETAIL RESPONSE ORDER PORTED
|
||||
(2026-07-31).** Originally a research-only doc for Campaign P Slice P2
|
||||
(`docs/plans/2026-07-29-physics-parity-campaign.md` §P2); a same-day
|
||||
implementation session landed TS-1's retirement and AP-7's fix, attempted
|
||||
TS-4 per this doc's own §6 Step 3 fixture-first order, reproduced the
|
||||
|
|
@ -24,7 +24,10 @@ unreachable from Path 6's unconditional `SetCollide`, which returns
|
|||
`Adjusted` without repositioning the sphere) and what a future attempt
|
||||
needs to check first; #116 remains a genuine oracle-first research item
|
||||
needing live cdb/Ghidra, not an implementation item (see §5). Read §6 (port
|
||||
order) before starting further implementation on this family.
|
||||
order) before starting further implementation on this family. Campaign P
|
||||
Slice 1B subsequently performed that fresh `transitional_insert` read and
|
||||
removed AP-3, AP-4, AD-53, and AD-54; the exact closeout and controls are in
|
||||
§8. TS-4 remains deliberately unchanged.
|
||||
|
||||
Every claim below is tagged **FACT** (grep/read-verified against the
|
||||
named-retail decomp, the register, ISSUES.md, or current acdream source
|
||||
|
|
@ -72,12 +75,11 @@ These bind the P2 implementer. Do not re-attempt any of these shapes.
|
|||
once already (2026-06-12) for the EPSILON-vs-EpsilonSq bug; Ghidra MCP
|
||||
is DOWN for this research pass — mark any residual x87-ambiguous claim
|
||||
Ghidra-verify, cite ACE as the fallback tiebreaker, do not silently guess.
|
||||
9. **AP-4 (CliffSlide check moved before retail's Branch-1 gate)** is a
|
||||
live, load-bearing reordering compensating for acdream's incomplete
|
||||
OnWalkable bookkeeping — touches the same code region as TS-1. Do not
|
||||
revert AP-4's reordering without re-verifying OnWalkable is complete;
|
||||
read AP-4's full row before changing `TransitionTypes.cs:1316` control
|
||||
flow.
|
||||
9. **SUPERSEDED 2026-07-31 by Campaign P Slice 1B.** AP-4's CliffSlide-first
|
||||
compensation was removed only after the complete retail
|
||||
`transitional_insert`/`edge_slide` order was read and branch-order plus
|
||||
graph/flat multi-frame roof/ledge controls passed. Do not reintroduce the
|
||||
compensation; see §8 and the retired AP-4 row.
|
||||
10. **TS-46 (two-scalar sphere reconstruction) is OUT OF SCOPE for P2**
|
||||
(it's P3) but shares files (`TransitionTypes.cs` `InitPath`) — do not
|
||||
fold TS-46 sphere-list work into a P2 commit.
|
||||
|
|
@ -1066,3 +1068,46 @@ it blocks.
|
|||
behavior."
|
||||
|
||||
---
|
||||
|
||||
## 8. Campaign P Slice 1B closeout — exact response ordering (2026-07-31)
|
||||
|
||||
The follow-up read used the complete named-retail bodies, not the earlier
|
||||
excerpt summaries:
|
||||
|
||||
- `CTransition::transitional_insert` at `0x0050B6F0`
|
||||
(pseudo-C:273137 onward) returns `OK_TS` as soon as
|
||||
`contact_plane_valid != 0`. Only an invalid contact reaches the ordinary
|
||||
StepDown tail, whose remaining gates are Contact,
|
||||
`!sphere_path.step_down`, a non-null check cell, and ObjectInfo.StepDown.
|
||||
- Its StepDown schedule is asymmetric by authored sphere count. For a
|
||||
one-sphere mover whose requested height exceeds the foot diameter, retail
|
||||
clamps the probe to half the foot radius and performs one probe. Otherwise
|
||||
a request within the diameter probes once; an over-diameter request on a
|
||||
two-sphere mover is halved and probes twice in sequence.
|
||||
- `CTransition::edge_slide` at `0x0050B3D0`
|
||||
(pseudo-C:273001-273090) runs `!OnWalkable || !EdgeSlide` restore-and-OK
|
||||
before its steep-contact CliffSlide branch. Any stored walkable polygon
|
||||
routes to PrecipiceSlide without a steepness test.
|
||||
- `CTransition::cliff_slide` at `0x0050A6D0`
|
||||
(pseudo-C:272397 onward) crosses the supplied contact normal only with
|
||||
`collision_info.last_known_contact_plane.N`. It has no remembered-walkable
|
||||
or world-up substitute. A default, invalid, parallel, or otherwise
|
||||
degenerate cross naturally returns `OK_TS` through the retail normalization
|
||||
guard.
|
||||
|
||||
`TransitionTypes.cs` now follows that order exactly. AP-3, AP-4, AD-53, and
|
||||
AD-54 are retired together. The implementation deliberately preserves the
|
||||
existing ordinary-tail `runPlacement: false` choice and does not alter TS-4's
|
||||
Path-6 steep-polygon shortcut.
|
||||
|
||||
`RetailEdgeResponseOrderingTests` pins every distinguishing branch: valid
|
||||
steep-contact early return, the one/two-sphere probe schedule,
|
||||
not-OnWalkable-before-CliffSlide, last-known-only source selection, degenerate
|
||||
last-known handling, and stored-steep-walkable-to-Precipice routing. It also
|
||||
runs multi-frame steep-roof and flat-roof-edge controls through both parsed
|
||||
graph and prepared-flat collision traversal, requires exact trace parity, and
|
||||
rejects a greater-than-15-tick frozen streak. The earlier dedicated
|
||||
`Ts4SteepRoofWedgeCaptureTests` remains green, so retiring these four
|
||||
compensations did not require weakening or deleting the TS-4 control.
|
||||
|
||||
---
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue