Commit graph Aetheria/Assets/Scripts/ServerShared/Zone.cs
Author SHA1 Message Date
Meta Vens
65a007e509 Seed zones from a stable name hash instead of string.GetHashCode (Cut 10)
Closes the 8a follow-up. string.GetHashCode is stable on Mono but randomized
per process on .NET Core, so a headless sim that generates zones would get
different zones on every run.

- Extensions.StableHash folds a string's UTF-8 bytes through CultMath's pcg
  from the FNV-1a offset basis. No new CultMath API.
- ZoneGenerator seeds from `Name.StableHash() ^ pcg3d(Position).x`.
- Zone seeds from `Name.StableHash() ?? 1337u`. CultMath's Random maps
  seed 0 to its default, and the abs/Convert.ToUInt32 pair that threw on
  int.MinValue is gone.

Old runs are discarded, so a different galaxy per seed costs nothing.

Tests: StableHashIsNotProcessRandomized pins "Adrasteia" to 2427892944, the
value an independent Add-Type transcription of CultMath's pcg produced. It
fails with GetHashCode substituted back in.

Builds: headless, 15 tests pass, Unity batchmode compile reports no error CS.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 22:09:37 +02:00
Meta Vens
a2b54889b4 Move the ServerShared data model onto CultLib's CultCache
Cut 8b. Aetheria.Shared builds headless against GameCult.Caching and
GameCult.Caching.MessagePack at the pinned CultLib; the pin guard also
checks the Caching project exists.

Documents: [CultDocument("aetheria.<type>", "1")] with [MessagePackObject]
and integer [Key]s on the Q7 concrete types (the eight ItemData leaves,
Faction, FactionProductData, PersonalityAttribute, NameFile, OrbitData, the
four BodyData leaves, SavedZone, SavedGame, PlayerSettings, InputLayout).
SavedGame and PlayerSettings are [CultGlobal]; Name members are [CultName].
ItemData, CraftedItemData, EquippableItemData, BodyData and AgentTask lose
[MessagePackObject]; BodyData and AgentTask lose their [Union]s. InputLayout
moves into ServerShared so AetheriaStores can route it.

References: Guid and DatabaseLink<T> members become CultRecordRef<T>;
Guid-keyed maps become ref-keyed with [CultReference(..., many: true)];
ZonePack holds refs to orbit and body records. Runtime maps (Zone orbits,
bodies and belts, cargo ItemsOfType, agent targets) key by CultRecordKey.
Identity is the record key: ID comparisons become reference or key
comparisons. StatModifierData.RequireBehavior is a simple type name.

AetheriaStores.Open composes the catalog (read-only unless writable), run
and player stores, one home per type. CultRecordRefs carries IsSet, a
null-safe Get(ref), RefOf (key from TryGetHandle) and Upsert.
ItemManager.GetData is the one item resolution path. MathResolver is
declared by [assembly: CultCacheFormatterResolver].

Inspector attributes: text, range and asset path map onto CultLib's
CultInspector attributes (asset path only on string members); every
replaced Aetheria attribute keeps [Inspectable] for the runtime panel.

Builds: Aetheria.Shared. Does not build: AetherDb and the Unity project,
which follow.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 19:00:42 +02:00
Meta Vens
6140a06a0a Swap Unity.Mathematics usings for CultMath
Every Unity.Mathematics using, alias and qualified name under Assets\Scripts
and tools now names CultMath. The nine `using static ...noise;` lines are
gone: snoise lives on CultMath's math. UnityExtensions loses float4.ToColor
and Color.ToFloat4, which duplicate the bridge's ToColor and ToCultMath; the
float3 colour pair stays because the bridge has none.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 17:39:12 +02:00
Meta Vens
7006a6b0dd Restore the stable legacy Unity project 2026-08-10 14:57:50 +01:00
Meta Vens
bfcf1e8aa0 Remove legacy body key prefixes 2026-07-06 02:00:46 +01:00
Meta Vens
2381b407ec Split entity blueprint materialization names 2026-06-28 15:23:42 +01:00
Meta Vens
39a0dc8737 Sync daemon authority migration 2026-06-21 09:37:54 +01:00
Meta Vens
bd4a51f923 Cut GUID sidecars from zone runtime 2026-06-16 20:51:26 +01:00
Meta Vens
4217394cc2 Carry typed orbit keys through zone construction 2026-06-16 16:57:18 +01:00
Meta Vens
397f3aff5a Key zone runtime collections on typed state keys 2026-06-16 16:48:00 +01:00
Meta Vens
43655ca96d Keep zone asteroid helpers on typed keys 2026-06-16 16:32:31 +01:00
Meta Vens
452184ea3a Resolve zone body and orbit keys natively 2026-06-16 16:27:33 +01:00
Meta Vens
d7ad15c35c Drop wrapper orbit guid fields from zone runtime 2026-06-16 16:20:30 +01:00
Meta Vens
33f289dcac Move orbital runtime seam onto typed orbit keys 2026-06-16 16:07:20 +01:00
Meta Vens
cfc1ddac6d Keep orbit task targets on typed keys 2026-06-16 15:54:18 +01:00
Meta Vens
65456f09cd Keep behavior body targets on typed keys 2026-06-16 15:08:00 +01:00
Meta Vens
0471cb690f Move body and orbit key ownership into zone runtime 2026-06-16 14:22:52 +01:00
Meta Vens
8ea97a08f8 Use faction keys for shell identity 2026-06-16 11:43:37 +01:00
Meta Vens
2d3172887b Use item keys for body resources 2026-06-15 03:35:40 +01:00
Meta Vens
bf03f27709 Demote zone construction data names 2026-06-14 21:30:31 +01:00
Meta Vens
7b605f049c Demote entity blueprints to construction 2026-06-14 20:40:13 +01:00
Meta Vens
dab29839a2 Rename orbital runtime orbit id 2026-06-14 19:53:40 +01:00
Meta Vens
7d176f4dc3 Move orbit geometry onto runtime owner 2026-06-14 19:43:48 +01:00
Meta Vens
bb38af3f6a Demote zone construction blueprint state 2026-06-14 19:37:24 +01:00
Meta Vens
e6e287d714 Drop DTO handles from runtime bodies 2026-06-14 19:14:16 +01:00
Meta Vens
191a7dd1c3 Delete zone body shadow state 2026-06-14 19:05:23 +01:00
Meta Vens
1973e90b7a Project zone snapshots from runtime owners 2026-06-14 18:44:31 +01:00
Meta Vens
526fa537ad Move planet facts behind runtime owner 2026-06-14 18:34:54 +01:00
Meta Vens
a97998f09c Move asteroid belt facts behind runtime owner 2026-06-14 18:27:36 +01:00
Meta Vens
47f04dc430 Move orbit facts behind runtime owner 2026-06-14 18:17:15 +01:00
Meta Vens
a9abfe0c68 Rename runtime entity blueprint projector 2026-06-13 19:12:56 +01:00
Meta Vens
ade6845e1d Demote runtime save packs to blueprints 2026-06-13 18:06:59 +01:00
Reinier Vens
6b0860b178 Bugfixes & Reactive Refactor
Added credits display to trade screen
Fixed bug in inventory screen where a failed drag from a cargo bay would make the item disappear until a refresh is triggered
Changed behavior of Escape key to exit menu if a menu is open
Fixed zone map gravity isolines to correctly track maximum gravity depth
Refactored orbit and planet data to replace reactive variables with regular ones
2025-07-18 00:21:33 +01:00
Reinier Vens
be5e7618d6 Performance Optimization
Improved volumetric flow performance by orders of magnitude
Cleaned up old raymarching support code
Moved asteroid height calculation to vertex shader
Manual culling for asteroid field render update
2022-07-19 18:55:17 +01:00
Reinier Vens
2f98904614 Hostility Fix + Story Work
Fixed various bugs caused by triggering wormhole animation multiple times
Sector -> Galaxy
Fixed bug in hostility system; deserialized entities' PresencePermitted was silently throwing an exception (due to Faction being null during initialization) and thus never updating in response to security level changes
Worked a bit on story processing
2021-05-14 03:03:28 +01:00
Reinier Vens
1284149d47 Hostility System
Implemented hostility system - entities can mark each other as friend or foe depending on changing conditions (currently only depends on local security level)
Added "friendly" target indicators in blue
2021-05-11 04:45:42 +01:00
Reinier Vens
a51c402fc5 Reflected Visibility
Ships are now more visible in lit areas (depending on cross section stat in Reflector behavior)
Refactored all behaviors to remove context & entity references (can get them from equipped item reference if needed)
Fixed crash when enemy dies of heatstroke while targeted
Exponential decay for visibility now uses correct time-independent formula
Refactored item inspection in properties panel (now consistent between equipped items vs. inventory and store items, shows effect of heat on stats)
Reordered item properties and added spacing between groups
2021-04-12 04:20:52 +01:00
Reinier Vens
ca1ce9859d Live Demo Tweaks
Copied Main Menu to gameplay scene
Added Pause functionality (ESC key)
Save & Restore discovered zones
Applied vertical offset to asteroids (no more intersections!)
Nebula shader optimized to improve early exit
Nebula shader outputs light scattering to second render target
Modified depth of field shader to use nebula light scattering
2021-04-09 14:01:34 +01:00
Reinier Vens
11a9365f91 Trailer Stuff & More
Changed title font to Montserrat
Added trailer-specific camera transitions
Added key to hide UI
Fixed input listening while console is open
Added animated zone reveal effect in galaxy map
Added Ping action for sensors
Added debug console commands (e.g. give command to get any item in legendary+ quality)
Temporarily disabled wwise
Fixed infinite loop in weapon penetration code
Guided missiles now predict target position
Fixed hitscan weapons
Fixed invisible enemies bug
Fixed various loadout generator issues (can now generate turrets!)
Fixed wormhole crash when enemy is targeted
Saving/loading current zone time when exiting game (planets keep their positions)
Created slime simulation in test scene - WIP
2021-03-27 10:03:24 +00:00
Reinier Vens
ebde23a64d Enemy Loadout Generation
Modified zone generator to scale the radius and mass of a zone according to galaxy density
Added loadout generator which procedurally generates ships and turrets
Generating 3 randomized ships in each occupied zone
Fixed DatabaseCache.GetAll for parent types
Fixed wormhole traversal bug for returning to previous zone (ZoneRenderer subscriptions not being properly disposed)
2021-03-18 00:36:34 +00:00
Reinier Vens
73651bf16a Game Loop Galaxy Integration
Added sector map in Galaxy tab of in-game menu
Added player flag to Ship (replaces AGM.PlayerEntities)
Refactored sector map to depend on AGM
Moved sector generation to main menu
Main menu now supports resuming previous playthrough
Database and player settings now statically available via AGM
AGM saves current game state in PlayerSettings on exit
Sector generation is now asynchronous
Added progress callbacks to sector gen + progress dialog in menu
Confirmation Dialog / properties panel can now display dynamic text entry
Added zone title to Zone map
Eliminated ZoneData class (properties moved to ZonePack)
Sector, Zone and Entity serialization now fully functional
Entity settings now separate from player settings
Cleaned up old unused networking message classes
Name files now integrated with database cache
Added ability to save/load additive DB cache files in database panel
Cleaned up Wwise sound setup - removed redundant items & fixed spelling errors
Deleted Wwise cache + added to .gitignore
2021-03-15 11:40:46 +00:00
Reinier Vens
e6181c11dc Main Menu
Added Main Menu scene
Tweaked world map to incorporate secondary colors in zone icons + glowing links
Entity Serialization is now generic
Zone Serialization now includes entities
Fixed bug where wormhole traversal would unbind from player entity
Game Manager no longer spawns entities (loadout file format changed)
Wrote extension to randomly select weighted items from collections (for generating enemies)
2021-03-13 03:23:58 +00:00
Reinier Vens
0f33e541c0 Sector Constellations
Generating links between zones within the sector using elimination algorithm with connectedness testing
Improved sample elimination API - now accepts simple density function!
Ported MIConvexHull library to single precision, Unity.Mathematics math
Removed old galaxy generator (new code is much better!)
2021-03-11 01:36:08 +00:00
Reinier Vens
f340e992ec Game Loop
Player spawns in starter ship, is presented with a game over screen when they die, with the option to start over
2021-03-09 02:26:58 +00:00
Reinier Vens
cb4cb243e4 Freeform Zone Generation
Modified zone generator to create multiple fixed points with areas of influence tangent to each other and the zone boundary
Added weapon range icons
Modified gravity potential shader to fade out at maximum depth
2021-03-08 22:58:37 +00:00
Reinier Vens
8d4bd04891 AI State Machine First Pass
Implemented first pass on code-driven state machine logic for flexible AI agents
2021-02-11 03:14:20 +00:00
Reinier Vens
8d6770ab15 Performance Optimization
Asteroid positioning is now multithreaded
Item quality calculation is now allocation free
Various other garbage reductions
2021-01-17 23:26:53 +00:00
Reinier Vens
ef816cc7e0 Murder Satellites
Created TurretController, which performs basic combat for fixed orbital installations
Projectiles self-destruct at maximum range
Created turret prefab
Outfitted turret in game manager
Entity position is now 3D
Entities responsible for updating their own position and orientation
Barrel positions and orientations available from entity code
Inventory code will display modal dialog for invalid item moves instead of breaking
Yaw articulation working (full 360 rotation still borked)
2021-01-06 14:56:39 +00:00
Reinier Vens
9e88fcda95 Bigger Sectors & Various Bugfixes
Minimap works again
Stardust density is now proportional to gravity depth
Generated zones are double the size and better distributed
Orbital hierarchy actually working now (!)
Station start position actually orbits something now
Max gravity strength remapped to infinity (zone boundary is properly impassable now)
2020-12-23 22:38:30 +00:00
Reinier Vens
1df7f1bc67 First Flight Polish
FIX: Gravity waves weren't lining up properly between the GPU and CPU implementations
Inventory menu wasn't highlighting rotated items correctly
2020-12-22 21:32:37 +00:00