J'ai tenté de le faire en Python (je sais que ce n'est pas anydice. Peu importe). Il s'avère que, même si on exclut les explosés du calcul du fumble, les fumbles sont toujours beaucoup trop fréquents dans n'importe quel groupe de dés de taille raisonnable (mon groupe de test de 8d6 donnait toujours des fumbles environ la moitié du temps). Voici mon script Python qui exclut les explosés :
# This is exploding D6s.
# Basically, you start with a single roll with x dice.
# A result of 4 or higher is a success.
# A result of 3 or lesser is a failure.
# If a 6 is rolled, you roll another die. It will always be a success.
# If that die is a 6, you roll yet another, and so on. This is the "exploding" part.
# However, if more 1's are rolled than 6's, there's a FUMBLE.
# Exploded dice don't count towards 1's when rolled, but do count toward 6's.
# Let's... rationalize that.
import random
def explodeD6(x, xcount=0, explodes=0, explodecount=0, successes=0, ones=0): #x is the number of dice initially rolled.
if xcount < x: #This means not all the dice in the initial pool have been rolled yet.
roll = random.randint(1,6)
if roll == 1:
ones = ones + 1
elif roll == 2 or roll == 3:
successes = successes #Just demonstrating that nothing happens.
elif roll == 4 or roll == 5:
successes = successes + 1
elif roll == 6:
successes = successes + 1
explodes = explodes + 1
else: #Whoops! The randint wasn't between one and six. That's not right.
print("Oops. Wrong die.")
print(str(roll)) #Report.
xcount = xcount + 1 #Indicate one more die has been rolled.
explodeD6(x,xcount,explodes,explodecount,successes,ones) #And again.
elif xcount == x: #This means all the initial dice have been rolled, but not necessarily the explosions.
if explodecount < explodes: #This is an explosion roll. There are no failures, but it can explode again!.
roll = random.randint(1,6)
if roll == 1 or roll == 2 or roll == 3 or roll == 4 or roll == 5:
explodes = explodes #Again, demonstrating nothing happens.
elif roll == 6:
explodes = explodes + 1
else: #D'oh. randint still not working.
print("Oops. Wrong die.")
successes = successes + 1
explodecount = explodecount + 1
print(str(roll) + "(Explosion)") #Report.
explodeD6(x,xcount,explodes,explodecount,successes,ones)
elif explodecount == explodes: #All dice have been rolled and all manner of bonus dice shall have been rolled.
totalRolls = x + explodes
if ones > explodes: #Fumble.
print("With %s ones, but only %s sixes, the result is a fumble, despite %s successes.") % (ones,explodes,successes)
print("%s rolls total, from a starting pool of %sd6, due to %s explosions.") % (totalRolls,x,explodes)
elif ones <= explodes:
if successes > 0: #Success!
print("There were %s ones, but %s sixes, allowing the %s successes to shine through.") % (ones,explodes,successes)
print("%s rolls total, from a starting pool of %sd6, due to %s explosions.") % (totalRolls,x,explodes)
elif successes == 0: #Miss.
print("There were %s ones, but %s sixes, yet there were %s successes, resulting in a miss.") % (ones,explodes,successes)
print("%s rolls total, from a starting pool of %sd6, due to %s explosions.") % (totalRolls,x,explodes)
else: #Oops. Successes are negative.
print("Something's wrong.")
else:
print("Something's wrong.")
else:
print("Something's wrong.")
#Holy shit. That's really long. Let's test it.
explodeD6(8)
Copiez-collez-le ici pour le voir en action.