starforged-cli
Version:
My goal is for this to be an easy-to-use CLI for playing Starforged solo. If your game ends up in a broken state of some sort, and no command yet exists to fix your issue, all of the game data you accumulate is stored in `~/starforged-cli/db.json` and you
107 lines (98 loc) • 2.71 kB
JavaScript
#! /usr/bin/env node
const prompts = require("prompts");
const { dice } = require("./commands/dice");
const { readAsset } = require("./commands/assets");
const { manageCharacter } = require("./commands/character");
const { story } = require("./commands/story");
const { referenceAMove } = require("./commands/referenceAMove");
const { npc } = require("./commands/npc");
const { runOracle } = require("./commands/oracles");
const { vows } = require("./commands/vows");
const { lore } = require("./commands/lore");
const { readDb, writeDb } = require("./db");
const { getCharacter } = require("./selectors/character.selectors");
const commands = {
dice,
story,
npc,
readAsset,
manageCharacter,
runOracle,
referenceAMove,
vows,
lore,
};
async function run() {
const data = await readDb();
const character = getCharacter(data);
if (character.legacy_tracks) {
console.log(
"Update character legacy tracks to new format. Marking these tracks and viewing/spending experience should work correctly now."
);
character.legacy = {
tracks: {
quests: character.legacy_tracks.quests,
bonds: character.legacy_tracks.bonds,
discoveries: character.legacy_tracks.discoveries,
},
spent_xp: 0,
};
delete character.legacy_tracks;
await writeDb(data);
}
const response = await prompts({
type: "autocomplete",
name: "command",
message: "Choose a command.",
choices: [
{
title: "Dice",
description: "See what fate has in store!",
value: "dice",
},
{
title: "Vows",
description: "Create, update, or delete vows.",
value: "vows",
},
{
title: "Moves",
description:
"Reference one of Starforged many moves and progress the story.",
value: "referenceAMove",
},
{
title: "NPC",
description: "Create, edit, or otherwise interact with npcs.",
value: "npc",
},
{
title: "Story",
description: "Add or view events in your story.",
value: "story",
},
{
title: "Lore",
description: "Add, remove, or edit the lore of your universe.",
value: "lore",
},
{
title: "Oracle",
description: "Roll up some random stuff.",
value: "runOracle",
},
{
title: "Assets",
description: "Get a closer look at an asset.",
value: "readAsset",
},
{
title: "Character",
description: "Create, update, or delete your character.",
value: "manageCharacter",
},
],
});
commands[response.command]();
}
run();