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:
@@ -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
|
||||
Reference in New Issue
Block a user