- min: 0 sur reliability (l'update à 0 était clippé à 1 par le schéma —
l'état 'détruit' était inatteignable)
- réparation de fortune (règles p. 39) : +1D si le personnage possède la
Compétence requise, sinon Handicap de Rareté de cette Compétence
(rarity du skill de l'acteur) ; select toujours visible (compétence requise)
et pré-rempli depuis needSkill/skill de l'item
- dés marqués 'dommage' uniquement pour les Dommages réellement comptés
(Étanche/Coque absorbe → dés non marqués)
- destruction : damages.value réel conservé (difficulté de réparation
honnête au lieu de 5 forcé)
- états de panne localisés (VERMINE.damages_state_N), aussi dans panneState()
- ReliabilityDialog invoqué via .create() (convention du codebase)
La clé 'close' du fichier lang était en fait la compétence 'Corps-à-corps'
(SKILLS.close) : les dialogues totem et Fiabilité affichaient la clé brute
'VERMINE.CLOSE'. Ajout de VERMINE.close = 'Fermer'/'Close', utilisé par les
deux dialogues.
La classe .flexrow du label étirait le checkbox Immersion prolongée (et les
radios de gravité) sur toute la largeur du dialogue (~205px). .reliability-option
impose désormais flex:none aux inputs : taille naturelle (24px).
- module/system/reliability.mjs : VermineReliability
- Test de Fiabilité : jet Xd10 (Mineurs 1D / Graves 3D / Critiques 5D),
chaque dé >= Fiabilité inflige 1 Dommage ; réduit Fiabilité et dommages
cumulés (panne/état/effet) ; destruction à 0
- Traits appliqués : Coque (absorbe n puis se perd), Cassant (+1 perte),
Étanche (Dommages d'immersion ignorés si Fiabilité au max)
- Réparations : classique (Précision + Artisanat/Mécanique/Technologie/
Armurerie vs Fiabilité d'origine + Handicap de panne, +1 Fiabilité/Réussite)
et de fortune (Précision + Bricolage, panne réparée sans gain de Fiabilité)
- ReliabilityDialog (test/réparation) + cartes de chat dédiées
- Boutons Test de Fiabilité / Réparer sur les fiches d'items (weapon/defense/item)
- i18n fr/en + styles des cartes et boutons
damage.value était plafonné à 0 dans le DataModel des armes,
empêchant la saisie de valeurs négatives (règles : Pierre = Vigueur -1).
min passe de 0 à -10.
Comme la Rareté, la Fiabilité était plafonnée à 5 dans le DataModel
(baseItemSchema), empêchant de saisir des valeurs supérieures sur les
fiches d'items. Alignée sur les véhicules (max 10).
- templates/roll-message.hbs : ligne Traits dans le bloc arme (nom + valeur)
avec description en infobulle au survol
- less/base.less : style .weapon-traits / .weapon-trait (badges lisibles)
- VermineTotemDice : influence Humain/Adapté (+1D/-1D par domaine, règles
p. 121), gains/pertes via Instincts/Interdits avec limites (3D/totem,
5D total) et règles d'échange.
- roll.mjs applique l'influence selon le Totem dominant (au lieu de
l'ancienne logique basée sur identity.totem).
- Dialogue TotemDiceDialog (instinct Humain/autre totem, interdit Humain,
acte grave ±2D) + bouton et ligne d'influence sur la fiche personnage.
- Dés de Totem gagnés en cas d'échec à l'apprentissage Dé d'Évolution
(dés dépensés, garde capacité vide).
- Couleur de texte @color-text-light-2 assombrie (#c9e0c0 → #3f9b55)
pour la lisibilité dans tous les dialogues.
fix: robustesse et visibilité des évolutions
- buyEvolutionDialog : n'efface les Dés d'Évolution que si l'item est créé.
- Flag mutation éditable sur la fiche item evolution + badge
Adaptation/Mutation dans la liste du personnage.
- loseDie : applique aussi la limite totale de 5 dés au gain Adapté.
- Case "acte grave" conservée entre les rendus du dialogue.
- _calculateGroupReserve utilisait une règle simplifiée (niveau × 2) au
lieu du nombre de personnages membres. Désormais max = 3 + membres
(personnages uniquement), plafonné à 10D, conforme aux règles p. 68-69.
- Un Groupe nouvellement créé démarre avec sa Réserve à son maximum.
- #getSpecialtyName accédait à this.#el sans garde : fermer le dialogue
pendant l'animation du jet levait "Uncaught (in promise)". Chaînage
optionnel sur l'élément (le jet se résout quand même et dépense le dé).
- resetPhaseLimits ne touche plus au compteur de phase (seul le
dialogue d'attribution du MJ l'avance) : évite le double-incrément
quand joueur et MJ valident la même phase.
- _onDropActor : import d'une copie monde pour un véhicule déposé
depuis un compendium, confirmation avant de transférer un véhicule
déjà rattaché à un autre Groupe, try/catch avec retour utilisateur.
- #onClickRadioHexa : garde isEditable (pas d'erreur de permission
pour un utilisateur non éditeur).
- Nouveau bouton « Valider la phase » sur les fiches Personnage et
Groupe : incrémente experience.phase et réinitialise les limites
d'apprentissage (learned.*) pour recommencer une nouvelle phase,
sans repasser par le dialogue d'attribution du MJ.
- Helper VermineExperience.completePhase(actor) mutualisé
(personnage ou Groupe) ; i18n FR/EN.
- Dépôt d'un acteur Véhicule sur la fiche de Groupe : le véhicule est
lié via system.ownerId (pas de duplication), apparaît dans la liste
Véhicules de l'onglet Matériel et s'ouvre au clic (_onDropActor).
- Onglet Réserve : dés de Réserve hexagonaux cliquables (1..max),
même comportement que les réserves du personnage (cocher/décocher).
- ESLint : fromUuid ajouté aux globals (corrige aussi 3 erreurs
préexistantes dans base-actor-sheet.mjs).
- Onglet Matériel : les Objets passent sous les Armes et les
Protections (ordre aligné sur la fiche PJ : Armes, Protections,
Objets, Véhicules, Notes).
- Les Dés d'Expérience du Groupe sont désormais dépensés que le jet
d'apprentissage soit réussi ou raté (cohérent avec l'apprentissage
de personnage et les règles ; le décompte est sorti de #applySuccess).
- Garde sur le type Capacité : si aucune Capacité de Groupe n'est
sélectionnée, le jet est bloqué avec un avertissement (avant, il
marquait learned.ability et dépensait les dés sans rien apprendre).
- Limites de Capacités de Totem (personnage) : seules les Capacités du
Totem courant du personnage comptent dans les compteurs
3×N1 / 1×N2-N3 / max 5.
- Origine était rendue à la fois dans l'en-tête (main) et l'onglet
Identité : deux inputs du même nom, soumis en tableau puis concaténés
avec une virgule à chaque sortie de champ.
- Effectif (population) était aussi dupliqué entre l'en-tête et
l'onglet Domaines.
- Garde l'Origine dans l'en-tête, l'Effectif dans l'onglet Domaines
(regroupé avec la Taille) ; plus aucun champ texte/nombre dupliqué.
- Helper smarttl : honore la clé passée en 3e argument (défaut "name") ;
il renvoyait systématiquement le nom du Totem, donc Instincts et
Interdits n'apparaissaient pas (description et autres clés aussi).
- Onglet Totem (AppV2 et legacy) : libellés localisés
IDENTITY.instincts / IDENTITY.prohibits au lieu de textes codés en dur.
- Nouveau booléen system.identity.chaman (statut de Chaman).
- Onglet Totem : case à cocher « Chaman » toujours visible ; quand
elle est cochée, la section « Rites chamaniques » apparaît avec la
liste des items de type rite maîtrisés (création, édition,
suppression en mode édition).
- i18n FR/EN (VERMINE.chaman).
- Dialogue d'apprentissage personnage : 4 nouveaux types d'achat.
- Capacité de Totem : options filtrées (mode de jeu, niveau de
groupe, totem, non-apprises), difficulté = valeur d'Apprentissage,
limites 3×N1 / 1×N2-N3 / max 5, marque system.learned de l'item
(convention type character) et learned.ability du personnage.
- Élément d'Historique : difficulté 9, handicap 1 si astérisque
(background.asterisk), marque learned.background + item.
- Test de Réputation (réduire/augmenter) : réduire = difficulté
10 − score visé (−1 pt), augmenter = difficulté = réputation
actuelle (+1 par succès), bornes 0-10, marque learned.reputation.
- Évolution : option Dé de Totem Adapté ×2 quand Adapté > Humain
(1D remplacé par un dé adapté compté ×2 via VermineUtils.roll).
- Correction règles : les Dés d'Expérience sont dépensés même en cas
d'échec du jet d'apprentissage (décompte hors #applySuccess).
- Expérience de Groupe : nouveau dialogue d'apprentissage de Groupe
(niveau, réserve, capacité de totem), réserve d'expérience et phase
dans system.experience, boutons sur la fiche Groupe, reset des
limites par phase (level/reserve/ability).
- Phase d'expérience : filtre par groupe sélectionné, associe chaque
personnage à son premier groupe, reset des limites de tous les
nouveaux types d'apprentissage.
- Corrections : l'attaque de créature n'ajoute plus la Réaction du Rôle
(regles_creatures.txt), suppression de la case XP des en-têtes PJ
(legacy et AppV2).
- Divers : .eslintrc.js (règles inexistantes/obsolètes retirées),
libellé jaune de dialogue en couleur chitine, i18n FR/EN, chips
« appris » sur l'onglet expérience du personnage.
- 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.
- véhicule : fiabilité 1-10, type véhicule/monture, distance, vitesse (croisière/pointe), entretien, réserve d'effort
- nettoyage du tableau d'entretien à la soumission
- fiche de groupe : section capacités de totem (création type totem + liste)
- gestion des armes dans l'onglet Combat des créatures (équipement + liste)
- dégâts de l'arme équipée utilisés à la place de computed.damage (+ Vigueur+)
- correction du libellé Vigueur+ (ADVERSITY.vigor au lieu de VERMINE.vigor)
- phase d'expérience (récompenses collectives et individuelles, objectifs, traumatisme)
- jets d'apprentissage (compétences, spécialités, caractéristiques, réserves, évolution)
- bonus de réserve acquis par apprentissage intégré au max dérivé
- transferts de dés individuels <-> groupe dans le dialogue de jet
- onglet expérience sur la fiche personnage
- guide utilisateur combat (docs/user/COMBAT.md)
- équipement des armes et protections (champ equipped, liste des équipés, toggle)
- échanges de coups automatisés (attaque/défense/résolution/blessures dans le chat)
- dialogue d'attaque par type (personnage/PNJ/créature), portées et difficultés
- conservation du scroll des fiches lors des modifs (option scrollable + classe active)
- verrouillage des compétences PNJ en mode jeu
- corrections review combat (défenseur, difficulté >10, multi-cibles, permissions)
Le workflow Gitea zippait packs/ sans recompiler les LevelDB depuis les
sources YAML (gitignorées en CI). Ajoute npm run pullYAMLtoLDB entre le
build CSS et le zip pour embarquer des compendiums à jour dans la release.
Extraction complète des packs vers src/packs/*.yml après mise à jour des
compendiums dans le monde. Ajoute les nouveaux items et rites, met à
jour le contenu existant, et renomme le pack Historiques en 'Historiques
& Création'.
Réduit la taille des polices d'en-tête et du logo, retravaille la
disposition des totems, et double la hauteur des zones Notes et
Relations dans l'onglet Histoire.
Le message de jet n'attache plus la liste des dés : Dice So Nice
réaffichait le jet via son hook updateChatMessage en plus de l'appel
explicite à showDiceSoNice, provoquant une double animation.
Ajoute un champ compétence au modèle arme, un sélecteur dans la fiche
d'arme et ouvre la boîte de dialogue de jet pré-remplie au clic sur
l'icône dé (réservé aux acteurs disposant d'aptitudes/compétences).
- effects.mjs: remove e._getSourceName() (removed in v14, now a getter)
- fight.mjs: convert VermineCombatTracker from AppV1 (get template/getData)
to AppV2 PARTS + _prepareContext/_prepareTurnContext
- fight.mjs: VermineCombat.rollInitiative v14 options-object signature
- hooks.mjs: renderPause -> renderGamePause; getSceneControlButtons now
uses controls.tokens and tools record (v14 names/structure)
- roll.mjs: ChatMessage.create uses rolls array (v14 removed 'roll' key)
- item.mjs: getRollData returns system when no actor (v14 expects object)
- vermine2047.mjs: correct unregisterSheet API for ActorSheetV2
- base-item-sheet.mjs: call super._onRender
- applications.mjs: import HandlebarsApplicationMixin/ApplicationV2 from
foundry.applications.api (they are not globals in Foundry v14), fixing
'ReferenceError: HandlebarsApplicationMixin is not defined'
- Replace activateListeners(html) with _onRender(context, options) and
this.element — AppV2 does not call activateListeners
- TraitSelector: remove recursive render(true) in _validateTraits
- fight.mjs: VermineCombatTracker same _onRender conversion