About this Project
This is a Python-based tool to generate random first-level characters for "classic old school" D&D-like tabletop role-playing games.
Currently this tool can create characters for the following old school games:
- The Nightmares Underneath, by Johnstone Metzger.
- Dark Dungeons
- Blood & Treasure 1st Edition
- New: HAMMERCRAWL! is my own creation, and is now supported by this generator.
Additionally, I've already begun laying the groundwork for extended compatibility with a number of other games, including:
- Microlite Platinum
- And further out...
- Beyond the Wall
- The Black Hack
My hope is that as I add more systems and automate more of the decisions, adding in further systems compatibility will eventually be as simple as adding a new set of system prefs and hitting go.
Since the dawn of my gaming career as a wee lad, there are three things I've always hated as both a player and a GM:
- Level Maximums for non-humans
- Attribute minimums for classes
- Attack Roll Matrices
As such, I'm not guaranteeing compatibility with systems that enforce these things. Even with Dark Dungeons and Blood & Treasure, I've chosen to allow characters that don't 100% meet class stat minimums. And any future system that I import will be brought over converted to a simple adjusted Base Attack Roll Modifier display.
This also means that should I ever decide to let this app create characters of higher levels, I won't be adapting this to account for systems which limit the advancement of the non-human classes.
For The Nightmares Underneath, I'm of course using that game's amazing built-in random gear generator, which is based upon rolls that determine a character's Social Class. The results are pretty wonderful, and just looking at a character's stats and list of starting gear can inspire instant story. The gear lists from that system have been recreated here with about 99% faithful translation (a very small handful of choices had to be tweaked for simplicity of coding at my new skill level).
For the others, I'm using my own ground-up home-brew system, pulling from a glommed-together list of gear from a variety of "classic" games. Instead of using starting character money rolls, I'm basing the lists off of the average of the character's initial six stats - the better their stat rolls, the fewer gear options they start with. The result is a rough "starting balance of survivability" wherein characters with higher stats have higher mechanical chances of excelling, while those with lower stats have more potential gear-based options for survival.
For the sake of simplicity, with most of the other D&D-like games I'm planning to use the same weapon and gear lists and options. This will result in characters not 100% accurate to their game variant's core gear lists, but still "acceptably playable" in adventures using that game's engine. Dark Dungeons and Blood & Treasure don't have exactly the same armour types, for example, but there's enough similarity that the lists are basically interchangeable.
First off, note that in most of the games I always automatically give all "arcane" type casters the Red Magic spell in addition to other spell choices. Frankly I think that making it a slot-requiring spell at all is complete bullshit, but to satisfy basic system conventions I still add it in as a free spell, just in case.
Clerics and other divine-type casters have their initial spell lists prepared so you can just jump into the dungeon and start playing. For all other casters, initial spell lists represent the spells in your caster's initial spellbook.
How to Use
- Install Python.
- Run the
print_character.pyfile. It has a number of flags to its use, which you can find with the helpfile. For example:
python print_character.py -h
- Repeat step 2 to get new characters.
Currently the supported game systems are as follows:
- bnt = Blood & Treasure 1st Edition
- bntx = Blood & Treasure 1st Edition plus Monster Races
- dd = Dark Dungeons
- ham = HAMMERCRAWL!
- m81 = Microlite81
- tnu = The Nightmares Underneath
Random Treasure Table Rolls
Currently the Treasure table rolls are limited to the Dark Dungeons / BECMI tables. I'm still setting it up for command line calls. right now it returns the combined results of 12 rolls against the U treasure table. This can be changed by adjusting the variables in the final code block, passing it a different table and number of rolls:
if __name__ == "__main__": myTreasure = get_treasure('u', 'dd', 12) for item in myTreasure: print(item)
This is still very much a work in progress. Currently the code runs once and returns printed output only. Right now, there are two main components I'm working on:
- Random Character Generator: a one-click chargen for Old School games (currently only TNU)
- Random Monster Treasure Roller: (EXPERIMENTAL!) an app to quickly roll on monster treasure tables (currently only Dark Dungeons/BECMI supported)
About the Code
This is my first even code project, and I've been using it to teach myself the Python language. Initially I had thoughts of just forking and modifying another current chargen program I'd been using a lot, to tweak it for my own games, but after a bit of futzing around I just decided to start from scratch and learn more about coding on my own.
I'm sure there are far better ways to do what I'm doing here, but I'm a noob to this, so please forgive the crap code as I learn more.
Requirements and Compatibility
This program is written using Python 3.6.3 on Windows 10, MacOS, and Linux Mint 18, using the PyCharm IDE. I have not tested much outside of those environment parameters.