1.5.2 : bonus DEG/REG des potions en valeurs fixes, pas en dés
- Seules les notations « X D3 » de Mountypedia sont des jets de dés ; « DEG +X » / « REG +X » sont des bonus fixes ajoutés au résultat - Concerne Bonne Bouffe, Fertilité, Corruption, DjhinTonik, Rhume/Grippe/Pneumonie, Biskot, KouleMann, Glacier - Régénération bornée à 0 sous malus + affichage du signe corrigé Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -152,6 +152,11 @@ non affilié au jeu original de Mountyhall SARL.
|
||||
|
||||
## Versions
|
||||
|
||||
- **1.5.2** (2026-06-11) — Les bonus/malus DEG et REG des potions sont des valeurs
|
||||
fixes ajoutées au jet, plus des dés supplémentaires (seules les notations « X D3 »
|
||||
de Mountypedia sont des jets). Concerne Bonne Bouffe, Fertilité, Corruption,
|
||||
DjhinTonik, Rhume/Grippe/Pneumonie, Biskot, KouleMann et Glacier. La régénération
|
||||
ne peut plus être négative sous malus.
|
||||
- **1.5.1** (2026-06-11) — Potions fidèles à Mountypedia : toutes les potions à jet
|
||||
utilisent des D3 (Sang de Toh Réroh et PufPuff étaient à tort en D6), et chaque
|
||||
fiole ne fait qu'un seul jet — le même total s'applique à toutes les caracs
|
||||
|
||||
+3
-3
@@ -4,7 +4,7 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const APP_VERSION = "1.5.1";
|
||||
const APP_VERSION = "1.5.2";
|
||||
|
||||
/* Alpha : maîtrise initiale haute pour les tests. Remettre 15 % / 15 % à la v1.0 officielle. */
|
||||
const START_COMP_PCT = 90;
|
||||
@@ -1043,9 +1043,9 @@ function passDLA() {
|
||||
const te = effTroll(t);
|
||||
if (t.pv < t.pvMax && t.pv > 0) {
|
||||
const r = rollDice(te.reg, 3);
|
||||
const heal = r.total + (te.regFlat || 0);
|
||||
const heal = Math.max(0, r.total + (te.regFlat || 0));
|
||||
t.pv = Math.min(t.pvMax, t.pv + heal);
|
||||
const regLbl = te.regFlat ? `${te.reg}D3 +${te.regFlat}` : `${te.reg}D3`;
|
||||
const regLbl = te.regFlat ? `${te.reg}D3 ${te.regFlat > 0 ? "+" : ""}${te.regFlat}` : `${te.reg}D3`;
|
||||
log(`💤 Tour n°${t.tour} (DLA n°${t.dla}) : tu régénères ${heal} PV (${regLbl}).`, "info");
|
||||
} else {
|
||||
log(`💤 Tour n°${t.tour} (DLA n°${t.dla}).`, "info");
|
||||
|
||||
+12
-12
@@ -51,7 +51,7 @@ const POTION_DEFS = {
|
||||
troll.pv = Math.min(troll.pvMax, troll.pv + heal);
|
||||
return {
|
||||
log: `Biskot : +2 REG et +${heal} PV (${heal} = 2D3) pendant 2 tours.`,
|
||||
effects: [makeEffect("Biskot", "🍪", 2, { reg: 2, biskot: true })],
|
||||
effects: [makeEffect("Biskot", "🍪", 2, { regFlat: 2, biskot: true })],
|
||||
};
|
||||
},
|
||||
},
|
||||
@@ -72,10 +72,10 @@ const POTION_DEFS = {
|
||||
duration: 5,
|
||||
rollPower: () => potRand(3, 7),
|
||||
build(_t, p) {
|
||||
const lines = [`DEG +${p} dés`, `REG +${p} dés`];
|
||||
const lines = [`DEG +${p}`, `REG +${p}`];
|
||||
return {
|
||||
log: `Elixir de Bonne Bouffe : ${lines.join(", ")} pendant 5 tours.`,
|
||||
effects: [makeEffect("Elixir de Bonne Bouffe", "🍖", 5, { deg: p, reg: p }, lines)],
|
||||
effects: [makeEffect("Elixir de Bonne Bouffe", "🍖", 5, { degFlat: p, regFlat: p }, lines)],
|
||||
};
|
||||
},
|
||||
},
|
||||
@@ -92,7 +92,7 @@ const POTION_DEFS = {
|
||||
return {
|
||||
log: `Elixir de Corruption : ${lines.join(", ")} ; RM −${y} %, MM −${z} % (5 tours).`,
|
||||
effects: [makeEffect("Elixir de Corruption", "☠️", 5, {
|
||||
attFlat: attR.value, esqFlat: esqR.value, deg: p, reg: -p, vue: -p, armor: p, rmPct: -y, mmPct: -z,
|
||||
attFlat: attR.value, esqFlat: esqR.value, degFlat: p, regFlat: -p, vue: -p, armor: p, rmPct: -y, mmPct: -z,
|
||||
}, lines)],
|
||||
};
|
||||
},
|
||||
@@ -106,7 +106,7 @@ const POTION_DEFS = {
|
||||
const lines = [`ATT ${attR.line}`, `DEG +${p}`];
|
||||
return {
|
||||
log: `Elixir de Fertilité : ${lines.join(", ")} pendant 5 tours.`,
|
||||
effects: [makeEffect("Elixir de Fertilité", "🌱", 5, { attFlat: attR.value, deg: p }, lines)],
|
||||
effects: [makeEffect("Elixir de Fertilité", "🌱", 5, { attFlat: attR.value, degFlat: p }, lines)],
|
||||
};
|
||||
},
|
||||
},
|
||||
@@ -144,7 +144,7 @@ const POTION_DEFS = {
|
||||
troll.pv = Math.min(troll.pvMax, troll.pv + heal);
|
||||
return {
|
||||
log: `Essence de KouleMann : REG +${p}, VUE +${p}, +${heal} PV (${dice}D3) pendant 4 tours.`,
|
||||
effects: [makeEffect("Essence de KouleMann", "🎵", 4, { reg: p, vue: p })],
|
||||
effects: [makeEffect("Essence de KouleMann", "🎵", 4, { regFlat: p, vue: p })],
|
||||
};
|
||||
},
|
||||
},
|
||||
@@ -155,10 +155,10 @@ const POTION_DEFS = {
|
||||
build(troll, p, rollDice) {
|
||||
const heal = rollDice(2, 3).total;
|
||||
troll.pv = Math.min(troll.pvMax, troll.pv + heal);
|
||||
const lines = [`DEG +${p} dés`, `REG +${p} dés`, `PV +${heal} (2D3)`];
|
||||
const lines = [`DEG +${p}`, `REG +${p}`, `PV +${heal} (2D3)`];
|
||||
return {
|
||||
log: `Extrait de DjhinTonik : ${lines.join(", ")} pendant 4 tours.`,
|
||||
effects: [makeEffect("Extrait de DjhinTonik", "🧞", 4, { deg: p, reg: p }, lines)],
|
||||
effects: [makeEffect("Extrait de DjhinTonik", "🧞", 4, { degFlat: p, regFlat: p }, lines)],
|
||||
};
|
||||
},
|
||||
},
|
||||
@@ -169,7 +169,7 @@ const POTION_DEFS = {
|
||||
build(_t, p) {
|
||||
return {
|
||||
log: `Extrait du Glacier : REG +${p}, Armure +${p} pendant 5 tours.`,
|
||||
effects: [makeEffect("Extrait du Glacier", "🧊", 5, { reg: p, armor: p })],
|
||||
effects: [makeEffect("Extrait du Glacier", "🧊", 5, { regFlat: p, armor: p })],
|
||||
};
|
||||
},
|
||||
},
|
||||
@@ -197,7 +197,7 @@ const POTION_DEFS = {
|
||||
return {
|
||||
log: `Rhume en Conserve : ${lines.join(", ")} pendant 3 tours.`,
|
||||
effects: [makeEffect("Rhume en Conserve", "🤧", 3, {
|
||||
attFlat: attR.value, esqFlat: esqR.value, deg: -p, reg: -p,
|
||||
attFlat: attR.value, esqFlat: esqR.value, degFlat: -p, regFlat: -p,
|
||||
}, lines)],
|
||||
};
|
||||
},
|
||||
@@ -214,7 +214,7 @@ const POTION_DEFS = {
|
||||
return {
|
||||
log: `Grippe en Conserve : ${lines.join(", ")} pendant 3 tours.`,
|
||||
effects: [makeEffect("Grippe en Conserve", "🤒", 3, {
|
||||
attFlat: attR.value, esqFlat: esqR.value, deg: -p, reg: -p,
|
||||
attFlat: attR.value, esqFlat: esqR.value, degFlat: -p, regFlat: -p,
|
||||
}, lines)],
|
||||
};
|
||||
},
|
||||
@@ -231,7 +231,7 @@ const POTION_DEFS = {
|
||||
return {
|
||||
log: `Pneumonie en Conserve : ${lines.join(", ")} pendant 3 tours.`,
|
||||
effects: [makeEffect("Pneumonie en Conserve", "😷", 3, {
|
||||
attFlat: attR.value, esqFlat: esqR.value, deg: -5, reg: -5,
|
||||
attFlat: attR.value, esqFlat: esqR.value, degFlat: -5, regFlat: -5,
|
||||
}, lines)],
|
||||
};
|
||||
},
|
||||
|
||||
+15
-4
@@ -165,7 +165,9 @@ assert.strictEqual(p.corruptionYZ(3).y, 0);
|
||||
const item = p.makePotionItem("bonneBouffe", 5);
|
||||
p.drinkPotion(troll, item, g.rollDice, () => {});
|
||||
assert.strictEqual(troll.potionEffects.length, 1);
|
||||
assert.strictEqual(p.effTroll(troll).deg, 8);
|
||||
assert.strictEqual(p.effTroll(troll).deg, 3, "Bonne Bouffe n'ajoute pas de dés de DEG");
|
||||
assert.strictEqual(p.effTroll(troll).degFlat, 5, "Bonne Bouffe : DEG +5 fixe");
|
||||
assert.strictEqual(p.effTroll(troll).regFlat, 5, "Bonne Bouffe : REG +5 fixe");
|
||||
assert.strictEqual(p.effTroll(troll).attFlat, 0, "Bonne Bouffe ne modifie pas ATT");
|
||||
const fixedRoll = () => ({ total: 12, rolls: [4, 4, 4] });
|
||||
const t2 = { att: 3, esq: 3, deg: 3, reg: 1, vue: 3, armor: 0, armorDice: 0, degBonus: 0, pvMax: 30, pv: 20, potionEffects: [], blockCamoTurns: 0, tour: 1 };
|
||||
@@ -193,12 +195,21 @@ assert.strictEqual(p.corruptionYZ(3).y, 0);
|
||||
assert.strictEqual(p.effTroll(troll).deg, 3);
|
||||
assert.strictEqual(p.effTroll(troll).attFlat, 0);
|
||||
}
|
||||
// DjhinTonik : +X dés de DEG et REG (pas un jet D3)
|
||||
// DjhinTonik : DEG +X et REG +X fixes (pas des dés en plus)
|
||||
{
|
||||
const t = { att: 3, esq: 3, deg: 4, reg: 1, vue: 3, armor: 0, armorDice: 0, degBonus: 0, pvMax: 30, pv: 20, potionEffects: [], blockCamoTurns: 0, tour: 1 };
|
||||
p.drinkPotion(t, p.makePotionItem("djhinTonik", 5), g.rollDice, () => {});
|
||||
assert.strictEqual(p.effTroll(t).deg, 9, "DEG 4 + 5 dés potion = 9D3");
|
||||
assert.strictEqual(p.effTroll(t).reg, 6, "REG 1 + 5 dés potion = 6D3");
|
||||
assert.strictEqual(p.effTroll(t).deg, 4, "DEG reste 4D3");
|
||||
assert.strictEqual(p.effTroll(t).degFlat, 5, "DEG +5 fixe");
|
||||
assert.strictEqual(p.effTroll(t).reg, 1, "REG reste 1D3");
|
||||
assert.strictEqual(p.effTroll(t).regFlat, 5, "REG +5 fixe");
|
||||
}
|
||||
// Fertilité : ATT en jet D3 partagé, DEG +X fixe
|
||||
{
|
||||
const t = { att: 3, esq: 3, deg: 4, reg: 1, vue: 3, armor: 0, armorDice: 0, degBonus: 0, pvMax: 30, pv: 20, potionEffects: [], blockCamoTurns: 0, tour: 1 };
|
||||
p.drinkPotion(t, p.makePotionItem("fertilite", 6), g.rollDice, () => {});
|
||||
assert.strictEqual(p.effTroll(t).deg, 4, "Fertilité n'ajoute pas de dés de DEG");
|
||||
assert.strictEqual(p.effTroll(t).degFlat, 6, "Fertilité : DEG +6 fixe");
|
||||
}
|
||||
// Jet d'attaque : bonus potion ajouté au total des D6
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user