commit ef1c8edb8c33decfdaaaee953e28c85401e55588 Author: dozens Date: Sat Sep 3 17:34:38 2022 -0600 init diff --git a/README.md b/README.md new file mode 100644 index 0000000..9859caf --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# one page solo engine + +https://inflatablestudios.itch.io/one-page-solo-engine + +## Getting Started + +You will need: + +- recutlis + +- casey/just + +## Usage + +New scenario: + +- `j new`: plot, event, scene + +NOTE: if `scene` returns YES, that is an alteration. Roll `j alteration`. + +Focus: + +- `j action` +- `j detail` +- `j topic` + +Oracle: + +- `j even` +- `j likely` +- `j unlikely` + +NPC: + +- `j npc` + +GM Moves: + +- `j pacing` to spice things up +- `j failure` for when things go bad + +Dungeon and Hex: + +- `j dungeon` +- `j hex`: populate neighboring hexes +- `j hexevent`: an event for this hex + + +## Todo + +- [ ] create/read/update delete NPCs +- [ ] create/read/update delete threads +- [x] basic generators diff --git a/db.rec b/db.rec new file mode 100644 index 0000000..51142f2 --- /dev/null +++ b/db.rec @@ -0,0 +1,670 @@ +%rec: domain + +id: 1 +text: Physical (appearance, existence) + +id: 2 +text: Technical (mental, operation) + +id: 3 +text: Mystical (meaning, capability) + +id: 4 +text: Social (personal, connection) + +%rec: complication + +id: 1 +text: Hostile forces oppose you + +id: 2 +text: An obstacle blocks your way + +id: 3 +text: Wouldn't it suck if... + +id: 4 +text: An NPC acts suddenly + +id: 5 +text: All is not as it seems + +id: 6 +text: Things actually go as planned + +%rec: alteredscene + +id: 1 +text: no + +id: 2 +text: no + +id: 3 +text: no + +id: 4 +text: no + +id: 5 +text: yes + +id: 6 +text: yes + + +%rec: alteration + +id: 1 +text: A major detail of the scene is enhanced or somehow worse + +id: 2 +text: The environment is different + +id: 3 +text: Unexpected NPCs are present + +id: 4 +text: Add a SCENE COMPLICATION + +id: 5 +text: Add a PACING MOVE + +id: 6 +text: Add a RANDOM EVENT + +%rec: likely + +id: 1 +text: no + +id: 2 +text: no + +id: 3 +text: yes + +id: 4 +text: yes + +id: 5 +text: yes + +id: 6 +text: yes + +%rec: even + +id: 1 +text: no + +id: 2 +text: no + +id: 3 +text: no + +id: 4 +text: yes + +id: 5 +text: yes + +id: 6 +text: yes + +%rec: unlikely + +id: 1 +text: no + +id: 2 +text: no + +id: 3 +text: no + +id: 4 +text: no + +id: 5 +text: yes + +id: 6 +text: yes + +%rec: intensifier + +id: 1 +text: but... + +id: 2 +text: + +id: 3 +text: + +id: 4 +text: + +id: 5 +text: + +id: 6 +text: and... + +%rec: how + +id: 1 +text: Surprisingly lacking + +id: 2 +text: Less than expected + +id: 3 +text: About average + +id: 4 +text: About average + +id: 5 +text: More than expected + +id: 6 +text: Extraordinary + +%rec: pacing + +id: 1 +text: Foreshadow Trouble + +id: 2 +text: Reveal a New Detail + +id: 3 +text: An NPC Takes Action + +id: 4 +text: Advance a Threat + +id: 5 +text: Advance a Plot + +id: 6 +text: Add a RANDOM EVENT to the scene + +%rec: failure + +id: 1 +text: Cause Harm + +id: 2 +text: Put Someone in a Spot + +id: 3 +text: Offer a Choice + +id: 4 +text: Advance a Threat + +id: 5 +text: Reveal an Unwelcome Truth + +id: 6 +text: Foreshadow Trouble + +%rec: action + +id: 1 +text: Seek + +id: 2 +text: Command + +id: 3 +text: Oppose + +id: 4 +text: Take + +id: 5 +text: Communicate + +id: 6 +text: Protect + +id: 7 +text: Move + +id: 8 +text: Assist + +id: 9 +text: Harm + +id: 10 +text: Transform + +id: 11 +text: Create + +id: 12 +text: Deceive + +id: 13 +text: Reveal + +%rec: detail + +id: 1 +text: Small + +id: 2 +text: Unsavory + +id: 3 +text: Large + +id: 4 +text: Specialized + +id: 5 +text: Old + +id: 6 +text: Unexpected + +id: 7 +text: New + +id: 8 +text: Exotic + +id: 9 +text: Mundane + +id: 10 +text: Dignified + +id: 11 +text: Simple + +id: 12 +text: Unique + +id: 13 +text: Complex + +%rec: topic + +id: 1 +text: Current Need + +id: 2 +text: Rumors + +id: 3 +text: Allies + +id: 4 +text: A Plot Arc + +id: 5 +text: Community + +id: 6 +text: Recent Events + +id: 7 +text: History + +id: 8 +text: Equipment + +id: 9 +text: Future Plans + +id: 10 +text: A Faction + +id: 11 +text: Enemies + +id: 12 +text: The PCs + +id: 13 +text: Knowledge + +%rec: objective + +id: 1 +text: Eliminate a threat + +id: 2 +text: Learn the truth + +id: 3 +text: Recover something valuable + +id: 4 +text: Escort or deliver to safety + +id: 5 +text: Restore something broken + +id: 6 +text: Save an ally in peril + + +%rec: adversary + +id: 1 +text: A powerful organization + +id: 2 +text: Outlaws + +id: 3 +text: Guardians + +id: 4 +text: Local inhabitants + +id: 5 +text: Enemy horde or force + +id: 6 +text: A new or recurring villain + + +%rec: reward + +id: 1 +text: Money or valuables + +id: 2 +text: Money or valuables + +id: 3 +text: Knowledge and secrets + +id: 4 +text: Support of an ally + +id: 5 +text: Advance a plot arc + +id: 6 +text: A unique item of power + + +%rec: identity + +id: 1 +text: Outlaw + +id: 2 +text: Entertainer + +id: 3 +text: Drifter + +id: 4 +text: Adherent + +id: 5 +text: Tradesman + +id: 6 +text: Leader + +id: 7 +text: Commoner + +id: 8 +text: Mystic + +id: 9 +text: Soldier + +id: 10 +text: Adventurer + +id: 11 +text: Merchant + +id: 12 +text: Lord + +id: 13 +text: Specialist + + +%rec: goal + +id: 1 +text: Obtain + +id: 2 +text: Enrich Self + +id: 3 +text: Learn + +id: 4 +text: Avenge + +id: 5 +text: Harm + +id: 6 +text: Fulfill Duty + +id: 7 +text: Restore + +id: 8 +text: Escape + +id: 9 +text: Find + +id: 10 +text: Create + +id: 11 +text: Travel + +id: 12 +text: Serve + +id: 13 +text: Protect + +%rec: feature + +id: 1 +text: Unremarkable + +id: 2 +text: Notable nature + +id: 3 +text: Obvious physical trait + +id: 4 +text: Quirk or mannerism + +id: 5 +text: Unusual equipment + +id: 6 +text: Unexpected age or origin + +%rec: location + +id: 1 +text: Typical area + +id: 2 +text: Transitional area + +id: 3 +text: Living area or meeting place + +id: 4 +text: Working or utility area + +id: 5 +text: Area with a special feature + +id: 6 +text: Location for a specialized purpose + + +%rec: encounter + +id: 1 +text: None + +id: 2 +text: None + +id: 3 +text: Hostile enemies + +id: 4 +text: Hostile enemies + +id: 5 +text: An obstacle blocks the way + +id: 6 +text: Unique NPC or adversary + + +%rec: object + +id: 1 +text: Nothing, or mundane objects + +id: 2 +text: Nothing, or mundane objects + +id: 3 +text: An interesting item or clue + +id: 4 +text: A useful tool, key, or device + +id: 5 +text: Something valuable + +id: 6 +text: Rare or special item + + +%rec: exits + +id: 1 +text: Dead end + +id: 2 +text: Dead end + +id: 3 +text: 1 additional exit + +id: 4 +text: 1 additional exit + +id: 5 +text: 2 additional exits + +id: 6 +text: 2 additional exits + + +%rec: hexterrain + +id: 1 +text: Same as current hex + +id: 2 +text: Same as current hex + +id: 3 +text: Common terrain + +id: 4 +text: Common terrain + +id: 5 +text: Uncommon terrain + +id: 6 +text: Rare terrain + + +%rec: hexcontents + +id: 1 +text: Nothing notable + +id: 2 +text: Nothing notable + +id: 3 +text: Nothing notable + +id: 4 +text: Nothing notable + +id: 5 +text: Nothing notable + +id: 6 +text: Roll a HEXFEATURE + + +%rec: hexfeature + +id: 1 +text: Notable structure + +id: 2 +text: Dangerous hazard + +id: 3 +text: A settlement + +id: 4 +text: Strange natural feature + +id: 5 +text: New region (set new terrain types) + +id: 6 +text: DUNGEON CRAWLER entrance + + +%rec: hexevent + +id: 1 +text: None + +id: 2 +text: None + +id: 3 +text: None + +id: 4 +text: None + +id: 5 +text: RANDOM EVENT then SET THE SCENE + +id: 6 +text: RANDOM EVENT then SET THE SCENE diff --git a/justfile b/justfile new file mode 100644 index 0000000..661eacc --- /dev/null +++ b/justfile @@ -0,0 +1,145 @@ +# show all options +default: + just --list --unsorted + +# show rec info +info: + @recinf db.rec + +# plot, event, scene +new: plot event scene + +# intensifier +butand: + @recsel -t intensifier -m 1 -P text db.rec + +# yes/no equal odds +even: + @recsel -t even -m 1 -P text db.rec && just butand + +# yes/no good odds +likely: + @recsel -t likely -m 1 -P text db.rec && just butand + +# yes/no poor odds +unlikely: + @recsel -t unlikely -m 1 -P text db.rec && just butand + +# set the scene +scene: altered + @recsel -t complication -m 1 -P text db.rec + +# is the scene altered? +altered: + @recsel -t alteredscene -m 1 -P text db.rec + +# ...if so, what is the alteration? +alteration: + @recsel -t alteration -m 1 -P text db.rec + +# how big, good, strong, numerous, etc something is +how: + @recsel -t how -m 1 -P text db.rec + +# when there is a lull +pacing: + @recsel -t pacing -m 1 -P text db.rec + +# when things go bad +failure: + @recsel -t failure -m 1 -P text db.rec + +# add a random event +event: action topic + +# domain +domain: + @recsel -t domain -m 1 -P text db.rec + +# what does it do? +action: + @recsel -t action -m 1 -P text db.rec && just domain + +# what kind of thing is it? +detail: + @recsel -t detail -m 1 -P text db.rec && just domain + +# what is this about? +topic: + @recsel -t topic -m 1 -P text db.rec && just domain + +# generic generator +generate: action detail how + +# objective +objective: + @recsel -t objective -m 1 -P text db.rec + +# adversary +adversary: + @recsel -t adversary -m 1 -P text db.rec + +# reward +reward: + @recsel -t reward -m 1 -P text db.rec + +# plot hook +plot: objective adversary reward + +# identity +identity: domain + @recsel -t identity -m 1 -P text db.rec + +# goal +goal: domain + @recsel -t goal -m 1 -P text db.rec + +# feature +feature: + @recsel -t feature -m 1 -P text db.rec + +# NPC +npc: identity goal feature detail how topic + +# dungeon theme +theme: detail action + +# location +location: + @recsel -t location -m 1 -P text db.rec + +# encounter +encounter: + @recsel -t encounter -m 1 -P text db.rec + +# object +object: + @recsel -t object -m 1 -P text db.rec + +# exits +exits: + @recsel -t exits -m 1 -P text db.rec + +# dungeon location +dungeon: location encounter object exits + + +# region +hexterrain: + @recsel -t hexterrain -m 1 -P text db.rec + +# contents +hexcontents: + @recsel -t hexcontents -m 1 -P text db.rec + +# feature +hexfeature: + @recsel -t hexfeature -m 1 -P text db.rec + +# event +hexevent: + @recsel -t hexevent -m 1 -P text db.rec + +# hex +hex: hexterrain hexcontents hexfeature + @just --show hex