docs+cleanup: env-var regression + Run↔Walk cycle bug filed; re-throttle diags
End-of-session cleanup of the 2026-05-03 remote-motion debug session.
Documentation:
- CLAUDE.md: add ⚠️ DO-NOT-ENABLE warning for ACDREAM_INTERP_MANAGER=1
in the diagnostic env-vars list. Add an "Outbound motion wire format"
section documenting acdream's WalkForward+HoldKey.Run encoding (which
ACE auto-upgrades to RunForward on relay) so future sessions don't
re-derive it.
- docs/ISSUES.md: file two new issues:
* #39 — Run↔Walk cycle transition not visible on observed
retail-driven player remotes when watched from acdream. Root cause
located: ApplyServerControlledVelocityCycle is gated by
IsPlayerGuid, excluding the exact case where ACE doesn't broadcast
a UM (shift toggle while direction key held). Fix sketch ~10
lines, separate commit. Cross-references the four-agent
investigation prompt.
* #40 — ACDREAM_INTERP_MANAGER=1 env-var path regressed. Documents
why (e94e791 conflated MoveOrTeleport with update_object), the
visible symptoms (staircase Z, position blips), and why
Commit B (039149a)'s ResolveWithTransition port was insufficient
(env-var path also clears body.Velocity → no horizontal Euler
motion → sweep input is queue catch-up only, which stair-steps).
Fix path = separate L.3 follow-up to re-integrate PositionManager
additively on top of the legacy chain.
Code:
- GameWindow.cs:6042: prepend a ⚠️ REGRESSED warning block at the top
of the env-var per-frame branch so anyone reading the code is
immediately aware not to enable it. Cross-references ISSUES.md #40.
- AnimationSequencer.cs: re-throttle [SCFAST]/[SCFULL] diagnostics to
0.5s per instance (rolled back from A.1's unthrottled experiment).
Already served its purpose; throttled is enough for steady-state
diagnostics. Restore _lastSetCycleDiagTime field.
No behavior change for any current launch (env-var unset = legacy
path unchanged). Build green; baseline test failures (8) unchanged
from prior commit, none introduced by this session.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
039149a9d0
commit
a3f53c2644
4 changed files with 238 additions and 24 deletions
35
CLAUDE.md
35
CLAUDE.md
|
|
@ -548,6 +548,41 @@ via `PlayerMovementController.ApplyServerRunRate`) or from
|
|||
(default 2 = 5×5).
|
||||
- `ACDREAM_NO_AUDIO=1` — suppress OpenAL init for headless / driver-
|
||||
broken setups.
|
||||
- `ACDREAM_REMOTE_VEL_DIAG=1` — dump per-tick / per-UM remote motion
|
||||
diagnostics (`[UM_RAW]`, `[SCFAST]`, `[SCFULL]`, `[SETCYCLE]`,
|
||||
`[FWD_WIRE]`, `[OMEGA_DIAG]`, `[SEQSTATE]`, `[PARTSDIAG]`,
|
||||
`[VEL_DIAG]`, `[UPCYCLE]`). Heavy.
|
||||
- ⚠️ `ACDREAM_INTERP_MANAGER=1` — **DO NOT ENABLE.** This was an
|
||||
experimental rewrite (e94e791) of the per-tick remote motion path.
|
||||
It's regressed: the env-var path drops the per-tick collision sweep
|
||||
(`ResolveWithTransition`) that the default path retains, causing a
|
||||
visible "staircase" pattern when remotes run up/down slopes (body
|
||||
Z stays flat between UPs, snaps at each one) plus position blips
|
||||
during steady-state motion. Default (env-var unset) uses the
|
||||
working retail-port chain. The PositionManager class itself is
|
||||
fine and retail-faithful; only the integration into per-tick was
|
||||
wrong. To be re-done in a future L.3 follow-up phase as additive
|
||||
refinement on top of the working chain.
|
||||
|
||||
### Outbound motion wire format (acdream → ACE)
|
||||
|
||||
Important quirk for cross-checking observed remote behavior. acdream's
|
||||
`PlayerMovementController` + `MoveToState` builder encode motion as:
|
||||
|
||||
| Local input | Wire `ForwardCommand` | Wire `HoldKey` | Wire `ForwardSpeed` |
|
||||
|---|---|---|---|
|
||||
| W (run) | `WalkForward` (0x05) | `Run` (2) | server runRate (~2.4–2.94) |
|
||||
| W + Shift (walk) | `WalkForward` (0x05) | `None` (1) | 1.0 |
|
||||
|
||||
ACE auto-upgrades `WalkForward + HoldKey.Run` → `RunForward (0x07)`
|
||||
when relaying to remote observers. So our INBOUND parser sees
|
||||
`fwd=0x07` for "remote is running." This matches retail's encoding.
|
||||
|
||||
When the local player toggles Shift while keeping W held (Run↔Walk
|
||||
demote/promote), acdream sends a fresh `MoveToState` with the new
|
||||
HoldKey + ForwardSpeed. Retail's outbound likely does the same, but
|
||||
ACE's behavior on relay is uncertain — see `#L.X` in ISSUES.md for
|
||||
the open Run↔Walk cycle bug on observed retail-driven remotes.
|
||||
|
||||
### Visual verification workflow
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue