20 Commits

Author SHA1 Message Date
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 272149d300 fix: icône des cartes tarot -> systems/fvtt-hamalron/assets/icons/tarot.svg 2026-07-11 00:10:02 +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 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 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 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 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 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 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 4beb5806eb Initial system import 2025-12-25 23:08:06 +01:00