Commit graph Aetheria/GameData
Author SHA1 Message Date
Meta Vens
7204259ac3 Fix a mutation accidentally captured in the previous commit
f4d5659d landed with StatValidation's OptimalTemperature-bounds check replaced by
`if (false)`: the mutation harness was running concurrently against this same file
and a `git add`/`git commit` caught it mid-mutation. Restores the real check. Caught
because the harness's own "not yet reached" scars in doctrine are what prompted a
by-hand recheck of the just-committed diff rather than trusting the terminal output
that said 80/80 green a moment earlier.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 18:45:10 +02:00
Meta Vens
38aec5ddf9 Cut 1: rewrite the catalog to terms and authored R-heat
Migrated by a two-phase scratch console (neither kept): phase A dumps the
four retired exponent fields plus a curve fit (peak, optimum, near-peak
band) from the pre-Cut-1 code; phase B applies them as declared StatTerms
and authored OptimalTemperature/PlateauWidth under the new schema, in one
Commit, refusing to write anything if a single record fails to resolve.

348/348 stats and 51/51 EquippableItemData records migrated; zero
failures. AetherDb's census/factions/dangling/station-fit/hardpoint-fit/
loadout-1 are byte-identical before and after (captured with the matching
pre/post binary against the matching pre/post catalog, since neither
binary can open the other's catalog shape -- the pre-migration catalog no
longer opens under the new code, confirmed and explained in the report).

37 items fitted from an authored curve; 14 had none and got a full-range
plateau (reproducing the old "always full performance" behavior exactly).
281 of 348 stats evaluate identically at quality .5/full durability/optimum;
67 diverge upward (toward Max), the intended balance change Cut 0 flagged --
max delta ~73 units on a 750000-1750000 stat. Full table:
docs/stats-power-cut1-migration.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 17:18:24 +02:00
Meta Vens
67cbf34b25 Switch engine asset references from Resources paths to Addressables GUIDs
Cut 2 of docs/addressables-cut.md. The asset move (git mv
Resources/{Prefabs,Schematics,Sprites/Icons} -> Content/...) and the
UnityHelpers.cs deletion already landed in 1fdf8151, picked up by a
concurrent session sharing this working tree; this commit is the rest
of Cut 2 landing on top of that shared state, atomically:

- Bump CultLib to cultlib-unity-v1.0.60 / caching-unity-v1.4.0 (both
  45c2f40) in Packages/manifest.json, packages-lock.json and
  Directory.Build.props, together with the 8 ServerShared
  [CultInspectorAssetPath] usages becoming [CultInspectorAssetGuid] -
  the .NET and Unity sides move together or nothing compiles.
- Assets/Scripts/EngineAssets.cs replaces UnityHelpers: loads an
  Addressables key (bare GUID or guid[subAsset]) synchronously,
  loading the GameObject and taking the component for the four sites
  that load a component. ActionBarSlot, EntityInstance, ShipInstance
  and ZoneRenderer call it instead of Resources.Load/UnityHelpers; the
  inline "Assets/Resources/" prefix strips are gone with them.
  CultCacheDrawers' schematic preview goes through
  AssetDatabase.GUIDToAssetPath first.
- Assets/Scripts/Editor/EngineAssetCheck.cs validates every stored
  [CultInspectorAssetGuid] value: 32 lowercase hex, resolves to a file,
  is addressable, and satisfies its member's consumer-type contract
  (Texture2D for icons/logos/schematics, a GameObject with the right
  component for prefabs) - table-driven, so an attributed member with
  no row fails loudly instead of being skipped.
- GameData/Aetheria.cc: the scratch migration (Aetheria.Shared + the
  pinned CultLib revision, a throwaway console app, never landed)
  walked all 138 attributed field slots across 180 documents,
  rewriting the 30 non-empty Resources paths to their .meta GUIDs -
  108 stayed empty, 0 unresolved, matching the map's census exactly.

Verification: dotnet test tests/Aetheria.Shared.Tests 61/61 green
against CultLib 45c2f40; Unity 6000.3.24f1 batchmode compiles clean;
EngineAssetCheck.Run passes all 30 stored references; the map's
negative greps are clean; tests/mutation_tests.py's 5 mutations (wrong
type, non-addressable, random guid, an old path, and an untabled
attributed member) are all caught and named, the control case and the
post-revert recompile stay clean, and the catalog/source are restored
byte-identical afterward.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 05:04:50 +02:00
Meta Vens
b2036fb8f1 Cut C: rewrite the catalog to clear the Manufacturer slot's drift
Probe Q3's body: re-upsert every stored ItemData with its own key in one
commit, through a throwaway scratch console (not part of the repo). Every
record schema-migrated from key 3 (Manufacturer) as an ignored extra slot
after the field's deletion; the rewrite clears that, matching the probe.

115 ItemData records rewritten, 12,686,267 -> 12,683,061 bytes. Reopening
reports 0 ignored-extra-slot migrations across all 180 stored records.
AetherDb factions/dangling/station-fit/loadout-1/hardpoint-fit are byte
identical before and after; census is also identical, because every design's
old Manufacturer field already agreed with the product that sells it (probe
Q1: 0 designs with more than one maker, 0 unset-maker products).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 12:09:43 +02:00
Meta Vens
515859cf24 Repoint the three dangling WeaponData.AmmoType refs in Studio
AetherDb dangling now reports 0 refs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 02:01:49 +02:00
Meta Vens
3f9bb66346 Untrack the local PlayerSettings.msgpack the previous commit swept in
The previous commit replaced the ignore line for GameData/PlayerSettings.msgpack
with run.cc and player.cc, and `git add -A` then picked up the operator's local
settings file. Q10-2 A discards that file; it was never tracked before. This
removes it from the index only, so `git ls-files GameData` matches Cut 9 again.
The working copy is left for the operator to delete.

Builds: headless. Unity does not build yet (see the previous commit).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 21:53:48 +02:00
Meta Vens
5c5c3d5e19 Delete the old run, settings, layout and loadout authorities (Cut 10)
The deletion line lands before RunSave, as the spec orders. Deleted, not
demoted:
- PlayerSettings.SavedRun (Key 1 stays unclaimed) and the SavedGame
  constructor that upserted a fresh SavedZone per zone on every save.
- ActionGameManager: the PlayerSettings.msgpack getter, file path and
  writer; the .loadout format (_loadoutPath, Loadouts, SaveLoadout and its
  default-options serializer, the commented loader); OnApplicationQuit and
  SaveState; SaveZone, which had no caller.
- MainMenu's SavedRun Continue branch and both `SavedRun = null` writes.
- InventoryPanel's Save Loadout and Restore Loadout bodies.
- InputDisplayLayout's KeyboardLayouts file reader, ParseJson,
  AssociateInputKeys, SaveLayout and the usings they alone needed.
- AetherDb's Cut 9 importer (Import.cs, legacy-census, import).
- The three-gates note on loading writes; Cut 3 made loading non-writing.
- .gitignore ignores GameData/run.cc and GameData/player.cc instead of
  PlayerSettings.msgpack.

DOES NOT BUILD in Unity: ActionGameManager, MainMenu and InputDisplayLayout
still reference the deleted members until the next commit wires RunSave,
the settings getter and the catalog layout read. Headless builds.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 21:51:10 +02:00
Meta Vens
aa05a99617 Generalize clear-boss-hulls into dangling and clear DemandProfile refs (Cut 10 step 2)
AetherDb's one-off boss hull command becomes `dangling`: it walks every
catalog record's CultRecordRef members by reflection (plain refs, list and
array elements, ref-keyed dictionary keys, nested [MessagePackObject] and
[Union] values), prints each ref that resolves to nothing as
`<record> <DeclaringType.Member> -> <key>`, and with `clear <Member>` unsets
those refs or removes those dictionary keys. Dry run unless `apply`, which
alone opens the catalog writable and lands every changed record in one
Commit. Faction.BossHull stays clearable through it.

Ran `dangling clear CompoundCommodityData.DemandProfile apply` (operator
ruling, option B): 3 keys removed, 2 on Mouth Adapting Gummy Molars and 1 on
Neural Lace, pointing at the deleted Conscientiousness and Neuroticism
attributes. `dangling` now lists exactly the three WeaponData.AmmoType refs
(DeathCluster, FastBlast+-, pretty pretty bang bang), left for the operator's
Studio click-through. census, factions and hardpoint-fit are byte-identical
to the Cut 9 captures. The commit rewrote Aetheria.cc in 1.0.59's canonical
unset-ref form.

Builds: headless.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 21:47:40 +02:00
Meta Vens
70fbaca1ed Import the legacy catalog into GameData/Aetheria.cc (Cut 9)
AetherDb gains legacy-census and a one-shot import (tools/AetherDb/Import.cs,
deleted by Cut 10). The import rewrites each legacy [tag, payload] record by
the target type's [Key] shape: slot 0 Guid becomes the record key and nil,
CultRecordRef members and DatabaseLink wrappers become D strings, the all-zero
Guid becomes nil, StatModifierData.RequireBehavior keeps the simple type name.
All 180 records land in one Commit; a second import refuses.

InputLayout moves to the catalog (Q9-1 A), with the test fixture seeding it
while the catalog is writable. GameData/*.cc is LFS, GameData/*.lock ignored.
The legacy msgpack and ansi104.json sources are removed.

Imported: SimpleCommodityData 13, CompoundCommodityData 51, GearData 25,
HullData 3, NameFile 12, Faction 12, PersonalityAttribute 3, CargoBayData 4,
DockingBayData 1, WeaponItemData 18, FactionProductData 37, InputLayout 1.
Six refs dangled already in the legacy data and are preserved as authored.

The Key(0) precondition checks only the Guid-slotted tagged types; InputLayout
is imported bare and keeps its Key(0).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 21:11:06 +02:00
Meta Vens
285b57713f Clear dangling boss hull links, and stop the tool writing on read
Eight factions pointed at one boss hull GUID that no longer resolves,
shared wreckage from the database loss. PlaceFactionsMain gives a boss zone
to every faction carrying a BossHull, so each dangling link claimed a
chokepoint that could never spawn a boss.

AetherDb.Open no longer registers the name file store. CultCache subscribes
Add to a store EntryAdded, MultiFileBackingStore.PullAll re-emits what it
loads, and Add pushes to that type store, whose Push writes a file: opening
the cache rewrote all twelve name files, 4.4 MB, on every command. They were
byte identical, and it only surfaced as an error because Unity had one of
them memory mapped. Name files now load only on request, and the scope doc
records the underlying smell.

Adds commands: factions, clear-boss-hulls, save, loadout (runs the real
LoadoutGenerator against every hull), hardpoint-fit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 02:05:33 +02:00
Meta Vens
b8ecfffd08 Mint faction products for existing designs
One product per design that carried a manufacturer, keeping its name,
description and maker. No design has roles yet, so every stat still reads
the item own workmanship and behavior is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 01:12:13 +02:00
Meta Vens
007350b327 Move Zenith reactor hardpoint off center
The centered 4x4 reactor left no 4x4 interior block free, so the only
docking bay could never fit and every non-tutorial station threw
InvalidLoadoutException. Edited by the operator in the database tools.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 22:42:28 +02:00
Meta Vens
7006a6b0dd Restore the stable legacy Unity project 2026-08-10 14:57:50 +01:00
Meta Vens
6504050207 Recover ordinary hulls and rare drive generation 2026-07-16 17:27:01 +01:00
Meta Vens
d33ede0889 Package canonical Aetheria state as one CultCache 2026-07-16 13:58:45 +01:00
Meta Vens
8c71a6379d Recover Mine Launcher as daemon deployable 2026-07-12 02:25:40 +01:00
Meta Vens
f220057ccf Publish CultMesh-native Aetheria Eve surfaces 2026-07-04 22:46:04 +01:00
Meta Vens
945c20f9f8 Wire shared CultUI debug surface file 2026-07-02 13:05:33 +01:00
Meta Vens
188188cec8 Simplify CultMesh menu surface access 2026-07-01 14:33:46 +01:00
Meta Vens
2e96660d48 Build typed Aetheria client surfaces 2026-06-25 18:09:33 +01:00
Meta Vens
832a4e1389 Tame generated worktree noise 2026-06-21 11:14:21 +01:00
Meta Vens
afcaadeff5 Refresh Aetheria CultCache world 2026-06-21 10:46:23 +01:00
Meta Vens
e678df75ce Ignore generated CultCache sidecars 2026-06-21 10:27:39 +01:00
Meta Vens
be1207c585 Move runtime API namespace to Verse 2026-06-21 09:54:15 +01:00
Meta Vens
a310c497a8 Lower MainMenu settings from shared Eve surface 2026-06-16 19:05:00 +01:00
Meta Vens
a1d04293bc Lower main-menu settings through shared Eve commands 2026-06-16 18:32:19 +01:00
Meta Vens
2de9a0f93b Use typed item category tokens 2026-06-15 20:33:32 +01:00
Meta Vens
e173989b3d Project behavior item refs as typed keys 2026-06-15 16:10:13 +01:00
Meta Vens
5d96355439 Use typed state for consumable activation 2026-06-14 07:20:06 +01:00
Meta Vens
6707dcaba8 Use typed audio stats for equipped items 2026-06-14 07:08:06 +01:00
Meta Vens
d55eb38a3a Use typed thermal resilience for equipped items 2026-06-14 06:57:53 +01:00
Meta Vens
028da90e0d Use typed action bar icon fields 2026-06-14 06:47:47 +01:00
Meta Vens
1f7e7cc09d Use typed state for docking bay limits 2026-06-14 05:39:15 +01:00
Meta Vens
710a98bc8d Use typed hull facets in entity state 2026-06-14 05:08:39 +01:00
Meta Vens
a8f6df5bb1 Use typed item mass and thermal facts 2026-06-14 04:35:51 +01:00
Meta Vens
ecd64d20a6 Use typed commodity categories in trade rows 2026-06-14 03:52:20 +01:00
Meta Vens
46793a5a2f Use typed hull prefabs in zone renderer 2026-06-14 03:31:08 +01:00
Meta Vens
66c4acf97d Use typed thermal curves in properties panel 2026-06-14 03:20:13 +01:00
Meta Vens
0d286e095a Use typed thermal bounds in schematic HUD 2026-06-14 03:05:37 +01:00
Meta Vens
de36150dc2 Import typed corporation allegiances 2026-06-13 13:18:03 +01:00
Meta Vens
fcd704437f Import full typed name files 2026-06-13 12:46:34 +01:00
Meta Vens
b621575a02 Expand typed player settings state 2026-06-13 10:29:12 +01:00
Meta Vens
21a319a67d Import typed behavior payloads 2026-06-13 10:01:20 +01:00
Meta Vens
e41318916f Import typed interior hardpoint geometry 2026-06-13 09:47:25 +01:00
Meta Vens
ea50359594 Import typed item shape masks 2026-06-13 09:32:24 +01:00
Meta Vens
b854e9f61b Expand typed item equipment migration 2026-06-13 09:01:13 +01:00
Meta Vens
88af85bddd Publish typed catalog Eve surface 2026-06-13 08:37:10 +01:00
Meta Vens
6272408db2 Add typed catalog snapshot queries 2026-06-13 08:24:37 +01:00
Meta Vens
7a2cc28c57 Expand typed catalog migration surface 2026-06-13 08:09:41 +01:00
Meta Vens
2617f3fdbd Materialize typed catalog state 2026-06-13 06:52:19 +01:00