{ "_comment": "Build console (the deck's BUILD button on a planet surface → js/ui/BuildWindow.js). Research UNLOCKS a build (data/research/*.json → unlocks.builds); building then COSTS resources + time on a planet and applies the effect (e.g. the level-2 tether). Pure rules/state: js/build/BuildModel.js + BuildState.js (dev/builds.test.mjs). One build at a time (maxConcurrent), ticked by the SurfaceScene while on the surface; the state (js/scenes/GameScene.js → buildState) outlives the stay and saves with the run.", "enabled": true, "timeUnit": "seconds", "maxConcurrent": 1, "categories": [ { "id": "planet", "label": "Planet", "accent": "#ffc94d" }, { "id": "cargo", "label": "Cargo", "accent": "#7ce8a4" }, { "id": "mining", "label": "Mining", "accent": "#ff8a3d" } ], "defaultCategory": "planet", "video": { "file": "assets/videos/build.mp4", "aspect": [2, 3] }, "resources": { "credits": { "label": "Credits", "icon": "credit", "color": "#7ce8a4" }, "minerals": { "label": "Minerals", "icon": "mineral", "color": "#00e5ff" } }, "builds": { "tether-l1": { "label": "Tether - Level 1", "description": "The world's first tether: a level-1 field (range 5120 px) anchoring the ship's travel rim around the planet. The home world ships with it already in place; on every other world this is the build that installs it.", "icon": "tether", "category": "planet", "targets": ["planet"], "cost": {}, "duration": 0, "requires": [], "repeatable": false, "starting": ["home"], "effects": { "tether": { "level": 1, "anchor": "target" } }, "theme": { "color": "#00e5ff" } }, "tether-l2": { "label": "Tether - Level 2", "description": "Extends the planet's tether to level 2: the field's range grows from 5120 px to 10240 px around the world. Requires the level-2 tether research and a planet already holding a level-1 tether. Installed in 20 seconds for 200 minerals.", "icon": "tether2", "category": "planet", "targets": ["planet"], "cost": { "minerals": 200 }, "duration": 20, "requires": ["exploration/tether_l2"], "planetRequires": { "tetherLevel": 1 }, "repeatable": false, "effects": { "tether": { "level": 2, "anchor": "target" } }, "theme": { "color": "#00e5ff" } }, "tether-l3": { "label": "Tether - Level 3", "description": "Extends the planet's tether to level 3: the field's range grows from 10240 px to 20480 px around the world. Requires the level-3 tether research and a planet already holding a level-2 tether. Installed in 30 seconds for 300 minerals.", "icon": "tether3", "category": "planet", "targets": ["planet"], "cost": { "minerals": 300 }, "duration": 30, "requires": ["exploration/tether_l3"], "planetRequires": { "tetherLevel": 2 }, "repeatable": false, "effects": { "tether": { "level": 3, "anchor": "target" } }, "theme": { "color": "#00e5ff" } }, "mining-arm-improved": { "label": "Improved Mining Arm", "description": "A faster mining arm for the ship: it mines asteroids at 1.5 minerals per second (the base arm does 1.0). A ship upgrade — installed from any planet's console, it counts as built wherever the ship lands and is never re-bought.", "icon": "mining", "category": "mining", "targets": ["ship"], "cost": { "minerals": 200 }, "duration": 20, "requires": ["mining/improved_arm"], "repeatable": false, "effects": { "mining": { "rate": 1.5 } }, "theme": { "color": "#ff8a3d" } }, "mining-arm-advanced": { "label": "Advanced Mining Arm", "description": "The ship's fastest arm: it mines asteroids at 2.0 minerals per second — twice the base arm. Supersedes the Improved Mining Arm (the faster arm always wins). A ship upgrade: built from any planet's console, counted wherever the ship lands.", "icon": "mining2", "category": "mining", "targets": ["ship"], "cost": { "minerals": 300 }, "duration": 20, "requires": ["mining/advanced_arm"], "repeatable": false, "effects": { "mining": { "rate": 2.0 } }, "theme": { "color": "#ff8a3d" } }, "mining-storage-improved": { "label": "Improved Mining Storage", "description": "Expands the ship's mineral hold to 350 (100 more than the base 250). A ship upgrade: built from any planet's console, counted wherever the ship lands.", "icon": "storage", "category": "mining", "targets": ["ship"], "cost": { "minerals": 200 }, "duration": 20, "requires": ["mining/improved_storage"], "repeatable": false, "effects": { "mining": { "capacity": 350 } }, "theme": { "color": "#ff8a3d" } } }, "_template": { "_comment": "Shape of one entry in `builds` (the _ keys are documentation, never builds).", "label": "string — shown in the list and the detail readout", "description": "string — detail readout text", "icon": "tether | tether2 | tether3 | anchor | signal | mining | mining2 | storage | diamond — procedural glyph (js/research/ResearchIcons.js)", "category": "planet | cargo | mining — which tab of the console (registry above)", "targets": ["planet"], "_targets": "[\"planet\"] = installed on the planet's surface; [\"ship\"] = a SHIP upgrade (mining arms/storage): built from any planet's console, the effect is ship-wide and it counts as BUILT wherever the ship lands (never re-bought)", "cost": { "credits": 0, "minerals": 200 }, "duration": "number — seconds (timeUnit above); 0 = instant", "requires": ["exploration/tether_l2"], "repeatable": false, "starting": ["home"], "planetRequires": { "tetherLevel": 1 }, "effects": { "tether": { "level": 2, "anchor": "target" }, "mining": { "rate": 1.5, "capacity": 350 } }, "_effects": "applied on completion, data-driven (GameScene._applyBuildEffects): tether.level = the target world's tether field (anchor target = the built-from planet, home = the home world); mining.rate = the ship's mining speed (minerals/s, MAX wins — never downgrades); mining.capacity = the ship's mineral hold cap (MAX wins)", "theme": { "color": "#00e5ff" } } }