Tâche 0 : - item.mjs : champ equipped sur items génériques + toggle fiche - nouveau module/system/traits.mjs (helpers partagés : equippedItems, lourdMalus, mobilityHandicap, feticheItem…) Phase 2 — Combat : - Lourd : malus cumulés auto (Vigueur < n) dans le dialogue + pool - Rapide : handicap (n) pré-rempli dans la défense (character + PNJ) + note carte - Rafale : case tir en rafale (+2 difficulté), +n réussites si réussi (bonusOnSuccess) - Portée : portée effective n × Vigueur affichée - Maniable/Mobilité : note de rappel (dialogue + carte) - Incapacitant : bouton « Jet de Santé (n) » sur la carte d'échange - getLabel() : libellés caractéristiques/compétences localisés Phase 3 — Jets d'action : - Ponctuel : annule jusqu'à n Handicaps, consommé au jet (Traits supprimé à 0) - Pratique : outil sélectionné +2D au lieu de +1D - Intimidant : case « Brandit » → -1D Psychologie ou Relance 1D - Malus : champ « Malus temporaires » manuel déduit du pool - Durée : note « n tours » sur la carte de jet d'arme - roll() : transmission effectiveRange/mobilityHandicap/ponctuelUsed/intimidant (corrige l'affichage Portée/Mobilité) Phase 4 — Acteur : - Fétiche : +1D Effort ET Sang-Froid (max dérivé, config corrigé), alerte 2+ fétiches, action « Perdre le fétiche » (-2D, max -1D persistant feticheLoss) - Zone : note + bouton « Appliquer aux cibles de la zone » (#onApplyZone) CSS : styles LESS pour les nouvelles classes (fetiche-block, exchange-reminder/zone, traits-reminder, tool-bonus/ponctuel, duree-note) i18n : 29 clés fr/en TRAITS_PLAN.md : plan complet cochée
301 lines
10 KiB
Handlebars
301 lines
10 KiB
Handlebars
<div class="tab combat sheet-part {{#if @root.tabs.combat.active}}active{{/if}}" data-group="sheet" data-tab="combat">
|
|
<div class="align-center">
|
|
<div class="shadow">
|
|
<h4>situation de combat par défaut</h4>
|
|
<div class="flexrow align-center combat-status">
|
|
{{#each config.combatStatus as |dif label|}}
|
|
<div>
|
|
<label for="combat-status-{{diff}}">{{label}}</label>
|
|
<input
|
|
id="combat-status-{{diff}}"
|
|
type="radio"
|
|
name="system.combatStatus.difficulty"
|
|
value="{{dif}}"
|
|
data-action="clickRadio"
|
|
{{#ife @root.system.combatStatus.difficulty dif}}checked
|
|
{{/ife}}
|
|
>
|
|
</div>
|
|
{{/each}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{> "systems/vermine2047/templates/actor/parts/actor-equipped-gear.hbs"}}
|
|
{{#if fetiche}}
|
|
<div class="fetiche-block flexrow align-center">
|
|
<div class="fetiche-info flexcol">
|
|
<h4 class="align-center"><i class="fas fa-heart"></i> {{ localize "VERMINE.fetiche" }} : {{fetiche.name}}</h4>
|
|
<p class="fetiche-bonus">{{ localize "VERMINE.fetiche_bonus" }}</p>
|
|
{{#if feticheMultiple}}
|
|
<p class="fetiche-warning"><i class="fas fa-triangle-exclamation"></i> {{ localize "VERMINE.fetiche_multiple" }}</p>
|
|
{{/if}}
|
|
{{#if feticheLost}}
|
|
<p class="fetiche-warning"><i class="fas fa-triangle-exclamation"></i> {{ localize "VERMINE.fetiche_lost_penalty" }}</p>
|
|
{{/if}}
|
|
</div>
|
|
<button type="button" data-action="loseFetiche" title="{{ localize 'VERMINE.lose_fetiche' }}"><i class="fas fa-unlink"></i> {{ localize "VERMINE.lose_fetiche" }}</button>
|
|
</div>
|
|
{{/if}}
|
|
<div class="flexrow">
|
|
<div class="self-control-container flexcol align-center">
|
|
<h4 class="align-center">
|
|
|
|
{{ localize "VERMINE.self_control"}} :
|
|
{{@root.system.attributes.self_control.value}}/
|
|
{{@root.system.attributes.self_control.max}}
|
|
</h4>
|
|
{{setVar "SCIndex" 1}}
|
|
<div class="reserve-grid">
|
|
{{#repeat 4 1 "row"}}
|
|
|
|
<div class="flexrow">
|
|
{{#repeat @row @root.SCIndex "case"}}
|
|
<div class="hexa
|
|
{{#iflteq @case @root.system.attributes.self_control.value }}
|
|
checked
|
|
{{/iflteq}}
|
|
{{#ifgt @case @root.system.attributes.self_control.max }}
|
|
unavailable
|
|
{{/ifgt}}">
|
|
{{#iflteq @row @root.system.attributes.self_control.max }}
|
|
<input
|
|
type="radio"
|
|
data-dtype="Number"
|
|
name="system.attributes.self_control.value"
|
|
value="{{@case}}"
|
|
data-action="clickRadio"
|
|
class="
|
|
{{#iflteq @case @root.system.attributes.self_control.max }}
|
|
checked
|
|
{{/iflteq}}
|
|
|
|
"
|
|
/>
|
|
{{/iflteq}}
|
|
|
|
</div>
|
|
{{setVar "SCIndex" (math_add @root.SCIndex 1)}}
|
|
{{/repeat}}
|
|
</div>
|
|
{{/repeat}}
|
|
</div>
|
|
</div>
|
|
<div class="effort-container flexcol align-center">
|
|
<h4 class="align-center">
|
|
|
|
{{ localize "VERMINE.effort"}} :
|
|
{{@root.system.attributes.effort.value}}/
|
|
{{@root.system.attributes.effort.max}}
|
|
</h4>
|
|
{{setVar "EffIndex" 1}}
|
|
|
|
<div class="reserve-grid">
|
|
{{#repeat 4 1 "row"}}
|
|
|
|
<div class="flexrow">
|
|
{{#repeat @row @root.EffIndex "case"}}
|
|
<div class="hexa
|
|
{{#iflteq @case @root.system.attributes.effort.value }}
|
|
checked
|
|
{{/iflteq}}
|
|
{{#ifgt @case @root.system.attributes.effort.max }}
|
|
unavailable
|
|
{{/ifgt}}">
|
|
{{#iflteq @row @root.system.attributes.effort.max }}
|
|
<input
|
|
type="radio"
|
|
data-dtype="Number"
|
|
name="system.attributes.effort.value"
|
|
value="{{@case}}"
|
|
data-action="clickRadio"
|
|
class="
|
|
{{#iflteq @case @root.system.attributes.effort.max }}
|
|
checked
|
|
{{/iflteq}}
|
|
|
|
"
|
|
/>
|
|
{{/iflteq}}
|
|
|
|
</div>
|
|
{{setVar "EffIndex" (math_add @root.EffIndex 1)}}
|
|
{{/repeat}}
|
|
</div>
|
|
{{/repeat}}
|
|
</div>
|
|
</div>
|
|
<div class="blessure-container flexlarge flexcol align-center">
|
|
<h4 class="item-name flexrow">{{ localize
|
|
"VERMINE.wounds.name"}}</h4>
|
|
<ul class="unstyled">
|
|
<li class="row mdb align-center">{{ localize
|
|
'VERMINE.wounds.light'}} <span data-tooltip="seuil">({{
|
|
system.minorWound.threshold }})</span>
|
|
<div class="flexrow align-center">
|
|
{{#repeat system.minorWound.max 1 "minorwoundmax"}}
|
|
<div class="hexa ability{{#iflteq @minorwoundmax @root.system.minorWound.value }}
|
|
checked
|
|
{{/iflteq}}">
|
|
<input
|
|
type="radio"
|
|
data-dtype="Number"
|
|
name="system.minorWound.value"
|
|
value="{{@minorwoundmax}}"
|
|
data-wound="minorWound"
|
|
data-action="clickWound"
|
|
class="
|
|
{{#iflteq @minorwoundmax @root.system.minorWound.value }}
|
|
checked
|
|
{{/iflteq}}
|
|
"
|
|
{{#ife @minorwoundmax @root.system.minorWound.value }}
|
|
checked="true"
|
|
{{/ife}}
|
|
/>
|
|
</div>
|
|
{{/repeat}}
|
|
</div>
|
|
</li>
|
|
<li class="row mdb align-center">{{ localize
|
|
'VERMINE.wounds.heavy'}}
|
|
<span>({{
|
|
system.majorWound.threshold }})</span>
|
|
<div class="flexrow align-center">
|
|
{{#repeat system.majorWound.max 1 "majourwoundmax"}}
|
|
<div class="hexa ability{{#iflteq @majourwoundmax @root.system.majorWound.value }}
|
|
checked
|
|
{{/iflteq}}">
|
|
<input
|
|
type="radio"
|
|
data-dtype="Number"
|
|
name="system.majorWound.value"
|
|
value="{{@majourwoundmax}}"
|
|
data-wound="majorWound"
|
|
data-action="clickWound"
|
|
class="
|
|
{{#iflteq @majourwoundmax @root.system.majorWound.value }}
|
|
checked
|
|
{{/iflteq}}
|
|
|
|
"
|
|
{{#ife @majourwoundmax @root.system.majorWound.value }}
|
|
checked="true"
|
|
{{/ife}}
|
|
/>
|
|
|
|
</div>
|
|
{{/repeat}}
|
|
|
|
</div>
|
|
</li>
|
|
<li class="row mdb align-center">{{ localize
|
|
'VERMINE.wounds.deadly'}}
|
|
<span>({{
|
|
system.deadlyWound.threshold }})</span>
|
|
<div class="flexrow align-center">
|
|
{{#repeat system.deadlyWound.max 1 "deadlywoundmax"}}
|
|
<div class="hexa ability{{#iflteq @deadlywoundmax @root.system.deadlyWound.value }}
|
|
checked
|
|
{{/iflteq}}">
|
|
<input
|
|
type="radio"
|
|
data-dtype="Number"
|
|
name="system.deadlyWound.value"
|
|
value="{{@deadlywoundmax}}"
|
|
data-wound="deadlyWound"
|
|
data-action="clickWound"
|
|
class=" {{#iflteq @deadlywoundmax @root.system.deadlyWound.value }}
|
|
checked
|
|
{{/iflteq}}
|
|
|
|
"
|
|
{{#ife @deadlywoundmax @root.system.deadlyWound.value }}
|
|
checked="true"
|
|
{{/ife}}
|
|
/>
|
|
</div>
|
|
{{/repeat}}
|
|
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<h4 class="item-name effect-name flexrow">{{ localize "UI.effects.name"}}</h4>
|
|
<ol class="items-list effects-list">
|
|
{{#each effects as |section sid|}}
|
|
<li
|
|
class="items-header flexrow"
|
|
data-effect-type="{{section.type}}"
|
|
>
|
|
<p class="item-name effect-name flexrow">{{#if (eq section.type
|
|
'temporary')}}
|
|
{{localize "UI.effects.temporary" }}
|
|
{{else if (eq section.type 'passive')}}
|
|
{{localize "UI.effects.passive" }}
|
|
{{else if (eq section.type 'inactive')}}
|
|
{{localize "UI.effects.inactive" }}
|
|
{{/if}}
|
|
</p>
|
|
<div class="effect-source">{{localize 'UI.source'}}</div>
|
|
<div class="effect-source">{{localize 'UI.duration'}}</div>
|
|
<div class="item-controls effect-controls flexrow">
|
|
{{#if @root.isEditMode}}
|
|
<a
|
|
class="effect-control"
|
|
data-action="create"
|
|
title="{{localize 'UI.effect_create'}}"
|
|
>
|
|
<i class="fas fa-plus"></i> {{localize "UI.add"}}
|
|
</a>
|
|
{{/if}}
|
|
</div>
|
|
</li>
|
|
|
|
<ol class="item-list">
|
|
{{#each section.effects as |effect|}}
|
|
<li
|
|
class="item effect flexrow"
|
|
data-effect-id="{{effect.id}}"
|
|
>
|
|
<div class="item-name effect-name">
|
|
<a
|
|
class="effect-control flexrow flex-group-center items-center"
|
|
class="effect-control" data-effect-op="edit"
|
|
title="{{localize 'UI.effect_edit'}}"
|
|
>
|
|
<img
|
|
class="item-image"
|
|
src="{{effect.icon}}"
|
|
/>
|
|
<span>{{effect.label}}</span>
|
|
</a>
|
|
</div>
|
|
<div class="effect-source">{{effect.sourceName}}</div>
|
|
<div class="effect-duration">{{effect.duration.label}}</div>
|
|
<div class="item-controls effect-controls flexrow">
|
|
{{#if @root.isEditMode}}
|
|
<a
|
|
class="effect-control"
|
|
class="effect-control" data-effect-op="toggle"
|
|
title="{{localize 'UI.effect_toggle'}}"
|
|
>
|
|
<i class="fas {{#if effect.disabled}}fa-check{{else}}fa-times{{/if}}"></i>
|
|
</a>
|
|
<a
|
|
class="effect-control"
|
|
class="effect-control" data-effect-op="delete"
|
|
title="{{localize 'UI.effect_delete'}}"
|
|
>
|
|
<i class="fas fa-trash"></i>
|
|
</a>
|
|
{{/if}}
|
|
</div>
|
|
</li>
|
|
{{/each}}
|
|
</ol>
|
|
{{/each}}
|
|
</ol>
|
|
</div>
|