# How can I calculate the expected number of stunt points per attack?

If I hit on a 3, the Dragon Dice can show anything, the chance of getting a double is 44.44%, so on average it is 1.55 (3.5 * 0.44) Stunt Point per attack.

If I hit only on a 18, the Dragon Dice can only show 6. If I multiply it with the hit chance (1/216) it is 0.277 Stunt Point per attack.

How can I calculate the parts in between?
Theoretically, it is (Hit Chance) * (Double Chance) * (Possibe Stunt Die Size). I know how to get Hit Chance, but could you help me with the other two?

## Summary on Stunt Points

For attacks (and other kinds of tests) you roll 3d6, 2 of these is generic, 1 special, from a different color, called Dragon Die. If at least 2 of the dice show the same number, you get Stunt Points equal to the number shown on the Dragon Die. It does not matter if the other two dice show the same number and the Dragon Die is different.

If you roll 4+5+6(DD), you most likely hit, but get no Stunt Points.
If you roll 3+4+4(DD), you get 4 SPs if you hit.
If you roll 2(DD)+6+6, you get 2 SPs if you hit.

• More information about the Dragon Age RPG and how Stunts and Dragon Dice work can be found here, on page 7 and 10: freeronin.com/dragon_age_rpg/DragonAgeRPGQuickstartGuide.pdf Commented May 17, 2019 at 3:13
• Commented May 19, 2019 at 4:56
• I tried and calculating this analytically is a horrible mess, even if one makes some simplifying assumptions. It essentially amounts to doing what @Ryan Thompson did, below, but by hand. So you might want to ask for Anydice code or similar numerical solutions instead. Or maybe I am just not clever enough. Commented May 19, 2019 at 9:33

I wrote an R script to enumerate all possible rolls and then compare them each against every possible to-hit value and take the average number of stunt points (counting each roll as zero stunt points if there's no doubles or if the attack misses). There's no fancy math; I'm just iterating through every possible outcome and taking the average.

The results:

| To Hit | Expected Stunt Points |
|--------+-----------------------|
| 3      | 1.56                  |
| 4      | 1.55                  |
| 5      | 1.53                  |
| 6      | 1.49                  |
| 7      | 1.45                  |
| 8      | 1.35                  |
| 9      | 1.24                  |
| 10     | 1.14                  |
| 11     | 1.00                  |
| 12     | 0.852                 |
| 13     | 0.722                 |
| 14     | 0.542                 |
| 15     | 0.347                 |
| 16     | 0.255                 |
| 17     | 0.106                 |
| 18     | 0.0278                |
|--------+-----------------------|

• Seems right for 17 Commented May 19, 2019 at 9:04
• It might be mathematically and computationally slightly more elegant to use the fact that you can first go through all the 3d6 combinations (216 of them) and then use the fact that it does not matter which of the dice is the dragon die, expect for the amount of stunt points. So you can first check if you succeeded and got doubles and then use the average of the dice as the number of stunt points. I do not know R and can't comment on if this would be easier or harder to implement. Commented May 19, 2019 at 9:41
• @Thanuir That should work for computing the average and would be simple enough to implement, but I think enumerating every possible outcome separately is easier to understand, and as an additional benefit, it enables things like exploring the full distribution of stunt point values instead of just the average. Commented May 19, 2019 at 13:40
function: stunt points for DICE:s and DRAGON_DIE:n vs TARGET:n {
if DICE + DRAGON_DIE < TARGET { result: 0 }  \ miss \
if 1@DICE = 2@DICE | DRAGON_DIE = DICE { result: DRAGON_DIE }  \ pair \
result: 0  \ hit but no pair \
}

loop TARGET over {3..18} {
output [stunt points for 2d6 and d6 vs TARGET] named "hit on [TARGET]"
}


(For anyone wondering about the third line of code, 1@DICE = 2@DICE checks whether the two normal dice are the same, while DRAGON_DIE = DICE checks if the dragon die equals any of the normal dice. Obviously, this particular logic only works if there are exactly two normal dice and one dragon die.)

It gives the same averages as Ryan Thompson's R code, so I'm fairly certain it's correct:

Just out of curiosity, I also went and calculated the expected number of stunt points received if the attack hits, using the method described here:

function: stunt points for DICE:s and DRAGON_DIE:n vs TARGET:n {
if DICE + DRAGON_DIE < TARGET { result: d{} }  \ miss, will be rejected \
if 1@DICE = 2@DICE | DRAGON_DIE = DICE { result: DRAGON_DIE }  \ pair \
result: 0  \ hit but no pair \
}

loop TARGET over {3..18} {
output [stunt points for 2d6 and d6 vs TARGET] named "hit on [TARGET]"
}


That graph has some interesting features. In particular, note the sudden jump between the target values 15 and 16. What happens there is that 4 + 5 + 6 = 15 is the highest number one can roll on 3d6 without getting a pair of equal dice. If you need 16 or more to hit, you'll always get some stunt points (and, in fact, at least four of them!) on each successful hit.