DMFirmy Presents: The DiceMachine pre-release Alpha Evaluation

Post/Author/DateTimePost
#1

dmfirmy

Sep 27, 2010 9:38:50

It seems to me that there must be a million applications out there designed to simulate the rolling of dice, which is the most fundamental activity involved in any d20 System game. Anyone who has played in a high-level campaign knows that dice rolls can quickly begin to pile up, slowing down game play and distracting from the action of the scene. Sure, there are tons of programs that can handle a dice roll like "1d20+3", but what if those rolls have an associated damage type? What if there is a miss chance due to cover or concealment? These are just a couple of the possible situations that might come into play while rolling the dice, but in all of my searching I was unable to find a program that could handle any of these kinds of rolls.

That is when I decided to write DMFirmy's DiceMachine, which I am very pleased and proud to introduce for the first time here on the Dungeon's & Dragons forums. This application, which runs under the Microsoft .NET Framework 4, is the most sophisticated and powerful dice roll simulation software there is. It can handle just about any crazy combination of dice rolls that could possibly occur during a game, and many that probably never could as well. While this version of the software is still only in its early development stages, it is already capable of handling dice rolls in a way that no other program out there can even attempt to match, and I will be taking the feedback generated from this post for ideas and inspiration for the future development of this already powerful software. So please, if you give it a try let me know what you think! Now, let me tell you a bit about what the DiceMachine will do that another dice roller will not.

DMFirmy's DiceMachine will handle dice rolls nested in parentheses, just like a standard calculation. You can input a dice string such as "3d6+(2d4+5)+3", and the operations inside the parentheses will be totaled first, as you would expect. Parentheses can be nested to pretty much any depth, and there is not a limit to how complex the nesting might become. A string such as "3d6+(2d4+(4d6-2)+2d4)-4+(1d10*2)+2" is completely possible using the DiceMachine. You are able to use any of the 4 basic mathematical operations for your calculations ("+", "-", "*", or "/"), and all the totals get properly calculated, rounded off, and totaled.

The DiceMachine also supports some more advanced features, such as handling dice rolls with associated damage types. As an example, "3d6[Fire]+2[Sonic]" is a completely valid dice string, and the DiceMachine will keep track of each damage type separately.  There are some special mechanics in place that deal with multiplication and division of damages with associated types as well. If you for example tried something like "4[Fire]*3[Ice]", the multiplication operation would combine the damage types for a total result of "12[Fire,Ice]", making the damage harder to resist. Division works the opposite way, so "12[Fire,Ice]/3[Ice]" would give a result of "4[Fire]". This only happens when working with multiplication and division for different damage types however, so "4[Fire]*3[Fire]" would still only come out to be "12[Fire]".

This is just the beginning of what the DiceMachine can do, however. A roll of "3d6+3d6[Fire]" might have the same total whether the "3d6[Fire]" is from a standard attack or from a sneak attack, but a standard attack and a sneak attack don't figure in to a total the same when there is multiplication or division involved. If you have a total of "6" from a series of dice rolls, but only "4" of that total comes from a standard attack and the remaining "2" is from a sneak attack, then doubling this total will yield a result of only "10", not the "12" you might expect. The DiceMachine can keep track of all sneak attack damage by adding a "\" character before the sneak attack roll. In the above example, you would input "3d6+\3d6[Fire]" to denote that the "3d6[Fire]" is sneak attack damage, to be treated differently by the calculator.

I realize this post is starting to get a bit lengthy, but this still is not all this program can do for you. The DiceMachine can handle dropping lowest dice from a roll string. The standard roll for creating a character is to use "4d6", taking only the 3 highest results. You would represent this to the DiceMachine as "4d6x1", where the "x#" represents the number of lowest dice to drop. You can represent an associated miss chance for any dice roll, such as that provided by cover. This would be represented to the DiceMachine as "1d20%20", where the "%#" is the associated miss chance. The miss chance is automatically rolled, and if it fails the associated dice rolls are simply excluded from any calculations. You can combine all of these various features in your dice strings as well, so a string of "\3d6x1%50[Fire]" is perfectly valid, so long as the various markers are used in the order shown here.

The DiceMachine can also minimize or maximize the results of any dice string you feed into it so you can get the range for a roll string. As an easy example, "3d6" has a minimum result of "3" and a maximum result of "18". This will work for any string of dice the DiceMachine can understand. It also has 16 color styles of images to represent each dice roll, which can either be randomly assigned or selected from a list of choices. As an added feature, selecting a new dice color reinitializes the randomization engine used by the program, so switching your dice really has an effect on your rolls. It has basic sound effects that can be toggled off or on as well.

Now that I have spent quite a bit of time bragging about what the DiceMachine can do, I want to put out a small disclaimer before submitting my creation to the D&D community at large, and it is this: This program, while powerful, is not necessarily pretty. The interface at the moment is only rudimentary at best. What it is I am really seeking at this point is not so much tips on how to improve the UI, but instead what major features still need to be incorporated. As an example, I plan to add the ability to add a condition to a dice string so you can have something like "If the results of 3d6 is greater than 10, roll 1d20+2, otherwise roll 1d4". There are surely still a few bugs floating around in this software also, which I am still in the process of weeding out and fixing.


 

#2

FaustianPenguin

Sep 27, 2010 12:47:13
Can I save pre-made dice combinations under names, like for powers?

For instance, call something Blazing Starfall, then clicking it gives me 1d4 + 22?
#3

dmfirmy

Sep 27, 2010 15:40:11

Not in the current implementation. In the long term, the answer is absolutely yes, and for a more temporary solution I will whip up a selection box that saves a list of entries for at least until the program is closed. What my primary interest is right now is mostly what types of operations you might need to perform on a string of dice rolls. For instance you might need to re-roll a certain result, to maximize it, or to count it as sneak attack damage. These types of operations are not necessarily specific to the DiceMachine application, but instead are functions of the act of rolling dice for your game. There are actually a few bits of functionality built into the dice parsing engine that do not have any implementation in the interface at all yet, such as the ability to reclaim dice rolls after they have been dropped or to re-roll a specific dice operation while leaving all the rest as they are. As far as the way in which the user interacts with the dice parser is concerned, I have hardly even scratched the surface of what I would like to accomplish.

Really, what it comes down to is a matter of two things: Firstly, XAML and the Windows Presentation Foundation are very new languages for me to work with, and I am still not confident enough to begin working on some of the more advanced UI functions I would like to work into the program. Secondly is the fact that I am still polishing up the functionality of the dice parsing engine itself, and I am not ready to switch the avenue of my focus to the visual aspects of the program until I am 100% satisfied with the functionality of the engine that will be powering the program under the hood. Once I know that I am about finished hard-coding all of the mechanics that will be necessary to manipulate dice rolls, I can then move on to adding a polished user interface. I actually do most of my debugging work from a completely command line interface, so the UI has sort of taken a back seat, and I only put the one that I have together so I could present the application here.