Continued

This commit is contained in:
2026-06-04 00:06:18 -07:00
parent 8e9b4412ce
commit 5c11ff4fad
42 changed files with 1287 additions and 29 deletions
+22
View File
@@ -0,0 +1,22 @@
{
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": false,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 1.0639049569280792,
"close": false
}
+71 -27
View File
@@ -3,65 +3,109 @@ tags:
- vision
- identity
status: draft
updated: 2026-06-02
updated: 2026-06-03
permalink: gamevault/01-vision/identity
---
# Game Identity — Frontier colony (sci-fi)
# Game Identity — The Awakening Engine (Aether-colony sci-fi)
> The fiction that turns the [[Pillars|mechanical pillars]] into a *place*. Decided 2026-06-02 to bridge the "tech-demo → game" gap. It is a **skin over the locked pillars — no mechanical rework**: every pillar already built (M1M5) keeps its systems and gains a fictional role below.
> 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 M1M6 system keeps its code and gains a fictional role. The frontier colony is *recontextualised, not replaced*.
## One-sentence pitch
> **A 24 player co-op action-RPG about holding a frontier outpost on a hostile world: twin-stick combat against the Husk swarm, a shared base you build and automate, and production chains that keep running while you fight.**
> **A 24 player co-op action-RPG about memory-wiped Sleepers who wake in a fallen Aether-colony and — urged on by a voice that is their own future self — harvest the corrupting Aether that powers everything to recharge their bodies, minds, and shared base, holding the line against the Husk swarm cycle by cycle as they push toward THEM.**
## Setting
An off-world **colony foothold** — a small crew anchoring a survivable outpost on a frontier world that does not want them there. A spreading corruption — **the Blight** — turns drones, machinery, and fauna into aggressive **Husks** that probe and swarm the perimeter. The outpost is the safe anchor you grow and defend; beyond it lies the blighted frontier you push into for resources.
An off-world **colony foothold gone dark**, found long after the lights went out. A crew came here to tap **AETHER** — a single luminous substance that is at once raw magical energy *and* the only fuel the colony's machines ever ran on — bled up from something buried beneath the regolith. They built a grounded near-future **industrial outpost** around it (fabricators, conveyors, assembler-drones, turrets, a perimeter, a hibernation bay) that ran on Aether the way ours runs on electricity. The strike worked — then the Aether began rewriting what it touched: uncontained, it soured the drones, the machinery, and the local fauna into the orange-lit **Husks** that now probe and swarm the perimeter, and it scrambled the crew, who went under in their pods.
## Player fantasy
You wake feeble and memory-blank inside a cracked hibernation-pod at the heart of the base. Beyond the outpost's safe anchor lies the **blighted frontier** — a procedurally shifting field where Aether wells up through glowing nodes — reachable only through the colony's Aether **gates**. The world reads as grounded industrial sci-fi where **Aether is the only fantastical thing**: every machine, weapon, and structure is a mundane engineered object running on it.
A **frontier operator**: mobile, lethal twin-stick gunplay; you and your friends raise an outpost, wire up automation so the colony *compounds* even while you're out fighting, and push the perimeter back against the Husks. Setup is rewarded over grind (per the automation pillar).
## Aether — the one substance (the magic/tech unifier)
## Tone
There is **no separate "magic system"** — Aether is the single thing that makes magic and tech read as one. It has **two states**, and the whole art palette now literally encodes them at a glance:
Grounded near-future **industrial sci-fi** with an edge of cosmic/biotech corruption. Not cute, not horror — **tense frontier survival with a power-fantasy payoff**. Reference feel: *Helldivers* frontier grit × *Factorio* logistics satisfaction × *V Rising* base-growth loop × *Diablo / PoE* combat readability.
- **Cyan/teal = Aether claimed and ordered** — energy, your abilities, owned structures, the Engine, the crew.
- **Orange-red = Aether gone wild** — the **Blight**, the **Husks**, corrupted nodes.
- **White-hot = the conversion moment** — impacts, channeling flares (where one becomes the other).
## Art north-star
This maps **1:1** onto every built system: your **abilities are charged Aether** (and tiering them is your operator-frame learning to channel more of it); the **Husks are corrupted Aether** animating the colony's own dead; your **turret burns Aether** to put the corruption back down. Resources: **AETHER** (the universal charge — powers/tiers abilities + charges structures), **ORE** (inert Aether-bearing colony alloy you mine to build), **BIOMASS** (Aether bound into living tissue — the Blight-saturated feedstock the colony's bio-fabricators refine; the reserved automation input). The **Blight is Aether without a will to shape it** — that single idea ties the threat to the economy instead of leaving it unexplained ambient menace.
**Dark, readable, high-contrast.** A desaturated industrial world (metal, regolith, dim ambient) so that **bright emissive gameplay elements pop and bloom**:
## The Echo, amnesia & THEM (the spine)
- **Cyan / teal** → the player crew, friendly energy, owned structures.
- **Hostile orange / red** → Husks and Blight corruption.
- **White-hot** → impacts, muzzle flashes, deaths.
You wake amnesiac inside the **Awakening Engine** — the home base, reframed as a cracked, half-charged hibernation/restoration pod — because Aether overexposure scrambled you when the colony fell. The pod now **reassembles you from the Aether you feed it: memory and ability return together as the charge rises** (this is *why* you start feeble and *why* the loop makes you whole — capability and comprehension climb on one curve).
Silhouette-first readability (ARPG legibility from the top-down frame), bloom on emissives, vignette to focus the frame, ACES tonemapping. **Primitives + emissive + post-processing now**; stylized low-poly hard-surface (crew/structures) and corrupted biomech (Husks) later. The palette is the identity even before real models.
A voice speaks in your ear — **the Echo** — and it is, ambiguously, an imprint of *your own future self* in the Aether (which the colony used for communion before it darkened), reaching back along the substance because it has already lived this and believes the only way out is forward. **It is deliberately not fully trusted**: reassuring and pushy by turns, urging you toward **THEM** "by any means." Its motives are held a half-step unresolved — is it saving you, or using your hands? — and that ambiguity is the dramatic engine (locked: *ambiguous*, with room for a payoff beat at the goal).
**THEM keeps three live readings** (locked: *kept open*, arbitrated by a later narrative milestone), all co-op-coherent: THEM = the **Wellspring** (the buried source of the Aether the colony woke — the literal goal: charge the Engine enough to open a stable deep gate to it); THEM = the **lost crew** still under their pods; or THEM = the **Echo itself**, a self that wants to be made whole. Because every charge restores a fragment of memory alongside power, the reveal is *metered by the same charge you spend to grow*.
## The Aether Cycle, in-fiction
The loop ([[DR-013_M6_Aether_Cycle_Region_Split]]) is the Engine's recharge rhythm — **zero mechanical change**, three diegetic beats:
- **Sortie (Expedition):** step through a **Wake-Gate** into the **Blightfield** and harvest Aether/Ore/Biomass from glowing nodes. Drawing that much raw Aether is *loud* — a beacon the Blight senses — so the soft incursion timer is "attention spikes": harvest still thins the local wild concentration, but the longer you channel the more Husks converge, and you return through a **Recall-Gate** before the swarm follows you home.
- **Siege (Defend):** the Husks you provoked mount a wave on the anchor; you and your built turrets (burning Aether to put the corruption down) hold the perimeter.
- **Forge (Build/Charge):** in the lull you spend the one shared ledger at the Engine — placing/tiering colony structures (Ore) and charging your abilities (Aether) from a single economy, with the surviving Aether-machines harvesting/fabricating while you rest.
**Why it repeats + escalates:** the Engine recharges in stages, each completed cycle banks one increment toward THEM (the **"ENGINE CHARGE → THEM"** goal meter), but one cycle's Aether is never enough — the Blight regrows between charges, so the frontier is re-raided, each pass reaching deeper into denser Blight that draws bigger waves. The escalation *is* the Blight waking exactly as you do (mechanically the escalating `WaveSystem`). The two regions are "inside the Engine's Aether-bubble" vs "out in the wild Blight"; the gates are the only seam. It terminates when the meter fills and the Engine opens the deep gate to the Wellspring.
## The enemy — Husks
Corrupted rogue drones/lifeforms driven to swarm the colony. They are the **threat that makes combat *combat*** and gives the base a reason to exist.
Corrupted rogue drones / machinery / fauna — **the colony's own dead, animated by wild Aether** — driven to swarm the charge banked in the base. They are the threat that makes combat *combat* and gives the base a reason to exist.
- **First Husk (this slice):** a melee charger — seeks the nearest operator, closes, strikes. Server-authoritative interpolated ghost.
- **Later:** ranged "spitters", armored "brutes", a "broodmaker" spawner, and eventually a corrupted-fabricator boss. Wave/threat director over time.
- **First Husk (this slice):** a melee charger — seeks the nearest operator, closes, strikes. Server-authoritative interpolated ghost; escalating `WaveSystem` threat director.
- **Later:** ranged "spitters", armored "brutes", a "broodmaker" spawner, and eventually a corrupted-fabricator boss (a colony machine the Blight fully claimed).
## Automation flavor
Colony **fabricators, conveyors, assembler drones, and power** — the self-running production chains of the locked automation pillar, fictionalized as the outpost's industry that keeps growing while the crew fights and expeditions.
Colony **fabricators, conveyors, assembler-drones, and power** — the self-running production chains of the locked automation pillar — are the outpost's **surviving Aether-industry you reboot**. The reserved Harvester / Fabricator / Conveyor structure codes ([[DR-014_M6_Build_Structures_Automation_Foundation]]) are that industry; their fiction comes for free (Aether-powered machines that compound the colony's output while the crew fights and raids).
## Art north-star (kept — now meaningful)
**Dark, readable, high-contrast** (unchanged from [[DR-009_GameFeel_Identity_FirstBlood]] at the pixel level — only *re-labelled* as Aether-state): a desaturated industrial world so bright emissive gameplay elements pop and bloom; ACES tonemapping (URP HDR color grading), vignette, silhouette-first ARPG legibility; the **cyan = ordered / orange-red = wild Blight / white-hot = conversion** palette now *encodes contained-vs-wild Aether*. The Synty colony world (cosmetic SampleScene) + GabrielAguiar VFX are integrated.
**Additive as art lands (none required to adopt this identity):** the **Awakening Engine** as the cyan-cored hero set-piece of the base whose charge visibly brightens with the goal meter (a diegetic readout); an **Aether-veining** motif (cyan capillaries on tamed machines, the *same* veins in angry orange across Husks/corrupted terrain — one visual language for the two states); stronger cyan portal shimmer on the gates; cyan/orange node glow; optional memory-fragment motes that flash a voice line on harvest.
## Audio / UI identity
Industrial synth, weighty impacts, a low hostile drone for Husk proximity. **Additive:** the **Echo** — an intimate, close-mic, slightly Aether-modulated version of the player's *own* voice for guiding lines, loop-transition prompts, and the THEM mystery (each Sleeper has their own Echo in co-op — locked: *per-Sleeper*); a faint Aether **hum** that rises near nodes/the Engine, soured under the Blight (same source, corrupted). UI stays the clean diegetic **colony-terminal** HUD, re-themed as the **Engine's diagnostic panel** (health, ability charge, Husk threat, cycle phase/countdown, location/gate-hint, and the goal bar labelled **"ENGINE CHARGE → THEM"** with a "memory restored %" tie-in). Voice acting + memory-beat writing is **net-new content** — playable with subtitle/text lines first.
## The lexicon
| Thing | Name | Code anchor |
|---|---|---|
| Player role | **Sleeper** (operator-class: *Revenant*) | the player ghost |
| The guiding voice | **the Echo** (your Echo) | client presentation (no sim surface) |
| The goal / "THEM" | **the Wellspring** (the deep gate to THEM) | `GoalProgress``"ENGINE CHARGE → THEM"` |
| The base | **the Awakening Engine** (the *Anchor*) | `BaseAnchor` + the grid + shared ledger |
| Expedition field | **the Blightfield** (the *Wild*) | the Expedition region |
| The gates | **Aether Gates***Wake-Gate* (out) / *Recall-Gate* (back) | `ExpeditionGate` |
| The loop | **the Aether Cycle***Sortie / Siege / Forge* | `CycleState` phases |
## How it maps to the locked pillars (no rework)
| Pillar ([[Pillars]]) | Fictional skin |
|---|---|
| Action-ARPG combat (twin-stick) | Frontier operator gunplay vs. the Husk swarm |
| Co-op base power fantasy (V Rising feel) | The crew's outpost — built, defended, grown together |
| Automation as progression | Colony fabricators/drones/conveyors compounding output |
| Persistent base + instanced expeditions | The safe **outpost anchor** (`BaseAnchor`) vs. the blighted **frontier** beyond |
| Action-ARPG combat (twin-stick) | A Sleeper channelling charged Aether vs. the Husk swarm |
| Co-op base power fantasy (V Rising feel) | A crew of Sleepers reawakening + defending one shared Awakening Engine |
| Automation as progression | The colony's surviving Aether-machines compounding output while you raid |
| Persistent base + instanced expeditions | The Engine's safe Aether-bubble (`BaseAnchor`) vs. the blighted **Wild** beyond |
## Audio / UI identity (direction)
## Locked narrative choices (2026-06-03)
Industrial synth, weighty impacts, a low hostile drone for Husk proximity. UI reads as a **clean diegetic colony-terminal** — functional HUD (health, ability charge, threat count), neon-on-dark.
- **The Echo is ambiguous** — never fully trusted; "by any means"; needs a payoff beat at the goal.
- **THEM stays open** — three live readings (Wellspring / lost crew / the Echo), arbitrated later.
- **Aether-as-corruption is atmospheric only** — no stat penalty for upgrading (honours the skill-expression pillar); a literal corruption/risk meter is a possible *future net-new mechanic*, not part of this identity.
- **Per-Sleeper Echo** in co-op — each player's own future-self.
## Open / deferred (content scope, not mechanics)
- The **narrative payoff** — the goal meter currently fills (`Target=10`) with no authored ending; staged **memory beats tied to charge milestones** + the Echo's voice lines are net-new *content/writing* (playable as subtitles first), tracked for a later narrative milestone — NOT a systems change.
- A literal **corruption/risk meter**, **memory-gated abilities**, or a real **ending payoff** are net-new design for a future milestone if ever pursued.
- The recharging pod stays a **persistent anchor** (death = respawn), never a roguelike run-reset (locked persistent-base pillar / [[DR-013_M6_Aether_Cycle_Region_Split]]).
## Related
- [[Pillars]] — locked mechanical decisions this fiction skins.
- Established in the "First Blood" game-feel slice (2026-06-02) — see the session log + decision record for the presentation/enemy architecture that first expresses this identity.
- [[Pillars]] — the locked mechanical decisions this fiction skins.
- [[DR-009_GameFeel_Identity_FirstBlood]] — the original frontier-colony identity this evolves.
- [[DR-013_M6_Aether_Cycle_Region_Split]] / [[DR-014_M6_Build_Structures_Automation_Foundation]] — the M6 systems this fiction reads onto.
+1 -1
View File
@@ -28,5 +28,5 @@ permalink: gamevault/01-vision/pillars
## Related
- [[Identity]] — the **fiction** that skins these pillars (sci-fi frontier colony), decided 2026-06-02. No mechanical rework; adds setting, tone, art north-star, and the Husk enemy.
- [[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.
- Decision records: `07_Sessions/_Decisions/`
+1 -1
View File
@@ -19,7 +19,7 @@ permalink: gamevault/06-roadmap/milestones
| **M5.5 — Game feel & identity** | Bridge "tech-demo → game": the **Husk** enemy (server AI, interpolated ghost), player death/respawn, combat juice (damage numbers/VFX/SFX/camera shake), a core HUD, and a sci-fi look pass — under the new fiction ([[Identity]], sci-fi frontier colony) | ✅ Done 2026-06-02 — runtime-validated on 6.4.7: Husks spawn(6)+replicate+chase+strike; death→respawn loop; HUD (health/cooldown/threat/downed); emissive dark-sci-fi look. EditMode **74/74**. ctx7-verified APIs. **Deepened same day:** auto-target on Husks, replicated respawn-invulnerability, and a `WaveSystem` threat director (escalating waves of 3 Husk variants — Grunt/Swarmer/Brute) replacing the flat sustain — runtime-validated (wave 1→2 escalation 4→6, distinct maxHP 30/15/80). [[DR-009_GameFeel_Identity_FirstBlood]], [[2026-06-02_GameFeel_Identity]], [[2026-06-02_GameFeel_Deepening]] |
| **— 2026-06-03 Visual & controls polish —** | Non-milestone polish layered on M5.5 (no mechanical rework): HDRP→URP art import + reusable converter; a cohesive **Synty** sci-fi colony world (cosmetic SampleScene GameObjects) + **GabrielAguiar** combat VFX; **KBM mouse-cursor aim + gamepad aim** with last-actuation device auto-switch (rides the existing `PlayerInput.Aim` ghost field). | ✅ Done 2026-06-03 — [[DR-010_Art_Import_URP_Conversion_Visual_Upgrade]], [[DR-011_Synty_World_VFX_Integration]], [[DR-012_Aim_Controls_Cursor_Gamepad]] |
| **— 2026-06-03 Pre-M6 cleanup —** | Loose-ends pass before M6: vault roadmap reconcile, Unity-template + orphaned-material removal, rate-limited turning, console/runtime health gate. | ✅ Done 2026-06-03 — [[2026-06-03_Pre_M6_Cleanup]] |
| **M6 — The Aether Cycle (core loop)** | Reframed from "grid build placement" into the first vertical slice of the **core game loop**: Expedition (gather) → Defend (wave) → Build/Charge (spend), persistent base + procedural sorties, escalating toward a goal. Build placement is now Stage 3 of this milestone. | 🚧 In progress 2026-06-03 — **Stages 02 done + runtime-validated** on 6.4.7: **base/expedition split via coordinate-region + `GhostRelevancy`** (player transit despawns/re-grants the other region's ghosts; server==client); a **server phase-director** (Expedition→Defend→Build→Expedition auto-cycle, cycle 1→2, Husk `WaveSystem` only in Defend, escalation 4→6); and **resources + harvest** — a **global CycleDirector ghost** carrying the replicated `CycleState` + a shared resource **ledger** (relevant in every region, unlike the base storage), a procedural **expedition field** (8 resource-node ghosts seeded per cycle, region-scoped), and a tunnel-safe **harvest** sweep depositing into the ledger; client **HUD** shows phase + resource counts. Supersedes DR-008's "split requires streaming" framing. **Stages 34 (build placement/turret/ability-tiers, persistence/goal) = continuation.** — [[DR-013_M6_Aether_Cycle_Region_Split]], [[2026-06-03_M6_Aether_Cycle_CoreLoop]] |
| **M6 — The Aether Cycle (core loop)** | Reframed from "grid build placement" into the first vertical slice of the **core game loop**: Expedition (gather) → Defend (wave) → Build/Charge (spend), persistent base + procedural sorties, escalating toward a goal. Build placement is now Stage 3 of this milestone. | 🚧 In progress 2026-06-03 — **Stages 04 done + runtime-validated** on 6.4.7 (M6 core loop systems complete): **base/expedition split via coordinate-region + `GhostRelevancy`** (player transit despawns/re-grants the other region's ghosts; server==client); a **server phase-director** (Expedition→Defend→Build→Expedition auto-cycle, cycle 1→2, Husk `WaveSystem` only in Defend, escalation 4→6); and **resources + harvest** — a **global CycleDirector ghost** carrying the replicated `CycleState` + a shared resource **ledger** (relevant in every region, unlike the base storage), a procedural **expedition field** (8 resource-node ghosts seeded per cycle, region-scoped), and a tunnel-safe **harvest** sweep depositing into the ledger; client **HUD** shows phase + resource counts. Supersedes DR-008's "split requires streaming" framing. **Stage 3** (generic automation-ready **structure model** + data-driven catalog + grid **build-placement** RPC with co-op-atomic commit + a hitscan **turret** that auto-defends + **ability tiers** via a bounded StatModifier) and **Stage 4 goal meter** are **done + validated** (turret placed/Ore-deducted/replicated; two same-tick requests → one build; turrets killed the wave; ability damage 20→30 bounded; goal increments per cycle). Disk-persistence **writer deferred to post-M7** (M7-additive surface — tick fields + frozen schema — baked now); the structure model is the M7 production-chain foundation. Playable walk-in-gate loop with build/spend, visible in the HUD. — [[DR-014_M6_Build_Structures_Automation_Foundation]] — [[DR-013_M6_Aether_Cycle_Region_Split]], [[2026-06-03_M6_Aether_Cycle_CoreLoop]] |
| **M7 — Automation** | Self-running tick-based production chains (deterministic offline catch-up) | ⬜ |
Promote items from [[Backlog]] here when committed.
@@ -76,6 +76,33 @@ the return gate comes back to base AND starts Defend early; HUD reads phase/coun
(both gates baked with authoring defaults — the BaseGate worked only by coincidence); fixed with
`manage_components set_property` + verified via the `mcpforunity://scene/gameobject/{id}/component/...` resource.
**Stage 3 + 4 — build/structures (automation-ready) + turret + ability tiers + goal (DONE + validated).**
Adversarially design-reviewed first (3 critics incl. a dedicated M7-automation-readiness lens; caught the co-op
double-spend, the BaseAnchor-occupancy-cache contradiction, the persistence/offline-catch-up entanglement).
Built a GENERIC structure foundation per the operator's automation-forward directive: `PlacedStructure`
([GhostField] Type byte + server-only Cell/NextTick/LastProcessedTick — the tick fields are the M7 offline-
catch-up linchpin, baked now), a data-driven `StructureCatalog` buffer, occupancy DERIVED from live ghosts,
`BuildPlaceRequest` RPC with in-place ledger+occupancy commit (co-op-atomic), a hitscan `Turret` (reversed
`EnemyAISystem` → direct `DamageEvent`), ability tiers via a growing `StatModifier` (replace-by-SourceId), a
`GoalProgress` meter on the CycleDirector ghost, and HUD goal bar. **Validated headless + screenshots:** turret
placed at cell (10,10) (Ore 50→40, replicated); two same-tick requests for one cell → one structure + one
withdraw; built turrets auto-killed all Husks; ability damage 20→25→30 with the buffer bounded to one row;
goal increments per cycle (HUD "GOAL n/10"). **Persistence disk-writer DEFERRED to post-M7** (schema frozen +
tick fields baked so it's additive). Full architecture + the M7 contract: [[DR-014_M6_Build_Structures_Automation_Foundation]].
**Fiction reconciliation — "The Awakening Engine" (DONE).** A judge-panel workflow (3 framings: Aether-as-Blight /
Reawakened-Operator / unreliable-Voice → synthesis) reconciled the magic-tech/amnesia/voice/THEM premise with the
locked frontier-colony identity into ONE coherent, skin-only world (no mechanical rework). Core: **Aether is the
single substance** (cyan = claimed/ordered, orange-red = wild **Blight**, white-hot = conversion) powering every
machine/ability/structure and, uncontained, animating the colony's dead into **Husks** — it maps 1:1 onto the
built economy + loop. The base = the **Awakening Engine** (recharge pod restoring memory+power from deposited
Aether); the voice = **the Echo** (your future-self imprint); the goal = **the Wellspring** ("ENGINE CHARGE →
THEM"); phases re-named **Sortie/Siege/Forge**; field = **the Blightfield**; gates = **Wake-/Recall-Gate**.
Operator locked four forks: Echo **ambiguous**, THEM **kept open** (3 readings), corruption **atmospheric-only**,
**per-Sleeper** Echo. Rewrote [[Identity]], recorded [[DR-015_The_Awakening_Engine_Fiction_Adoption]], updated
[[Pillars]] — resolves the DR-013 fiction-reconciliation open item. Narrative payoff (memory beats + Echo VO,
subtitle-first) is net-new content for a later milestone, not a systems change.
See [[DR-013_M6_Aether_Cycle_Region_Split]] for the full architecture + validated evidence.
## Decisions
@@ -0,0 +1,69 @@
---
id: DR-014
title: M6 Stage 3/4 — generic build/structure foundation (automation-ready) + turret + ability tiers + goal; persistence deferred
status: accepted
date: 2026-06-03
tags:
- decision
- netcode
- building
- automation
- structures
- m6
- m7
permalink: gamevault/07-sessions/decisions/dr-014-m6-build-structures-automation-foundation
---
# DR-014 — M6 Stage 3/4: build/structure foundation (automation-ready) + turret + ability tiers + goal
## Context
M6 Stages 02 + the visibility pass delivered the playable core loop (region split, cycle phases, resources +
harvest, walk-in gates, HUD). Stage 3 is the **"spend" half** — the original M6 "build placement" — plus a
buildable defense (turret) and a resource sink for ability power; Stage 4 is the **goal meter** + (originally)
disk persistence. The operator directive: *"design these next systems with the scope that eventually we are
going to have some basic automation aspects in this"* — so the STRUCTURE model is the foundation the locked
**automation pillar** ([[Pillars]], M7 production chains) builds on, and must extend to
harvesters/fabricators/conveyors/recipes/tick-production/offline-catch-up **without a rework**. The operator
will make game-design decisions *after* the technical foundation is solid.
A 3-critic + synthesis design-review workflow (netcode / determinism / **M7-automation-readiness**) pressure-
tested the design pre-code and caught real issues (the co-op placement double-spend, the BaseAnchor-occupancy-
cache contradiction, the ability-modifier path, the persistence/offline-catch-up entanglement). See
[[2026-06-03_M6_Aether_Cycle_CoreLoop]].
## Decision
1. **Generic structure model (the automation foundation).** `PlacedStructure { [GhostField] byte Type; int2 Cell; uint NextTick; uint LastProcessedTick }` on an ownerless interpolated ghost (`RegionTag{Base}`, world-owned, runtime-spawned). Only **Type** replicates (a cheap byte for client visual branching); **Cell** is server-only (clients derive it from the replicated `LocalTransform` via `BaseGridMath.WorldToCell`). **`NextTick`/`LastProcessedTick`** are server-only raw `NetworkTick` values (`TickUtil.NonZero`-guarded) — the turret reuses `NextTick` as its fire cooldown NOW, and they are the **M7 linchpin**: the next-production-tick + the deterministic offline-catch-up baseline (`produced = floor((now LastProcessedTick)/period)`). These two tick fields are baked now because they are the timing identity that **cannot be reconstructed retroactively**. `StructureType` byte consts `{None=0, Turret=1}` with **Harvester=2/Fabricator=3/Conveyor=4 reserved** (free).
2. **Data-driven catalog.** A baked `StructureCatalog` singleton carrying a `StructureCatalogEntry { byte Type; Entity Prefab; byte CostResourceId; int CostAmount }` buffer (modeled on `AbilityPrefabElement` — prefab via `GetEntity`, never a blob). M7 adds a recipe column to the element additively (baked, not replicated → no format break). Authoring is flat fields for the single turret entry now (the MCP `component_properties` enum/array set is unreliable — see gotcha); the runtime buffer is already the extensible shape.
3. **Occupancy DERIVED, not cached.** `BuildPlaceSystem` (server-only, runs on a placement RPC) scans live `PlacedStructure` ghosts into a Temp `NativeHashSet<int2>` — structures are the source of truth (restart-/replay-order-safe). NOT a mutable buffer on the immutable baked `BaseAnchor`. Pure `BuildPlacementMath.CanPlace(anchor, occupied, cell)` (= `IsCellInPlot` && !occupied), unit-test-ready.
4. **Placement = `BuildPlaceRequest` RPC `{ byte StructureType; int CellX; int CellZ }`** (scalar cells, NOT `int2`, per the scalar-only RPC precedent). `BuildPlaceSystem` validates catalog→legality→occupancy→cost and **commits IN-PLACE** (`StorageMath.Withdraw` on the global ledger + reserve the cell in the set) so two same-tick requests for one cell can't both pass — the `StorageOpReceiveSystem` in-place idiom; only the `Instantiate` goes through the ECB. Plain server `SimulationSystemGroup` (not predicted).
5. **Turret = hitscan (reversed `EnemyAISystem`).** `Turret { float Range; int CooldownTicks; float Damage }`; `TurretFireSystem` snapshots living Husks, picks the nearest in its region within Range, and on a `NextTick` cooldown appends a direct `DamageEvent{Damage, SourceNetworkId=-1}` — reuses `HealthApplyDamageSystem` (already despawns at HP≤0), **no projectile/tunnelling/friendly-fire**. Self-gates (Husks exist only in Defend).
6. **Ability tiers via `StatModifier` (no new replicated component).** `AbilityUpgradeRequest` RPC → `AbilityUpgradeSystem` spends fixed Aether and grows a single `StatModifier{Target=Damage, Op=PercentAdd, SourceId=<sentinel>}` on the player (**replace-by-SourceId** so the `[InternalBufferCapacity(8)]` buffer stays bounded). `StatRecomputeSystem` folds it into `EffectiveAbilityStats.Damage` on both worlds — same path as `UpgradePickup`.
7. **Goal meter shipped; persistence WRITER deferred.** `GoalProgress { [GhostField] int Charge; int Target }` on the global CycleDirector ghost, **single-writer** in `CyclePhaseSystem` (increment per completed cycle); HUD shows a bar. The disk-persistence writer is **deferred to a post-M7 slice** (deepest M7 entanglement; in-session-only state, consistent with DR-008's deferral) — but the M7-additive surface is locked NOW: the tick fields (§1), the data-driven catalog (§2), occupancy-derive (§3), and a **frozen save schema** `{ cycleNumber, savedServerTick, ledger[] absolute, structures[]{type,cell,nextTick,lastProcessedTick, RESERVED io-rows slot}, abilityModifiers[] }` so M7 needs no format version bump.
## Consequences
- **Validated at runtime on 6.4.7 (single in-editor client), headless via `execute_code` + screenshots:**
- **Build:** turret placed at cell (10,10) → world (5.5,1,5.5) (correct snap, baked Scale preserved), Ore 50→40, replicated to the client.
- **Co-op atomicity:** two same-tick `BuildPlaceRequest` for one cell → exactly **one** structure + **one** withdraw (Ore 40→30) — the named double-spend blocker is fixed.
- **Turret defense:** built turrets auto-acquired + **killed all spawned Husks** (hitscan `DamageEvent` → death → despawn); both turrets' `NextTick` cooldowns advanced independently.
- **Ability tiers:** damage 20→25→**30** across two upgrades; the `StatModifier` buffer stayed at **one** row (replace-by-SourceId grew 0.25→0.5); Aether 50→30→10.
- **Goal:** `GoalProgress.Charge` increments per cycle; HUD reads **"GOAL n / 10"** from the replicated value.
- All systems visible in the HUD (phase/countdown/cycle/resources/location/gate-hint/goal/husks/health). Console clean of code/Burst/RPC errors.
- **No new asmdefs.** New code under `…/Building/` (Simulation/Server/Client) + `…/World/GoalProgress.cs`; reuses `EnemyAISystem`/`EnemyAIMath` (turret), `StorageMath`+global ledger (cost), `BaseGridMath` (grid), `StatModifier`/`StatRecomputeSystem` (tiers), the runtime-ghost + duplicate-`UpgradePickup` prefab recipe, the byte-RPC pattern.
- **This is the M7 contract.** Production chains add: a recipe column on `StructureCatalogEntry`; per-structure `StorageEntry` I/O buffers on harvester/fabricator prefabs only; a `StructureProductionSystem` ticking recipes off `NextTick` + computing offline catch-up off `LastProcessedTick`; conveyor adjacency/topology — all **additive** (new `StructureType` codes + components), no migration of the turret ghost or the frozen schema.
## Open / deferred (mostly M7)
- **Disk-persistence writer + `BaseRestoreSystem`** — post-M7 slice. Restore replays structures through a charge-free placement path (extract from `BuildPlaceSystem` then), restores the ledger as an ABSOLUTE set (no re-`Withdraw`), and **rebases ticks** (saved ticks are relative to the old `ServerTick` origin — store as deltas-from-`savedServerTick`).
- **Per-structure I/O buffers, recipe field, `StructureProductionSystem`, conveyor/harvester/fabricator + adjacency graph** — M7 (type-codes reserved; tick fields baked).
- **Ghost-relevancy ceiling** — the unspawned/transiting "sees-everything" fallback in `RegionRelevancySystem` + its O(ghosts×connections)/tick scan become load-bearing at M7 structure counts; redesign deferred (document the N×M ceiling).
- **Client build UX** — currently `B` builds a turret at the local player's cell + an editor static; a mouse-cell-preview build mode (reusing `AimMath`/`AimReticleSystem`) is a polish pass.
- **Visuals** — turret reuses the pickup glow material; per-type structure + per-type resource-node colors are a polish pass (operator's game-design decisions come after the foundation).
## Build gotcha recorded this session
- **`manage_gameobject create` `component_properties` (and `manage_prefabs modify_contents` `component_properties`) SILENTLY DROP enum + Vector3 + nested-array fields** (object-refs + simple scalars apply; baked authoring enums/arrays stay at C# defaults). Set those via a follow-up `manage_components set_property` (with a `properties` dict for scalars / `value` for one) and VERIFY via the `mcpforunity://scene/gameobject/{id}/component/{Type}` resource. For authoring with enum/array config, prefer **flat scalar fields + byte consts in the baker** over inspector enums/arrays. (First hit on the M6 gates; re-confirmed on the structure catalog.)
Builds on [[DR-013_M6_Aether_Cycle_Region_Split]] (the cycle/ledger/CycleDirector + region split this extends), reuses the patterns from [[DR-008_M5_HomeBase_BaseLayer_Storage]] (grid, RPC, runtime ghost) / [[DR-009_GameFeel_Identity_FirstBlood]] (enemy AI, DamageEvent) / [[DR-004_M3_DataDriven_Abilities_Modifiers]] (StatModifier). Serves the automation pillar in [[Pillars]].
@@ -0,0 +1,58 @@
---
id: DR-015
title: The Awakening Engine — fiction reconciliation (Aether unifier + Sleeper/Echo/THEM spine), skin-only
status: accepted
date: 2026-06-03
tags:
- decision
- identity
- narrative
- fiction
- vision
- m6
permalink: gamevault/07-sessions/decisions/dr-015-the-awakening-engine-fiction-adoption
---
# DR-015 — The Awakening Engine: fiction reconciliation (skin-only)
## Context
The M6 design pass introduced a new narrative direction (amnesiac protagonist; a voice in your ear; reach
"THEM by any means"; a magic + sci-fi world of "magic-powered machines"; harvest magical energy to build/charge;
procedural expeditions; periodic base defense; the "Awakening Engine" lean) that sat alongside — and partly in
tension with — the **locked frontier-colony identity** ([[Identity]] / [[DR-009_GameFeel_Identity_FirstBlood]]:
industrial sci-fi outpost, the Blight, Husks, cyan/orange palette, automation). [[DR-013_M6_Aether_Cycle_Region_Split]]
explicitly deferred the **fiction reconciliation** pending operator sign-off. By the time of this decision the
codebase had real fiction-bearing systems built + validated (Aether/Ore/Biomass resources, the Aether Cycle
loop, the base↔expedition region split, walk-in gates, Husk waves, buildable turrets, ability tiers, a goal
meter toward THEM) — so the fiction had to reconcile into **one coherent world that reads onto everything built**
without contradicting the locked **mechanical** pillars ([[Pillars]]).
A judge-panel design workflow generated three reconciliation framings (Aether-as-Blight / Reawakened-Operator /
unreliable-Voice) and synthesised the strongest, honouring the operator's chosen "Awakening Engine" lean. The
operator then locked four narrative forks. See [[2026-06-03_M6_Aether_Cycle_CoreLoop]].
## Decision
**Adopt "The Awakening Engine" as the game's fiction — a pure SKIN-ONLY reconciliation (no mechanical rework; DR-009/013/014 code untouched).** The full identity is in [[Identity]]. The reconciliation rests on five moves:
1. **Aether is the single unifying substance — the only fantastical thing.** Raw magical energy the colony's mundane sci-fi machines were built to burn (abilities, turrets, gates, fabricators, the pod all run on it like electricity). It has **two states the existing palette already encodes**: cyan = Aether claimed/ordered (you, owned structures, the Engine); orange-red = Aether gone wild (the **Blight**, the **Husks**, corrupted nodes); white-hot = the conversion. This maps 1:1 onto the built economy: **Aether** (id 1) charges/tiers abilities + structures, **Ore** (id 2) builds, **Biomass** (id 3) is the automation feedstock. The palette is **re-labelled, not repainted** — no art change to adopt.
2. **The Blight is uncontained Aether overcharge** animating the colony's own dead drones/machinery/fauna into Husks — tying the threat to the resource economy instead of leaving it unexplained.
3. **The base = the Awakening Engine** (a hibernation/restoration pod): deposited Aether restores the Sleeper's memory **and** power together (why you start feeble and the loop makes you whole — capability and comprehension on one curve), powers the colony, and banks goal charge. The single shared ledger is save-state + XP + fuel at once. (`BaseAnchor` ⇒ "the Anchor".)
4. **The spine = a Sleeper, the Echo, and THEM.** You wake amnesiac (Aether-scrambled); the **Echo** is an imprint of your own future self in the Aether, guiding you toward THEM. The Aether Cycle reads as the Engine's recharge rhythm (phases **Sortie / Siege / Forge**); the incursion timer = harvesting is "loud" (a beacon — *local concentration drops, global attention spikes*, so intuition never fights the systems); the regions = the Engine's Aether-bubble vs **the Blightfield**; gates = **Wake-Gate / Recall-Gate**; the goal meter = **"ENGINE CHARGE → THEM"** → the **Wellspring**.
5. **Four narrative forks locked by the operator:** (a) **the Echo is AMBIGUOUS** (never fully trusted; needs a payoff beat at the goal); (b) **THEM stays OPEN** — three live readings (Wellspring / lost crew / the Echo), arbitrated by a later milestone; (c) **Aether-as-corruption is ATMOSPHERIC ONLY** — no stat penalty for upgrading (honours the skill-expression pillar); a literal corruption meter is possible future net-new design, not part of this; (d) **PER-SLEEPER Echo** in co-op (each player's own future-self).
## Consequences
- **Resolves the [[DR-013_M6_Aether_Cycle_Region_Split]] "fiction reconciliation — operator sign-off" open item.** [[Identity]] is rewritten as "The Awakening Engine (Aether-colony sci-fi)"; the frontier colony is recontextualised, not replaced. The lexicon (Sleeper / the Echo / the Wellspring / the Awakening Engine / the Blightfield / Aether Gates / the Aether Cycle's Sortie-Siege-Forge) is the canonical naming, each anchored to a code component.
- **Reads onto every built system with NO code change** (verified in the synthesis coherence pass): resources ⇄ ability-tier StatModifier path + structure costs + reserved M7 automation codes; cycle ⇄ `CyclePhaseSystem`/`CycleState`; regions ⇄ the GhostRelevancy split; gates ⇄ `ExpeditionGate`; goal ⇄ `GoalProgress`; turret ⇄ the hitscan defense; Husks ⇄ `WaveSystem`; base ⇄ `BaseAnchor`/grid/ledger; palette ⇄ the DR-009 emissive look.
- **Violates no locked pillar.** The voice / memory beats / THEM reveal are **client presentation + content**, never the predicted sim (observe-only, like the existing HUD/VFX). The recharging pod stays a **persistent anchor** (death = respawn), not a roguelike reset.
- **What this adoption is NOT:** any *mechanic* the fiction implies — a literal corruption/risk meter, memory-gated abilities, an authored ending payoff — is **net-new design/content for a later milestone**. Adopting the identity is copy + light-asset only. The goal meter currently fills (`Target=10`) with no authored payoff; **staged memory beats + the Echo's voice lines (playable as subtitles first) are the net-new narrative content** tracked for a future milestone.
## Open / deferred
- **Narrative payoff + the Echo's voice/memory-beat content** — a later narrative milestone (writing + light/optional VO; subtitle-first). The three THEM readings are arbitrated then.
- **Art additive (none required now):** the Awakening Engine hero set-piece + charge readout, the cyan/orange Aether-veining motif, gate portal shimmer, node glow, memory-fragment motes, the Echo voice + Aether hum.
- **Pillars.md** [[Identity]] note updated to point at the Awakening-Engine framing.
Evolves [[DR-009_GameFeel_Identity_FirstBlood]] (the frontier-colony identity); skins the locked [[Pillars]]; reads onto [[DR-013_M6_Aether_Cycle_Region_Split]] + [[DR-014_M6_Build_Structures_Automation_Foundation]]. Skin-only — no system in M1M6 changes.