IMplémentation de la ajorité des remarques de Nepherius
This commit is contained in:
@@ -10,6 +10,17 @@
|
||||
|
||||
<div class="anomaly-body">
|
||||
<div class="armure-stats">
|
||||
<div class="armure-stat-box equipped-box">
|
||||
<label>{{localize "CELESTOPOL.Armure.equipped"}}</label>
|
||||
<div class="armure-stat-value">
|
||||
<label class="equipped-switch">
|
||||
<input type="checkbox" name="system.equipped" {{#if system.equipped}}checked{{/if}} {{#unless isEditable}}disabled{{/unless}}>
|
||||
<span class="switch-label {{#if system.equipped}}on{{/if}}">
|
||||
{{#if system.equipped}}{{localize "CELESTOPOL.Armure.equippedYes"}}{{else}}{{localize "CELESTOPOL.Armure.equippedNo"}}{{/if}}
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="armure-stat-box">
|
||||
<label>{{localize "CELESTOPOL.Armure.protection"}}</label>
|
||||
<div class="armure-stat-value">
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
<div class="tab biography {{tab.cssClass}}" data-group="sheet" data-tab="biography">
|
||||
|
||||
{{!-- Description / Biographie --}}
|
||||
{{!-- Description Physique --}}
|
||||
<div class="biography-section">
|
||||
<div class="section-header">{{localize "CELESTOPOL.Actor.description"}}</div>
|
||||
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
|
||||
<div class="section-header">{{localize "CELESTOPOL.Actor.descriptionPhysique"}}</div>
|
||||
{{formInput systemFields.descriptionPhysique enriched=enrichedDescriptionPhysique value=system.descriptionPhysique name="system.descriptionPhysique" toggled=true}}
|
||||
</div>
|
||||
|
||||
{{!-- Description Psychologique --}}
|
||||
<div class="biography-section">
|
||||
<div class="section-header">{{localize "CELESTOPOL.Actor.descriptionPsychologique"}}</div>
|
||||
{{formInput systemFields.descriptionPsychologique enriched=enrichedDescriptionPsychologique value=system.descriptionPsychologique name="system.descriptionPsychologique" toggled=true}}
|
||||
</div>
|
||||
|
||||
{{!-- Notes --}}
|
||||
|
||||
@@ -2,7 +2,10 @@
|
||||
{{!-- Blessures --}}
|
||||
<section class="track-section">
|
||||
<div class="track-header">
|
||||
<span class="track-title">{{localize "CELESTOPOL.Track.blessures"}}</span>
|
||||
<span class="track-title">
|
||||
{{localize "CELESTOPOL.Track.blessures"}}
|
||||
<span class="track-help" title="{{localize 'CELESTOPOL.Track.blessuresTooltip'}}">?</span>
|
||||
</span>
|
||||
<span class="wound-malus">{{localize "CELESTOPOL.Track.currentMalus"}} :
|
||||
<strong>{{lookup @root.woundLevels system.blessures.lvl 'malus'}}</strong>
|
||||
</span>
|
||||
@@ -24,8 +27,9 @@
|
||||
{{!-- Destin --}}
|
||||
<section class="track-section">
|
||||
<div class="track-header">
|
||||
<span class="track-title track-title-destin"
|
||||
title="{{localize 'CELESTOPOL.Track.destinTooltip'}}">{{localize "CELESTOPOL.Track.destin"}}</span>
|
||||
<span class="track-title">{{localize "CELESTOPOL.Track.destin"}}
|
||||
<span class="track-help" title="{{localize 'CELESTOPOL.Track.destinTooltip'}}">?</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="track-boxes destin-boxes">
|
||||
{{#each (range 8) as |lvl|}}
|
||||
@@ -42,7 +46,10 @@
|
||||
{{!-- Spleen --}}
|
||||
<section class="track-section">
|
||||
<div class="track-header">
|
||||
<span class="track-title">{{localize "CELESTOPOL.Track.spleen"}}</span>
|
||||
<span class="track-title">
|
||||
{{localize "CELESTOPOL.Track.spleen"}}
|
||||
<span class="track-help" title="{{localize 'CELESTOPOL.Track.spleenTooltip'}}">?</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="track-boxes spleen-boxes">
|
||||
{{#each (range 8) as |lvl|}}
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
<div class="stat-block">
|
||||
<div class="stat-header">
|
||||
<span class="stat-name">{{localize stat.label}}</span>
|
||||
<div class="stat-res {{#unless ../isEditMode}}rollable{{/unless}}" data-stat-id="{{statId}}"
|
||||
<div class="stat-res-btn {{#unless ../isEditMode}}rollable{{/unless}}" data-stat-id="{{statId}}"
|
||||
title="{{localize 'CELESTOPOL.Roll.resistanceClickToRoll'}}">
|
||||
<label>{{localize "CELESTOPOL.Stat.res"}}</label>
|
||||
<span class="stat-res-value">{{lookup (lookup ../system.stats statId) 'res'}}</span>
|
||||
<i class="fas fa-dice-d8 res-die-icon"></i>
|
||||
<span class="res-label">{{localize "CELESTOPOL.Stat.res"}}</span>
|
||||
<span class="res-value">{{lookup (lookup ../system.stats statId) 'res'}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="skills-list">
|
||||
@@ -19,8 +20,9 @@
|
||||
<div class="skill-checkboxes-container">
|
||||
<div class="skill-checkboxes">
|
||||
{{#each (range 8) as |lvl|}}
|
||||
<span class="skill-level-dot {{#if (lte lvl (lookup @root.system.stats statId skillId 'value'))}}filled{{/if}}"
|
||||
data-action="skillLevel" data-stat-id="{{statId}}" data-skill-id="{{skillId}}" data-index="{{lvl}}"></span>
|
||||
<span class="skill-level-dot {{#if (lte lvl (lookup @root.system.stats statId skillId 'value'))}}filled{{/if}} {{#if (isResThreshold skillId lvl)}}res-threshold{{/if}}"
|
||||
data-action="skillLevel" data-stat-id="{{statId}}" data-skill-id="{{skillId}}" data-index="{{lvl}}"
|
||||
title="{{#if (isResThreshold skillId lvl)}}{{localize 'CELESTOPOL.Roll.resThresholdHint'}}{{/if}}"></span>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -33,7 +35,8 @@
|
||||
<div class="skill-checkboxes-container">
|
||||
<div class="skill-checkboxes">
|
||||
{{#each (range 8) as |lvl|}}
|
||||
<span class="skill-level-dot {{#if (lte lvl (lookup @root.system.stats statId skillId 'value'))}}filled{{/if}}"></span>
|
||||
<span class="skill-level-dot {{#if (lte lvl (lookup @root.system.stats statId skillId 'value'))}}filled{{/if}} {{#if (isResThreshold skillId lvl)}}res-threshold{{/if}}"
|
||||
title="{{#if (isResThreshold skillId lvl)}}{{localize 'CELESTOPOL.Roll.resThresholdHint'}}{{/if}}"></span>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -41,12 +41,17 @@
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#each armures as |item|}}
|
||||
<div class="item-row armure" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
<div class="item-row armure {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
<img src="{{item.img}}" class="item-icon">
|
||||
<span class="item-name">{{item.name}}</span>
|
||||
<span class="item-tag prot"><i class="fas fa-shield"></i> {{item.system.protection}}</span>
|
||||
{{#if item.system.malus}}<span class="item-tag malus">−{{item.system.malus}} {{localize "CELESTOPOL.Armure.malus"}}</span>{{/if}}
|
||||
<div class="item-controls">
|
||||
<a data-action="toggleArmure" data-item-uuid="{{item.uuid}}"
|
||||
class="equip-toggle {{#if item.system.equipped}}equipped{{/if}}"
|
||||
title="{{#if item.system.equipped}}{{localize 'CELESTOPOL.Armure.unequip'}}{{else}}{{localize 'CELESTOPOL.Armure.equip'}}{{/if}}">
|
||||
<i class="fas fa-shield{{#unless item.system.equipped}}-halved{{/unless}}"></i>
|
||||
</a>
|
||||
<a data-action="edit" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
{{#if ../isEditMode}}<a data-action="delete" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>{{/if}}
|
||||
</div>
|
||||
|
||||
@@ -3,72 +3,53 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{localize "CELESTOPOL.Faction.label"}}</th>
|
||||
<th>{{localize "CELESTOPOL.Faction.score"}}</th>
|
||||
<th>{{localize "CELESTOPOL.Faction.relation"}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#each factions as |faction factionId|}}
|
||||
<tr class="faction-row" data-faction="{{factionId}}">
|
||||
{{!-- Factions standard --}}
|
||||
{{#each factionRows as |faction|}}
|
||||
<tr class="faction-row" data-faction="{{faction.id}}">
|
||||
<td class="faction-name">{{localize faction.label}}</td>
|
||||
<td class="faction-value">
|
||||
<div class="faction-checkboxes-container">
|
||||
<div class="faction-checkboxes">
|
||||
{{#each (range 9) as |level|}}
|
||||
<span class="faction-dot {{#if (lte level (lookup @root.system.factions factionId 'value'))}}filled{{/if}}"
|
||||
{{#if @root.isEditable}}data-action="factionLevel" data-faction="{{factionId}}" data-index="{{level}}"{{/if}}></span>
|
||||
{{#each faction.dots as |dot|}}
|
||||
<span class="faction-dot {{dot.type}} {{#if dot.filled}}filled{{/if}}"
|
||||
{{#if @root.isEditable}}data-action="factionLevel" data-faction="{{../id}}" data-index="{{dot.index}}"{{/if}}></span>
|
||||
{{/each}}
|
||||
</div>
|
||||
<span class="faction-count">{{lookup @root.system.factions factionId 'value'}}</span>
|
||||
<span class="faction-count">{{faction.valueStr}}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
|
||||
{{!-- Factions personnalisées --}}
|
||||
<tr class="faction-row custom" data-faction="perso1">
|
||||
{{#each factionCustom as |faction|}}
|
||||
<tr class="faction-row custom" data-faction="{{faction.id}}">
|
||||
<td>
|
||||
{{#if isEditMode}}
|
||||
<input type="text" name="system.factions.perso1.label"
|
||||
value="{{system.factions.perso1.label}}"
|
||||
{{#if @root.isEditMode}}
|
||||
<input type="text" name="system.factions.{{faction.id}}.label"
|
||||
value="{{faction.label}}"
|
||||
placeholder="{{localize 'CELESTOPOL.Faction.custom'}}">
|
||||
{{else}}
|
||||
<span>{{#if system.factions.perso1.label}}{{system.factions.perso1.label}}{{else}}—{{/if}}</span>
|
||||
<span>{{#if faction.label}}{{faction.label}}{{else}}—{{/if}}</span>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td>
|
||||
<div class="faction-checkboxes-container">
|
||||
<div class="faction-checkboxes">
|
||||
{{#each (range 9) as |level|}}
|
||||
<span class="faction-dot {{#if (lte level ../system.factions.perso1.value)}}filled{{/if}}"
|
||||
{{#if ../isEditable}}data-action="factionLevel" data-faction="perso1" data-index="{{level}}"{{/if}}></span>
|
||||
{{#each faction.dots as |dot|}}
|
||||
<span class="faction-dot {{dot.type}} {{#if dot.filled}}filled{{/if}}"
|
||||
{{#if @root.isEditable}}data-action="factionLevel" data-faction="{{../id}}" data-index="{{dot.index}}"{{/if}}></span>
|
||||
{{/each}}
|
||||
</div>
|
||||
<span class="faction-count">{{system.factions.perso1.value}}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="faction-row custom" data-faction="perso2">
|
||||
<td>
|
||||
{{#if isEditMode}}
|
||||
<input type="text" name="system.factions.perso2.label"
|
||||
value="{{system.factions.perso2.label}}"
|
||||
placeholder="{{localize 'CELESTOPOL.Faction.custom'}}">
|
||||
{{else}}
|
||||
<span>{{#if system.factions.perso2.label}}{{system.factions.perso2.label}}{{else}}—{{/if}}</span>
|
||||
{{/if}}
|
||||
</td>
|
||||
<td>
|
||||
<div class="faction-checkboxes-container">
|
||||
<div class="faction-checkboxes">
|
||||
{{#each (range 9) as |level|}}
|
||||
<span class="faction-dot {{#if (lte level ../system.factions.perso2.value)}}filled{{/if}}"
|
||||
{{#if ../isEditable}}data-action="factionLevel" data-faction="perso2" data-index="{{level}}"{{/if}}></span>
|
||||
{{/each}}
|
||||
</div>
|
||||
<span class="faction-count">{{system.factions.perso2.value}}</span>
|
||||
<span class="faction-count">{{faction.valueStr}}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -82,10 +82,19 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/with}}
|
||||
{{#if system.armorMalus}}
|
||||
<div class="header-stat armor-malus-badge">
|
||||
<label>{{localize "CELESTOPOL.Armure.malusLabel"}}</label>
|
||||
<span class="armor-malus-value">{{system.armorMalus}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="header-buttons">
|
||||
<a class="moon-standalone-btn" data-action="rollMoonDie" title="{{localize 'CELESTOPOL.Moon.standaloneTitle'}}">
|
||||
🌙
|
||||
</a>
|
||||
<a class="toggle-sheet" data-action="toggleSheet" title="{{#if isEditMode}}{{localize 'CELESTOPOL.Sheet.playMode'}}{{else}}{{localize 'CELESTOPOL.Sheet.editMode'}}{{/if}}">
|
||||
<i class="fas {{#if isEditMode}}fa-eye{{else}}fa-edit{{/if}}"></i>
|
||||
</a>
|
||||
|
||||
27
templates/chat-initiative.hbs
Normal file
27
templates/chat-initiative.hbs
Normal file
@@ -0,0 +1,27 @@
|
||||
<div class="celestopol chat-initiative">
|
||||
|
||||
{{!-- En-tête : acteur --}}
|
||||
<div class="roll-header">
|
||||
{{#if actorImg}}
|
||||
<img src="{{actorImg}}" class="actor-img" alt="{{actorName}}">
|
||||
{{/if}}
|
||||
<div class="roll-info">
|
||||
<span class="actor-name">{{actorName}}</span>
|
||||
<span class="skill-info">
|
||||
<span class="skill-lbl">⚡ {{localize "CELESTOPOL.Combat.initiative"}}</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Bandeau initiative --}}
|
||||
<div class="initiative-banner">
|
||||
<div class="initiative-score-wrap">
|
||||
<span class="initiative-icon">⚡</span>
|
||||
<span class="initiative-score">{{value}}</span>
|
||||
</div>
|
||||
{{#if detail}}
|
||||
<span class="initiative-detail">{{detail}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -71,7 +71,8 @@
|
||||
<span class="fl-total">{{total}}</span>
|
||||
</div>
|
||||
|
||||
{{!-- Seuil et marge --}}
|
||||
{{!-- Seuil et marge (masqué en opposition) --}}
|
||||
{{#unless isOpposition}}
|
||||
<div class="threshold-line">
|
||||
<span class="vs-wrap">
|
||||
<span class="vs-label">vs</span>
|
||||
@@ -84,6 +85,7 @@
|
||||
</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
|
||||
{{!-- Infos bonus (Destin, Fortune, Aspect) --}}
|
||||
{{#if useDestin}}
|
||||
@@ -119,22 +121,14 @@
|
||||
{{#if autoSuccess}}
|
||||
<span class="result-icon">★</span>
|
||||
<span class="result-label">{{localize "CELESTOPOL.Roll.autoSuccess"}}</span>
|
||||
{{else if isOpposition}}
|
||||
<span class="result-icon">⚔</span>
|
||||
<span class="result-label">{{localize "CELESTOPOL.Roll.opposition"}}</span>
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Roll.oppositionResolved"}}</span>
|
||||
{{else if isTie}}
|
||||
<span class="result-icon">⚖</span>
|
||||
<span class="result-label">{{localize "CELESTOPOL.Combat.tie"}}</span>
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Combat.tieDesc"}}</span>
|
||||
{{else if isCriticalSuccess}}
|
||||
<span class="result-icon">✦✦</span>
|
||||
<span class="result-label">{{localize "CELESTOPOL.Roll.criticalSuccess"}}</span>
|
||||
{{#if isCombat}}
|
||||
{{#if isRangedDefense}}
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Combat.rangedDefenseSuccess"}}</span>
|
||||
{{else}}
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Combat.successHit"}}{{#if (gt weaponDegats "0")}} +{{weaponDegats}} {{localize "CELESTOPOL.Combat.weaponDamage"}}{{/if}}</span>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Roll.criticalSuccessDesc"}}</span>
|
||||
{{/if}}
|
||||
{{else if isSuccess}}
|
||||
<span class="result-icon">✦</span>
|
||||
<span class="result-label">{{localize "CELESTOPOL.Roll.success"}}</span>
|
||||
@@ -145,20 +139,6 @@
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Combat.successHit"}}{{#if (gt weaponDegats "0")}} +{{weaponDegats}} {{localize "CELESTOPOL.Combat.weaponDamage"}}{{/if}}</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{else if isCriticalFailure}}
|
||||
<span class="result-icon">✖✖</span>
|
||||
<span class="result-label">{{localize "CELESTOPOL.Roll.criticalFailure"}}</span>
|
||||
{{#if isCombat}}
|
||||
{{#if (eq weaponType "melee")}}
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Combat.failureHit"}}</span>
|
||||
{{else if isRangedDefense}}
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Combat.rangedDefenseFailure"}}</span>
|
||||
{{else}}
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Combat.distanceNoWound"}}</span>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<span class="result-desc">{{localize "CELESTOPOL.Roll.criticalFailureDesc"}}</span>
|
||||
{{/if}}
|
||||
{{else if isFailure}}
|
||||
<span class="result-icon">✖</span>
|
||||
<span class="result-label">{{localize "CELESTOPOL.Roll.failure"}}</span>
|
||||
|
||||
39
templates/moon-standalone.hbs
Normal file
39
templates/moon-standalone.hbs
Normal file
@@ -0,0 +1,39 @@
|
||||
<div class="celestopol-roll moon-standalone-card">
|
||||
|
||||
{{!-- En-tête --}}
|
||||
<div class="moon-standalone-header">
|
||||
<span class="moon-standalone-title">{{localize "CELESTOPOL.Moon.standaloneTitle"}}</span>
|
||||
{{#if actorName}}
|
||||
<span class="moon-standalone-actor">— {{actorName}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Résultat principal : phase + valeur --}}
|
||||
<div class="moon-standalone-main {{moonResultClass}}">
|
||||
<span class="moon-standalone-symbol">{{moonFaceSymbol}}</span>
|
||||
<div class="moon-standalone-info">
|
||||
<span class="moon-standalone-phase">{{moonFaceLabel}}</span>
|
||||
<span class="moon-standalone-value">{{localize "CELESTOPOL.Moon.quantiteHint"}} : {{result}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Interprétation Chance --}}
|
||||
<div class="moon-interpret-row">
|
||||
<span class="moon-interpret-label">{{localize "CELESTOPOL.Moon.chanceInterpret"}}</span>
|
||||
{{#if isGoodFortune}}
|
||||
<span class="moon-fortune bonne-fortune">{{localize "CELESTOPOL.Moon.bonneFortune"}}</span>
|
||||
{{else}}
|
||||
<span class="moon-fortune mauvaise-fortune">{{localize "CELESTOPOL.Moon.mauvaiseFortune"}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Interprétation Narrative --}}
|
||||
<div class="moon-die-result {{moonResultClass}}">
|
||||
<div class="moon-die-info">
|
||||
<span class="moon-interpret-label">{{localize "CELESTOPOL.Moon.narrativeInterpret"}}</span>
|
||||
<span class="moon-die-type">{{moonResultLabel}}</span>
|
||||
<span class="moon-die-desc">{{moonResultDesc}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
48
templates/npc-biographie.hbs
Normal file
48
templates/npc-biographie.hbs
Normal file
@@ -0,0 +1,48 @@
|
||||
<div class="tab biographie {{tab.cssClass}}" data-group="sheet" data-tab="biographie">
|
||||
|
||||
{{!-- Faction --}}
|
||||
<div class="bio-section faction-section">
|
||||
<div class="section-header">
|
||||
<i class="fas fa-flag"></i>
|
||||
<span>{{localize "CELESTOPOL.NPC.faction"}}</span>
|
||||
</div>
|
||||
{{#if isEditMode}}
|
||||
<div class="form-row-line faction-select-row">
|
||||
<label for="system.faction">{{localize "CELESTOPOL.NPC.factionLabel"}}</label>
|
||||
<select name="system.faction" id="faction-select">
|
||||
<option value="" {{#unless system.faction}}selected{{/unless}}>— {{localize "CELESTOPOL.NPC.factionNone"}} —</option>
|
||||
{{#each factions as |faction key|}}
|
||||
<option value="{{key}}" {{#if (eq key ../system.faction)}}selected{{/if}}>{{localize faction.label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="faction-display">
|
||||
{{#if system.faction}}
|
||||
<span class="faction-name">{{localize (lookup (lookup factions system.faction) 'label')}}</span>
|
||||
{{else}}
|
||||
<span class="faction-none">{{localize "CELESTOPOL.NPC.factionNone"}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Histoire --}}
|
||||
<div class="bio-section">
|
||||
<div class="section-header">
|
||||
<i class="fas fa-scroll"></i>
|
||||
<span>{{localize "CELESTOPOL.NPC.histoire"}}</span>
|
||||
</div>
|
||||
{{formInput systemFields.histoire enriched=enrichedHistoire value=system.histoire name="system.histoire" toggled=true}}
|
||||
</div>
|
||||
|
||||
{{!-- Description Physique --}}
|
||||
<div class="bio-section">
|
||||
<div class="section-header">
|
||||
<i class="fas fa-user"></i>
|
||||
<span>{{localize "CELESTOPOL.NPC.descriptionPhysique"}}</span>
|
||||
</div>
|
||||
{{formInput systemFields.descriptionPhysique enriched=enrichedDescriptionPhysique value=system.descriptionPhysique name="system.descriptionPhysique" toggled=true}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1,7 +1,13 @@
|
||||
<div class="tab blessures {{tab.cssClass}}" data-group="sheet" data-tab="blessures">
|
||||
<section class="track-section">
|
||||
<div class="track-header">
|
||||
<span class="track-title">{{localize "CELESTOPOL.Track.blessures"}}</span>
|
||||
<span class="track-title">
|
||||
{{localize "CELESTOPOL.Track.blessures"}}
|
||||
<span class="track-help" title="{{localize 'CELESTOPOL.Track.blessuresTooltip'}}">?</span>
|
||||
</span>
|
||||
<span class="wound-malus">{{localize "CELESTOPOL.Track.currentMalus"}} :
|
||||
<strong>{{lookup @root.woundLevels system.blessures.lvl 'malus'}}</strong>
|
||||
</span>
|
||||
</div>
|
||||
<div class="track-boxes">
|
||||
{{#each (range 8) as |lvl|}}
|
||||
@@ -17,8 +23,9 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{!-- Description --}}
|
||||
<div class="description-section">
|
||||
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
|
||||
{{!-- Notes (libres) --}}
|
||||
<div class="description-section notes-section">
|
||||
<div class="section-header"><i class="fas fa-note-sticky"></i> {{localize "CELESTOPOL.Actor.notes"}}</div>
|
||||
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,37 +1,65 @@
|
||||
<div class="tab competences {{tab.cssClass}}" data-group="sheet" data-tab="competences">
|
||||
<div class="stats-grid">
|
||||
|
||||
{{!-- Grille des 4 domaines --}}
|
||||
<div class="npc-domains-grid">
|
||||
{{#each stats as |stat statId|}}
|
||||
<div class="stat-block">
|
||||
<div class="stat-header">
|
||||
<span class="stat-name">{{localize stat.label}}</span>
|
||||
<div class="stat-res">
|
||||
<label>{{localize "CELESTOPOL.Stat.res"}}</label>
|
||||
{{#if ../isEditMode}}
|
||||
<input type="number" name="system.stats.{{statId}}.res"
|
||||
value="{{lookup ../system.stats statId 'res'}}" min="0" max="8">
|
||||
<div class="npc-domain-block">
|
||||
<div class="npc-domain-header">
|
||||
{{!-- Double label : Âme / Emprise --}}
|
||||
<div class="npc-domain-labels">
|
||||
<span class="domain-label-primary">{{localize (lookup ../domainLabels statId)}}</span>
|
||||
{{#if (eq ../system.npcType "antagoniste")}}
|
||||
<span class="domain-label-secondary">{{localize (lookup ../stats statId 'label')}}</span>
|
||||
{{else}}
|
||||
<span class="stat-res-value">
|
||||
{{lookup ../system.stats statId 'actuel'}} / {{lookup ../system.stats statId 'res'}}
|
||||
</span>
|
||||
<span class="domain-label-secondary">{{localize (lookup ../antagonisteStats statId 'label')}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="skills-list">
|
||||
{{#each (lookup ../skills statId) as |skill skillId|}}
|
||||
<div class="skill-row {{#unless ../isEditMode}}rollable{{/unless}}"
|
||||
data-stat-id="{{statId}}" data-skill-id="{{skillId}}">
|
||||
<span class="skill-name">{{localize skill.label}}</span>
|
||||
{{!-- Valeur du domaine --}}
|
||||
<div class="npc-domain-value-wrap">
|
||||
{{#if ../isEditMode}}
|
||||
<input type="number" name="system.stats.{{statId}}.{{skillId}}.value"
|
||||
value="{{lookup (lookup ../system.stats statId) skillId 'value'}}"
|
||||
min="0" max="8" class="skill-value-input">
|
||||
<input type="number" name="system.stats.{{statId}}.res"
|
||||
value="{{lookup ../system.stats statId 'res'}}" min="0" max="8" class="domain-value-input">
|
||||
{{else}}
|
||||
<span class="skill-value">{{lookup (lookup ../system.stats statId) skillId 'value'}}</span>
|
||||
<div class="npc-domain-roll-btn rollable" data-stat-id="{{statId}}"
|
||||
title="{{localize 'CELESTOPOL.Roll.clickToRoll'}}">
|
||||
<i class="fas fa-dice-d8 domain-die-icon"></i>
|
||||
<span class="domain-value">{{lookup ../system.stats statId 'actuel'}}</span>
|
||||
<span class="domain-value-base">/{{lookup ../system.stats statId 'res'}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
{{!-- Aspects --}}
|
||||
{{#if (or aspects.length isEditMode)}}
|
||||
<div class="npc-aspects-section">
|
||||
<div class="section-header">
|
||||
<i class="fas fa-star"></i>
|
||||
<span>{{localize "CELESTOPOL.Tab.aspects"}}</span>
|
||||
{{#if isEditMode}}
|
||||
<a data-action="createAspect" title="{{localize 'CELESTOPOL.Item.newAspect'}}"><i class="fas fa-plus"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#each aspects as |item|}}
|
||||
<div class="item-row aspect-row" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
|
||||
<span class="item-name">{{item.name}}</span>
|
||||
<span class="aspect-value {{#if (gt item.system.valeur 0)}}positive{{else if (lt item.system.valeur 0)}}negative{{/if}}">
|
||||
{{#if (gt item.system.valeur 0)}}+{{/if}}{{item.system.valeur}}
|
||||
</span>
|
||||
<div class="item-controls">
|
||||
<a data-action="edit" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
{{#if ../isEditMode}}<a data-action="delete" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
{{#unless ../isEditMode}}
|
||||
<p class="equip-empty">{{localize "CELESTOPOL.Item.noAspects"}}</p>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
58
templates/npc-equipement.hbs
Normal file
58
templates/npc-equipement.hbs
Normal file
@@ -0,0 +1,58 @@
|
||||
<div class="tab equipement {{tab.cssClass}}" data-group="sheet" data-tab="equipement">
|
||||
|
||||
{{!-- ── Armes ─────────────────────────────────────────────────────────── --}}
|
||||
<div class="equip-section">
|
||||
<div class="section-header">
|
||||
<i class="fas fa-khanda"></i>
|
||||
<span>{{localize "CELESTOPOL.Item.weapons"}}</span>
|
||||
{{#if isEditMode}}
|
||||
<a data-action="createWeapon" title="{{localize 'CELESTOPOL.Item.newWeapon'}}"><i class="fas fa-plus"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#each weapons as |item|}}
|
||||
<div class="item-row weapon" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
<img src="{{item.img}}" class="item-icon">
|
||||
<span class="item-name">{{item.name}}</span>
|
||||
<span class="item-tag type">{{#if (eq item.system.type "melee")}}{{localize "CELESTOPOL.Weapon.typeMelee"}}{{else}}{{localize "CELESTOPOL.Weapon.typeDistance"}}{{/if}}</span>
|
||||
<span class="item-tag dmg">{{localize "CELESTOPOL.Weapon.degats"}} {{item.system.degats}}</span>
|
||||
<div class="item-controls">
|
||||
<a data-action="edit" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
{{#if ../isEditMode}}<a data-action="delete" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<p class="equip-empty">{{localize "CELESTOPOL.Item.noWeapons"}}</p>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
{{!-- ── Armures ───────────────────────────────────────────────────────── --}}
|
||||
<div class="equip-section">
|
||||
<div class="section-header">
|
||||
<i class="fas fa-shield-halved"></i>
|
||||
<span>{{localize "CELESTOPOL.Item.armures"}}</span>
|
||||
{{#if isEditMode}}
|
||||
<a data-action="createArmure" title="{{localize 'CELESTOPOL.Item.newArmure'}}"><i class="fas fa-plus"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#each armures as |item|}}
|
||||
<div class="item-row armure {{#if item.system.equipped}}is-equipped{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
|
||||
<img src="{{item.img}}" class="item-icon">
|
||||
<span class="item-name">{{item.name}}</span>
|
||||
<span class="item-tag prot"><i class="fas fa-shield"></i> {{item.system.protection}}</span>
|
||||
{{#if item.system.malus}}<span class="item-tag malus">−{{item.system.malus}} {{localize "CELESTOPOL.Armure.malus"}}</span>{{/if}}
|
||||
<div class="item-controls">
|
||||
<a data-action="toggleArmure" data-item-uuid="{{item.uuid}}"
|
||||
title="{{#if item.system.equipped}}{{localize 'CELESTOPOL.Armure.unequip'}}{{else}}{{localize 'CELESTOPOL.Armure.equip'}}{{/if}}"
|
||||
class="equip-toggle {{#if item.system.equipped}}equipped{{/if}}">
|
||||
<i class="fas fa-shield{{#unless item.system.equipped}}-halved{{/unless}}"></i>
|
||||
</a>
|
||||
<a data-action="edit" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||
{{#if ../isEditMode}}<a data-action="delete" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<p class="equip-empty">{{localize "CELESTOPOL.Item.noArmures"}}</p>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -19,6 +19,22 @@
|
||||
<span class="concept-display">{{system.concept}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Type PNJ (standard / antagoniste) --}}
|
||||
<div class="npc-type-row">
|
||||
{{#if isEditMode}}
|
||||
<select name="system.npcType" class="npc-type-select">
|
||||
{{#each npcTypes as |ntype key|}}
|
||||
<option value="{{key}}" {{#if (eq key ../system.npcType)}}selected{{/if}}>{{localize ntype.label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
{{else}}
|
||||
{{#if (eq system.npcType "antagoniste")}}
|
||||
<span class="npc-type-badge antagoniste">{{localize "CELESTOPOL.NPC.typeAntagoniste"}}</span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<div class="header-stats-row">
|
||||
<div class="header-stat">
|
||||
<label>{{localize "CELESTOPOL.Actor.initiative"}}</label>
|
||||
@@ -49,9 +65,20 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/with}}
|
||||
|
||||
{{!-- Badge malus armure équipée --}}
|
||||
{{#if armorMalus}}
|
||||
<div class="header-stat armor-malus-badge">
|
||||
<label>{{localize "CELESTOPOL.Armure.malusLabel"}}</label>
|
||||
<span>{{armorMalus}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="header-buttons">
|
||||
<a class="moon-standalone-btn" data-action="rollMoonDie" title="{{localize 'CELESTOPOL.Moon.standaloneTitle'}}">
|
||||
🌙
|
||||
</a>
|
||||
<a data-action="toggleSheet">
|
||||
<i class="fas {{#if isEditMode}}fa-eye{{else}}fa-edit{{/if}}"></i>
|
||||
</a>
|
||||
|
||||
@@ -27,38 +27,83 @@
|
||||
{{#if woundMalus}}
|
||||
<span class="dminus"> − {{abs woundMalus}}</span>
|
||||
{{/if}}
|
||||
{{#if armorMalus}}
|
||||
<span class="dminus armor-malus"> − {{abs armorMalus}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{#if woundLabel}}
|
||||
<div class="wound-info">⚠ {{woundLabel}}</div>
|
||||
{{/if}}
|
||||
{{#if armorMalus}}
|
||||
<div class="wound-info armor-info">🛡 {{localize "CELESTOPOL.Roll.armorMalus"}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="roll-form-rows">
|
||||
|
||||
{{!-- Difficulté : sélect standard OU input Corps PNJ en combat --}}
|
||||
{{!-- Difficulté : Corps PNJ en combat, fixe 11 en test normal --}}
|
||||
{{#if isCombat}}
|
||||
<div class="form-row-line form-corps-pnj">
|
||||
<label for="corpsPnj">{{localize "CELESTOPOL.Combat.corpsPnj"}}</label>
|
||||
<input type="number" id="corpsPnj" name="corpsPnj" value="7" min="1" max="30" class="corps-pnj-input">
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="form-row-line">
|
||||
<label for="difficulty">{{localize "CELESTOPOL.Roll.difficulty"}}</label>
|
||||
<select id="difficulty" name="difficulty">
|
||||
{{#each difficultyChoices as |diff key|}}
|
||||
<option value="{{key}}" {{#if (eq key ../defaultDifficulty)}}selected{{/if}}>
|
||||
{{localize diff.label}}{{#if diff.value}} ({{diff.value}}){{/if}}
|
||||
</option>
|
||||
|
||||
{{!-- Sélecteur de cible PNJ (si des tokens NPCs sont disponibles) --}}
|
||||
{{#if availableTargets.length}}
|
||||
<div class="form-row-line form-target-row">
|
||||
<label for="targetSelect"><i class="fas fa-crosshairs"></i> {{localize "CELESTOPOL.Combat.targetLabel"}}</label>
|
||||
<select id="targetSelect" name="targetSelect">
|
||||
<option value="">— {{localize "CELESTOPOL.Combat.targetAuto"}} —</option>
|
||||
{{#each availableTargets as |t|}}
|
||||
<option value="{{t.corps}}">{{t.name}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="form-row-line form-corps-pnj" id="corps-pnj-row">
|
||||
<label for="corpsPnj">{{localize "CELESTOPOL.Combat.corpsPnj"}}</label>
|
||||
<input type="number" id="corpsPnj" name="corpsPnj" value="7" min="1" max="30" class="corps-pnj-input">
|
||||
</div>
|
||||
<div class="form-row-line form-target-confirmed" id="target-confirmed-row" style="display:none">
|
||||
<span class="target-confirmed-badge"><i class="fas fa-crosshairs"></i> <span id="target-confirmed-name"></span></span>
|
||||
</div>
|
||||
|
||||
{{!-- Modificateurs tir (distance uniquement) --}}
|
||||
{{#if isRangedAttack}}
|
||||
<div class="form-row-line form-ranged-mod">
|
||||
<label for="rangedMod"><i class="fas fa-bullseye"></i> {{localize "CELESTOPOL.Combat.rangedMod"}}</label>
|
||||
<select id="rangedMod" name="rangedMod">
|
||||
{{#each rangedModChoices as |choice|}}
|
||||
<option value="{{choice.value}}" {{#if (eq choice.id "none")}}selected{{/if}}>{{choice.label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{else}}
|
||||
<div class="form-row-line form-threshold-fixed">
|
||||
<label>{{localize "CELESTOPOL.Roll.threshold"}}</label>
|
||||
<span class="threshold-value" id="threshold-display">11</span>
|
||||
</div>
|
||||
|
||||
{{!-- Test en opposition : le résultat sera masqué, MJ décide --}}
|
||||
{{#unless isResistance}}
|
||||
<div class="form-opposition-row">
|
||||
<label class="opposition-toggle" for="isOpposition">
|
||||
<input type="checkbox" id="isOpposition" name="isOpposition">
|
||||
<span class="opposition-icon">⚔</span>
|
||||
<span class="opposition-text">
|
||||
<span class="opposition-main">{{localize "CELESTOPOL.Roll.opposition"}}</span>
|
||||
<span class="opposition-sub">{{localize "CELESTOPOL.Roll.oppositionDesc"}}</span>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
{{/unless}}
|
||||
|
||||
{{/if}}
|
||||
|
||||
{{!-- Options non disponibles en test de résistance --}}
|
||||
{{#unless isResistance}}
|
||||
|
||||
{{!-- Modificateur & Aspect côte à côte --}}
|
||||
{{!-- Modificateur & Aspect côte à côte (tests normaux) --}}
|
||||
<div class="form-two-col">
|
||||
<div class="form-row-line">
|
||||
<label for="modifier">{{localize "CELESTOPOL.Roll.modifier"}}</label>
|
||||
@@ -78,6 +123,23 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{else}}
|
||||
|
||||
{{!-- En résistance : Bonus/Malus d'Aspect disponible --}}
|
||||
<div class="form-row-line form-resistance-aspect">
|
||||
<label for="aspectModifier">{{localize "CELESTOPOL.Roll.aspect"}}</label>
|
||||
<select id="aspectModifier" name="aspectModifier">
|
||||
{{#each aspectChoices as |choice|}}
|
||||
<option value="{{choice.value}}" {{#if (eq choice.value 0)}}selected{{/if}}>{{choice.label}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{/unless}}{{!-- /isResistance aspect --}}
|
||||
|
||||
{{!-- Options non disponibles en test de résistance (lune, destin, puiser, fortune) --}}
|
||||
{{#unless isResistance}}
|
||||
|
||||
{{!-- Dé de la Lune --}}
|
||||
<div class="form-moon-row">
|
||||
<label class="moon-toggle" for="rollMoonDie">
|
||||
@@ -132,7 +194,7 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{/unless}}{{!-- /isResistance --}}
|
||||
{{/unless}}{{!-- /isResistance (lune, destin, puiser, fortune) --}}
|
||||
|
||||
{{!-- Modificateur de situation (-8 à +8) — tous les jets --}}
|
||||
<div class="form-row-line form-situation-mod">
|
||||
|
||||
Reference in New Issue
Block a user