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 <noreply@anthropic.com>
This commit is contained in:
parent
985e65696c
commit
6a1bb47758
6 changed files with 348 additions and 184 deletions
|
|
@ -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).
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue