Consolidate spatial docs into universe model
This commit is contained in:
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
This document defines the intended combat model for the simulation.
|
This document defines the intended combat model for the simulation.
|
||||||
|
|
||||||
Combat is primarily a local-space activity. It is how factions, pirates, and defenders contest access, claims, stations, and logistics.
|
Combat is primarily a localspace activity. It is how factions, pirates, and defenders contest access, claims, stations, and logistics.
|
||||||
|
|
||||||
## Design Goals
|
## Design Goals
|
||||||
|
|
||||||
The combat model should support:
|
The combat model should support:
|
||||||
|
|
||||||
- local-space tactical fights
|
- localspace tactical fights
|
||||||
- piracy and harassment
|
- piracy and harassment
|
||||||
- claim destruction and station contestation
|
- claim destruction and station contestation
|
||||||
- station defense
|
- station defense
|
||||||
@@ -17,7 +17,7 @@ The combat model should support:
|
|||||||
|
|
||||||
## Core Principles
|
## Core Principles
|
||||||
|
|
||||||
- combat happens in `local-space`
|
- combat happens in `localspace`
|
||||||
- claims and structures are physically contestable
|
- claims and structures are physically contestable
|
||||||
- piracy should target valuable traffic and vulnerable infrastructure
|
- piracy should target valuable traffic and vulnerable infrastructure
|
||||||
- stations should be defensible but not magically safe
|
- stations should be defensible but not magically safe
|
||||||
@@ -25,7 +25,7 @@ The combat model should support:
|
|||||||
|
|
||||||
## Combat Space
|
## Combat Space
|
||||||
|
|
||||||
Combat belongs in `local-space`.
|
Combat belongs in `localspace`.
|
||||||
|
|
||||||
This is where entities can:
|
This is where entities can:
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ This is where entities can:
|
|||||||
- defend stations and claims
|
- defend stations and claims
|
||||||
- intercept miners, haulers, and construction support
|
- intercept miners, haulers, and construction support
|
||||||
|
|
||||||
Ships in `system-space` warp transit are not in normal tactical combat.
|
Ships in intra-system warp transit are not in normal tactical combat.
|
||||||
|
|
||||||
This keeps tactical fighting distinct from travel.
|
This keeps tactical fighting distinct from travel.
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ Combat should matter not only for fleet battle, but also for logistics disruptio
|
|||||||
|
|
||||||
## Claims As Combat Targets
|
## Claims As Combat Targets
|
||||||
|
|
||||||
Claims at Lagrange points should be valid combat targets.
|
Claims at valid construction anchors should be valid combat targets.
|
||||||
|
|
||||||
That means:
|
That means:
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ Station safety should depend on actual defensive capacity, not only ownership fl
|
|||||||
|
|
||||||
## Piracy
|
## Piracy
|
||||||
|
|
||||||
Pirates should be a meaningful local-space threat.
|
Pirates should be a meaningful localspace threat.
|
||||||
|
|
||||||
They should favor:
|
They should favor:
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ See [EVENTS.md](/home/jbourdon/repos/space-game/docs/EVENTS.md) for the combat a
|
|||||||
|
|
||||||
The following rules should remain true unless deliberately revised:
|
The following rules should remain true unless deliberately revised:
|
||||||
|
|
||||||
- combat is primarily a local-space activity
|
- combat is primarily a localspace activity
|
||||||
- claims are destructible and contestable
|
- claims are destructible and contestable
|
||||||
- station construction is a vulnerable phase
|
- station construction is a vulnerable phase
|
||||||
- piracy should prefer valuable and vulnerable traffic
|
- piracy should prefer valuable and vulnerable traffic
|
||||||
@@ -213,7 +213,7 @@ The following rules should remain true unless deliberately revised:
|
|||||||
|
|
||||||
## Relationship To Other Documents
|
## Relationship To Other Documents
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
- [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md)
|
||||||
- defines where combat is allowed
|
- defines where combat is allowed
|
||||||
|
|
||||||
- [POLICIES.md](/home/jbourdon/repos/space-game/docs/POLICIES.md)
|
- [POLICIES.md](/home/jbourdon/repos/space-game/docs/POLICIES.md)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ Additional specialized commanders may exist later, such as:
|
|||||||
- fleet commander
|
- fleet commander
|
||||||
- task-group commander
|
- task-group commander
|
||||||
- convoy commander
|
- convoy commander
|
||||||
- sector commander
|
- localspace defense commander
|
||||||
|
|
||||||
## Commander Entity Model
|
## Commander Entity Model
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ Responsibilities:
|
|||||||
- create or retire station and fleet objectives
|
- create or retire station and fleet objectives
|
||||||
- respond to large-scale shortages, threats, and opportunities
|
- respond to large-scale shortages, threats, and opportunities
|
||||||
|
|
||||||
The faction commander should reason mostly across `universe-space`, `galaxy-space`, and strategic `system-space`.
|
The faction commander should reason mostly across `universe-space`, `galaxy-space`, and strategic system-level concerns.
|
||||||
|
|
||||||
It should not micromanage every ship constantly.
|
It should not micromanage every ship constantly.
|
||||||
|
|
||||||
@@ -343,7 +343,7 @@ The following rules should remain true unless there is a deliberate exception:
|
|||||||
|
|
||||||
## Relationship To Other Documents
|
## Relationship To Other Documents
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
- [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md)
|
||||||
- defines where action happens
|
- defines where action happens
|
||||||
|
|
||||||
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ The data model should support:
|
|||||||
- module-based capability
|
- module-based capability
|
||||||
- population and workforce
|
- population and workforce
|
||||||
- claimable construction sites
|
- claimable construction sites
|
||||||
- local-space combat
|
- localspace combat
|
||||||
- scalable replication and future sharding
|
- scalable replication and future sharding
|
||||||
|
|
||||||
## Core Principles
|
## Core Principles
|
||||||
@@ -39,8 +39,8 @@ Recommended global ID families:
|
|||||||
- `factionId`
|
- `factionId`
|
||||||
- `commanderId`
|
- `commanderId`
|
||||||
- `systemId`
|
- `systemId`
|
||||||
- `nodeId`
|
- `anchorId`
|
||||||
- `bubbleId`
|
- `localspaceId`
|
||||||
- `stationId`
|
- `stationId`
|
||||||
- `shipId`
|
- `shipId`
|
||||||
- `moduleId`
|
- `moduleId`
|
||||||
@@ -58,8 +58,8 @@ The intended core entities are:
|
|||||||
1. `Faction`
|
1. `Faction`
|
||||||
2. `Commander`
|
2. `Commander`
|
||||||
3. `System`
|
3. `System`
|
||||||
4. `Node`
|
4. `Anchor`
|
||||||
5. `LocalBubble`
|
5. `Localspace`
|
||||||
6. `Station`
|
6. `Station`
|
||||||
7. `Ship`
|
7. `Ship`
|
||||||
8. `ModuleInstance`
|
8. `ModuleInstance`
|
||||||
@@ -108,7 +108,6 @@ Recommended commander kinds:
|
|||||||
- `station`
|
- `station`
|
||||||
- `ship`
|
- `ship`
|
||||||
- `fleet`
|
- `fleet`
|
||||||
- `sector`
|
|
||||||
- `task-group`
|
- `task-group`
|
||||||
|
|
||||||
## System
|
## System
|
||||||
@@ -124,40 +123,37 @@ Suggested fields:
|
|||||||
- `nodeIds`
|
- `nodeIds`
|
||||||
- `faction influence later`
|
- `faction influence later`
|
||||||
|
|
||||||
## Node
|
## Anchor
|
||||||
|
|
||||||
A node is a meaningful location in system space that owns a local bubble.
|
An anchor is a meaningful location in a system that owns a localspace.
|
||||||
|
|
||||||
Suggested fields:
|
Suggested fields:
|
||||||
|
|
||||||
- `nodeId`
|
- `anchorId`
|
||||||
- `systemId`
|
- `systemId`
|
||||||
- `kind`
|
- `kind`
|
||||||
- `systemPosition`
|
- `systemPosition`
|
||||||
- `bubbleId`
|
- `localspaceId`
|
||||||
- `parentNodeId?`
|
- `parentAnchorId?`
|
||||||
- `orbital metadata?`
|
- `orbital metadata?`
|
||||||
- `occupyingStructureId?`
|
- `constructionIds?`
|
||||||
|
|
||||||
Recommended node kinds:
|
Recommended anchor kinds:
|
||||||
|
|
||||||
- `star`
|
- `star`
|
||||||
- `planet`
|
- `planet`
|
||||||
- `moon`
|
- `moon`
|
||||||
- `lagrange-point`
|
- `lagrange-point`
|
||||||
- `station`
|
- `resource-node`
|
||||||
- `gate`
|
|
||||||
- `resource-site`
|
|
||||||
- `structure`
|
|
||||||
|
|
||||||
## LocalBubble
|
## Localspace
|
||||||
|
|
||||||
A local bubble is the tactical simulation context attached to one node.
|
A localspace is the tactical simulation context attached to one anchor.
|
||||||
|
|
||||||
Suggested fields:
|
Suggested fields:
|
||||||
|
|
||||||
- `bubbleId`
|
- `localspaceId`
|
||||||
- `nodeId`
|
- `anchorId`
|
||||||
- `systemId`
|
- `systemId`
|
||||||
- `radius`
|
- `radius`
|
||||||
- `occupantShipIds`
|
- `occupantShipIds`
|
||||||
@@ -168,16 +164,16 @@ Suggested fields:
|
|||||||
|
|
||||||
## Station
|
## Station
|
||||||
|
|
||||||
A station is a structure attached to a Lagrange-point node.
|
A station is a constructed structure that lives inside one localspace.
|
||||||
|
|
||||||
Suggested fields:
|
Suggested fields:
|
||||||
|
|
||||||
- `stationId`
|
- `stationId`
|
||||||
- `ownerFactionId`
|
- `ownerFactionId`
|
||||||
- `commanderId?`
|
- `commanderId?`
|
||||||
- `nodeId`
|
- `anchorId`
|
||||||
- `systemId`
|
- `systemId`
|
||||||
- `bubbleId`
|
- `localspaceId`
|
||||||
- `moduleIds`
|
- `moduleIds`
|
||||||
- `inventory`
|
- `inventory`
|
||||||
- `population`
|
- `population`
|
||||||
@@ -231,7 +227,7 @@ Recommended host kinds:
|
|||||||
|
|
||||||
## Claim
|
## Claim
|
||||||
|
|
||||||
A claim is a vulnerable object placed at a Lagrange point before construction.
|
A claim is a vulnerable object placed at a valid construction anchor before construction.
|
||||||
|
|
||||||
Suggested fields:
|
Suggested fields:
|
||||||
|
|
||||||
@@ -239,8 +235,8 @@ Suggested fields:
|
|||||||
- `ownerFactionId`
|
- `ownerFactionId`
|
||||||
- `commanderId?`
|
- `commanderId?`
|
||||||
- `systemId`
|
- `systemId`
|
||||||
- `nodeId`
|
- `anchorId`
|
||||||
- `bubbleId`
|
- `localspaceId`
|
||||||
- `placedAt`
|
- `placedAt`
|
||||||
- `activatesAt`
|
- `activatesAt`
|
||||||
- `state`
|
- `state`
|
||||||
@@ -261,8 +257,8 @@ Suggested fields:
|
|||||||
|
|
||||||
- `constructionSiteId`
|
- `constructionSiteId`
|
||||||
- `ownerFactionId`
|
- `ownerFactionId`
|
||||||
- `nodeId`
|
- `anchorId`
|
||||||
- `bubbleId`
|
- `localspaceId`
|
||||||
- `targetKind`
|
- `targetKind`
|
||||||
- `targetDefinitionId`
|
- `targetDefinitionId`
|
||||||
- `requiredItems`
|
- `requiredItems`
|
||||||
@@ -354,12 +350,12 @@ Recommended ship spatial state fields:
|
|||||||
|
|
||||||
- `spaceLayer`
|
- `spaceLayer`
|
||||||
- `currentSystemId`
|
- `currentSystemId`
|
||||||
- `currentNodeId?`
|
- `currentAnchorId?`
|
||||||
- `currentBubbleId?`
|
- `currentLocalspaceId?`
|
||||||
- `localPosition?`
|
- `localPosition?`
|
||||||
- `systemPosition?`
|
- `systemPosition?`
|
||||||
- `movementRegime`
|
- `movementRegime`
|
||||||
- `destinationNodeId?`
|
- `destinationAnchorId?`
|
||||||
- `transitState?`
|
- `transitState?`
|
||||||
|
|
||||||
Recommended space layers:
|
Recommended space layers:
|
||||||
@@ -367,7 +363,7 @@ Recommended space layers:
|
|||||||
- `universe-space`
|
- `universe-space`
|
||||||
- `galaxy-space`
|
- `galaxy-space`
|
||||||
- `system-space`
|
- `system-space`
|
||||||
- `local-space`
|
- `localspace`
|
||||||
|
|
||||||
Recommended movement regimes:
|
Recommended movement regimes:
|
||||||
|
|
||||||
@@ -466,7 +462,7 @@ The following rules should remain true unless deliberately revised:
|
|||||||
|
|
||||||
## Relationship To Other Documents
|
## Relationship To Other Documents
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
- [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md)
|
||||||
- defines the layered world structure
|
- defines the layered world structure
|
||||||
|
|
||||||
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
||||||
|
|||||||
@@ -15,11 +15,6 @@ For the implementation migration path from the current codebase to this design s
|
|||||||
- intra-system warp and inter-system FTL
|
- intra-system warp and inter-system FTL
|
||||||
- viewer hierarchy and simulation boundaries
|
- viewer hierarchy and simulation boundaries
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
|
||||||
- older spatial design document
|
|
||||||
- useful migration context, but secondary to `UNIVERSE-MODEL.md`
|
|
||||||
- should be aligned to the universe model over time
|
|
||||||
|
|
||||||
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
||||||
- commander roles for factions, stations, and ships
|
- commander roles for factions, stations, and ships
|
||||||
- command hierarchy
|
- command hierarchy
|
||||||
@@ -64,7 +59,7 @@ For the implementation migration path from the current codebase to this design s
|
|||||||
- policy-based behavior limits
|
- policy-based behavior limits
|
||||||
|
|
||||||
- [COMBAT.md](/home/jbourdon/repos/space-game/docs/COMBAT.md)
|
- [COMBAT.md](/home/jbourdon/repos/space-game/docs/COMBAT.md)
|
||||||
- local-space combat
|
- localspace combat
|
||||||
- piracy and station defense
|
- piracy and station defense
|
||||||
- claim destruction and contest
|
- claim destruction and contest
|
||||||
- commander-driven engagement behavior
|
- commander-driven engagement behavior
|
||||||
@@ -95,7 +90,7 @@ For the implementation migration path from the current codebase to this design s
|
|||||||
|
|
||||||
- [STATIONS.md](/home/jbourdon/repos/space-game/docs/STATIONS.md)
|
- [STATIONS.md](/home/jbourdon/repos/space-game/docs/STATIONS.md)
|
||||||
- station roles
|
- station roles
|
||||||
- local bubble functions
|
- localspace functions
|
||||||
- station command requirements
|
- station command requirements
|
||||||
- station services, docking, and market responsibilities
|
- station services, docking, and market responsibilities
|
||||||
|
|
||||||
|
|||||||
@@ -254,13 +254,13 @@ Those support goods are defined as item roles in [ITEMS.md](/home/jbourdon/repos
|
|||||||
|
|
||||||
## Market And Space
|
## Market And Space
|
||||||
|
|
||||||
The market should respect the spatial model in [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md).
|
The market should respect the spatial model in [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md).
|
||||||
|
|
||||||
Implications:
|
Implications:
|
||||||
|
|
||||||
- stations are nodes with local bubbles
|
- stations live in localspaces owned by anchors
|
||||||
- docking and transfer happen in local-space
|
- docking and transfer happen in localspace
|
||||||
- in-system logistics move through warp between nodes
|
- in-system logistics move through warp between anchors
|
||||||
- inter-system trade moves through stargates or FTL
|
- inter-system trade moves through stargates or FTL
|
||||||
|
|
||||||
Distance and travel friction should matter economically.
|
Distance and travel friction should matter economically.
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ Every event should conceptually have:
|
|||||||
- `kind`
|
- `kind`
|
||||||
- `spaceLayer`
|
- `spaceLayer`
|
||||||
- `systemId?`
|
- `systemId?`
|
||||||
- `bubbleId?`
|
- `localspaceId?`
|
||||||
|
- `anchorId?`
|
||||||
- `primaryEntityKind`
|
- `primaryEntityKind`
|
||||||
- `primaryEntityId`
|
- `primaryEntityId`
|
||||||
- `relatedEntityIds`
|
- `relatedEntityIds`
|
||||||
@@ -51,7 +52,7 @@ Examples:
|
|||||||
|
|
||||||
- universe-scale events belong to `universe-space`
|
- universe-scale events belong to `universe-space`
|
||||||
- strategic system events belong to `galaxy-space` or `system-space`
|
- strategic system events belong to `galaxy-space` or `system-space`
|
||||||
- combat, docking, and claims belong to `local-space`
|
- local tactical events belong to `localspace`
|
||||||
|
|
||||||
This is important for interest management.
|
This is important for interest management.
|
||||||
|
|
||||||
@@ -95,8 +96,8 @@ These describe meaningful transitions in movement regime or location context.
|
|||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
- `entered-local-bubble`
|
- `entered-localspace`
|
||||||
- `left-local-bubble`
|
- `left-localspace`
|
||||||
- `warp-spooling-started`
|
- `warp-spooling-started`
|
||||||
- `warp-started`
|
- `warp-started`
|
||||||
- `warp-arrived`
|
- `warp-arrived`
|
||||||
@@ -314,7 +315,7 @@ The following rules should remain true unless deliberately revised:
|
|||||||
- [DATA-MODEL.md](/home/jbourdon/repos/space-game/docs/DATA-MODEL.md)
|
- [DATA-MODEL.md](/home/jbourdon/repos/space-game/docs/DATA-MODEL.md)
|
||||||
- defines the entities referenced by events
|
- defines the entities referenced by events
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
- [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md)
|
||||||
- defines event scope by space layer
|
- defines event scope by space layer
|
||||||
|
|
||||||
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ This is especially important because your station model is configuration-based r
|
|||||||
|
|
||||||
## Structural Rule
|
## Structural Rule
|
||||||
|
|
||||||
Stations are built at one Lagrange point and expanded by adding modules.
|
Stations are built at one valid construction anchor and expanded by adding modules.
|
||||||
|
|
||||||
That means modules are the main axis of station growth.
|
That means modules are the main axis of station growth.
|
||||||
|
|
||||||
|
|||||||
@@ -79,9 +79,9 @@ Docking policy matters because no trade or transfer can happen without actual lo
|
|||||||
|
|
||||||
Construction rights should be policy-relevant at the faction and system level.
|
Construction rights should be policy-relevant at the faction and system level.
|
||||||
|
|
||||||
This does not override the hard structural rule from [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md):
|
This does not override the hard structural rule from [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md):
|
||||||
|
|
||||||
- one structure per Lagrange point
|
- construction is only valid at supported construction anchors
|
||||||
|
|
||||||
But it does help define who is permitted or tolerated to claim and build in a given system.
|
But it does help define who is permitted or tolerated to claim and build in a given system.
|
||||||
|
|
||||||
@@ -149,13 +149,13 @@ Examples:
|
|||||||
|
|
||||||
- friendly factions may trade and dock
|
- friendly factions may trade and dock
|
||||||
- neutral factions may trade but not build
|
- neutral factions may trade but not build
|
||||||
- hostile factions may be denied docking and targeted in local-space
|
- hostile factions may be denied docking and targeted in localspace
|
||||||
|
|
||||||
The exact diplomacy system can evolve later, but policy should be ready to consume those relationship states.
|
The exact diplomacy system can evolve later, but policy should be ready to consume those relationship states.
|
||||||
|
|
||||||
## Policy And Claims
|
## Policy And Claims
|
||||||
|
|
||||||
Claim objects at Lagrange points are visible and contestable.
|
Claim objects at valid construction anchors are visible and contestable.
|
||||||
|
|
||||||
Policy influences:
|
Policy influences:
|
||||||
|
|
||||||
@@ -186,7 +186,7 @@ The following rules should remain true unless deliberately revised:
|
|||||||
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
||||||
- policy constrains trade participation
|
- policy constrains trade participation
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
- [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md)
|
||||||
- policy interacts with claims, systems, and local access
|
- policy interacts with claims, systems, and local access
|
||||||
|
|
||||||
- [STATIONS.md](/home/jbourdon/repos/space-game/docs/STATIONS.md)
|
- [STATIONS.md](/home/jbourdon/repos/space-game/docs/STATIONS.md)
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ It should:
|
|||||||
- allow delivery by traders or support ships
|
- allow delivery by traders or support ships
|
||||||
- feed the actual building process
|
- feed the actual building process
|
||||||
|
|
||||||
This is especially important during station founding at claimed Lagrange points.
|
This is especially important during station founding at claimed construction anchors.
|
||||||
|
|
||||||
## Production Queues
|
## Production Queues
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ The current simulation behavior is driven mostly by:
|
|||||||
|
|
||||||
This gives the project a working prototype, but it does not yet reflect the design in:
|
This gives the project a working prototype, but it does not yet reflect the design in:
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
- [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md)
|
||||||
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
||||||
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
||||||
- [WORKFORCE.md](/home/jbourdon/repos/space-game/docs/WORKFORCE.md)
|
- [WORKFORCE.md](/home/jbourdon/repos/space-game/docs/WORKFORCE.md)
|
||||||
@@ -53,11 +53,11 @@ Target design:
|
|||||||
- `universe-space`
|
- `universe-space`
|
||||||
- `galaxy-space`
|
- `galaxy-space`
|
||||||
- `system-space`
|
- `system-space`
|
||||||
- `local-space`
|
- `localspace`
|
||||||
- node-attached local bubbles
|
- anchor-owned localspaces
|
||||||
- one structure per Lagrange point
|
- construction only at valid construction anchors
|
||||||
- warp between nodes
|
- warp between anchors within one system
|
||||||
- local gameplay inside bubbles
|
- local gameplay inside localspaces
|
||||||
|
|
||||||
Current state:
|
Current state:
|
||||||
|
|
||||||
@@ -66,16 +66,16 @@ Current state:
|
|||||||
- resource nodes exist, but only as extractable asteroid/gas sites
|
- resource nodes exist, but only as extractable asteroid/gas sites
|
||||||
- stations are positioned directly in system coordinates
|
- stations are positioned directly in system coordinates
|
||||||
- ships move by `Position` and `TargetPosition`
|
- ships move by `Position` and `TargetPosition`
|
||||||
- no first-class system node graph
|
- no first-class anchor graph
|
||||||
- no first-class local bubbles
|
- no first-class localspaces
|
||||||
- no claim entities
|
- no claim entities
|
||||||
- no construction-site entities
|
- no construction-site entities
|
||||||
|
|
||||||
Primary gaps:
|
Primary gaps:
|
||||||
|
|
||||||
- [`RuntimeModels.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/RuntimeModels.cs) has no `NodeRuntime`, `LocalBubbleRuntime`, `ClaimRuntime`, or `ConstructionSiteRuntime`.
|
- [`RuntimeModels.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/RuntimeModels.cs) has no `AnchorRuntime`, `LocalspaceRuntime`, `ClaimRuntime`, or `ConstructionSiteRuntime`.
|
||||||
- [`ScenarioLoader.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/ScenarioLoader.cs) computes station positions directly instead of creating node-backed placement.
|
- [`ScenarioLoader.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/ScenarioLoader.cs) computes station positions directly instead of creating anchor-backed placement.
|
||||||
- [`SimulationEngine.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/SimulationEngine.cs) still treats travel as raw coordinate movement rather than node-to-node transit between spaces.
|
- [`SimulationEngine.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/SimulationEngine.cs) still treats travel as raw coordinate movement rather than anchor-to-anchor transit between spaces.
|
||||||
|
|
||||||
### Command and Control
|
### Command and Control
|
||||||
|
|
||||||
@@ -202,12 +202,12 @@ Current state:
|
|||||||
|
|
||||||
- viewer consumes a flat snapshot of systems, resource nodes, stations, ships, and factions
|
- viewer consumes a flat snapshot of systems, resource nodes, stations, ships, and factions
|
||||||
- systems are strategic and visual, but not tied to explicit multi-space simulation layers
|
- systems are strategic and visual, but not tied to explicit multi-space simulation layers
|
||||||
- no contracts for bubbles, claims, construction sites, market orders, commanders, or policies
|
- no contracts for localspaces, claims, construction sites, market orders, commanders, or policies
|
||||||
|
|
||||||
Primary gaps:
|
Primary gaps:
|
||||||
|
|
||||||
- [`contracts.ts`](/home/jbourdon/repos/space-game/apps/viewer/src/contracts.ts) mirrors the old backend model.
|
- [`contracts.ts`](/home/jbourdon/repos/space-game/apps/viewer/src/contracts.ts) mirrors the old backend model.
|
||||||
- [`GameViewer.ts`](/home/jbourdon/repos/space-game/apps/viewer/src/GameViewer.ts) cannot render node graph, local bubbles, claims, or construction states because that data does not exist yet.
|
- [`GameViewer.ts`](/home/jbourdon/repos/space-game/apps/viewer/src/GameViewer.ts) cannot render an anchor graph, localspaces, claims, or construction states because that data does not exist yet.
|
||||||
|
|
||||||
## Subsystem Assessment
|
## Subsystem Assessment
|
||||||
|
|
||||||
@@ -226,7 +226,7 @@ These should evolve in place.
|
|||||||
|
|
||||||
- string-based ship state with explicit enums and structured movement state
|
- string-based ship state with explicit enums and structured movement state
|
||||||
- ship-only planning fields with commander/task-layer entities
|
- ship-only planning fields with commander/task-layer entities
|
||||||
- direct station placement with node, claim, and construction-site placement
|
- direct station placement with anchor, claim, and construction-site placement
|
||||||
- flat event records with typed event payloads
|
- flat event records with typed event payloads
|
||||||
|
|
||||||
### Avoid
|
### Avoid
|
||||||
@@ -246,8 +246,8 @@ Goal:
|
|||||||
Work:
|
Work:
|
||||||
|
|
||||||
- extend [`RuntimeModels.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/RuntimeModels.cs) with:
|
- extend [`RuntimeModels.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/RuntimeModels.cs) with:
|
||||||
- `NodeRuntime`
|
- `AnchorRuntime`
|
||||||
- `LocalBubbleRuntime`
|
- `LocalspaceRuntime`
|
||||||
- `CommanderRuntime`
|
- `CommanderRuntime`
|
||||||
- `ClaimRuntime`
|
- `ClaimRuntime`
|
||||||
- `ConstructionSiteRuntime`
|
- `ConstructionSiteRuntime`
|
||||||
@@ -261,33 +261,33 @@ Work:
|
|||||||
- commander kinds
|
- commander kinds
|
||||||
- add structured ship spatial state:
|
- add structured ship spatial state:
|
||||||
- current space layer
|
- current space layer
|
||||||
- current node
|
- current anchor
|
||||||
- current bubble
|
- current localspace
|
||||||
- current transit
|
- current transit
|
||||||
|
|
||||||
Why first:
|
Why first:
|
||||||
|
|
||||||
- every later change depends on this vocabulary existing in runtime state
|
- every later change depends on this vocabulary existing in runtime state
|
||||||
|
|
||||||
### Phase 2: Refactor Scenario and World Building Around Nodes
|
### Phase 2: Refactor Scenario and World Building Around Anchors
|
||||||
|
|
||||||
Goal:
|
Goal:
|
||||||
|
|
||||||
- make systems produce a real node graph with local bubbles and Lagrange-backed construction points
|
- make systems produce a real anchor graph with localspaces and supported construction anchors
|
||||||
|
|
||||||
Work:
|
Work:
|
||||||
|
|
||||||
- extend [`WorldDefinitions.cs`](/home/jbourdon/repos/space-game/apps/backend/Data/WorldDefinitions.cs) with authored node and claim-related definitions only where necessary
|
- extend [`WorldDefinitions.cs`](/home/jbourdon/repos/space-game/apps/backend/Data/WorldDefinitions.cs) with authored anchor and claim-related definitions only where necessary
|
||||||
- update [`ScenarioLoader.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/ScenarioLoader.cs) to:
|
- update [`ScenarioLoader.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/ScenarioLoader.cs) to:
|
||||||
- generate system-space nodes for stars, planets, moons, stations, and Lagrange points
|
- generate system-space anchors for stars, planets, moons, Lagrange points, and resource nodes where appropriate
|
||||||
- attach local bubbles to nodes
|
- attach localspaces to anchors
|
||||||
- translate existing `planetIndex` and `lagrangeSide` station hints into actual node IDs
|
- translate existing `planetIndex` and `lagrangeSide` station hints into actual anchor IDs
|
||||||
- stop treating station placement as an arbitrary coordinate
|
- stop treating station placement as an arbitrary coordinate
|
||||||
- preserve current authored content while migrating scenario interpretation
|
- preserve current authored content while migrating scenario interpretation
|
||||||
|
|
||||||
Why second:
|
Why second:
|
||||||
|
|
||||||
- movement, claims, construction, and viewer transitions all depend on real nodes
|
- movement, claims, construction, and viewer transitions all depend on real anchors
|
||||||
|
|
||||||
### Phase 3: Introduce Founding, Claims, and Construction Sites
|
### Phase 3: Introduce Founding, Claims, and Construction Sites
|
||||||
|
|
||||||
@@ -303,7 +303,7 @@ Work:
|
|||||||
- active
|
- active
|
||||||
- destroyed
|
- destroyed
|
||||||
- add construction-site runtime state with:
|
- add construction-site runtime state with:
|
||||||
- target node
|
- target anchor
|
||||||
- blueprint or constructible reference
|
- blueprint or constructible reference
|
||||||
- construction storage inventory
|
- construction storage inventory
|
||||||
- construction buy orders
|
- construction buy orders
|
||||||
@@ -315,7 +315,7 @@ Work:
|
|||||||
|
|
||||||
Why here:
|
Why here:
|
||||||
|
|
||||||
- it lets the code start reflecting the station and Lagrange rules without requiring the full economy rewrite first
|
- it lets the code start reflecting the construction-anchor rules without requiring the full economy rewrite first
|
||||||
|
|
||||||
### Phase 4: Replace Raw Travel With Space-Aware Movement
|
### Phase 4: Replace Raw Travel With Space-Aware Movement
|
||||||
|
|
||||||
@@ -326,8 +326,8 @@ Goal:
|
|||||||
Work:
|
Work:
|
||||||
|
|
||||||
- replace direct long-range movement with:
|
- replace direct long-range movement with:
|
||||||
- local thruster movement inside a bubble
|
- local thruster movement inside a localspace
|
||||||
- in-system warp between nodes
|
- in-system warp between anchors
|
||||||
- inter-system transit through gates or FTL
|
- inter-system transit through gates or FTL
|
||||||
- update ship runtime in [`RuntimeModels.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/RuntimeModels.cs)
|
- update ship runtime in [`RuntimeModels.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/RuntimeModels.cs)
|
||||||
- split movement logic in [`SimulationEngine.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/SimulationEngine.cs) into clearer controllers or subsystems
|
- split movement logic in [`SimulationEngine.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/SimulationEngine.cs) into clearer controllers or subsystems
|
||||||
@@ -335,7 +335,7 @@ Work:
|
|||||||
|
|
||||||
Why here:
|
Why here:
|
||||||
|
|
||||||
- this is the point where [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md) starts becoming real in the simulation
|
- this is the point where [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md) starts becoming real in the simulation
|
||||||
|
|
||||||
### Phase 5: Introduce Commanders and Task Layers
|
### Phase 5: Introduce Commanders and Task Layers
|
||||||
|
|
||||||
@@ -376,7 +376,7 @@ Work:
|
|||||||
|
|
||||||
Why here:
|
Why here:
|
||||||
|
|
||||||
- once commanders and nodes exist, this becomes a coherent system instead of isolated resource transfers
|
- once commanders and anchors exist, this becomes a coherent system instead of isolated resource transfers
|
||||||
|
|
||||||
### Phase 7: Upgrade Events and Streaming
|
### Phase 7: Upgrade Events and Streaming
|
||||||
|
|
||||||
@@ -391,7 +391,7 @@ Work:
|
|||||||
- universe
|
- universe
|
||||||
- galaxy
|
- galaxy
|
||||||
- system
|
- system
|
||||||
- local bubble
|
- localspace
|
||||||
- refactor [`WorldService.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/WorldService.cs) so subscriptions are observer-scoped rather than globally broadcast
|
- refactor [`WorldService.cs`](/home/jbourdon/repos/space-game/apps/backend/Simulation/WorldService.cs) so subscriptions are observer-scoped rather than globally broadcast
|
||||||
- support higher-space streaming with filtering into lower-space views
|
- support higher-space streaming with filtering into lower-space views
|
||||||
|
|
||||||
@@ -408,8 +408,8 @@ Goal:
|
|||||||
Work:
|
Work:
|
||||||
|
|
||||||
- extend [`contracts.ts`](/home/jbourdon/repos/space-game/apps/viewer/src/contracts.ts) for:
|
- extend [`contracts.ts`](/home/jbourdon/repos/space-game/apps/viewer/src/contracts.ts) for:
|
||||||
- nodes
|
- anchors
|
||||||
- local bubbles
|
- localspaces
|
||||||
- claims
|
- claims
|
||||||
- construction sites
|
- construction sites
|
||||||
- market orders
|
- market orders
|
||||||
@@ -417,8 +417,8 @@ Work:
|
|||||||
- richer ship movement state
|
- richer ship movement state
|
||||||
- update [`GameViewer.ts`](/home/jbourdon/repos/space-game/apps/viewer/src/GameViewer.ts) to support:
|
- update [`GameViewer.ts`](/home/jbourdon/repos/space-game/apps/viewer/src/GameViewer.ts) to support:
|
||||||
- galaxy/system/local scale transitions
|
- galaxy/system/local scale transitions
|
||||||
- node-centric system view
|
- anchor-centric system view
|
||||||
- local bubble detail
|
- localspace detail
|
||||||
- regime-aware ship rendering
|
- regime-aware ship rendering
|
||||||
|
|
||||||
Why last:
|
Why last:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
This document defines the intended role of ships in the simulation.
|
This document defines the intended role of ships in the simulation.
|
||||||
|
|
||||||
Ships are mobile actors that operate across the spatial model in [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md) under the authority of commanders defined in [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md).
|
Ships are mobile actors that operate across the spatial model in [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md) under the authority of commanders defined in [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md).
|
||||||
|
|
||||||
## Core Principles
|
## Core Principles
|
||||||
|
|
||||||
@@ -35,8 +35,8 @@ From a simulation point of view, the important distinction is not only hull cate
|
|||||||
|
|
||||||
Ships should move according to the layered spatial model:
|
Ships should move according to the layered spatial model:
|
||||||
|
|
||||||
- thrusters in `local-space`
|
- thrusters inside a `localspace`
|
||||||
- warp in `system-space`
|
- warp between anchors inside one system
|
||||||
- stargate or FTL for inter-system travel
|
- stargate or FTL for inter-system travel
|
||||||
|
|
||||||
Ships should not behave as if an entire system is one continuous local dogfighting field.
|
Ships should not behave as if an entire system is one continuous local dogfighting field.
|
||||||
@@ -82,7 +82,7 @@ Those capabilities should primarily come from fitted modules as described in [MO
|
|||||||
|
|
||||||
## Relationship To Other Documents
|
## Relationship To Other Documents
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
- [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md)
|
||||||
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
||||||
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
||||||
- [STATIONS.md](/home/jbourdon/repos/space-game/docs/STATIONS.md)
|
- [STATIONS.md](/home/jbourdon/repos/space-game/docs/STATIONS.md)
|
||||||
|
|||||||
518
docs/SPACES.md
518
docs/SPACES.md
@@ -1,518 +0,0 @@
|
|||||||
# Spaces
|
|
||||||
|
|
||||||
This document defines the intended spatial model for the project.
|
|
||||||
|
|
||||||
It is a gameplay and simulation document first. The viewer should expose these layers clearly, but it does not define them.
|
|
||||||
|
|
||||||
The core idea is that the world is not one continuous field of arbitrary movement. Instead, gameplay happens across nested spatial layers with different rules, scales, and valid actions.
|
|
||||||
|
|
||||||
See [DATA-MODEL.md](/home/jbourdon/repos/space-game/docs/DATA-MODEL.md) for the entity vocabulary that should represent these layers.
|
|
||||||
|
|
||||||
## Design Goals
|
|
||||||
|
|
||||||
The spatial model should support:
|
|
||||||
|
|
||||||
- EVE-like travel pacing and readability
|
|
||||||
- explicit transitions between tactical space and transit space
|
|
||||||
- local combat and interaction bubbles
|
|
||||||
- scalable simulation partitioning
|
|
||||||
- scalable replication and interest management
|
|
||||||
- future server-side sharding by local bubble if necessary
|
|
||||||
|
|
||||||
The intended feel is:
|
|
||||||
|
|
||||||
- local maneuvering is slow, deliberate, and readable
|
|
||||||
- in-system travel is warp-based, not long free-flight
|
|
||||||
- inter-system travel is explicit and infrastructural
|
|
||||||
- zooming the viewer reveals different valid abstractions of the same world
|
|
||||||
|
|
||||||
## Space Layers
|
|
||||||
|
|
||||||
The simulation is divided into four major space layers:
|
|
||||||
|
|
||||||
1. `universe-space`
|
|
||||||
2. `galaxy-space`
|
|
||||||
3. `system-space`
|
|
||||||
4. `local-space`
|
|
||||||
|
|
||||||
These are simulation layers, not just camera levels.
|
|
||||||
|
|
||||||
### `universe-space`
|
|
||||||
|
|
||||||
The broadest simulation layer.
|
|
||||||
|
|
||||||
This is where universe-wide state and events live, such as:
|
|
||||||
|
|
||||||
- global time
|
|
||||||
- global factions and diplomacy
|
|
||||||
- universe-scale event scheduling
|
|
||||||
- future crises, anomalies, migrations, or story events
|
|
||||||
|
|
||||||
`universe-space` is not primarily about positional navigation. It is the top-most simulation context.
|
|
||||||
|
|
||||||
### `galaxy-space`
|
|
||||||
|
|
||||||
The layer where star systems exist as spatially arranged world entities.
|
|
||||||
|
|
||||||
This is where the game models:
|
|
||||||
|
|
||||||
- system positions
|
|
||||||
- large-scale routes and proximity
|
|
||||||
- inter-system connectivity
|
|
||||||
- strategic movement between systems
|
|
||||||
|
|
||||||
Ships do not dogfight in `galaxy-space`. It is the strategic layer connecting systems.
|
|
||||||
|
|
||||||
### `system-space`
|
|
||||||
|
|
||||||
The layer inside a single star system where travel occurs between meaningful locations.
|
|
||||||
|
|
||||||
This is where the game models:
|
|
||||||
|
|
||||||
- stars
|
|
||||||
- planets
|
|
||||||
- moons
|
|
||||||
- stations
|
|
||||||
- structures
|
|
||||||
- gates
|
|
||||||
- resource locations, if they should be direct destinations
|
|
||||||
- Lagrange points
|
|
||||||
- travel relationships between these locations
|
|
||||||
|
|
||||||
`system-space` is the travel layer between local bubbles. Gameplay-wise, this can also be referred to as warp-space for ship movement inside a system.
|
|
||||||
|
|
||||||
### `local-space`
|
|
||||||
|
|
||||||
The tactical simulation bubble attached to a specific node.
|
|
||||||
|
|
||||||
This is where close interaction happens:
|
|
||||||
|
|
||||||
- thruster flight
|
|
||||||
- combat
|
|
||||||
- docking
|
|
||||||
- undocking
|
|
||||||
- mining
|
|
||||||
- construction
|
|
||||||
- rendezvous
|
|
||||||
- local hazards
|
|
||||||
|
|
||||||
Each `local-space` is an isolated simulation bubble attached to one node. Ships leave one local bubble, exist in `system-space` during warp transit, then enter another local bubble on arrival.
|
|
||||||
|
|
||||||
Local bubbles are also the intended future unit of simulation partitioning. A later runtime may move one or more bubbles to dedicated servers without changing the gameplay model.
|
|
||||||
|
|
||||||
## Nodes
|
|
||||||
|
|
||||||
A node is a meaningful location in `system-space` that owns a `local-space` bubble.
|
|
||||||
|
|
||||||
Examples of nodes:
|
|
||||||
|
|
||||||
- star
|
|
||||||
- planet
|
|
||||||
- moon
|
|
||||||
- station
|
|
||||||
- structure
|
|
||||||
- gate
|
|
||||||
- major resource location if desired
|
|
||||||
- each Lagrange point associated with a massive orbital
|
|
||||||
|
|
||||||
Each node should have:
|
|
||||||
|
|
||||||
- a stable identifier
|
|
||||||
- a parent system
|
|
||||||
- a type
|
|
||||||
- a position in `system-space`
|
|
||||||
- a local bubble radius
|
|
||||||
- optional parent/child relationships
|
|
||||||
- optional orbital metadata
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- a planet node orbits a star node
|
|
||||||
- a moon node orbits a planet node
|
|
||||||
- a station or structure node is built at a Lagrange point
|
|
||||||
|
|
||||||
## Lagrange Points
|
|
||||||
|
|
||||||
Each massive orbital should expose five Lagrange points:
|
|
||||||
|
|
||||||
- `L1`
|
|
||||||
- `L2`
|
|
||||||
- `L3`
|
|
||||||
- `L4`
|
|
||||||
- `L5`
|
|
||||||
|
|
||||||
These are valid nodes in `system-space`, each with its own `local-space`.
|
|
||||||
|
|
||||||
They should be computed from orbital relationships rather than authored by hand in most cases.
|
|
||||||
|
|
||||||
Construction rule:
|
|
||||||
|
|
||||||
- each Lagrange point can host exactly one structure
|
|
||||||
|
|
||||||
This scarcity is intentional. Lagrange points should be valuable strategic locations rather than interchangeable empty coordinates.
|
|
||||||
|
|
||||||
Recommended applicability:
|
|
||||||
|
|
||||||
- major orbitals should expose all five Lagrange points
|
|
||||||
- this should apply at least to sufficiently massive planets
|
|
||||||
- moons may expose none or fewer, depending on the final simulation rule
|
|
||||||
|
|
||||||
Lagrange points should not always be immediately buildable by default.
|
|
||||||
|
|
||||||
Recommended structure founding flow:
|
|
||||||
|
|
||||||
1. claim the Lagrange point
|
|
||||||
2. protect the claim until it matures
|
|
||||||
3. activate the claim
|
|
||||||
4. begin station construction
|
|
||||||
|
|
||||||
Lagrange points are useful for:
|
|
||||||
|
|
||||||
- staging areas
|
|
||||||
- logistics hubs
|
|
||||||
- military control points
|
|
||||||
- hidden or contested infrastructure
|
|
||||||
- future economy and navigation design
|
|
||||||
- station and structure placement
|
|
||||||
|
|
||||||
## Structures At Lagrange Points
|
|
||||||
|
|
||||||
Stations and other built structures should always be placed at Lagrange points.
|
|
||||||
|
|
||||||
This should be treated as a world rule, not merely a common pattern.
|
|
||||||
|
|
||||||
Implications:
|
|
||||||
|
|
||||||
- player and AI construction targets for major structures are Lagrange nodes
|
|
||||||
- stations do not occupy arbitrary free positions in system-space
|
|
||||||
- structure placement is tied to orbital geometry
|
|
||||||
- economically and militarily valuable station locations are legible from the system map
|
|
||||||
- each Lagrange point supports only one built structure
|
|
||||||
- to create another station, a faction must secure another valid location
|
|
||||||
|
|
||||||
This makes system geography more understandable and gives Lagrange points durable strategic meaning.
|
|
||||||
|
|
||||||
## Claiming Lagrange Points
|
|
||||||
|
|
||||||
Station construction should begin with an explicit claim on a Lagrange point.
|
|
||||||
|
|
||||||
The claim should behave like a vulnerable placed object.
|
|
||||||
|
|
||||||
Properties:
|
|
||||||
|
|
||||||
- it marks intent to occupy the Lagrange point
|
|
||||||
- it can be attacked or destroyed by enemies or pirates
|
|
||||||
- it requires an activation period before full construction can begin
|
|
||||||
|
|
||||||
Recommended founding sequence:
|
|
||||||
|
|
||||||
1. a faction places a claim object at the target Lagrange point
|
|
||||||
2. the claim survives for its activation time
|
|
||||||
3. the claim becomes active
|
|
||||||
4. station construction storage appears
|
|
||||||
5. the desired station design creates demand for required construction materials
|
|
||||||
6. constructor ships consume those materials to build the station
|
|
||||||
|
|
||||||
This makes Lagrange occupation contestable and visible.
|
|
||||||
|
|
||||||
## Local Bubbles
|
|
||||||
|
|
||||||
Each node owns exactly one local bubble.
|
|
||||||
|
|
||||||
A local bubble defines:
|
|
||||||
|
|
||||||
- the local simulation frame
|
|
||||||
- the tactical interaction radius
|
|
||||||
- the list of occupants
|
|
||||||
- the set of legal actions inside that space
|
|
||||||
- the future server authority boundary
|
|
||||||
|
|
||||||
Local bubbles should be treated as separate simulation contexts, not merely camera zoom-ins.
|
|
||||||
|
|
||||||
Rules:
|
|
||||||
|
|
||||||
- a ship in `local-space` belongs to exactly one bubble
|
|
||||||
- actions such as combat, docking, mining, and construction happen only inside a local bubble
|
|
||||||
- leaving a bubble is an explicit transition into `system-space`
|
|
||||||
- entering a destination bubble is an explicit arrival transition from `system-space`
|
|
||||||
|
|
||||||
See [COMBAT.md](/home/jbourdon/repos/space-game/docs/COMBAT.md) for the combat consequences of this rule.
|
|
||||||
|
|
||||||
## Movement Regimes
|
|
||||||
|
|
||||||
Ships do not move with one universal locomotion model. Their movement depends on their current space layer and travel regime.
|
|
||||||
|
|
||||||
Primary regimes:
|
|
||||||
|
|
||||||
- `local-flight`
|
|
||||||
- `warp`
|
|
||||||
- `stargate-transit`
|
|
||||||
- `ftl-transit`
|
|
||||||
|
|
||||||
### `local-flight`
|
|
||||||
|
|
||||||
Used inside `local-space`.
|
|
||||||
|
|
||||||
Characteristics:
|
|
||||||
|
|
||||||
- uses normal thrusters
|
|
||||||
- supports fine positioning
|
|
||||||
- supports docking and undocking
|
|
||||||
- supports combat
|
|
||||||
- supports mining and close interaction
|
|
||||||
|
|
||||||
This regime should feel heavy, readable, and tactical.
|
|
||||||
|
|
||||||
### `warp`
|
|
||||||
|
|
||||||
Used in `system-space` to travel between nodes in the same system.
|
|
||||||
|
|
||||||
Characteristics:
|
|
||||||
|
|
||||||
- exits one local bubble
|
|
||||||
- enters spool-up
|
|
||||||
- travels through `system-space`
|
|
||||||
- drops out at a destination node
|
|
||||||
- enters the destination local bubble
|
|
||||||
|
|
||||||
The intended feel is close to EVE, but with spool-up emphasis rather than strict align mechanics.
|
|
||||||
|
|
||||||
Recommended warp phases:
|
|
||||||
|
|
||||||
1. `warp-spooling`
|
|
||||||
2. `in-warp`
|
|
||||||
3. `warp-dropout`
|
|
||||||
|
|
||||||
During warp, ships should not be treated as locally maneuvering units.
|
|
||||||
|
|
||||||
### `stargate-transit`
|
|
||||||
|
|
||||||
Used to travel between systems through infrastructure.
|
|
||||||
|
|
||||||
Characteristics:
|
|
||||||
|
|
||||||
- starts from a gate node in local-space
|
|
||||||
- transitions through a gate sequence
|
|
||||||
- arrives at a gate node in another system
|
|
||||||
|
|
||||||
This should be a discrete inter-system travel mode, not merely a very long warp.
|
|
||||||
|
|
||||||
### `ftl-transit`
|
|
||||||
|
|
||||||
Used by ships that have their own FTL capability.
|
|
||||||
|
|
||||||
Characteristics:
|
|
||||||
|
|
||||||
- explicit inter-system travel regime
|
|
||||||
- likely stronger costs, constraints, or cooldowns than gates
|
|
||||||
- may bypass some infrastructure requirements
|
|
||||||
|
|
||||||
This remains distinct from in-system warp.
|
|
||||||
|
|
||||||
## Valid Actions By Space
|
|
||||||
|
|
||||||
### In `universe-space`
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- resolve universe-scale events
|
|
||||||
- evaluate global strategic conditions
|
|
||||||
- future narrative or crisis systems
|
|
||||||
|
|
||||||
### In `galaxy-space`
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- reason about systems
|
|
||||||
- evaluate strategic routes
|
|
||||||
- choose inter-system destinations
|
|
||||||
|
|
||||||
### In `system-space`
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- choose destination nodes
|
|
||||||
- execute warp travel
|
|
||||||
- evaluate node-to-node movement
|
|
||||||
|
|
||||||
### In `local-space`
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- maneuver with thrusters
|
|
||||||
- dock
|
|
||||||
- undock
|
|
||||||
- mine
|
|
||||||
- fight
|
|
||||||
- build
|
|
||||||
- transfer cargo locally
|
|
||||||
|
|
||||||
Rule of thumb:
|
|
||||||
|
|
||||||
- tactical interaction belongs to `local-space`
|
|
||||||
- transit belongs to `system-space`
|
|
||||||
- strategic topology belongs to `galaxy-space`
|
|
||||||
|
|
||||||
## Ship Spatial State
|
|
||||||
|
|
||||||
Ships should eventually be modeled with explicit spatial state, not just one position plus one target position.
|
|
||||||
|
|
||||||
At minimum, a ship should know:
|
|
||||||
|
|
||||||
- current `systemId`
|
|
||||||
- current `spaceLayer`
|
|
||||||
- current `nodeId`, if in local-space
|
|
||||||
- current `localPosition`, if in local-space
|
|
||||||
- current transit data, if in warp or inter-system travel
|
|
||||||
|
|
||||||
Recommended movement/runtime states include:
|
|
||||||
|
|
||||||
- `idle`
|
|
||||||
- `local-flight`
|
|
||||||
- `warp-spooling`
|
|
||||||
- `in-warp`
|
|
||||||
- `warp-dropout`
|
|
||||||
- `docking`
|
|
||||||
- `docked`
|
|
||||||
- `undocking`
|
|
||||||
- `using-stargate`
|
|
||||||
- `ftl-spooling`
|
|
||||||
- `in-ftl`
|
|
||||||
- `arriving-from-ftl`
|
|
||||||
|
|
||||||
This spatial model works together with the command and economy documents:
|
|
||||||
|
|
||||||
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
|
||||||
- defines who decides and delegates
|
|
||||||
|
|
||||||
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
|
||||||
- defines how stations and factions participate economically
|
|
||||||
|
|
||||||
- [SHIPS.md](/home/jbourdon/repos/space-game/docs/SHIPS.md)
|
|
||||||
- defines ship-side capability and behavior
|
|
||||||
|
|
||||||
- [STATIONS.md](/home/jbourdon/repos/space-game/docs/STATIONS.md)
|
|
||||||
- defines station-side role and responsibility
|
|
||||||
|
|
||||||
## Orders And Destinations
|
|
||||||
|
|
||||||
Orders should target valid destinations in the spatial model.
|
|
||||||
|
|
||||||
In practice, that means ships should target nodes and bubbles rather than arbitrary points across an entire system.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- travel to node
|
|
||||||
- warp to node
|
|
||||||
- dock at structure in node
|
|
||||||
- mine in node
|
|
||||||
- use gate to system
|
|
||||||
- jump to system
|
|
||||||
|
|
||||||
This makes planning clearer and keeps traversal tied to the intended world structure.
|
|
||||||
|
|
||||||
## Viewer Expectations
|
|
||||||
|
|
||||||
The viewer should reveal these layers as the player zooms or changes context.
|
|
||||||
|
|
||||||
Desired viewer scales:
|
|
||||||
|
|
||||||
1. `universe/galaxy view`
|
|
||||||
2. `system view`
|
|
||||||
3. `local view`
|
|
||||||
|
|
||||||
### `universe/galaxy view`
|
|
||||||
|
|
||||||
Shows:
|
|
||||||
|
|
||||||
- systems
|
|
||||||
- strategic relationships
|
|
||||||
- large-scale motion and events
|
|
||||||
|
|
||||||
### `system view`
|
|
||||||
|
|
||||||
Shows:
|
|
||||||
|
|
||||||
- nodes inside one system
|
|
||||||
- warp destinations
|
|
||||||
- route structure
|
|
||||||
- high-level in-system movement
|
|
||||||
|
|
||||||
This view should not pretend that all tactical detail is always present.
|
|
||||||
|
|
||||||
### `local view`
|
|
||||||
|
|
||||||
Shows:
|
|
||||||
|
|
||||||
- one node bubble in detail
|
|
||||||
- ships maneuvering with thrusters
|
|
||||||
- combat, docking, mining, and construction
|
|
||||||
|
|
||||||
Viewer zoom should expose valid abstractions of simulation truth rather than inventing unrelated presentation layers.
|
|
||||||
|
|
||||||
## Interest Management
|
|
||||||
|
|
||||||
This spatial model naturally supports interest management for streaming.
|
|
||||||
|
|
||||||
The general rule should be:
|
|
||||||
|
|
||||||
- always stream context from higher spaces
|
|
||||||
- filter detailed context from lower spaces based on interest
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- a client viewing a local bubble still needs relevant system, galaxy, and universe context
|
|
||||||
- a client viewing a system does not need full-fidelity tactical events from every local bubble
|
|
||||||
- a client viewing the galaxy does not need continuous local combat state for every bubble
|
|
||||||
|
|
||||||
Suggested replication principle:
|
|
||||||
|
|
||||||
- high-layer events are broad but low-detail
|
|
||||||
- low-layer events are narrow but high-detail
|
|
||||||
|
|
||||||
Example filtering:
|
|
||||||
|
|
||||||
- `universe-space` events can be broadcast widely
|
|
||||||
- `galaxy-space` events can be scoped by region or strategic relevance
|
|
||||||
- `system-space` events can be scoped by current or observed system
|
|
||||||
- `local-space` events can be scoped by the specific bubble being observed or occupied
|
|
||||||
|
|
||||||
This should make future multiplayer scaling easier than a flat world-wide stream.
|
|
||||||
|
|
||||||
## Recommended Backend Direction
|
|
||||||
|
|
||||||
The backend should move toward:
|
|
||||||
|
|
||||||
- explicit node definitions
|
|
||||||
- explicit local bubble definitions
|
|
||||||
- explicit ship travel regimes
|
|
||||||
- explicit transitions between local, system, and inter-system movement
|
|
||||||
|
|
||||||
Recommended progression:
|
|
||||||
|
|
||||||
1. define nodes and local bubbles in world/runtime contracts
|
|
||||||
2. compute and include Lagrange points for major orbitals
|
|
||||||
3. refactor ship movement around regimes instead of free system-local travel
|
|
||||||
4. restrict tactical actions to local-space
|
|
||||||
5. expose regime and bubble membership in replication contracts
|
|
||||||
6. redesign viewer zoom and replication around these layers
|
|
||||||
|
|
||||||
## Invariants
|
|
||||||
|
|
||||||
These rules should remain true unless there is a very deliberate design reason to break them:
|
|
||||||
|
|
||||||
- every local bubble belongs to exactly one node
|
|
||||||
- every ship is in exactly one major movement regime at a time
|
|
||||||
- ships in different local bubbles are not co-located, even if they are in the same system
|
|
||||||
- movement inside local-space uses thrusters
|
|
||||||
- movement between nodes inside a system uses warp
|
|
||||||
- movement between systems uses stargates or ship FTL
|
|
||||||
- combat, docking, mining, and construction happen only in local-space
|
|
||||||
- viewer abstractions should map back to real simulation layers
|
|
||||||
- every structure occupies exactly one Lagrange point
|
|
||||||
- every Lagrange point supports at most one structure
|
|
||||||
- a station site must be claimed before full construction begins
|
|
||||||
|
|
||||||
## Open Follow-Up Documents
|
|
||||||
|
|
||||||
This document is part of the official design set listed in [DESIGN.md](/home/jbourdon/repos/space-game/docs/DESIGN.md).
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
This document defines the intended role of stations in the simulation.
|
This document defines the intended role of stations in the simulation.
|
||||||
|
|
||||||
Stations are persistent nodes in the world that own local bubbles, provide services, participate in the economy, and act through station commanders.
|
Stations are persistent constructions in the world that live in a localspace, provide services, participate in the economy, and act through station commanders.
|
||||||
|
|
||||||
## Core Principles
|
## Core Principles
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ A station lives at one location.
|
|||||||
|
|
||||||
It does not spread across multiple construction points.
|
It does not spread across multiple construction points.
|
||||||
|
|
||||||
Station growth happens by adding modules to the existing station at its current Lagrange point.
|
Station growth happens by adding modules to the existing station at its current construction location.
|
||||||
|
|
||||||
To create another station, a faction needs:
|
To create another station, a faction needs:
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ To create another station, a faction needs:
|
|||||||
- another station
|
- another station
|
||||||
- another station commander
|
- another station commander
|
||||||
|
|
||||||
Before station construction itself, the faction should also secure the site through the Lagrange-point claim process defined in [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md).
|
Before station construction itself, the faction should secure the chosen site through the appropriate local claim or founding process defined by the universe model.
|
||||||
|
|
||||||
Station identity and capability should primarily come from module composition, as described in [MODULES.md](/home/jbourdon/repos/space-game/docs/MODULES.md).
|
Station identity and capability should primarily come from module composition, as described in [MODULES.md](/home/jbourdon/repos/space-game/docs/MODULES.md).
|
||||||
|
|
||||||
@@ -44,13 +44,15 @@ Stations may serve as:
|
|||||||
|
|
||||||
## Spatial Role
|
## Spatial Role
|
||||||
|
|
||||||
Stations are nodes in `system-space` with their own `local-space`.
|
Stations are constructions that exist inside one `localspace`.
|
||||||
|
|
||||||
Stations and other built structures should always be located at Lagrange points.
|
Stations may be built at valid construction anchors such as:
|
||||||
|
|
||||||
Each Lagrange point can hold only one structure.
|
- planets
|
||||||
|
- moons
|
||||||
|
- Lagrange points
|
||||||
|
|
||||||
Their local bubbles are where:
|
Their localspaces are where:
|
||||||
|
|
||||||
- docking happens
|
- docking happens
|
||||||
- cargo transfer happens
|
- cargo transfer happens
|
||||||
@@ -58,13 +60,13 @@ Their local bubbles are where:
|
|||||||
- local construction happens
|
- local construction happens
|
||||||
- player and AI interaction happens
|
- player and AI interaction happens
|
||||||
|
|
||||||
Local-space defense and contestation are described further in [COMBAT.md](/home/jbourdon/repos/space-game/docs/COMBAT.md).
|
Localspace defense and contestation are described further in [COMBAT.md](/home/jbourdon/repos/space-game/docs/COMBAT.md).
|
||||||
|
|
||||||
## Founding A Station
|
## Founding A Station
|
||||||
|
|
||||||
The intended founding flow is:
|
The intended founding flow is:
|
||||||
|
|
||||||
1. claim a valid Lagrange point
|
1. claim or secure a valid construction anchor
|
||||||
2. wait for the claim to activate
|
2. wait for the claim to activate
|
||||||
3. create station construction storage
|
3. create station construction storage
|
||||||
4. publish buy orders for the required construction materials
|
4. publish buy orders for the required construction materials
|
||||||
@@ -141,15 +143,9 @@ Actual participation in trade and docking should still be policy-controlled. See
|
|||||||
|
|
||||||
Station ownership is not local-bubble exclusive.
|
Station ownership is not local-bubble exclusive.
|
||||||
|
|
||||||
The important hard rule is:
|
Ownership does not imply one faction per localspace.
|
||||||
|
|
||||||
- one structure per Lagrange point
|
Friendly or otherwise permitted factions may build stations within the same system so long as they use different valid construction locations.
|
||||||
|
|
||||||
Not:
|
|
||||||
|
|
||||||
- one faction per local bubble
|
|
||||||
|
|
||||||
This means friendly or otherwise permitted factions may build stations within the same system, so long as they use different valid locations.
|
|
||||||
|
|
||||||
## Services
|
## Services
|
||||||
|
|
||||||
@@ -181,7 +177,7 @@ Population growth and decline follow the rules in [WORKFORCE.md](/home/jbourdon/
|
|||||||
|
|
||||||
## Relationship To Other Documents
|
## Relationship To Other Documents
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
- [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md)
|
||||||
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
||||||
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
- [ECONOMY.md](/home/jbourdon/repos/space-game/docs/ECONOMY.md)
|
||||||
- [SHIPS.md](/home/jbourdon/repos/space-game/docs/SHIPS.md)
|
- [SHIPS.md](/home/jbourdon/repos/space-game/docs/SHIPS.md)
|
||||||
|
|||||||
@@ -55,12 +55,12 @@ Orders should survive replanning better than tasks.
|
|||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
- travel to node
|
- travel to anchor
|
||||||
- dock at station
|
- dock at station
|
||||||
- claim Lagrange point
|
- claim construction anchor
|
||||||
- build station here
|
- build station here
|
||||||
- escort this ship
|
- escort this ship
|
||||||
- defend this bubble
|
- defend this localspace
|
||||||
|
|
||||||
Orders are the main override layer above routine autonomous behavior.
|
Orders are the main override layer above routine autonomous behavior.
|
||||||
|
|
||||||
@@ -240,13 +240,13 @@ This prevents autonomous loops from becoming self-destructive.
|
|||||||
|
|
||||||
## Space-Aware Tasking
|
## Space-Aware Tasking
|
||||||
|
|
||||||
Tasks should respect the spatial model in [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md).
|
Tasks should respect the spatial model in [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md).
|
||||||
|
|
||||||
That means:
|
That means:
|
||||||
|
|
||||||
- local maneuvering is distinct from warp
|
- local maneuvering is distinct from warp
|
||||||
- docking is local-space work
|
- docking is localspace work
|
||||||
- cargo transfer is local-space work
|
- cargo transfer is localspace work
|
||||||
- inter-system travel is distinct from in-system travel
|
- inter-system travel is distinct from in-system travel
|
||||||
|
|
||||||
## Policy-Aware Tasking
|
## Policy-Aware Tasking
|
||||||
@@ -305,7 +305,7 @@ The following rules should remain true unless deliberately revised:
|
|||||||
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
- [COMMANDERS.md](/home/jbourdon/repos/space-game/docs/COMMANDERS.md)
|
||||||
- defines who decides and delegates
|
- defines who decides and delegates
|
||||||
|
|
||||||
- [SPACES.md](/home/jbourdon/repos/space-game/docs/SPACES.md)
|
- [UNIVERSE-MODEL.md](/home/jbourdon/repos/space-game/docs/UNIVERSE-MODEL.md)
|
||||||
- defines where tasks can occur
|
- defines where tasks can occur
|
||||||
|
|
||||||
- [POLICIES.md](/home/jbourdon/repos/space-game/docs/POLICIES.md)
|
- [POLICIES.md](/home/jbourdon/repos/space-game/docs/POLICIES.md)
|
||||||
|
|||||||
@@ -469,6 +469,13 @@ It also gives a cleaner authority boundary for later scaling:
|
|||||||
- one localspace can become one simulation partition
|
- one localspace can become one simulation partition
|
||||||
- one system can remain a higher-level strategic container
|
- one system can remain a higher-level strategic container
|
||||||
|
|
||||||
|
This supports:
|
||||||
|
|
||||||
|
- interest management
|
||||||
|
- tactical culling
|
||||||
|
- isolated combat and logistics spaces
|
||||||
|
- future sharding without redefining the gameplay model
|
||||||
|
|
||||||
## Non-Goals
|
## Non-Goals
|
||||||
|
|
||||||
This model does not require:
|
This model does not require:
|
||||||
|
|||||||
Reference in New Issue
Block a user