Files
Project-M/Docs/Vault/06_Roadmap/Milestones.md
T
kronic a7405c3f38 Docs: reconcile vault roadmap + indexes to current state
Bring the living docs up to 2026-06-08 reality (Milestones/Backlog/Home/Systems_Index were stalled at 2026-06-06): add the 6 missing Milestones rows (animation, enemy animation, HUD Synty skin, world redo, world collision, Inventory+Equipment Phase 0/1); declutter Backlog to open-work-only (remove shipped [x] items whose context lives in their DRs/session logs, resolve items completed by later slices, surface Inventory/Equipment Phase 2-4 as next); refresh Home links (DR range -> DR-027, latest sessions); add a Systems_Index Items/Inventory/Equipment section + fix the stale 'StructureType 2-4 reserved for M7' note + a pointer to systems documented only in their DRs.

Reconcile DR-026's roadmap (mark Phase 0/1 done; the Phase-1 line now carries the DR-027 event-driven supersession note). Trim Data_Driven_Abilities resolved open-questions + fix cross-links. DRs + session logs (the historical record) untouched apart from that one DR-026 note.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 11:33:46 -07:00

16 KiB
Raw Blame History

tags, updated, permalink
tags updated permalink
roadmap
milestones
2026-06-08 gamevault/06-roadmap/milestones

Milestones

Milestone Goal Status
M0 — Foundation DOTS + Netcode stack, asmdef split, bootstrap, smoke test green Done 2026-05-29 — 2026-05-29_Project_Setup
M1 — Player slice Server-spawned owner-predicted player; twin-stick WASD + directional aim Done 2026-05-31 — runtime-validated on Unity 6.4.7 (connect→spawn→owner-predicted ghost→replication; EditMode 3/3). The 6.6 failure was environment-specific, see DR-002_Unity66_Alpha_Netcode_Transport2026-05-30_M1_Player_Slice
M2 — Combat Directional ability fire + deterministic soft auto-target; server-authoritative damage/health Done 2026-05-31 — runtime-validated on 6.4.7: input→fire→predicted projectileswept hit→server damage→Health [GhostField] replicated server→client; movement + fire confirmed live; EditMode 22/22. Predicted-projectile + server auto-target + non-Burst classifier — DR-003_M2_Combat_Netcode_Architecture, 2026-05-31_M2_Combat. (Projectile ghost-map errors were later root-caused to a [ReadOnly]-write in ProjectileClassificationSystem — fixed 2026-06-01, see 2026-06-01_M4_LAN_CoOp_And_Classification_Fix — NOT two-editor tick-batching as first thought.)
M3 — Data-driven abilities & modifiers Ability and character stats authored in ScriptableObjects, baked to DOTS blob assets; runtime flat + % modifier stacks (upgrades/buffs) → effective stats, server-authoritative + prediction-correct. Pattern slice: refactor the current projectile ability + 12 sample abilities onto the data model. Done 2026-05-31 — runtime-validated on 6.4.7: blob DB baked into both worlds; data-driven base + replicated StatModifier ghost buffer → identical effective stats on server & owner-predicted client (held under tick-batching); data-only ability swap; real pickup grant; EditMode 38/38. Blob DB + replicated modifier buffer + every-tick effective recompute — DR-004_M3_DataDriven_Abilities_Modifiers, 2026-05-31_M3_Data_Driven_Abilities.
M4 — Co-op 24 players; client-hosted listen-server (Direct IP/LAN now, Unity Relay later) Done 2026-06-02 — LAN slice + multi-client validated: no-auto-connect ConnectionConfig + request-component host/join, editor auto-host + thin clients, deterministic ring spawn; 3 clients (1 real + 2 thin) connect→spawn (distinct slots)→replicate→clean disconnect; ConnectionUI for builds; EditMode 45/45. Two controllable characters in-game confirmed 2026-06-02 via Unity Multiplayer Play Mode (extra virtual player; full connection handshake not exercised end-to-end, but in-scene co-op looks good). Unity Relay + real two-build LAN join deferredDR-005_M4_Connection_Model_Direct_IP, 2026-06-01_M4_LAN_CoOp_And_Classification_Fix.
M5 — Home base + physics Persistent base subscene streaming + Unity Physics in the predicted loop 🚧 In progress 2026-06-01 — physics-in-prediction slice done + runtime-validated on 6.4.7: player is a velocity-driven dynamic Unity Physics body in the predicted loop (built-in CapsuleCollider+Rigidbody bake; PhysicsVelocity auto-replicated), collides with baked static walls (stops at the surface, no tunnel/climb-over), planar-pinned, server == client with no desync; EditMode 51/51. Base subscene streaming deferred to a later pass — DR-006_M5_Physics_In_Prediction, 2026-06-01_M5_Physics_In_Prediction. M5b (same day): player movement re-founded on the Unity Character Controller package (com.unity.charactercontroller 1.4.2) — kinematic collide-and-slide, owner-predicted, data-driven speed; replaces the dynamic-Rigidbody mover (keeps the DR-006 predicted-physics infra). Runtime-validated (collide-and-slide, planar, server==client, CharacterInterpolation predicted-only); EditMode 47/47 — DR-007_M5b_Character_Controller_Package, 2026-06-01_M5b_Character_Controller. Base-layer done 2026-06-02 + runtime-validated: home base = baked ghost-free BaseAnchor + locked deterministic planar build-grid (BaseGridMath, 1.0u × 32²; M6 builds on it) + player spawn re-rooted onto the anchor + one shared-storage ghost (ownerless interpolated; deposit/withdraw via server-authoritative IRpcCommand; server == client buffer). EditMode 62/62. Subscene split (base/expedition) + disk persistence still deferredDR-008_M5_HomeBase_BaseLayer_Storage, 2026-06-02_M5_HomeBase_BaseLayer.
M5.5 — Game feel & identity Bridge "tech-demo → game": the Husk enemy (server AI, interpolated ghost), player death/respawn, combat juice (damage numbers/VFX/SFX/camera shake), a core HUD, and a sci-fi look pass — under the new fiction (Identity, sci-fi frontier colony) Done 2026-06-02 — runtime-validated on 6.4.7: Husks spawn(6)+replicate+chase+strike; death→respawn loop; HUD (health/cooldown/threat/downed); emissive dark-sci-fi look. EditMode 74/74. ctx7-verified APIs. Deepened same day: auto-target on Husks, replicated respawn-invulnerability, and a WaveSystem threat director (escalating waves of 3 Husk variants — Grunt/Swarmer/Brute) replacing the flat sustain — runtime-validated (wave 1→2 escalation 4→6, distinct maxHP 30/15/80). DR-009_GameFeel_Identity_FirstBlood, 2026-06-02_GameFeel_Identity, 2026-06-02_GameFeel_Deepening
— 2026-06-03 Visual & controls polish — Non-milestone polish layered on M5.5 (no mechanical rework): HDRP→URP art import + reusable converter; a cohesive Synty sci-fi colony world (cosmetic SampleScene GameObjects) + GabrielAguiar combat VFX; KBM mouse-cursor aim + gamepad aim with last-actuation device auto-switch (rides the existing PlayerInput.Aim ghost field). Done 2026-06-03 — DR-010_Art_Import_URP_Conversion_Visual_Upgrade, DR-011_Synty_World_VFX_Integration, DR-012_Aim_Controls_Cursor_Gamepad
— 2026-06-03 Pre-M6 cleanup — Loose-ends pass before M6: vault roadmap reconcile, Unity-template + orphaned-material removal, rate-limited turning, console/runtime health gate. Done 2026-06-03 — 2026-06-03_Pre_M6_Cleanup
M6 — The Aether Cycle (core loop) Reframed from "grid build placement" into the first vertical slice of the core game loop: Expedition (gather) → Defend (wave) → Build/Charge (spend), persistent base + procedural sorties, escalating toward a goal. Build placement is now Stage 3 of this milestone. Done 2026-06-03 (forced-timer rhythm later superseded by M8's player-driven pacing) — Stages 04 done + runtime-validated on 6.4.7 (M6 core loop systems complete): base/expedition split via coordinate-region + GhostRelevancy (player transit despawns/re-grants the other region's ghosts; server==client); a server phase-director (Expedition→Defend→Build→Expedition auto-cycle, cycle 1→2, Husk WaveSystem only in Defend, escalation 4→6); and resources + harvest — a global CycleDirector ghost carrying the replicated CycleState + a shared resource ledger (relevant in every region, unlike the base storage), a procedural expedition field (8 resource-node ghosts seeded per cycle, region-scoped), and a tunnel-safe harvest sweep depositing into the ledger; client HUD shows phase + resource counts. Supersedes DR-008's "split requires streaming" framing. Stage 3 (generic automation-ready structure model + data-driven catalog + grid build-placement RPC with co-op-atomic commit + a hitscan turret that auto-defends + ability tiers via a bounded StatModifier) and Stage 4 goal meter are done + validated (turret placed/Ore-deducted/replicated; two same-tick requests → one build; turrets killed the wave; ability damage 20→30 bounded; goal increments per cycle). Disk-persistence writer deferred to post-M7 (M7-additive surface — tick fields + frozen schema — baked now); the structure model is the M7 production-chain foundation. Playable walk-in-gate loop with build/spend, visible in the HUD. — DR-014_M6_Build_Structures_Automation_FoundationDR-013_M6_Aether_Cycle_Region_Split, 2026-06-03_M6_Aether_Cycle_CoreLoop
— 2026-06-04 Polish & backlog-clear pass — Comprehensive sequential polish across hygiene/reconcile, system-level tests, HUD (TMP + replicated wave number), procedural audio + combat juice, ghost-prop reskin + post-processing, new gameplay content, controls/UX, and a validation-harness + operator handoff. Clears the open Backlog. Done 2026-06-04 — 2026-06-04_Polish_Backlog_Pass
M8 — Persistent base & player-driven pacing Replace the forced-timer cycle with a persistent Calm base (no countdown) + player-initiated expeditions + event-triggered sieges (composite ThreatDirector, post-expedition retaliation); dev-tools-over-RPC (spawn/force-siege/grant/teleport/god-mode) + a dedicated Game scene + DevSandbox. Done 2026-06-04 — runtime-validated on 6.4.7 (server+client, focused editor): boots into Calm (no timer); a returning player arms a retaliation siege (Gate→ThreatDirector→CyclePhase→Wave), the atomic WaveState seed spawns the exact configured size, server==client (phase + husk ghosts replicated); dev overlay drives the real server RPCs (unconditional wire type → handshake intact); god-mode baked present+disabled; Game.unity boots the calm base with the new "AT BASE — deploy when ready" HUD. EditMode 137/137. Supersedes the M6 forced-timer rhythm. — DR-017_Persistent_Base_Player_Driven_Pacing, 2026-06-04_M8_Persistent_Base_Player_Driven_Pacing
— 2026-06-05 Game infrastructure — The surrounding shell to build + test the game: a UI Toolkit main menu (Single / Host / Join+IP / Continue / Settings / Quit) on the Netcode frontend pattern (on-demand world creation, subscene-streams-into-them, clean teardown); Graphics + Audio settings that drive the engine (persisted JSON); a saves foundation + minimal slice (born-correct goal/ledger load, autosave on Siege→Calm + quit); a one-click build menu + scene order. Done 2026-06-05 — runtime-validated (focused editor): menu renders → Single → worlds created → subscene streams → connect→spawn→playable → teardown→menu → Continue born-correct (charge/ledger restored, no flicker); settings apply live; EditMode 152/152. Editor instant-play + MPPM loop unchanged (toggle to test the menu); builds boot the menu. — DR-019_Frontend_Menu_Settings_Saves_Build, 2026-06-05_Game_Infrastructure_Menu_Settings_Saves
M7 — Automation Self-running tick-based production chains (deterministic offline catch-up) Done 2026-06-05 — full Harvester → Conveyor → Fabricator chain, server-only + deterministic, auto-gathering EXISTING resources (default 2 Ore → 1 Aether) into the global ledger so setup compounds; persistence folded in (SaveData v2). Runtime-validated on 6.4.7 (real netcode worlds): catalog bakes the 3 machine ghost prefabs; a placed live chain runs end-to-end (Ore cost withdrawn; Harvester→Conveyor→Fabricator→ledger), server Aether == client Aether (replicated); quit autosaved v2 (3 structures + epoch-independent REMAINING-tick cooldowns), Continue restored all 3 charge-free at the exact cells with born-correct ledger and the chain resumed producing. Deterministic conveyor (snapshot→stable-sort→at-most-one-claim→stall, shuffle-invariant); single gated catch-up path (CyclesDue lower-bound 0, input-limited, period-0-guarded); one-shot BaseRestoreSystem; RuntimePlacedTag single-source-of-truth. EditMode 190/190. Resolves "production replication = server-only". — DR-020_M7_Automation_Production_Chains, 2026-06-05_M7_Automation
— 2026-06-05 HUD rework (UITK + build palette) — Convert the in-game HUD to UI Toolkit (consistent with the menu / pause / settings) + a full build-palette HUD: click-to-place with a green/red ground-ghost, conveyor rotate, fire-suppress; combat juice re-skinned to the Aether palette. Done 2026-06-05 — runtime-validated (real netcode session): UITK HUD renders all panels; palette shows 6 buildables + costs; selection highlights + a live ground ghost; placement via the build RPC works. EditMode 190→194. — DR-021_HUD_UITK_BuildPalette, 2026-06-05_HUD_Rework_UITK_BuildPalette
— 2026-06-06 Cleanup & alignment — Repo hygiene before more dev: delete dead assets (_Recovery/, stray Resources.meta), remove the legacy IMGUI ConnectionUI (scenes + script + stale comments), DRY the UITK Round/Border helpers + small HUD/build refactors, and align CLAUDE.md + the vault to the scene split / Automation / Saves / UITK surfaces. Done 2026-06-06 — EditMode green, console clean; grouped commits. — 2026-06-06_Cleanup_Alignment
— 2026-06-06 Animation pipeline (Rukhanka) Entities-native skeletal animation: Synty Polygon characters rigged + driven by client-derived params (animation NOT replicated → derived from replicated state). Done 2026-06-06 — Rukhanka 2.9 local pkg; PlayerAnimationDriveSystem reads replicated state → AnimatorParametersAspect; AnimatedLitShader deformation; ServerStripAnimationSystem disables Rukhanka on the server. DR-022_Animation_Pipeline_Rukhanka_Synty, 2026-06-06_Animation_Pipeline_Slice1
— 2026-06-06 Enemy animation + Synty content Animate the Husks by reusing the player pipeline + inventory the Synty packs for enemy/world picks. Done 2026-06-06 — EnemyAnimationDriveSystem (remote-path velocity from LocalTransform delta); 3 animated enemy prefabs wired via EnemyRigTools (GUID-preserving). DR-023_Enemy_Animation_MonsterMash, 2026-06-06_Enemy_Animation_Synty_Inventory
— 2026-06-07 HUD Synty visual pass Skin the UITK HUD with the Synty sci-fi-soldier kit via a build-safe theme. Done 2026-06-07 — curated HudTheme ScriptableObject (serialized refs, null-safe flat fallback); per-resource cost icons on the build palette. DR-024_HUD_Synty_Skin_Theme, 2026-06-07_HUD_Synty_Visual_Pass
— 2026-06-08 World environment redo Replace the sci-fi-colony dressing with off-world natural-frontier Synty biomes (cosmetic). Done 2026-06-08 — BaseBiome(Meadow_Forest)@origin + ExpeditionBiome(Arid_Desert)@+1000 classic-URP cosmetics; global procedural skybox; per-region fog/ambient cross-fade (WorldAtmosphereSystem). DR-025_World_Environment_Redo_Natural_Frontier, 2026-06-08_World_Environment_Redo
— 2026-06-08 World collision + HUD scaling Restore world collision (lost when DR-025 made the world cosmetic) + fix HUD scaling in Play. Done 2026-06-08 — subscene Environment-layer boundary ring + landmark colliders (WorldCollisionConfig; player blocked via the layer matrix; enemy CollisionWorld.SphereCast); HUD ConstantPhysicalSize→ScaleWithScreenSize. 2026-06-08_World_Collision_HUD_Scaling
— 2026-06-08 Inventory · Equipment (Phase 0 + 1) Expand combat + harvesting into per-player inventory + equipment slots that grant abilities/effects, built on the existing data-driven spine (ItemDatabase catalog, StatModifier stack, AbilityRef swap). Done 2026-06-08 — Phase 0: per-player replicated InventorySlot buffer + ID-keyed ItemDatabase blob catalog + harvest reroute to the personal bag + G deposit-to-ledger RPC + read-only HUD panel. Phase 1: EquipmentSlot (Weapon/Armor/Trinket/Tool), weapon→AbilityRef.Id ability swap, gear→StatModifier mods (per-slot sentinels), event-driven server EquipSystem, click-to-equip HUD. Architecture pre-validated by 5-/4-lens adversarial review; 236/236 EditMode; Play-validated host+client. Next: Phase 2 tool-gated harvesting (see Backlog). DR-026_Inventory_Equipment_Progression_Foundation, DR-027_Equipment_Slots_Phase1

Promote items from Backlog here when committed.