From 89dd155f855d861b23e46714386f9b58c196cfff Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Mon, 13 Jul 2026 23:13:13 -0700 Subject: [PATCH] =?UTF-8?q?Docs:=20LANTERN=20Phase=200=20=E2=80=94=20full?= =?UTF-8?q?=20pivot=20adoption=20+=20all-doc=20sweep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adopt LANTERN as the operative direction (co-op action-RPG, light-as-territory), superseding the Awakening Engine fiction + the Co-op Hades iteration. Existing code becomes salvage quarry; the mechanical pillars hold. Phase 0 deliverables (doc portions): - DR-048 adoption decision record (0.1) - Lantern_Strip_Mothball_Inventory — system-by-system keep/rework/mothball (0.2) - Lantern_World_Model_Spike — pocket-graph + seed-pinning BRIEF, review-first (0.3) - Art_Direction_Lantern — style bible + material decision + A0 gate (0.4) Docs/skills sweep: Pillars pointers + LANTERN locked decisions; superseded banners on Identity, Iteration_CoopHades, Path_to_Fun, Milestones, Backlog, End_Of_Month (all redirect to the LANTERN roadmap); Home MoC + current-direction callout (and stale serena line fixed); Systems_Index era note; CLAUDE.md core-loop line -> LANTERN direction pointer (verbose co-op-Hades invariants archived to the gotchas archive, net-neutral under the 40 KB budget); dots-dev validation-harness expedition-run recipe flagged era-specific. Two Phase-0 gate items remain OPEN (not doc work): the 0.3 world-model design review and the 0.4 in-engine style-proof scene. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../dots-dev/references/validation-harness.md | 5 + CLAUDE.md | 4 +- Docs/Vault/00_Home/Home.md | 17 ++-- Docs/Vault/01_Vision/Art_Direction_Lantern.md | 98 +++++++++++++++++++ Docs/Vault/01_Vision/Identity.md | 5 + Docs/Vault/01_Vision/Pillars.md | 30 +++++- Docs/Vault/02_Game_Design/Systems_Index.md | 6 ++ Docs/Vault/06_Roadmap/Backlog.md | 5 +- .../06_Roadmap/End_Of_Month_Game_Jam_Slice.md | 5 +- .../06_Roadmap/Iteration_2026-07_CoopHades.md | 6 ++ .../Lantern_Strip_Mothball_Inventory.md | 88 +++++++++++++++++ .../06_Roadmap/Lantern_World_Model_Spike.md | 91 +++++++++++++++++ Docs/Vault/06_Roadmap/Milestones.md | 5 +- Docs/Vault/06_Roadmap/Path_to_Fun.md | 9 +- ...026-07-13_Lantern_Phase0_Adoption_Pivot.md | 77 +++++++++++++++ .../DR-048_Lantern_Adoption_Full_Pivot.md | 94 ++++++++++++++++++ .../_Meta/CLAUDE_Build_Gotchas_Archive.md | 8 ++ 17 files changed, 534 insertions(+), 19 deletions(-) create mode 100644 Docs/Vault/01_Vision/Art_Direction_Lantern.md create mode 100644 Docs/Vault/06_Roadmap/Lantern_Strip_Mothball_Inventory.md create mode 100644 Docs/Vault/06_Roadmap/Lantern_World_Model_Spike.md create mode 100644 Docs/Vault/07_Sessions/2026/2026-07-13_Lantern_Phase0_Adoption_Pivot.md create mode 100644 Docs/Vault/07_Sessions/_Decisions/DR-048_Lantern_Adoption_Full_Pivot.md diff --git a/.claude/skills/dots-dev/references/validation-harness.md b/.claude/skills/dots-dev/references/validation-harness.md index 18266c042..be2f0a8e8 100644 --- a/.claude/skills/dots-dev/references/validation-harness.md +++ b/.claude/skills/dots-dev/references/validation-harness.md @@ -56,6 +56,11 @@ DOES propagate into parented children's `LocalToWorld` (verified live on 6.5.0). ## Headless expedition-run driving (flaky — know the failure modes) +> The specific nouns below (`PlayerReady`, expedition launch, respawn-reset) are **co-op-Hades-era** and become +> salvage under the LANTERN pivot ([[DR-048_Lantern_Adoption_Full_Pivot]]) — they will be re-meaned to the +> **descent lifecycle** (muster → Bell → pockets) when that lands. The *harness patterns* (server-inject, the +> `EditorApplication.update` guardian, capture-in-the-same-call) are direction-agnostic and stay valid. + - Launch by setting server `PlayerReady=1` from clean Staging. **Post-abort re-launch is intermittent** — a clean Play restart launches reliably on the first ready; re-readying after an abort may not. - **An AFK player dies to the swarm in ~15 s** and `Health` resets to the class value on respawn — a diff --git a/CLAUDE.md b/CLAUDE.md index 4cb62d8be..c231f22db 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,7 +9,7 @@ Multiplayer game on **Unity DOTS (Entities) + Netcode for Entities** — server- - **Size check** — bash: `wc -c CLAUDE.md` · PowerShell: `(Get-Item CLAUDE.md).Length`. Must be `< 40960`. - **Archive, don't delete.** When trimming, append the verbose / least-hot detail to the obsidian reference note `Docs/Vault/_Meta/CLAUDE_Build_Gotchas_Archive.md` under a **new dated heading** (never overwrite an older snapshot), and leave a one-line pointer + the relevant `[[DR-###]]` link here. - **Net-zero rule:** every addition is paid for by a condensation elsewhere. Keep only the hottest, highest-recurrence operational rules inline (flag them **★**); depth lives in the archive + DRs. -- Condensation history (detail → archive dated headings): 06-17 · 07-04 · 07-04b · 07-04c · 07-06 · 07-07b (pays the attribute-swallow gotcha) · 07-07c (game-state narrative → invariants+DR pointers; ~3 KB freed, operator-ordered). +- Condensation history (detail → archive dated headings): 06-17 · 07-04 · 07-04b · 07-04c · 07-06 · 07-07b (pays the attribute-swallow gotcha) · 07-07c (game-state narrative → invariants+DR pointers; ~3 KB freed, operator-ordered) · 07-13 (co-op-Hades core-loop bullet → LANTERN direction pointer; [[DR-048_Lantern_Adoption_Full_Pivot]]). ## Stack — Unity 6.5.1 (`6000.5.1f1`, stable) as of 2026-06-27 @@ -138,7 +138,7 @@ Full rationale: [[DR-022_Animation_Pipeline_Rukhanka_Synty]] · [[DR-023_Enemy_A - `ProjectM.Simulation.GameBootstrap : ClientServerBootstrap` overrides `Initialize` with `AutoConnectPort = 0` (M4 — listen/connect is explicit via the `ConnectionConfig` singleton + per-world ConnectionControlSystems). **Editor default = instant-into-game + MPPM** (creates `ServerWorld` (`WorldFlags.GameServer`) + `ClientWorld` (`WorldFlags.GameClient`)); the `ProjectM/Boot Into Menu (Editor)` EditorPref flips the MAIN editor to the frontend path. **Player builds boot the UITK frontend menu** (`return false` → one menu world, no netcode worlds until a menu choice). See [[DR-019_Frontend_Menu_Settings_Saves_Build]]. - **Scenes:** `Assets/Scenes/MainMenu.unity` (build index 0) boots the UITK frontend (menu world only); `Assets/Scenes/Game.unity` (index 1) holds gameplay with `Assets/_Project/Subscenes/Gameplay.unity` wired in as the baked subscene (GameObject `GameplaySubScene`). `SampleScene`/`DevSandbox` are kept as reference/dev scenes. The on-demand lifecycle (`WorldLauncher`/`SessionRunner`/`MainMenuController`) creates the right worlds per menu choice (Single/Host/Join), THEN `LoadScene(Game)` (subscene-streaming rule above). -- **Core loop = ready-check multi-room RUNS ★ (DR-044/045/046):** base = pure SPEND hub. `RunDirectorSystem` = sole `RunInfo` writer (`[UpdateBefore(CyclePhaseSystem)]`; nothing else in the room chain touches CyclePhase); banks Charge+retaliation once-per-`RunEpoch` on boss-clear ONLY; strips the boon band + `BoonOffer`s on exit; teleports ONLY launch-stamped `RunParticipant`s (released on Returning). Rooms spawn per `RoomEpoch`, `RoomTag`-torn-down, gate on a PORTAL (`RunLifecycle.RoomExplore=6` loot window; `PortalInteractRequest`→server `PortalCommand`). Class + per-run PREP spent at base (Staging-gated RPCs via shared `ClassSwapUtil`; prep `StatModifier` band stripped on Returning). `Health.Max` is a `[GhostField]`. Boss = server-only `BossState`/`BossAISystem` (sole boss mover). ★ **a serialized prefab bool ignores the C# initializer — flip the value in the prefab.** Feel/tuning detail → [[DR-044_Expedition_Redesign_Shipped_Demo_Polish]] · [[DR-045_Combat_Demo_Feel_Boss_Fight]] · [[DR-046_Base_Expedition_Ties_Portal_Class_Prep]]. +- **Direction = LANTERN ★ — pivot LOCKED 2026-07-13 ([[DR-048_Lantern_Adoption_Full_Pivot]]).** Co-op action-RPG, *light is territory* (seed-pinned pocket-graph; SoD manual-aim skillshots; suit-frames + Sparks + wild mutations). Supersedes the Awakening-Engine fiction + the Co-op Hades iteration. Operative roadmap [[Roadmap_Lantern_Slice]]; **existing code (combat feel, ability/boon plumbing, run/hub lifecycle, save, regions/relevancy) is QUARRY, not foundation** — keep/rework/mothball per [[Lantern_Strip_Mothball_Inventory]]. **No world code until the ★review-first world-model spike ([[Lantern_World_Model_Spike]]) passes its design review.** The prior co-op-Hades core-loop (ready-check multi-room RUNS; `RunDirectorSystem`/`BossState`; DR-044/045/046) is salvage — invariants archived 07-13 in the gotchas archive. ★ **general gotcha kept: a serialized prefab bool ignores the C# initializer — flip the value in the prefab.** ## DOTS / ECS conventions (authoritative summary) diff --git a/Docs/Vault/00_Home/Home.md b/Docs/Vault/00_Home/Home.md index 97ae3aaea..a3405494f 100644 --- a/Docs/Vault/00_Home/Home.md +++ b/Docs/Vault/00_Home/Home.md @@ -2,7 +2,7 @@ tags: - moc - home -updated: 2026-06-24 +updated: 2026-07-13 permalink: gamevault/00-home/home --- @@ -10,16 +10,21 @@ permalink: gamevault/00-home/home Multiplayer game on **Unity DOTS** (Entities) + **Netcode for Entities** (server-authoritative, client prediction). This vault is the canonical, cross-machine, human-facing record. Code lives in `Assets/_Project/`; engine/API truth comes from **context7**, not this vault. +> **Current direction: LANTERN** (locked 2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]) — a co-op +> action-RPG where **your territory is light**: what you light stays, what stays dark rerolls. SoD-grade +> skillshot combat + modular Spark kits + a seed-pinned pocket-graph world. Design: [[Identity_Lantern]]; +> roadmap: [[Roadmap_Lantern_Slice]]. Prior directions (Awakening Engine, Co-op Hades) are kept as history. + ## Map of Content -- **Vision** → [[Pillars]] — design pillars & locked decisions · [[Identity]] — the fiction (sci-fi frontier colony) +- **Vision** → [[Pillars]] — design pillars & locked decisions · [[Identity_Lantern]] — the fiction (light-as-territory abyssal co-op) · [[Art_Direction_Lantern]] — style bible & material decision · [[Theme_Direction_Candidates]] — the exploration behind the pivot - **Game Design** → [[Systems_Index]] — per-system design docs -- **Roadmap** → **[[Path_to_Fun]]** (north star) · [[Backlog]] (committed list) · [[Milestones]] (history). **Current direction:** a co-op roguelite-ARPG, **expedition-driven loop** ([[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]] → loop re-shape [[DR-042_Loop_Reshape_Expedition_Driven]]). -- **Sessions** → `07_Sessions/2026/` — dated work logs (latest: [[2026-06-24_Slice_Combat_Depth_Enemy_Variety_Impact_Build]] · [[2026-06-21_Slice3_Expedition_Combat_Spine_Build]] · [[2026-06-17_Design_Redirect_Coop_Roguelite]]) -- **Decisions** → `07_Sessions/_Decisions/` — decision records DR-001 … DR-042 · [[DR-001_Netcode_Test_Harness]] · latest [[DR-042_Loop_Reshape_Expedition_Driven]] (loop re-shape: expedition-driven win) +- **Roadmap** → **[[Roadmap_Lantern_Slice]]** (operative) · [[Lantern_Strip_Mothball_Inventory]] (salvage map) · [[Lantern_World_Model_Spike]] (★review-first) · [[Backlog]] / [[Path_to_Fun]] / [[Milestones]] / [[Iteration_2026-07_CoopHades]] (history). +- **Sessions** → `07_Sessions/2026/` — dated work logs (latest: [[2026-07-13_Lantern_Phase0_Adoption_Pivot]] · [[2026-07-12_Phase17_Boon_Overhaul]]) +- **Decisions** → `07_Sessions/_Decisions/` — decision records DR-001 … DR-048 · [[DR-001_Netcode_Test_Harness]] · latest [[DR-048_Lantern_Adoption_Full_Pivot]] (the LANTERN pivot) - **Meta** → [[Documentation_Protocol]] · [[Tags]] - **Templates** → [[Session_Log_Template]] · [[Decision_Record_Template]] ## How knowledge is organized -See [[Documentation_Protocol]]. In short: design / decisions / sessions live here (committed to git); **basic-memory** recalls over these notes; **serena** navigates C# symbols; native Claude memory holds machine-local facts; **context7** is the source of truth for DOTS / Netcode APIs. \ No newline at end of file +See [[Documentation_Protocol]]. In short: design / decisions / sessions live here (committed to git); **basic-memory** recalls over these notes; C# symbols are navigated with **Glob/Grep** (serena removed 2026-07-07 — unused + flaky on Unity); native Claude memory holds machine-local facts; **context7** is the source of truth for DOTS / Netcode APIs. \ No newline at end of file diff --git a/Docs/Vault/01_Vision/Art_Direction_Lantern.md b/Docs/Vault/01_Vision/Art_Direction_Lantern.md new file mode 100644 index 000000000..53a1453c2 --- /dev/null +++ b/Docs/Vault/01_Vision/Art_Direction_Lantern.md @@ -0,0 +1,98 @@ +--- +tags: [vision, art-direction, lantern, style-bible, workstream-a] +status: draft-binding +updated: 2026-07-13 +permalink: gamevault/01-vision/art-direction-lantern +--- + +# LANTERN — Art Direction Lock (Workstream A0) + +> The binding one-page style bible for [[Roadmap_Lantern_Slice]]'s art track (Workstream A0, runs inside +> Phase 0). Adopted under [[DR-048_Lantern_Adoption_Full_Pivot]]. This is the **written** half of A0; the +> gate is the **in-engine style-proof scene** (below), which is **not yet built** — Phase 0 does not exit +> until it is approved. The readability law is lifted verbatim from [[Identity_Lantern#Art, audio & the +> readability law|the identity]] and applies to every asset from day one. +> +> **Why this matters more than usual:** one developer, learning Blender, shipping custom creatures. This +> direction lives or dies on a **repeatable factory**, not on any single beautiful asset. Every rule here is +> chosen so that creature N+1 is a routine sitting, not a research project. + +## Style bible (binding) + +- **Stylized low-poly, RoR2-lineage.** Silhouette-first; faceted geometry; flat / near-flat shading. Mood is + carried by **dynamic light in murk**, never by texture detail. A readable blob with a great light beats a + detailed model nobody can see in the dark. +- **Poly budgets (hard):** props **≤ ~800 tris** · creatures **≤ ~3k** · hero / boss / suit-frames **≤ ~6k**. +- **The palette is the ontology** (the fiction rule made visible): **warm gold/amber = light (ours, true) · + cold corpse-green/blue = gloam (the deep's counterfeit) · lure-red = bait · white-hot = conversion.** +- **The readability law (binding, from the three reviews):** + 1. **Value first, hue second.** Every warm/cold distinction is *also* carried by luminance value, shape + language, and **flicker-cadence** (steady = true, flicker = false — the load-bearing channel; hue is the + garnish). This is the colorblind answer (gold-vs-green is a worst-case red-green pair). + 2. **Design the dark floor for the video encoder, not the OLED.** Bioluminescent ground-clutter density is + the streamability dial; dark scenes must survive 6–8 Mbps without macroblocking. A separate **capture / + photo grade** (lifted, saturated profile) ships for clips and screenshots. + 3. **Screenshot discipline.** Every promotional frame reads at **200 px** with a warm focal light AND a + legible silhouette. + +## The material decision (the solo-dev keystone) + +**No per-asset texturing, ever.** This is the single most important production rule in the project. + +- **One shared palette / gradient atlas** — Imphenzia-style: a single small texture of colour bands. UVs are + *placed onto bands*, not unwrapped. Zero texture-painting skill required; perfect style coherence; batches + hard. +- **Vertex-colour accents** for per-asset variation on top of the atlas. +- **Three master shaders — the whole rendering surface of the game:** + 1. **`Lit-Palette`** — statics (props, dressing, environment, station). + 2. **`Emissive-Gloam`** — parameterized warm/cold/lure emissive. **One shader is the entire palette rule:** + its parameters (hue, **flicker-cadence**, intensity) are *both* the look *and* gameplay information + (true-vs-false light). Every glow in the game is this shader. + 3. **`Skinned-Palette`** — deformation-aware (the Rukhanka-skinned creatures/suits). Replaces the current + `AnimatedLitShader` role as the palette-atlas creature material. + +**Every asset in the game shares ~3 materials.** Coherence, batching, and no per-asset UV/texture work — that +is the amortization that makes a one-person creature factory possible. + +> ⚠ **Carry-over gotcha ([[material-property-body-flash-rukhanka]]):** a per-instance `URPMaterialPropertyBaseColor` +> tint only renders if the shader declares `_BaseColor` **Hybrid-Per-Instance** (ShaderGraph +> `overrideHLSLDeclaration:true` + `hlslDeclarationOverride:2`). The three master shaders must be authored +> Hybrid-Per-Instance if we want per-instance gloam-tint variants (a free variant axis — see A2 variant policy). + +## Reference board + +- **RoR2** — shape language, faceted low-poly, dynamic-light-first in dark ambient. +- **Dredge** — water mood, dread, the sea-as-atmosphere. +- **Hollow Knight** — value control in darkness (how to stay legible with almost no light). +- **Below** — the **cautionary** case: solo dread + screenshot-illegible darkness killed it. The readability + law exists specifically against this failure. + +## The style-proof scene — THE GATE (not yet built) + +**One prop + one creature + one suit**, in-engine, under murk + dynamic lights, on the capture grade. Judged +three ways, all of which must pass: + +1. **Full-size** — reads as *this game and no other*. +2. **At 200 px** — silhouette + warm focal light legible (screenshot-discipline rule). +3. **In grayscale** — value-first / flicker-cadence carries the true-vs-false read with hue removed. + +**Locked before any mass production.** This gate + [[DR-048_Lantern_Adoption_Full_Pivot]] + the world-model +review ([[Lantern_World_Model_Spike]]) together are Phase 0's exit. Until this scene is approved, Workstream A +stays in A0 (no A1 pipeline proof, no A2 factory). + +## Handoff to the deeper pass (A1 recipes) + +The concrete recipe documents are **A1 work** (Phase 1), not A0: the **statics recipe** (Blender → export +units/scale → collider policy → entity baking → palette material) and the **skinned recipe** (rig → per-action +clips, Key All Bones, bake-to-pose → FBX → Rukhanka ingest → `Skinned-Palette` → prefab). Both build on the +project's proven animation pipeline ([[DR-022_Animation_Pipeline_Rukhanka_Synty]] / [[DR-023_Enemy_Animation_MonsterMash]] ++ the machine-local Blender recipe) and the **three rig families** (Drifter / Crawler / Strider). This doc is +the constitution; the recipes are the operating manuals. + +## Related + +- [[Identity_Lantern]] — the fiction the palette encodes (the readability law lives there too) +- [[Roadmap_Lantern_Slice]] — Workstream A (A0 → A1 → A2 → A3) gates +- [[DR-048_Lantern_Adoption_Full_Pivot]] — the adoption +- [[Synty_Asset_Inventory]] — placeholder quarry until custom assets land +- [[DR-022_Animation_Pipeline_Rukhanka_Synty]] — the skinned-material lineage `Skinned-Palette` inherits diff --git a/Docs/Vault/01_Vision/Identity.md b/Docs/Vault/01_Vision/Identity.md index 889a55ca4..1676cd422 100644 --- a/Docs/Vault/01_Vision/Identity.md +++ b/Docs/Vault/01_Vision/Identity.md @@ -9,6 +9,11 @@ permalink: gamevault/01-vision/identity # Game Identity — The Awakening Engine (Aether-colony sci-fi) +> [!warning] SUPERSEDED as the operative fiction (2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]). +> The game pivoted to **LANTERN** — see [[Identity_Lantern]]. This Awakening-Engine fiction is **kept as +> history and as salvage quarry** (the code it skins is now inventoried in [[Lantern_Strip_Mothball_Inventory]]). +> Nothing here is deleted; it is no longer the target. + > The fiction that turns the [[Pillars|mechanical pillars]] into a *place*. Originally the "frontier colony" skin (2026-06-02, [[DR-009_GameFeel_Identity_FirstBlood]]); **evolved 2026-06-03** to absorb the magic + sci-fi premise (amnesiac Sleeper, a guiding voice, a goal called THEM) into one coherent world — recorded in [[DR-014_M6_Build_Structures_Automation_Foundation|the M6 build slice]] and the fiction-adoption decision. It remains a **skin over the locked pillars — no mechanical rework**: every M1–M6 system keeps its code and gains a fictional role. The frontier colony is *recontextualised, not replaced*. ## One-sentence pitch diff --git a/Docs/Vault/01_Vision/Pillars.md b/Docs/Vault/01_Vision/Pillars.md index 40f8223f3..cea516bad 100644 --- a/Docs/Vault/01_Vision/Pillars.md +++ b/Docs/Vault/01_Vision/Pillars.md @@ -11,6 +11,14 @@ permalink: gamevault/01-vision/pillars > The few non-negotiables every system must serve. Keep this short; promote only decisions that are truly locked. +> [!info] Direction: **LANTERN** (locked 2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]). +> The **mechanical pillars below still hold** (Unity DOTS + Netcode, server-authoritative, 2–4 co-op, +> skill-expression combat, persistent base, automation-as-progression). What changed is the **fiction + three +> subsystems**: the fiction is now [[Identity_Lantern]] (not the Awakening Engine); combat sharpens to +> **SoD-grade manual-aim skillshots** (the soft auto-target era ends); the world becomes a seed-pinned +> **pocket-graph** where **light is territory**; the build layer becomes suit-frames + cultured Sparks + wild +> mutations. See the LANTERN locked decisions at the bottom. + ## Pillars > **Combat is the primary verb; base + automation braid around it** (locked 2026-06-08, [[DR-028_Combat_Primary_Verb_Depth_First]]). The fusion of all three is the identity — but as ONE braided loop with a single primary verb, never three co-equal, independently-deep modes. Roadmap: [[Path_to_Fun]]. @@ -30,7 +38,27 @@ permalink: gamevault/01-vision/pillars - **Combat-primary + depth-before-breadth (locked 2026-06-08):** combat is the primary braided verb; **no new system until one braided loop is genuinely fun**, and every milestone ends with a play/fun-gate (not just green tests). [[DR-028_Combat_Primary_Verb_Depth_First]] · roadmap [[Path_to_Fun]]. - **Classes + persistent meta (locked 2026-06-17, [[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]]):** **two classes** — **Warrior** (melee anchor) + **Ranger** (ranged, manually aimed — *not* auto-fire, which would break skill-expression). Class identity = the **primary-attack archetype**; run-acquired **meta-buffs ride the existing `StatModifier`/`TimedModifier` pipeline**. A **persistent meta-progression layer** (SaveData v6) funds permanent growth at the hub; run combat-buffs are run-scoped. **Reverses [[DR-031_Base_Mining_Loop_Cohesion]]'s expedition pause** (a real playtest — [[Scratch Notes 6152026]] — showed the single arena goes stale). +## LANTERN direction — locked decisions (2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]) + +These sit *on top of* the mechanical pillars above (which are unchanged). Full design: [[Identity_Lantern]]; +roadmap: [[Roadmap_Lantern_Slice]]. + +- **The one rule:** *what the light holds, stays; what the dark holds, changes.* Applied to the world = + persistence; to the body = death; to the kit = builds; to the story = stakes. +- **World = seed-pinned pocket-graph** (light is territory). Permanence is spendable: lit pockets persist, + dark pockets re-knot. The hardest netcode problem — [[Lantern_World_Model_Spike]] (★review-first). +- **Combat feel = SoD-grade manual-aim skillshots** (telegraphs, dashes, cooldown kits; **soft auto-target + cut**). Suit-frames = chassis/class; **Sparks** (abilities-as-organs, cultured) graft into sockets; **wild + mutations** are the augment layer (paced thresholds, evaporate at homecoming, Tallow fix-slots). +- **Death = the split:** flame returns cheap (kit works within minutes); cargo + fixed mutations + raw organs + strand with the suit — recovery runs are optional value-runs, never mandatory kit-repair. +- **Session-only burn** (the Lamp burns only while a session runs — no offline punishment). **Hosting = Wicks + travel; worlds are saves** (Valheim contract). **Loss ceiling = pockets, never a shelf.** +- **The slice's falsifiable test:** *does pinning a pocket feel like winning, and does a stranded suit feel + worth a second descent?* — the only gate that matters. + ## Related -- [[Identity]] — the **fiction** that skins these pillars: **The Awakening Engine** (Aether-colony sci-fi), evolved 2026-06-03 ([[DR-015_The_Awakening_Engine_Fiction_Adoption]]) from the original frontier-colony skin ([[DR-009_GameFeel_Identity_FirstBlood]], 2026-06-02). Skin-only — no mechanical rework; **Aether** is the one substance unifying magic + tech (cyan = ordered / orange = wild Blight), with an amnesiac-**Sleeper** / **Echo** (the guiding voice) / **THEM** spine. +- [[Identity_Lantern]] — the **operative fiction** these pillars now skin (co-op action-RPG; light-as-territory). +- [[Identity]] — the **prior** fiction (The Awakening Engine, Aether-colony sci-fi) — **superseded** as operative by [[DR-048_Lantern_Adoption_Full_Pivot]], kept as history/quarry. Skinned via [[DR-015_The_Awakening_Engine_Fiction_Adoption]] / [[DR-009_GameFeel_Identity_FirstBlood]] (amnesiac Sleeper / Echo / THEM · Aether cyan=ordered / orange=wild Blight). - Decision records: `07_Sessions/_Decisions/` \ No newline at end of file diff --git a/Docs/Vault/02_Game_Design/Systems_Index.md b/Docs/Vault/02_Game_Design/Systems_Index.md index cd1f05017..fc93a5517 100644 --- a/Docs/Vault/02_Game_Design/Systems_Index.md +++ b/Docs/Vault/02_Game_Design/Systems_Index.md @@ -8,6 +8,12 @@ permalink: gamevault/02-game-design/systems-index # Systems Design — Index +> [!info] LANTERN pivot (2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]). +> The systems catalogued below are the **Awakening-Engine / Co-op-Hades-era spine**. They are **not deleted** — +> under LANTERN they are **quarry**: each has a keep / rework / mothball verdict in +> [[Lantern_Strip_Mothball_Inventory]]. This index stays the accurate map of *what exists in code today*; the +> inventory is the map of *what happens to it*. New LANTERN systems get sections here as they land. + One design doc per gameplay system, linked here. Each should state: purpose, components (`IComponentData`), systems (`ISystem`), netcode shape (ghost? predicted vs interpolated? inputs / RPCs), and open questions. ## Systems diff --git a/Docs/Vault/06_Roadmap/Backlog.md b/Docs/Vault/06_Roadmap/Backlog.md index 5c7f37796..60d9967bc 100644 --- a/Docs/Vault/06_Roadmap/Backlog.md +++ b/Docs/Vault/06_Roadmap/Backlog.md @@ -7,8 +7,9 @@ updated: 2026-06-13 permalink: gamevault/06-roadmap/backlog --- -> [!warning] SUPERSEDED as the operative plan (2026-07-06 Co-op Hades conversion, banner added 2026-07-07). -> Current direction + phases: [[Iteration_2026-07_CoopHades]]. This doc is kept as history. +> [!warning] SUPERSEDED as the operative plan. Now **LANTERN** (2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]). +> Current direction: [[Roadmap_Lantern_Slice]]. (Intermediate history: the 2026-07-06 Co-op Hades conversion, +> [[Iteration_2026-07_CoopHades]].) This doc is kept as history. # Backlog diff --git a/Docs/Vault/06_Roadmap/End_Of_Month_Game_Jam_Slice.md b/Docs/Vault/06_Roadmap/End_Of_Month_Game_Jam_Slice.md index b86bba99a..223b4a657 100644 --- a/Docs/Vault/06_Roadmap/End_Of_Month_Game_Jam_Slice.md +++ b/Docs/Vault/06_Roadmap/End_Of_Month_Game_Jam_Slice.md @@ -12,8 +12,9 @@ updated: 2026-06-17 permalink: gamevault/06-roadmap/end-of-month-game-jam-slice --- -> [!warning] SUPERSEDED as the operative plan (2026-07-06 Co-op Hades conversion, banner added 2026-07-07). -> Current direction + phases: [[Iteration_2026-07_CoopHades]]. This doc is kept as history. +> [!warning] SUPERSEDED as the operative plan. Now **LANTERN** (2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]). +> Current direction: [[Roadmap_Lantern_Slice]]. (Intermediate history: the 2026-07-06 Co-op Hades conversion, +> [[Iteration_2026-07_CoopHades]].) This doc is kept as history. # End-of-Month Game Jam Slice diff --git a/Docs/Vault/06_Roadmap/Iteration_2026-07_CoopHades.md b/Docs/Vault/06_Roadmap/Iteration_2026-07_CoopHades.md index ce1bdeadb..6f015b7c4 100644 --- a/Docs/Vault/06_Roadmap/Iteration_2026-07_CoopHades.md +++ b/Docs/Vault/06_Roadmap/Iteration_2026-07_CoopHades.md @@ -7,6 +7,12 @@ permalink: gamevault/06-roadmap/iteration-2026-07-coophades # Iteration 2026-07 — Co-op Hades Conversion +> [!warning] SUPERSEDED as the operative direction (2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]). +> The project pivoted to **LANTERN** — operative roadmap [[Roadmap_Lantern_Slice]], design [[Identity_Lantern]]. +> Everything below shipped and is **kept as history + salvage quarry** (see [[Lantern_Strip_Mothball_Inventory]] +> for the keep/rework/mothball calls on this iteration's systems — the combat feel layer, boon pipeline, +> world-alive presentation, and run/hub lifecycle are all salvage). Nothing here is deleted. + **Operator decision (2026-07-06, dev-loop iteration session):** commit the *Fix-the-Fight-in-Place trunk* PLUS the full *Co-op Hades* direction — cut/mothball the tower-defense layer, base becomes a Hades-house hub, boons become mechanic-changers, kit gains a second ability, real node types, second boss, co-op revive. **Depth folds in now** (not diff --git a/Docs/Vault/06_Roadmap/Lantern_Strip_Mothball_Inventory.md b/Docs/Vault/06_Roadmap/Lantern_Strip_Mothball_Inventory.md new file mode 100644 index 000000000..9d548b4f0 --- /dev/null +++ b/Docs/Vault/06_Roadmap/Lantern_Strip_Mothball_Inventory.md @@ -0,0 +1,88 @@ +--- +title: LANTERN — Strip / Rework / Mothball Inventory (Phase 0.2) +date: 2026-07-13 +tags: [roadmap, lantern, salvage, inventory, phase-0] +permalink: gamevault/06-roadmap/lantern-strip-mothball-inventory +--- + +# LANTERN — Strip / Rework / Mothball Inventory + +> Phase 0.2 of [[Roadmap_Lantern_Slice]], adopted under [[DR-048_Lantern_Adoption_Full_Pivot]]. Inventories +> every current subsystem against the LANTERN vertical slice. **Existing code is quarry, not foundation** — +> this table records the salvage call, not a migration contract. The per-phase build specs (deeper technical +> pass) own the actual rework; this is the map. +> +> **Legend:** **KEEP** = ports ~as-is (re-theme only). **REWORK** = the chassis/plumbing survives, the design +> on top changes. **MOTHBALL** = retire from the flow via baked toggles (`ScheduleEnabled` pattern), code + +> tests keep compiling for reversibility — do not delete. **CUT** = the design is gone from the slice (code +> may still be mothballed). +> +> Headline calls (roadmap standing constraints): combat feel layer + telegraphs → **KEEP**; boon pipeline → +> **REWORK into mutations**; regions/relevancy, save, hub lifecycle → **REWORK**; sieges/economy leftovers → +> **MOTHBALL**. + +## Combat & player (the primary verb — strongest salvage) + +| Subsystem (current) | Verdict | LANTERN target / note | +|---|---|---| +| **Combat feel layer** — `CombatFeedbackSystem` (+ split siblings), per-kind telegraph colours/voices/lights, hit-stop (camera punch), dash juice, damage numbers | **KEEP** | The single strongest asset. Roadmap: "combat feel layer + telegraphs: keep." Re-palette to warm/cold/lure; feed the SoD skillshot bar. | +| **Player mover** — CharacterController kinematic (collide-and-slide), `PlayerControlSystem`, `CharacterProcessor`, planar Y-lock, predicted-physics infra | **KEEP** | Suit-frames are weighted seafloor infantry (no swimming) — the top-down CC config is exactly right. | +| **Camera** — `PrototypeCameraRig` (ARPG follow, look-ahead, zoom, shake/`Hold`) | **KEEP** | Unchanged; the warm-cone-in-dark framing is a camera+light job. | +| **Projectile/melee plumbing** — predicted `AbilityFireSystem`, `ProjectileMoveSystem`/`ClassificationSystem`, **swept** `ProjectileDamageSystem`, `HealthApplyDamageSystem`, MC-4 combo `Step` | **REWORK** | Keep the predicted-spawn + swept-hit + server-damage spine. Rebuild the ability grammar as **4-socket skillshot kits** with real windups/telegraphs/aim. | +| **Aim** — `PlayerAimSystem` (client-derived), `AimReticleSystem`, scheme byte, **soft auto-target** | **REWORK** (auto-target **CUT**) | SoD-grade **manual aim** is the feel target — the in-arc soft auto-target ends. Reticle + client-derived aim plumbing reused. | +| **Ability data model** — `AbilityDatabase` blob, `AbilityRef`, `StatModifier`/`EffectiveAbilityStats`, `StatRecomputeSystem` (every-tick fold, rollback-correct) | **KEEP / REWORK** | The substrate for **Sparks** (abilities-as-organs) + **mutations** — `StatModifier→EffectiveAbilityStats` is exactly what buffs/tiers/mutations ride ([[Identity_Lantern]]). | +| **Boon pipeline** — `BoonEffects` (SendToOwner Pierce/Fork/Chain/Flags), `BoonOffer`, offer dedup / dominated-protection / `Family` bias, `KillRewardSystem`, `ProjectileEffectState` | **REWORK → wild mutations** | The mechanic-changer architecture IS the **wild-mutation warp** substrate. Layer on: paced thresholds (pocket-clear beats), evaporate-at-homecoming, Tallow **fix slots** (1/Spark), culture library, raw-socketing. [[DR-047_Phase17_Boon_Overhaul_Mechanic_Changers]] is the salvage seed. | +| **Enemy AI + directors** — server-only `EnemyAISystem` (no-pathfinding collide-and-slide + `Depenetrate`/tangent-slide/`EnemyNavState` nudge backstop), `RoomEnemyDirectorSystem`, kind-indexed roster, `Dying` window, separation pass, poise byte | **REWORK** | Chassis kept (sole-position-writer, cover-aware nudge). Re-theme the roster to the bestiary: **Drowners** (Strider), **Grindylow** (Crawler leapers), **Wreckers** (Strider + fake-beacon/scan), **Wisp-Choir** (Drifter motes). Formalize spawn/rig path into **CreatureKit** (Workstream A2). | +| **Boss** — server-only `BossState`/`BossAISystem` (sole mover, telegraphed radial SLAM, phase-2 speed + summon), `Health.Max` `[GhostField]`, party-HP scale | **REWORK** | Reused for the **shelf-boss** (Phase 6) — a real multi-phase skillshot fight. | + +## World, netcode & lifecycle (the ★review-first zone) + +| Subsystem (current) | Verdict | LANTERN target / note | +|---|---|---| +| **Regions / relevancy** — `RegionTag{byte}` (server-only), `GhostRelevancy` (`SetIsIrrelevant`), `RegionRelevancySystem`, untagged-global-ghost rule | **REWORK** | The seed for LANTERN's hardest idea: **light-as-information** relevancy (entities outside your lamp radius aren't replicated) + **pocket streaming**. Coordinate-region split → **pocket-graph**. Owned by the ★review-first [[Lantern_World_Model_Spike]] — no world code until that review passes. | +| **Run / room lifecycle** — `RunDirectorSystem` (sole `RunInfo` writer), `RunLifecycle`/`RoomExplore`, `RoomEpoch`/`RoomTag` teardown, `PortalCommand`/`PortalInteractRequest`, ready-check, `ClassSwapUtil`, `PrepCatalog`/`PrepPurchaseRequest` | **REWORK** | Maps onto the **descent lifecycle**: muster at deepest lit waypoint → **Bell** down → pockets → Bell recall / lit-road walk home; ~30–40 min cap. Rooms→**pockets** (seed-fresh re-knot); portal→Bell/waypoint transit; class-at-base→**suit-frame** pick; per-run prep kept. State machine is salvage; the pocket-graph replaces the linear route map. | +| **Save system** — `SaveData` (single-slot atomic JSON, versioned/additive, `[MinLoadableVersion,Current]`), `SaveService`, born-correct `CycleDirectorSpawnSystem` staging, `BaseRestoreSystem` (charge-free replay + remaining-tick cooldowns + HP) | **REWORK** | Persistence = **seed-pinning**: persist pinned-pocket **seed + structure deltas** + banked light + culture library. The versioned-additive JSON + **born-correct load** pattern is exactly what pinning needs — keep the HOW, change the WHAT. Hosting = "**Wicks travel; worlds are saves**" (Valheim contract). | +| **Frontend / on-demand worlds** — `GameBootstrap`, `WorldLauncher`/`SessionRunner`/`MainMenuController`, UITK menu (Single/Host/Join), `CreateClientWorld`/`CreateServerWorld` | **KEEP** | The Valheim hosting model needs exactly this on-demand world lifecycle + menu flow. Re-skin the menu to the station. | +| **Build / structures / grid** — `BaseGridMath` (locked coord space), `StructureCatalog`, co-op-atomic `BuildPlaceSystem`, `PlacedStructure`, EB-1 `Health`/`Destructible` structure loss-state | **REWORK** | **Building v1** inside lit pockets (Phase 3) — the grid + atomic-placement RPC + catalog reused; structure-death (EB-1) reused for **tide defense** (severable fuel lines, garrisoned junctions). | + +## Economy, resources & harvest + +| Subsystem (current) | Verdict | LANTERN target / note | +|---|---|---| +| **Ledger + harvest** — global `StorageEntry` ledger (`ResourceLedger` tag), personal `InventorySlot` bag (`OwnerSendType.All`), unified **swept** `ResourceHarvestSystem` (nodes + clutter, immortal-sink guard), `G`-deposit RPC | **REWORK** | Re-mean the currencies: **Flame / Lumen / Gloam / Loudness / Salvage / Chum / Tallow** ([[Identity_Lantern]]). Ledger + personal bag + swept harvest plumbing kept; **carried-vs-banked cargo** distinction is new; harvest = **Lumen nodes + organ drops**. | +| **Resource ids** — Ore / Aether / Biomass / Charge (`ResourceId` bytes) | **REWORK** | Re-meaned to the LANTERN currency set (bytes, not enums — Burst rule holds). | +| **Inventory / equipment** — `EquipmentSlot`→`AbilityRef` swap, `ItemDatabase` blob, `EquipSystem` (atomic bag↔slot) | **REWORK / PARTIAL** | Already PAUSED. The slot→ability swap is the **graft-into-socket** substrate for Sparks; **culture library** (permanent per-station collection) is new. | +| **Automation** — `Harvester`/`Conveyor`/`Fabricator` chain, `ProductionMath`/`ConveyorMath`, deterministic offline catch-up, server-only I/O buffers | **MOTHBALL** | LANTERN **cuts spatial production machinery** ([[Identity_Lantern]] scope ladder). v1.0 automation is **assignment-based** (Tenders under the Klabautermann), not conveyors. Mothball the chain; keep the deterministic-catch-up math as reference for assignment production. | + +## Sieges / win-condition (tower-defense layer — mothball-bound) + +| Subsystem (current) | Verdict | LANTERN target / note | +|---|---|---| +| **Base-siege win** — END-2 final siege + latching Victory/Loss, `GoalReachedSystem`, `RunOutcome` (`[GhostField]` server-only) | **MOTHBALL / REWORK-meter** | No base-siege win in LANTERN. `GoalProgress`/`RunOutcome` **win-meter** reworks into the **Lamp brightness = campaign meter**. The **Dawn** (final carry) is the v1.0 win, not the slice. | +| **Losable Core** — END-1 `CoreIntegrity`, `CoreDamageSystem`/`CoreRestoreSystem`, Core as AI fallback target | **MOTHBALL** | Already mothball-bound (Phase 2). No Core in LANTERN; the station is never destroyed — **loss ceiling = frontier pockets, never a shelf**. | +| **Turret defense** — EB-2 turret-ammo `Charge`, `TurretFireSystem` soft-fail spend, ledger-fed Fabricator mint | **MOTHBALL** | No turret auto-defense in the slice. **Tide defense** (defend a planted lantern / fuel line) is a different, later beat (Phase 6 scripted tide). | +| **Cycle/phase director** — `CyclePhaseSystem` (sole Phase writer), scheduled-siege / retaliation | **MOTHBALL / REWORK** | The auto-cycle retires. The **forecast** model (Siren sings tide windows in advance) replaces sprung sieges — a planned event, not an interrupt. | + +## Presentation, world-feel & art (the LANTERN look is already here) + +| Subsystem (current) | Verdict | LANTERN target / note | +|---|---|---| +| **Rendering identity** — dark-ambient + dynamic-light-first (clean dark-Synty), `DynamicLightSystem` (projectile/portal/node/impact lights), per-biome dark palettes, ACES/HDR grade | **KEEP** | *This is LANTERN.* The rendering pipeline stops being a style and becomes the fiction (light carves playable space). Add the **capture/photo grade** (lifted profile for clips) + the **readability law** (value-first, flicker-cadence, 200px). | +| **Atmosphere / ambient** — `WorldAtmosphereSystem` (fog/ambient cross-fade), `AmbientMotionSystem` (drift/sway/rustle), `AmbientLifeSystem` (critters + cloud shadows + weather beats) | **KEEP / REWORK** | Ports as **water-column atmosphere** (murk, silt-outs, plankton blooms, currents, whale-falls). Critters → light's-edge fauna; weather beats → the dark-as-weather language. | +| **Hazards / breakables / decals / cover** — `HazardExplosionSystem` (barrels), `GeyserEruptSystem` (periodic AoE, born-correct tick), `BlightClutter` breakables, destructible cover (env-collider ghost), `ScorchDecalSystem`/`CoverDamageSystem` | **KEEP / REWORK** | The both-sides-telegraphed AoE chassis (barrels/geyser) ports to **vent fields**; breakables/cover → wreck/coral dressing; decals reused. `BlightClutter` → **pocket clutter** (glow-flora/wrecks). | +| **HUD / UI** — `HudSystem` (UITK, split siblings), `MenuUi` palette/`PanelSettings`/`EventSystem`, build palette, `PauseMenuController`, `HudTheme` SO | **REWORK** | UITK chassis + build palette kept; re-mean to **Flame / Lumen / Gloam / Loudness pips** + **lamp-morse** ping wheel. Station panels (Lamp meter, rack, graft-bench) are Phase 7. | +| **Animation** — Rukhanka 2.9 client-derived (`PlayerAnimationDriveSystem`, `EnemyAnimationDriveSystem`, `ServerStripAnimationSystem`), `AnimatedLitShader`, `EnemyRigTools`, humanoid muscle-clip pipeline | **KEEP / REWORK** | Client-derived pipeline kept wholesale (netcode replication OFF). Formalize into the **3 rig families** (Drifter/Crawler/Strider, Workstream A1); `AnimatedLitShader` → the deformation-aware **`Skinned-Palette`** master shader (palette-atlas material decision). | +| **World art assets** — Synty biomes (`BaseBiome` Meadow / `ExpeditionBiome` Arid), `ColliderFitTools`, `EnvArtTools` (HDRP→URP) | **REWORK / QUARRY** | Synty = **placeholder quarry** during transition ([[Synty_Asset_Inventory]]). LANTERN's abyssal look is custom Blender + the 3 master shaders + one palette atlas (Workstream A0). `ColliderFitTools` reused for pocket collider fitting. | +| **Dev tooling** — `DebugOverlay`/`TuningConfig`, `DebugCommandSendSystem`, class-switch, screenshot rig, validation-harness | **KEEP / REWORK** | Retooled per roadmap cross-cutting: **pocket-graph visualizer, seed-pin inspector, Loudness/threat readout, descent-state overlay**. The server-inject validation harness pattern stays. | + +## What this leaves for Phase 1 + +The **combat gym** (Phase 1) can be built almost entirely from KEEP + light REWORK: player mover + camera + combat feel + projectile/melee spine + ability data model + telegraphs, with two suit-frames on the existing humanoid pipeline and 4–5 Sparks on the reworked boon substrate. The ★review-first items (relevancy → light-as-information, pocket streaming) are quarantined behind [[Lantern_World_Model_Spike]] and do not block the gym. + +## Related + +- [[DR-048_Lantern_Adoption_Full_Pivot]] — the adoption this delivers 0.2 for +- [[Roadmap_Lantern_Slice]] — the phase roadmap each verdict feeds +- [[Lantern_World_Model_Spike]] — owns the REWORK of relevancy/lifecycle/save (★review-first) +- [[Systems_Index]] — the per-system design docs being inventoried +- [[Synty_Asset_Inventory]] — the placeholder quarry diff --git a/Docs/Vault/06_Roadmap/Lantern_World_Model_Spike.md b/Docs/Vault/06_Roadmap/Lantern_World_Model_Spike.md new file mode 100644 index 000000000..c63da3386 --- /dev/null +++ b/Docs/Vault/06_Roadmap/Lantern_World_Model_Spike.md @@ -0,0 +1,91 @@ +--- +title: LANTERN — World-Model Design Spike (Phase 0.3, ★review-first) +date: 2026-07-13 +tags: [roadmap, lantern, netcode, world-model, design-spike, phase-0, review-first] +status: brief-review-pending +permalink: gamevault/06-roadmap/lantern-world-model-spike +--- + +# LANTERN — World-Model Design Spike (pocket-graph + seed-pinning) + +> **★ REVIEW-FIRST — this is a BRIEF, not a design.** Phase 0.3 of [[Roadmap_Lantern_Slice]], adopted under +> [[DR-048_Lantern_Adoption_Full_Pivot]]. This frames the slice's **hardest netcode problem** and its open +> questions so the adversarial design review has a target. **No world code is written until that review +> passes** (the standing project ritual — [[validate-netcode-design-before-coding]]). This doc feeds the +> review; the review produces the durable Build Spec that feeds the eventual DR. +> +> **This gate is one of Phase 0's three exit conditions** (with the adoption DR and the A0 style-proof scene). +> It is currently **OPEN** — the review has not been run. + +## The problem in one sentence + +Permanence is **territory made of light**: what a lamp holds is fixed and saved; what is dark **re-knots** +every descent — and this must hold across 2–4 co-op clients under server authority, client prediction, and a +per-player light-based information radius, without shipping a determinism nightmare. + +## The design commitments to honour (from [[Identity_Lantern]]) + +- **The world is a pocket-graph** — discrete generated pockets on a graph, **not open stitched terrain**. +- **Permanence = seed-pinning.** Dark pockets generate from a per-descent seed; **lighting one pins its seed + and saves structure deltas.** "The dark re-knots" is a seed change, nearly free. +- **Light is information, server-enforced.** A client is not sent entities outside its lamp radius — relevancy, + not gamma. Dimming is a true trade (quiet for blind). +- **Session shape:** muster at the deepest lit waypoint → Bell down → pockets → Bell recall or lit-road walk + home; **~30–40 min hard cap**. Lighting a lantern is a save point. +- **Loss ceiling:** the dark takes frontier *pockets*, never a whole shelf. + +## The contract to design (the review's agenda) + +1. **Pocket generation as a pure function of `(worldSeed, pocketId, descentSalt)`.** Deterministic, server- + authored. The seed never needs replicating cross-client (the DR-037 feasibility insight holds: **the server + spawns procedural content as runtime ghosts and clients just receive them** — no cross-client determinism + problem). Question: what is `pocketId` (graph node id) and how is the graph itself generated/pinned? +2. **Pinning = persist `seed + structure deltas`.** Lighting a waypoint-lantern writes the pocket's seed + + its building/harvest deltas to the save. Re-entry regenerates from seed then replays deltas (the + **born-correct** load pattern already proven in [[Lantern_Strip_Mothball_Inventory|the save rework]]). + Question: delta granularity (full structure list vs diff), and how banked-light/Lamp state composes. +3. **Pocket streaming / replication as runtime ghosts.** Only the current + adjacent pockets are live; a + pocket's entities spawn as server ghosts when the party enters and despawn on exit. Reuses the + `GhostRelevancy` (`SetIsIrrelevant`) machinery from the region split — but keyed on **pocket occupancy + + lamp radius**, not a coordinate region. Question: the transit/handoff moment (Bell down, walk between + pockets) and how relevancy composes with light radius without a per-tick cost blowup. +4. **Muster / Bell transit contract.** Muster relocates to the deepest lit waypoint; the Bell is the + depth-lock transit. Reuses the run/room lifecycle state machine ([[Lantern_Strip_Mothball_Inventory]]). + Question: co-op semantics (does the whole party transit together? partial-party descents?). +5. **Light-as-information relevancy.** Per-player lamp radius drives what is replicated to that client. This + is the Phase-1 "relevancy-light prototype" — the ★review-first item flagged there too. Question: is this + the SAME mechanism as pocket streaming or a second layer on top, and how do they interact. + +## Known hazards the review must attack (from CLAUDE.md + prior DRs) + +- **Relevancy cull re-audit:** a 2nd concept sharing an existing tag has repeatedly wiped/blocked cross-region + state (DR-031, DR-040). Any pocket/light relevancy scheme must re-audit every query/cull over the tag. +- **Shared GLOBAL state rides an UNTAGGED ghost** (never a relevancy-tagged one) — the Lamp meter, campaign + readout, party Loudness must stay relevant everywhere. +- **Prediction determinism:** no wall-clock / `Time.deltaTime` / `System.Random` in predicted sim; pocket gen + is server-authored (not predicted). Tick sentinels through `TickUtil.NonZero`. +- **Per-tick relevancy cost:** the region relevancy system already needs cosmetic props to be non-ghost; + light-radius relevancy recomputed per player per tick is a cost the review must bound. +- **Save additivity:** seed-pin schema must be additive/versioned (`[MinLoadableVersion, Current]`) so old + saves load. + +## Explicit non-goals for the spike + +Not designing: the full v1.0 severable fuel-net, the doppelganger relocation AI, shelf-regression, or open +terrain (cut). The spike designs **the slice's** pocket-graph + pinning + streaming + transit only. + +## Status & next action + +**OPEN.** Next action (not doc work): run the **adversarial design-review Workflow** (lenses: +netcode/relevancy · determinism/prediction · reuse/scope → adversarial critics → synthesis) over this brief + +the ground-truth relevancy/lifecycle/save code, producing `World_Model_Build_Spec.md`. Only then does any +world code begin (Phase 2 in the roadmap; Phase 1's combat gym has **no world** and is not blocked by this). + +## Related + +- [[Roadmap_Lantern_Slice]] — Phase 0.3 (this) and Phase 2 (the dark & the pocket-graph, which this gates) +- [[DR-048_Lantern_Adoption_Full_Pivot]] — the adoption +- [[Lantern_Strip_Mothball_Inventory]] — the relevancy/lifecycle/save salvage this reworks +- [[Identity_Lantern]] — the world-model commitments (the tide-line) +- [[DR-013_M6_Aether_Cycle_Region_Split]] — the region/relevancy machinery being reworked +- [[validate-netcode-design-before-coding]] — the ritual this doc sets up diff --git a/Docs/Vault/06_Roadmap/Milestones.md b/Docs/Vault/06_Roadmap/Milestones.md index 8c83990db..08863177c 100644 --- a/Docs/Vault/06_Roadmap/Milestones.md +++ b/Docs/Vault/06_Roadmap/Milestones.md @@ -6,8 +6,9 @@ updated: 2026-06-13 permalink: gamevault/06-roadmap/milestones --- -> [!warning] SUPERSEDED as the operative plan (2026-07-06 Co-op Hades conversion, banner added 2026-07-07). -> Current direction + phases: [[Iteration_2026-07_CoopHades]]. This doc is kept as history. +> [!warning] SUPERSEDED as the operative plan. Now **LANTERN** (2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]). +> Current direction: [[Roadmap_Lantern_Slice]]. (Intermediate history: the 2026-07-06 Co-op Hades conversion, +> [[Iteration_2026-07_CoopHades]].) This doc is kept as history. # Milestones diff --git a/Docs/Vault/06_Roadmap/Path_to_Fun.md b/Docs/Vault/06_Roadmap/Path_to_Fun.md index 4b8f6bb40..549f33979 100644 --- a/Docs/Vault/06_Roadmap/Path_to_Fun.md +++ b/Docs/Vault/06_Roadmap/Path_to_Fun.md @@ -6,13 +6,14 @@ tags: - economy - endgame - north-star -status: active -updated: 2026-06-24 +status: superseded +updated: 2026-07-13 permalink: gamevault/06-roadmap/path-to-fun --- -> [!warning] SUPERSEDED as the operative plan (2026-07-06 Co-op Hades conversion, banner added 2026-07-07). -> Current direction + phases: [[Iteration_2026-07_CoopHades]]. This doc is kept as history. +> [!warning] SUPERSEDED (2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]). +> The project pivoted to **LANTERN** — operative roadmap [[Roadmap_Lantern_Slice]], design [[Identity_Lantern]]. +> This north-star doc (and the Co-op Hades plan that first superseded it, 2026-07-06) are **kept as history**. # Path to Fun — the north-star roadmap diff --git a/Docs/Vault/07_Sessions/2026/2026-07-13_Lantern_Phase0_Adoption_Pivot.md b/Docs/Vault/07_Sessions/2026/2026-07-13_Lantern_Phase0_Adoption_Pivot.md new file mode 100644 index 000000000..2195941ee --- /dev/null +++ b/Docs/Vault/07_Sessions/2026/2026-07-13_Lantern_Phase0_Adoption_Pivot.md @@ -0,0 +1,77 @@ +--- +date: 2026-07-13 +type: session +tags: [session, lantern, pivot, phase-0, docs] +permalink: gamevault/07-sessions/2026/2026-07-13-lantern-phase0-adoption-pivot +--- + +# Session 2026-07-13 — LANTERN Phase 0: adoption & the full docs/skills pivot + +## Goal + +Start Phase 0 of the LANTERN roadmap ([[Roadmap_Lantern_Slice]]): **make the full pivot** — adopt LANTERN as +the operative direction and update **all docs & skills** to reflect it, plus deliver the Phase-0 items that are +documentation work. No code this session (the pivot is a direction adoption; implementation starts at Phase 1). + +## Done + +**Phase 0 checklist items (doc portions):** +- **0.1 Adoption** — wrote [[DR-048_Lantern_Adoption_Full_Pivot]] (LANTERN supersedes the Awakening-Engine + fiction + the Co-op Hades iteration; archive-not-delete; existing code = quarry; mechanical pillars hold). +- **0.2 Strip/mothball** — wrote [[Lantern_Strip_Mothball_Inventory]]: system-by-system keep / rework / + mothball / cut, grounded in [[Systems_Index]] + the co-op-Hades systems. Headlines: combat feel + telegraphs + = keep; boon pipeline → mutations; regions-relevancy / lifecycle / save → rework; automation + + sieges/Core/turret = mothball. +- **0.3 World-model spike** — wrote [[Lantern_World_Model_Spike]] as a **★review-first BRIEF** (pocket-graph + + seed-pinning + light-as-information relevancy + Bell transit contract, with the open questions + known + hazards for the review). Marked review-PENDING; no world code until the adversarial review passes. +- **0.4 Art A0** — wrote [[Art_Direction_Lantern]]: the binding style bible, **the material decision** (one + palette atlas + vertex colours under three master shaders `Lit-Palette`/`Emissive-Gloam`/`Skinned-Palette`), + the reference board, and the style-proof-scene gate definition. The in-engine scene itself = pending. + +**"Update all docs & skills" sweep:** +- [[Pillars]] — LANTERN direction banner up top + a LANTERN locked-decisions block; Related repointed to + [[Identity_Lantern]] (prior [[Identity]] marked superseded/quarry). +- Superseded banners → [[Identity]], [[Iteration_2026-07_CoopHades]], [[Path_to_Fun]] (redirected straight to + LANTERN; `status: active`→`superseded`). Kept as history; nothing deleted. +- [[Home]] MoC — current-direction callout = LANTERN; vision/roadmap/session/decision pointers refreshed; the + stale "serena navigates C# symbols" line fixed to Glob/Grep (serena removed 07-07). +- [[Systems_Index]] — era note: the catalogued systems are the pre-pivot spine = quarry, verdicts in the + inventory. +- `CLAUDE.md` — the "Core loop" bootstrap bullet replaced with a **LANTERN direction pointer** (net-neutral: + 39,684→39,681 B, under the 40 KB budget); the verbose DR-044/045/046 core-loop invariants archived verbatim + to `_Meta/CLAUDE_Build_Gotchas_Archive.md` under a new 2026-07-13 heading (the general "serialized prefab + bool ignores the C# initializer" gotcha kept inline). Condensation-history line ticked. +- `dots-dev` skill — `references/validation-harness.md`: noted the "expedition-run" driving recipe's nouns are + co-op-Hades-era (re-meaned to the descent lifecycle later); the harness *patterns* stay direction-agnostic. + The rest of the skill is process-only and needed no pivot. +- Native memory — new [[lantern-direction-pivot]] operative-direction note + `MEMORY.md` index; the prior + direction memory kept with a supersession pointer. + +## Decisions + +- [[DR-048_Lantern_Adoption_Full_Pivot]] — LANTERN is the operative direction (Phase 0.1 gate closed). + +## Open / deferred (explicitly flagged — NOT silently deferred) + +Two Phase-0 items are **not** doc work and remain OPEN gate conditions: +1. **0.3 world-model design review** — the ★review-first adversarial Workflow over [[Lantern_World_Model_Spike]] + + ground-truth relevancy/lifecycle/save code, producing `World_Model_Build_Spec.md`. This is the slice's + hardest netcode problem; no world code until it passes. +2. **0.4 A0 style-proof scene** — one prop + one creature + one suit in-engine under murk, judged full-size + + 200 px + grayscale. Requires Blender + engine work (Workstream A0 gate). + +Phase 0 does not fully exit until both land. Phase 1 (the combat gym) has **no world** and is not blocked by +0.3 — it can start on the KEEP/rework salvage once the operator chooses. + +## Next + +Operator fork: (a) run the **0.3 world-model design-review Workflow** now, or (b) start the **0.4 style-proof +scene** (Blender on-ramp), or (c) begin **Phase 1 combat gym** planning from the salvage inventory. Recommend +(a) since it unblocks all world-touching work and is the standing review-first ritual, with (b) proceeding in +parallel on the art track. + +## Related + +- [[Roadmap_Lantern_Slice]] · [[Identity_Lantern]] · [[Lantern_Strip_Mothball_Inventory]] · + [[Lantern_World_Model_Spike]] · [[Art_Direction_Lantern]] · [[DR-048_Lantern_Adoption_Full_Pivot]] diff --git a/Docs/Vault/07_Sessions/_Decisions/DR-048_Lantern_Adoption_Full_Pivot.md b/Docs/Vault/07_Sessions/_Decisions/DR-048_Lantern_Adoption_Full_Pivot.md new file mode 100644 index 000000000..dfc8c4db9 --- /dev/null +++ b/Docs/Vault/07_Sessions/_Decisions/DR-048_Lantern_Adoption_Full_Pivot.md @@ -0,0 +1,94 @@ +--- +id: DR-048 +title: LANTERN adoption — the full pivot (supersedes Awakening Engine + Co-op Hades) +status: accepted +date: 2026-07-13 +tags: [decision, direction, lantern, pivot, adoption] +permalink: gamevault/07-sessions/decisions/dr-048-lantern-adoption-full-pivot +--- + +# DR-048 — LANTERN adoption: the full pivot + +## Context + +The 2026-07-13 vision refresh ([[Theme_Direction_Candidates]]) explored four load-bearing-theme +directions against the operator brief (**V Rising + Shape of Dreams** core; SoD-grade skillshot combat + +modular ability kits braided with a persistent base; 2–4 co-op; solo dev learning Blender, RoR2-lineage +low-poly). The operator selected **Direction A — LANTERN** and put a full identity draft through **three +independent adversarial reviews** (theme/narrative · systems/game-loop · player-experience/market). All +findings were operator-accepted and folded into the review-hardened final draft [[Identity_Lantern]] (v3), +with the vertical-slice roadmap [[Roadmap_Lantern_Slice]]. + +This forces a direction decision: the codebase and vault were built under **The Awakening Engine** +(Aether-colony sci-fi fiction, [[Identity]] / [[DR-015_The_Awakening_Engine_Fiction_Adoption]]) and most +recently steered by the **Co-op Hades conversion** iteration ([[Iteration_2026-07_CoopHades]], which +itself superseded the DR-037 → DR-042 expedition-driven line and the DR-035 end-of-month jam slice). LANTERN +keeps every locked **mechanical** pillar ([[Pillars]] #1–4 hold) but replaces the **fiction, the world +model, the death rules, the build/mutation system, and the combat feel target**. It is not a reskin — under +LANTERN's own load-bearing test, reskinning "light" would break persistence, death, relevancy, the economy, +and the treadmill at once. This is a genuine change of direction, so it is recorded as one. + +## Decision + +**LANTERN is the operative direction.** [[Identity_Lantern]] is the authoritative design; [[Roadmap_Lantern_Slice]] +is the operative roadmap. This DR is the **adoption gate** (Phase 0.1 of that roadmap). + +1. **Supersession (archive, never delete).** LANTERN supersedes, as the *operative target*: + - the Awakening-Engine fiction — [[Identity]] / [[DR-015_The_Awakening_Engine_Fiction_Adoption]]; + - the Co-op Hades iteration — [[Iteration_2026-07_CoopHades]]; + - and by transitivity the direction line it carried (DR-037 expedition spine → DR-042 expedition-driven + win → DR-044/045/046 demo passes → DR-047 boon overhaul). + All of it is **kept as history and as salvage quarry** — banners point forward, nothing is removed. Prior + DRs stay valid as records of what was built and why. + +2. **Existing code is quarry, not foundation.** Strip and reuse freely; no design decision bends to preserve + code. The system-by-system keep / rework / mothball calls live in [[Lantern_Strip_Mothball_Inventory]] + (Phase 0.2). Headline calls, from the roadmap's standing constraints: **combat feel layer + telegraphs = + keep**; **boon pipeline = rework into wild mutations**; **regions/relevancy, save system, hub lifecycle = + rework**; **sieges / Core / turret-ammo economy leftovers = mothball**. + +3. **The mechanical pillars hold; the fiction and three subsystems change.** Unchanged: Unity DOTS + + Netcode for Entities, server-authoritative, input-only clients, client prediction, 2–4 co-op + ([[Pillars]]). Changed by LANTERN: (a) **world model** → seed-pinned **pocket-graph** with light-as- + permanence (the tide-line); (b) **combat feel** → SoD-grade **manual-aim skillshots** (the soft + auto-target era ends as the target — see the pillars note); (c) **build system** → suit-frames + cultured + **Sparks** + wild **mutations** (the augment layer), replacing flat-stat boons. + +4. **The slice's falsifiable test is the only gate that matters:** *does pinning a pocket feel like winning + something, and does a stranded suit feel worth a second descent?* Every deferred system is justified only + by these two. + +5. **Phase 0 exit is NOT this DR alone.** The roadmap gates Phase 0 on **three** things: this DR merged **+** + the world-model design review passed ([[Lantern_World_Model_Spike]], ★review-first — not yet run) **+** + the A0 style-proof scene approved in-engine ([[Art_Direction_Lantern]], gate pending). This DR closes only + 0.1; 0.2 (inventory) is delivered; **0.3 and 0.4's in-engine gates remain open.** + +## Consequences + +- **Naming.** Working title "LANTERN" has poor Steam-search uniqueness; a shipping-title pass is deferred to + a marketing milestone (per [[Identity_Lantern]]). "LANTERN" is the internal codename until then. +- **Vault surface updated this session (Phase 0 pivot):** [[Pillars]] (pointer + LANTERN locked decisions), + [[Identity]] + [[Iteration_2026-07_CoopHades]] + [[Path_to_Fun]] (superseded banners), [[Home]] (MoC + + current direction), [[Systems_Index]] (era note), `CLAUDE.md` (game-state/core-loop line → LANTERN pivot + pointer; verbose co-op-Hades invariants archived to `_Meta/CLAUDE_Build_Gotchas_Archive.md`). Prior DRs and + session logs are **not** rewritten — they are the record. +- **basic-memory** reindexes this DR and the new roadmap/vision docs on next index; native `memory/` + gets the [[lantern-direction-pivot]] operative-direction note. The old direction memory is kept as history. +- **What does NOT change yet:** no world code, no fiction rename in code, no ghost/RPC churn. The pivot is a + documentation + direction adoption; implementation begins at Phase 1 (combat gym) and only after the Phase 0 + world-model review passes for anything world-touching. +- **Revisit when:** the slice test fails on either half (pinning doesn't feel like winning, or a stranded suit + doesn't pull a second descent) — that invalidates the direction, not a subsystem, and triggers a fresh + fork-locking ritual. Also revisit the "crews present-but-unlit vs gone" and shipping-title open forks at the + narrative/marketing milestones. + +## Related + +- [[Identity_Lantern]] — the design this adopts (authoritative) +- [[Roadmap_Lantern_Slice]] — the operative roadmap (this is its Phase 0.1) +- [[Lantern_Strip_Mothball_Inventory]] — Phase 0.2, the salvage map +- [[Lantern_World_Model_Spike]] — Phase 0.3, ★review-first (gate open) +- [[Art_Direction_Lantern]] — Phase 0.4 / Workstream A0 (in-engine gate open) +- [[Theme_Direction_Candidates]] — the exploration that produced the fork +- [[Identity]] · [[Iteration_2026-07_CoopHades]] · [[DR-047_Phase17_Boon_Overhaul_Mechanic_Changers]] — superseded as operative, kept as quarry +- [[Pillars]] — the mechanical constraints LANTERN was shaped inside (unchanged) diff --git a/Docs/Vault/_Meta/CLAUDE_Build_Gotchas_Archive.md b/Docs/Vault/_Meta/CLAUDE_Build_Gotchas_Archive.md index e57987b57..a78099936 100644 --- a/Docs/Vault/_Meta/CLAUDE_Build_Gotchas_Archive.md +++ b/Docs/Vault/_Meta/CLAUDE_Build_Gotchas_Archive.md @@ -463,3 +463,11 @@ CLAUDE.md was chronically saturated (39.9–40.2 KB for a week; every gotcha add - **Core loop = ready-check multi-room RUNS ★ (DR-044; DR-031/042 base-mining text archived 07-04):** base = pure SPEND hub (no base nodes; `Tuning.StartingOre` grubstake). `RunDirectorSystem` = sole `RunInfo` writer (`[UpdateBefore(CyclePhaseSystem)]`; NOTHING else in the room chain touches CyclePhase); banks Charge+retaliation once-per-`RunEpoch` on boss-clear ONLY; strips the boon band + every `BoonOffer` on exit; teleports ONLY launch-stamped **`RunParticipant`s** (released on Returning — dead-respawned re-conscript, late joiners stay home). Rooms spawn per `RoomEpoch` at ping-pong sub-slots, `RoomTag`-torn-down; first slot waits `Tuning.RoomEntryGraceTicks`. ★ a serialized prefab bool ignores the C# initializer — flip `CycleDirector.prefab`. **Demo (DR-045/046): `GoalProgress.Target`=2; `Health.Max` now `[GhostField]` (boss + enemy HP bars). Boss = scaled Charger + server-only `BossState` kit (sole `BossAISystem` mover: SLAM/phase-2 summon/knockback-immune). Grunt windup commits ~last 30%; Charger stagger + Spitter cornered-hold. Rooms gate on a PORTAL (`RunLifecycle.RoomExplore=6` loot window; `PortalInteractRequest`→server `PortalCommand`; empty expedition advances now); class picked + per-run PREP buffs spent at base each run (Staging-gated RPCs via the shared `ClassSwapUtil`; disjoint prep `StatModifier` band stripped on Returning).** See [[DR-044_Expedition_Redesign_Shipped_Demo_Polish]] · [[DR-045_Combat_Demo_Feel_Boss_Fight]] · [[DR-046_Base_Expedition_Ties_Portal_Class_Prep]]. Also this pass (earlier, same session): four stale netcode "1.13.2" stamps corrected to 6.5.0 (CreateLocalWorld is now PUBLIC — reflect-verified; NetCodeTestWorld still effectively unavailable), the dead `~/.claude/skills` path fixed to the in-repo skill, and the ctx7 netcode pin re-annotated (no 6.x docs set exists as of 07-07). + +## 2026-07-13 — LANTERN pivot: co-op-Hades core-loop bullet archived (pays the direction pointer) + +The project pivoted to **LANTERN** ([[DR-048_Lantern_Adoption_Full_Pivot]]; design [[Identity_Lantern]], roadmap [[Roadmap_Lantern_Slice]]). The co-op-Hades run-loop code is now **salvage quarry** ([[Lantern_Strip_Mothball_Inventory]]), not the operative direction, so its verbose CLAUDE.md core-loop bullet was condensed to a one-line direction pointer. The DR-044/045/046 invariants stay TRUE of the live code while it exists as quarry — preserved here verbatim (the pre-pivot CLAUDE.md "Core loop" bullet): + +- **Core loop = ready-check multi-room RUNS ★ (DR-044/045/046):** base = pure SPEND hub. `RunDirectorSystem` = sole `RunInfo` writer (`[UpdateBefore(CyclePhaseSystem)]`; nothing else in the room chain touches CyclePhase); banks Charge+retaliation once-per-`RunEpoch` on boss-clear ONLY; strips the boon band + `BoonOffer`s on exit; teleports ONLY launch-stamped `RunParticipant`s (released on Returning). Rooms spawn per `RoomEpoch`, `RoomTag`-torn-down, gate on a PORTAL (`RunLifecycle.RoomExplore=6` loot window; `PortalInteractRequest`→server `PortalCommand`). Class + per-run PREP spent at base (Staging-gated RPCs via shared `ClassSwapUtil`; prep `StatModifier` band stripped on Returning). `Health.Max` is a `[GhostField]`. Boss = server-only `BossState`/`BossAISystem` (sole boss mover). ★ **a serialized prefab bool ignores the C# initializer — flip the value in the prefab.** Feel/tuning detail → [[DR-044_Expedition_Redesign_Shipped_Demo_Polish]] · [[DR-045_Combat_Demo_Feel_Boss_Fight]] · [[DR-046_Base_Expedition_Ties_Portal_Class_Prep]]. + +The general gotcha "a serialized prefab bool ignores the C# initializer — flip the value in the prefab" is kept inline in CLAUDE.md (broadly applicable beyond this loop).