feat: ajout du Mod. de situation (-8 à +8) dans toutes les fenêtres de jet

- Select situationMod (-8 → +8 par pas de 1) visible sur tous les jets (y compris résistance)
- Intégré dans la prévisualisation de formule (update dynamique)
- Pris en compte dans totalModifier au même titre que les autres mods
- Respecte la règle 'Puiser' (malus ignoré si puiser activé)
- Affiché dans la carte de tchat si non nul (symbole ◈)
- i18n : CELESTOPOL.Roll.situationMod

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-03-31 00:44:56 +02:00
parent c7ec648696
commit 1e92232013
6 changed files with 31 additions and 7 deletions

View File

@@ -59,6 +59,10 @@ export class CelestopolRoll extends Roll {
value: v,
label: v > 0 ? `+${v}` : `${v}`,
}))
const situationChoices = Array.from({ length: 17 }, (_, i) => {
const v = i - 8
return { value: v, label: v > 0 ? `+${v}` : `${v}` }
})
const dialogContext = {
actorName: options.actorName,
@@ -79,6 +83,7 @@ export class CelestopolRoll extends Roll {
weaponDegats,
modifierChoices,
aspectChoices,
situationChoices,
fortuneValue,
}
@@ -108,6 +113,7 @@ export class CelestopolRoll extends Roll {
const autoSucc = rawMod === "auto"
const modifier = autoSucc ? 0 : (parseInt(rawMod ?? 0) || 0)
const aspectMod = parseInt(wrap.querySelector('#aspectModifier')?.value ?? 0) || 0
const situMod = parseInt(wrap.querySelector('#situationMod')?.value ?? 0) || 0
const useDestin = wrap.querySelector('#useDestin')?.checked
const useFort = wrap.querySelector('#useFortune')?.checked
const puiser = wrap.querySelector('#puiserRessources')?.checked
@@ -128,7 +134,8 @@ export class CelestopolRoll extends Roll {
const effWound = puiser ? 0 : woundMalus
const effMod = puiser ? Math.max(0, modifier) : modifier
const effAspect = puiser ? Math.max(0, aspectMod) : aspectMod
const totalMod = skillValue + effWound + effMod + effAspect
const effSit = puiser ? Math.max(0, situMod) : situMod
const totalMod = skillValue + effWound + effMod + effAspect + effSit
let formula
if (autoSucc) {
@@ -146,7 +153,7 @@ export class CelestopolRoll extends Roll {
if (previewEl) previewEl.textContent = formula
}
wrap.querySelectorAll('#modifier, #aspectModifier, #useDestin, #useFortune, #puiserRessources, #corpsPnj')
wrap.querySelectorAll('#modifier, #aspectModifier, #situationMod, #useDestin, #useFortune, #puiserRessources, #corpsPnj')
.forEach(el => {
el.addEventListener('change', update)
el.addEventListener('input', update)
@@ -181,6 +188,7 @@ export class CelestopolRoll extends Roll {
const autoSuccess = rollContext.modifier === "auto"
const modifier = autoSuccess ? 0 : (parseInt(rollContext.modifier ?? 0) || 0)
const aspectMod = parseInt(rollContext.aspectModifier ?? 0) || 0
const situationMod = parseInt(rollContext.situationMod ?? 0) || 0
const useDestin = destGaugeFull && (rollContext.useDestin === true || rollContext.useDestin === "true")
const useFortune = fortuneValue > 0 && (rollContext.useFortune === true || rollContext.useFortune === "true")
const puiserRessources = rollContext.puiserRessources === true || rollContext.puiserRessources === "true"
@@ -191,13 +199,14 @@ export class CelestopolRoll extends Roll {
const effectiveMoon = isResistance ? false : rollMoonDie
// Puiser dans ses ressources → ignorer tous les malus
const effectiveWoundMalus = effectivePuiser ? 0 : woundMalus
const effectiveModifier = effectivePuiser ? Math.max(0, modifier) : modifier
const effectiveAspectMod = effectivePuiser ? Math.max(0, aspectMod) : aspectMod
const effectiveWoundMalus = effectivePuiser ? 0 : woundMalus
const effectiveModifier = effectivePuiser ? Math.max(0, modifier) : modifier
const effectiveAspectMod = effectivePuiser ? Math.max(0, aspectMod) : aspectMod
const effectiveSituationMod = effectivePuiser ? Math.max(0, situationMod) : situationMod
// Fortune : 1d8 + 8 ; Destin : 3d8 ; sinon : 2d8
const nbDice = (!isResistance && useDestin) ? 3 : 2
const totalModifier = skillValue + effectiveWoundMalus + effectiveAspectMod + effectiveModifier
const totalModifier = skillValue + effectiveWoundMalus + effectiveAspectMod + effectiveModifier + effectiveSituationMod
const formula = (!isResistance && useFortune)
? buildFormula(1, totalModifier + 8)
: buildFormula(nbDice, totalModifier)
@@ -219,6 +228,7 @@ export class CelestopolRoll extends Roll {
difficultyValue: diffConfig.value,
modifier: effectiveModifier,
aspectMod: effectiveAspectMod,
situationMod: effectiveSituationMod,
woundMalus: effectiveWoundMalus,
autoSuccess,
isResistance,