I wrote a D&D Combat Management App
Humble beginnings
So, this weekend my SO went to visit her parents in Rome.
I was home alone, and apart from our campaign’s session on Saturday, barbecue-dinner with my friends and players, and a brief walk on Sunday, I didn’t have much to do.
One thing you should know is I’m a freelance software engineer, specialized in mobile apps. But I enjoy doing some backend here and there, and even desktop apps sometimes.
So, after the session, I started thinking about ways to improve the flow of certain things we do while playing D&D.
One of the pain points is spell descriptions and properties. I sort of fixed that, imposing players to print their own spell cards, and we’ll probably do the same with abilities, talents, etc. I also have, on my laptop’s Obsidian app (where I keep all the session notes while playing), all the descriptions of the spell. So, when the need arises, I can just press Ctrl + O, search “Magic missile” and open the spell description. I’d rather players do it though, already too much to think about during a fight. That’s why… cards.
Another pain point is, in my opinion, combat. Fights. I tried using Owlbear Rodeo for initiative, but I didn’t find it useful enough. For those of you who don’t know, it’s a virtual “tabletop” simulator, very barebone, but just about right for my sessions. We use a projector during fights to show everybody Owlbear Rodeo, the grid and the miniatures, and it works perfectly for us.
But the way initiative is implemented in OR? Nah. I didn’t like it.
So, what does a good software engineer do in these cases? Spend 10 minutes searching for a good alternative on the internet, and use it next time? Or spend the entire Sunday, morning to late night, rolling their own solution for the problem, from scratch?
Yeah, that’s what I did. Look, it’s not the rational thing to do. I bet there are hundreds of combat management apps for D&D online, much better than mine, with more features, better UI, better UX. Maybe even without bugs.
But I don’t care. I just wanted to write my own, have it my way. Learn a thing or two, which I always do, when I embark in these projects.
Plus, I don’t get much uninterrumpted focus time on my work, almost ever, these days. Once you reach a level of seniority in the team, people won’t just leave you alone. Not complaining though. I mean, yeah I’m complaining a bit. OK, I’m complaining a lot. I’m whining about it. But I really enjoy when I can sit down, with a good cup of hot tea, and just start hurting my keyboard like hell for hours.
But enough talking. Here it is.
First column is, simply put, the list of all combatants in the current fight. As you can see, some are editable (NPCs, monsters), others are fixed (PCs). That’s because player characters are inserted at the application’s first setup (more below), and it wouldn’t make much sense to change their names each fight.
Second column is the initative. One nice thing I did, that I don’t usually find elsewhere, is changing the initiative automatically sorts the list, without any other button to press.
Then there are turns: an empty slot means the turn hasn’t started yet; a cross means the turn is over; the hourglass means the character chose to delay their turn. I didn’t put an “in progress” sign, since I didn’t find it useful: it’s usually quite obvious whose’s turn it is at the moment (and yes, it’s always that player’s turn, who ponders for hours before picking… the wrong action).
After that, there are health points. But only for non player characters. I trust my player to track their own health points!
The “minus” button serves the scope of just inserting how much you wish to subtract from the current health points. Especially useful at higher levels. So for instance, if you press the HP (or current hp score, if you’ve already inserted it), you can directly set the current health points:
Otherwise, you can press the minus, either on the table or here, to subtract from the 560:
Longest dialog title of the Milky Way, probably.
Then press “OK”, and the table gets updated.
Finally, the “notes” column, for any notes to be taken, such as “Has disadvantage on hit”, etc. Those notes, for players, are also saved to disk, so that you don’t have to remember each player’s current condition or bonus between fights.
But, let’s see the least interesting part. At the application startup, you can insert your campaign, and all the player characters.
Also, why not, create new campaigns with different PCs.
and then switch to the Fight! tab and create a combat.
Yeah, UI and UX are not great, I’m just a software engineer. Designing things is a bit too much for me, especially when I’m just making a hobby project such as this.
For colleagues: I used Flutter/Dart, and at the moment it’s only compatible with Windows, but it can easily be deployed to almost any native platform. Although I’d have to probably rework something about the table for mobile, unless I’m forcing the user to use it landscape.
Deploying it to a web page should technically work. But I’d have to see how I can access some persistent storage, probably cookies wouldn’t be persistent enough!
Anyway, that’s it. I’ll let you know this weekend, as soon as I have the chance to try it out. Maybe one day I’ll publish it. Not for free, HEHEHEHE. Ok, maybe free with a donation.
Should you have any question, suggestion, rant, whatever, please write in the comments below.
Until next time folks!