Disks & Daemons


Disks & Daemons, first page

Submission for FIST: JAM OPS V. Designed for FIST but easily hackable for like, Risus or something.

It’s Rogue, Hackers: Heroes of the Computer Revolution, and TRON in a blender with a splash of anti-canon worldbuilding and two splashes of OSR procedures. Dungeon procedures and procedural dungeons. Other key influences include The Hacker Jargon File and a smattering of media where you go into a computer network.

Gaming tech

Disks & Daemons, second page

The pamphlet started coming together when I made the spread on the inside. It features a relatively novel floor generator and tables to use with it.

Dungeon generator

This dungeon generator was inspired by two dungeon generators: the method in “O5R” TTRPG Five Torches Deep and the one in Rogue, that game that all those other games are kinda like. Rogue was inspired by early Dungeons & Dragons, much like the OSR, but without all the hindsight.

Five Torches Deep features a small dungeon generator where you shuffle a Rubik’s Cube, then roll it like a d6 and interpret the results. Each color represents a different type of room, like entrances, traps, treasure, etc. I realized this theoretically gives similar results to rolling a d6 for each cell on a 3x3 grid (cubes are cubes, right?). What if we rolled 9 dice and smushed them together into a 3x3 grid? And what if we used different colored dice? There’s a dungeon generator.

Rogue generates a floor by creating a 3x3 grid of random rooms. Exact logic: up to 3 rooms are marked as “gone” (simply not there); rooms have a (dungeon level - 1) in 10 chance to be a dark room, and a 1 in 15 chance for a dark room to be a maze (random twisty passages), otherwise they’re open lit rooms; rooms have a 50% chance to contain gold, and a 25% chance to contain a monster – 80% if the room contains gold too. I had to look up these exact numbers, but I’ve played a bit of Rogue – enough to get bored with its level generator because I’m spoiled by Diablo – and remembered the gist of how it worked.

Using two colors of dice adds the same effect as “gone” rooms to Five Torches Deep, at the cost of only one more D6 table!

The real meat is the table entries, little prompts for what’s in the room. There’s no overarching plot here, instead hints of strange things happening or opportunities to cause trouble. This could provide a jumping-off point for a further campaign (pick something the players latch onto) or a diversion from another game.

An expanded version could demonstrate what prepping this actually looks like. The stocking procedures are not playtested. I also don’t clarify what the exit doors look like - I was imaging picking an exterior wall (or interior to be weird) and deciding that wall had the exit.

Other procedures

For an OSR dungeon crawling experience, I added a few lightweight procedures to create time pressure and resource drains.

The Underclock is a simple way to provide random encounters at random intervals. I stripped it down to use D6’s only and focus on the current floor, renaming it the CYBERCLOCK. It acts as a “hurry up” mechanic like those in arcade games – linger around and you’ll get into trouble. You can expect a random encounter once every four times the CYBERCLOCK ticks down. On average, you can explore 12 rooms before a “boss” shows up, and since a floor has up to 9 rooms, that should provide enough time to explore and move on. Of course, the clock also ticks down when you cause chaos…

I get extra use out of the encounter table to populate rooms with extra weirdos. I even have a two-line reaction roll in there.

There’s a simple resource drainer when you move between floors to incentivize players to search every room, and maybe make a tough decision or two. There are two new resources, TOKENS (a currency, for dealing with Daemons) and PARITY BITS (for moving between floors). The floor transmission procedure drains PARITY BITS or other resources on low rolls, higher rolls lower the CYBERCLOCK to give you less time to explore.

Layout experiments

I wanted to do as much as I could with just text and typography, and the built-in features of Typst. Partly because I’m lazy, but also to focus on one tool at a time. So, this project has lots of lists and tables in various formats, trying to be eye-catching and pleasing without being distracting. I also took some hints from the FIST book, notably the black bars for section headings.

I’m really happy with the dungeon generator spread. I’m also pleased with the light gray accent panels and sections. The other side is kinda whatever. I like the logo, see below for details on how I made it.

The funny gradient around the logo is a placeholder that never got replaced. I wanted to warp some Unix source code around it, like The Matrix but a lot dorkier. I also wanted to hack up some graphics of what the Ideaspace looks like (what if Return of the Obra Dinn had four colors and a polygon budget in the dozens) and what the Daemons look like (they’re literally just the little imp dudes from Zero Punctuation). I decided graphics were out of scope for this project.

Source code discussion

I wrote this with Typst! This was a big step up from my earlier projects. My initial idea was to create an ARPANET pointcrawl, then remembered I don’t know how to make adventures or pointcrawls and scaled back my plans. I was strongly inspired by dodgepong’s Typst conversion of the HA Corvette Job and CLAYMORE’s RATIONS collection – a trifold pamphlet seemed perfect for a jam. Two pages, six panels. A bit of hacking and I was ready to actually write the thing, directly into the layout.

Font choice

Charter for body text with that 80’s corpo document feel. It holds up great on low DPI devices, like screens or consumer printers. This is anachronistic to the late 70’s setting of this module, but I really like Charter. Let’s say it was created earlier than its publication but its existence was suppressed by CYCLOPS.

Archivo for headings and the encounter table numbering. Archivo Expanded turned out to be a decent substitute for FIST’s Microgramma branding font at smaller point sizes, compared to common alternatives like Orbitron.

Computer Modern Roman Dunhill for the logo. This is a pretty striking font, an artistic alternative to the classic Computer Modern that triggers LaTeX flashbacks in some readers.

Project structure

To separate content and presentation, there’s a template file and a main content file. A trifold pamphlet is 6 panels - each of the panels is a content object. The main file is set up for screen viewing while I hack on it. For the print and singles versions, I import the main file and place the panels in the desired order, or on separate pages.

Dice generator

All 24 dice from the dice generator on a gray background

All 24 dice from the dice generator.

I wanted to use Dicier but I noticed its shortcomings at multiple point sizes (the lines keep changing thickness!), so I slapped together my own dice generator function. This gives me full control over the stroke width, corner rounding, and background fill color without resorting to desperate hacks. For consistency and readability, the light dice have a white face with black lines and pips and the dark dice have white pips.

For ease of layout, the function takes a number as its only unnamed argument. The ones digit chooses the number, the tens digit controls rotation (even or odd) and if it’s a dark die (2 or more). I was into numeral dice, but after working on this project I’ve come around on pips and prefer them now. As long as I’m not trying to find the sum of more than 3 dice at once.

I have a template variation of the function to create inline dice the same size as the text, without affecting the layout. I use them as pictograms to make little tables throughout the text.

Rounded corner inner radius

Typst support rounding corners on blocks and rectangles. FIST uses rounded corners in some parts of its layout, so I decided to have some fun with it. Making everything be a rounded blob is kinda 90’s, and squircles are more 10’s, but I thought it looked neat.

Nesting rounded corners gives us a pleasing rounded border. The formula for calculating the inner radius is inner radius = outer radius - thickness. This works in all units (I used points). The formula’s floating around the internet, here’s an interactive example.

What’s next?

I hacked on a revision 2 by writing this blog post, with an eye for cleaning up the text. A few months distance and now I see all the clunky phrasing, weird structure, etc.

I’d like to expand this out into a bigger version that has some art, examples of generation, room variations, maybe boxed text, who knows! The next pamphlet I make should be a bit less high-concept so its content can actually fit and leave room for art.

Anti-canon notes

The pseudonym JRH is an reference to J. Random Hacker, or “some random hacker that is in the way and annoying me.” Remember, nobody hates nerds more than other nerds, especially if they’re the same type of nerd.

There is no city or country cited for Cambridge – choose your favorite higher learning institution from any of them.

Thanks to bea from CLAYMORE for mentioning the PSP game Coded Arms, which I stole the term “Achiba Syndrome” from.

I yoinked the name “Ideaspace” from Shin Megami Tensei: NINE – it’s the VR environment created for people to live in after Tokyo is nuked in Shin Megami Tensei.