feat: tests de résistance (2d8+TR, auto-blessure sur échec)

- rollResistance(statId) dans character.mjs : formule 2d8 + bonus TR + malus blessures
- Dialog sans Modificateur/Aspect/Lune/Destin/Fortune/Puiser en mode résistance
- Auto-cochage de la prochaine case de blessure sur échec
- Chat message : notification blessure cochée (woundTaken)
- Stat-res cliquable (rollable) en mode jeu dans l'onglet compétences
- base-actor-sheet : routing clic stat-res → rollResistance
- CSS : .resistance-wound-notice
- i18n : resistanceTest, resistanceClickToRoll, woundTaken

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-03-29 23:35:38 +02:00
parent df2ed14f34
commit 89d47ba6ec
8 changed files with 107 additions and 22 deletions

View File

@@ -226,4 +226,31 @@ export default class CelestopolCharacter extends foundry.abstract.TypeDataModel
fortuneValue: this.attributs.fortune.value,
})
}
/**
* Lance un test de résistance pour une stat donnée.
* Formule : 2d8 + resBonus + woundMalus
* Pas de lune, Puiser, Fortune ou Destin.
* Échec → blessure automatique.
* @param {string} statId - Id de la stat (ame, corps, coeur, esprit)
*/
async rollResistance(statId) {
const { CelestopolRoll } = await import("../documents/roll.mjs")
const statData = this.stats[statId]
if (!statData) return null
return CelestopolRoll.prompt({
actorId: this.parent.id,
actorName: this.parent.name,
actorImage: this.parent.img,
statId,
statLabel: SYSTEM.STATS[statId]?.label,
skillLabel: "CELESTOPOL.Roll.resistanceTest",
skillValue: statData.res ?? 0,
woundMalus: this.getWoundMalus(),
woundLevel: this.blessures.lvl,
difficulty: this.prefs.difficulty,
isResistance: true,
})
}
}