You can crunch the numbers on this pretty easily using anydice.com. Here's an example program:
function: fuzion ATT:n SKL:n DICE:s {
if 3@DICE=6 { result: ATT + SKL + DICE + 2d6}
if 1@DICE=1 { result: ATT + SKL + DICE - 2d6}
result: ATT + SKL + DICE
}
output [fuzion 10 10 3d6] >= 50
The way this works is that we define a function called fuzion
which expects to be provided your attribute, skill, and a 3d6 dice roll. The attribute/skill are just flat numbers, indicated with :n
in the function definition. The roll is cast to a sequence by :s
, which by default sorts the dice in the roll in descending order. Then we inspect the dice:
- If the 3rd die is a 6, that means all 3 dice were 6s, so we get to add an extra 2d6 to the result
- If the 1st die is a 1, all the dice must be 1s, so we subtract 2d6 from the result
- Otherwise, the result is just adding everything together
Then we can use that function fuzion
to simulate a roll and compare it against a target number. In this case, I used your example of an attribute of 10, a skill of 10, and a target of 50. The result when running that anydice program shows you've got about a 0.01286...% chance of succeeding at that test.
You could also use the output statement without the comparison:
output [fuzion 10 10 3d6]
Which will produce graphs and tables showing the distribution of possible values you can get, instead of your odds to succeed on a specific task.
Intuitively, in this specific example we can observe that success requires you to roll the maximum on all dice - which for 5d6 is odds of 1/(6*6*6*6*6) or 1 in 7776, which comes out to a probability of 0.0001286..., or 0.01286...%, which agrees with the value anydice calculated.
You can obviously change the values in the example if you want to compare different scenarios, and it is possible to write a functionally identical program which does this simulation more efficiently, but in thise case it's such a simple calculation that it's not necessary to optimise.