sotc-clash-arrow : flèches de clash entre combattants

This commit is contained in:
Yasser Boulayoune 2026-05-01 10:12:00 +02:00
commit ad63cafdc6
10 changed files with 2414 additions and 0 deletions

View file

@ -0,0 +1,249 @@
{{!-- templates/damage-wizard.hbs --}}
<div class="dw-root {{#if isClash}}dw-clash{{else}}dw-unilateral{{/if}}">
{{!-- ═══════════════════════════════════════════════════════════════ --}}
{{!-- ZONE PRINCIPALE 3 COLONNES --}}
{{!-- ═══════════════════════════════════════════════════════════════ --}}
<div class="dw-main">
{{!-- ── COLONNE GAUCHE : ATTAQUANT ─────────────────────────────── --}}
<div class="dw-col dw-col-attacker">
<div class="dw-col-header dw-header-attacker">
<span class="dw-header-label">{{attacker.name}}</span>
</div>
{{!-- Stats --}}
<div class="dw-stats-block">
<div class="dw-stat-row">
<span class="dw-stat-lbl">HP</span>
<div class="dw-bar-wrap"><div class="dw-bar dw-bar-hp" style="width:{{attacker.hpPercent}}%"></div></div>
<span class="dw-stat-val">{{attacker.hpValue}}/{{attacker.hpMax}}</span>
</div>
<div class="dw-stat-row">
<span class="dw-stat-lbl">STG</span>
<div class="dw-bar-wrap"><div class="dw-bar dw-bar-stg" style="width:{{attacker.staggerPercent}}%"></div></div>
<span class="dw-stat-val">{{attacker.staggerValue}}/{{attacker.staggerMax}}</span>
</div>
<div class="dw-stat-inline">
<span class="dw-stat-lbl">💡</span><span class="dw-stat-val">{{attacker.lightValue}}/{{attacker.lightMax}}</span>
<span class="dw-stat-lbl" style="margin-left:8px;">💜</span><span class="dw-stat-val">{{attacker.emotion}}</span>
</div>
</div>
{{!-- Compétence --}}
{{#if attacker.skillName}}
<div class="dw-skill-row">
<img class="dw-skill-icon" src="{{attacker.skillImg}}" alt="{{attacker.skillName}}" />
<span class="dw-skill-label">{{attacker.skillName}}</span>
</div>
{{/if}}
{{!-- Dés de l'attaquant --}}
{{#if matchupRows}}
{{#each matchupRows}}
{{#if (eq this.side "atk")}}
<div class="dw-die-card dw-verdict-bg-{{this.verdict}}">
<img class="dw-die-img" src="systems/sotc/assets/dice types/{{this.dieType}}.png" alt="{{this.dieType}}"/>
<span class="dw-die-type dw-tag-{{this.dieType}}">{{this.dieType}}</span>
<span class="dw-die-score">{{this.power}}</span>
<span class="dw-die-formula-sm">{{this.formulaDisplay}}</span>
</div>
{{/if}}
{{/each}}
{{else}}
{{#if attacker.dice}}
{{#each attacker.dice}}
<div class="dw-die-card dw-die-card-preview">
<img class="dw-die-img" src="systems/sotc/assets/dice types/{{this.type}}.png" alt="{{this.type}}"/>
<span class="dw-die-type dw-tag-{{this.type}}">{{this.type}}</span>
<span class="dw-die-formula-sm">{{this.formula}}</span>
</div>
{{/each}}
{{/if}}
{{/if}}
</div>
{{!-- ── COLONNE CENTRE : RÉSOLUTION ──────────────────────────────── --}}
<div class="dw-col dw-col-resolution">
<div class="dw-col-header dw-header-resolution">
<span class="dw-header-label">Résolution</span>
</div>
{{#if matchupRows}}
{{#each matchupRows}}
<div class="dw-matchup dw-matchup-{{this.side}}">
{{!-- Ligne principale : type + score VS type + score --}}
<div class="dw-matchup-main">
<span class="dw-matchup-tag dw-tag-{{this.dieType}}">{{this.dieType}}</span>
<span class="dw-matchup-score">{{this.power}}</span>
{{#if (eq this.clashType "clash")}}
<span class="dw-matchup-vs">⚔</span>
<span class="dw-matchup-tag dw-tag-{{this.oppType}}">{{this.oppType}}</span>
<span class="dw-matchup-score">{{this.oppPower}}</span>
{{else}}
<span class="dw-matchup-unopposed">— sans opposition —</span>
{{/if}}
</div>
{{!-- Verdict --}}
<div class="dw-matchup-verdict dw-verdict-chip-{{this.verdict}}">
{{#if (eq this.verdict "off-win")}}✓ VICTOIRE{{/if}}
{{#if (eq this.verdict "off-lose")}}✗ DÉFAITE{{/if}}
{{#if (eq this.verdict "tie")}}= ÉGALITÉ{{/if}}
{{#if (eq this.verdict "off-win-vs-block")}}✓ vs Block{{/if}}
{{#if (eq this.verdict "off-lose-vs-block")}}↑ Block WIN{{/if}}
{{#if (eq this.verdict "off-win-vs-evade")}}✓ vs Evade{{/if}}
{{#if (eq this.verdict "off-lose-vs-evade")}}🔄 Evade WIN{{/if}}
{{#if (eq this.verdict "block-win-vs-off")}}🛡 Block WIN{{/if}}
{{#if (eq this.verdict "block-lose-vs-off")}}🛡↓ Block LOSE{{/if}}
{{#if (eq this.verdict "block-win-vs-def")}}🛡 Block WIN{{/if}}
{{#if (eq this.verdict "block-lose-vs-def")}}🛡↓ Block LOSE{{/if}}
{{#if (eq this.verdict "evade-win-vs-off")}}🔄 RECYCLÉ{{/if}}
{{#if (eq this.verdict "evade-lose-vs-off")}}↓ Evade LOSE{{/if}}
{{#if (eq this.verdict "evade-win-vs-def")}}💚 Stagger Regain{{/if}}
{{#if (eq this.verdict "evade-lose-vs-def")}}↓ Evade LOSE{{/if}}
{{#if (eq this.verdict "unopposed-off")}}◆ SANS OPP.{{/if}}
{{#if (eq this.verdict "unopposed-saved")}}💾 SAUVEGARDÉ{{/if}}
{{#if (eq this.verdict "unopposed-counter-noop")}}— Counter inactif{{/if}}
</div>
{{!-- Effets --}}
{{#if this.effects.length}}
<div class="dw-matchup-effects">
{{#each this.effects}}<span class="dw-effect-tag">{{this}}</span>{{/each}}
</div>
{{/if}}
</div>
{{/each}}
{{else}}
<div class="dw-resolution-hint">Lance les dés pour voir la résolution</div>
{{/if}}
</div>
{{!-- ── COLONNE DROITE : DÉFENSEUR ─────────────────────────────── --}}
<div class="dw-col dw-col-defender">
<div class="dw-col-header dw-header-defender">
<span class="dw-header-label">{{defender.name}}</span>
</div>
{{!-- Stats --}}
<div class="dw-stats-block">
<div class="dw-stat-row">
<span class="dw-stat-lbl">HP</span>
<div class="dw-bar-wrap"><div class="dw-bar dw-bar-hp" style="width:{{defender.hpPercent}}%"></div></div>
<span class="dw-stat-val">{{defender.hpValue}}/{{defender.hpMax}}</span>
</div>
<div class="dw-stat-row">
<span class="dw-stat-lbl">STG</span>
<div class="dw-bar-wrap"><div class="dw-bar dw-bar-stg" style="width:{{defender.staggerPercent}}%"></div></div>
<span class="dw-stat-val">{{defender.staggerValue}}/{{defender.staggerMax}}</span>
</div>
<div class="dw-stat-inline">
<span class="dw-stat-lbl">💡</span><span class="dw-stat-val">{{defender.lightValue}}/{{defender.lightMax}}</span>
<span class="dw-stat-lbl" style="margin-left:8px;">💜</span><span class="dw-stat-val">{{defender.emotion}}</span>
</div>
</div>
{{!-- Compétence défenseur --}}
{{#if isClash}}
{{#if defender.skillName}}
<div class="dw-skill-row">
<img class="dw-skill-icon" src="{{defender.skillImg}}" alt="{{defender.skillName}}" />
<span class="dw-skill-label">{{defender.skillName}}</span>
</div>
{{else}}
<div class="dw-skill-row dw-skill-none"><span class="dw-skill-label">— Aucune compétence —</span></div>
{{/if}}
{{else}}
<div class="dw-skill-row dw-skill-none"><span class="dw-skill-label">— Attaque directe —</span></div>
{{/if}}
{{!-- Dés du défenseur --}}
{{#if matchupRows}}
{{#each matchupRows}}
{{#if (eq this.side "def")}}
<div class="dw-die-card dw-verdict-bg-{{this.verdict}}">
<img class="dw-die-img" src="systems/sotc/assets/dice types/{{this.dieType}}.png" alt="{{this.dieType}}"/>
<span class="dw-die-type dw-tag-{{this.dieType}}">{{this.dieType}}</span>
<span class="dw-die-score">{{this.power}}</span>
<span class="dw-die-formula-sm">{{this.formulaDisplay}}</span>
</div>
{{/if}}
{{/each}}
{{else}}
{{#if isClash}}
{{#if defender.dice}}
{{#each defender.dice}}
<div class="dw-die-card dw-die-card-preview">
<img class="dw-die-img" src="systems/sotc/assets/dice types/{{this.type}}.png" alt="{{this.type}}"/>
<span class="dw-die-type dw-tag-{{this.type}}">{{this.type}}</span>
<span class="dw-die-formula-sm">{{this.formula}}</span>
</div>
{{/each}}
{{/if}}
{{/if}}
{{/if}}
</div>
</div>{{!-- /.dw-main --}}
{{!-- ═══════════════════════════════════════════════════════════════ --}}
{{!-- BARRE INFÉRIEURE --}}
{{!-- ═══════════════════════════════════════════════════════════════ --}}
<div class="dw-footer">
{{#if clashResult}}
<div class="dw-summary">
{{!-- Dégâts sur le défenseur --}}
<span class="dw-summary-line">
🎯 <strong>{{defender.name}}</strong> →
<span class="dw-sum-hp">HP −{{clashResult.atkHpDamage}}</span>
<span class="dw-sum-stg">Stagger −{{clashResult.atkStaggerDamage}}</span>
{{#if clashResult.defStaggerRegain}}
<span class="dw-sum-gain">Stagger +{{clashResult.defStaggerRegain}}</span>
{{/if}}
</span>
{{!-- Dégâts sur l'attaquant (clash) --}}
{{#if isClash}}
<span class="dw-summary-line">
🎯 <strong>{{attacker.name}}</strong> →
<span class="dw-sum-hp">HP −{{clashResult.defHpDamage}}</span>
<span class="dw-sum-stg">Stagger −{{clashResult.defStaggerDamage}}</span>
{{#if clashResult.atkStaggerRegain}}
<span class="dw-sum-gain">Stagger +{{clashResult.atkStaggerRegain}}</span>
{{/if}}
</span>
{{/if}}
{{!-- PE --}}
{{#if clashResult.atkPE}}
<span class="dw-summary-line dw-pe-line">
💜 PE :
<strong>{{attacker.name}}</strong> +{{clashResult.atkPE}}
{{#if isClash}}<strong>{{defender.name}}</strong> +{{clashResult.defPE}}{{/if}}
</span>
{{/if}}
{{!-- Dés sauvegardés --}}
{{#if clashResult.defSavedDice}}
<span class="dw-summary-line dw-saved-line">💾 {{defender.name}} → Saved Defense Die (état 2)</span>
{{/if}}
{{#if clashResult.atkSavedDice}}
<span class="dw-summary-line dw-saved-line">💾 {{attacker.name}} → Saved Defense Die (état 2)</span>
{{/if}}
</div>
{{/if}}
<div class="dw-footer-btns">
<button class="dw-foot-btn dw-foot-cancel">✕ Annuler</button>
{{#if hasRolled}}
<button class="dw-foot-btn dw-foot-apply">✔ Appliquer</button>
{{else}}
<button class="dw-foot-btn dw-foot-roll">🎲 Lancer les dés</button>
{{/if}}
</div>
</div>
</div>