The Joys of Automation
- Malin Freeborn
- May 10, 2025
I don’t think any sane individual could write something like BIND without automation tools. Games with a similar scope require a team.
(BIND also requires a team - everyone who’s joined to comment, edit, or draw, has improved the game immensely, but that’s not today’s topic)
Step Five
A lot of people imagine they could make a large game by just ‘doing it’. They don’t spot the trap, hidden in the process.
- Can you craft a character sheet?
- Could you change that character sheet?
- Can write an adventure module?
- Can you make example characters for the module, filling in the character sheet?
- Could you change that character sheet?
‘Yes, yes, yes, of course I could do that’ - everything seems obviously do-able. But the last step is a trap. It’s easy to miss when just imagining the process, but now it’s explicit, the problem becomes obvious. And it gets worse! If you write three modules, each with six example characters, then you have eighteen example character sheets; any change to ’the character sheet’ actually means changing all eighteen sheets.
Every step compounds the problem. Making RPG features segmented - like a rule which does not relate to anything else, or rely on anything else - sound like they would cause fewer problems, but they’re crap; if a rule or piece of the world never gets used on a single character, and the modules have no reason to even reference it, then that’s a feature which nothing uses, and nobody cares about. Conversely, the more modules and rules reference an idea, the more difficult it becomes to change.
This fundamental problem eradicates a bunch of good ideas before they’re fully formed. Once you decide that changing eighteen character sheets is too much work, you just stop thinking about improvements.
Hard Numbers
The books have a lot of statblocks:
Book | No. Statblocks |
---|---|
Missions in Maitavale | 176 |
Escape from the Horde | 69 |
Adventures in Fenestra | 45 |
Book of Judgement | 50 |
Total | 340 |
If you wanted to change how statblocks are formatted, and each statblock took 5 minutes to update (they don’t), then you would need to work for 28 hours (which you wouldn’t).
I’ve changed all the statblocks more times than I can remember. Sometimes it just takes ten minutes.
Little Rule Consistencies
Starting small - these rules appear in the core book.
However, they also appear in the little rules booklet, and the two must be kept consistent. That probably sounds like an easy job when someone presents the idea to you, but when writing, and thinking ‘I should change the symbol for “day” to be more clear’, you will probably not remember to change everywhere that symbol appears in every book.
The booklet cannot simply receive the same text - it needs different formatting, as the rules comes in A4, while the booklet is A1 paper - one eighth of the size.
Rules Glossaries
Each adventure module receives a short summary of the rules which may be relevant to it. In this case, the module has lot of rules for underground fires, walking in the dark, and hypoxia. Ordinarily, those would have to be in some obscure section of a rules book, but automated glossaries mean that the module which references these rules has them, while the other modules simply don’t. Everyone can safely ignore the main rulebook if they wish to.
Rules in Footnotes
It’s a well-known fact that nobody can remember the details of grappling rules in RPGs. This is where footnote summaries come in handy.
Once again, these notes are just links to the actual text in the Core Rules, so if the rules update there, then they will also update in all books. The page number automation also means those page numbers will be correct, even if all of the books gain or lose a few pages.
The first few footnotes here just tell the reader where to go for more information, but the last one links to a rule, and any time something has a reference to that rule, a summary is presented.
The three primary rulebooks all cross-reference each other, creating a circle of links:
ref
┌────────────────────────────────────────────────┐
│ │
│ │ cross-ref
│ ┌────────────────────────────┼───────────────────────────┐
│ ∨ ∨ ∨
┌──────────┐ ref ┌────────────┐ cross-ref ┌───────────┐ cross-ref ┌─────────┐
│ Module 1 │ ─────> │ Core Rules │ <───────────> │ Judgement │ <───────────> │ Stories │
└──────────┘ └────────────┘ └───────────┘ └─────────┘
∧
│ ref
│
┌────────────┐
│ Module 2 │
└────────────┘
Spells
This spell in the Core Rules is called Delicate Audience. It comes with a complete description, but no notes on how a witch might construct this spell, because that’s not important here - we just want to know what to roll when casting it.
Constructing a big index of all spells requires a big company, because making an alphabetical list of every spell in the book takes time and skill. However, with some LaTeX automation, it takes neither.
Here, all the spells appear, but this time Delicate Audience only has the basic information about casting the spell, not the long form. It also has a couple of new words - ‘Detailed, Devious, Witness’ - which describe how the spell was constructed.
When the same spell appears beside a creature, the presentation changes again.
When players look at their spells, they can easily remember to roll the dice, and add their Charisma (for all spells) and the lowest Sphere they need for the spell (in this case, ‘Fate/ Water’). However, the Judge needs needs to jump between NPCs constantly, which becomes challenging with a few NPCs with spells.
The spell could simply leave the Judge to add the dragon’s Charisma + Fate/ Water, and get +5. But it doesn’t, instead the spell reads:
Tsosh rolls with +5
However, the spell below that - Mind’s Chatter - reads quite differently. The players would roll directly against the dragon’s Traits, i.e. they would roll at a TN of 7 + the Dragon’s Charisma + Fate. But the spell simply lists the total - it says the players roll against ‘TN 12’.
(Once again, it doesn’t seem difficult to work out 7 + 2 + 3 = 12, but in the middle of a dramatic scene, with a load of things to do, anyone running a game can easily forget how to tie up their own shoelaces)
Statblocks
And while we have a statblock up, you’ll notice a hell-of-a-lot on there, like the chunky line of combat-numbers at the bottom. These help the Judge summarize a monster’s common combat actions, just like the spells above, while keeping all Traits available in case the Judge needs them.
Notice the last number on this elf’s statblock: “CR 9”. That’s a ‘Creature Rating’.
Creature Ratings let you eyeball creatures’ fighting-ability at a glance, or give you an impartial way to measure which NPC would probably win in a fight, without making you stop and roll dice alone for five minutes.
Eyeballing the CR won’t always work, because you will inevitably eyeball it wrong, which means the jumpy little street-rat you introduced three scenes ago will get a CR which is higher than the CR you eyeballed for the guard (who you narrated as being kitted out in shining plate-armour, with a fancy sword). However, working out a CR for a creature is incredibly tedious. Once again, automation brings the goods - any two NPCs which are broadly the same will have an equal CR, and if one has a particular advantage (like more HP) then that one will have a higher CR.
Statblock Tick-Boxes
Just under the statblock, shapes can be used as tick-boxes. Our elven prince, above, has a number of Fate Points equal to his Charisma, and HP equal to 6 + Strength.
Notice that one HP has a little marker, showing how much Weight he carries. This is yet another element which is irritating to work out for one statblock, and nearly impossible to work out for the hundreds of statblocks in the book. And why would you? During a full Chronicle, you might find the NPCs really suffer from the amount of weight they carry once or twice.
General Statblocks
When the scene calls for yet-another-bloody-bandit, I just use a generic template for a human soldier, like this:
\humansoldier
\humansoldier
\humansoldier
This template produces a different human soldier each time it’s used, so various groups of bandits won’t look identical.
This also makes statblocks easy to make, which stops a common problem in RPG modules:
Three drow warriors attack, along with their mage (in the appendix), and two rust-monsters (see the Monster Manual)
When modules pull this kind of thing, the GM must have a hand on the drow statblocks, one finger holding the module’s appendix open, and their toes ruffling through the Monster Manual.
Of course RPG writers all know that placing statblocks where people can use them is good, but it’s also a chore, so they don’t. And if the statblocks are reprinted, they tend to be reprinted verbatim, so every goblin in every book is identical. Any variation in a monsters statblock means you have to recompute the derived stats - the final Damage, HP, CR, et c.
But automation means cheap statblocks litter the book, wherever they might help. There’s even a LaTeX command to check if a certain statblock is nearby, so you can automatically ignore printing that statblock if another copy is on the previous page. When the book inevitably changes, the statblocks appear and disappear depending on what’s required.
Treasure Type C
Back in days of yore, when I played A,D&D, treasure was assigned categories. When the PCs slew an owlbear, the DM was forced to open the Dungeon Master’s Guide, locate the Treasure Table, and roll a 5% chance of finding a scroll, and a 32% chance of finding 1D6+2 gems, each worth 1D10 gp. The DM would then have to pick a scroll from the book, because the random tables didn’t actually tell you which was found, just that the owlbear had happened upon a magic scroll at some point, and decided to build its nest from the scroll. If anyone ever wants to claim that RPGs cannot be objectively good or bad, and there’s nothing wrong with someone wanting to play A,D&D, you should ask them to generate the treasure for a dryad riding an owlbear, then set a five minute timer.
Having gone through this insane process, it brings me great joy to simply let the computer roll up the random treasure, which is why the bandits/ soldiers above not only have random coinage, they also have specific rations.
Threads
BIND tells stories through Story Weaving - a system where each Segment of the tale can take place any time, anywhere within a broad region.
Umiel’s statblock above comes from a Thread called ’the Little Prince’, with a little summary of the two Segments.
It’s easy to read one Thread, but once you read six, each of which have anywhere from two to eight Segments, you then have the players say ‘we go into the forest’, and then what do you do? How can you check for the next available Segment in the forest?
The only way to answer this question is a per-region list of each Segment:
On the left, Segments from the Forest appear. On the right, Segments from the Roads. Each one has its Thread’s title.
This kind of summary is completely impossible without automation. Not only are there a lot of Segments, but each of them must be placed in the correct area.
The hard bit here is probably not what you think.
- It’s not dividing every list of Segments into their regions.
- It’s not going through all those Segments and noting the page numbers.
- It’s not the point where you add the summary at the start of the book, and which makes all of those page numbers wrong, so you have to go find them all again.
…all of that is nothing compared to the real task: every time you write another paragraph and shunt some material down a page, you have to do the entire thing again.
Nothing is ever perfect, so everything must make itself easy to update. And nothing which does a ’table of contents’ is ready to do something like this.
Automatic Maps
Notice area ‘3: Library’, on the map. LaTeX just needs to know where that room is, and it places the room’s name and number above it.
Once again, that seems easy if you do it once, perfectly. But writing never works like that, especially when writing RPGs. So the real benefit here comes when we need to slip another room in, or change the order of the rooms.
For example, if we place the library after the Dark Pit, everything changes to automatically.
The names on the map are automatically pulled from the room names, so if we rename ‘Library’ to ‘Study’ then the name would also update.