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

8.7 KiB
Raw Blame History

tags, updated, permalink
tags updated permalink
roadmap
backlog
2026-06-08 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 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 variantspartly 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 ceilingRegionRelevancySystem'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 meshesBlightClutter.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.