Initial commit — full system source + zero-engine-state.md reference
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
<div class="blade-runner chat-card actor-crit">
|
||||
<div class="card-content">
|
||||
<div class="flexrow align-center" style="margin: .5em 0;">
|
||||
<img src="{{img}}" class="flex-0" style="margin-right: 8px;" width="32" height="32"/>
|
||||
<div>
|
||||
<p style="margin: 0;">{{{result}}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,38 @@
|
||||
<div class="blade-runner chat-card actor-damage">
|
||||
<div class="card-content">
|
||||
{{#if (gt damage 0)}}
|
||||
<p>
|
||||
{{localize "FLBR.CHAT.DamageDealt" name=name amount=damage}}
|
||||
{{#if broken}}
|
||||
<br/>
|
||||
<span class="broken">
|
||||
{{#if vroom}}
|
||||
{{{config.Icons.buttons.pierce}}} {{toUpperCase (localize "FLBR.Wrecked")}}
|
||||
{{else}}
|
||||
{{{config.Icons.buttons.lethal}}} {{toUpperCase (localize "FLBR.Broken")}}
|
||||
{{/if}}
|
||||
</span>
|
||||
{{/if}}
|
||||
</p>
|
||||
{{else}}
|
||||
<p>{{localize "FLBR.CHAT.NoDamageDealt" name=name}}</p>
|
||||
{{/if}}
|
||||
{{#if armored}}
|
||||
<hr/>
|
||||
<p class="hint">
|
||||
<small>
|
||||
{{localize "FLBR.CHAT.InitialDamageDealt" damage=initialDamage}}
|
||||
{{#if (gt damage 0)}}
|
||||
{{#if (eq damage initialDamage)}}
|
||||
{{localize "FLBR.CHAT.ArmorNoEffect"}}
|
||||
{{else}}
|
||||
{{localize "FLBR.CHAT.ArmorDeflectedDamage" damage=deflectedDamage}}
|
||||
{{/if}}
|
||||
{{else}}
|
||||
{{localize "FLBR.CHAT.ArmorDeflectedAllDamage"}}
|
||||
{{/if}}
|
||||
</small>
|
||||
</p>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,56 @@
|
||||
<section data-application-part="character" class="standard-form">
|
||||
{{#if (eq document.type "character")}}
|
||||
<fieldset>
|
||||
<legend>{{localize "FLBR.SHEET_CONFIG.CharacterConfiguration"}}</legend>
|
||||
<div class="form-group">
|
||||
<label>{{localize "FLBR.SHEET_CONFIG.CharacterSubtype"}}</label>
|
||||
<select name="system.subtype">
|
||||
{{selectOptions types selected=document.system.subtype localize=true}}
|
||||
</select>
|
||||
<p class="hint">{{localize "FLBR.SHEET_CONFIG.CharacterSubtypeHint"}}</p>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
<div class="form-group">
|
||||
<label>{{localize "FLBR.SHEET_CONFIG.HealthMaxModifier"}}</label>
|
||||
<input type="text" name="system.health.mod" value="{{numberFormat document.system.health.mod sign=true}}" data-dtype="Number"{{#unless isGM}} disabled{{/unless}}/>
|
||||
<p class="hint">{{localize "FLBR.SHEET_CONFIG.HealthMaxModifierHint"}}</p>
|
||||
</div>
|
||||
{{!-- <div class="form-group">
|
||||
<label>{{localize "FLBR.SHEET_CONFIG.HealthPermanentLoss"}}</label>
|
||||
<input type="number" name="system.health.permanentLoss" value="{{document.system.health.permanentLoss}}" max="0"{{#unless isGM}} disabled{{/unless}}/>
|
||||
<p class="hint">{{localize "FLBR.SHEET_CONFIG.HealthPermanentLossHint"}}</p>
|
||||
</div> --}}
|
||||
|
||||
{{#if (eq document.system.subtype "pc")}}
|
||||
<div class="form-group">
|
||||
<label>{{localize "FLBR.SHEET_CONFIG.ResolveMaxModifier"}}</label>
|
||||
<input type="text" name="system.resolve.mod" value="{{numberFormat document.system.resolve.mod sign=true}}" data-dtype="Number"{{#unless isGM}} disabled{{/unless}}/>
|
||||
<p class="hint">{{localize "FLBR.SHEET_CONFIG.ResolveMaxModifierHint"}}</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{{localize "FLBR.SHEET_CONFIG.ResolvePermanentLoss"}}</label>
|
||||
<input type="number" name="system.resolve.permanentLoss" value="{{document.system.resolve.permanentLoss}}" max="0"{{#unless isGM}} disabled{{/unless}}/>
|
||||
<p class="hint">{{localize "FLBR.SHEET_CONFIG.ResolvePermanentLossHint"}}</p>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<hr/>
|
||||
|
||||
<div class="form-group">
|
||||
<label>{{localize "FLBR.SHEET_CONFIG.Maneuverability"}}</label>
|
||||
{{scoreSelector "system.attributes.mvr.value" selected=document.system.attributes.mvr.value}}
|
||||
<p class="hint">{{localize "FLBR.SHEET_CONFIG.ManeuverabilityHint"}}</p>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
<div class="form-group">
|
||||
<label>{{localize "FLBR.SHEET_CONFIG.UnlimitedPush"}}</label>
|
||||
<input type="checkbox" name="flags.bladerunner.unlimitedPush" {{checked document.flags.bladerunner.unlimitedPush}} />
|
||||
<p class="hint">{{localize "FLBR.SHEET_CONFIG.UnlimitedPushHint"}}</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
{{/if}}
|
||||
</section>
|
||||
@@ -0,0 +1,794 @@
|
||||
<form class="{{cssClass}} zero-engine" autocomplete="off">
|
||||
|
||||
{{!-- SHEET HEADER --}}
|
||||
<div class="sheet-header"
|
||||
>
|
||||
{{#if drugAlerts.length}}
|
||||
<div class="drug-alerts">
|
||||
{{#each drugAlerts}}
|
||||
<div class="drug-alert {{this.state}}">
|
||||
<div class="drug-alert-main">
|
||||
<span class="drug-alert-title">{{this.name}}</span>
|
||||
<span class="drug-alert-duration">{{this.duration}}</span>
|
||||
</div>
|
||||
<div class="drug-alert-meta">{{this.summary}}</div>
|
||||
<div class="drug-alert-actions">
|
||||
<button type="button" class="drug-off-btn" data-item-id="{{this.itemId}}" title="Stop Drug Effect">
|
||||
<i class="fas fa-power-off"></i> Off
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- TOP ROW: Portrait + Name + Key Stats --}}
|
||||
<div class="header-top-row">
|
||||
<div class="avatar">
|
||||
<img class="profile" src="{{actor.img}}" data-edit="img" data-tooltip="{{actor.name}}"/>
|
||||
</div>
|
||||
<div class="header-top-info">
|
||||
<div class="actor-name">
|
||||
<input type="text" name="name" value="{{actor.name}}" placeholder="Character Name"/>
|
||||
</div>
|
||||
<div class="header-top-stats">
|
||||
<div class="mini-stat">
|
||||
<span class="mini-stat-label">SCL</span>
|
||||
<input type="number" name="system.details.scl" value="{{system.details.scl}}" placeholder="10" />
|
||||
</div>
|
||||
<div class="mini-stat">
|
||||
<span class="mini-stat-label">Credits</span>
|
||||
<input type="number" name="system.details.credits" value="{{system.details.credits}}" placeholder="500" />
|
||||
</div>
|
||||
<div class="init-buttons-inline">
|
||||
<button type="button" class="init-agi" title="Initiative: AGI + Mobility (base score) + roll successes">⚡ AGI+MOB</button>
|
||||
<button type="button" class="init-wit" title="Initiative: WIT + Observation (base score) + roll successes">⚡ WIT+OBS</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- CHARACTER DETAILS ROW --}}
|
||||
<div class="header-details-row">
|
||||
<div class="detail-field">
|
||||
<label>Race/Species</label>
|
||||
<select name="system.race">
|
||||
<option value="">-- Select --</option>
|
||||
<option value="human" {{#if (eq system.race "human")}}selected{{/if}}>Human</option>
|
||||
<option value="ebon" {{#if (eq system.race "ebon")}}selected{{/if}}>Ebon</option>
|
||||
<option value="brainwaster" {{#if (eq system.race "brainwaster")}}selected{{/if}}>Brain Waster</option>
|
||||
<option value="stormer" {{#if (eq system.race "stormer")}}selected{{/if}}>Stormer (313 Malice)</option>
|
||||
<option value="shaktar" {{#if (eq system.race "shaktar")}}selected{{/if}}>Shaktar</option>
|
||||
<option value="wraith" {{#if (eq system.race "wraith")}}selected{{/if}}>Wraith Raider</option>
|
||||
<option value="frother" {{#if (eq system.race "frother")}}selected{{/if}}>Frother</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="detail-field">
|
||||
<label>Training Package</label>
|
||||
<select name="system.training">
|
||||
<option value="">-- Select --</option>
|
||||
<option value="scout" {{#if (eq system.training "scout")}}selected{{/if}}>Scout</option>
|
||||
<option value="investigator" {{#if (eq system.training "investigator")}}selected{{/if}}>Investigator</option>
|
||||
<option value="corporate" {{#if (eq system.training "corporate")}}selected{{/if}}>Corporate</option>
|
||||
<option value="medic" {{#if (eq system.training "medic")}}selected{{/if}}>Medic / Field Surgeon</option>
|
||||
<option value="ebon-investigator" {{#if (eq system.training "ebon-investigator")}}selected{{/if}}>Ebon - Investigator</option>
|
||||
<option value="brainwaster-operative" {{#if (eq system.training "brainwaster-operative")}}selected{{/if}}>Brain Waster - Operative</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="detail-field">
|
||||
<label>Archetype</label>
|
||||
<input list="list-of-archetypes" type="text" name="system.archetype" value="{{system.archetype}}" placeholder="Investigator"/>
|
||||
<datalist id="list-of-archetypes">
|
||||
<option value="Operative">
|
||||
<option value="Investigator">
|
||||
<option value="Scout">
|
||||
<option value="Medic">
|
||||
<option value="Tech Specialist">
|
||||
<option value="Corporate Agent">
|
||||
</datalist>
|
||||
</div>
|
||||
<div class="detail-field armor-roll-field">
|
||||
<label>Armour</label>
|
||||
<button type="button" class="manual-armor-button header-armor-roll-btn" data-actor-id="{{actor._id}}" title="Run Armor Check">
|
||||
<i class="fas fa-shield-alt"></i> Armour Roll
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- VITALS ROW: Health, Resolve, Stress, Ebb --}}
|
||||
<div class="header-vitals-row">
|
||||
<div class="vital-box health-box">
|
||||
<label>Health</label>
|
||||
<div class="vital-values">
|
||||
<input type="number" name="system.derivedStats.health.value" value="{{system.derivedStats.health.value}}" />
|
||||
<span class="vital-separator">/</span>
|
||||
<input type="number" name="system.derivedStats.health.max" value="{{system.derivedStats.health.max}}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="vital-box resolve-box">
|
||||
<label>Resolve</label>
|
||||
<div class="vital-values">
|
||||
<input type="number" name="system.derivedStats.resolve.value" value="{{system.derivedStats.resolve.value}}" />
|
||||
<span class="vital-separator">/</span>
|
||||
<input type="number" name="system.derivedStats.resolve.max" value="{{system.derivedStats.resolve.max}}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="vital-box stress-vital">
|
||||
<label>Stress</label>
|
||||
<div class="stress-group">
|
||||
<input type="number" class="stress-value" name="system.derivedStats.stress" value="{{system.derivedStats.stress}}" />
|
||||
<button type="button" class="manual-panic-button" data-actor-id="{{actor._id}}" title="Roll Panic Check (1d6 + Stress)">
|
||||
<i class="fas fa-skull"></i> Panic
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{#if isEbbUser}}
|
||||
<div class="vital-box flux-vital">
|
||||
<label>Flux</label>
|
||||
<div class="vital-values">
|
||||
<input type="number" name="system.flux.value" value="{{system.flux.value}}" min="0" max="{{computedFluxMax}}" class="flux-current" />
|
||||
<span class="vital-separator">/</span>
|
||||
<span class="flux-max-display">{{computedFluxMax}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- CRITICAL INJURIES ROW --}}
|
||||
<div class="header-crits-row">
|
||||
<div class="crit-buttons">
|
||||
<button type="button" class="roll-physical-crit-btn" data-actor-id="{{actor._id}}" title="Roll Physical Critical (D66) - When Health = 0">
|
||||
<i class="fas fa-heart-broken"></i> Physical Critical
|
||||
</button>
|
||||
<button type="button" class="roll-mental-crit-btn" data-actor-id="{{actor._id}}" title="Roll Mental Critical (D66) - When Resolve = 0">
|
||||
<i class="fas fa-brain"></i> Mental Critical
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{!-- Active injuries display --}}
|
||||
{{#if system.criticalInjuries.physical.length}}
|
||||
<div class="active-injuries physical-injuries">
|
||||
<h4><i class="fas fa-heart-broken"></i> Physical Injuries</h4>
|
||||
{{#each system.criticalInjuries.physical}}
|
||||
<div class="injury-item {{#if this.lethal}}lethal-injury{{/if}}">
|
||||
<div class="injury-header">
|
||||
<strong>{{this.name}}</strong>
|
||||
{{#if this.lethal}}<span class="lethal-tag">LETHAL</span>{{/if}}
|
||||
<button type="button" class="delete-injury-btn" data-injury-type="physical" data-injury-index="{{@index}}" title="Remove Injury">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<p class="injury-effects">{{this.effects}}</p>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if system.criticalInjuries.mental.length}}
|
||||
<div class="active-injuries mental-injuries">
|
||||
<h4><i class="fas fa-brain"></i> Mental Injuries</h4>
|
||||
{{#each system.criticalInjuries.mental}}
|
||||
<div class="injury-item {{#if this.lethal}}lethal-injury{{/if}}">
|
||||
<div class="injury-header">
|
||||
<strong>{{this.name}}</strong>
|
||||
{{#if this.lethal}}<span class="lethal-tag">LETHAL</span>{{/if}}
|
||||
<button type="button" class="delete-injury-btn" data-injury-type="mental" data-injury-index="{{@index}}" title="Remove Injury">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<p class="injury-effects">{{this.effects}}</p>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- SHEET TABS --}}
|
||||
<div class="sheet-tabs">
|
||||
<a class="item" data-tab="stats">
|
||||
<i class="fas fa-chart-bar"></i> Stats & Skills
|
||||
</a>
|
||||
<a class="item" data-tab="equipment">
|
||||
<i class="fas fa-briefcase"></i> Equipment
|
||||
</a>
|
||||
{{#if isEbbUser}}
|
||||
<a class="item" data-tab="ebb">
|
||||
<i class="fas fa-bolt"></i> Ebb
|
||||
</a>
|
||||
{{/if}}
|
||||
<a class="item" data-tab="bio">
|
||||
<i class="fas fa-user"></i> Biography
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{!-- SHEET BODY --}}
|
||||
<div class="sheet-body">
|
||||
|
||||
{{!-- STATS TAB --}}
|
||||
<div class="tab" data-tab="stats">
|
||||
<div class="section-header">Attributes & Skills</div>
|
||||
|
||||
<div class="attr-skill-table">
|
||||
{{!-- STRENGTH COLUMN --}}
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Strength</div>
|
||||
<div class="attr-value-row">
|
||||
<button type="button" class="attr-btn" data-action="decrement" data-attribute="strength">−</button>
|
||||
<div class="attr-value">{{system.attributes.strength.value}}</div>
|
||||
<button type="button" class="attr-btn" data-action="increment" data-attribute="strength">+</button>
|
||||
<button type="button" class="attr-roll-btn" data-attribute="strength" title="Roll Strength"><i class="fas fa-dice-d6"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="system.attributes.strength.value" value="{{system.attributes.strength.value}}" />
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Force</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="force" data-attribute="strength"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="force">−</button>
|
||||
<div class="skill-value">{{system.skills.force.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="force">+</button>
|
||||
<input type="hidden" name="system.skills.force.value" value="{{system.skills.force.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Melee</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="melee" data-attribute="strength"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="melee">−</button>
|
||||
<div class="skill-value">{{system.skills.melee.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="melee">+</button>
|
||||
<input type="hidden" name="system.skills.melee.value" value="{{system.skills.melee.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Stamina</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="stamina" data-attribute="strength"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="stamina">−</button>
|
||||
<div class="skill-value">{{system.skills.stamina.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="stamina">+</button>
|
||||
<input type="hidden" name="system.skills.stamina.value" value="{{system.skills.stamina.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- AGILITY COLUMN --}}
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Agility</div>
|
||||
<div class="attr-value-row">
|
||||
<button type="button" class="attr-btn" data-action="decrement" data-attribute="agility">−</button>
|
||||
<div class="attr-value">{{system.attributes.agility.value}}</div>
|
||||
<button type="button" class="attr-btn" data-action="increment" data-attribute="agility">+</button>
|
||||
<button type="button" class="attr-roll-btn" data-attribute="agility" title="Roll Agility"><i class="fas fa-dice-d6"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="system.attributes.agility.value" value="{{system.attributes.agility.value}}" />
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Marksmanship</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="marksmanship" data-attribute="agility"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="marksmanship">−</button>
|
||||
<div class="skill-value">{{system.skills.marksmanship.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="marksmanship">+</button>
|
||||
<input type="hidden" name="system.skills.marksmanship.value" value="{{system.skills.marksmanship.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Mobility</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="mobility" data-attribute="agility"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="mobility">−</button>
|
||||
<div class="skill-value">{{system.skills.mobility.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="mobility">+</button>
|
||||
<input type="hidden" name="system.skills.mobility.value" value="{{system.skills.mobility.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Stealth</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="stealth" data-attribute="agility"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="stealth">−</button>
|
||||
<div class="skill-value">{{system.skills.stealth.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="stealth">+</button>
|
||||
<input type="hidden" name="system.skills.stealth.value" value="{{system.skills.stealth.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- WITS COLUMN --}}
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Wits</div>
|
||||
<div class="attr-value-row">
|
||||
<button type="button" class="attr-btn" data-action="decrement" data-attribute="wits">−</button>
|
||||
<div class="attr-value">{{system.attributes.wits.value}}</div>
|
||||
<button type="button" class="attr-btn" data-action="increment" data-attribute="wits">+</button>
|
||||
<button type="button" class="attr-roll-btn" data-attribute="wits" title="Roll Wits"><i class="fas fa-dice-d6"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="system.attributes.wits.value" value="{{system.attributes.wits.value}}" />
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Crafting</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="crafting" data-attribute="wits"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="crafting">−</button>
|
||||
<div class="skill-value">{{system.skills.crafting.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="crafting">+</button>
|
||||
<input type="hidden" name="system.skills.crafting.value" value="{{system.skills.crafting.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Observation</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="observation" data-attribute="wits"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="observation">−</button>
|
||||
<div class="skill-value">{{system.skills.observation.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="observation">+</button>
|
||||
<input type="hidden" name="system.skills.observation.value" value="{{system.skills.observation.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Survival</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="survival" data-attribute="wits"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="survival">−</button>
|
||||
<div class="skill-value">{{system.skills.survival.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="survival">+</button>
|
||||
<input type="hidden" name="system.skills.survival.value" value="{{system.skills.survival.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- EMPATHY COLUMN --}}
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Empathy</div>
|
||||
<div class="attr-value-row">
|
||||
<button type="button" class="attr-btn" data-action="decrement" data-attribute="empathy">−</button>
|
||||
<div class="attr-value">{{system.attributes.empathy.value}}</div>
|
||||
<button type="button" class="attr-btn" data-action="increment" data-attribute="empathy">+</button>
|
||||
<button type="button" class="attr-roll-btn" data-attribute="empathy" title="Roll Empathy"><i class="fas fa-dice-d6"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="system.attributes.empathy.value" value="{{system.attributes.empathy.value}}" />
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Healing</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="healing" data-attribute="empathy"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="healing">−</button>
|
||||
<div class="skill-value">{{system.skills.healing.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="healing">+</button>
|
||||
<input type="hidden" name="system.skills.healing.value" value="{{system.skills.healing.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Insight</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="insight" data-attribute="empathy"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="insight">−</button>
|
||||
<div class="skill-value">{{system.skills.insight.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="insight">+</button>
|
||||
<input type="hidden" name="system.skills.insight.value" value="{{system.skills.insight.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Persuasion</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="persuasion" data-attribute="empathy"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="persuasion">−</button>
|
||||
<div class="skill-value">{{system.skills.persuasion.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="persuasion">+</button>
|
||||
<input type="hidden" name="system.skills.persuasion.value" value="{{system.skills.persuasion.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
{{#if isEbbUser}}
|
||||
<div class="skill-row ebb-skill-row">
|
||||
<label><i class="fas fa-bolt"></i> Ebb</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="ebb" data-attribute="empathy" title="Roll Ebb (Empathy + Ebb)"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="ebb">−</button>
|
||||
<div class="skill-value">{{system.skills.ebb.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="ebb">+</button>
|
||||
<input type="hidden" name="system.skills.ebb.value" value="{{system.skills.ebb.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Specialties Section --}}
|
||||
<div class="specialties-section">
|
||||
<h2 class="section-header">
|
||||
<i class="fas fa-star"></i> Specialties & Talents
|
||||
</h2>
|
||||
<div class="specialty-list">
|
||||
{{#each specialties}}
|
||||
<div class="specialty-item" data-item-id="{{this._id}}">
|
||||
<img class="specialty-img" src="{{this.img}}" width="32" height="32"/>
|
||||
<div class="specialty-info">
|
||||
<div class="specialty-name-row">
|
||||
<span class="specialty-name">{{this.name}}</span>
|
||||
<span class="specialty-package">{{this.system.package}}</span>
|
||||
<button type="button" class="delete-specialty-btn" data-item-id="{{this._id}}" title="Remove Specialty">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="specialty-effects">{{this.system.effects}}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless specialties.length}}
|
||||
<div class="specialty-empty">
|
||||
<em>Drag specialties from the compendium to add them here.</em>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- EQUIPMENT TAB --}}
|
||||
<div class="tab" data-tab="equipment">
|
||||
|
||||
{{!-- RANGED WEAPONS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-crosshairs"></i> Ranged Weapons</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each rangedWeapons}}
|
||||
<div class="weapon-item" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge ranged">{{this.system.weaponType}}</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>DMG</strong> {{this.system.damage}}</span>
|
||||
<span class="weapon-stat"><strong>Range</strong> {{this.system.range}}</span>
|
||||
<span class="weapon-stat"><strong>ROF</strong> {{this.system.rof}}</span>
|
||||
<span class="weapon-stat"><strong>AP</strong> {{this.system.ap}}</span>
|
||||
<span class="weapon-stat"><strong>Gear</strong> +{{this.system.gearBonus}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-ammo-display">
|
||||
<span class="ammo-count {{#if (eq this.system.ammo 0)}}ammo-empty{{/if}}">{{#if this.system.ammo}}{{this.system.ammo}}{{else}}0{{/if}}</span>
|
||||
<span class="ammo-separator">/</span>
|
||||
<span class="ammo-max">{{#if this.system.magazine}}{{this.system.magazine}}{{else}}0{{/if}}</span>
|
||||
<button type="button" class="weapon-reload-btn" data-item-id="{{this._id}}" title="Reload to full magazine">
|
||||
<i class="fas fa-redo-alt"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="toggle-equip-btn {{#if this.system.equipped}}equipped{{/if}}" data-item-id="{{this._id}}" title="Toggle Equipped">
|
||||
<i class="fas fa-hand-paper"></i>
|
||||
</button>
|
||||
<button type="button" class="weapon-roll-btn" data-item-id="{{this._id}}" data-weapon-category="ranged" title="Roll Marksmanship + Gear Bonus">
|
||||
<i class="fas fa-dice-d6"></i>
|
||||
</button>
|
||||
<button type="button" class="delete-weapon-btn" data-item-id="{{this._id}}" title="Remove Weapon">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless rangedWeapons.length}}
|
||||
<div class="weapon-empty"><em>Drag ranged weapons from the compendium.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- MELEE WEAPONS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-fist-raised"></i> Melee Weapons</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each meleeWeapons}}
|
||||
<div class="weapon-item" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge melee">{{this.system.weaponType}}</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>DMG</strong> {{this.system.damage}}</span>
|
||||
<span class="weapon-stat"><strong>AP</strong> {{this.system.ap}}</span>
|
||||
<span class="weapon-stat"><strong>Gear</strong> +{{this.system.gearBonus}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="toggle-equip-btn {{#if this.system.equipped}}equipped{{/if}}" data-item-id="{{this._id}}" title="Toggle Equipped">
|
||||
<i class="fas fa-hand-paper"></i>
|
||||
</button>
|
||||
<button type="button" class="weapon-roll-btn" data-item-id="{{this._id}}" data-weapon-category="melee" title="Roll Melee + Gear Bonus">
|
||||
<i class="fas fa-dice-d6"></i>
|
||||
</button>
|
||||
<button type="button" class="delete-weapon-btn" data-item-id="{{this._id}}" title="Remove Weapon">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless meleeWeapons.length}}
|
||||
<div class="weapon-empty"><em>Drag melee weapons from the compendium.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- ARMOUR --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-shield-alt"></i> Armour</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each armors}}
|
||||
<div class="weapon-item armor-item" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name armor-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge">{{this.system.armorDice}}({{this.system.armorAuto}})</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>Armor</strong> {{this.system.armorDice}}({{this.system.armorAuto}})</span>
|
||||
<span class="weapon-stat"><strong>Stat</strong> {{#if (gt this.system.statMod 0)}}+{{/if}}{{this.system.statMod}}</span>
|
||||
<span class="weapon-stat"><strong>Skill</strong> {{#if (gt this.system.skillMod 0)}}+{{/if}}{{this.system.skillMod}}</span>
|
||||
<span class="weapon-stat"><strong>INIT</strong> {{#if (gt this.system.initiativeMod 0)}}+{{/if}}{{this.system.initiativeMod}}</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>Stat Ref</strong> {{#if this.system.statModTarget}}{{capitalize this.system.statModTarget}}{{else}}—{{/if}}</span>
|
||||
<span class="weapon-stat"><strong>Skill Ref</strong> {{#if this.system.skillModTarget}}{{capitalize this.system.skillModTarget}}{{else}}—{{/if}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="toggle-equip-btn {{#if this.system.equipped}}equipped{{/if}}" data-item-id="{{this._id}}" title="Toggle Equipped">
|
||||
<i class="fas fa-hand-paper"></i>
|
||||
</button>
|
||||
<button type="button" class="armor-roll-btn" data-item-id="{{this._id}}" title="Roll Armor Check for this armour">
|
||||
<i class="fas fa-shield-alt"></i>
|
||||
</button>
|
||||
<button type="button" class="delete-armor-btn" data-item-id="{{this._id}}" title="Remove Armour">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless armors.length}}
|
||||
<div class="weapon-empty"><em>Drag armor items here.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- GEAR ITEMS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-toolbox"></i> Gear Items</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each gearItems}}
|
||||
<div class="weapon-item gear-item" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name gear-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge">{{#if this.system.quantity}}{{this.system.quantity}}{{else}}1{{/if}}x</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>Weight</strong> {{#if this.system.weight}}{{this.system.weight}}{{else}}0{{/if}}</span>
|
||||
<span class="weapon-stat"><strong>INIT</strong> {{#if (gt this.system.initiativeMod 0)}}+{{/if}}{{this.system.initiativeMod}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="toggle-equip-btn {{#if this.system.equipped}}equipped{{/if}}" data-item-id="{{this._id}}" title="Toggle Equipped">
|
||||
<i class="fas fa-hand-paper"></i>
|
||||
</button>
|
||||
<button type="button" class="delete-gear-btn" data-item-id="{{this._id}}" title="Remove Gear">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless gearItems.length}}
|
||||
<div class="weapon-empty"><em>Drag equipment items here.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- DRUGS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-pills"></i> Drugs</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each drugs}}
|
||||
<div class="weapon-item drug-item {{#if this.system.active}}drug-active{{/if}} {{#if this.system.withdrawalActive}}drug-withdrawal{{/if}}" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name drug-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge">{{#if this.system.quantity}}{{this.system.quantity}}{{else}}0{{/if}}x</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
{{#if this.system.active}}
|
||||
<span class="weapon-stat"><strong>ACTIVE</strong> {{#if this.system.activeDuration}}{{this.system.activeDuration}}{{else}}—{{/if}}</span>
|
||||
{{/if}}
|
||||
{{#if this.system.withdrawalActive}}
|
||||
<span class="weapon-stat"><strong>WITHDRAWAL</strong> {{#if this.system.withdrawalDuration}}{{this.system.withdrawalDuration}}{{else}}—{{/if}}</span>
|
||||
{{/if}}
|
||||
{{#unless this.system.active}}
|
||||
{{#unless this.system.withdrawalActive}}
|
||||
<span class="weapon-stat"><strong>Status</strong> Inactive</span>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
{{#if this.system.active}}
|
||||
<button type="button" class="drug-off-btn" data-item-id="{{this._id}}" title="Stop Drug and begin withdrawal">
|
||||
<i class="fas fa-power-off"></i>
|
||||
</button>
|
||||
{{else}}
|
||||
{{#if this.system.withdrawalActive}}
|
||||
<button type="button" class="drug-clear-withdrawal-btn" data-item-id="{{this._id}}" title="Clear Withdrawal Effect">
|
||||
<i class="fas fa-ban"></i>
|
||||
</button>
|
||||
{{else}}
|
||||
<button type="button" class="drug-activate-btn" data-item-id="{{this._id}}" title="Activate Drug (consumes 1 dose)">
|
||||
<i class="fas fa-bolt"></i>
|
||||
</button>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<button type="button" class="delete-drug-btn" data-item-id="{{this._id}}" title="Remove Drug">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless drugs.length}}
|
||||
<div class="weapon-empty"><em>Drag drug items here.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- GENERAL EQUIPMENT NOTES --}}
|
||||
<div class="equipment-section">
|
||||
<h2 class="section-header"><i class="fas fa-briefcase"></i> Equipment Notes</h2>
|
||||
<div class="editor">
|
||||
<textarea name="system.equipment" rows="10" placeholder="List armor, gear, consumables, etc...">{{system.equipment}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- EBB TAB (Ebon / Brain Waster only) --}}
|
||||
{{#if isEbbUser}}
|
||||
<div class="tab" data-tab="ebb">
|
||||
|
||||
{{!-- FLUX STATUS BAR --}}
|
||||
<div class="ebb-tab-header">
|
||||
<div class="ebb-flux-status">
|
||||
<div class="ebb-flux-label"><i class="fas fa-bolt"></i> FLUX</div>
|
||||
<div class="ebb-flux-track">
|
||||
{{!-- NO name attr here — system.flux.value is bound once in Stats tab; duplicate causes "X,X" corruption --}}
|
||||
<input type="number" value="{{system.flux.value}}" min="0" max="{{computedFluxMax}}" class="ebb-flux-input ebb-flux-mirror"
|
||||
data-mirrors="system.flux.value" />
|
||||
<span class="ebb-flux-sep">/</span>
|
||||
<span class="ebb-flux-max">{{computedFluxMax}}</span>
|
||||
</div>
|
||||
<div class="ebb-flux-actions">
|
||||
<button type="button" class="ebb-flux-recover-btn" title="Recover 1 Flux (stretch rest)">
|
||||
<i class="fas fa-plus-circle"></i> +1 Flux
|
||||
</button>
|
||||
<button type="button" class="ebb-flux-full-btn" title="Restore full Flux (shift rest)">
|
||||
<i class="fas fa-battery-full"></i> Full Rest
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- EBB SKILL --}}
|
||||
<div class="ebb-skill-panel">
|
||||
<div class="ebb-skill-label"><i class="fas fa-dice-d6"></i> Ebb Skill</div>
|
||||
<div class="ebb-skill-controls">
|
||||
<button type="button" class="skill-roll ebb-tab-skill-roll" data-skill="ebb" data-attribute="empathy" title="Roll Empathy + Ebb">
|
||||
<i class="fas fa-dice-d6"></i> Roll
|
||||
</button>
|
||||
<button type="button" class="skill-decrement" data-skill="ebb">−</button>
|
||||
<div class="ebb-skill-value skill-value">{{system.skills.ebb.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="ebb">+</button>
|
||||
{{!-- NO hidden input here — the Stats tab already binds system.skills.ebb.value --}}
|
||||
</div>
|
||||
<div class="ebb-dice-summary">Pool: Empathy {{system.attributes.empathy.value}} + Ebb {{system.skills.ebb.value}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- FORMULAE LIST --}}
|
||||
<div class="ebb-formulae-section">
|
||||
<h2 class="section-header"><i class="fas fa-scroll"></i> Known Formulae
|
||||
<span class="ebb-formula-count">{{ebbFormulae.length}} known</span>
|
||||
</h2>
|
||||
|
||||
{{!-- Group formulae by discipline --}}
|
||||
<div class="ebb-formulae-list">
|
||||
{{#each ebbFormulae}}
|
||||
<div class="ebb-formula-item" data-item-id="{{this._id}}">
|
||||
<img class="ebb-formula-icon" src="{{this.img}}" width="40" height="40" title="{{this.system.discipline}}"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge ebb-discipline-badge ebb-disc-{{this.system.discipline}}">{{this.system.discipline}}</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat ebb-flux-cost"><i class="fas fa-bolt"></i> {{this.system.fluxCost}}</span>
|
||||
<span class="weapon-stat"><strong>SUC</strong> {{this.system.successes}}</span>
|
||||
{{#if this.system.range}}<span class="weapon-stat"><strong>Range</strong> {{this.system.range}}</span>{{/if}}
|
||||
{{#if this.system.duration}}<span class="weapon-stat"><strong>Dur</strong> {{this.system.duration}}</span>{{/if}}
|
||||
</div>
|
||||
{{#if this.system.effect}}
|
||||
<div class="ebb-effect-row">
|
||||
<span class="ebb-effect-text">{{this.system.effect}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="ebb-formula-roll-btn" data-item-id="{{this._id}}" title="Use {{this.name}} (costs {{this.system.fluxCost}} Flux)">
|
||||
<i class="fas fa-bolt"></i>
|
||||
</button>
|
||||
<button type="button" class="ebb-formula-edit-btn" data-item-id="{{this._id}}" title="Edit Formula">
|
||||
<i class="fas fa-edit"></i>
|
||||
</button>
|
||||
<button type="button" class="ebb-formula-delete-btn" data-item-id="{{this._id}}" title="Remove Formula">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless ebbFormulae.length}}
|
||||
<div class="weapon-empty">
|
||||
<em>No formulae known. Drag Ebb items from the world item list.</em>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- BIO TAB --}}
|
||||
<div class="tab" data-tab="bio">
|
||||
<div class="bio-section">
|
||||
<h2>Biography</h2>
|
||||
|
||||
<h3>Background</h3>
|
||||
<div class="editor">
|
||||
<textarea name="system.bio.background" rows="8" placeholder="Character background and history...">{{system.bio.background}}</textarea>
|
||||
</div>
|
||||
|
||||
<h3>Appearance</h3>
|
||||
<div class="editor">
|
||||
<textarea name="system.bio.appearance" rows="5" placeholder="Physical description...">{{system.bio.appearance}}</textarea>
|
||||
</div>
|
||||
|
||||
<h3>Personality</h3>
|
||||
<div class="editor">
|
||||
<textarea name="system.bio.personality" rows="5" placeholder="Personality traits and behavior...">{{system.bio.personality}}</textarea>
|
||||
</div>
|
||||
|
||||
<h3>Notes</h3>
|
||||
<div class="editor">
|
||||
<textarea name="system.bio.notes" rows="6" placeholder="Additional notes...">{{system.bio.notes}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,309 @@
|
||||
{{!-- ZERO ENGINE Mk2 — SLA Industries Dark Sheet --}}
|
||||
<div class="zero-engine sla-mk2">
|
||||
|
||||
{{!-- ═══ HEADER ══════════════════════════════════════════════════════════ --}}
|
||||
<header class="mk2-header">
|
||||
<img class="mk2-portrait" src="{{img}}" title="{{name}}" />
|
||||
<div class="mk2-identity">
|
||||
<input class="mk2-name" type="text" name="name" value="{{name}}" placeholder="OPERATIVE NAME" />
|
||||
<div class="mk2-id-row">
|
||||
<label class="mk2-field-pair">SCL<input type="number" name="system.details.scl" value="{{system.details.scl}}" /></label>
|
||||
<label class="mk2-field-pair">c<input type="number" name="system.details.credits" value="{{system.details.credits}}" /></label>
|
||||
<span class="mk2-race-tag">{{#if system.race.[0]}}{{system.race.[0]}}{{else}}—{{/if}}</span>
|
||||
<span class="mk2-race-tag dim">{{#if archetype}}{{archetype}}{{else}}—{{/if}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mk2-init-col">
|
||||
<span class="mk2-init-label">INITIATIVE</span>
|
||||
<button type="button" class="init-agi mk2-init-btn red">AGI+MOB</button>
|
||||
<button type="button" class="init-wit mk2-init-btn grey">WIT+OBS</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{!-- ═══ VITALS ═══════════════════════════════════════════════════════════ --}}
|
||||
<div class="mk2-vitals">
|
||||
<div class="mk2-vital red">
|
||||
<span class="vl">HP</span>
|
||||
<input type="number" name="system.derivedStats.health.value" value="{{system.derivedStats.health.value}}" class="vnum red" />
|
||||
<span class="vsep">/</span>
|
||||
<input type="number" name="system.derivedStats.health.max" value="{{system.derivedStats.health.max}}" class="vnum dim" />
|
||||
</div>
|
||||
<div class="mk2-vital blue">
|
||||
<span class="vl">RES</span>
|
||||
<input type="number" name="system.derivedStats.resolve.value" value="{{system.derivedStats.resolve.value}}" class="vnum blue" />
|
||||
<span class="vsep">/</span>
|
||||
<input type="number" name="system.derivedStats.resolve.max" value="{{system.derivedStats.resolve.max}}" class="vnum dim" />
|
||||
</div>
|
||||
<div class="mk2-vital orange">
|
||||
<span class="vl">STRESS</span>
|
||||
<input type="number" name="system.stress" value="{{system.stress}}" class="vnum orange" />
|
||||
</div>
|
||||
{{#if isEbbUser}}
|
||||
<div class="mk2-vital purple">
|
||||
<span class="vl">FLUX</span>
|
||||
<input type="number" name="system.flux.value" value="{{system.flux.value}}" class="vnum purple" />
|
||||
<span class="vsep">/</span>
|
||||
<span class="vnum dim">{{computedFluxMax}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="mk2-crit-col">
|
||||
<button type="button" class="physical-critical-btn mk2-crit-btn red">💔 PHYS CRIT</button>
|
||||
<button type="button" class="mental-critical-btn mk2-crit-btn purple">🧠 MENTAL CRIT</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- ═══ TAB NAV ══════════════════════════════════════════════════════════ --}}
|
||||
<nav class="mk2-nav">
|
||||
<a class="mk2-tab active" data-tab="mk2-stats">STATS</a>
|
||||
<a class="mk2-tab" data-tab="mk2-combat">COMBAT</a>
|
||||
<a class="mk2-tab" data-tab="mk2-finances">FINANCES</a>
|
||||
{{#if isEbbUser}}<a class="mk2-tab ebb-tab" data-tab="mk2-ebb">EBB</a>{{/if}}
|
||||
<a class="mk2-tab" data-tab="mk2-gear">GEAR</a>
|
||||
<a class="mk2-tab" data-tab="mk2-notes">NOTES</a>
|
||||
</nav>
|
||||
|
||||
{{!-- ═══════════════════ STATS ═══════════════════════════════════════════ --}}
|
||||
<div class="mk2-panel active" data-panel="mk2-stats">
|
||||
|
||||
{{!-- 4-column attribute+skill grid --}}
|
||||
<div class="mk2-attr-skill-grid">
|
||||
{{#each attributeGroups}}
|
||||
<div class="mk2-attr-col {{colorClass}}">
|
||||
{{!-- Attribute header --}}
|
||||
<div class="mk2-attr-head">
|
||||
<span class="mk2-attr-abbr">{{label}}</span>
|
||||
<input type="number" class="mk2-attr-val" name="system.attributes.{{key}}.value" value="{{value}}" min="1" max="5" />
|
||||
<button type="button" class="attr-roll-btn mk2-attr-roll" data-attribute="{{key}}">▶</button>
|
||||
</div>
|
||||
{{!-- 3 skills beneath --}}
|
||||
{{#each skills}}
|
||||
<div class="mk2-skill-entry">
|
||||
<button type="button" class="skill-roll mk2-sk-roll" data-skill="{{key}}" data-attribute="{{attribute}}">▶</button>
|
||||
<span class="mk2-sk-name">{{label}}</span>
|
||||
<div class="mk2-sk-dots">{{#each dots}}<span class="mk2-dot {{#if filled}}on{{/if}}"></span>{{/each}}</div>
|
||||
<span class="mk2-sk-num">{{value}}</span>
|
||||
<input type="hidden" name="system.skills.{{key}}.value" value="{{value}}" />
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#if (eq key "empathy")}}
|
||||
{{#if ../isEbbUser}}
|
||||
<div class="mk2-skill-entry ebb-sk">
|
||||
<span class="mk2-sk-roll" style="width:16px;"></span>
|
||||
<span class="mk2-sk-name" style="color:#bb88ff;">Ebb</span>
|
||||
<div class="mk2-sk-dots">{{#each ../skillsWithDots}}{{#if (eq key "ebb")}}{{#each dots}}<span class="mk2-dot ebb-dot {{#if filled}}on{{/if}}"></span>{{/each}}{{/if}}{{/each}}</div>
|
||||
<span class="mk2-sk-num" style="color:#bb88ff;">{{../system.skills.ebb.value}}</span>
|
||||
<input type="hidden" name="system.skills.ebb.value" value="{{../system.skills.ebb.value}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
{{!-- Specialties --}}
|
||||
<div class="mk2-subhead">SPECIALTIES & RACIAL ABILITIES <a class="item-create mk2-add" data-type="specialty">+ ADD</a></div>
|
||||
{{#each items}}
|
||||
{{#if (eq type "specialty")}}
|
||||
<div class="mk2-spec {{#if (eq system.category 'racial')}}racial{{/if}}">
|
||||
<span class="mk2-spec-name">{{name}}</span>
|
||||
<span class="mk2-spec-fx">{{system.effects}}</span>
|
||||
<a class="item-edit mk2-ico" data-item-id="{{_id}}">✎</a>
|
||||
<a class="item-delete mk2-ico del" data-item-id="{{_id}}">✕</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
||||
{{!-- Armor quick-view on stats panel --}}
|
||||
<div class="mk2-subhead" style="margin-top:10px;">ARMOUR <a class="item-create mk2-add" data-type="armor">+ ADD</a></div>
|
||||
{{#each items}}
|
||||
{{#if (eq type "armor")}}
|
||||
<div class="mk2-armor-stat-row">
|
||||
<span class="mk2-armor-stat-name">{{name}}</span>
|
||||
<span class="mk2-armor-stat-val">{{system.armorDice}}d6 + {{system.armorAuto}}</span>
|
||||
<button type="button" class="armor-roll-btn mk2-action-btn grey" data-item-id="{{_id}}">ROLL AR</button>
|
||||
<a class="item-delete mk2-ico del" data-item-id="{{_id}}">✕</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
{{#unless armors.length}}<div class="mk2-none-msg">No armour equipped</div>{{/unless}}
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- ═══════════════════ COMBAT ════════════════════════════════════════════ --}}
|
||||
<div class="mk2-panel" data-panel="mk2-combat">
|
||||
|
||||
<div class="mk2-subhead">WEAPONS <a class="item-create mk2-add" data-type="weapon">+ ADD</a></div>
|
||||
{{#each weaponItems}}
|
||||
<div class="mk2-wpn {{#if system.ammoEmpty}}mk2-wpn-empty{{/if}}">
|
||||
<div class="mk2-wpn-row1">
|
||||
<span class="mk2-wpn-name">{{name}}</span>
|
||||
<span class="mk2-stat-pill">DMG {{system.damage}}</span>
|
||||
{{#if system.ap}}<span class="mk2-stat-pill">AP {{system.apEffective}}</span>{{/if}}
|
||||
<span class="mk2-stat-pill">{{system.range}}</span>
|
||||
{{#if system.gearBonus}}<span class="mk2-stat-pill">+{{system.gearBonus}}</span>{{/if}}
|
||||
{{#if system.ammoEmpty}}<span class="mk2-ammo-empty-pill">🔒 EMPTY</span>{{/if}}
|
||||
<a class="item-edit mk2-ico" data-item-id="{{_id}}">✎</a>
|
||||
<a class="item-delete mk2-ico del" data-item-id="{{_id}}">✕</a>
|
||||
</div>
|
||||
{{#if (eq system.category "ranged")}}
|
||||
<div class="mk2-wpn-row2">
|
||||
{{#if caliber}}<span class="mk2-caliber">{{caliber}}</span>{{/if}}
|
||||
<div class="mk2-rb-group">
|
||||
<button type="button" class="round-select mk2-rb {{#if (eq roundType 'standard')}}rb-std{{/if}}" data-item-id="{{_id}}" data-round="standard">STD</button>
|
||||
<button type="button" class="round-select mk2-rb {{#if (eq roundType 'ap')}}rb-ap{{/if}}" data-item-id="{{_id}}" data-round="ap">AP</button>
|
||||
<button type="button" class="round-select mk2-rb {{#if (eq roundType 'he')}}rb-he{{/if}}" data-item-id="{{_id}}" data-round="he">HE</button>
|
||||
</div>
|
||||
<button type="button" class="weapon-roll-btn mk2-action-btn red mk2-attack-btn {{#if system.ammoEmpty}}mk2-btn-locked{{/if}}"
|
||||
data-item-id="{{_id}}" title="{{#if system.ammoEmpty}}OUT OF AMMO — rest to restore{{else}}Roll attack{{/if}}"
|
||||
{{#if system.ammoEmpty}}disabled{{/if}}>⚡ ATTACK</button>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="mk2-wpn-row2">
|
||||
<button type="button" class="weapon-roll-btn mk2-action-btn red mk2-attack-btn" data-item-id="{{_id}}">⚡ ATTACK</button>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
|
||||
<div class="mk2-subhead" style="margin-top:10px;">ARMOR <a class="item-create mk2-add" data-type="armor">+ ADD</a></div>
|
||||
{{#each items}}
|
||||
{{#if (eq type "armor")}}
|
||||
<div class="mk2-armor">
|
||||
<span class="mk2-armor-name">{{name}}</span>
|
||||
<span class="mk2-stat-pill teal">{{system.armorDice}}d6 + {{system.armorAuto}}</span>
|
||||
<a class="item-edit mk2-ico" data-item-id="{{_id}}">✎</a>
|
||||
<a class="item-delete mk2-ico del" data-item-id="{{_id}}">✕</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- ═══════════════════ FINANCES ═════════════════════════════════════════ --}}
|
||||
<div class="mk2-panel" data-panel="mk2-finances">
|
||||
<div class="mk2-credits-big">{{system.details.credits}}<span class="mk2-c-unit">c</span>
|
||||
{{#if system.finances.debt}}<span class="mk2-debt">⚠ DEBT {{system.finances.debt}}c</span>{{/if}}
|
||||
</div>
|
||||
<div class="mk2-fin-cols">
|
||||
<div class="mk2-fin-col">
|
||||
<div class="mk2-fin-head green">◈ INCOME / WEEK</div>
|
||||
<div class="mk2-fin-row"><label>Salary</label><div class="mk2-fin-amount"><input type="number" name="system.finances.income.salary" value="{{system.finances.income.salary}}" /><span>c</span></div></div>
|
||||
<div class="mk2-fin-row"><label>BPN Reward</label><div class="mk2-fin-amount"><input type="number" name="system.finances.income.bpnReward" value="{{system.finances.income.bpnReward}}" /><span>c</span></div></div>
|
||||
<div class="mk2-fin-row"><label>Other</label><div class="mk2-fin-amount"><input type="number" name="system.finances.income.other" value="{{system.finances.income.other}}" /><span>c</span></div></div>
|
||||
<div class="mk2-fin-total"><span>TOTAL</span><span class="green">{{weeklyIncome}}c</span></div>
|
||||
</div>
|
||||
<div class="mk2-fin-col">
|
||||
<div class="mk2-fin-head red">◈ EXPENSES / WEEK</div>
|
||||
<div class="mk2-fin-row"><label>Accommodation</label><div class="mk2-fin-amount"><input type="number" name="system.finances.expenses.accommodation" value="{{system.finances.expenses.accommodation}}" /><span>c</span></div></div>
|
||||
<div class="mk2-fin-row"><label>Drugs</label><div class="mk2-fin-amount"><input type="number" name="system.finances.expenses.drugs" value="{{system.finances.expenses.drugs}}" /><span>c</span></div></div>
|
||||
<div class="mk2-fin-row"><label>Subscriptions</label><div class="mk2-fin-amount"><input type="number" name="system.finances.expenses.subscriptions" value="{{system.finances.expenses.subscriptions}}" /><span>c</span></div></div>
|
||||
<div class="mk2-fin-row"><label>Other</label><div class="mk2-fin-amount"><input type="number" name="system.finances.expenses.other" value="{{system.finances.expenses.other}}" /><span>c</span></div></div>
|
||||
<div class="mk2-fin-row"><label>💸 Bullet Tax</label><span class="orange fw">{{system.finances.expenses.bulletTax}}c</span></div>
|
||||
<div class="mk2-fin-row"><label>Debt</label><div class="mk2-fin-amount"><input type="number" name="system.finances.debt" value="{{system.finances.debt}}" /><span>c</span></div></div>
|
||||
<div class="mk2-fin-total"><span>TOTAL</span><span class="red">{{weeklyExpenses}}c</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mk2-net-row">
|
||||
<span class="mk2-net-label">WEEKLY NET</span>
|
||||
<span class="mk2-net-val {{#if (gte weeklyNet 0)}}green{{else}}red{{/if}}">{{weeklyNetSign}}{{weeklyNet}}c</span>
|
||||
</div>
|
||||
{{!-- ══ BPN PANEL ══ --}}
|
||||
<div class="mk2-bpn bpn-type-{{system.bpn.type}}">
|
||||
<div class="mk2-bpn-head">
|
||||
<span class="mk2-bpn-type">{{#if system.bpn.type}}{{system.bpn.type}}{{else}}BLUE{{/if}} BPN</span>
|
||||
<input type="text" class="mk2-bpn-code" name="system.bpn.code" value="{{system.bpn.code}}" placeholder="BPN-XXX-α" />
|
||||
<select name="system.bpn.type" class="mk2-bpn-select">
|
||||
<option value="blue" {{#if (eq system.bpn.type "blue")}}selected{{/if}}>Blue</option>
|
||||
<option value="red" {{#if (eq system.bpn.type "red")}}selected{{/if}}>Red</option>
|
||||
<option value="white" {{#if (eq system.bpn.type "white")}}selected{{/if}}>White</option>
|
||||
<option value="gold" {{#if (eq system.bpn.type "gold")}}selected{{/if}}>Gold</option>
|
||||
<option value="silver" {{#if (eq system.bpn.type "silver")}}selected{{/if}}>Silver</option>
|
||||
<option value="black" {{#if (eq system.bpn.type "black")}}selected{{/if}}>Black</option>
|
||||
<option value="grey" {{#if (eq system.bpn.type "grey")}}selected{{/if}}>Grey</option>
|
||||
<option value="violet" {{#if (eq system.bpn.type "violet")}}selected{{/if}}>Violet</option>
|
||||
</select>
|
||||
<select name="system.bpn.status" class="mk2-bpn-select">
|
||||
<option value="open" {{#if (eq system.bpn.status "open")}}selected{{/if}}>Open</option>
|
||||
<option value="active" {{#if (eq system.bpn.status "active")}}selected{{/if}}>Active</option>
|
||||
<option value="complete" {{#if (eq system.bpn.status "complete")}}selected{{/if}}>Complete</option>
|
||||
<option value="failed" {{#if (eq system.bpn.status "failed")}}selected{{/if}}>Failed</option>
|
||||
</select>
|
||||
<div class="mk2-fin-amount" style="margin-left:auto;">
|
||||
<input type="number" name="system.bpn.reward" value="{{system.bpn.reward}}" style="width:70px;" />
|
||||
<span>c</span>
|
||||
</div>
|
||||
</div>
|
||||
<textarea name="system.bpn.description" class="mk2-bpn-text" rows="2" placeholder="Briefing...">{{system.bpn.description}}</textarea>
|
||||
<textarea name="system.bpn.objectives" class="mk2-bpn-text" rows="2" placeholder="Objectives...">{{system.bpn.objectives}}</textarea>
|
||||
<textarea name="system.bpn.notes" class="mk2-bpn-text" rows="2" placeholder="Field notes...">{{system.bpn.notes}}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="mk2-subhead" style="margin-top:10px;">AMMO RESERVES</div>
|
||||
<div class="mk2-ammo-list">
|
||||
{{#each items}}
|
||||
{{#if (eq type "ammo")}}
|
||||
<div class="mk2-ammo-row">
|
||||
<span class="mk2-ammo-cal">{{system.caliber}}</span>
|
||||
<span class="mk2-ammo-type {{system.roundType}}">{{system.roundType}}</span>
|
||||
<span class="mk2-ammo-qty">{{system.quantity}}</span>
|
||||
<span class="mk2-ammo-cost">{{system.costPerRound}}c/rnd</span>
|
||||
{{#if system.apBonus}}<span class="mk2-ammo-bonus teal">AP+{{system.apBonus}}</span>{{/if}}
|
||||
{{#if system.damageMod}}<span class="mk2-ammo-bonus orange">DMG+{{system.damageMod}}</span>{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- ═══════════════════ EBB ════════════════════════════════════════════════ --}}
|
||||
{{#if isEbbUser}}
|
||||
<div class="mk2-panel" data-panel="mk2-ebb">
|
||||
<div class="mk2-subhead ebb-h">EBB FORMULAE</div>
|
||||
{{#each ebbFormulae}}
|
||||
<div class="mk2-ebb-row">
|
||||
<div class="mk2-ebb-disc {{system.discipline}}">{{system.discipline}}</div>
|
||||
<div class="mk2-ebb-info">
|
||||
<span class="mk2-ebb-name">{{name}}</span>
|
||||
<div class="mk2-ebb-meta">
|
||||
<span class="mk2-ebb-flux">⚡ {{system.fluxCost}} Flux</span>
|
||||
<span class="mk2-ebb-suc">{{system.successes}} suc</span>
|
||||
{{#if system.range}}<span class="mk2-ebb-range">{{system.range}}</span>{{/if}}
|
||||
{{#if system.duration}}<span class="mk2-ebb-dur">{{system.duration}}</span>{{/if}}
|
||||
</div>
|
||||
{{#if system.effect}}<div class="mk2-ebb-effect">{{system.effect}}</div>{{/if}}
|
||||
</div>
|
||||
<div class="mk2-ebb-actions">
|
||||
<button type="button" class="ebb-formula-roll-btn mk2-action-btn purple mk2-channel-btn" data-item-id="{{_id}}">⚡ CHANNEL</button>
|
||||
<a class="item-edit mk2-ico" data-item-id="{{_id}}" title="Edit">✎</a>
|
||||
<a class="item-delete mk2-ico del" data-item-id="{{_id}}" title="Remove">✕</a>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless ebbFormulae.length}}
|
||||
<div class="mk2-none-msg">No formulae known. Drag Ebb items from the world item list.</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- ═══════════════════ GEAR ═════════════════════════════════════════════ --}}
|
||||
<div class="mk2-panel" data-panel="mk2-gear">
|
||||
<div class="mk2-subhead">EQUIPMENT <a class="item-create mk2-add" data-type="equipment">+ ADD</a></div>
|
||||
{{#each items}}
|
||||
{{#unless (eq type "weapon")}}{{#unless (eq type "armor")}}{{#unless (eq type "specialty")}}{{#unless (eq type "ebb")}}{{#unless (eq type "ammo")}}
|
||||
<div class="mk2-gear-row">
|
||||
<span class="mk2-gear-name">{{name}}</span>
|
||||
{{#if system.quantity}}<span class="mk2-stat-pill">×{{system.quantity}}</span>{{/if}}
|
||||
<a class="item-edit mk2-ico" data-item-id="{{_id}}">✎</a>
|
||||
<a class="item-delete mk2-ico del" data-item-id="{{_id}}">✕</a>
|
||||
</div>
|
||||
{{/unless}}{{/unless}}{{/unless}}{{/unless}}{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
{{!-- ═══════════════════ NOTES ════════════════════════════════════════════ --}}
|
||||
<div class="mk2-panel" data-panel="mk2-notes">
|
||||
<div class="mk2-subhead">DOSSIER</div>
|
||||
<textarea name="system.biography" class="mk2-bio">{{system.biography}}</textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,117 @@
|
||||
<form class="{{cssClass}} zero-engine character-sheet" autocomplete="off">
|
||||
|
||||
{{!-- Sheet Header --}}
|
||||
<header class="sheet-header">
|
||||
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}"/>
|
||||
|
||||
<div class="header-fields">
|
||||
<h1 class="charname">
|
||||
<input name="name" type="text" value="{{actor.name}}" placeholder="Character Name"/>
|
||||
</h1>
|
||||
|
||||
<div class="character-info">
|
||||
<div class="info-row">
|
||||
<div class="field">
|
||||
<label>Race:</label>
|
||||
<select name="system.race" multiple size="3">
|
||||
<option value="human" {{#if (contains system.race "human")}}selected{{/if}}>Human</option>
|
||||
<option value="ebon" {{#if (contains system.race "ebon")}}selected{{/if}}>Ebon</option>
|
||||
<option value="brainwaster" {{#if (contains system.race "brainwaster")}}selected{{/if}}>Brain Waster</option>
|
||||
<option value="stormer" {{#if (contains system.race "stormer")}}selected{{/if}}>Stormer</option>
|
||||
<option value="shaktar" {{#if (contains system.race "shaktar")}}selected{{/if}}>Shaktar</option>
|
||||
<option value="wraith" {{#if (contains system.race "wraith")}}selected{{/if}}>Wraith Raider</option>
|
||||
<option value="frother" {{#if (contains system.race "frother")}}selected{{/if}}>Frother</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label>Training:</label>
|
||||
<select name="system.training" multiple size="3">
|
||||
<option value="scout" {{#if (contains system.training "scout")}}selected{{/if}}>Scout</option>
|
||||
<option value="investigator" {{#if (contains system.training "investigator")}}selected{{/if}}>Investigator</option>
|
||||
<option value="medic" {{#if (contains system.training "medic")}}selected{{/if}}>Medic</option>
|
||||
<option value="corporate" {{#if (contains system.training "corporate")}}selected{{/if}}>Corporate</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label>Archetype:</label>
|
||||
<input type="text" name="system.archetype" value="{{system.archetype}}" placeholder="Operative"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="info-row">
|
||||
<div class="field">
|
||||
<label>SCL:</label>
|
||||
<input type="number" name="system.details.scl" value="{{system.details.scl}}"/>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Credits:</label>
|
||||
<input type="number" name="system.details.credits" value="{{system.details.credits}}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{!-- Attributes & Skills --}}
|
||||
<section class="sheet-body">
|
||||
<h2>Attributes & Skills</h2>
|
||||
|
||||
<div class="attributes-grid">
|
||||
{{#each system.attributes as |attribute attrKey|}}
|
||||
<div class="attribute-block">
|
||||
<h3>{{capitalize attrKey}}</h3>
|
||||
<div class="attribute-value">
|
||||
<button type="button" class="decrement" data-path="system.attributes.{{attrKey}}.value">−</button>
|
||||
<span class="value">{{attribute.value}}</span>
|
||||
<button type="button" class="increment" data-path="system.attributes.{{attrKey}}.value">+</button>
|
||||
<button type="button" class="roll-dice" data-attribute="{{attrKey}}">
|
||||
<i class="fas fa-dice-d6"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{!-- Skills for this attribute --}}
|
||||
<div class="skills-list">
|
||||
{{#each @root.system.skills as |skill skillKey|}}
|
||||
{{#if (eq skill.attribute attrKey)}}
|
||||
<div class="skill-row">
|
||||
<span class="skill-name">{{skill.label}}</span>
|
||||
<button type="button" class="decrement" data-path="system.skills.{{skillKey}}.value">−</button>
|
||||
<span class="value">{{skill.value}}</span>
|
||||
<button type="button" class="increment" data-path="system.skills.{{skillKey}}.value">+</button>
|
||||
<button type="button" class="roll-dice" data-skill="{{skillKey}}" data-attribute="{{attrKey}}">
|
||||
<i class="fas fa-dice-d6"></i>
|
||||
</button>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
{{!-- Health & Resolve --}}
|
||||
<div class="resources">
|
||||
<div class="resource">
|
||||
<label>Health</label>
|
||||
<input type="number" name="system.derivedStats.health.value" value="{{system.derivedStats.health.value}}" />
|
||||
/
|
||||
<input type="number" name="system.derivedStats.health.max" value="{{system.derivedStats.health.max}}" />
|
||||
</div>
|
||||
|
||||
<div class="resource">
|
||||
<label>Resolve</label>
|
||||
<input type="number" name="system.derivedStats.resolve.value" value="{{system.derivedStats.resolve.value}}" />
|
||||
/
|
||||
<input type="number" name="system.derivedStats.resolve.max" value="{{system.derivedStats.resolve.max}}" />
|
||||
</div>
|
||||
|
||||
<div class="resource">
|
||||
<label>Stress</label>
|
||||
<input type="number" name="system.derivedStats.stress" value="{{system.derivedStats.stress}}" />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,985 @@
|
||||
<form class="{{cssClass}} zero-engine" autocomplete="off">
|
||||
|
||||
{{!-- SHEET HEADER --}}
|
||||
<div class="sheet-header"
|
||||
>
|
||||
{{#if drugAlerts.length}}
|
||||
<div class="drug-alerts">
|
||||
{{#each drugAlerts}}
|
||||
<div class="drug-alert {{this.state}}">
|
||||
<div class="drug-alert-main">
|
||||
<span class="drug-alert-title">{{this.name}}</span>
|
||||
<span class="drug-alert-duration">{{this.duration}}</span>
|
||||
</div>
|
||||
<div class="drug-alert-meta">{{this.summary}}</div>
|
||||
<div class="drug-alert-actions">
|
||||
<button type="button" class="drug-off-btn" data-item-id="{{this.itemId}}" title="Stop Drug Effect">
|
||||
<i class="fas fa-power-off"></i> Off
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- TOP ROW: Portrait + Name + Key Stats --}}
|
||||
<div class="header-top-row">
|
||||
<div class="avatar">
|
||||
<img class="profile" src="{{actor.img}}" data-edit="img" data-tooltip="{{actor.name}}"/>
|
||||
</div>
|
||||
<div class="header-top-info">
|
||||
<div class="actor-name">
|
||||
<input type="text" name="name" value="{{actor.name}}" placeholder="Character Name"/>
|
||||
</div>
|
||||
<div class="header-top-stats">
|
||||
<div class="mini-stat">
|
||||
<span class="mini-stat-label">SCL</span>
|
||||
<input type="number" name="system.details.scl" value="{{system.details.scl}}" placeholder="10" />
|
||||
</div>
|
||||
<div class="mini-stat">
|
||||
<span class="mini-stat-label">Credits</span>
|
||||
<input type="number" name="system.details.credits" value="{{system.details.credits}}" placeholder="500" />
|
||||
</div>
|
||||
<div class="init-buttons-inline">
|
||||
<button type="button" class="init-agi" title="Initiative: AGI + Mobility (base score) + roll successes">⚡ AGI+MOB</button>
|
||||
<button type="button" class="init-wit" title="Initiative: WIT + Observation (base score) + roll successes">⚡ WIT+OBS</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- CHARACTER DETAILS ROW --}}
|
||||
<div class="header-details-row">
|
||||
<div class="detail-field">
|
||||
<label>Race/Species</label>
|
||||
<select name="system.race">
|
||||
<option value="">-- Select --</option>
|
||||
<option value="human" {{#if (eq raceStr "human")}}selected{{/if}}>Human</option>
|
||||
<option value="ebon" {{#if (eq raceStr "ebon")}}selected{{/if}}>Ebon</option>
|
||||
<option value="brainwaster"{{#if (eq raceStr "brainwaster")}}selected{{/if}}>Brain Waster</option>
|
||||
<option value="stormer" {{#if (eq raceStr "stormer")}}selected{{/if}}>Stormer (313 Malice)</option>
|
||||
<option value="shaktar" {{#if (eq raceStr "shaktar")}}selected{{/if}}>Shaktar</option>
|
||||
<option value="wraith" {{#if (eq raceStr "wraith")}}selected{{/if}}>Wraith Raider</option>
|
||||
<option value="frother" {{#if (eq raceStr "frother")}}selected{{/if}}>Frother</option>
|
||||
<option value="vevaphon" {{#if (eq raceStr "vevaphon")}}selected{{/if}}>Stormer Vevaphon</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="detail-field">
|
||||
<label>Training Package</label>
|
||||
<select name="system.training">
|
||||
<option value="">-- Select --</option>
|
||||
<option value="soldier" {{#if (eq trainingStr "soldier")}}selected{{/if}}>Soldier</option>
|
||||
<option value="scout" {{#if (eq trainingStr "scout")}}selected{{/if}}>Scout</option>
|
||||
<option value="medic" {{#if (eq trainingStr "medic")}}selected{{/if}}>Combat Medic</option>
|
||||
<option value="tech" {{#if (eq trainingStr "tech")}}selected{{/if}}>Tech Operative</option>
|
||||
<option value="negotiator" {{#if (eq trainingStr "negotiator")}}selected{{/if}}>Negotiator</option>
|
||||
<option value="hunter" {{#if (eq trainingStr "hunter")}}selected{{/if}}>Hunter</option>
|
||||
<option value="brawler" {{#if (eq trainingStr "brawler")}}selected{{/if}}>Brawler</option>
|
||||
<option value="investigator" {{#if (eq trainingStr "investigator")}}selected{{/if}}>Investigator</option>
|
||||
<option value="corporate" {{#if (eq trainingStr "corporate")}}selected{{/if}}>Corporate</option>
|
||||
<option value="ebb_user" {{#if (eq trainingStr "ebb_user")}}selected{{/if}}>Ebb Channeller</option>
|
||||
<option value="ebon-investigator" {{#if (eq trainingStr "ebon-investigator")}}selected{{/if}}>Ebon - Investigator</option>
|
||||
<option value="brainwaster-operative"{{#if (eq trainingStr "brainwaster-operative")}}selected{{/if}}>Brain Waster - Operative</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="detail-field">
|
||||
<label>Archetype</label>
|
||||
<input list="list-of-archetypes" type="text" name="system.archetype" value="{{system.archetype}}" placeholder="Investigator"/>
|
||||
<datalist id="list-of-archetypes">
|
||||
<option value="Operative">
|
||||
<option value="Investigator">
|
||||
<option value="Scout">
|
||||
<option value="Medic">
|
||||
<option value="Tech Specialist">
|
||||
<option value="Corporate Agent">
|
||||
</datalist>
|
||||
</div>
|
||||
<div class="detail-field armor-roll-field">
|
||||
<label>Armour</label>
|
||||
<div class="armor-name-display">
|
||||
{{#each armors}}{{#if @first}}<span class="equipped-armor-name">{{this.name}}</span>{{/if}}{{/each}}
|
||||
{{#unless armors.length}}<span class="equipped-armor-name none">None</span>{{/unless}}
|
||||
</div>
|
||||
<button type="button" class="manual-armor-button header-armor-roll-btn" data-actor-id="{{actor._id}}" title="Run Armor Check">
|
||||
<i class="fas fa-shield-alt"></i> Armour Roll
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- VITALS ROW: Health, Resolve, Stress, Ebb --}}
|
||||
<div class="header-vitals-row">
|
||||
<div class="vital-box health-box">
|
||||
<label>Health</label>
|
||||
<div class="vital-values">
|
||||
<input type="number" name="system.derivedStats.health.value" value="{{system.derivedStats.health.value}}" />
|
||||
<span class="vital-separator">/</span>
|
||||
<input type="number" name="system.derivedStats.health.max" value="{{system.derivedStats.health.max}}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="vital-box resolve-box">
|
||||
<label>Resolve</label>
|
||||
<div class="vital-values">
|
||||
<input type="number" name="system.derivedStats.resolve.value" value="{{system.derivedStats.resolve.value}}" />
|
||||
<span class="vital-separator">/</span>
|
||||
<input type="number" name="system.derivedStats.resolve.max" value="{{system.derivedStats.resolve.max}}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="vital-box stress-vital">
|
||||
<label>Stress</label>
|
||||
<div class="stress-group">
|
||||
<input type="number" class="stress-value" name="system.derivedStats.stress" value="{{system.derivedStats.stress}}" />
|
||||
<span class="stress-max-display">/ {{stressMax}}</span>
|
||||
<button type="button" class="manual-panic-button" data-actor-id="{{actor._id}}" title="Roll Panic Check (1d6 + Stress)">
|
||||
<i class="fas fa-skull"></i> Panic
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="vital-box rest-vital">
|
||||
<button type="button" class="rest-btn" data-actor-id="{{actor._id}}" title="Rest: clear weapon lockouts and restore ammo">
|
||||
<i class="fas fa-bed"></i> REST
|
||||
</button>
|
||||
</div>
|
||||
{{#if isEbbUser}}
|
||||
<div class="vital-box flux-vital">
|
||||
<label>Flux</label>
|
||||
<div class="vital-values">
|
||||
<input type="number" name="system.flux.value" value="{{system.flux.value}}" min="0" max="{{computedFluxMax}}" class="flux-current" />
|
||||
<span class="vital-separator">/</span>
|
||||
<span class="flux-max-display">{{computedFluxMax}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if isVevaphon}}
|
||||
<div class="vital-box vevaphon-vital">
|
||||
<label>Instability</label>
|
||||
<div class="vital-values">
|
||||
<input type="number" name="system.vevaphon.instability" value="{{system.vevaphon.instability}}" class="instability-value" min="0" max="12" />
|
||||
<span class="vital-separator">/</span>
|
||||
<span class="instability-max">12</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- CRITICAL INJURIES ROW --}}
|
||||
<div class="header-crits-row">
|
||||
<div class="crit-buttons">
|
||||
<button type="button" class="roll-physical-crit-btn" data-actor-id="{{actor._id}}" title="Roll Physical Critical (D66) - When Health = 0">
|
||||
<i class="fas fa-heart-broken"></i> Physical Critical
|
||||
</button>
|
||||
<button type="button" class="roll-mental-crit-btn" data-actor-id="{{actor._id}}" title="Roll Mental Critical (D66) - When Resolve = 0">
|
||||
<i class="fas fa-brain"></i> Mental Critical
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{!-- Active injuries display --}}
|
||||
{{#if system.criticalInjuries.physical.length}}
|
||||
<div class="active-injuries physical-injuries">
|
||||
<h4><i class="fas fa-heart-broken"></i> Physical Injuries</h4>
|
||||
{{#each system.criticalInjuries.physical}}
|
||||
<div class="injury-item {{#if this.lethal}}lethal-injury{{/if}}">
|
||||
<div class="injury-header">
|
||||
<strong>{{this.name}}</strong>
|
||||
{{#if this.lethal}}<span class="lethal-tag">LETHAL</span>{{/if}}
|
||||
<button type="button" class="delete-injury-btn" data-injury-type="physical" data-injury-index="{{@index}}" title="Remove Injury">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<p class="injury-effects">{{this.effects}}</p>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if system.criticalInjuries.mental.length}}
|
||||
<div class="active-injuries mental-injuries">
|
||||
<h4><i class="fas fa-brain"></i> Mental Injuries</h4>
|
||||
{{#each system.criticalInjuries.mental}}
|
||||
<div class="injury-item {{#if this.lethal}}lethal-injury{{/if}}">
|
||||
<div class="injury-header">
|
||||
<strong>{{this.name}}</strong>
|
||||
{{#if this.lethal}}<span class="lethal-tag">LETHAL</span>{{/if}}
|
||||
<button type="button" class="delete-injury-btn" data-injury-type="mental" data-injury-index="{{@index}}" title="Remove Injury">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<p class="injury-effects">{{this.effects}}</p>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Active conditions from SLA status effects --}}
|
||||
{{#if activeConditions.length}}
|
||||
<div class="active-conditions-row">
|
||||
{{#each activeConditions}}
|
||||
<div class="condition-tag {{this.id}}" title="{{this.description}}">
|
||||
<i class="{{this.icon}}"></i>
|
||||
<span class="condition-label">{{this.label}}</span>
|
||||
<button type="button" class="condition-clear-btn" data-condition-id="{{this.id}}" title="Clear condition">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- SHEET TABS --}}
|
||||
<div class="sheet-tabs">
|
||||
<a class="item" data-tab="stats">
|
||||
<i class="fas fa-chart-bar"></i> Stats & Skills
|
||||
</a>
|
||||
<a class="item" data-tab="equipment">
|
||||
<i class="fas fa-briefcase"></i> Equipment
|
||||
</a>
|
||||
{{#if isEbbUser}}
|
||||
<a class="item" data-tab="ebb">
|
||||
<i class="fas fa-bolt"></i> Ebb
|
||||
</a>
|
||||
{{/if}}
|
||||
<a class="item" data-tab="finances">
|
||||
<i class="fas fa-credit-card"></i> Finances
|
||||
</a>
|
||||
<a class="item" data-tab="bio">
|
||||
<i class="fas fa-user"></i> Biography
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{!-- SHEET BODY --}}
|
||||
<div class="sheet-body">
|
||||
|
||||
{{!-- STATS TAB --}}
|
||||
<div class="tab" data-tab="stats">
|
||||
<div class="section-header">Attributes & Skills</div>
|
||||
|
||||
<div class="attr-skill-table">
|
||||
{{!-- STRENGTH COLUMN --}}
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Strength</div>
|
||||
<div class="attr-value-row">
|
||||
<button type="button" class="attr-btn" data-action="decrement" data-attribute="strength">−</button>
|
||||
<div class="attr-value">{{system.attributes.strength.value}}</div>
|
||||
<button type="button" class="attr-btn" data-action="increment" data-attribute="strength">+</button>
|
||||
<button type="button" class="attr-roll-btn" data-attribute="strength" title="Roll Strength"><i class="fas fa-dice-d6"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="system.attributes.strength.value" value="{{system.attributes.strength.value}}" />
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Force</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="force" data-attribute="strength"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="force">−</button>
|
||||
<div class="skill-value">{{system.skills.force.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="force">+</button>
|
||||
<input type="hidden" name="system.skills.force.value" value="{{system.skills.force.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Melee</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="melee" data-attribute="strength"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="melee">−</button>
|
||||
<div class="skill-value">{{system.skills.melee.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="melee">+</button>
|
||||
<input type="hidden" name="system.skills.melee.value" value="{{system.skills.melee.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Stamina</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="stamina" data-attribute="strength"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="stamina">−</button>
|
||||
<div class="skill-value">{{system.skills.stamina.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="stamina">+</button>
|
||||
<input type="hidden" name="system.skills.stamina.value" value="{{system.skills.stamina.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- AGILITY COLUMN --}}
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Agility</div>
|
||||
<div class="attr-value-row">
|
||||
<button type="button" class="attr-btn" data-action="decrement" data-attribute="agility">−</button>
|
||||
<div class="attr-value">{{system.attributes.agility.value}}</div>
|
||||
<button type="button" class="attr-btn" data-action="increment" data-attribute="agility">+</button>
|
||||
<button type="button" class="attr-roll-btn" data-attribute="agility" title="Roll Agility"><i class="fas fa-dice-d6"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="system.attributes.agility.value" value="{{system.attributes.agility.value}}" />
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Marksmanship</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="marksmanship" data-attribute="agility"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="marksmanship">−</button>
|
||||
<div class="skill-value">{{system.skills.marksmanship.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="marksmanship">+</button>
|
||||
<input type="hidden" name="system.skills.marksmanship.value" value="{{system.skills.marksmanship.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Mobility</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="mobility" data-attribute="agility"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="mobility">−</button>
|
||||
<div class="skill-value">{{system.skills.mobility.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="mobility">+</button>
|
||||
<input type="hidden" name="system.skills.mobility.value" value="{{system.skills.mobility.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Stealth</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="stealth" data-attribute="agility"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="stealth">−</button>
|
||||
<div class="skill-value">{{system.skills.stealth.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="stealth">+</button>
|
||||
<input type="hidden" name="system.skills.stealth.value" value="{{system.skills.stealth.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- WITS COLUMN --}}
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Wits</div>
|
||||
<div class="attr-value-row">
|
||||
<button type="button" class="attr-btn" data-action="decrement" data-attribute="wits">−</button>
|
||||
<div class="attr-value">{{system.attributes.wits.value}}</div>
|
||||
<button type="button" class="attr-btn" data-action="increment" data-attribute="wits">+</button>
|
||||
<button type="button" class="attr-roll-btn" data-attribute="wits" title="Roll Wits"><i class="fas fa-dice-d6"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="system.attributes.wits.value" value="{{system.attributes.wits.value}}" />
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Crafting</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="crafting" data-attribute="wits"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="crafting">−</button>
|
||||
<div class="skill-value">{{system.skills.crafting.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="crafting">+</button>
|
||||
<input type="hidden" name="system.skills.crafting.value" value="{{system.skills.crafting.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Observation</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="observation" data-attribute="wits"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="observation">−</button>
|
||||
<div class="skill-value">{{system.skills.observation.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="observation">+</button>
|
||||
<input type="hidden" name="system.skills.observation.value" value="{{system.skills.observation.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Survival</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="survival" data-attribute="wits"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="survival">−</button>
|
||||
<div class="skill-value">{{system.skills.survival.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="survival">+</button>
|
||||
<input type="hidden" name="system.skills.survival.value" value="{{system.skills.survival.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- EMPATHY COLUMN --}}
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Empathy</div>
|
||||
<div class="attr-value-row">
|
||||
<button type="button" class="attr-btn" data-action="decrement" data-attribute="empathy">−</button>
|
||||
<div class="attr-value">{{system.attributes.empathy.value}}</div>
|
||||
<button type="button" class="attr-btn" data-action="increment" data-attribute="empathy">+</button>
|
||||
<button type="button" class="attr-roll-btn" data-attribute="empathy" title="Roll Empathy"><i class="fas fa-dice-d6"></i></button>
|
||||
</div>
|
||||
<input type="hidden" name="system.attributes.empathy.value" value="{{system.attributes.empathy.value}}" />
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Healing</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="healing" data-attribute="empathy"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="healing">−</button>
|
||||
<div class="skill-value">{{system.skills.healing.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="healing">+</button>
|
||||
<input type="hidden" name="system.skills.healing.value" value="{{system.skills.healing.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Insight</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="insight" data-attribute="empathy"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="insight">−</button>
|
||||
<div class="skill-value">{{system.skills.insight.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="insight">+</button>
|
||||
<input type="hidden" name="system.skills.insight.value" value="{{system.skills.insight.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="skill-row">
|
||||
<label>Persuasion</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="persuasion" data-attribute="empathy"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="persuasion">−</button>
|
||||
<div class="skill-value">{{system.skills.persuasion.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="persuasion">+</button>
|
||||
<input type="hidden" name="system.skills.persuasion.value" value="{{system.skills.persuasion.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
{{#if isEbbUser}}
|
||||
<div class="skill-row ebb-skill-row">
|
||||
<label><i class="fas fa-bolt"></i> Ebb</label>
|
||||
<div class="skill-controls">
|
||||
<button type="button" class="skill-roll" data-skill="ebb" data-attribute="empathy" title="Roll Ebb (Empathy + Ebb)"><i class="fas fa-dice-d6"></i></button>
|
||||
<button type="button" class="skill-decrement" data-skill="ebb">−</button>
|
||||
<div class="skill-value">{{system.skills.ebb.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="ebb">+</button>
|
||||
<input type="hidden" name="system.skills.ebb.value" value="{{system.skills.ebb.value}}" />
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Specialties Section --}}
|
||||
<div class="specialties-section">
|
||||
<h2 class="section-header">
|
||||
<i class="fas fa-star"></i> Specialties & Talents
|
||||
</h2>
|
||||
<div class="specialty-list">
|
||||
{{#each specialties}}
|
||||
<div class="specialty-item" data-item-id="{{this._id}}">
|
||||
<img class="specialty-img" src="{{this.img}}" width="32" height="32"/>
|
||||
<div class="specialty-info">
|
||||
<div class="specialty-name-row">
|
||||
<span class="specialty-name">{{this.name}}</span>
|
||||
<span class="specialty-package">{{this.system.package}}</span>
|
||||
{{!-- Morph form SHIFT button for Vevaphon forms --}}
|
||||
{{#if (eq this.system.prerequisites "Vevaphon")}}
|
||||
{{#unless (eq this.name "Morphic Strike")}}
|
||||
{{#if (eq this.name "Brute Form")}}
|
||||
<button type="button" class="morph-shift-btn {{#if (eq ../system.vevaphon.activeMorphForm 'brute')}}morph-shift-active{{/if}}"
|
||||
data-form="brute" title="Shift to Brute Form (costs 1 Instability)">
|
||||
{{#if (eq ../system.vevaphon.activeMorphForm 'brute')}}<i class="fas fa-check-circle"></i> ACTIVE{{else}}<i class="fas fa-sync-alt"></i> SHIFT{{/if}}
|
||||
</button>
|
||||
{{else if (eq this.name "Stalker Form")}}
|
||||
<button type="button" class="morph-shift-btn {{#if (eq ../system.vevaphon.activeMorphForm 'stalker')}}morph-shift-active{{/if}}"
|
||||
data-form="stalker" title="Shift to Stalker Form (costs 1 Instability)">
|
||||
{{#if (eq ../system.vevaphon.activeMorphForm 'stalker')}}<i class="fas fa-check-circle"></i> ACTIVE{{else}}<i class="fas fa-sync-alt"></i> SHIFT{{/if}}
|
||||
</button>
|
||||
{{else if (eq this.name "Raptor Form")}}
|
||||
<button type="button" class="morph-shift-btn {{#if (eq ../system.vevaphon.activeMorphForm 'raptor')}}morph-shift-active{{/if}}"
|
||||
data-form="raptor" title="Shift to Raptor Form (costs 1 Instability)">
|
||||
{{#if (eq ../system.vevaphon.activeMorphForm 'raptor')}}<i class="fas fa-check-circle"></i> ACTIVE{{else}}<i class="fas fa-sync-alt"></i> SHIFT{{/if}}
|
||||
</button>
|
||||
{{/if}}
|
||||
{{/unless}}
|
||||
{{/if}}
|
||||
<button type="button" class="delete-specialty-btn" data-item-id="{{this._id}}" title="Remove Specialty">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="specialty-effects">{{this.system.effects}}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless specialties.length}}
|
||||
<div class="specialty-empty">
|
||||
<em>Drag specialties from the compendium to add them here.</em>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- EQUIPMENT TAB --}}
|
||||
<div class="tab" data-tab="equipment">
|
||||
|
||||
{{#if isVevaphon}}
|
||||
<div class="morph-form-panel">
|
||||
<div class="section-header"><i class="fas fa-sync-alt"></i> Morph Form
|
||||
<span class="instability-warning {{#if (gte system.vevaphon.instability 6)}}active{{/if}}">
|
||||
{{#if (gte system.vevaphon.instability 10)}}⚠ MORPH PANIC RISK{{else if (gte system.vevaphon.instability 6)}}⚠ INSTABILITY EFFECTS ACTIVE{{/if}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="morph-form-buttons">
|
||||
<button type="button" class="morph-form-btn {{#if (eq system.vevaphon.activeMorphForm 'brute')}}morph-active{{/if}}" data-form="brute">
|
||||
<i class="fas fa-shield-alt"></i> BRUTE<br><small>+Force +Melee +2HP</small>
|
||||
</button>
|
||||
<button type="button" class="morph-form-btn {{#if (eq system.vevaphon.activeMorphForm 'stalker')}}morph-active{{/if}}" data-form="stalker">
|
||||
<i class="fas fa-eye-slash"></i> STALKER<br><small>+Stealth +Mobility</small>
|
||||
</button>
|
||||
<button type="button" class="morph-form-btn {{#if (eq system.vevaphon.activeMorphForm 'raptor')}}morph-active{{/if}}" data-form="raptor">
|
||||
<i class="fas fa-bolt"></i> RAPTOR<br><small>+Melee +Marks</small>
|
||||
</button>
|
||||
<button type="button" class="morph-form-btn {{#if (eq system.vevaphon.activeMorphForm 'none')}}morph-active{{/if}}" data-form="none">
|
||||
<i class="fas fa-circle"></i> BASE<br><small>No bonuses</small>
|
||||
</button>
|
||||
</div>
|
||||
<div class="morph-instability-bar">
|
||||
<div class="instability-track">
|
||||
{{#each instabilityPips}}<span class="instability-pip {{#if this.filled}}pip-filled {{#if this.danger}}pip-danger{{/if}}{{/if}}"></span>{{/each}}
|
||||
</div>
|
||||
<button type="button" class="instability-roll-btn" title="Roll Instability effect (6+ minor, 10+ panic)">
|
||||
<i class="fas fa-random"></i> Roll Instability
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- RANGED WEAPONS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-crosshairs"></i> Ranged Weapons</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each rangedWeapons}}
|
||||
<div class="weapon-item {{#if this.system.ammoEmpty}}weapon-ammo-empty{{/if}}" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge ranged">{{this.system.weaponType}}</span>
|
||||
{{#if this.system.ammoEmpty}}<span class="ammo-empty-badge"><i class="fas fa-lock"></i> EMPTY</span>{{/if}}
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>DMG</strong> {{this.system.damage}}</span>
|
||||
<span class="weapon-stat"><strong>Range</strong> {{this.system.range}}</span>
|
||||
<span class="weapon-stat"><strong>ROF</strong> {{this.system.rof}}</span>
|
||||
<span class="weapon-stat"><strong>AP</strong> {{this.system.ap}}</span>
|
||||
<span class="weapon-stat"><strong>Gear</strong> +{{this.system.gearBonus}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="weapon-roll-btn {{#if this.system.ammoEmpty}}btn-locked{{/if}}"
|
||||
data-item-id="{{this._id}}" data-weapon-category="ranged"
|
||||
title="{{#if this.system.ammoEmpty}}EMPTY — rest to restore ammo{{else}}Roll Marksmanship attack{{/if}}"
|
||||
{{#if this.system.ammoEmpty}}disabled{{/if}}>
|
||||
<i class="fas fa-dice-d6"></i> ATTACK
|
||||
</button>
|
||||
<div class="weapon-aux-actions">
|
||||
<button type="button" class="toggle-equip-btn {{#if this.system.equipped}}equipped{{/if}}" data-item-id="{{this._id}}" title="Toggle Equipped">
|
||||
<i class="fas fa-hand-paper"></i>
|
||||
</button>
|
||||
<button type="button" class="delete-weapon-btn" data-item-id="{{this._id}}" title="Remove Weapon">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless rangedWeapons.length}}
|
||||
<div class="weapon-empty"><em>Drag ranged weapons from the compendium.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- MELEE WEAPONS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-fist-raised"></i> Melee Weapons</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each meleeWeapons}}
|
||||
<div class="weapon-item" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge melee">{{this.system.weaponType}}</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>DMG</strong> {{this.system.damage}}</span>
|
||||
<span class="weapon-stat"><strong>AP</strong> {{this.system.ap}}</span>
|
||||
<span class="weapon-stat"><strong>Gear</strong> +{{this.system.gearBonus}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="weapon-roll-btn"
|
||||
data-item-id="{{this._id}}" data-weapon-category="melee"
|
||||
title="Roll Melee attack">
|
||||
<i class="fas fa-fist-raised"></i> ATTACK
|
||||
</button>
|
||||
<div class="weapon-aux-actions">
|
||||
<button type="button" class="toggle-equip-btn {{#if this.system.equipped}}equipped{{/if}}" data-item-id="{{this._id}}" title="Toggle Equipped">
|
||||
<i class="fas fa-hand-paper"></i>
|
||||
</button>
|
||||
<button type="button" class="delete-weapon-btn" data-item-id="{{this._id}}" title="Remove Weapon">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless meleeWeapons.length}}
|
||||
<div class="weapon-empty"><em>Drag melee weapons from the compendium.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- ARMOUR --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-shield-alt"></i> Armour</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each armors}}
|
||||
<div class="weapon-item armor-item" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name armor-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge">{{this.system.armorDice}}({{this.system.armorAuto}})</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>Armor</strong> {{this.system.armorDice}}({{this.system.armorAuto}})</span>
|
||||
<span class="weapon-stat"><strong>Stat</strong> {{#if (gt this.system.statMod 0)}}+{{/if}}{{this.system.statMod}}</span>
|
||||
<span class="weapon-stat"><strong>Skill</strong> {{#if (gt this.system.skillMod 0)}}+{{/if}}{{this.system.skillMod}}</span>
|
||||
<span class="weapon-stat"><strong>INIT</strong> {{#if (gt this.system.initiativeMod 0)}}+{{/if}}{{this.system.initiativeMod}}</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>Stat Ref</strong> {{#if this.system.statModTarget}}{{capitalize this.system.statModTarget}}{{else}}—{{/if}}</span>
|
||||
<span class="weapon-stat"><strong>Skill Ref</strong> {{#if this.system.skillModTarget}}{{capitalize this.system.skillModTarget}}{{else}}—{{/if}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="toggle-equip-btn {{#if this.system.equipped}}equipped{{/if}}" data-item-id="{{this._id}}" title="Toggle Equipped">
|
||||
<i class="fas fa-hand-paper"></i>
|
||||
</button>
|
||||
<button type="button" class="armor-roll-btn" data-item-id="{{this._id}}" title="Roll Armor Check for this armour">
|
||||
<i class="fas fa-shield-alt"></i>
|
||||
</button>
|
||||
<button type="button" class="delete-armor-btn" data-item-id="{{this._id}}" title="Remove Armour">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless armors.length}}
|
||||
<div class="weapon-empty"><em>Drag armor items here.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- GEAR ITEMS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-toolbox"></i> Gear Items</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each gearItems}}
|
||||
<div class="weapon-item gear-item" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name gear-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge">{{#if this.system.quantity}}{{this.system.quantity}}{{else}}1{{/if}}x</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>Weight</strong> {{#if this.system.weight}}{{this.system.weight}}{{else}}0{{/if}}</span>
|
||||
<span class="weapon-stat"><strong>INIT</strong> {{#if (gt this.system.initiativeMod 0)}}+{{/if}}{{this.system.initiativeMod}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="toggle-equip-btn {{#if this.system.equipped}}equipped{{/if}}" data-item-id="{{this._id}}" title="Toggle Equipped">
|
||||
<i class="fas fa-hand-paper"></i>
|
||||
</button>
|
||||
<button type="button" class="delete-gear-btn" data-item-id="{{this._id}}" title="Remove Gear">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless gearItems.length}}
|
||||
<div class="weapon-empty"><em>Drag equipment items here.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- DRUGS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-pills"></i> Drugs</h2>
|
||||
<div class="weapon-list">
|
||||
{{#if drugWithdrawal}}
|
||||
<div class="drug-withdrawal-warning">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<strong>DRUG WITHDRAWAL</strong> — −1 die to all rolls until a drug is activated
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#each drugs}}
|
||||
<div class="weapon-item drug-item {{#if this.system.active}}drug-active{{/if}} {{#if this.system.withdrawalActive}}drug-withdrawal{{/if}}" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name drug-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge">{{#if this.system.quantity}}{{this.system.quantity}}{{else}}0{{/if}}x</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
{{#if this.system.active}}
|
||||
<span class="weapon-stat"><strong>ACTIVE</strong> {{#if this.system.activeDuration}}{{this.system.activeDuration}}{{else}}—{{/if}}</span>
|
||||
{{/if}}
|
||||
{{#if this.system.withdrawalActive}}
|
||||
<span class="weapon-stat"><strong>WITHDRAWAL</strong> {{#if this.system.withdrawalDuration}}{{this.system.withdrawalDuration}}{{else}}—{{/if}}</span>
|
||||
{{/if}}
|
||||
{{#unless this.system.active}}
|
||||
{{#unless this.system.withdrawalActive}}
|
||||
<span class="weapon-stat"><strong>Status</strong> Inactive</span>
|
||||
{{/unless}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
{{#if this.system.active}}
|
||||
<button type="button" class="drug-off-btn" data-item-id="{{this._id}}" title="Stop Drug and begin withdrawal">
|
||||
<i class="fas fa-power-off"></i>
|
||||
</button>
|
||||
{{else}}
|
||||
{{#if this.system.withdrawalActive}}
|
||||
<button type="button" class="drug-clear-withdrawal-btn" data-item-id="{{this._id}}" title="Clear Withdrawal Effect">
|
||||
<i class="fas fa-ban"></i>
|
||||
</button>
|
||||
{{else}}
|
||||
<button type="button" class="drug-activate-btn" data-item-id="{{this._id}}" title="Activate Drug (consumes 1 dose)">
|
||||
<i class="fas fa-bolt"></i>
|
||||
</button>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<button type="button" class="delete-drug-btn" data-item-id="{{this._id}}" title="Remove Drug">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless drugs.length}}
|
||||
<div class="weapon-empty"><em>Drag drug items here.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- GENERAL EQUIPMENT NOTES --}}
|
||||
<div class="equipment-section">
|
||||
<h2 class="section-header"><i class="fas fa-briefcase"></i> Equipment Notes</h2>
|
||||
<div class="editor">
|
||||
<textarea name="system.equipment" rows="10" placeholder="List armor, gear, consumables, etc...">{{system.equipment}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- EBB TAB (Ebon / Brain Waster only) --}}
|
||||
{{#if isEbbUser}}
|
||||
<div class="tab" data-tab="ebb">
|
||||
|
||||
{{!-- FLUX STATUS BAR --}}
|
||||
<div class="ebb-tab-header">
|
||||
<div class="ebb-flux-status">
|
||||
<div class="ebb-flux-label"><i class="fas fa-bolt"></i> FLUX</div>
|
||||
<div class="ebb-flux-track">
|
||||
{{!-- NO name attr here — system.flux.value is bound once in Stats tab; duplicate causes "X,X" corruption --}}
|
||||
<input type="number" value="{{system.flux.value}}" min="0" max="{{computedFluxMax}}" class="ebb-flux-input ebb-flux-mirror"
|
||||
data-mirrors="system.flux.value" />
|
||||
<span class="ebb-flux-sep">/</span>
|
||||
<span class="ebb-flux-max">{{computedFluxMax}}</span>
|
||||
</div>
|
||||
<div class="ebb-flux-actions">
|
||||
<button type="button" class="ebb-flux-recover-btn" title="Recover 1 Flux (stretch rest)">
|
||||
<i class="fas fa-plus-circle"></i> +1 Flux
|
||||
</button>
|
||||
<button type="button" class="ebb-flux-full-btn" title="Restore full Flux (shift rest)">
|
||||
<i class="fas fa-battery-full"></i> Full Rest
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- EBB SKILL --}}
|
||||
<div class="ebb-skill-panel">
|
||||
<div class="ebb-skill-label"><i class="fas fa-dice-d6"></i> Ebb Skill</div>
|
||||
<div class="ebb-skill-controls">
|
||||
<button type="button" class="skill-roll ebb-tab-skill-roll" data-skill="ebb" data-attribute="empathy" title="Roll Empathy + Ebb">
|
||||
<i class="fas fa-dice-d6"></i> Roll
|
||||
</button>
|
||||
<button type="button" class="skill-decrement" data-skill="ebb">−</button>
|
||||
<div class="ebb-skill-value skill-value">{{system.skills.ebb.value}}</div>
|
||||
<button type="button" class="skill-increment" data-skill="ebb">+</button>
|
||||
{{!-- NO hidden input here — the Stats tab already binds system.skills.ebb.value --}}
|
||||
</div>
|
||||
<div class="ebb-dice-summary">Pool: Empathy {{system.attributes.empathy.value}} + Ebb {{system.skills.ebb.value}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- FORMULAE LIST --}}
|
||||
<div class="ebb-formulae-section">
|
||||
<h2 class="section-header"><i class="fas fa-scroll"></i> Known Formulae
|
||||
<span class="ebb-formula-count">{{ebbFormulae.length}} known</span>
|
||||
</h2>
|
||||
|
||||
{{!-- Group formulae by discipline --}}
|
||||
<div class="ebb-formulae-list">
|
||||
{{#each ebbFormulae}}
|
||||
<div class="ebb-formula-item" data-item-id="{{this._id}}">
|
||||
<img class="ebb-formula-icon" src="{{this.img}}" width="40" height="40" title="{{this.system.discipline}}"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge ebb-discipline-badge ebb-disc-{{this.system.discipline}}">{{this.system.discipline}}</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat ebb-flux-cost"><i class="fas fa-bolt"></i> {{this.system.fluxCost}}</span>
|
||||
<span class="weapon-stat"><strong>SUC</strong> {{this.system.successes}}</span>
|
||||
{{#if this.system.range}}<span class="weapon-stat"><strong>Range</strong> {{this.system.range}}</span>{{/if}}
|
||||
{{#if this.system.duration}}<span class="weapon-stat"><strong>Dur</strong> {{this.system.duration}}</span>{{/if}}
|
||||
</div>
|
||||
{{#if this.system.effect}}
|
||||
<div class="ebb-effect-row">
|
||||
<span class="ebb-effect-text">{{this.system.effect}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="ebb-formula-roll-btn" data-item-id="{{this._id}}" title="Use {{this.name}} (costs {{this.system.fluxCost}} Flux)">
|
||||
<i class="fas fa-bolt"></i>
|
||||
</button>
|
||||
<button type="button" class="ebb-formula-edit-btn" data-item-id="{{this._id}}" title="Edit Formula">
|
||||
<i class="fas fa-edit"></i>
|
||||
</button>
|
||||
<button type="button" class="ebb-formula-delete-btn" data-item-id="{{this._id}}" title="Remove Formula">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless ebbFormulae.length}}
|
||||
<div class="weapon-empty">
|
||||
<em>No formulae known. Drag Ebb items from the world item list.</em>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- BIO TAB --}}
|
||||
{{!-- ══ FINANCES TAB ══ --}}
|
||||
<div class="tab" data-tab="finances">
|
||||
<div class="finances-section">
|
||||
|
||||
<div class="finances-credits-hero">
|
||||
<span class="fin-credit-label">CURRENT BALANCE</span>
|
||||
<span class="fin-credit-value"><input type="number" name="system.details.credits" value="{{system.details.credits}}" /> c</span>
|
||||
{{#if system.finances.debt}}<span class="fin-debt-badge">⚠ DEBT {{system.finances.debt}}c</span>{{/if}}
|
||||
</div>
|
||||
|
||||
<div class="finances-grid">
|
||||
<div class="fin-panel income-panel">
|
||||
<div class="fin-panel-title"><i class="fas fa-arrow-up"></i> Weekly Income</div>
|
||||
<div class="fin-row"><label>Base Salary</label><div class="fin-amount"><input type="number" name="system.finances.income.salary" value="{{system.finances.income.salary}}" /><span>c</span></div></div>
|
||||
<div class="fin-row"><label>BPN Reward</label><div class="fin-amount"><input type="number" name="system.finances.income.bpnReward" value="{{system.finances.income.bpnReward}}" /><span>c</span></div></div>
|
||||
<div class="fin-row"><label>Other Income</label><div class="fin-amount"><input type="number" name="system.finances.income.other" value="{{system.finances.income.other}}" /><span>c</span></div></div>
|
||||
<div class="fin-row fin-total income-total"><label>Total</label><span class="fin-total-val">{{weeklyIncome}}c</span></div>
|
||||
</div>
|
||||
<div class="fin-panel expense-panel">
|
||||
<div class="fin-panel-title"><i class="fas fa-arrow-down"></i> Weekly Expenses</div>
|
||||
<div class="fin-row"><label>Accommodation</label><div class="fin-amount"><input type="number" name="system.finances.expenses.accommodation" value="{{system.finances.expenses.accommodation}}" /><span>c</span></div></div>
|
||||
<div class="fin-row"><label>Drug Costs</label><div class="fin-amount"><input type="number" name="system.finances.expenses.drugs" value="{{system.finances.expenses.drugs}}" /><span>c</span></div></div>
|
||||
<div class="fin-row"><label>Subscriptions</label><div class="fin-amount"><input type="number" name="system.finances.expenses.subscriptions" value="{{system.finances.expenses.subscriptions}}" /><span>c</span></div></div>
|
||||
<div class="fin-row"><label>Other</label><div class="fin-amount"><input type="number" name="system.finances.expenses.other" value="{{system.finances.expenses.other}}" /><span>c</span></div></div>
|
||||
<div class="fin-row"><label>💸 Bullet Tax (session)</label><span class="fin-btax">{{system.finances.expenses.bulletTax}}c</span></div>
|
||||
<div class="fin-row"><label>Debt</label><div class="fin-amount"><input type="number" name="system.finances.debt" value="{{system.finances.debt}}" /><span>c</span></div></div>
|
||||
<div class="fin-row fin-total expense-total"><label>Total</label><span class="fin-total-val">{{weeklyExpenses}}c</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="fin-net-bar">
|
||||
<span class="fin-net-label">Net Weekly Income</span>
|
||||
<span class="fin-net-val {{#if (gte weeklyNet 0)}}net-positive{{else}}net-negative{{/if}}">{{weeklyNetSign}}{{weeklyNet}}c</span>
|
||||
</div>
|
||||
|
||||
{{!-- ══ BPN PANEL ══ --}}
|
||||
<div class="bpn-panel bpn-type-{{system.bpn.type}}">
|
||||
<div class="bpn-header">
|
||||
<div class="bpn-header-left">
|
||||
<span class="bpn-type-badge">{{#if system.bpn.type}}{{system.bpn.type}}{{else}}BLUE{{/if}} BPN</span>
|
||||
<input type="text" class="bpn-code-input" name="system.bpn.code" value="{{system.bpn.code}}" placeholder="BPN-XXX-α" />
|
||||
</div>
|
||||
<div class="bpn-header-right">
|
||||
<select name="system.bpn.type" class="bpn-type-select">
|
||||
<option value="blue" {{#if (eq system.bpn.type "blue")}}selected{{/if}}>Blue</option>
|
||||
<option value="red" {{#if (eq system.bpn.type "red")}}selected{{/if}}>Red</option>
|
||||
<option value="white" {{#if (eq system.bpn.type "white")}}selected{{/if}}>White</option>
|
||||
<option value="gold" {{#if (eq system.bpn.type "gold")}}selected{{/if}}>Gold</option>
|
||||
<option value="silver" {{#if (eq system.bpn.type "silver")}}selected{{/if}}>Silver</option>
|
||||
<option value="black" {{#if (eq system.bpn.type "black")}}selected{{/if}}>Black</option>
|
||||
<option value="grey" {{#if (eq system.bpn.type "grey")}}selected{{/if}}>Grey</option>
|
||||
<option value="violet" {{#if (eq system.bpn.type "violet")}}selected{{/if}}>Violet</option>
|
||||
</select>
|
||||
<select name="system.bpn.status" class="bpn-status-select">
|
||||
<option value="open" {{#if (eq system.bpn.status "open")}}selected{{/if}}>Open</option>
|
||||
<option value="active" {{#if (eq system.bpn.status "active")}}selected{{/if}}>Active</option>
|
||||
<option value="complete" {{#if (eq system.bpn.status "complete")}}selected{{/if}}>Complete</option>
|
||||
<option value="failed" {{#if (eq system.bpn.status "failed")}}selected{{/if}}>Failed</option>
|
||||
</select>
|
||||
<div class="bpn-reward-field">
|
||||
<span class="bpn-reward-label">Reward</span>
|
||||
<div class="fin-amount">
|
||||
<input type="number" name="system.bpn.reward" value="{{system.bpn.reward}}" class="bpn-reward-input" />
|
||||
<span>c</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bpn-body">
|
||||
<div class="bpn-field">
|
||||
<label class="bpn-field-label"><i class="fas fa-file-alt"></i> Briefing</label>
|
||||
<textarea name="system.bpn.description" class="bpn-textarea" rows="3" placeholder="BPN briefing and background...">{{system.bpn.description}}</textarea>
|
||||
</div>
|
||||
<div class="bpn-field">
|
||||
<label class="bpn-field-label"><i class="fas fa-tasks"></i> Objectives</label>
|
||||
<textarea name="system.bpn.objectives" class="bpn-textarea" rows="3" placeholder="• Primary objective • Secondary objective...">{{system.bpn.objectives}}</textarea>
|
||||
</div>
|
||||
<div class="bpn-field">
|
||||
<label class="bpn-field-label"><i class="fas fa-sticky-note"></i> Notes</label>
|
||||
<textarea name="system.bpn.notes" class="bpn-textarea" rows="2" placeholder="Field notes, contacts, intel...">{{system.bpn.notes}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab" data-tab="bio">
|
||||
<div class="bio-section">
|
||||
<h2>Biography</h2>
|
||||
|
||||
<h3>Background</h3>
|
||||
<div class="editor">
|
||||
<textarea name="system.bio.background" rows="8" placeholder="Character background and history...">{{system.bio.background}}</textarea>
|
||||
</div>
|
||||
|
||||
<h3>Appearance</h3>
|
||||
<div class="editor">
|
||||
<textarea name="system.bio.appearance" rows="5" placeholder="Physical description...">{{system.bio.appearance}}</textarea>
|
||||
</div>
|
||||
|
||||
<h3>Personality</h3>
|
||||
<div class="editor">
|
||||
<textarea name="system.bio.personality" rows="5" placeholder="Personality traits and behavior...">{{system.bio.personality}}</textarea>
|
||||
</div>
|
||||
|
||||
<h3>Notes</h3>
|
||||
<div class="editor">
|
||||
<textarea name="system.bio.notes" rows="6" placeholder="Additional notes...">{{system.bio.notes}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,56 @@
|
||||
<form class="{{cssClass}}{{#if actor.isBroken}} broken{{/if}}" autocomplete="off">
|
||||
|
||||
|
||||
<div class="sheet-header">
|
||||
<div class="container-header">
|
||||
|
||||
<div class="avatar">
|
||||
<img class="profile" src="{{actor.img}}" data-edit="img" data-tooltip="{{actor.name}}"/>
|
||||
</div>
|
||||
|
||||
<div class="actor-name">
|
||||
<input type="text" name="name" value="{{actor.name}}"/>
|
||||
</div>
|
||||
|
||||
<div class="nature boxed-property container">
|
||||
<h3>{{localize "FLBR.Nature"}}</h3>
|
||||
<select {{#unless isGM}} disabled{{/unless}}>
|
||||
<option selected>{{localize "FLBR.NATURE.Human"}} ?</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="capacities">
|
||||
{{#if system.health}}
|
||||
<div class="capacity-health boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Health"}}<span class="capacity-rating">?/?</span></h3>
|
||||
<div class="capacity-boxes" style="color: var(--color-disabled);">
|
||||
{{#times 4}}
|
||||
{{{@root.config.Icons.boxes.empty}}}
|
||||
{{/times}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if system.resolve}}
|
||||
<div class="capacity-resolve boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Resolve"}}<span class="capacity-rating">?/?</span></h3>
|
||||
<div class="capacity-boxes" style="color: var(--color-disabled);">
|
||||
{{#times 4}}
|
||||
{{{@root.config.Icons.boxes.empty}}}
|
||||
{{/times}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<div class="archetype">
|
||||
<input type="text" value="???" disabled/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sheet-body">
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,137 @@
|
||||
<form class="{{cssClass}}{{#if actor.isBroken}} broken{{/if}}" autocomplete="off">
|
||||
|
||||
{{!-- SHEET HEADER --}}
|
||||
|
||||
<div class="sheet-header">
|
||||
<div class="container-header">
|
||||
|
||||
<div class="avatar">
|
||||
<img class="profile" src="{{actor.img}}" data-edit="img" data-tooltip="{{actor.name}}"/>
|
||||
</div>
|
||||
|
||||
<div class="actor-name">
|
||||
<input type="text" name="name" value="{{actor.name}}"/>
|
||||
</div>
|
||||
|
||||
<div class="nature boxed-property container">
|
||||
<h3>{{localize "FLBR.Nature"}}</h3>
|
||||
<select name="system.nature" data-tooltip="{{localize "FLBR.NatureHint"}}"{{#unless editNature}} disabled{{/unless}}>
|
||||
{{selectOptions config.natures selected=system.nature localize=true}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="capacities">
|
||||
{{#if system.health}}
|
||||
<div class="capacity-health boxed-property{{#if (lte system.health.value 0)}} broken{{else if (lte system.health.ratio 0.5)}} half{{/if}}">
|
||||
<h3>
|
||||
{{localize "FLBR.HEADER.Health"}}
|
||||
{{#if (lte system.health.value 0)}}
|
||||
<b>({{toUpperCase (localize "FLBR.BrokenByDamage")}})</b>
|
||||
{{/if}}
|
||||
<span class="capacity-rating">{{system.health.value}}/{{system.health.max}}</span>
|
||||
</h3>
|
||||
{{boxes "system.health.value" value=system.health.value min=0 max=system.health.max loss=system.health.permanentLoss}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if (and system.resolve isPC)}}
|
||||
<div class="capacity-resolve boxed-property{{#if (lte system.resolve.value 0)}} broken{{else if (lte system.resolve.ratio 0.5)}} half{{/if}}">
|
||||
<h3>
|
||||
{{localize "FLBR.HEADER.Resolve"}}
|
||||
{{#if (lte system.resolve.value 0)}}
|
||||
<b>({{toUpperCase (localize "FLBR.BrokenByStress")}})</b>
|
||||
{{/if}}
|
||||
<span class="capacity-rating">{{system.resolve.value}}/{{system.resolve.max}}</span>
|
||||
</h3>
|
||||
{{boxes "system.resolve.value" value=system.resolve.value min=0 max=system.resolve.max loss=system.resolve.permanentLoss}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<div class="sla-character-info" style="display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; margin-bottom: 10px;">
|
||||
<div class="race boxed-property container">
|
||||
<h3>Race/Species</h3>
|
||||
<select name="system.race" multiple size="7" data-tooltip="Select one or more races (Ctrl/Cmd+Click for multiple)">
|
||||
<option value="human" {{#if (contains system.race "human")}}selected{{/if}}>Human</option>
|
||||
<option value="ebon" {{#if (contains system.race "ebon")}}selected{{/if}}>Ebon</option>
|
||||
<option value="brainwaster" {{#if (contains system.race "brainwaster")}}selected{{/if}}>Brain Waster</option>
|
||||
<option value="stormer" {{#if (contains system.race "stormer")}}selected{{/if}}>Stormer (313 Malice)</option>
|
||||
<option value="shaktar" {{#if (contains system.race "shaktar")}}selected{{/if}}>Shaktar</option>
|
||||
<option value="wraith" {{#if (contains system.race "wraith")}}selected{{/if}}>Wraith Raider</option>
|
||||
<option value="frother" {{#if (contains system.race "frother")}}selected{{/if}}>Frother</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="training boxed-property container">
|
||||
<h3>Training Package</h3>
|
||||
<select name="system.training" multiple size="7" data-tooltip="Select one or more training packages (Ctrl/Cmd+Click for multiple)">
|
||||
<option value="scout" {{#if (contains system.training "scout")}}selected{{/if}}>Scout</option>
|
||||
<option value="investigator" {{#if (contains system.training "investigator")}}selected{{/if}}>Investigator</option>
|
||||
<option value="frother-pkg" {{#if (contains system.training "frother-pkg")}}selected{{/if}}>Frother</option>
|
||||
<option value="corporate" {{#if (contains system.training "corporate")}}selected{{/if}}>Corporate</option>
|
||||
<option value="medic" {{#if (contains system.training "medic")}}selected{{/if}}>Medic / Field Surgeon</option>
|
||||
<option value="ebon-investigator" {{#if (contains system.training "ebon-investigator")}}selected{{/if}}>Ebon - Investigator</option>
|
||||
<option value="brainwaster-operative" {{#if (contains system.training "brainwaster-operative")}}selected{{/if}}>Brain Waster - Operative</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="archetype boxed-property container">
|
||||
<h3>Archetype</h3>
|
||||
<input list="list-of-archetypes" type="text" name="system.archetype" value="{{system.archetype}}"/>
|
||||
<datalist id="list-of-archetypes">
|
||||
{{selectOptions config.archetypes localize=true}}
|
||||
</datalist>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- SHEET TABS --}}
|
||||
|
||||
<div class="sheet-tabs" data-group="primary">
|
||||
<a class="sheet-tab" data-tab="stats">{{{config.Icons.tabs.stats}}} {{localize "FLBR.TAB.Stats"}}</a>
|
||||
<a class="sheet-tab" data-tab="mods">{{{config.Icons.tabs.mods}}} {{localize "FLBR.TAB.Mods"}}</a>
|
||||
<a class="sheet-tab" data-tab="combat">{{{config.Icons.tabs.combat}}} {{localize "FLBR.TAB.Combat"}}</a>
|
||||
<a class="sheet-tab" data-tab="inventory">{{{config.Icons.tabs.inventory}}} {{localize "FLBR.TAB.Inventory"}}</a>
|
||||
<a class="sheet-tab" data-tab="bio">
|
||||
{{{config.Icons.tabs.bio}}}
|
||||
{{#if isPC}}
|
||||
{{localize "FLBR.TAB.Bio"}}
|
||||
{{else if isNPC}}
|
||||
{{localize "FLBR.HEADER.Notes"}}
|
||||
{{/if}}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{!-- SHEET BODY --}}
|
||||
|
||||
<div class="sheet-body">
|
||||
<div class="tab" data-group="primary" data-tab="stats">
|
||||
{{> systems/zero-engine/templates/actor/character/sheet-tabs/stats-tab.hbs}}
|
||||
</div>
|
||||
<div class="tab" data-group="primary" data-tab="mods">
|
||||
{{> systems/blade-runner/templates/actor/character/sheet-tabs/mods-tab.hbs}}
|
||||
</div>
|
||||
<div class="tab" data-group="primary" data-tab="combat">
|
||||
{{> systems/blade-runner/templates/actor/character/sheet-tabs/combat-tab.hbs}}
|
||||
</div>
|
||||
<div class="tab" data-group="primary" data-tab="inventory">
|
||||
{{> systems/blade-runner/templates/actor/character/sheet-tabs/inventory-tab.hbs}}
|
||||
</div>
|
||||
<div class="tab" data-group="primary" data-tab="bio">
|
||||
{{#if isPC}}
|
||||
{{> systems/zero-engine/templates/actor/character/sheet-tabs/bio-tab.hbs}}
|
||||
{{else if isNPC}}
|
||||
<div class="boxed-property npc-notes">
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- SHEET FOOTER --}}
|
||||
|
||||
{{!-- <div class="sheet-footer"></div> --}}
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,38 @@
|
||||
<div class="bio-tab container">
|
||||
<div class="boxed-property bio-notes">
|
||||
<h3>{{localize "FLBR.HEADER.Notes"}}</h3>
|
||||
<div class="bio-editor">
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
{{#if system.bio}}
|
||||
<div class="boxed-property years-on-the-force">
|
||||
<h3>{{localize "FLBR.HEADER.YearsOnTheForce"}}</h3>
|
||||
<input type="text" name="system.bio.yearsOnTheForce" value="{{system.bio.yearsOnTheForce}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Appearance"}}</h3>
|
||||
<div class="bio-editor">
|
||||
{{{editor system.bio.appearance target="system.bio.appearance" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Home"}}</h3>
|
||||
<div class="bio-editor">
|
||||
{{{editor system.bio.home target="system.bio.home" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.KeyMemory"}}</h3>
|
||||
<div class="bio-editor">
|
||||
{{{editor system.bio.keyMemory target="system.bio.keyMemory" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.KeyRelationship"}}</h3>
|
||||
<div class="bio-editor">
|
||||
{{{editor system.bio.keyRelationship target="system.bio.keyRelationship" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -0,0 +1,21 @@
|
||||
<div class="combat-tab container">
|
||||
<div class="weapons boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Weapons"}}{{createNewItemButton "weapon"}}</h3>
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.weapon}}
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.explosive}}
|
||||
</div>
|
||||
<div class="armors boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Armor"}}{{createNewItemButton "armor"}}</h3>
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.armor}}
|
||||
</div>
|
||||
<div class="injuries boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Injuries"}}{{createNewItemButton "injury"}}</h3>
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.injury}}
|
||||
</div>
|
||||
<div class="actions boxed-property">
|
||||
<h4>{{localize "FLBR.HEADER.Actions"}}</h4>
|
||||
{{#each actions}}
|
||||
<a class="action-roll" data-action="{{id}}" data-tooltip="{{localize hint}}">{{{@root.config.Icons.buttons.action}}}{{localize label}}</a>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,47 @@
|
||||
<div class="inventory-tab">
|
||||
{{#if isPC}}
|
||||
<div class="special-gear">
|
||||
{{!-- <div class="favored-gear boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.FavoredGear"}}</h3>
|
||||
<input type="text" name="system.favoredGear" value="{{system.favoredGear}}"/>
|
||||
</div> --}}
|
||||
<div class="signature-item boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.SignatureItem"}}</h3>
|
||||
<div class="flex row">
|
||||
<input type="text" name="system.signatureItem.name" value="{{system.signatureItem.name}}" class="flex-1"/>
|
||||
<input type="checkbox" name="system.signatureItem.used" data-tooltip="{{localize "FLBR.SignatureItemUsedCheckboxHint"}}" {{checked system.signatureItem.used}}/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="inventory boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Inventory"}}{{createNewItemButton "generic"}}</h3>
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.generic wrap=true}}
|
||||
</div>
|
||||
|
||||
{{#each config.customItemTypesTemplates as | template |}}
|
||||
<div class="inventory boxed-property">
|
||||
<h3>{{localize (concat "TYPES.Item." @key)}}{{createNewItemButton @key}}</h3>
|
||||
{{> (template) items=(lookup ../actor.itemTypes @key)}}
|
||||
</div>
|
||||
{{/each}}
|
||||
|
||||
{{#if isPC}}
|
||||
<div class="meta-currencies flex row space-between">
|
||||
<div class="meta-currency-promotion boxed-property">
|
||||
<h4>{{localize "FLBR.HEADER.PromotionPoints"}}<span style="float: right;">{{system.metaCurrencies.promotion}}</span></h4>
|
||||
{{boxes "system.metaCurrencies.promotion" value=system.metaCurrencies.promotion min=0 max=config.maxPromotionPoints}}
|
||||
</div>
|
||||
<div class="meta-currency-humanity boxed-property">
|
||||
<h4>{{localize "FLBR.HEADER.HumanityPoints"}}<span style="float: right;">{{system.metaCurrencies.humanity}}</span></h4>
|
||||
{{boxes "system.metaCurrencies.humanity" value=system.metaCurrencies.humanity min=0 max=config.maxHumanityPoints}}
|
||||
</div>
|
||||
<div class="meta-currency-chinyen boxed-property">
|
||||
<h4>{{localize "FLBR.HEADER.ChinyenPoints"}}<span style="float: right;">{{system.metaCurrencies.chinyen}}</span></h4>
|
||||
{{boxes "system.metaCurrencies.chinyen" value=system.metaCurrencies.chinyen min=0 max=config.maxChinyenPoints}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -0,0 +1,21 @@
|
||||
<div class="mods-tab">
|
||||
<div class="specialties boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Specialties"}}{{createNewItemButton "specialty"}}</h3>
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.specialty}}
|
||||
</div>
|
||||
<div class="augments boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Augments"}}{{createNewItemButton "upgrade"}}</h3>
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=actor.itemTypes.upgrade}}
|
||||
</div>
|
||||
{{#if showEffects}}
|
||||
<div class="active-effects boxed-property">
|
||||
<h4>
|
||||
{{localize "DOCUMENT.ActiveEffects"}}
|
||||
<a class="btn add-active-effect" data-tooltip="{{localize "FLBR.ACTIVE_EFFECT.Add"}}">
|
||||
{{{@root.config.Icons.buttons.plus}}}
|
||||
</a>
|
||||
</h4>
|
||||
{{> systems/blade-runner/templates/item/active-effects-partial.hbs}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -0,0 +1,75 @@
|
||||
<div class="ze-stats">
|
||||
{{#each system.attributes as | attribute attrKey |}}
|
||||
{{#unless (eq attrKey "mvr")}}
|
||||
<div class="ze-attribute-block">
|
||||
<div class="ze-attribute-header">
|
||||
<button class="ze-attr-roll-btn stat-roll" data-attribute="{{attrKey}}" type="button">
|
||||
<span class="ze-attr-name">{{localize (concat "FLBR.ATTRIBUTE." (toUpperCase attrKey))}}</span>
|
||||
<i class="fas fa-dice-d6"></i>
|
||||
</button>
|
||||
<div class="ze-attr-score">
|
||||
{{scoreSelector (concat "system.attributes." attrKey ".value") selected=attribute.value}}
|
||||
</div>
|
||||
<div class="ze-attr-die boxed-value stat-roll rollable" data-attribute="{{attrKey}}">
|
||||
{{#if (lte attribute.value 0)}}—{{else}}{{localize "FLBR.D"}}{{attribute.value}}{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="ze-skills-list">
|
||||
{{#each @root.system.skills as | skill skillKey |}}
|
||||
{{#if (eq attrKey (lookup @root.config.skillMap skillKey))}}
|
||||
<div class="ze-skill-row">
|
||||
<a class="ze-skill-name stat-roll" data-skill="{{skillKey}}" data-attribute="{{attrKey}}">
|
||||
{{localize (concat "FLBR.SKILL." (capitalize skillKey))}}
|
||||
</a>
|
||||
<div class="ze-skill-score">
|
||||
{{scoreSelector (concat "system.skills." skillKey ".value") selected=skill.value}}
|
||||
</div>
|
||||
<div class="ze-skill-die boxed-value stat-roll rollable" data-skill="{{skillKey}}" data-attribute="{{attrKey}}">
|
||||
{{#if (lte skill.value 0)}}—{{else}}{{localize "FLBR.D"}}{{skill.value}}{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
{{/unless}}
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
{{!-- Specialties Section --}}
|
||||
<div class="specialties-section">
|
||||
<h2 class="section-header">
|
||||
<i class="fas fa-star"></i> Specialties
|
||||
<span class="specialty-count">({{actor.items.size}})</span>
|
||||
</h2>
|
||||
<div class="specialties-container">
|
||||
<div class="specialty-drop-zone" data-tooltip="Drag and drop specialty items here">
|
||||
{{#if (gt actor.items.size 0)}}
|
||||
<ul class="specialty-list">
|
||||
{{#each actor.items as |item|}}
|
||||
{{#if (eq item.type "specialty")}}
|
||||
<li class="specialty-item" data-item-id="{{item._id}}">
|
||||
<div class="specialty-header">
|
||||
<img class="specialty-icon" src="{{item.img}}" alt="{{item.name}}"/>
|
||||
<h4 class="specialty-name">{{item.name}}</h4>
|
||||
<div class="specialty-controls">
|
||||
<a class="item-edit" data-tooltip="Edit Specialty"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-delete" data-tooltip="Delete Specialty"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="specialty-description">
|
||||
{{item.system.description}}
|
||||
</div>
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{else}}
|
||||
<div class="empty-specialties">
|
||||
<i class="fas fa-star-half-alt"></i>
|
||||
<p>No specialties yet. Drag and drop specialty items here.</p>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,125 @@
|
||||
{{!-- The parameters are: --}}
|
||||
{{!-- {Item[]} items - See actor.itemTypes.<type> --}}
|
||||
{{!-- {boolean} wrap - Whether to wrap items in rows or not. --}}
|
||||
<div class="embedded-items flex {{#if wrap}}row wrap{{else}}column{{/if}}">
|
||||
{{#each items}}
|
||||
<div class="embedded-item flex row {{type}}" data-item-id="{{id}}">
|
||||
<div class="photo{{#if hasAction}} item-control rollable{{/if}}" data-action="roll">
|
||||
<img src="{{img}}" data-tooltip="{{name}}"/>
|
||||
</div>
|
||||
|
||||
<div class="details"{{#if isPhysical}} data-tooltip='{{{enrichDocumentName system.description}}}'{{/if}}>
|
||||
<div class="name{{#if (lte system.qty 0)}} empty-item{{/if}}">
|
||||
{{#if system.lethal}}
|
||||
{{{@root.config.Icons.buttons.lethal}}}
|
||||
{{/if}}
|
||||
{{detailedName}}
|
||||
</div>
|
||||
|
||||
{{#if system.special}}
|
||||
<div class="item-detail special">{{system.special}}</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Weapons & Explosives --}}
|
||||
{{#if isOffensive}}
|
||||
{{#if (eq type "explosive")}}
|
||||
<div class="item-detail explosive">
|
||||
{{localize "FLBR.Blast"}} {{localize "FLBR.D"}}{{system.blast}}
|
||||
</div>
|
||||
{{else if hasAttack}}
|
||||
<div class="item-detail damage">
|
||||
{{#each system.attacks}}
|
||||
<div>
|
||||
{{#if (eq damageType 1)}}
|
||||
{{{@root.config.Icons.buttons.crush}}}{{damage}}
|
||||
{{else if (eq damageType 2)}}
|
||||
{{{@root.config.Icons.buttons.pierce}}}{{damage}}
|
||||
{{else if (eq damageType 3)}}
|
||||
{{{@root.config.Icons.buttons.stress}}}{{damage}}
|
||||
{{else}}
|
||||
{{damage}}
|
||||
{{/if}}
|
||||
</div>
|
||||
<div>
|
||||
{{#unless (eq crit 0)}}
|
||||
{{{@root.config.Icons.buttons.crit}}}{{localize "FLBR.D"}}{{crit}}
|
||||
{{/unless}}
|
||||
</div>
|
||||
<div>
|
||||
{{#if (gt range.max 0)}}
|
||||
{{{@root.config.Icons.buttons.range}}}{{localize (lookup @root.config.ranges range.max)}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{!-- Armors --}}
|
||||
{{else if system.armor includeZero=true}}
|
||||
<div class="item-detail armor">
|
||||
{{localize "TYPES.Item.armor"}} {{localize "FLBR.D"}}{{system.armor}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if system.description}}
|
||||
{{#unless isPhysical}}
|
||||
<div class="item-detail description">
|
||||
{{{enrichDocumentName system.description}}}
|
||||
</div>
|
||||
{{/unless}}
|
||||
{{else if hasModifier}}
|
||||
<div class="item-detail modifiers-description">{{modifiersDescription}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Item Controls --}}
|
||||
|
||||
<div class="item-controls">
|
||||
{{#if system.blast}}
|
||||
<a class="btn item-control" data-action="blast" data-tooltip="{{localize "FLBR.SHEET_HEADER.BlastPowerRoll"}}">
|
||||
{{{@root.config.Icons.buttons.bomb}}}
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if (eq type "armor")}}
|
||||
<a class="btn item-control" data-action="roll" data-tooltip="{{localize "FLBR.SHEET_HEADER.ArmorRoll"}}">
|
||||
{{{@root.config.Icons.buttons.armor}}}
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if hasAction}}
|
||||
<a class="btn item-control" data-action="roll" data-tooltip="{{localize "FLBR.BUTTON.Roll"}}">
|
||||
{{{@root.config.Icons.buttons.roll}}}
|
||||
</a>
|
||||
{{/if}}
|
||||
<a class="btn item-control" data-action="edit" data-tooltip="{{localize "FLBR.BUTTON.Edit"}}">
|
||||
{{{@root.config.Icons.buttons.edit}}}
|
||||
</a>
|
||||
<a class="btn item-control" data-action="chat" data-tooltip="{{localize "FLBR.BUTTON.ToChat"}}">
|
||||
{{{@root.config.Icons.buttons.chat}}}
|
||||
</a>
|
||||
{{#if (and hasAttack (eq @root.actor.type "vehicle"))}}
|
||||
{{#if system.mounted}}
|
||||
<a class="btn item-control" data-action="unmount" data-tooltip="{{localize "FLBR.BUTTON.Unmount"}}">
|
||||
{{{@root.config.Icons.buttons.unmount}}}
|
||||
</a>
|
||||
{{else}}
|
||||
<a class="btn item-control" data-action="mount" data-tooltip="{{localize "FLBR.BUTTON.Mount"}}">
|
||||
{{{@root.config.Icons.buttons.mount}}}
|
||||
</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{#unless system.mounted}}
|
||||
<a class="btn item-delete" data-tooltip="{{localize "FLBR.BUTTON.Delete"}}">
|
||||
{{{@root.config.Icons.buttons.remove}}}
|
||||
</a>
|
||||
<a class="btn item-delete-confirmed" style="display: none;" data-tooltip="{{localize "FLBR.BUTTON.Delete"}}">
|
||||
{{{@root.config.Icons.buttons.delete}}}
|
||||
</a>
|
||||
{{/unless}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="empty-inventory">
|
||||
{{localize "FLBR.InventoryNoItem"}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
@@ -0,0 +1,27 @@
|
||||
<form class="{{cssClass}}" autocomplete="off">
|
||||
<div class="loot-container">
|
||||
|
||||
<div class="loot-name">
|
||||
<input type="text" name="name" value="{{actor.name}}"/>
|
||||
</div>
|
||||
|
||||
<div class="avatar">
|
||||
<img class="profile" src="{{actor.img}}" data-edit="img" data-tooltip="{{actor.name}}"/>
|
||||
</div>
|
||||
|
||||
<div class="loot-notes boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Notes"}}</h3>
|
||||
<div>
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="loot-type">{{localize "TYPES.Actor.loot"}}</div>
|
||||
|
||||
<div class="loot-inventory boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Inventory"}}</h3>
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=items}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,205 @@
|
||||
<form class="{{cssClass}} zero-engine npc-sheet" autocomplete="off">
|
||||
|
||||
{{!-- SHEET HEADER --}}
|
||||
<div class="sheet-header">
|
||||
|
||||
{{!-- TOP ROW: Portrait + Name --}}
|
||||
<div class="header-top-row">
|
||||
<div class="avatar">
|
||||
<img class="profile" src="{{actor.img}}" data-edit="img" data-tooltip="{{actor.name}}"/>
|
||||
</div>
|
||||
<div class="header-top-info">
|
||||
<div class="actor-name">
|
||||
<input type="text" name="name" value="{{actor.name}}" placeholder="NPC Name"/>
|
||||
</div>
|
||||
<div class="header-top-stats">
|
||||
<div class="mini-stat">
|
||||
<span class="mini-stat-label">Threat</span>
|
||||
<input type="number" name="system.threat" value="{{system.threat}}" placeholder="1" min="1" max="5"/>
|
||||
</div>
|
||||
<div class="mini-stat">
|
||||
<span class="mini-stat-label">Armor</span>
|
||||
<input type="number" name="system.armor" value="{{system.armor}}" placeholder="0" min="0"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- VITALS ROW: Health --}}
|
||||
<div class="header-vitals-row">
|
||||
<div class="vital-box health-box">
|
||||
<label>Health</label>
|
||||
<div class="vital-values">
|
||||
<input type="number" name="system.health.value" value="{{system.health.value}}" />
|
||||
<span class="vital-separator">/</span>
|
||||
<input type="number" name="system.health.max" value="{{system.health.max}}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="vital-box">
|
||||
<label>Base Damage</label>
|
||||
<input type="number" name="system.damage" value="{{system.damage}}" min="0" style="width:3rem;"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Active conditions from SLA status effects --}}
|
||||
{{#if activeConditions.length}}
|
||||
<div class="active-conditions-row">
|
||||
{{#each activeConditions}}
|
||||
<div class="condition-tag {{this.id}}" title="{{this.description}}">
|
||||
<i class="{{this.icon}}"></i>
|
||||
<span class="condition-label">{{this.label}}</span>
|
||||
<button type="button" class="condition-clear-btn" data-condition-id="{{this.id}}" title="Clear condition">✕</button>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- SHEET TABS --}}
|
||||
<div class="sheet-tabs">
|
||||
<a class="item" data-tab="stats">
|
||||
<i class="fas fa-chart-bar"></i> Stats
|
||||
</a>
|
||||
<a class="item" data-tab="combat">
|
||||
<i class="fas fa-fist-raised"></i> Combat
|
||||
</a>
|
||||
<a class="item" data-tab="bio">
|
||||
<i class="fas fa-user"></i> Bio
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{!-- SHEET BODY --}}
|
||||
<div class="sheet-body">
|
||||
|
||||
{{!-- STATS TAB --}}
|
||||
<div class="tab" data-tab="stats">
|
||||
<div class="section-header">Attributes</div>
|
||||
<div class="attr-skill-table" style="grid-template-columns: repeat(4,1fr);">
|
||||
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Strength</div>
|
||||
<div class="attr-value-row">
|
||||
<div class="attr-value">{{system.attributes.strength}}</div>
|
||||
<input type="hidden" name="system.attributes.strength" value="{{system.attributes.strength}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Agility</div>
|
||||
<div class="attr-value-row">
|
||||
<div class="attr-value">{{system.attributes.agility}}</div>
|
||||
<input type="hidden" name="system.attributes.agility" value="{{system.attributes.agility}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Wits</div>
|
||||
<div class="attr-value-row">
|
||||
<div class="attr-value">{{system.attributes.wits}}</div>
|
||||
<input type="hidden" name="system.attributes.wits" value="{{system.attributes.wits}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="attr-column">
|
||||
<div class="attr-header">
|
||||
<div class="attr-name">Empathy</div>
|
||||
<div class="attr-value-row">
|
||||
<div class="attr-value">{{system.attributes.empathy}}</div>
|
||||
<input type="hidden" name="system.attributes.empathy" value="{{system.attributes.empathy}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- COMBAT TAB --}}
|
||||
<div class="tab" data-tab="combat">
|
||||
|
||||
{{!-- RANGED WEAPONS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-crosshairs"></i> Ranged Weapons</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each rangedWeapons}}
|
||||
<div class="weapon-item" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge ranged">{{this.system.weaponType}}</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>DMG</strong> {{this.system.damage}}</span>
|
||||
<span class="weapon-stat"><strong>Range</strong> {{this.system.range}}</span>
|
||||
<span class="weapon-stat"><strong>AP</strong> {{this.system.ap}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="weapon-roll-btn"
|
||||
data-item-id="{{this._id}}" data-weapon-category="ranged"
|
||||
title="Roll attack">
|
||||
<i class="fas fa-dice-d6"></i> ATTACK
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless rangedWeapons.length}}
|
||||
<div class="weapon-empty"><em>No ranged weapons.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- MELEE WEAPONS --}}
|
||||
<div class="weapons-section">
|
||||
<h2 class="section-header"><i class="fas fa-fist-raised"></i> Melee Weapons</h2>
|
||||
<div class="weapon-list">
|
||||
{{#each meleeWeapons}}
|
||||
<div class="weapon-item" data-item-id="{{this._id}}">
|
||||
<img class="weapon-img" src="{{this.img}}" width="36" height="36"/>
|
||||
<div class="weapon-info">
|
||||
<div class="weapon-name-row">
|
||||
<span class="weapon-name">{{this.name}}</span>
|
||||
<span class="weapon-type-badge melee">{{this.system.weaponType}}</span>
|
||||
</div>
|
||||
<div class="weapon-stats-row">
|
||||
<span class="weapon-stat"><strong>DMG</strong> {{this.system.damage}}</span>
|
||||
<span class="weapon-stat"><strong>AP</strong> {{this.system.ap}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="weapon-actions">
|
||||
<button type="button" class="weapon-roll-btn"
|
||||
data-item-id="{{this._id}}" data-weapon-category="melee"
|
||||
title="Roll melee attack">
|
||||
<i class="fas fa-fist-raised"></i> ATTACK
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#unless meleeWeapons.length}}
|
||||
<div class="weapon-empty"><em>No melee weapons. Base damage: {{system.damage}}.</em></div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- BIO TAB --}}
|
||||
<div class="tab" data-tab="bio">
|
||||
<div class="bio-section">
|
||||
<h2>Biography / Notes</h2>
|
||||
<div class="editor">
|
||||
<textarea name="system.biography" rows="16" placeholder="NPC notes, background, motivation...">{{system.biography}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,42 @@
|
||||
{{#with occupant}}
|
||||
<div class="vehicle-seat occupied{{#if isBroken}} broken{{/if}}" data-action="roll-occupant" data-occupant-id="{{id}}" data-tooltip="{{name}}<hr/>{{localize "FLBR.HEADER.Health"}}: {{system.health.value}}/{{system.health.max}}" data-tooltip-direction="UP">
|
||||
<img class="rollable" src="{{img}}"/>
|
||||
{{#if (lt system.health.ratio 1)}}
|
||||
<div class="attribute-bar bar1">
|
||||
<div
|
||||
class="attribute-bar-progress"
|
||||
style="background-color: {{healthBarColor}}; width: {{multiply system.health.ratio 100}}%;"
|
||||
></div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if (and (eq system.subtype "pc") (lt system.resolve.ratio 1))}}
|
||||
<div class="attribute-bar bar2">
|
||||
<div
|
||||
class="attribute-bar-progress"
|
||||
style="background-color: {{resolveBarColor}}; width: {{multiply system.resolve.ratio 100}}%;"
|
||||
></div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if isBroken}}
|
||||
<div class="seat-icon broken">{{{@root.config.Icons.buttons.lethal}}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{else}}
|
||||
{{#if (and @root.isGM (eq seat -1))}}
|
||||
<div class="vehicle-seat button" data-action="add-occupant" data-tooltip="{{localize "FLBR.VEHICLE.AddSeat"}}" data-tooltip-direction="RIGHT">
|
||||
<div class="seat-icon">{{{@root.config.Icons.buttons.plus}}}</div>
|
||||
</div>
|
||||
{{else if (eq seat -1)}}
|
||||
{{! Nothing}}
|
||||
{{else}}
|
||||
<div class="vehicle-seat empty">
|
||||
<div class="seat-icon">
|
||||
{{#if (eq seat 1)}}
|
||||
{{{@root.config.Icons.buttons.wheel}}}
|
||||
{{else}}
|
||||
{{{@root.config.Icons.buttons.seat}}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/with}}
|
||||
@@ -0,0 +1,176 @@
|
||||
<form class="{{cssClass}}{{#if actor.isBroken}} broken{{/if}}" autocomplete="off">
|
||||
|
||||
{{!-- SHEET HEADER --}}
|
||||
|
||||
<div class="sheet-header">
|
||||
<div class="container-header">
|
||||
|
||||
<div class="vehicle-name">
|
||||
<input type="text" name="name" value="{{actor.name}}"/>
|
||||
</div>
|
||||
|
||||
<div class="avatar">
|
||||
<img class="profile" src="{{actor.img}}" data-edit="img" data-tooltip="{{actor.name}}"/>
|
||||
</div>
|
||||
|
||||
<div class="vehicle-stats">
|
||||
<div class="stat-blok stat-blok-mvr">
|
||||
<div class="attribute-name">
|
||||
<label>
|
||||
<a class="mvr-roll">
|
||||
{{trim (localize "FLBR.ATTRIBUTE.MVR") 8}}
|
||||
</a>
|
||||
</label>
|
||||
</div>
|
||||
{{#with system.maneuverability}}
|
||||
<div class="attribute-score">
|
||||
{{scoreSelector "system.maneuverability" selected=this}}
|
||||
</div>
|
||||
<div class="attribute-size">
|
||||
<div class="boxed-value mvr-roll rollable">
|
||||
{{#if (lte this 0)}}
|
||||
{{localize "FLBR.NO_VALUE"}}
|
||||
{{else}}
|
||||
{{localize "FLBR.D"}}{{this}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
{{/with}}
|
||||
</div>
|
||||
<div class="capacities">
|
||||
<div class="hull boxed-property {{#if (lte system.hull.value 0)}} broken{{else if (lte (ratio system.hull.value system.hull.max) 50)}} half{{/if}}">
|
||||
<h3>
|
||||
{{localize "FLBR.HEADER.Hull"}}
|
||||
{{#if (lte system.hull.value 0)}}
|
||||
<b>({{toUpperCase (localize "FLBR.Wrecked")}})</b>
|
||||
{{/if}}
|
||||
<span class="capacity-rating">{{system.hull.value}}/{{system.hull.max}}</span>
|
||||
</h3>
|
||||
{{boxes "system.hull.value" value=system.hull.value min=0 max=system.hull.max}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="vehicle-properties boxed-property">
|
||||
<div class="vehicle-property vehicle-property-armor">
|
||||
<label>
|
||||
<a class="roll-vehicle-armor">
|
||||
{{localize "FLBR.ItemArmor"}} ({{localize "FLBR.D"}}{{system.armor}})
|
||||
</a>
|
||||
</label>
|
||||
{{scoreSelector "system.armor" selected=system.armor}}
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="vehicle-property vehicle-property-availability">
|
||||
<label>{{localize "FLBR.ItemAvailability"}}</label>
|
||||
<select name="system.availability" data-dtype="Number">
|
||||
{{selectOptions config.availabilities selected=system.availability localize=true}}
|
||||
</select>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="vehicle-property vehicle-property-cost">
|
||||
<label>{{localize "FLBR.ItemCost"}}</label>
|
||||
<input type="text" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="vehicle-type">{{localize "TYPES.Actor.vehicle"}}</div>
|
||||
|
||||
<div class="vehicle-crew boxed-property">
|
||||
<h4>{{trim (localize "FLBR.VEHICLE.Crew") 7}}</h4>
|
||||
{{#times system.passengers}}
|
||||
{{> systems/blade-runner/templates/actor/vehicle/vehicle-seat-partial.hbs occupant=(lookup ../crew (add @index -1)) seat=@index}}
|
||||
{{/times}}
|
||||
{{> systems/blade-runner/templates/actor/vehicle/vehicle-seat-partial.hbs seat=-1}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- SHEET TABS --}}
|
||||
|
||||
<div class="sheet-tabs" data-group="primary">
|
||||
<a class="sheet-tab" data-tab="combat">{{{config.Icons.buttons.range}}} {{localize "FLBR.TAB.Combat"}}</a>
|
||||
<a class="sheet-tab" data-tab="inventory">{{{config.Icons.tabs.inventory}}} {{localize "FLBR.TAB.Inventory"}}</a>
|
||||
<a class="sheet-tab" data-tab="bio">{{{config.Icons.tabs.bio}}} {{localize "FLBR.HEADER.Notes"}}</a>
|
||||
</div>
|
||||
|
||||
{{!-- SHEET BODY --}}
|
||||
|
||||
<div class="sheet-body">
|
||||
|
||||
<div class="tab" data-group="primary" data-tab="combat">
|
||||
<div class="container">
|
||||
|
||||
{{!-- Mounted Weapons --}}
|
||||
<div class="mounted-weapons boxed-property">
|
||||
<h3>{{localize "FLBR.VEHICLE.MountedWeapons"}}</h3>
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=mountedWeapons wrap=true}}
|
||||
</div>
|
||||
|
||||
<div class="combat-options">
|
||||
|
||||
{{!-- Altitude --}}
|
||||
<div class="vehicle-altitude boxed-property">
|
||||
<label>{{localize "FLBR.VEHICLE.Altitude"}}</label>
|
||||
<input type="text" name="system.altitude" value="{{system.altitude}}" data-dtype="Number"/>
|
||||
</div>
|
||||
|
||||
{{!-- Components --}}
|
||||
<div class="boxed-property">
|
||||
<h4>{{localize "FLBR.VEHICLE.Components"}}</h4>
|
||||
<div class="vehicle-components">
|
||||
{{#each system.components}}
|
||||
<div class="vehicle-component{{#unless ../isGM}}{{#unless this}} disabled{{/unless}}{{/unless}}">
|
||||
<label class="switch">
|
||||
<input type="checkbox" id="component_{{@key}}" name="system.components.{{@key}}" {{checked this}}/>
|
||||
<span class="slider red"></span>
|
||||
</label>
|
||||
<label for="component_{{@key}}">
|
||||
<a>{{localize (concat "FLBR.VEHICLE." (capitalize @key))}}</a>
|
||||
</label>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Actions --}}
|
||||
<div class="actions boxed-property">
|
||||
<h4>{{localize "FLBR.HEADER.Actions"}}</h4>
|
||||
{{#each actions}}
|
||||
<a class="action-roll" data-action="{{id}}" data-tooltip="{{localize hint}}">{{{@root.config.Icons.buttons.action}}}{{localize label}}</a>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Active Effects --}}
|
||||
{{#if showEffects}}
|
||||
<div class="active-effects boxed-property">
|
||||
<h4>
|
||||
{{localize "DOCUMENT.ActiveEffects"}}
|
||||
<a class="btn add-active-effect" data-tooltip="{{localize "FLBR.ACTIVE_EFFECT.Add"}}">
|
||||
{{{@root.config.Icons.buttons.plus}}}
|
||||
</a>
|
||||
</h4>
|
||||
{{> systems/blade-runner/templates/item/active-effects-partial.hbs}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab" data-group="primary" data-tab="inventory">
|
||||
<div class="vehicle-inventory boxed-property">
|
||||
{{> systems/blade-runner/templates/actor/inventory-partial.hbs items=trunk wrap=true}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab" data-group="primary" data-tab="bio">
|
||||
<div class="boxed-property">
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,9 @@
|
||||
<form autocomplete="off">
|
||||
{{#if description}}
|
||||
<p>{{{description}}}</p>
|
||||
{{/if}}
|
||||
<div class="flex boxed-property">
|
||||
<input type="range" name="chooser" value="{{value}}" min="{{min}}" max="{{max}}" step="1"/>
|
||||
<div class="boxed-value range-value">{{value}}</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,31 @@
|
||||
<form autocomplete="off">
|
||||
<div class="form-group">
|
||||
<select id="table"{{#if disableSelection}} disabled{{/if}}>
|
||||
{{#each tables}}
|
||||
<option value="{{id}}"{{#if (eq id ../selected)}} selected{{/if}}>{{name}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="qty">{{localize "FLBR.COMBAT.DrawSize"}}</label>
|
||||
<input
|
||||
type="number"
|
||||
id="qty"
|
||||
style="text-align: left; padding-left: 8px;"
|
||||
value="{{qty}}"
|
||||
/>
|
||||
</div>
|
||||
{{#unless hideFormula}}
|
||||
<div class="form-group">
|
||||
<label for="formula">{{localize "FLBR.Formula"}}</label>
|
||||
<input
|
||||
type="text"
|
||||
id="formula"
|
||||
style="text-align: left; padding-left: 8px;"
|
||||
value="{{formula}}"
|
||||
placeholder="{{localize "FLBR.CustomFormula"}}"
|
||||
{{#if disableFormula}}disabled{{/if}}
|
||||
/>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</form>
|
||||
@@ -0,0 +1,5 @@
|
||||
<form autocomplete="off">
|
||||
<div class="flex column boxed-property">
|
||||
{{scoreSelector "diesize" selected=lowest}}
|
||||
</div>
|
||||
</form>
|
||||
@@ -0,0 +1,24 @@
|
||||
{{#if roll.successCount}}
|
||||
{{#if roll.options.damage includeZero=true}}
|
||||
<fieldset class="dice-infos">
|
||||
<legend>{{localize "YZUR.CHAT.ROLL.Infos"}}</legend>
|
||||
<div class="dice-info-grid">
|
||||
{{#if roll.options.damage includeZero=true}}
|
||||
<div>{{localize "YZUR.CHAT.ROLL.Damage"}}</div>
|
||||
<div>
|
||||
{{roll.options.damage}} 
|
||||
<small>({{localize roll.options.damageTypeName}})</small>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if (and roll.options.crit (gte roll.successCount 2))}}
|
||||
<div>{{localize "FLBR.CRIT.Crit"}}</div>
|
||||
<div>
|
||||
<a class="inline-table crit-roll" data-tooltip="{{localize "FLBR.CRIT.CritButtonTooltip"}}">
|
||||
{{substract roll.successCount 1}}{{localize "FLBR.D"}}{{roll.options.crit}}
|
||||
</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</fieldset>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
@@ -0,0 +1,36 @@
|
||||
<div class="dice-tooltip">
|
||||
<div class="wrapper">
|
||||
<div class="tooltip-parts">
|
||||
{{#each parts}}
|
||||
<section class="tooltip-part {{this.type}}">
|
||||
<div class="dice">
|
||||
<header class="part-header flexrow">
|
||||
<span class="part-formula">{{this.formula}}</span>
|
||||
{{#if this.flavor}}<span class="part-flavor">{{this.flavor}}</span>{{/if}}
|
||||
<span class="part-total{{#if this.total}} success{{/if}}">{{this.total}}</span>
|
||||
</header>
|
||||
<ol class="dice-rolls">
|
||||
{{#if ../pushed}}
|
||||
{{#each this.rolls as | lineRolls |}}
|
||||
<div class="dice-rolls" style="margin-top: 0; margin-bottom: 0;">
|
||||
{{#each lineRolls}}
|
||||
{{#if this}}
|
||||
<span class="roll {{this.classes}}">{{{this.result}}}</span>
|
||||
{{else}}
|
||||
<span class="roll discarded" style="background-image: none;"> </span>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/each}}
|
||||
{{else}}
|
||||
{{#each this.rolls}}
|
||||
<li class="roll {{this.classes}}">{{{this.result}}}</li>
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
</ol>
|
||||
</div>
|
||||
</section>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,64 @@
|
||||
<div
|
||||
class="yzur chat-card"
|
||||
data-actor-id="{{roll.options.actorId}}"
|
||||
{{#if roll.options.itemId}}
|
||||
data-item-id="{{roll.options.itemId}}"
|
||||
{{/if}}
|
||||
{{#if roll.options.damage}}
|
||||
data-damage="{{roll.options.damage}}"
|
||||
{{/if}}
|
||||
>
|
||||
<div class="card-content">
|
||||
<div class="dice-roll" data-action="expandRoll">
|
||||
{{#if flavor}}
|
||||
<span class="dice-flavor flavor-text">{{flavor}}</span>
|
||||
{{/if}}
|
||||
<div class="dice-result">
|
||||
<div class="dice-formula">{{formula}}</div>
|
||||
{{{tooltip}}}
|
||||
{{#if isPrivate}}
|
||||
<h4 class="dice-total">{{total}}</h4>
|
||||
{{else}}
|
||||
<h4 class="dice-total">
|
||||
{{#with roll}}
|
||||
{{#if successCount}}
|
||||
<span class="success">
|
||||
{{#times successCount}}
|
||||
<i class="fas fa-eye"></i>
|
||||
{{/times}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{#if baneCount}}
|
||||
<span class="blade-runner-symbols{{#if pushed}} failure{{/if}}">
|
||||
{{#times baneCount}}F{{/times}}
|
||||
</span>
|
||||
{{/if}}
|
||||
{{#unless (or successCount baneCount)}}
|
||||
<span>0</span>
|
||||
{{/unless}}
|
||||
{{/with}}
|
||||
</h4>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Extra info added for Year Zero rolls --}}
|
||||
{{#if showInfos}}
|
||||
{{{infos}}}
|
||||
{{/if}}
|
||||
|
||||
{{!-- Push button --}}
|
||||
{{#if pushable}}
|
||||
<div class="roll-controls">
|
||||
<button class="roll-button" data-action="push">
|
||||
<i class="fas fa-dice"></i>
|
||||
{{localize "YZUR.CHAT.ROLL.Push"}}
|
||||
</button>
|
||||
<button class="roll-button" data-action="cancel-push">
|
||||
<i class="fas fa-times"></i>
|
||||
{{localize "YZUR.CHAT.ROLL.CancelPush"}}
|
||||
</button>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,21 @@
|
||||
<form autocomplete="off">
|
||||
{{#each dice as | die |}}
|
||||
{{#each die.results}}
|
||||
{{#if active}}
|
||||
<div class="boxed-property form-group">
|
||||
<label class="checkbox-label">
|
||||
<input
|
||||
type="checkbox"
|
||||
name="{{@../index}}.{{indexResult}}"
|
||||
{{checked (and (gt result 1) (lt result 6))}}
|
||||
{{#if (and (gte die.faces 10) (gte result 6) (lt result 10))}}
|
||||
{{else}}disabled{{/if}}
|
||||
/>
|
||||
{{!-- <img src="systems/blade-runner/assets/icons/d{{die.faces}}-grey.svg" width="24" height="24"/> --}}
|
||||
<span>{{localize "FLBR.D"}}{{die.faces}} ( {{result}} )</span>
|
||||
</label>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
{{/each}}
|
||||
</form>
|
||||
@@ -0,0 +1,77 @@
|
||||
<form class="{{cssClass}}" autocomplete="off">
|
||||
|
||||
{{!-- <div class="sheet-header">
|
||||
<h2>{{title}}</h2>
|
||||
</div> --}}
|
||||
|
||||
<div class="sheet-body">
|
||||
{{!-- Dice --}}
|
||||
<div class="dice flex row justify-center">
|
||||
{{#each dice}}
|
||||
<div class="die-box die-d{{.}}">{{localize "FLBR.D"}}{{.}}</div>
|
||||
{{/each}}
|
||||
{{#if (lt dice.length config.maxRolledDice)}}
|
||||
<div class="die-box empty add-die rollable">
|
||||
<a data-tooltip="{{localize "FLBR.ROLLER.AddDie"}}">{{{@root.config.Icons.buttons.plus}}}</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{!-- Modifiers --}}
|
||||
<div class="modifiers boxed-property">
|
||||
<h3>{{localize "FLBR.HEADER.Modifiers"}}</h3>
|
||||
<h4>{{localize "FLBR.ROLLER.ModifierActive"}}</h4>
|
||||
<h4>{{localize "FLBR.ROLLER.ModifierName"}}</h4>
|
||||
<h4>{{localize "FLBR.ROLLER.ModifierValue"}}</h4>
|
||||
{{#each modifiers}}
|
||||
<input type="checkbox" id="modifier-{{id}}" data-id="{{id}}" {{checked active}}/>
|
||||
<label class="modifier-name" for="modifier-{{id}}" data-tooltip='{{enrichDocumentName description}}'>{{name}}</label>
|
||||
{{!-- <div class="modifier-value">{{signedValue}}</div> --}}
|
||||
<div class="modifier-value">
|
||||
{{#if (gt value 0)}}
|
||||
<div class="modifier-value advantage" data-tooltip="{{localize "FLBR.Advantage"}}">
|
||||
{{{@root.config.Icons.buttons.advantage}}}
|
||||
</div>
|
||||
{{else if (lt value 0)}}
|
||||
<div class="modifier-value disadvantage" data-tooltip="{{localize "FLBR.Disadvantage"}}">
|
||||
{{{@root.config.Icons.buttons.disadvantage}}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="modifier-value">{{localize "FLBR.NO_VALUE"}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
<div class="roll-options boxed-property flex column">
|
||||
{{!-- Max Pushes --}}
|
||||
{{#unless options.disabledPush}}
|
||||
<h3>{{localize "FLBR.ROLLER.MaxPush"}}</h3>
|
||||
<div class="flex row align-center">
|
||||
<input type="number" name="maxPush" value="{{maxPush}}"{{#if options.unlimitedPush}} style="display: none;"{{/if}}/>
|
||||
<input type="checkbox" id="unlimitedPush" name="options.unlimitedPush" {{checked options.unlimitedPush}}/>
|
||||
<label class="checkbox-label" for="unlimitedPush">{{localize "FLBR.ROLLER.UnlimitedPush"}}</label>
|
||||
</div>
|
||||
{{/unless}}
|
||||
{{!-- RollMode --}}
|
||||
<h3>{{localize "CHAT.RollDefault"}}</h3>
|
||||
<select name="rollMode">
|
||||
{{selectOptions config.rollModes selected=rollMode localize=true}}
|
||||
</select>
|
||||
{{#if damage includeZero=true}}
|
||||
<h3>{{localize "FLBR.WeaponDamage"}}:<span style="color: var(--color-green); float: right;">{{damage}}, <small>{{localize (lookup config.damageTypes damageType)}}</small></span></h3>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sheet-footer flex row space-around">
|
||||
<button id="advantage" class="dialog-button" type="submit"{{#if disadvantage}} disabled{{/if}}>
|
||||
{{localize "FLBR.ROLLER.RollWithAdvantageButton"}}
|
||||
</button>
|
||||
<button id="roll" class="dialog-button" type="submit"{{#if (or advantage disadvantage)}} disabled{{/if}}>
|
||||
{{localize "FLBR.ROLLER.RollButton"}}
|
||||
</button>
|
||||
<button id="disadvantage" class="dialog-button" type="submit"{{#if advantage}} disabled{{/if}}>
|
||||
{{localize "FLBR.ROLLER.RollWithDisadvantageButton"}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,47 @@
|
||||
{{#each system.actions as | action |}}
|
||||
<div class="item-action boxed-property">
|
||||
<div class="form-group item-property-action-name">
|
||||
<div class="flexrow">
|
||||
<input type="text" name="system.actions.{{@key}}.name" value="{{action.name}}"/placeholder="{{localize "FLBR.ItemActionName"}}">
|
||||
<a class="button delete-action" data-action-id="{{@key}}" data-tooltip="{{localize 'FLBR.ItemDeleteAction'}}">
|
||||
{{{@root.config.Icons.buttons.delete}}}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group item-property-action-type">
|
||||
<label>{{localize "FLBR.ItemActionType"}}</label>
|
||||
<select name="system.actions.{{@key}}.type" data-dtype="number">
|
||||
{{#select action.type}}
|
||||
<option value="skill">{{localize "FLBR.ItemActionTypeRollSkill"}}</option>
|
||||
<option value="macro">{{localize "FLBR.ItemActionTypeRunMacro"}}</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{#if (eq action.type "skill")}}
|
||||
<div class="form-group item-property-action-attribute">
|
||||
<label>{{localize "FLBR.ItemActionAttribute"}}</label>
|
||||
<select name="system.actions.{{@key}}.attribute">
|
||||
{{#select action.attribute}}
|
||||
{{#each @root.config.attributes}}
|
||||
<option value="{{.}}">{{localize (concat "FLBR.ATTRIBUTE." (toUpperCase .))}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group item-property-action-skill">
|
||||
<label>{{localize "FLBR.ItemActionSkill"}}</label>
|
||||
<select name="system.actions.{{@key}}.skill">
|
||||
{{#select action.skill}}
|
||||
{{#each @root.config.skills}}
|
||||
<option value="{{.}}">{{localize (concat "FLBR.SKILL." (capitalize .))}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{else if (eq action.type "macro")}}
|
||||
<div class="form-group item-property-action-macro">
|
||||
<input type="text" name="system.actions.{{@key}}.macro" value="{{action.macro}}"/>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/each}}
|
||||
@@ -0,0 +1,19 @@
|
||||
<div class="active-effects-list">
|
||||
{{#each effects}}
|
||||
<div class="active-effect" data-effect-id="{{id}}">
|
||||
<div class="active-effect-name{{#if disabled}} suspended{{/if}}">{{name}}</div>
|
||||
{{#unless ../inActor}}
|
||||
<div class="active-effect-controls">
|
||||
<a class="btn{{#if disabled}} suspended{{/if}}" data-action="toggle" data-tooltip="{{localize "FLBR.ACTIVE_EFFECT.Toggle"}}">{{{@root.config.Icons.buttons.onoff}}}</a>
|
||||
<a class="btn" data-action="edit" data-tooltip="{{localize "FLBR.ACTIVE_EFFECT.Edit"}}">{{{@root.config.Icons.buttons.edit}}}</a>
|
||||
<a class="btn" data-action="delete" data-tooltip="{{localize "FLBR.ACTIVE_EFFECT.Delete"}}">{{{@root.config.Icons.buttons.delete}}}</a>
|
||||
</div>
|
||||
{{/unless}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="active-effect empty">{{localize "FLBR.ACTIVE_EFFECT.Empty"}}</div>
|
||||
{{/each}}
|
||||
{{#if inActor}}
|
||||
<div class="active-effect-disclaimer empty">{{localize "FLBR.ACTIVE_EFFECT.InActorDisclaimer"}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -0,0 +1,45 @@
|
||||
<div class="item-attacks-list">
|
||||
{{#each system.attacks as | atk |}}
|
||||
<details class="item-attack" data-attack-id="{{@key}}"{{#if (lookup @root.collapsibleStates @key)}} open{{/if}}>
|
||||
<summary>{{atk.name}}
|
||||
<a class="delete-attack" data-attack-id="{{@key}}" data-tooltip="{{localize 'FLBR.ItemDeleteAttack'}}">
|
||||
{{{@root.config.Icons.buttons.delete}}}
|
||||
</a>
|
||||
</summary>
|
||||
<span class="content">
|
||||
<div class="form-group item-attack-name">
|
||||
<label>{{localize "FLBR.ItemAttackName"}}</label>
|
||||
<input type="text" name="system.attacks.{{@key}}.name" value="{{atk.name}}"/>
|
||||
</div>
|
||||
<div class="form-group item-attack-damage">
|
||||
<label>{{localize "FLBR.WeaponDamage"}}</label>
|
||||
<input type="text" name="system.attacks.{{@key}}.damage" value="{{atk.damage}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="form-group item-attack-crit">
|
||||
<label>{{localize "FLBR.WeaponCrit"}} ({{localize "FLBR.D"}}{{atk.crit}})</label>
|
||||
{{scoreSelector (concat "system.attacks." @key ".crit") selected=atk.crit}}
|
||||
</div>
|
||||
<div class="form-group item-attack-damage-type">
|
||||
<label>{{localize "FLBR.WeaponDamageType"}}</label>
|
||||
<select name="system.attacks.{{@key}}.damageType" data-dtype="Number">
|
||||
{{selectOptions @root.config.damageTypes selected=atk.damageType localize=true}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group item-attack-range">
|
||||
<label>{{localize "FLBR.WeaponRange"}}</label>
|
||||
<div class="ranges-min-max flex row">
|
||||
<select name="system.attacks.{{@key}}.range.min" data-dtype="Number">
|
||||
{{selectOptions @root.config.ranges selected=atk.range.min localize=true}}
|
||||
</select>
|
||||
<select name="system.attacks.{{@key}}.range.max" data-dtype="Number" style="margin-left: 4px;">
|
||||
{{selectOptions @root.config.ranges selected=atk.range.max localize=true}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<hr/>
|
||||
</details>
|
||||
{{else}}
|
||||
<div class="item-modifier empty">{{localize "FLBR.ItemNoAttack"}}</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
@@ -0,0 +1,66 @@
|
||||
<div class="blade-runner item-chat-card">
|
||||
<h3>{{name}}</h3>
|
||||
{{#if system.description}}
|
||||
<div class="description">{{{system.description}}}</div>
|
||||
{{/if}}
|
||||
{{#if showProperties}}
|
||||
{{#if (or (eq type "explosive") (eq type "armor") hasModifier system.consumable system.special)}}
|
||||
<div class="details boxed-property">
|
||||
{{#if (eq type "explosive")}}
|
||||
<div>{{localize "FLBR.BlastPower"}}</div>
|
||||
<div>2x{{localize "FLBR.D"}}{{system.blast}}</div>
|
||||
{{else if (eq type "armor")}}
|
||||
<div>{{localize "FLBR.ItemArmor"}}</div>
|
||||
<div>{{localize "FLBR.D"}}{{system.armor}}</div>
|
||||
{{/if}}
|
||||
{{#if hasModifier}}
|
||||
<div class="modifiers">{{localize "FLBR.ItemModifier"}}</div>
|
||||
<div class="modifiers">{{modifiersDescription}}</div>
|
||||
{{/if}}
|
||||
{{#if system.consumable}}
|
||||
<div class="grid-column-all">{{localize "FLBR.ItemConsumable"}}</div>
|
||||
{{/if}}
|
||||
{{#if system.special}}
|
||||
<div class="grid-column-all special">{{system.special}}</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if hasAttack}}
|
||||
{{#each system.attacks as | atk |}}
|
||||
<fieldset class="item-attack">
|
||||
<legend>{{atk.name}}</legend>
|
||||
<div class="details">
|
||||
<div>{{localize "FLBR.WeaponDamage"}}</div>
|
||||
<div>
|
||||
{{atk.damage}} 
|
||||
<small>({{localize (lookup @root.config.damageTypes atk.damageType)}})</small>
|
||||
</div>
|
||||
<div>{{localize "FLBR.WeaponCrit"}}</div>
|
||||
<div>{{localize "FLBR.D"}}{{atk.crit}}</div>
|
||||
<div>{{localize "FLBR.WeaponRange"}}</div>
|
||||
<div>
|
||||
{{#if (eq atk.range.min atk.range.max)}}
|
||||
{{localize (lookup @root.config.ranges atk.range.min)}}
|
||||
{{else}}
|
||||
{{localize (lookup @root.config.ranges atk.range.min)}} –
|
||||
{{localize (lookup @root.config.ranges atk.range.max)}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{!-- <hr/> --}}
|
||||
<div class="photo center">
|
||||
<img src="{{img}}"/>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="chat-card-footer">
|
||||
{{#if system.availability}}
|
||||
{{localize (lookup config.availabilities system.availability)}}
|
||||
{{/if}}
|
||||
{{localize (concat "TYPES.Item." type)}}
|
||||
{{#unless inActor}} {{link}}{{/unless}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,432 @@
|
||||
<form class="{{cssClass}} zero-engine" autocomplete="off">
|
||||
|
||||
{{!-- SHEET HEADER --}}
|
||||
<div class="sheet-header">
|
||||
<div class="item-header-row">
|
||||
<div class="item-photo">
|
||||
<img src="{{item.img}}" data-edit="img" data-tooltip="{{item.name}}"/>
|
||||
</div>
|
||||
<div class="item-header-info">
|
||||
<div class="item-name">
|
||||
<input type="text" name="name" value="{{item.name}}"/>
|
||||
</div>
|
||||
<div class="item-type-label">{{item.type}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- SHEET BODY --}}
|
||||
<div class="sheet-body">
|
||||
|
||||
{{#if (eq item.type "specialty")}}
|
||||
{{!-- SPECIALTY ITEM SHEET --}}
|
||||
<div class="specialty-sheet-content">
|
||||
<div class="specialty-meta">
|
||||
<div class="specialty-meta-row">
|
||||
<label>Category</label>
|
||||
<select name="system.category">
|
||||
<option value="general" {{#if (eq system.category "general")}}selected{{/if}}>General</option>
|
||||
<option value="combat" {{#if (eq system.category "combat")}}selected{{/if}}>Combat</option>
|
||||
<option value="investigation" {{#if (eq system.category "investigation")}}selected{{/if}}>Investigation</option>
|
||||
<option value="social" {{#if (eq system.category "social")}}selected{{/if}}>Social</option>
|
||||
<option value="medical" {{#if (eq system.category "medical")}}selected{{/if}}>Medical</option>
|
||||
<option value="survival" {{#if (eq system.category "survival")}}selected{{/if}}>Survival</option>
|
||||
<option value="ebb" {{#if (eq system.category "ebb")}}selected{{/if}}>Ebb</option>
|
||||
<option value="racial" {{#if (eq system.category "racial")}}selected{{/if}}>Racial</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="specialty-meta-row">
|
||||
<label>Training Package</label>
|
||||
<input type="text" name="system.package" value="{{system.package}}" placeholder="e.g. Scout, Medic, Frother..."/>
|
||||
</div>
|
||||
<div class="specialty-meta-row">
|
||||
<label>Prerequisites</label>
|
||||
<input type="text" name="system.prerequisites" value="{{system.prerequisites}}" placeholder="Requirements to take this specialty"/>
|
||||
</div>
|
||||
<div class="specialty-meta-row">
|
||||
<label>Quick Effect Summary</label>
|
||||
<input type="text" name="system.effects" value="{{system.effects}}" placeholder="Brief one-line summary of the mechanical effect"/>
|
||||
</div>
|
||||
<div class="specialty-meta-row">
|
||||
<label>Health Mod</label>
|
||||
<input type="number" name="system.healthMod" value="{{system.healthMod}}" data-dtype="Number" min="-10" max="10" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="specialty-meta-row">
|
||||
<label>Resolve Mod</label>
|
||||
<input type="number" name="system.resolveMod" value="{{system.resolveMod}}" data-dtype="Number" min="-10" max="10" step="1" placeholder="0"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="specialty-description">
|
||||
<label>Full Description & Rules</label>
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{else if (eq item.type "weapon")}}
|
||||
{{!-- WEAPON ITEM SHEET --}}
|
||||
<div class="weapon-sheet-content">
|
||||
<div class="item-props">
|
||||
<div class="item-prop">
|
||||
<label>Category</label>
|
||||
<select name="system.category">
|
||||
<option value="ranged" {{#if (eq system.category "ranged")}}selected{{/if}}>Ranged</option>
|
||||
<option value="melee" {{#if (eq system.category "melee")}}selected{{/if}}>Melee</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Type</label>
|
||||
<input type="text" name="system.weaponType" value="{{system.weaponType}}" placeholder="Pistol, Rifle, Knife..."/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Damage</label>
|
||||
<input type="number" name="system.damage" value="{{system.damage}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Range</label>
|
||||
<select name="system.range">
|
||||
<option value="Engaged" {{#if (eq system.range "Engaged")}}selected{{/if}}>Engaged</option>
|
||||
<option value="Short" {{#if (eq system.range "Short")}}selected{{/if}}>Short</option>
|
||||
<option value="Medium" {{#if (eq system.range "Medium")}}selected{{/if}}>Medium</option>
|
||||
<option value="Long" {{#if (eq system.range "Long")}}selected{{/if}}>Long</option>
|
||||
<option value="Extreme" {{#if (eq system.range "Extreme")}}selected{{/if}}>Extreme</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>ROF</label>
|
||||
<input type="text" name="system.rof" value="{{system.rof}}" placeholder="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Gear Bonus</label>
|
||||
<input type="number" name="system.gearBonus" value="{{system.gearBonus}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Fire Modes</label>
|
||||
<select name="system.fireModes" multiple size="3">
|
||||
<option value="single" {{#if (contains system.fireModes "single")}}selected{{/if}}>Single</option>
|
||||
<option value="burst" {{#if (contains system.fireModes "burst")}}selected{{/if}}>Burst</option>
|
||||
<option value="auto" {{#if (contains system.fireModes "auto")}}selected{{/if}}>Full Auto</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Auto Ammo Use</label>
|
||||
<input type="number" name="system.autoAmmoUse" value="{{system.autoAmmoUse}}" data-dtype="Number" placeholder="8"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>AP</label>
|
||||
<input type="number" name="system.ap" value="{{system.ap}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Magazine</label>
|
||||
<input type="number" name="system.magazine" value="{{system.magazine}}" data-dtype="Number" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Ammo</label>
|
||||
<input type="number" name="system.ammo" value="{{system.ammo}}" data-dtype="Number" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Ammo Type</label>
|
||||
<select name="system.ammoType">
|
||||
<option value="standard" {{#if (eq system.ammoType "standard")}}selected{{/if}}>Standard</option>
|
||||
<option value="he" {{#if (eq system.ammoType "he")}}selected{{/if}}>Hi Explosives</option>
|
||||
<option value="ap" {{#if (eq system.ammoType "ap")}}selected{{/if}}>Armour Piercing</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Cost</label>
|
||||
<input type="number" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Initiative Mod</label>
|
||||
<input type="number" name="system.initiativeMod" value="{{system.initiativeMod}}" data-dtype="Number" min="-5" max="5" step="1" placeholder="0"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-description">
|
||||
<label>Description</label>
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{else if (eq item.type "armor")}}
|
||||
{{!-- ARMOR ITEM SHEET --}}
|
||||
<div class="armor-sheet-content">
|
||||
<div class="item-props">
|
||||
<div class="item-prop">
|
||||
<label>Armor Dice (X)</label>
|
||||
<input type="number" name="system.armorDice" value="{{system.armorDice}}" data-dtype="Number" min="0" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Auto Armor (Y)</label>
|
||||
<input type="number" name="system.armorAuto" value="{{system.armorAuto}}" data-dtype="Number" min="0" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Stat Mod</label>
|
||||
<input type="number" name="system.statMod" value="{{system.statMod}}" data-dtype="Number" min="-5" max="5" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Skill Mod</label>
|
||||
<input type="number" name="system.skillMod" value="{{system.skillMod}}" data-dtype="Number" min="-5" max="5" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Cost</label>
|
||||
<input type="number" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Initiative Mod</label>
|
||||
<input type="number" name="system.initiativeMod" value="{{system.initiativeMod}}" data-dtype="Number" min="-5" max="5" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Health Mod</label>
|
||||
<input type="number" name="system.healthMod" value="{{system.healthMod}}" data-dtype="Number" min="-10" max="10" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Resolve Mod</label>
|
||||
<input type="number" name="system.resolveMod" value="{{system.resolveMod}}" data-dtype="Number" min="-10" max="10" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Stat Target (Reference)</label>
|
||||
<select name="system.statModTarget">
|
||||
<option value="" {{#if (eq system.statModTarget "")}}selected{{/if}}>None</option>
|
||||
<option value="strength" {{#if (eq system.statModTarget "strength")}}selected{{/if}}>Strength</option>
|
||||
<option value="agility" {{#if (eq system.statModTarget "agility")}}selected{{/if}}>Agility</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Skill Target (Reference)</label>
|
||||
<select name="system.skillModTarget">
|
||||
<option value="" {{#if (eq system.skillModTarget "")}}selected{{/if}}>None</option>
|
||||
<option value="force" {{#if (eq system.skillModTarget "force")}}selected{{/if}}>Force</option>
|
||||
<option value="mobility" {{#if (eq system.skillModTarget "mobility")}}selected{{/if}}>Mobility</option>
|
||||
<option value="stealth" {{#if (eq system.skillModTarget "stealth")}}selected{{/if}}>Stealth</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-description">
|
||||
<label>Description</label>
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{else if (eq item.type "equipment")}}
|
||||
{{#if system.isDrug}}
|
||||
{{!-- DRUG ITEM SHEET --}}
|
||||
<div class="equipment-sheet-content">
|
||||
<div class="item-props">
|
||||
<div class="item-prop">
|
||||
<label>Quantity</label>
|
||||
<input type="number" name="system.quantity" value="{{system.quantity}}" data-dtype="Number" min="0" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Cost</label>
|
||||
<input type="number" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Active Duration</label>
|
||||
<input type="text" name="system.activeDuration" value="{{system.activeDuration}}" placeholder="e.g. 1 shift"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Withdrawal Duration</label>
|
||||
<input type="text" name="system.withdrawalDuration" value="{{system.withdrawalDuration}}" placeholder="e.g. 1 shift"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Physical Stat Mod (Active)</label>
|
||||
<input type="number" name="system.statPhysicalMod" value="{{system.statPhysicalMod}}" data-dtype="Number" min="-5" max="5" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>All Skill Mod (Active)</label>
|
||||
<input type="number" name="system.skillAllMod" value="{{system.skillAllMod}}" data-dtype="Number" min="-5" max="5" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Health Mod (Active)</label>
|
||||
<input type="number" name="system.healthMod" value="{{system.healthMod}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Resolve Mod (Active)</label>
|
||||
<input type="number" name="system.resolveMod" value="{{system.resolveMod}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Panic Reduction (Active)</label>
|
||||
<input type="number" name="system.panicReduction" value="{{system.panicReduction}}" data-dtype="Number" min="0" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Melee Mod (Active)</label>
|
||||
<input type="number" name="system.skillMods.melee" value="{{system.skillMods.melee}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Marksmanship Mod (Active)</label>
|
||||
<input type="number" name="system.skillMods.marksmanship" value="{{system.skillMods.marksmanship}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Force Mod (Active)</label>
|
||||
<input type="number" name="system.skillMods.force" value="{{system.skillMods.force}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Observation Mod (Active)</label>
|
||||
<input type="number" name="system.skillMods.observation" value="{{system.skillMods.observation}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Crafting Mod (Active)</label>
|
||||
<input type="number" name="system.skillMods.crafting" value="{{system.skillMods.crafting}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Insight Mod (Active)</label>
|
||||
<input type="number" name="system.skillMods.insight" value="{{system.skillMods.insight}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Persuasion Mod (Active)</label>
|
||||
<input type="number" name="system.skillMods.persuasion" value="{{system.skillMods.persuasion}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Physical Stat Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdStatPhysicalMod" value="{{system.wdStatPhysicalMod}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>All Skill Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdSkillAllMod" value="{{system.wdSkillAllMod}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Health Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdHealthMod" value="{{system.wdHealthMod}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Resolve Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdResolveMod" value="{{system.wdResolveMod}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Panic Reduction (Withdrawal)</label>
|
||||
<input type="number" name="system.wdPanicReduction" value="{{system.wdPanicReduction}}" data-dtype="Number" min="0" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Melee Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdSkillMods.melee" value="{{system.wdSkillMods.melee}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Marksmanship Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdSkillMods.marksmanship" value="{{system.wdSkillMods.marksmanship}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Force Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdSkillMods.force" value="{{system.wdSkillMods.force}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Observation Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdSkillMods.observation" value="{{system.wdSkillMods.observation}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Crafting Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdSkillMods.crafting" value="{{system.wdSkillMods.crafting}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Insight Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdSkillMods.insight" value="{{system.wdSkillMods.insight}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Persuasion Mod (Withdrawal)</label>
|
||||
<input type="number" name="system.wdSkillMods.persuasion" value="{{system.wdSkillMods.persuasion}}" data-dtype="Number" min="-10" max="10" step="1"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-description">
|
||||
<label>Description</label>
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
{{!-- EQUIPMENT / GENERIC ITEM SHEET --}}
|
||||
<div class="equipment-sheet-content">
|
||||
<div class="item-props">
|
||||
<div class="item-prop">
|
||||
<label>Quantity</label>
|
||||
<input type="number" name="system.quantity" value="{{system.quantity}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Cost</label>
|
||||
<input type="number" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Weight</label>
|
||||
<input type="number" name="system.weight" value="{{system.weight}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Initiative Mod</label>
|
||||
<input type="number" name="system.initiativeMod" value="{{system.initiativeMod}}" data-dtype="Number" min="-5" max="5" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Health Mod</label>
|
||||
<input type="number" name="system.healthMod" value="{{system.healthMod}}" data-dtype="Number" min="-10" max="10" step="1" placeholder="0"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Resolve Mod</label>
|
||||
<input type="number" name="system.resolveMod" value="{{system.resolveMod}}" data-dtype="Number" min="-10" max="10" step="1" placeholder="0"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-description">
|
||||
<label>Description</label>
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else if (eq item.type "ebb")}}
|
||||
{{!-- EBB FORMULA ITEM SHEET --}}
|
||||
<div class="ebb-sheet-content">
|
||||
<div class="item-props">
|
||||
<div class="item-prop">
|
||||
<label>Discipline</label>
|
||||
<select name="system.discipline">
|
||||
<option value="blast" {{#if (eq system.discipline "blast")}}selected{{/if}}>Blast</option>
|
||||
<option value="enhance" {{#if (eq system.discipline "enhance")}}selected{{/if}}>Enhance</option>
|
||||
<option value="telepathy" {{#if (eq system.discipline "telepathy")}}selected{{/if}}>Telepathy</option>
|
||||
<option value="heal" {{#if (eq system.discipline "heal")}}selected{{/if}}>Heal</option>
|
||||
<option value="detect" {{#if (eq system.discipline "detect")}}selected{{/if}}>Detect</option>
|
||||
<option value="transmute" {{#if (eq system.discipline "transmute")}}selected{{/if}}>Transmute</option>
|
||||
<option value="other" {{#if (eq system.discipline "other")}}selected{{/if}}>Other</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Flux Cost</label>
|
||||
<input type="number" name="system.fluxCost" value="{{system.fluxCost}}" data-dtype="Number" min="0" max="10" step="1" placeholder="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Successes Required</label>
|
||||
<input type="number" name="system.successes" value="{{system.successes}}" data-dtype="Number" min="1" max="6" step="1" placeholder="1"/>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Range</label>
|
||||
<select name="system.range">
|
||||
<option value="Engaged" {{#if (eq system.range "Engaged")}}selected{{/if}}>Engaged</option>
|
||||
<option value="Short" {{#if (eq system.range "Short")}}selected{{/if}}>Short</option>
|
||||
<option value="Medium" {{#if (eq system.range "Medium")}}selected{{/if}}>Medium</option>
|
||||
<option value="Long" {{#if (eq system.range "Long")}}selected{{/if}}>Long</option>
|
||||
<option value="Self" {{#if (eq system.range "Self")}}selected{{/if}}>Self</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="item-prop">
|
||||
<label>Duration</label>
|
||||
<input type="text" name="system.duration" value="{{system.duration}}" placeholder="e.g. Instant, 1 round, 1 stretch"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-prop-full">
|
||||
<label>Effect</label>
|
||||
<textarea name="system.effect" rows="3" placeholder="What does this formula do?">{{system.effect}}</textarea>
|
||||
</div>
|
||||
<div class="item-prop-full">
|
||||
<label>Catastrophe (on failed push)</label>
|
||||
<textarea name="system.catastrophe" rows="2" placeholder="What happens if the push roll fails or a bane is rolled?">{{system.catastrophe}}</textarea>
|
||||
</div>
|
||||
<div class="item-description">
|
||||
<label>Full Description</label>
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{else}}
|
||||
<div class="equipment-sheet-content">
|
||||
<div class="item-description">
|
||||
<label>Description</label>
|
||||
{{{editor system.description target="system.description" button=true editable=editable}}}
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,43 @@
|
||||
<div class="item-modifiers-list">
|
||||
{{#each system.modifiers as | modifier |}}
|
||||
<select name="system.modifiers.{{@key}}.name">
|
||||
{{#select modifier.name}}
|
||||
<optgroup label="{{localize "FLBR.Attributes"}}">
|
||||
{{#each @root.config.attributes}}
|
||||
<option value="attribute.{{.}}">{{localize (concat "FLBR.ATTRIBUTE." (toUpperCase .))}}</option>
|
||||
{{/each}}
|
||||
</optgroup>
|
||||
<optgroup label="{{localize "FLBR.Skills"}}">
|
||||
{{#each @root.config.skills}}
|
||||
<option value="skill.{{.}}">{{localize (concat "FLBR.SKILL." (capitalize .))}}</option>
|
||||
{{/each}}
|
||||
</optgroup>
|
||||
<optgroup label="{{localize "FLBR.Capacities"}}">
|
||||
{{#each @root.config.capacitiesMap as | v cap |}}
|
||||
<option value="capacity.{{cap}}">{{localize (concat "FLBR.HEADER." (capitalize cap))}}</option>
|
||||
{{/each}}
|
||||
</optgroup>
|
||||
<optgroup label="{{localize "FLBR.COMBAT.Combat"}}">
|
||||
<option value="combat.drawSize">{{localize "FLBR.COMBAT.DrawSize"}}</option>
|
||||
</optgroup>
|
||||
{{/select}}
|
||||
</select>
|
||||
<select name="system.modifiers.{{@key}}.value" value="{{modifier.value}}">
|
||||
{{#select modifier.value}}
|
||||
<option value="0">{{localize "FLBR.NO_VALUE"}}</option>
|
||||
{{#if (or (eq modifier.name "capacity.health") (eq modifier.name "capacity.resolve") (eq modifier.name "combat.drawSize"))}}
|
||||
<option value="+1">+1</option>
|
||||
<option value="-1">−1</option>
|
||||
{{else}}
|
||||
<option value="+1">{{localize "FLBR.Advantage"}}</option>
|
||||
<option value="-1">{{localize "FLBR.Disadvantage"}}</option>
|
||||
{{/if}}
|
||||
{{/select}}
|
||||
</select>
|
||||
<a class="button delete-modifier" data-modifier-id="{{@key}}" data-tooltip="{{localize 'FLBR.ItemDeleteModifier'}}">
|
||||
{{{@root.config.Icons.buttons.delete}}}
|
||||
</a>
|
||||
{{else}}
|
||||
<div class="item-modifier empty">{{localize "FLBR.ItemNoModifier"}}</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
Reference in New Issue
Block a user