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)
This commit is contained in:
2026-07-10 19:07:05 +02:00
parent 54e769176a
commit 1749210322
12 changed files with 567 additions and 22 deletions
+55
View File
@@ -0,0 +1,55 @@
<div class="{{cssClass}}">
<div class="sortilege-header">
<img src="{{actingCharImg}}" class="actor-avatar" data-tooltip="{{actingCharName}}" />
<div>
<h3>{{spell.name}}</h3>
<span>{{categorieLabel}} · {{niveauLabel}}</span>
</div>
</div>
<div class="sortilege-cards-used">
<h4>{{localize "HAMALRON.Sortilege.atoutsUsed"}}</h4>
<div class="used-cards">
{{#each atoutsUtilises}}
<div class="used-card">
<img src="{{this.img}}" />
<span>{{this.name}}</span>
</div>
{{/each}}
</div>
{{#if cartesCoupeUtilisees.length}}
<h4>{{localize "HAMALRON.Sortilege.coupeUsed"}}</h4>
<div class="used-cards">
{{#each cartesCoupeUtilisees}}
<div class="used-card">
<img src="{{this.img}}" />
<span>{{this.name}}</span>
</div>
{{/each}}
</div>
{{/if}}
</div>
<div class="sortilege-result">
<div class="calc-row">
<span>{{localize "HAMALRON.Sortilege.playerTotal"}}</span>
<span>{{totalJoueur}}</span>
</div>
<div class="calc-row">
<span>{{localize "HAMALRON.Sortilege.totalDifficulty"}}</span>
<span>{{difficulte}} (carte {{carteMJ}} + {{modificateur}})</span>
</div>
<div class="calc-divider"></div>
<div class="calc-row total-row {{#if isSuccess}}result-success{{else}}result-failure{{/if}}">
<span>
{{#if isSuccess}}
<i class="fas fa-check-circle"></i> {{localize "HAMALRON.Label.success"}}
{{else if isCritique}}
<i class="fas fa-bolt"></i> {{localize "HAMALRON.Sortilege.failureCritical"}}
{{else}}
<i class="fas fa-times-circle"></i> {{localize "HAMALRON.Sortilege.failureNormal"}}
{{/if}}
</span>
</div>
</div>
</div>