Cleanup
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
tags:
|
||||
- moc
|
||||
- home
|
||||
updated: 2026-05-29
|
||||
updated: 2026-06-03
|
||||
permalink: gamevault/00-home/home
|
||||
---
|
||||
|
||||
@@ -15,8 +15,8 @@ Multiplayer game on **Unity DOTS** (Entities) + **Netcode for Entities** (server
|
||||
- **Vision** → [[Pillars]] — design pillars & locked decisions · [[Identity]] — the fiction (sci-fi frontier colony)
|
||||
- **Game Design** → [[Systems_Index]] — per-system design docs
|
||||
- **Roadmap** → [[Milestones]] · [[Backlog]]
|
||||
- **Sessions** → `07_Sessions/2026/` — dated work logs (latest: [[2026-05-29_Project_Setup]])
|
||||
- **Decisions** → `07_Sessions/_Decisions/` — decision records (DR-###) · [[DR-001_Netcode_Test_Harness]]
|
||||
- **Sessions** → `07_Sessions/2026/` — dated work logs (latest: [[2026-06-03_Pre_M6_Cleanup]])
|
||||
- **Decisions** → `07_Sessions/_Decisions/` — decision records DR-001 … DR-012 · [[DR-001_Netcode_Test_Harness]] · latest [[DR-012_Aim_Controls_Cursor_Gamepad]]
|
||||
- **Meta** → [[Documentation_Protocol]] · [[Tags]]
|
||||
- **Templates** → [[Session_Log_Template]] · [[Decision_Record_Template]]
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
tags:
|
||||
- roadmap
|
||||
- backlog
|
||||
updated: 2026-06-01
|
||||
updated: 2026-06-03
|
||||
permalink: gamevault/06-roadmap/backlog
|
||||
---
|
||||
|
||||
@@ -18,16 +18,16 @@ Unordered pool of candidate work. Promote to a [[Milestones|milestone]] when com
|
||||
- [x] 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]]).
|
||||
- [x] 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 `BaseGridMath` — [[DR-008_M5_HomeBase_BaseLayer_Storage]].
|
||||
- [ ] Decide **production replication** (predicted vs server-only) before M7 (automation).
|
||||
- [ ] **M2 follow-up — restart the editor to clear the corrupted Burst cache**, then confirm the console is clean on a warm play (no "not a known Burst entry point"). See [[2026-05-31_M2_Combat]] / [[DR-003_M2_Combat_Netcode_Architecture]].
|
||||
- [x] **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** (needs a camera ground-ray rig); currently aim = gamepad right-stick + movement-heading fallback.
|
||||
- [x] **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]].
|
||||
- [x] **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** (`PlayerAimSystem` still snaps rotation; `EffectiveCharacterStats.TurnRate` is wired but unused).
|
||||
- [x] **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.
|
||||
@@ -51,7 +51,22 @@ Unordered pool of candidate work. Promote to a [[Milestones|milestone]] when com
|
||||
- [ ] **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**: investigate the in-editor tick-batching (Burst cache health, multi-world cost); validate in a real build.
|
||||
- [ ] **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, `MaxAlive` 6); revisit once movement/fire feel is tuned and enemy variety lands.
|
||||
- [ ] **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]]).
|
||||
|
||||
- [x] **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]].
|
||||
- [x] **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.
|
||||
@@ -2,7 +2,7 @@
|
||||
tags:
|
||||
- roadmap
|
||||
- milestones
|
||||
updated: 2026-06-01
|
||||
updated: 2026-06-03
|
||||
permalink: gamevault/06-roadmap/milestones
|
||||
---
|
||||
|
||||
@@ -17,6 +17,8 @@ permalink: gamevault/06-roadmap/milestones
|
||||
| **M4 — Co-op** | 2–4 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 deferred** — [[DR-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 deferred** — [[DR-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 — Build/placement** | Server-authoritative grid build placement via RPC | ⬜ |
|
||||
| **M7 — Automation** | Self-running tick-based production chains (deterministic offline catch-up) | ⬜ |
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
date: 2026-06-03
|
||||
type: session
|
||||
tags: [session, cleanup, housekeeping, netcode, perf, vault, packages]
|
||||
---
|
||||
|
||||
# Session 2026-06-03 — Pre-M6 cleanup (loose ends before Build/Placement)
|
||||
|
||||
## Goal
|
||||
|
||||
Clean up remaining/deferred loose ends before starting **M6 — Build/Placement**: a healthy, honest baseline (no stale docs, no Unity-template cruft, no orphaned assets, an explained console) and close the genuinely-cheap follow-ups. Driven via `/dots-dev`; full discovery swarm first, then a four-bucket pass (operator approved all four + a serena check).
|
||||
|
||||
Inventory finding up front: the **code layer was already clean** — no open decision records, no `TODO`/`FIXME` defects, no disabled/stubbed systems, no ignored tests. Loose ends were concentrated in docs, template cruft, orphaned materials, one wired-but-unused stat, and an unclean console.
|
||||
|
||||
## Done
|
||||
|
||||
- **Bucket 0 — serena check:** serena MCP was **not connected** this session (no `mcp__serena__*` tools), so "confirm on first use" could not be positively verified. `Glob`/`Grep` fallback used throughout and worked — consistent with the `CLAUDE.md` caveat. No durable change.
|
||||
- **Bucket 1 — vault roadmap reconcile:** [[Backlog]] + [[Milestones]] + [[Home]] were stale (last touched 2026-06-01, didn't reflect the 2026-06-03 art/Synty/aim sessions). Checked off **mouse-cursor aim** (delivered by [[DR-012_Aim_Controls_Cursor_Gamepad]]) and **rate-limited turning** + **orphaned-material prune** (this session); added a "2026-06-03 Visual & Controls Polish follow-ups" block (decor LOD, character models, VFX-Graph URP, ghost-prop reskin, auto-target tuning, rebindable controls, mixed-theme zones, ORM fidelity); added two non-milestone rows to [[Milestones]]; fixed Home's stale "latest session" + decisions pointer (DR-001 … DR-012). Bumped all `updated:` dates.
|
||||
- **Bucket 3 — rate-limited turning** (`PlayerAimSystem.cs`): the always-computed `EffectiveCharacterStats.TurnRateRadiansPerSec` (authored 720°/s in `CharacterStatsDefinition`, baked via `math.radians` in `AbilityDatabaseAuthoring`) was unused — facing snapped instantly. Now rotates `PlayerFacing` toward the aim target by at most `TurnRateRadiansPerSec * dt` per predicted tick (pure planar `sincos` math, signed via the 2D cross product; uninitialized-facing snap guard; `dt` = fixed predicted-step `SystemAPI.Time.DeltaTime`). Stays `[BurstCompile]` in `PredictedSimulationSystemGroup` `.WithAll<Simulate>()` — deterministic, replays on rollback.
|
||||
- **Bucket 2 — delete cruft:** removed `com.unity.visualscripting` (1.9.11) via `manage_packages` (manifest + `packages-lock.json` clean), deleted `Assets/TutorialInfo/` + `Assets/Readme.asset` (with their `.meta`s). **Orphaned-material prune:** GUID-swept all 22 `Materials/Env/*.mat` against every `*.{unity,prefab,asset,mat}` → **deleted 17 zero-reference orphans**, **kept 5 referenced**: `M_Env_Floor` (SampleScene), `M_Env_Wall` (Gameplay subscene ×3), `M_Env_PickupGlow` (UpgradePickup.prefab), `M_Env_Storage` (Storage.prefab), `M_Env_Fallback` (the `EnvArtTools` converter's path constant). No narrative-based deletes — GUID sweep was authoritative.
|
||||
- **Bucket 4 — console / runtime health gate** (focused Play, auto-host, fired into the Husk waves): see below.
|
||||
|
||||
## Console / runtime health gate (Bucket 4 detail)
|
||||
|
||||
- **Snapshot `IndexOutOfRangeException` ("snapshot buffer at index 1, has 1 slots") did NOT reproduce.** Drove the full fire→predicted-projectile→`ProjectileClassificationSystem`→swept-hit→damage path live (Husks 4→2 from real kills); 18 console entries, **0** snapshot/index signatures. It was a **transient** from the prior corrupt-Burst-cache session, cleared by this session's domain reloads. `AbilityFireSystem.GetDataAtTick` + `ProjectileClassificationSystem.TryGetComponentDataFromSnapshotHistory` ran clean — no code change made (and none warranted without a live repro).
|
||||
- **Burst is healthy** — `filter_text="entry point"` → **0** "not a known Burst entry point" managed-fallback messages, and play-enter was fast (~3s, not the 30–40s corrupt-cache symptom). So **no editor restart was needed** (the plan had hypothesized a corrupt cache; the evidence says otherwise).
|
||||
- **Server Tick Batching remains** (~1.25–1.75 ticks/frame) — but it's **genuine in-editor multi-world perf** (one process running ServerWorld + ClientWorld + physics + prediction + Husk waves), **not** Burst corruption and **not** a regression from this session. This is the existing backlog item *"server perf under wave load — validate in a real build."* Left as a tracked finding, not chased (out of cleanup scope).
|
||||
- **Rate-limited turning validated live:** facing tracked the injected aim and was **identical on ServerWorld and ClientWorld** at every sample (e.g. both `(-0.981, 0.196)` then both `(0.000, 1.000)`) — determinism / server==client preserved, zero runtime errors. At 720°/s a turn completes in ~0.1–0.25s (within MCP round-trip), so the *visible sweep cadence* is best eyeballed by the operator in the Game view; correctness is covered by the green suite + the server==client consistency.
|
||||
|
||||
## Validation
|
||||
|
||||
- Compile/Burst clean after every change; the only console warnings are the **pre-existing** vendor CS0618 obsolete-API warnings in `GabrielAguiarProductions/.../SaveParticleSystemScript.cs` (third-party pack, editor-only, not ours).
|
||||
- **EditMode 86/86** green after the turning change + all deletions (`ProjectM.Tests.EditMode`).
|
||||
- `packages-lock.json` no longer references visualscripting; `Materials/Env/` contains exactly the 5 kept materials; `TutorialInfo/` + `Readme.asset` gone.
|
||||
|
||||
## Decisions
|
||||
|
||||
- None (no firm netcode/architecture decision — the snapshot error didn't reproduce, so no DR). Pure housekeeping + one small deterministic tweak.
|
||||
|
||||
## Open / deferred
|
||||
|
||||
- **Server tick-batching under wave load** — validate server perf in a **real standalone build** (in-editor multi-world cost is the likely dominant factor; Burst confirmed healthy). Existing backlog item.
|
||||
- **Visible turn-sweep cadence** — operator eyeball in a focused Game view; tune `CharacterStatsDefinition.TurnRateDegreesPerSec` (720°/s) to taste.
|
||||
- The large tracked-deferred set (subscene streaming, real assets/character models, multi-client two-build tests, ranged/boss enemies, gravity/PvP, M3 UI/timed-modifier follow-ups, production-replication decision, Unity Relay) stays deferred — recorded in [[Backlog]]; all are genuine M6+ features, not cleanup.
|
||||
|
||||
## Next
|
||||
|
||||
- Start **M6 — Build/Placement** (server-authoritative grid placement via RPC) on the locked `BaseGridMath` coordinate space ([[DR-008_M5_HomeBase_BaseLayer_Storage]]).
|
||||
Reference in New Issue
Block a user