1.4.0 : panneau « Détail du combat » au format MountyHall

Bloc détaillé à droite du journal pour chaque action : jets d'Attaque/
Esquive avec dés, coup critique, Seuil de Résistance et jet de
Résistance des sortilèges, progression de Maîtrise, dégâts, mise à
mort, butin et total de PX — y compris pour les attaques des monstres.
Ajout des coups critiques (dégâts ×2 si attaque ≥ 2 × esquive), du
butin de monstres (40 % : potion ou Mountyzédons) et du mode
?demo=combat pour les captures.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
perco
2026-06-11 14:31:53 +02:00
co-authored by Claude Fable 5
parent 026e604b0b
commit bffe9f9f75
5 changed files with 238 additions and 38 deletions
+7 -3
View File
@@ -11,17 +11,21 @@ for (let i = 0; i < 200; i++) {
assert.strictEqual(r.rolls.length, 3);
}
// Combat : un attaquant écrasant doit toucher la plupart du temps. Dégâts en D3.
let hits = 0;
// Combat : un attaquant écrasant doit toucher la plupart du temps. Dégâts en D3,
// doublés sur coup critique (jet d'attaque ≥ 2 × jet d'esquive).
let hits = 0, crits = 0;
for (let i = 0; i < 500; i++) {
const r = g.resolveAttack({ att: 10, deg: 3, degBonus: 2 }, { esq: 1, armor: 2 });
if (r.hit) {
hits++;
if (r.critical) crits++;
assert(r.damage >= 1, "dégâts minimum 1");
assert(r.damage <= 3 * 3 + 2 - 2, "dégâts trop élevés (D3 attendu) : " + r.damage);
const max = (3 * 3 + 2) * (r.critical ? 2 : 1) - 2;
assert(r.damage <= max, "dégâts trop élevés : " + r.damage + (r.critical ? " (critique)" : ""));
}
}
assert(hits > 450, "10D6 vs 1D6 devrait presque toujours toucher (" + hits + "/500)");
assert(crits > 0, "10D6 vs 1D6 devrait produire des coups critiques");
// autoHit : ne rate jamais (Rafale Psychique)
for (let i = 0; i < 50; i++) {