DRIFTLANDS co-op survival on drifting tides — studio progress

Quick Design Spec: Player Movement

Type: New Small System Scope: Base locomotion, the aim/facing model, movement collision, and remote-player presentation. Does NOT own: dash (combat verb #2, incl. i-frames and cooldown), swing-locked movement rules (combat), camera (its own quick-spec), or input bindings beyond the two schemes named binding in technical preferences. Date: 2026-08-27 Estimated Implementation: ~2–3 days (prototype code exists; this spec formalizes it)

Overview

Movement is the verb everything else stands on, and it is deliberately boring: one flat speed, instant response, no resource. The prototype confirmed the model — owner-authoritative, client-predicted locomotion that starts the same frame as input — and tuned the number (6 u/s). Friction lives in the world, never in the hands (Pillar 4): no stamina, no encumbrance, no movement penalties from any system, ever. All players move identically at all times (combat Rule 5's flat stats — a new friend is exactly as fast as a veteran).

Core Rules

Tuning Knobs

Knob Default Range Category Rationale
moveSpeed6 u/s5–8feelPrototype-tuned; registry constant — retune re-runs LDU's party-clock gate + combat spacing feel
accelTime0 ms0–80feel0 = instant (scrappy hands); any nonzero value needs playtest proof it doesn't read as sluggish
downedCrawlSpeed2 u/s1.5–3feelDowned-only locomotion mode (combat Rule 9 "crawl-speed"); a mode, never a multiplier of moveSpeed — added by ADR-0015 2026-08-28; retune with bleedOutTimer (drag-toward-rescuer distance)
remoteInterpBuffer1 tick1–3feelRemote smoothness vs positional freshness; prototype shipped smooth at ~70 ms. = NetworkTransform.InterpolationBufferTickOffset (global, ADR-0009 §6); effective buffer is RTT-adaptive TickLatency + this; players win any player/enemy arbitration
snapAcceptRadius1.0 u0.5–2netcodeADR-0009 §4: a host-commanded snap's override ends when the owner's transform lands within this of the snap point
snapGraceTicks255–100netcodeADR-0009 §4: the override's hard expiry (unresponsive client)
skinWidth0.01 u0.005–0.05feelADR-0009 §3: the sweep stops this short of a blocker

Values live in assets/data/movement.json, not hardcoded.

Acceptance Criteria

Systems Index

Already tracked as MVP system #5 (Gameplay, quick-spec, "Prototype-tuned"). On approval: status → Designed (quick-spec). moveSpeed registers as a cross-system constant (LDU + combat reference it).

Forward refs owned elsewhere: intent-validation bounds + transform replication cadence → netcode ADR; input rebinding UI → UI/HUD quick-spec + /ux-design; camera follow → Camera quick-spec.