orbit/data/quests.json

103 lines
5.5 KiB
JSON

{
"_comment": "The QUESTS console (deck slot right of SHIP, main deck + surface deck). The window mirrors the RESEARCH/MAP consoles (js/ui/QuestWindow.js): a 2:3 archive feed (assets/videos/quests.mp4 — the same aspect as assets/videos/research.mp4; NO SIGNAL plate until the clip is authored) on the left, and on the right the category tabs (Main Story / Side Quests — side quests are not defined yet: the tab is a STANDBY socket), a THIN list of active quests, and the big detail plate below it: title, issuer, description, the requirement checklist, and the reward, with the CLAIM action. A quest's progress is computed LIVE from the run (research, lifetime minerals mined from asteroids, the home tether's level, discovery) — js/quests/QuestState.js only tracks who holds which quest and whether its reward has been claimed, and that is what gets saved.",
"enabled": true,
"title": "OPERATIONS DOSSIER",
"meta": "MISSION LOG // ACTIVE CONTRACTS",
"video": {
"file": "quests.mp4",
"_comment": "The archive feed (assets/videos/). quests.mp4 mirrors the 2:3 aspect of research.mp4 — fit the same way.",
"aspect": [2, 3]
},
"sweep": {
"_comment": "The band that crawls down the feed (the research/map console's sweep, tuned for this window).",
"enabled": true,
"intervalMs": [5200, 9800],
"durationMs": [1400, 2200]
},
"glitch": {
"enabled": true,
"intervalMs": [4200, 9200],
"durationMs": [110, 260],
"slices": [1, 4],
"maxOffset": 9
},
"tabs": [
{
"id": "main",
"label": "Main Story",
"accent": "#00e5ff",
"_comment": "The campaign's spine. Live — the starter quest is granted on the run's first boot."
},
{
"id": "side",
"label": "Side Quests",
"accent": "#ffc94d",
"standby": true,
"_comment": "The socket for side quests — deferred by design. Pressing it toasts the standby note until side quests are authored (quests.json → quests, category 'side')."
}
],
"sideStandbyNote": "SIDE QUESTS OFFLINE — NO CONTRACTS ON FILE YET",
"starterToast": {
"_comment": "The one-shot note when the starter quest lands on a fresh ledger (GameScene.create).",
"glyph": "◆",
"color": "#ffc94d",
"text": "NEW QUEST — {title}"
},
"readyToast": {
"glyph": "◆",
"color": "#ffc94d",
"text": "QUEST READY — {title} · CLAIM ITS REWARD"
},
"claimToast": {
"glyph": "✓",
"color": "#67e863",
"text": "REWARD CLAIMED — +{n} MINERALS"
},
"claimDenyToast": {
"glyph": "✗",
"color": "#ff5c77",
"text": "REQUIREMENTS INCOMPLETE — {missing}"
},
"tracker": {
"_comment": "The QUEST TRACKER HUD (js/ui/QuestTrackerHud.js) — the thin quest list that slides in from offscreen-left right below the system dossier ONCE the dossier has folded (auto-fold or the player's manual fold — first fold arms it; visible ⇔ dossier folded). ACTIVE = held + not claimed. Titles stack main-story-first then side-quests, up to maxVisible, the priority quest's checklist renders under its title and tracks LIVE (GameScene.questSnapshot); more than maxVisible → SHOW MORE (opens the QUESTS console on the first hidden quest). The ONE priority quest (js/quests/QuestState.js): the player sets/clears it (row popup + the console's SET PRIORITY), else the first active story quest is the priority; claiming it auto-advances to the next story/side quest. priorityToast/clearToast fire on set/clear (data colors: green = the tracker accent, dim = the cleared note).",
"enabled": true,
"title": "QUESTS",
"noneTracked": "NONE TRACKED",
"showMore": "SHOW MORE",
"maxVisible": 5,
"slideMs": 320,
"priorityToast": {
"glyph": "◆",
"color": "#67e863",
"text": "PRIORITY SET — {title}"
},
"clearToast": {
"glyph": "·",
"color": "#7d92c4",
"text": "PRIORITY CLEARED"
}
},
"quests": [
{
"id": "start_your_journey",
"category": "main",
"starter": true,
"icon": "diamond",
"title": "Start Your Journey",
"description": "The universe is cold, and it ain't gonna do you any favors kid. The sooner you discover that, the sooner you'll be able to start taking care of yourself. And what better way to discover the universe, than to discover the universe.",
"issuer": "A Friend",
"_comment": "The first quest, granted on the run's first boot (js/quests/QuestState.js → starters). Its checklist is the run's opening arc — research, mine, build, discover. The checks are LIVE: 'research' resolves against data/research/exploration.json (the Tether Level 2 node), 'mineralsMined' against the run's lifetime asteroid mining (the Mining sequence's onOre), 'tetherBuilt' against the home world's standing tether level, 'discoveredWorld' against the discovery ledger (any discovered world besides the home).",
"checks": [
{ "type": "research", "category": "exploration", "node": "tether_l2", "label": "Research Tether Level 2" },
{ "type": "mineralsMined", "amount": 200, "label": "Mine 200 Minerals from asteroids" },
{ "type": "tetherBuilt", "planet": "home", "level": 2, "label": "Build a Level 2 Tether on your Home world" },
{ "type": "discoveredWorld", "count": 1, "label": "Discover another planet or space station" }
],
"reward": {
"minerals": 200,
"_comment": "The completion reward — 200 Minerals, claimed via the CLAIM REWARD action (fits the ship's hold: ship.stats.mineralStorage)."
}
}
]
}