Soul gate closed at verdict cut-station-services.s4 (head daa9a839). Merged under operator ruling aetheria-release:ruling:completed-cuts-merge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Armour repair is priced at fractional wear (a fraction of a cell on every cell, and a thousandth of one cell), and
gear repair is priced exactly when RepairFraction exceeds SellFraction.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An armour price one credit low survived: ceil absorbs it at the fixture's even hull price. The armour test now runs
the same wear patterns at five hull prices.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A price and durability sweep (1..3000 by 20, three fraction pairs) and the 360 at 7 of 20 case assert repairing then
selling never nets a credit. Armour tests wear several cells, partial and full strip, different cell values, and
check every cell is restored and the cost is the worn share of the hull price. A gear test pins the repair share at
odd and even prices.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Selling floors price * fraction * condition in doubles while repair ceilinged a separate expression, so the two
disagreed by one credit for some prices (GetPrice 360 at durability 7 of 20). SellValue is now the one sell
rounding, and RepairShare charges at least SellValue(whole) - SellValue(worn), so repair-never-profits holds exactly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The column's sort key was the raw design price; it is now the shown price, the sell price while selling. Buy affordability and the credit charge move to StationServices.TryBuy, so a purchase costing exactly the credits held succeeds.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
RepairCost adds the worn share of hull armour priced as that share of the hull's price, and TryRepair restores it. The per-unit-of-wear charge is the larger of RepairFraction and SellFraction. TryBuy checks credits with the same boundary as TryRepair and charges after delivery. A 100-unit ore sale pins the commodity sell scale.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kills the two survivors Stryker left in StationServices.cs: Any() to All() over the station's bays, and Concat() to Except() over the docking bays.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kills the two survivors Stryker left in StationServices.cs: Any() to All() over the station's bays, and Concat() to Except() over the docking bays.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The hardcoded credits initializer and its stale scene serialization go. Buy charges the hull price it checked. Sell is a
mode of the trade list over the selected bay; Repair is a foldout option for the docked ship.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
RunSave.Capture takes the credits; a scenario may set the starting amount, defaulting to the gameplay settings'.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Settings gain SellFraction, RepairFraction and StartingCredits. A sale pays the price scaled by condition and moves the
item into a station bay or refuses with everything unchanged; a repair restores every durability and charges the wear,
or refuses when short.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Records the targeting index and Entity's press queries as built: their owners, inputs, outputs, forbidden writers, verification layer, and live seams. Marks L3 and L5 as historical.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mining Cuts 1-3, the general targeting index (ships and belts), and next/previous/reticle as index queries on Entity, with master merged in and the catalog's field kinds rebuilt. Soul held mining-index-pins, mining-target-queries (two passes) and mining-merge; the Unity compile and both ships smokes pass. Mining yield (Cuts 4, 5, 7) is not in this merge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GameData/Aetheria.cc 70a7b0a9 -> 78fe2afe (12703072 bytes): one FieldKindData
record, Asteroid, cross-section 5, weight 1. Run on Yggdrasil from the merge
commit's tree, output pulled back byte-identical. Fixes
TheShippedCatalogHasAPickableFieldKind and makes master's strict Exact weapon
assertion hold on the rewritten catalog.
Builds: both commits build; the previous commit fails one test by design, this one passes 837/837.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mining owns belts, chunks and target picking; scenarios owns admission and run
staging; master owns ships and fire control (rule scenarios-cut.md S4).
- AetheriaStores.CatalogTypes: nine-type union, master's list plus FieldKindData, no Scenario.
- tools/AetherDb/Program.cs: both cases (ship-authoring, field-kinds), one usage string.
- Zone.cs: master's MineAsteroid dropped (mining deleted its inputs); scenarios' SettleBelts and its three calls deleted.
- RunStartTests: the two belt-task tests deleted (they read belt.Transforms and MineAsteroid).
- FireControlCut124Tests: master's strict Exact assertions; mining's CompatibleDrift allowance and its comment dropped.
- GameData/Aetheria.cc: master's pointer 70a7b0a9. This commit lacks the Asteroid field kind in the catalog, so
TheShippedCatalogHasAPickableFieldKind fails here by design; the next commit rebuilds it.
Builds: this commit builds (verified at the end with commit 2); the catalog pin test fails at this commit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A second density-equal belt size and reach, held-target presses and the reticle at three headings,
each ceiling within about 10% of the measured count; the shared ceiling drops from 1500 to 700.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pins two Stryker survivors: Entity.Order's field comparison and DistanceKey.Bound's forward bound.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The four handlers in ActionGameManager call Entity.TargetUnderReticle, TargetNext,
TargetPrevious and TargetNearestEnemy. TargetCandidates, which built, sorted and
searched every visible ship and rock per press, is gone. Previous with no target
takes the farthest.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tutorial Galaxy and Main Galaxy are scenarios; six test arenas show in editor and
development builds. RunStart owns new-run staging; Zone.Admit stays the one admission.
Galaxy zone linking moves to a double-precision Delaunay (the vendored float hull
dropped zones; ~2% of galaxies threw). A fixed seed fixes every fit; a failed start
keeps the saved run and says why. Soul s1 and s2 held (cut-scenarios-menu.h1, h2).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Launch cleared the run store before generating, and a generation or staging failure only reached the log: the
Generating Galaxy dialog stayed up, StartGame threw, and the saved run was already gone.
RunSave.Replace runs a start with the saved run still stored: when it returns a staged run the saved run's records go,
and when it returns null or throws, only the records it wrote (the arena's orbits and bodies) go. StartGame's
new-run branch is StartScenario, chosen by PendingScenario rather than by the absence of a SavedGame; it mints into an
empty ledger, and a failed start clears CurrentGalaxy (so quitting saves nothing) and refuses on the main menu with
every failure. Launch no longer clears; a galaxy that throws is refused on the title menu. The menu offers Continue
whenever no run is live, which replaces MainMenu.InGame (cut, with its prefab value and scene override), so a
failed start can resume the saved run in place.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ScenarioStage.Generated picked from ItemManager.Random, which is clock-seeded per process and advances in play, so a
relaunch of Djinni Shakedown or Long Haul in one session gave the player a different fit; every branded lot's
workmanship and role fills came from the same clock stream, so arena gear and explicit fits varied in quality too.
Galaxy now keeps the seed it was generated at, and RunStart.GenerateArena and Stage each reseed the item manager's
random from it, one stream per step, so what runs between them cannot shift either.
SeedRules relaunches every fixed-seed scenario around a clock-free Main Galaxy launch and a scrambled item random,
and compares the galaxy (links, factions, homes, exit too), the arena down to each item's maker and workmanship, and
the staged fits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>