52 Commits

Author SHA1 Message Date
uberwald 4f4403c164 Ready for delivery
Release Creation / build (release) Successful in 53s
14.0.1
2026-07-23 22:34:46 +02:00
uberwald f1038b6b02 fix: CONFIG.Dice.rollModes deprecated → CONFIG.ChatMessage.modes (v14)
Remplacé foundry.utils.duplicate(CONFIG.Dice.rollModes) par
Object.fromEntries(Object.entries(CONFIG.ChatMessage.modes).map(([k,v]) => [k, v.label]))
pour compatibilité FVTT v14.
2026-07-23 22:30:59 +02:00
uberwald 0abeff8fce fix: boutons chat cliquables — insertion dans .sidebar-tab-core + pointer-events auto
- insertion dans .sidebar-tab-core avant .sidebar-tab-scroll
  (respecte la hiérarchie DOM attendue par FVTT v14)
- CSS: pointer-events: auto + position: relative + z-index: 1
- fallback insertion en haut de #chat si selecteurs absents
2026-07-23 22:28:44 +02:00
uberwald b35b0809d4 fix: placement boutons Tarot/Actions/Épreuve dans le chat FVTT v14
- insertion en haut de #chat (avant sidebar-tab-core) au lieu
  d'insérer avant #chat-controls (caché par le scroll en v14)
- remplacement inline styles → classes CSS .hamalron-chat-tools/.hamalron-chat-btn
- CSS externalisé dans chat.less
2026-07-23 22:22:11 +02:00
uberwald a468a35e4f Fix readme.md 2026-07-23 22:14:27 +02:00
uberwald 1aff4c5985 Fix readme.md 2026-07-23 22:13:42 +02:00
uberwald 07d5c786eb Fix README.md 2026-07-12 22:25:28 +02:00
uberwald ba5f6826cc Fix README.md 2026-07-12 22:24:16 +02:00
uberwald 79c926a98a docs: README complet avec fonctionnalités, installation, licence 2026-07-12 22:22:08 +02:00
uberwald 20b56c3bb1 Fix gitea release action
Release Creation / build (release) Successful in 54s
14.0.0
2026-07-12 18:49:36 +02:00
uberwald b34df3e432 fix: 3 bugs suite revue — race condition ensureDeck, label MJ/Opposant, rename isMJ
- tarot-deck-manager: supprime appel auto loadDeckState() du constructeur
- ensureDeck: appelle explicitement dm.loadDeckState() après création
- openManager: devient async, appelle loadDeckState() sur nouvelle instance
- chat-tension.hbs: utilise isSousTension pour afficher MJ ou Opposant
- fvtt-hamalron.mjs: renomme isMJ → isOpponentWinning (clarifie intention)
- lang/fr.json: ajoute clé opposant
- .gitea/workflows/release.yaml: workflow release Gitea
2026-07-12 18:47:36 +02:00
uberwald aa40cc2c9c Latest updates 2026-07-11 00:44:09 +02:00
uberwald 798959c7f7 fix: clés de localisation manquantes player/gm dans chat-tension 2026-07-11 00:23:56 +02:00
uberwald dc259bc987 fix: ReferenceError success is not defined dans boutons sousTension/oppose 2026-07-11 00:22:49 +02:00
uberwald d198daba03 feat: messages Sous tension/Opposé stylisés (template chat-tension.hbs)
Affiche les scores du joueur et du MJ/opposant côte à côte
avec un séparateur VS, résultat coloré, badges et icônes.
2026-07-11 00:19:37 +02:00
uberwald 272149d300 fix: icône des cartes tarot -> systems/fvtt-hamalron/assets/icons/tarot.svg 2026-07-11 00:10:02 +02:00
uberwald cd8ea9ec68 fix: ID dossier valide 16-caractères hex pour le compendium 2026-07-11 00:05:26 +02:00
uberwald c48ce71632 refacto: compendium rebuild avec dossier Tarot
Les 78 cartes sont rangées dans un dossier 'Tarot' dans le
compendium système. Le script generate-tarot-packs crée le
dossier puis y place chaque carte.
2026-07-11 00:04:27 +02:00
uberwald 948100d443 fix: boutons Sous tension/Opposé auto-initialisent le deck
ensureDeck() crée et reset le deck manager si nécessaire
avant de tirer une carte pour les boutons du chat.
2026-07-11 00:03:08 +02:00
uberwald f2839c4b54 feat: compendium système avec 78 cartes de tarot
Généré depuis assets/data/tarot.json vers packs-system/hamalron-items/
via tools/generate-tarot-packs.mjs + @foundryvtt/foundryvtt-cli

Le resetDeck() importe depuis le compendium si aucun item monde
n'existe, ou crée les cartes depuis le fichier JSON en dernier recours.
2026-07-10 23:53:39 +02:00
uberwald 29b93b5ed1 feat: tarot deck auto-import depuis compendium/data JSON
resetDeck() cherche les cartes dans cet ordre :
1. game.items (items monde existants)
2. Compendium système fvtt-hamalron.hamalron-items
3. assets/data/tarot.json (création automatique)

Ajout de assets/data/tarot.json : 78 cartes standard
2026-07-10 23:49:31 +02:00
uberwald b480ab3cae fix: ChatMessage.applyMode crash quand rollContext.visibility est indéfini 2026-07-10 23:44:40 +02:00
uberwald e77b9104b4 fix: clé de localisation noTarotCards (Notifications -> Label) 2026-07-10 23:43:32 +02:00
uberwald 95f6dc6275 fix: bouton Épreuve basé sur les cartes de tarot (pas de dés)
Remplace le jet de dés par un vrai dialogue d'épreuve Hamalron :
- Sélection d'une carte dans la main du personnage
- Choix de la difficulté (table standard)
- Calcul réussi/échec basé sur la valeur de la carte
- La carte est défaussée et remplacée depuis le deck
2026-07-10 23:41:22 +02:00
uberwald e208adfc36 feat: bouton Épreuve dans le chat (remplace Sort)
Le bouton Sort était peu utile (personnage pas toujours défini).
Remplacé par Épreuve 🎲 qui ouvre le dialogue de jet standard,
accessible depuis le chat pour tous.
2026-07-10 23:36:07 +02:00
uberwald 5e88111cfb fix: styles action-complexe correctement appliqués
Le fichier .less était importé dans le bloc .fvtt-hamalron,
ce qui produisait le sélecteur .fvtt-hamalron .fvtt-hamalron.action-complexe
(ne matchait pas le DOM).

Corrigé : import déplacé hors du bloc, sélecteur .fvtt-hamalron.action-complexe
2026-07-10 23:34:27 +02:00
uberwald 0b0124e0c9 fix: boutons Tarot/Actions/Sort visibles dans le tchat
Utilise setTimeout pour laisser le DOM se stabiliser avant d'injecter
les boutons au-dessus de #chat-controls.
2026-07-10 23:31:42 +02:00
uberwald d5772864b7 feat: boutons d'accès rapide dans le tchat (Tarot, Actions, Sort)
Barre d'outils ajoutée au-dessus de la zone de saisie du chat :
- Tarot 🃏 : ouvre le gestionnaire de deck (GM only)
- Actions 📋 : ouvre les actions complexes (GM only)
- Sort 🪄 : lance un sort du personnage actif
2026-07-10 23:29:27 +02:00
uberwald 347504f544 feat: boutons Sous tension et Opposé fonctionnels dans le chat
- Clic 'Sous tension' : tire une carte du deck, compare avec le score
- Clic 'Opposé' : idem avec libellé Opposant
- Résultat affiché dans un nouveau message de chat
2026-07-10 23:23:44 +02:00
uberwald 3b2f742ef5 fix: ChatMessage.applyRollMode -> applyMode (v14 compat) 2026-07-10 23:22:41 +02:00
uberwald aef84ffdd1 fix: sanitisation robuste des formules de roll au chargement
Utilise une regex pour détecter les formules invalides avant
d'appeler super.prepareDerivedData(). Fallback sur try-catch
qui vide les rolls en dernier recours.
2026-07-10 23:17:21 +02:00
uberwald c9c86e8c5f fix: sanitisation des formules de roll invalides au chargement
Les anciens messages d'initiative stockaient des formules comme
'3 de Bâton (3)' qui cassent Roll.parse(). Le override de
prepareDerivedData dans HamalronChatMessage valide chaque formule
via Roll.parse() et remplace par '1d6' si invalide.
2026-07-10 23:14:14 +02:00
uberwald 6943a1f429 fix: 4 bugs post-review (JSON, rangMagie, GM guard, inline styles)
- Trailing comma dans fr.json qui cassait le parsing JSON (critique)
- RANG_MAGICIEN utilisait val.name au lieu de val.label
- Bouton tirage MJ accessible aux non-GM (ajout guard game.user.isGM)
- style='flex:1' et style='display:none' externalisés dans roll.less
2026-07-10 23:13:05 +02:00
uberwald 4a14604581 feat: tirage MJ, hotbarDrop, blessures incapacitantes
1. Tirage MJ dans le dialogue de compétence :
   - Bouton tirer une carte dans la section difficulté
   - Pioche dans le deck, affiche la carte tirée
   - Calcule la difficulté sous tension

2. Drag & drop vers barre de raccourcis :
   - Acteurs → ouvre la feuille
   - Compétences → lance le jet de compétence
   - Sorts → ouvre le dialogue de lancement
   - Armes → lance le jet d'arme

3. Blessures incapacitantes (règle p.159) :
   - Champs blessureIncapacitante / malusBlessure
   - Dialogue proposant la blessure quand Épée diminue
   - Malus -2 appliqué aux jets de compétence
   - Bannière dans la feuille (mode jeu)
   - Bouton guérison
2026-07-10 23:08:06 +02:00
uberwald 441134c23b refacto: styles externalisés dans .less, plus d'inline styles
- style='width: X%' → style='--pct: X' dans templates et JS
- CSS calc(var(--pct) * 1%) dans les fichiers .less correspondants
- Création de styles/action-complexe.less
- Import action-complexe.less dans fvtt-hamalron.less
- style='width: 100%' → class='tension-select' dans tarot-deck-manager
- Ajout .tension-select dans tarot-deck-manager.less
- Suppression doublon .initiative-roll dans chat.less
2026-07-10 22:59:10 +02:00
uberwald 8e7a3f4eca fix: initiative - auto-init deck, CSS stylisé, plus d'erreurs de formule
- Auto-initialisation du deck s'il est vide ou non initialisé
- Fallback silencieux sur 1d6 si vraiment aucune carte dispo
- _formula changé en '1d1' pour éviter les erreurs de parsing
- Ajout du CSS complet pour le message d'initiative (chat.less)
  - Fond dégradé sombre, bordure rouge, badge arrondi
  - Avatar, nom, carte, valeur, score d'initiative
  - Pied de page stylisé
2026-07-10 21:30:09 +02:00
uberwald ef9b57d6b9 feat: message d'initiative stylisé avec carte de tarot
Les messages d'initiative affichent désormais :
- Avatar et nom du protagoniste
- Badge avec le score d'initiative (éclair)
- Image de la carte de tarot tirée
- Nom et valeur de la carte
- Pied de page avec la mention 'Initiative'

Correction d'une syntax error (extra }) qui cassait le hook
2026-07-10 21:26:11 +02:00
uberwald 206abb3947 fix: message d'initiative sans '1d6', affiche le nom de la carte
- La formule du roll est remplacée par le nom de la carte de tarot
- Plus d'affichage de '1d6' trompeur dans le chat
- Valeur de la carte utilisée comme score d'initiative
2026-07-10 21:01:06 +02:00
uberwald 2bd236fb29 feat: système de récupération des résistances
- Dialogue de récupération accessible depuis la feuille personnage
- Coupe/Denier : test difficulté 7 (1x/jour), +1 si réussi
- Épée : +1 manuel (repos/soins) ou test guérison rapide
- Bâton : +1 manuel (appréciation MJ)
- Suivi des dates de dernière récupération par symbole
- Désactive le test si déjà fait aujourd'hui
- Bouton d'accès intégré dans la section résistances (icône lit)
- Réutilise HamalronTirageTarot.prompt pour les tests
2026-07-10 20:49:09 +02:00
uberwald 8a27211ff5 feat: actions complexes avec suivi de résistance
- Nouvelle fenêtre Actions complexes (GM-only)
- Création d'actions avec nom, symbole, résistance (nb de succès requis)
- Barre de progression + compteurs succès/échecs
- Boutons Réussite/Échec pour suivre l'avancement
- Notification et message chat quand l'objectif est atteint
- Persistance dans un setting world-scope
- Bouton dans les contrôles de scène (icône tasks)
- Accessible via game.system.api.openActionComplexe()

Conforme aux règles p.157 : actions nécessitant 2-5 victoires
2026-07-10 20:30:20 +02:00
uberwald ca20330e29 feat: initiative par tirage de carte de tarot
Override Combatant.getInitiativeRoll pour piocher
une carte du paquet de tarot au lieu de lancer 1d6.
- Chaque combatant tire une carte → valeur = initiative
- Les cartes vont à la défausse après usage
- Fallback sur 1d6 si le paquet n'est pas disponible
- globalThis.HamalronTarotDeckManager exposé pour l'override
2026-07-10 20:21:25 +02:00
uberwald d1d6c051d0 fix: CHAT_MESSAGE_TYPES -> CHAT_MESSAGE_STYLES (v14 compat)
Foundry v14 utilise style au lieu de type pour ChatMessage
et CONST.CHAT_MESSAGE_TYPES n'existe pas.
Corrigé dans tarot-deck-manager, sortilege-casting, base-actor-sheet
2026-07-10 20:15:25 +02:00
uberwald 6900f6fd36 chore: ignorer les fichiers runtime LevelDB des packs 2026-07-10 19:26:17 +02:00
uberwald 1749210322 feat: système de magie complet avec dialogue de lancement
- Modèle sortilege enrichi (type, niveau, portée, durée, conditions, effets)
- Personnage: champ rangMagie (ensorceleur/initié/thaumaturge)
- Constantes: SORTILEGE_MODIFICATEURS (table 3x3), RANG_MAGICIEN
- Dialogue de lancement: tirage MJ, sélection atouts + Coupe, total temps réel
- Calcul difficulté: carte MJ + modificateur selon type × niveau
- Table des échecs magiques (normal/critique selon rang)
- Pioche automatique après succès, défausse après échec
- Template chat avec résultat localisé

Corrections post-review:
- Boucle de défausse sur échec corrigée (itérait toujours sur [0])
- Clé de localisation HAMALRON.Roll.cast -> HAMALRON.Sortilege.cast
- Ajout de la clé manquante noCoupe
- Labels localisés dans le chat (categorieLabel, niveauLabel)
2026-07-10 19:07:05 +02:00
uberwald 54e769176a chore: ajout .history au gitignore, licence et compat FVTT 14 2026-07-10 18:53:13 +02:00
uberwald 68b3079da8 refacto: harmonisation du système avec les règles Hamalron JDR
Corrections majeures :
- HamalronTirageTarot extends Roll (évaluation des jets fonctionnelle)
- Correction du nom de classe Langue (HamalronFaction -> HamalronLangue)
- Création du template tab-navigation.hbs manquant
- Type acteur 'character' -> 'personnage' dans _preCreate

Types d'items corrigés (anglais -> français) :
- weapon -> arme, armor -> armure, equipment -> equipement
- Suppression des types inexistants (deal, malefica, ritual, perk)

Modèles :
- cost -> cout (armure, equipement)
- Tarot : default -> initial
- Sortilege : LOCALIZATION_PREFIXES corrigé
- Constantes CHOICE_ADVANTAGES_DISADVANTAGES et ATTACK_MODIFIERS ajoutées
- ATTACK_MODIFIERS supprimé (plus utilisé)

Templates alignés sur les modèles réels :
- enemy-trait : suppression champs manquants (trauma, stats, domain...)
- personnage-equipement : champs alignés sur arme/armure/equipement
- personnage-sortileges : suppression domain/level/rituals
- enemy-main : suppression stats et flavorText
- base-actor : suppression mortality, toChat limité aux tarots

Jets de compétence :
- Égalité = réussite (>= au lieu de >, conforme aux règles p.155)
- Comparaison robuste des cartes de succès (via String())

Le Mat :
- Les autres joueurs peuvent renouveler leur main (règle p.151)

findTarotItem : recherche dans game.items puis compendiums
await manquants ajoutés sur saveDeckState()
AGENTS.md créé
2026-07-10 18:52:20 +02:00
uberwald 4bc381f2e6 Sync gitignore 2026-07-10 18:21:08 +02:00
uberwald cd2e07ed97 Latest updates 2026-07-10 16:58:33 +02:00
uberwald 8a27cef9a4 Workable system, firt step 2026-01-02 20:30:29 +01:00
uberwald 70d1720176 Remove node_modules from git 2025-12-25 23:11:19 +01:00