This is a preview of my attempt at realizing one of my New Year’s Resolutions: “Merge my love of programming with my love of roleplaying.” I have done this in the past with simple stuff like dice rollers and Excel spreadsheets with tons of clunky VB Script. This time I am putting it right on the bleeding edge. I want to learn WPF (Windows Presentation Foundation) and improve my DB skills so I figured I would take a stab at it by designing an application for use with D&D.
I am actually going to try to support both 3.5 and 4e, which I just started working into the db (database) side of things. I am providing a demo of the program so you can see where I am going with this as far as layout is concerned. It obviously doesn’t do anything yet, since I am still architecting the database. Here are some details about the program:
- Mad Brew Labs’ D&D Combat Manager v0.1
- Languages: C#, XAML, LINQ, XML
- Operating System: Windows XP SP3 & Windows Vista
- Platform: Microsoft .NET 3.5 with SP1 (WPF & SQL Express)
If the program ever becomes desirable for Mac and Linux users, I am afraid they are out of luck. At least until Mono catches up with all the features I am using from .NET 3.5. Even then, I do not know if I would want to attempt the conversion, but I might be willing to open source the project so some other ambitious person can.
I have several goals in mind for this piece of software. I want to be able to support more than one combat at a time, so this means making the data persistent. This means I needed some method of storing said data, so I am going with MS SQL Server Express. It packs a lot power and I can incorporate it into the app.
Eventually I want the program to be able to export and import encounters. This will of course mean developing an XML schema, which will be cake once I finish the SQL Express schema. However, I am designing the db with expansion in mind, since at some point I might want to create a suite of tools. So I will need separate import/export files for characters, monsters, and spells.
I also want users to be able to add custom conditions and modifiers to the Combat Manager, which means I’ll need a tool that will allow end users to modify database entries. And of course another XML format for portability and sharing.
Allow the creation of campaigns for which each combat is associated. This will be more important if I happen to expand into a suite of tools. Players, encounters, and other resources can all be associated with a campaign.
I want to develop a creature catalog that can store the basic info about monsters (attack, defense, initiative modifier, hit points, etc.). This will mean providing an interface for to allow users to modify the tables concerning monsters.
The following is a breakdown of how I would like several operations to function:
- Select characters from the campaign library
- Select monsters from the creature catalog
- Allow groupings for simplified initiatives (like all monsters of a type)
- Select init modifier from characters/monsters data
- Generate a random number between 1-20 and then add init mod for each individual or group
- Give an option to use highest or lowest init mod for groups
- Arrange icons in init order and highlight first character/group
- Place each round in its own tab
- Simplified descriptions are placed in action row
- Hover over action row to read full details
- New effects are place in a new row under the affect instance
- Effects are highlighted with colors for easy reference
- Previous turns are “grayed out”
- Enter DM notes for each turn
- A picture associated with the current turn is placed in upper right corner
- If effect ends, a notification pops up on the beginning of the turn
- If a save is needed, it prompts for a saving throw
- If an ability recharges, a notification pops-up
- Dead/Incapacitated subjects “sink” to the bottom of the display
I am admittedly not very far along on this project. Below is a picture that shows how far along I am developing the database. You can see by how I am setting the db up that it will allow for expansion (if not demand it). I am also pretty new the db side of programming. I usually like working with simple or medium complexity queries and then manipulate the data further within the app (which is bad practice!).
However, I think the initiated will see that this will require some complex queries with elegant joins that work with variables. If I were to deploy this as a web app, I would certainly make use of DTS (SSIS), stored procedures, and views, which might be something I approach in the future.
If you take a look at the demo, you will see that I need to tweak how objects are resized. I plan on allowing areas to have scrollbars in the event a user wants to make the window smaller than the design allows.
I am pretty swamped with projects, for RPGs or otherwise, but this is definitely something I would like to see come to fruition (the more quality pieces in my software developing portfolio the better!). However, I don’t have a timeline, as there are just too many factors at play. Just keep checking back for more updates.
Oh, and I will be releasing the app free for personal use under some Creative Commons license that is yet to be specified.