Fórmula AnyDice para rolar 2d20 e descartar o valor mais distante de 10

3

Estou tentando verificar as probabilidades de rolar 2d20 e cair o mais longe de dez usando qualquer dado. (ou seja, "Mais Média" roll ponderado, semelhante a 5e vantagem / desvantagem. Basicamente você sempre rolar 2, e soltar um baseado em adv / std / dis.) Estou tendo problemas com a sintaxe. Eu posso colocar as declarações se / então aninhadas, eu acho, mas não está funcionando, e eu realmente não entendo isso da documentação.

Como quero manter os 5% de problemas críticos, preciso reconsiderá-los e acho que eles ainda funcionarão com os testes de Avanço / Desafio. Então optei por pares e 'opostos' entre os dois dados. (Mas não exatamente, eu usaria 21's mas 20s são mais fáceis de calcular de relance.)

Para um total de 20 (19 + 1, etc.), ele é considerado um sucesso crítico. Para pares, (A = B) conta como uma falha crítica. Para o dobro de 20 é um duplo crítico. Para o dobro 1 é uma falha dupla. Para o dobro 10 é um crítico s / f. (Auto crit, não um auto S / F como os outros, eu só quero que me diga quando isso acontece.) Caso contrário, ele emitirá o dado mais próximo de 10 e soltará o outro.

Posso obter alguma ajuda para escrever isso?

    
por spicklesandwich 03.08.2018 / 17:41

1 resposta

O código faz o que você quer?

function: roll ROLL:s {
  \ we assume that ROLL always has exactly two dice; AnyDice sorts them in descending order \
  HI: 1@ROLL
  LO: 2@ROLL
  \ handle the special cases first \
  if LO = 10 & HI = 10 { result: -1 } \ double 10 = "crit success/fail" \
  if LO + HI = 20      { result: 20 } \ mirror pair = crit success \
  if LO = HI           { result:  0 } \ equal pair = crit failure \ 
  \ at this point, we know there's no equal or mirror pair \
  if [absolute LO - 10] < [absolute HI - 10] { result: LO } else { result: HI }
}

output [roll 2d20]

A saída, resumida, é assim:

Roll          | AnyDice result | Probability
--------------+----------------+------------
Double 10     |       -1       |      0.25 %
Crit success  |       20       |      4.50 %
Crit fail     |        0       |      4.75 %
Normal N < 10 |        N       |   N - 0.5 %  
Normal N = 10 |        N       |       9.5 %
Normal N > 10 |        N       |  19.5 - N %

Ou seja, exceto para os crits, você obtém o mesmo tipo de distribuição de probabilidade em forma de triângulo que para um teste normal de 2d20, exceto que neste caso o range de rolls normais é apenas de 1 a 19 (já que a única maneira o rolo mais próximo de 10 poderia ser 20 se você fizesse um double 20, mas isso é uma falha crítica).

Além disso, você pode ver que se um double 10 fosse considerado um sucesso crítico, então as probabilidades de um crit falhar e um sucesso crítico seriam exatamente 4,75%, ou seja, um pouco abaixo da chance de 5% de rolar 1 ou um nat 20 em 1d20. Essa simetria pode ou não ser algo que você gostaria de ter.

Na verdade, da maneira como organizei o código acima, você pode testar os efeitos dessa alteração simplesmente excluindo a linha "double 10" (já que, se essa linha não estiver lá, o código continuará no seguinte " par de espelhos "case". Claro, você também pode facilmente testar o efeito de lidar com um double 10 de outras maneiras (por exemplo, tratá-lo como um crit fail, ou apenas como um normal 10) simplesmente substituindo o valor do resultado -1 no código com qualquer outro número.

    
03.08.2018 / 19:58

Tags