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
+16
View File
@@ -74,6 +74,22 @@
</div>
</div>
{{!-- Influence + gestion des Dés de Totems --}}
<div class="totem-influence-row">
<span class="totem-influence-label">
{{ localize "VERMINE.influence" }}:
{{#ifgt system.adaptation.totems.human.value system.adaptation.totems.adapted.value}}
<strong class="totem-human">{{ localize "TOTEMS.human.name" }}</strong>
{{else ifgt system.adaptation.totems.adapted.value system.adaptation.totems.human.value}}
<strong class="totem-adapted">{{ localize "TOTEMS.adapted.name" }}</strong>
{{else}}
<strong>{{ localize "VERMINE.totem_neutral" }}</strong>
{{/ifgt}}
</span>
<button type="button" class="totem-manage-btn" data-action="openTotemDice"
title="{{ localize 'VERMINE.totem_manage' }}"><i class="fas fa-sliders"></i></button>
</div>
</div>
<ul class="padding-with-frieze unstyled paper">
{{#if system.identity.totem }}
+7 -4
View File
@@ -97,7 +97,6 @@
data-action="edit"
data-item-id="{{item._id}}"
title="Edit Item">{{item.name}}</a>
<span data-tooltip="Compétence">{{item.system.skill}}</span>
</div>
<div class="item-controls flexrow">
{{#if item.system.description}}
@@ -192,9 +191,8 @@
{{#if isEditMode}}
<a
class="item-control item-create"
title="Create item"
data-action="create"
data-type="evolution"><i class="fas fa-plus"></i></a>
title="Buy evolution"
data-action="buyEvolution"><i class="fas fa-cart-shopping"></i></a>
{{/if}}
</h4>
<ol class="list-item">
@@ -206,6 +204,11 @@
data-action="edit"
data-item-id="{{item._id}}"
title="Edit Item">{{item.name}}</a>
{{#if item.system.mutation}}
<span class="evolution-badge mutation">{{ localize 'VERMINE.evolution_mutation' }}</span>
{{else}}
<span class="evolution-badge adaptation">{{ localize 'VERMINE.evolution_adaptation' }}</span>
{{/if}}
</div>
<div class="item-controls flexrow">
{{#if item.system.description}}
@@ -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>
+44
View File
@@ -0,0 +1,44 @@
<div class="roll-dialog-content">
<h3 class="combat-mode-label">{{ localize 'VERMINE.totem_dice' }}</h3>
<div class="learning-summary">
<span class="label">{{ localize 'VERMINE.influence' }}:</span>
<span class="exp-value totem-influence">{{ influenceLabel }}</span>
</div>
<div class="totem-dice-state flexrow flex-group-center">
<div class="totem-state">
<span class="label totem-human">{{ localize 'TOTEMS.human.name' }}:</span>
<span class="value">{{ humanValue }} / {{ humanMax }}</span>
</div>
<div class="totem-state">
<span class="label totem-adapted">{{ localize 'TOTEMS.adapted.name' }}:</span>
<span class="value">{{ adaptedValue }} / {{ adaptedMax }}</span>
</div>
</div>
<div class="flexrow bonus-item full-width">
<label class="label" for="totem-serious">{{ localize 'VERMINE.totem_serious' }}</label>
<input type="checkbox" data-roll="true" id="totem-serious" name="totem-serious" {{checked serious}} />
</div>
<p class="learning-hint">{{ localize 'VERMINE.totem_manage_hint' }}</p>
<div class="totem-actions flexrow flex-wrap">
<button type="button" data-action="gainHuman">
<i class="fas fa-hand-holding-heart"></i> {{ localize 'VERMINE.totem_instinct_human' }}
</button>
<button type="button" data-action="gainAdapted">
<i class="fas fa-paw"></i> {{ localize 'VERMINE.totem_instinct_adapted' }}
</button>
<button type="button" data-action="loseHuman">
<i class="fas fa-ban"></i> {{ localize 'VERMINE.totem_interdit_human' }}
</button>
</div>
<footer class="sheet-footer flexrow">
<button type="button" data-action="close">
<i class="fas fa-times"></i> {{localize "VERMINE.close"}}
</button>
</footer>
</div>
+4
View File
@@ -13,6 +13,10 @@
<label class="resource-label ">{{ localize "VERMINE.level"}}</label>
<span class="hexa"><input type="number" name="system.level.value" value="{{system.level.value }}" data-dtype="Number" min="{{system.level.min }}" max="{{system.level.max }}"/></span>
</h4>
<div class="flexrow bonus-item full-width">
<label class="resource-label" for="system.mutation">{{ localize "VERMINE.evolution_mutation"}}</label>
<input type="checkbox" name="system.mutation" {{checked system.mutation}}/>
</div>
<h2>description</h2>
<fieldset>