1
\$\begingroup\$

(Thank you all so much for your help on my last post! I appreciate the explanations, graphs and suggestions given. As I continue to experiment with my homebrew variant, I do a lot of probability graphs on paper and spreadsheets, but sometimes I need your professional opinions to get past a formulaic brick wall. This next elaborate scenario may be too much to ask of you kind folks... but I dare to dream...)

Would you please help me graph/formulate this dice mechanic? I want to compare the probabilities with those of the original rules.

I have altered the dice rules to use pools of d12s, then renumbered them F (risk of fumble), 1-10 (possible normal fails and successes), and R (reroll for "exploding" or "stacking" results; i.e. scores of 11-20 and beyond).

Roll a handful of about 5 dice (varies by character ability) and try to score multiple successes against a target number (average of 7, but varies). Scoring at least one success is an accomplishment, character is successful, his turn is over. Rolling one die exceptionally high represents finesse in accomplishment (and related perks) but the turn is still over. Rolling multiple successful dice represents speed of execution, meaning a normal success and the character gets to go again. Etc.

Rolls of R are guaranteed to score 10 and above, pending a second roll (F is still a guaranteed 10, 1 becomes 11, 2 becomes 12, etc, R guarantees a score of 20 and above pending a third roll). Pools that include an R never fumble.

All pools with dice showing F (but no R) risk a fumble, but may be cancelled in the next step.

The remaining Rolls (of 1-10) meeting or exceeding the target number are counted as success, rolls less than the target number are a normal failure. You may remove an F from the pool by removing a normal success (they cancel each other out). If there are no dice remaining that score a success, but at least one F, then it is a fumble (with dire/hilarious results).

I've been using this as a way to further randomize the fumble results without increasing the risk of fumble with skilled characters (they have large dice pools), but some players say that I'm on the wrong track... am I?

\$\endgroup\$
1
\$\begingroup\$

If the goal is to keep having fewer dice from being advantageous for avoiding fumbles, this change mostly succeeds. The pessimal pool size (fumble-wise) under the original mechanics ranges from three to seven; with the new mechanics it is consistently two, except when the target is very high (a 9 or a 10).

There are some other effects, however: the absolute risk of fumbling definitely increases (characters are far fumblier), and the success rate goes down and varies less with the pool size (characters are more average) and with the target number (challenges are more average).

Haskell code

(This code is also available online.)

import Data.Ratio
import Numeric

-- Standard combinatorics functions:
factorial 0 = 1
factorial n = n * factorial (n - 1)
choose n r = (factorial n) `div` (factorial r) `div` (factorial (n - r))

-- Probability of exactly r probability-p outcomes over n trials:
exactly p n r | n >= r = (choose n r) % 1 * (p ^ r) * ((1 - p) ^ (n - r))
              | otherwise = 0

-- Probability of exactly rp probability-p outcomes and rq probability-q outcomes over n trials, the outcomes being disjoint:
exactly2 p q n rp rq = (exactly p n rp) * (exactly (q / (1 - p)) (n - rp) rq)

-- Probability of more probability-p outcomes than probability-q outcomes over n trials, the outcomes being disjoint:
more p q n = sum $ map (uncurry $ exactly2 p q n) $ concatMap under [0 .. n] where under i = map ((,) i) [0 .. (i - 1)]

-- Probability of fumbling under the old mechanic (rolling no successes and at least two 1s on d10s) with n dice and target t:
old_fumble t n = (((t - 1) % 10) ^ n) * (sum $ map (exactly (1 % (t - 1)) n) $ [2 .. n])

-- Probability of succeeding under the old mechanic (roll at least one success on d10s) with n dice and target t:
old_succeed t n = 1 - (((t - 1) % 10) ^ n)

-- Probability of fumbling under the new mechanic (roll no "R"s and more "F"s than successes on d12s) with n dice and target t:
new_fumble t n = ((11 % 12) ^ n) * (more (1 % 11) ((11 - t) % 11) n)

-- Probability of succeeding under the new mechanic (roll an "R" or else more successes than "F"s on d12s) with n dice and target t:
new_succeed t n = (1 - no_rs) + no_rs * (more ((11 - t) % 11) (1 % 11) n) where no_rs = ((11 % 12) ^ n)

-- Table Ranges and Headings:
targets = [5 .. 10]
pool_sizes = [2 .. 10]
row_headings = map format targets where format target = "Target " ++ (showInt target "")
column_headings = map format pool_sizes where format pool_size = "Pool of " ++ (showInt pool_size "")

-- Formatting:
tabulate strings = (concatMap tab strings) ++ "\n" where tab string = string ++ "\t"
prettify p = showFFloat (Just 4) (fromRational p) "\t"
prettify_row heading row = tabulate $ [heading] ++ map prettify row
prettify_grid row_headings column_headings grid = (tabulate column_headings) ++ (concatMap (uncurry prettify_row) $ zip row_headings grid)
prettify_results title function = prettify_grid row_headings ([title] ++ column_headings) $ map f targets where f target = map (function target) pool_sizes

main = do
  putStrLn $ prettify_results "Fumble (Old)" old_fumble
  putStrLn $ prettify_results "Fumble (New)" new_fumble
  putStrLn $ prettify_results "Succeed (Old)" old_succeed
  putStrLn $ prettify_results "Succeed (New)" new_succeed

Probability-Table Output

Fumble (Old)    Pool of 2   Pool of 3   Pool of 4   Pool of 5   Pool of 6   Pool of 7   Pool of 8   Pool of 9   Pool of 10  
Target 5        0.0100      0.0100      0.0067      0.0038      0.0019      0.0009      0.0004      0.0002      0.0001      
Target 6        0.0100      0.0130      0.0113      0.0082      0.0054      0.0033      0.0019      0.0011      0.0006      
Target 7        0.0100      0.0160      0.0171      0.0153      0.0123      0.0092      0.0066      0.0046      0.0031      
Target 8        0.0100      0.0190      0.0241      0.0255      0.0243      0.0217      0.0185      0.0152      0.0121      
Target 9        0.0100      0.0220      0.0323      0.0396      0.0437      0.0450      0.0442      0.0420      0.0388      
Target 10       0.0100      0.0250      0.0417      0.0580      0.0727      0.0851      0.0949      0.1022      0.1071      

Fumble (New)    Pool of 2   Pool of 3   Pool of 4   Pool of 5   Pool of 6   Pool of 7   Pool of 8   Pool of 9   Pool of 10  
Target 5        0.0625      0.0457      0.0328      0.0235      0.0168      0.0121      0.0087      0.0062      0.0045      
Target 6        0.0764      0.0613      0.0478      0.0369      0.0284      0.0218      0.0168      0.0129      0.0099      
Target 7        0.0903      0.0804      0.0679      0.0563      0.0463      0.0379      0.0310      0.0253      0.0207      
Target 8        0.1042      0.1030      0.0945      0.0840      0.0735      0.0639      0.0553      0.0478      0.0412      
Target 9        0.1181      0.1291      0.1285      0.1225      0.1142      0.1050      0.0957      0.0869      0.0785      
Target 10       0.1319      0.1586      0.1712      0.1751      0.1735      0.1684      0.1613      0.1531      0.1444      

Succeed (Old)   Pool of 2   Pool of 3   Pool of 4   Pool of 5   Pool of 6   Pool of 7   Pool of 8   Pool of 9   Pool of 10  
Target 5        0.8400      0.9360      0.9744      0.9898      0.9959      0.9984      0.9993      0.9997      0.9999      
Target 6        0.7500      0.8750      0.9375      0.9688      0.9844      0.9922      0.9961      0.9980      0.9990      
Target 7        0.6400      0.7840      0.8704      0.9222      0.9533      0.9720      0.9832      0.9899      0.9940      
Target 8        0.5100      0.6570      0.7599      0.8319      0.8824      0.9176      0.9424      0.9596      0.9718      
Target 9        0.3600      0.4880      0.5904      0.6723      0.7379      0.7903      0.8322      0.8658      0.8926      
Target 10       0.1900      0.2710      0.3439      0.4095      0.4686      0.5217      0.5695      0.6126      0.6513      

Succeed (New)   Pool of 2   Pool of 3   Pool of 4   Pool of 5   Pool of 6   Pool of 7   Pool of 8   Pool of 9   Pool of 10  
Target 5        0.7431      0.8339      0.8888      0.9241      0.9476      0.9634      0.9743      0.9818      0.9871      
Target 6        0.6806      0.7795      0.8425      0.8853      0.9153      0.9370      0.9527      0.9644      0.9730      
Target 7        0.6042      0.7112      0.7816      0.8314      0.8682      0.8961      0.9175      0.9342      0.9472      
Target 8        0.5139      0.6256      0.7021      0.7582      0.8012      0.8352      0.8624      0.8847      0.9029      
Target 9        0.4097      0.5191      0.5987      0.6596      0.7080      0.7474      0.7803      0.8080      0.8317      
Target 10       0.2917      0.3883      0.4652      0.5279      0.5802      0.6246      0.6628      0.6961      0.7255      
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.