After a bit of off-and-on work, I’ve got what I’d call the MVP of an implementation of Chaosium’s ORC-licensed Basic Roleplaying SRD in Inform 7 as an extension, including a tiny demo scene (which I’ve also published in the repo as a gblorb if you want to give it a play without going through the I7 editor) making use of skills and characteristics in various ways: GitHub - maxsond/i7-BRP · GitHub It was fun to play with and see how interactions between the various possibilities emerged the deeper I got into fleshing out the demo.
So far, this implements most of sections 1-4 of the SRD (so no combat yet, but most IF doesn’t lean much on combat anyway). Notable exceptions are character creation, professions, and skills with a base value based on characteristics, although it does support games adding their own skills and assigning skill values to characters and granting skill experience, all of which the demo demonstrates.
The demo works around the lack of character creation by giving the player pills they can eat to increase their skills and stats as they wish to attempt their chosen path to victory, and this also serves as an example of the experience roll implementation.
One particular part I’d like feedback on is that as it currently stands, if you want to manipulate a skill or a characteristic value for a character, you must author its initial value for that character (because these are tracked in tables, and we can’t add rows at runtime or dynamically compute the necessary number of rows at compile time as far as I know). Failing to do so will generate a big obvious error message when the attempt to manipulate the value occurs. I could see this possibly being annoying when authoring a larger-scale game. Initially I had intended to automatically generate all pairings which would remove this bit of manual bookkeeping but would probably also result in a majority of the data being irrelevant for any particular game. So maybe it’s actually good as it is?
Another is that because I’m aiming to keep the implementation close to the SRD I’ve adopted its semantic version number for the version of the SRD I’m implementing (which is 1.0.2), but I also need a separate semantic version for the implementation. Since Inform doesn’t support version levels beyond the debug level, I just extended the debug level’s digits to also encompass a 5-digit semantic version for the implementation (e.g. 1.0.200001 for the 0.00.01 implementation). This feels dirty and is probably not compliant with the “Friends of i7” repo. It’s entirely plausible that there could be an implementation API break that has nothing to do with the SRD, and this approach can’t handle that. I’m very open to hearing a better approach to this. There’s probably something easy that’s just evading me.
Anyway, I hope y’all at least get a little enjoyment from the tiny demo even if you’re not looking to add a TTRPG system to your interactive fiction.
And if you are, I’d be interested to hear how it works for you!