docs(physics): Phase L.2 movement collision conformance plan
Formalize Phase L.2 as the active holistic movement/collision program, align the roadmap and architecture docs, file tactical physics follow-ups, and refresh collision memory away from rewrite-from-zero guidance. Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
parent
e44d24cec6
commit
d4c3f947d2
6 changed files with 689 additions and 242 deletions
135
docs/ISSUES.md
135
docs/ISSUES.md
|
|
@ -177,6 +177,141 @@ missing is the plugin-API surface.
|
|||
|
||||
---
|
||||
|
||||
## #30 — AutonomousPosition contact byte is too often grounded
|
||||
|
||||
**Status:** OPEN
|
||||
**Severity:** HIGH
|
||||
**Filed:** 2026-04-29
|
||||
**Component:** physics / net / movement
|
||||
|
||||
**Description:** Outbound movement can claim grounded contact even when the
|
||||
local resolver result is uncertain or airborne. `AutonomousPosition.Build`
|
||||
defaults `lastContact` to 1, and the app path needs an audit to ensure
|
||||
`ResolveResult.IsOnGround` is what reaches the wire.
|
||||
|
||||
**Root cause / status:** Tracked under Phase L.2b. This can make ACE accept
|
||||
movement that is not actually retail-valid and can hide edge/step-down bugs.
|
||||
|
||||
**Files:** `src/AcDream.Core.Net/Messages/AutonomousPosition.cs`,
|
||||
`src/AcDream.Core.Net/Messages/MoveToState.cs`,
|
||||
`src/AcDream.App/Input/PlayerMovementController.cs`.
|
||||
|
||||
**Research:** `docs/plans/2026-04-29-movement-collision-conformance.md`.
|
||||
|
||||
**Acceptance:** Ground contact byte is derived from the current resolved
|
||||
movement result for both autonomous heartbeat and movement-state sends. Tests
|
||||
cover grounded, airborne, and failed-transition cases.
|
||||
|
||||
---
|
||||
|
||||
## #31 — Low outdoor cell id can go stale after transition movement
|
||||
|
||||
**Status:** OPEN
|
||||
**Severity:** HIGH
|
||||
**Filed:** 2026-04-29
|
||||
**Component:** physics / cells / movement
|
||||
|
||||
**Description:** Local movement can cross 24m outdoor cell boundaries while
|
||||
the low cell id used for outbound full cell id remains stale. This can combine
|
||||
correct landblock high bits with the wrong outdoor-cell low byte.
|
||||
|
||||
**Root cause / status:** Tracked under Phase L.2e. `CELLARRAY`,
|
||||
`CObjCell::find_cell_list`, adjacent-cell checks, and low-cell ownership are
|
||||
not fully ported.
|
||||
|
||||
**Files:** `src/AcDream.Core/Physics/PhysicsEngine.cs`,
|
||||
`src/AcDream.Core/Physics/TransitionTypes.cs`,
|
||||
`src/AcDream.App/Input/PlayerMovementController.cs`.
|
||||
|
||||
**Research:** `docs/plans/2026-04-29-movement-collision-conformance.md`.
|
||||
|
||||
**Acceptance:** Crossing a 24m outdoor-cell seam updates the local resolved
|
||||
cell id and the outbound full cell id. Tests cover intra-landblock seams and
|
||||
landblock-edge seams.
|
||||
|
||||
---
|
||||
|
||||
## #32 — Retail edge-slide / cliff-slide / precipice-slide incomplete
|
||||
|
||||
**Status:** OPEN
|
||||
**Severity:** HIGH
|
||||
**Filed:** 2026-04-29
|
||||
**Component:** physics / collision
|
||||
|
||||
**Description:** When walking along walls, roof edges, cliff edges, or failed
|
||||
step-down boundaries, retail often slides along the boundary. acdream still
|
||||
hard-blocks or accepts too much in several of these cases.
|
||||
|
||||
**Root cause / status:** Tracked under Phase L.2c. Named retail anchors include
|
||||
`CTransition::edge_slide`, `CTransition::cliff_slide`,
|
||||
`SPHEREPATH::precipice_slide`, and `SPHEREPATH::step_up_slide`.
|
||||
|
||||
**Files:** `src/AcDream.Core/Physics/TransitionTypes.cs`,
|
||||
`src/AcDream.Core/Physics/BSPQuery.cs`,
|
||||
`tests/AcDream.Core.Tests/`.
|
||||
|
||||
**Research:** `docs/plans/2026-04-29-movement-collision-conformance.md`.
|
||||
|
||||
**Acceptance:** Synthetic and real-DAT tests cover wall-slide, roof-edge slide,
|
||||
cliff/precipice slide, failed step-up/step-down, and the jump-clears-edge case.
|
||||
|
||||
---
|
||||
|
||||
## #33 — Live entity collision shape collapses to one cylinder
|
||||
|
||||
**Status:** OPEN
|
||||
**Severity:** MEDIUM
|
||||
**Filed:** 2026-04-29
|
||||
**Component:** physics / entities
|
||||
|
||||
**Description:** Live world entities do not yet use exact retail
|
||||
`CSphere` / `CCylSphere` shape semantics. Several paths collapse the entity to
|
||||
a simplified root-centered cylinder or fallback radius, which is not enough for
|
||||
retail object and creature collision parity.
|
||||
|
||||
**Root cause / status:** Tracked under Phase L.2d. Requires auditing object
|
||||
shape extraction, `Setup.Radius` fallback, building object identity, and live
|
||||
entity broadphase records against named retail.
|
||||
|
||||
**Files:** `src/AcDream.Core/Physics/CollisionPrimitives.cs`,
|
||||
`src/AcDream.Core/Physics/ShadowObjectRegistry.cs`,
|
||||
`src/AcDream.Core/Physics/PhysicsDataCache.cs`.
|
||||
|
||||
**Research:** `docs/plans/2026-04-29-movement-collision-conformance.md`.
|
||||
|
||||
**Acceptance:** Live object collision uses the appropriate retail sphere or
|
||||
cylsphere data where available. Tests prove at least one multi-shape object and
|
||||
one live creature case no longer use the single-cylinder fallback.
|
||||
|
||||
---
|
||||
|
||||
## #34 — Missing routine local/server correction diagnostic
|
||||
|
||||
**Status:** OPEN
|
||||
**Severity:** MEDIUM
|
||||
**Filed:** 2026-04-29
|
||||
**Component:** physics / net / diagnostics
|
||||
|
||||
**Description:** The client needs an opt-in diagnostic that logs local predicted
|
||||
position/contact/cell, outbound movement fields, server `UpdatePosition` echo,
|
||||
and correction delta. Current correction visibility is too focused on portal
|
||||
arrival and not enough on normal walking.
|
||||
|
||||
**Root cause / status:** Tracked under Phase L.2a/L.2b. Without this probe,
|
||||
ACE's tolerance can hide local collision divergence.
|
||||
|
||||
**Files:** `src/AcDream.Core.Net/WorldSession.cs`,
|
||||
`src/AcDream.App/Input/PlayerMovementController.cs`,
|
||||
`src/AcDream.App/Rendering/GameWindow.cs`.
|
||||
|
||||
**Research:** `docs/plans/2026-04-29-movement-collision-conformance.md`.
|
||||
|
||||
**Acceptance:** With the diagnostic enabled, a walking session logs local
|
||||
resolved placement, outbound cell/contact fields, server echo placement, and
|
||||
correction delta in a grep-friendly format.
|
||||
|
||||
---
|
||||
|
||||
|
||||
## #2 — Lightning visual mismatch (sky PES path disproved)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue