- Custom SLA Industries pause-screen animation (orbital rings, SLA hex logo, radar sweep, STAND BY blink) - Pause animation now correctly disappears on unpause (fixed display:flex !important conflict) - 18 custom SLA Industries SVG icons for all sidebar tabs and scene controls (icons/ui/) - JavaScript DOM injection for Foundry v13 icon replacement (button-based structure) - SCL fractional controls (+1/-1/+½/-½ step buttons) - Session ability tracking checkbox + New Session button - Contacts tab with card-based CRUD - Drug stacking warning dialog - Rest button (Short/Long rest with condition clear + flux restore) - Activity log in Notes tab (rolls, rests, drugs, panic — newest first, 10KB cap) - Portrait static neon blue border - Header restructured to 8-column grid (LAD, Credits, SCL, Height, Weight, Rest) - S.C.L label rename Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1328 lines
79 KiB
HTML
1328 lines
79 KiB
HTML
<form class="{{cssClass}} flexcol sla-sheet-theme-{{slaSheetTheme}}" data-sla-theme="{{slaSheetTheme}}" autocomplete="off">
|
||
|
||
{{!-- Sheet Header --}}
|
||
<header class="char-header header-grid">
|
||
|
||
<div class="header-fields header-grid">
|
||
{{!-- The grid classes are defined in scss/global/_grid.scss. To use,
|
||
use both the "grid" and "grid-Ncol" class where "N" can be any number
|
||
from 1 to 12 and will create that number of columns. --}}
|
||
{{!-- The grid classes are defined in scss/global/_grid.scss. To use,
|
||
use both the "grid" and "grid-Ncol" class where "N" can be any number
|
||
from 1 to 12 and will create that number of columns. --}}
|
||
|
||
<div class="header">
|
||
<img class="profile sla-portrait-static" src="{{img}}" data-edit="img" title="{{name}}" height="150"
|
||
width="150" />
|
||
|
||
<div class="headergrid">
|
||
<div class="sla-sheet-wordmark">SLA Industries</div>
|
||
<!-- <img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="150" width="150"/> -->
|
||
|
||
<!-- PLAYER NAME -->
|
||
<div class="headernamegrid header-field header-field-name">
|
||
<div class="headerinputtext">{{ localize 'Mosh.Name' }}</div>
|
||
<div class="headerinputfield sla-header-input charname"><input name="name" class="noborder" type="text"
|
||
value="{{name}}" placeholder="{{ localize 'Mosh.Name' }}" /></div>
|
||
</div>
|
||
<div class="header-field header-field-lad">
|
||
<div class="headerinputtext">L.A.D.</div>
|
||
<label class="sla-header-checkbox" title="Life After Death">
|
||
<input type="checkbox" name="system.sla.lad" data-dtype="Boolean" {{checked system.sla.lad}} />
|
||
<span>L.A.D.</span>
|
||
</label>
|
||
</div>
|
||
<div class="header-field header-field-credits">
|
||
<div class="headerinputtext">{{ localize 'Mosh.Credits' }}</div>
|
||
<div class="headerinputfield sla-header-input charname"><input name="system.credits.value" class="noborder" type="text"
|
||
value="{{system.credits.value}}" placeholder="" /></div>
|
||
</div>
|
||
|
||
<!-- CLASS -->
|
||
<div class="header-field header-field-class">
|
||
<div class="headerinputtext">{{ localize 'Mosh.CLASS' }}</div>
|
||
<div class="headerinputfield sla-header-input charname"><input name="system.class.value" class="noborder" type="text"
|
||
value="{{system.class.value}}" placeholder="" /></div>
|
||
</div>
|
||
|
||
<!-- RANK -->
|
||
<div class="header-field header-field-race">
|
||
<div class="headerinputtext">Race</div>
|
||
<div class="headerinputfield sla-header-input charname"><input name="system.rank.value" class="noborder" type="text"
|
||
value="{{system.rank.value}}" placeholder="" /></div>
|
||
</div>
|
||
|
||
<div class="header-field header-field-sla-rank">
|
||
<div class="headerinputtext">S.C.L</div>
|
||
<div class="headerinputfield sla-header-input charname"><input name="system.attributes.level.value" class="noborder"
|
||
type="text" value="{{system.attributes.level.value}}" placeholder="" /></div>
|
||
</div>
|
||
|
||
<div class="header-field header-field-height">
|
||
<div class="headerinputtext">Height</div>
|
||
<div class="headerinputfield sla-header-input charname"><input name="system.sla.height.value" class="noborder" type="text"
|
||
value="{{system.sla.height.value}}" placeholder="" /></div>
|
||
</div>
|
||
<div class="header-field header-field-weight">
|
||
<div class="headerinputtext">Weight</div>
|
||
<div class="headerinputfield sla-header-input charname"><input name="system.sla.weightText.value" class="noborder" type="text"
|
||
value="{{system.sla.weightText.value}}" placeholder="" /></div>
|
||
</div>
|
||
<div class="header-field header-field-rest">
|
||
<div class="headerinputtext"> </div>
|
||
<button type="button" class="sla-sheet-action sla-rest-button sla-header-rest-pill" title="Take a short or long rest">Rest</button>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="health grid grid-2col" style="margin-top: 0; grid-template-rows: repeat(4, minmax(92px, auto)); row-gap: 12px; align-content: start;">
|
||
<!-- Health -->
|
||
<div class="resource healthspread minmaxtopstat">
|
||
<div class="sla-health-label-row">
|
||
<label for="system.health.value" class="resource-label minmaxtext sla-stat-heading">{{ localize 'Mosh.Health' }}</label>
|
||
<button type="button" class="sla-inline-mini-button sla-health-reset" title="Reset current health to maximum">Reset</button>
|
||
</div>
|
||
|
||
<div class="minmaxwrapper">
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.health.value" value="{{system.health.value}}"
|
||
data-dtype="Number" />
|
||
<div class="slant"></div>
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.health.max"
|
||
value="{{system.health.max}}" data-dtype="Number" />
|
||
</div>
|
||
|
||
<div class="healthmaxtext">{{ localize 'Mosh.Current' }}</div>
|
||
<div class="healthmaxtext">{{ localize 'Mosh.Maximum' }}</div>
|
||
</div>
|
||
|
||
<!-- Hits -->
|
||
<div class="resource healthspread minmaxtopstat">
|
||
<label for="system.hits.value" class="resource-label minmaxtext sla-stat-heading">
|
||
{{#if system.settings.firstEdition}}
|
||
{{ localize 'Mosh.Wounds' }}
|
||
{{else}}
|
||
{{ localize 'Mosh.Hits' }}
|
||
{{/if}}
|
||
</label>
|
||
|
||
<div class="minmaxwrapper">
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.hits.value" value="{{system.hits.value}}"
|
||
data-dtype="Number" />
|
||
<div class="slant"></div>
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.hits.max"
|
||
value="{{system.hits.max}}" data-dtype="Number" />
|
||
</div>
|
||
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.Current' }}</div>
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.Maximum' }}</div>
|
||
</div>
|
||
|
||
{{#if system.settings.useCalm}}
|
||
<!-- Calm -->
|
||
<div class="resource healthspread minmaxtopstat">
|
||
<label for="system.other.stress.value" class="resource-label minmaxtext rollable calm-roll sla-stat-heading">{{ localize 'Mosh.Calm' }}</label>
|
||
|
||
<div class="minmaxwrapper">
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.other.stress.value" value="{{system.other.stress.value}}"
|
||
data-dtype="Number" />
|
||
<div class="slant"></div>
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.other.stress.max"
|
||
value="{{system.other.stress.max}}" data-dtype="Number" />
|
||
</div>
|
||
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.Current' }}</div>
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.Maximum' }}</div>
|
||
</div>
|
||
{{else}}
|
||
<!-- Stress -->
|
||
<div class="resource healthspread minmaxtopstat">
|
||
<label for="system.other.stress.value" class="resource-label minmaxtext rollable stress-roll sla-stat-heading">{{ localize 'Mosh.Stress' }}</label>
|
||
<div class="minmaxwrapper">
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.other.stress.value" value="{{system.other.stress.value}}"
|
||
data-dtype="Number" />
|
||
<div class="slant"></div>
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.other.stress.min"
|
||
value="{{system.other.stress.min}}" data-dtype="Number" />
|
||
</div>
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.Current' }}</div>
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.Minimum' }}</div>
|
||
</div>
|
||
{{/if}}
|
||
|
||
{{#if isEbbUser}}
|
||
<div class="resource healthspread minmaxtopstat">
|
||
<label for="system.sla.flux.value" class="resource-label minmaxtext sla-stat-heading">Flux</label>
|
||
<div class="minmaxwrapper">
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.sla.flux.value" value="{{system.sla.flux.value}}"
|
||
data-dtype="Number" />
|
||
<div class="slant"></div>
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.sla.flux.max"
|
||
value="{{system.sla.flux.max}}" data-dtype="Number" />
|
||
</div>
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.Current' }}</div>
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.Maximum' }}</div>
|
||
</div>
|
||
{{else}}
|
||
{{#if system.settings.firstEdition}}
|
||
{{else}}
|
||
<!-- Resolve -->
|
||
<div class="resource healthspread minmaxtopstat">
|
||
<label for="system.other.resolve.value" class="resource-label minmaxtext sla-stat-heading">{{ localize 'Mosh.Resolve' }}</label>
|
||
<div class="valuewrapper">
|
||
<input class="maxhealth-input darkGreyText" type="text" name="system.other.resolve.value" value="{{system.other.resolve.value}}" data-dtype="Number" />
|
||
</div>
|
||
</div>
|
||
{{/if}}
|
||
{{/if}}
|
||
|
||
{{#if system.settings.firstEdition}}
|
||
<!-- Armor -->
|
||
<div class="resource healthspread minmaxtopstat" style="{{#if isEbbUser}}grid-column-start: 1; grid-column-end: 3;{{else}}grid-column-start: 2; grid-column-end: 3;{{/if}}">
|
||
<label for="system.stats.armor.value" class="resource-label minmaxtext rollable armor-roll sla-stat-heading">{{ localize 'Mosh.Armor' }}</label>
|
||
<div class="minmaxwrapper sla-armor-track" style="width: 100%; border-radius: 0.3em;">
|
||
<div class="maxhealth-input sla-armor-value-cell" style="display: flex;">
|
||
<div class="whiteText sla-armor-main" type="text" data-dtype="Number">{{system.stats.armor.mod}}</div>
|
||
{{#if (compare 'str' system.stats.armor.cover '===' 'insignificant')}}
|
||
<div class="highlightText sla-armor-cover-bonus" type="text" data-dtype="Number" style="font-size: 0.8rem;"> 5</div>
|
||
{{/if}}
|
||
{{#if (compare 'str' system.stats.armor.cover '===' 'light')}}
|
||
<div class="highlightText sla-armor-cover-bonus" type="text" data-dtype="Number" style="font-size: 0.8rem;"> 10</div>
|
||
{{/if}}
|
||
{{#if (compare 'str' system.stats.armor.cover '===' 'heavy')}}
|
||
<div class="highlightText sla-armor-cover-bonus" type="text" data-dtype="Number" style="font-size: 0.8rem;"> 20</div>
|
||
{{/if}}
|
||
</div>
|
||
<div class="slant sla-armor-divider" style="transform: skewX(0deg);"></div>
|
||
<div class="maxhealth-input sla-armor-value-cell" style="display: flex;">
|
||
<div class="whiteText sla-armor-main" type="text" data-dtype="Number">{{system.stats.armor.damageReduction}}</div>
|
||
{{#if (compare 'str' system.stats.armor.cover '===' 'heavy')}}
|
||
<div class="highlightText sla-armor-cover-bonus" type="text" data-dtype="Number" style="font-size: 0.8rem;"> 5</div>
|
||
{{/if}}
|
||
</div>
|
||
</div>
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.ArmorPoints' }}</div>
|
||
<div class="healthmaxtext sla-stat-subheading">{{ localize 'Mosh.DMGReduction' }}</div>
|
||
</div>
|
||
{{/if}}
|
||
<!-- Trauma Response -->
|
||
<div class="" style="margin-left: 6px; margin-right: 0px; flex: 0; grid-column-start: 1; grid-column-end: 3;">
|
||
<div class="sla-trauma-header-row">
|
||
<div class="resource-label sla-stat-heading sla-trauma-heading">{{ localize 'Mosh.TraumaResponse' }}</div>
|
||
<div class="sla-session-ability-row">
|
||
<label class="sla-session-ability-label" title="Check when the session trauma ability has been used">
|
||
<input type="checkbox" class="sla-session-ability-used" {{#if system.sla.sessionAbilityUsed}}checked{{/if}} />
|
||
<span>Session ability used</span>
|
||
</label>
|
||
<button type="button" class="sla-new-session" title="Start a new session — resets session ability">New Session</button>
|
||
</div>
|
||
</div>
|
||
<textarea name="system.other.stressdesc.value" rows="4" class="textarea-input trauma-response-box" type="text"
|
||
data-target="system.other.stressdesc.value" placeholder="Trauma response">{{system.other.stressdesc.value}}</textarea>
|
||
</div>
|
||
|
||
<!-- XP -->
|
||
<!-- <div class="char-pip-button list-roll flex" data-key="xp" data-label="XP" data-max="8" data-min="0">
|
||
{{{system.xp.html}}}
|
||
</div> -->
|
||
|
||
</div>
|
||
|
||
<div class="abilities">
|
||
<!-- <div class="grid grid-2col"> -->
|
||
<!-- STRESS -->
|
||
<!-- <div class="resource mainstat">
|
||
<div class="stresslabel">
|
||
<div class="ability-mod stresstext">STRESS</div>
|
||
</div>
|
||
<input class="smallcircle-input" type="text" name="system.other.stress.value"
|
||
value="{{system.other.stress.value}}" data-dtype="Number" />
|
||
</div> -->
|
||
|
||
<!-- RESOLVE -->
|
||
<!-- <div class="resource mainstat">
|
||
<div class="stresslabel">
|
||
<div class="ability-mod stresstext">RESOLVE</div>
|
||
</div>
|
||
<input class="smallcircle-input" type="text" name="system.other.resolve.value"
|
||
value="{{system.other.resolve.value}}" data-dtype="Number" />
|
||
</div> -->
|
||
<!-- </div> -->
|
||
|
||
{{#if system.settings.firstEdition}}
|
||
<div class="grid grid-1col widegap">
|
||
{{else}}
|
||
<div class="grid grid-1col widegap" style="gap: 24px">
|
||
{{/if}}
|
||
|
||
<!-- Strength -->
|
||
<div class="mainstatwrapper">
|
||
<div class="resource mainstat">
|
||
<div class="mainstatlabel">
|
||
<span class="ability-mod stat-roll rollable mainstattext" data-key="strength"
|
||
data-label="{{ localize 'Mosh.Strength' }}">{{ localize 'Mosh.Strength' }}</span>
|
||
</div>
|
||
<input class="circle-input" type="text" name="system.stats.strength.value"
|
||
value="{{system.stats.strength.value}}" data-dtype="Number" />
|
||
</div>
|
||
<input class="mainstatmod-input" type="text" name="system.stats.strength.mod"
|
||
value="{{system.stats.strength.mod}}" data-dtype="Number" title="{{slaStatModifierTitles.strength}}" />
|
||
<div class="mainstatmod-title">+</div>
|
||
</div>
|
||
|
||
<!-- Speed -->
|
||
<div class="mainstatwrapper">
|
||
<div class="resource mainstat">
|
||
<div class="mainstatlabel">
|
||
<span class="ability-mod stat-roll rollable mainstattext" data-key="speed" data-roll="d100"
|
||
data-label="{{ localize 'Mosh.Speed' }}">{{ localize 'Mosh.Speed' }}</span>
|
||
</div>
|
||
<input class="circle-input" type="text" name="system.stats.speed.value" value="{{system.stats.speed.value}}"
|
||
data-dtype="Number" />
|
||
</div>
|
||
<input class="mainstatmod-input" type="text" name="system.stats.speed.mod" value="{{system.stats.speed.mod}}"
|
||
data-dtype="Number" title="{{slaStatModifierTitles.speed}}" />
|
||
<div class="mainstatmod-title">+</div>
|
||
</div>
|
||
|
||
<!-- Intellect -->
|
||
<div class="mainstatwrapper">
|
||
<div class="resource mainstat">
|
||
<div class="mainstatlabel">
|
||
<span class="ability-mod stat-roll rollable mainstattext" data-key="intellect" data-roll="d100"
|
||
data-label="{{ localize 'Mosh.Intellect' }}">{{ localize 'Mosh.Intellect' }}</span>
|
||
</div>
|
||
<input class="circle-input" type="text" name="system.stats.intellect.value"
|
||
value="{{system.stats.intellect.value}}" data-dtype="Number" />
|
||
</div>
|
||
<input class="mainstatmod-input" type="text" name="system.stats.intellect.mod"
|
||
value="{{system.stats.intellect.mod}}" data-dtype="Number" title="{{slaStatModifierTitles.intellect}}" />
|
||
<div class="mainstatmod-title">+</div>
|
||
</div>
|
||
|
||
<!-- Combat -->
|
||
<div class="mainstatwrapper">
|
||
<div class="resource mainstat">
|
||
<div class="mainstatlabel">
|
||
<span class="ability-mod stat-roll rollable mainstattext" data-key="combat" data-roll="d100"
|
||
data-label="{{ localize 'Mosh.Combat' }}">{{ localize 'Mosh.Combat' }}</span>
|
||
</div>
|
||
<input class="circle-input" type="text" name="system.stats.combat.value" value="{{system.stats.combat.value}}"
|
||
data-dtype="Number" />
|
||
</div>
|
||
<input class="mainstatmod-input" type="text" name="system.stats.combat.mod" value="{{system.stats.combat.mod}}"
|
||
data-dtype="Number" title="{{slaStatModifierTitles.combat}}" />
|
||
<div class="mainstatmod-title">+</div>
|
||
</div>
|
||
</div>
|
||
<div class="sla-mainstat-action-strip">
|
||
<button type="button" class="sla-sheet-action sla-wound-button">Wound</button>
|
||
</div>
|
||
</div>
|
||
<!-- SAVES -->
|
||
{{#if system.settings.firstEdition}}
|
||
<div class="saves grid grid-1col savebackground">
|
||
{{else}}
|
||
<div class="saves grid grid-1col savebackground" style = "height: 264px;">
|
||
{{/if}}
|
||
<!-- Sanity -->
|
||
<div class="resource flex-group-center">
|
||
<span class="ability-mod stat-roll rollable savetext" data-roll="d100" data-label="Sanity" data-key="sanity" data-target="{{system.stats.sanity.value}}">{{ localize 'Mosh.Sanity' }}</span>
|
||
<div class="grid grid-3col" style="grid-template-columns: 44px 14px 42px; margin-left:6px;">
|
||
<input class="square-input" type="text" name="system.stats.sanity.value" value="{{system.stats.sanity.value}}" data-dtype="Number" />
|
||
<div class="mainstatmod-title" style="top: 10px;">+</div>
|
||
<input class="mainsavemod-input" style="top: 5px;" type="text" name="system.stats.sanity.mod" value="{{system.stats.sanity.mod}}" data-dtype="Number" title="{{slaStatModifierTitles.sanity}}" />
|
||
</div>
|
||
</div>
|
||
<!-- Fear -->
|
||
<div class="resource flex-group-center">
|
||
<span class="ability-mod stat-roll rollable savetext" data-roll="d100" data-key="fear" data-target="{{system.stats.fear.value}}" data-label="{{ localize 'Mosh.Fear' }}">{{ localize 'Mosh.Fear' }}</span>
|
||
<div class="grid grid-3col" style="grid-template-columns: 44px 14px 42px; margin-left:6px;">
|
||
<input class="square-input" type="text" name="system.stats.fear.value" value="{{system.stats.fear.value}}" data-dtype="Number" />
|
||
<div class="mainstatmod-title" style="top: 10px;">+</div>
|
||
<input class="mainsavemod-input" style="top: 5px;" type="text" name="system.stats.fear.mod" value="{{system.stats.fear.mod}}" data-dtype="Number" title="{{slaStatModifierTitles.fear}}" />
|
||
</div>
|
||
</div>
|
||
<!-- Body -->
|
||
<div class="resource flex-group-center">
|
||
<span class="ability-mod stat-roll rollable savetext" data-roll="d100" data-key="body" data-target="{{system.stats.body.value}}" data-label="{{ localize 'Mosh.Body' }}">{{ localize 'Mosh.Body' }}</span>
|
||
<div class="grid grid-3col" style="grid-template-columns: 44px 14px 42px; margin-left:6px;">
|
||
<input class="square-input" type="text" name="system.stats.body.value" value="{{system.stats.body.value}}" data-dtype="Number" />
|
||
<div class="mainstatmod-title" style="top: 10px;">+</div>
|
||
<input class="mainsavemod-input" style="top: 5px;"type="text" name="system.stats.body.mod" value="{{system.stats.body.mod}}" data-dtype="Number" title="{{slaStatModifierTitles.body}}" />
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sla-save-action-strip">
|
||
<button type="button" class="sla-sheet-action sla-panic-button">Panic</button>
|
||
</div>
|
||
|
||
{{#unless system.settings.firstEdition}}
|
||
<!-- Armor -->
|
||
<div class="resource flex-group-center">
|
||
<span class="ability-mod stat-roll rollable savetext" data-roll="d100" data-key="armor" data-target="{{system.stats.armor.value}}" data-label="{{ localize 'Mosh.Armor' }}">{{ localize 'Mosh.Armor' }}</span>
|
||
<div class="grid grid-3col" style="grid-template-columns: 44px 14px 42px; margin-left:6px;">
|
||
<input class="square-input" type="text" name="system.stats.armor.value" value="{{system.stats.armor.value}}" data-dtype="Number" />
|
||
<div class="mainstatmod-title" style="top: 10px;">+</div>
|
||
<div class="mainsavemod-input" style="top: 5px; padding: 5px;" type="text" name="system.stats.armor.mod" value="{{system.stats.armor.mod}}" data-dtype="Number">{{system.stats.armor.mod}}</div>
|
||
</div>
|
||
</div>
|
||
{{/unless}}
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
<div class="sla-front-strip">
|
||
<div class="sla-carry-summary sla-carry-summary-inline {{#if slaCarry.over}}over{{/if}}">
|
||
<div class="sla-carry-summary-title">Carry Load</div>
|
||
<div class="sla-carry-summary-main">{{slaCarry.current}} / {{slaCarry.capacity}} kg</div>
|
||
<div class="sla-carry-summary-meta">State: {{slaCarry.state}} | Equipped {{slaCarry.equipped}} kg | Carried {{slaCarry.carried}} kg | Stowed {{slaCarry.stowed}} kg | Free {{slaCarry.available}} kg</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
{{!-- Sheet Tab Navigation --}}
|
||
<nav class="mosh sheet-tabs tabs" data-group="primary">
|
||
<a class="tab-select" data-tab="skills">{{ localize 'Mosh.Skills' }}</a>
|
||
<a class="tab-select" data-tab="weapons">{{ localize 'Mosh.Weapons' }}</a>
|
||
<a class="tab-select" data-tab="items">{{ localize 'Mosh.Items' }}</a>
|
||
<a class="tab-select" data-tab="sla">SLA</a>
|
||
<a class="tab-select" data-tab="traits">Traits</a>
|
||
<a class="tab-select" data-tab="special-rules">Special Rules</a>
|
||
{{#if isEbbUser}}<a class="tab-select" data-tab="ebb">Ebb</a>{{/if}}
|
||
{{#if isVevaphon}}<a class="tab-select" data-tab="morph">Morph</a>{{/if}}
|
||
<a class="tab-select" data-tab="contacts">Contacts</a>
|
||
<a class="tab-select" data-tab="description">{{ localize 'Mosh.Bio' }}</a>
|
||
<a class="tab-select" data-tab="notes">{{ localize 'Mosh.Notes' }}</a>
|
||
</nav>
|
||
|
||
{{!-- Sheet Body --}}
|
||
<section class="sheet-body">
|
||
|
||
{{!-- Contacts Tab --}}
|
||
<div class="tab items" data-group="primary" data-tab="contacts">
|
||
<div class="sla-panel">
|
||
<div class="sla-banner">
|
||
<div>
|
||
<div class="sla-kicker">Operative Network</div>
|
||
<div class="sla-title">Contacts & Associates</div>
|
||
</div>
|
||
<div class="sla-tags">
|
||
<span class="sla-tag">{{slaContactCount}} contact{{#unless (compare 'int' slaContactCount '===' 1)}}s{{/unless}}</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sla-contacts-toolbar">
|
||
<button type="button" class="sla-sheet-action sla-contact-add"><i class="fas fa-plus"></i> Add Contact</button>
|
||
</div>
|
||
|
||
{{#if slaContacts.length}}
|
||
<div class="sla-contacts-list">
|
||
{{#each slaContacts as |contact|}}
|
||
<div class="sla-contact-card" data-contact-id="{{contact.id}}">
|
||
<div class="sla-contact-header">
|
||
<div class="sla-contact-disposition sla-contact-disposition-{{contact.disposition}}"></div>
|
||
<div class="sla-contact-name">{{contact.name}}</div>
|
||
<div class="sla-contact-role">{{contact.role}}</div>
|
||
<div class="sla-contact-controls">
|
||
<button type="button" class="sla-contact-edit" data-contact-id="{{contact.id}}" title="Edit contact"><i class="fas fa-edit"></i></button>
|
||
<button type="button" class="sla-contact-delete" data-contact-id="{{contact.id}}" title="Delete contact"><i class="fas fa-trash"></i></button>
|
||
</div>
|
||
</div>
|
||
{{#if contact.notes}}
|
||
<div class="sla-contact-notes">{{contact.notes}}</div>
|
||
{{/if}}
|
||
</div>
|
||
{{/each}}
|
||
</div>
|
||
{{else}}
|
||
<div class="sla-note-pill sla-note-pill-wide">No contacts yet. Add allies, fixers, squad members, and other NPCs the operative knows.</div>
|
||
{{/if}}
|
||
</div>
|
||
</div>
|
||
|
||
{{!-- Biography Tab --}}
|
||
<div class="tab biography" data-group="primary" data-tab="description">
|
||
{{editor enriched.biography target="system.biography" button=true editable=true}}
|
||
</div>
|
||
{{!-- Notes Tab --}}
|
||
<div class="tab biography" data-group="primary" data-tab="notes">
|
||
<div class="sla-card" style="margin-bottom: 12px;">
|
||
<div class="sla-card-label">Ammo Spend Ledger</div>
|
||
<div class="sla-card-copy">Total spent: {{system.sla.ammoSpendTotal.value}} cR</div>
|
||
<textarea readonly rows="6" class="textarea-input">{{system.sla.ammoLedger.value}}</textarea>
|
||
</div>
|
||
<div class="sla-card sla-activity-log-card" style="margin-bottom: 12px;">
|
||
<div class="sla-card-label">Operative Activity Log</div>
|
||
<div class="sla-card-copy">Rolls, rests, drug use, panic — automatically recorded. Newest first.</div>
|
||
<textarea readonly rows="8" class="textarea-input sla-activity-log-textarea">{{system.sla.activityLog.value}}</textarea>
|
||
</div>
|
||
{{editor enriched.notes target="system.notes" button=true editable=true}}
|
||
</div>
|
||
<div class="tab items" data-group="primary" data-tab="sla">
|
||
<div class="sla-panel">
|
||
<div class="sla-banner">
|
||
<div>
|
||
<div class="sla-kicker">SLA Operative Profile</div>
|
||
<div class="sla-title">{{system.sla.species.value}} {{#if system.sla.trainingPackage.value}}/ {{system.sla.trainingPackage.value}}{{/if}}</div>
|
||
</div>
|
||
<div class="sla-tags">
|
||
<span class="sla-tag">{{system.sla.bpn.value}}</span>
|
||
<span class="sla-tag">SCL {{system.sla.scl.value}}</span>
|
||
{{#if isEbbUser}}<span class="sla-tag">Ebb {{system.sla.ebbRating.value}}</span>{{/if}}
|
||
{{#if isVevaphon}}<span class="sla-tag sla-instability-tag {{vevaphonInstabilityClass}}">Instability {{system.sla.vevaphonInstability.value}}/12</span>{{/if}}
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-2col sla-card-grid">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Package Focus</div>
|
||
<div class="sla-card-title">{{system.sla.trainingPackage.value}}</div>
|
||
<div class="sla-card-copy">{{system.sla.packageSummary.value}}</div>
|
||
<div class="sla-tag-row">
|
||
<span class="sla-tag">Employer {{system.sla.employer.value}}</span>
|
||
<span class="sla-tag">Sector {{system.sla.sector.value}}</span>
|
||
{{#if system.sla.packageWealth.value}}<span class="sla-tag">Wealth {{system.sla.packageWealth.value}}</span>{{/if}}
|
||
</div>
|
||
</div>
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Species Dossier</div>
|
||
<div class="sla-card-title">{{system.sla.species.value}}</div>
|
||
<div class="sla-card-copy">{{system.sla.speciesNotes.value}}</div>
|
||
<div class="sla-tag-row">
|
||
<span class="sla-tag">Operative {{system.sla.operativeType.value}}</span>
|
||
{{#if isEbbUser}}<span class="sla-tag">Flux Channel {{system.sla.ebbRating.value}}</span>{{/if}}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-2col sla-card-grid">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Rules Snapshot</div>
|
||
<div class="sla-card-title">{{slaEnabledSpeciesRuleCount}} active rules</div>
|
||
<div class="sla-note-list">
|
||
{{#each slaEnabledSpeciesRules as |rule|}}
|
||
<div class="sla-note-pill">{{rule.label}}</div>
|
||
{{/each}}
|
||
</div>
|
||
{{#unless slaEnabledSpeciesRuleCount}}
|
||
<div class="sla-note-pill sla-note-pill-wide">No optional species rules are enabled right now.</div>
|
||
{{/unless}}
|
||
</div>
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Sheet Mode</div>
|
||
<div class="sla-card-title">{{#if (compare 'str' slaSheetTheme '===' 'legacy')}}Legacy{{else}}Modern SLA{{/if}}</div>
|
||
<div class="sla-card-copy">Use the palette button in the header to swap the entire presentation style without changing the operative data.</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-2col" style="gap: 12px; margin-bottom: 12px;">
|
||
<div class="resource">
|
||
<label class="resource-label">Species</label>
|
||
<input type="text" name="system.sla.species.value" value="{{system.sla.species.value}}" data-dtype="String" />
|
||
</div>
|
||
<div class="resource">
|
||
<label class="resource-label">Training Package</label>
|
||
<input type="text" name="system.sla.trainingPackage.value" value="{{system.sla.trainingPackage.value}}" data-dtype="String" />
|
||
</div>
|
||
<div class="resource">
|
||
<label class="resource-label">Operative Type</label>
|
||
<input type="text" name="system.sla.operativeType.value" value="{{system.sla.operativeType.value}}" data-dtype="String" />
|
||
</div>
|
||
<div class="resource">
|
||
<label class="resource-label">BPN Colour</label>
|
||
<input type="text" name="system.sla.bpn.value" value="{{system.sla.bpn.value}}" data-dtype="String" />
|
||
</div>
|
||
<div class="resource">
|
||
<label class="resource-label">SCL</label>
|
||
<div class="sla-scl-control">
|
||
<input type="text" name="system.sla.scl.value" value="{{system.sla.scl.value}}" data-dtype="String" class="sla-scl-input" />
|
||
<div class="sla-scl-buttons">
|
||
<button type="button" class="sla-scl-adjust" data-delta="1" title="+1 SCL">+1</button>
|
||
<button type="button" class="sla-scl-adjust" data-delta="-1" title="-1 SCL">-1</button>
|
||
<button type="button" class="sla-scl-adjust" data-delta="0.5" title="+0.5 SCL">+½</button>
|
||
<button type="button" class="sla-scl-adjust" data-delta="-0.5" title="-0.5 SCL">-½</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="resource">
|
||
<label class="resource-label">Employer / Squad</label>
|
||
<input type="text" name="system.sla.employer.value" value="{{system.sla.employer.value}}" data-dtype="String" />
|
||
</div>
|
||
<div class="resource">
|
||
<label class="resource-label">Sector / Beat</label>
|
||
<input type="text" name="system.sla.sector.value" value="{{system.sla.sector.value}}" data-dtype="String" />
|
||
</div>
|
||
{{#if isEbbUser}}
|
||
<div class="resource">
|
||
<label class="resource-label">Ebb Rating</label>
|
||
<input type="text" name="system.sla.ebbRating.value" value="{{system.sla.ebbRating.value}}" data-dtype="Number" />
|
||
</div>
|
||
{{/if}}
|
||
</div>
|
||
|
||
<div class="grid grid-2col sla-card-grid">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Species Notes</div>
|
||
<div class="sla-note-list">
|
||
{{#each slaSpeciesTraitList as |note|}}
|
||
<div class="sla-note-pill">{{note}}</div>
|
||
{{/each}}
|
||
</div>
|
||
<textarea name="system.sla.speciesNotes.value" rows="5" class="textarea-input" data-target="system.sla.speciesNotes.value">{{system.sla.speciesNotes.value}}</textarea>
|
||
</div>
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Package Skills</div>
|
||
<div class="sla-note-list">
|
||
{{#each slaPackageSkillList as |skill|}}
|
||
<div class="sla-note-pill">{{skill}}</div>
|
||
{{/each}}
|
||
</div>
|
||
<textarea name="system.sla.packageSkills.value" rows="5" class="textarea-input" data-target="system.sla.packageSkills.value">{{system.sla.packageSkills.value}}</textarea>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-1col sla-card-grid">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Species Rules</div>
|
||
<div class="sla-card-copy">Turn these on or off to match the version of the species rules your table is using.</div>
|
||
{{#if slaSpeciesRules.length}}
|
||
<div class="sla-rule-list">
|
||
{{#each slaSpeciesRules as |rule|}}
|
||
<label class="sla-rule-toggle">
|
||
<input type="checkbox" name="{{rule.path}}" data-dtype="Boolean" {{checked rule.enabled}} />
|
||
<span class="sla-rule-text">
|
||
<span class="sla-rule-title">{{rule.label}}{{#if rule.optional}} (Optional){{/if}}</span>
|
||
<span class="sla-rule-summary">{{rule.summary}}</span>
|
||
</span>
|
||
</label>
|
||
{{/each}}
|
||
</div>
|
||
{{else}}
|
||
<div class="sla-note-pill sla-note-pill-wide">No species-specific toggles are defined for this operative yet.</div>
|
||
{{/if}}
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tab items" data-group="primary" data-tab="traits">
|
||
<div class="sla-panel">
|
||
<div class="sla-banner">
|
||
<div>
|
||
<div class="sla-kicker">Trait Engine</div>
|
||
<div class="sla-title">Balanced Personal Traits</div>
|
||
</div>
|
||
<div class="sla-tags">
|
||
<span class="sla-tag">{{traitCount}} traits</span>
|
||
<span class="sla-tag">{{traitValidation.rankBalance.advantageRanks}} / {{traitValidation.rankBalance.disadvantageRanks}}</span>
|
||
<span class="sla-tag">{{#if traitValidation.rankBalance.balanced}}Balanced{{else}}Needs Balance{{/if}}</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sla-traits-toolbar">
|
||
<a class="item-control item-create sla-sheet-action" title="Create Trait" data-type="persTrait"><i class="fas fa-plus"></i> Trait</a>
|
||
<button type="button" class="sla-sheet-action trait-validate">Validate</button>
|
||
</div>
|
||
|
||
<div class="grid grid-2col sla-card-grid" style="margin-bottom: 12px;">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Positive Traits</div>
|
||
<div class="sla-card-copy">Choose one advantage and add it to the operative.</div>
|
||
<div class="sla-trait-picker-row">
|
||
<select class="sla-trait-select" name="slaTraitPicker.advantage" data-type="advantage">
|
||
<option value="">Choose positive trait...</option>
|
||
{{#each slaPositiveTraitOptions as |trait|}}
|
||
<option value="{{trait.key}}" {{#if (compare 'str' ../slaTraitPickerSelection.advantage '===' trait.key)}}selected{{/if}}>{{trait.label}}</option>
|
||
{{/each}}
|
||
</select>
|
||
<button type="button" class="sla-sheet-action sla-trait-add" data-type="advantage">Add Positive</button>
|
||
</div>
|
||
</div>
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Negative Traits</div>
|
||
<div class="sla-card-copy">Choose one disadvantage and add it to the operative.</div>
|
||
<div class="sla-trait-picker-row">
|
||
<select class="sla-trait-select" name="slaTraitPicker.disadvantage" data-type="disadvantage">
|
||
<option value="">Choose negative trait...</option>
|
||
{{#each slaNegativeTraitOptions as |trait|}}
|
||
<option value="{{trait.key}}" {{#if (compare 'str' ../slaTraitPickerSelection.disadvantage '===' trait.key)}}selected{{/if}}>{{trait.label}}</option>
|
||
{{/each}}
|
||
</select>
|
||
<button type="button" class="sla-sheet-action sla-trait-add" data-type="disadvantage">Add Negative</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sla-traits-audit {{#if traitValidation.ok}}ok{{else}}warn sla-traits-audit-pulse{{/if}}">
|
||
<div><strong>Trait Count:</strong> {{traitCount}}</div>
|
||
<div><strong>Advantage Ranks:</strong> {{traitValidation.rankBalance.advantageRanks}}</div>
|
||
<div><strong>Disadvantage Ranks:</strong> {{traitValidation.rankBalance.disadvantageRanks}}</div>
|
||
<div><strong>Balance Net:</strong> {{traitValidation.rankBalance.net}}</div>
|
||
<div><strong>Coverage:</strong> {{traitValidation.coverage.mapped}} mapped / {{traitValidation.coverage.unmapped}} unmapped</div>
|
||
<div><strong>Status:</strong> <span class="sla-trait-balance-status {{#if traitValidation.rankBalance.balanced}}ok{{else}}warn{{/if}}">{{#if traitValidation.rankBalance.balanced}}Balanced{{else}}Needs Balance{{/if}}</span></div>
|
||
{{#if traitValidation.errors.length}}
|
||
<div class="sla-trait-audit-line"><strong>Errors:</strong> {{#each traitValidation.errors as |err|}}<span class="sla-trait-error">{{err}}</span>{{/each}}</div>
|
||
{{/if}}
|
||
{{#if traitValidation.warnings.length}}
|
||
<div class="sla-trait-audit-line"><strong>Warnings:</strong> {{#each traitValidation.warnings as |warn|}}<span class="sla-trait-warn">{{warn}}</span>{{/each}}</div>
|
||
{{/if}}
|
||
</div>
|
||
|
||
{{#if persTraitsEnhanced.length}}
|
||
<ol class="sla-trait-list">
|
||
<li class="sla-trait-row sla-trait-head">
|
||
<div>Icon</div>
|
||
<div>Trait</div>
|
||
<div>Rank</div>
|
||
<div>Type</div>
|
||
<div>State</div>
|
||
<div>Effect</div>
|
||
<div>Delete</div>
|
||
</li>
|
||
{{#each persTraitsEnhanced as |trait|}}
|
||
<li class="item sla-trait-row" data-item-id="{{trait._id}}">
|
||
<div class="sla-trait-icon item-edit" data-item-id="{{trait._id}}"><img src="{{trait.img}}" title="{{trait.name}}" /></div>
|
||
<div class="sla-trait-name item-edit" data-item-id="{{trait._id}}">{{trait.name}}</div>
|
||
<div class="sla-trait-rank">{{trait.slaTrait.rank}} / {{trait.slaTrait.maxRank}}</div>
|
||
<div class="sla-trait-type">{{trait.slaTrait.type}}</div>
|
||
<div class="sla-trait-status">{{trait.slaTrait.status}}</div>
|
||
<div class="sla-trait-effect" title="{{trait.slaTrait.effectSummary}}">{{trait.slaTrait.effectSummary}}</div>
|
||
<div class="sla-trait-delete"><a class="item-delete"><i class="fas fa-trash"></i></a></div>
|
||
</li>
|
||
{{/each}}
|
||
</ol>
|
||
{{else}}
|
||
<div class="sla-note-pill sla-note-pill-wide">No personal traits are on this operative yet. Add balanced good and bad traits here and the audit will keep track of the rank balance.</div>
|
||
{{/if}}
|
||
|
||
<div class="grid grid-2col sla-card-grid" style="margin-top: 12px;">
|
||
<div class="sla-card sla-snapshot-card sla-species-snapshot-card">
|
||
<div class="sla-card-label">Species Snapshot</div>
|
||
<div class="sla-note-list sla-snapshot-note-list">
|
||
{{#each slaSpeciesTraitList as |note|}}
|
||
<div class="sla-note-pill sla-snapshot-pill">{{note}}</div>
|
||
{{/each}}
|
||
</div>
|
||
{{#unless slaSpeciesTraitList.length}}
|
||
<div class="sla-note-pill sla-note-pill-wide sla-snapshot-pill">No species notes are currently listed for this operative.</div>
|
||
{{/unless}}
|
||
</div>
|
||
<div class="sla-card sla-snapshot-card sla-package-snapshot-card">
|
||
<div class="sla-card-label">Package Snapshot</div>
|
||
<div class="sla-note-list sla-snapshot-note-list">
|
||
{{#each slaPackageSkillList as |skill|}}
|
||
<div class="sla-note-pill sla-snapshot-pill">{{skill}}</div>
|
||
{{/each}}
|
||
</div>
|
||
{{#unless slaPackageSkillList.length}}
|
||
<div class="sla-note-pill sla-note-pill-wide sla-snapshot-pill">No package skills are currently listed for this operative.</div>
|
||
{{/unless}}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="tab items" data-group="primary" data-tab="special-rules">
|
||
<div class="sla-panel">
|
||
<div class="sla-banner">
|
||
<div>
|
||
<div class="sla-kicker">Species Doctrine</div>
|
||
<div class="sla-title">{{system.sla.species.value}} Special Rules</div>
|
||
</div>
|
||
<div class="sla-tags">
|
||
<span class="sla-tag">{{system.sla.species.value}}</span>
|
||
{{#if system.sla.trainingPackage.value}}<span class="sla-tag">{{system.sla.trainingPackage.value}}</span>{{/if}}
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-2col sla-card-grid">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Rule Toggles</div>
|
||
<div class="sla-card-copy">Turn these on or off to match the version of the species rules your table is using.</div>
|
||
{{#if slaSpeciesRules.length}}
|
||
<div class="sla-rule-list">
|
||
{{#each slaSpeciesRules as |rule|}}
|
||
<label class="sla-rule-toggle">
|
||
<input type="checkbox" name="{{rule.path}}" data-dtype="Boolean" {{checked rule.enabled}} />
|
||
<span class="sla-rule-text">
|
||
<span class="sla-rule-title">{{rule.label}}{{#if rule.optional}} (Optional){{/if}}</span>
|
||
<span class="sla-rule-summary">{{rule.summary}}</span>
|
||
</span>
|
||
</label>
|
||
{{/each}}
|
||
</div>
|
||
{{else}}
|
||
<div class="sla-note-pill sla-note-pill-wide">No species-specific toggles are defined for this operative yet.</div>
|
||
{{/if}}
|
||
</div>
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Combat Rule Status</div>
|
||
{{#if slaPrometheusStatus.enabled}}
|
||
<div class="sla-note-pill sla-note-pill-wide">Prometheus Regeneration is enabled.</div>
|
||
{{#if slaPrometheusStatus.inCombat}}
|
||
<div class="sla-card-copy">Current combat round: {{slaPrometheusStatus.currentRound}}</div>
|
||
{{#if slaPrometheusStatus.pulseThisRound}}
|
||
<div class="sla-note-pill sla-note-pill-wide">Regeneration triggers this round.</div>
|
||
{{else}}
|
||
<div class="sla-card-copy">Rounds until next regeneration pulse: {{slaPrometheusStatus.roundsUntilPulse}}</div>
|
||
{{/if}}
|
||
<div class="sla-card-copy">Every fourth combat round, recover 1d5 Health automatically.</div>
|
||
{{else}}
|
||
<div class="sla-card-copy">Not currently in combat. Prometheus regeneration will trigger on rounds 4, 8, 12, and so on once combat starts.</div>
|
||
{{/if}}
|
||
{{else}}
|
||
<div class="sla-note-pill sla-note-pill-wide">No active round-based special rule is currently enabled for this operative.</div>
|
||
{{/if}}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{#if isEbbUser}}
|
||
<div class="tab items" data-group="primary" data-tab="ebb">
|
||
<div class="sla-panel">
|
||
<div class="sla-banner">
|
||
<div>
|
||
<div class="sla-kicker">Ebb Discipline</div>
|
||
<div class="sla-title">{{system.sla.species.value}} Flux Channel</div>
|
||
</div>
|
||
<div class="sla-tags">
|
||
<span class="sla-tag">Flux {{system.sla.flux.value}} / {{system.sla.flux.max}}</span>
|
||
<span class="sla-tag">{{slaFlux.label}}</span>
|
||
<span class="sla-tag">Fear Save {{system.stats.fear.value}}</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-2col sla-card-grid">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Flux State</div>
|
||
<div class="sla-flux-stage {{slaFlux.cssClass}}">{{slaFlux.label}}</div>
|
||
<div class="sla-card-copy">{{slaFlux.description}}</div>
|
||
<div class="sla-card-copy">Risk bands: {{slaFlux.thresholds}}</div>
|
||
<div class="sla-flux-meter">
|
||
<div class="sla-flux-meter-fill {{slaFlux.cssClass}}" style="width: {{slaFluxPercent}}%;"></div>
|
||
</div>
|
||
<div class="sla-card-copy">Reserve remaining: {{system.sla.flux.value}} / {{system.sla.flux.max}}</div>
|
||
<div class="sla-action-row">
|
||
<button type="button" class="sla-flux-save">Fear / Flux Save</button>
|
||
<button type="button" class="sla-flux-panic">Flux Panic</button>
|
||
</div>
|
||
</div>
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Ebb Skill Deck</div>
|
||
<div class="sla-card-copy">Click a discipline below to roll that Ebb skill directly. Use the ability roster underneath to channel a specific power and spend Flux.</div>
|
||
<div class="sla-ebb-skill-list">
|
||
{{#each ebbSkills as |skill|}}
|
||
<button type="button" class="sla-ebb-skill-roll" data-item-id="{{skill._id}}" title="Roll {{skill.name}}">
|
||
<span>{{skill.name}}</span>
|
||
<div class="sla-ebb-skill-meta">
|
||
<small>{{skill.system.rank}}{{#if skill.system.sla.category}} | {{skill.system.sla.category}}{{/if}}</small>
|
||
<strong>+{{skill.slaBreakdown.total}}</strong>
|
||
</div>
|
||
</button>
|
||
{{/each}}
|
||
</div>
|
||
<div class="sla-card-copy">Core and discipline skills are grouped here so powers like Awareness are easier to find. Ebb skills live here, while the actual powers are listed in the ability roster below.</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-2col sla-card-grid">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Panic Protocol</div>
|
||
<div class="sla-note-list">
|
||
{{#each slaFluxGuidance as |entry|}}
|
||
<div class="sla-note-pill sla-note-pill-wide">{{entry}}</div>
|
||
{{/each}}
|
||
</div>
|
||
</div>
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Discipline Notes</div>
|
||
<div class="sla-card-copy">Use this space for doctrine, trainer notes, squad warnings, or sector-specific Ebb restrictions.</div>
|
||
<div class="grid grid-1col" style="gap: 12px; margin-top: 8px;">
|
||
<div class="resource">
|
||
<label class="resource-label">Flux Notes</label>
|
||
<textarea name="system.sla.fluxNotes.value" rows="5" class="textarea-input" data-target="system.sla.fluxNotes.value">{{system.sla.fluxNotes.value}}</textarea>
|
||
</div>
|
||
<div class="resource">
|
||
<label class="resource-label">Ebb Notes</label>
|
||
<textarea name="system.sla.ebbNotes.value" rows="5" class="textarea-input" data-target="system.sla.ebbNotes.value">{{system.sla.ebbNotes.value}}</textarea>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<ol class="items-list sla-ability-list" style="margin-bottom: 12px;">
|
||
<li class="item flexrow item-header">
|
||
<div class="item-image"></div>
|
||
<div class="skill-stat" style="flex-grow: 1.7;">Ebb Ability</div>
|
||
<div class="skill-stat">Skill</div>
|
||
<div class="skill-stat">Flux</div>
|
||
<div class="skill-stat">Tier</div>
|
||
<div class="skill-stat">Save</div>
|
||
<div class="item-controls">
|
||
<a class="item-control ability-create" title="Create Ebb Ability" data-type="ability"><i class="fas fa-plus"></i> Add</a>
|
||
</div>
|
||
</li>
|
||
{{#each abilities as |ability id|}}
|
||
<li class="item flexrow dropitem" data-item-id="{{ability._id}}">
|
||
<div class="item-image"><img src="{{ability.img}}" title="{{ability.name}}" width="24" height="24" /></div>
|
||
<div class="skill-name list-roll ability-use-trigger" style="flex-grow: 1.75;" title="Use {{ability.name}}">{{ability.name}}</div>
|
||
<div class="skill-stat">{{ability.system.sla.skillRef}}</div>
|
||
<div class="skill-stat">{{ability.system.sla.fluxCost}}</div>
|
||
<div class="skill-stat">{{ability.system.sla.tier}}</div>
|
||
<div class="skill-stat">{{ability.system.sla.panicSave}}</div>
|
||
<div class="item-controls">
|
||
<a class="item-control ability-use" title="Use Ability"><i class="fas fa-bolt"></i> Use</a>
|
||
<a class="item-control ability-edit" title="Edit Ability"><i class="fas fa-edit"></i></a>
|
||
<a class="item-control item-delete" title="Delete Ability"><i class="fas fa-trash"></i></a>
|
||
</div>
|
||
</li>
|
||
{{/each}}
|
||
</ol>
|
||
</div>
|
||
{{/if}}
|
||
{{#if isVevaphon}}
|
||
<div class="tab items" data-group="primary" data-tab="morph">
|
||
<div class="sla-panel">
|
||
<div class="sla-banner">
|
||
<div>
|
||
<div class="sla-kicker">Stormer Vevaphon</div>
|
||
<div class="sla-title">Polymorphic Form Control</div>
|
||
</div>
|
||
<div class="sla-tags">
|
||
<span class="sla-tag">Form: {{system.sla.morphForm.value}}</span>
|
||
<span class="sla-tag sla-instability-tag {{vevaphonInstabilityClass}}">Instability {{system.sla.vevaphonInstability.value}} / 12</span>
|
||
<span class="sla-tag">Sanity {{system.stats.sanity.value}}</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-2col sla-card-grid">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Instability Track</div>
|
||
<div class="sla-instability-bar-wrap">
|
||
<div class="sla-instability-bar {{vevaphonInstabilityClass}}" style="width: {{vevaphonInstabilityPercent}}%;"></div>
|
||
<div class="sla-instability-bar-label {{vevaphonInstabilityClass}}">{{system.sla.vevaphonInstability.value}} / 12</div>
|
||
</div>
|
||
<div class="sla-card-copy">
|
||
{{#if vevaphonInstabilityCritical}}⚠ CRITICAL — Morph Panic risk on every failed Sanity save.{{/if}}
|
||
{{#if vevaphonInstabilityElevated}}Instability elevated — minor morph effects trigger each scene.{{/if}}
|
||
{{#unless vevaphonInstabilityElevated}}Instability nominal. Morphing is available without additional risk.{{/unless}}
|
||
</div>
|
||
<div class="sla-action-row" style="gap: 6px; flex-wrap: wrap;">
|
||
<button type="button" class="sla-instability-increase">+1 Instability</button>
|
||
<button type="button" class="sla-instability-decrease">-1 Instability</button>
|
||
</div>
|
||
<div class="sla-card-copy" style="margin-top: 8px;">At 12, the Vevaphon is lost — immediate retirement or death.</div>
|
||
</div>
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Active Morph Form</div>
|
||
<div class="sla-card-title">{{system.sla.morphForm.value}}</div>
|
||
<div class="sla-card-copy">Each morph shift costs 1 Instability. Changing form mid-scene requires a Sanity save at Instability 6+.</div>
|
||
<div class="sla-morph-form-buttons">
|
||
<button type="button" class="sla-morph-shift" data-form="Brute Form" {{#if (compare 'str' system.sla.morphForm.value '===' 'Brute Form')}}disabled{{/if}}>
|
||
<span class="sla-morph-btn-name">Brute Form</span>
|
||
<span class="sla-morph-btn-meta">STR+10, BODY+10 | Knockdown Immune</span>
|
||
</button>
|
||
<button type="button" class="sla-morph-shift" data-form="Stalker Form" {{#if (compare 'str' system.sla.morphForm.value '===' 'Stalker Form')}}disabled{{/if}}>
|
||
<span class="sla-morph-btn-name">Stalker Form</span>
|
||
<span class="sla-morph-btn-meta">SPD+10, Stealth+20 | Armour Incompatible</span>
|
||
</button>
|
||
<button type="button" class="sla-morph-shift" data-form="Raptor Form" {{#if (compare 'str' system.sla.morphForm.value '===' 'Raptor Form')}}disabled{{/if}}>
|
||
<span class="sla-morph-btn-name">Raptor Form</span>
|
||
<span class="sla-morph-btn-meta">COM+10, SPD+5 | Critical Wound Bonus</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid grid-2col sla-card-grid">
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Morph Panic Reference</div>
|
||
<div class="sla-card-copy">Triggered at Instability 10+ on a failed Sanity save. Roll 1d6:</div>
|
||
<div class="sla-note-list">
|
||
<div class="sla-note-pill sla-note-pill-wide">1. Cascade Shift — random morph form, +1 Instability.</div>
|
||
<div class="sla-note-pill sla-note-pill-wide">2. Identity Bleed — forgets name and callsign until end of scene.</div>
|
||
<div class="sla-note-pill sla-note-pill-wide">3. Partial Lock — one limb freezes. -10 physical rolls using that limb.</div>
|
||
<div class="sla-note-pill sla-note-pill-wide">4. Tissue Rejection — 1d5 damage, armour does not apply.</div>
|
||
<div class="sla-note-pill sla-note-pill-wide">5. Threat Imprint — locked on nearest visible target.</div>
|
||
<div class="sla-note-pill sla-note-pill-wide">6. Full Reversion — base form, lose morph bonuses, -1 Instability.</div>
|
||
</div>
|
||
</div>
|
||
<div class="sla-card">
|
||
<div class="sla-card-label">Morph Notes</div>
|
||
<textarea name="system.sla.morphNotes.value" rows="10" class="textarea-input" data-target="system.sla.morphNotes.value">{{system.sla.morphNotes.value}}</textarea>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{/if}}
|
||
{{!-- Owned Items Tab --}}
|
||
<div class="tab items" data-group="primary" data-tab="items">
|
||
{{#if drugAlerts.length}}
|
||
<div class="sla-drug-alerts">
|
||
{{#each drugAlerts as |alert id|}}
|
||
<div class="sla-drug-alert {{alert.state}}">
|
||
<div class="sla-drug-alert-main">
|
||
<div class="sla-drug-alert-name">{{alert.name}}</div>
|
||
<div class="sla-drug-alert-meta">
|
||
<span class="sla-drug-alert-state">{{alert.stateLabel}}</span>
|
||
{{#if alert.duration}}<span class="sla-drug-alert-duration">{{alert.duration}}</span>{{/if}}
|
||
</div>
|
||
</div>
|
||
<div class="sla-drug-alert-summary">{{alert.summary}}</div>
|
||
<button type="button" class="drug-close-btn drug-close" data-item-id="{{alert.itemId}}" data-drug-id="{{alert.drugId}}">Close</button>
|
||
</div>
|
||
{{/each}}
|
||
</div>
|
||
{{/if}}
|
||
|
||
{{#if system.settings.firstEdition}}
|
||
<!-- ARMOR -->
|
||
<ol class="items-list" role="table">
|
||
<li class="item flexrow item-header" role="rowgroup">
|
||
<div class="item-image" role="cell"></div>
|
||
<div class="skill-stat" style="flex-grow: 2.5;" role="cell">{{ localize 'Mosh.ArmorName' }}</div>
|
||
<div class="skill-stat" role="cell" title="Armour Protection — reduces incoming damage before it reaches your wounds. Higher is better.">{{ localize 'Mosh.AP' }}</div>
|
||
<div class="skill-stat" role="cell" title="Damage Reduction — subtracts directly from wound damage after AP is applied. Each point absorbed is one less point of damage taken.">{{ localize 'Mosh.DR' }}</div>
|
||
<div class="skill-stat" role="cell" title="Speed penalty — how much this armour slows movement. Expressed as a % penalty to physical speed checks.">{{ localize 'Mosh.Speed' }}</div>
|
||
<div class="skill-stat" role="cell" title="Oxygen supply — current / maximum charges for sealed suits and vacuum armour. N/A means the suit is not airtight.">{{ localize 'Mosh.Oxygen' }}</div>
|
||
<div class="skill-stat" role="cell" title="Carry state — Eqp means wearing it now (weight counts against your equipped load). Stow means packed away (counts as stowed weight).">Carry</div>
|
||
<div class="item-controls" role="cell">
|
||
<a class="item-control item-create" title="{{ localize 'Mosh.CreateArmor' }}" data-type="armor"><i class="fas fa-plus"></i> {{ localize 'Mosh.Add' }}</a>
|
||
</div>
|
||
</li>
|
||
{{#each armors as |armor id|}}
|
||
<li class="item flexrow dropitem" data-item-id="{{armor._id}}" role="rowgroup">
|
||
<div class="item-image" role="cell"><img src="{{armor.img}}" title="{{armor.name}}" width="24" height="24" /></div>
|
||
<h4 class="skill-name list-roll description-roll" style="flex-grow: 2.55;" role="cell">{{armor.name}}</h4>
|
||
<div class="skill-stat armor-ap list-roll" role="cell">{{armor.system.armorPoints}}</div>
|
||
<div class="skill-stat armor-dr list-roll" role="cell">{{armor.system.damageReduction}}</div>
|
||
<div class="skill-stat">{{armor.system.speed}}</div>
|
||
{{#if armor.system.oxygenMax}}
|
||
<div class="skill-stat armor-oxy list-roll" role="cell">{{armor.system.oxygenCurrent}}/{{armor.system.oxygenMax}}</div>
|
||
{{else}}
|
||
<div class="skill-stat" role="cell">{{ localize 'Mosh.NA' }}</div>
|
||
{{/if}}
|
||
<div class="skill-stat" role="cell">
|
||
<div class="sla-carry-toggle-row">
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' armor.slaCarry.state '===' 'equipped')}}active{{/if}}" data-state="equipped">Eqp</button>
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' armor.slaCarry.state '===' 'stowed')}}active{{/if}}" data-state="stowed">Stow</button>
|
||
</div>
|
||
<small class="sla-carry-row-text">{{armor.slaCarry.totalWeight}} kg</small>
|
||
</div>
|
||
<div class="item-controls" role="cell">
|
||
<a class="item-control item-edit" title="{{ localize 'Mosh.EditArmor' }}"><i class="fas fa-edit"></i></a>
|
||
<a class="item-control item-delete" title="{{ localize 'Mosh.DeleteArmor' }}"><i class="fas fa-trash"></i></a>
|
||
</div>
|
||
</li>
|
||
{{/each}}
|
||
</ol>
|
||
{{else}}
|
||
<!-- ARMOR -->
|
||
<ol class="items-list" role="table">
|
||
<li class="item flexrow item-header" role="rowgroup">
|
||
<div class="item-image" role="cell"></div>
|
||
<div class="skill-stat" style="flex-grow: 2.5;" role="cell">{{ localize 'Mosh.ArmorName' }}</div>
|
||
<div class="skill-stat" role="cell" title="Save Bonus — this value is added to your Body save when checking to resist physical damage while wearing this armour.">{{ localize 'Mosh.SaveBonus' }}</div>
|
||
<div class="skill-stat" role="cell" title="Speed penalty — how much this armour slows movement. Expressed as a % penalty to physical speed checks.">{{ localize 'Mosh.Speed' }}</div>
|
||
<div class="skill-stat" role="cell" title="Oxygen supply — current / maximum charges for sealed suits and vacuum armour. N/A means the suit is not airtight.">{{ localize 'Mosh.Oxygen' }}</div>
|
||
<div class="skill-stat" role="cell" title="Carry state — Eqp means wearing it now (weight counts against your equipped load). Stow means packed away (counts as stowed weight).">Carry</div>
|
||
<div class="item-controls" role="cell">
|
||
<a class="item-control item-create" title="{{ localize 'Mosh.CreateArmor' }}" data-type="armor"><i class="fas fa-plus"></i> {{ localize 'Mosh.Add' }}</a>
|
||
</div>
|
||
</li>
|
||
{{#each armors as |armor id|}}
|
||
<li class="item flexrow dropitem" data-item-id="{{armor._id}}" role="rowgroup">
|
||
<div class="item-image" role="cell"><img src="{{armor.img}}" title="{{armor.name}}" width="24" height="24" /></div>
|
||
<h4 class="skill-name list-roll description-roll" style="flex-grow: 2.55;" role="cell">{{armor.name}}</h4>
|
||
<div class="skill-stat armor-ap list-roll" role="cell">{{armor.system.armorPoints}}</div>
|
||
<div class="skill-stat">{{armor.system.speed}}</div>
|
||
{{#if armor.system.oxygenMax}}
|
||
<div class="skill-stat armor-oxy list-roll" role="cell">{{armor.system.oxygenCurrent}}/{{armor.system.oxygenMax}}</div>
|
||
{{else}}
|
||
<div class="skill-stat" role="cell">{{ localize 'Mosh.NA' }}</div>
|
||
{{/if}}
|
||
<div class="skill-stat" role="cell">
|
||
<div class="sla-carry-toggle-row">
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' armor.slaCarry.state '===' 'equipped')}}active{{/if}}" data-state="equipped">Eqp</button>
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' armor.slaCarry.state '===' 'stowed')}}active{{/if}}" data-state="stowed">Stow</button>
|
||
</div>
|
||
<small class="sla-carry-row-text">{{armor.slaCarry.totalWeight}} kg</small>
|
||
</div>
|
||
<div class="item-controls" role="cell">
|
||
<a class="item-control item-edit" title="{{ localize 'Mosh.EditArmor' }}"><i class="fas fa-edit"></i></a>
|
||
<a class="item-control item-delete" title="{{ localize 'Mosh.DeleteArmor' }}"><i class="fas fa-trash"></i></a>
|
||
</div>
|
||
</li>
|
||
{{/each}}
|
||
</ol>
|
||
{{/if}}
|
||
|
||
<!-- DRUGS -->
|
||
<ol class="items-list sla-drug-list">
|
||
<li class="item flexrow item-header">
|
||
<div class="item-image"></div>
|
||
<div class="skill-stat" style="flex-grow: 1.6;">Drug</div>
|
||
<div class="skill-stat" title="Quantity — number of doses currently carried.">Qty</div>
|
||
<div class="skill-stat" title="Rating — the potency tier of this drug. Higher ratings mean stronger effects and harder addiction saves.">Rating</div>
|
||
<div class="skill-stat" title="Value — street price per dose in credits (cR).">Value</div>
|
||
<div class="skill-stat" title="Weight — total carry weight for all doses of this drug.">Weight</div>
|
||
<div class="skill-stat" title="Carry state — Eqp means on your person and immediately accessible. Stow means packed away in your kit.">Carry</div>
|
||
<div class="skill-stat" title="State — current drug status. Ready means unused. Active means the drug is currently in effect. Crashed means the effect has ended and the character may be experiencing comedown penalties.">State</div>
|
||
<div class="skill-stat" title="Duration — how many rounds or minutes of effect remain. Blank or 0 means the drug is not currently active.">Duration</div>
|
||
<div class="item-controls">
|
||
<a class="item-control item-create" title="Create Drug" data-type="drug"><i class="fas fa-plus"></i> Add</a>
|
||
</div>
|
||
</li>
|
||
{{#each drugRows as |drug id|}}
|
||
<li class="item flexrow dropitem" data-item-id="{{drug.itemId}}" data-drug-id="{{drug.drugId}}">
|
||
<div class="item-image"><img src="{{drug.img}}" title="{{drug.name}}" width="24" height="24" /></div>
|
||
<div class="skill-name list-roll description-roll drug-item-summary" style="flex-grow: 1.6;">{{drug.name}}<span>{{drug.summary}}</span></div>
|
||
<div class="skill-stat item-quantity">{{drug.quantity}}</div>
|
||
<div class="skill-stat">{{drug.rating}}</div>
|
||
<div class="skill-stat">{{drug.cost}}</div>
|
||
<div class="skill-stat">{{drug.slaCarry.totalWeight}} kg</div>
|
||
<div class="skill-stat">
|
||
<div class="sla-carry-toggle-row">
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' drug.slaCarry.state '===' 'equipped')}}active{{/if}}" data-state="equipped">Eqp</button>
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' drug.slaCarry.state '===' 'stowed')}}active{{/if}}" data-state="stowed">Stow</button>
|
||
</div>
|
||
</div>
|
||
<div class="skill-stat">{{drug.statusLabel}}</div>
|
||
<div class="skill-stat">{{drug.duration}}</div>
|
||
<div class="item-controls">
|
||
<button type="button" class="drug-use-btn drug-use" {{#unless drug.canUse}}disabled{{/unless}}>Use</button>
|
||
<button type="button" class="drug-close-btn drug-close" {{#unless drug.canClose}}disabled{{/unless}}>Close</button>
|
||
<a class="item-control item-edit" title="Edit Drug"><i class="fas fa-edit"></i></a>
|
||
<a class="item-control item-delete" title="Delete Drug"><i class="fas fa-trash"></i></a>
|
||
</div>
|
||
</li>
|
||
{{/each}}
|
||
</ol>
|
||
|
||
<!-- ITEMS -->
|
||
<ol class="items-list">
|
||
<li class="item flexrow item-header">
|
||
<div class="item-image"></div>
|
||
<div class="skill-stat" style="flex-grow: 1.5;" title="Hover over any item name to see its description.">{{ localize 'Mosh.ItemName' }}</div>
|
||
<div class="skill-stat" title="Quantity — how many of this item you are carrying.">{{ localize 'Mosh.Quantity' }}</div>
|
||
<div class="skill-stat" title="Weight — total carry weight for all units of this item (kg).">{{ localize 'Mosh.Weight' }}</div>
|
||
<div class="skill-stat" title="Carry state — Eqp means on your person and ready to use. Stow means packed away. Equipped items count against your active carry limit; stowed items count against your total carry limit.">Carry</div>
|
||
<div class="skill-stat" title="Value — purchase price in credits (cR). Sell price is typically half.">{{ localize 'Mosh.Value' }}</div>
|
||
<div class="item-controls">
|
||
<a class="item-control item-create" title="{{ localize 'Mosh.CreateItem' }}" data-type="item"><i class="fas fa-plus"></i> Add</a>
|
||
</div>
|
||
</li>
|
||
{{#each gear as |item id|}}
|
||
<li class="item flexrow dropitem" data-item-id="{{item._id}}">
|
||
<div class="item-image"><img src="{{item.img}}" title="{{item.name}}" width="24" height="24" /></div>
|
||
<h4 class="skill-name list-roll description-roll" style="flex-grow: 1.54;">{{item.name}}</h4>
|
||
<div class="skill-stat list-roll item-quantity">{{item.system.quantity}}</div>
|
||
<div class="skill-stat">{{item.slaCarry.totalWeight}} kg</div>
|
||
<div class="skill-stat">
|
||
<div class="sla-carry-toggle-row">
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' item.slaCarry.state '===' 'equipped')}}active{{/if}}" data-state="equipped">Eqp</button>
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' item.slaCarry.state '===' 'stowed')}}active{{/if}}" data-state="stowed">Stow</button>
|
||
</div>
|
||
</div>
|
||
<div class="skill-stat">{{item.system.cost}}</div>
|
||
<div class="item-controls">
|
||
<a class="item-control item-edit" title="{{ localize 'Mosh.EditItem' }}"><i class="fas fa-edit"></i></a>
|
||
<a class="item-control item-delete" title="{{ localize 'Mosh.DeleteItem' }}"><i class="fas fa-trash"></i></a>
|
||
</div>
|
||
</li>
|
||
{{/each}}
|
||
</ol>
|
||
<div class="item flex-group-left item-header">
|
||
<div class="skill-stat" style="flex-grow: 1.5;">{{ localize 'Mosh.CarryingCapacity' }}: {{system.weight.capacity}} kg</div>
|
||
<div class="skill-stat">{{ localize 'Mosh.CurrentWeight' }}: {{system.weight.current}} kg</div>
|
||
<div class="skill-stat">Stowed: {{system.weight.stowed}} kg</div>
|
||
</div>
|
||
|
||
</div>
|
||
{{!-- Owned Skills Tab --}}
|
||
<div class="tab items" data-group="primary" data-tab="skills">
|
||
<div class="sla-card" style="margin-bottom: 12px;">
|
||
<div class="sla-card-label">Field Skill Deck</div>
|
||
<div class="sla-card-copy">Standard operative skills are listed here by category. Ebb-only skills stay on the Ebb tab so non-Ebb characters and general play stay uncluttered.</div>
|
||
</div>
|
||
<!-- SKILLS -->
|
||
<ol class="items-list" style="margin-bottom : 10px;">
|
||
<li class="item flexrow item-header">
|
||
<div class="item-image"></div>
|
||
<div class="skill-stat" style="flex-grow: 1.4;" title="Click a skill name to roll it against the relevant stat. Your bonus is added to a d100 roll — you succeed by rolling under the total.">{{ localize 'Mosh.SkillName' }}</div>
|
||
<div class="skill-stat" title="Category — broad skill grouping (Combat, Technical, Social, etc.) used for package sorting and Ebb discipline filtering.">Category</div>
|
||
<div class="skill-stat" title="Rank — your proficiency level in this skill. Untrained (no bonus), Basic (+1–9), Trained (+10–14), Expert (+15–19), Master (+20+).">{{ localize 'Mosh.SkillRank' }}</div>
|
||
<div class="skill-stat" title="Bonus — total modifier added to d100 rolls with this skill. Breakdown shown in small text below the value. Higher is better — you need to roll under (stat + bonus).">{{ localize 'Mosh.SkillBonus' }}</div>
|
||
<div class="item-controls">
|
||
<a class="item-control skill-create" title="{{ localize 'Mosh.CreateSkill' }}" data-type="skill"><i class="fas fa-plus"></i> {{ localize 'Mosh.Add' }}</a>
|
||
</div>
|
||
</li>
|
||
{{#each skills as |skill id|}}
|
||
<li class="item flexrow dropitem" data-item-id="{{skill._id}}">
|
||
<div class="item-image"><img src="{{skill.img}}" title="{{skill.name}}" width="24" height="24"/></div>
|
||
<div class="skill-name skill-roll list-roll sla-skill-name-cell" style="flex-grow: 1.4;">
|
||
<span>{{skill.name}}</span>
|
||
{{#if skill.isCombatSkill}}<small class="sla-skill-flag">Combat Use</small>{{/if}}
|
||
{{#if skill.slaBreakdown.summary}}<small>{{skill.slaBreakdown.summary}}</small>{{/if}}
|
||
</div>
|
||
<div class="skill-stat">{{skill.system.sla.category}}</div>
|
||
<div class="skill-stat">{{skill.system.rank}}</div>
|
||
<div class="skill-stat">
|
||
{{skill.system.displayBonus}}
|
||
{{#if skill.slaTraitPreview.modLabel}}<small class="sla-skill-trait-mod">{{skill.slaTraitPreview.modLabel}} trait</small>{{/if}}
|
||
</div>
|
||
<div class="item-controls">
|
||
<a class="item-control skill-edit" title="{{ localize 'Mosh.EditSkill' }}"><i class="fas fa-edit"></i></a>
|
||
<a class="item-control item-delete" title="{{ localize 'Mosh.DeleteSkill' }}"><i class="fas fa-trash"></i></a>
|
||
</div>
|
||
</li>
|
||
{{/each}}
|
||
</ol>
|
||
|
||
{{#if system.settings.firstEdition}}
|
||
|
||
<!-- XP -->
|
||
<div class ="skill_training_frame" style="margin-bottom : 10px;">
|
||
<div class="grid grid-3col" style="grid-template-columns: 90px auto 283px ;">
|
||
<div class="skill-stat" style="position: relative; top: 6px;"><strong>{{ localize 'Mosh.SkillTraining' }}</strong></div>
|
||
<textarea name="system.xp.selectedSkill" rows="2" class="textarea-input-grey" type="text" data-target="system.xp.selectedSkill" placeholder="" style="height: 30px; margin: 0; position: relative; top: 50%; -ms-transform: translateY(-50%); transform: translateY(-50%); background: white; color: black;">{{system.xp.selectedSkill}}</textarea>
|
||
<div class="char-pip-button list-roll flex" style="position: relative; top: -7px;" data-key="xp" data-label="XP" data-max="16" data-min="0">{{{system.xp.html}}}</div>
|
||
</div>
|
||
</div>
|
||
|
||
{{/if}}
|
||
|
||
<div class="seperatorLine"></div>
|
||
|
||
|
||
|
||
<!-- Conditions -->
|
||
<ol class="items-list">
|
||
<li class="item flexrow item-header">
|
||
<div class="item-image"></div>
|
||
<div class="skill-stat">{{ localize 'Mosh.Condition' }}</div>
|
||
<div class="skill-stat">{{ localize 'Mosh.Severity' }}</div>
|
||
<div class="skill-stat">{{ localize 'Mosh.Treatment' }}</div>
|
||
<div class="item-controls">
|
||
<a class="item-control item-create" title="{{ localize 'Mosh.CreateCondition' }}" data-type="condition"><i class="fas fa-plus"></i> {{ localize 'Mosh.Add' }}</a>
|
||
</div>
|
||
</li>
|
||
{{#each conditions as |condition id|}}
|
||
<li class="item flexrow dropitem" data-item-id="{{condition._id}}">
|
||
<div class="item-image"><img src="{{condition.img}}" title="{{condition.name}}" width="24" height="24"/></div>
|
||
<div class="skill-name description-roll list-roll">{{condition.name}}</div>
|
||
<div class="skill-stat list-roll severity">{{condition.system.severity}}</div>
|
||
<div class="skill-stat">
|
||
{{#if condition.system.treatment.html}}
|
||
<div class="treatment-button list-roll flex" style="margin: 0; position: relative; top: 50%; -ms-transform: translateY(-50%); transform: translateY(-50%);" data-key="condition" data-label="condition" data-max="3" data-min="0">
|
||
{{{condition.system.treatment.html}}}
|
||
</div>
|
||
{{else}}
|
||
<div class="treatment-button list-roll flex" style="margin: 0; position: relative; top: 50%; -ms-transform: translateY(-50%); transform: translateY(-50%);" data-key="condition" data-label="condition" data-max="3" data-min="0">
|
||
{{condition.name}}
|
||
</div>
|
||
{{/if}}
|
||
</div>
|
||
<div class="item-controls">
|
||
<a class="item-control skill-edit" title="{{ localize 'Mosh.EditCondition' }}"><i class="fas fa-edit"></i></a>
|
||
<a class="item-control item-delete" title="{{ localize 'Mosh.DeleteCondition' }}"><i class="fas fa-trash"></i></a>
|
||
</div>
|
||
</li>
|
||
|
||
{{/each}}
|
||
</ol>
|
||
|
||
|
||
</div>
|
||
|
||
{{!-- Owned Weapons Tab --}}
|
||
<div class="tab items" data-group="primary" data-tab="weapons">
|
||
<div class="sla-card" style="margin-bottom: 12px;">
|
||
<div class="sla-card-label">Weapons Readiness</div>
|
||
<div class="sla-card-copy">Ammo stacks: {{slaAmmoInventory.stackCount}} | Total loose rounds: {{slaAmmoInventory.roundCount}} | Running ammo spend: {{system.sla.ammoSpendTotal.value}} cR</div>
|
||
<div class="sla-card-copy">Carry: {{slaCarry.current}} / {{slaCarry.capacity}} kg | {{slaCarry.state}}</div>
|
||
<div class="sla-action-row" style="margin-top: 8px;">
|
||
<button type="button" class="sla-sheet-action weapon-reload-all">Reload All</button>
|
||
</div>
|
||
</div>
|
||
<!-- WEAPONS -->
|
||
<ol class="items-list">
|
||
<li class="item flexrow item-header">
|
||
<div class="item-image"></div>
|
||
<div class="skill-stat" style="flex-grow: 2;" title="Click a weapon name to make an attack roll using your Combat stat. Calibre and current ammo state shown below the name.">{{ localize 'Mosh.WeaponName' }}</div>
|
||
<div class="skill-stat" title="Damage — rolled on a successful hit. Melee weapons may add your Strength modifier. Anti-Armour (AA) weapons halve target armour before applying damage.">{{ localize 'Mosh.Damage' }}</div>
|
||
<div class="skill-stat" title="Ammo — currently loaded type (STD / AP / HE / HEAP) and reserve count. STD is standard. AP is armour-piercing (halves target armour, -1 damage). HE is high explosive (+1d5 damage, explosive wounds). HEAP combines AP and HE effects.">{{ localize 'Mosh.Ammo' }}</div>
|
||
<div class="skill-stat" title="Shots — current magazine / maximum magazine capacity. Click the reload icon to reload or swap ammo type.">{{ localize 'Mosh.Shots' }}</div>
|
||
<div class="skill-stat" title="Fire Mode — click to cycle between available modes. Single fires one shot. Burst fires several rounds for bonus damage but uses more ammo. Auto lays down suppressing fire.">Mode</div>
|
||
<div class="skill-stat" title="Carry state — Eqp means the weapon is drawn and ready. Stow means holstered or packed. Only equipped weapons can be used in combat without an action to draw.">Carry</div>
|
||
<div class="skill-stat" title="Range — maximum effective distance. At short range you roll normally. At medium range you take a penalty. At long range the penalty increases significantly. Beyond max range the weapon cannot reach.">{{ localize 'Mosh.Range' }}</div>
|
||
<div class="item-controls">
|
||
<a class="item-control weapon-create" title="{{ localize 'Mosh.CreateWeapon' }}" data-type="weapon"><i class="fas fa-plus"></i> {{ localize 'Mosh.Add' }}</a>
|
||
</div>
|
||
</li>
|
||
|
||
{{#each weapons as |weapon id|}}
|
||
<li class="item flexrow dropitem" data-item-id="{{weapon._id}}">
|
||
<!-- <div class="item-image"><img src="{{skill.img}}" title="{{skill.name}}" width="24" height="24"/></div> -->
|
||
<div class="item-image"><img src="{{weapon.img}}" title="{{weapon.name}}" width="24" height="24" /></div>
|
||
<div class="skill-name weapon-roll list-roll sla-skill-name-cell" style="flex-grow: 2.05;">
|
||
<span>{{weapon.name}}</span>
|
||
{{#if weapon.system.useAmmo}}<small>{{weapon.sla.calibreLabel}}</small>{{/if}}
|
||
{{#if weapon.system.useAmmo}}<small class="sla-weapon-state sla-weapon-state-{{weapon.sla.ammoStateClass}}">{{weapon.sla.ammoState}}</small>{{/if}}
|
||
</div>
|
||
{{#if weapon.system.antiArmor}}
|
||
<div class="skill-stat dmg-roll list-roll">{{weapon.system.damage}} ({{ localize 'Mosh.AntiArmorAcronym' }})</div>
|
||
{{else}}
|
||
<div class="skill-stat dmg-roll list-roll">{{weapon.system.damage}}</div>
|
||
{{/if}}
|
||
{{#if weapon.system.useAmmo}}
|
||
<div class="skill-stat weapon-ammo list-roll" title="Reload or swap ammunition">
|
||
<div class="sla-weapon-ammo-primary">{{weapon.system.ammoLoadedType}} | {{weapon.sla.loadedAmmoReserve}}</div>
|
||
<div class="sla-weapon-ammo-secondary">{{weapon.sla.reserveSummary}}</div>
|
||
</div>
|
||
{{else}}
|
||
<div class="skill-stat">{{ localize 'Mosh.NA' }}</div>
|
||
{{/if}}
|
||
{{#if weapon.system.useAmmo}}
|
||
<div class="skill-stat">
|
||
<a class="weapon-shots list-roll" title="Reload or swap ammunition">{{weapon.system.curShots}}/{{weapon.system.shots}}</a>
|
||
<a class="weapon-reload list-roll" title="Reload or swap ammunition"><i class="fas fa-sync"></i></a>
|
||
</div>
|
||
{{else}}
|
||
<div class="skill-stat">{{ localize 'Mosh.NA' }}</div>
|
||
{{/if}}
|
||
{{#if weapon.system.useAmmo}}
|
||
<div class="skill-stat">
|
||
<a class="weapon-fire-mode list-roll" title="Cycle fire mode">{{weapon.system.sla.currentFireMode}}</a>
|
||
</div>
|
||
{{else}}
|
||
<div class="skill-stat">{{ localize 'Mosh.NA' }}</div>
|
||
{{/if}}
|
||
<div class="skill-stat">
|
||
<div class="sla-carry-toggle-row">
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' weapon.slaCarry.state '===' 'equipped')}}active{{/if}}" data-state="equipped">Eqp</button>
|
||
<button type="button" class="sla-carry-toggle {{#if (compare 'str' weapon.slaCarry.state '===' 'stowed')}}active{{/if}}" data-state="stowed">Stow</button>
|
||
</div>
|
||
<small class="sla-carry-row-text">{{weapon.slaCarry.totalWeight}} kg</small>
|
||
</div>
|
||
{{#if weapon.system.ranges.value}}
|
||
<div class="skill-stat">{{weapon.system.ranges.value}}</div>
|
||
{{else}}
|
||
<div class="skill-stat">{{ localize 'Mosh.NA' }}</div>
|
||
{{/if}}
|
||
<div class="item-controls">
|
||
<a class="item-control weapon-edit" title="{{ localize 'Mosh.EditWeapon' }}"><i class="fas fa-edit"></i></a>
|
||
<a class="item-control item-delete" title="{{ localize 'Mosh.DeleteWeapon' }}"><i class="fas fa-trash"></i></a>
|
||
</div>
|
||
</li>
|
||
{{/each}}
|
||
</ol>
|
||
</div>
|
||
</section>
|
||
</form>
|