docs(#182): retire TS-3, narrow AD-25 + add AD-39/40/41, update ISSUES for the shipped rebuild
TS-3 (frames_stationary_fall accounting absent) retired — ported in the verbatim UpdateObjectInternal rebuild. AD-25 narrowed to the remote-DR sweep (player half retired). AD-39 (fsf ladder placement vs ACE's interleave), AD-40 (fsf bit-encode in the Core writeback + CachedVelocity computed-not-consumed), AD-41 (candidateMoved gates only handle_all_collisions) added. ISSUES #182 → rebuild shipped, awaiting the visual gate, with the fsf-not-cached_velocity correction + the #137 Slice-3 residual note. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
54d5622960
commit
e3c4c59b84
2 changed files with 28 additions and 17 deletions
|
|
@ -72,23 +72,32 @@ the wrong scene set, or a far-LOD placement offset. Not yet investigated.
|
|||
|
||||
## #182 — Player wedges in a packed monster crowd, can't wiggle free (hand-rolled SphereCollision)
|
||||
|
||||
**Status:** IN-PROGRESS — CSphere port shipped (`96ae2740`) but **visual-gate FAILED**;
|
||||
the real fix is a velocity-model rebuild (see design spec), deferred to a new session.
|
||||
**Status:** VELOCITY-MODEL REBUILD SHIPPED (Slices 1+2, `8bb8b204`→`54d56229`) —
|
||||
**awaiting the user visual gate** (crowd glide/land + normal-locomotion regression pass).
|
||||
**Severity:** MEDIUM
|
||||
**Filed:** 2026-07-07
|
||||
**Component:** physics / collision
|
||||
|
||||
**GATE OUTCOME (2026-07-07):** The CSphere-family port below was faithful but did NOT
|
||||
fix the crowd feel and INTRODUCED an airborne "stuck in the falling animation"
|
||||
regression. Player-attributed retail cdb trace proved retail's local client fully runs
|
||||
player-vs-creature collision (~78% OK, glides) — NOT server-authoritative. Root
|
||||
divergence: retail's per-frame `UpdateObjectInternal` sets velocity = ACTUAL movement/dt
|
||||
(blocked → velocity collapses → gravity → glide); acdream integrates+reflects (jump
|
||||
velocity persists → hang). Fix = verbatim rebuild of the per-frame player-physics loop,
|
||||
velocity model first. Design:
|
||||
`docs/superpowers/specs/2026-07-07-player-physics-update-verbatim-rebuild-design.md`.
|
||||
#182 stays as the base (user), so the codebase carries the airborne regression until
|
||||
the rebuild lands.
|
||||
**REBUILD SHIPPED (2026-07-07):** The `CPhysicsObj::UpdateObjectInternal` velocity chain
|
||||
was ported verbatim, fixing the airborne "stuck in the falling animation" regression the
|
||||
CSphere port had exposed. **Refinement of the design's framing:** the airborne-stuck
|
||||
bleed is the `frames_stationary_fall` counter (`ValidateTransition` increments it when a
|
||||
gravity mover can't advance; `handle_all_collisions` zeros the velocity at fsf>1 → gravity
|
||||
resumes → glide/fall), NOT the `cached_velocity` field (a separate retail reporting/DR
|
||||
value). Slice 1 = the fsf round-trip in the kept transition internals (retires **TS-3**) +
|
||||
ungated small-velocity-zero; Slice 2 = `PhysicsObjUpdate.HandleAllCollisions` wired into
|
||||
`PlayerMovementController`, gated on `candidateMoved` (retail pc:283657), replacing the
|
||||
ad-hoc airborne-only reflect + Velocity.Z snap (AD-25 narrowed to the remote-DR sweep;
|
||||
AD-39/40/41 added). Tests: `FramesStationaryFallTests`, `HandleAllCollisionsTests`,
|
||||
`Issue182CrowdJumpTests` (a blocked jump bleeds to ~0 and grounds instead of hanging with
|
||||
+12). Core 2617 / App 741 green. Plan:
|
||||
`docs/superpowers/plans/2026-07-07-player-physics-update-verbatim-rebuild.md`.
|
||||
**A/B instrument:** `ACDREAM_CAPTURE_RESOLVE` → `tools/analyze_resolve_capture.py` (before =
|
||||
52.8% OK / 22.1% stuck / 107 airborne-stuck; retail target ~78% OK / 0 airborne-stuck).
|
||||
**Residual (design §7 Q3, measure after the gate):** the general ground-jam (22% stuck vs
|
||||
retail 13%) may need a second divergence in the #137 sliding-normal-provenance family
|
||||
(TS-4) — the fsf ladder only climbs when the sweep runs, and a purely-horizontal push has
|
||||
its offset absorbed by the sliding normal. #182 keeps the CSphere port as the base.
|
||||
|
||||
**Description:** In a large group of monsters packed around the player it was too
|
||||
easy to get stuck — the player couldn't shuffle/slide out. Retail leaves room to
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue