Retire le bouton « J'y vais mais j'ai peur » (qui ne lançait aucun tour
fonctionnel) et toute la machinerie du tour d'initiation (WelcomeTour,
CreateActorDialog) devenus inutiles. tour.mjs ne garde que
postWelcomeMessage() ; les clés i18n TOURS.Welcome.* sont supprimées.
Supprime la garde first-run-tips-shown : le message (crédits) est posté
à chaque refresh, en un seul exemplaire par le MJ actif. Le réglage
first-run-tips-shown et ses clés i18n, devenus inutiles, sont retirés.
Les domaines Armes (weapon) et Terre (world) étaient inversés dans
VERMINE.totemInfluence : l'Humain donnait +1D sur la Terre et -1D sur
les Armes. Le tableau du livre accorde à l'Humain +1D sur L'Homme/La
Machine/Les Armes et -1D sur L'Animal/La Survie/La Terre (l'Adapté en
miroir).
Permet les disparités entre créatures de même Gabarit/Taille (ex. un
sanglier avec une Protection supérieure à celle d'un chien, un loup plus
vigoureux). Champ system.adjustments (9 stats) : valeur finale = base
dérivée + ajustement (jamais négative), persisté indépendamment des
niveaux. Section « Ajustements » éditable dans l'onglet Stats de la
fiche (mode édition).
Plus aucun libellé ne localise VERMINE.group en tant que string : le
libellé du type d'acteur Groupe vient de VERMINE.Sheet.group et
VERMINE.type_group, et LOCALIZATION_PREFIXES du modèle Groupe ne
consomme pas cette clé scalaire.
Le champ numérique de bonus (+ND) était étiqueté « Groupe », confondu
avec le Groupe de joueurs et la Réserve de Groupe réelle (affichée à
part). Nouvelle clé i18n bonus_supplementary utilisée dans les 3
dialogues de jet et le détail du pool du message. VERMINE.group reste
réservé au type d'acteur Groupe.
Le bouton d'Effort du message de jet déduit désormais les points de la
Réserve d'Effort de l'acteur (1 point = 1 relance), s'ajoute aux relances
de Compétence au lieu de les remplacer, et affiche le pool restant. Le
curseur est plafonné à min(caractéristique, effort disponible) et la
section est masquée pour les acteurs sans Réserve d'Effort (PNJ,
créatures, effort vide).
ReliabilityDialog est exporté en défaut mais la fiche d'item le
destructurait comme export nommé, d'où undefined et un bouton inopérant
pour armes, protections et objets.
Résout par uuid avant l'id d'acteur : pour un token non lié (PNJ mineur),
token.actor.id expose encore l'id de l'acteur monde dont il est issu, et
résoudre par id blessait alors tous les tokens de la fiche. Le uuid d'un
acteur synthétique est résolu en extrayant directement la scène et le
token, car fromUuid échoue sur les documents non indexés quand la
résolution est asynchrone.
- Le template combat-dialog.hbs n'affichait pas les spécialités alors que
combatDialog.mjs les préparait : #hasSpecialtySelected() ne pouvait
jamais être vrai, le +1D spécialité n'était jamais appliqué aux attaques
- Affichage de la section spécialités (radio buttons) limitée aux
spécialités de la compétence de l'arme (skillKey)
- Affichage de la spécialité sélectionnée dans le résumé du dialogue
(.current-specialty) et propagation du nom dans le message de jet
- Correction du check d'autorisation : message.user -> message.author
(champ renommé en v12+, message.user est undefined sur v14)
- Les joueurs ne peuvent plus mettre à jour les ChatMessages (permission
OWNER, option Modifier retirée du menu contextuel en v12+) : la relance
(dé et effort) est relayée via le socket system.vermine2047 et appliquée
par le client MJ (registerRerollSocket), avec vérification de l'auteur
- Ajout de la déclaration "socket": true au system.json (requise par le
serveur pour écouter le namespace system.<id>)
Phase d'Expérience :
- sélecteur de groupe : « Tous les personnages », « Sans groupe » ou un groupe précis → seuls ses membres sont récompensés
- case « Inclure dans cette phase » par personnage pour exclure de la phase
- chaque ligne affiche son groupe ([Groupe] / [Sans groupe])
- les collectifs ne sont versés au groupe que si un vrai groupe est choisi
Dés d'Évolution :
- achat : ne consomme que le coût du niveau (le reste du stock est conservé) au lieu d'effacer tout
- total « après achat » recalculé en direct selon le niveau sélectionné
- libellés d'options nettoyés (1D au lieu de 1D — 1D)
- fight.mjs : _onDelete appelle super._onDelete() → le tracker se vide immédiatement après « Terminer » (plus de F5)
- fight.mjs : _getInitiativeFormula type-dépendante — PNJ/Créature roulent leur pool de Réaction (computed.reaction + reactionBonus) au lieu de 0D → classement par Réaction correct
- dialogs.less : total des dés (.total-value) en blanc au lieu du vert sombre (illisible sur fond foncé)
- npc-roll-dialog : champ « Malus temporaires » + logique pool (dés malus dans le dialogue PNJ/Créature)
- combat-tracker.hbs + fight.mjs : alignés sur le CSS core v14 (header/tracker/footer, boutons <button>), attitudes/couleurs PJ-PNJ conservées, menu contextuel combatant réparé
- less/combat.less (nouveau) : styles custom tracker + footer sticky des dialogues
- handicap des 3 dialogues de jet étendu jusqu'à III
- dialogue d'attaque : champ « Malus temporaires » (malus sur les jets)
- checkbox/radio : flex: 0 0 auto global (fin des icônes étirées — ex. « Deuxième action » 228px → 24px)
- TEST_COMBAT.md : plan de test combat rejouable (S1-S8, tout PASS)
- Coque : épuisée stockée {value:0, max:n} au lieu de null → réparable ; nouveau mode « Réparer la coque » (difficulté = coque.max) dans le dialogue ; affichage (0/n) sur la fiche
- Bien conçu : Réussite automatique en réparation classique (restauration complète) ; +1 Fiabilité à la 1ère réparation de fortune réussie (compteur traits.bien_conçu.value)
- Pratique : Handicap +I sur toutes les réparations (required +1, note sur la carte)
- i18n fr/en (9 clés)
- TRAITS_PLAN.md : suivi du plan d'automatisation des Traits
- 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)