Aetheria/Aetheria.State
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-06-13 10:01:20 +01:00
..
Documents Import typed behavior payloads 2026-06-13 10:01:20 +01:00
Migration Add typed Verse save documents 2026-06-13 04:00:10 +01:00
Aetheria.State.csproj Start typed state rebuild 2026-06-13 00:38:48 +01:00
AetheriaCatalogKeys.cs Centralize typed catalog legacy keys 2026-06-13 07:46:28 +01:00
AetheriaCatalogSnapshot.cs Expand typed item equipment migration 2026-06-13 09:01:13 +01:00
AetheriaCatalogSurfaceProjector.cs Expand typed item equipment migration 2026-06-13 09:01:13 +01:00
AetheriaDocumentRegistry.cs Publish typed catalog Eve surface 2026-06-13 08:37:10 +01:00
AetheriaStateNode.cs Publish typed catalog Eve surface 2026-06-13 08:37:10 +01:00
AetheriaStatePaths.cs Start typed state rebuild 2026-06-13 00:38:48 +01:00
README.md Import typed behavior payloads 2026-06-13 10:01:20 +01:00

Aetheria.State

Aetheria.State is the replacement owner for durable Aetheria game state.

It uses modern GameCult.Caching, GameCult.Caching.MessagePack, and GameCult.Mesh. It does not reference the old Assets/Scripts/ServerShared tree, RethinkDB, JsonKnownTypes, or Newtonsoft.Json.

The first live state file is GameData/aetheria-world.cc. It is generated by Aetheria.State.Import from checked-in legacy catalog inputs without embedding machine-local absolute paths. Legacy files such as GameData/AetherDB.msgpack are migration inputs only.

The typed runtime state model is split into player settings, run state, zone state, entity snapshots, item slots, weapon groups, action-bar bindings, and stat grids. Do not preserve SavedGame or EntityPack as opaque payloads in the new store; they are source shapes for migration, not portable state authority.

The Unity client no longer writes PlayerSettings.msgpack, .loadout, or .zone files. Until Aetheria.State is available to Unity as a runtime Verse package, player settings and loadout edits are session-local and run saving is disabled. That is intentional: the missing runtime package is the owner gap, and the old bespoke file formats must not keep acting as durable truth while the state spine is being rebuilt. The old SavedGame/SavedZone DTOs and Galaxy loader constructor have also been deleted; the new document family is live Verse run/zone state, not a bespoke save-file format. The dead SavedStory JSON DTO is gone. ZonePack and EntityPack remain in-memory construction/loadout snapshots for Unity runtime code, but no longer carry MessagePack persistence attributes.

Keyboard layout rendering now reads the checked-in Unity text asset directly. The old generated GameData/KeyboardLayouts/*.msgpack cache was deleted; layout edits are runtime-only until Verse owns a typed layout/settings document.

The old IMGUI CultCache database editor has been deleted, and NameTools no longer exports NameFile/*.msgpack. AetherDB.msgpack and existing name files remain legacy catalog inputs only; typed catalog migration is the next owner move.

Aetheria.State.Import captures the legacy catalog files into typed quarantine state: path, size, and SHA-256 fingerprint for AetherDB.msgpack plus NameFile/*.msgpack, and a migration ledger update. It also performs a bounded raw MessagePack union pass that maps stable catalog fields into typed item/faction/name-file documents without compiling Unity's legacy domain model into Aetheria.State. The current checked-in catalog maps to 115 item definitions, 12 factions, and 12 name files. Typed item definitions include legacy manufacturer IDs, price, shape dimensions, occupied cell counts, full shape-cell masks, interior shape masks for hull/cargo equipment, hull hardpoint definitions, behavior kind fingerprints, typed recursive behavior payloads, and stable equipment facets: hardpoint type, hull type, stack size, durability, and weapon range/caliber/type/fire/modifier classifications. Typed corporation documents include the legacy short name, the true description field from key 3, name-file and boss-hull legacy IDs, influence distance, allegiance count, and music bank IDs. Runtime object graphs, typed behavior factory construction, and simulation state remain legacy until dedicated typed runtime documents exist. Legacy GUID references that are Guid.Empty are imported as absent references, not as resolvable catalog links.

AetheriaCatalogSnapshot is the typed read surface over materialized catalog documents. It exposes trade items, legacy-ID lookup, manufacturer lookup, corporation prefix lookup, corporation name-file lookup, equipment items, behavior lookup, and hardpoint lookup without reading DatabaseEntry objects.

AetheriaCatalogSurfaceProjector publishes the first Eve-compatible provider surface from typed catalog state. The importer materializes gamecult.eve.surface.v1 at eve:surface:aetheria.catalog.operator with summary, trade-catalog, and corporation views. This is a typed CultCache provider document and a local mirror of the Eve contract until the shared Eve Unity UI Toolkit lowering package exists.

Aetheria.State.Unity is the Unity-facing runtime read facade over typed state. It opens aetheria-world.cc, emits immutable catalog read models for trade, equipment, behavior, hardpoint, manufacturer, corporation, and name-file queries, exposes typed item shape masks for layout and fitting consumers, and exposes typed interior masks and hardpoints for equipment/cargo layout consumers, exposes typed behavior payload read models, and can read the published Eve catalog surface. It does not deserialize legacy DatabaseEntry objects and does not write state. Unity can use this as the first package boundary once CultLib/Eve runtime packaging is available.

Aetheria.State.Verify opens a materialized state file and checks that the typed migration ledger matches the actual item, corporation, and name-file records in the .cc store. It also verifies the canonical legacy-ID lookup API for one migrated record of each catalog kind and checks that expanded item and corporation catalog facts survived materialization. The verifier also exercises the typed catalog snapshot query surface, shape-mask invariants, and the typed behavior payload tree, and the published Eve catalog surface. The current catalog materializes 65 behavior payloads, 661 behavior fields, and 18 behavior-side legacy-ID references. Legacy content currently includes at least one overhanging hardpoint; the verifier preserves the payload and checks hardpoint local masks rather than silently converting content repair into migration. Use it after import when GameData/aetheria-world.cc changes.

Aetheria.State.Unity.Smoke opens the materialized state through the runtime facade and proves read-only Unity-facing catalog access without the legacy catalog reader.

Current rebuild notes:

  • MessagePack 3.1.4 is pulled transitively through CultLib and is currently flagged by NuGet advisory GHSA-hv8m-jj95-wg3x; update CultLib's GameCult.Caching.MessagePack package ownership rather than adding a local Aetheria override.
  • CultRecordRef<T> should become the persisted reference shape once the MessagePack source-generator path handles the GameCult formatter cleanly. Until then, v1 profile documents store explicit record-key strings at the persistence boundary.