UDice - the Universal Dice System by sad2project

A New Way to Look at Dice

The Origin Story

I was laying in bed, about to fall asleep after a late night. I had been thinking about a previous dice roller Android app that I had come up with a year or so before that hadn't really gotten anywhere. That led me to thinking about the dice in the newest Warhammer tabletop RPG game and how I could possibly model them in a dice roller. I came to a solution surprisingly quickly, and with only a little more thinking, I even figured out the finer tweeks that would be needed for other interesting dice that I'd seen. It was a momentous night for me, and luckily, I had just bought a small notebook that I would always carry with me to jot down ideas such as this (otherwise, I'd likely have forgotten the basics of the idea in the morning). That night, I had come up with the starting point of the UDice System.

Months later, with quite a bit of work done on the system and how it'll work, the actual dice model has stayed the same all this time. The only changes along the way have been figuring out how to have the roller work with the dice and making method changes for ease-of-use with the model. You'll see soon that the model isn't anything like what you've been made to believe for how dice are represented.

The Dice Model

The UDice model represents dice through many layers. The first, outermost layer is simply the Die. The Die, for the most part, is really just a collection of Faces. Faces are simply a collection of symbols (some dice have multiple symbols on a Face, sometimes having separate meanings), each of which is called a Face Value.

This is where the model can start to get confusing, so I need to back up a hair and explain an observation about some dice. There are some dice systems where certain Faces will give a 'success', and other Faces might have a 'failure' which cancels out a 'success'.

While each of these Faces have different names for what could be considered their Face Value, they share a Relationship, since their values stack against each other. A Face Value is simply a Relationship and a value that is applied to that Relationship. The 'success' would have a value of 1, while the 'failure' would have a value of -1.

But, let's say that we roll 2 'successes' and 1 'failure'; what would the output be? We could just say "Success/Failure Relationship: 1", but that's a bit verbose, don't you think?

This is where Output Ranges come into play; Relationships are largely just a collection of Output Ranges. Output Ranges are simply what they say they are: output for a certain range of values. In our simple little success/failure Relationship, we could use 2 Output Ranges. One for when the total comes out to 0 or less, which would output "Failure"; another for a total of any positive number, which would output "Success". If you wanted to, you could even adjust it to count the number of successes.

A Proper Example

I'm going to come up with an interesting die just for this example. It should show off a majority of how the model works, but skipping some of the more advanced uses.
The contrived die:

  • one 'double failure' face
  • one 'failure + bane' face
  • one 'failure' face
  • two blank faces
  • one 'success at a cost' face
  • one 'success' face
  • one 'success + boon' face
So let's really look at this die. There are 3 different Relationships at work here: the success/failure Relationship, the boon/bane Relationship, and the cost Relationship. Let's say that we need an output of the actual total of successes/failures (maybe because the 'system' has scaling success and failure effects), but the only thing we need to know about the boons/banes is which one came out on top. We only need to know about costs if there are any, but then we want the total number of costs to measure a severity level.

How do we represent these Relationships? Let's look at each one of them in turn.

The success/failure Relationship is going to need 5 Output Ranges (or 3, if you're lazy - I'll explain in a bit). We'll need one for -2 and less that outputs "_ Failures", one for -1 that outputs "1 Failure", one for 0 that outputs "Even", one for 1 that outputs "1 Success", and one for 2 on up that outputs "_ Successes". If you were lazy, you could combine the -1 one with the one for -2 and less, and do the same for 1 and 2+. This would create small grammatical problems that would bug me to no end, but some people are okay with it. In case you were confused, an _ means that you simply put the input value there.
Well, that covers the success/failure Relationship. Let's move on.

The boon/bane Relationship requires 3 Output Ranges: all negative numbers output "Bane", 0 outputs nothing, and all positive numbers output "Boon". That was fairly simple. But if you really want to see an even simpler one, check out the next Relationship

The cost Relationship only needs 2 Output Ranges. The first one covers everything from 0 down and outputs nothing. The second covers all positive numbers and outputs "Cost with severity of _". You could word that differently if you'd like, but you get the idea.

If you're confused about how you could ever get more than a 1 in successes or costs, you have to realize that this die is rarely meant to be rolled as the only die. In almost all cases, you would roll multiple of this die (or maybe even different dice being rolled with this one, but largely using the same Relationships. The Warhammer Fantasy RPG does this a lot).

Putting Together the Die

We've got what is probably the toughest part figured out; now we just need to finish building the rest of the Die. I count the Die as having 8 Faces.
The first Face, while probably showing two symbols on the physical die, has only one Face Value of -2 for the success/failure Relationship.
The second Face has 2 Face Values. The first of these having the success/failure Relationship at -1, and the second has the boon/bane relationship at -1.
The third Face has only a FaceValue with a -1 for the success/failure relationship.
The fourth and fifth Faces are blank, having no Face Values.
The sixth Face has 2 Face Values: a success/failure Relationship with a value of 1, and a cost Relationship, also with a value of 1.
The seventh Face has a Face Value for the success/failure Relationship with a value of 1
The eighth (and last... finally) Face is another set of 2 Face Values. The first one uses the success/failure Relationship with a value of 1, and the second one also has a value of 1, but for the boon/bane Relationship.

That sums up how to make the example Die. I hope that was enough to help you understand how the dice model works in the UDice System. You might be asking, "What about 'normal' dice? I don't see any Relationships for those." If you are asking that (or if you simply want to be thorough in your reading of this), then check out the next section...

'Normal' Numeric Dice

Numeric Dice are extremely simple; all of their Faces only have one Face Value, which only ever have one Relationship, which only has one Output Range. The Output Range simply outputs whatever the total value is (represented by "_"). Each Face's Face Value has the numeric Relationship with a value of whatever number would be on the face of the physical version of the Die.

The UDice System is admittedly a bit convoluted for working with numeric dice, but, luckily for developers using it, the library contains plenty of convenience methods to make it a lot easier to work with numeric Dice, Faces, and Face Values.

The Individual Pieces of the Dice Model:
Dice Set
Die
Face
Face Value
Relationship
Output Range