@@ 0,0 1,85 @@
title: "Could you treat a character sheet as an append-only log?"
I'm a big player of table-top RPGs, which mean's I've spent a long
time working with editable PDFs. Often, you'll get an editable PDF
with some huge, overly detailed background image bloating the whole
file and you have to deal with updating it every time your character
changes or gets some new equipment or whatever. This is less than
pleasant, as anyone who's spent any time using an editable PDF will
tell you. Changing the parts that it's good at are awkward enough,
having to double-click and type in a new number where an old one
sat. Changing the parts it's bad at are plain awful - if you intend to
keep notes on goings on and other characters in your PDF at the start
of a session, you'll have given up by the end.
The alternative is often a little better - spreadsheets wired up in a
complex and baroque dance. These take care of a lot of the little
pieces of maths for you, meaning you have to edit less often - but the
awkwardness remains for editing, and the weakness for longer-form text
remains. Spreadsheets hold the added excitement of any mis-click
potentially breaking your character sheet in some unknown and possibly
unnoticed way until it's too late.
Then there's the hand-written sheet. Which you need to erase over and
over again, whenever you need to change it. And in this time of remote
play, you'd have to send a photo of your sheet to your GM after every
game at least.
Each of these three options only shows what is currently true about
the character. You can't go back and ask what was going on a few
sessions ago, you can't figure out where you spent that gold you
thought you had - and you can't audit where you spent that XP after
the fact - even if you made a mistake.
All this to say, I've been wondering if I can do better.
My core idea is the question in the title of this post - could we
treat a character sheet as an append-only log? In a plain-text based
sheet, this would mean that instead of going to a line that said
`gold: 42` and changing it to say `gold: 43` when your character finds
a penny on the ground, you could add `> gold + 1` to the bottom of the
sheet and the next time you ran a program it would tell you `gold:
43`. Effectively, instead of overwriting your properties every time,
you never touch old lines and only ever add new - telling the sheet
what has changed since last time.
This simple idea gives us quite a lot, and tooling can be built around
the concept in order to smooth away any remaining awkwardness that
might come with adding text to the bottom of a simple text-file.
A very simple but useful ability this gives us is the ability to write
long-hand notes about what is happening to our character at any given
time, possibly even while the game is running. This can come
surrounded by the context of mechanical stat changes or adding or
removing items or resources. Your character sheet becomes the story of
what happened to your character.
For this exact same reason, you also get 'auditability' - you can see
what you spent that gold on last time, you can check if that ability
really cost that much XP, you can check up on how many times you shot
your gun in last weeks session.
And for free, you get the ability to rewind through your sheet. If you add markers to major changes or sessions, you could step through what your character has done and how your character has grown and changed over time.
I'm sure there are other things you could use all this information
for. Needless to say, by asking myself this question I've ended up
intriguing myself. I've come up with a bunch of ideas using this
simple format as a backing format too - from a tool designed to allow
for real-time editing, querying and dice-rolling based on your current
sheet so you can play and keep up to date all at once; through to a
tool which could create GUIs for any arbitrary sheet and allow you to
edit it as if it was software built for the purpose, but which was
simply adding events to your text-based sheet in the background.
The first step is going to be making a simple parser for the format I
have in mind, playing around with what works and what doesn't. Once
that's solidified, I might make some posts talking about what it looks
like and how I parse it - but for now I think the idea is enough.