Files
Project-M/Docs/Vault/06_Roadmap/Backlog.md
T
2026-06-03 18:35:05 -07:00

12 KiB
Raw Blame History

tags, updated, permalink
tags updated permalink
roadmap
backlog
2026-06-03 gamevault/06-roadmap/backlog

Backlog

Unordered pool of candidate work. Promote to a Milestones when committed.

  • Upgrade Unity 6.4 → 6.6 — done (now 6000.6.0a6). Entities/Collections/Graphics → 6.5.0; Netcode → 6.6.0 and Physics → 6.5.0 also renumbered into the editor line (not independent 1.x as DR-001_Netcode_Test_Harness assumed). See 2026-05-30_M1_Player_Slice.
  • Define the core gameplay loop and the first predicted player ghost — delivered as M1 (2026-05-30_M1_Player_Slice).
  • Re-validate the M1 play-tick on a stable Unity 6.x — live runtime blocked on the 6.6 alpha (DR-002_Unity66_Alpha_Netcode_Transport); optionally reproduce with the networked-cube sample to file a bug.
  • Replace template SampleScene with a dedicated bootstrap scene + gameplay subscene.
  • Optional template cleanup: remove com.unity.visualscripting, Assets/TutorialInfo/, Assets/Readme.asset (delete each asset with its .meta).
  • Decide relay provider before M4 — resolved: Direct IP/LAN now, Unity Relay later (DR-005_M4_Connection_Model_Direct_IP, 2026-06-01_M4_LAN_CoOp_And_Classification_Fix).
  • Decide home-base grid 2D vs 3D before M6 — resolved 2026-06-02: planar single-level int2 grid, CellSize 1.0, 32×32 plot (full 3D/stacked deferred). Locked in BaseGridMathDR-008_M5_HomeBase_BaseLayer_Storage.
  • Decide production replication (predicted vs server-only) before M7 (automation).
  • M2 follow-up — Burst cache health — confirmed clean 2026-06-03: warm focused play shows no "not a known Burst entry point" managed-fallback messages + fast (~3s) play-enter. The M2-era corruption is gone. 2026-06-03_Pre_M6_Cleanup (orig 2026-05-31_M2_Combat / DR-003_M2_Combat_Netcode_Architecture).
  • M2 follow-up — live interactive fire test (focused Play Mode: press Space / LMB / RT → predicted projectile + dummy HP drop). The server combat loop + replication are validated; the input→AbilityFireSystem→predicted-spawn→classification path is only validated structurally.
  • M2 follow-up — mouse-cursor aim for KBM — done 2026-06-03: client-side camera ground-ray cursor aim rides the existing PlayerInput.Aim [GhostField] (no new netcode surface); device auto-switch (KBM/gamepad) replicated as a byte; strafe-while-aiming free. DR-012_Aim_Controls_Cursor_Gamepad, 2026-06-03_Aim_Controls_Cursor_Gamepad.
  • M2 follow-up — player death/respawn — done in M5.5: derived Dead enableable gate (from replicated Health) + server PlayerRespawnSystem (full HP + reposition to base after a delay). DR-009_GameFeel_Identity_FirstBlood
  • M2 polish — projectile/dummy visuals (primitive meshes/materials currently); optional predicted client-side auto-target if the soft server reconcile feels off.
  • M3 follow-up — UI/icon/description pipeline for abilities (managed lookup keyed by AbilityId, off the blob). Deferred from M3 (2026-05-31_M3_Data_Driven_Abilities).
  • M3 follow-up — timed / removable modifiers (expiry on NetworkTick, ClearByType via StatModifier.SourceId). M3 modifiers are permanent-once-granted.
  • M3 follow-up — multi-prefab abilities (a per-ability different projectile ghost) needs ProjectileClassificationSystem generalized beyond the single shared prefab.
  • M3 follow-up — standalone-server debug modifier path via IRpcCommand (current DebugModifierInjectionSystem is in-editor single-process only).
  • M3 follow-up — rate-limited turning — done 2026-06-03 (pre-M6 cleanup): PlayerAimSystem now rotates PlayerFacing toward the aim target at EffectiveCharacterStats.TurnRateRadiansPerSec (authored 720°/s) instead of snapping; deterministic in the predicted loop (fixed-step dt, replays on rollback). 2026-06-03_Pre_M6_Cleanup.
  • M3 polish — pickup visuals (primitive sphere/default material currently); pickup auto-grant feel (continuous overlap).
  • M5 follow-up — base/expedition subscene split + streaming (Option C): the persistent-space split the locked world design ultimately needs (SceneSystem.LoadSceneAsync/UnloadScene, per-world load on the listen-server, enter-expedition/return-to-base transition). Deferred to its own world-architecture milestone — M6/M7 only need the anchor + grid, now done (DR-008_M5_HomeBase_BaseLayer_Storage). The physics-in-prediction + base-layer slices of M5 are done (DR-006_M5_Physics_In_Prediction, DR-008_M5_HomeBase_BaseLayer_Storage).
  • M5 follow-up — shared-storage disk persistence (host-only): runtime structures don't exist until M6, so nothing to save yet; add a thin per-record serialization slice (replayed through M6's placement path) after M6. BaseAnchor/StorageEntry are already flat/serialization-friendly.
  • M5 follow-up — storage interaction polish: proximity gate the deposit/withdraw (the container carries HitRadius); real item/UI model beyond the fixed test item; multi-writer ordering beyond first-come server apply.
  • M5 follow-up — multi-client shared storage: validate two clients see identical shared-storage buffer state (pairs with the deferred M5b multi-client interpolation + M4 two-build tests).
  • M5 follow-up — home-base visuals: only an editor plot-bounds gizmo + a placeholder primitive container today; real ground/walls/structures arrive with M6.
  • M5 follow-up — same-tick movement — moot after M5b (the CC character runs in the predicted fixed-step group; M5's PlayerMoveSystem is deleted). See DR-007_M5b_Character_Controller_Package.
  • M5b follow-up — multi-client CC interpolation validation: live two-build / thin-client run to confirm remote-peer interpolation smoothness (predicted-only CharacterInterpolation variant is in; only single-client validated). Pairs with the deferred M4 real-LAN two-build test.
  • M5b follow-up — player-vs-player collision: currently non-physical (SimulateDynamicBody=false); enable + handle masses if mutual push is wanted.
  • M5b follow-up — KinematicCharacterBody velocity ghost variant (replicate RelativeVelocity/IsGrounded) if owner-prediction reconciliation looks jittery under latency.
  • M5b follow-up — gravity/verticality: CC character is gravity-free + planar (no floor collider). Add gravity in the processor + a ground collider + reconsider SnapToGround if terrain/verticality is introduced.
  • M5b follow-up — CC package version: 1.4.2 declares entities/physics@1.3.x (resolves via SemVer floor on our 6.4.0/1.4.6). Move to a CC build explicitly targeting Entities 6.x when published.
  • M5 follow-up — physics lag compensation (NetCodePhysicsConfig.EnableLagCompensation + PhysicsWorldHistorySingleton) if/when physics-based hit detection replaces the swept-segment server check.
  • M5 follow-up — projectiles as physics bodies (currently kinematic + swept hit); convert for projectile-vs-world collision.
  • M5 follow-up — hard rotation lock (PhysicsMass.InverseInertia=0); Rigidbody.FreezeRotation is not honored by the DOTS baker, so rotation is held by per-tick angular-zero + aim write.
  • Game identity defined — sci-fi frontier colony fiction (Identity), layered over Pillars with no mechanical rework. Resolves the "mechanics without a fiction" gap. Delivered with M5.5 (DR-009_GameFeel_Identity_FirstBlood).
  • M2 polish — projectile/dummy visuals — addressed by the M5.5 emissive palette + URP post-processing (cyan crew, cyan projectiles, orange Husks, dark walls/ground). Real models/animation still deferred.
  • M5.5 follow-up — auto-target on Husks — done (deepening pass): AbilityFireSystem candidate query .WithAny<TrainingDummyTag, EnemyTag>(). 2026-06-02_GameFeel_Deepening
  • M5.5 follow-up — respawn safety — done (deepening pass): replicated RespawnInvuln window (server-enforced damage immunity + HUD SHIELDED cue). 2026-06-02_GameFeel_Deepening
  • M5.5 follow-up — enemy variety + wave/threat director — done (deepening pass): WaveSystem escalating waves (lull → spawn → clear → bigger) + 3 melee Husk variants (Grunt/Swarmer/Brute) round-robin from a baked pool. Ranged spitter + broodmaker/boss still open. 2026-06-02_GameFeel_Deepening
  • Deepening follow-up — ranged Husk (Spitter): a server-spawned enemy-projectile subsystem for dodge depth (the next variety type; melee-only today).
  • Deepening follow-up — wave number on HUD: needs a replicated game-state ghost (WaveState is server-only); the live "HUSKS N" count conveys threat for now.
  • Deepening follow-up — boss / per-wave composition weighting (brutes later, swarms early) instead of flat round-robin; a "broodmaker" that spawns.
  • Deepening follow-up — server perf under wave load: in-editor tick-batching (~1.251.75 ticks/frame) investigated 2026-06-03 — Burst ruled out (confirmed healthy), so single-process multi-world cost (ServerWorld + ClientWorld + physics + Husk waves in one editor) is the likely factor; validate in a real standalone build remains open. 2026-06-03_Pre_M6_Cleanup.
  • M5.5 follow-up — real assets: authored audio (replace procedural SFX), stylized hard-surface crew/structures + corrupted-biomech Husks (replace primitives), TextMeshPro HUD; add the URP SSAO renderer feature for more depth.
  • M5.5 follow-up — multi-client juice/HUD: validate remote-player death VFX (interpolation-timeline Health==0) + per-client HUD under two clients (pairs with the deferred M4/M5b two-build tests).
  • M5.5 follow-up — difficulty balance: Husks tuned for a real moving/shooting player (dmg 5, strike 48 ticks, speed 3, MaxAlive 6); revisit once movement/fire feel is tuned and enemy variety lands.

2026-06-03 Visual & Controls Polish follow-ups

Surfaced by the art/Synty/aim sessions (DR-010_Art_Import_URP_Conversion_Visual_Upgrade, DR-011_Synty_World_VFX_Integration, DR-012_Aim_Controls_Cursor_Gamepad).

  • Cleanup — prune orphaned Materials/Env/ materials — done 2026-06-03 (pre-M6 cleanup): GUID-swept the retired BefourStudios decorative materials; zero-reference ones deleted, still-referenced kept. 2026-06-03_Pre_M6_Cleanup.
  • Cleanup — remove Unity-template cruft — done 2026-06-03 (pre-M6 cleanup): com.unity.visualscripting package, Assets/TutorialInfo/, Assets/Readme.asset. 2026-06-03_Pre_M6_Cleanup.
  • DR-010/011 follow-up — decor LOD → client-only/cosmetic subscene: cosmetic prop LOD hierarchies currently bake into both worlds; move pure cosmetics off the server for tick budget.
  • DR-011 follow-up — character models / DOTS skeletal animation: player + Husks remain primitives; swap for real rigged models when the character pack lands.
  • DR-011 follow-up — VFX-Graph hit/beam packs: the GabrielAguiar VFX-Graph subset needs separate URP setup if wanted (Shuriken packs already wired).
  • DR-011 follow-up — ghost-prop Synty reskin: Storage/UpgradePickup ghosts still use BefourStudios meshes; reskin to Synty-style or simple emissive.
  • DR-011 follow-up — mixed-theme danger zones: BioHorror/Synty corrupted-zone art for high-threat areas (deferred from the scope gate).
  • DR-012 follow-up — auto-target tuning: priority/feel refinement; optional controller soft-target reticle snap (V Rising/Diablo-style).
  • DR-012 follow-up — rebindable controls + multi-ability slots.
  • Pre-M6 cleanup follow-up — higher material fidelity: ORM channels don't map uniformly to URP; a per-channel repack or small ORM ShaderGraph + baked reflection probe would deepen the look.