Split viewer and simulation into separate apps

This commit is contained in:
2026-03-12 17:18:29 -04:00
parent 0a76c60ab1
commit 2fb90162ef
45 changed files with 1982 additions and 6600 deletions

18
shared/data/balance.json Normal file
View File

@@ -0,0 +1,18 @@
{
"yPlane": 4,
"arrivalThreshold": 16,
"miningRate": 28,
"transferRate": 56,
"dockingDuration": 1.2,
"undockDistance": 42,
"energy": {
"idleDrain": 0.7,
"moveDrain": 1.8,
"warpDrain": 7,
"shipRechargeRate": 10,
"stationSolarCharge": 5
},
"fuel": {
"warpDrain": 4.5
}
}

View File

@@ -0,0 +1,72 @@
[
{
"id": "trade-hub",
"label": "Trade Hub",
"category": "station",
"color": "#8bd3ff",
"radius": 20,
"dockingCapacity": 4,
"storage": { "container": 1200, "manufactured": 800 },
"modules": ["habitat-ring", "docking-clamps", "container-bay"]
},
{
"id": "refinery",
"label": "Refining Station",
"category": "refining",
"color": "#ffb86c",
"radius": 24,
"dockingCapacity": 3,
"storage": { "bulk-solid": 2000, "manufactured": 1000 },
"modules": ["docking-clamps", "refinery-stack", "bulk-bay", "fabricator-array"]
},
{
"id": "farm-ring",
"label": "Farm Station",
"category": "farm",
"color": "#92ef8a",
"radius": 22,
"dockingCapacity": 2,
"storage": { "bulk-liquid": 600, "container": 400 },
"modules": ["habitat-ring", "fabricator-array", "container-bay"]
},
{
"id": "manufactory",
"label": "Orbital Manufactory",
"category": "station",
"color": "#8df0d2",
"radius": 24,
"dockingCapacity": 3,
"storage": { "manufactured": 2200, "container": 1600 },
"modules": ["fabricator-array", "fabricator-array", "container-bay", "docking-clamps"]
},
{
"id": "shipyard",
"label": "Orbital Shipyard",
"category": "shipyard",
"color": "#d0a2ff",
"radius": 28,
"dockingCapacity": 5,
"storage": { "manufactured": 1800, "container": 1200 },
"modules": ["docking-clamps", "fabricator-array", "habitat-ring"]
},
{
"id": "defense-grid",
"label": "Defense Platform",
"category": "defense",
"color": "#ff7a95",
"radius": 18,
"dockingCapacity": 1,
"storage": { "manufactured": 300 },
"modules": ["turret-grid", "command-bridge"]
},
{
"id": "stargate",
"label": "Stargate",
"category": "gate",
"color": "#76f0ff",
"radius": 34,
"dockingCapacity": 0,
"storage": { "manufactured": 2400, "container": 800 },
"modules": ["ftl-core", "fabricator-array", "docking-clamps"]
}
]

104
shared/data/items.json Normal file
View File

@@ -0,0 +1,104 @@
[
{
"id": "ore",
"label": "Raw Ore",
"storage": "bulk-solid",
"summary": "Unprocessed asteroid ore used as the main industrial feedstock."
},
{
"id": "refined-metals",
"label": "Refined Metals",
"storage": "manufactured",
"summary": "Processed structural metals used by stations and shipyards."
},
{
"id": "hull-sections",
"label": "Hull Sections",
"storage": "manufactured",
"summary": "Prefabricated structural assemblies for ships and stations."
},
{
"id": "ammo-crates",
"label": "Ammo Crates",
"storage": "container",
"summary": "Containerized magazines for turrets, launchers, and point defense."
},
{
"id": "naval-guns",
"label": "Naval Guns",
"storage": "manufactured",
"summary": "Shipboard turret and cannon assemblies."
},
{
"id": "ship-equipment",
"label": "Ship Equipment",
"storage": "container",
"summary": "Shield emitters, avionics, cooling loops, and service kits."
},
{
"id": "ship-parts",
"label": "Ship Parts",
"storage": "manufactured",
"summary": "High-value integration kits for hull fitting and final assembly."
},
{
"id": "gas",
"label": "Volatile Gas",
"storage": "bulk-gas",
"summary": "Compressed gas reserves for future chemical and fuel chains."
},
{
"id": "water",
"label": "Water",
"storage": "bulk-liquid",
"summary": "Life-support and agricultural input."
},
{
"id": "drone-parts",
"label": "Drone Parts",
"storage": "container",
"summary": "Containerized industrial freight."
},
{
"id": "trade-hub-kit",
"label": "Trade Hub Kit",
"storage": "manufactured",
"summary": "Deployable prefab package for a trade hub station."
},
{
"id": "refinery-kit",
"label": "Refinery Kit",
"storage": "manufactured",
"summary": "Deployable prefab package for a refining station."
},
{
"id": "farm-ring-kit",
"label": "Farm Ring Kit",
"storage": "manufactured",
"summary": "Deployable prefab package for a farm station."
},
{
"id": "manufactory-kit",
"label": "Manufactory Kit",
"storage": "manufactured",
"summary": "Deployable prefab package for an orbital manufactory."
},
{
"id": "shipyard-kit",
"label": "Shipyard Kit",
"storage": "manufactured",
"summary": "Deployable prefab package for an orbital shipyard."
},
{
"id": "defense-grid-kit",
"label": "Defense Grid Kit",
"storage": "manufactured",
"summary": "Deployable prefab package for a defense platform."
},
{
"id": "stargate-kit",
"label": "Stargate Kit",
"storage": "manufactured",
"summary": "Deployable prefab package for a stargate structure."
}
]

74
shared/data/modules.json Normal file
View File

@@ -0,0 +1,74 @@
[
{
"id": "command-bridge",
"label": "Command Bridge",
"category": "bridge",
"summary": "Core ship control and crew systems."
},
{
"id": "ion-drive",
"label": "Ion Drive",
"category": "engine",
"summary": "Sub-light propulsion package."
},
{
"id": "ftl-core",
"label": "FTL Core",
"category": "ftl",
"summary": "Spool and warp inter-system engine."
},
{
"id": "strip-miner",
"label": "Strip Miner",
"category": "mining",
"summary": "Excavation laser and ore intake."
},
{
"id": "bulk-bay",
"label": "Bulk Cargo Bay",
"category": "cargo-bulk",
"summary": "Reinforced storage for raw solids."
},
{
"id": "container-bay",
"label": "Container Hold",
"category": "cargo-container",
"summary": "Standardized freight racks."
},
{
"id": "docking-clamps",
"label": "Docking Clamps",
"category": "dock",
"summary": "Docking collar and transfer arms."
},
{
"id": "carrier-bay",
"label": "Carrier Bay",
"category": "dock",
"summary": "Internal hangar decks and launch recovery systems."
},
{
"id": "refinery-stack",
"label": "Refinery Stack",
"category": "refinery",
"summary": "Ore cracking and metal separation."
},
{
"id": "turret-grid",
"label": "Turret Grid",
"category": "defense",
"summary": "Close defense batteries."
},
{
"id": "habitat-ring",
"label": "Habitat Ring",
"category": "habitat",
"summary": "Crew quarters and service modules."
},
{
"id": "fabricator-array",
"label": "Fabricator Array",
"category": "production",
"summary": "Assembly lines for manufactured goods."
}
]

258
shared/data/recipes.json Normal file
View File

@@ -0,0 +1,258 @@
[
{
"id": "ore-refining",
"label": "Ore Refining",
"facilityCategory": "refining",
"duration": 8,
"priority": 100,
"inputs": [
{ "itemId": "ore", "amount": 60 }
],
"outputs": [
{ "itemId": "refined-metals", "amount": 60 }
]
},
{
"id": "ore-reclamation",
"label": "Ore Reclamation",
"facilityCategory": "station",
"duration": 7,
"priority": 8,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "refined-metals", "amount": 16 }
],
"outputs": [
{ "itemId": "ore", "amount": 24 }
]
},
{
"id": "gas-synthesis",
"label": "Gas Synthesis",
"facilityCategory": "station",
"duration": 6,
"priority": 12,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "refined-metals", "amount": 10 }
],
"outputs": [
{ "itemId": "gas", "amount": 20 }
]
},
{
"id": "water-reclamation",
"label": "Water Reclamation",
"facilityCategory": "farm",
"duration": 6,
"priority": 14,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "gas", "amount": 8 }
],
"outputs": [
{ "itemId": "water", "amount": 18 }
]
},
{
"id": "drone-parts-assembly",
"label": "Drone Parts Assembly",
"facilityCategory": "station",
"duration": 7,
"priority": 18,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "refined-metals", "amount": 12 },
{ "itemId": "ship-equipment", "amount": 6 }
],
"outputs": [
{ "itemId": "drone-parts", "amount": 16 }
]
},
{
"id": "hull-fabrication",
"label": "Hull Fabrication",
"facilityCategory": "station",
"duration": 10,
"priority": 40,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "refined-metals", "amount": 70 }
],
"outputs": [
{ "itemId": "hull-sections", "amount": 35 }
]
},
{
"id": "ammo-fabrication",
"label": "Ammo Fabrication",
"facilityCategory": "station",
"duration": 6,
"priority": 34,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "refined-metals", "amount": 24 }
],
"outputs": [
{ "itemId": "ammo-crates", "amount": 30 }
]
},
{
"id": "gun-assembly",
"label": "Gun Assembly",
"facilityCategory": "station",
"duration": 9,
"priority": 32,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "refined-metals", "amount": 36 }
],
"outputs": [
{ "itemId": "naval-guns", "amount": 12 }
]
},
{
"id": "equipment-assembly",
"label": "Equipment Assembly",
"facilityCategory": "station",
"duration": 11,
"priority": 30,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "refined-metals", "amount": 28 },
{ "itemId": "water", "amount": 8 }
],
"outputs": [
{ "itemId": "ship-equipment", "amount": 18 }
]
},
{
"id": "ship-parts-integration",
"label": "Ship Parts Integration",
"facilityCategory": "station",
"duration": 14,
"priority": 50,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "hull-sections", "amount": 24 },
{ "itemId": "naval-guns", "amount": 6 },
{ "itemId": "ship-equipment", "amount": 10 }
],
"outputs": [
{ "itemId": "ship-parts", "amount": 20 }
]
},
{
"id": "trade-hub-assembly",
"label": "Trade Hub Assembly",
"facilityCategory": "station",
"duration": 18,
"priority": 24,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "ship-parts", "amount": 26 },
{ "itemId": "ship-equipment", "amount": 16 },
{ "itemId": "drone-parts", "amount": 10 }
],
"outputs": [
{ "itemId": "trade-hub-kit", "amount": 1 }
]
},
{
"id": "refinery-assembly",
"label": "Refinery Assembly",
"facilityCategory": "station",
"duration": 20,
"priority": 26,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "ship-parts", "amount": 32 },
{ "itemId": "hull-sections", "amount": 24 },
{ "itemId": "ship-equipment", "amount": 14 }
],
"outputs": [
{ "itemId": "refinery-kit", "amount": 1 }
]
},
{
"id": "farm-ring-assembly",
"label": "Farm Ring Assembly",
"facilityCategory": "station",
"duration": 18,
"priority": 22,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "ship-parts", "amount": 22 },
{ "itemId": "ship-equipment", "amount": 18 },
{ "itemId": "water", "amount": 22 }
],
"outputs": [
{ "itemId": "farm-ring-kit", "amount": 1 }
]
},
{
"id": "manufactory-assembly",
"label": "Manufactory Assembly",
"facilityCategory": "station",
"duration": 22,
"priority": 28,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "ship-parts", "amount": 34 },
{ "itemId": "hull-sections", "amount": 16 },
{ "itemId": "ship-equipment", "amount": 18 }
],
"outputs": [
{ "itemId": "manufactory-kit", "amount": 1 }
]
},
{
"id": "shipyard-assembly",
"label": "Shipyard Assembly",
"facilityCategory": "station",
"duration": 26,
"priority": 30,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "ship-parts", "amount": 42 },
{ "itemId": "hull-sections", "amount": 30 },
{ "itemId": "naval-guns", "amount": 10 }
],
"outputs": [
{ "itemId": "shipyard-kit", "amount": 1 }
]
},
{
"id": "defense-grid-assembly",
"label": "Defense Grid Assembly",
"facilityCategory": "station",
"duration": 16,
"priority": 20,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "ship-parts", "amount": 18 },
{ "itemId": "naval-guns", "amount": 12 },
{ "itemId": "ammo-crates", "amount": 18 }
],
"outputs": [
{ "itemId": "defense-grid-kit", "amount": 1 }
]
},
{
"id": "stargate-assembly",
"label": "Stargate Assembly",
"facilityCategory": "station",
"duration": 34,
"priority": 36,
"requiredModules": ["fabricator-array"],
"inputs": [
{ "itemId": "ship-parts", "amount": 60 },
{ "itemId": "hull-sections", "amount": 44 },
{ "itemId": "ship-equipment", "amount": 26 },
{ "itemId": "naval-guns", "amount": 8 }
],
"outputs": [
{ "itemId": "stargate-kit", "amount": 1 }
]
}
]

43
shared/data/scenario.json Normal file
View File

@@ -0,0 +1,43 @@
{
"initialStations": [
{ "constructibleId": "trade-hub", "systemId": "helios", "planetIndex": 1, "lagrangeSide": 1 },
{ "constructibleId": "refinery", "systemId": "helios", "planetIndex": 2, "lagrangeSide": -1 },
{ "constructibleId": "farm-ring", "systemId": "helios", "planetIndex": 1, "lagrangeSide": -1 },
{ "constructibleId": "shipyard", "systemId": "helios", "planetIndex": 3, "lagrangeSide": 1 },
{ "constructibleId": "defense-grid", "systemId": "helios", "planetIndex": 2, "lagrangeSide": 1 }
],
"shipFormations": [
{ "shipId": "carrier", "count": 1, "center": [120, 0, 60], "systemId": "helios" },
{ "shipId": "frigate", "count": 6, "center": [180, 0, 90], "systemId": "helios" },
{ "shipId": "destroyer", "count": 3, "center": [260, 0, 120], "systemId": "helios" },
{ "shipId": "cruiser", "count": 2, "center": [220, 0, 180], "systemId": "helios" },
{ "shipId": "hauler", "count": 4, "center": [310, 0, -150], "systemId": "helios" },
{ "shipId": "frigate", "count": 4, "center": [4350, 0, 560], "systemId": "perseus" },
{ "shipId": "cruiser", "count": 1, "center": [4430, 0, 640], "systemId": "perseus" },
{ "shipId": "miner", "count": 6, "center": [4620, 0, 700], "systemId": "perseus" }
],
"patrolRoutes": [
{
"systemId": "helios",
"points": [
[180, 0, 120],
[360, 0, -140],
[620, 0, 210],
[260, 0, 320]
]
},
{
"systemId": "perseus",
"points": [
[4580, 0, 740],
[4750, 0, 480],
[5020, 0, 860],
[4680, 0, 980]
]
}
],
"miningDefaults": {
"nodeSystemId": "perseus",
"refinerySystemId": "helios"
}
}

98
shared/data/ships.json Normal file
View File

@@ -0,0 +1,98 @@
[
{
"id": "frigate",
"label": "Vanguard Frigate",
"role": "military",
"shipClass": "frigate",
"speed": 50,
"ftlSpeed": 3200,
"spoolTime": 2.2,
"cargoCapacity": 0,
"color": "#7ed4ff",
"hullColor": "#1f4f78",
"size": 4,
"maxHealth": 100,
"modules": ["command-bridge", "ion-drive", "ftl-core", "turret-grid"]
},
{
"id": "destroyer",
"label": "Bulwark Destroyer",
"role": "military",
"shipClass": "destroyer",
"speed": 34,
"ftlSpeed": 2900,
"spoolTime": 2.8,
"cargoCapacity": 0,
"color": "#ff8f70",
"hullColor": "#6a2e26",
"size": 7,
"maxHealth": 240,
"modules": ["command-bridge", "ion-drive", "ftl-core", "turret-grid", "turret-grid"]
},
{
"id": "cruiser",
"label": "Aegis Cruiser",
"role": "military",
"shipClass": "cruiser",
"speed": 28,
"ftlSpeed": 2750,
"spoolTime": 3.1,
"cargoCapacity": 0,
"color": "#9ec1ff",
"hullColor": "#314562",
"size": 10,
"maxHealth": 340,
"modules": ["command-bridge", "ion-drive", "ftl-core", "turret-grid", "turret-grid", "docking-clamps"]
},
{
"id": "carrier",
"label": "Citadel Carrier",
"role": "military",
"shipClass": "capital",
"speed": 18,
"ftlSpeed": 2500,
"spoolTime": 4.1,
"cargoCapacity": 0,
"color": "#c6f4ff",
"hullColor": "#35586d",
"size": 16,
"maxHealth": 900,
"modules": ["command-bridge", "ion-drive", "ftl-core", "carrier-bay", "carrier-bay", "turret-grid", "habitat-ring"],
"dockingCapacity": 6,
"dockingClasses": ["frigate", "destroyer", "cruiser"]
},
{
"id": "hauler",
"label": "Atlas Hauler",
"role": "transport",
"shipClass": "industrial",
"speed": 22,
"ftlSpeed": 2600,
"spoolTime": 3.3,
"cargoCapacity": 180,
"cargoKind": "container",
"cargoItemId": "drone-parts",
"color": "#b0ff8d",
"hullColor": "#365f2a",
"size": 8,
"maxHealth": 180,
"modules": ["command-bridge", "ion-drive", "ftl-core", "container-bay", "docking-clamps"]
},
{
"id": "miner",
"label": "Prospector Miner",
"role": "mining",
"shipClass": "industrial",
"speed": 26,
"ftlSpeed": 2400,
"spoolTime": 3.1,
"cargoCapacity": 120,
"cargoKind": "bulk-solid",
"cargoItemId": "ore",
"color": "#ffdd75",
"hullColor": "#68552b",
"size": 6,
"maxHealth": 150,
"modules": ["command-bridge", "ion-drive", "ftl-core", "strip-miner", "bulk-bay", "docking-clamps"]
}
]

49
shared/data/systems.json Normal file
View File

@@ -0,0 +1,49 @@
[
{
"id": "helios",
"label": "Helios Reach",
"position": [0, 0, 0],
"starColor": "#ffd27a",
"starGlow": "#ffb14a",
"starSize": 56,
"gravityWellRadius": 210,
"asteroidField": {
"decorationCount": 180,
"radiusOffset": 330,
"radiusVariance": 90,
"heightVariance": 18
},
"resourceNodes": [],
"planets": [
{ "label": "Icarus", "orbitRadius": 180, "orbitSpeed": 0.18, "size": 20, "color": "#d4a373", "tilt": 0.2 },
{ "label": "Viridia", "orbitRadius": 300, "orbitSpeed": 0.11, "size": 30, "color": "#58a36c", "tilt": -0.4 },
{ "label": "Aster", "orbitRadius": 460, "orbitSpeed": 0.08, "size": 38, "color": "#6ea7d4", "tilt": 0.3, "hasRing": true },
{ "label": "Noctis", "orbitRadius": 670, "orbitSpeed": 0.05, "size": 50, "color": "#6958a8", "tilt": -0.15 }
]
},
{
"id": "perseus",
"label": "Perseus Gate",
"position": [4400, 0, 620],
"starColor": "#9dc6ff",
"starGlow": "#66a0ff",
"starSize": 48,
"gravityWellRadius": 230,
"asteroidField": {
"decorationCount": 180,
"radiusOffset": 330,
"radiusVariance": 90,
"heightVariance": 18
},
"resourceNodes": [
{ "angle": 0.45, "radiusOffset": 360, "oreAmount": 3000, "itemId": "ore", "shardCount": 7 },
{ "angle": 2.544395102, "radiusOffset": 360, "oreAmount": 3000, "itemId": "ore", "shardCount": 7 },
{ "angle": 4.638790205, "radiusOffset": 360, "oreAmount": 3000, "itemId": "ore", "shardCount": 7 }
],
"planets": [
{ "label": "Talos", "orbitRadius": 200, "orbitSpeed": 0.15, "size": 24, "color": "#c48f6a", "tilt": 0.18 },
{ "label": "Cygnus", "orbitRadius": 360, "orbitSpeed": 0.1, "size": 34, "color": "#4f84c4", "tilt": -0.22, "hasRing": true },
{ "label": "Rhea", "orbitRadius": 540, "orbitSpeed": 0.07, "size": 44, "color": "#8f8fb0", "tilt": 0.08 }
]
}
]