d2d6df3655
Work-Package: M02-GMP-MOVEMENT-001 Agent: sindo-main-codex Tests: coordination and documentation gates; diff check Fidelity: documents preserved sandbox behavior and remaining build-12340 evidence gap
5.5 KiB
5.5 KiB
M02-GMP-MOVEMENT-001 — Local movement state/controller
Ownership
- Target: M02
- Program: GMP
- Owner/Agent ID: sindo-main-codex
- Branch:
work/sindo-main-codex/m02-local-movement - Lease expires UTC: 2026-07-16
- Integrator: M02 milestone integrator
Outcome
Move local velocity, sandbox flight state, acceleration and directional speed
calculation from ThirdPersonWowController into a scene-free,
independently-testable local movement controller without changing current
sandbox motion.
Non-goals
- Extract terrain queries, camera rig, character presentation or animation.
- Add jump/fall/swim, server prediction or reconciliation.
- Change current movement speeds, acceleration, camera-relative flight or ground snap.
- Gate debug movement by build profile; that remains a separate M02 package.
- Mark M02 complete or edit its checklist/Evidence.
Paths
- Exclusive:
src/gameplay/movement/,src/tools/verify_local_player_movement.gd,docs/modules/local-player-movement.md, this claim - Shared/hotspots:
src/scenes/player/third_person_wow_controller.gd,src/tools/verify_player_input.gd,docs/modules/player-input.md,docs/modules/README.md - Generated/ignored: local
.godot, native DLL, generated ADT resources and renderer corpus
Contracts and data
- Public API: stateful
LocalPlayerMovementController - Inputs: immutable
MoveIntent, local Godot movement basis and physics delta seconds - Outputs: local Godot displacement and read-only velocity/flight state
- Schema/cache/coordinate contracts: unchanged
- Consumer: current sandbox player scene; later gameplay composition root
Dependencies
- Requires: merged input seam on master
14dead1 - Blocks: terrain query and camera/presentation extraction from the player hotspot
- External state: none; unit tests use synthetic intents and bases
Verification
- Commands: dedicated pure movement verifier, player-input regression, asset-free scene smoke, coordinate/StreamingFocus gates, renderer dry-run and repository gates
- Fixtures: identity/rotated/pitched bases, acceleration steps, sprint and flight transitions
- Fidelity evidence: exact current 7.0/4.5/4.5 speeds, 28.0 acceleration, 6x sandbox sprint and camera-relative free flight are regression-locked only
- Performance budget: one small state update per physics tick; no allocation, I/O or scene lookup
Documentation deliverables
- Inline public API docs for movement state/configuration and update methods
- Local movement module specification with data-flow, state and sequence diagrams
- Updated player-input consumer diagram/status and module registry
Simplicity and naming
- Important name:
LocalPlayerMovementController - Simplest approach: one stateful RefCounted owning velocity and flight toggle
- Rejected complexity: generic locomotion framework, ECS component hierarchy and event bus
- Unavoidable complexity: movement basis remains an explicit local-space input so the pure controller does not discover player/camera Nodes
- Measured optimization evidence: not applicable
Status
- State: ready-for-review
- Done: scene-free movement state/controller, player scene migration, twelve numeric cases, two flight transitions, integrated regression and module documentation
- Next: M02 integrator reviews and merges before TerrainQuery extraction
- Blocked by:
Handoff
- Commit:
435e1c9 - Branch:
work/sindo-main-codex/m02-local-movement - Outcome:
ThirdPersonWowControllerno longer owns velocity, flight state, acceleration or directional speed calculation. It selects an explicit Godot-world basis, applies returned displacement, and retains terrain and presentation adapters for later M02 packages. - Public contract: additive
LocalPlayerMovementControllerwith read-only Godot-world velocity/flight state,toggle_sandbox_flightandadvance. Input, coordinate, cache and renderer contracts remain unchanged. - Verification:
LOCAL_PLAYER_MOVEMENT PASS cases=12 state_transitions=2 scene_boundary=1;PLAYER_INPUT PASS actions=12 intent_cases=6 controller=1 regression_scene=1; asset-free scene smoke exited0; coordinate boundary and StreamingFocus passed; renderer dry-run passed all eight pre-capture gates and seven checkpoint plans; coordination/documentation/diff gates passed. - Fidelity: exact existing defaults are regression-locked—forward
7.0, backward/strafe4.5, acceleration28.0, sandbox sprint6x, vertical flight7.0, velocity reset on toggle and camera-relative pitched flight. This preserves the sandbox baseline but is not original-client evidence. - Local verification inputs: the isolated worktree reused the existing ignored native DLL and generated ADT resource scripts. Proprietary extracted data and character GLB were absent, so renderer dry-run logged expected missing-corpus diagnostics while every contract step returned success.
- Rebuild/migration: none; transient movement state is not persisted.
- Remaining risks: exported speed changes after
_readydo not reconfigure the controller; exact build-12340 movement semantics, terrain/collision state, jump/fall/swim, server prediction and debug profile gating remain open. - Documentation: inline public API plus
docs/modules/local-player-movement.mdwith inputs/outputs, data-flow, state and sequence diagrams, ownership, recovery, capability status, risks and source map; player-input consumer diagrams/status were updated.