{ "_readme": "Master of Vega — rule set. Compiled and validated by src/games/mastervega/VegaRules.js; every number here is tunable without touching code. Techs form six independent linear chains (one per field); tier doubles as the topological rank. Frame indexes are APPEND-ONLY: never renumber, only add at the end, or existing drop-in artwork silently shifts.", "version": 1, "techFields": [ { "id": "computers", "name": "Computers", "desc": "Targeting, scanners, espionage and research throughput.", "iconFrame": 0 }, { "id": "construction","name": "Construction", "desc": "Hull armour, damage control and industrial efficiency.", "iconFrame": 1 }, { "id": "forcefields", "name": "Force Fields", "desc": "Deflector shields, planetary shields and cloaking.", "iconFrame": 2 }, { "id": "planetology", "name": "Planetology", "desc": "Terraforming, ecology and colonising hostile worlds.", "iconFrame": 3 }, { "id": "propulsion", "name": "Propulsion", "desc": "Engine speed and the fuel range that lights up the map.", "iconFrame": 4 }, { "id": "weapons", "name": "Weapons", "desc": "Beams, missiles and planet-cracking bombs.", "iconFrame": 5 } ], "_techsReadme": "prereqs is always 0 or 1 entries, pointing at the previous tech in the same field. tier must equal the topological rank. effects is a free-form bag read by VegaShips (weapon/armor/shield/engine/fuelRange/targeting) and VegaLogic (everything else).", "techs": [ { "id": "electroniccomputer", "name": "Electronic Computer", "field": "computers", "tier": 0, "prereqs": [], "cost": 60, "iconFrame": 0, "desc": "Mark I battle computer. +1 to hit.", "effects": { "targeting": 1 } }, { "id": "battlescanner", "name": "Battle Scanner", "field": "computers", "tier": 1, "prereqs": ["electroniccomputer"], "cost": 150, "iconFrame": 1, "desc": "Reveals enemy fleet composition and adds combat initiative.", "effects": { "initiative": 2, "scanRange": 1 } }, { "id": "securecommarray", "name": "Secure Comm Array", "field": "computers", "tier": 1, "prereqs": ["electroniccomputer"], "cost": 150, "iconFrame": 72, "desc": "Encrypted fleet channels. Enemy spies have a harder time reading your signals.", "effects": { "counterEspionage": 14, "scanRange": 1 } }, { "id": "optroniccomputer", "name": "Optronic Computer", "field": "computers", "tier": 2, "prereqs": ["battlescanner"], "cost": 400, "iconFrame": 2, "desc": "Mark II battle computer. +2 to hit.", "effects": { "targeting": 2 } }, { "id": "neuralscanner", "name": "Neural Scanner", "field": "computers", "tier": 3, "prereqs": ["optroniccomputer"], "cost": 900, "iconFrame": 3, "desc": "Deep-scan interrogation. Espionage missions far more likely.", "effects": { "espionage": 15 } }, { "id": "tachyoncomputer", "name": "Tachyon Computer", "field": "computers", "tier": 3, "prereqs": ["optroniccomputer"], "cost": 900, "iconFrame": 60, "desc": "Overclocked targeting matrix, no spycraft. +4 to hit.", "effects": { "targeting": 4 } }, { "id": "positroniccomputer", "name": "Positronic Computer", "field": "computers", "tier": 4, "prereqs": ["neuralscanner"], "cost": 1800, "iconFrame": 4, "desc": "Mark III battle computer. +3 to hit.", "effects": { "targeting": 3 }, "gnnHeadline": true }, { "id": "cybersecuritylink", "name": "Cyber Security Link", "field": "computers", "tier": 5, "prereqs": ["positroniccomputer"], "cost": 3200, "iconFrame": 5, "desc": "Hardened colony networks. Enemy spies rarely get through.", "effects": { "counterEspionage": 25 } }, { "id": "adaptiveresearchalgorithms", "name": "Adaptive Research Algorithms", "field": "computers", "tier": 5, "prereqs": ["positroniccomputer"], "cost": 3200, "iconFrame": 73, "desc": "Machine-learning heuristics comb through lab data around the clock. Research output up 10%, though the network offers no extra hardening against spies.", "effects": { "researchMult": 1.1 } }, { "id": "emissionsguidance", "name": "Emissions Guidance", "field": "computers", "tier": 6, "prereqs": ["cybersecuritylink"], "cost": 5400, "iconFrame": 6, "desc": "Mark IV battle computer. +4 to hit.", "effects": { "targeting": 4 } }, { "id": "oracleinterface", "name": "Oracle Interface", "field": "computers", "tier": 7, "prereqs": ["emissionsguidance"], "cost": 8600, "iconFrame": 7, "desc": "Mark V battle computer, and research output climbs sharply.", "effects": { "targeting": 5, "researchMult": 1.15 } }, { "id": "omniscanarray", "name": "Omniscan Array", "field": "computers", "tier": 7, "prereqs": ["emissionsguidance"], "cost": 8600, "iconFrame": 61, "desc": "Full-spectrum battle sensors. +5 to hit and always strikes first.", "effects": { "targeting": 5, "initiative": 5 } }, { "id": "cybertroniccomputer","name": "Cybertronic Computer", "field": "computers", "tier": 8, "prereqs": ["oracleinterface"], "cost": 13000, "iconFrame": 8, "desc": "Mark VI battle computer. +6 to hit.", "effects": { "targeting": 6 }, "gnnHeadline": true }, { "id": "deepfieldsensorarray","name": "Deep Field Sensor Array", "field": "computers", "tier": 8, "prereqs": ["oracleinterface"], "cost": 13000, "iconFrame": 74, "desc": "Long-baseline sensor net. Fleets see further and react faster, at the cost of raw fire-control precision.", "effects": { "scanRange": 2, "initiative": 2 } }, { "id": "galacticcybernet", "name": "Galactic Cybernet", "field": "computers", "tier": 9, "prereqs": ["cybertroniccomputer"], "cost": 20000, "iconFrame": 9, "desc": "Mark VII battle computer and an empire-wide research grid.", "effects": { "targeting": 7, "researchMult": 1.3 }, "gnnHeadline": true }, { "id": "reinforcedhull", "name": "Reinforced Hull", "field": "construction", "tier": 0, "prereqs": [], "cost": 60, "iconFrame": 10, "desc": "Cross-braced spaceframes. Hulls absorb 25% more damage.", "effects": { "armor": { "name": "Reinforced", "hpMult": 1.25 } } }, { "id": "duralloyarmor", "name": "Duralloy Armour", "field": "construction", "tier": 1, "prereqs": ["reinforcedhull"], "cost": 160, "iconFrame": 11, "desc": "Duralloy plating. Hulls absorb 50% more damage.", "effects": { "armor": { "name": "Duralloy", "hpMult": 1.5 } } }, { "id": "modularhullframes", "name": "Modular Hull Frames", "field": "construction", "tier": 1, "prereqs": ["reinforcedhull"], "cost": 160, "iconFrame": 75, "desc": "Standardised hull sections. Ships refit for less, though the plating itself is no thicker than reinforced hull.", "effects": { "refitCostMult": 0.85 } }, { "id": "improvedindustrial", "name": "Improved Industrial Tech","field": "construction","tier": 2,"prereqs": ["duralloyarmor"], "cost": 420, "iconFrame": 12, "desc": "Factories cost 20% less to build and to run.", "effects": { "factoryCostMult": 0.8 } }, { "id": "nanitehullsealant", "name": "Nanite Hull Sealant", "field": "construction", "tier": 2, "prereqs": ["duralloyarmor"], "cost": 420, "iconFrame": 62, "desc": "Self-sealing microfractures. Ships repair 2% of their hull between combat rounds.", "effects": { "repairPerRound": 0.02 } }, { "id": "zortriumarmor", "name": "Zortrium Armour", "field": "construction", "tier": 3, "prereqs": ["improvedindustrial"], "cost": 950, "iconFrame": 13, "desc": "Zortrium plating. Hulls absorb 80% more damage.", "effects": { "armor": { "name": "Zortrium", "hpMult": 1.8 } } }, { "id": "autorepairunit", "name": "Automated Repair Unit", "field": "construction", "tier": 4, "prereqs": ["zortriumarmor"], "cost": 1900, "iconFrame": 14, "desc": "Ships repair 3% of their hull between combat rounds.", "effects": { "repairPerRound": 0.03 } }, { "id": "roboticassemblylines","name": "Robotic Assembly Lines", "field": "construction", "tier": 4, "prereqs": ["zortriumarmor"], "cost": 1900, "iconFrame": 76, "desc": "Fully robotic production lines undercut even Improved Industrial Tech. Factories cost 25% less to build and run, though the yards spend no effort on hull repair drones.", "effects": { "factoryCostMult": 0.75 }, "gnnHeadline": true }, { "id": "andriumarmor", "name": "Andrium Armour", "field": "construction", "tier": 5, "prereqs": ["autorepairunit"], "cost": 3400, "iconFrame": 15, "desc": "Andrium plating. Hulls absorb 110% more damage.", "effects": { "armor": { "name": "Andrium", "hpMult": 2.1 } } }, { "id": "damagecontrol", "name": "Advanced Damage Control","field": "construction","tier": 6, "prereqs": ["andriumarmor"], "cost": 5600, "iconFrame": 16, "desc": "Damaged ships rejoin the line faster and cost less to refit.", "effects": { "repairPerRound": 0.06, "refitCostMult": 0.7 } }, { "id": "redundantlifesupport","name": "Redundant Life Support","field": "construction", "tier": 6, "prereqs": ["andriumarmor"], "cost": 5600, "iconFrame": 63, "desc": "Backup systems patch hulls faster in the heat of battle. Ships repair 7% each round.", "effects": { "repairPerRound": 0.07 } }, { "id": "tritaniumarmor", "name": "Tritanium Armour", "field": "construction", "tier": 7, "prereqs": ["damagecontrol"], "cost": 9000, "iconFrame": 17, "desc": "Tritanium plating. Hulls absorb 150% more damage.", "effects": { "armor": { "name": "Tritanium", "hpMult": 2.5 } } }, { "id": "adamantiumarmor", "name": "Adamantium Armour", "field": "construction", "tier": 8, "prereqs": ["tritaniumarmor"], "cost": 14000, "iconFrame": 18, "desc": "Adamantium plating. Hulls absorb 200% more damage.", "effects": { "armor": { "name": "Adamantium", "hpMult": 3.0 } }, "gnnHeadline": true }, { "id": "autonomousrepairswarms","name": "Autonomous Repair Swarms", "field": "construction", "tier": 8, "prereqs": ["tritaniumarmor"], "cost": 14000, "iconFrame": 77, "desc": "Self-directing nanite swarms patch hull breaches faster than any yard crew. Ships repair 9% of their hull between combat rounds, though plating stays at Tritanium grade.", "effects": { "repairPerRound": 0.09 } }, { "id": "neutroniumarmor", "name": "Neutronium Armour", "field": "construction", "tier": 9, "prereqs": ["adamantiumarmor"], "cost": 21000, "iconFrame": 19, "desc": "Degenerate-matter plating. Hulls absorb 260% more damage.", "effects": { "armor": { "name": "Neutronium", "hpMult": 3.6 } }, "gnnHeadline": true }, { "id": "deflectori", "name": "Class I Deflector Shield","field": "forcefields","tier": 0, "prereqs": [], "cost": 80, "iconFrame": 20, "desc": "Absorbs 1 point from every incoming hit.", "effects": { "shield": 1 } }, { "id": "personalshield", "name": "Personal Shield", "field": "forcefields", "tier": 1, "prereqs": ["deflectori"], "cost": 200, "iconFrame": 21, "desc": "Shielded infantry. +10 to ground combat on attack and defence.","effects": { "groundAttack": 10, "groundDefense": 10 } }, { "id": "pointdefensegrid", "name": "Point-Defense Grid", "field": "forcefields", "tier": 1, "prereqs": ["deflectori"], "cost": 200, "iconFrame": 64, "desc": "Automated point-defense turrets. Fleets react a beat faster in combat.", "effects": { "initiative": 1 } }, { "id": "deflectoriii", "name": "Class III Deflector", "field": "forcefields", "tier": 2, "prereqs": ["personalshield"], "cost": 500, "iconFrame": 22, "desc": "Absorbs 2 points from every incoming hit.", "effects": { "shield": 2 } }, { "id": "modulardeflectorcoils","name": "Modular Deflector Coils","field": "forcefields", "tier": 2, "prereqs": ["personalshield"], "cost": 500, "iconFrame": 78, "desc": "Standardised shield generators drop into any hull. Fleets refit for 15% less, though the coils themselves absorb no extra damage.", "effects": { "refitCostMult": 0.85 } }, { "id": "planetaryshield5", "name": "Planetary Shield V", "field": "forcefields", "tier": 3, "prereqs": ["deflectoriii"], "cost": 1100, "iconFrame": 23, "desc": "Colonies shrug off 5 points from every orbital bombardment.", "effects": { "planetaryShield": 5 } }, { "id": "deflectorv", "name": "Class V Deflector", "field": "forcefields", "tier": 4, "prereqs": ["planetaryshield5"], "cost": 2100, "iconFrame": 24, "desc": "Absorbs 3 points from every incoming hit.", "effects": { "shield": 3 } }, { "id": "stealthfield", "name": "Stealth Field", "field": "forcefields", "tier": 5, "prereqs": ["deflectorv"], "cost": 3600, "iconFrame": 25, "desc": "Cloaked hulls. Fleets move unseen and strike first.", "effects": { "cloaked": true, "initiative": 3 }, "gnnHeadline": true }, { "id": "colonialdeflectorgrid","name": "Colonial Deflector Grid","field": "forcefields", "tier": 5, "prereqs": ["deflectorv"], "cost": 3600, "iconFrame": 79, "desc": "Extends deflector coverage down to the colony surface. Absorbs 8 points from every orbital bombardment, though fleets stay visible on enemy scopes.", "effects": { "planetaryShield": 8 } }, { "id": "deflectorvii", "name": "Class VII Deflector", "field": "forcefields", "tier": 6, "prereqs": ["stealthfield"], "cost": 6000, "iconFrame": 26, "desc": "Absorbs 5 points from every incoming hit.", "effects": { "shield": 5 } }, { "id": "planetaryshield15", "name": "Planetary Shield XV", "field": "forcefields", "tier": 7, "prereqs": ["deflectorvii"], "cost": 9500, "iconFrame": 27, "desc": "Colonies shrug off 15 points from every orbital bombardment.", "effects": { "planetaryShield": 15 } }, { "id": "deepshieldharmonics","name": "Deep Shield Harmonics", "field": "forcefields", "tier": 7, "prereqs": ["deflectorvii"], "cost": 9500, "iconFrame": 65, "desc": "Ship-side shield regenerators. Absorbs 6 points from every incoming hit.", "effects": { "shield": 6 } }, { "id": "deflectorx", "name": "Class X Deflector", "field": "forcefields", "tier": 8, "prereqs": ["planetaryshield15"], "cost": 15000, "iconFrame": 28, "desc": "Absorbs 7 points from every incoming hit.", "effects": { "shield": 7 }, "gnnHeadline": true }, { "id": "harmonicdeflectorarray","name": "Harmonic Deflector Array","field": "forcefields","tier": 8, "prereqs": ["planetaryshield15"], "cost": 15000, "iconFrame": 80, "desc": "Shield harmonics tuned to scramble infiltration attempts. +18 counter-espionage empire-wide, though the array trades depth of coverage for breadth.", "effects": { "counterEspionage": 18 } }, { "id": "blackholegenerator", "name": "Black Hole Generator", "field": "forcefields", "tier": 9, "prereqs": ["deflectorx"], "cost": 22000, "iconFrame": 29, "desc": "Folds enemy hulls into a singularity. Devastating in battle.", "effects": { "shield": 9, "singularity": true }, "gnnHeadline": true }, { "id": "ecorestoration", "name": "Ecological Restoration","field": "planetology", "tier": 0, "prereqs": [], "cost": 70, "iconFrame": 30, "desc": "Industrial waste costs 25% less to clean up.", "effects": { "wasteMult": 0.75 } }, { "id": "controlledbarren", "name": "Controlled Barren Environment","field": "planetology","tier": 1,"prereqs": ["ecorestoration"], "cost": 180, "iconFrame": 31, "desc": "Sealed habitats let you colonise barren worlds.", "effects": { "colonizeHostility": 1 } }, { "id": "preemptivewastefiltration","name": "Preemptive Waste Filtration","field": "planetology","tier": 1,"prereqs": ["ecorestoration"], "cost": 180, "iconFrame": 81, "desc": "Filters industrial runoff before it ever reaches the surface. Waste cleanup costs another 15% less, though it does nothing to open up barren worlds.", "effects": { "wasteMult": 0.65 } }, { "id": "enhancedeco", "name": "Enhanced Eco Restoration","field": "planetology","tier": 2, "prereqs": ["controlledbarren"], "cost": 460, "iconFrame": 32, "desc": "Industrial waste costs 50% less to clean up.", "effects": { "wasteMult": 0.5 } }, { "id": "biosphereresearchinitiative","name": "Biosphere Research Initiative","field": "planetology","tier": 2,"prereqs": ["controlledbarren"], "cost": 460, "iconFrame": 82, "desc": "Terraforming survey data doubles as pure science. Research output up 8%, though colonies keep producing waste at the old rate.", "effects": { "researchMult": 1.08 } }, { "id": "controlleddead", "name": "Controlled Dead Environment","field": "planetology","tier": 3,"prereqs": ["enhancedeco"], "cost": 1000, "iconFrame": 33, "desc": "Colonise dead worlds stripped of atmosphere.", "effects": { "colonizeHostility": 2 } }, { "id": "soilenrichment", "name": "Soil Enrichment", "field": "planetology", "tier": 4, "prereqs": ["controlleddead"], "cost": 2000, "iconFrame": 34, "desc": "Every colony supports 15 more population.", "effects": { "maxPopBonus": 15 } }, { "id": "efficientwastereclamation","name": "Efficient Waste Reclamation","field": "planetology","tier": 4,"prereqs": ["controlleddead"], "cost": 2000, "iconFrame": 66, "desc": "Industrial waste is recycled almost as fast as it's produced. Cleanup costs 40% less.", "effects": { "wasteMult": 0.6 } }, { "id": "controlledinferno", "name": "Controlled Inferno Environment","field": "planetology","tier": 5,"prereqs": ["soilenrichment"], "cost": 3500, "iconFrame": 35, "desc": "Colonise inferno worlds.", "effects": { "colonizeHostility": 3 } }, { "id": "atmosphericterraforming","name": "Atmospheric Terraforming","field": "planetology","tier": 6,"prereqs": ["controlledinferno"], "cost": 5800, "iconFrame": 36, "desc": "Every colony supports 25 more population.", "effects": { "maxPopBonus": 25 }, "gnnHeadline": true }, { "id": "xenobotanicalresearchstations","name": "Xenobotanical Research Stations","field": "planetology","tier": 6,"prereqs": ["controlledinferno"], "cost": 5800, "iconFrame": 83, "desc": "Terraforming labs double as pure research outposts. Research output up 10%, though colonies grow no larger for it.", "effects": { "researchMult": 1.1 } }, { "id": "controlledtoxic", "name": "Controlled Toxic Environment","field": "planetology","tier": 7,"prereqs": ["atmosphericterraforming"],"cost": 9200,"iconFrame": 37,"desc": "Colonise toxic worlds.", "effects": { "colonizeHostility": 4 } }, { "id": "advancedsoil", "name": "Advanced Soil Enrichment","field": "planetology","tier": 8, "prereqs": ["controlledtoxic"], "cost": 14500, "iconFrame": 38, "desc": "Every colony supports 40 more population.", "effects": { "maxPopBonus": 40 } }, { "id": "deepterraforming", "name": "Deep Terraforming", "field": "planetology", "tier": 8, "prereqs": ["controlledtoxic"], "cost": 14500, "iconFrame": 67, "desc": "Near-total reclamation. Industrial waste costs 65% less to clean up.", "effects": { "wasteMult": 0.35 }, "gnnHeadline": true }, { "id": "controlledradiated", "name": "Controlled Radiated Environment","field": "planetology","tier": 9,"prereqs": ["advancedsoil"], "cost": 21500, "iconFrame": 39, "desc": "Colonise radiated worlds. Nowhere in the galaxy is closed.", "effects": { "colonizeHostility": 5, "maxPopBonus": 15 }, "gnnHeadline": true }, { "id": "nuclearengines", "name": "Nuclear Engines", "field": "propulsion", "tier": 0, "prereqs": [], "cost": 60, "iconFrame": 40, "desc": "Warp 1 drives. Fleets crawl, but they cross the dark.", "effects": { "engine": { "name": "Nuclear", "speed": 1 } } }, { "id": "deuteriumcells", "name": "Deuterium Fuel Cells", "field": "propulsion", "tier": 1, "prereqs": ["nuclearengines"], "cost": 170, "iconFrame": 41, "desc": "Fuel range 7 parsecs. The map opens a little.", "effects": { "fuelRange": 7 } }, { "id": "reactionthrusters", "name": "Reaction Thrusters", "field": "propulsion", "tier": 1, "prereqs": ["nuclearengines"], "cost": 170, "iconFrame": 68, "desc": "Snap-fire manoeuvring jets. Fleets react a beat faster in combat, though range stays short.", "effects": { "initiative": 1 } }, { "id": "fusiondrive", "name": "Fusion Drive", "field": "propulsion", "tier": 2, "prereqs": ["deuteriumcells"], "cost": 440, "iconFrame": 42, "desc": "Warp 2 drives.", "effects": { "engine": { "name": "Fusion", "speed": 2 } } }, { "id": "auxiliaryfueltanks", "name": "Auxiliary Fuel Tanks", "field": "propulsion", "tier": 2, "prereqs": ["deuteriumcells"], "cost": 440, "iconFrame": 84, "desc": "Bolt-on tankage extends the envelope. Fuel range 8 parsecs, though the hull still tops out at Warp 1.", "effects": { "fuelRange": 8 } }, { "id": "iridiumcells", "name": "Iridium Fuel Cells", "field": "propulsion", "tier": 3, "prereqs": ["fusiondrive"], "cost": 980, "iconFrame": 43, "desc": "Fuel range 9 parsecs.", "effects": { "fuelRange": 9 } }, { "id": "sublightdrive", "name": "Sub-Light Drive", "field": "propulsion", "tier": 4, "prereqs": ["iridiumcells"], "cost": 2000, "iconFrame": 44, "desc": "Warp 3 drives.", "effects": { "engine": { "name": "Sub-Light", "speed": 3 } } }, { "id": "uridiumcells", "name": "Uridium Fuel Cells", "field": "propulsion", "tier": 5, "prereqs": ["sublightdrive"], "cost": 3600, "iconFrame": 45, "desc": "Fuel range 12 parsecs. Half the galaxy lights up.", "effects": { "fuelRange": 12 } }, { "id": "tachyondrivecoils", "name": "Tachyon Drive Coils", "field": "propulsion", "tier": 5, "prereqs": ["sublightdrive"], "cost": 3600, "iconFrame": 69, "desc": "Precognitive drive telemetry. A further edge in combat tempo, at the cost of range.", "effects": { "initiative": 2 } }, { "id": "impulsedrive", "name": "Impulse Drive", "field": "propulsion", "tier": 6, "prereqs": ["uridiumcells"], "cost": 5900, "iconFrame": 46, "desc": "Warp 4 drives.", "effects": { "engine": { "name": "Impulse", "speed": 4 } } }, { "id": "deepscanrelays", "name": "Deep Scan Relays", "field": "propulsion", "tier": 6, "prereqs": ["uridiumcells"], "cost": 5900, "iconFrame": 85, "desc": "Automated relay buoys dropped along your travel lanes extend detection well past the fleet itself. +2 scan range empire-wide, though the drive itself stays at Warp 3.", "effects": { "scanRange": 2 } }, { "id": "thoriumcells", "name": "Thorium Fuel Cells", "field": "propulsion", "tier": 7, "prereqs": ["impulsedrive"], "cost": 9400, "iconFrame": 47, "desc": "Fuel range 18 parsecs. Range stops being a constraint.", "effects": { "fuelRange": 18 } }, { "id": "interphaseddrive", "name": "Interphased Drive", "field": "propulsion", "tier": 8, "prereqs": ["thoriumcells"], "cost": 14800, "iconFrame": 48, "desc": "Warp 5 drives.", "effects": { "engine": { "name": "Interphased", "speed": 5 } }, "gnnHeadline": true }, { "id": "deepspacefuelcells", "name": "Deep-Space Fuel Cells", "field": "propulsion", "tier": 8, "prereqs": ["thoriumcells"], "cost": 14800, "iconFrame": 86, "desc": "The last word in tankage before hyperspace renders range moot. Fuel range 22 parsecs, though the hull stays at Warp 4.", "effects": { "fuelRange": 22 } }, { "id": "hyperspacecomms", "name": "Hyperspace Communications","field": "propulsion","tier": 9,"prereqs": ["interphaseddrive"], "cost": 21000, "iconFrame": 49, "desc": "Warp 6 drives and fleets redirected in mid-flight.", "effects": { "engine": { "name": "Hyperspace", "speed": 6 }, "redirectInFlight": true }, "gnnHeadline": true }, { "id": "lasercannon", "name": "Laser Cannon", "field": "weapons", "tier": 0, "prereqs": [], "cost": 60, "iconFrame": 50, "desc": "The first real gun. 1-4 damage.", "effects": { "weapon": { "id": "laser", "name": "Laser Cannon", "kind": "beam", "min": 1, "max": 4, "shots": 1, "space": 2, "cost": 8 } }, "gnnHeadline": true }, { "id": "hypervrockets", "name": "Hyper-V Rockets", "field": "weapons", "tier": 1, "prereqs": ["lasercannon"], "cost": 160, "iconFrame": 51, "desc": "Cheap standoff missiles. 6 damage, 2 salvoes.", "effects": { "weapon": { "id": "hyperv", "name": "Hyper-V Rocket", "kind": "missile", "min": 6, "max": 6, "shots": 4, "space": 4, "cost": 10 } } }, { "id": "pulselaser", "name": "Pulse Laser", "field": "weapons", "tier": 1, "prereqs": ["lasercannon"], "cost": 160, "iconFrame": 87, "desc": "A faster-cycling beam. 2-5 damage every round, forever — no rack to run empty.", "effects": { "weapon": { "id": "pulselaser", "name": "Pulse Laser", "kind": "beam", "min": 2, "max": 5, "shots": 1, "space": 3, "cost": 9 } } }, { "id": "neutronpellet", "name": "Neutron Pellet Gun", "field": "weapons", "tier": 2, "prereqs": ["hypervrockets"], "cost": 430, "iconFrame": 52, "desc": "Shield-piercing pellets. 2-6 damage.", "effects": { "weapon": { "id": "pellet", "name": "Neutron Pellet Gun", "kind": "beam", "min": 2, "max": 6, "shots": 1, "space": 3, "cost": 12, "shieldPierce": 2 } } }, { "id": "protontorpedoes", "name": "Proton Torpedoes", "field": "weapons", "tier": 2, "prereqs": ["hypervrockets"], "cost": 430, "iconFrame": 70, "desc": "Slow, but heavier warheads than Hyper-V. 10 damage, 2 salvoes.", "effects": { "weapon": { "id": "protontorpedo", "name": "Proton Torpedo", "kind": "missile", "min": 10, "max": 10, "shots": 2, "space": 5, "cost": 14 } } }, { "id": "ioncannon", "name": "Ion Cannon", "field": "weapons", "tier": 3, "prereqs": ["neutronpellet"], "cost": 960, "iconFrame": 53, "desc": "3-8 damage.", "effects": { "weapon": { "id": "ion", "name": "Ion Cannon", "kind": "beam", "min": 3, "max": 8, "shots": 1, "space": 4, "cost": 18 } } }, { "id": "merculitemissiles", "name": "Merculite Missiles", "field": "weapons", "tier": 4, "prereqs": ["ioncannon"], "cost": 1950, "iconFrame": 54, "desc": "10 damage, 2 salvoes, long reach.", "effects": { "weapon": { "id": "merculite", "name": "Merculite Missile", "kind": "missile", "min": 10, "max": 10, "shots": 4, "space": 6, "cost": 20 } } }, { "id": "disruptorcannon", "name": "Disruptor Cannon", "field": "weapons", "tier": 4, "prereqs": ["ioncannon"], "cost": 1950, "iconFrame": 88, "desc": "Phase-shifted beam bleeds straight through deflectors. 4-9 damage, ignores 1 point of shield.", "effects": { "weapon": { "id": "disruptor", "name": "Disruptor Cannon", "kind": "beam", "min": 4, "max": 9, "shots": 1, "space": 5, "cost": 22, "shieldPierce": 1 } } }, { "id": "neutronblaster", "name": "Neutron Blaster", "field": "weapons", "tier": 5, "prereqs": ["merculitemissiles"], "cost": 3400, "iconFrame": 55, "desc": "5-12 damage and it kills crew through the hull.", "effects": { "weapon": { "id": "neutronblaster", "name": "Neutron Blaster", "kind": "beam", "min": 5, "max": 12, "shots": 1, "space": 5, "cost": 30, "shieldPierce": 1 } } }, { "id": "hyperxrockets", "name": "Hyper-X Rockets", "field": "weapons", "tier": 6, "prereqs": ["neutronblaster"], "cost": 5700, "iconFrame": 56, "desc": "14 damage, 3 salvoes.", "effects": { "weapon": { "id": "hyperx", "name": "Hyper-X Rocket", "kind": "missile", "min": 16, "max": 16, "shots": 5, "space": 8, "cost": 32 } } }, { "id": "gravitonbeam", "name": "Graviton Beam", "field": "weapons", "tier": 6, "prereqs": ["neutronblaster"], "cost": 5700, "iconFrame": 71, "desc": "Warps space directly onto the target. 12-20 damage, punches through shields.", "effects": { "weapon": { "id": "gravitonbeam", "name": "Graviton Beam", "kind": "beam", "min": 12, "max": 20, "shots": 1, "space": 7, "cost": 34, "shieldPierce": 2 } } }, { "id": "fusionbeam", "name": "Fusion Beam", "field": "weapons", "tier": 7, "prereqs": ["hyperxrockets"], "cost": 9100, "iconFrame": 57, "desc": "8-16 damage.", "effects": { "weapon": { "id": "fusionbeam", "name": "Fusion Beam", "kind": "beam", "min": 8, "max": 16, "shots": 1, "space": 6, "cost": 45 } } }, { "id": "deathray", "name": "Death Ray", "field": "weapons", "tier": 8, "prereqs": ["fusionbeam"], "cost": 14200, "iconFrame": 58, "desc": "15-40 damage. Fleets evaporate.", "effects": { "weapon": { "id": "deathray", "name": "Death Ray", "kind": "beam", "min": 15, "max": 40, "shots": 1, "space": 12, "cost": 90 } }, "gnnHeadline": true }, { "id": "antimattertorpedoes","name": "Antimatter Torpedoes", "field": "weapons", "tier": 8, "prereqs": ["fusionbeam"], "cost": 14200, "iconFrame": 89, "desc": "Warhead payloads with a dozen years of R&D behind them. 22 damage, 4 salvoes, then the racks are empty.", "effects": { "weapon": { "id": "antimattertorpedo", "name": "Antimatter Torpedo", "kind": "missile", "min": 22, "max": 22, "shots": 4, "space": 10, "cost": 70 } } }, { "id": "disintegratorbeam", "name": "Disintegrator Beam", "field": "weapons", "tier": 8, "prereqs": ["fusionbeam"], "cost": 14200, "iconFrame": 90, "desc": "A narrower beam than Death Ray, but tuned to punch clean through deflector harmonics. 10-22 damage, ignores 3 points of shield.", "effects": { "weapon": { "id": "disintegratorbeam", "name": "Disintegrator Beam", "kind": "beam", "min": 10, "max": 22, "shots": 1, "space": 9, "cost": 60, "shieldPierce": 3 } } }, { "id": "stellarconverter", "name": "Stellar Converter", "field": "weapons", "tier": 9, "prereqs": ["deathray"], "cost": 21000, "iconFrame": 59, "desc": "30-70 damage, and it can crack a colony from orbit.", "effects": { "weapon": { "id": "stellarconverter", "name": "Stellar Converter", "kind": "beam", "min": 30, "max": 70, "shots": 1, "space": 20, "cost": 150, "planetCracker": true } }, "gnnHeadline": true } ], "_hullsReadme": "Preset ship classes — there is no ship designer. space is the weapon capacity a Mark refit fills with the best available weapon; VegaShips.js derives every other stat from the owner's researched tech. sizeScale/sizeSpeedMult/turnRateBase (degrees/round)/brakeSeconds are only consumed by the VegaCombatV2 per-ship prototype (behind ?movsim's Live/V2 toggle) — the live engine (VegaCombat.js) ignores them entirely. brakeSeconds is how long (seconds) a hull takes to kill its own top speed under max thrust — small relative to a hull's speed means it can actually decelerate and hold position within weapon range (battleship/cruiser); large relative to speed means its stopping distance exceeds beamRange and it physically cannot stop before reaching a target, so it blows through and loops back for another pass instead (frigate/scout) — see VegaCombatV2.js's computeShipMove.", "hulls": [ { "id": "scout", "name": "Scout", "role": "recon", "baseCost": 18, "baseHp": 10, "space": 0, "speedBonus": 2, "rangeBonus": 3, "frame": 0, "sizeScale": 0.4, "sizeSpeedMult": 1.3, "turnRateBase": 170, "brakeSeconds": 15, "desc": "Unarmed, fast and long-legged. Peels back the dark." }, { "id": "colonyship", "name": "Colony Ship", "role": "colony", "baseCost": 800, "baseHp": 18, "space": 0, "speedBonus": 0, "rangeBonus": 0, "frame": 1, "sizeScale": 0.9, "sizeSpeedMult": 0.8, "turnRateBase": 90, "brakeSeconds": 3, "desc": "Carries a founding population. Consumed on arrival." }, { "id": "transport", "name": "Troop Transport","role": "troops","baseCost": 400, "baseHp": 20, "space": 0, "speedBonus": 0, "rangeBonus": 0, "frame": 2, "sizeScale": 0.8, "sizeSpeedMult": 0.8, "turnRateBase": 90, "brakeSeconds": 3, "troops": 4, "desc": "Four divisions of marines for boarding and invasion." }, { "id": "poptransport","name": "Colony Transport","role": "colony","baseCost": 30,"baseHp": 20, "space": 0, "speedBonus": 0, "rangeBonus": 0, "frame": 2, "sizeScale": 0.8, "sizeSpeedMult": 0.8, "turnRateBase": 90, "brakeSeconds": 3, "desc": "Ferries colonists between worlds you already hold. Dispatched directly from a colony's Send Population order, never built from the queue — shares the Troop Transport's hull picture (frame 2, the ships sheet is full at 8 columns). sizeScale/sizeSpeedMult/turnRateBase/brakeSeconds intentionally match transport's — they share art and should render/move identically." }, { "id": "frigate", "name": "Frigate", "role": "warship", "baseCost": 35, "baseHp": 18, "space": 6, "speedBonus": 1, "rangeBonus": 1, "frame": 3, "sizeScale": 0.5, "sizeSpeedMult": 1.2, "turnRateBase": 340, "brakeSeconds": 1.0, "desc": "Cheap escort. Screens the line and hunts scouts." }, { "id": "destroyer", "name": "Destroyer", "role": "warship", "baseCost": 90, "baseHp": 40, "space": 14, "speedBonus": 1, "rangeBonus": 0, "frame": 4, "sizeScale": 1.0, "sizeSpeedMult": 1.0, "turnRateBase": 230, "brakeSeconds": 1.35,"desc": "The workhorse combatant of any mid-game fleet." }, { "id": "cruiser", "name": "Cruiser", "role": "warship", "baseCost": 240, "baseHp": 100, "space": 32, "speedBonus": 0, "rangeBonus": 0, "frame": 5, "sizeScale": 1.5, "sizeSpeedMult": 0.85, "turnRateBase": 65, "brakeSeconds": 1.8, "desc": "Heavy line ship. Expensive enough to hurt when it dies." }, { "id": "battleship", "name": "Battleship", "role": "warship", "baseCost": 640, "baseHp": 260, "space": 72, "speedBonus": 0, "rangeBonus": 0, "frame": 6, "sizeScale": 2.5, "sizeSpeedMult": 0.6, "turnRateBase": 35, "brakeSeconds": 1.3, "desc": "A mobile fortress. Whole economies are built to field these." }, { "id": "starbase", "name": "Star Base", "role": "base", "baseCost": 200, "baseHp": 160, "space": 40, "speedBonus": 0, "rangeBonus": 0, "frame": 7, "sizeScale": 2.0, "sizeSpeedMult": 0, "turnRateBase": 0, "brakeSeconds": 1, "immobile": true, "desc": "Orbital fortress. Never moves, and extends fuel range." } ], "_buildingsReadme": "Colony structures. channel names the slider a building multiplies (industry/research/defense/ecology/ships), or is null for a flat effect. Buildings are built from the colony queue; effects stack multiplicatively within a channel.", "buildings": [ { "id": "automatedfactory", "name": "Automated Factory", "prereq": null, "cost": 60, "upkeep": 1, "channel": "industry", "mult": 1.5, "frame": 0, "desc": "+50% industrial output." }, { "id": "researchlab", "name": "Research Laboratory","prereq": "electroniccomputer", "cost": 90, "upkeep": 2, "channel": "research", "mult": 1.5, "frame": 1, "desc": "+50% research output." }, { "id": "missilebase", "name": "Missile Base", "prereq": "hypervrockets", "cost": 80, "upkeep": 2, "channel": "defense", "mult": 1.6, "frame": 2, "desc": "Ground-launched interceptors bite into orbiting fleets." }, { "id": "pollutionprocessor","name": "Pollution Processor","prereq": "ecorestoration", "cost": 70, "upkeep": 1, "channel": "ecology", "mult": 0.6, "frame": 3, "desc": "Waste cleanup costs 40% less on this world." }, { "id": "spaceport", "name": "Space Port", "prereq": "deuteriumcells", "cost": 110, "upkeep": 2, "channel": null, "mult": 1, "frame": 4, "effects": { "tradeBonus": 4 }, "desc": "Civilian traffic. +4 BC per turn." }, { "id": "cloningcenter", "name": "Cloning Center", "prereq": "controlledbarren", "cost": 120, "upkeep": 2, "channel": null, "mult": 1, "frame": 5, "effects": { "growthMult": 1.5 }, "desc": "Population grows 50% faster here." }, { "id": "groundbattery", "name": "Ground Battery", "prereq": "personalshield", "cost": 95, "upkeep": 2, "channel": null, "mult": 1, "frame": 6, "effects": { "groundDefense": 25 }, "desc": "+25 to ground defence against invasion." }, { "id": "spycenter", "name": "Spy Center", "prereq": "neuralscanner", "cost": 140, "upkeep": 3, "channel": null, "mult": 1, "frame": 7, "effects": { "espionage": 20 }, "desc": "+20 to espionage and counter-espionage empire-wide." }, { "id": "planetaryshield", "name": "Planetary Shield", "prereq": "planetaryshield5", "cost": 180, "upkeep": 3, "channel": "defense", "mult": 1.4, "frame": 8, "effects": { "shieldBonus": 5 }, "desc": "A hard shell over the whole colony." }, { "id": "terraformingplant","name": "Terraforming Plant", "prereq": "soilenrichment", "cost": 200, "upkeep": 3, "channel": null, "mult": 1, "frame": 9, "effects": { "maxPopBonus": 20 }, "desc": "+20 maximum population on this world." }, { "id": "stockexchange", "name": "Stock Exchange", "prereq": "improvedindustrial", "cost": 160, "upkeep": 2, "channel": null, "mult": 1, "frame": 10, "effects": { "tradeMult": 1.5 }, "desc": "Colony trade income up 50%." }, { "id": "holosimulator", "name": "Holo Simulator", "prereq": "optroniccomputer", "cost": 150, "upkeep": 3, "channel": null, "mult": 1, "frame": 11, "effects": { "moraleBonus": 10, "tradeBonus": 3 }, "desc": "Contented citizens. +10 morale, +3 BC." }, { "id": "robominers", "name": "Robotic Miners", "prereq": "zortriumarmor", "cost": 210, "upkeep": 3, "channel": "industry", "mult": 1.35, "frame": 12, "desc": "Deep-crust extraction. Another 35% industry." }, { "id": "supercomputer", "name": "Super Computer", "prereq": "positroniccomputer", "cost": 260, "upkeep": 4, "channel": "research", "mult": 1.4, "frame": 13, "desc": "Another 40% research on this world." }, { "id": "artemisnet", "name": "Artemis System Net", "prereq": "deflectorv", "cost": 300, "upkeep": 4, "channel": "defense", "mult": 1.5, "frame": 14, "effects": { "mineDamage": 12 }, "desc": "Automated mines damage every hostile fleet that enters." }, { "id": "soilenrichmentfac","name": "Enrichment Facility","prereq": "atmosphericterraforming","cost": 340,"upkeep": 4,"channel": null, "mult": 1, "frame": 15, "effects": { "maxPopBonus": 35 }, "desc": "+35 maximum population on this world." } ], "_planetTypesReadme": "hostility is the colonizeHostility level a species needs before it can settle here; 0 is open from turn one. habitability multiplies the size-derived population cap. Gas giants and asteroid belts are never colonisable.", "planetTypes": [ { "id": "terran", "name": "Terran", "hostility": 0, "habitability": 1.0, "colonizable": true, "frame": 0, "color": "#3f9d5a", "desc": "Blue skies and deep oceans. The prize of any system." }, { "id": "ocean", "name": "Ocean", "hostility": 0, "habitability": 0.9, "colonizable": true, "frame": 1, "color": "#2a6fb0", "desc": "A drowned world with scattered archipelagos." }, { "id": "jungle", "name": "Jungle", "hostility": 0, "habitability": 0.9, "colonizable": true, "frame": 2, "color": "#2f7a34", "desc": "Riotous biomass under permanent cloud." }, { "id": "steppe", "name": "Steppe", "hostility": 0, "habitability": 0.8, "colonizable": true, "frame": 3, "color": "#8a9c4a", "desc": "Endless grassland and a thin, dry atmosphere." }, { "id": "arid", "name": "Arid", "hostility": 0, "habitability": 0.7, "colonizable": true, "frame": 4, "color": "#b08a45", "desc": "Cracked riverbeds and a shrinking water table." }, { "id": "desert", "name": "Desert", "hostility": 0, "habitability": 0.6, "colonizable": true, "frame": 5, "color": "#d0a353", "desc": "Sand seas from pole to pole." }, { "id": "tundra", "name": "Tundra", "hostility": 0, "habitability": 0.5, "colonizable": true, "frame": 6, "color": "#8fb6c4", "desc": "Permafrost and a sun too far away." }, { "id": "minimal", "name": "Minimal", "hostility": 0, "habitability": 0.4, "colonizable": true, "frame": 7, "color": "#9a9a86", "desc": "Barely an atmosphere, but it is breathable at noon." }, { "id": "barren", "name": "Barren", "hostility": 1, "habitability": 0.3, "colonizable": true, "frame": 8, "color": "#8a7f70", "desc": "Airless rock. Habitats only." }, { "id": "dead", "name": "Dead", "hostility": 2, "habitability": 0.25, "colonizable": true, "frame": 9, "color": "#6d6a63", "desc": "Something lived here once. Nothing does now." }, { "id": "inferno", "name": "Inferno", "hostility": 3, "habitability": 0.25, "colonizable": true, "frame": 10, "color": "#c2502a", "desc": "Molten surface under a crushing greenhouse." }, { "id": "toxic", "name": "Toxic", "hostility": 4, "habitability": 0.2, "colonizable": true, "frame": 11, "color": "#7fae3a", "desc": "Corrosive fog that eats through hab domes." }, { "id": "radiated", "name": "Radiated", "hostility": 5, "habitability": 0.2, "colonizable": true, "frame": 12, "color": "#b6c23a", "desc": "Sterilised by its own star. Shielded colonies only." }, { "id": "gasgiant", "name": "Gas Giant", "hostility": 9, "habitability": 0, "colonizable": false, "frame": 13, "color": "#c99a5b", "desc": "A banded giant. No surface to stand on." }, { "id": "asteroids","name": "Asteroid Belt","hostility": 9, "habitability": 0, "colonizable": false, "frame": 14, "color": "#7a7268", "desc": "Shattered rubble. Rich, and impossible to settle." } ], "planetSizes": [ { "id": "tiny", "name": "Tiny", "basePop": 20, "weight": 15 }, { "id": "small", "name": "Small", "basePop": 40, "weight": 25 }, { "id": "medium", "name": "Medium", "basePop": 60, "weight": 30 }, { "id": "large", "name": "Large", "basePop": 80, "weight": 20 }, { "id": "huge", "name": "Huge", "basePop": 100, "weight": 10 } ], "mineralRichness": [ { "id": "ultrapoor", "name": "Ultra Poor", "industryMult": 0.5, "weight": 5 }, { "id": "poor", "name": "Poor", "industryMult": 0.75,"weight": 15 }, { "id": "normal", "name": "Abundant", "industryMult": 1.0, "weight": 55 }, { "id": "rich", "name": "Rich", "industryMult": 1.5, "weight": 20 }, { "id": "ultrarich", "name": "Ultra Rich", "industryMult": 2.0, "weight": 5 } ], "gravity": [ { "id": "low", "name": "Low Gravity", "combatMod": -10, "weight": 20 }, { "id": "normal", "name": "Normal Gravity", "combatMod": 0, "weight": 60 }, { "id": "high", "name": "High Gravity", "combatMod": -25, "weight": 20 } ], "_starClassesReadme": "weight drives generation frequency; planetBias shifts the planet-type roll toward the good end (positive) or the hostile end (negative). special marks the flavour objects the star map renders with bespoke effects.", "starClasses": [ { "id": "blue", "name": "Blue", "color": "#9fc4ff", "coreColor": "#ffffff", "radius": 15, "weight": 8, "planetBias": -1, "richBias": 2, "special": null, "desc": "A furnace. Rich worlds, and most of them lethal." }, { "id": "white", "name": "White", "color": "#e8eeff", "coreColor": "#ffffff", "radius": 13, "weight": 12, "planetBias": 0, "richBias": 1, "special": null, "desc": "Hot and steady." }, { "id": "yellow", "name": "Yellow", "color": "#ffe9a3", "coreColor": "#fffdf0", "radius": 12, "weight": 22, "planetBias": 2, "richBias": 0, "special": null, "desc": "The kind of star that grows people." }, { "id": "orange", "name": "Orange", "color": "#ffbf7a", "coreColor": "#fff0d8", "radius": 11, "weight": 20, "planetBias": 1, "richBias": 0, "special": null, "desc": "Long-lived and mild." }, { "id": "red", "name": "Red", "color": "#ff8a6a", "coreColor": "#ffd8c8", "radius": 9, "weight": 22, "planetBias": -1, "richBias": -1, "special": null, "desc": "A dim ember. Cold worlds, poor ore." }, { "id": "brown", "name": "Brown Dwarf","color": "#a16a55", "coreColor": "#d8a892", "radius": 7, "weight": 8, "planetBias": -2, "richBias": -1, "special": null, "desc": "Barely a star at all." }, { "id": "binary", "name": "Binary", "color": "#ffd9a0", "coreColor": "#fff6e0", "radius": 11, "weight": 5, "planetBias": 0, "richBias": 1, "special": "binary", "desc": "Two suns locked around a common centre." }, { "id": "pulsar", "name": "Pulsar", "color": "#c9e6ff", "coreColor": "#ffffff", "radius": 8, "weight": 2, "planetBias": -3, "richBias": 3, "special": "pulsar", "desc": "A lighthouse sweeping the void. Nothing lives nearby." }, { "id": "blackhole","name": "Black Hole", "color": "#3a2b52", "coreColor": "#050308", "radius": 10, "weight": 1, "planetBias": -9, "richBias": 0, "special": "blackhole", "desc": "Light bends around it. Fleets that linger do not return." } ], "_speciesReadme": "MOO1's ten races with everything but Humans renamed. Multipliers are relative to 1.0; flat modifiers are additive percentage points. techAffinity is bucketed by VegaRules.techCostFactor into MOO1's Poor/Average/Good/Excellent research-COST multiplier (125/100/80/60%) for that field — matching the real game, where racial skill changes what a tech costs, never whether it exists in your tree. It is ALSO still read by VegaLogic.rollTechAvailability to bias which techs are available at all, which is the OPPOSITE of how MOO1 actually works (there, availability is a flat ~50% roll per tech regardless of skill, 75% for a single research-focused race, with the sole guarantee that the last surviving tech in a rung is never struck out) — that double duty is a known stopgap, to be removed once the tech tree grows branching alternatives per rung for the roll to have something real to strike between. `bombardHoldFireChance` (added 2026-08-14, Brian's ask, widened same day from an original true/false `prefersAnnihilation` once Ursaal needed a THIRD point on the same dial): when a hostile colony's invasion odds aren't yet favourable but this empire has transports staged for one, VegaAI.js's bombard step (2a in manageFleets) rolls this chance, per turn, to hold fire instead of bombing — so the invasion in progress isn't wasted on a colony that's about to be a smoking crater. 0.65 is the default (most species would rather wait for a second transport wave than glass the world). Rrashaa (a warrior culture built around ship weapons rather than ground troops) and Lithox (colonizeAnything/hostileImmune — they don't need an intact population to resettle a world afterward) are 0: they bomb exactly as readily as every species did before this trait existed. Ursaal is 0.95: their +50 ground-combat trait makes invasion their entire military identity, so they hold fire almost every time rather than waste it. It is never 1 for anyone, by design — the roll runs fresh every turn regardless of how high the chance is, so even Ursaal's fortress-siege eventually breaks by bombardment instead of stalling forever (see the fortress-world stalemate note in VegaAI.js's own comment on this).", "species": [ { "id": "human", "name": "Human", "adjective": "Human", "plural": "Humans", "color": "#4f8fe0", "portraitFrame": 0, "shipFrame": 0, "homeworld": "terran", "desc": "Traders and talkers. Humans win the votes other empires assume they can ignore.", "strengths": ["Finest diplomats in the galaxy", "+50% trade income"], "weaknesses": ["No industrial or scientific edge"], "colonyNames": ["New Meridian", "Concord Point", "Fair Harbor", "Tradewind Station", "Ledgerrest", "Accord City", "Compact Landing", "Exchange Reach", "Bartertown", "Port Solace", "New Geneva", "Wayfarer's Rest", "Handshake Bay", "Common Ground", "New Providence", "Parley Hollow", "Merchant's Crest", "Open Market", "Diplomat's Landing", "Sunward Vale", "Amity Falls", "New Frontier", "Silverleaf Landing", "Charter Cove", "Freeport", "Goodwill Station", "New Alexandria", "Compromise Ridge", "Traders' Rest", "Council Reach", "New Avalon", "Broker's Landing", "Fellowship Point", "Terra Nova Colony", "Coin & Compass", "Truce Hollow", "New Rotterdam", "Silk Route Station", "Envoy's Landing", "Harborlight", "New Carthage", "Pact Hollow", "Steady Hand", "Crossroads Colony", "Welcome Reach", "New Marrakesh", "Handclasp Bay", "Fortune's Landing", "Neutral Ground", "Homeward Bound"], "traits": { "industryMult": 1.0, "researchMult": 1.0, "tradeMult": 1.5, "growthMult": 1.0, "ecologyMult": 1.0, "shipAttack": 0, "shipDefense": 0, "groundAttack": 10, "groundDefense": 10, "espionage": 0, "counterEspionage": 0, "diplomacy": 40, "maxPopMult": 1.0, "factoriesPerPop": 2, "highGravityOk": false, "hostileImmune": false, "colonizeAnything": false, "bombardHoldFireChance": 0.65 }, "techAffinity": { "computers": 1.0, "construction": 1.0, "forcefields": 1.0, "planetology": 1.0, "propulsion": 1.0, "weapons": 1.0 } }, { "id": "kestrelli", "name": "Kestrelli", "adjective": "Kestrelli", "plural": "Kestrelli", "color": "#e0c04f", "portraitFrame": 1, "shipFrame": 1, "homeworld": "terran", "desc": "Avian aristocrats bred for flight. Their pilots simply do not get hit.", "strengths": ["Enormous ship defence bonus", "Skilled at propulsion"], "weaknesses": ["Poor ground troops", "Weak industry"], "colonyNames": ["Windspire", "Skyhold", "Aerie Prime", "Talon's Rest", "Highwing Reach", "Cloudperch", "Windrider's Roost", "Featherfall", "Zephyr's Crest", "Skybarrow", "Wingspan Hold", "Stormwing Manor", "Gale Aerie", "Sunwing Perch", "Nimbus Court", "Highfeather", "Windgate", "Skysong", "Thermal Rise", "Plumecrest", "Windward Eyrie", "Cirrus Hold", "Featherlight", "Aloft Reach", "Skyfarer's Roost", "Wingward", "Duskwing Hollow", "Windveil", "Sunward Aerie", "Talonreach", "Cloudspire", "Wingfall", "Highcourt Aerie", "Windrush", "Stormcrest", "Nightwing Perch", "Skyward Bastion", "Featherhold", "Glidewind", "Windborn Hall", "Aeriewatch", "Skysworn", "Loftmark", "Windfeather Court", "Cloudreach Manor", "Highflight", "Windcrest Hollow", "Aerielle", "Skygrace", "Windwake"], "traits": { "industryMult": 0.9, "researchMult": 1.0, "tradeMult": 1.0, "growthMult": 1.0, "ecologyMult": 1.0, "shipAttack": 0, "shipDefense": 50, "groundAttack": -10, "groundDefense": -10, "espionage": 0, "counterEspionage": 0, "diplomacy": 10, "maxPopMult": 1.0, "factoriesPerPop": 2, "highGravityOk": false, "hostileImmune": false, "colonizeAnything": false, "bombardHoldFireChance": 0.65 }, "techAffinity": { "computers": 1.0, "construction": 0.9, "forcefields": 1.1, "planetology": 0.9, "propulsion": 1.3, "weapons": 1.0 } }, { "id": "ursaal", "name": "Ursaal", "adjective": "Ursaal", "plural": "Ursaal", "color": "#8a5a34", "portraitFrame": 2, "shipFrame": 2, "homeworld": "terran", "desc": "Heavy-worlders. An Ursaal division walks through defences that would stop an army.", "strengths": ["+50 ground combat", "Settles high-gravity worlds without penalty"], "weaknesses": ["Poor research", "Clumsy diplomats"], "colonyNames": ["Ironhold", "Stonewall Reach", "Granite Bastion", "Deeproot Hold", "Bedrock Colony", "Anvilfast", "Boulderguard", "Highgrav Hold", "Stonefist", "Ironroot", "Craghold", "Heavyhome", "Fortress Deep", "Stoneshoulder", "Gravitas Hold", "Bastionrock", "Ironclad Reach", "Mountainheart", "Stonebrace", "Ridgehold", "Deepstone", "Ironwall", "Cragfast", "Highstone Bastion", "Bedrock's Edge", "Stoutforge", "Graniteborn", "Ironmarch", "Steadfast Hold", "Boulderreach", "Deepgrav Colony", "Stonewatch", "Ironbrace", "Craghome", "Fortholm", "Heavyhand Reach", "Rockspine", "Stonemarch", "Ironkeep", "Highhold", "Graniteguard", "Deepwall", "Stonefast", "Ironridge", "Massif Hold", "Bedrockmarch", "Stoneheart Colony", "Ironfoot Reach", "Cragmoor", "Foundation Hold"], "traits": { "industryMult": 1.0, "researchMult": 0.8, "tradeMult": 1.0, "growthMult": 1.0, "ecologyMult": 1.0, "shipAttack": 0, "shipDefense": 0, "groundAttack": 50, "groundDefense": 50, "espionage": 0, "counterEspionage": 0, "diplomacy": -20, "maxPopMult": 1.0, "factoriesPerPop": 2, "highGravityOk": true, "hostileImmune": false, "colonizeAnything": false, "bombardHoldFireChance": 0.95 }, "techAffinity": { "computers": 0.8, "construction": 1.2, "forcefields": 1.0, "planetology": 1.0, "propulsion": 0.9, "weapons": 1.1 } }, { "id": "umbrix", "name": "Umbrix", "adjective": "Umbrix", "plural": "Umbrix", "color": "#6b4a8a", "portraitFrame": 3, "shipFrame": 3, "homeworld": "terran", "desc": "Shapeshifters who wear other species like coats. Nobody trusts them, and everybody is right not to.", "strengths": ["Unmatched espionage and sabotage", "Steal technology others cannot"], "weaknesses": ["Every empire starts hostile toward them"], "colonyNames": ["Shrouded Reach", "Whisper's Veil", "Maskfall", "Duskmask Hollow", "Hidden Face", "Veiled Hollow", "Changeling's Rest", "Shadowseam", "Cloakhaven", "Secondskin", "Nightveil", "Falseface Reach", "Mirrorshade", "Unseen Hollow", "Guisehome", "Shroudmark", "Doubtward", "Silent Mask", "Umbral Rest", "Twoface Reach", "Hushveil", "Shapesong", "Concealed Landing", "Wraithcoat", "Veilborn", "Trustless Hollow", "Otherface", "Nightmask Colony", "Whisperseam", "Shiftveil", "Feigned Hollow", "Skinchange Reach", "Deceiver's Rest", "Camouflage Hold", "Ashenmask", "Voidveil", "Suspicion's Edge", "Cloak & Coat", "Shadowguise", "Unmasked Reach", "Secretskin", "Mimicry Hollow", "Hollow Mirror", "Grayveil", "Substitute's Landing", "Shadowform Colony", "Nightdouble", "Wearer's Rest", "Truthless Hollow", "Undercover Reach"], "traits": { "industryMult": 1.0, "researchMult": 1.0, "tradeMult": 1.0, "growthMult": 1.0, "ecologyMult": 1.0, "shipAttack": 0, "shipDefense": 0, "groundAttack": 0, "groundDefense": 0, "espionage": 60, "counterEspionage": 30, "diplomacy": -50, "maxPopMult": 1.0, "factoriesPerPop": 2, "highGravityOk": false, "hostileImmune": false, "colonizeAnything": false, "bombardHoldFireChance": 0.65 }, "techAffinity": { "computers": 1.2, "construction": 1.0, "forcefields": 1.1, "planetology": 0.9, "propulsion": 1.0, "weapons": 1.0 } }, { "id": "kkrix", "name": "Kkrix", "adjective": "Kkrix", "plural": "Kkrix", "color": "#c46a2a", "portraitFrame": 4, "shipFrame": 4, "homeworld": "terran", "desc": "A hive that builds without pause, argues with nobody, and understands negotiation not at all.", "strengths": ["+50% industry on every world"], "weaknesses": ["Poor research", "Cannot conduct meaningful diplomacy"], "colonyNames": ["Hive Cluster One", "The Foundry Nest", "Broodwork Colony", "Chitin Hold", "Swarmreach", "Hive Node Seven", "The Endless Weave", "Larval Works", "Drone Assembly", "Hive Cell Twelve", "The Great Warren", "Chitterhold", "Worker's Convergence", "Hive Spindle", "The Unceasing Forge", "Mandible Reach", "Hive Node Three", "Combwork Hold", "The Silent Multitude", "Broodnest Prime", "Hive Lattice", "Chitinguard", "The Tireless Works", "Swarmhold", "Hive Cell Nine", "Larvalreach", "The Ceaseless Hive", "Antennae Point", "Hive Node Four", "Combhold", "The Undivided Nest", "Chamberwork", "Hive Spire Two", "Broodline Colony", "The Iron Swarm", "Waxcomb Hold", "Hive Node Eight", "Massed Works", "The Singular Hive", "Cellblock Warren", "Hive Lattice Five", "Droneworks", "The Multiplying Nest", "Chitterreach", "Hive Node Eleven", "Combined Works", "The Uncounted Swarm", "Sporehold", "Hive Node Six", "The Perfect Colony"], "traits": { "industryMult": 1.5, "researchMult": 0.8, "tradeMult": 1.0, "growthMult": 1.0, "ecologyMult": 1.0, "shipAttack": 0, "shipDefense": 0, "groundAttack": 0, "groundDefense": 0, "espionage": -20, "counterEspionage": 0, "diplomacy": -40, "maxPopMult": 1.0, "factoriesPerPop": 2, "highGravityOk": false, "hostileImmune": false, "colonizeAnything": false, "bombardHoldFireChance": 0.65 }, "techAffinity": { "computers": 0.8, "construction": 1.3, "forcefields": 0.9, "planetology": 1.1, "propulsion": 1.0, "weapons": 1.0 } }, { "id": "mekhan", "name": "Mekhan", "adjective": "Mekhan", "plural": "Mekhan", "color": "#7f8fa0", "portraitFrame": 5, "shipFrame": 5, "homeworld": "terran", "desc": "Cyborgs who treat a planet as a chassis. Every citizen runs more machines than anyone else can.", "strengths": ["+2 factories per population", "Strong construction research"], "weaknesses": ["Filthy — waste piles up twice as fast"], "colonyNames": ["Circuit Reach", "Ironforge Array", "The Chassis Works", "Gearlock Hold", "Servo Junction", "Foundry Prime", "Piston Hollow", "The Assembly Line", "Cogwork Colony", "Alloy Reach", "The Machine Heart", "Rivethold", "Conduit Bay", "The Forgeworks", "Girderfast", "Wireframe Colony", "The Scrapyard Rise", "Bolted Reach", "Turbine Hold", "The Mainframe", "Steelweld", "Actuator Point", "The Refinery Deep", "Coldsteel Reach", "Chassisguard", "The Fabrication Yard", "Circuitry Hollow", "Bearing Hold", "The Foundry Deep", "Ironlathe", "Sprocket Reach", "The Assembly Core", "Wireworks", "Boltframe Colony", "The Grinding Works", "Hydraulic Hold", "Alloyforge", "The Mechanized Rise", "Weldpoint", "Servohold", "The Combustion Yard", "Ironwire Reach", "Furnace Array", "The Rust Belt", "Coglathe", "The Forgework Deep", "Piston Reach", "Machinehold", "The Overclock", "Steelworks Prime"], "traits": { "industryMult": 1.0, "researchMult": 1.0, "tradeMult": 1.0, "growthMult": 1.0, "ecologyMult": 2.0, "shipAttack": 0, "shipDefense": 0, "groundAttack": 0, "groundDefense": 0, "espionage": 0, "counterEspionage": 0, "diplomacy": -10, "maxPopMult": 1.0, "factoriesPerPop": 4, "highGravityOk": false, "hostileImmune": false, "colonizeAnything": false, "bombardHoldFireChance": 0.65 }, "techAffinity": { "computers": 1.2, "construction": 1.3, "forcefields": 1.0, "planetology": 0.8, "propulsion": 1.0, "weapons": 1.0 } }, { "id": "rrashaa", "name": "Rrashaa", "adjective": "Rrashaa", "plural": "Rrashaa", "color": "#d4913f", "portraitFrame": 6, "shipFrame": 6, "homeworld": "terran", "desc": "Feline gunners with reflexes no computer improves on. Their beams land when nobody else's would.", "strengths": ["Enormous ship attack bonus", "Strong weapons research"], "weaknesses": ["Poor ground defence", "Distrusted"], "colonyNames": ["Clawreach", "Bloodfang Outpost", "Huntersrest", "Razorclaw Hold", "Stalker's Perch", "Fangmark", "Prowl Hollow", "Sharpshot Reach", "Nightclaw Colony", "Huntground", "Talonfang", "Deadeye Reach", "Bristlefang", "Ambush Hollow", "Clawmark Rise", "Predator's Rest", "Snarl Reach", "Sureshot Hold", "Bloodclaw", "Stalking Grounds", "Fangfall", "Sniper's Roost", "Rakeclaw", "Huntersedge", "Silentpaw Reach", "Marksman's Hollow", "Clawstrike", "Nightprowl Colony", "Trueshot Reach", "Sharpfang", "Ambushpoint", "Huntress Reach", "Clawtip Hold", "Deadshot Hollow", "Prowlers' Rest", "Bloodhunt Reach", "Ripclaw", "Sureclaw", "Stalkfast", "Fangwatch", "Killshot Hollow", "Clawborn Colony", "Huntfang", "Sharpeye Reach", "Ambushfang", "Nightstalk Hold", "Trueclaw", "Preyfall", "Huntersmark", "Clawhold Prime"], "traits": { "industryMult": 1.0, "researchMult": 0.9, "tradeMult": 1.0, "growthMult": 1.0, "ecologyMult": 1.0, "shipAttack": 50, "shipDefense": 0, "groundAttack": 0, "groundDefense": -25, "espionage": 0, "counterEspionage": 0, "diplomacy": -25, "maxPopMult": 1.0, "factoriesPerPop": 2, "highGravityOk": false, "hostileImmune": false, "colonizeAnything": false, "bombardHoldFireChance": 0 }, "techAffinity": { "computers": 1.0, "construction": 1.0, "forcefields": 0.9, "planetology": 0.9, "propulsion": 1.0, "weapons": 1.3 } }, { "id": "cerebrai", "name": "Cerebrai", "adjective": "Cerebrai", "plural": "Cerebrai", "color": "#4fb8a8", "portraitFrame": 7, "shipFrame": 7, "homeworld": "terran", "desc": "Vast fragile intellects. They will out-think the galaxy if they survive long enough to finish thinking.", "strengths": ["Double research output", "Rarely misses a breakthrough (75% vs 50% research odds)"], "weaknesses": ["Hopeless in a ground fight"], "colonyNames": ["The Contemplation", "Axiom's Rest", "Thoughtwell", "The Cogitation", "Insight Reach", "Ponder's Hollow", "The Deduction", "Mindspire", "Theorem Hold", "The Reflection", "Synapse Colony", "Wisdomreach", "The Postulate", "Enigma Hollow", "The Calculation", "Noesis Point", "The Hypothesis", "Reasonhold", "The Contemplative Deep", "Cognizance Reach", "The Inquiry", "Thoughtform Colony", "The Proof", "Logician's Rest", "The Abstraction", "Intellect Hold", "The Meditation", "Puzzlework", "The Conjecture", "Ponderhold", "The Epiphany", "Mindweave Reach", "The Deliberation", "Wisdomhold", "The Paradox", "Thoughtline", "The Revelation", "Synthesis Hollow", "The Understanding", "Cerebrum Reach", "The Discourse", "Knowledgehold", "The Singularity Thought", "Rationale Reach", "The Perception", "Sagehold", "The Great Thinking", "Insightform Colony", "The Awareness", "Mindsreach"], "traits": { "industryMult": 1.0, "researchMult": 2.0, "tradeMult": 1.0, "growthMult": 1.0, "ecologyMult": 1.0, "shipAttack": 0, "shipDefense": 0, "groundAttack": -50, "groundDefense": -50, "espionage": 0, "counterEspionage": 0, "diplomacy": 0, "maxPopMult": 1.0, "factoriesPerPop": 2, "highGravityOk": false, "hostileImmune": false, "colonizeAnything": false, "bombardHoldFireChance": 0.65 }, "techAffinity": { "computers": 1.4, "construction": 1.2, "forcefields": 1.2, "planetology": 1.2, "propulsion": 1.2, "weapons": 1.2 } }, { "id": "ssakar", "name": "Ssakar", "adjective": "Ssakar", "plural": "Ssakar", "color": "#5aa04a", "portraitFrame": 8, "shipFrame": 8, "homeworld": "jungle", "desc": "Reptilian broodmothers. Ssakar colonies fill to capacity while rivals are still unpacking.", "strengths": ["Population grows twice as fast"], "weaknesses": ["Poor research", "Untrusted by the older species"], "colonyNames": ["Spawning Delta", "The Broodwarren", "Nestmarsh", "Eggcluster Hollow", "Hatchling's Rise", "The Fertile Coil", "Broodmarsh", "Clutchhold", "The Spawning Pools", "Nestreach", "Broodmother's Rest", "The Thousand Eggs", "Hatchreach", "Coilnest", "The Teeming Marsh", "Eggwarren Colony", "Broodhollow", "The Second Clutch", "Nestingground", "Scalebrood Reach", "The Overflowing Nest", "Hatchlingmarsh", "Broodcoil", "The Fertile Reach", "Nestwarren", "Clutchmarsh", "The Endless Brood", "Spawnreach", "Eggmother's Rest", "The Teeming Coil", "Broodnest Deep", "Hatchmarsh", "The Third Clutch", "Nestcoil", "Scalewarren", "The Fecund Marsh", "Broodreach Prime", "Eggclutch Hollow", "The Rising Brood", "Nestmother's Reach", "Coilwarren", "The Sprawling Nest", "Hatchbrood Colony", "Spawnmarsh", "The Fourth Clutch", "Broodwarren Deep", "Nestegg Reach", "The Multiplying Marsh", "Scalenest", "The Great Clutch"], "traits": { "industryMult": 1.0, "researchMult": 0.85, "tradeMult": 1.0, "growthMult": 2.0, "ecologyMult": 1.0, "shipAttack": 0, "shipDefense": 0, "groundAttack": 10, "groundDefense": 0, "espionage": 0, "counterEspionage": 0, "diplomacy": -20, "maxPopMult": 1.0, "factoriesPerPop": 2, "highGravityOk": false, "hostileImmune": false, "colonizeAnything": false, "bombardHoldFireChance": 0.65 }, "techAffinity": { "computers": 0.9, "construction": 1.0, "forcefields": 0.9, "planetology": 1.2, "propulsion": 1.0, "weapons": 1.0 } }, { "id": "lithox", "name": "Lithox", "adjective": "Lithox", "plural": "Lithox", "color": "#9a86c4", "portraitFrame": 9, "shipFrame": 9, "homeworld": "barren", "desc": "Crystalline life that breathes nothing and fears no atmosphere. They settle where the map says nobody can.", "strengths": ["Colonise any world from turn one", "Immune to hostile environments and pollution"], "weaknesses": ["Population grows at half speed", "Cannot negotiate at all"], "colonyNames": ["Crystalvein", "The Shard", "Silicareach", "Glasswrought Hold", "Prismfall", "The Faceted Rise", "Quartzhold", "Crystalline Deep", "The Refractor", "Stonelight Reach", "Geode Hollow", "The Lattice Fields", "Mineralreach", "Sparkstone Hold", "The Crystal Bloom", "Facetedge", "Glimmerhold", "The Silicate Deep", "Prismwatch", "Crystalgrowth Colony", "The Fractured Rise", "Shardreach", "Latticework", "The Vitreous Deep", "Gleamstone Hold", "Crystalshard Reach", "The Diamond Fields", "Facetreach", "Glasswork Colony", "The Prismatic Deep", "Quartzreach", "Sparkledge", "The Crystalline Rise", "Refractedge", "Silicavein", "The Geode Fields", "Crystalspire", "Mineralight Hold", "The Faceted Deep", "Glassreach", "Vitreous Hollow", "The Shard Fields", "Crystalborn Colony", "Prismreach", "The Lattice Deep", "Stonegleam Hold", "Facetform Reach", "The Silicate Rise", "Crystalwatch", "The Unbreathing Deep"], "traits": { "industryMult": 1.0, "researchMult": 1.0, "tradeMult": 1.0, "growthMult": 0.5, "ecologyMult": 0.0, "shipAttack": 0, "shipDefense": 0, "groundAttack": 0, "groundDefense": 0, "espionage": -20, "counterEspionage": 20, "diplomacy": -100, "maxPopMult": 1.0, "factoriesPerPop": 2, "highGravityOk": true, "hostileImmune": true, "colonizeAnything": true, "bombardHoldFireChance": 0 }, "techAffinity": { "computers": 0.9, "construction": 1.2, "forcefields": 1.1, "planetology": 0.7, "propulsion": 0.9, "weapons": 1.0 } } ], "_leadersReadme": "Hireable leaders (the MOO2 convenience). kind admin binds to a colony, kind captain binds to a fleet. skills are additive with species traits. Portrait frames are procedural until artwork lands.", "leaders": [ { "id": "vexlarr", "name": "Vex Larr", "kind": "admin", "hireCost": 120, "upkeep": 3, "portraitFrame": 0, "skills": { "industryMult": 1.25 }, "bio": "Yard foreman turned governor. Builds fast, explains later." }, { "id": "sennaquil", "name": "Senna Quil", "kind": "admin", "hireCost": 150, "upkeep": 4, "portraitFrame": 1, "skills": { "researchMult": 1.3 }, "bio": "Ran three universities into brilliance and bankruptcy." }, { "id": "orrimtal", "name": "Orrim Tal", "kind": "admin", "hireCost": 110, "upkeep": 3, "portraitFrame": 2, "skills": { "tradeMult": 1.4 }, "bio": "Never lost a negotiation he was allowed to finish." }, { "id": "hessk", "name": "Hessk", "kind": "admin", "hireCost": 130, "upkeep": 3, "portraitFrame": 3, "skills": { "growthMult": 1.4 }, "bio": "Settlement specialist. Knows exactly how many people a rock will hold." }, { "id": "duvaine", "name": "Duvaine Roth", "kind": "admin", "hireCost": 160, "upkeep": 4, "portraitFrame": 4, "skills": { "ecologyMult": 0.5, "industryMult": 1.15 }, "bio": "Cleans up after industry without slowing it down." }, { "id": "callarn", "name": "Cal Larn", "kind": "admin", "hireCost": 180, "upkeep": 5, "portraitFrame": 5, "skills": { "industryMult": 1.2, "researchMult": 1.2 }, "bio": "Expensive, and worth it on your capital." }, { "id": "yrsakane", "name": "Yrsa Kane", "kind": "admin", "hireCost": 140, "upkeep": 4, "portraitFrame": 6, "skills": { "groundDefense": 40 }, "bio": "Fortifies a colony until invading it stops being worth the ships." }, { "id": "thelnwar", "name": "Theln War", "kind": "admin", "hireCost": 145, "upkeep": 4, "portraitFrame": 7, "skills": { "espionage": 25, "counterEspionage": 25 }, "bio": "Runs the quiet half of your empire." }, { "id": "rakkurvane","name": "Rakkur Vane", "kind": "captain", "hireCost": 160, "upkeep": 4, "portraitFrame": 8, "skills": { "shipAttack": 30 }, "bio": "Fires on the roll, not the order. It works." }, { "id": "isolabrey", "name": "Isola Brey", "kind": "captain", "hireCost": 160, "upkeep": 4, "portraitFrame": 9, "skills": { "shipDefense": 30 }, "bio": "Has never lost a hull she was given time to manoeuvre." }, { "id": "gorvekmul", "name": "Gorvek Mul", "kind": "captain", "hireCost": 190, "upkeep": 5, "portraitFrame": 10, "skills": { "shipAttack": 20, "initiative": 3 }, "bio": "Opens every engagement before the enemy finishes arriving." }, { "id": "sableorr", "name": "Sable Orr", "kind": "captain", "hireCost": 150, "upkeep": 4, "portraitFrame": 11, "skills": { "repairPerRound": 0.05 }, "bio": "Her damage-control crews are legendary and badly paid." }, { "id": "kavehsun", "name": "Kaveh Sun", "kind": "captain", "hireCost": 175, "upkeep": 4, "portraitFrame": 12, "skills": { "groundAttack": 45 }, "bio": "Boarding specialist. Takes colonies with the marines already aboard." }, { "id": "nyxholt", "name": "Nyx Holt", "kind": "captain", "hireCost": 200, "upkeep": 5, "portraitFrame": 13, "skills": { "shipAttack": 20, "shipDefense": 20 }, "bio": "Balanced, reliable, and quietly the best officer available." }, { "id": "brannok", "name": "Brannok", "kind": "captain", "hireCost": 130, "upkeep": 3, "portraitFrame": 14, "skills": { "speedBonus": 1, "rangeBonus": 2 }, "bio": "Navigator who finds range where the charts say there is none." }, { "id": "elissedra", "name": "Elis Sedra", "kind": "captain", "hireCost": 210, "upkeep": 6, "portraitFrame": 15, "skills": { "shipAttack": 25, "shipDefense": 15, "initiative": 2 }, "bio": "Flag officer. Give her a battleship and stay out of the way." } ], "leaderHiring": { "_readme": "Each leader already on an empire's roster raises what the NEXT one costs that empire — see VegaLogic.js leaderHireCost. costScalePerOwned 0.5 means: 1st leader = list price, 2nd = 1.5x, 3rd = 2x, 4th = 2.5x, 5th = 3x, 6th (the roster cap) = 3.5x. Keeps the shared 16-leader pool from being cleared cheaply by whoever stockpiles BC fastest, without changing the cost of a first hire at all.", "costScalePerOwned": 0.5 }, "galaxySizes": [ { "id": "small", "name": "Small", "stars": 24, "width": 2600, "height": 1700, "maxEmpires": 4, "desc": "Cramped. You will meet your neighbours early and often." }, { "id": "medium", "name": "Medium", "stars": 36, "width": 3400, "height": 2200, "maxEmpires": 5, "desc": "The standard galaxy." }, { "id": "large", "name": "Large", "stars": 54, "width": 4400, "height": 2800, "maxEmpires": 6, "desc": "Room to expand before anyone objects." }, { "id": "huge", "name": "Huge", "stars": 70, "width": 5400, "height": 3400, "maxEmpires": 6, "desc": "A long game. Propulsion tech matters more than anything." } ], "galaxyShapes": [ { "id": "spiral", "name": "Spiral", "desc": "Two sweeping arms. Long borders, natural chokepoints.", "arms": 2 }, { "id": "elliptical", "name": "Elliptical", "desc": "A dense even cloud. Everyone is everyone's neighbour.", "arms": 0 }, { "id": "cluster", "name": "Cluster", "desc": "Knots of stars separated by empty dark.", "arms": 0, "clusters": 5 }, { "id": "ring", "name": "Ring", "desc": "A torus around a hollow core. Expansion runs two ways.", "arms": 0 } ], "difficulties": [ { "id": "simple", "name": "Simple", "aiProdMult": 0.75, "aiResearchMult": 0.75, "aiAggression": 0.5, "aiStartBonus": 0, "humanResearchMult": 1.2, "desc": "The AI will not press an advantage." }, { "id": "easy", "name": "Easy", "aiProdMult": 0.9, "aiResearchMult": 0.9, "aiAggression": 0.7, "aiStartBonus": 0, "humanResearchMult": 1.1, "desc": "Forgiving." }, { "id": "normal", "name": "Normal", "aiProdMult": 1.0, "aiResearchMult": 1.0, "aiAggression": 1.0, "aiStartBonus": 0, "humanResearchMult": 1.0, "desc": "An even galaxy." }, { "id": "hard", "name": "Hard", "aiProdMult": 1.25, "aiResearchMult": 1.25, "aiAggression": 1.3, "aiStartBonus": 1, "humanResearchMult": 1.0, "desc": "The AI starts ahead and stays there if you let it." }, { "id": "impossible", "name": "Impossible", "aiProdMult": 1.6, "aiResearchMult": 1.6, "aiAggression": 1.6, "aiStartBonus": 2, "humanResearchMult": 1.0, "desc": "You are meant to lose this one." } ], "council": { "_readme": "Galactic Council. Convenes once enough of the galaxy is settled, then every interval turns. An empire wins outright at winFraction of total votes; votes are proportional to population.", "firstTurn": 110, "interval": 30, "minColonizedFraction": 0.45, "winFraction": 0.6667, "abstainAttitude": -25, "submitAttitude": -25 }, "diplomacy": { "_readme": "Tunables for gifts, trade agreements, border/fleet proximity tension, and enemy-of-my-enemy attitude triangulation. See VegaDiplomacy.js.", "gift": { "tiers": [ { "id": "modest", "name": "Modest Gift", "bc": 25, "delta": 4 }, { "id": "generous", "name": "Generous Gift", "bc": 75, "delta": 9 }, { "id": "lavish", "name": "Lavish Gift", "bc": 200, "delta": 18 } ], "cooldownTurns": 8, "repeatPenaltyFactor": 0.4, "aiProposeChance": 0.06, "aiMaxTreasuryFraction": 0.25 }, "tradeAgreement": { "attitudeThreshold": 15, "formBonus": 10, "bcRatePerPop": 0.05, "aiProposeChance": 0.08 }, "alliance": { "_readme": "AI-proposal side of Alliance. wouldAccept('alliance') reads attitudeThreshold too, so this is the single source of truth for the 45-point bar both proposing and accepting share.", "attitudeThreshold": 45, "aiProposeChance": 0.25 }, "warRequest": { "_readme": "\"Please make peace with them\" — a request about a THIRD PARTY's war (VegaDiplomacy.js's wouldAcceptPeaceRequest/requestPeace/offerPeaceRequest). friendThreshold is how much the one being asked has to like the requester to grant it as a favor when they wouldn't otherwise; refuseBelowAttitude is how bad their own war with the third party can be before even a friend's plea is waved off. aiProposeChance is per-friend-per-turn, checked only once the human is already at war with that friend.", "friendThreshold": 40, "refuseBelowAttitude": -70, "aiProposeChance": 0.15 }, "espionage": { "_readme": "Sabotage magnitude when a runEspionage roll succeeds with mission 'sabotage' (VegaLogic.js). Targeting/frequency/odds are unchanged from the steal-tech path; this only controls what a sabotage success does. A successful mission (sabotage or tech theft) carries no attitude penalty — nobody publicly knows who did it, so there's nobody for the victim to be angry at; getting CAUGHT is the one outcome that still costs relations.", "sabotageFactoriesFraction": 0.25, "sabotageDefenseFraction": 0.25 }, "borderTension": { "colonyRange": 6, "colonyMaxPerTurn": 1, "fleetRange": 3, "fleetMaxPerTurn": 2 }, "fleetIntrusion": { "graceTurns": 1, "basePerTurn": 3, "escalationPerTurn": 2, "capPerTurn": 15 }, "triangulation": { "_readme": "Enemy-of-my-enemy pull, and how much it makes empires forgive each other's border/fleet/colony congestion (applyBorderTension, applyFleetProximityTension, checkFleetIntrusions all read sharedEnemyForgiveness).", "hostileThreshold": -10, "perSharedEnemy": 3, "maxPerTurn": 12, "sharedEnemyForgiveness": 0.15, "scope": "galaxy" } }, "economy": { "_readme": "Core economic constants. Sliders are the five MOO1 allocation channels; buildings multiply the channel they name.", "channels": ["ships", "defense", "industry", "ecology", "research"], "channelNames": { "ships": "Construction", "defense": "Defence", "industry": "Industry", "ecology": "Ecology", "research": "Research" }, "startingBC": 100, "startingPop": 50, "startingFactories": 30, "growthRateBase": 0.04, "factoryCost": 10, "factoryOutput": 1, "popOutput": 0.5, "wastePerFactory": 0.2, "wasteCleanupCost": 2, "tradePerPop": 0.3, "shipUpkeepFraction": 0.02, "colonyBaseCost": 100, "reserveTransferLoss": 0.5, "baseFuelRange": 5, "starbaseRangeBonus": 4 }, "combat": { "_readme": "Tactical grid battle. The grid is small on purpose — MOO1 battles are decided by fleet composition, not manoeuvre. siegeFreezesDefense (default true) stops a colony's passive defenseHp trickle (and any defensive building at the front of its build queue) while a hostile warship fleet is present — set false to restore the old always-regen behaviour. planetDefensePerShot (5) and planetShotDamageMult (1) are VegaCombatV2.js-only: colony.defenseHp is read as an ammo count for that one battle (one full-strength shot per planetDefensePerShot points, any remainder firing as a single final fractional-strength shot), NOT as in-battle damage output any more, and it is never decremented by battle outcome — see applyBattleOutcome, which stops writing it back. planetShotDamageMult is a pure balance multiplier on top of the tech-scaled per-shot damage (VegaLogic.js's prepareBattleAt computes that from the defending empire's best known weapon). planetDefenseScale above is unaffected and continues to be read only by the V1 grid resolver (?movsim's Live toggle / resolveInvasion's dead-for-space-combat sibling). Brian's ask, 2026-08-15.", "gridCols": 12, "gridRows": 8, "maxRounds": 60, "beamRounds": 5, "baseHitChance": 0.5, "hitPerTargeting": 0.06, "hitPerDefense": 0.004, "hitPerAttack": 0.004, "beamRange": 1, "missileRange": 6, "retreatAfterRound": 1, "disengageRound": 25, "planetDefenseScale": 0.06, "planetDefensePerShot": 5, "planetShotDamageMult": 1, "bombardPopKill": 0.22, "bombardFactoryKillMult": 1, "bombardBuildingDestroyMult": 1, "bombardDefensiveBuildingDestroyMult": 0.25, "groundOddsScale": 0.01, "cloakEvasion": 0.02, "singularityShieldPierce": 0.5, "siegeFreezesDefense": true }, "_combatV2Readme": "Constants for the VegaCombatV2 per-ship prototype only (behind ?movsim's Live/V2 toggle) — completely separate from 'combat' above, which the live engine still reads unmodified. World space is continuous 2D, not a lane, and combat runs in continuous simulated TIME, not discrete rounds: every ship has its own firing cooldown (turnSeconds, seconds between shots — armed the moment it first comes into weapon range of its target, matching real-time engagement rather than a synchronized lockstep round) and moves/turns continuously every tick rather than snapping once per round. moveUnitsPerSpeed is world units per SECOND now (was per old discrete round, at 100) — deliberately slowed down, not just time-converted, per Brian's explicit ask for a slower, more deliberate pace. turnRateScale converts each hull's turnRateBase (still degrees, still hand-tuned per hull, still living in the hulls block) into a per-second max angular velocity; spinUpSeconds is how long a ship takes to spin up to that max rate from a standing start, which is what gives turning real momentum instead of an instant snap. separationUnit/separationWeight tune the collision-avoidance steering (VegaCombatV2.js's computeSeparation) — separationUnit is the 'personal space' radius per point of a hull's sizeScale, so bigger ships keep proportionally more distance. Ships also carry real LINEAR momentum (vx/vy, independent of facing) — each hull's brakeSeconds (hulls block) sets how hard it can actually decelerate; a hull whose stopping distance at full speed exceeds beamRange physically cannot stop before reaching its target and blows through for another pass instead (see computeShipMove's comment). avoidAccel is a flat, hull-independent acceleration budget for collision avoidance ONLY, deliberately NOT drawn from a hull's own (possibly weak) linearAccel — several ships converging on the same weighted-random target approach nearly in formation, and a frigate's deliberately poor brakes must not also mean it can't swerve around a teammate on that same course. Kept deliberately gentle (not a strong repulsion) per Brian's explicit ask — ships should attempt to avoid each other, not bounce, and overlapping when their actual objectives require it (e.g. a strafing pass, or several ships converging on one target) is fine. beamRange/missileRange are unchanged by any of this (spatial, not temporal) — every other combat constant (hit-chance coefficients, cloakEvasion, singularityShieldPierce) is shared by reading rules.combat directly, since none of it is range/position/time-scaled; retreatAfterRound/disengageRound are reinterpreted as seconds (×turnSeconds) rather than duplicated here. damageMultiplier scales each weapon's raw output (before shield mitigation) in VegaCombatV2.js's fireMounts() ONLY — the live engine's weapon damage (read from the same shared VegaShips.js designs) is completely untouched, so this shortens V2 battle length without changing live-game balance at all. Brian's explicit ask, after watching V2 play out live and finding fights took too many exchanges to resolve. centeringAccel is a flat, hull-independent acceleration budget (same shape as avoidAccel) that gently pulls a ship back toward roughly where the battle STARTED once it has wandered meaningfully beyond that starting footprint — VegaCombatV2.js's computeCenteringForce/createBattle for the full mechanism; Brian's ask after noticing battles look great early on and then drift off the fixed camera framing by the end. Zero force within the battle's own actual starting spread (formation-and-fleet-size-aware, not a guessed world fraction), ramping in only beyond it. maxDurationSeconds is V2's OWN total time budget (VegaCombatV2.js's maxDurationSec(b) helper), deliberately decoupled from rules.combat.maxRounds (shared with the live engine's round cap) — measuring actual battle outcomes found the disengage timer was firing in essentially every simulated battle before combat concluded naturally regardless of damage level, so raising the ceiling (120s -> 240s) and disengageFraction (0.85 -> 0.9, now 216s before the weaker side is forced to flee, was 102s) gives combat meaningfully more room to resolve on its own merits. IMPORTANT interaction: raising the duration ceiling alone made battles LONGER, not shorter (removing what had effectively been an implicit cap) — damageMultiplier is the lever that actually shortens things once the ceiling isn't artificially truncating fights; went 1.6 -> 2.8 after measuring that duration keeps dropping sharply as multiplier climbs while decisiveness (fraction resolving by real destruction, not forced retreat) holds or improves, not degrades. planetRange (1200, ~1/3 of the fully-zoomed-out visible battlefield width, 2x missileRange, 5.5x beamRange) is a new range limit for planetary defenses' own firing, gated in the tick loop exactly the way a ship's mountsMaxRange gates it — before this, the planet fired at any distance, the only entity in the battle with no range check at all. Brian's ask, 2026-08-15.", "combatV2": { "worldWidth": 3600, "worldHeight": 2400, "moveUnitsPerSpeed": 25, "beamRange": 220, "missileRange": 600, "planetRange": 1200, "turnSeconds": 2, "turnRateScale": 0.25, "spinUpSeconds": 1.5, "separationUnit": 70, "separationWeight": 1.2, "avoidAccel": 60, "damageMultiplier": 2.8, "maxDurationSeconds": 240, "disengageFraction": 0.9, "centeringAccel": 45 }, "victory": { "_readme": "Two win conditions, matching MOO1: kill everyone, or be voted High Guardian by the Council.", "conquest": true, "council": true, "turnCap": 800, "stalemateTurn": 150 }, "starNames": [ "Vega", "Altair", "Rigel", "Deneb", "Antares", "Mizar", "Alcor", "Spica", "Procyon", "Regulus", "Bellatrix", "Castor", "Pollux", "Capella", "Arcturus", "Aldebaran", "Fomalhaut", "Achernar", "Canopus", "Hadar", "Alnair", "Alphard", "Alnilam", "Saiph", "Mintaka", "Elnath", "Sadr", "Izar", "Rasalhague", "Nunki", "Kaus", "Menkar", "Algol", "Zubeneschamali", "Unukalhai", "Tarazed", "Alshain", "Sheratan", "Hamal", "Diphda", "Markab", "Scheat", "Enif", "Sadalsuud", "Skat", "Ancha", "Kitalpha", "Biham", "Homam", "Matar", "Talitha", "Merak", "Phecda", "Megrez", "Alioth", "Dubhe", "Cor Caroli", "Chara", "Thuban", "Edasich", "Kochab", "Pherkad", "Yildun", "Errai", "Alfirk", "Alderamin", "Kurhah", "Segin", "Ruchbah", "Caph" ] }