Depois de muita experimentação, perplexidade com a forma como Anydice lida com os tipos e entre em contato com o Catlike Coding para obter ajuda, aqui está uma parte do código que faz conta Explodir Dados e Glitches.
Como usar
Apenas abra o link , ajuste o número de DICE no seu pool e, opcionalmente, ajuste MAXDEPTH.
A variável MAXDEPTH define quantas recursões de dados explosivos são processadas. Para piscinas em torno de 13 a 20 dados, a profundidade não deve exceder 2 (e a precisão não importa tanto). Para piscinas menores, você pode aumentá-lo.
Como interpretar os resultados
Positivo resultados significam os números listados de sucesso sem Glitch 1 .
Negativo resultados significa o número listado de acessos, mas com uma falha.
* Exceção: -999 ** significa que ocorreu uma falha crítica (alguns, mas sem ocorrências).
Por que o código é tão complicado
Anydice é voltado para operar em probabilidades mais do que em números normais; por exemplo, há vários locais onde se espera receber conjuntos de dados desenrolados em vez de números, e as soluções alternativas devem ser implementadas (como a substituição de aparência misteriosa da função de explosão). No lado positivo, as soluções foram escritas pelo próprio Jasper Flick.
Da mesma forma, Anydice não é direcionado para dividir um único rolo em várias saídas, assim, o hack com o uso de valores negativos e o significado especial de -999.
Código inteiro
No caso de Anydice estar inativo e você desejar ler isso para referência, ou não quiser clicar no link.
DICE: 13
MAXDEPTH: 2
\Calculate successes for Shadowrun, with Glitch probabilities (ones*2 > hits)\
\A result of -999 means a Critical Glitch (0 hits)\
\Negative results mean X hits but with a Glitch\
\Positive results are numbers of hits\
\MAXDEPTH is how many recursions of Exploding Dice are allowed\
\With high pools, use lower depth (loss of precision, but less risk of timing out)\
\With low pools, you can increase the depth\
\All hail Catlike Coding!\
function: explode N:n plus X {
if N = 6 { result: [explode d6 plus X + 1] }
if N = 5 { result: X + 1 }
if N = 1 {
if X { result: -X }
result: -100
}
result: X
}
function: parse ROLL:s {
ONES: 0
HITS: 0
loop N over ROLL {
if N > 0 { HITS: HITS + N }
else if N = -100 { ONES: ONES + 1 }
else if N HITS {
if HITS { result: -HITS }
result: -999
}
result: HITS
}
set "maximum function depth" to MAXDEPTH
D: [explode d6 plus 0]
output [parse DICEdD]
1 Usando os
'ones > hits / 2 ' definição de um Glitch. Se jogar com uma definição diferente, sinta-se à vontade para alterar o > para um > = no código.