# Odds of Tzeentch's Curse in Mass Battles port

Mass Battles is often casually considered an easy mechanic of Savage Worlds to port to other systems. I'm finding it easily so, save some edge cases.

I like the idea in Mass Battles of heroes running out of ammo, be it arrows, bullets or magic. However, in WFRP 2e, Magic and Divine spell casters can access most spells ad hoc in combat, the only limiting factor is Tzeentch's Curse. The curse is mechanically the result of rolling doubles, triples, quadruples, ad infinitum (though system limited to five, maybe six d10s). Another limiting factor is outright failure to cast a spell that might result in a test to avoid an Insanity Point (where all dice rolled come up 1)

So I'm looking to find the percentage that in any Mass Combat round the Arcane or Divine caster could have drawn the ire of Tzeentch, Lord of Change, or the wrath of the divine.

## AnyDice

How would one express in the AnyDice macro language rolling doubles, &c. on 2d10 (or 3d10, where doubles or triples could be a result, &c.)?

Can AnyDice also express the chances of doubles, &c. would be all 1s? For this result, in the setting, it makes novice casters (1 Magic Point) especially prone to Insanity. Of course this is easily calculated at 10% (1 in 1d10).

It does not appear possible to calculate this in AnyDice, but fortunately there are other ways to figure it out.

## Odds of All Ones

First, the easy question. You are wanting to know the probability of all 1s. Since there is only one way to roll all 1s, we just need to get the odds of having any one roll on a set of dice.

\begin{array}{c|lcl} \text{Dice} & \rlap{\text{Probability of any given roll}} \\ \hline 1 && \frac 1 {10} & = 10\% \\ 2 && \frac 1 {100} & = 1\% \\ 3 && \frac 1 {1,000} & = 0.1\% \\ 4 && \frac 1 {10,000} & = 0.01\% \\ 5 && \frac 1 {100,000} & = 0.001\% \\ \end{array}

Notice that the odds increase by a factor of 10 with every additional die. At 2 it's rare, at 3 it's extremely rare, and any higher you've got a better chance of winning a low stakes lottery.

## Odds of Doubles, Triples, Etc.

Now for the harder question: the odds of getting doubles of any type. The math for this is messy to say the least, but we can use a Monte Carlo simulation to simulate a whole bunch of trials on the computer and then figure out how many trials resulted in doubles. I used a Python script to roll dice 1 million times and here is what I got:

\begin{array}{c|l|l|l|l} \text{Dice} & \text{Number of Doubles} & \text{Number of Triples} & \text{Number of Quadruples} & \text{Number of Quintuples} \\ \hline 1 & \text{N/A} & \text{N/A} & \text{N/A} & \text{N/A} \\ 2 & 99133 = 9.91\% & \text{N/A} & \text{N/A} & \text{N/A} \\ 3 & 279758 = 27.97\% & 10139 = 1.01\% & \text{N/A} & \text{N/A} \\ 4 & 496753 = 49.68\% & 37074 = 3.71\% & 983 = .09\% & \text{N/A} \\ 5 & 697686 = 69.77\% & 85635 = 8.56\% & 4584 = .46\% & 102 = .01\% \\ \end{array}

Note that a Monte Carlo simulation by its definition may not give 100% accurate results since you're relying on randomness, and I accept that I may have made a mistake in calculating this answer. But the bottom line is: there really isn't any way to make it work as a percentile system unless you create a table.

## So How Do I Translate It?

First is the easy route: just roll d10s as you would in Warhammer in Savage Worlds. Same probability, same tables, etc. Perhaps roll a number of dice equal to the character's arcane skill step level: Untrained = 1, d4 = 2, d6 = 3, etc. Consequently, this winds up being "Roll a number of d10s equal to your arcane skill / 2", which is easy to remember.

However, one of the mantras of Savage Worlds conversions is "convert the setting, not the mechanics". In other words, is it more important that there is a risk of the wrath or blessing of the gods or that the probability curve is the same as that found in Warhammer Fantasy?

Why not instead just make it so that a critical failure results in the result of all 1's (alternatively, make it like Fear effects and Deadlands Huckster Backlash where on a critical failure you roll on a d20 table with one result being the super bad one)? And what if getting 2 raises on a roll gives you the result of doubles, 3 raises the result of triples, etc? This gives you roughly the same odds while using mechanics that are already in Savage Worlds, thus not slowing down the game with a subsystem. It does change the feel of it a little bit, but you're already changing the feel by converting from Warhammer Fantasy (where characters are typically incompetent) to Savage Worlds (where characters are fairly competent). I encourage you to give this method a try.

I know it's a late answer, but here's how to calculate the exact odds of Tzeentch's Curse in AnyDice:

function: sets of N:n equal in ROLL:s {
COUNT: 0
loop I over ROLL {
if (ROLL = I) = N { COUNT: COUNT + 1 }
}
result: COUNT / N
}
loop A over {2..5} {
loop B over {A..5} {
output [sets of A equal in Bd10] named "sets of [A] equal dice in [B]d10"
}
}


It works basically by brute force: when you pass a set of dice to a function expecting a sequence, AnyDice will call the function for every possible roll of the dice, and total the results (weighed by the probability of each roll). For such small die pools, it's actually quite fast, although it would get slow for very large numbers of dice.

FWIW, here's the output in tabular format:

Dice | Double | 2 x 2  | Triple | Quad  | Quint
------------------------------------------------
2    | 10.00% |   -    |   -    |   -   |   -
3    | 27.00% |   -    |  1.00% |   -   |   -
4    | 43.20% |  2.70% |  3.60% | 0.10% |   -
5    | 51.30% | 10.80% |  8.10% | 0.45% | 0.01%


Note that I've counted rolls with one and two doubles separately. Thus, the "Double" column only includes rolls where there's only one double, while rolls with two doubles are listed in the "2 x 2" column. However, for 5 dice, there does exist the possibility of rolling a double and a triple in the same roll; the code does not check for that case, so such rolls end up getting counted in both the "Double" and the "Triple" columns.