Docs: LANTERN Phase 0 — full pivot adoption + all-doc sweep
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) <noreply@anthropic.com>
This commit is contained in:
@@ -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.
|
||||
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.
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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/`
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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]]
|
||||
@@ -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)
|
||||
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user