Feb 282013
 

I've been an occasional, but eager, dungeons and dragons player for many years. However I did not get the full view of what being dungeon master truly entails until recently, when I agreed to become DM of a new campaign I launched with some friends. It was hard work – so many rules, dice rolls, modifiers and class-bonuses, if you don't have a lot of experience, they are a nightmare to all keep track off.

Now of course, I'm a programmer, programmers never do a difficult thing twice if we can get a computer to do it for us. Some googling turned up quite a few useful tools for tabletop gaming and DM-ing but none of what I really wanted – something that I could run on a netbook at the table, to ensure things like combat went correctly, ensure all the rules and modifiers were applied – but would not get in the way of storytelling. It shouldn't even require that you use computer dice. 

So, I set out to write one. EZDM is written in python, using json files for all data – json stores the rules, the character sheets, the modifiers – everything. The current system contains all the data needed for DM-ing an AD&D 2E game – I have no plans to add others but if anybody wants to it should be quite simple provided you can operate a text editor and do a quick study of the JSON format (and also adjust the code as a few bits of the stuff are code-wise, this may change in future).

 

The system's data needs are cut down by it's very core design of "not getting in the way" – so nothing is enforced more than absolutely required.  So for example the DM can choose to create custom modifiers for an attack on top of (or instead off) what the program knows about to account for things that came out of the story. The system can use either automated or manual dice with equal ease as well.

EZDM provides a simple character sheet creator, these don't store all the data about a character (things like inventories remain on the paper-copies), but it does store everything needed to operate combat sequences correctly, including multi-turn spell-casting and interruptions for example. By simply creating sheets for all your players and whatever monsters you have planned, you can have ever combat go exactly as it should.

 

There is a specialized viewer for the character sheets included to let you quickly glance at them, and the character sheet maker also works well for editing sheets if you aren't comfortable editing json by hand.

The next tool is a tool to grant XP to characters, this will automatically add the proper XP and level characters up when they reach the correct points for their class – it will then ensure they get the right number of hit-dice added to their hitpoints and finally remind you to check the DM-guide for updates to their other abilities (I may add these in a future version so they can be displayed, and possibly even stored).

The final tool is the quickcombat tool, which works in a very simple linear manner. You load up all the characters (and monsters) involved in the combat, choosing which ones to use automatic and which ones to use manual dice for. The system then handles initiative rolls and lets the combat commence, each character in turn chooses to attack, cast, flee or heal. Remember that this is a tool for dungeon masters, so players must not use it, with the heal option a dungeon master can account for things like a player drinking a healing potion during the fight – tell it the dice type to roll and the system will restore the rolled HP back to the character. The flee option is completely without rules, the DM simply informs the system of whether the flight is successful or not, if it is the character is removed from combat (If is it not, the DM will probably give a "attack from rear" modifier to the next person who attacks him). Casting simply asks the number of turns (and correctly accounts for spells that take rounds rather than turns) and the target of the spell (characters can target themselves) and then reminds the DM on each turn that the character is still casting, until the cast is zero at which the "complete spell" option becomes available. Choose this and it will roll for spell success based on the characters correctly calculated spell failure rate. Then the DM can choose from three basic spell effects: healing spells (which operate exactly like the heal option but heals the target, whether or not that's the caster), damage spells (which asks the maximum damage and rolls it – and also handles the target's saving throw against spells (and then subtracts the right highpoints if all goes well). 

Finally the attack option, when choosing to attack the DM can immediately choose which specific modifiers apply to this turns. Has the enemy turned his back ? Has the attacker reached higher ground ? You can add any of the standard DM guide modifiers automatically, or create a custom modifier (with just the number) to account for anything else which will affect the attacker's chance to hit and is created by story rather than a specific rule (like I said, this is a DM helper tool, not a replacement for DM-ing properly). Then it will do an attack roll, calculate the attacker's thac0 and the defenders AC – including all appropriate modifiers and work out if the attack succeeds. If it does, it will likewise handle damage rolls and possible saving throws (including saves against death).

All this can be done in the console, or with a GUI – and you can choose :D 

The program is now version 0.0.5, and this is the first stable public release of a program I have been working on extensively for weeks. At this stage I am not aware of any remaining bugs in the extant features. It is released under GPLv3 as free and open source software for anybody who can use it, or would like to help improve it. It has been mentioned to me that this code could easily be used as the basis of a computerized RPG and I do have some rather fun ideas in that regard but more on that later. The next major feature is a map-editor/viewer which will store maps as smart JSON files with object refferences, the code for that is fully written in my brain but needs to be coded and tested  and I didn't want to further hold up the public release of the current program while working on that.

The program should work fine under windows but as I have no windows machines I cannot package it for that, if somebody feels up to doing so – please respond to the issue on GITHUB. For GNU/Linux users, you can grab and install the sources directly from github or for ubuntu/debian/mint users there is a regularly updated PPA you can grab it from. If somebody helps build packages for other distros, that would be great.