Il semble que vous demandiez quelque chose comme la fonction intégrée [explode DIE]
dans AnyDice, sauf pour relancer le dé (une seule fois) si le jet original est en dessous d'une certaine limite.
Si vous regardez la bibliothèque de fonctions AnyDice (dans le menu de gauche) et cliquez sur l'entrée explode
, vous verrez en fait une section "Faites-le vous-même" pratique qui montre comment réimplémenter la fonction intégrée explode
vous-même. Le truc pour rendre la syntaxe propre et claire est d'utiliser deux fonctions : une fonction enveloppe qui prend le dé non roulé en paramètre et appelle une fonction auxiliaire pour chaque résultat possible du jet (c'est-à-dire passer le même dé à la fonction auxiliaire, qui s'attend à un nombre).
Nous pouvons utiliser le même truc ici:
function: reroll DIE:d if under LIMIT:n {
result: [reroll DIE as DIE if under LIMIT]
}
function: reroll ROLL:n as DIE:d if under LIMIT:n {
if ROLL < LIMIT { result: DIE }
else { result: ROLL }
}
loop SIDES over {4,6,8,12,20} {
output [reroll dSIDES if under 3] named "d[SIDES] avec GWF"
}
Ici, [reroll DIE if under LIMIT]
est la fonction enveloppe, qui appelle simplement la fonction interne [reroll ROLL as DIE if under LIMIT]
pour chaque jet possible du dé. La fonction interne vérifie ensuite simplement si le jet est en dessous de la limite, et si c'est le cas, renvoie le dé "relancé" au lieu du jet d'origine.
Vous pourriez bien sûr aussi appeler la fonction interne directement, comme ceci :
loop SIDES over {4,6,8,12,20} {
output [reroll dSIDES as dSIDES if under 3] named "d[SIDES] avec GWF"
}
et obtenir les mêmes résultats. Mais parfois, il est agréable d'éviter de répéter un paramètre comme ça. En fait, si nous sommes seulement intéressés par la modélisation des relances dues à la Grande Maîtrise d'Arme, nous pourrions aussi laisser de côté le paramètre constant LIMITE
, et simplifier notre fonction enveloppe en :
function: gwf DIE:d {
result: [reroll DIE as DIE if under 3]
}
Bonus : La sortie de la ou des fonctions données ci-dessus est elle-même un dé (c'est-à-dire une distribution de probabilité sur les entiers), et peut donc être attribuée à un dé personnalisé qui "se relance automatiquement". Vous pouvez ensuite lancer autant de ces dés personnalisés que vous le souhaitez, ou même les mélanger avec d'autres dés.
Par exemple, pour obtenir les résultats de lancer 2dX avec la Grande Maîtrise d'Arme, vous pourriez faire :
loop SIDES over {4,6,8,12,20} {
GWF: [gwf dSIDES]
output 2dGWF named "2d[SIDES] avec GWF"
}
ou, alternativement, simplement :
loop SIDES over {4,6,8,12,20} {
output 2d[gwf dSIDES] named "2d[SIDES] avec GWF"
}