feat(phys L.2a slice 1): resolver + cell-transit probes (PhysicsDiagnostics)
New static `AcDream.Core.Physics.PhysicsDiagnostics` holds two runtime-toggleable flags initialized from env vars: - ACDREAM_PROBE_RESOLVE=1 — emit one [resolve] line per PhysicsEngine.ResolveWithTransition call: input/target/output position+cell, ok-vs-partial, grounded-in, contact-plane status, wall normal if hit, walkable-polygon valid, moving entity id. - ACDREAM_PROBE_CELL=1 — emit one [cell-transit] line per PlayerMovementController.CellId change: old → new cell, current world position, reason tag (resolver / teleport). Both also exposed as runtime-toggleable checkboxes in the DebugPanel "Diagnostics" section. Unlike the existing four Dump-* checkboxes (which only mirror sticky-at-startup env vars), the two new ones forward directly to PhysicsDiagnostics — toggling on/off takes effect on the next physics resolve, no relaunch. Why now: L.2's plan-of-record (docs/plans/2026-04-29-movement-collision- conformance.md) explicitly says "Land L.2a diagnostics first. Do not make another physics change blind." This slice closes the most-load- bearing gap in L.2a — a general-purpose probe on the resolver outcome and a cell-transit log — so that later L.2b/c/d/e physics changes can be evidence-driven instead of guessed. Foundation for the indoor / dungeon walking trajectory (G.3 unblock). Pure additive: when both flags are off (default), the probes collapse to a single static-bool read per resolve, zero log cost. PlayerMovement Controller's two CellId-mutation sites are now routed through a private UpdateCellId(reason) helper for diag chokepoint. Build green, 1032/1040 unit tests pass. The 8 failing tests are pre-existing on the branch base (verified by stash-and-rerun); none touch resolver or cell-transit code; all fail identically with this slice stashed. Investigation deferred to a follow-up. Refs: docs/plans/2026-04-29-movement-collision-conformance.md (L.2a shipped-slice note added in same commit). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
eab347d7e4
commit
ebef82034e
6 changed files with 151 additions and 10 deletions
|
|
@ -92,6 +92,35 @@ Goal: make every bad movement outcome explainable.
|
|||
- Build real-DAT fixture capture for known walls, building ledges, rooftops,
|
||||
slopes, landblock seams, and dungeon entrances.
|
||||
|
||||
Current shipped slices:
|
||||
|
||||
- 2026-04-30: cdb + TTD retail-observer toolchain (`tools/pdb-extract/`,
|
||||
`tools/ttd-record.ps1`, `tools/ttd-query.ps1`) with PDB pairing checker
|
||||
and ring-buffer trace replay. The "retail observer harness" line item.
|
||||
- 2026-04 (pre-L.2 rename): `ACDREAM_DUMP_MOVE_TRUTH` paired
|
||||
outbound/server-echo dumper in `GameWindow` covers outbound packet
|
||||
fields + server echo + correction delta with cell-id mismatch.
|
||||
- Pre-L.2: scenario-specific dumps `ACDREAM_DUMP_MOTION`,
|
||||
`ACDREAM_DUMP_STEEP_ROOF`, `ACDREAM_DUMP_STEPUP`,
|
||||
`ACDREAM_DUMP_EDGE_SLIDE` for the codepaths hit during prior bug chases.
|
||||
- 2026-05-12 (slice 1): general-purpose probes via new
|
||||
`AcDream.Core.Physics.PhysicsDiagnostics` static class.
|
||||
`ACDREAM_PROBE_RESOLVE` emits one `[resolve]` line per
|
||||
`PhysicsEngine.ResolveWithTransition` call (input/output pos+cell,
|
||||
ok-vs-partial, grounded-in, contact-plane status, wall normal if hit,
|
||||
walkable polygon valid, moving entity id).
|
||||
`ACDREAM_PROBE_CELL` emits one `[cell-transit]` line per
|
||||
`PlayerMovementController.CellId` change with old→new + position +
|
||||
reason tag (`resolver`/`teleport`). Both flippable live via the
|
||||
DebugPanel "Diagnostics" section — checkbox toggles take effect on
|
||||
the next resolve, no relaunch required.
|
||||
|
||||
Remaining L.2a work: contact-plane probe (general, not just steep-roof),
|
||||
ShadowObjectRegistry hit log ("you collided with entity X"), water probe,
|
||||
real-DAT fixture-capture pipeline, and folding the older sticky-at-startup
|
||||
`ACDREAM_DUMP_*` flags into `PhysicsDiagnostics` for unified runtime
|
||||
toggling.
|
||||
|
||||
### L.2b - Movement Wire / Contact Authority
|
||||
|
||||
Goal: stop sending movement packets that claim more certainty than the local
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue