← Instructional Design · Project Management

Case Study

The Rules You Don’t Have to Remember

Performance support for a tabletop game. Instead of teaching players to remember and calculate faster, the tools do it at the table, on the screen people already have open, and every one of them runs on the same rules code so none can disagree about a character.

Role
Producer: decisions and rulings.
Team
Hillary McKey (communications), the game designers and Claude (AI assistant).
Timeline
26–27 September 2026.
Result
An attack resolved from one button in one roll. 36 roll buttons became 5, and three tools share one set of rules code.

The Problem

A fight in 20 Below asks a lot of arithmetic from people who’d rather be playing. An attack is two dice under your Element plus the target’s Defense, then one die per point of damage against their wall. Advantage and Disadvantage change which dice count. Boons change what a Skill rolls at. Gifts cost Ki, and a failed check costs more.

The Character Creator’s sheet already had rollers, but they were spread across it: 36 separate roll buttons on one character’s sheet. An attack took two rolls in one window, to hit and then damage, and it asked for the kind of attack twice. Players using Owlbear Rodeo, the virtual tabletop our tables play on, had a dice extension and no sheet at all. The GM’s Battle Tracker kept turn order and damage tracks, but every roll happened somewhere else.

Analysis: The Moment of Need

This is a performance-support problem, not a training one. The question isn’t whether players can learn the attack formula; they can. It’s what they need in the ten seconds after the GM says “roll.”

A player mid-fight

The result of the roll, not the arithmetic behind it.

A new player

What their numbers mean, without opening the book.

The GM

Every combatant’s state and rolls, with the rules already applied.

A player between sessions

Spend experience and carry the character across, without juggling files.

Those four moments set the objectives. Without opening the book, a player can roll an attack and see at once whether it hits normally, with Advantage or with Disadvantage, and how much damage gets through. They can roll a Skill with the right Element and tier, their Boons already applied. They can make a Gift Check and watch their Ki change. And they can roll Initiative and have it reach the GM without saying it aloud.

The 20 Below tool ecosystem. The rulebook's rules feed one set of rules code: the sheet model and the Roll dice window, written once. That code feeds three tools: the Character Creator (the player, building and advancing), the Owlbear Character Sheet (the player, at the table) and the Battle Tracker (the GM, running the fight). A character file travels between the Creator and the sheet through Downloads. The sheet sends Initiative to the tracker; the tracker sends rests and Fate Tokens back. Rolls from both go to the Owlbear room's roll log.
One set of rules code, three tools, and what travels between them. Because the rules are written once, the Creator, the Owlbear sheet and the GM’s tracker can’t disagree about a character.

Design Decisions

Six principles came out of the analysis, and every change was held to them.

PrincipleWhat it meant in practice
Do the calculation, show the answerOne roll, read three ways, with the damage already counted.
Put it where the work isOne Roll dice button on every page; Ki beside the Gifts that spend it; experience spent on the sheet.
Apply the rule; don’t ask whether it appliesA Boon the character owns is applied, not offered.
Say what things areFull names over abbreviations.
One source of truthOne set of rules code under every tool.
The rules’ limits hold everywhereNo tool grants what the rules wouldn’t, unless the GM does it on purpose.

One button, one roll, three answers

The scattered roll buttons became one “Roll dice” button on every page of the sheet, in the same place each time. Initiative, Attack, Skill and Gift Check moved into one window, in the order a fight asks for them. When I saw Initiative sitting on its own button, apart from everything else, my note was four words: “That isn’t intuitive.”

The attack is the heart of it. One roll of three dice is read three ways at once, because Normal, Advantage and Disadvantage only differ in which two dice count. The table sees every outcome before anyone rules on which applies.

The Roll dice window's attack result from a real roll: Earth 6 plus Defense 5, roll under 11, dice 1, 6 and 7. Normal: 1 plus 6 is 7, Hit, 2 damage. Advantage: 1 plus 6 is 7, Hit, 2 damage. Disadvantage: 6 plus 7 is 13, Miss. The damage dice 2, 1, 6 and 9 are shown with 2 and 1 in red, soaked by a wall of 3, and 6 and 9 in green.
A real roll. The to-hit sums sit under their header, the result reads Hit or Miss, and damage shows how many got through, then every die: green over the wall, red soaked.

The Skill roll follows the same thinking. The Skill comes from the sheet with its Element and tier. A Novice is at Disadvantage automatically, and the window says so in a line rather than ticking a box for the player to second-guess. One sentence reminds them that a Descriptor can argue a different Element, and nothing more.

To check the change was real, I measured it. The same attack went through the Creator before and after the change, counting only the actions a player actually has to take.

One attack, before and after the Roll dice window. Roll buttons on the sheet: 36 before, 5 after, one per page. Actions for one attack: 5 before, 4 after. When Advantage or Disadvantage applies: 6 before, 4 after. Dice rolls: 2 before, 1 after. Outcomes one roll answers: 1 before, 3 after.
The click saving per attack is modest. The real gains are one place to roll from instead of 36, one roll instead of two, and nobody having to decide up front whether Advantage applies.

The sheet goes where the game is played

Our tables play in Owlbear Rodeo, so the sheet had to live there too. The dice extension became the 20 Below Character Sheet. It isn’t the printed page squeezed into a small window. It carries everything on the sheet, the Vitals and pools that track themselves, and the same Roll dice window, and every roll lands in the room’s log for the whole table.

The GM’s Battle Tracker got the same treatment. Every line in a fight has its own Roll dice window: a creature rolls from its printed stat block, a character from their own sheet. The GM picks Public or Secret for each roll. Health, Poise and Sanity stop at their floors, Exhausted shows its effects, armour loses Health Levels and breaks, and a combatant who’s down is marked.

The tools talk to each other

Next, the tools had to talk to each other. A player’s Initiative roll on their sheet fills their box in the GM’s tracker; nobody reads it out and nobody types it in. The GM can send a Short Rest, a Full Night’s Rest or a Fate Token to one player or everyone, and each sheet applies it and answers with what happened.

The player's Character Sheet and the GM's Battle Tracker side by side. The sheet's room log lists Viktor Grave's Initiative of 11, his attack, a hit for 4 damage, the GM's public attack roll for a wolf, and a Short Rest from the GM; the sheet shows the notice The GM gave you a Short Rest. The tracker shows Viktor's Initiative box already filled with 11 and marked PC, two wolves with empty Initiative boxes, and a Players' sheets box reporting Viktor Grave got a Short Rest and rolled Initiative 11.
One short scene: the player rolls Initiative and attacks, the GM rolls for a wolf in public, then gives a Short Rest. The log shows exactly what was sent.

The rules’ limits still hold. Fate Tokens stop at the character’s cap. I ruled that the GM can give as many Short Rests as the story allows, while the player’s own button stays at one between nights. And nothing else syncs from the tracker to the players. My call was simple: “I trust my players.” Only what the GM chooses to give travels that way.

Say what things are

An early version of the tracker’s combat line leaned on abbreviations. My first question on seeing it was “what is h2 h3?” That was the whole review. Every label became the full name: Hardness, Health Levels, and each track by name. A label the reader has to decode isn’t doing its job.

Apply the rule; don’t ask

Communications and the designers asked for Jack of all Trades, a Boon that makes a character at least Trained in every Skill, to apply by itself on the sheet. I rendered the sheet before the change to see what they’d seen. The Boon’s catch-all row sat wherever the list of bought Skills ended, its name cut off, and in the Roll dice window it was the last of 26 choices.

The Skills box on page 2 of the character sheet, before and after. Before: the row reading Every other Skill (Jack of a..., cut off, sits in the middle of the second column after Tracking. After: a row named Jack of all Trades, ticked Trained, is first in the list, with the bought Skills following.
Both versions rendered for the same character. The row that stands for every Skill not bought moved to the top and took the Boon’s own name.

The rule is now written once and read off the character everywhere. On the sheet, the row sits first and carries the Boon’s name, and the bought Skills follow at the tier they actually roll at. I made one layout call: not all 77 Skills on the page, just the ones they spent points on, with Jack of all Trades at the top for the rest. An older roller still had a manual checkbox for the Boon; it went in the same change.

Put it where the work is

Gifts run on Ki, so the sheet’s Gifts tab now opens with a Ki ticker and the Gift Check. A failed Check takes its Ki at once, and the count follows. Experience is earned at the table, so the sheet gained an Advance tab. Players add a session’s experience and spend it with the Creator’s own spending rules, without leaving the game.

No file juggling

The last gap was the trip between the Owlbear sheet and the desktop Creator: save a file, find it, import it. There was a hard constraint. A web page can’t choose where its files land, and Owlbear blocks the folder picker. So the design turned the problem around: the Creator looks where the browser saves. A character saved in Owlbear is already waiting in the Creator’s Load menu, marked new or newer. The Creator’s own Save leaves a copy where Owlbear’s Load opens.

How the Work Ran

  • Tested where it’s used. Every change was checked at the size players actually see it, Owlbear’s 613-by-780-pixel window, with screenshots.
  • Round trips, not assumptions. Anything that moves between tools (a roll to the room, Initiative to the tracker, a rest to a sheet, a character to the Creator) was tested end to end.
  • Scope logged as it grew. Rests and Fate Tokens from the tracker, Initiative from the sheet, Jack of all Trades, Ki on the Gifts tab, experience on the sheet, and moving characters between tools all came up mid-stream. Each was logged with where it came from.
  • A release train. The Character Creator went from v0.12.28 to v0.12.33 and the Battle Tracker from v0.3.0 to v0.3.3, with both Owlbear extensions synced alongside. A drift check confirmed every app was current after each release.

Checks and Balances

I caught what tests missed

Saved encounters didn’t work inside Owlbear. The cause was that Owlbear silently blocks a browser’s pop-up questions. Every question the tracker asked moved into its own window, and I tested it in a sandboxed frame like Owlbear’s.

A freeze, traced to its root

After a release, the desktop Creator froze on opening. The cause was a character saved with a sub-stat below 0, which sent a loop running forever. It was fixed at the source and released the same day.

The AI corrected its own draft

An early draft of this study said players had to tick a checkbox for Jack of all Trades. Rendering the old version showed that checkbox was no longer reachable. The draft was corrected to what the sheet actually did.

Outcome

A player can now resolve an attack from one button, in one roll, and see all three outcomes. Their Boons are applied without asking, Ki sits beside the Gifts that spend it, and experience is spent where it’s earned. The GM can run a fight from one panel, with players’ Initiative arriving by itself and rests and Fate Tokens going out with a click. The Creator, the Owlbear sheet and the tracker share one set of rules code, so a rule fixed in one place is fixed everywhere.

What no measurement here replaces is the table itself. The next playtest sessions are the real test, and what they turn up goes into the record the same way everything else did.

“I review everything visual on 20 Below, down to type that smears and an arrow a few pixels low, and Feral treats every note like it matters. When I asked for Jack of all Trades to apply itself instead of making players do the math, it went from a request to working in the tools, and Feral kept me in the loop the whole way. I always know what’s changing and why.”
Hillary McKey · Communications, 20 Below

Credits

Decisions and rulingsMe, as producer
The Jack of all Trades requestHillary McKey, communications, and the game designers
Package Deliverables, tests, measurements and figuresClaude (AI assistant), checked by me
PlaytestingThe 20 Below playtesters, next sessions