CLAUDE.md: rewrite Bootstrap&worlds (scene split + on-demand frontend), add M7 Automation + disk-persistence + UITK HUD bullets, new build-gotchas, note new folders fit existing asmdefs. Vault: Milestones (M6 + polish pass -> Done; HUD + cleanup rows), Backlog (ConnectionUI done + cleanup notes), Home/Systems_Index dates. Add the 3 prior session logs + DR-019/020/021 + the 2026-06-06 cleanup log + screenshots. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
23 KiB
tags, updated, permalink
| tags | updated | permalink | ||
|---|---|---|---|---|
|
2026-06-06 | gamevault/06-roadmap/backlog |
Backlog
Unordered pool of candidate work. Promote to a Milestones when committed.
2026-06-04 Polish & backlog-clear pass (2026-06-04_Polish_Backlog_Pass, DR-016_Stage_G_Combat_Gameplay) — delivered + validated (EditMode 86→127): hygiene/reconcile; +system tests for every M6 server system; centralized
Tuning.csconsts; replicated wave number on the HUD; procedural ambient + combat juice (camera punch / FOV hit-stop, kill-shot fanfare, respawn shimmer, reticle lock-on tether); ghost-prop reskin (Storage/Turret/Node distinct materials) + SSAO/ACES post verified; timed/removable modifiers, enemy knockback, Husk attack telegraph; and the aim-drift fix (movement-based camera look-ahead). Remaining from the selected Stage-G slice: ranged Spitter, multi-prefab abilities, + small fold-ins (storage proximity-gate, pickup auto-grant, standalone-debug RPC). Then Stages H (controls/UI) + I (multi-client harness + operator live runs).
2026-06-04 World-space cohesion pass (2026-06-04_World_Space_Cohesion_Pass, DR-018_World_Space_Cohesion_Pass) — delivered + validated (EditMode 127→142): destructible "clearing" (
BlightClutterghost smashed by the unified harvest sweep → Biomass scrap + smash juice, scattered/cleared with the expedition field); build out the base (additiveWall=5 /Pylon=6 buildables — Wall blocks the player, V/N keys); and a first visual cohesion layer (Aether cyan/orange material pair, the 3 new ghosts recoloured, the barren +1000 Blightfield turned into a 21-piece Synty rock/debris basin + orange wild-lights — relief via props, no terrain). In-editor Play introspected via execute_code; a 4-lens adversarial review (23→4) caught + fixed an immortal-shot-sink (fractionalScrapPerHittruncation). Base-side cohesion accents + clearing-as-gating deferred (see the 2026-06-04 follow-ups below).
2026-06-05 Game infrastructure (2026-06-05_Game_Infrastructure_Menu_Settings_Saves, DR-019_Frontend_Menu_Settings_Saves_Build) — delivered + runtime-validated (EditMode 142→152): a UI Toolkit main menu (Single/Host/Join+IP/Continue/Settings/Quit) on the Netcode frontend pattern (on-demand
Create*World, subscene streams into them, frame-boundaryDisposeAllWorldsteardown, MenuWorld recreated on return); Graphics + Audio settings that drive the engine (SettingsServiceJSON atpersistentDataPath;GameVolumeMaster/Music/Sfx buses); a saves foundation (versioned single-slot JSON, born-correct goal/ledger load at director spawn, autosave on Siege→Calm + quit-to-menu); editorProjectM/Build/Windows Player+ Boot-Into-Menu toggle; build order MainMenu(0)/Game(1). Editor instant-play + MPPM loop unchanged by default.
2026-06-05 M7 — Automation (2026-06-05_M7_Automation, DR-020_M7_Automation_Production_Chains) — delivered + runtime-validated (EditMode 152→190): the full Harvester → Conveyor → Fabricator self-running chain (server-only, deterministic), auto-gathering EXISTING resources (default 2 Ore → 1 Aether) into the global ledger; SaveData v2 structure persistence (quit autosave → Continue restore, charge-free, born-correct, chain resumes); deterministic conveyor (
ConveyorMath.ResolveMoves, shuffle-invariant); single gated catch-up (ProductionMath); one-shotBaseRestoreSystem;RuntimePlacedTagsource-of-truth; 3 machine prefabs duplicated fromTurret.prefab+ catalog rows.
2026-06-06 Cleanup & alignment (2026-06-06_Cleanup_Alignment) — repo hygiene before more dev (no gameplay change): deleted crash-recovery scenes (
_Recovery/) + a stray emptyAssets/Resources.meta; removed the legacy IMGUIConnectionUI(3 scenes + script + 4 stale comments); DRY'd the duplicated UITKRound/Borderhelpers intoMenuUi(canonical) + small HUD/build-input tidy (husk-count cache, table-driven build hotkeys); re-alignedCLAUDE.md(scene split, on-demand frontend, M7 Automation, disk persistence, UITK HUD, new build-gotchas) + the vault roadmap to the three 2026-06-05 sessions. EditMode green, console clean; landed as grouped commits.
2026-06-06 Cleanup follow-ups
- Optional further code-tidy (low value; deliberately skipped this pass to limit churn on freshly-validated systems — none affect behavior):
SettingsServicemigrate-then-clamp ordering;ConveyorTransportSystem's 6 parallel snapshot arrays → one struct array;WorldFeedbackSystem.TintForResourceif-chain → byte→Color lookup;PlayerInputGatherSystemdevice-active dedup. 2026-06-06_Cleanup_Alignment.
2026-06-05 M7 Automation follow-ups
- Throughput visuals (item-on-belt): server-only machine buffers don't reach the client (clients see only
PlacedStructure.Type); add ONE small replicated byte if live belt visuals are wanted. - Build-palette HUD + ghost preview — done 2026-06-05: UITK build-palette bar (6 buildables + cost + affordability + selection) + click-to-place with a green/red ground ghost, conveyor rotate, fire-suppress. Conveyor-facing arrow/icons still open. DR-021_HUD_UITK_BuildPalette, 2026-06-05_HUD_Rework_UITK_BuildPalette.
- Relevancy ceiling —
RegionRelevancySystem's O(structures×connections)/tick scan becomes load-bearing at higher conveyor counts (DR-014 ceiling note); batch it when counts grow. - Recipe depth — multi-input fabricator recipes; fabricator→conveyor output chaining (additive: give the fabricator a
MachineOutput); per-machine distinct meshes (machines reuse the Turret mesh as a placeholder). - Operator live play-through of the chain + a real 2-build LAN run under latency (single-client validated this pass).
2026-06-05 Game-infrastructure follow-ups
- Build the standalone — the first player build hit a pre-existing URP blocker (
UniversalRenderPipelineGlobalSettingsm_AssetVersion=11> packagek_LastVersion=10, from the reverted 6.6 alpha; URP migrates forward-only so its build preprocessor rejected it — blocked builds, not editor Play). Fixed (reset the stamp to 10);ProjectM/Build/Windows Playernow produces a complete Mono Win64 standalone (Builds/Windows/, both scenes + baked subscene). See 2026-06-05_Game_Infrastructure_Menu_Settings_Saves. - Operator-run validation: launch
Builds/Windows/ProjectM.exe→ confirm it boots the menu → Single/Host/Join play; a real 2-build LAN Host↔Join; MPPM co-op regression in default-editor mode. - Controls settings + key rebinding (Input System rebinding UI) — deliberately out of the Graphics/Audio scope this pass.
- Full base-state saves (placed structures / threat / storage) — the
SaveDataschema is versioned so this is additive (no migration of the ledger/goal slice). - 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==Serverauto-host branch is in but UNTESTED this pass. - Remove the legacy IMGUI
ConnectionUI— done 2026-06-06 (cleanup pass): theNetConnectionUIGameObject removed fromGame.unity/DevSandbox.unity/SampleScene.unity,ConnectionUI.csdeleted, and the 4 stale doc-comments repointed to the UITKMainMenuController/WorldLauncher. The UITK frontend menu now owns Host/Join+IP everywhere. 2026-06-06_Cleanup_Alignment. - Volume-slider theming: sliders render via the default runtime theme; if a real build shows them unstyled, swap to +/- cycle rows (the enum settings already use cycle rows).
- 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 — moot/subsumed 2026-06-04: M1–M6 are all runtime-validated on the stable 6.4.7 line (the 6.6 alpha netcode bug never affected 6.4.7). The original "blocked on 6.6 alpha" framing (DR-002_Unity66_Alpha_Netcode_Transport) no longer applies.
- Replace template
SampleScenewith a dedicated bootstrap scene + gameplay subscene — done 2026-06-04 (DR-017_Persistent_Base_Player_Driven_Pacing): dedicatedGame.unity(duplicated from SampleScene to preserve the SubScene_SceneAsset/_SceneGUIDHash128 MCP would drop) is nowEditorBuildSettingsindex 0; a minimalDevSandbox.unitycarries the dev overlay. SampleScene retained as a reference (retire later). - Optional template cleanup: remove
com.unity.visualscripting,Assets/TutorialInfo/,Assets/Readme.asset— done 2026-06-03 (pre-M6 cleanup; see the "2026-06-03 Visual & Controls Polish" section below + 2026-06-03_Pre_M6_Cleanup). Duplicate of the now-checked item there. - 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
int2grid, CellSize 1.0, 32×32 plot (full 3D/stacked deferred). Locked inBaseGridMath— DR-008_M5_HomeBase_BaseLayer_Storage. - Decide production replication (predicted vs server-only) before M7 (automation) — resolved 2026-06-05: server-only (production runs in the plain server
SimulationSystemGroup[UpdateAfter(PredictedSimulationSystemGroup)]; results replicate via the existing global ledger +PlacedStructureghosts, never predicted; per-machine I/O buffers stay server-only). Delivered as M7 (DR-020_M7_Automation_Production_Chains, 2026-06-05_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 abyte; 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
Deadenableable gate (from replicated Health) + serverPlayerRespawnSystem(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 — done 2026-06-04 (DR-016_Stage_G_Combat_Gameplay): a SEPARATE server-only
TimedModifier{SourceId,UntilTick}buffer (keeps the replicatedStatModifierlayout byte-identical → no re-bake) +TimedModifierExpirySystem(expiry onNetworkTick) +TimedModifierUtil.RemoveBySourceId(clear-by-type). +4 EditMode tests. - M3 follow-up — multi-prefab abilities (a per-ability different projectile ghost) needs
ProjectileClassificationSystemgeneralized beyond the single shared prefab. - M3 follow-up — standalone-server debug modifier path via
IRpcCommand— done 2026-06-04 (DR-017_Persistent_Base_Player_Driven_Pacing): the dev-toolsDebugCommandRequestRPC (unconditional wire type;#if UNITY_EDITORsend/receive) drives modifiers/resources/state over a real connection, superseding the in-editor-only static-pokeDebugModifierInjectionSystem. (Still editor-gated; flip the systems' guard toDEVELOPMENT_BUILDto ship in a dev player build.) - M3 follow-up — rate-limited turning — done 2026-06-03 (pre-M6 cleanup):
PlayerAimSystemnow rotatesPlayerFacingtoward the aim target atEffectiveCharacterStats.TurnRateRadiansPerSec(authored 720°/s) instead of snapping; deterministic in the predicted loop (fixed-stepdt, 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) — superseded 2026-06-03 by DR-013_M6_Aether_Cycle_Region_Split (coordinate-region + per-connection
GhostRelevancydelivered the split withoutSceneSystemstreaming). Kept only as a note for a future larger-world milestone where true async streaming is wanted; do NOT build streaming now. Original framing: 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/StorageEntryare 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. Partly addressed 2026-06-04 (DR-018_World_Space_Cohesion_Pass): the +1000 Blightfield got a real rock/debris basin + wild-lights and the buildable Wall/Pylon read in-palette; the base-side cohesion accents (cyan lights / perimeter relief / tiled ground) remain open.
M5 follow-up — same-tick movement— moot after M5b (the CC character runs in the predicted fixed-step group; M5'sPlayerMoveSystemis 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
CharacterInterpolationvariant 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
SnapToGroundif 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.FreezeRotationis 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):
AbilityFireSystemcandidate query.WithAny<TrainingDummyTag, EnemyTag>(). 2026-06-02_GameFeel_Deepening - M5.5 follow-up — respawn safety — done (deepening pass): replicated
RespawnInvulnwindow (server-enforced damage immunity + HUD SHIELDED cue). 2026-06-02_GameFeel_Deepening - M5.5 follow-up — enemy variety + wave/threat director — done (deepening pass):
WaveSystemescalating 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 (
WaveStateis 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.25–1.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,
MaxAlive6); 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.visualscriptingpackage,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). Partly addressed 2026-06-04: the Blightfield now reads orange-wild via all-Synty recolour (rock/debris basin + wild-lights + orange clutter/nodes) per the DR-018_World_Space_Cohesion_Pass art fork; the BioHorror organic-corruption accent set is still deferred.
- 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.
2026-06-04 World-space cohesion follow-ups
Surfaced by DR-018_World_Space_Cohesion_Pass (the balanced-slice scope deliberately left these for later).
- Base-side cohesion accents: cyan ordered-Aether lights + perimeter relief + re-enabled tiled base ground (deferred this pass to avoid clashing with the tuned SSAO/ACES look — the Blightfield got the dressing budget).
- Clearing as a spatial mechanic: shipped as juice + scrap only; make cleared cells buildable / reveal hidden nodes (the "functional gating" fork from the intake gate).
- Build-palette HUD + ghost-preview — done 2026-06-05 (UITK palette + click-to-place ground ghost). DR-021_HUD_UITK_BuildPalette.
- Per-
Variantclutter meshes:BlightClutter.Variantis replicated + round-robined but the prefab is single-mesh; swap per-variant meshes (additive, no schema change). - Focused-editor validation (2026-06-04): confirmed in Play — Wall stops the player CC at the collider face (X 2.50→3.257, server==client); Blightfield reads orange-wild rock basin vs cyan base (real player-view shots); clutter-clear loop deposits Biomass + shatters + replicates (BIO 0→10, clutter 14→13); node harvest works (AETHER 0→30). Console clean. Still open: deep basin density/lighting feel-tuning.