Eu acredito que o seguinte realiza o que você quer. Eu deixei de marcar o sucesso automático, já que é uma situação completamente diferente.
Aviso: isso é lento. 1d10 a 7d10 estão bem. 8d10 e 9d10 levam cerca de 30 segundos para mim. 10d10 nunca terminou. Eu não acho que pode ser otimizado ainda mais, dada a funcionalidade disponível no AnyDice.
Você pode experimentar esse código imediatamente no link
\ Old Storyteller rules (Original World of Darkness) die rolling \
\ Created by Alan De Smet in 2014. Released into the public domain to \
\ the fullest extent possible. This comes WITHOUT ANY WARRANTY. You \
\ are asked, but not required, to credit Alan De Smet. \
\ Input: \
\ ROLL - Dice to roll. Only "<something>d10" is meaningful. \
\ TARGET - the target number. Only "2-10" are meaningful. \
\ SPECIALIZED - "1" if specialized, "0" if not \
\ WILLPOWER - "1" if willpower is spent, "0" if not \
\ Output: \
\ -1 Botch. No successes, at least one 1 \
\ 0 Failure \
\ 1+ Number of successes after subtracting a success for each \
\ 1 rolled. If at least one success was rolled, 1s cannot \
\ take this below 0. \
\ Example: \
\ [owod roll 5d10 target 8 specialized 0] \
\ Limitations: \
\ Scales poorly to large numbers of dice. 9d10 takes about 30 seconds. \
\ 10d10 may not work at all. \
function: owod roll ROLL:s target TARGET:n specialized SPECIALIZED:n willpower WILLPOWER:n {
\ I use "BOTCH" to mean a roll of 1, which isn't how Storyteller \
\ defines it. A super success is a roll of 10 when specialized. \
\ Build up lists of which numbers are successes, botches, and \
\ super successes. \
MAXSUCCESS: 10
SUPERSUCCESSROLLS: {11}
if SPECIALIZED {
MAXSUCCESS: 9
SUPERSUCCESSROLLS: {10}
}
SUCCESSROLLS: {TARGET..MAXSUCCESS}
BOTCHROLLS: {1}
\ Count how many of each type (successes, botches, super successes) \
SUPERSUCCESSES: [count SUPERSUCCESSROLLS in ROLL]
SUCCESSES: [count SUCCESSROLLS in ROLL]
BOTCHES: [count BOTCHROLLS in ROLL]
\ How many successes does this count as? \
FINALSUCCESSES: SUCCESSES+(SUPERSUCCESSES*2)+WILLPOWER
\ If zero successes and at least one botch, the roll is a botch \
if (FINALSUCCESSES = 0) & (BOTCHES > 0) {
\ If you want to know how badly you botched, uncomment the \
\ next line: \
\ result: -BOTCHES \
result: -1
}
if BOTCHES > FINALSUCCESSES {
\ If there are more botches than successes, then we simply fail \
result: 0
}
result: FINALSUCCESSES-BOTCHES
}
output [owod roll 2d10 target 8 specialized 1 willpower 0]
output [owod roll 2d10 target 8 specialized 1 willpower 1]