Using open source tools to play Dungeons and Dragons

Using open source tools to play Dungeons and Dragons

How a Dungeon Master generates ideas, makes maps, and more for this face-to-face game.

Using open source tools to play Dungeons and Dragons
Image credits : 

I have two active role-playing gaming (RPG) sessions going all the time. One is a traditional face-to-face game, and we play at my kitchen table. The other is played online via Google Hangouts and a website,

As a Dungeon Master (DM), I try to provide entertaining challenges for the people that attend these sessions. I have to create a place for things to occur, such as a town, the dank and foreboding ruins of a lost civilization, or the bucolic splendor of a seemingly serene forest. I need to make notes for myself, create a physical map or layout of the area, and outline some idea of how these all may or may not be connected.

How I prepare for my tabletop RPG sessions has changed a lot over the last 12 years, and open source software has been a big part of those changes. It's now a vital part of every step in the process, from collecting and sketching out ideas, to dungeon map creation, to map keying, right through to the tools used during play.

When I first started gaming, around 1980, the idea of open source was just beginning to form. Advanced Dungeons and Dragons (AD&D, 1st edition) was still very new and our tools were just paper and pencil. I didn't get to play very much back then because my closest friend lived several miles away.

I got back to it in 2005 when a coworker invited me to play in his game. Four years later he couldn't continue as the DM because Life Got Busy™ so I took over as DM.

Initially, I went back to the old pencil and paper tools, just like back in 1980, to prepare for gaming sessions. Quickly, though, my work as a sysadmin and open source user changed how I prepare and run my campaign, the series of play sessions run by a DM that create the world and the challenges the other player characters (PCs) confront in AD&D or the Astonishing Swordsmen and Sorcerers of Hyperborea.

Here is how I use open source tools for idea retention/creation, map creation, map keying, session tools, and content management to help me run my RPGs.

Idea retention/creation

A game like Dungeons and Dragons is a collaboration between the players and the DM. I don't drive the story, meaning I don't push players down a "plot train," where no matter what they do, the end result is basically the same. Instead, I create things for the players to deal with using "story islands," ideas like, "Knar has a friend back in the Lortmils who says there has been an increase in monster activity there," or "there's a Wizard's tower in the Gamboge forest." Each "island" isn't necessarily connected to any other idea, other than being in a campaign. They usually start small, then I start adding ideas in a brainstorming session. Mind-mapping software works well for sketching out these ideas. For this, I started out using FreeMind but now use Freeplane.

Map creation

Some of my ideas require a physical map. This could be a small farming village, a large city, an island floating in the Black Void of Space, or more likely a dungeon. I usually use Inkscape to make my maps. I like Scalable Vector Graphics (SVG) so I don't have to worry about pixelation when I increase the size of the maps, and they look nicer when you scale them.

While I prefer the look of maps drawn with pencil and paper, being able to edit, copy, and paste elements and undo/redo changes makes a huge difference to my productivity. It's also a lot easier to share very large maps in a digital format. I don't need to figure how to create a scan of a map that would be about 4x6 feet if I had drawn it by hand.

Map keying

Once I create a map or dungeon level, I need to make a key—notes of areas on the map or rooms in the dungeon. For this I use the Vim text editor.

I usually start out with very bare descriptions and fill in more as I have time. If I'm working from an idea I squirreled away in an email or a mind map, I'll add that in.

I also use Vim to create wandering monster tables so players don't spend too much time fussing over what to do in the dungeon. Nothing says, "Don't spend all night trying to figure out how to fight the ogre behind Door A" like a pack of angry hellhounds running down the hallway towards you.

Session tools

I also use Vim during gaming sessions to add notes to the key, such as describing the dungeon's rooms or the wilderness being explored. Sometimes the players make a permanent change to an area.

A lot of time, I create dungeon elements just in time. One of those elements is treasure. It might not be a Smaug-level hoard of gold and gems, but that doesn't mean I won't be rolling 10 times on the treasure table (which randomly determines the chance of having certain valuable items and the quantities of those items) to figure out how that kobold clan acquired 10,000 pieces of copper, 1,000 pieces of silver, 10 gems, and 40 pieces of jewelry.

To save myself time doing those rolls, I use Roland, a tool to programmatically make random rolls on tables and print out those results. It was written by the former Perl pumpking, Ricardo Signes, to help in his D&D campaigns.

Basically, Roland is a bunch of YAML tables with a bit of a model to mostly "do what I mean." I've used it to generate treasure tables for the various monsters the party runs into. I can just type roland treasure_type_q, and Roland will do all the rolls needed to figure out the huge pile of loot (or no loot if the rolls suck) the party acquired from the lich they just defeated.

I've also converted a set of encounter tables (like wandering monster tables, but geared towards making something up on the spot when I don't have anything prepared for a gaming session, or they can be used to roll on and get ideas) that were created for Astonishing Swordsmen and Sorcerers of Hyperborea by Ben Ball. I need to put some more polish on it, but the barebones tables are there. These encounter tables give me some flexibility and capability if I'm too busy to prepare before game night.

Content management

I keep my maps and keys in git repositories. I generally don't need to visit earlier versions of my work. However, when I make a change to a map but later realize I don't like it, this makes it easy to go back to prior versions and start from a point that I liked better.

And like code, I can be fairly reckless with the changes I make in my dungeon keys if I want to change a section of the dungeon, for example after I've finished a level and decide, "no, that minotaur clan would work better over there." It's helpful to be able to back out that decision when the party shows the folly of that choice.


I use Thunderbird for email to coordinate our gaming schedule. I also use it to send myself ideas for rooms or other crazy game-related ideas I come up with or read on gaming forums. Thunderbird is nicely threaded, so I can quickly search through my mountain of email to find those ideas, look up session summaries, and so forth. For example, I recently had an encounter between the party and some non-player characters (NPCs). In the ensuing fight, the party's druid was captured and the rest of the party fled to fight another day. I'm playing out what is happening between the player and the NPCs via email.

As I mentioned earlier, I use Roll20 for sessions where the players and I can't all sit around my kitchen table. It isn't open source, but it does have a great community that shares a variety of tools and character sheets that are open for everyone. Those community-created and approved character sheets that integrate into Roll20 are maintained in a github repo. I even have one, a very simple one, that I created for a Classic Traveller campaign I ran.

Are you using open source tools in your gaming? If so, feel free to let us know about it in the comments.

About the author

Joe Kline - I'm a Linux sysadmin at a university. I prefer to use Perl for most of my programming needs and try to use the best fitting tools when I remember to do that. Other than that I try to keep up with the stuff that life throws at me.