Research Probability
Game Design Articles ideas and Research examples to prove that rolling random dice/numbers is written all wrong in each roleplaying game articles.
When a table of Random Generation Tables are created for deciding an outcome, they inherently are created as Alphabetical lists, rather than by the desired outcome, which will eventually mismatch the desired numbers of the given table.
This article will show how to balance and adjust these tables to give desired and proper generation of proper numbers to create Realistic Tables.
Colour Text: Code: public class
| 900px |
Note: Green = I Have, Red = Don't Have, Orange = Old Scan, Blue = Misc, Black = ALL Base (Template)
Note: TO ADD: MUST add this article for random roll variances and how they function etc.
Contents
Probability and Games: Damage Rolls
Paper-and-dice role playing games like Dungeons & Dragons use damage rolls to calculate attack damage. This makes sense for a game based on dice. Many computer RPGs calculate damage and other attributes (strength, magic points, agility, etc.) with a similar system.
Typically you’ll write some code to call random(). You’ll adjust the numbers and tweak the results to get the behavior you want in your game. This tutorial will cover three topics:
- Basic adjustments — average value and variance
- Adding asymmetry — dropping dice rolls or adding critical hits
- Complete freedom in designing your random numbers, not limited by what dice provide
Basics
For this article I assume you have a function random(N) that returns a random integer from 0 to range-1. In Python, use random.randrange(N) ; in Javascript, use Math.floor(N * Math.random()) ; in C, the standard library has rand() % N but it behaves poorly so use a different random number generator ; in C++, attach a uniform_int_distribution(0,N-1) to a random number generator object; in Java, make a random number generator object with new Random() and then call .nextInt(N) on it. The standard libraries in many languages don’t have great random number generators but there are lots of third party libraries such as PCG for C and C++.
Let’s start with a single die. This histogram shows the results of rolling a single 12-sided die: 1+random(12). Since random(12) returns a number from 0 to 11, and we want a number from 1 to 12, we add 1 to it. The x-axis is the damage; the y-axis shows how often that damage occurs. With a single die, a damage roll of 2 or 12 is just as likely as a damage roll of 7.
| 900px |
For multiple dice rolls, it’ll help to use a bit of notation from dice games: NdS means roll an S sided die N times. Rolling the single 12-sided die above would be written 1d12; 3d4 means to roll a 4-sided die three times; we’d code it as 3 + random(4) + random(4) + random(4).
Let’s roll two 6-sided dice (2d6) and add up the results:
damage = 0
for each 0 ≤ i < 3:
damage += 1+random(4)
The outcomes could be anywhere from 2 (all dice roll 1) to 12 (both dice roll 6). It’s more likely to roll 7 than 2 or 12.
| 900px |
| 900px |
| 900px |
| 900px |
What happens if we increase the number of dice, but decrease their size?
Try these ways to generate random numbers up to 12:
The main effect is that the distribution goes from wide to narrow. There’s also a second effect, where the peak shifts to the right. Let’s first investigate the uses of shifts.
Constant Shifts
A
Asymmetry
A
A
A
Arbitrary Shapes
A
Conclusion
Comments
Link Name
Notes
- Probability and Games: Damage Rolls 22 Jan 2012 by Red Blob Games
- A