Part 1: Inspiration Strikes
This series of posts is dedicated to building tools that support a simulation of simplified D&D gameplay. To implement the simulation I’ll be using Python, PostgreSQL, Elastic, and Docker. The idea behind these blog posts is to document my progress through this project and interesting bits I find along the way. In this part, I talk about where this idea came from, and what I’d like to accomplish.
It all started with a blog post, “Data Analytics: D&D 5e Character Optimization!” (2018/04/18), published here: http://imagine.kicbak.com/blog/?p=261
In that blog, the author, Matthew W. Johnson, looked at the four basic D&D classes: Cleric, Fighter, Rogue, and Wizard; and attempted to compare their effectiveness through combat. That sounded like a great idea to me, but I’d like to repeat this experiment, expanding on it with how I like to play, and add some other functionality. It seemed like an excellent opportunity to apply some of the things I’ve learned in Python. The first iteration of this project was:
Do the decisions you make when creating an RPG character have a dramatic impact on the character’s effectiveness?
How about the rules your DM/GM is enforcing?
Let’s use Python and PostgreSQL to have a look at questions like this, as we see if one class reigns supreme. We’ll pit classes against each other a la “Deadliest Warrior” style and against some random monsters in simulated combat. We’ll follow that up by testing a home brewed race and class to see the effectiveness of the combination.
The idea being, if I have a new race or class I’d like to incorporate into my game, how does it match up with the other players in the campaign? It would be helpful in designing encounters if I had some idea how powerful the new characters would be. This could also help me dial in homebrew to be more in line with the rest of the Rules As Written (RAW).
The more I thought about this angle the more opportunities came popping up. For instance, if I write the combat simulator flexible enough, I could manage:
Character vs Character Combat
The author of the original blog, did this to compare PC effectiveness. Makes sense to me. Can a Bard better a Barbarian? What if they are different experience levels? How about multiple of the same class/race on one side?
Character vs Foe Combat
This seems to me to be a decent effectiveness measure. Can the player stand up for themselves vs a single foe? What if they are different experience levels? What if there are multiple foes?
Foe vs Foe Combat
I love those brackets of “which monster is best.” Can I prove those out? What if they took into account that some foes come in groups?
Party of Characters vs Foe Combat
Looking to answer questions regarding different party builds. What happens if there are no casters in the party? Or, how powerful is a party of all bards? What if some foes come in groups?
Needless to say, I underestimated the amount of time that this would take. I’ve also already found spots where I want to add some extra functionality and have gone down that road a bit. But, we’ll get to that in up coming posts.
So, that’s some of my ideas that I’m starting off with. Since I’m coming from a background of playing D&D well before programming, in the next part, we’ll talk about the terminology that I’ll be using going forward.