From 6a1bb47758b0f7b699af8d5036ccb637796113bc Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 6 Oct 2026 19:11:46 +0200 Subject: [PATCH] Target and map: the first release is the demo Rewrites the release target for the demo cut (one gate, one region, one boss, a fixed cast of Pirates, Zhestokost, Lucent and AU, called a demo). Adds the map's Demo scope section with body facts D1-D6 and the scope table, and sweeps four stale docs the design review listed. Co-Authored-By: Claude Opus 5.5 --- docs/aetheria-perfect-machine-map.md | 3 +- docs/aetheria-release-map.md | 164 ++++++++++++- docs/aetheria-release-target.md | 330 +++++++++++++-------------- docs/headless-playground-cut.md | 4 +- docs/merge-to-master-checklist.md | 2 +- docs/three-gates-scope.md | 17 +- 6 files changed, 342 insertions(+), 178 deletions(-) diff --git a/docs/aetheria-perfect-machine-map.md b/docs/aetheria-perfect-machine-map.md index b714b1ef0..b3cdd5eea 100644 --- a/docs/aetheria-perfect-machine-map.md +++ b/docs/aetheria-perfect-machine-map.md @@ -5,7 +5,8 @@ Date: 2026-06-12 **Parked (2026-09-11).** This migration was built and then rolled back by commit `7006a6b0`. `F:\Projects\AetheriaEve` preserves that rebuild as a specimen; it is not direction or precedent. Current -direction for this repo is [three-gates-scope.md](three-gates-scope.md). Read +direction for this repo is [aetheria-release-target.md](aetheria-release-target.md) (the +demo), with [three-gates-scope.md](three-gates-scope.md) as the full game's run. Read this document as a record of the deferred plan, not as current direction. The cache move alone is now [cultcache-migration-target.md](cultcache-migration-target.md). diff --git a/docs/aetheria-release-map.md b/docs/aetheria-release-map.md index efbd4a8c2..5be7f94a4 100644 --- a/docs/aetheria-release-map.md +++ b/docs/aetheria-release-map.md @@ -9,7 +9,8 @@ and no ledger: those are typed documents in the Eureka mind. Ends live in `F:\Projects\aetheria-release-inventory.md`, which is outside the repo. Every anchor below is against `origin/master` `f1dee184` and was read in a sparse -scratch worktree on 2026-10-03, unless the line says otherwise. +scratch worktree on 2026-10-03, unless the line or its section says otherwise. The section "Demo scope" holds +the 2026-10-06 re-scope: the release this campaign plans is the demo. ## Body facts @@ -215,6 +216,167 @@ Two claims were not verified from primary sources on 2026-10-03: which Wwise release first supports Unity 6000.x, and the scripting surface of `AudioRandomContainer`. +## Demo scope + +Re-scope of 2026-10-06 (rulings `first-release-is-a-demo`, `demo-cut-fixed-region`, +`demo-cast`, `miss-terris-belongs-to-emily-r3`, `ship-authors-need-no-unity`). The +release this campaign plans is the demo: one gate, one region, one boss, a fixed cast. +The design review that prompted it is `F:\Projects\aetheria-game-design-review-2026-10-05.md`, +outside the repo. Anchors in this section are against `origin/master` `df7c44f2` (the +mining merge), read with `git show` and `git grep` from the Aetheria object store on +2026-10-06. + +### Body facts + +- **D1. A fixed-cast generator already exists: the prelude.** `Galaxy.cs:150-262` builds a + galaxy from named factions: protagonist, antagonist, buffer, quest and neutrals, + resolved by name prefix (`ResolveFaction`, `:141-144`). It places homes so the + antagonist is far from the protagonist and the buffer between them, and sets the + entrance near the protagonist's home. Its settings are + `Assets/Resources/Settings.asset` `TutorialGenerationSettings` (an LFS object, read with + `git lfs smudge`): protagonist `Miss`, antagonist `Zhe`, buffer `Luc`, neutrals `Aero` + and `Finch`, quest `Adras`, 64 zones. `TutorialGalaxy` stages it. The main galaxy + (`Galaxy.cs:96-131`) draws `MegaCount` 12 factions at random from the catalog, places + `BossCount` 3 boss zones, and has 128 zones. A prelude galaxy guarantees a station at + its entrance (`ZoneGenerator.cs:223-224`) and lets generation use any product + (`LoadoutGenerator.cs:184`). +- **D2. Boss zones and the exit exist only in the main galaxy.** `PlaceFactionsMain` + (`Galaxy.cs:265-309`) fills `BossZones` on chokepoints; the main constructor sets + `Exit` to the most isolated zone (`:123`). The prelude sets neither. Both persist + (`SavedGame` keys 3 and 5). +- **D3. Nothing spawns a boss.** `Faction.BossHull` is key 10 + (`Corporations.cs:43-44`) and is unset on all 12 catalog factions. Outside the field + and `Galaxy.BossZones`, `BossHull` is read only by `tools/AetherDb`. `ZoneGenerator` + generates stations, turrets, faction ships and wanderers (`:280-365`) and no boss. +- **D4. Wormholes are built in Unity, and the exit does nothing.** `ZoneRenderer.cs:225-236` + adds one `Wormhole { Position, Target }` per adjacent zone. Interact + (`ActionGameManager.cs:321-327`) enters any wormhole in range; `EnterWormhole` + (`:660`) populates the target zone. Nothing checks `Galaxy.Exit`. +- **D5. Station services are buy-only and credits are not saved.** `TradeMenu` has + `Buy(CraftedItemInstance)` (`:366`) and `Buy(SimpleCommodity, int)` (`:405`) and no + sell. "Repair" appears in no gameplay or UI script (only AetherDb comments). + Credits are `public int Credits = 15000000` on `ActionGameManager` (`:114`); + `SavedGame` (keys 0-12) does not carry them, so Continue resets them. The hull branch + of `Buy` checks `GetPrice` (`:369-370`) and charges `data.Price` (`:378`). Durability + is per instance (`ItemInstance.cs:53`) against the design's (`ItemData.cs:371`), and + falls under fire (`Entity.cs:645-664`). +- **D6. The catalog has no Pirates and the demo cast sells no ship hull.** Decoded from + `git show df7c44f2:GameData/Aetheria.cc | git lfs smudge` with Python `msgpack`, using + the store's own schema table for slot names. Factions (12): Zhestokost, Finch + Cybernetics, Lightsail Express, NiteLife Energy, Death Monkey Explosives, Aeronautics + Unlimited, Lucent Media, Alakrita, Ewan Hart Inc, Rossum & Douglas, Adrasteia, Miss + Terri's. Hulls (5): Longinus and LonginusX (Alakrita, ship), Djinni (Rossum & + Douglas, ship), Zenith (AU, station), Turret (Zhestokost, turret). 64 products; by + maker AU 11, Lightsail 9, NiteLife 9, Lucent 7, Death Monkey 6, Zhestokost 6, + Rossum & Douglas 6, Alakrita 5, Finch 2, Miss Terri's 1, Adrasteia 1, Ewan Hart 1. + +### Why the demo is a prelude galaxy + +D1 is already the demo's shape: named factions in fixed roles, a small galaxy, an +entrance station. The demo needs a different cast from the tutorial (the Pirates as the +ally, not Miss Terri's), a boss zone and an exit. So the demo is a compiled scenario +whose script carries its cast and calls the prelude constructor, then places the gate at +the antagonist's home (`cut-demo-galaxy`). The tutorial's settings and Miss Terri's +prelude role are untouched. A demo mode flag on the galaxy was rejected: the scenario +script is the owner the scenario rulings already name. + +The gate is in the boss zone itself: an exit wormhole there opens when the zone's boss +is dead (`cut-boss-gate`). Locking every wormhole out of a boss zone, as Three Gates +item 2 describes, is the full game's three-section rule; the demo needs one gate and +lets the player retreat. + +### Scope sort + +Every cut spec and follow-up in force under root `aetheria-release` on 2026-10-06, after +this pass's admissions. "Landed" means the spec has a report; it stays in force as a +record. + +| Kind | Id (local) | Scope | Reason | +|---|---|---|---| +| spec | `demo-galaxy` | demo | The demo scenario, its cast and the gate's placement. | +| spec | `boss-gate` | demo | The one boss and the sealed gate; the win. | +| spec | `station-services` | demo | Sell, repair and saved credits: the run pays. | +| spec | `feedback-1` | demo | Every hit seen where it lands (target line 5). | +| spec | `audio-1` | demo | Every action makes a sound (line 4). | +| spec | `faction-play-1` | demo | Doctrine and the flight for the cast; needs r2 (follow-up `faction-play-reanchor-demo`). | +| spec | `faction-play-2` | demo | Lucent's duel is the featured neutral's spectacle; needs r2. | +| spec | `faction-play-3` | demo | Support and anchors; the played proof moves here for the cast; needs r2. | +| spec | `faction-play-4` | full game | The tender loop on real rounds is depth past the demo's proof. | +| spec | `loot-1` | demo | Floating items in the simulation; loot is what the player sells. | +| spec | `loot-2` | demo | Pickup as a capability. | +| spec | `loot-3` | demo | The grab presented in Unity; merges the loot branch. | +| spec | `ballistic-ammo` | demo | Ruled for everyone and unblocked; ammunition is a cargo good in the Pirates' game. Needs a balance pass. | +| spec | `ships-player` | demo | A built player loads package hulls: every demo hull needs it. | +| spec | `ships-addon-frame` | demo | The Blender step from a Tripo mesh to a hull, no Unity. Stale against `ship-data-all-in-cc` if `demo-ship-cc-timing` rules before-hulls. | +| spec | `ships-addon-mounts` | demo | Mount helpers for demo hulls. Same caveat. | +| spec | `ships-hull-material` | demo | One hull shader painted from a mask: the demo's material under `demo-material-scope`'s recommended option. | +| spec | `ships-addon-paint` | demo | The mask authored in Blender for that shader. | +| spec | `ships-hull-livery` | demo | Faction liveries for the cast; its Faction key collides (follow-up `livery-key-collision`). | +| spec | `scenarios-smoke` | demo | Test designs and smoke scenarios: the verification path. | +| spec | `mining-merge-unity` | demo | The Unity half of the merge that landed. | +| spec | `material-graph` | full game | Graph record and judge; not demo-bearing under `demo-material-scope` (recommended). | +| spec | `material-library-export` | full game | Same. | +| spec | `material-lowering` | full game | Same. | +| spec | `hull-bakes` | full game | Same. | +| spec | `ships-studio-schematic` | full game | Authoring comfort in Studio; the demo's few hulls do not need it. | +| spec | `ships-addon-gizmos` | full game | Same. | +| spec | `mining-index-tree` | full game | Sublinear index: wanted, not critical (ruling). | +| spec | `mining-belt-cells` | full game | Same. | +| spec | `ships-merge`, `ships-mounts`, `ships-addon-package`, `ships-bind-path`, `cut-ship-render-fixes` | demo, landed | The package path the demo hulls use. | +| spec | `scenarios-adopt`, `scenarios-menu` | demo, landed | Scenarios: the demo is one. | +| spec | `mining-index`, `mining-target-queries`, `mining-index-pins`, `mining-merge` | demo, landed | Targeting through the index; the belt freeze is gone. | +| follow-up | `pirates-catalog-record` | demo | The ally needs a Faction record and products. | +| follow-up | `zhestokost-boss-hull` | demo | The boss hull and `BossHull`. | +| follow-up | `demo-cast-hulls` | demo | A hull per cast faction. | +| follow-up | `faction-play-reanchor-demo` | demo | Re-anchor faction play, add the Pirates, play the cast. | +| follow-up | `livery-key-collision` | demo | Two specs claim Faction key 16. | +| follow-up | `demo-ux-ledger` | demo | The bar's UX polish pass has no owner. | +| follow-up | `demo-difficulty-onramp` | demo | "Game is hard"; the region needs a ramp. | +| follow-up | `vault-docs-sweep` | demo | Stale vault notes mislead the faction-play revision. | +| follow-up | `controls-facing-and-aim` | demo | Under `demo-controls-rebuild`'s recommended option. | +| follow-up | `release-target-is-a-demo` | demo | This pass; Self closes it with target r3. | +| follow-up | `release-map-not-on-master` | demo | Land this map and the target doc on master. | +| follow-up | `wwise-catalog-fields` | demo | The audio sequel removes the Wwise ids; the boss music field is among them. | +| follow-up | `scenarios-batch4-minors` | demo | Inventory drag and station-reactor quality: UX ledger items. | +| follow-up | `hull-damage-wear` | demo | Damage visible on the hull (line 6). | +| follow-up | `mod-ship-single-existence-gate` | demo | A skipped package throws on spawn; demo hulls are packages. | +| follow-up | `ambiguous-hardpoint-origin` | demo | Save correctness for package hulls. | +| follow-up | `remove-sbsar-files` | demo | Clean break from Substance before a public build. | +| follow-up | `delaunay-exact-predicates` | demo | Galaxy links; a silently unlinked zone could strand a demo run. | +| follow-up | `failed-start-scene-halts` | demo | The New Game failure path the demo's missing-cast refusal uses. | +| follow-up | `stale-docs-after-scenarios-menu` | demo | Docs that describe the old New Game path. | +| follow-up | `scratch-carry-drafts` | demo | The ship `.cc` draft bears on `demo-ship-cc-timing`. | +| follow-up | `faction-lore-notes-r3` | full game | Vault setting notes; no demo cut reads them. | +| follow-up | `mining-impacts-through-contract` | full game | Mining Cut 4 is parked. | +| follow-up | `mining-cuts-4-5-7` | full game | Yield and content; no buyer for ore in the demo. | +| follow-up | `mining-target-pin-gaps` | full game | Low test pin gaps in landed code. | +| follow-up | `belt-render-reads-index` | full game | Belt rendering through the index. | +| follow-up | `c4-ship-element-ids` | full game | Variants campaign. | +| follow-up | `variants-python-raw-push` | full game | Variants campaign. | +| follow-up | `mod-hull-changed-under-run` | full game | Mod edits under a run; demo hulls are first-party. | +| follow-up | `ship-lods` | full game | Only if a profile shows cost. | +| follow-up | `hull-decals` | full game | Insignia and damage decals. | +| follow-up | `hull-player-paint` | full game | Player liveries. | +| follow-up | `blender-pin-operator` | full game | Pins Blender for the material judge. | +| follow-up | `material-mod-graph-kernels` | full game | Mod material kernels. | +| follow-up | `material-map-rescope` | full game | Re-scope of the material map, after `demo-material-scope`. | +| follow-up | `bodies-entity-and-mines` | full game | Bodies for entities and mines. | +| follow-up | `cultmath-mixed-seed` | full game | CultLib hygiene. | +| follow-up | `launcher-ammunition` | full game | Missiles and drones campaign. | +| follow-up | `drones-munitions-substrate` | full game | Same. | +| follow-up | `articulated-mounts` | full game | Links with arc and traverse. | +| follow-up | `colosseum-npc-lab` | full game | Its own campaign. | +| follow-up | `heat-flow-schematic-particles` | full game | Presentation depth past line 6. | +| follow-up | `scenarios-verification-ledger` | full game | Deferred by ruling. | +| follow-up | `authored-missions` | full game | Authored scenes and missions. | +| follow-up | `volumetrics-backport-map` | full game | Visual quality with no demo line. | +| follow-up | `ghostlight-readme-drift` | full game | Ghostlight, narrative. | +| follow-up | `faction-play-reanchor`, `faction-lore-notes` | obsolete | Superseded on 2026-10-06 by `faction-play-reanchor-demo` and `faction-lore-notes-r3`. | + +Counts: demo 52 (31 specs, 11 of them landed, and 21 follow-ups); full game 34 (9 specs, +25 follow-ups); obsolete 2 follow-ups. No in-force spec lost its purpose in both scopes, +so none was withdrawn. + ## Faction play: the NPC scripting The operator ruled on 2026-10-03 that the faction dynamics may elaborate the NPC diff --git a/docs/aetheria-release-target.md b/docs/aetheria-release-target.md index f4acd1f3c..745ac6467 100644 --- a/docs/aetheria-release-target.md +++ b/docs/aetheria-release-target.md @@ -1,212 +1,196 @@ -# Aetheria Release Target +# Aetheria Release Target: the Demo -Date: 2026-10-03 +Date: 2026-10-03, re-scoped 2026-10-06 Status: target. This document owns the ends. The typed `target` in the Eureka mind (campaign `aetheria-release`) owns the labelled invariants and the not-in-scope list; this file gives their reasons. Cut specs, questions and rulings are typed documents in -the mind and are not restated here. Body facts, the model page and the rationale for -the cut order are in `docs/aetheria-release-map.md`. +the mind and are not restated here. Body facts, the model page, the scope sort and the +rationale for the cut order are in `docs/aetheria-release-map.md`. ## Why -The game has enough systems to ship: fire control, stats and power, heat, item -provenance, locomotion, and the mining and scenario lanes in flight. What keeps it -unreleasable is presentation and breadth. It plays no sound at all. A hit on a hull -shows nothing where it lands, and the camera never reacts. Three hulls on two models -and one station are all a player can fly or dock at. +The game has deep systems: fire control, stats and power, heat, item provenance, +locomotion, scenarios and the targeting index. What keeps it unreleasable is that a +player has nothing to do between minute five and minute thirty, and nothing they do +is seen or heard. It plays no sound. A hit on a hull shows nothing where it lands. +Loot cannot be sold, damage cannot be repaired, no boss guards anything, and reaching +the exit does nothing. Every NPC fights the same way. -## Operator direction (2026-10-02 and 2026-10-03) +The first release is a demo, and it is called one. The full game, Terminus with three +procedurally generated regions, needs enough faction variety to give each region its +own challenges and stories. Until that content exists the game is not presented as +complete. -- "we already have plenty of game here, especially once we merge everything in flight - (and maybe another campaign or two geared at making the world feel more alive). The - only thing making it unreleasable to me is the lack of polish, content and feedback. - We need audio, we need ships, stations and gear for the player to covet and collect, - and we need our mechanics to be visible and visceral." -- "If we get the moddable ships pipeline usable and a Tripo3D subscription I can pump - one of these out every day, game ready." The pipeline is GPT Image 2.5, then - Tripo3D, then minor cleanup. -- "I don't think Asura is the way to go for content." -- The announcement bar (2026-10-02): a wider selection of ships and gear, a UX polish - pass, and audio feedback throughout. +## Operator direction -## What "release" means +- 2026-10-06 (ruling `first-release-is-a-demo`): "Full Terminus requires enough + faction variety to present unique challenges and stories across three regions, I + can't call it anything more than a demo if we don't have enough content to + populate the three gates. I'm fine with reducing scope so we can get to a release + on time, but I will not pretend it is the whole game." +- 2026-10-06 (ruling `demo-cut-fixed-region`): the demo is one gate, one region and + one boss with a fixed faction presence. Full Terminus keeps procedural regions, + each with its own political and economic setup. +- 2026-10-06 (ruling `demo-cast`): one allied faction, the protagonist's ostensible + employer under Aetheria's usual polite coercion; one opposing faction, which + decides the boss; the rest neutral. Allied: the Pirates. Antagonist and boss: + Zhestokost. Featured neutrals: Lucent Media for spectacle, Aeronautics Unlimited + as the vanilla that balances the other flavours. +- 2026-10-06 (ruling `miss-terris-belongs-to-emily-r3`): Miss Terri's is Emily's + faction. Its role in the prelude stands. Agents write no lore, explanations, + faction play, doctrine, barks or ship concepts for it, and build on none of the + AI-written material already made for it. +- 2026-10-06 (ruling `ship-authors-need-no-unity`): a person adding a ship works in + Blender and the CultLib tools and never installs Unity or syncs the repo. +- 2026-10-02 and 2026-10-03 (ruling `operator-release-direction`): the release needs + audio, ships, stations and gear to covet and collect, and mechanics that are + visible and visceral. The announcement bar names a wider selection of ships and + gear, a UX polish pass, and audio feedback throughout. -The release is the public announcement to players and Patreon, with a build they -can download. It is done when every line below holds on one build made from -`master`, and the operator has played that build and called it. The operator's call -is part of the definition: a ticked list without it is not a release. +## What "the demo" means -1. **The lanes in flight have landed.** `codex/mining`, `codex/scenarios` and - `codex/moddable-ships` are merged into `master` or explicitly parked by the - operator. A release does not ship around half-merged work. -2. **Every player action that changes the world makes a sound.** That covers weapon - fire and charging, impacts on shield and hull, ship destruction, docking and - undocking, the wormhole, thrusters and the drive, inventory and trade actions, menu - clicks, the overheat alarm, and music in the menu, overworld and combat. The - player can set master, music, effects and interface volume, and the settings +The demo is a public build, announced to players and Patreon, with a scenario named +"Terminus (Demo)". It is done when every line below holds on one Windows build made +from `master`, and the operator has played that build and called it. A ticked list +without the operator's call is not a release. + +1. **One run, start to finish.** New Game starts the demo in a hull made by the + Pirates, at a station near the entrance of one region with a fixed cast: the + Pirates allied, Zhestokost hostile, Lucent and AU neutral. The Zhestokost home + zone holds the region's one gate, guarded by its boss. The gate stays sealed + while the boss lives. Passing it after the boss dies ends the run as won. Death + ends the run as lost. +2. **The run pays.** At a docked station the player can buy, sell what they looted + and repair what they lost. Credits persist across save and Continue. +3. **The four factions fight differently.** Each cast faction has a doctrine a + playtester can describe without being told, from the Faction Play design in + AetheriaLore. +4. **Every player action that changes the world makes a sound.** Weapon fire and + charging, impacts on shield and hull, ship destruction, docking and undocking, + the wormhole and the gate, thrusters and the drive, inventory and trade actions, + menu clicks, the overheat alarm, and music in the menu, overworld, combat and the + boss fight. Master, music, effects and interface volume are player settings that persist. -3. **Every hit is seen where it lands and felt by the one who takes it.** An impact - on a shield shows on the shield at the side it came from. An impact on a hull - shows at the struck point. A hit on the player's own ship moves the camera in - proportion to the damage. The player can turn shake down to zero, and the hit is - still shown. -4. **Damage, heat and exposure are visible before they are fatal.** Lost armour, - a destroyed item and a critical hull each look different on the ship and in the - HUD. Overheat and hull-critical warnings use two channels, sound plus a visual, - and the more urgent one wins. The player can see how visible they are, how close - that is to being detected, and the largest source of it. -5. **There is enough to covet.** The content quota is set by the operator's ruling - on question `release-content-bar`. Every hull and station in the quota is - flyable or dockable and enters through the moddable-ships package path. Rarity +5. **Every hit is seen where it lands and felt by the one who takes it.** An impact + on a shield shows on the shield at the side it came from; an impact on a hull + shows at the struck point; a hit on the player moves the camera in proportion to + the damage. Shake can go to zero and the hit is still shown. +6. **Damage, heat and exposure are visible before they are fatal.** Lost armour, a + destroyed item and a critical hull look different on the ship and in the HUD. + Overheat and hull-critical warnings use sound plus a visual, and the more urgent + one wins. The player can see how visible they are and the largest source of it. +7. **There is enough to covet in the demo.** Each cast faction flies a hull of its + own and Zhestokost's boss flies its boss hull, each entering through the + first-party package path. The exact count is question `demo-content-bar`. Rarity tiers show their colours, and every weapon type sounds and looks distinct. -6. **A new player can play for thirty minutes on the Windows build without hitting - a blocking defect.** The build is published through the build-delivery path. +8. **A new player can play the demo through on the Windows build without hitting a + blocking defect**, published through the build-delivery path. ## Ends - **The simulation states what happened, and presentation shows it.** Fire control, - shields, damage, heat and detection publish typed facts. Visual and audio - presenters subscribe to them, derive a cue from each, and render it. They decide - no rule and recompute no geometry. -- **One cue, two channels.** Each fact becomes a cue in one engine-free function. - The visual and the audio presenter render that same cue, so the two channels - cannot disagree about what happened or how hard. -- **New content is data.** A new hull, station or piece of gear arrives as a catalog - record or a mod package. Nobody hand-wires a prefab array. The operator's daily - ship goes through the image model, Tripo, cleanup and the Blender add-on, and - comes out as a `ShipAuthoring` package with its GLB. -- **The player controls intensity without losing the signal.** Shake, flashes, - particle density and each audio channel have settings. Turning any of them down - never removes the tactical information it carried. + shields, damage, heat, detection, the boss and the gate publish typed facts. + Visual and audio presenters derive a cue from each and render it. They decide no + rule and recompute no geometry. +- **One cue, two channels.** Each fact becomes a cue in one engine-free function; + the visual and the audio presenter render that same cue. +- **The run is a scenario.** The demo is a compiled scenario script beside the + tutorial and main galaxies. Its cast, starting standing and gate are written in + that script; placement stays with the galaxy generator. +- **New content is data, authored without Unity.** A new hull, station or piece of + gear arrives as a catalog record or a first-party package that carries its own + product. Nobody hand-wires a prefab array, and no author needs Unity or the repo. +- **The player controls intensity without losing the signal.** Turning shake, + flashes, particles or any audio channel down never removes the tactical + information it carried. ## Invariants that must survive The typed target carries these as labelled statements. The reasons: - **Legacy first** (operator, 2026-09-11). All work lands in the restored Unity tree. - There is no daemon, CultMesh or Eve re-architecture here. Shared infrastructure - is adopted, not invented. -- **The simulation owns the facts.** Fire control was rebuilt (Cuts 3 to 12.4(b)) so - that no Unity collider or effect decides a hit. Feedback must not reopen that - path. It reads `FireControl`'s facts and never re-derives them. -- **The simulation names no sound.** Today the simulation calls `FireAudioEvent` - with Wwise ids, against a sound bank that is never assigned. Audio becomes a - presenter of the same semantic events that visual effects use (`OnFire`, - `OnStartCharging`, impacts and deaths). -- **State is CultCache.** Player preferences such as shake and volumes go in the - player store (`PlayerSettings`), and authored data goes in the catalog. Engine - asset references are Addressables GUIDs (ruling of 2026-09-17). Presentation - tuning stays on its Unity component (fork M (a) of `docs/settings-globals-cut.md`). -- **Instruments bound what is shown** (`Visual and Sensory Direction`). A cue - never shows the player more than their sensors know. + No daemon, CultMesh or Eve re-architecture here. +- **The simulation owns the facts.** Fire control was rebuilt so that no Unity + collider or effect decides a hit. Feedback reads `FireControl`'s facts and never + re-derives them. The same holds for the run: whether the boss lives and whether + the gate is open are decided in `ServerShared`. +- **The simulation names no sound.** Audio is a presenter of the same semantic + events visual effects use. +- **State is CultCache.** Player preferences go in the player store, authored data in + the catalog, run state (credits included) in the run store. Presentation tuning + stays on its Unity component (fork M (a) of `docs/settings-globals-cut.md`). +- **Instruments bound what is shown.** A cue never shows the player more than their + sensors know. +- **The demo is named a demo.** Release copy, store text, the scenario name and + these docs call it a demo. +- **Miss Terri's is not AI-written.** No agent writes material for it. +- **Ship authors need no Unity.** - **The lanes are respected.** This campaign never commits to a `codex/*` branch or - to the operator's checkout. It branches from `origin/master` and rebases after - each lane merges. + the operator's checkout. - **Rules are tested headless.** Every rule decided in `ServerShared` has a - behavioural test in `tests/Aetheria.Shared.Tests`. A presentation-only behaviour - is an operator check, reachable through ordinary play or a scenario. + behavioural test in `tests/Aetheria.Shared.Tests`. - **The operator judges whether the bar is met.** -## Not in scope +## Not in scope for the demo -- Asura and procedural planet content. The operator ruled it out for content. -- New mechanics. Contact tiers beyond the current threshold, fused tracks, thermal - capture, probes and new weapon classes are not added here. This campaign makes - the existing mechanics visible. -- Faction mechanics beyond what `Faction Play.md` and its rulings name. -- "World feels alive" work such as ambient traffic and events. The operator named - it as a possible separate campaign. -- Build publishing machinery. `docs/build-delivery-target.md` owns it. This - campaign needs it done before release, but does not build it. -- Platforms other than Windows 64-bit, multiplayer, narrative and Ink work. -- Finishing other lanes' cuts: mining, scenarios, moddable-ships S2 and S5, thermal - balance, and the settings-globals tier-colour fix. This campaign depends on them - and does not do them. +- Full Terminus: three regions, procedural regional politics and economy, faction + selection per run, and the full content bar. These come after the demo. +- Factions outside the cast as flags. They stay brands on shelves and generated + traffic where the generator already puts them. +- Mining yield and content (mining Cuts 4, 5 and 7), the sublinear targeting index + (ruling `targeting-sublinear-wanted-not-critical`), and belt rendering through the + index. +- The faction-play tender loop (`faction-play-4`), drones and munitions, the + Colosseum, articulated mounts. +- Narrative: storylets, Ghostlight, Ink beats per boss. +- Volumetrics and the nebula backport. +- Asura and procedural planet content. +- New mechanics beyond what the demo's rulings name. +- Build publishing machinery (`docs/build-delivery-target.md` owns it). +- Platforms other than Windows 64-bit, and multiplayer. + +Open questions decide where four more items fall: the material pipeline +(`demo-material-scope`), the all-in-`.cc` ship move (`demo-ship-cc-timing`), the +control rebuild (`demo-controls-rebuild`) and which modes a release build lists +(`demo-build-scenario-list`). ## Strands -- **Feedback.** Impacts, damage states, warnings and detection, made visible and - felt. The first cut is mapped (`feedback-1`). It gives impacts a world point and a - layer, then shows them on the shield or hull and in the camera. -- **Audio.** The route is open as question `audio-route`. The first cut is mapped - for the recommended route (`audio-1`) and is blocked until the ruling. Its sketched - sequel covers interface, inventory, trade, docking and wormhole sounds, then - music, then continuous loops (thrusters, reactor, drive) and the overheat alarm, - then AquaSynth renders for whatever the 2021 library lacks. -- **Content pipeline.** This strand is a sketch until `codex/moddable-ships` merges. - 1. The Blender add-on gains a collection-to-package action. It places anchors - with `aetheria.id` extras for weapon, radiator and thruster mounts, the collider, - map icon, shield and tractor, then exports the GLB with the `ship.cc`. This is - proof gate 2 of `docs/moddable-ship-authoring.md`. - 2. Moddable-ships S3. The first playable mod ship is a Tripo mesh of a concept - whose image already worked (the Headliner or the Quiet Sense), taken through - the whole path. - 3. Repeatability. A convex collider from the render mesh, and one material-slot - convention that leaves room for a later livery slot. - 4. Throughput. One hull a day from the operator, plus stations, then gear. -- **Faction Play.** The design is `Game Design/Faction Play.md` in AetheriaLore, - at `5c45e27` plus `f3e0e6d`. It covers behaviour, relations, loadouts, resources, - visuals and hooks. On 2026-10-03 the operator accepted every proposal in it, and - the acceptance is recorded as three rulings: - - `faction-relations-field`: relations are their own authored field, not derived - from allegiance; - - `faction-lore-changes`: the five lore changes; - - `lucent-duel-bait`: Lucent's need for glory lets the player bait it into a - duel. - - A fourth ruling, `npc-scripting-may-grow`, lets the strand extend the NPC - scripting through its existing extension points. The note had limited itself to - four agent states and the unread `Personality` field, and that limit is lifted. - Legacy-first still forbids re-architecture. The map's section "Faction play: the - NPC scripting" names what grows: a typed doctrine on `Faction`, and one flight per - faction per zone that alone decides its members' targets and orders, executed by - the existing state graph through two new motor states. - - The strand's first deliverable is the note's smallest proof: Zhestokost, Lucent - and AU in one run, which a playtester can describe without being told. It is four - cuts: - 1. doctrine, the flight, and engagement with grace, hail and compliance - (`faction-play-1`); - 2. pack slots and Lucent's duel, hull break-off and ping cadence - (`faction-play-2`, after `feedback-1`); - 3. support ships, anchor and leash (`faction-play-3`); - 4. Zhestokost ammunition and the rearm loop, ending in the playtest - (`faction-play-4`). - - All four wait for the mining and scenarios lanes to merge. Relations, track - sharing between factions, distress calls and target priority come after the - proof. The feedback and content strands leave room for faction colour and - livery, and decide nothing about them. +- **The run.** Three cuts: `demo-galaxy` (the scenario, its cast, the gate's + placement), `boss-gate` (the boss and the sealed gate, the win), and + `station-services` (sell, repair, saved credits). The on-ramp is follow-up + `demo-difficulty-onramp`, after a played build. +- **Feedback.** `feedback-1`: impacts with a world point and a layer, shown on the + shield or hull and in the camera. +- **Audio.** `audio-1`, native Unity audio (ruling `audio-native-unity-plus-faust`). + Its sequel covers interface, trade, docking, the wormhole and gate, music + (including the boss), loops and the overheat alarm. +- **Faction play.** `faction-play-1` to `-3`, re-anchored on post-merge master and + revised for the demo cast with the Pirates' doctrine (follow-up + `faction-play-reanchor-demo`). The Pirates need a catalog record first (follow-up + `pirates-catalog-record`). +- **Loot.** `loot-1` to `-3`: floating items are simulation state and pickup is a + capability. With `station-services`, loot becomes money. +- **Content.** The package path that landed with moddable-ships, then the add-on's + frame and mounts cuts, then hulls for the cast and the boss (follow-ups + `demo-cast-hulls`, `zhestokost-boss-hull`), authored at the operator's pace. +- **UX polish.** A ledger of small fixes verified through scenarios (follow-up + `demo-ux-ledger`). ## Sequencing -Self proposed feedback, then audio, then content. Feedback goes first because it is -the cheapest per unit of perceived quality and it makes later content read. This -target keeps that order for agent-paced work, with one change: **content is the -calendar-critical path, so its unblocking runs in parallel rather than last.** The -quota is met one hull a day of operator time, and that clock cannot start until a -mesh flies. The steps that start it cost the agents little: - -- the operator's owed S2 play checks on `codex/moddable-ships`; -- the merge; -- the add-on's package action. - -Agent order: `feedback-1`. Then `audio-1`, once `audio-route` is ruled; it consumes -`feedback-1`'s impact cue. Then the content strand's add-on action as soon as -moddable-ships merges. After that, the remaining feedback and audio cuts alternate. +The run goes first, because it is the hole every other strand fills: without it the +demo has no thirty minutes. `demo-galaxy` and `station-services` are independent +and can run in parallel; `boss-gate` follows `demo-galaxy`. Feedback and audio follow +the order already mapped (`feedback-1`, then `audio-1`). Faction play waits for its +re-anchor. Content runs in parallel at the operator's pace, because the hull clock +starts only when the first demo hull flies. ## Lanes and collisions -| Lane | Owner | This campaign | -|---|---|---| -| `codex/fire-control-12` (operator checkout, modified `.blend`) | Codex / operator | Never touched. Reads use `git show` or a scratch worktree. | -| `codex/mining` | Codex | Waits for its merge. `feedback-1` edits `FireControl.Apply`, `ApplyDirectHit` and `Detonate`, which mining does not change (it edits `FireControl.cs:72-100` and `:522-535`). Mining Cut 4 (shots at chunks) should publish impacts through the same contract (follow-up). | -| `codex/scenarios` | Codex, blocked on a fix batch | Waits. Operator checks in this campaign are reachable through ordinary play. Where one is not, it waits for scenarios Cut 4. | -| `codex/moddable-ships` | Codex, S2 owing operator checks | Waits for the merge. Ownership of anchor authoring and S3 after the merge is question `content-lane-owner`. | -| `eureka/aetheria-release-*` | This campaign | One branch per cut, from `origin/master`, each in its own worktree. | - -The hot files are shared with the lanes: `Entity.cs`, `FireControl.cs`, -`ActionGameManager.cs`, `EntityInstance.cs` and `ZoneRenderer.cs`. Each cut keeps -its hunks out of the regions the open lanes change, which are listed per spec. New -behaviour goes in new files wherever an existing owner allows it. +The hot files are `Entity.cs`, `FireControl.cs`, `ActionGameManager.cs`, +`ZoneGenerator.cs`, `ZoneRenderer.cs` and `TradeMenu.cs`. Each cut branches from +`origin/master` in its own worktree and keeps its hunks out of the regions other open +cuts change, which are listed per spec. New behaviour goes in new files wherever an +existing owner allows it. diff --git a/docs/headless-playground-cut.md b/docs/headless-playground-cut.md index b90621050..8e52bdaf1 100644 --- a/docs/headless-playground-cut.md +++ b/docs/headless-playground-cut.md @@ -683,7 +683,9 @@ moves the `BehaviorData` union list down by 10 lines. writes only `LookDirection`) engage only within 60 degrees of their spawn facing. That is fork W. -**Death, loot and pickup** (carried from the earlier draft). +**Death, loot and pickup** (carried from the earlier draft). Loot into the simulation did +not land with this cut; cut `loot-1` of campaign `aetheria-release` owns it now (ruling +`jettison-shared-floating-items`). - `Zone` subscribes to the `Death` of each entity it adds. On death it: - removes the entity and its agent; - drops each non-hull item with probability `LootDropProbability`, and all cargo, diff --git a/docs/merge-to-master-checklist.md b/docs/merge-to-master-checklist.md index 4feec9edb..292ad913c 100644 --- a/docs/merge-to-master-checklist.md +++ b/docs/merge-to-master-checklist.md @@ -38,7 +38,7 @@ Compiled 2026-09-29 by Eyes from the maps on the branch. Pointers are `doc:line` ### 2c. Flight, power and economy -6. **Provenance in play.** Starting-ship items show tier colour; the properties panel shows Manufacturer, product name and flavour for branded gear. Dock and buy: the brand still shows in cargo. `give Lamp` (any design name): no Manufacturer row. Kill an NPC and pick up loot: brand shown (`item-provenance-cut.md:528-539`). Proves: item-provenance Cut C. +6. **Provenance in play.** Tier colour shows only after settings-globals Cut 1 (this expectation was falsified by the 2026-09-17 smoke, section 8); the properties panel shows Manufacturer, product name and flavour for branded gear. Dock and buy: the brand still shows in cargo. `give Lamp` (any design name): no Manufacturer row. Kill an NPC and pick up loot: brand shown (`item-provenance-cut.md:528-539`). Proves: item-provenance Cut C. 7. **Fly a restored hull (Longinus or Djinni).** Thrusters move and turn it (`locomotion-cut.md:501`). Watch the speed cap: `VelocityLimit` is gated by the hull's `Active`, and a hull taken offline with thrusters firing loses the cap (`:377`). It did not happen in 300 s on shipped settings; report if you see runaway speed. Unrecorded: how to spawn a restored hull in play (the map names no path). 8. **Weak reactor (O2).** Fly with a reactor too small for the loadout. Expect visible, legible starvation rather than a cooked reactor (`stats-and-power-cut.md:705-706`). Proves: power bus (map Cut 3). 9. **Brownout and refill (O6, O4).** Brownout reads as degradation, not breakage (`:774`, `:990`). A weapon refilling under brownout stutters instead of firing full rate and cooking the ship (`:729-730`). Proves: power-supply term, brownout, input capacitors. diff --git a/docs/three-gates-scope.md b/docs/three-gates-scope.md index 85912b862..8dda73507 100644 --- a/docs/three-gates-scope.md +++ b/docs/three-gates-scope.md @@ -2,6 +2,20 @@ Date: 2026-09-11 +**Status (2026-10-06).** The first release is a demo: one gate, one region, one boss, +with a fixed faction cast (rulings `first-release-is-a-demo`, `demo-cut-fixed-region` +and `demo-cast` in campaign `aetheria-release`). `docs/aetheria-release-target.md` owns +the release now; this document records the full game's three-gate run, which comes +after the demo. Where the items below stand: + +- Item 1: death deletes the run (`ActionGameManager.Die` calls `RunSave.Clear`). The win + screen is cut `boss-gate`; saved credits are cut `station-services`. +- Item 2: for the demo's one gate, cuts `demo-galaxy` and `boss-gate`. Three sections, + locked boss-zone wormholes and difficulty per section are full game. +- Item 3: cut `station-services` (sell and repair) and cuts `loot-1` to `-3`. +- Item 4: landed (`docs/fire-control-cut.md`). +- Items 5 and 6: not in the demo. + Aetheria ships as a short rogue-lite run on the existing Unity game: start at the Entrance, fight through three boss chokepoints, reach the Exit. Everything the player earns comes from what they destroy. More systems come after this @@ -46,7 +60,8 @@ AI share it, so AI accuracy is no longer superhuman by construction. **Ruling (operator, 2026-09-17):** hit detection goes away entirely. A hit is a dice roll over weapon stats, the stats of a new targeting-system subsystem, and sensor -state. Fire control is being mapped as Cut 2 of `docs/headless-playground-cut.md`. +state. Fire control was mapped from Cut 2 of `docs/headless-playground-cut.md` and has +landed (`docs/fire-control-cut.md`). **Ruling (operator, 2026-09-17):** the player and the AI can aim for a specific subsystem once they have gathered enough target data to reveal it. Operator's words: "We