Files
roll20-character-sheets/Draw Steel/draw-steel.html
T
Zen-Raven 4382528c32 Importing Bugfix
Free Maneuvers and Free Triggered actions are now labeled properly
2026-02-12 09:46:34 -08:00

6401 lines
306 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div class="sheet-header">
<!-- Header Start -->
<h1 class="title">
<img
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Draw%20Steel/images/powered_by_draw_steel.webp"
alt="Powered By Draw Steel"
style="height: 60px"
/>
</h1>
<label class="sheet-options-checkbox-label" for="sheet-options-checkbox">y</label>
<input id="sheet-options-checkbox" class="sheet-options-checkbox" type="checkbox" />
<div class="sheet-panel sheet-options-toggle">
<!-- Options Panel for choosing Player/NPC sheet and imports -->
<div class="sheet-panel-box">
<input id="npc-checkbox" name="attr_is_npc" class="npc-checkbox" type="checkbox" />
<label for="npc-checkbox" data-i18n="npc-toggle"></label>
<div>
<span data-i18n="whisper-gm"></span>
<select name="attr_wtype">
<option value="" data-i18n="never-whisper-roll" selected></option>
<option value="?{Whisper?|Public Roll,|Whisper Roll,/w gm }" data-i18n="query-whisper-roll"></option>
<option value="/w gm " data-i18n="always-whisper-roll"></option>
</select>
</div>
<div class="sheet-panel-box">
<h4><span data-i18n="damage-autocalc">Damage Calculator</span></h4>
<label for="options-calculate-damage" data-i18n="options-calculate-damage">Automatically Calculate Damage:</label>
<input id="options-calculate-damage" name="attr_options_calculate_damage" type="checkbox" value="1" />
</div>
</div>
<div class="sheet-panel-box">
<h5 data-i18n="import"></h5>
<p data-i18n="import-warning1"></p>
<p class="text-warning" data-i18n="import-warning2"></p>
<p class="text-warning" data-i18n="import-warning3"></p>
<textarea name="attr_forgesteel_json"></textarea>
<button type="action" name="act_import" data-i18n="import-player"></button>
<button type="action" name="act_importmonster" data-i18n="import-monster"></button>
</div>
</div>
<!-- Header End -->
</div>
<input type="hidden" class="npc-checkbox" name="attr_is_npc" />
<!-- Character Sheet Start -->
<div class="sheet-body">
<!-- Header Panel -->
<label data-i18n="initiative"></label><button type="roll" value="@{wtype} &amp;{template:simpleroll} {{rolltitle=1d10}} {{roll=[[ [[1d10]][1d10]]]}} {{name=Initiative}} {{charactername=@{character_name}}}" data-i18n-title="initiative-title" class="btn ui-draggable"></button>
<button class="startcombat-button" type="action" data-i18n-title="startcombat-title" name="act_startcombat" data-i18n="startcombat"></button>
<button class="endcombat-button" type="action" data-i18n-title="endcombat-title" name="act_endcombat" data-i18n="endcombat"></button>
<button class="respite-button" type="action" data-i18n-title="respite-title" name="act_respite" data-i18n="respite"></button>
<div class="sheet-panel header-panel">
<div class="sheet-panel-box profile-panel">
<div class="name-input-group">
<input type="text" name="attr_character_name" title="Macro: @{NAME|character_name}" />
<label class="sublabel" data-i18n="character-name"></label>
</div>
<div class="ancestry-input-group">
<input type="text" class="input-md" name="attr_ancestry" title="Macro: @{NAME|ancestry}" />
<label class="sublabel" data-i18n="ancestry"></label>
</div>
<div class="class-input-group">
<input type="text" class="input-md" name="attr_class" title="Macro: @{NAME|class}" />
<label class="sublabel" data-i18n="class"></label>
</div>
<div class="career-input-group">
<input type="text" class="input-md" name="attr_career" title="Macro: @{NAME|career}" />
<label class="sublabel" data-i18n="career"></label>
</div>
<div class="subclass-input-group">
<input type="text" class="input-md" name="attr_subclass" title="Macro: @{NAME|subclass}" />
<label class="sublabel" data-i18n="subclass"></label>
</div>
</div>
<div class="sheet-panel-box progress-panel">
<div class="victories-input-group">
<h5 data-i18n="victories"></h5>
<span name="attr_victories" class="victory-count" title="Macro: @{NAME|victories}"></span>
<div class="progressbox-group">
<input id="victories-checkbox-1" type="checkbox" value="1" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-1"></label>
<input id="victories-checkbox-2" type="checkbox" value="2" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-2"></label>
<input id="victories-checkbox-3" type="checkbox" value="3" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-3"></label>
<input id="victories-checkbox-4" type="checkbox" value="4" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-4"></label>
<input id="victories-checkbox-5" type="checkbox" value="5" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-5"></label>
<input id="victories-checkbox-6" type="checkbox" value="6" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-6"></label>
<input id="victories-checkbox-7" type="checkbox" value="7" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-7"></label>
<input id="victories-checkbox-8" type="checkbox" value="8" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-8"></label>
<input id="victories-checkbox-9" type="checkbox" value="9" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-9"></label>
<input id="victories-checkbox-10" type="checkbox" value="10" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-10"></label>
<input id="victories-checkbox-11" type="checkbox" value="11" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-11"></label>
<input id="victories-checkbox-12" type="checkbox" value="12" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-12"></label>
<input id="victories-checkbox-13" type="checkbox" value="13" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-13"></label>
<input id="victories-checkbox-14" type="checkbox" value="14" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-14"></label>
<input id="victories-checkbox-15" type="checkbox" value="15" name="attr_victories" />
<label class="progressbox" for="victories-checkbox-15"></label>
</div>
</div>
<div class="level-input-group">
<h5 data-i18n="level"></h5>
<input type="number" name="attr_level" title="Macro: @{NAME|level}" />
</div>
<div class="wealth-input-group">
<label data-i18n="wealth"></label>
<input type="number" class="input-md" name="attr_wealth" title="Macro: @{NAME|wealth}" />
</div>
<div class="renown-input-group">
<label data-i18n="renown"></label>
<input type="number" class="input-md" name="attr_renown" title="Macro: @{NAME|renown}" />
</div>
<div class="experience-input-group">
<label data-i18n="experience"></label>
<input type="number" class="input-md" name="attr_experience" title="Macro: @{NAME|experience}" />
</div>
</div>
</div>
<!-- Stats Panel -->
<div class="sheet-panel stats-panel minimizable">
<div class="minimize-control">
<input id="stats-minimize-checkbox" class="minimize" type="checkbox" name="attr_stats-minimize-checkbox" checked />
<label for="stats-minimize-checkbox" data-i18n="characteristics"></label>
</div>
<div class="stat-dashboard minimize-ignore">
<div class="dashboard-characteristics minimize-ignore">
<div class="dashboard-stat-group characteristic-input-group">
<label data-characteristic="might" data-i18n="might" data-i18n-title="characteristic-roll-tooltip">Might</label>
<input type="number" name="attr_might" title="Macro: @{NAME|might}" />
</div>
<div class="dashboard-stat-group characteristic-input-group">
<label data-characteristic="agility" data-i18n="agility" data-i18n-title="characteristic-roll-tooltip">Agility</label>
<input type="number" name="attr_agility" title="Macro: @{NAME|agilitiy}" />
</div>
<div class="dashboard-stat-group characteristic-input-group">
<label data-characteristic="reason" data-i18n="reason" data-i18n-title="characteristic-roll-tooltip">Reason</label>
<input type="number" name="attr_reason" title="Macro: @{NAME|reason}"/>
</div>
<div class="dashboard-stat-group characteristic-input-group">
<label data-characteristic="intuition" data-i18n="intuition" data-i18n-title="characteristic-roll-tooltip">Intuition</label>
<input type="number" name="attr_intuition" title="Macro: @{NAME|intuition}" />
</div>
<div class="dashboard-stat-group characteristic-input-group">
<label data-characteristic="presence" data-i18n="presence" data-i18n-title="characteristic-roll-tooltip">Presence</label>
<input type="number" name="attr_presence" title="Macro: @{NAME|presence}" />
</div>
</div>
<div class="dashboard-stamina minimize-ignore">
<div class="dashboard-stat-group">
<label data-i18n="stamina">Stamina</label>
<input type="number" name="attr_stamina" />
</div>
<div class="stamina-temporary-input-group">
<input type="number" class="input-md" name="attr_stamina_temporary" title="Macro: @{NAME|stamina_temporary}" />
<label class="sublabel" data-i18n="stamina-temporary">Temporary</label>
</div>
</div>
<div class="dashboard-recoveries minimize-ignore">
<div class="dashboard-stat-group recovery-input-group">
<label data-characteristic="recoveries" data-i18n="recoveries" data-i18n-title="recoveries-tooltip">Recoveries</label>
<input type="number" name="attr_recoveries" title="Macro: @{NAME|recoveries}" />
</div>
</div>
<div class="dashboard-resource minimize-ignore">
<div class="dashboard-stat-group resource-input-group">
<label data-characteristic="resource" data-i18n="resource" data-i18n-title="resource-tooltip">Heroic Resource</label>
<input type="number" name="attr_resource" title="Macro: @{NAME|resource}" />
</div>
</div>
<div class="dashboard-surges minimize-ignore">
<div class="dashboard-stat-group">
<label data-characteristic="surges" data-i18n="surges">Surges</label>
<div class="surges-input-group">
<label data-characteristic="surges-damage" data-i18n="surges-damage" data-i18n-title="surges-damage-tooltip">Damage</label>
<span class="pipe-separator">|</span>
<label data-characteristic="surges-potency" data-i18n="surges-potency" data-i18n-title="surges-potency-tooltip">Potency</label>
</div>
<input type="number" name="attr_surges" title="Macro: @{NAME|surges}" />
</div>
</div>
</div>
<!-- Movement -->
<div class="movement">
<div class="movement-input-group">
<input type="text" class="input-md" name="attr_size" title="Macro: @{NAME|size}" />
<label class="sublabel" data-i18n="size"></label>
</div>
<div class="movement-input-group">
<input type="number" class="input-md" name="attr_speed" title="Macro: @{NAME|speed}" />
<label class="sublabel" data-i18n="speed"></label>
</div>
<div class="movement-input-group">
<input type="number" class="input-md" name="attr_disengage" title="Macro: @{NAME|disengage}" />
<label class="sublabel" data-i18n="disengage"></label>
</div>
<div class="movement-input-group">
<input type="number" class="input-md" name="attr_stability" title="Macro: @{NAME|stability}" />
<label class="sublabel" data-i18n="stability"></label>
</div>
</div>
<!-- Stamina -->
<div class="stamina-panel">
<div class="stamina-temp-max-group">
<div>
<div class="stamina-winded-input-group minimize-ignore">
<label class="sublabel" data-i18n="winded"></label>
<div>
<span class="sublabel" name="attr_stamina_winded" title="Macro: @{NAME|stamina_winded}"></span>
</div>
</div>
<div class="stamina-dying-input-group minimize-ignore">
<label class="sublabel" data-i18n="dying"></label>
<div>
0 to <span class="sublabel" name="attr_stamina_dead" title="Macro: @{NAME|stamina_dead}"></span></div>
</div>
</div><div class="stamina-max-input-group">
<input type="number" class="input-stamina minimize-ignore" name="attr_stamina_max" title="Macro: @{NAME|stamina_max}">
<label class="sublabel minimize-ignore" data-i18n="stamina-max"></label>
</div>
</div>
</div>
<!-- Recoveries -->
<div class="recoveries-panel">
<div class="recovery-amount-input-group">
<input type="number" class="input-md" name="attr_recovery_amount" title="Macro: @{NAME|recovery_amount}" />
<label class="sublabel" data-i18n="recovery-amount"></label>
</div>
<div class="recoveries-max-input-group">
<input type="number" class="input-md" name="attr_recoveries_max" title="Macro: @{NAME|recoveries_max}" />
<label class="sublabel" data-i18n="recoveries-max"></label>
</div>
</div>
<!-- Heroic Resource Name -->
<div class="resource-panel">
<div class="resource-name-input-group">
<input type="text" class="input-md" name="attr_resource_name" data-i18n-placeholder="resource-name-placeholder" title="Macro: @{NAME|resource_name}" />
<label class="sublabel" for="attr_resource_amount" data-i18n="resource-amount">Amount</label><input type="text" id="attr_resource_amount" class="input-md" name="attr_resource_amount" placeholder="1d3" title="Macro: @{NAME|resource_amount}" />
</div>
</div>
<!-- Surges -->
<div class="surges-panel">
<label class="sublabel" data-i18n="one-surge"></label>
<span data-i18n="damage"></span>
<input type="number" class="input-md" name="attr_surge_damage" title="Macro: @{NAME|surge_damage}" />
<label class="sublabel" data-i18n="two-surges"></label>
<span data-i18n="potency-one"></span>
</div>
<!-- Growing Resource Fury/Null -->
<div class="growing-resource minimize-ignore">
<input type="checkbox" name="attr_has_growing_resource" /><label data-i18n="growing-resource-checkbox"></label>
<input type="hidden" name="attr_growingresource_show_2" />
<input type="hidden" name="attr_growingresource_show_4" />
<input type="hidden" name="attr_growingresource_show_6" />
<input type="hidden" name="attr_growingresource_show_8" />
<input type="hidden" name="attr_growingresource_show_10" />
<input type="hidden" name="attr_growingresource_show_12" />
<div class="growing-resource-selector-display">
<select class="growing-resource-selector" name="attr_growing_resource_type">
<option value="furyberserker" data-i18n="fury-berserker"></option>
<option value="furyreaver" data-i18n="fury-reaver"></option>
<option value="furystormwight" data-i18n="fury-stormwight"></option>
<option value="nullchronokinetic" data-i18n="null-chronokinetic"></option>
<option value="nullcryokinetic" data-i18n="null-cryokinetic"></option>
<option value="nullmetakinetic" data-i18n="null-metakinetic"></option>
</select>
<select class="stormwight-growing-resource-selector" name="attr_stormwight_growing_resource_type">
<option value="" selected></option>
<option value="boren" data-i18n="boren"></option>
<option value="corven" data-i18n="corven"></option>
<option value="raden" data-i18n="raden"></option>
<option value="vuken" data-i18n="vuken"></option>
</select>
</div>
<div class="growing-resource-display sheet-panel-box minimize-ignore">
<h5 class="panel-title" data-i18n="growing-resource"></h5>
<div class="berserker-growing-resource-display">
<div class="growing-resource-display-label">
<label><span data-i18n="ferocity"></span></label><label><span data-i18n="benefit"></span></label>
<label><span>2</span></label><label><span data-i18n="berserker-two-ben"></span></label>
<label><span>4</span></label><label><span data-i18n="berserker-four-ben"></span></label>
<label><span>6</span></label><label><span data-i18n="berserker-six-ben"></span></label>
<label><span data-i18n="eight-label"></span></label><label><span data-i18n="berserker-eight-ben"></span></label>
<label><span data-i18n="ten-label"></span></label><label><span data-i18n="berserker-ten-ben"></span></label>
<label><span data-i18n="twelve-label"></span></label><label><span data-i18n="berserker-twelve-ben"></span></label>
</div>
</div>
<div class="reaver-growing-resource-display">
<div class="growing-resource-display-label">
<label><span data-i18n="ferocity"></span></label><label><span data-i18n="benefit"></span></label>
<label><span>2</span></label><label><span data-i18n="reaver-two-ben"></span></label>
<label><span>4</span></label><label><span data-i18n="reaver-four-ben"></span></label>
<label><span>6</span></label><label><span data-i18n="reaver-six-ben"></span></label>
<label><span data-i18n="eight-label"></span></label><label><span data-i18n="reaver-eight-ben"></span></label>
<label><span data-i18n="ten-label"></span></label><label><span data-i18n="reaver-ten-ben"></span></label>
<label><span data-i18n="twelve-label"></span></label><label><span data-i18n="reaver-twelve-ben"></span></label>
</div>
</div>
<div class="boren-growing-resource-display">
<div class="growing-resource-display-label">
<label><span data-i18n="ferocity"></span></label><label><span data-i18n="benefit"></span></label>
<label><span>2</span></label><label><span data-i18n="boren-two-ben"></span></label>
<label><span>4</span></label><label><span data-i18n="boren-four-ben"></span></label>
<label><span>6</span></label><label><span data-i18n="boren-six-ben"></span></label>
<label><span data-i18n="eight-label"></span></label><label><span data-i18n="boren-eight-ben"></span></label>
<label><span data-i18n="ten-label"></span></label><label><span data-i18n="boren-ten-ben"></span></label>
<label><span data-i18n="twelve-label"></span></label><label><span data-i18n="boren-twelve-ben"></span></label>
</div>
</div>
<div class="corven-growing-resource-display">
<div class="growing-resource-display-label">
<label><span data-i18n="ferocity"></span></label><label><span data-i18n="benefit"></span></label>
<label><span>2</span></label><label><span data-i18n="corven-two-ben"></span></label>
<label><span>4</span></label><label><span data-i18n="corven-four-ben"></span></label>
<label><span>6</span></label><label><span data-i18n="corven-six-ben"></span></label>
<label><span data-i18n="eight-label"></span></label><label><span data-i18n="corven-eight-ben"></span></label>
<label><span data-i18n="ten-label"></span></label><label><span data-i18n="corven-ten-ben"></span></label>
<label><span data-i18n="twelve-label"></span></label><label><span data-i18n="corven-twelve-ben"></span></label>
</div>
</div>
<div class="raden-growing-resource-display">
<div class="growing-resource-display-label">
<label><span data-i18n="ferocity"></span></label><label><span data-i18n="benefit"></span></label>
<label><span>2</span></label><label><span data-i18n="raden-two-ben"></span></label>
<label><span>4</span></label><label><span data-i18n="raden-four-ben"></span></label>
<label><span>6</span></label><label><span data-i18n="raden-six-ben"></span></label>
<label><span data-i18n="eight-label"></span></label><label><span data-i18n="raden-eight-ben"></span></label>
<label><span data-i18n="ten-label"></span></label><label><span data-i18n="raden-ten-ben"></span></label>
<label><span data-i18n="twelve-label"></span></label><label><span data-i18n="raden-twelve-ben"></span></label>
</div>
</div>
<div class="vuken-growing-resource-display">
<div class="growing-resource-display-label">
<label><span data-i18n="ferocity"></span></label><label><span data-i18n="benefit"></span></label>
<label><span>2</span></label><label><span data-i18n="vuken-two-ben"></span></label>
<label><span>4</span></label><label><span data-i18n="vuken-four-ben"></span></label>
<label><span>6</span></label><label><span data-i18n="vuken-six-ben"></span></label>
<label><span data-i18n="eight-label"></span></label><label><span data-i18n="vuken-eight-ben"></span></label>
<label><span data-i18n="ten-label"></span></label><label><span data-i18n="vuken-ten-ben"></span></label>
<label><span data-i18n="twelve-label"></span></label><label><span data-i18n="vuken-twelve-ben"></span></label>
</div>
</div>
<div class="chronokinetic-growing-resource-display">
<div class="growing-resource-display-label">
<label><span data-i18n="discipline"></span></label><label><span data-i18n="benefit"></span></label>
<label><span>2</span></label><label><span data-i18n="chronokinetic-two-ben"></span></label>
<label><span>4</span></label><label><span data-i18n="chronokinetic-four-ben"></span></label>
<label><span>6</span></label><label><span data-i18n="chronokinetic-six-ben"></span></label>
<label><span data-i18n="eight-label"></span></label><label><span data-i18n="chronokinetic-eight-ben"></span></label>
<label><span data-i18n="ten-label"></span></label><label><span data-i18n="chronokinetic-ten-ben"></span></label>
<label><span data-i18n="twelve-label"></span></label><label><span data-i18n="chronokinetic-twelve-ben"></span></label>
</div>
</div>
<div class="cryokinetic-growing-resource-display">
<div class="growing-resource-display-label">
<label><span data-i18n="discipline"></span></label><label><span data-i18n="benefit"></span></label>
<label><span>2</span></label><label><span data-i18n="cryokinetic-two-ben"></span></label>
<label><span>4</span></label><label><span data-i18n="cryokinetic-four-ben"></span></label>
<label><span>6</span></label><label><span data-i18n="cryokinetic-six-ben"></span></label>
<label><span data-i18n="eight-label"></span></label><label><span data-i18n="cryokinetic-eight-ben"></span></label>
<label><span data-i18n="ten-label"></span></label><label><span data-i18n="cryokinetic-ten-ben"></span></label>
<label><span data-i18n="twelve-label"></span></label><label><span data-i18n="cryokinetic-twelve-ben"></span></label>
</div>
</div>
<div class="metakinetic-growing-resource-display">
<div class="growing-resource-display-label">
<label><span data-i18n="discipline"></span></label><label><span data-i18n="benefit"></span></label>
<label><span>2</span></label><label><span data-i18n="metakinetic-two-ben"></span></label>
<label><span>4</span></label><label><span data-i18n="metakinetic-four-ben"></span></label>
<label><span>6</span></label><label><span data-i18n="metakinetic-six-ben"></span></label>
<label><span data-i18n="eight-label"></span></label><label><span data-i18n="metakinetic-eight-ben"></span></label>
<label><span data-i18n="ten-label"></span></label><label><span data-i18n="metakinetic-ten-ben"></span></label>
<label><span data-i18n="twelve-label"></span></label><label><span data-i18n="metakinetic-twelve-ben"></span></label>
</div>
</div>
</div>
</div>
<!-- Potencies -->
<div class="potencies sheet-panel-box">
<h5 class="panel-title" data-i18n="potencies"></h5>
<div class="potency-input-group">
<label data-i18n="potency-strong"></label>
<input type="number" class="input-md" name="attr_potency_strong" title="Macro: @{NAME|potency_strong}" />
</div>
<div class="potency-input-group">
<label data-i18n="potency-average"></label>
<input type="number" class="input-md" name="attr_potency_average" title="Macro: @{NAME|potency_average}" />
</div>
<div class="potency-input-group">
<label data-i18n="potency-weak"></label>
<input type="number" class="input-md" name="attr_potency_weak" title="Macro: @{NAME|potency_weak}" />
</div>
</div>
<!-- Immunity and Weakness-->
<div class="damage-mod-panel sheet-panel-box">
<label><span data-i18n="immunity"></span></label>
<input type="text" class="input-md" name="attr_immunity" title="Macro: @{NAME|immunity}" />
<label><span data-i18n="weakness"></span></label>
<input type="text" class="input-md" name="attr_weakness" title="Macro: @{NAME|weakness}" />
</div>
<!-- Heroic Resource Description -->
<div class="resource-description-panel sheet-panel-box">
<textarea data-i18n-placeholder="resource-description-placeholder" name="attr_resource_description" title="Macro: @{NAME|resource_description}"></textarea>
</div>
<!-- Conditions -->
<div class="conditions-panel sheet-panel-box">
<h5 class="panel-title" data-i18n="conditions"></h5>
<fieldset class="repeating_conditions">
<input type="text" name="attr_condition_name" data-i18n-placeholder="condition" title="Macro: @{NAME|repeating_conditions_<id>_cocndition_name}" />
<div>
<input type="radio" name="attr_end" value="eot" title="Macro: @{NAME|repeating_conditions_<id>_end}" />
<label data-i18n="eot"></label>
</div>
<div>
<input type="radio" name="attr_end" value="save-ends" title="Macro: @{NAME|repeating_conditions_<id>_end}" />
<label data-i18n="save-ends"></label>
</div>
</fieldset>
<div class="savethrow-input-group">
<p data-i18n="save-ends-eq"></p>
<input type="text" class="input-md" name="attr_savethrow" data-i18n-placeholder="savethrow-placeholder" />
<p data-i18n="save-ends-desc"></p>
<label>1d10:</label><button type="roll" value="@{wtype} &amp;{template:simpleroll} {{rolltitle=1d10}} {{roll=[[ [[1d10]][1d10]]]}} {{name=Saving throw: rolling a @{savethrow} or higher removes effect}} {{charactername=@{character_name}}}" data-i18n-title="initiative-title" class="btn ui-draggable"></button>
</div>
<div class="bleed-dying-input-group">
<p data-i18n="bleeding-dying"></p>
<label data-i18n="d6-level"></label><button type="roll" value="@{wtype} &amp;{template:simpleroll} {{rolltitle=1d6+@{level}}} {{roll=[[1d6[1d6] + @{level}[level]]]}} {{name=Bleeding or Dying}} {{charactername=@{character_name}}}" data-i18n-title="bleeding-dying-title" class="btn ui-draggable"></button>
</div>
</div>
</div>
<!-- Biography Panel-->
<div class="sheet-panel biography-panel minimizable">
<div class="minimize-control">
<input id="biography-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="biography-minimize-checkbox" data-i18n="biography"></label>
</div>
<div class="sheet-panel-box career-panel">
<h5 class="panel-title" data-i18n="career"></h5>
<input type="text" name="attr_career" title="Macro: @{NAME|career}" />
<label class="sublabel" data-i18n="career-benefit"></label>
<textarea name="attr_career_benefit" spellcheck="false" title="Macro: @{NAME|career_benefit}" ></textarea>
<label class="sublabel" data-i18n="career-incident"></label>
<textarea name="attr_career_incident" spellcheck="false" title="Macro: @{NAME|career_incident}" ></textarea>
</div>
<div class="sheet-panel-box complication-panel">
<h5 class="panel-title" data-i18n="complication"></h5>
<input type="text" name="attr_complication" title="Macro: @{NAME|complication}" />
<label class="sublabel" data-i18n="complication-benefit"></label>
<textarea name="attr_complication_benefit" spellcheck="false" title="Macro: @{NAME|complication_benefit}" ></textarea>
<label class="sublabel" data-i18n="complication-drawback"></label>
<textarea name="attr_complication_drawback" spellcheck="false" title="Macro: @{NAME|complication_drawback}" ></textarea>
</div>
<div class="sheet-panel-box culture-panel">
<h5 class="panel-title" data-i18n="culture"></h5>
<label class="sublabel" data-i18n="culture-environment"></label>
<label class="sublabel" data-i18n="culture-organization"></label>
<label class="sublabel" data-i18n="culture-upbringing"></label>
<input type="text" name="attr_culture_environment" title="Macro: @{NAME|culture_environment}" />
<input type="text" name="attr_culture_organization" title="Macro: @{NAME|culture_organization}" />
<input type="text" name="attr_culture_upbringing" title="Macro: @{NAME|culture_upbringing}" />
<textarea name="attr_culture_environment_description" spellcheck="false" title="Macro: @{NAME|culture_environment_description}" ></textarea>
<textarea name="attr_culture_organization_description" spellcheck="false" title="Macro: @{NAME|culture_organization_description}" ></textarea>
<textarea name="attr_culture_upbringing_description" spellcheck="false" title="Macro: @{NAME|culture_upbringing_description}" ></textarea>
</div>
</div>
<!-- Skills and Languages Panel-->
<div class="sheet-panel skills-languages-panel minimizable">
<div class="minimize-control">
<input id="skills-languages-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="skills-languages-minimize-checkbox" data-i18n="skills-languages"></label>
</div>
<div class="skills-panel">
<h5 class="panel-title" data-i18n="skills"></h5>
<label data-i18n="crafting"></label>
<input type="text" name="attr_skills_crafting" title="Macro: @{NAME|skills_crafting}" />
<label data-i18n="exploration"></label>
<input type="text" name="attr_skills_exploration" title="Macro: @{NAME|skills_exploration}" />
<label data-i18n="interpersonal"></label>
<input type="text" name="attr_skills_interpersonal" title="Macro: @{NAME|skills_interpersonal}" />
<label data-i18n="intrigue"></label>
<input type="text" name="attr_skills_intrigue" title="Macro: @{NAME|skills_intrigue}" />
<label data-i18n="lore"></label>
<input type="text" name="attr_skills_lore" title="Macro: @{NAME|skills_lore}" />
</div>
<div class="languages-panel">
<h5 class="panel-title" data-i18n="languages"></h5>
<input type="text" data-i18n-placeholder="caelian" name="attr_languages" title="Macro: @{NAME|languages}" />
</div>
</div>
<!-- Features Panel-->
<div class="sheet-panel features-panel minimizable">
<div class="minimize-control">
<input id="features-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="features-minimize-checkbox" data-i18n="features"></label>
</div>
<!-- Class Features Panel -->
<div class="sheet-panel-box class-panel">
<h5 class="panel-title" data-i18n="class-features"></h5>
<fieldset class="repeating_classfeatures">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="feature-accordion card-edit">
<input type="text" name="attr_classfeature_name" title="Macro: @{NAME|repeating_classfeatures_<id>_classfeature_name}" />
<textarea name="attr_classfeature_description" title="Macro: @{NAME|repeating_classfeatures_<id>_classfeature_description}"></textarea>
</div>
<div class="feature-accordion">
<div class="class-feature-header">
<button class="feature-button" type="action" data-i18n-title="feature-share" name="act_classfeatureshare">
<!-- speech balloon -->
&#128172;
</button>
<label><span name="attr_classfeature_name"></span>:</label>
<span name="attr_classfeature_description"></span>
</div>
</div>
</fieldset>
</div>
<!-- Ancestry Features Panel -->
<div class="sheet-panel-box ancestry-panel">
<h5 class="panel-title" data-i18n="ancestry-traits"></h5>
<fieldset class="repeating_ancestrytraits">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="feature-accordion card-edit">
<input type="text" name="attr_ancestrytrait_name" title="Macro: @{NAME|repeating_ancestrytraits_<id>_ancestrytrait_name}"/>
<textarea name="attr_ancestrytrait_description" title="Macro: @{NAME|repeating_ancestrytraits_<id>_ancestrytrait_description}"></textarea>
</div>
<div class="feature-accordion">
<div class="anc-feature-header">
<button class="feature-button" type="action" data-i18n-title="feature-share" name="act_ancfeatureshare">
<!-- speech balloon -->
&#128172;
</button>
<label><span name="attr_ancestrytrait_name"></span>:</label>
<span name="attr_ancestrytrait_description"></span>
</div>
</div>
</fieldset>
</div>
<!-- Equipment and Modifiers Panel -->
<div class="sheet-panel-box modifiers-panel">
<div class="modifiers-title">
<h5 class="panel-title" data-i18n="equipment-modifiers"></h5>
<span data-i18n="kit"></span>
<label><input type="checkbox" name="attr_kit" /></label>
</div>
<div class="modifiers">
<div class="modifier-card">
<input type="text" class="modifier-name" data-i18n-placeholder="modifier-name" name="attr_modifier_name" />
<div class="kit-weapon-armor-group">
<div class="kit-weapon-input-group">
<input type="text" class="kit-weapon" name="attr_kit_weapon" />
<label class="sublabel" data-i18n="weapon-implement"></label>
</div>
<div class="kit-armor-input-group">
<input type="text" class="kit-armor" name="attr_kit_armor" />
<label class="sublabel" data-i18n="armor"></label>
</div>
</div>
<div class="kit-input-group">
<div class="kit-speed-group">
<input type="number" class="kit-speed" name="attr_kit_speed" value="0" />
<label class="sublabel" data-i18n="speed"></label>
</div>
<div class="kit-disengage-group">
<input type="number" class="kit-disengage" name="attr_kit_disengage" value="0" />
<label class="sublabel" data-i18n="disengage"></label>
</div>
<div class="kit-stamina-group">
<input type="number" class="kit-stamina" name="attr_kit_stamina" value="0" />
<label class="sublabel" data-i18n="stamina"></label>
</div>
<div class="kit-stability-group">
<input type="number" class="kit-stability" name="attr_kit_stability" value="0" />
<label class="sublabel" data-i18n="stability"></label>
</div>
<div class="kit-melee-distance-group">
<input type="number" class="kit-melee-distance" name="attr_kit_melee_distance" value="0" />
<label class="sublabel" data-i18n="melee-dist"></label>
</div>
<div class="kit-ranged-distance-group">
<input type="number" class="kit-ranged-distance" name="attr_kit_ranged_distance" value="0" />
<label class="sublabel" data-i18n="ranged-dist"></label>
</div>
</div>
<div class="kit-damage">
<div class="kit-melee-damage-group">
<label class="kit-damage-label" data-i18n="melee-weapon-damage"></label>
<div class="kit-melee-damage">
<div class="kit-melee-damage-1-input-group">
<input type="number" class="kit-melee-damage-1" name="attr_kit_melee_damage_1" value="0" />
<label class="sublabel">≤11</label>
</div>
<div class="kit-melee-damage-2-input-group">
<input type="number" class="kit-melee-damage-2" name="attr_kit_melee_damage_2" value="0" />
<label class="sublabel">12-16</label>
</div>
<div class="kit-melee-damage-3-input-group">
<input type="number" class="kit-melee-damage-3" name="attr_kit_melee_damage_3" value="0" />
<label class="sublabel">17+</label>
</div>
</div>
</div>
<div class="kit-ranged-damage-group">
<label class="kit-damage-label" data-i18n="ranged-weapon-damage"></label>
<div class="kit-ranged-damage">
<div class="kit-ranged-damage-1-input-group">
<input type="number" class="kit-ranged-damage-1" name="attr_kit_ranged_damage_1" value="0" />
<label class="sublabel">≤11</label>
</div>
<div class="kit-ranged-damage-2-input-group">
<input type="number" class="kit-ranged-damage-2" name="attr_kit_ranged_damage_2" value="0" />
<label class="sublabel">12-16</label>
</div>
<div class="kit-ranged-damage-3-input-group">
<input type="number" class="kit-ranged-damage-3" name="attr_kit_ranged_damage_3" value="0" />
<label class="sublabel">17+</label>
</div>
</div>
</div>
</div>
</div>
<div class="modifier-effect">
<label class="kit-damage-label" data-i18n="effect"></label>
<textarea name="attr_modifier_description"></textarea>
</div>
<div class="other-modifiers">
<div class="other-modifiers-forcemove-group">
<input type="number" class="other-modifiers-forcemove" name="attr_forcemove" value="0" />
<label class="sublabel" data-i18n="forcemove"></label>
</div>
<div class="other-modifiers-mag-psi-group">
<input type="number" class="other-modifiers-mag-psi" name="attr_mag_psi_dam" value="0" />
<label class="sublabel" data-i18n="mag-psi-dam"></label>
</div>
<div class="other-modifiers-fire-dam-group">
<input type="number" class="other-modifiers-fire-dam" name="attr_fire_dam" value="0" />
<label class="sublabel" data-i18n="fire-dam"></label>
</div>
<div class="other-modifiers-sanct-weap-group">
<input type="number" class="other-modifiers-sanct-weap" name="attr_sanct_weap" value="0" />
<label class="sublabel" data-i18n="sanct-weap"></label>
</div>
</div>
</div>
</div>
<!-- Perks Panel -->
<div class="sheet-panel-box perks-panel">
<h5 class="panel-title" data-i18n="perks"></h5>
<fieldset class="repeating_perks">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="feature-accordion card-edit">
<input type="text" name="attr_perk_name" />
<textarea name="attr_perk_description"></textarea>
</div>
<div class="feature-accordion">
<div class="perk-feature-header">
<button class="feature-button" type="action" data-i18n-title="feature-share" name="act_perkfeatureshare">
<!-- speech balloon -->
&#128172;
</button>
<label><span name="attr_perk_name"></span>:</label>
<span name="attr_perk_description"></span>
</div>
</div>
</fieldset>
</div>
<!-- Titles Panel -->
<div class="sheet-panel-box titles-panel">
<h5 class="panel-title" data-i18n="titles"></h5>
<fieldset class="repeating_titles">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="feature-accordion card-edit">
<input type="text" name="attr_title_name" />
<textarea name="attr_title_description"></textarea>
</div>
<div class="feature-accordion">
<div class="title-feature-header">
<button class="feature-button" type="action" data-i18n-title="feature-share" name="act_titlefeatureshare">
<!-- speech balloon -->
&#128172;
</button>
<label><span name="attr_title_name"></span>:</label>
<span name="attr_title_description"></span>
</div>
</div>
</fieldset>
</div>
</div>
<!-- Abilities Panel-->
<div class="sheet-panel abilities-panel minimizable">
<div class="minimize-control">
<input id="abilities-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="abilities-minimize-checkbox" data-i18n="abilities"></label>
</div>
<!-- Ability Type Tabs -->
<input type="hidden" class="sheet-tabstoggle" name="attr_abilitiesTab" value="action" />
<div class="abilities-buttons">
<button type="action" name="act_action" class="sheet-button-action" data-i18n="main-action"></button>
<button type="action" name="act_maneuver" class="sheet-button-maneuver" data-i18n="maneuver"></button>
<button type="action" name="act_triggered" class="sheet-button-triggered" data-i18n="triggered-action"></button>
<button type="action" name="act_noaction" class="sheet-button-noaction" data-i18n="no-action-trait"></button>
<button type="action" name="act_move" class="sheet-button-move" data-i18n="move-action"></button>
</div>
<!-- Main Action Abilities -->
<div class="sheet-action">
<!-- Main Actions: repeating_abilities -->
<h2 data-i18n="main-actions"></h2>
<fieldset class="repeating_abilities">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="ability-card card-edit">
<input type="text" class="ability-name" data-i18n-placeholder="ability-name" name="attr_ability_name" />
<select class="ability-subtype-selector" name="attr_ability_subtype">
<option value="normal-ability" selected data-i18n="normal-ability"></option>
<option value="signature-ability" data-i18n="signature-ability"></option>
<option value="heroic-ability" data-i18n="heroic-ability"></option>
</select>
<div class="ability-heroic-cost grid-span-full">
<label><span data-i18n="ability-cost"></span>:</label>
<input type="number" placeholder="3" name="attr_ability_cost" />
</div>
<div class="ability-details grid-span-full">
<input type="text" class="ability-description" data-i18n-placeholder="ability-description" name="attr_ability_description" />
<input type="text" class="npc-ability-keywords" data-i18n-placeholder="keywords" name="attr_ability_keywords" />
<select class="ability-type" name="attr_ability_type">
<option value="no-action" selected data-i18n="no-action"></option>
<option value="main-action" data-i18n="main-action"></option>
<option value="maneuver" data-i18n="maneuver"></option>
<option value="free-maneuver" data-i18n="free-maneuver"></option>
<option value="move-action" data-i18n="move-action"></option>
<option value="triggered-action" data-i18n="triggered-action"></option>
<option value="free-triggered-action" data-i18n="free-triggered-action"></option>
</select>
<input type="text" class="ability-distance" data-i18n-placeholder="distance" name="attr_ability_distance" />
<input type="text" class="ability-target" data-i18n-placeholder="target" name="attr_ability_target" />
<textarea class="ability-trigger triggered-show grid-span-full" data-i18n-placeholder="trigger" name="attr_ability_trigger" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<input type="checkbox" name="attr_has_power_roll" />
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_ability_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
<option value="reason" data-i18n="reason"></option>
<option value="intuition" data-i18n="intuition"></option>
<option value="presence" data-i18n="presence"></option>
</select>
<!-- <input type="checkbox" name="attr_has_potency" /> -->
<!-- <label data-i18n="potency"></label> -->
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_pre_effect" />
<label data-i18n="pre-effect"></label>
<textarea class="ability-pre-effect grid-span-full" data-i18n-placeholder="pre-effect" name="attr_ability_pre_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="tier-row tier-1">
<label class="sublabel">≤ 11</label>
<input type="text" class="power-roll-tier-effect" name="attr_ability_tier_1" />
<!-- <div class="potency-tier-1"> -->
<!-- <select class="ability-type" name="attr_potency_characteristic"> -->
<!-- <option value="" ></option> -->
<!-- <option value="M" data-i18n="M" selected></option> -->
<!-- <option value="A" data-i18n="A"></option> -->
<!-- <option value="R" data-i18n="R"></option> -->
<!-- <option value="I" data-i18n="I"></option> -->
<!-- <option value="P" data-i18n="P"></option> -->
<!-- </select> -->
<!-- &lt; [weak] -->
<!-- <input type="text" class="power-roll-tier-effect" name="attr_potency_tier_1" /> -->
<!-- </div> -->
</div>
<div class="tier-row tier-2">
<label class="sublabel">12-16</label>
<input type="text" class="power-roll-tier-effect" name="attr_ability_tier_2" />
<!-- <div class="potency-tier-2"> -->
<!-- <select class="ability-type" name="attr_potency_characteristic"> -->
<!-- <option value="" ></option> -->
<!-- <option value="M" data-i18n="M" selected></option> -->
<!-- <option value="A" data-i18n="A"></option> -->
<!-- <option value="R" data-i18n="R"></option> -->
<!-- <option value="I" data-i18n="I"></option> -->
<!-- <option value="P" data-i18n="P"></option> -->
<!-- </select> -->
<!-- &lt; [average] -->
<!-- <input type="text" class="power-roll-tier-effect" name="attr_potency_tier_2" /> -->
<!-- </div> -->
</div>
<div class="tier-row tier-3">
<label class="sublabel">17+</label>
<input type="text" class="power-roll-tier-effect" name="attr_ability_tier_3" />
<!-- <div class="potency-tier-3"> -->
<!-- <select class="ability-type" name="attr_potency_characteristic"> -->
<!-- <option value="" ></option> -->
<!-- <option value="M" data-i18n="M" selected></option> -->
<!-- <option value="A" data-i18n="A"></option> -->
<!-- <option value="R" data-i18n="R"></option> -->
<!-- <option value="I" data-i18n="I"></option> -->
<!-- <option value="P" data-i18n="P"></option> -->
<!-- </select> -->
<!-- &lt; [strong] -->
<!-- <input type="text" class="power-roll-tier-effect" name="attr_potency_tier_3" /> -->
<!-- </div> -->
</div>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_effect" />
<label data-i18n="effect"></label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="effect" name="attr_ability_effect" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_spend" />
<label data-i18n="spend"></label>
<div class="grid-span-full">
<label data-i18n="ability-cost"></label>
<input type="text" name="attr_ability_spend_cost" />
</div>
<textarea class="ability-malice" data-i18n-placeholder="spend" name="attr_ability_spend" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_custom" />
<label data-i18n="custom"></label>
<div class="grid-span-full">
<label data-i18n="label"></label>
<input type="text" data-i18n-placeholder="label" name="attr_ability_custom_label" />
</div>
<textarea class="ability-custom" data-i18n-placeholder="custom-text" name="attr_ability_custom" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button class="ability-share-button" type="action" data-i18n-title="ability-share" name="act_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_ability_name"></span>
<input id="ability-subtype-selector" type="hidden" name="attr_ability_subtype" />
<div class="ability-subtype heroic-show">
<span data-i18n="ability-cost"></span>:&nbsp;<span name="attr_ability_cost"></span>
</div>
<span class="ability-subtype subtype-hide" name="attr_ability_subtype" data-i18n-dynamic></span>
<div class="ability-details details-hide grid-span-full">
<span class="ability-description" name="attr_ability_description"></span>
<input type="hidden" name="attr_ability_type" value="main-action"/>
<span class="npc-ability-keywords" name="attr_ability_keywords"></span>
<div class="ability-type"><span name="attr_ability_type" data-i18n-dynamic></span></div>
<div class="ability-distance">&#128208;<span name="attr_ability_distance" ></span></div>
<div class="ability-target">&#127919;<span name="attr_ability_target" ></span></div>
<div class="ability-trigger grid-span-full">
<label><span data-i18n="trigger"></span>:</label>
<span name="attr_ability_trigger"></span>
</div>
</div>
<input type="hidden" name="attr_has_pre_effect" />
<div class="ability-pre-effect grid-span-full">
<label><span data-i18n="pre-effect"></span>:</label>
<span class="ability-pre-effect" name="attr_ability_pre_effect"></span>
</div>
<input type="hidden" name="attr_has_power_roll" />
<div class="power-roll">
<div class="power-roll-mods">
<button type="action" data-i18n-title="power-roll-share" name="act_power-roll-share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_ability_characteristic" ></span>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_ability_tier_1" ></span>
<label class="sublabel">12-16</label>
<span class="power-roll-tier-effect" name="attr_ability_tier_2" ></span>
<label class="sublabel">17+</label>
<span class="power-roll-tier-effect" name="attr_ability_tier_3" ></span>
</div>
<input type="hidden" name="attr_has_effect" />
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_ability_effect"></span>
</div>
<input type="hidden" name="attr_has_spend" />
<div class="npc-ability-malice grid-span-full">
<label><span data-i18n="spend"></span>&nbsp;<span name="attr_ability_spend_cost"></span>:</label>
<span class="ability-malice" name="attr_ability_spend"></span>
</div>
<input type="hidden" name="attr_has_custom" />
<div class="npc-ability-custom grid-span-full">
<label><span name="attr_ability_custom_label"></span>:</label>
<span class="ability-custom" name="attr_ability_custom"></span>
</div>
</div>
</fieldset>
<!-- Standard Abilities -->
<h5 class="panel-title" data-i18n="standard-main-actions"></h5>
<div class="standard-abilities">
<!-- Melee Free Strike Ability -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="melee-free-strike" name="attr_melee_free_strike_name" data-i18n="melee-free-strike" spellcheck="false"></textarea>
<div class="ability-details grid-span-full">
<textarea class="ability-effect" data-i18n-placeholder="melee-free-strike-keywords" name="attr_melee_free_strike_keywords" data-i18n="melee-free-strike-keywords" spellcheck="false"></textarea>
<input type="hidden" name="attr_melee_free_strike_type" value="main-action" />
<div class="ability-type">
<span data-i18n="main-action"></span>
</div>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="melee-one" name="attr_melee_free_strike_distance" data-i18n="melee-one" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="one-creature-object" name="attr_melee_free_strike_target" data-i18n="one-creature-object" spellcheck="false"></textarea>
<input type="hidden" name="attr_melee_free_strike_has_power_roll" value="on" />
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="power-roll-characteristic" name="attr_melee_free_strike_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
<option value="reason" data-i18n="reason"></option>
<option value="intuition" data-i18n="intuition"></option>
<option value="presence" data-i18n="presence"></option>
</select>
</div>
<label class="sublabel">≤11</label>
<textarea class="ability-effect" data-i18n-placeholder="melee-free-strike-tier1" name="attr_melee_free_strike_tier_1" data-i18n="melee-free-strike-tier1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect" data-i18n-placeholder="melee-free-strike-tier2" name="attr_melee_free_strike_tier_2" data-i18n="melee-free-strike-tier2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect" data-i18n-placeholder="melee-free-strike-tier3" name="attr_melee_free_strike_tier_3" data-i18n="melee-free-strike-tier3" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_melee_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_melee_free_strike_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_melee_free_strike_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<span class="ability-distance" name="attr_melee_free_strike_distance" ></span>
<span class="ability-target" name="attr_melee_free_strike_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_melee_free_strike_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_melee_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_melee_free_strike_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" name="attr_melee_free_strike_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" name="attr_melee_free_strike_tier_3" ></span>
</div>
</div>
</div>
</div>
<!-- Ranged Free Strike Ability -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="ranged-free-strike" name="attr_ranged_free_strike_name" data-i18n="ranged-free-strike" spellcheck="false"></textarea>
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="ranged-free-strike-keywords" name="attr_ranged_free_strike_keywords" data-i18n="ranged-free-strike-keywords" spellcheck="false"></textarea>
<input type="hidden" name="attr_ranged_free_strike_type" value="main-action" />
<div class="ability-type">
<span data-i18n="main-action"></span>
</div>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="ranged-five" name="attr_ranged_free_strike_distance" data-i18n="ranged-five" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="one-creature-object" name="attr_ranged_free_strike_target" data-i18n="one-creature-object" spellcheck="false"></textarea>
<input type="hidden" name="attr_ranged_free_strike_has_power_roll" value="on" />
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="power-roll-characteristic" name="attr_ranged_free_strike_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
<option value="reason" data-i18n="reason"></option>
<option value="intuition" data-i18n="intuition"></option>
<option value="presence" data-i18n="presence"></option>
</select>
</div>
<label class="sublabel">≤11</label>
<textarea class="ability-effect" data-i18n-placeholder="ranged-free-strike-tier1" name="attr_ranged_free_strike_tier_1" data-i18n="ranged-free-strike-tier1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect" data-i18n-placeholder="ranged-free-strike-tier2" name="attr_ranged_free_strike_tier_2" data-i18n="ranged-free-strike-tier2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect" data-i18n-placeholder="ranged-free-strike-tier3" name="attr_ranged_free_strike_tier_3" data-i18n="ranged-free-strike-tier3" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_ranged_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_ranged_free_strike_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_ranged_free_strike_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<span class="ability-distance" name="attr_ranged_free_strike_distance" ></span>
<span class="ability-target" name="attr_ranged_free_strike_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_ranged_free_strike_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_ranged_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_ranged_free_strike_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" name="attr_ranged_free_strike_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" name="attr_ranged_free_strike_tier_3" ></span>
</div>
</div>
</div>
</div>
<!-- Charge Main Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="charge" name="attr_charge_name" data-i18n="charge" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="charge-keywords" name="attr_charge_keywords" value="" />
<input type="hidden" name="attr_charge_type" value="Main Action" />
<textarea class="ability-effect grid-span-full" data-i18n="charge-effect" name="attr_charge_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_charge_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_charge_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_charge_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_charge_effect"></span>
</div>
</div>
</div>
</div>
<!-- Defend Main Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-name grid-span-full" data-i18n-placeholder="defend" name="attr_defend_name" data-i18n="defend" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="defend-keywords" name="attr_defend_keywords" value="" />
<input type="hidden" name="attr_defend_type" value="Main Action" />
<textarea class="ability-effect grid-span-full" data-i18n="defend-effect" name="attr_defend_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_defend_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_defend_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="defend" name="attr_defend_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_defend_effect"></span>
</div>
</div>
</div>
</div>
<!-- Heal Main Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="heal" name="attr_heal_name" data-i18n="heal" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="heal-keywords" name="attr_heal_keywords" value="" />
<input type="hidden" name="attr_heal_type" value="Main Action" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="melee-one" name="attr_heal_distance" data-i18n="melee-one" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="one-creature" name="attr_heal_target" data-i18n="one-creature" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="heal-effect" name="attr_heal_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_heal_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_heal_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_heal_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<span class="ability-distance read-ability-distance" name="attr_heal_distance" ></span>
<span class="ability-target read-ability-target" name="attr_heal_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_heal_effect"></span>
</div>
</div>
</div>
</div>
<!-- Convert Main Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="convert" name="attr_convert_name" data-i18n="convert" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="convert-keywords" name="attr_convert_keywords" value="" />
<input type="hidden" name="attr_convert_type" value="Main Action" />
<textarea class="ability-effect grid-span-full" data-i18n="convert-effect" name="attr_convert_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_convert_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_convert_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="convert" name="attr_convert_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_convert_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Maneuver Abilities -->
<div class="sheet-maneuver">
<!-- Maneuvers: repeating_maneuvers -->
<h2 data-i18n="maneuvers"></h2>
<fieldset class="repeating_maneuvers">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="ability-card card-edit">
<input type="text" class="ability-name" data-i18n-placeholder="ability-name" name="attr_maneuver_name" />
<select class="ability-subtype-selector" name="attr_maneuver_subtype">
<option value="normal-ability" selected data-i18n="normal-ability"></option>
<option value="signature-ability" data-i18n="signature-ability"></option>
<option value="heroic-ability" data-i18n="heroic-ability"></option>
</select>
<div class="ability-heroic-cost grid-span-full">
<label><span data-i18n="ability-cost"></span>:</label>
<input type="number" placeholder="3" name="attr_maneuver_cost" />
</div>
<div class="ability-details grid-span-full">
<input type="text" class="ability-description" data-i18n-placeholder="ability-description" name="attr_maneuver_description" />
<input type="text" class="npc-ability-keywords" data-i18n-placeholder="keywords" name="attr_maneuver_keywords" />
<select class="ability-type" name="attr_maneuver_type">
<option value="maneuver" data-i18n="maneuver" selected></option>
<option value="free-maneuver" data-i18n="free-maneuver"></option>
</select>
<input type="text" class="ability-distance" data-i18n-placeholder="distance" name="attr_maneuver_distance" />
<input type="text" class="ability-target" data-i18n-placeholder="target" name="attr_maneuver_target" />
<textarea class="ability-trigger triggered-show grid-span-full" data-i18n-placeholder="trigger" name="attr_maneuver_trigger" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<input type="checkbox" name="attr_has_power_roll" />
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_maneuver_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
<option value="reason" data-i18n="reason"></option>
<option value="intuition" data-i18n="intuition"></option>
<option value="presence" data-i18n="presence"></option>
</select>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_pre_effect" />
<label data-i18n="pre-effect"></label>
<textarea class="ability-pre-effect grid-span-full" data-i18n-placeholder="pre-effect" name="attr_maneuver_pre_effect" spellcheck="false"></textarea>
</div>
</div>
<label class="sublabel">≤ 11</label>
<input type="text" class="power-roll-tier-effect" name="attr_maneuver_tier_1" />
<label class="sublabel">12-16</label>
<input type="text" class="power-roll-tier-effect" name="attr_maneuver_tier_2" />
<label class="sublabel">17+</label>
<input type="text" class="power-roll-tier-effect" name="attr_maneuver_tier_3" />
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_effect" />
<label data-i18n="effect"></label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="effect" name="attr_maneuver_effect" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_spend" />
<label data-i18n="spend"></label>
<div class="grid-span-full">
<label data-i18n="ability-cost"></label>
<input type="text" name="attr_maneuver_spend_cost" />
</div>
<textarea class="ability-malice" data-i18n-placeholder="spend" name="attr_maneuver_spend" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_custom" />
<label data-i18n="custom"></label>
<div class="grid-span-full">
<label data-i18n="label"></label>
<input type="text" data-i18n-placeholder="label" name="attr_maneuver_custom_label" />
</div>
<textarea class="ability-custom" data-i18n-placeholder="custom-text" name="attr_maneuver_custom" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button class="ability-share-button" type="action" data-i18n-title="ability-share" name="act_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_maneuver_name"></span>
<input id="ability-subtype-selector" type="hidden" name="attr_maneuver_subtype" />
<div class="ability-subtype heroic-show">
<span data-i18n="ability-cost"></span>:&nbsp;<span name="attr_maneuver_cost"></span>
</div>
<span class="ability-subtype subtype-hide" name="attr_maneuver_subtype" data-i18n-dynamic></span>
<div class="ability-details details-hide grid-span-full">
<span class="ability-description" name="attr_maneuver_description"></span>
<input type="hidden" name="attr_maneuver_type" value="maneuver" />
<span class="npc-ability-keywords" name="attr_maneuver_keywords"></span>
<div class="ability-type"><span name="attr_maneuver_type" data-i18n-dynamic></span></div>
<div class="ability-distance">&#128208;<span name="attr_maneuver_distance" ></span></div>
<div class="ability-target">&#127919;<span name="attr_maneuver_target" ></span></div>
<div class="ability-trigger grid-span-full">
<label><span data-i18n="trigger"></span>:</label>
<span name="attr_maneuver_trigger"></span>
</div>
</div>
<input type="hidden" name="attr_has_pre_effect" />
<div class="ability-pre-effect grid-span-full">
<label><span data-i18n="pre-effect"></span>:</label>
<span class="ability-pre-effect" name="attr_maneuver_pre_effect"></span>
</div>
<input type="hidden" name="attr_has_power_roll" />
<div class="power-roll">
<div class="power-roll-mods">
<button type="action" data-i18n-title="power-roll-share" name="act_power-roll-share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_maneuver_characteristic" ></span>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_maneuver_tier_1" ></span>
<label class="sublabel">12-16</label>
<span class="power-roll-tier-effect" name="attr_maneuver_tier_2" ></span>
<label class="sublabel">17+</label>
<span class="power-roll-tier-effect" name="attr_maneuver_tier_3" ></span>
</div>
<input type="hidden" name="attr_has_effect" />
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_maneuver_effect"></span>
</div>
<input type="hidden" name="attr_has_spend" />
<div class="npc-ability-malice grid-span-full">
<label><span data-i18n="spend"></span>&nbsp;<span name="attr_maneuver_spend_cost"></span>:</label>
<span class="ability-malice" name="attr_maneuver_spend"></span>
</div>
<input type="hidden" name="attr_has_custom" />
<div class="npc-ability-custom grid-span-full">
<label><span name="attr_maneuver_custom_label"></span>:</label>
<span class="ability-custom" name="attr_maneuver_custom"></span>
</div>
</div>
</fieldset>
<!-- Standard Maneuvers -->
<h5 class="panel-title" data-i18n="standard-maneuvers"></h5>
<div class="standard-abilities">
<!-- Knockback -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_knockback_type" value="maneuver" />
<input type="hidden" name="attr_knockback_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="knockback" data-i18n="knockback" name="attr_knockback_name" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="keywords" data-i18n="knockback-keywords" name="attr_knockback_keywords" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" data-i18n="melee-one" name="attr_knockback_distance" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" data-i18n="one-creature" name="attr_knockback_target" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_knockback_characteristic">
<option value="might" data-i18n="might"></option>
<option value="intuition" data-i18n="intuition"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="knockback-tier1" data-i18n="knockback-tier1" name="attr_knockback_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="knockback-tier2" data-i18n="knockback-tier2" name="attr_knockback_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="knockback-tier3" data-i18n="knockback-tier3" name="attr_knockback_tier_3" spellcheck="false"></textarea>
</div>
<textarea class="ability-effect grid-span-full" data-i18n="knockback-effect" name="attr_knockback_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_knockback_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Knockback" name="attr_knockback_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="knockback-keywords" name="attr_knockback_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" data-i18n-placeholder="Distance" name="attr_knockback_distance" ></span>
<span class="ability-target" data-i18n-placeholder="Target" name="attr_knockback_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_knockback_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_knockback_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" data-i18n-placeholder="Tier 1 effect" name="attr_knockback_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" data-i18n-placeholder="Tier 2 effect" name="attr_knockback_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" data-i18n-placeholder="Tier 3 effect" name="attr_knockback_tier_3" ></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_knockback_effect"></span>
</div>
</div>
</div>
</div>
<!-- Grab -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_grab_type" value="maneuver" />
<input type="hidden" name="attr_grab_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="grab" data-i18n="grab" name="attr_grab_name" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="keywords" data-i18n="grab-keywords" name="attr_grab_keywords" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" data-i18n="melee-one" name="attr_grab_distance" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" data-i18n="one-creature" name="attr_grab_target" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_grab_characteristic">
<option value="might" data-i18n="might"></option>
<option value="intuition" data-i18n="intuition"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="grab-tier1" data-i18n="grab-tier1" name="attr_grab_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="grab-tier2" data-i18n="grab-tier2" name="attr_grab_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="grab-tier3" data-i18n="grab-tier3" name="attr_grab_tier_3" spellcheck="false"></textarea>
</div>
<textarea class="ability-effect grid-span-full" data-i18n="grab-effect" name="attr_grab_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="ability-card card-display">
<button type="action" data-i18n-title="ability-share" name="act_grab_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Grab" name="attr_grab_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="grab-keywords" name="attr_grab_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" data-i18n-placeholder="Distance" name="attr_grab_distance" ></span>
<span class="ability-target" data-i18n-placeholder="Target" name="attr_grab_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_grab_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_grab_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_grab_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" name="attr_grab_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" name="attr_grab_tier_3" ></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_grab_effect"></span>
</div>
</div>
</div>
</div>
<!-- Escape Grab -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_escape_grab_type" value="maneuver" />
<input type="hidden" name="attr_escape_grab_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="escape-grab" data-i18n="escape-grab" name="attr_escape_grab_name" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" data-i18n="self" name="attr_escape_grab_distance" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" data-i18n="self" name="attr_escape_grab_target" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_escape_grab_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="escape-grab-tier1" data-i18n="escape-grab-tier1" name="attr_escape_grab_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="escape-grab-tier2" data-i18n="escape-grab-tier2" name="attr_escape_grab_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="escape-grab-tier3" data-i18n="escape-grab-tier3" name="attr_escape_grab_tier_3" spellcheck="false"></textarea>
</div>
<textarea class="ability-effect grid-span-full" data-i18n="escape-grab-effect" name="attr_escape_grab_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_escape_grab_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Escape Grab" name="attr_escape_grab_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="escape-grab-keywords" name="attr_escape_grab_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" data-i18n-placeholder="Distance" name="attr_escape_grab_distance" ></span>
<span class="ability-target" data-i18n-placeholder="Target" name="attr_escape_grab_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_escape_grab_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_escape_grab_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" data-i18n-placeholder="Tier 1 effect" name="attr_escape_grab_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" data-i18n-placeholder="Tier 2 effect" name="attr_escape_grab_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" data-i18n-placeholder="Tier 3 effect" name="attr_escape_grab_tier_3" ></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_escape_grab_effect"></span>
</div>
</div>
</div>
</div>
<!-- Claw Dirt Maneuver -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_claw_dirt_type" value="maneuver" />
<input type="hidden" name="attr_claw_dirt_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="claw-dirt" data-i18n="claw-dirt" name="attr_claw_dirt_name" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" data-i18n="self" name="attr_claw_dirt_distance" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" data-i18n="self" name="attr_claw_dirt_target" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_claw_dirt_characteristic">
<option value="might" data-i18n="might"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="claw-dirt-tier1" data-i18n="claw-dirt-tier1" name="attr_claw_dirt_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="claw-dirt-tier2" data-i18n="claw-dirt-tier2" name="attr_claw_dirt_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="claw-dirt-tier3" data-i18n="claw-dirt-tier3" name="attr_claw_dirt_tier_3" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_claw_dirt_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_claw_dirt_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_claw_dirt_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_claw_dirt_distance" ></span>
<span class="ability-target" name="attr_claw_dirt_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_claw_dirt_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_claw_dirt_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_claw_dirt_tier_1" ></span>
<label class="sublabel">12-16</label>
<span class="power-roll-tier-effect" name="attr_claw_dirt_tier_2" ></span>
<label class="sublabel">17+</label>
<span class="power-roll-tier-effect" name="attr_claw_dirt_tier_3" ></span>
</div>
<span class="ability-effect grid-span-full" name="attr_claw_dirt_effect"></span>
</div>
</div>
</div>
<!-- Aid Attack -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="aid-attack" name="attr_aid_attack_name" data-i18n="aid-attack" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="heal-keywords" name="attr_aid_attack_keywords" value="" />
<input type="hidden" name="attr_aid_attack_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_aid_attack_distance" data-i18n="melee-one" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_aid_attack_target" data-i18n="one-enemy" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="aid-attack-effect" name="attr_aid_attack_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_aid_attack_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Aid Attack" name="attr_aid_attack_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="aid-attack-keywords" name="attr_aid_attack_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" data-i18n-placeholder="Distance" name="attr_aid_attack_distance" ></span>
<span class="ability-target" data-i18n-placeholder="Target" name="attr_aid_attack_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_aid_attack_effect"></span>
</div>
</div>
</div>
</div>
<!-- Catch Breath -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="catch-breath" name="attr_catch_breath_name" data-i18n="catch-breath" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="catch-breath-keywords" name="attr_catch_breath_keywords" value="" />
<input type="hidden" name="attr_catch_breath_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_catch_breath_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_catch_breath_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="catch-breath-effect" name="attr_catch_breath_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_catch_breath_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Catch Breath" name="attr_catch_breath_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_catch_breath_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_catch_breath_distance" ></span>
<span class="ability-target" name="attr_catch_breath_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_catch_breath_effect"></span>
</div>
</div>
</div>
</div>
<!-- Hide Maneuver -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="hide" name="attr_hide_name" data-i18n="hide" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="hide-keywords" name="attr_hide_keywords" value="" />
<input type="hidden" name="attr_hide_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_hide_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_hide_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="hide-effect" name="attr_hide_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_hide_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_hide_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_hide_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_hide_distance" ></span>
<span class="ability-target" name="attr_hide_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_hide_effect"></span>
</div>
</div>
</div>
</div>
<!-- Search Maneuver -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="search" name="attr_search_name" data-i18n="search" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="search-keywords" name="attr_search_keywords" value="" />
<input type="hidden" name="attr_search_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_search_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_search_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="search-effect" name="attr_search_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_search_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_search_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_search_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_search_distance" ></span>
<span class="ability-target" name="attr_search_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_search_effect"></span>
</div>
</div>
</div>
</div>
<!-- Stand Up -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="stand-up" name="attr_standup_name" data-i18n="stand-up" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="stand-up-keywords" name="attr_standup_keywords" value="" />
<input type="hidden" name="attr_standup_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_standup_distance" data-i18n="self-melee-one" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_standup_target" data-i18n="self-one-creature" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="stand-up-effect" name="attr_standup_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_standup_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_standup_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_standup_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_standup_distance" ></span>
<span class="ability-target" name="attr_standup_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_standup_effect"></span>
</div>
</div>
</div>
</div>
<!-- Use Consumable -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="consumable" name="attr_consumable_name" data-i18n="consumable" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="consumable-keywords" name="attr_consumable_keywords" value="" />
<input type="hidden" name="attr_consumable_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_consumable_distance" data-i18n="self-melee-one" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_consumable_target" data-i18n="self-one-creature" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="consumable-effect" name="attr_consumable_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_consumable_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_consumable_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_consumable_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_consumable_distance" ></span>
<span class="ability-target" name="attr_consumable_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_consumable_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Triggered Abilities-->
<div class="sheet-triggered">
<h2 data-i18n="triggered"></h2>
<!-- Triggered: repeating_triggered -->
<fieldset class="repeating_triggered">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="ability-card card-edit">
<input type="text" class="ability-name" data-i18n-placeholder="ability-name" name="attr_triggered_name" />
<select class="ability-subtype-selector" name="attr_triggered_subtype">
<option value="normal-ability" selected data-i18n="normal-ability"></option>
<option value="signature-ability" data-i18n="signature-ability"></option>
<option value="heroic-ability" data-i18n="heroic-ability"></option>
</select>
<div class="ability-heroic-cost grid-span-full">
<label><span data-i18n="ability-cost"></span>:</label>
<input type="number" placeholder="3" name="attr_triggered_cost" />
</div>
<div class="ability-details grid-span-full">
<input type="text" class="ability-description" data-i18n-placeholder="ability-description" name="attr_triggered_description" />
<input type="text" class="npc-ability-keywords" data-i18n-placeholder="keywords" name="attr_triggered_keywords" />
<select class="ability-type" name="attr_triggered_type">
<option value="triggered-action" data-i18n="triggered-action" selected></option>
<option value="free-triggered-action" data-i18n="free-triggered-action"></option>
</select>
<input type="text" class="ability-distance" data-i18n-placeholder="distance" name="attr_triggered_distance" />
<input type="text" class="ability-target" data-i18n-placeholder="target" name="attr_triggered_target" />
<textarea class="ability-trigger triggered-show grid-span-full" data-i18n-placeholder="trigger" name="attr_triggered_trigger" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<input type="checkbox" name="attr_has_power_roll" />
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_triggered_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
<option value="reason" data-i18n="reason"></option>
<option value="intuition" data-i18n="intuition"></option>
<option value="presence" data-i18n="presence"></option>
</select>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_pre_effect" />
<label data-i18n="pre-effect"></label>
<textarea class="ability-pre-effect grid-span-full" data-i18n-placeholder="pre-effect" name="attr_triggered_pre_effect" spellcheck="false"></textarea>
</div>
</div>
<label class="sublabel">≤ 11</label>
<input type="text" class="power-roll-tier-effect" name="attr_triggered_tier_1" />
<label class="sublabel">12-16</label>
<input type="text" class="power-roll-tier-effect" name="attr_triggered_tier_2" />
<label class="sublabel">17+</label>
<input type="text" class="power-roll-tier-effect" name="attr_triggered_tier_3" />
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_effect" />
<label data-i18n="effect"></label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="effect" name="attr_triggered_effect" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_spend" />
<label data-i18n="spend"></label>
<div class="grid-span-full">
<label data-i18n="ability-cost"></label>
<input type="text" name="attr_triggered_spend_cost" />
</div>
<textarea class="ability-malice" data-i18n-placeholder="spend" name="attr_triggered_spend" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_custom" />
<label data-i18n="custom"></label>
<div class="grid-span-full">
<label data-i18n="label"></label>
<input type="text" data-i18n-placeholder="label" name="attr_triggered_custom_label" />
</div>
<textarea class="ability-custom" data-i18n-placeholder="custom-text" name="attr_triggered_custom" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button class="ability-share-button" type="action" data-i18n-title="ability-share" name="act_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_triggered_name"></span>
<input id="ability-subtype-selector" type="hidden" name="attr_triggered_subtype" />
<div class="ability-subtype heroic-show">
<span data-i18n="ability-cost"></span>:&nbsp;<span name="attr_triggered_cost"></span>
</div>
<span class="ability-subtype subtype-hide" name="attr_triggered_subtype" data-i18n-dynamic></span>
<div class="ability-details details-hide grid-span-full">
<span class="ability-description" name="attr_triggered_description"></span>
<input type="hidden" name="attr_triggered_type" value="triggered-action" />
<span class="npc-ability-keywords" name="attr_triggered_keywords"></span>
<div class="ability-type"><span name="attr_triggered_type" data-i18n-dynamic></span></div>
<div class="ability-distance">&#128208;<span name="attr_triggered_distance" ></span></div>
<div class="ability-target">&#127919;<span name="attr_triggered_target" ></span></div>
<div class="ability-trigger grid-span-full">
<label><span data-i18n="trigger"></span>:</label>
<span name="attr_triggered_trigger"></span>
</div>
</div>
<input type="hidden" name="attr_has_pre_effect" />
<div class="ability-pre-effect grid-span-full">
<label><span data-i18n="pre-effect"></span>:</label>
<span class="ability-pre-effect" name="attr_triggered_pre_effect"></span>
</div>
<input type="hidden" name="attr_has_power_roll" />
<div class="power-roll">
<div class="power-roll-mods">
<button type="action" data-i18n-title="power-roll-share" name="act_power-roll-share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_triggered_characteristic" ></span>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_triggered_tier_1" ></span>
<label class="sublabel">12-16</label>
<span class="power-roll-tier-effect" name="attr_triggered_tier_2" ></span>
<label class="sublabel">17+</label>
<span class="power-roll-tier-effect" name="attr_triggered_tier_3" ></span>
</div>
<input type="hidden" name="attr_has_effect" />
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_triggered_effect"></span>
</div>
<input type="hidden" name="attr_has_spend" />
<div class="npc-ability-malice grid-span-full">
<label><span data-i18n="spend"></span>&nbsp;<span name="attr_triggered_spend_cost"></span>:</label>
<span class="ability-malice" name="attr_triggered_spend"></span>
</div>
<input type="hidden" name="attr_has_custom" />
<div class="npc-ability-custom grid-span-full">
<label><span name="attr_triggered_custom_label"></span>:</label>
<span class="ability-custom" name="attr_triggered_custom"></span>
</div>
</div>
</fieldset>
<!-- Standard Triggered Abilities -->
<h5 class="panel-title" data-i18n="standard-triggers"></h5>
<div class="standard-abilities">
<!-- Opportunity Attack -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="opportunity-attack" data-i18n="opportunity-attack" name="attr_opportunity_attack_name" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="opportunity-attack-keywords" name="attr_opportunity_attack_keywords" value="" />
<input type="hidden" name="attr_opportunity_attack_type" value="free-triggered-action" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="trigger" data-i18n="opportunity-attack-trigger" name="attr_opportunity_attack_trigger" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="effect" data-i18n="opportunity-attack-effect" name="attr_opportunity_attack_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_opportunity_attack_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Opportunity Attack" name="attr_opportunity_attack_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="Opportunity Attack" name="attr_opportunity_attack_keywords"></span>
<span class="ability-type" data-i18n="free-triggered-action"></span>
<div class="ability-trigger grid-span-full">
<label><span data-i18n="trigger"></span>:</label>
<span class="ability-trigger" name="attr_opportunity_attack_trigger"></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_opportunity_attack_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- No-Actions Abilities -->
<div class="sheet-noaction">
<h2 data-i18n="no-action-trait"></h2>
<!-- No Actions/Traits: repeating_noaction -->
<fieldset class="repeating_noaction">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="ability-card card-edit">
<input type="text" class="ability-name" data-i18n-placeholder="ability-name" name="attr_noaction_name" />
<select class="ability-subtype-selector" name="attr_noaction_subtype">
<option value="normal-ability" selected data-i18n="normal-ability"></option>
<option value="signature-ability" data-i18n="signature-ability"></option>
<option value="heroic-ability" data-i18n="heroic-ability"></option>
</select>
<div class="ability-heroic-cost grid-span-full">
<label><span data-i18n="ability-cost"></span>:</label>
<input type="number" placeholder="3" name="attr_noaction_cost" />
</div>
<div class="ability-details grid-span-full">
<input type="text" class="ability-description" data-i18n-placeholder="ability-description" name="attr_noaction_description" />
<input type="text" class="npc-ability-keywords" data-i18n-placeholder="keywords" name="attr_noaction_keywords" />
<select class="ability-type" name="attr_ability_type">
<option value="no-action" selected data-i18n="no-action"></option>
</select>
<input type="text" class="ability-distance" data-i18n-placeholder="distance" name="attr_noaction_distance" />
<input type="text" class="ability-target" data-i18n-placeholder="target" name="attr_noaction_target" />
<textarea class="ability-trigger triggered-show grid-span-full" data-i18n-placeholder="trigger" name="attr_noaction_trigger" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<input type="checkbox" name="attr_has_power_roll" />
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_noaction_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
<option value="reason" data-i18n="reason"></option>
<option value="intuition" data-i18n="intuition"></option>
<option value="presence" data-i18n="presence"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<input type="text" class="power-roll-tier-effect" name="attr_noaction_tier_1" />
<label class="sublabel">12-16</label>
<input type="text" class="power-roll-tier-effect" name="attr_noaction_tier_2" />
<label class="sublabel">17+</label>
<input type="text" class="power-roll-tier-effect" name="attr_noaction_tier_3" />
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_effect" />
<label data-i18n="effect"></label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="effect" name="attr_noaction_effect" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_spend" />
<label data-i18n="spend"></label>
<div class="grid-span-full">
<label data-i18n="ability-cost"></label>
<input type="text" name="attr_noaction_spend_cost" />
</div>
<textarea class="ability-malice" data-i18n-placeholder="spend" name="attr_noaction_spend" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_custom" />
<label data-i18n="custom"></label>
<div class="grid-span-full">
<label data-i18n="label"></label>
<input type="text" data-i18n-placeholder="label" name="attr_noaction_custom_label" />
</div>
<textarea class="ability-custom" data-i18n-placeholder="custom-text" name="attr_noaction_custom" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button class="ability-share-button" type="action" data-i18n-title="ability-share" name="act_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_noaction_name"></span>
<input id="ability-subtype-selector" type="hidden" name="attr_noaction_subtype" />
<div class="ability-subtype heroic-show">
<span data-i18n="ability-cost"></span>:&nbsp;<span name="attr_noaction_cost"></span>
</div>
<span class="ability-subtype subtype-hide" name="attr_noaction_subtype" data-i18n-dynamic></span>
<div class="ability-details details-hide grid-span-full">
<span class="ability-description" name="attr_noaction_description"></span>
<input type="hidden" name="attr_noaction_type" value="no-action" />
<span class="npc-ability-keywords" name="attr_noaction_keywords"></span>
<div class="ability-type"><span name="attr_noaction_type" data-i18n-dynamic></span></div>
<div class="ability-distance">&#128208;<span name="attr_noaction_distance" ></span></div>
<div class="ability-target">&#127919;<span name="attr_noaction_target" ></span></div>
<div class="ability-trigger grid-span-full">
<label><span data-i18n="trigger"></span>:</label>
<span name="attr_noaction_trigger"></span>
</div>
</div>
<input type="hidden" name="attr_has_power_roll" />
<div class="power-roll">
<div class="power-roll-mods">
<button type="action" data-i18n-title="power-roll-share" name="act_power-roll-share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_noaction_characteristic" ></span>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_noaction_tier_1" ></span>
<label class="sublabel">12-16</label>
<span class="power-roll-tier-effect" name="attr_noaction_tier_2" ></span>
<label class="sublabel">17+</label>
<span class="power-roll-tier-effect" name="attr_noaction_tier_3" ></span>
</div>
<input type="hidden" name="attr_has_effect" />
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_noaction_effect"></span>
</div>
<input type="hidden" name="attr_has_spend" />
<div class="npc-ability-malice grid-span-full">
<label><span data-i18n="spend"></span>&nbsp;<span name="attr_noaction_spend_cost"></span>:</label>
<span class="ability-malice" name="attr_noaction_spend"></span>
</div>
<input type="hidden" name="attr_has_custom" />
<div class="npc-ability-custom grid-span-full">
<label><span name="attr_noaction_custom_label"></span>:</label>
<span class="ability-custom" name="attr_noaction_custom"></span>
</div>
</div>
</fieldset>
<!-- Standard Abilities -->
<h5 class="panel-title" data-i18n="standard-noaction-trait"></h5>
<div class="standard-abilities">
<!-- Jump Move -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_jump_type" value="no-action" />
<input type="hidden" name="attr_jump_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="jump" data-i18n="jump" name="attr_jump_name" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_jump_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="jump-tier1" data-i18n="jump-tier1" name="attr_jump_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="jump-tier2" data-i18n="jump-tier2" name="attr_jump_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="jump-tier3" data-i18n="jump-tier3" name="attr_jump_tier_3" spellcheck="false"></textarea>
</div>
<textarea class="ability-effect grid-span-full" data-i18n="jump-effect" name="attr_jump_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_jump_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_jump_name"></span>
<div class="ability-details grid-span-full">
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_jump_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_jump_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_jump_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" name="attr_jump_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" name="attr_jump_tier_3" ></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_jump_effect"></span>
</div>
</div>
</div>
</div>
<!-- Climb Creature Maneuver -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_climb_creature_type" value="no-action" />
<input type="hidden" name="attr_climb_creature_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="climb-creature" data-i18n="climb-creature" name="attr_climb_creature_name" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_climb_creature_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="climb-creature-tier1" data-i18n="climb-creature-tier1" name="attr_climb_creature_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="climb-creature-tier2" data-i18n="climb-creature-tier2" name="attr_climb_creature_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="climb-creature-tier3" data-i18n="climb-creature-tier3" name="attr_climb_creature_tier_3" spellcheck="false"></textarea>
</div>
<textarea class="ability-effect grid-span-full" data-i18n="climb-creature-effect" name="attr_climb_creature_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_climb_creature_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_climb_creature_name"></span>
<div class="ability-details grid-span-full">
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_climb_creature_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_climb_creature_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_climb_creature_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" name="attr_climb_creature_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" name="attr_climb_creature_tier_3" ></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_climb_creature_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Move Abilities -->
<div class="sheet-move">
<h2 data-i18n="move-actions"></h2>
<!-- Moves: repeating_moves -->
<fieldset class="repeating_moves">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="ability-card card-edit">
<input type="text" class="ability-name" data-i18n-placeholder="ability-name" name="attr_moves_name" />
<select class="ability-subtype-selector" name="attr_moves_subtype">
<option value="normal-ability" selected data-i18n="normal-ability"></option>
<option value="signature-ability" data-i18n="signature-ability"></option>
<option value="heroic-ability" data-i18n="heroic-ability"></option>
</select>
<div class="ability-heroic-cost grid-span-full">
<label><span data-i18n="ability-cost"></span>:</label>
<input type="number" placeholder="3" name="attr_moves_cost" />
</div>
<div class="ability-details grid-span-full">
<input type="text" class="ability-description" data-i18n-placeholder="ability-description" name="attr_moves_description" />
<input type="text" class="npc-ability-keywords" data-i18n-placeholder="keywords" name="attr_moves_keywords" />
<input type="hidden" name="attr_moves_type" value="move-action" />
<span class="ability-type" data-i18n="move-action"></span>
<input type="text" class="ability-distance" data-i18n-placeholder="distance" name="attr_moves_distance" />
<input type="text" class="ability-target" data-i18n-placeholder="target" name="attr_moves_target" />
<textarea class="ability-trigger triggered-show grid-span-full" data-i18n-placeholder="trigger" name="attr_moves_trigger" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<input type="checkbox" name="attr_has_power_roll" />
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_moves_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
<option value="reason" data-i18n="reason"></option>
<option value="intuition" data-i18n="intuition"></option>
<option value="presence" data-i18n="presence"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<input type="text" class="power-roll-tier-effect" name="attr_moves_tier_1" />
<label class="sublabel">12-16</label>
<input type="text" class="power-roll-tier-effect" name="attr_moves_tier_2" />
<label class="sublabel">17+</label>
<input type="text" class="power-roll-tier-effect" name="attr_moves_tier_3" />
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_effect" />
<label data-i18n="effect"></label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="effect" name="attr_moves_effect" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_spend" />
<label data-i18n="spend"></label>
<div class="grid-span-full">
<label data-i18n="ability-cost"></label>
<input type="text" name="attr_moves_spend_cost" />
</div>
<textarea class="ability-malice" data-i18n-placeholder="spend" name="attr_moves_spend" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_custom" />
<label data-i18n="custom"></label>
<div class="grid-span-full">
<label data-i18n="label"></label>
<input type="text" data-i18n-placeholder="label" name="attr_moves_custom_label" />
</div>
<textarea class="ability-custom" data-i18n-placeholder="custom-text" name="attr_moves_custom" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button class="ability-share-button" type="action" data-i18n-title="ability-share" name="act_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_moves_name"></span>
<input id="ability-subtype-selector" type="hidden" name="attr_moves_subtype" />
<div class="ability-subtype heroic-show">
<span data-i18n="ability-cost"></span>:&nbsp;<span name="attr_moves_cost"></span>
</div>
<span class="ability-subtype subtype-hide" name="attr_moves_subtype" data-i18n-dynamic></span>
<div class="ability-details details-hide grid-span-full">
<span class="ability-description" name="attr_moves_description"></span>
<input type="hidden" name="attr_moves_type" value="move-action" />
<span class="npc-ability-keywords" name="attr_moves_keywords"></span>
<div class="ability-type"><span name="attr_moves_type" data-i18n-dynamic></span></div>
<div class="ability-distance">&#128208;<span name="attr_moves_distance" ></span></div>
<div class="ability-target">&#127919;<span name="attr_moves_target" ></span></div>
<div class="ability-trigger grid-span-full">
<label><span data-i18n="trigger"></span>:</label>
<span name="attr_moves_trigger"></span>
</div>
</div>
<input type="hidden" name="attr_has_power_roll" />
<div class="power-roll">
<div class="power-roll-mods">
<button type="action" data-i18n-title="power-roll-share" name="act_power-roll-share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_moves_characteristic" ></span>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_moves_tier_1" ></span>
<label class="sublabel">12-16</label>
<span class="power-roll-tier-effect" name="attr_moves_tier_2" ></span>
<label class="sublabel">17+</label>
<span class="power-roll-tier-effect" name="attr_moves_tier_3" ></span>
</div>
<input type="hidden" name="attr_has_effect" />
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_moves_effect"></span>
</div>
<input type="hidden" name="attr_has_spend" />
<div class="npc-ability-malice grid-span-full">
<label><span data-i18n="spend"></span>&nbsp;<span name="attr_moves_spend_cost"></span>:</label>
<span class="ability-malice" name="attr_moves_spend"></span>
</div>
<input type="hidden" name="attr_has_custom" />
<div class="npc-ability-custom grid-span-full">
<label><span name="attr_moves_custom_label"></span>:</label>
<span class="ability-custom" name="attr_moves_custom"></span>
</div>
</div>
</fieldset>
<!-- Standard Moves -->
<h5 class="panel-title" data-i18n="standard-move-actions"></h5>
<div class="standard-abilities">
<!-- Advance Move Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="advance" name="attr_advance_name" data-i18n="advance" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="advance-keywords" name="attr_advance_keywords" value="" />
<input type="hidden" name="attr_advance_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_advance_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_advance_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="advance-effect" name="attr_advance_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_advance_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_advance_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_advance_keywords"></span>
<span class="ability-type" data-i18n="move-action"></span>
<span class="ability-distance" name="attr_advance_distance" ></span>
<span class="ability-target" name="attr_advance_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_advance_effect"></span>
</div>
</div>
</div>
</div>
<!--Disengage Move Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="disengage" name="attr_disengage_name" data-i18n="disengage" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="disengage-keywords" name="attr_disengage_keywords" value="" />
<input type="hidden" name="attr_disengage_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_disengage_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_disengage_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="disengage-effect" name="attr_disengage_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_disengage_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_disengage_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords read-ability-keywords" name="attr_disengage_keywords"></span>
<span class="ability-type" data-i18n="move-action"></span>
<span class="ability-distance" name="attr_disengage_distance" ></span>
<span class="ability-target" name="attr_disengage_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_disengage_effect"></span>
</div>
</div>
</div>
</div>
<!-- Ride Move Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="ride" name="attr_ride_name" data-i18n="ride" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="ride-keywords" name="attr_ride_keywords" value="" />
<input type="hidden" name="attr_ride_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_ride_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_ride_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="ride-effect" name="attr_ride_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_ride_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_ride_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_ride_keywords"></span>
<span class="ability-type" data-i18n="move-action"></span>
<span class="ability-distance" name="attr_ride_distance" ></span>
<span class="ability-target" name="attr_ride_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_ride_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Inventory Panel -->
<div class="sheet-panel inventory-panel minimizable">
<div class="minimize-control">
<input id="inventory-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="inventory-minimize-checkbox" data-i18n="inventory"></label>
</div>
<!-- Trinkets -->
<div class="sheet-panel-box trinket-panel">
<h5 class="panel-title" data-i18n="trinkets"></h5>
<fieldset class="repeating_trinkets">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="feature-accordion card-edit">
<input type="text" name="attr_trinket_name" />
<textarea name="attr_trinket_description"></textarea>
</div>
<div class="feature-accordion">
<div class="trinket-header">
<label><span name="attr_trinket_name"></span>:</label>
<span name="attr_trinket_description"></span>
</div>
</div>
</fieldset>
</div>
<!-- Consumables -->
<div class="sheet-panel-box consumable-panel">
<h5 class="panel-title" data-i18n="consumables"></h5>
<fieldset class="repeating_consumables">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="feature-accordion card-edit">
<input type="text" name="attr_consumable_name" />
<textarea name="attr_consumable_description"></textarea>
</div>
<div class="feature-accordion">
<div class="consumable-header">
<label><span name="attr_consumable_name"></span>:</label>
<span name="attr_consumable_description"></span>
</div>
</div>
</fieldset>
</div>
<!-- Leveled Treasures -->
<div class="sheet-panel-box level-treasure-panel">
<h5 class="panel-title" data-i18n="level-treasure"></h5>
<div class="carry-checks">
<span class="carry-label" data-i18n="carry-three-safely">carry three safely:</span>
<label><input type="checkbox" name="attr_carry_1" /></label>
<label><input type="checkbox" name="attr_carry_2" /></label>
<label><input type="checkbox" name="attr_carry_3" /></label>
</div>
<fieldset class="repeating_leveltreasure">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="feature-accordion card-edit">
<input type="text" name="attr_leveltreasure_name" />
<textarea name="attr_leveltreasure_description"></textarea>
</div>
<div class="feature-accordion">
<div class="leveltreasure-header">
<label><span name="attr_leveltreasure_name"></span>:</label>
<span name="attr_leveltreasure_description"></span>
</div>
</div>
</fieldset>
</div>
</div>
<!-- Projects Panel -->
<div class="sheet-panel projects-panel minimizable">
<div class="minimize-control">
<input id="projects-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="projects-minimize-checkbox" data-i18n="projects"></label>
</div>
<fieldset class="repeating_projects">
<input type="text" data-i18n-placeholder="project-name" name="attr_project_name" />
<input type="text" data-i18n-placeholder="assigned-hero-follower" name="attr_project_assigned" />
<input type="text" data-i18n-placeholder="characteristic" name="attr_project_characteristic" />
<div class="project-goal-input-group">
<input type="number" name="attr_project_goal" />
/
<input type="number" name="attr_project_goal_max" />
</div>
</fieldset>
</div>
<!-- Notes Panel -->
<div class="sheet-panel notes-panel minimizable">
<div class="minimize-control">
<input id="notes-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="notes-minimize-checkbox" data-i18n="notes"></label>
</div>
<textarea name="attr_notes_description"></textarea>
</div>
</div>
<!-- NPC Sheet View -->
<div class="npc-sheet-body">
<!-- Director Screen-->
<div class="sheet-panel director-screen-panel minimizable">
<div class="minimize-control">
<input id="director-screen-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="director-screen-minimize-checkbox" data-i18n="director-screen"></label>
</div>
<div class="sheet-panel-box director-screen-sub-panel minimizable-conditions">
<div class="minimize-control-conditions">
<input id="director-screen-conditions-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="director-screen-conditions-minimize-checkbox" data-i18n="conditions"></label>
</div>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="conditions-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="bleeding"></span>
<span class="director-screen-sub-desc" data-i18n="bleeding-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="dazed"></span>
<span class="director-screen-sub-desc" data-i18n="dazed-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="frightened"></span>
<span class="director-screen-sub-desc" data-i18n="frightened-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="grabbed"></span>
<span class="director-screen-sub-desc" data-i18n="grabbed-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="prone"></span>
<span class="director-screen-sub-desc" data-i18n="prone-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="restrained"></span>
<span class="director-screen-sub-desc" data-i18n="restrained-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="slowed"></span>
<span class="director-screen-sub-desc" data-i18n="slowed-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="taunted"></span>
<span class="director-screen-sub-desc" data-i18n="taunted-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="weakened"></span>
<span class="director-screen-sub-desc" data-i18n="weakened-desc"></span>
</h5>
</div>
<div class="sheet-panel-box director-screen-sub-panel minimizable-basics">
<div class="minimize-control-basics">
<input id="director-screen-basics-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="director-screen-basics-minimize-checkbox" data-i18n="basics"></label>
</div>
<h5 class="panel-title">
<span data-i18n="characteristics-scores"></span>
<span class="director-screen-sub-desc" data-i18n="characteristics-scores-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="natural-19-20"></span>
<span class="director-screen-sub-desc" data-i18n="natural-19-20-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="power-roll-director"></span>
<span class="director-screen-sub-desc" data-i18n="power-roll-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="recovery"></span>
<span class="director-screen-sub-desc" data-i18n="recovery-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="respites"></span>
<span class="director-screen-sub-desc" data-i18n="respites-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="skill"></span>
<span class="director-screen-sub-desc" data-i18n="skill-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="victories-director"></span>
<span class="director-screen-sub-desc" data-i18n="victories-desc"></span>
</h5>
<h3 class="panel-title" data-i18n="edges-and-banes"></h3>
<h5 class="panel-title">
<span data-i18n="edge-director"></span>
<span class="director-screen-sub-desc" data-i18n="edge-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="double-edge-director"></span>
<span class="director-screen-sub-desc" data-i18n="double-edge-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="bane-director"></span>
<span class="director-screen-sub-desc" data-i18n="bane-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="double-bane-director"></span>
<span class="director-screen-sub-desc" data-i18n="double-bane-desc"></span>
</h5>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="edges-and-banes-desc"></span>
</h5>
<h3 class="panel-title" data-i18n="hero-tokens"></h3>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="hero-tokens-desc"></span>
</h5>
</div>
<div class="sheet-panel-box director-screen-sub-panel minimizable-combat">
<div class="minimize-control-combat">
<input id="director-screen-combat-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="director-screen-combat-minimize-checkbox" data-i18n="combat"></label>
</div>
<h5 class="panel-title">
<span data-i18n="combat-turn"></span>
<span class="director-screen-sub-desc" data-i18n="combat-turn-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="triggered-action-director"></span>
<span class="director-screen-sub-desc" data-i18n="triggered-action-desc"></span>
</h5>
<h3 class="panel-title" data-i18n="main-actions"></h3>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="main-actions-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="charge-director"></span>
<span class="director-screen-sub-desc" data-i18n="charge-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="defend-director"></span>
<span class="director-screen-sub-desc" data-i18n="defend-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="free-strike-director"></span>
<span class="director-screen-sub-desc" data-i18n="free-strike-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="heal-director"></span>
<span class="director-screen-sub-desc" data-i18n="heal-desc"></span>
</h5>
<h3 class="panel-title" data-i18n="move-actions"></h3>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="move-actions-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="advance-director"></span>
<span class="director-screen-sub-desc" data-i18n="advance-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="disengage-director"></span>
<span class="director-screen-sub-desc" data-i18n="disengage-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="ride-director"></span>
<span class="director-screen-sub-desc" data-i18n="ride-desc"></span>
</h5>
<h3 class="panel-title" data-i18n="maneuvers"></h3>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="maneuvers-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="aid-attack-director"></span>
<span class="director-screen-sub-desc" data-i18n="aid-attack-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="catch-breath-director"></span>
<span class="director-screen-sub-desc" data-i18n="catch-breath-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="escape-grab-director"></span>
<span class="director-screen-sub-desc" data-i18n="escape-grab-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="grab-director"></span>
<span class="director-screen-sub-desc" data-i18n="grab-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="hide-director"></span>
<span class="director-screen-sub-desc" data-i18n="hide-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="knockback-director"></span>
<span class="director-screen-sub-desc" data-i18n="knockback-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="stand-up-director"></span>
<span class="director-screen-sub-desc" data-i18n="stand-up-desc"></span>
</h5>
<h3 class="panel-title" data-i18n="combat-glossary"></h3>
<h5 class="panel-title">
<span data-i18n="critical-hit-director"></span>
<span class="director-screen-sub-desc" data-i18n="critical-hit-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="concealment"></span>
<span class="director-screen-sub-desc" data-i18n="concealment-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="cover"></span>
<span class="director-screen-sub-desc" data-i18n="cover-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="damage-immunity"></span>
<span class="director-screen-sub-desc" data-i18n="damage-immunity-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="damage-weakness"></span>
<span class="director-screen-sub-desc" data-i18n="damage-weakness-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="dying-director"></span>
<span class="director-screen-sub-desc" data-i18n="dying-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="eot-director"></span>
<span class="director-screen-sub-desc" data-i18n="eot-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="flanking"></span>
<span class="director-screen-sub-desc" data-i18n="flanking-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="high-ground"></span>
<span class="director-screen-sub-desc" data-i18n="high-ground-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="line-of-effect"></span>
<span class="director-screen-sub-desc" data-i18n="line-of-effect-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="opportunity-attack-director"></span>
<span class="director-screen-sub-desc" data-i18n="opportunity-attack-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="saving-throws"></span>
<span class="director-screen-sub-desc" data-i18n="saving-throws-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="stamina-director"></span>
<span class="director-screen-sub-desc" data-i18n="stamina-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="surges-director"></span>
<span class="director-screen-sub-desc" data-i18n="surges-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="winded-director"></span>
<span class="director-screen-sub-desc" data-i18n="winded-desc"></span>
</h5>
<h3 class="panel-title" data-i18n="size-and-space"></h3>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="size-and-space-desc"></span>
</h5>
</div>
<div class="sheet-panel-box director-screen-sub-panel minimizable-movement">
<div class="minimize-control-movement">
<input id="director-screen-movement-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="director-screen-movement-minimize-checkbox" data-i18n="movement"></label>
</div>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="movement-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="climb"></span>
<span class="director-screen-sub-desc" data-i18n="climb-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="crawl"></span>
<span class="director-screen-sub-desc" data-i18n="crawl-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="difficult-terrain"></span>
<span class="director-screen-sub-desc" data-i18n="difficult-terrain-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="jump-director"></span>
<span class="director-screen-sub-desc" data-i18n="jump-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="teleport"></span>
<span class="director-screen-sub-desc" data-i18n="teleport-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="shifting"></span>
<span class="director-screen-sub-desc" data-i18n="shifting-desc"></span>
</h5>
<h3 class="panel-title" data-i18n="forced-movement"></h3>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="forced-movement-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="push-x"></span>
<span class="director-screen-sub-desc" data-i18n="push-x-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="pull-x"></span>
<span class="director-screen-sub-desc" data-i18n="pull-x-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="slide-x"></span>
<span class="director-screen-sub-desc" data-i18n="slide-x-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="vertical"></span>
<span class="director-screen-sub-desc" data-i18n="vertical-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="big-vs-little"></span>
<span class="director-screen-sub-desc" data-i18n="big-vs-little-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="breaking-objects"></span>
<span class="director-screen-sub-desc" data-i18n="breaking-objects-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="slamming-into-creatures"></span>
<span class="director-screen-sub-desc" data-i18n="slamming-into-creatures-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="slamming-into-objects"></span>
<span class="director-screen-sub-desc" data-i18n="slamming-into-objects-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="stability-director"></span>
<span class="director-screen-sub-desc" data-i18n="stability-desc"></span>
</h5>
</div>
<div class="sheet-panel-box director-screen-sub-panel minimizable-areas-of-effect">
<div class="minimize-control-areas-of-effect">
<input id="director-screen-areas-of-effect-minimize-checkbox" class="minimize" type="checkbox" checked />
<label for="director-screen-areas-of-effect-minimize-checkbox" data-i18n="areas-of-effect"></label>
</div>
<h5 class="panel-title">
<span class="director-screen-sub-desc" data-i18n="areas-of-effect-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="aura"></span>
<span class="director-screen-sub-desc" data-i18n="aura-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="burst"></span>
<span class="director-screen-sub-desc" data-i18n="burst-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="cube"></span>
<span class="director-screen-sub-desc" data-i18n="cube-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="line"></span>
<span class="director-screen-sub-desc" data-i18n="line-desc"></span>
</h5>
<h5 class="panel-title">
<span data-i18n="wall-director"></span>
<span class="director-screen-sub-desc" data-i18n="wall-desc"></span>
</h5>
</div>
</div>
<label class="npc-edit-icon" for="npc-edit-toggle">p</label><input class="npc-edit-toggle" type="checkbox" id="npc-edit-toggle" />
<!-- NPC Edit Form -->
<div class="npc-edit">
<div class="npc-edit-group npc-edit-text">
<label data-i18n="character-name" for="attr_character_name"></label>
<input type="text" id="attr_character_name" name="attr_character_name" />
<label data-i18n="level" for="attr_level"></label>
<input type="text" id="attr_level" name="attr_level" />
<label data-i18n="npc-role" for="attr_npc_role"></label>
<input type="text" id="attr_npc_role" name="attr_npc_role" />
<label data-i18n="keywords" for="attr_npc_keywords"></label>
<input type="text" id="attr_npc_keywords" name="attr_npc_keywords" />
<label data-i18n="encounter-value-abbr" for="attr_npc_EV"></label>
<input type="text" id="attr_npc_EV" name="attr_npc_EV" />
</div>
<div class="npc-edit-group npc-edit-stats">
<label data-i18n="size" for="attr_size"></label>
<input type="text" id="attr_size" name="attr_size" />
<label data-i18n="speed" for="attr_speed"></label>
<input type="number" id="attr_speed" name="attr_speed" />
<label data-i18n="stamina" for="attr_stamina"></label>
<input type="number" id="attr_stamina" name="attr_stamina" />
<label data-i18n="stability" for="attr_stability"></label>
<input type="number" id="attr_stability" name="attr_stability" />
<label data-i18n="free-strike" for="attr_npc_freestrike"></label>
<input type="number" id="attr_npc_freestrike" name="attr_npc_freestrike" />
</div>
<div class="npc-edit-group npc-edit-text">
<label data-i18n="immunity" for="attr_immunity"></label>
<input type="text" id="attr_immunity" name="attr_immunity" />
<label data-i18n="weakness" for="attr_weakness"></label>
<input type="text" id="attr_weakness" name="attr_weakness" />
<label data-i18n="movement" for="attr_npc_movement"></label>
<input type="text" id="attr_npc_movement" name="attr_npc_movement" />
<label data-i18n="with-captain" for="attr_npc_with_captain"></label>
<input type="text" id="attr_npc_with_captain" name="attr_npc_with_captain" />
</div>
<div class="npc-edit-group npc-edit-stats">
<label data-i18n="might" for="attr_might"></label>
<input type="number" id="attr_might" name="attr_might" />
<label data-i18n="agility" for="attr_agility"></label>
<input type="number" id="attr_agility" name="attr_agility" />
<label data-i18n="reason" for="attr_reason"></label>
<input type="number" id="attr_reason" name="attr_reason" />
<label data-i18n="intuition" for="attr_intuition"></label>
<input type="number" id="attr_intuition" name="attr_intuition" />
<label data-i18n="presence" for="attr_presence"></label>
<input type="number" id="attr_presence" name="attr_presence" />
</div>
</div>
<!-- NPC Display -->
<div class="npc-display">
<div class="npc-header-panel npc-panel">
<div class="npc-name"><span name="attr_character_name"></span></div>
<div class="npc-level"><span data-i18n="level"></span>&nbsp;<span name="attr_level"></span>&nbsp;<span name="attr_npc_role"></span></div>
<div><span name="attr_npc_keywords"></span></div>
<div><span data-i18n="encounter-value-abbr"></span>&nbsp;<span name="attr_npc_EV"></span></div>
</div>
<div class="npc-stats-panel npc-panel">
<div class="npc-stat">
<span name="attr_size"></span>
<label class="sublabel" data-i18n="size"></label>
</div>
<div class="npc-stat">
<span name="attr_speed"></span>
<label class="sublabel" data-i18n="speed"></label>
</div>
<div class="npc-stat">
<span name="attr_stamina"></span>
<label class="sublabel" data-i18n="stamina"></label>
</div>
<div class="npc-stat">
<span name="attr_stability"></span>
<label class="sublabel" data-i18n="stability"></label>
</div>
<div class="npc-stat">
<span name="attr_npc_freestrike"></span>
<label class="sublabel" data-i18n="free-strike"></label>
</div>
</div>
<div class="npc-skills-panel npc-panel" >
<div>
<label data-i18n="immunity"></label>:
<span name="attr_immunity"></span>
</div>
<div>
<label data-i18n="weakness"></label>:
<span name="attr_weakness"></span>
</div>
<div>
<label data-i18n="movement"></label>:
<span name="attr_npc_movement"></span>
</div>
<div>
<label data-i18n="with-captain"></label>:
<span name="attr_npc_with_captain"></span>
</div>
</div>
<div class="npc-marip-panel npc-panel">
<div class="npc-characteristic-input-group">
<label data-characteristic="might" data-i18n="might"></label>
<span name="attr_might"></span>
</div>
<div class="npc-characteristic-input-group">
<label data-characteristic="agility" data-i18n="agility"></label>
<span name="attr_agility"></span>
</div>
<div class="npc-characteristic-input-group">
<label data-characteristic="reason" data-i18n="reason"></label>
<span name="attr_reason"></span>
</div>
<div class="npc-characteristic-input-group">
<label data-characteristic="intuition" data-i18n="intuition"></label>
<span name="attr_intuition"></span>
</div>
<div class="npc-characteristic-input-group">
<label data-characteristic="presence" data-i18n="presence"></label>
<span name="attr_presence"></span>
</div>
</div>
</div>
<div class="npc-conditions npc-panel">
<h5 class="panel-title" data-i18n="conditions"></h5>
<fieldset class="repeating_conditions">
<input type="text" name="attr_condition_name" data-i18n-placeholder="condition" />
<div>
<input type="radio" name="attr_end" value="eot" />
<label data-i18n="eot"></label>
</div>
<div>
<input type="radio" name="attr_end" value="save-ends" />
<label data-i18n="save-ends"></label>
</div>
</fieldset>
<div class="savethrow-input-group">
<p data-i18n="save-ends-eq"></p>
<p>6</p>
<p data-i18n="save-ends-desc"></p>
<label>1d10:</label><button type="roll" value="@{wtype} &amp;{template:simpleroll} {{rolltitle=1d10}} {{roll=[[ [[1d10]][1d10]]]}} {{name=Saving throw: rolling a @{savethrow} or higher removes effect}} {{charactername=@{character_name}}}" data-i18n-title="initiative-title" class="btn ui-draggable"></button>
</div>
<div class="bleed-dying-input-group">
<p data-i18n="bleeding-dying"></p>
<label data-i18n="d6-level"></label><button type="roll" value="@{wtype} &amp;{template:simpleroll} {{rolltitle=1d6+@{level}}} {{roll=[[1d6[1d6] + @{level}[level]]]}} {{name=Bleeding or Dying}} {{charactername=@{character_name}}}" data-i18n-title="bleeding-dying-title" class="btn ui-draggable"></button>
</div>
</div>
<!-- NPC Abilities -->
<div class="npc-abilities-panel">
<fieldset class="repeating_npcabilities">
<input class="ability-edit" type="checkbox" id="ability-edit" />
<div class="ability-card card-edit">
<input type="text" class="ability-name" data-i18n-placeholder="ability-name" name="attr_ability_name" />
<select class="ability-subtype-selector" name="attr_ability_subtype">
<option value="normal-ability" selected data-i18n="normal-ability"></option>
<option value="signature-ability" data-i18n="signature-ability"></option>
<option value="villain-ability" data-i18n="villain-ability"></option>
<option value="solo-monster" data-i18n="solo-monster"></option>
<option value="trait" data-i18n="trait"></option>
<option value="malice-ability" data-i18n="malice-ability"></option>
<option value="malice-trait" data-i18n="malice-trait"></option>
</select>
<div class="npc-ability-solo-monster grid-span-full">
<label><span data-i18n="solo-monster-entry-title"></span>&nbsp;1</label>
<input type="text" name="attr_ability_solo_1_name" />
<textarea class="grid-span-full" data-i18n-placeholder="solo-monster-entry-text" name="attr_ability_solo_1_text" spellcheck="false"></textarea>
<label><span data-i18n="solo-monster-entry-title"></span>&nbsp;2</label>
<input type="text" name="attr_ability_solo_2_name" />
<textarea class="grid-span-full" data-i18n-placeholder="solo-monster-entry-text" name="attr_ability_solo_2_text" spellcheck="false"></textarea>
</div>
<div class="npc-ability-malice-cost grid-span-full">
<label><span data-i18n="malice-cost"></span>:</label>
<input type="number" placeholder="3" name="attr_ability_malice_cost" />
</div>
<textarea class="npc-ability-trait grid-span-full" data-i18n-placeholder="trait" name="attr_ability_trait"></textarea>
<div class="ability-details grid-span-full">
<input type="text" class="npc-ability-keywords" data-i18n-placeholder="keywords" name="attr_ability_keywords" />
<select class="ability-type" name="attr_ability_type">
<option value="no-action" selected data-i18n="no-action"></option>
<option value="main-action" data-i18n="main-action"></option>
<option value="maneuver" data-i18n="maneuver"></option>
<option value="free-maneuver" data-i18n="free-maneuver"></option>
<option value="move-action" data-i18n="move-action"></option>
<option value="triggered-action" data-i18n="triggered-action"></option>
<option value="free-triggered-action" data-i18n="free-triggered-action"></option>
</select>
<input type="text" class="ability-distance" data-i18n-placeholder="distance" name="attr_ability_distance" />
<input type="text" class="ability-target" data-i18n-placeholder="target" name="attr_ability_target" />
<textarea class="ability-trigger triggered-show grid-span-full" data-i18n-placeholder="trigger" name="attr_ability_trigger" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<input type="checkbox" name="attr_has_power_roll" />
<label data-i18n="power-roll"></label>
<span>+</span>
<input type="text" class="power-roll-characteristic" name="attr_ability_characteristic" />
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_pre_effect" />
<label data-i18n="pre-effect"></label>
<textarea class="ability-pre-effect grid-span-full" data-i18n-placeholder="pre-effect" name="attr_ability_pre_effect" spellcheck="false"></textarea>
</div>
</div>
<label class="sublabel">≤ 11</label>
<input type="text" class="power-roll-tier-effect" name="attr_ability_tier_1" />
<label class="sublabel">12-16</label>
<input type="text" class="power-roll-tier-effect" name="attr_ability_tier_2" />
<label class="sublabel">17+</label>
<input type="text" class="power-roll-tier-effect" name="attr_ability_tier_3" />
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_effect" />
<label data-i18n="effect"></label>
<textarea class="ability-effect" data-i18n-placeholder="effect" name="attr_ability_effect" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_special" />
<label data-i18n="special"></label>
<textarea class="ability-special" data-i18n-placeholder="special" name="attr_ability_special" spellcheck="false"></textarea>
</div>
<div class="ability-toggle-group">
<input type="checkbox" name="attr_has_malice" />
<label data-i18n="malice"></label>
<div class="grid-span-full">
<label data-i18n="malice-cost"></label>
<input type="text" name="attr_ability_cost" />
</div>
<textarea class="ability-malice" data-i18n-placeholder="malice" name="attr_ability_malice" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button class="ability-share-button" type="action" data-i18n-title="ability-share" name="act_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_ability_name"></span>
<input id="ability-subtype-selector" type="hidden" name="attr_ability_subtype" />
<div class="ability-subtype malice-show">
<span name="attr_ability_malice_cost"></span>&nbsp;<span data-i18n="malice"></span>
</div>
<span class="ability-subtype subtype-hide" name="attr_ability_subtype" data-i18n-dynamic></span>
<span class="trait-show grid-span-full" name="attr_ability_trait"></span>
<div class="solo-monster-show grid-span-full">
<div>
<label><span name="attr_ability_solo_1_name"></span>:</label><span name="attr_ability_solo_1_text"></span>
</div>
<div>
<label><span name="attr_ability_solo_2_name"></span>:</label><span name="attr_ability_solo_2_text"></span>
</div>
</div>
<div class="ability-details details-hide grid-span-full">
<input type="hidden" name="attr_ability_type" />
<span class="npc-ability-keywords" name="attr_ability_keywords"></span>
<div class="ability-type"><span name="attr_ability_type" data-i18n-dynamic></span></div>
<div class="ability-distance">&#128208;<span name="attr_ability_distance" ></span></div>
<div class="ability-target">&#127919;<span name="attr_ability_target" ></span></div>
<div class="ability-trigger grid-span-full">
<label><span data-i18n="trigger"></span>:</label>
<span name="attr_ability_trigger"></span>
</div>
</div>
<input type="hidden" name="attr_has_pre_effect" />
<div class="ability-pre-effect grid-span-full">
<label data-i18n="pre-effect"></label>:
<span class="ability-pre-effect" name="attr_ability_pre_effect"></span>
</div>
<input type="hidden" name="attr_has_power_roll" />
<div class="power-roll">
<div class="power-roll-mods">
<button type="action" data-i18n-title="power-roll-share" name="act_power-roll-share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" name="attr_ability_characteristic" ></span>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_ability_tier_1" ></span>
<label class="sublabel">12-16</label>
<span class="power-roll-tier-effect" name="attr_ability_tier_2" ></span>
<label class="sublabel">17+</label>
<span class="power-roll-tier-effect" name="attr_ability_tier_3" ></span>
</div>
<input type="hidden" name="attr_has_special" />
<div class="npc-ability-special grid-span-full">
<label data-i18n="special"></label>:
<span class="ability-special" name="attr_ability_special"></span>
</div>
<input type="hidden" name="attr_has_effect" />
<div class="ability-effect grid-span-full">
<label data-i18n="effect"></label>:
<span class="ability-effect" name="attr_ability_effect"></span>
</div>
<input type="hidden" name="attr_has_malice" />
<div class="npc-ability-malice grid-span-full">
<label><span name="attr_ability_cost"></span>&nbsp;<span data-i18n="malice"></span>:</label>
<span class="ability-malice" name="attr_ability_malice"></span>
</div>
</div>
</fieldset>
<!-- Standard NPC Ability Type Tabs -->
<h5 class="panel-title" data-i18n="standard-abilities"></h5>
<input type="hidden" class="sheet-tabstoggle" name="attr_abilitiesTab" value="action" />
<div class="abilities-buttons">
<button type="action" name="act_action" class="sheet-button-action" data-i18n="main-action"></button>
<button type="action" name="act_maneuver" class="sheet-button-maneuver" data-i18n="maneuver"></button>
<button type="action" name="act_triggered" class="sheet-button-triggered" data-i18n="triggered-action"></button>
<button type="action" name="act_noaction" class="sheet-button-noaction" data-i18n="no-action-trait"></button>
<button type="action" name="act_move" class="sheet-button-move" data-i18n="move-action"></button>
</div>
<div class="sheet-action">
<h2 data-i18n="standard-main-actions"></h2>
<!-- Standard Abilities -->
<div class="standard-abilities">
<!-- Free Strike Main Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" name="attr_freestrike_name" data-i18n="free-strike" />
<input type="hidden" name="attr_freestrike_type" value="main-action" />
<textarea class="ability-effect" name="attr_freestrike_effect" data-i18n="free-strike-effect" />
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_freestrike_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_freestrike_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_freestrike_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_freestrike_effect"></span>
</div>
</div>
</div>
</div>
<!-- Charge Main Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="charge" name="attr_charge_name" data-i18n="charge" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="charge-keywords" name="attr_charge_keywords" value="" />
<input type="hidden" name="attr_charge_type" value="Main Action" />
<textarea class="ability-effect grid-span-full" data-i18n="charge-effect" name="attr_charge_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_charge_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_charge_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_charge_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_charge_effect"></span>
</div>
</div>
</div>
</div>
<!-- Defend Main Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-name grid-span-full" data-i18n-placeholder="defend" name="attr_defend_name" data-i18n="defend" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="defend-keywords" name="attr_defend_keywords" value="" />
<input type="hidden" name="attr_defend_type" value="Main Action" />
<textarea class="ability-effect grid-span-full" data-i18n="defend-effect" name="attr_defend_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_defend_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Defend" name="attr_defend_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="defend" name="attr_defend_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_defend_effect"></span>
</div>
</div>
</div>
</div>
<!-- Convert Main Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="convert" name="attr_convert_name" data-i18n="convert" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="convert-keywords" name="attr_convert_keywords" value="" />
<input type="hidden" name="attr_convert_type" value="Main Action" />
<textarea class="ability-effect grid-span-full" data-i18n="convert-effect" name="attr_convert_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_convert_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Convert" name="attr_convert_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="convert" name="attr_convert_keywords"></span>
<span class="ability-type" data-i18n="main-action"></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_convert_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Maneuver Abilities -->
<div class="sheet-maneuver">
<!-- Maneuvers: repeating_maneuvers -->
<h2 data-i18n="standard-maneuvers"></h2>
<!-- Standard Maneuvers -->
<div class="standard-abilities">
<!-- Knockback -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_knockback_type" value="maneuver" />
<input type="hidden" name="attr_knockback_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="knockback" data-i18n="knockback" name="attr_knockback_name" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="keywords" data-i18n="knockback-keywords" name="attr_knockback_keywords" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" data-i18n="melee-one" name="attr_knockback_distance" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" data-i18n="one-creature" name="attr_knockback_target" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_knockback_characteristic">
<option value="might" data-i18n="might"></option>
<option value="intuition" data-i18n="intuition"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="knockback-tier1" data-i18n="knockback-tier1" name="attr_knockback_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="knockback-tier2" data-i18n="knockback-tier2" name="attr_knockback_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="knockback-tier3" data-i18n="knockback-tier3" name="attr_knockback_tier_3" spellcheck="false"></textarea>
</div>
<textarea class="ability-effect grid-span-full" data-i18n="knockback-effect" name="attr_knockback_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_knockback_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Knockback" name="attr_knockback_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="knockback-keywords" name="attr_knockback_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" data-i18n-placeholder="Distance" name="attr_knockback_distance" ></span>
<span class="ability-target" data-i18n-placeholder="Target" name="attr_knockback_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_knockback_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_knockback_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" data-i18n-placeholder="Tier 1 effect" name="attr_knockback_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" data-i18n-placeholder="Tier 2 effect" name="attr_knockback_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" data-i18n-placeholder="Tier 3 effect" name="attr_knockback_tier_3" ></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_knockback_effect"></span>
</div>
</div>
</div>
</div>
<!-- Grab -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_grab_type" value="maneuver" />
<input type="hidden" name="attr_grab_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="grab" data-i18n="grab" name="attr_grab_name" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="keywords" data-i18n="grab-keywords" name="attr_grab_keywords" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" data-i18n="melee-one" name="attr_grab_distance" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" data-i18n="one-creature" name="attr_grab_target" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_grab_characteristic">
<option value="might" data-i18n="might"></option>
<option value="intuition" data-i18n="intuition"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="grab-tier1" data-i18n="grab-tier1" name="attr_grab_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="grab-tier2" data-i18n="grab-tier2" name="attr_grab_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="grab-tier3" data-i18n="grab-tier3" name="attr_grab_tier_3" spellcheck="false"></textarea>
</div>
<textarea class="ability-effect grid-span-full" data-i18n="grab-effect" name="attr_grab_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="ability-card card-display">
<button type="action" data-i18n-title="ability-share" name="act_grab_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Grab" name="attr_grab_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="grab-keywords" name="attr_grab_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" data-i18n-placeholder="Distance" name="attr_grab_distance" ></span>
<span class="ability-target" data-i18n-placeholder="Target" name="attr_grab_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_grab_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_grab_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_grab_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" name="attr_grab_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" name="attr_grab_tier_3" ></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_grab_effect"></span>
</div>
</div>
</div>
</div>
<!-- Escape Grab -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_escape_grab_type" value="maneuver" />
<input type="hidden" name="attr_escape_grab_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="escape-grab" data-i18n="escape-grab" name="attr_escape_grab_name" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" data-i18n="self" name="attr_escape_grab_distance" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" data-i18n="self" name="attr_escape_grab_target" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_escape_grab_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="escape-grab-tier1" data-i18n="escape-grab-tier1" name="attr_escape_grab_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="escape-grab-tier2" data-i18n="escape-grab-tier2" name="attr_escape_grab_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="escape-grab-tier3" data-i18n="escape-grab-tier3" name="attr_escape_grab_tier_3" spellcheck="false"></textarea>
</div>
<textarea class="ability-effect grid-span-full" data-i18n="escape-grab-effect" name="attr_escape_grab_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_escape_grab_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Escape Grab" name="attr_escape_grab_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="knockback-keywords" name="attr_escape_grab_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" data-i18n-placeholder="Distance" name="attr_escape_grab_distance" ></span>
<span class="ability-target" data-i18n-placeholder="Target" name="attr_escape_grab_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_escape_grab_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_escape_grab_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" data-i18n-placeholder="Tier 1 effect" name="attr_escape_grab_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" data-i18n-placeholder="Tier 2 effect" name="attr_escape_grab_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" data-i18n-placeholder="Tier 3 effect" name="attr_escape_grab_tier_3" ></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_escape_grab_effect"></span>
</div>
</div>
</div>
</div>
<!-- Claw Dirt Maneuver -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_claw_dirt_type" value="maneuver" />
<input type="hidden" name="attr_claw_dirt_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="claw-dirt" data-i18n="claw-dirt" name="attr_claw_dirt_name" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" data-i18n="self" name="attr_claw_dirt_distance" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" data-i18n="self" name="attr_claw_dirt_target" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_claw_dirt_characteristic">
<option value="might" data-i18n="might"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="claw-dirt-tier1" data-i18n="claw-dirt-tier1" name="attr_claw_dirt_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="claw-dirt-tier2" data-i18n="claw-dirt-tier2" name="attr_claw_dirt_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="claw-dirt-tier3" data-i18n="claw-dirt-tier3" name="attr_claw_dirt_tier_3" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_claw_dirt_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_claw_dirt_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_claw_dirt_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_claw_dirt_distance" ></span>
<span class="ability-target" name="attr_claw_dirt_target" ></span>
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_claw_dirt_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_claw_dirt_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_claw_dirt_tier_1" ></span>
<label class="sublabel">12-16</label>
<span class="power-roll-tier-effect" name="attr_claw_dirt_tier_2" ></span>
<label class="sublabel">17+</label>
<span class="power-roll-tier-effect" name="attr_claw_dirt_tier_3" ></span>
</div>
<span class="ability-effect grid-span-full" name="attr_claw_dirt_effect"></span>
</div>
</div>
</div>
<!-- Aid Attack -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="aid-attack" name="attr_aid_attack_name" data-i18n="aid-attack" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="heal-keywords" name="attr_aid_attack_keywords" value="" />
<input type="hidden" name="attr_aid_attack_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_aid_attack_distance" data-i18n="melee-one" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_aid_attack_target" data-i18n="one-enemy" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="aid-attack-effect" name="attr_aid_attack_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_aid_attack_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Aid Attack" name="attr_aid_attack_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="aid-attack-keywords" name="attr_aid_attack_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" data-i18n-placeholder="Distance" name="attr_aid_attack_distance" ></span>
<span class="ability-target" data-i18n-placeholder="Target" name="attr_aid_attack_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_aid_attack_effect"></span>
</div>
</div>
</div>
</div>
<!-- Catch Breath -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="catch-breath" name="attr_catch_breath_name" data-i18n="catch-breath" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="catch-breath-keywords" name="attr_catch_breath_keywords" value="" />
<input type="hidden" name="attr_catch_breath_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_catch_breath_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_catch_breath_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="catch-breath-effect" name="attr_catch_breath_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_catch_breath_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Catch Breath" name="attr_catch_breath_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_catch_breath_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_catch_breath_distance" ></span>
<span class="ability-target" name="attr_catch_breath_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_catch_breath_effect"></span>
</div>
</div>
</div>
</div>
<!-- Hide Maneuver -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="hide" name="attr_hide_name" data-i18n="hide" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="hide-keywords" name="attr_hide_keywords" value="" />
<input type="hidden" name="attr_hide_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_hide_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_hide_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="hide-effect" name="attr_hide_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_hide_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_hide_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_hide_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_hide_distance" ></span>
<span class="ability-target" name="attr_hide_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_hide_effect"></span>
</div>
</div>
</div>
</div>
<!-- Search Maneuver -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="search" name="attr_search_name" data-i18n="search" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="search-keywords" name="attr_search_keywords" value="" />
<input type="hidden" name="attr_search_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_search_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_search_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="search-effect" name="attr_search_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_search_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_search_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_search_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_search_distance" ></span>
<span class="ability-target" name="attr_search_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_search_effect"></span>
</div>
</div>
</div>
</div>
<!-- Stand Up -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="stand-up" name="attr_standup_name" data-i18n="stand-up" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="stand-up-keywords" name="attr_standup_keywords" value="" />
<input type="hidden" name="attr_standup_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_standup_distance" data-i18n="self-melee-one" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_standup_target" data-i18n="self-one-creature" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="stand-up-effect" name="attr_standup_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_standup_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_standup_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_standup_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_standup_distance" ></span>
<span class="ability-target" name="attr_standup_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_standup_effect"></span>
</div>
</div>
</div>
</div>
<!-- Use Consumable -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="consumable" name="attr_consumable_name" data-i18n="consumable" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="consumable-keywords" name="attr_consumable_keywords" value="" />
<input type="hidden" name="attr_consumable_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_consumable_distance" data-i18n="self-melee-one" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_consumable_target" data-i18n="self-one-creature" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="consumable-effect" name="attr_consumable_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_consumable_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_consumable_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_consumable_keywords"></span>
<span class="ability-type" data-i18n="maneuver"></span>
<span class="ability-distance" name="attr_consumable_distance" ></span>
<span class="ability-target" name="attr_consumable_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_consumable_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-triggered">
<h2 data-i18n="standard-triggers"></h2>
<!-- Standard Triggers -->
<div class="standard-abilities">
<!-- Opportunity Attack -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="opportunity-attack" data-i18n="opportunity-attack" name="attr_opportunity_attack_name" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="opportunity-attack-keywords" name="attr_opportunity_attack_keywords" value="" />
<input type="hidden" name="attr_opportunity_attack_type" value="free-triggered-action" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="trigger" data-i18n="opportunity-attack-trigger" name="attr_opportunity_attack_trigger" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="effect" data-i18n="opportunity-attack-effect" name="attr_opportunity_attack_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_opportunity_attack_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" data-i18n-placeholder="Opportunity Attack" name="attr_opportunity_attack_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" data-i18n-placeholder="Opportunity Attack" name="attr_opportunity_attack_keywords"></span>
<span class="ability-type" data-i18n="free-triggered-action"></span>
<div class="ability-trigger grid-span-full">
<label><span data-i18n="trigger"></span>:</label>
<span class="ability-trigger" name="attr_opportunity_attack_trigger"></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_opportunity_attack_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-noaction">
<h2 data-i18n="standard-noaction-trait"></h2>
<!-- Standard Abilities -->
<div class="standard-abilities">
<!-- Climb Creature Maneuver -->
<div class="standard-abilities-item">
<input type="hidden" name="attr_climb_creature_type" value="no-action" />
<input type="hidden" name="attr_climb_creature_has_power_roll" value="on" />
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<div class="ability-details grid-span-full">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="climb-creature" data-i18n="climb-creature" name="attr_climb_creature_name" spellcheck="false"></textarea>
<div class="power-roll">
<div class="power-roll-mods">
<label data-i18n="power-roll"></label>
<span>+</span>
<select class="ability-type" name="attr_climb_creature_characteristic">
<option value="might" data-i18n="might"></option>
<option value="agility" data-i18n="agility"></option>
</select>
</div>
<label class="sublabel">≤ 11</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="climb-creature-tier1" data-i18n="climb-creature-tier1" name="attr_climb_creature_tier_1" spellcheck="false"></textarea>
<label class="sublabel">12-16</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="climb-creature-tier2" data-i18n="climb-creature-tier2" name="attr_climb_creature_tier_2" spellcheck="false"></textarea>
<label class="sublabel">17+</label>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="climb-creature-tier3" data-i18n="climb-creature-tier3" name="attr_climb_creature_tier_3" spellcheck="false"></textarea>
</div>
<textarea class="ability-effect grid-span-full" data-i18n="climb-creature-effect" name="attr_climb_creature_effect" spellcheck="false"></textarea>
</div>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_climb_creature_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_climb_creature_name"></span>
<div class="ability-details grid-span-full">
<div class="power-roll">
<div class="power-roll-mods">
<label>2d10</label>
<span>+</span>
<span class="power-roll-characteristic" data-i18n-dynamic name="attr_climb_creature_characteristic" ></span>
<button type="action" data-i18n-title="power-roll-share" name="act_climb_creature_power_roll_share">
<!-- Dice pic -->
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
<img src="https://game-icons.net/icons/ffffff/000000/1x1/skoll/d10.svg" alt="Roll Dice" style="width:32px; height:32px;">
</button>
</div>
<label class="sublabel">≤ 11</label>
<span class="power-roll-tier-effect" name="attr_climb_creature_tier_1" ></span>
<label class="sublabel">12-16</label>
<span type="text" class="power-roll-tier-effect" name="attr_climb_creature_tier_2" ></span>
<label class="sublabel">17+</label>
<span type="text" class="power-roll-tier-effect" name="attr_climb_creature_tier_3" ></span>
</div>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_climb_creature_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-move">
<h2 data-i18n="standard-move-actions"></h2>
<!-- Standard Moves -->
<div class="standard-abilities">
<!-- Advance Move Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="advance" name="attr_advance_name" data-i18n="advance" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="advance-keywords" name="attr_advance_keywords" value="" />
<input type="hidden" name="attr_advance_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_advance_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_advance_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="advance-effect" name="attr_advance_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_advance_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_advance_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_advance_keywords"></span>
<span class="ability-type" data-i18n="move-action"></span>
<span class="ability-distance" name="attr_advance_distance" ></span>
<span class="ability-target" name="attr_advance_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_advance_effect"></span>
</div>
</div>
</div>
</div>
<!--Disengage Move Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="disengage" name="attr_disengage_name" data-i18n="disengage" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="disengage-keywords" name="attr_disengage_keywords" value="" />
<input type="hidden" name="attr_disengage_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_disengage_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_disengage_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="disengage-effect" name="attr_disengage_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_disengage_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_disengage_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords read-ability-keywords" name="attr_disengage_keywords"></span>
<span class="ability-type" data-i18n="move-action"></span>
<span class="ability-distance" name="attr_disengage_distance" ></span>
<span class="ability-target" name="attr_disengage_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_disengage_effect"></span>
</div>
</div>
</div>
</div>
<!-- Ride Move Action -->
<div class="standard-abilities-item">
<input class="ability-edit" type="checkbox" id="ability-edit"/>
<div class="ability-card card-edit">
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="ride" name="attr_ride_name" data-i18n="ride" spellcheck="false"></textarea>
<input type="hidden" class="ability-keywords" data-i18n-placeholder="ride-keywords" name="attr_ride_keywords" value="" />
<input type="hidden" name="attr_ride_type" value="maneuver" />
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="distance" name="attr_ride_distance" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n-placeholder="target" name="attr_ride_target" data-i18n="self" spellcheck="false"></textarea>
<textarea class="ability-effect grid-span-full" data-i18n="ride-effect" name="attr_ride_effect" spellcheck="false"></textarea>
</div>
<div class="ability-card card-display">
<button type="action" class="ability-share-button" data-i18n-title="ability-share" name="act_ride_share">
<!-- speech balloon -->
&#128172;
</button>
<span class="ability-name" name="attr_ride_name"></span>
<div class="ability-details grid-span-full">
<span class="ability-keywords" name="attr_ride_keywords"></span>
<span class="ability-type" data-i18n="move-action"></span>
<span class="ability-distance" name="attr_ride_distance" ></span>
<span class="ability-target" name="attr_ride_target" ></span>
<div class="ability-effect grid-span-full">
<label><span data-i18n="effect"></span>:</label>
<span class="ability-effect" name="attr_ride_effect"></span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Disclaimer -->
<div class="disclaimer">
<span data-i18n="disclaimer"></span>
</div>
<!-- Power Roll Roll Template and Ability Template combined -->
<rolltemplate class="sheet-rolltemplate-powerrollability">
<div class="sheet-roll-container">
<div class="character-name">
{{charactername}}
</div>
<div class="header">
{{name}}
</div>
<div class="subtype">
{{subtype}}
</div>
<div class="section">
{{#description}}
<div class="description">
{{description}}
</div>
{{/description}}
{{#rollTotal() hasTrait 1}}
<div class="trait">
{{trait}}
</div>
{{/rollTotal() hasTrait 1}}
{{#rollTotal() hasSolo 1}}
<div class="effect-block">
<div class="effect-label">{{solo1name}}</span>:</div>
<div class="effect-text">{{solo1text}}</div>
</div>
<div class="effect-block">
<div class="effect-label">{{solo2name}}</span>:</div>
<div class="effect-text">{{solo2text}}</div>
</div>
{{/rollTotal() hasSolo 1}}
</div>
<div class="meta-row">
<div class="keywords">{{keywords}}</div>
<div class="action-type">{{type}}</div>
</div>
<div class="action-row">
<div class="distance">
{{#distance}}
<!-- triangle-ruler -->
&#128208;{{distance}}
{{/distance}}
</div>
<div class="target">
{{#target}}
<!-- bullseye -->
&#127919;{{target}}
{{/target}}
</div>
</div>
{{#rollTotal() hasTrigger 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="trigger"></span>:</div>
<div class="effect-text">{{trigger}}</div>
</div>
{{/rollTotal() hasTrigger 1}}
{{#rollTotal() hasPreEffect 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="pre-effect"></span>:</div>
<div class="effect-text">{{pre_effect}}</div>
</div>
{{/rollTotal() hasPreEffect 1}}
{{#rollTotal() hasPowerRoll 1}}
<div class="stat-row">
<div class="roll-label">{{powerRoll}}:</div>
<span class="roll-formula">2d10 + {{characteristic}}</span>
</div>
<div class="roll-column1">
<div class="powerroll-2d10">
<label>2d10:</label> {{2d10}}
</div>
<div class="powerroll-characteristic">
<label><span data-i18n="{{characteristic}}"></span>:</label> {{characteristicValue}}
</div>
{{#rollGreater() bonus 0}}
<div class="powerroll-bonus-penalty">
<label><span data-i18n="bonus"></span>:</label> {{bonus}}
</div>
{{/rollGreater() bonus 0}}
{{#rollLess() bonus 0}}
<div class="powerroll-bonus-penalty">
<label><span data-i18n="penalty"></span>:</label> {{bonus}}
</div>
{{/rollLess() bonus 0}}
</div>
<div class="roll-column2">
<div class="powerroll-total">
<label><span data-i18n="power-roll-total"></span>:</label> {{total}}
</div>
<div class="powerroll-tier">
<label><span data-i18n="tier"></span>:</label> {{computed::tier}}
</div>
</div>
{{#rollTotal() computed::isDoubleEdge 1}}
<div class="powerroll-edge-bane" data-i18n="double-edge"></div>
{{/rollTotal() computed::isDoubleEdge 1}}
{{#rollGreater() edgeBane 0}}
<div class="powerroll-edge-bane" data-i18n="edge"></div>
{{/rollGreater() edgeBane 0}}
{{#rollLess() edgeBane 0}}
<div class="powerroll-edge-bane" data-i18n="bane"></div>
{{/rollLess() edgeBane 0}}
{{#rollTotal() computed::isDoubleBane 1}}
<div class="powerroll-edge-bane" data-i18n="double-bane"></div>
{{/rollTotal() computed::isDoubleBane 1}}
{{#rollGreater() 2d10 18}}
<div class="powerroll-crit" data-i18n="critical-hit"></div>
{{/rollGreater() 2d10 18}}
<div class="tiers">
<span class="range">≤ 11</span>
<span class="damage">{{tier1}}</span>
<span class="range">1216</span>
<span class="damage">{{tier2}}</span>
<span class="range">17+</span>
<span class="damage">{{tier3}}</span>
</div>
{{/rollTotal() hasPowerRoll 1}}
{{#rollTotal() hasSpecial 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="special"></span>:</div>
<div class="effect-text">{{special}}</div>
</div>
{{/rollTotal() hasSpecial 1}}
{{#rollTotal() hasEffect 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="effect"></span>:</div>
<div class="effect-text">{{effect}}</div>
</div>
{{/rollTotal() hasEffect 1}}
{{#rollTotal() hasMalprop 1}}
<div class="effect-block">
<div class="effect-label">{{malpropcost}}&nbsp;<span data-i18n="malice"></span>:</div>
<div class="effect-text">{{malprop}}</div>
</div>
{{/rollTotal() hasMalprop 1}}
{{#rollTotal() hasSpend 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="spend"></span>&nbsp;{{spendcost}}:</div>
<div class="effect-text">{{spend}}</div>
</div>
{{/rollTotal() hasSpend 1}}
{{#rollTotal() hasCustom 1}}
<div class="effect-block">
<div class="effect-label">{{customlabel}}:</div>
<div class="effect-text">{{custom}}</div>
</div>
{{/rollTotal() hasCustom 1}}
</div>
</rolltemplate>
<!-- Power Roll Roll Template -->
<rolltemplate class="sheet-rolltemplate-powerroll">
<div class="sheet-roll-container">
<div class="character-name">
{{charactername}}
</div>
<div class="header">
{{name}}
</div>
<div class="roll-column1">
<div class="powerroll-2d10">
<label>2d10:</label> {{2d10}}
</div>
<div class="powerroll-characteristic">
<label><span data-i18n="{{characteristic}}"></span>:</label> {{characteristicValue}}
</div>
{{#rollGreater() bonus 0}}
<div class="powerroll-bonus-penalty">
<label><span data-i18n="bonus"></span>:</label> {{bonus}}
</div>
{{/rollGreater() bonus 0}}
{{#rollLess() bonus 0}}
<div class="powerroll-bonus-penalty">
<label><span data-i18n="penalty"></span>:</label> {{bonus}}
</div>
{{/rollLess() bonus 0}}
</div>
<div class="roll-column2">
<div class="powerroll-total">
<label><span data-i18n="power-roll-total"></span>:</label> {{total}}
</div>
<div class="powerroll-tier">
<label><span data-i18n="tier"></span>:</label> {{computed::tier}}
</div>
</div>
{{#rollTotal() computed::isDoubleEdge 1}}
<div class="powerroll-edge-bane" data-i18n="double-edge"></div>
{{/rollTotal() computed::isDoubleEdge 1}}
{{#rollGreater() edgeBane 0}}
<div class="powerroll-edge-bane" data-i18n="edge"></div>
{{/rollGreater() edgeBane 0}}
{{#rollLess() edgeBane 0}}
<div class="powerroll-edge-bane" data-i18n="bane"></div>
{{/rollLess() edgeBane 0}}
{{#rollTotal() computed::isDoubleBane 1}}
<div class="powerroll-edge-bane" data-i18n="double-bane"></div>
{{/rollTotal() computed::isDoubleBane 1}}
{{#rollGreater() 2d10 18}}
<div class="powerroll-crit" data-i18n="critical-hit"></div>
{{/rollGreater() 2d10 18}}
</div>
</rolltemplate>
<!-- Ability Roll Template -->
<rolltemplate class="sheet-rolltemplate-ability">
<div class="sheet-roll-container">
<div class="header">{{name}}</div>
<div class="description">{{description}}</div>
<div class="meta-row">
<div class="keywords">{{keywords}}</div>
<div class="action-type">{{type}}</div>
</div>
<div class="action-row">
{{#rollTotal() hasDistance 1}}
<div class="distance">
<!-- triangle-ruler -->
&#128208;{{distance}}
</div>
{{/rollTotal() hasDistance 1}}
{{#rollTotal() hasTarget 1}}
<div class="target">
<!-- bullseye -->
&#127919;{{target}}
</div>
{{/rollTotal() hasTarget 1}}
</div>
{{#rollTotal() hasTrigger 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="trigger"></span>:</div>
<div class="effect-text">{{trigger}}</div>
</div>
{{/rollTotal() hasTrigger 1}}
{{#rollTotal() hasPowerRoll 1}}
<div class="stat-row">
<div class="roll-label">{{powerRoll}}:</div>
<span class="roll-formula">2d10 + {{characteristic}}</span>
</div>
<div class="tiers">
<div class="tier">
<span class="range">≤ 11</span>
<span class="damage">{{tier1}}</span>
</div>
<div class="tier">
<span class="range">1216</span>
<span class="damage">{{tier2}}</span>
</div>
<div class="tier">
<span class="range">17+</span>
<span class="damage">{{tier3}}</span>
</div>
</div>
{{/rollTotal() hasPowerRoll 1}}
{{#rollTotal() hasEffect 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="effect"></span>:</div>
<div class="effect-text">{{effect}}</div>
</div>
{{/rollTotal() hasEffect 1}}
</div>
</rolltemplate>
<!-- Monster Ability Roll Template -->
<rolltemplate class="sheet-rolltemplate-monsterability">
<div class="sheet-roll-container">
<div class="character-name">
{{charactername}}
</div>
<div class="header">
{{name}}
</div>
<div class="subtype">
{{subtype}}
</div>
<div class="section">
{{#description}}
<div class="description">
{{description}}
</div>
{{/description}}
{{#rollTotal() hasTrait 1}}
<div class="trait">
{{trait}}
</div>
{{/rollTotal() hasTrait 1}}
{{#rollTotal() hasSolo 1}}
<div class="effect-block">
<div class="effect-label">{{solo1name}}</span>:</div>
<div class="effect-text">{{solo1text}}</div>
</div>
<div class="effect-block">
<div class="effect-label">{{solo2name}}</span>:</div>
<div class="effect-text">{{solo2text}}</div>
</div>
{{/rollTotal() hasSolo 1}}
</div>
<div class="meta-row">
<div class="keywords">{{keywords}}</div>
<div class="action-type">{{type}}</div>
</div>
<div class="action-row">
<div class="distance">
{{#distance}}
<!-- triangle-ruler -->
&#128208;{{distance}}
{{/distance}}
</div>
<div class="target">
{{#target}}
<!-- bullseye -->
&#127919;{{target}}
{{/target}}
</div>
</div>
{{#rollTotal() hasTrigger 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="trigger"></span>:</div>
<div class="effect-text">{{trigger}}</div>
</div>
{{/rollTotal() hasTrigger 1}}
{{#rollTotal() hasPreEffect 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="pre-effect"></span>:</div>
<div class="effect-text">{{pre_effect}}</div>
</div>
{{/rollTotal() hasPreEffect 1}}
{{#rollTotal() hasPowerRoll 1}}
<div class="stat-row">
<div class="roll-label">{{powerRoll}}:</div>
<span class="roll-formula">2d10 + {{characteristic}}</span>
</div>
<div class="tiers">
<span class="range">≤ 11</span>
<span class="damage">{{tier1}}</span>
<span class="range">1216</span>
<span class="damage">{{tier2}}</span>
<span class="range">17+</span>
<span class="damage">{{tier3}}</span>
</div>
{{/rollTotal() hasPowerRoll 1}}
{{#rollTotal() hasSpecial 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="special"></span>:</div>
<div class="effect-text">{{special}}</div>
</div>
{{/rollTotal() hasSpecial 1}}
{{#rollTotal() hasEffect 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="effect"></span>:</div>
<div class="effect-text">{{effect}}</div>
</div>
{{/rollTotal() hasEffect 1}}
{{#rollTotal() hasMalprop 1}}
<div class="effect-block">
<div class="effect-label">{{malpropcost}}&nbsp;<span data-i18n="malice"></span>:</div>
<div class="effect-text">{{malprop}}</div>
</div>
{{/rollTotal() hasMalprop 1}}
{{#rollTotal() hasSpend 1}}
<div class="effect-block">
<div class="effect-label"><span data-i18n="spend"></span>&nbsp;{{spendcost}}:</div>
<div class="effect-text">{{spend}}</div>
</div>
{{/rollTotal() hasSpend 1}}
{{#rollTotal() hasCustom 1}}
<div class="effect-block">
<div class="effect-label">{{customlabel}}:</div>
<div class="effect-text">{{custom}}</div>
</div>
{{/rollTotal() hasCustom 1}}
</div>
</rolltemplate>
<!-- Ability Power Roll -->
<rolltemplate class="sheet-rolltemplate-simpleroll">
<div class="sheet-roll-container">
<div class="character-name">{{charactername}}</div>
<div class="header">
{{name}}
</div>
<div class="powerroll-2d10">
<label>{{rolltitle}}:</label> {{roll}}
</div>
{{#rollTotal() hasTier 1}}
<div class="powerroll-tier">
<label><span data-i18n="tier"></span>
{{#rollLess() roll 12}}
<span>1 (&le;11)</span>
{{/rollLess() roll 12}}
{{#rollBetween() roll 12 16}}
<span>2 (12-16)</span>
{{/rollBetween() roll 12 16}}
{{#rollGreater() roll 16}}
<span>3 (17+)</span>
{{/rollGreater() roll 16}}
</label>
</div>
{{/rollTotal() hasTier 1}}
</div>
</rolltemplate>
<!-- Sheet Workers -->
<script type="text/worker">
// Sheet version used to deal with major changes
const version = "1.3";
function setActiveCharacterId(id) {
const ocid = getActiveCharacterId();
const data = {
id: '0',
type: 'setActiveCharacter',
data: id,
};
if (self.dispatchEvent) {
const event = new CustomEvent('message');
event.data = data;
self.dispatchEvent(event);
}
else {
self.onmessage({ data });
}
return ocid;
}
function getAttrsAsync(props) {
const acid = getActiveCharacterId();
let ocid = null;
return new Promise((resolve, reject) => {
ocid = setActiveCharacterId(acid);
try {
getAttrs(props, (values) => resolve(values));
}
catch {
reject();
}
}).finally(() => {
setActiveCharacterId(ocid);
});
}
function setAttrsAsync(props) {
const acid = getActiveCharacterId();
let ocid = null;
return new Promise((resolve, reject) => {
ocid = setActiveCharacterId(acid);
try {
setAttrs(props, undefined, (values) => resolve(values));
}
catch {
reject();
}
}).finally(() => {
setActiveCharacterId(ocid);
});
}
function getSectionIDsAsync(sectionName) {
const acid = getActiveCharacterId();
let ocid = null;
return new Promise((resolve, reject) => {
ocid = setActiveCharacterId(acid);
try {
getSectionIDs(sectionName, (values) => resolve(values));
}
catch {
reject();
}
}).finally(() => {
setActiveCharacterId(ocid);
});
}
/**
**Tab switching in Ability Panel
**/
const buttonlist = ["action", "maneuver", "triggered","noaction","move"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
abilitiesTab: button
});
});
});
/**
** Roll Template Functions
**/
const ROLLTEMPLATES = {
DISPLAY: 'monsterability',
POWERROLL: 'powerroll',
ABILITYROLL: 'powerrollability',
SIMPLE: 'simpleroll',
}
/**
** Processes two sources of information and constructs the roll string used by Roll20. Then it executes the roll.
** @param {string} templateName The template to be used for the roll
** @param {Array<Object>} directMap A dictionary of rolltemplate keys and their values.
** @param {Array<Object>} rollValueMap A dictionary of rolltemplate keys and their values that will be added as inline rolls.
** @param {boolean} isPowerRoll (optional) True if the roll will contain a power roll
**/
async function buildRoll (templateName, directMap, rollValueMap, isPowerRoll = false) {
console.log('~~~ buildRoll ~~~');
// Check that we have the bare minimum information needed for a roll
if (!templateName || !directMap) {
console.log('Could not build roll: missing data');
return;
}
// Setup the template for the roll
const template = `@{wtype}&{template:${templateName}} {{charactername=@{character_name}}} `;
let powerroll = '';
// Check if we need to add the extra information for a power roll.
if (isPowerRoll && rollValueMap) {
if (rollValueMap.characteristicValue.length < 1) {
console.log('Could not build roll: no characteristic value specified');
return;
}
const STATNAMES = ['might', 'agility', 'reason', 'intuition', 'presence'];
const characteristicTranslation = getTranslationByKey(directMap.characteristic) || directMap.characteristic;
const powerRollTranslation = getTranslationByKey('power-roll') || 'Power Roll';
const edgeOrBaneTranslation = getTranslationByKey('edge-or-bane') || 'edge-or-bane';
const noEdgeOrBaneTranslation = getTranslationByKey('no-edge-or-bane') || 'no-edge-or-bane';
const doubleEdgeTranslation = getTranslationByKey('double-edge') || 'double-edge';
const edgeTranslation = getTranslationByKey('edge') || 'edge';
const baneTranslation = getTranslationByKey('bane') || 'bane';
const doubleBaneTranslation = getTranslationByKey('double-bane') || 'double-bane';
const bonusOrPenaltyTranslation = getTranslationByKey('bonus-or-penalty') || 'bonus-or-penalty';
const name = !directMap.name ? '{{name=' + characteristicTranslation + ` ` + powerRollTranslation + '}} ': '';
powerroll = '[[ [[2d10cs>11cf<0]][2d10] ' +
` + [[${rollValueMap.characteristicValue}[${characteristicTranslation}]]][${characteristicTranslation}] ` +
' + [[?{' +
edgeOrBaneTranslation +
`|${noEdgeOrBaneTranslation},0` +
`|${doubleEdgeTranslation},0[${doubleEdgeTranslation}]` +
`|${edgeTranslation},2[${edgeTranslation}]` +
`|${baneTranslation},-2[${baneTranslation}]` +
`|${doubleBaneTranslation},0[${doubleBaneTranslation}]` +
`}]][${edgeOrBaneTranslation}] ` +
` + [[?{${bonusOrPenaltyTranslation}|0}]][${bonusOrPenaltyTranslation}] ` +
']] ' +
'{{2d10=$[[0]]}} ' +
'{{edgeBane=$[[2]]}} ' +
'{{bonus=$[[3]]}} ' +
'{{total=$[[4]]}} ' +
`{{isDoubleEdge=[[0]]}} ` +
`{{isDoubleBane=[[0]]}} ` +
'{{tier=[[0]]}} ' +
name;
}
// Helper function to trim empty values from the roll.
const isDefined = (value) => {
// Exclude null, undefined, and empty strings
if (!value) return false;
// Specifically exclude the string '0' (for things like ability_cost = 0)
if (typeof value === 'string' && value.trim() === '0') return false;
return true;
};
// Build the roll. Starts with the template and powerroll, then adds the directMap entries and the rollValueMap entries.
const roll = template +
powerroll +
Object.entries(directMap)
.filter(([key, value]) => value)
.map(([key, value]) => `{{${key}=${value}}} `)
.join(' ') +
Object.entries(rollValueMap)
.filter(([key, value]) => value === 1 || key === 'characteristicValue')
.map(([key, value]) => `{{${key}=[[${value}]]}} `)
.join(' ');
if (isPowerRoll) {
// If we are making a power roll we need to make extra calculations to determine the tier result.
const doubleEdgeTranslation = getTranslationByKey('double-edge') || 'double-edge';
const doubleBaneTranslation = getTranslationByKey('double-bane') || 'double-bane';
startRoll(roll, ({ rollId, results }) => {
console.log('roll results', results);
// Set for toggles for Double Edge and Double Bane
const isDoubleEdge = results.edgeBane.expression === `0[${doubleEdgeTranslation}]`
? 1 : 0;
const isDoubleBane = results.edgeBane.expression === `0[${doubleBaneTranslation}]`
? 1 : 0;
// Calculate the Tier result from the roll 2-11, 12-16, 17-20
const tierBase = (() => {
if (results.total.result >= 17) {
return 3;
}
return results.total.result >= 12
? 2
: 1;
})();
const tierMod = (() => {
switch (results.edgeBane.expression) {
case `0[${doubleEdgeTranslation}]`:
return 1;
case `0[${doubleBaneTranslation}]`:
return -1;
default:
return 0;
}
})();
// Adjust the Tier result if Double Edge/Bane
const tier = Math.max(1, Math.min(3, tierBase + tierMod));
finishRoll(rollId, { isDoubleEdge, isDoubleBane, tier });
});
} else {
// Simple roll for everything else.
startRoll(roll, ({ rollId }) => finishRoll(rollId));
}
}
/**
** Basic Power Roll
** Constructs and rolls a power roll using the powerroll template
** @param {string} characteristic The characteristic to use for the roll.
** @param {string} abilityName (optional) The name of the ability invoking the roll.
**/
async function rollPower(characteristic) {
console.log("~~~ rollPower ~~~");
// Get the characteristic and populate the translations for use in the roll.
const attrs = await getAttrsAsync([characteristic]);
const characteristicValue = attrs[characteristic];
buildRoll(ROLLTEMPLATES.POWERROLL, {characteristic},{characteristicValue}, true);
}
/**
** Simple Roll to display Recovery use
** And adjust automatically in sheet
**/
async function rollRecovery() {
console.log("~~~ rollRecovery ~~~");
// Get the recovery amount and populate the translations for use in the roll.
const attrs = await getAttrsAsync(['recovery_amount']);
const recovery_amount = attrs.recovery_amount;
buildRoll(ROLLTEMPLATES.SIMPLE, { name: "Recovery", rolltitle: "Stamina Gain", roll: `[[${recovery_amount}]]` }, {} );
}
function calculateRecoverySpent() {
console.log('~~~ calculateRecoverySpent ~~~');
getAttrs(["stamina_max", "recovery_amount", "stamina", "recoveries"], function(values) {
let stamina_max = parseInt(values.stamina_max)||0;
let recovery_amount = parseInt(values.recovery_amount)||0;
let stamina = parseInt(values.stamina)||0;
let stamina_set = Math.min(stamina_max, stamina + recovery_amount);
let recoveries = parseInt(values.recoveries)||0;
let recoveries_set = Math.max(recoveries - 1,0);
if (recoveries > 0) {
setAttrs({
"stamina": stamina_set,
"recoveries": recoveries_set
});
}
});
}
/**
** Simple Roll to display Heroic Resource gain
** And adjust automatically in sheet
**/
async function rollResource() {
console.log("~~~ rollResource ~~~");
// Get the resource name and resource amount.
const attrs = await getAttrsAsync(['resource', 'resource_name', 'resource_amount']);
const resource_name = attrs.resource_name;
const resource = parseInt(attrs.resource) || 0;
const rollQuery = attrs.resource_amount ? `[[${attrs.resource_amount}]]` : `[[?{d3 or number|0}]]`;
const rollTemplate = `@{wtype}&{template:${ROLLTEMPLATES.SIMPLE}} {{charactername=@{character_name}}} {{name=${resource_name} Gain}} {{rolltitle=${resource_name}}} {{roll=${rollQuery}}}`;
startRoll(rollTemplate, ({ rollId, results }) => {
const resource_gain = results.roll.result || 0;
const resource_updated = resource + resource_gain;
setAttrs({ "resource": resource_updated });
finishRoll(rollId);
});
}
/**
** Simple Roll to apply Damage Surges
** And adjust automatically in sheet
**/
async function rollDamageSurges() {
console.log("~~~ rollDamageSurges ~~~");
// Get the necessary attributes.
const attrs = await getAttrsAsync(["surges", "surge_damage"]);
const damage = attrs.surge_damage;
const surges = parseInt(attrs.surges) || 0;
// Check to see we actually have surges to spend
if (surges > 0) {
const rollQuery = `[[?{How many?|1|2|3}]]`;
const rollTemplate = `@{wtype}&{template:${ROLLTEMPLATES.SIMPLE}} {{charactername=@{character_name}}} {{name=Using Surges for Damage}} {{rolltitle=${rollQuery}}} {{roll=Surges used for [[${rollQuery}*${damage}]] damage}}`;
startRoll(rollTemplate, ({ rollId, results }) => {
const surges_lose = results.rolltitle.result || 0;
// If we have enough, adjust the surges by the amount we just used
if (surges_lose <= surges) {
const surges_updated = surges - surges_lose;
setAttrs({ "surges": surges_updated });
}
finishRoll(rollId);
});
}
}
/**
** Simple Roll to apply Potency Surges
** And adjust automatically in sheet
**/
async function rollPotencySurges() {
console.log("~~~ rollPotencySurges ~~~");
// Get the necessary attributes.
const attrs = await getAttrsAsync(["surges"]);
const surges = parseInt(attrs.surges) || 0;
if (surges < 2) return;
const rollTemplate = `@{wtype}&{template:${ROLLTEMPLATES.SIMPLE}} {{charactername=@{character_name}}} {{name=Using Surges for Potency Increase}} {{rolltitle=[[2]]}} {{roll=Surges used to increase potency by 1}}`;
startRoll(rollTemplate, ({ rollId, results }) => {
const surges_lose = results.rolltitle.result || 0;
const surges_updated = surges - surges_lose;
setAttrs({ "surges": surges_updated });
finishRoll(rollId);
});
}
/**
** Displays a feature using the monsterability template
** @param {string} name The feature's name.
** @param {string} subtitle A subtitle for the feature, usually the source (Class, Perk, etc).
** @param {string} description The feature's description.
**/
function featureDisplay(name, subtitle, description) {
console.log('~~~ featureDisplay ~~~');
const roll = `@{wtype}&{template:monsterability}`
+ '{{charactername=@{character_name}}} '
+ '{{name=' + name + '}} '
+ '{{trait=' + description + '}} '
+ '{{subtype=' + subtitle + '}} '
+ '{{hasTrait=[[1]]}}';
startRoll(roll, ({ rollId }) => finishRoll(rollId));
}
/**
** Ability Sharing Handler
**/
async function handleAbilityShare(prefix, abilityPrefix, isPowerRoll = false) {
console.log('~~~ handleAbilityShare ~~~', prefix, abilityPrefix, isPowerRoll);
// 1. Define all possible ability attributes across both player and NPC sections.
const allAbilityAttributeNames = [
'name', 'cost', 'description', 'keywords',
'type', 'distance', 'target', 'trigger',
'characteristic', 'tier_1', 'tier_2', 'tier_3', 'effect',
'subtype', 'malice_cost', 'trait',
'solo_1_name', 'solo_1_text', 'solo_2_name', 'solo_2_text',
'special', 'malice', 'spend', 'custom', 'spend_cost', 'custom_label',
'pre_effect'
];
const allAbilityToggles = [
'has_power_roll', 'has_effect', 'has_special', 'has_malice',
'has_spend', 'has_custom', 'has_pre_effect'
];
const abPrefix = abilityPrefix ? `${abilityPrefix}_` : '';
// 2. Define the character-level attributes needed for both.
const globalAttrsToGet = prefix === 'repeating_npcabilities'
? [] // Monster abilities need nothing
: ['resource_name','kit_melee_damage_1','kit_melee_damage_2','kit_melee_damage_3','kit_ranged_damage_1','kit_ranged_damage_2','kit_ranged_damage_3', 'mag_psi_dam', 'sanct_weap' ]; // Player abilities need resource names and kit damage info
const characteristics = isPowerRoll ? ['might', 'agility', 'reason', 'intuition', 'presence'] : [];
// 3. Construct the full list of attributes to fetch.
const attrsToFetch = [
...globalAttrsToGet,
...characteristics,
...allAbilityAttributeNames.map(x => `${prefix}_${abPrefix}${x}`),
...allAbilityToggles.map(x => `${prefix}_${x}`),
'options_calculate_damage',
];
const attrs = await getAttrsAsync(attrsToFetch);
// 4. Execute the custom logic (player or monster specific)
const { directMap, rollValueMap } = getAbilityMaps(attrs, prefix, abPrefix);
// 5. Call the shared roll function
const template = isPowerRoll ? ROLLTEMPLATES.ABILITYROLL : ROLLTEMPLATES.DISPLAY;
const roll = buildRoll(template, directMap, rollValueMap, isPowerRoll);
}
/**
* Creates the attribute maps needed to build an ability sharing roll.
* @param {Array<Object>} Character and ability attributes.
* @param {string} The name of the repeating ability (e.g "repeating_abilities").
* @param {string} The prefix used for the for the attribute (e.g "ability").
* @returns {Array<Object>, Array<Object>} Two arrays containing maps of the roll
* template elements and their respective values. The first contains plain text,
* the second contains inline rolls.
*/
function getAbilityMaps(attrs, prefix, abilityPrefix) {
console.log('~~~ getAbilityMaps ~~~');
let directMap = {};
let rollValueMap = {};
let translateMap = {};
let subtype = '';
let trait = '';
let hasTrait = 0;
let characteristic = '';
let description = '';
let powerroll = '';
let characteristicValue = '';
if (prefix === 'repeating_npcabilities') {
// NPC Ability Logic
switch(attrs[`${prefix}_${abilityPrefix}subtype`]) {
case 'signature-ability':
case 'villain-ability':
subtype = getTranslationByKey(attrs[`${prefix}_${abilityPrefix}subtype`]) || '';
break;
case 'malice-ability':
case 'malice-trait':
subtype = attrs[`${prefix}_${abilityPrefix}malice_cost`] + ' ' + getTranslationByKey('malice');
break;
}
characteristic = 'modifiers';
trait = attrs[`${prefix}_${abilityPrefix}trait`] || '';
hasTrait = attrs[`${prefix}_${abilityPrefix}subtype`].includes('trait') && trait ? 1 : 0;
hasEffect = attrs[`${prefix}_has_effect`] === 'on' ? 1 : 0;
characteristicValue = parseInt(attrs[`${prefix}_${abilityPrefix}characteristic`]) || 0;
} else {
// PLAYER Ability Logic
const resourceName = attrs.resource_name || getTranslationByKey('resource-name-placeholder');
const cost = attrs[`${prefix}_${abilityPrefix}cost`];
subtype = cost && cost !== '0' ? `(${cost} ${resourceName})` : '';
characteristic = attrs[`${prefix}_${abilityPrefix}characteristic`] ? getTranslationByKey(attrs[`${prefix}_${abilityPrefix}characteristic`]) || '' : '';
description = attrs[`${prefix}_${abilityPrefix}description`] || '';
hasTrait = 1;
hasEffect = attrs[`${prefix}_${abilityPrefix}effect`] ? 1 : 0;
characteristicValue = attrs[attrs[`${prefix}_${abilityPrefix}characteristic`]];
}
if (attrs[`${prefix}_has_power_roll`] === 'on') {
powerroll = getTranslationByKey('power-roll');
}
const melee = getTranslationByKey('melee');
const ranged = getTranslationByKey('ranged');
const weapon = getTranslationByKey('weapon');
const abilityKeywords = attrs[`${prefix}_${abilityPrefix}keywords`] ? attrs[`${prefix}_${abilityPrefix}keywords`].split(',').map(item => item.trim()) : '';
const kit = [];
let otherdamage = "";
let tier1 = "", tier2 = "", tier3 = "";
if (attrs['options_calculate_damage'] === "1" && attrs[`${prefix}_${abilityPrefix}tier_1`] && attrs[`${prefix}_${abilityPrefix}tier_2`] && attrs[`${prefix}_${abilityPrefix}tier_3`]) {
if (abilityKeywords.includes(weapon)) {
if (abilityKeywords.includes(melee)) {
kit.push(parseInt(attrs['kit_melee_damage_1']));
kit.push(parseInt(attrs['kit_melee_damage_2']));
kit.push(parseInt(attrs['kit_melee_damage_3']));
} else if (abilityKeywords.includes(ranged)) {
kit.push(parseInt(attrs['kit_ranged_damage_1']));
kit.push(parseInt(attrs['kit_ranged_damage_2']));
kit.push(parseInt(attrs['kit_ranged_damage_3']));
}
if (attrs['sanct_weap']) {
const sanctweaptrans = getTranslationByKey('sanct-weap');
otherdamage = otherdamage + '+' + attrs['sanct_weap'] + `[${sanctweaptrans}]`;
}
}
if (attrs['mag_psi_dam']) {
const psionic = getTranslationByKey('psionic');
const magic = getTranslationByKey('magic');
if (abilityKeywords.includes(psionic)) {
otherdamage = otherdamage + '+' + attrs['mag_psi_dam'] + `[${psionic}]`;
}
else if (abilityKeywords.includes(magic)) {
otherdamage = otherdamage + '+' + attrs['mag_psi_dam'] + `[${magic}]`;
}
}
tier1 = damageCalculation(attrs[`${prefix}_${abilityPrefix}tier_1`], kit[0] || 0, otherdamage);
tier2 = damageCalculation(attrs[`${prefix}_${abilityPrefix}tier_2`], kit[1] || 0, otherdamage);
tier3 = damageCalculation(attrs[`${prefix}_${abilityPrefix}tier_3`], kit[2] || 0, otherdamage);
} else {
tier1 = attrs[`${prefix}_${abilityPrefix}tier_1`] || '';
tier2 = attrs[`${prefix}_${abilityPrefix}tier_2`] || '';
tier3 = attrs[`${prefix}_${abilityPrefix}tier_3`] || '';
}
const type = attrs[`${prefix}_${abilityPrefix}type`] === 'no-action' ? '' : getTranslationByKey(attrs[`${prefix}_${abilityPrefix}type`]);
// check keywords for damage calculation
// Build the directMap - these will be transformed into a {{key=value}} format.
directMap = {
name: attrs[`${prefix}_${abilityPrefix}name`],
subtype: subtype,
trait: trait,
description: description,
type: type,
keywords: attrs[`${prefix}_${abilityPrefix}keywords`] || '',
distance: attrs[`${prefix}_${abilityPrefix}distance`] || '',
target: attrs[`${prefix}_${abilityPrefix}target`] || '',
trigger: attrs[`${prefix}_${abilityPrefix}trigger`] || '',
characteristic: characteristic,
tier1: tier1,
tier2: tier2,
tier3: tier3,
special: attrs[`${prefix}_${abilityPrefix}special`] || '',
effect: attrs[`${prefix}_${abilityPrefix}effect`] || '',
pre_effect: attrs[`${prefix}_${abilityPrefix}pre_effect`] || '',
malprop: attrs[`${prefix}_${abilityPrefix}malice`] || '',
malpropcost: attrs[`${prefix}_${abilityPrefix}cost`] || '',
solo1name: attrs[`${prefix}_${abilityPrefix}solo_1_name`] || '',
solo1text: attrs[`${prefix}_${abilityPrefix}solo_1_text`] || '',
solo2name: attrs[`${prefix}_${abilityPrefix}solo_2_name`] || '',
solo2text: attrs[`${prefix}_${abilityPrefix}solo_2_text`] || '',
customlabel: attrs[`${prefix}_${abilityPrefix}custom_label`] || '',
custom: attrs[`${prefix}_${abilityPrefix}custom`] || '',
spend: attrs[`${prefix}_${abilityPrefix}spend`] || '',
spendcost: attrs[`${prefix}_${abilityPrefix}spend_cost`] || '',
powerRoll: powerroll,
}
//Build the rollValueMap - these will be transformed into a {{key=[[value]]}} format.
rollValueMap = {
hasTrait: hasTrait,
hasSolo: attrs[`${prefix}_${abilityPrefix}subtype`] && attrs[`${prefix}_${abilityPrefix}subtype`].includes('solo') ? 1 : 0,
hasTrigger: attrs[`${prefix}_${abilityPrefix}type`].includes('triggered') && attrs[`${prefix}_${abilityPrefix}trigger`] ? 1 : 0,
hasPowerRoll: attrs[`${prefix}_has_power_roll`] === 'on' ? 1 : 0,
hasSpecial: attrs[`${prefix}_has_special`] === 'on' ? 1 : 0,
hasEffect: hasEffect,
hasPreEffect: attrs[`${prefix}_has_pre_effect`] === 'on' ? 1 : 0,
hasMalprop: attrs[`${prefix}_has_malice`] === 'on' ? 1 : 0,
hasSpend: attrs[`${prefix}_has_spend`] === 'on' ? 1 : 0,
hasCustom: attrs[`${prefix}_has_custom`] === 'on' ? 1 : 0,
characteristicValue: characteristicValue || 0,
};
return { directMap, rollValueMap };
}
/**
** Adds inline Damage Calculations for tier effects
** @param {string} tierEffect The name of the repeating ability (e.g "repeating_abilities").
** @returns {string} Altered tier effect for roll template
**/
function damageCalculation(tierEffect, kit = 0, other = 0) {
console.log('~~~ damageCalculation ~~~');
if (!tierEffect) {
return '';
}
// Damage "should" take one of the following forms:
// <baseDamage> + <characteristic> <damageType> damage; <added effects>
// <baseDamage> <damageType> damage; <added effects>
// <effects>
const might = getTranslationByKey('might');
const agility = getTranslationByKey('agility');
const reason = getTranslationByKey('reason');
const intuition = getTranslationByKey('intuition');
const presence = getTranslationByKey('presence');
const charMap = {
M: { macro: '@{might}', title: might},
A: { macro: '@{agility}', title: agility},
R: { macro: '@{reason}', title: reason},
I: { macro: '@{intuition}', title: intuition},
P: { macro: '@{presence}', title: presence},
};
// Split the tier effect at the semi colon.
const parts = tierEffect.split(';');
// The first element of parts should contain the damage. The second should have effects, if anything.
// Split the damage section it using spaces to get the individual elements.
const damageSection = parts[0].split(' ');
const effectSection = parts.length > 1 ? '; ' + parts[1] : '';
const damageBase = parseInt(damageSection[0]);
// If the first element is not a number we aren't dealing with a form we can calculate.
if (!damageBase) {
return tierEffect;
}
let damageType = [];
let damageCalc = [];
// Since the first element is the base damage, if the second should is a '+' the third should be the characteristic.
if (damageSection[1] === '+') {
if (damageSection[2] in charMap) {
damageSection[2] = charMap[damageSection[2]].macro + `[${charMap[damageSection[2]].title}]`;
damageType = damageSection.slice(3);
damageCalc = damageSection.slice(0,3);
console.log('damageType and Calc',damageType, damageCalc);
} else {
return tierEffect;
}
} else {
damageType = damageSection.slice(1);
damageCalc.push(damageSection[0]);
}
if (kit) {
//Add Kit Damage
kitTrans = getTranslationByKey('kit');
damageCalc.push('+');
damageCalc.push(kit + '[' + kitTrans + ']');
}
if (other) {
damageCalc.push(other);
}
// rebuild the tier effect String
const newTierEffect = '[[' +
damageCalc.join(' ')
+ ']]'
+ damageType.join(' ')
+ effectSection;
return newTierEffect;
}
/**
** Event Handlers
**/
// Handlers for repeating sections
// Maps the repeating section name to its 'type' argument
const repeatingHandlers = {
'maneuvers': 'maneuver',
'triggered': 'triggered',
'noaction': 'noaction',
'moves': 'moves',
'abilities': 'ability',
'npcabilities': 'ability'
};
for (const [section, type] of Object.entries(repeatingHandlers)) {
const repeatingSection = `repeating_${section}`;
// Share button
on(`clicked:${repeatingSection}:share`, async (event) => {
handleAbilityShare(repeatingSection, type);
});
// Power roll button
on(`clicked:${repeatingSection}:power-roll-share`, async (event) => {
handleAbilityShare(repeatingSection, type, true);
});
}
// Handlers for simple, non-repeating actions
// Maps the action name to a boolean indicating if it has a power roll
const simpleActionHandlers = {
'knockback': true,
'grab': true,
'escape_grab': true,
'claw_dirt': true,
'jump': true,
'climb_creature': true,
'advance': false,
'disengage': false,
'ride': false,
'charge': false,
'defend': false,
'heal': false,
'convert': false,
'aid_attack': false,
'catch_breath': false,
'hide': false,
'search': false,
'standup': false,
'consumable': false,
'opportunity_attack': false,
'freestrike': false
};
for (const [action, hasPowerRoll] of Object.entries(simpleActionHandlers)) {
// Share button (all actions have this)
on(`clicked:${action}_share`, async (event) => {
handleAbilityShare(action, '');
});
// Power roll button (only if hasPowerRoll is true)
if (hasPowerRoll) {
on(`clicked:${action}_power_roll_share`, async (event) => {
handleAbilityShare(action, '', true);
});
}
}
// Handlers for free strikes (special mapping)
// Maps the button trigger name to the ability name
const freeStrikeHandlers = {
'melee': 'melee_free_strike',
'ranged': 'ranged_free_strike'
};
for (const [trigger, ability] of Object.entries(freeStrikeHandlers)) {
// Share button
on(`clicked:${trigger}_share`, async (event) => {
handleAbilityShare(ability, '');
});
// Power roll button
on(`clicked:${trigger}_power_roll_share`, async (event) => {
handleAbilityShare(ability, '', true);
});
}
// Characteristic Power Rolls
$20('.npc-characteristic-input-group > label').on('click', (e) => {
const characteristic = e.htmlAttributes['data-characteristic'];
rollPower(characteristic);
});
$20('.characteristic-input-group > label').on('click', (e) => {
const characteristic = e.htmlAttributes['data-characteristic'];
rollPower(characteristic);
});
// Recovery Simple Roll
$20('.recovery-input-group > label').on('click', (e) => {
rollRecovery();
calculateRecoverySpent();
});
// Heroic Resource Simple Roll
$20('.resource-input-group > label').on('click', (e) => {
console.log("click");
rollResource();
});
// Damage Surges Simple Roll
$20('.surges-input-group > label[data-characteristic="surges-damage"]').on('click', (e) => {
rollDamageSurges();
});
// Potency Surges Simple Roll
$20('.surges-input-group > label[data-characteristic="surges-potency"]').on('click', (e) => {
rollPotencySurges();
});
// Configuration map for feature sharing
// Maps the trigger event to its specific attribute names and translation key
const featureShareHandlers = {
'repeating_classfeatures:classfeatureshare': {
section: 'classfeatures',
field: 'classfeature',
transKey: 'class-features'
},
'repeating_ancestrytraits:ancfeatureshare': {
section: 'ancestrytraits',
field: 'ancestrytrait',
transKey: 'ancestry-traits'
},
'repeating_perks:perkfeatureshare': {
section: 'perks',
field: 'perk',
transKey: 'perks'
},
'repeating_titles:titlefeatureshare': {
section: 'titles',
field: 'title',
transKey: 'titles'
}
};
// Loop through the map and create a generic listener for each
for (const [trigger, config] of Object.entries(featureShareHandlers)) {
on(`clicked:${trigger}`, async (event) => {
// Dynamically build the attribute names from the config
const nameAttr = `repeating_${config.section}_${config.field}_name`;
const descAttr = `repeating_${config.section}_${config.field}_description`;
const attrs = await getAttrsAsync([nameAttr, descAttr]);
const subtitle = getTranslationByKey(config.transKey);
// Use bracket notation to access the attribute values dynamically
featureDisplay(attrs[nameAttr], subtitle, attrs[descAttr]);
});
}
/*// Looking for Power Roll for Ability Card
on("change:repeating_abilities:has_power_roll", function(event) {
const repeatingId = event.sourceAttribute.match(/repeating_abilities_[^_]+/)[0];
const sourceAttr = `${repeatingId}_has_power_roll`;
const targetAttr = `${repeatingId}_show_power_roll`;
getAttrs([sourceAttr], function(values) {
const show = values[sourceAttr] === "on" ? "1" : "0";
setAttrs({
[targetAttr]: show
});
});
});
*/
// Show full Growing Resource Table whenever Characteristics is opened
on("change:stats-minimize-checkbox", function(eventInfo) {
showGrowingResource();
});
function showGrowingResource() {
console.log('~~~ showGrowingResource ~~~');
getAttrs(["stats-minimize-checkbox","resource","level"], function(values) {
let isChecked = values["stats-minimize-checkbox"] === "on";
let resource = parseInt(values.resource)||0;
let level = parseInt(values.level)||0;
if (!isChecked) {
setAttrs({
"growingresource_show_2": "1",
"growingresource_show_4": "1",
"growingresource_show_6": "1",
"growingresource_show_8": "1",
"growingresource_show_10": "1",
"growingresource_show_12": "1",
});
}
else {
let show2 = resource >= 2 ? "1" : "0";
let show4 = resource >= 4 ? "1" : "0";
let show6 = resource >= 6 ? "1" : "0";
let show8 = (resource >= 8 && level >= 4) ? "1" : "0";
let show10 = (resource >= 10 && level >= 7) ? "1" : "0";
let show12 = (resource >= 12 && level >= 10) ? "1" : "0";
setAttrs({
"growingresource_show_2": show2,
"growingresource_show_4": show4,
"growingresource_show_6": show6,
"growingresource_show_8": show8,
"growingresource_show_10": show10,
"growingresource_show_12": show12,
});
}
});
}
// Growing Resource
on("change:resource change:level", function() {
calculateGrowingResource();
});
function calculateGrowingResource() {
console.log('~~~ calculateGrowingResource ~~~');
getAttrs(["stats-minimize-checkbox","resource", "level"], function(values) {
let isChecked = values["stats-minimize-checkbox"] === "on";
if (isChecked) {
let resource = parseInt(values.resource)||0;
let level = parseInt(values.level)||0;
let show2 = resource >= 2 ? "1" : "0";
let show4 = resource >= 4 ? "1" : "0";
let show6 = resource >= 6 ? "1" : "0";
let show8 = (resource >= 8 && level >= 4) ? "1" : "0";
let show10 = (resource >= 10 && level >= 7) ? "1" : "0";
let show12 = (resource >= 12 && level >= 10) ? "1" : "0";
setAttrs({
"growingresource_show_2": show2,
"growingresource_show_4": show4,
"growingresource_show_6": show6,
"growingresource_show_8": show8,
"growingresource_show_10": show10,
"growingresource_show_12": show12,
});
}
});
}
// Winded Calculation
on("change:stamina_max", function() {
calculateWinded();
});
// Surge and Potency Calculation
on("change:might change:agility change:reason change:intuition change:presence", function() {
calculateSurgePotency();
});
function calculateWinded() {
console.log('~~~ calculateWinded ~~~');
getAttrs(["stamina_max"], function(values) {
let staminaMax = parseInt(values.stamina_max)||0;
let winded = Math.floor(staminaMax/2);
let dead = winded * -1;
setAttrs({
"stamina_winded": winded,
"stamina_dead": dead,
});
});
}
function calculateSurgePotency() {
console.log('~~~ calculateSurgeDamage ~~~');
getAttrs(["might", "agility", "reason", "intuition", "presence"], function(attrs) {
let highest = 0;
for(const val of Object.values(attrs)) {
const num = parseInt(val) || 0;
highest = Math.max(highest, num);
}
setAttrs({
"surge_damage": highest,
"potency_strong": highest,
"potency_average": highest - 1,
"potency_weak": highest - 2,
});
});
}
// Start Combat Calculation
on("clicked:startcombat", function() {
calculateStartCombat();
});
function calculateStartCombat() {
console.log('~~~ calculateStartCombat ~~~');
getAttrs(["victories"], function(values) {
let victories = parseInt(values.victories)||0;
setAttrs({
"resource": victories
});
});
}
// End Combat Calculation
on("clicked:endcombat", function() {
calculateEndCombat();
});
function calculateEndCombat() {
console.log('~~~ calculateEndCombat ~~~');
getAttrs(["resource", "surges", "stamina_temporary"], function(values) {
let resource = parseInt(values.resource)||0;
let surges = parseInt(values.surges)||0;
let stamina_temporary = parseInt(values.stamina_temporary)||0;
setAttrs({
"resource": 0,
"surges": 0,
"stamina_temporary": 0
});
});
}
// Respite Calculation
on("clicked:respite", function() {
calculateRespite();
});
function calculateRespite() {
console.log('~~~ calculateRespite ~~~');
getAttrs(["stamina_max", "recoveries_max", "victories", "experience"], function(values) {
let stamina_max = parseInt(values.stamina_max)||0;
let recoveries_max = parseInt(values.recoveries_max)||0;
let victories = parseInt(values.victories)||0;
let experience = parseInt(values.experience)||0;
setAttrs({
"stamina": stamina_max,
"recoveries": recoveries_max,
"experience": experience + victories,
"victories": 0,
});
});
}
/**
** Import from Forge Steel Start
**/
/**
* Processes a feature to unpack its children if it's a container type.
* @param {object} feature The feature to process.
* @param {number} level The character's level.
* @returns {Array<object>|null} An array of child features, or null if it's not a container.
*/
function unpackFeature(feature, level) {
switch (feature.type) {
case 'Choice':
case 'Perk':
return feature.data.selected;
case 'Domain':
// A domain provides both a "DomainChoice" feature and its level-based features.
const selectedDomains = feature.data.selected;
const domainChoices = selectedDomains.map(d => ({ ...d, type: 'DomainChoice' }));
const domainFeatures = selectedDomains
.flatMap(d => d.featuresByLevel)
.filter(fbl => fbl.level <= level)
.flatMap(fbl => fbl.features);
return [...domainChoices, ...domainFeatures];
case 'Kit':
// A kit provides a "KitStats" object and its specific features.
return feature.data.selected.flatMap(kit => [
{ ...kit, type: 'KitStats', features: undefined }, // Main stats object
...kit.features, // Individual features from the kit
]);
case 'Multiple Features':
return feature.data.features;
default:
// This is not a container feature that needs unpacking.
return null;
}
}
/**
* Iteratively flattens a nested array of features into a single-level array.
* This is more robust than recursion as it avoids stack overflow errors.
* @param {Array<object>} initialFeatures The initial array of features.
* @param {number} level The character's level, for filtering level-dependent features.
* @returns {Array<object>} A new, flattened array of all active features.
*/
function getFeatures(forgesteelData) {
const { ancestry, career, class: characterClass, culture, features: rootFeatures } = forgesteelData;
const level = characterClass.level;
// Helper to extract features that are filtered by level.
const getFeaturesByLevel = (featureList) => featureList
.filter(item => item.level <= level)
.flatMap(item => item.features);
// 1. Collect all features from various sources into one initial list.
const initialFeatures = [
...rootFeatures,
...ancestry.features,
...career.features,
...getFeaturesByLevel(characterClass.featuresByLevel),
...characterClass.subclasses
.filter(sc => sc.selected)
.flatMap(sc => getFeaturesByLevel(sc.featuresByLevel)),
culture.environment,
culture.organization,
culture.upbringing,
].filter(Boolean); // Filter out any null or undefined entries.
// 2. Iteratively process the features to flatten them.
const flattenedFeatures = [];
const queue = [...initialFeatures]; // A work-list of features to process.
while (queue.length > 0) {
const currentFeature = queue.shift(); // Get the next feature to process.
const children = unpackFeature(currentFeature, level);
if (children) {
// If it was a container, add its children to the front of the queue to be processed next.
queue.unshift(...children);
} else {
// If it was a simple feature, add it to our final list.
flattenedFeatures.push(currentFeature);
}
}
console.log(flattenedFeatures);
return flattenedFeatures;
}
/**
* Removes all rows from a given repeating section.
* @param {string} sectionName The name of the section (e.g., 'abilities', 'modifiers').
*/
async function clearRepeatingSection(sectionName) {
try {
const rowIDs = await getSectionIDsAsync(sectionName);
// Create an array of promises for each row removal.
const removalPromises = rowIDs.map(id =>
removeRepeatingRow(`repeating_${sectionName}_${id}`)
);
// Execute all removals concurrently.
await Promise.all(removalPromises);
} catch (error) {
console.error(`Failed to clear repeating section "${sectionName}":`, error);
}
}
// Configuration mapping ability usage types to sheet section details.
const ABILITY_TYPE_MAP = {
'Main Action': { section: 'abilities', prefix: 'ability', type: 'main-action' },
'Triggered Action': { section: 'triggered', prefix: 'triggered', type: 'triggered-action' },
'Maneuver': { section: 'maneuvers', prefix: 'maneuver', type: 'maneuver' },
'Move Action': { section: 'moves', prefix: 'moves', type: 'move-action' },
'Villain Action': { section: 'npcabilities', prefix: 'ability', type: 'no-action' },
'default': { section: 'noaction', prefix: 'noaction', type: 'no-action' },
};
/**
* Processes ability data into a flat object for setting repeating section attributes.
* @param {object} abilityData The JSON object for a single ability.
* @returns {object} An object of attribute keys and values for setAttrs.
*/
function processAbility(abilityData) {
// 1. Determine ability type and get configuration.
const usage = abilityData.type.usage;
const config = ABILITY_TYPE_MAP[usage] || ABILITY_TYPE_MAP.default;
const id = generateRowID();
const cost = abilityData.cost === 'signature' ? abilityData.cost : parseInt(abilityData.cost) || 0;
let abilityTypePrefix = ""
if ((usage === "Triggered Action" || usage === "Maneuver") && abilityData.type.free === true) {
abilityTypePrefix = "free-"
}
let subtype = 'normal-ability';
if (cost === 'signature') {
subtype = 'signature-ability';
} else if (cost > 0) {
subtype = 'heroic-ability';
}
// 2. Extract and format primary data fields.
const distanceInfo = abilityData.distance?.[0];
let distance = '';
if (distanceInfo) {
const valueTwo = (parseInt(distanceInfo.value2) > 0) ? ` x ${distanceInfo.value2}` : '';
const within = (parseInt(distanceInfo.within) > 0) ? ` within ${distanceInfo.within}` : '';
const type = distanceInfo.type;
const valueOne = distanceInfo.value ? distanceInfo.value : '';
distance = (type === 'Melee' || type === 'Ranged' || type === 'Self') ? `${type} ${valueOne}`.trim() : `${valueOne}${valueTwo} ${type}${within}`;
}
const effect = abilityData.sections
.filter(s => s.type === 'text' || s.type === 'field')
.map(s => s.name ? `${s.name} ${s.value}: ${s.effect}` : s.text)
.join('\n');
// 3. Handle the conditional power roll section.
const powerRollSection = abilityData.sections.find(s => s.type === 'roll');
// 4. Assemble the final attribute object.
const attributes = {
[`repeating_${config.section}_${id}_${config.prefix}_name`]: abilityData.name,
[`repeating_${config.section}_${id}_${config.prefix}_description`]: abilityData.description,
[`repeating_${config.section}_${id}_${config.prefix}_type`]: `${abilityTypePrefix}${config.type}`,
[`repeating_${config.section}_${id}_${config.prefix}_subtype`]: subtype,
[`repeating_${config.section}_${id}_${config.prefix}_keywords`]: abilityData.keywords.join(', '),
[`repeating_${config.section}_${id}_${config.prefix}_trigger`]: abilityData.type.trigger ?? '',
[`repeating_${config.section}_${id}_${config.prefix}_distance`]: distance,
[`repeating_${config.section}_${id}_${config.prefix}_target`]: abilityData.target,
[`repeating_${config.section}_${id}_${config.prefix}_cost`]: parseInt(abilityData.cost) || 0,
[`repeating_${config.section}_${id}_${config.prefix}_effect`]: effect,
[`repeating_${config.section}_${id}_has_effect`]: effect ? 'on' : 0,
[`repeating_${config.section}_${id}_has_power_roll`]: powerRollSection ? 'on' : 0,
};
if (powerRollSection) {
Object.assign(attributes, {
[`repeating_${config.section}_${id}_${config.prefix}_characteristic`]: powerRollSection.roll.characteristic[0].toLowerCase(),
[`repeating_${config.section}_${id}_${config.prefix}_tier_1`]: powerRollSection.roll.tier1,
[`repeating_${config.section}_${id}_${config.prefix}_tier_2`]: powerRollSection.roll.tier2,
[`repeating_${config.section}_${id}_${config.prefix}_tier_3`]: powerRollSection.roll.tier3,
});
}
return attributes;
}
/**
* Extracts Class abilities from the import data.
* Constructs a list of ability ids and the pulls them from the full list in the import data.
*
* @param {Array<Object>} forgesteelData - The import data object.
* @param <String> abilityIds - The ability id to look for.
* @returns {Array<Object>} The ability data for the found ability.
*/
function extractClassAbility(forgesteelData, abilityId) {
const ability = forgesteelData.class.abilities.find(x => x.id === abilityId);
console.log(`Found Ability ${abilityId}`, ability);
return ability;
}
/**
* A collection of constant values used for filtering and identifying feature types.
* This prevents typos and centralizes key strings for easy updates.
*/
const FEATURE_TYPES = {
BONUS: 'Bonus',
KIT_STATS: 'KitStats',
SIZE: 'Size',
DOMAIN_CHOICE: 'DomainChoice',
SPEED: 'Speed',
DAMAGE_MODIFIER: 'Damage Modifier',
HEROIC_RESOURCE: 'Heroic Resource',
SKILL_CHOICE: 'Skill Choice',
LANGUAGE_CHOICE: 'Language Choice',
PERK: 'Perk',
TEXT: 'Text',
ABILITY: 'Ability',
CLASS_ABILITY: 'Class Ability',
CHARACTERISTIC_BONUS: 'Characteristic Bonus',
};
/**
* A list of all possible damage types in the system.
*/
const DAMAGE_TYPES = [
'Acid', 'Cold', 'Corruption', 'Fire', 'Holy', 'Lightning',
'Poison', 'Psychic', 'Sonic',
];
/**
* An object grouping skill names by their respective categories.
*/
const SKILL_GROUPS = {
crafting: ['Alchemy', 'Architecture', 'Blacksmithing', 'Carpentry', 'Cooking', 'Fletching', 'Forgery', 'Jewelry', 'Mechanics', 'Tailoring'],
exploration: ['Climb', 'Drive', 'Endurance', 'Gymnastics', 'Heal', 'Jump', 'Lift', 'Navigate', 'Ride', 'Swim'],
interpersonal: ['Brag', 'Empathize', 'Flirt', 'Gamble', 'Handle Animals', 'Interrogate', 'Intimidate', 'Lead', 'Lie', 'Music', 'Perform', 'Persuade', 'Read Person'],
intrigue: ['Alertness', 'Conceal Object', 'Disguise', 'Eavesdrop', 'Escape Artist', 'Hide', 'Pick Lock', 'Pick Pocket', 'Sabotage', 'Search', 'Sneak', 'Track'],
lore: ['Criminal Underworld', 'Culture', 'History', 'Magic', 'Monsters', 'Nature', 'Psionics', 'Religion', 'Rumors', 'Society', 'Strategy', 'Timescape'],
};
/**
* Calculates a combat statistic (like speed, disengage, stability) by summing its
* base value, bonuses from features, and the maximum value from equipped kits.
* @param {Array<Object>} features - The character's list of features.
* @param {string} statName - The name of the stat to calculate (e.g., 'Speed').
* @param {number} baseValue - The starting base value for the stat.
* @returns {number} The calculated total for the combat statistic.
*/
const calculateCombatStat = (features, statName, baseValue = 0) => {
// Sum bonuses from features of type 'Bonus' that match the stat name.
const bonusFromFeatures = features
.filter(f => f.type === FEATURE_TYPES.BONUS && f.data.field === statName)
.reduce((sum, f) => sum + f.data.value, 0);
// Find the highest bonus from all equipped kits for this stat.
const bonusFromKits = Math.max(
0, // Ensures we don't get -Infinity if there are no kits.
...features
.filter(f => f.type === FEATURE_TYPES.KIT_STATS)
.map(f => f[statName.toLowerCase()] || 0)
);
console.log(statName + ':' + baseValue + ' ' + bonusFromFeatures + ' ' + bonusFromKits);
return baseValue + bonusFromFeatures + bonusFromKits;
};
/**
** Calculates modified stat based on character features.
** @param {string} statName - The name of the stat being processed.
** @param {number} baseValue - The starting speed value.
** @param {number} level - The character's level.
** @param {Object} characteristics - Key-value pair used for characteristic based calculations.
** @param {Array} features - The array of feature objects.
**/
const calculateModifiedStat = (statName, baseValue, level, characteristics, features) => {
//Calculate the current echelon multiplier
const echelon = Math.ceil(level / 3);
// Find the bonuses from features
const bonusFromFeatures = features
.filter(f => f.type === FEATURE_TYPES.BONUS && f.data.field === statName)
.reduce((acc, feature) => {
const d = feature.data;
// Static base value
let featureSum = d.value;
// Level-based scaling - If there's already a value, we're dealing with Stamina so the per level value is only applied after the first level
featureSum ? featureSum += (d.valuePerLevel * (level - 1)) : featureSum += (d.valuePerLevel * level);
// Echelon-based scaling
featureSum += (d.valuePerEchelon * echelon);
// Characteristic-based scaling (e.g., Null Speed, Inescapable Wrath)
if (d.valueCharacteristics && d.valueCharacteristics.length > 0) {
d.valueCharacteristics.forEach(charName => {
const charValue = characteristics[charName] || 0;
featureSum += (charValue * d.valueCharacteristicMultiplier);
});
}
return acc + featureSum;
}, 0);
// Find the kit bonuses. This should eventually be replaced with something better.
const bonusFromKits = Math.max(
0, // Ensures we don't get -Infinity if there are no kits.
...features
.filter(f => f.type === FEATURE_TYPES.KIT_STATS)
.map(f => f[statName.toLowerCase()] || 0)
);
return baseValue + bonusFromFeatures + bonusFromKits;
};
/**
* Generates a comma-separated string of damage resistances or weaknesses.
* @param {Array<Object>} features - The character's list of features.
* @param {number} level - The character's current level.
* @param {string} modifierType - The type of modifier to look for ('Immunity' or 'Weakness').
* @returns {string} A formatted string of damage modifiers (e.g., "Fire 5, Cold 2").
*/
const getDamageModifiers = (features, level, modifierType) => {
const damageModifiers = features
.filter(f => f.type === FEATURE_TYPES.DAMAGE_MODIFIER)
.flatMap(f => f.data.modifiers);
return DAMAGE_TYPES
.map(damageType => {
const amount = damageModifiers
.filter(m => m.damageType === damageType && m.type === modifierType)
.reduce((sum, m) => sum + (m.value + ((level - 1) * m.valuePerLevel)), 0);
return { damageType, amount };
})
.filter(({ amount }) => amount > 0) // Only include modifiers with a value.
.map(({ damageType, amount }) => `${damageType} ${amount}`)
.join(', ');
};
/**
* Calculates characteristics by summing its base value and bonuses
* from features.
* @param {Array<Object>} features - The character's list of features.
* @param {string} statName - The name of the characteristic to calculate (e.g., 'Agility').
* @param {number} baseValue - The starting base value for the characteristic.
* @returns {number} The calculated total for the characteristic.
*/
const calculateCharacteristic = (features, statName, baseValue = 0) => {
// Sum bonuses from features of type 'Bonus' that match the stat name.
const bonusFromFeatures = features
.filter(f => f.type === FEATURE_TYPES.CHARACTERISTIC_BONUS && f.data.characteristic === statName)
.reduce((sum, f) => sum + f.data.value, 0);
return baseValue + bonusFromFeatures;
};
/**
* Extracts and joins selected skills from a specific skill group.
* @param {Array<Object>} features - The character's list of features.
* @param {Array<string>} skillGroup - An array of skill names to filter by.
* @returns {string} A comma-separated string of the selected skills in that group.
*/
const getSkillsByGroup = (features, skillGroup) => {
return features
.filter(f => f.type === FEATURE_TYPES.SKILL_CHOICE)
.flatMap(f => f.data.selected)
.filter(skill => skillGroup.includes(skill))
.join(', ');
};
const extractAncestryFeatures = (data) => {
const features = data.features;
let result = [];
features.forEach(feature => {
// Handle nested features
if (feature.type === "Multiple Features") {
feature.data.features.forEach(subFeature => {
// We only want the text-based description
if (subFeature.type === "Text") {
result.push({
id: subFeature.id,
name: subFeature.name,
description: subFeature.description
});
}
});
}
// Handle the selected traits
if (feature.type === "Choice" && feature.data.selected) {
feature.data.selected.forEach(selection => {
result.push({
id: selection.id,
name: selection.name,
description: selection.description
});
});
}
});
console.log(result);
return result;
};
// --- Main Event Listener ---
on('clicked:import', async () => {
try {
// 1. DATA RETRIEVAL & PARSING
// ---------------------------
// Get the raw JSON string from the character sheet attributes.
const { forgesteel_json } = await getAttrsAsync(['forgesteel_json']);
if (!forgesteel_json) {
console.warn('Import data is empty. Aborting.');
return;
}
const data = JSON.parse(forgesteel_json);
const {
name: character_name,
ancestry,
class: characterClass,
career,
state,
culture,
complication,
} = data;
// Collate all features from different sources into one array for easier processing.
const allFeatures = getFeatures(data);
const level = characterClass.level;
// 2. CORE CHARACTER INFORMATION
// -----------------------------
const subclass = [
...characterClass.subclasses.filter(sc => sc.selected).map(sc => sc.name),
...allFeatures.filter(f => f.type === FEATURE_TYPES.DOMAIN_CHOICE).map(f => f.name),
].join(', ');
// Primary characteristics (attributes).
const baseCharacteristics = characterClass.characteristics.reduce((acc,item) => { acc[item.characteristic] = item.value; return acc;}, {});
const might = calculateCharacteristic(allFeatures, 'Might', baseCharacteristics.Might);
const agility = calculateCharacteristic(allFeatures, 'Agility', baseCharacteristics.Agility);
const reason = calculateCharacteristic(allFeatures, 'Reason', baseCharacteristics.Reason);
const intuition = calculateCharacteristic(allFeatures, 'Intuition', baseCharacteristics.Intuition);
const presence = calculateCharacteristic(allFeatures, 'Presence', baseCharacteristics.Presence);
const characteristics = {
Might: might,
Agility: agility,
Reason: reason,
Intuition: intuition,
Presence: presence,
};
// 3. DERIVED & COMBAT STATISTICS
// ------------------------------
//Potency can be calculated by the helper function later
//const potency_strong = Math.max(might, agility, reason, intuition, presence);
const sizeObject = allFeatures.find(f => f.type === FEATURE_TYPES.SIZE)?.data.size ?? { value: 1, mod: 'M' };
const size = `${sizeObject.value}${sizeObject.mod ?? ''}`;
const baseSpeed = allFeatures.find(f => f.type === FEATURE_TYPES.SPEED)?.data.speed ?? 5;
const speed = calculateModifiedStat('Speed', baseSpeed, level, characteristics ,allFeatures);
const disengage = calculateModifiedStat('Disengage', 1, level, characteristics ,allFeatures);
const stability = calculateCombatStat(allFeatures, 'Stability', 0);
const wealth = calculateCombatStat(allFeatures, 'Wealth', state.wealth);
const renown = calculateCombatStat(allFeatures, 'Renown', state.renown);
// Stamina
const stamina_max = calculateModifiedStat('Stamina', 0, level, characteristics ,allFeatures);
const stamina = parseInt(stamina_max) - parseInt(state.staminaDamage);
// Recoveries
const recoveries_max = allFeatures
.filter(f => f.type === FEATURE_TYPES.BONUS && f.data.field === 'Recoveries')
.reduce((sum, f) => sum + f.data.value, 0);
const recoveries = parseInt(recoveries_max) - parseInt(state.recoveriesUsed)
const immunity = getDamageModifiers(allFeatures, level, 'Immunity');
const weakness = getDamageModifiers(allFeatures, level, 'Weakness');
const resource_name = allFeatures.find(f => f.type === FEATURE_TYPES.HEROIC_RESOURCE)?.name ?? '';
const resource = allFeatures.find(f => f.type === FEATURE_TYPES.HEROIC_RESOURCE)?.value ?? '';
const resource_amount = allFeatures
.find(f => f.type === FEATURE_TYPES.HEROIC_RESOURCE).data.gains
.find(f => f.tag === "start").value ?? '1d3';
const resource_description = allFeatures
.find(f => f.type === FEATURE_TYPES.HEROIC_RESOURCE).data.gains
.map(i => `+${i.value}: ${i.trigger}`)
.join('\n');
// 4. BIOGRAPHICAL INFORMATION
// ---------------------------
let careertext = '';
for (feature of career.features) {
if (feature.type.includes("Choice")) {
careertext = careertext + `${feature.name}: ${feature.data.selected.join(', ')}\n`;
} else if (feature.type === "Perk") {
careertext = careertext + `${feature.name}: ${feature.data.selected[0].name}\n`;
} else {
careertext = careertext + `${feature.name}: +${feature.data.value}\n`;
}
}
const career_benefit = careertext;
const career_incident = career.incitingIncidents.selected ? `${career.incitingIncidents.selected.name}\n${career.incitingIncidents.selected.description}` : '';
// 5. SKILLS & LANGUAGES
// ---------------------
const skills_crafting = getSkillsByGroup(allFeatures, SKILL_GROUPS.crafting);
const skills_exploration = getSkillsByGroup(allFeatures, SKILL_GROUPS.exploration);
const skills_interpersonal = getSkillsByGroup(allFeatures, SKILL_GROUPS.interpersonal);
const skills_intrigue = getSkillsByGroup(allFeatures, SKILL_GROUPS.intrigue);
const skills_lore = getSkillsByGroup(allFeatures, SKILL_GROUPS.lore);
const languages = [
...culture.languages,
...allFeatures.filter(f => f.type === FEATURE_TYPES.LANGUAGE_CHOICE).flatMap(f => f.data.selected),
].join(', ');
// 6. REPEATING SECTIONS (Kits, Perks, Abilities, etc.)
// ----------------------------------------------------
// Process kits into a format suitable for setAttrs.
const kits = allFeatures
.filter(f => f.type === FEATURE_TYPES.KIT_STATS)
.reduce((acc, kit) => {
acc['modifier_name'] = !acc['modifier_name'] ? kit.name : acc['modifier_name'] + ' | ' + kit.name;
acc['kit_weapon'] = !acc['kit_weapon'] ? kit.weapon.join(', ') : acc['kit_weapon'] + ', ' + kit.weapon.join(', ');
acc['kit_armor'] = !acc['kit_armor'] ? kit.armor.join(', ') : acc['kit_armor'] + ', ' + kit.armor.join(', ');
acc['kit_speed'] = Math.max(acc['kit_speed'] ?? 0, parseInt(kit.speed));
acc['kit_disengage'] = Math.max(acc['kit_disengage'] ?? 0, parseInt(kit.disengage));
acc['kit_stamina'] = Math.max(acc['kit_stamina'] ?? 0, parseInt(kit.stamina));
acc['kit_stability'] = Math.max(acc['kit_stability'] ?? 0, parseInt(kit.stability));
acc['kit_melee_distance'] = Math.max(acc['kit_melee_distance'] ?? 0, parseInt(kit.meleeDistance));
acc['kit_ranged_distance'] = Math.max(acc['kit_ranged_distance'] ?? 0, parseInt(kit.rangedDistance));
if (kit.meleeDamage) {
acc['kit_melee_damage_1'] = kit.meleeDamage.tier1;
acc['kit_melee_damage_2'] = kit.meleeDamage.tier2;
acc['kit_melee_damage_3'] = kit.meleeDamage.tier3;
}
if (kit.rangedDamage) {
acc['kit_ranged_damage_1'] = kit.rangedDamage.tier1;
acc['kit_ranged_damage_2'] = kit.rangedDamage.tier2;
acc['kit_ranged_damage_3'] = kit.rangedDamage.tier3;
}
acc['modifier_description'] = !acc['modifier_description'] ? kit.description : acc['modifier_description'] + '\n\n' + kit.description;
return acc;
}, {});
// Process perks, ancestry traits, features, and abilities.
const perks = allFeatures
.filter(f => f.id.startsWith('perk-') && f.type === FEATURE_TYPES.TEXT)
.reduce((acc, f) => {
const id = generateRowID();
acc[`repeating_perks_${id}_perk_name`] = f.name;
acc[`repeating_perks_${id}_perk_description`] = f.description;
return acc; }, {});
const ancestryFeatures = extractAncestryFeatures(data.ancestry)
.filter(f => f.description)
.reduce((acc, f) => {
const id = generateRowID();
acc[`repeating_ancestrytraits_${id}_ancestrytrait_name`] = f.name;
acc[`repeating_ancestrytraits_${id}_ancestrytrait_description`] = f.description;
return acc;
}, {});
const classFeatures = allFeatures
.filter(f => f.type === FEATURE_TYPES.TEXT && (!f.id.startsWith('perk-') && !f.id.startsWith(ancestry.name.toLowerCase())))
.reduce((acc, f) => {
const id = generateRowID();
acc[`repeating_classfeatures_${id}_classfeature_name`] = f.name;
acc[`repeating_classfeatures_${id}_classfeature_description`] = f.description;
return acc;
}, {});
const abilityFeatures = allFeatures
.filter(f => f.type === FEATURE_TYPES.ABILITY)
.reduce((acc, f) => ({ ...acc, ...processAbility(f.data.ability) }), {});
const classAbilities = allFeatures
.filter(f => f.type === FEATURE_TYPES.CLASS_ABILITY)
.flatMap(f => f.data.selectedIDs)
.reduce((acc, id) => {
const abilityData = extractClassAbility(data, id);
return { ...acc, ...processAbility(abilityData) };
}, {});
// 7. FINAL ASSEMBLY & ATTRIBUTE SETTING
// -------------------------------------
// Consolidate all processed data into a single object for setAttrs.
const newAttrs = {
forgesteel_json: '', // Clear the import field.
// Core Info
character_name,
ancestry: ancestry.name,
class: characterClass.name,
career: career.name,
subclass,
victories: state.victories,
level,
wealth,
renown,
experience: state.xp,
// Characteristics
might,
agility,
reason,
intuition,
presence,
// Derived Stats
//potency_strong,
//potency_average: potency_strong - 1,
//potency_weak: potency_strong - 2,
size,
speed,
disengage,
stability,
stamina,
stamina_max,
stamina_winded: Math.floor(stamina_max / 2),
stamina_dead: -Math.floor(stamina_max / 2),
recoveries,
recoveries_max,
recovery_amount: Math.floor(stamina_max / 3),
surges: state.surges,
immunity,
weakness,
resource,
resource_name,
resource_amount,
resource_description,
//surge_damage: potency_strong,
// Biography
career_benefit,
career_incident,
complication: complication?.name ?? '',
complication_benefit: complication?.features[0]?.description ?? '',
complication_drawback: complication?.features[1]?.description ?? '',
culture_environment: culture.environment.name,
culture_environment_description: culture.environment.description,
culture_organization: culture.organization.name,
culture_organization_description: culture.organization.description,
culture_upbringing: culture.upbringing.name,
culture_upbringing_description: culture.upbringing.description,
// Skills & Languages
skills_crafting,
skills_exploration,
skills_interpersonal,
skills_intrigue,
skills_lore,
languages,
// Spread in kits and repeating section data
...kits,
...perks,
...ancestryFeatures,
...classFeatures,
...abilityFeatures,
...classAbilities,
};
// Clear existing repeating sections before adding new data.
await Promise.all([
clearRepeatingSection('modifiers'),
clearRepeatingSection('perks'),
clearRepeatingSection('ancestrytraits'),
clearRepeatingSection('classfeatures'),
clearRepeatingSection('abilities'),
clearRepeatingSection('noaction'),
clearRepeatingSection('maneuvers'),
clearRepeatingSection('triggered'),
clearRepeatingSection('moves'),
]);
// Set the new attributes on the character sheet.
await setAttrsAsync(newAttrs);
//Last bit of character sheet setup
calculateWinded();
calculateSurgePotency();
console.log('Character import successful!', newAttrs);
} catch (error) {
console.error("Failed to import character data. Please ensure the JSON is valid.", error);
}
});
/* Monster Import */
on('clicked:importmonster', async () => {
try {
// 1. DATA RETRIEVAL & PARSING
// ---------------------------
// Get the raw JSON string from the character sheet attributes.
const { forgesteel_json } = await getAttrsAsync(['forgesteel_json']);
if (!forgesteel_json) {
console.warn('Import data is empty. Aborting.');
return;
}
const data = JSON.parse(forgesteel_json);
// 2. CORE MONSTER INFORMATION
// -----------------------------
// Primary characteristics (attributes).
const findCharacteristic = (name) => data.characteristics.find(c => c.characteristic === name)?.value || 0;
const might = findCharacteristic('Might');
const agility = findCharacteristic('Agility');
const reason = findCharacteristic('Reason');
const intuition = findCharacteristic('Intuition');
const presence = findCharacteristic('Presence');
// Keywords and Role
const keywords = data.keywords.join(', ');
const roletype = data.role.type === 'No Role' ? '' : ` ${data.role.type}`;
const role = `${data.role.organization}${roletype}`;
// Size, Speed and Movement Types
const sizeObject = data.size ?? { value: 1, mod: 'M' };
const size = `${sizeObject.value}${sizeObject.mod ?? ''}`;
const speed = data.speed.value ?? 5;
const movement = data.speed.modes.join(', ') ?? '';
// Stability and Stamina
const stability = data.stability ?? 0;
const stamina = data.stamina ?? 0;
// Immunities and Weaknesses
const immunity = getDamageModifiers(data.features, 1, 'Immunity');
const weakness = getDamageModifiers(data.features, 1, 'Weakness');
// EV, With Captain, and Free Strike Damage
const encountervalue = data.encounterValue;
const withcaptain = data.withCaptain;
const freestrike = data.freeStrikeDamage;
// 3. REPEATING ABILITIES
// ----------------------------------------------------
const traits = data.features
.filter(f => f.type === FEATURE_TYPES.TEXT)
.reduce((acc, f) => {
const id = generateRowID();
if (f.name === 'Solo Monster' || f.name === 'Ajax') {
const parts = f.description.trim().split('\n');
const firstPart = parts[0].replace('* **', '').split('** ');
const soloOne = firstPart[0];
const soloOneText = firstPart[1];
const secondPart = parts[1].replace('* **', '').split('** ');
const soloTwo = secondPart[0];
const soloTwoText = secondPart[1];
acc[`repeating_npcabilities_${id}_ability_name`] = f.name;
acc[`repeating_npcabilities_${id}_ability_subtype`] = 'solo-monster';
acc[`repeating_npcabilities_${id}_ability_solo_1_name`] = soloOne;
acc[`repeating_npcabilities_${id}_ability_solo_1_text`] = soloOneText;
acc[`repeating_npcabilities_${id}_ability_solo_2_name`] = soloTwo;
acc[`repeating_npcabilities_${id}_ability_solo_2_text`] = soloTwoText;
} else {
acc[`repeating_npcabilities_${id}_ability_name`] = f.name;
acc[`repeating_npcabilities_${id}_ability_subtype`] = 'trait';
acc[`repeating_npcabilities_${id}_ability_trait`] = f.description;
}
return acc;
}, {});
const abilityFeatures = data.features
.filter(f => f.type === FEATURE_TYPES.ABILITY)
.reduce((acc, f) => ({ ...acc, ...processMonsterAbility(f.data.ability) }), {});
// 4. FINAL ASSEMBLY & ATTRIBUTE SETTING
// -------------------------------------
// Consolidate all processed data into a single object for setAttrs.
const newAttrs = {
forgesteel_json: '', // Clear the import field.
is_npc: 'on',
// Core Info
character_name: data.name,
level: data.level,
npc_role: role,
npc_keywords: keywords,
npc_EV: encountervalue,
// Stats
size,
speed,
stamina,
stability: stability,
npc_freestrike: freestrike,
immunity,
weakness,
npc_movement: movement,
npc_with_captain: withcaptain,
might,
agility,
reason,
intuition,
presence,
// Spread in repeating section data
...traits,
...abilityFeatures,
};
// Clear existing repeating sections before adding new data.
await clearRepeatingSection('npcabilities');
// Set the new attributes on the character sheet.
await setAttrsAsync(newAttrs);
console.log('Monster import successful!', newAttrs);
} catch (error) {
console.error("Failed to import monster data. Please ensure the JSON is valid.", error);
}
});
/**
* Processes ability data into a flat object for setting repeating section attributes.
* @param {object} abilityData The JSON object for a single ability.
* @returns {object} An object of attribute keys and values for setAttrs.
*/
function processMonsterAbility(abilityData) {
// 1. Determine ability type and get configuration.
const usage = ABILITY_TYPE_MAP[abilityData.type.usage].type;
const cost = abilityData.cost === 'signature' ? abilityData.cost : parseInt(abilityData.cost) || 0;
let subtype = 'normal-ability';
if (abilityData.type.usage === 'Villain Action') {
subtype = 'villain-ability';
} else if (cost === 'signature') {
subtype = 'signature-ability';
} else if (cost > 0) {
subtype = 'malice-ability';
}
let abilityTypePrefix = ""
if ((abilityData.type.usage === "Triggered Action" || abilityData.type.usage === "Maneuver") && abilityData.type.free === true) {
abilityTypePrefix = "free-"
}
const id = generateRowID();
// 2. Extract and format primary data fields.
const distanceInfo = abilityData.distance?.[0];
const distance = distanceInfo ? `${distanceInfo.type} ${distanceInfo.value || ''}`.trim() : '';
const malice = abilityData.sections.find(s => s.type === 'field' && (s.name === 'Spend' || s.name === 'Malice'));
const effect = abilityData.sections
.filter(s => s.type === 'text' && !s.text.startsWith('**Special:**'))
.map(s => s.name ? `${s.name} ${s.value}: ${s.effect}` : s.text)
.join('\n');
const special = abilityData.sections.find(s => s.type === 'text' && s.text.startsWith('**Special:**'));
// 3. Handle the conditional power roll section.
const powerRollSection = abilityData.sections.find(s => s.type === 'roll');
// 4. Assemble the final attribute object.
const attributes = {
[`repeating_npcabilities_${id}_ability_name`]: abilityData.name,
[`repeating_npcabilities_${id}_ability_description`]: abilityData.description,
[`repeating_npcabilities_${id}_ability_type`]: `${abilityTypePrefix}${usage}`,
[`repeating_npcabilities_${id}_ability_subtype`]: subtype,
[`repeating_npcabilities_${id}_ability_keywords`]: abilityData.keywords.join(', '),
[`repeating_npcabilities_${id}_ability_trigger`]: abilityData.type.trigger ?? '',
[`repeating_npcabilities_${id}_ability_distance`]: distance,
[`repeating_npcabilities_${id}_ability_target`]: abilityData.target,
[`repeating_npcabilities_${id}_ability_malice_cost`]: cost,
[`repeating_npcabilities_${id}_has_effect`]: effect ? 'on' : 0,
[`repeating_npcabilities_${id}_ability_effect`]: effect,
[`repeating_npcabilities_${id}_has_power_roll`]: powerRollSection ? 'on' : 0,
};
if (powerRollSection) {
Object.assign(attributes, {
[`repeating_npcabilities_${id}_ability_characteristic`]: powerRollSection.roll.bonus,
[`repeating_npcabilities_${id}_ability_tier_1`]: powerRollSection.roll.tier1,
[`repeating_npcabilities_${id}_ability_tier_2`]: powerRollSection.roll.tier2,
[`repeating_npcabilities_${id}_ability_tier_3`]: powerRollSection.roll.tier3,
});
}
if (special) {
Object.assign(attributes, {
[`repeating_npcabilities_${id}_has_special`]: 'on',
[`repeating_npcabilities_${id}_ability_special`]: special.text.replace('**Special:** ', ''),
});
}
if (malice) {
Object.assign(attributes, {
[`repeating_npcabilities_${id}_has_malice`]: 'on',
[`repeating_npcabilities_${id}_ability_cost`]: malice.value,
[`repeating_npcabilities_${id}_ability_malice`]: malice.effect,
});
}
return attributes;
}
/**
** import end
**/
/**
** Versioning
**/
/**
** Upgrades the sheet to changes present in version 1
** - Ensures 'has_power_roll' and new 'has_effect' checkboxes are appropriately changed
**/
const upgradeToV1 = () => {
console.log('~~~ upgradeToV1 ~~~');
const abilitySections = {
'repeating_abilities': 'ability',
'repeating_maneuvers': 'maneuver',
'repeating_triggered': 'triggered',
'repeating_noaction': 'noaction',
'repeating_moves': 'moves',
};
const updateEffectsAndPowerRoll = (section, prefix) => {
console.log('~~~ updateEffectsAndPowerRoll ' + section + ' ~~~');
getSectionIDs(section, function(ids) {
if (ids.length === 0) {
return;
}
let effectArray = [];
let defaultValue = 'on';
let fieldArray = [];
let update = {};
for (id of ids) {
fieldArray.push(section + '_' + id + '_' + prefix + '_effect');
fieldArray.push(section + '_' + id + '_' + prefix + '_cost');
let propName = section + '_' + id + '_has_power_roll';
fieldArray.push(propName);
update[propName] = defaultValue;
}
getAttrs(fieldArray, function(values) {
for(var i = 0; i < ids.length; i++) {
update[section + '_' + ids[i] + '_has_effect'] = values[section + '_' + ids[i] + '_' + prefix + '_effect'] ? 'on' : '';
update[section + '_' + ids[i] + '_' + prefix + '_subtype'] = values[section + '_' + ids[i] + '_' + prefix + '_cost'] ? 'heroic-ability' : 'normal-ability';
}
Object.assign(update, values);
setAttrs(update);
});
});
};
for (const [section, prefix] of Object.entries(abilitySections)) {
updateEffectsAndPowerRoll(section, prefix);
}
};
/**
** Converts the old repeating kits to the new single static one.
** Updated in v1.2
**/
const convertRepeatingKits = () => {
console.log('~~~ convertRepeatingKits ~~~');
getSectionIDs('repeating_modifiers', function(ids) {
if (ids.length === 0) {
return;
}
let fieldArray = [];
let newAttrs = {};
// Get the list of fields for retrieval
for (id of ids) {
fieldArray.push('repeating_modifiers_' + id + '_modifier_name');
fieldArray.push('repeating_modifiers_' + id + '_kit_weapon');
fieldArray.push('repeating_modifiers_' + id + '_kit_armor');
fieldArray.push('repeating_modifiers_' + id + '_kit_speed');
fieldArray.push('repeating_modifiers_' + id + '_kit_disengage');
fieldArray.push('repeating_modifiers_' + id + '_kit_stamina');
fieldArray.push('repeating_modifiers_' + id + '_kit_stability');
fieldArray.push('repeating_modifiers_' + id + '_kit_melee_distance');
fieldArray.push('repeating_modifiers_' + id + '_kit_ranged_distance');
fieldArray.push('repeating_modifiers_' + id + '_kit_melee_damage_1');
fieldArray.push('repeating_modifiers_' + id + '_kit_melee_damage_2');
fieldArray.push('repeating_modifiers_' + id + '_kit_melee_damage_3');
fieldArray.push('repeating_modifiers_' + id + '_kit_ranged_damage_1');
fieldArray.push('repeating_modifiers_' + id + '_kit_ranged_damage_2');
fieldArray.push('repeating_modifiers_' + id + '_kit_ranged_damage_3');
fieldArray.push('repeating_modifiers_' + id + '_modifier_description');
}
getAttrs(fieldArray, function(values) {
//Cycle through the ids to merge the repeating elements into the single entry
for(var i = 0; i < ids.length; i++) {
const name = values['repeating_modifiers_' + ids[i] +'_modifier_name'] || '';
const weapon = values['repeating_modifiers_' + ids[i] +'_kit_weapon'] || '';
const armor = values['repeating_modifiers_' + ids[i] +'_kit_armor'] || '';
const speed = values['repeating_modifiers_' + ids[i] +'_kit_speed'] || '';
const disengage = values['repeating_modifiers_' + ids[i] +'_kit_disengage'] || '';
const stamina = values['repeating_modifiers_' + ids[i] +'_kit_stamina'] || '';
const stability = values['repeating_modifiers_' + ids[i] +'_kit_stability'] || '';
const meleeDistance = values['repeating_modifiers_' + ids[i] +'_kit_melee_distance'] || '';
const rangedDistance = values['repeating_modifiers_' + ids[i] +'_kit_ranged_distance'] || '';
const meleeTierOne = values['repeating_modifiers_' + ids[i] +'_kit_melee_damage_1'] || '';
const meleeTierTwo = values['repeating_modifiers_' + ids[i] +'_kit_melee_damage_2'] || '';
const meleeTierThree = values['repeating_modifiers_' + ids[i] +'_kit_melee_damage_3'] || '';
const rangedTierOne = values['repeating_modifiers_' + ids[i] +'_kit_ranged_damage_1'] || '';
const rangedTierTwo = values['repeating_modifiers_' + ids[i] +'_kit_ranged_damage_2'] || '';
const rangedTierThree = values['repeating_modifiers_' + ids[i] +'_kit_ranged_damage_3'] || '';
const description = values['repeating_modifiers_' + ids[i] +'_modifier_description'] || '';
newAttrs['modifier_name'] = !newAttrs['modifier_name'] ? name : newAttrs['modifier_name'] + ' | ' + name;
newAttrs['kit_weapon'] = !newAttrs['kit_weapon'] ? weapon : newAttrs['kit_weapon'] + ', ' + weapon;
newAttrs['kit_armor'] = !newAttrs['kit_armor'] ? armor: newAttrs['kit_armor'] + ', ' + armor;
newAttrs['kit_speed'] = Math.max(newAttrs['kit_speed'] ?? 0, parseInt(speed));
newAttrs['kit_disengage'] = Math.max(newAttrs['kit_disengage'] ?? 0, parseInt(disengage));
newAttrs['kit_stamina'] = Math.max(newAttrs['kit_stamina'] ?? 0, parseInt(stamina));
newAttrs['kit_stability'] = Math.max(newAttrs['kit_stability'] ?? 0, parseInt(stability));
newAttrs['kit_melee_distance'] = Math.max(newAttrs['kit_melee_distance'] ?? 0, parseInt(meleeDistance));
newAttrs['kit_ranged_distance'] = Math.max(newAttrs['kit_ranged_distance'] ?? 0, parseInt(rangedDistance));
newAttrs['kit_melee_damage_1'] = !newAttrs['kit_melee_damage_1'] ? meleeTierOne : newAttrs['kit_melee_damage_1'];
newAttrs['kit_melee_damage_2'] = !newAttrs['kit_melee_damage_2'] ? meleeTierTwo : newAttrs['kit_melee_damage_2'];
newAttrs['kit_melee_damage_3'] = !newAttrs['kit_melee_damage_3'] ? meleeTierThree : newAttrs['kit_melee_damage_3'];
newAttrs['kit_ranged_damage_1'] = !newAttrs['kit_ranged_damage_1'] ? rangedTierOne : newAttrs['kit_ranged_damage_1'];
newAttrs['kit_ranged_damage_2'] = !newAttrs['kit_ranged_damage_2'] ? rangedTierTwo : newAttrs['kit_ranged_damage_2'];
newAttrs['kit_ranged_damage_3'] = !newAttrs['kit_ranged_damage_3'] ? rangedTierThree : newAttrs['kit_ranged_damage_3'];
newAttrs['modifier_description'] = !newAttrs['modifier_description'] ? description : newAttrs['modifier_description'] + '\n\n' + description;
}
setAttrs(newAttrs);
clearRepeatingSection('modifiers');
});
});
}
const setNewOptions = () => {
console.log('~~~ setNewOptions ~~~');
const fieldArray = ['options_calculate_damage'];
getAttrs(fieldArray, function(values) {
let newOptions = {
options_calculate_damage: '1',
}
setAttrs(newOptions);
});
}
on('sheet:opened', async () => {
console.log('****** Draw Steel Sheet Opened ******\nLatest Version:', version);
const v = await getAttrs(['sheet_version'], function (v) {
if (!v.sheet_version || v.sheet_version != version) {
console.log('****** updating to version: ' + version + ' ******');
//Check Effect and Power Roll Checkboxes as needed (v1.0)
upgradeToV1();
// Convert repeating Modifiers (v1.2)
convertRepeatingKits();
// Set new Damage Calculation option (v1.3)
setNewOptions();
//Sets the sheet's new version
setAttrs({
sheet_version: version,
});
}
});
// sheet calculations
calculateWinded();
calculateSurgePotency();
});
</script>