859 lines
56 KiB
Markdown
859 lines
56 KiB
Markdown
# Content Batch One: Authoring Spec
|
||
|
||
Date: 2026-09-19
|
||
|
||
Status: spec. This document says exactly what a later pass writes into
|
||
`GameData/Aetheria.cc` through the catalog's own types. It writes no catalog data itself,
|
||
and it decides nothing the operator has not already ruled on — the forks it found are
|
||
listed at the end, unanswered.
|
||
|
||
Source of the batch: `F:\Projects\AetheriaLore\Aetheria\Brainstorming\Corporate Roster and
|
||
Item Wishlist.md`. Quoted flavour is verbatim from that roster or from the source
|
||
spreadsheet it condenses; anything invented here is marked **(new text)**.
|
||
|
||
Every number below was read from the live catalog through `Aetheria.Shared`'s own types
|
||
(a scratch reflective dump over `AetheriaStores.Open`, catalog read-only, run against
|
||
`F:\Projects\Aetheria-stats\GameData\Aetheria.cc` — byte-identical to the main tree's,
|
||
SHA1 `9b10521…`). Where a number has no sibling in the catalog to argue from, it says so.
|
||
|
||
---
|
||
|
||
## 0. The finding that reorders the batch
|
||
|
||
**The batch's stated priority order cannot be authored in that order, because nothing in
|
||
the game can carry a shield or a thruster.**
|
||
|
||
`Entity.ItemFits` (`Assets/Scripts/ServerShared/Entity.cs:658`) refuses any non-`Tool` item
|
||
whose `HardpointType` does not match a hardpoint on the hull. The catalog holds exactly one
|
||
ship hull, LonginusX, and its ten hardpoints are:
|
||
|
||
ControlModule, AetherDrive, Energy ×2, Launcher ×2, Radiator ×2, Reactor, Sensors
|
||
|
||
There is **no `Shield` hardpoint anywhere in the catalog** — not on LonginusX, not on Zenith
|
||
(station), not on Turret. There is no `Thruster` hardpoint either; LonginusX moves on its
|
||
AetherDrive (Traction), and the two shipped thruster designs (`deep space burnout`,
|
||
`Large Drive`) cannot be equipped on any hull in the game. `AetherDb hardpoint-fit` confirms
|
||
both, by omission.
|
||
|
||
So:
|
||
|
||
- A Megiddo shield authored alone is content that cannot be equipped, tested, or seen.
|
||
- Victoire and Prokope authored alone are the same.
|
||
- **The hulls are not item 3. They are item 0.** The Zhestokost and AU hulls are the carrier
|
||
that makes items 1 and 2 reachable, and they must author `Shield` and `Thruster`
|
||
hardpoints or the rest of the batch is shelfware.
|
||
|
||
Three items in the batch are playable on LonginusX today with no hull work, because their
|
||
hardpoints already exist or they are `Tool` items (which `ItemFits` places anywhere in
|
||
interior space): **ChirOptos** (`Sensors`, 1×1 hardpoint exists), **Cottage-pi**
|
||
(`Tool`), **Enigma Device** (`Tool`). Those are the batch's only zero-dependency wins.
|
||
|
||
**Revised order:** hulls → shields + thrusters → sensor, cloak, capacitor (any time) →
|
||
consumables (blocked, see §8).
|
||
|
||
---
|
||
|
||
## 1. Conventions every item in this batch follows
|
||
|
||
Read from the shipped catalog, not invented here.
|
||
|
||
**Stat shape.** `PerformanceStat` is `Min`, `Max`, and a list of `StatTerm { Source,
|
||
Exponent, Role }` (`ItemData.cs:612-684`). `Evaluate` multiplies each term's factor, lerps
|
||
`Min`→`Max` by the product, then applies scale and constant modifiers. A stat with no terms
|
||
resolves to `Max`.
|
||
|
||
**Inverted stats are authored `Min > Max`.** Where lower is better the catalog descends:
|
||
`ReflectorData.CrossSection` 500→150, `SensorData.PingVisibility` 5000→1000,
|
||
`PingCooldown` 20→5, `RadiatorData.EnergyUsage` 3→2. Every stat below follows that.
|
||
|
||
**Power supply multiplies (operator, 2026-09-19).** `StatSource.PowerSupply` applies to the
|
||
resolved value after interpolation, so zero supply is zero output. Two consequences this
|
||
spec obeys:
|
||
|
||
- A `PowerSupply` term belongs **only on an ascending stat where more output is the point**
|
||
(thrust, pumped heat). On a descending stat it inverts: at zero supply the factor is 0, the
|
||
lerp lands on `Min` — the *worse* end — and then the whole thing is multiplied by zero,
|
||
which for a stat like `CrossSection` or `PingVisibility` means "unpowered = perfectly
|
||
stealthed". **No descending stat in this batch carries a `PowerSupply` term.** This is a
|
||
general trap, not a batch detail; §9 F3 raises it.
|
||
- Brownout on a buffered consumer needs no term at all. `InputCapacitor.AddCharge` is already
|
||
scaled by `Item.PowerSupply` (`Shield.cs:127`), so a half grant simply takes twice as long
|
||
to fill. The shields below spend their brownout budget there, not in a stat.
|
||
|
||
**Power-request stats may not read power supply.** `StatValidation.PowerRequestFields`
|
||
(`ItemData.cs:796`) names `ShieldData.Capacity`, `ThrusterData.EnergyUsage`,
|
||
`SensorData.PingEnergy`, `EnergyDrawData.EnergyDraw` and four more. The validator is being
|
||
widened to every stat a `PowerRequest` actually reads, which for a shield means
|
||
`RefillDuration` and `RestoreDuration` too (both feed `RefreshReserve` →
|
||
`InputCapacitor.RequestedFill`). **None of those five shield stats carries a `PowerSupply`
|
||
term below.**
|
||
|
||
**Heat response** is four floats on `EquippableItemData`: `MinimumTemperature`,
|
||
`MaximumTemperature`, `OptimalTemperature`, `PlateauWidth`. `StatValidation.ValidateHeatResponse`
|
||
refuses a zero span, an optimum outside the bounds, a negative plateau, or a plateau that pokes
|
||
past the bounds. Every set below is checked against those four rules inline. Plateau width is the
|
||
operational-lifespan lever: inside it `Performance()` is exactly 1 and `Wear`'s thermal term is
|
||
zero, so a wide plateau is a forgiving item and a narrow one burns itself out. That is the
|
||
single most expressive number a brand has, and this batch uses it hard.
|
||
|
||
**Roles.** A design declares `List<ItemRole>`; a `Quality` term names one.
|
||
`StatValidation.ValidateRoleUsage` refuses a term naming an undeclared role. The vocabulary is
|
||
small and **shared within a kind** (`docs/stats-power-cut7-roles.md`), so this batch reuses
|
||
`injector`/`nozzle` for thrusters, `emitter`/`receiver` for sensors, `plating` for hulls,
|
||
`converter`/`storage cell` for capacitors, and introduces exactly one new vocabulary —
|
||
`emitter`/`reservoir`/`regulator` for shields — shared by both shields in the batch. `Tool`
|
||
designs author roles per design (same doc), so the cloak gets its own two.
|
||
|
||
**Design text is dry; product text carries the voice** (`docs/item-provenance-target.md`).
|
||
Design names are functional nouns in the shipped style (`Large Drive`, `Core Power`,
|
||
`Surface Ore Extractor`). Product names are the brand.
|
||
|
||
**Energy units, for scale.** Reactor `Charge` is per-second generation (`Reactor.cs:60`):
|
||
MoveOnPro 25–125/s, Vulcan 50–200/s, Manhattan 500–1000/s, Notorious 400–1200/s. Capacitor
|
||
`Capacity` (PotaT+-) is 50–150. A `6k Shooter` shot costs `Energy` 5. Radiator `EnergyUsage`
|
||
1–3/s. Shield reserve sizes below are argued against those.
|
||
|
||
**Heat units, for scale.** `6k Shooter` `Heat` 250–500 per shot; `deep space burnout` 4000–12000;
|
||
`Cockpit 2x2` 200; radiator `PumpedHeat` 750–5000.
|
||
|
||
---
|
||
|
||
## 2. Item 0a — Zhestokost heavy hull
|
||
|
||
### Design: `Heavy Combat Hull` (`HullData`)
|
||
|
||
Compared against **LonginusX**, the only ship hull: Mass 2500, Price 7,500,000, Durability 500,
|
||
Shape 6×17 (66 cells), Armor 10, Drag 0.1, Conductivity 32, ThermalResilience 1, heat
|
||
173.15/573.15/275.15/48, `ReflectorData.CrossSection` 500→150 `Durability^1, Quality^2[plating]`.
|
||
|
||
| Field | Value | Why |
|
||
|---|---|---|
|
||
| `Description` | "Heavy combat hull. Thick plating, high mass, a large power and thermal budget, and a radar cross-section it makes no attempt to hide." | Dry. |
|
||
| `HullType` | `Ship` | |
|
||
| `Mass` | 4200 | 1.7× LonginusX. Zhestokost is the mass end of the axis; the only other ship hull defines the light end. |
|
||
| `Price` | 9,500,000 | Above LonginusX (7.5M), below Zenith (10M). |
|
||
| `Durability` | 900 | 1.8× LonginusX, matching mass. |
|
||
| `Shape` | 7×16, ~84 cells | ~27% more interior than LonginusX's 66, which is what pays for the extra hardpoints below. Exact cell mask is a schematic-authoring job, not a number this spec can fix. **Guess** on the mask; the cell *count* is argued. |
|
||
| `Armor` | 28 | LonginusX 10, Zenith 100, Turret 10. 28 is the only interpolation the three shipped values support for "heavy warship, not a station". |
|
||
| `Drag` | 0.16 | LonginusX 0.1; Zenith and Turret are 0. **Guess** — one sibling. |
|
||
| `Conductivity` | 20 | LonginusX 32, Turret 32, Zenith 1. Lower conductivity means heat pools locally: a brutalist hull that cooks its own gear. Deliberate, mild. |
|
||
| `ThermalResilience` | 3 | LonginusX 1, Turret 5, Zenith 15. |
|
||
| Heat four | min 173.15, max 623.15, **optimum 293.15, plateau 100** | Valid: 293.15 ± 50 = 243.15…343.15, inside bounds. The widest plateau on any equippable (LonginusX 48, Turret/Zenith 78). This *is* the Zhestokost brand as a number: the hull takes no thermal wear across a 100K band. Overkill, and finesse is for fools. |
|
||
| `Roles` | `plating` | Shared hull vocabulary. |
|
||
| `Prefab` | **blocked** — see §9 F1 | |
|
||
|
||
`ReflectorData`:
|
||
|
||
| Stat | Min | Max | Terms |
|
||
|---|---|---|---|
|
||
| `CrossSection` | 900 | 600 | `Durability^1`, `Quality^1[plating]` |
|
||
|
||
Descending (lower is stealthier) like LonginusX, but the whole band sits above LonginusX's
|
||
*worst* value of 500, and `Quality^1` (vs LonginusX's `^2`) means even a perfectly built one
|
||
barely improves. A Noka MKI is visible from the next system and no amount of workmanship fixes
|
||
that. Argued directly off LonginusX's 500→150.
|
||
|
||
**Hardpoints.** Sizes are chosen so shipped designs actually fit. `ItemFits` lets a smaller item
|
||
sit inside a larger hardpoint (it checks that every item cell lands on a hardpoint cell), so a
|
||
1×2 item fits a 2×2 hardpoint; the reverse does not.
|
||
|
||
| Type | Shape | Count | Armor | Fits today |
|
||
|---|---|---|---|---|
|
||
| `ControlModule` | 2×2 | 1 | 50 | Cockpit 2x2 |
|
||
| `Reactor` | 3×3 | 1 | 0 | Manhattan, Notorious (9 cells), and all 2×2 reactors |
|
||
| `AetherDrive` | 2×2 | 1 | 10 | Traction |
|
||
| **`Thruster`** | **2×2** | **2** | 15 | deep space burnout, Large Drive, and both new thrusters |
|
||
| **`Shield`** | **2×2** | **2** | 20 | both new shields |
|
||
| `Radiator` | 2×2 | 2 | 10 | every shipped radiator (2-cell and 4-cell) |
|
||
| `Ballistic` | 2×2 | 2 | 25 | every shipped ballistic (2- and 4-cell) |
|
||
| `Launcher` | 1×3 | 1 | 30 | GT 3K, pswarm, scorched void policy |
|
||
| `Sensors` | 1×1 | 1 | 5 | not if i see you first, ChirOptos |
|
||
|
||
Two `Thruster` and two `Shield` hardpoints are the load-bearing part of this whole document.
|
||
|
||
### Product: `Noka MKI`, by Zhestokost
|
||
|
||
`Description` — verbatim from the source spreadsheet, newlines restored:
|
||
|
||
> You asked, we answered. Presenting the Noka MKI, the biggest, baddest, most unstoppable\*
|
||
> hull in the galaxy\*\*. Designed for durability, the Noka MKI sports the thickest hull in the
|
||
> galaxy and n mounts compatible with the highest quality weapons Zhestokost has to offer.
|
||
>
|
||
> \*Regulatory policies require us to state for the benefit of our more pedantic customers that
|
||
> the Noka MKI does, in fact, have a functioning brake system
|
||
>
|
||
> \*\*We are not liable for any injury, bodily or emotional, maiming, unexpected explosive
|
||
> decompression, sudden death, or sinus infections caused by attempts to test the statement.
|
||
|
||
The source says "ColferV" (the sheet's old name for Zhestokost) and leaves the literal `n` in
|
||
"n mounts". Substituting the faction's current name is required; the `n` should stay — it reads
|
||
as a mail-merge failure, which is funnier and truer to the brand than any number. Operator fork
|
||
F6.
|
||
|
||
Role quality:
|
||
|
||
| Role | Mean | Dev | Why |
|
||
|---|---|---|---|
|
||
| `plating` | 0.80 | 0.09 | The one thing Zhestokost is world-class at, on the one role a hull has. Above every shipped mean but Alakrita's branded 0.78 (Arctica fins) and AU's Vulcan core 0.75. The deviation is tight-ish because a slab of steel is hard to get wrong. Note the interaction: excellent workmanship on a design whose `CrossSection` band is 900→600 still yields an enormous signature — which is exactly the brand, a perfectly built bad idea. |
|
||
|
||
---
|
||
|
||
## 3. Item 0b — Aeronautics Unlimited all-rounder hull
|
||
|
||
### Design: `Medium Utility Hull` (`HullData`)
|
||
|
||
| Field | Value | Why |
|
||
|---|---|---|
|
||
| `Description` | "General-purpose hull. Balanced mass and armour, a mixed hardpoint layout, and interior space for tools and cargo." | Dry. |
|
||
| `HullType` | `Ship` | |
|
||
| `Mass` | 1900 | Below LonginusX (2500) — AU is the middle, and LonginusX is an Alakrita racing hull, so "lighter than the racer" is wrong for feel but right for role: this is a smaller ship, not a faster one. |
|
||
| `Price` | 4,200,000 | Well under LonginusX; AU's "resource acquisition" identity is a hull you buy early. |
|
||
| `Durability` | 400 | Slightly under LonginusX's 500. |
|
||
| `Shape` | 5×14, ~56 cells | Smaller than LonginusX's 66 — fewer hardpoints, more of them general-purpose. **Guess** on the mask. |
|
||
| `Armor` | 12 | Just above LonginusX's 10. |
|
||
| `Drag` | 0.12 | **Guess**, one sibling. |
|
||
| `Conductivity` | 30 | Near LonginusX's 32. |
|
||
| `ThermalResilience` | 2 | |
|
||
| Heat four | min 173.15, max 573.15, **optimum 288.15, plateau 60** | Valid: 288.15 ± 30 inside bounds. Wider than LonginusX's 48, far under the Noka's 100. Competent and forgiving; nothing is exceptional. |
|
||
| `Roles` | `plating` | |
|
||
|
||
`ReflectorData`:
|
||
|
||
| Stat | Min | Max | Terms |
|
||
|---|---|---|---|
|
||
| `CrossSection` | 550 | 220 | `Durability^1`, `Quality^2[plating]` |
|
||
|
||
Deliberately close to LonginusX's 500→150 — an unremarkable middle — with the same exponents, so
|
||
the only thing separating an AU hull from an Alakrita one on this axis is the product's
|
||
workmanship. That is the point of an all-rounder.
|
||
|
||
**Hardpoints:**
|
||
|
||
| Type | Shape | Count | Armor |
|
||
|---|---|---|---|
|
||
| `ControlModule` | 2×2 | 1 | 40 |
|
||
| `Reactor` | 2×2 | 1 | 0 |
|
||
| `AetherDrive` | 2×2 | 1 | 10 |
|
||
| **`Thruster`** | **2×2** | **2** | 10 |
|
||
| **`Shield`** | **2×2** | **1** | 15 |
|
||
| `Radiator` | 2×1 | 2 | 10 |
|
||
| `Energy` | 1×2 | 2 | 20 |
|
||
| `Launcher` | 1×3 | 1 | 25 |
|
||
| `Sensors` | 1×1 | 1 | 5 |
|
||
|
||
One shield to the Noka's two; two thrusters each. AU's hull is where a player first meets a
|
||
shield and the Zhestokost hull is where they meet two.
|
||
|
||
### Product: `Jason`, by Aeronautics Unlimited
|
||
|
||
The roster gives AU's voice ("Resource acquisition"; Britain; minimalist) and names the hull and
|
||
its upgrade the Argo, "because this ship is fire", but writes no line for Jason itself.
|
||
|
||
`Description` **(new text)**:
|
||
|
||
> Every expedition needs a ship that comes back. The Jason carries what you find, survives what
|
||
> finds you, and asks for nothing you cannot buy at the next station. Upgrade path available.
|
||
|
||
The last sentence is the Argo hook, left unbuilt.
|
||
|
||
Role quality:
|
||
|
||
| Role | Mean | Dev | Why |
|
||
|---|---|---|---|
|
||
| `plating` | 0.62 | 0.12 | AU's shipped spread sits at 0.58–0.75 mean with 0.10–0.17 deviation across eight products (Earp 0.73/0.68, Vulcan 0.75/0.58, Traction 0.69/0.65, Skiron 0.64, Iapyx 0.61). 0.62 ± 0.12 lands in the middle of their own established band. That consistency *is* the brand: an all-rounder is a company with no peak. |
|
||
|
||
---
|
||
|
||
## 4. Item 1 — Shields
|
||
|
||
New role vocabulary, shared by both designs:
|
||
|
||
- **`emitter`** — the projector that turns stored energy into absorption. Owns `Efficiency`.
|
||
- **`reservoir`** — the reserve pool itself. Owns `Capacity`.
|
||
- **`regulator`** — the charge controller. Owns `EnergyUsage`, `RefillDuration`, `RestoreDuration`.
|
||
|
||
`ShieldData` semantics, from `Shield.cs`: a hit costs `damage × EnergyUsage` from the reserve;
|
||
a hit the reserve cannot cover **breaks** the shield, passes through **in full**, and empties
|
||
the reserve; a broken shield absorbs nothing until the reserve refills over `RestoreDuration`.
|
||
Absorbing adds `damage / Efficiency` heat.
|
||
|
||
### 4a. Design: `Heavy Shield Projector` (`GearData`, `Hardpoint = Shield`)
|
||
|
||
No shield exists to compare against. Every number is argued from the energy and heat scales in
|
||
§1 and from the gear it sits beside on a hull; all of it is first-in-kind and should be read as
|
||
the batch's least anchored content.
|
||
|
||
| Field | Value | Why |
|
||
|---|---|---|
|
||
| `Description` | "Projected barrier. Absorbs incoming damage from a stored energy reserve at a heat cost; a hit larger than the reserve breaks the barrier and passes through undiminished." | Dry, and it states the break rule, because a player who does not know that rule cannot read the item. |
|
||
| `Mass` | 420 | Between a reactor (Manhattan 3×3) and a thruster (150). A 2×2 defensive plant. |
|
||
| `Price` | 3,400,000 | Above every 2×2 gear item shipped (MoveOnPro, ChargeBlast, OK Disperser all ≤ 800k) and well under a hull. Megiddo's boss-faction signature item should be a purchase you plan for. **Weakly argued** — no shield price exists. |
|
||
| `Durability` | 250 | High; LonginusX is 500, most gear 50–100. |
|
||
| `Shape` | 2×2 | Matches the `Shield` hardpoints authored in §2/§3. |
|
||
| `SpecificHeat` | 2 | It absorbs heat by design; giving it thermal mass of its own is the difference between a shield that cooks and one that buffers. |
|
||
| `Conductivity` | 4 | Sheds into the hull grid readily so a radiator can reach it. |
|
||
| `ThermalResilience` | 8 | Radiators sit at 1–15; a shield lives in the same heat regime. |
|
||
| Heat four | min 173.15, max 573.15, **optimum 258.15, plateau 84** | Valid: 258.15 ± 42 = 216.15…300.15, inside bounds. Second-widest plateau in the batch after the Noka hull. Megiddo's brand is *holding*: the barrier does not degrade while the fight lasts. |
|
||
| `Roles` | `emitter`, `reservoir`, `regulator` | |
|
||
|
||
`ShieldData`:
|
||
|
||
| Stat | Min | Max | Terms | Why |
|
||
|---|---|---|---|---|
|
||
| `Efficiency` | 0.05 | 0.20 | `Heat^0.25`, `Durability^0.5`, `Quality^2[emitter]` | Heat per hit is `damage / Efficiency`. A 30-damage shot (a `6k Shooter` maximum) costs 600 heat at the bad end and 150 at the good end — the same order as a weapon's own 250–500 self-heat, so shielding is a real thermal decision rather than free. `Quality^2` makes the emitter the role a buyer pays for. |
|
||
| `EnergyUsage` | 8 | 3 | `Heat^0.25`, `Durability^0.25`, `Quality^1.5[regulator]` | Descending. Reserve cost per damage point. |
|
||
| `Capacity` | 180 | 520 | `Heat^0.125`, `Durability^0.25`, `Quality^2[reservoir]` | **Power request — no `PowerSupply` term.** At the good end, 520 reserve ÷ 3 per damage = 173 damage absorbed before breaking (≈ 6 maximum `6k Shooter` hits). At the bad end, 180 ÷ 8 = 22 damage (one hit, maybe). That spread is the whole reason to care whose shield you bought. Sized against PotaT+-'s 50–150 capacitor: a shield is a bigger buffer than a general capacitor, by roughly 3×. |
|
||
| `RefillDuration` | 12 | 5 | `Heat^0.25`, `Durability^0.25`, `Quality^1.5[regulator]` | Descending. **No `PowerSupply` term** (request-read). Best case 520/5 = 104 power-units/s sustained — a fifth of a Manhattan's 500–1000/s, a ship-defining draw on a MoveOnPro (25–125/s). Shields are why you buy the big reactor. |
|
||
| `RestoreDuration` | 34 | 16 | `Durability^0.25`, `Quality^2[regulator]` | Descending. **No `PowerSupply` term.** 16 s naked at best, 34 s at worst: the punish window the operator asked for. Roughly 3× the refill duration, deliberately — breaking a shield has to be worth aiming for. No `Heat` term: the punish window should not also be a heat-management puzzle. |
|
||
|
||
### 4a Product: `Migdal`, by **Megiddo**
|
||
|
||
Megiddo has **no `Faction` record in the catalog** — see §9 F2. The product cannot be authored
|
||
until one exists.
|
||
|
||
The roster gives Megiddo a concept ("defensive technology", "Space Zionists", Hebrew, choral)
|
||
and no written items at all — its sheet has headers and nothing under them. All flavour is
|
||
therefore **(new text)**:
|
||
|
||
> A wall is not a weapon. It does not need to be clever, or fast, or new. It needs to be there
|
||
> when the sky opens, and it needs to be there afterwards. Ours have been.
|
||
|
||
Role quality:
|
||
|
||
| Role | Mean | Dev | Why |
|
||
|---|---|---|---|
|
||
| `emitter` | 0.88 | 0.04 | The single highest mean and lowest deviation in the catalog. Today's ceiling is 0.78 mean (Arctica's branded fins) and today's floor for deviation is 0.07. Megiddo is a boss faction whose entire existence is one capability; its signature item should sit one clear step above every merely-good product, on both axes. |
|
||
| `reservoir` | 0.82 | 0.05 | Same logic, one notch down: the pool is the second thing they are selling. |
|
||
| `regulator` | 0.74 | 0.06 | Still above almost everything shipped. Megiddo has no weak part — the brand is that there is no corner cut — so the spread between its roles is small and the *deviation* is what sets it apart, not a peak. Choral: everything in tune. |
|
||
|
||
### 4b. Design: `Light Shield Projector` (`GearData`, `Hardpoint = Shield`)
|
||
|
||
The cheaper alternative. Maker: **Finch Cybernetics** — the roster's second-named shield maker,
|
||
a demo faction with influence 5 and zero products, whose written identity is "the highest
|
||
quality and lowest cost\*" with the asterisk reading "when compared to units of higher cost".
|
||
Finch's brand is *variance*, which is a thing `ProductRole.StandardDeviation` can actually say.
|
||
|
||
| Field | Value | Why |
|
||
|---|---|---|
|
||
| `Description` | "Compact projected barrier. Lower reserve and slower recovery than a heavy projector, in a smaller envelope." | Dry. |
|
||
| `Mass` | 160 | |
|
||
| `Price` | 620,000 | ~18% of the heavy projector. "Lowest cost" has to be visible in the price, not only the flavour. |
|
||
| `Durability` | 60 | Ordinary gear durability (most shipped gear is 50–100). |
|
||
| `Shape` | 1×2 | Fits inside the 2×2 `Shield` hardpoints authored in §2/§3, and leaves the rest of the hardpoint free — which is a real, legible tradeoff the fit rule already supports. |
|
||
| `SpecificHeat` | 1 | |
|
||
| `Conductivity` | 2 | |
|
||
| `ThermalResilience` | 2 | |
|
||
| Heat four | min 200, max 440, **optimum 268, plateau 28** | Valid: 268 ± 14 inside bounds. A third of the Megiddo plateau. It holds, then it does not. |
|
||
| `Roles` | `emitter`, `reservoir`, `regulator` | Same vocabulary. |
|
||
|
||
`ShieldData`:
|
||
|
||
| Stat | Min | Max | Terms |
|
||
|---|---|---|---|
|
||
| `Efficiency` | 0.03 | 0.11 | `Heat^0.5`, `Durability^0.5`, `Quality^2[emitter]` |
|
||
| `EnergyUsage` | 11 | 5 | `Heat^0.25`, `Durability^0.25`, `Quality^1.5[regulator]` |
|
||
| `Capacity` | 70 | 210 | `Heat^0.125`, `Durability^0.25`, `Quality^2[reservoir]` |
|
||
| `RefillDuration` | 16 | 8 | `Heat^0.25`, `Durability^0.25`, `Quality^1.5[regulator]` |
|
||
| `RestoreDuration` | 45 | 26 | `Durability^0.25`, `Quality^2[regulator]` |
|
||
|
||
Every band is a worse slice of the heavy projector's, with two deliberate exceptions: the
|
||
`Heat^0.5` on `Efficiency` (it degrades under heat twice as fast — the cheap part is the thermal
|
||
design) and the `RestoreDuration` floor of 26 s, which is *worse than the heavy projector's
|
||
worst case*. A broken Finch shield is a long walk home. Best-case sustained draw is
|
||
210/8 = 26/s, which a MoveOnPro can actually feed — that, not the absorption, is what makes it
|
||
the early-game shield.
|
||
|
||
### 4b Product: `Thorax`, by Finch Cybernetics
|
||
|
||
The roster's Finch voice is the asterisked claim (the Galapagos hull, "of the highest quality
|
||
and lowest cost\*"). **(new text)**, in that register:
|
||
|
||
> The Thorax delivers heavy-projector protection\* at a fraction of the price. Fully compatible
|
||
> with the Finch upgrade path.
|
||
>
|
||
> \*per credit spent
|
||
|
||
Role quality:
|
||
|
||
| Role | Mean | Dev | Why |
|
||
|---|---|---|---|
|
||
| `emitter` | 0.72 | 0.19 | The clever part is genuinely good — Finch are transhumanists, not hacks — but the deviation is above anything shipped (today's maximum is 0.18). You are buying a lottery ticket with good odds. |
|
||
| `reservoir` | 0.44 | 0.21 | The cheap part, and the widest spread in the catalog. The reservoir is where Finch saved the money and where the asterisk lives. |
|
||
| `regulator` | 0.61 | 0.20 | |
|
||
|
||
Reading the two shields side by side: Megiddo's worst role (0.74 ± 0.06) is better and more
|
||
certain than Finch's best (0.72 ± 0.19). That is the price difference made mechanical, and it is
|
||
also the first pair in the catalog where two products of *different* designs in the same kind
|
||
encode opposite manufacturing philosophies rather than an arbitrary seed.
|
||
|
||
---
|
||
|
||
## 5. Item 2 — Thrusters
|
||
|
||
Shared vocabulary from `deep space burnout`: **`nozzle`** (thrust, plume visibility),
|
||
**`injector`** (the fuel/power feed, whose byproduct is heat).
|
||
|
||
Comparables — the only two thruster designs in the catalog:
|
||
|
||
| | Thrust | Visibility | Heat | EnergyUsage | Mass | Price | Dur | Heat four |
|
||
|---|---|---|---|---|---|---|---|---|
|
||
| `deep space burnout` (DME) | 250k→1M `H^.0625 D^.5 Q^2[nozzle] P^1` | 100→400 `H^.25 D^.25 Q^1.5[nozzle]` | 4000→12000 `D^.125 Q^1[injector]` | 0→0, no terms | 150 | 200,000 | 100 | 200/400/251/24 |
|
||
| `Large Drive` (unsold) | 250k flat | 100 flat | 2500 flat | 0→0 | 100 | 100,000 | 100 | 200/400/251/24 |
|
||
|
||
Two things inherited, both noted rather than changed:
|
||
|
||
- **Shipped thrusters request zero power.** `ThrusterData.EnergyUsage` is authored 0→0 with no
|
||
terms on both. Authoring a real value on the new thrusters would make them the only thrusters
|
||
that cost power. Operator fork **F4**; this spec authors 0→0 to match, so the batch changes no
|
||
balance it was not asked to change.
|
||
- **Thruster `Visibility` ascends with quality** (100→400, `Quality^1.5`) — a better-built
|
||
nozzle is *brighter*. Read as "plume brightness tracks output", that is coherent; read as
|
||
"quality makes gear worse", it is a bug. One data point cannot settle it. Operator fork **F5**;
|
||
this spec follows the shipped convention and ascends.
|
||
|
||
### 5a. Design: `High-Output Thruster` (`GearData`, `Hardpoint = Thruster`)
|
||
|
||
| Field | Value | Why |
|
||
|---|---|---|
|
||
| `Description` | "High-thrust drive. Narrow thermal band, low durability, high output. Requires close thermal management." | Dry. |
|
||
| `Mass` | 90 | Below both siblings (150, 100). Alakrita is light and fragile. |
|
||
| `Price` | 900,000 | 4.5× deep space burnout. "Ultra high-end… spare parts are hard to come by." |
|
||
| `Durability` | 35 | Against 100 on both siblings. The lowest durability on any equippable in the catalog. This is the single number that says "failure prone". |
|
||
| `Shape` | 2×2 | Matches both siblings and the new `Thruster` hardpoints. |
|
||
| `SpecificHeat` | 1.5 | Less thermal mass than deep space burnout's 2.5 — it heats fast. |
|
||
| `Conductivity` | 6 | Slightly above 5: dumps into the hull aggressively, which is a liability as much as a feature. |
|
||
| `ThermalResilience` | 2 | Against deep space burnout's 15. |
|
||
| Heat four | min 232, max 362, **optimum 268, plateau 10** | Valid: 268 ± 5 = 263…273, inside bounds. The narrowest plateau and narrowest bounds in the catalog by a wide margin (nearest shipped is `The Bat` at 18, `plight` at 16.2). "The perfect alignment of the whole system makes them failure prone" written as a number: outside a 10K window it is taking wear every second. |
|
||
| `Roles` | `injector`, `nozzle` | |
|
||
|
||
`ThrusterData`:
|
||
|
||
| Stat | Min | Max | Terms | Why |
|
||
|---|---|---|---|---|
|
||
| `Thrust` | 400,000 | 1,500,000 | `Heat^0.25`, `Durability^0.75`, `Quality^2[nozzle]`, `PowerSupply^1` | Top end 1.5× deep space burnout's, floor 1.6× its floor. `Heat^0.25` (vs `^0.0625`) and `Durability^0.75` (vs `^0.5`) are the fragility: it is the fastest thruster while perfect and falls off harder than anything else as it heats and wears. `PowerSupply^1` matches both siblings and is ascending, so the multiplier rule is safe. |
|
||
| `Visibility` | 300 | 900 | `Heat^0.25`, `Durability^0.25`, `Quality^1[nozzle]` | Loudest plume in the game. `Quality^1` rather than `^1.5`: Alakrita is not spending workmanship on the exhaust signature, because their customers do not care. |
|
||
| `Heat` | 6,500 | 19,000 | `Durability^0.125`, `Quality^1[injector]` | Above deep space burnout's 4000→12000 across the band. The injector is the part Alakrita did not fix. |
|
||
| `EnergyUsage` | 0 | 0 | none | Matches shipped thrusters. See F4. |
|
||
|
||
### 5a Product: `Victoire`, by Alakrita
|
||
|
||
`Description`, verbatim roster line plus the tagline:
|
||
|
||
> The most responsive thruster on the market, for the most irresponsible of racing pilots.
|
||
> Speed. Elegance. *Alakrita*.
|
||
|
||
Role quality:
|
||
|
||
| Role | Mean | Dev | Why |
|
||
|---|---|---|---|
|
||
| `nozzle` | 0.91 | 0.06 | Highest single mean in the batch and in the catalog. Alakrita's established pattern is already visible in the one branded row shipped — Arctica's `fins` 0.78 ± 0.07, high on the thing the brand claims. A thruster is Alakrita's *actual* specialisation where a radiator is adjacent, so the peak goes higher and the deviation stays as tight. |
|
||
| `injector` | 0.38 | 0.16 | Below every shipped mean (today's floor is 0.45). The injector decides `Heat`, and heat is what kills the pilot. High on what makes it fast, low on what keeps it alive — stated as the batch's clearest brand contrast with Zhestokost. The wide deviation is the spare-parts problem. |
|
||
|
||
The two together are the design intent made buyable: 0.91 nozzle against a `Quality^2` thrust
|
||
term gives near-maximum thrust, while 0.38 injector against a `Quality^1` heat term leaves the
|
||
heat near the middle of a band that already tops out at 19,000. Fast, and cooking.
|
||
|
||
### 5b. Design: `Light Thruster` (`GearData`, `Hardpoint = Thruster`)
|
||
|
||
| Field | Value | Why |
|
||
|---|---|---|
|
||
| `Description` | "Low-cost drive. Modest thrust across a wide thermal band, with low durability." | Dry. |
|
||
| `Mass` | 70 | Lightest thruster. |
|
||
| `Price` | 140,000 | Between `Large Drive` (100,000, unsold and unbranded) and deep space burnout (200,000). The cheap *branded* option, and a seventh of the Alakrita. |
|
||
| `Durability` | 30 | Lower even than the Alakrita. Finch's cost saving is materials. |
|
||
| `Shape` | 2×2 | |
|
||
| `SpecificHeat` | 1 | |
|
||
| `Conductivity` | 4 | |
|
||
| `ThermalResilience` | 1 | Catalog floor. |
|
||
| Heat four | min 205, max 445, **optimum 262, plateau 46** | Valid: 262 ± 23 inside bounds. Nearly double deep space burnout's plateau of 24 and 4.6× the Alakrita's. Finch's trick is not precision, it is *tolerance*: the cheap thruster is the forgiving one. That inversion is the most interesting thing in this pair. |
|
||
| `Roles` | `injector`, `nozzle` | |
|
||
|
||
`ThrusterData`:
|
||
|
||
| Stat | Min | Max | Terms |
|
||
|---|---|---|---|
|
||
| `Thrust` | 180,000 | 650,000 | `Heat^0.125`, `Durability^0.375`, `Quality^1.5[nozzle]`, `PowerSupply^1` |
|
||
| `Visibility` | 150 | 380 | `Heat^0.25`, `Durability^0.25`, `Quality^1[nozzle]` |
|
||
| `Heat` | 3,200 | 8,500 | `Durability^0.125`, `Quality^1[injector]` |
|
||
| `EnergyUsage` | 0 | 0 | none |
|
||
|
||
Ceiling is 43% of the Alakrita's and 65% of deep space burnout's. Heat is the lowest of any
|
||
thruster. The gentle exponents (`Heat^0.125`, `Durability^0.375`) mean it degrades slowly — a
|
||
cheap part that keeps working, which is the honest half of Finch's claim.
|
||
|
||
### 5b Product: `Prokope`, by Finch Cybernetics
|
||
|
||
`Description`, verbatim:
|
||
|
||
> 67% fatal and 100% fun.
|
||
|
||
Role quality:
|
||
|
||
| Role | Mean | Dev | Why |
|
||
|---|---|---|---|
|
||
| `nozzle` | 0.66 | 0.22 | Middle mean, catalog-widest deviation. Matches the Thorax's Finch signature: the parts are sometimes excellent. |
|
||
| `injector` | 0.35 | 0.24 | The lowest mean and highest deviation in the catalog. The injector decides heat; heat decides whether the 67% figure was marketing. |
|
||
|
||
---
|
||
|
||
## 6. Item 4a — Finch passive sensor
|
||
|
||
`SensorData` carries both the passive half (`Sensitivity`, `SensitivityCurve`) and the active
|
||
ping (`PingBoost`, `PingEnergy`, `PingVisibility`, `PingRange`, `PingCooldown`, `PingDuration`,
|
||
`PingRadiusExponent`) in one behaviour. A *passive* sensor is therefore a `SensorData` with the
|
||
ping stats authored dead — which is a shape the catalog already uses (`Iapyx` and `Skiron`
|
||
author four of five radiator stats flat).
|
||
|
||
### Design: `Passive Sensor Array` (`GearData`, `Hardpoint = Sensors`)
|
||
|
||
Comparables: `The Bat` (Sensitivity 1→2, 2×2, mass 1000, price 7.5M) and `not if i see you
|
||
first` (Sensitivity 0.25→1.5, 1×1, mass 200, price 250k).
|
||
|
||
| Field | Value | Why |
|
||
|---|---|---|
|
||
| `Description` | "Passive sensor array. High sensitivity, no active ping; emits no signature of its own." | Dry, and it names the absence, which is the item. |
|
||
| `Mass` | 240 | Near `not if i see you first` (200); it is a 1×1 part with more receiver in it. |
|
||
| `Price` | 900,000 | 3.6× `not if i see you first`, an eighth of `The Bat`. The best passive sensitivity in the game should not be the cheapest sensor. |
|
||
| `Durability` | 50 | Matches both siblings. |
|
||
| `Shape` | 1×1 | Fits LonginusX's existing `Sensors` hardpoint — the reason this item is playable today. |
|
||
| `SpecificHeat` | 1 | |
|
||
| `Conductivity` | 1 | |
|
||
| `ThermalResilience` | 1 | |
|
||
| Heat four | min 180, max 400, **optimum 236, plateau 44** | Valid: 236 ± 22 inside bounds. Low optimum, wide plateau: a receiver wants to be cold, and Finch built one that tolerates not being. Compare `The Bat`'s 209/18 (cold and fussy) and `not if i see you first`'s 251/24. |
|
||
| `Roles` | `receiver` **only** | The active-ping stats are authored flat with no `Quality` term, so by the Cut 7 rule (a role is pointed at a stat only when it carries `Quality` *and* actually varies) there is no `emitter` role to declare. Declaring one would be authoring fiction. |
|
||
|
||
`SensorData`:
|
||
|
||
| Stat | Min | Max | Terms | Why |
|
||
|---|---|---|---|---|
|
||
| `Sensitivity` | 0.6 | 3.0 | `Heat^0.5`, `Durability^0.4`, `Quality^2[receiver]` | Top end 1.5× `The Bat`'s 2.0 and double `not if i see you first`'s 1.5 — the best passive sensitivity in the game, which is Finch's stated specialisation. `Heat^0.5` is steep: a hot receiver is a deaf receiver, so this sensor pushes the player toward a cool ship. `Quality^2` (vs `The Bat`'s `^1.5`) makes the receiver the role you buy. |
|
||
| `SensitivityCurve` | copy `not if i see you first`'s | | | A `BezierCurve`; no basis to author a new shape and no reason to. |
|
||
| `PingBoost` | 0 | 0 | none | No active ping. |
|
||
| `PingEnergy` | 0 | 0 | none | **Power request — must carry no `PowerSupply` term** (it carries no term at all). A passive sensor drawing zero bus power is the correct reading of the item. |
|
||
| `PingVisibility` | 0 | 0 | none | |
|
||
| `PingRange` | 0 | 0 | none | |
|
||
| `PingCooldown` | 0 | 0 | none | |
|
||
| `PingDuration` | 0 | | | |
|
||
| `PingRadiusExponent` | 0.5 | | | Matches both siblings. |
|
||
|
||
Hands should confirm that `Sensor.Execute` handles an all-zero ping without dividing by
|
||
`PingCooldown` or `PingRange`; if it does not, that is a one-line guard, not a reason to author
|
||
a token ping. Flagged as **F7**.
|
||
|
||
### Product: `ChirOptos`, by Finch Cybernetics
|
||
|
||
`Description`, verbatim fragment from the roster, completed in voice:
|
||
|
||
> ChirOptos, with patented EchoLock — so you always fly under the radar.
|
||
|
||
Role quality:
|
||
|
||
| Role | Mean | Dev | Why |
|
||
|---|---|---|---|
|
||
| `receiver` | 0.86 | 0.11 | The highest non-Megiddo mean in the batch. Passive sensors are Finch's *named* specialisation in the roster, and this is the flagship — it should beat DME's `not if i see you first` receiver (0.75), which is a sensor made by an explosives company. The deviation is tighter than Finch's cheap gear (0.19–0.24 above) but nowhere near Megiddo's 0.04: Finch's QC improves when the product is the one they are known for, and never becomes German. |
|
||
|
||
Finch's three products in this batch are the brand argued three ways: 0.86 ± 0.11 on the thing
|
||
they are for, 0.72 ± 0.19 on a clever budget product, 0.35 ± 0.24 on the part they openly did
|
||
not fund. That is a manufacturer with a personality, which is what the roles cut said nothing in
|
||
the catalog has yet.
|
||
|
||
---
|
||
|
||
## 7. Items 4b and 5 — the cloak and the capacitor
|
||
|
||
### 7a. Adrasteia's Enigma Device — buildable, but not as invisibility
|
||
|
||
**It can be expressed with landed behaviours, and it cannot be a cloak.** The honest version is
|
||
a *signature dampener*, and the spec below is written as one. If the operator wants invisibility,
|
||
that needs a mechanism that does not exist; §9 F8 names it.
|
||
|
||
What exists:
|
||
|
||
- `Entity.Visibility` is `VisibilitySources.Values.Sum()` (`Entity.cs:131`) — a sum of
|
||
non-negative contributions. Nothing subtracts.
|
||
- `VisibilityData` only **adds** a source (`Visibility.cs`). It cannot hide anything.
|
||
- `StatModifierData` with `Type = Multiplier` attaches a scale factor to any named
|
||
`(BehaviorData, PerformanceStat)` on any equipped item, through `StatResolver.ScaleModifier`,
|
||
which multiplies (default 1). It is shipped and in use (MoveOnPro carries one). Targeting
|
||
`ReflectorData.CrossSection` reaches the hull, because `EquippedHull` is in `Entity.Equipment`.
|
||
- The hull's cross-section **is the dominant source**: `CrossSection` is 150–900 across the
|
||
catalog, while the entity's own thermal radiation source is
|
||
`Σ_border pow(T, 3) × 1e-8` — about 11 total for a 40-cell border at 300 K, and still under
|
||
150 at 600 K (`Entity.cs:1090-1111`, `HeatRadiationExponent 3`, `HeatRadiationMultiplier 1e-8`).
|
||
|
||
So multiplying cross-section down by 0.2 removes roughly 80% of a ship's detectability, which is
|
||
a real and significant item. What it cannot do:
|
||
|
||
- It cannot suppress thermal radiation, because that source is computed in `Entity` from global
|
||
settings and is not a `PerformanceStat` — nothing can modify it. A dampened ship running hot
|
||
is still lit up, which is thematically excellent and mechanically a ceiling on the item.
|
||
- It cannot suppress weapon or thruster plume visibility without a **separate**
|
||
`StatModifierData` per target stat (one `StatReference` each). Firing breaks the effect, which
|
||
is the right behaviour and comes free.
|
||
- There is no "cannot be locked" state. Detection is one scalar against
|
||
`TargetDetectionInfoThreshold` (0.1), so this is a lower number, not a different state.
|
||
|
||
#### Design: `Signature Dampener` (`GearData`, `Hardpoint = Tool`)
|
||
|
||
`Tool` items place anywhere in interior space, so this is playable on LonginusX today.
|
||
|
||
| Field | Value | Why |
|
||
|---|---|---|
|
||
| `Description` | "Actively cancels the hull's reflected radar return. Does not conceal thermal emission, weapon discharge, or thruster plume." | Dry, and the second sentence is load-bearing: it tells the player the item's actual boundary. |
|
||
| `Mass` | 180 | |
|
||
| `Price` | 4,800,000 | The most expensive gear item in the batch and above every shipped non-hull design except `The Bat` (7.5M). Adrasteia is expensive and secretive; "harder to obtain than a good reputation" is the roster's own phrasing for their gear. |
|
||
| `Durability` | 40 | "Light and Fragile, High Tech" — the roster's own construction note for every Adrasteia item. |
|
||
| `Shape` | 2×2 | |
|
||
| `SpecificHeat` | 1 | |
|
||
| `Conductivity` | 2 | |
|
||
| `ThermalResilience` | 1 | |
|
||
| Heat four | min 150, max 380, **optimum 214, plateau 30** | Valid: 214 ± 15 inside bounds. The coldest optimum in the batch, one step toward the negent register `docs/stats-and-power-target.md` describes for Adrasteia without being negent gear. |
|
||
| `Roles` | `projector`, `controller` | `Tool` roles are per-design (Cut 7). *projector* — the cancellation emitter, which decides how much return is suppressed. *controller* — the timing electronics, which decide what it costs to run. |
|
||
|
||
Behaviours — three, because `StatModifierData` names one target stat each:
|
||
|
||
1. `StatModifierData` — `Stat = { Target: "ReflectorData", Stat: "CrossSection" }`,
|
||
`Type = Multiplier`, `RequireBehavior` empty,
|
||
`Modifier`: Min **1.0**, Max **0.12**, terms `Heat^0.5`, `Durability^0.5`,
|
||
`Quality^2[projector]`.
|
||
Descending (1.0 = no effect, 0.12 = 88% suppression), so **no `PowerSupply` term** — see §1;
|
||
a power term here would make an unpowered ship perfectly invisible. `Heat^0.5` is steep: run
|
||
hot and the dampener stops working, which couples the two halves of stealth without needing
|
||
a new mechanism.
|
||
2. `EnergyDrawData` — `EnergyDraw`: Min 90, Max 40, terms `Heat^0.25`,
|
||
`Quality^1.5[controller]`; `PerSecond = true`.
|
||
Descending. **Power request — no `PowerSupply` term** (validator would refuse it). 40–90/s
|
||
is a third to most of a MoveOnPro's whole output: staying dark costs you your guns.
|
||
3. `HeatData` — `Heat`: Min 900, Max 400, terms `Durability^0.25`,
|
||
`Quality^1.5[controller]`; `PerSecond = true`.
|
||
Descending. Cancellation is not free, and the heat it makes is what eventually reveals you
|
||
through the one source the item cannot touch. That loop is the item's design.
|
||
|
||
**Weakly argued:** no cloak, dampener or signature item exists to compare against. The
|
||
`EnergyDraw` figure is anchored to reactor output and the `Heat` figure to `Cockpit 2x2`'s 200/s
|
||
and thruster heat; the multiplier band is anchored only to the cross-section range it multiplies.
|
||
|
||
#### Product: `Enigma Device`, by Adrasteia
|
||
|
||
`Description`, verbatim from the source spreadsheet:
|
||
|
||
> A stealth device par excellence. Comes in an unmarked box from an unknown address, with no
|
||
> instructions and no receipt. A small uv glow smiley sticker was added after numerous
|
||
> complaints of customers being unable to find the device once switched on.
|
||
|
||
Role quality:
|
||
|
||
| Role | Mean | Dev | Why |
|
||
|---|---|---|---|
|
||
| `projector` | 0.84 | 0.07 | Expensive and secretive: the thing works, and it works consistently, because Adrasteia's entire market position is that other corporations cannot reproduce it. Second only to Megiddo's emitter. Consistent with their one shipped product, ColdFire's focusing array at 0.68 ± 0.10 — a deliberate step up, because ColdFire is an admitted underperformer ("does less damage than other corp's counterparts") while the Enigma Device is the flagship. |
|
||
| `controller` | 0.69 | 0.16 | No instructions, no receipt: the usability half is where the money did not go. Good, not exceptional, and inconsistent. |
|
||
|
||
### 7b. NiteLife's Cottage-pi capacitor
|
||
|
||
#### Design: `Large Capacitor` (`GearData`, `Hardpoint = Tool`)
|
||
|
||
The only capacitor design is `PotaT+-` (1×1, Tool, mass 75, price 75k, Capacity 50→150,
|
||
Efficiency 0.5→0.99, roles `converter`/`storage cell`). Cottage-pi must be a **separate design**,
|
||
not a second product on PotaT+-: both would be NiteLife, and `census` refuses duplicate
|
||
`(maker, design)` pairs because `Brand()`'s tie-break would then be arbitrary.
|
||
|
||
| Field | Value | Why |
|
||
|---|---|---|
|
||
| `Description` | "High-capacity power buffer. Stores bus surplus for peak draw at a conversion loss." | Dry. |
|
||
| `Mass` | 210 | ~3× PotaT+- for 4× the cells and ~3.5× the capacity. |
|
||
| `Price` | 340,000 | 4.5× PotaT+-. |
|
||
| `Durability` | 60 | Near PotaT+-'s 50. |
|
||
| `Shape` | 2×2 | `Tool`, so it competes with cargo and gear for interior space — which is the cost of carrying one. |
|
||
| `SpecificHeat` | 1.5 | |
|
||
| `Conductivity` | 1 | Matches PotaT+-. |
|
||
| `ThermalResilience` | 3 | Above PotaT+-'s 1. |
|
||
| Heat four | min 200, max 500, **optimum 279, plateau 54** | Valid: 279 ± 27 inside bounds. PotaT+- is 200/500/276.5/36; the same band with a 50% wider plateau. NiteLife's whole pitch is "we keep the lights on" — their flagship buffer should be the one that does not mind the heat. |
|
||
| `Roles` | `converter`, `storage cell` | Shared with PotaT+-. |
|
||
|
||
`CapacitorData`:
|
||
|
||
| Stat | Min | Max | Terms | Why |
|
||
|---|---|---|---|---|
|
||
| `Capacity` | 180 | 520 | `Heat^0.125`, `Durability^0.0625`, `Quality^2[storage cell]` | 3.5× PotaT+- across the band. Same exponents as PotaT+-, deliberately: this is the same technology, larger. Note it lands on the same numbers as the heavy shield's reserve, which is intentional — one Cottage-pi is roughly "a second shield's worth of buffer", a legible unit. |
|
||
| `Efficiency` | 0.55 | 0.97 | `Heat^0.0625`, `Durability^0.25`, `Quality^2[converter]` | Marginally worse ceiling than PotaT+-'s 0.99 and a better floor than its 0.5. Bigger buffers lose a little more at the top; NiteLife's volume product is more consistent than its cheap one. |
|
||
|
||
`Capacitor` is **not** an `IPowerConsumer` — the bus reads `ResolveCapacity()` — so neither stat
|
||
is a power request and neither needs the `PowerSupply` exclusion. Neither takes one anyway:
|
||
`Capacity` ascends but a capacitor that vanishes under brownout would remove the buffer exactly
|
||
when it is needed.
|
||
|
||
#### Product: `Cottage-pi`, by NiteLife Energy
|
||
|
||
The roster writes no line for Cottage-pi itself but fixes its role precisely: the meson
|
||
reservoir that MoveOnPro, "the only muon catalyst fusion reactor on the market", requires, and
|
||
which only NiteLife sells. Tagline: "We keep the lights on, so you can keep on". **(new text)**:
|
||
|
||
> Genuine NiteLife meson reservoir. Accept no substitute — there isn't one. Keeps the lights on,
|
||
> so you can keep on.
|
||
|
||
Role quality:
|
||
|
||
| Role | Mean | Dev | Why |
|
||
|---|---|---|---|
|
||
| `storage cell` | 0.79 | 0.08 | Power storage is NiteLife's stated specialisation and this is their flagship, so it should decisively beat their own PotaT+- storage cell (0.53 ± 0.11). 0.79 sits at the top of the non-boss band (Arctica's branded 0.78) with a tighter deviation than anything NiteLife ships. |
|
||
| `converter` | 0.55 | 0.14 | *Lower* than PotaT+-'s converter (0.67). Deliberate and worth stating: NiteLife's business model is selling the reservoir refill, not the conversion electronics, so the big unit stores beautifully and converts adequately. A second product raising `converter` is the obvious future market segment, which is exactly what the roles cut wants to demonstrate. |
|
||
|
||
---
|
||
|
||
## 8. Item 6 — Miss Terri's consumables: blocked, do not author
|
||
|
||
**Verified: consumables are unreachable in play, and authoring one would produce a crash rather
|
||
than content.**
|
||
|
||
- `ItemManager.CreateInstance(int lot)` (`ItemManager.cs:173`) branches on
|
||
`EquippableItemData` and falls through to `CompoundCommodity` for everything else. There is
|
||
**no `ConsumableItemData` branch.** A lot whose design is a consumable mints a
|
||
`CompoundCommodity` whose `Data` points at a `ConsumableItemData` — wrong instance type, no
|
||
error, no log.
|
||
- `Entity.TryActivateConsumable` (`Entity.cs:437`) then does an **unchecked cast**:
|
||
`var item = (ConsumableItem) bay.ItemsOfType[key].First();`. The instance in cargo is a
|
||
`CompoundCommodity`, so this throws `InvalidCastException` the first time a player uses the
|
||
item. Not a silent no-op: a crash on use.
|
||
- `CreateInstance(FactionProductData)` (`ItemManager.cs:191`) delegates to the same path, so a
|
||
product selling a consumable inherits the gap. The catalog currently holds **zero**
|
||
`ConsumableItemData` records, which is why nothing has hit this.
|
||
- The gap is already known and worked around in tests:
|
||
`tests/Aetheria.Shared.Tests/LoadoutTests.cs:731-735` hand-constructs a `ConsumableItem`
|
||
with a comment saying exactly this.
|
||
|
||
So: **no Miss Terri's content in this batch.** The fix is small (one branch in `CreateInstance`
|
||
returning `new ConsumableItem { Data = l.Design, Lot = lot }`, plus a decision about what
|
||
`Stackable` means for a lot), but it is a code cut and it is not this pass's to make. It should
|
||
be its own cut before any consumable is authored; §9 F9.
|
||
|
||
Worth noting for whoever takes it: `ConsumableItemData` carries **no heat response** (it derives
|
||
from `CraftedItemData`, not `EquippableItemData`), so the thermal four do not apply, and its
|
||
behaviours run through `ConsumableItemEffect` with `Item == null` — which is why `Shield`,
|
||
`Visibility` and others all carry a `ConsumableItemEffect` constructor. A Miss Terri's stat
|
||
booster would be a `StatModifierData` on a `ConsumableItemData` with a `Duration` and an
|
||
`Effectiveness` curve, and `StatSource.ConsumableProgress` exists precisely for it. The content
|
||
is ready to write the moment the mint path is.
|
||
|
||
---
|
||
|
||
## 9. Blockers, mechanism gaps, and operator forks
|
||
|
||
**F1 — Resolved by the 2026-09-26 hull restore.** The following was the authoring baseline when this batch was
|
||
mapped. Both Longinus and Djinni prefabs are now referenced by live hull records in `GameData/Aetheria.cc`.
|
||
`ZoneRenderer.cs:295` instantiates `EngineAssets.Load<GameObject>(hullData.Prefab)` and calls
|
||
`GetComponent<ShipInstance>()`. A hull with no prefab GUID renders nothing and null-refs. The
|
||
project holds exactly two ship prefabs: `Assets/Content/Prefabs/Ships/Longinus.prefab` (used by
|
||
LonginusX, GUID `4a3db6090789ca24cb57c43666754017`) and
|
||
`Assets/Content/Prefabs/Ships/Djinni.prefab` (GUID `79024f635e46f5546b670b58b07fa037`,
|
||
**unused**, carries a `ShipInstance` component and named hardpoint transforms: eight thruster
|
||
mounts, `Fire Point L`, `Barrel R`, `Nostril L`/`R`, a `Hardpoints` group).
|
||
**Fork:** which hull gets the Djinni, and does the other ship without art (invisible in the
|
||
zone) or wait for a model? The Djinni's eight thruster transforms and two nostril mounts read
|
||
closer to the AU utility hull than to a Zhestokost slab, but that is an art judgement.
|
||
|
||
**F2 — Megiddo has no `Faction` record.** The catalog holds twelve factions and Megiddo is not
|
||
one of them (`AetherDb factions`). Authoring the Migdal requires creating it first:
|
||
`Name`, `ShortName`, `Description`, `InfluenceDistance` (boss-scale; Lucent and Zhestokost are
|
||
6, the median is 4), `PrimaryColor`/`SecondaryColor`, `Personality` weights, and a
|
||
**`GeonameFile`** — every shipped faction has one, and `AetherDb factions` reports it as a
|
||
generation-critical link. Megiddo's is Hebrew place-names; the `NameFile` record does not exist
|
||
either. `Logo` is an asset GUID with no asset. `BossHull` is unset on every faction today, so
|
||
leaving it unset is normal. **Fork:** create Megiddo as part of this batch, or give the heavy
|
||
shield to a faction that exists (Zhestokost is the roster's plausible fallback: "no such thing
|
||
as overkill" reads fine on a shield) and hold Megiddo for a proper faction pass.
|
||
|
||
**F3 — `PowerSupply` on a descending stat is a footgun the validator does not catch.** Under
|
||
the 2026-09-19 multiplier ruling, a `PowerSupply` term on a stat authored `Min > Max` means
|
||
zero supply resolves to zero, which for `CrossSection`, `PingVisibility`, `PingCooldown`,
|
||
`EnergyUsage` or `WasteHeat` is the *best possible* value. Nothing refuses it. Worth a
|
||
validation rule ("a `PowerSupply` term on a stat whose `Min > Max` is an authoring error") in
|
||
whichever cut widens the request-independence check. No shipped stat currently trips it —
|
||
checked all 51 designs.
|
||
|
||
**F4 — Shipped thrusters request zero power.** Both `deep space burnout` and `Large Drive`
|
||
author `ThrusterData.EnergyUsage` 0→0 with no terms, so thrust is free and the `PowerSupply^1`
|
||
term on `Thrust` can only ever read a full grant. This spec matches them rather than making the
|
||
two new thrusters uniquely expensive. **Fork:** author real thruster draw across all four in a
|
||
separate balance pass, or leave thrust free.
|
||
|
||
**F5 — Thruster `Visibility` ascends with quality.** `deep space burnout` authors 100→400 with
|
||
`Quality^1.5[nozzle]`: a better-built nozzle is brighter. Coherent if plume brightness tracks
|
||
output; a bug if quality is meant to improve every stat. One data point. This spec follows the
|
||
convention. **Fork:** confirm or invert, catalog-wide.
|
||
|
||
**F6 — The Noka MKI ad copy says "ColferV" and contains a literal `n`.** Substituting
|
||
"Zhestokost" is required; whether to fix "n mounts" is a taste call. Recommendation: keep it.
|
||
|
||
**F7 — An all-zero ping may not be safe.** `Sensor.Execute` should be read before the passive
|
||
sensor is authored, to confirm nothing divides by `PingCooldown` or `PingRange`. A one-line
|
||
guard if it does; not a reason to author a token ping.
|
||
|
||
**F8 — There is no cloaking mechanism, only signature reduction.** Named precisely, what does
|
||
not exist: (a) any way to reduce `Entity`'s own thermal-radiation visibility source, which is
|
||
computed in `Entity.cs:1090-1111` from global settings and is not a `PerformanceStat`; (b) any
|
||
"undetectable" or "cannot be locked" state — detection is one scalar against a threshold; (c)
|
||
any single item-level visibility multiplier, so suppressing several sources needs one
|
||
`StatModifierData` per target stat. §7a's dampener is what the landed behaviours can honestly
|
||
express. **Fork:** ship the dampener as specified, or hold the Enigma Device until a real
|
||
stealth mechanic exists.
|
||
|
||
**F9 — Consumables cannot be minted or used.** §8. Blocks all Miss Terri's content behind a
|
||
small code cut.
|
||
|
||
**F10 — A hull has exactly one role, by construction.** `Armor`, `Drag`, `Mass` and
|
||
`Durability` are plain floats on `HullData`, not `PerformanceStat`s, so the only quality-bearing
|
||
stat a hull owns is `ReflectorData.CrossSection` → `plating`. Every hull product in the game can
|
||
therefore differ in exactly one dimension. If hulls are meant to carry manufacturer identity the
|
||
way gear does, `Armor` and `Drag` need to become stats. Not this batch; named because this batch
|
||
is the first time two hulls exist to compare.
|
||
|
||
---
|
||
|
||
## 10. Products for existing unsold designs
|
||
|
||
Fourteen designs no product sells (`AetherDb census`). Not all are cheap wins: six have **no
|
||
behaviours at all** and two more are authored entirely flat, so a product on them sells an item
|
||
that does nothing.
|
||
|
||
**Author now — four, all with real stats and an already-written voice:**
|
||
|
||
| Design | Kind, shape | Maker | Why | Flavour |
|
||
|---|---|---|---|---|
|
||
| `plight` | Energy, 1×1 | **Lucent Media** | The cheapest win in the catalog: its `Description` is *already* the roster's verbatim TaranisLG lightning-gun copy, naming DragOnBreath as "a subsidary of Lucent Media". The design exists, is fully authored with `focusing array`/`power coupling` roles, and **fits LonginusX's 1×2 `Energy` hardpoints today**. Lucent ships one energy weapon; lasers are their stated specialisation. | Move the existing text to the product as `TaranisLG`; give the design a dry one. |
|
||
| `pswarm` | Launcher, 1×1 | **Aeronautics Unlimited** | Dumbfire swarms are AU's stated specialisation and the roster has the name and line written: *Leonid*, "A rain of pain that falls mainly on space planes." Fully authored with `guidance system`/`thruster`/`warhead` roles, and **fits LonginusX's 1×3 `Launcher` hardpoints today**. Also fixes a content bug: `pswarm`'s current description is DME's `scorched void policy` lyric, copied onto the wrong design. | Roster line, verbatim. |
|
||
| `Core Power` | Reactor, 2×2 | **Rossum & Douglas** | Doubles the reactor choice on the only playable hull: LonginusX's `Reactor` hardpoint currently has two matching designs and one seller. R&D is "Mom's Friendly Robot Company", Germany, muzak — and the design's existing description is "It gets the job done, but that's all." A beige reactor is already written; it just needs the right company's name on it. R&D ships two products. | Product text in the reassuring-corporate register. |
|
||
| `Large Drive` | Thruster, 2×2 | **Lightsail Express** | The roster writes Lightsail a thruster (`True North`) and Lightsail's whole identity is "speed and reliability, is in actual fact neither". `Large Drive` is authored entirely flat — every stat `Min == Max` — which is *perfect* for a product whose joke is that it is unremarkable, and it declares no roles, so no role spread is needed. Becomes equippable the moment §2/§3's hulls land. | "We'll lose our lives before we lose your cargo" is the tagline; the thruster is `True North`. |
|
||
|
||
**Defer — ten.** `Autocannon` and `SRMM72`/`LRMM72` are authored fully flat with no roles, so a
|
||
product adds a name and nothing else, and none of them fits a hardpoint that exists (Turret's
|
||
8-cell `Ballistic` mounts match no design at all). `Tractor Beam`, `Refinery`, `Shipyard`,
|
||
`Assembly Line`, `Surface Ore Extractor`, `Deep Ore Extractor` and `Industrial Thermostatic
|
||
Heater` have `Price = 0`, `Durability = 0` and (bar the heater) **no behaviours whatsoever** —
|
||
they are placeholders, not designs. The tractor beam in particular is named in the wishlist as
|
||
Ewan Hart's "Space Tractor: It's a tractor. In space.", and Ewan Hart has influence and zero
|
||
products, so it is the most tempting of these — but the design carries no behaviour, so selling
|
||
it would put a dead object in a player's hold. It becomes a real cheap win the moment the pickup
|
||
capability (`docs/shield-presentation-contract.md`) gives it something to do.
|
||
|
||
---
|
||
|
||
## 11. What a later pass writes
|
||
|
||
In one commit, through `Aetheria.Shared`'s own types via `CultRecordRefs.Upsert` (so
|
||
`ValidateHeatResponse`, `ValidateStatModifiers`, `ValidateNoPowerSupplyOnRequest` and
|
||
`ValidateRoleUsage` all run — **not** through `CultCache.Commit` directly, which bypasses them):
|
||
|
||
1. `Faction` **Megiddo** + its `NameFile` — or the F2 fallback.
|
||
2. Designs: `Heavy Combat Hull`, `Medium Utility Hull`, `Heavy Shield Projector`,
|
||
`Light Shield Projector`, `High-Output Thruster`, `Light Thruster`, `Passive Sensor Array`,
|
||
`Signature Dampener`, `Large Capacitor`. **Nine.**
|
||
3. Products: `Noka MKI`, `Jason`, `Migdal`, `Thorax`, `Victoire`, `Prokope`, `ChirOptos`,
|
||
`Enigma Device`, `Cottage-pi`, plus `TaranisLG`, `Leonid`, the R&D reactor and `True North`.
|
||
**Thirteen.**
|
||
4. Dry `Description` rewrites on `plight` and `Large Drive` (their current text is product voice
|
||
moving to the product), and a correction to `pswarm`'s wrongly-copied description.
|
||
|
||
Then `AetherDb census` must report: 60 designs, 50 products; **zero** `(product, role)` gaps;
|
||
**zero** duplicate `(maker, design)` pairs; the unsold list down from 14 to 10. And
|
||
`AetherDb hardpoint-fit` must show `Shield` and `Thruster` hardpoints on both new hulls with
|
||
matching sold designs — which is the one check that proves this batch actually reached the game.
|