Spring 2017
This project is ongoing and documented in more detail in this series of blog posts.
The live version of the prototype can be found here.
In tabletop roleplaying games such as Dungeons & Dragons, a game master (GM) or dungeon master (DM) leads 1–6 players on a story-based adventure. Game masters are responsible for preparing and knowing the details of the adventure, so they often run or adapt pre-existing content.
Hundreds of official adventures have been published over the game's 40-year history, and many are available for purchase or download. Unfortunately, only a small subset of them are compatible with the ruleset, general feel, player level, and constraints of each individual GM’s campaign, and there is no easy way to tell if an adventure will meet their criteria based on the available descriptions.
To tackle this problem, I set out to design an adventure database that would make it easier for game masters to find existing adventures, evaluate their suitability, and save or adapt content they would find useful.
After conducting competitor analysis, I posted a small questionnaire to several tabletop RPG subreddits, inviting comments on how game masters dealt with existing adventures. I received dozens of responses, some extremely detailed, that helped me define the problem more precisely.
It appears that while searching for suitable adventures is important, that requirement is more relaxed than I originally thought. Game masters adapt and rewrite huge sections of existing adventures they are running, until only the major plot points or locations remain. They also look to existing adventures for inspiration, browsing and filing away neat ideas for the future, although they have no good mechanisms for archiving and annotating such ideas.
Therefore, an adventure database should support not only search, but also serendipitous discovery, browsing, and archiving of adventures and sub-adventure components (e.g., characters, plot points, locations).
A barebones functional prototype for my solution is available here. It was created with front-end JavaScript using jQuery, the Skeleton CSS boilerplate, and icons from Font Awesome.