feat: gestion des Dés de Totems (influence, instincts, interdits)
Release Creation / build (release) Failing after 1m32s

- 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.
This commit is contained in:
2026-08-06 15:32:55 +02:00
parent 3cb96410b9
commit b0a3aff648
23 changed files with 884 additions and 100 deletions
@@ -0,0 +1,53 @@
<div class="roll-dialog-content">
<h3 class="combat-mode-label">{{ localize 'VERMINE.buy_evolution' }}</h3>
<div class="learning-summary">
<span class="label">{{ localize 'VERMINE.evolution_available_dice' }}:</span>
<span class="exp-value">{{ evolutionDice }}D</span>
</div>
<div class="flexrow bonus-item full-width">
<label class="label" for="evolution-name">{{ localize 'VERMINE.evolution_name' }}</label>
<input type="text" data-roll="true" id="evolution-name" name="evolution-name" value="{{ defaultName }}" />
</div>
<div class="flexrow bonus-item full-width">
<label class="label" for="evolution-level">{{ localize 'VERMINE.evolution_level' }}</label>
<select class="info-value" data-roll="true" id="evolution-level" name="evolution-level">
{{#each levels}}
<option value="{{ this.value }}">{{ this.value }}D — {{ this.cost }}D</option>
{{/each}}
</select>
</div>
<div class="flexrow bonus-item full-width">
<label class="label" for="evolution-mutation">{{ localize 'VERMINE.evolution_mutation' }}</label>
<input type="checkbox" data-roll="true" id="evolution-mutation" name="evolution-mutation" />
</div>
<div class="learning-result">
<div class="context-item">
<span class="context-label">{{ localize 'VERMINE.evolution_total' }}</span>
<span class="context-value" id="evolution-total-value">{{ totalLevels }}D</span>
</div>
<div class="context-item">
<span class="context-label">{{ localize 'VERMINE.evolution_mode_max' }}</span>
<span class="context-value">{{ modeMax }}D</span>
</div>
<div class="context-item">
<span class="context-label">{{ localize 'VERMINE.game_mode' }}</span>
<span class="context-value">{{ modeLabel }}</span>
</div>
</div>
<p class="learning-hint">{{ localize 'VERMINE.evolution_buy_hint' }}</p>
<footer class="sheet-footer flexrow">
<button type="button" data-action="cancel">
<i class="fas fa-times"></i> {{localize "VERMINE.cancel"}}
</button>
<button type="button" data-action="buy">
<i class="fas fa-cart-shopping"></i> {{localize "VERMINE.buy_evolution"}}
</button>
</footer>
</div>