J'essaie de construire une fonction pour modéliser non seulement un jet de dé, mais aussi pour avoir des opérateurs booléens pour basculer en utilisant divers pouvoirs qui affectent le dé. J'ai réussi à tout faire fonctionner sauf une chose : regarder le résultat du lancer, voir si un '1' a été obtenu et changer ce '1', mais seulement une fois.
La mécanique des dés est celle du Cryptomancien, et elle fonctionne en prenant votre rang dans une compétence qui va de 1 à 5 et en lançant autant de d10 plus un certain nombre de d6 qui totalisent 5 dés. Pour les d10, les 1 sont toujours des échecs (-1), les nombres inférieurs à la cible sont des 0 et les nombres égaux ou supérieurs à la cible sont des succès (+1). Sur les d6, les 1 sont des ratés, les 6 sont des réussites et tout le reste est 0.
J'ai utilisé un dé personnalisé pour mes jets, mais j'ai configuré la fonction pour construire le jet à partir d'un numéro de compétence et d'un numéro de défi. Voici ce que j'ai obtenu jusqu'à présent :
function: sb B:n sp P:n skill SKILL:n vs CHALLENGE:n{
if P=1{
ROLL: SKILLd{-1,0:(CHALLENGE-2),1:(10-CHALLENGE),2}+(5-SKILL)d{-1,0:4,1}
}
else {
ROLL: SKILLd{-1,0:(CHALLENGE-2),1:(11-CHALLENGE)}+(5-SKILL)d{-1,0:4,1}
}
if B=1{
if 5@ROLL=-1{
ROLL:ROLL+2
}
}
result:ROLL
}
L'objectif est de pouvoir basculer les choses en entrant un 1 ou un 0 pour les valeurs B et P afin de les activer ou de les désactiver. P=1 fait que tous les '10' obtenus valent +2 succès au lieu de +1. B=1 est supposé vérifier la dernière valeur du jet, et si un -1 est présent, ajouter 2 au total, transformant ainsi un et un seul botch en succès, même s'il y a plusieurs botchs dans le jet.
Tout fonctionne jusqu'à ce que j'active B. J'obtiens alors une erreur indiquant que l'opération booléenne if
ne peut être utilisé que pour les numéros. Il s'avère que 5@ROLL
ne me donne pas le plus petit résultat de 5 dés mais la probabilité de ce résultat. Comment puis-je résoudre ce problème ? Comment puis-je convertir ROLL:d
en ROLL:s
?