orbit/data/save.json

97 lines
3.5 KiB
JSON

{
"_comment": "SAVE SYSTEM — 10 slots of saved games in localStorage (js/save/SaveManager.js). The MENU button on the command deck folds up a sub-bar (js/ui/MenuSubBar.js): Save Game / Load Game (grayed out while no saves exist) / Return to Main Menu. Both save verbs open the slot pop-up (js/ui/SavePanel.js) — 10 slots, overwrite + load confirmations, and a bulk download of every saved game. All copy/colors/timing for the three pieces live here.",
"slots": 10,
"storageKey": "orbit.saves.v1",
"format": 1,
"subBar": {
"_comment": "The sub-bar that folds up from the deck's Menu button. `items` is the ordered button list (id fired via onAction, label, accent). animation: openMs/closeMs = the fold duration; staggerMs = between each button's flicker-in; microBurst = the ambient glitch the open bar keeps up (a faint slice + RGB pulse now and then).",
"enabled": true,
"height": 58,
"padding": 16,
"gap": 12,
"button": { "fontSize": 13, "letterSpacing": 2, "paddingX": 18, "paddingY": 9 },
"items": [
{ "id": "save", "label": "Save Game", "accent": "#00e5ff" },
{ "id": "load", "label": "Load Game", "accent": "#ffc94d" },
{ "id": "mainMenu", "label": "Return to Main Menu", "accent": "#ff2d6f" }
],
"animation": {
"openMs": 340,
"closeMs": 200,
"ghostStart": 12,
"staggerMs": 70,
"buttonStart": 0.34,
"microBurst": { "enabled": true, "intervalMs": [2800, 6800] }
}
},
"panel": {
"_comment": "The save/load pop-up (the MEMORY BANK). slotW/slotH = one slot card, cols = cards per row (10 slots total). downloadLabel = the bulk-export button in the footer. animation: openMs/closeMs = the split-open duration, staggerMs between slot flicker-ins.",
"slotW": 138,
"slotH": 98,
"cols": 5,
"gap": 10,
"padding": 22,
"headerH": 56,
"footerH": 44,
"title": {
"save": "SAVE GAME",
"load": "LOAD GAME"
},
"subtitle": {
"save": "SELECT A SLOT TO WRITE THE CURRENT SIGNAL",
"load": "SELECT A SLOT TO RESTORE THE SIGNAL"
},
"slotEmpty": "NO SIGNAL",
"downloadLabel": "DOWNLOAD ALL SAVED GAMES",
"animation": {
"openMs": 300,
"closeMs": 190,
"staggerMs": 55,
"ghostStart": 10
}
},
"confirm": {
"_comment": "The confirm dialog inside the pop-up. overwrite = replacing an occupied slot; load = restoring a slot (replaces the live game). accent per context; body lines are the detail lines under the title.",
"width": 430,
"height": 168,
"overwrite": {
"title": "OVERWRITE SLOT {slot}?",
"accent": "#ff2d6f",
"body": [
"{detail}",
"THE SIGNAL IN THIS SLOT WILL BE DESTROYED"
],
"confirmLabel": "OVERWRITE",
"cancelLabel": "CANCEL"
},
"load": {
"title": "LOAD SLOT {slot}?",
"accent": "#ffc94d",
"body": [
"{detail}",
"THE LIVE GAME WILL BE REPLACED BY THIS SIGNAL"
],
"confirmLabel": "LOAD",
"cancelLabel": "CANCEL"
},
"animation": { "openMs": 170, "closeMs": 130 }
},
"colors": {
"panelTop": "#0e1930",
"panelBottom": "#050912",
"cardBg": "#0a1222",
"cardBorder": "#1e3050",
"ink": "#eaf6ff",
"dim": "#7d92c4",
"faint": "#3d4c74",
"neon": "#00e5ff",
"amber": "#ffc94d",
"magenta": "#ff2d6f"
},
"toast": {
"ok": { "color": "#00e5ff", "durationMs": 2600 },
"warn": { "color": "#ffc94d", "durationMs": 2600 },
"error": { "color": "#ff9b9b", "durationMs": 3200 }
}
}