# 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: active - Done: claim and isolated worktree from updated master - Next: implement controller, migrate scene consumer, test and document - Blocked by: