71 lines
3.1 KiB
JSON
71 lines
3.1 KiB
JSON
{
|
|
"_comment": "COMMAND DECK — the cyberpunk bar across the bottom of the screen (rendered by js/ui/ActionBar.js). Six evenly spaced slots: `buttons` is the ORDERED list — give a slot an `id` (the action it will fire) + `label` + `accent`, or leave both `null` for a reserved slot. Buttons currently fire `onAction` (see GameScene); the behavior behind them comes next. Everything visual is procedural (no image assets) and tunable here: layout in `height`/`margin`/`padding`/`button`, palette in `colors`, CRT scanlines in `scanline`, motion in `animation` (boot flicker, the rail comet, the glitch bursts, the RGB pull-apart).",
|
|
"enabled": true,
|
|
"height": 56,
|
|
"margin": { "left": 20, "right": 20, "bottom": 12 },
|
|
"padding": 16,
|
|
"button": {
|
|
"widthFactor": 0.72,
|
|
"maxWidth": 190,
|
|
"notch": 10,
|
|
"fontSize": 14,
|
|
"letterSpacing": 2.5
|
|
},
|
|
"buttons": [
|
|
{ "id": "research", "label": "Research", "accent": "#00e5ff" },
|
|
{ "id": "scan", "label": "Scan", "accent": "#ffc94d" },
|
|
{ "id": "ship", "label": "Ship", "accent": "#7ce8a4" },
|
|
{ "id": "map", "label": "Map", "accent": "#c084fc" },
|
|
{ "id": null, "label": null },
|
|
{ "id": "menu", "label": "Menu", "accent": "#ff2d6f" }
|
|
],
|
|
"surface": {
|
|
"_comment": "Deck layout for the surface (SurfaceScene): `research` is replaced by `shop` (toggles the world's shop clip — while the clip is up the slot relabels to `labelActive`, and pressing it swaps back) and `takeoff` sits to the left of `menu`. SurfaceScene passes this list to ActionBar via its `buttons` option; everything else (height, colors, animation) is shared with the flight deck.",
|
|
"buttons": [
|
|
{ "id": "shop", "label": "Shop", "labelActive": "Leave Shop", "accent": "#00e5ff" },
|
|
{ "id": "build", "label": "Build", "accent": "#ffc94d" },
|
|
{ "id": "ship", "label": "Ship", "accent": "#7ce8a4" },
|
|
{ "id": null, "label": null },
|
|
{ "id": "takeoff", "label": "Take Off", "accent": "#7ce8a4" },
|
|
{ "id": "menu", "label": "Menu", "accent": "#ff2d6f" }
|
|
]
|
|
},
|
|
"colors": {
|
|
"panelTop": "#101c36",
|
|
"panelBottom": "#04070e",
|
|
"slotBg": "#0b1322",
|
|
"slotBorder": "#22405f",
|
|
"rail": "#00e5ff",
|
|
"railBottom": "#ff2d6f",
|
|
"text": "#eaf6ff",
|
|
"reserved": "#3d4c74",
|
|
"hatch": "#78b4ff"
|
|
},
|
|
"scanline": {
|
|
"_comment": "CRT scanlines over the bar + buttons — the menu's recipe (one dark row per pitch rows). Defaults follow theme.overlay.scanline; override here for the deck only.",
|
|
"pitch": 3,
|
|
"alpha": 0.14
|
|
},
|
|
"animation": {
|
|
"bootStagger": 70,
|
|
"rgb": {
|
|
"_comment": "RGB pull-apart on labels/panel (the menu title's GlitchText technique): idleOffset px of constant chromatic fringe, burstOffset extra px at full burst, idleAlpha/burstAlpha ghost strength.",
|
|
"idleOffset": 1.8,
|
|
"burstOffset": 6,
|
|
"idleAlpha": 0.4,
|
|
"burstAlpha": 0.55
|
|
},
|
|
"comet": {
|
|
"enabled": true,
|
|
"everyMs": [3600, 7800],
|
|
"durationMs": 950
|
|
},
|
|
"glitch": {
|
|
"enabled": true,
|
|
"intervalMs": [3500, 9000],
|
|
"durationMs": [240, 480],
|
|
"slices": [3, 6]
|
|
}
|
|
}
|
|
}
|