# Transcript [[!template text="""Introduction""" video="00:00:00.000" id="subtitle"mainVideo-solo]] [[!template new="1" text="""Hi there, I'm Howard Abrams. You may remember me""" start="00:00:00.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""from past conference talks""" start="00:00:05.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""as "Literate DevOps and the Temple of Doom"""" start="00:00:07.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""and "Using Eshell for Fun and Profit".""" start="00:00:10.520" video="mainVideo-solo" id="subtitle"]] [[!template text="""I'm here to talk to you about my latest Emacs project:""" start="00:00:13.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""playing games, solo role-playing games.""" start="00:00:16.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""I started playing RPGs when I got my first copy""" start="00:00:19.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""of Dungeons & Dragons when I was 12.""" start="00:00:23.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""Yes, my original copy burned""" start="00:00:25.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""in the Great Satanic Panic of the 1980s,""" start="00:00:28.280" video="mainVideo-solo" id="subtitle"]] [[!template text="""but that's another story.""" start="00:00:30.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""I started playing other RPGs like GURPS.""" start="00:00:32.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""These are some of my notes.""" start="00:00:37.920" video="mainVideo-solo" id="subtitle"]] [[!template text="""Back then, I was typing them in Emacs,""" start="00:00:40.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""but I formatted them with LaTeX.""" start="00:00:42.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""Later, when I was introducing my kids""" start="00:00:46.080" video="mainVideo-solo" id="subtitle"]] [[!template text="""to role-playing games,""" start="00:00:49.080" video="mainVideo-solo" id="subtitle"]] [[!template text="""I actually typed them up still in Emacs,""" start="00:00:50.840" video="mainVideo-solo" id="subtitle"]] [[!template text="""but now formatted them for a tablet.""" start="00:00:53.581" video="mainVideo-solo" id="subtitle"]] [[!template text="""I wrote a little JavaScript code""" start="00:00:57.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""that allowed me to click on it, and it would roll dice,""" start="00:00:59.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""generate random events, keep track of turn order,""" start="00:01:03.120" video="mainVideo-solo" id="subtitle"]] [[!template text="""you know, everything,""" start="00:01:06.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""so I didn't have to slow down the action of the game.""" start="00:01:07.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""Well, when my kids got older,""" start="00:01:10.120" video="mainVideo-solo" id="subtitle"]] [[!template text="""I still managed to sneak in a game of D&D""" start="00:01:13.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""once a week at lunch.""" start="00:01:15.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""This pastime came to a screeching halt with the pandemic.""" start="00:01:17.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""Solo RPGs""" video="00:01:20.680" id="subtitle"mainVideo-solo]] [[!template new="1" text="""I turned to playing role-playing games by myself""" start="00:01:20.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""to get my fix. Playing these silly elf games in solo mode""" start="00:01:23.640" video="mainVideo-solo" id="subtitle"]] [[!template text="""has been part of the game for many years,""" start="00:01:28.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""but with so many of us stuck at home,""" start="00:01:29.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""solo role-playing games really expanded,""" start="00:01:32.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""creative people releasing some amazing ideas.""" start="00:01:35.120" video="mainVideo-solo" id="subtitle"]] [[!template text="""What's a solo RPG like? Well, it's somewhere in the middle""" start="00:01:40.280" video="mainVideo-solo" id="subtitle"]] [[!template text="""of writing your own story, where anything's possible,""" start="00:01:44.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""but you've got to do all the imaginative work;""" start="00:01:47.520" video="mainVideo-solo" id="subtitle"]] [[!template text="""or reading a choose-your-own-adventure book,""" start="00:01:50.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""where the text is given to you,""" start="00:01:53.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""and you have free, a few predetermined paths;""" start="00:01:55.240" video="mainVideo-solo" id="subtitle"]] [[!template text="""and tactical battle games,""" start="00:01:59.080" video="mainVideo-solo" id="subtitle"]] [[!template text="""where dice determines everything.""" start="00:02:01.040" video="mainVideo-solo" id="subtitle"]] [[!template text="""It kind of fits in the sweet spot between those.""" start="00:02:03.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""While I started removing the Game Master""" start="00:02:05.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""using the Mythic GM Emulator,""" start="00:02:08.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""Ironsworn really captivated me.""" start="00:02:12.120" video="mainVideo-solo" id="subtitle"]] [[!template text="""I began with dice, pencils, notebooks, you know,""" start="00:02:15.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""just like when I was a kid. But taking notes on paper?""" start="00:02:19.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""Yeah, you know me. That's not my jam. Org mode is.""" start="00:02:23.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""And, you know, notes have to be in Org,""" start="00:02:28.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""well, why not write a little dice roller in Lisp?""" start="00:02:31.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""Well, when Shawn Tomkin released his Ironsworn""" start="00:02:35.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""under the Creative Commons, well,""" start="00:02:38.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""I could just download the entire text.""" start="00:02:41.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""I figured I could just render the entire game in Emacs.""" start="00:02:43.920" video="mainVideo-solo" id="subtitle"]] [[!template text="""Demo""" video="00:02:47.440" id="subtitle"mainVideo-solo]] [[!template new="1" text="""All right, enough talk. Let's get some Emacs action here,""" start="00:02:47.440" video="mainVideo-solo" id="subtitle"]] [[!template text="""while I show you a bit of my game.""" start="00:02:51.240" video="mainVideo-solo" id="subtitle"]] [[!template text="""When playing a solo RPG,""" start="00:02:55.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""I jot down the story notes in an Org file.""" start="00:02:57.520" video="mainVideo-solo" id="subtitle"]] [[!template text="""I mean, did you expect anything less from me?""" start="00:02:59.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""I alternate between lengthy prose and short notes.""" start="00:03:02.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""As I'm both the writer and the audience,""" start="00:03:07.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""the goal is just enjoyment.""" start="00:03:10.520" video="mainVideo-solo" id="subtitle"]] [[!template text="""So, this document is both a record log of my game sessions,""" start="00:03:12.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""as well as my character's character sheet.""" start="00:03:17.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""In most RPGs, a player's focus is a character sheet""" start="00:03:20.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""that lists all the attributes, the stats, equipment,""" start="00:03:24.520" video="mainVideo-solo" id="subtitle"]] [[!template text="""powers, you know, that sort of thing.""" start="00:03:27.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""For my game, I wanted the focus to be the prose,""" start="00:03:28.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""or at least the notes.""" start="00:03:32.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""So, I put down all the stats as Org mode properties.""" start="00:03:34.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""Now, I can collapse a property drawer""" start="00:03:38.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""and have functions""" start="00:03:40.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""that just grab values from these properties.""" start="00:03:42.120" video="mainVideo-solo" id="subtitle"]] [[!template text="""All right, let's play. While not important to my talk,""" start="00:03:45.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""I'm in the middle of a game. My character, Tegan,""" start="00:03:50.080" video="mainVideo-solo" id="subtitle"]] [[!template text="""promised to help a village by tracking down""" start="00:03:52.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""the son of a village chief. A less-than-stellar roll""" start="00:03:54.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""meant I didn't catch him before he entered""" start="00:03:59.240" video="mainVideo-solo" id="subtitle"]] [[!template text="""the mysterious underground structure""" start="00:04:01.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""of a relic of an ancient people.""" start="00:04:03.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""I just finished playing out the journey,""" start="00:04:06.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""and he's about to enter into the Catacombs of Svala's Blood.""" start="00:04:08.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""Randomization""" video="00:04:11.760" id="subtitle"mainVideo-solo]] [[!template new="1" text="""Why that name? Well, that was actually what came up""" start="00:04:11.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""from an extensive random number generator that I wrote.""" start="00:04:15.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""As I wrote more and more functions""" start="00:04:19.640" video="mainVideo-solo" id="subtitle"]] [[!template text="""to help me play this game,""" start="00:04:21.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""and since I don't play all the time,""" start="00:04:23.280" video="mainVideo-solo" id="subtitle"]] [[!template text="""I created hydra. I can roll dice,""" start="00:04:25.920" video="mainVideo-solo" id="subtitle"]] [[!template text="""I can roll dice challenges against the character stats,""" start="00:04:30.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""I can adjust stats. Lots of random generators""" start="00:04:34.080" video="mainVideo-solo" id="subtitle"]] [[!template text="""come from this oracle section.""" start="00:04:38.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""For instance, are footprints going through the door?""" start="00:04:39.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""I press `c`, and I'm prompted with how likely.""" start="00:04:43.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""Since the villagers gave Tegan vague directions,""" start="00:04:46.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""and he didn't see any signs the contrary,""" start="00:04:51.080" video="mainVideo-solo" id="subtitle"]] [[!template text="""I chose "likely". And, well, it originally said yes,""" start="00:04:53.240" video="mainVideo-solo" id="subtitle"]] [[!template text="""and that's why I jotted this information down.""" start="00:04:58.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""Now, this is different than my character's ability""" start="00:05:01.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""to notice the prints. This is about generating the story,""" start="00:05:03.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""something that the game master would do""" start="00:05:07.640" video="mainVideo-solo" id="subtitle"]] [[!template text="""in a typical role-playing game.""" start="00:05:10.280" video="mainVideo-solo" id="subtitle"]] [[!template text="""Now, if I wanted to name something,""" start="00:05:12.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""or even the current weather,""" start="00:05:14.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""I have random tables with the `C` keystroke.""" start="00:05:16.040" video="mainVideo-solo" id="subtitle"]] [[!template text="""Hmm, weather. Oh, it's summer, so hey,""" start="00:05:20.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""it's nice and clear. All right, let's play.""" start="00:05:27.280" video="mainVideo-solo" id="subtitle"]] [[!template text="""Moves""" video="00:05:31.960" id="subtitle"mainVideo-solo]] [[!template new="1" text="""The action in Ironsworn,""" start="00:05:31.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""like other Powered by the Apocalypse games,""" start="00:05:34.240" video="mainVideo-solo" id="subtitle"]] [[!template text="""is driven by moves. So, I hit the `m` key,""" start="00:05:37.040" video="mainVideo-solo" id="subtitle"]] [[!template text="""and all the moves show up.""" start="00:05:44.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""Now, I don't think I need to espouse""" start="00:05:46.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""the virtues of completing-read enhancements like Ivy.""" start="00:05:49.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""Here, I'm using orderless with vertico""" start="00:05:52.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""to help me find my choices.""" start="00:05:55.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""Since I've discovered a site, let's play that move.""" start="00:05:57.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""Reference""" video="00:06:03.640" id="subtitle"mainVideo-solo]] [[!template new="1" text="""I seldom remember the details for the moves,""" start="00:06:03.640" video="mainVideo-solo" id="subtitle"]] [[!template text="""so I figured, why not put the text of the book""" start="00:06:06.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""in an Org file and show it in a side window?""" start="00:06:09.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""The prompt at the bottom, asking for a name,""" start="00:06:11.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""is driven by the content in the displayed Org file.""" start="00:06:15.440" video="mainVideo-solo" id="subtitle"]] [[!template text="""This allows me to enhance my game without""" start="00:06:18.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""changing the original code. So, let's call this story arc,""" start="00:06:21.120" video="mainVideo-solo" id="subtitle"]] [[!template text="""Exploring the Catacombs of Svala's Blood.""" start="00:06:25.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""Ooh, sounds epic.""" start="00:06:31.840" video="mainVideo-solo" id="subtitle"]] [[!template text="""Story arcs""" video="00:06:34.680" id="subtitle"mainVideo-solo]] [[!template new="1" text="""Ironsworn tracks the beats of a narrative,""" start="00:06:34.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""so major plot points take up more room in the fiction""" start="00:06:37.240" video="mainVideo-solo" id="subtitle"]] [[!template text="""than minor plot points.""" start="00:06:40.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""Similar games like Blades in the Dark""" start="00:06:42.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""use numbers to track these, so you can say something like,""" start="00:06:45.040" video="mainVideo-solo" id="subtitle"]] [[!template text="""we're three quarters of the way through this story arc.""" start="00:06:48.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""Ironsworn just uses labels,""" start="00:06:51.080" video="mainVideo-solo" id="subtitle"]] [[!template text="""and while I want this particular story arc""" start="00:06:53.120" video="mainVideo-solo" id="subtitle"]] [[!template text="""to be significant, I really just want to get in,""" start="00:06:55.840" video="mainVideo-solo" id="subtitle"]] [[!template text="""find this person, and get out.""" start="00:06:59.520" video="mainVideo-solo" id="subtitle"]] [[!template text="""So, I'm going to call this "short".""" start="00:07:00.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""Next, it's asking about an Org mode header placement.""" start="00:07:04.040" video="mainVideo-solo" id="subtitle"]] [[!template text="""While I originally wanted my Org files""" start="00:07:09.280" video="mainVideo-solo" id="subtitle"]] [[!template text="""to be completely flexible,""" start="00:07:12.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""one thing I noticed in playing""" start="00:07:13.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""is that a pattern always emerged.""" start="00:07:15.920" video="mainVideo-solo" id="subtitle"]] [[!template text="""The story became a tree. You see, story arcs""" start="00:07:18.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""were just a series of montages or scenes,""" start="00:07:22.640" video="mainVideo-solo" id="subtitle"]] [[!template text="""and each of those were made of a series of events""" start="00:07:25.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""and challenges to overcome.""" start="00:07:27.920" video="mainVideo-solo" id="subtitle"]] [[!template text="""So, each Org mode header has a track,""" start="00:07:29.120" video="mainVideo-solo" id="subtitle"]] [[!template text="""which often becomes the number of subheadings.""" start="00:07:32.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""At any point, I can see how much track is being made.""" start="00:07:35.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""So, for instance, this one seems to be""" start="00:07:40.640" video="mainVideo-solo" id="subtitle"]] [[!template text="""about a third of the way through.""" start="00:07:47.240" video="mainVideo-solo" id="subtitle"]] [[!template text="""Using different stats""" video="00:07:48.680" id="subtitle"mainVideo-solo]] [[!template new="1" text="""So, let's dive into this ancient place.""" start="00:07:48.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""Since I've been walking through a misty forest,""" start="00:07:52.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""I can imagine vines hiding an immense door""" start="00:07:55.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""and a humid, earthy smell as I peer inside.""" start="00:07:59.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""But I don't have to write that stuff down,""" start="00:08:01.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""or if I want to practice my writing, I can.""" start="00:08:04.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""I can imagine the place is dark,""" start="00:08:06.920" video="mainVideo-solo" id="subtitle"]] [[!template text="""so Tegan lights a torch""" start="00:08:09.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""before peering into this obscure world.""" start="00:08:10.840" video="mainVideo-solo" id="subtitle"]] [[!template text="""As this move mentions,""" start="00:08:13.040" video="mainVideo-solo" id="subtitle"]] [[!template text="""the next move to make is called Delve the Depths.""" start="00:08:15.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""As soon as I select this move,""" start="00:08:20.280" video="mainVideo-solo" id="subtitle"]] [[!template text="""it shows up on the side window, and explains that,""" start="00:08:26.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""depending on how you're moving through""" start="00:08:31.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""this ancient catacombs,""" start="00:08:34.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""is what kind of stat I roll against,""" start="00:08:36.240" video="mainVideo-solo" id="subtitle"]] [[!template text="""and those stats show up at the bottom.""" start="00:08:38.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""You know, if I'm sneaking around, you roll against "shadow".""" start="00:08:41.040" video="mainVideo-solo" id="subtitle"]] [[!template text="""If you're trying to go as fast as you can, it's "edge".""" start="00:08:45.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""But I kind of imagine that he's thinking through,""" start="00:08:47.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""being very careful about it.""" start="00:08:51.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""So, I'm going to select "wits".""" start="00:08:53.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""And I don't have any modifiers.""" start="00:08:55.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""Just about every one of my stats prompts me""" start="00:08:57.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""if I want to add or subtract any values.""" start="00:08:59.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""Dice rolls""" video="00:09:02.960" id="subtitle"mainVideo-solo]] [[!template new="1" text="""A miss. I should explain how the dice roll in this game.""" start="00:09:02.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""The downside to Ironsworn is that""" start="00:09:09.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""the dice mechanics are more cumbersome than other games.""" start="00:09:13.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""You roll a 6-sided die, add to it your relevant stat,""" start="00:09:16.840" video="mainVideo-solo" id="subtitle"]] [[!template text="""plus any modifiers. Next, you roll two 10-sided die""" start="00:09:20.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""and see how it compares.""" start="00:09:24.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""Of course, I programmed this in Lisp,""" start="00:09:25.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""but when I displayed it, I wanted to see all the dice.""" start="00:09:28.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""And I also just wanted to see the end results.""" start="00:09:31.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""Dangers""" video="00:09:34.800" id="subtitle"mainVideo-solo]] [[!template new="1" text="""So I colored it. I rolled a miss,""" start="00:09:34.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""which means I need to reveal a danger.""" start="00:09:37.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""Sure, I could imagine all sorts of dangers,""" start="00:09:39.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""but this is a game.""" start="00:09:43.520" video="mainVideo-solo" id="subtitle"]] [[!template text="""I've already made a random generator for dangers.""" start="00:09:44.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""In fact, I've made a random generator""" start="00:09:48.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""for dangers in an ancient underkeep.""" start="00:09:51.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""Discovery undermines or complicates the quest.""" start="00:09:55.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""Hmm, a complication for finding the chief's son?""" start="00:10:00.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""What about a labyrinth full of hallways and levels""" start="00:10:09.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""with lots of choices and almost no way of finding them?""" start="00:10:13.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""Yeah, that sounds like it fits pretty well.""" start="00:10:16.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""A strong success""" video="00:10:19.680" id="subtitle"mainVideo-solo]] [[!template new="1" text="""Time for another move. This time, we're going to""" start="00:10:19.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""gather information,""" start="00:10:26.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""see if we can figure out which way to go.""" start="00:10:28.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""A strong hit. Excellent.""" start="00:10:32.280" video="mainVideo-solo" id="subtitle"]] [[!template text="""I imagine Tegan noticing footprints in the dust""" start="00:10:34.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""and knowing where to go.""" start="00:10:38.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""The game suggests that when you get a strong success,""" start="00:10:40.440" video="mainVideo-solo" id="subtitle"]] [[!template text="""you can increase your momentum.""" start="00:10:44.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""These game mechanics""" start="00:10:45.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""come into play later, but this function here""" start="00:10:48.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""allows me to adjust that stat +2.""" start="00:10:51.755" video="mainVideo-solo" id="subtitle"]] [[!template text="""I don't even have to scroll to the top of the buffer""" start="00:10:57.881" video="mainVideo-solo" id="subtitle"]] [[!template text="""and edit that value in my properties.""" start="00:11:01.461" video="mainVideo-solo" id="subtitle"]] [[!template text="""At any point, I can take a look at those stats""" start="00:11:04.821" video="mainVideo-solo" id="subtitle"]] [[!template text="""and see how they measure up.""" start="00:11:08.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""Again, I don't have to scroll up""" start="00:11:10.440" video="mainVideo-solo" id="subtitle"]] [[!template text="""and take a look at my properties""" start="00:11:13.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""at the top of the Org mode file.""" start="00:11:14.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""That's how I play the game.""" start="00:11:16.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""It's just a recursive loop of playing a move,""" start="00:11:19.240" video="mainVideo-solo" id="subtitle"]] [[!template text="""rolling some dice to see how it works,""" start="00:11:24.640" video="mainVideo-solo" id="subtitle"]] [[!template text="""trying to answer the question""" start="00:11:27.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""based on your own imagination or random tables,""" start="00:11:30.160" video="mainVideo-solo" id="subtitle"]] [[!template text="""which the game calls oracles,""" start="00:11:33.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""and play creatively until you decide to take a break""" start="00:11:35.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""and pick it up another time.""" start="00:11:41.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""I think you get the gist of how I play""" start="00:11:42.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""this dice and pencil game in Org Mode.""" start="00:11:47.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""Other solo RPGs""" video="00:11:49.680" id="subtitle"mainVideo-solo]] [[!template new="1" text="""However, I found more solo RPGs to play.""" start="00:11:49.680" video="mainVideo-solo" id="subtitle"]] [[!template text="""And of course, I want to render them in Emacs too.""" start="00:11:54.040" video="mainVideo-solo" id="subtitle"]] [[!template text="""This code for Ironsworn was a bit too specific,""" start="00:11:57.320" video="mainVideo-solo" id="subtitle"]] [[!template text="""so I decided to create a role-playing game toolkit.""" start="00:12:00.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""This project is still in the early stages,""" start="00:12:04.760" video="mainVideo-solo" id="subtitle"]] [[!template text="""but I've created some functions""" start="00:12:09.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""for mimicking rolling dice, including a mini-DSL for""" start="00:12:12.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""making dice mechanics""" start="00:12:16.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""typical of many role-playing game systems.""" start="00:12:19.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""I've also ported over the random table system.""" start="00:12:22.840" video="mainVideo-solo" id="subtitle"]] [[!template text="""A text file can just list entries to be displayed at random.""" start="00:12:26.520" video="mainVideo-solo" id="subtitle"]] [[!template text="""I love that I can put dice expression""" start="00:12:30.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""and word choices in the entries.""" start="00:12:33.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""One type of random table allows you""" start="00:12:35.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""to essentially copy and paste a table""" start="00:12:39.440" video="mainVideo-solo" id="subtitle"]] [[!template text="""from a published game into a text file.""" start="00:12:41.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""A frequency table is what I'm calling""" start="00:12:43.800" video="mainVideo-solo" id="subtitle"]] [[!template text="""a list of random entries where some entries show up""" start="00:12:47.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""more often than others. I'm working on generalizing""" start="00:12:50.880" video="mainVideo-solo" id="subtitle"]] [[!template text="""the character sheet attributes as Org properties,""" start="00:12:55.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""so if you're interested, check out the project at Codeberg.""" start="00:12:59.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""Conclusion""" video="00:13:04.720" id="subtitle"mainVideo-solo]] [[!template new="1" text="""The point of my presentation is not to show off Ironsworn,""" start="00:13:04.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""how I programmed it, or even this new toolkit.""" start="00:13:10.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""You see, most engineers,""" start="00:13:14.080" video="mainVideo-solo" id="subtitle"]] [[!template text="""when they get an idea for a game like mine,""" start="00:13:17.560" video="mainVideo-solo" id="subtitle"]] [[!template text="""would make a web app. Nothing wrong with it.""" start="00:13:20.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""More people can play it,""" start="00:13:24.080" video="mainVideo-solo" id="subtitle"]] [[!template text="""but web apps suffer from text entry.""" start="00:13:25.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""And don't tell me you prefer the keyboard interface""" start="00:13:28.200" video="mainVideo-solo" id="subtitle"]] [[!template text="""to Google Docs. Oh, and the JavaScript framework du jour?""" start="00:13:30.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""Oh, I mean, that's a huge barrier of entry""" start="00:13:35.960" video="mainVideo-solo" id="subtitle"]] [[!template text="""when all you want to do""" start="00:13:40.400" video="mainVideo-solo" id="subtitle"]] [[!template text="""is have a bit of fun prototyping a game.""" start="00:13:42.040" video="mainVideo-solo" id="subtitle"]] [[!template text="""What I'd like to impress upon you""" start="00:13:44.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""is that hacking Emacs to make personal games is a trip.""" start="00:13:48.480" video="mainVideo-solo" id="subtitle"]] [[!template text="""Learning Lisp is, it's easy.""" start="00:13:54.000" video="mainVideo-solo" id="subtitle"]] [[!template text="""And more, Emacs Lisp has some, well sure,""" start="00:13:57.360" video="mainVideo-solo" id="subtitle"]] [[!template text="""it has some cruft. But really, some of those features""" start="00:14:00.920" video="mainVideo-solo" id="subtitle"]] [[!template text="""that I would hate at a distributed system at work,""" start="00:14:04.520" video="mainVideo-solo" id="subtitle"]] [[!template text="""like global variables, makes hacking easier""" start="00:14:07.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""when you just want to have some fun in your own system.""" start="00:14:10.920" video="mainVideo-solo" id="subtitle"]] [[!template text="""So, grab your laptop, sink into your comfy chair,""" start="00:14:14.720" video="mainVideo-solo" id="subtitle"]] [[!template text="""pour yourself a glass of scotch,""" start="00:14:19.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""and craft yourself an enjoyable evening.""" start="00:14:21.600" video="mainVideo-solo" id="subtitle"]] [[!template text="""Happy hacking, my friends.""" start="00:14:24.720" video="mainVideo-solo" id="subtitle"]] Captioner: sachac Questions or comments? Please e-mail [howard@howardabrams.com](mailto:howard@howardabrams.com?subject=Comment%20for%20EmacsConf%202023%20solo%3A%20How%20I%20play%20TTRPGs%20in%20Emacs)