Je travaille sur un système de pool de dés pour les compétences et les actions à utiliser dans un nouveau système.
Dans ce système, tout jet de 1 affectera négativement le résultat de la résolution d'une action utilisant un pool de dés.
Dans ce cas, j'essaie de modéliser la probabilité de chaque résultat lors d'un lancer de 2d4 avec 1d4 de désavantage/adversité en regardant le total des 2 plus hauts dés lancés (ce qui dans ce cas est la totalité des 2d4) après le calcul du désavantage.
Le désavantage est censé fonctionner de la manière suivante :
- Tous les dés de désavantage qui obtiennent un 1 sont ajoutés à la réserve.
- Tout dé de désavantage dont le résultat est supérieur à 1 retire du pool le dé le plus élevé de valeur égale ou inférieure si le dé en question est supérieur à 1 (le dé de désavantage lui-même n'est pas ajouté).
Edit : Quelques exemples de séquences ici, la séquence de dés principale est listée en premier puis le dé de désavantage.
- 23, 1 -> 23 avec le 1 supplémentaire ajouté, le total des 2 premiers dés est de 5.
- 23, 4 -> 4 élimine 3, il ne reste que 2.
- 12, 2 -> 2 élimine 2, ne laissant qu'un seul.
- 44, 4 -> 4 élimine un 4, laissant 4.
- 24, 1 -> 24 avec le 1 supplémentaire ajouté, le total des 2 premiers dés est de 6
Comme il n'est pas possible de retirer des éléments des séquences, j'essaie de construire la séquence DISADVANTAGEPROCESSED tout en excluant les dés qui seraient retirés du pool afin que la fonction puisse ensuite retourner le total du nombre de dés demandé spécifié dans le paramètre POSTOOUTPUT calculé à partir de cette séquence.
J'ai travaillé sur un code similaire à celui ci-dessous pendant plusieurs jours et, bien que l'avantage (et le passage de la séquence de dés directement sans avantage ou désavantage) fonctionne, je n'obtiens toujours pas ce que je crois être les résultats corrects que j'ai obtenus en traçant manuellement les 64 résultats possibles.
Le mécanisme d'ajout des dés de désavantage qui obtiennent 1 au pool semble fonctionner, comme je l'ai déterminé en exécutant le code avec POSSTOOUTPUT réglé sur {3}.
J'ai l'impression de passer à côté de quelque chose d'évident et je vais continuer à travailler sur le sujet, mais toute idée ou conseil que vous pourriez me donner serait très apprécié.
LOWMAX: 1
DICESEQ: 2d4
ADVANTAGESEQ: {}
DISADVANTAGESEQ: 1d4
POSTOOUTPUT: {1..2}
function: POSITION:s DICEPARAM:s with ADVANTAGEPARAM:s advantage and DISADVANTAGEPARAM:s disadvantage
{
ADVANTAGE: 0
ADVANTAGEPROCESSED: {}
DISADVANTAGEPROCESSED: {}
\ Other code omitted due to irrelevance \
if DISADVANTAGEPARAM != {} & ADVANTAGEPARAM = {} \If there is only disadvantage \
{
loop Y over {1..#DISADVANTAGEPARAM} \ Have also tried loop Y over DISADVANTAGEPARAM and not used the indexing \
{
REMOVED: 0 \ This flag is to be set when a die has been removed from the pool for the current disadvantage die in the sequence \
loop X over {1..#DICEPARAM} \ Have also tried loop X over DICEPARAM, no different \
{
\ Have also tried without the whole loops and just gone with code like if DICEPARAM > DISADVANTAGEPARAM hoping that the mechanics of passing dice collections to the function as parameters that expect sequences will do the job, still no luck \
if X@DICEPARAM>Y@DISADVANTAGEPARAM | X@DICEPARAM <=LOWMAX
{
DISADVANTAGEPROCESSED: {DISADVANTAGEPROCESSED, X@DICEPARAM}
}
if X@DICEPARAM <= Y@DISADVANTAGEPARAM
{
if !REMOVED
{
REMOVED: 1
}
else
{
DISADVANTAGEPROCESSED: {DISADVANTAGEPROCESSED, X@DICEPARAM}
}
}
if Y@DISADVANTAGEPARAM <= LOWMAX
{
DISADVANTAGEPROCESSED: {DISADVANTAGEPROCESSED, Y@DISADVANTAGEPARAM}
}
}
}
COMBINED: [sort {DISADVANTAGEPROCESSED}]
result: POSITION@COMBINED
}
}
output [POSTOOUTPUT DICESEQ with ADVANTAGESEQ advantage and DISADVANTAGESEQ disadvantage] named "[DICESEQ] with [ADVANTAGESEQ] advantage and [DISADVANTAGESEQ] disadvantage"
```