feat: capacités de créature, blessures séquentielles et refonte fiche Groupe

- Nouvel item Capacité de créature (creaturecapacity) : DataModel, fiche
  AppV2, chat card, types Base/Survie/Cauchemar/Apocalypse, liste sur
  l'onglet Informations de la créature avec drag&drop et post au chat.
- Blessures : coches séquentielles respectant la gravité (onClickWound),
  malus de blessure -1D/-2D/-3D appliqué aux jets (Règles p.42),
  montée en gravité automatique si les cercles sont pleins.
- Fiche Groupe : objectifs majeurs/mineurs éditables, liste de membres
  simplifiée, notes de voyage (roadNotes), totem qui remplit
  instinct/interdits, refonte visuelle des onglets.
- Créature : Réaction lançable, seuils/cercles de blessures corrigés
  (Taille cumulée, Groupe sans seuil), libellés Taille/Meute.
- Corrections : icône de carte de chat plafonnée à 64px, slash orphelin
  d'entrave à 0, notes de matériel du Groupe éditable (formInput),
  bonus de Réaction non double-compté.
- Divers : suppression des captures de débogage, licence README.
This commit is contained in:
2026-08-05 09:38:36 +02:00
parent cf905cdcfb
commit d0373fab5a
59 changed files with 984 additions and 1211 deletions
+13 -2
View File
@@ -2,10 +2,11 @@ const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api
export class TotemPicker extends HandlebarsApplicationMixin(ApplicationV2) {
constructor(linkEl, actor) {
constructor(linkEl, actor, options = {}) {
super();
this.linkEl = linkEl;
this.actor = actor;
this.fillInstincts = options.fillInstincts === true;
}
static get DEFAULT_OPTIONS() {
@@ -32,7 +33,17 @@ export class TotemPicker extends HandlebarsApplicationMixin(ApplicationV2) {
el.addEventListener('click', event => {
const link = event.target.closest('a');
if (!link?.dataset.totem) return;
this.actor.update({ 'system.identity.totem': link.dataset.totem });
const update = { 'system.identity.totem': link.dataset.totem };
// Remplit automatiquement Instincts/Interdits depuis la config du totem
// (utilisé pour le Totem du Groupe).
if (this.fillInstincts && this.actor.system?.identity) {
const totemKey = link.dataset.totem;
const instincts = game.i18n.localize(`TOTEMS.${totemKey}.instincts`);
const bans = game.i18n.localize(`TOTEMS.${totemKey}.bans`);
if (!instincts.startsWith("TOTEMS.")) update['system.identity.instincts'] = instincts;
if (!bans.startsWith("TOTEMS.")) update['system.identity.prohibits'] = bans;
}
this.actor.update(update);
this.close();
});
});