Files
Project-M/Docs/Vault/06_Roadmap/Backlog.md
T
2026-06-09 23:26:20 -07:00

80 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- roadmap
- backlog
updated: 2026-06-08
permalink: gamevault/06-roadmap/backlog
---
# Backlog
Open / candidate work only. **Done items live in [[Milestones]] + their DR / session log** (this file is intentionally
kept to the forward-looking pool — promote an item to [[Milestones|a milestone]] when committed, then drop it here).
Last decluttered 2026-06-08 (removed all shipped `[x]` items; their context is preserved in the linked records).
## NEXT — Combat-depth track (the fight, made fun)
**The forward plan is [[Path_to_Fun]]** (direction [[DR-028_Combat_Primary_Verb_Depth_First]], refined 2026-06-08): combat is the primary braided verb; **depth-before-breadth**, with a **falsifiable fun-gate per milestone**. The roadmap is split into a **committed Path A** and a **provisional, NOT-scheduled Path B**, with a **mandatory logged Decision Gate** between them.
- **Path A — the committed scope (a shippable game-with-a-point):** MC-0 instrument the box → MC-1 dash + committed-punishable Charger → MC-4 melee cone → *[Demo A: the Duel]* → EB-1 machines can die (structure loss-state) → EB-2 the felt spend (turret ammo from the factory) → *[Demo B: the Loop]* → END-1 a losable Core → END-2 final siege / win-lose → **[Decision Gate — log ship-vs-continue]**.
- **Status 2026-06-09: MC-0 + MC-1 CODE-COMPLETE, fun-gate pending** ([[2026-06-09_MC1_Implementation]]) — 259/259 EditMode + clean netcode Play sessions + post-build adversarial review (2 confirmed findings fixed); the operator feel pass (dash snap test, telegraph read, Charger feet) + the bench (timed vs spam) + friend read are the open gate. MC-4 starts only after the MC-1 gate passes.
- **Path B — provisional (pick ONE after the gate, re-estimate first):** MC-2 ranged + swarm + mix-director · MC-3 pure juice · MC-5 downed/revive · MC-6 multi-slot kit · EB-3 base repair · EB-4 tool-gated harvest (braided) · EB-5 craft combat power · END-5 14p scaling + NG+. *(END-3 Echo narrative + END-4 content-treadmill are CUT until Path A is fun and the operator wants to author.)*
Every milestone ends with a **play/fun-gate**, not a test count. **Path A forks are LOCKED** (2026-06-09 — [[DR-029_Path_A_Fork_Locks]] · [[Path_to_Fun#Locked decisions (Path A)]]); Path B forks stay open, locked via the same present-the-forks ritual at the Decision Gate.
## PAUSED — Inventory · Equipment · Progression (roadmap [[DR-026_Inventory_Equipment_Progression_Foundation]] / [[DR-027_Equipment_Slots_Phase1]])
> Paused 2026-06-08 ([[DR-028_Combat_Primary_Verb_Depth_First]]): Phases 24 are more breadth on systems whose payoff is combat power — resume once the fight is fun. Phases 01 shipped and stand.
Phases 0 (inventory backbone) + 1 (equipment slots) shipped 2026-06-08. Remaining phases, in order:
- [ ] **Phase 2 — tool-gated harvesting** (NEXT): bake `RequiredToolType`/`RequiredToolTier` on `ResourceNode`/`BlightClutter`; `ResourceHarvestSystem` gates + scales yield by the owner's equipped Tool-slot tier (the Tool slot is already reserved + baked). The gear-tier progression loop. "Need a [tool]" HUD cue.
- [ ] **Phase 3 — crafting + per-player persistence**: extend the Fabricator to craft *items* into a player's inventory; equip-tier gates; additive `SaveData` v3 that restores inventory + equipment AND **replays equip** on load (effects are event-driven, so a buffer restore alone wouldn't re-add the StatModifiers).
- [ ] **Phase 4 — (optional) multi-slot spell loadout**: expand the single `AbilityRef` into primary + 23 hotkey ability slots (subsumes the old "multi-ability slots" item). Per-slot cooldowns/inputs.
- [ ] **Items/abilities UI pipeline** (was the deferred M3 item): icons + descriptions via a managed lookup keyed by `ItemId`/`AbilityId`, off the blob (the HUD inventory/equipment panels show names only today).
- [ ] **Multi-prefab ability variants***partly addressed by Phase 1* ([[DR-027_Equipment_Slots_Phase1]]): different weapons already swap the projectile prefab via `AbilityRef.Id` + the catalog. Only multiple cosmetic prefab variants *per single ability* remain (needs `ProjectileClassificationSystem` generalized beyond one shared prefab).
## Combat / enemies
- [ ] **Live interactive fire test** (focused Play: press fire → predicted projectile + dummy/Husk HP drop) — the server loop + replication are validated; the input→`AbilityFireSystem`→predict-spawn→classify path is only validated structurally.
- [ ] **Ranged Husk (Spitter)** — a server-spawned enemy-projectile subsystem for dodge depth (melee-only today).
- [ ] **Boss / per-wave composition weighting** (brutes later, swarms early) instead of flat round-robin; a "broodmaker" that spawns.
- [ ] **Server perf under wave load** — validate in a real standalone build (in-editor multi-world cost ruled out Burst; single-process ServerWorld+ClientWorld+physics+waves is the likely factor).
- [ ] **Projectile/pickup visuals** — primitive meshes/materials today; optional predicted client-side auto-target if the soft server reconcile feels off.
## Automation (M7 follow-ups)
- [ ] **Throughput visuals** (item-on-belt) — server-only machine buffers don't reach clients (they see only `PlacedStructure.Type`); add one small replicated byte if live belt visuals are wanted.
- [ ] **Relevancy ceiling**`RegionRelevancySystem`'s O(structures×connections)/tick scan becomes load-bearing at high conveyor counts; batch it when counts grow.
- [ ] **Recipe depth** — multi-input fabricator recipes; fabricator→conveyor output chaining (give the fabricator a `MachineOutput`); per-machine distinct meshes (they reuse the Turret mesh as a placeholder).
## Frontend / infrastructure
- [ ] **Operator-run validation** — launch the Windows build → menu → Single/Host/Join; a real **2-build LAN Host↔Join**; MPPM co-op regression in default-editor mode.
- [ ] **Controls settings + key rebinding** (Input System rebinding UI) — out of the Graphics/Audio settings scope so far.
- [ ] **Full base-state saves** (placed structures done in M7; add threat/storage) — `SaveData` is versioned so this is additive.
- [ ] **Unity Relay** for remote (non-LAN) Host/Join — swap the endpoint source feeding `ConnectionConfig` (the frontend lifecycle is transport-agnostic).
- [ ] **Dedicated-server build** — the `RequestedPlayType==Server` auto-host branch is in but UNTESTED.
- [ ] **Volume-slider theming** — sliders render via the default runtime theme; swap to +/- cycle rows if a build shows them unstyled.
## Physics / character controller (M5b)
- [ ] **Multi-client CC interpolation validation** — live two-build/thin-client run to confirm remote-peer smoothness (predicted-only `CharacterInterpolation` variant is in; only single-client validated). Pairs with the M4 real-LAN two-build test.
- [ ] **Player-vs-player collision** — currently non-physical (`SimulateDynamicBody=false`); enable + handle masses if mutual push is wanted.
- [ ] **Gravity / verticality** — CC character is gravity-free + planar (no floor collider); add gravity + a ground collider + reconsider `SnapToGround` if terrain is introduced.
- [ ] **CC package version** — 1.4.2 declares `entities/physics@1.3.x` (resolves via SemVer floor); move to a CC build targeting Entities 6.x when published.
- [ ] **Physics-based hit detection** (lag compensation `NetCodePhysicsConfig` + `PhysicsWorldHistorySingleton`; projectiles as physics bodies; hard rotation lock via `PhysicsMass.InverseInertia=0`) — only if the swept-segment server check is replaced.
## World / visuals
- [ ] **Base-side cohesion accents** — cyan ordered-Aether lights + perimeter relief + tiled base ground (the Blightfield/biomes got the dressing budget; see [[DR-025_World_Environment_Redo_Natural_Frontier]]).
- [ ] **Clearing as a spatial mechanic** — cleared cells are juice + scrap only today; make them buildable / reveal hidden nodes (the "functional gating" fork).
- [ ] **Per-`Variant` clutter meshes**`BlightClutter.Variant` is replicated + round-robined but the prefab is single-mesh (additive, no schema change).
- [ ] **Ghost-prop Synty reskin** — Storage / UpgradePickup ghosts still use placeholder meshes.
- [ ] **Decor LOD → cosmetic-only** — cosmetic prop LODs are world GameObjects; keep them off the server tick budget.
- [ ] **VFX-Graph hit/beam packs** + **BioHorror corrupted-zone accent set** (deferred art); **material fidelity** (ORM repack / small ShaderGraph + baked reflection probe).
## Cleanup (low value, deliberately deferred)
- [ ] **Optional code-tidy** (no behaviour change): `SettingsService` migrate-then-clamp ordering; `ConveyorTransportSystem`'s 6 parallel snapshot arrays → one struct array; `WorldFeedbackSystem.TintForResource` if-chain → lookup; `PlayerInputGatherSystem` device-active dedup. [[2026-06-06_Cleanup_Alignment]].