mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 11:42:29 +00:00
6259 lines
348 KiB
HTML
6259 lines
348 KiB
HTML
<input name="attr_version" type="hidden" value="4.52"/>
|
|
<input class="sheet_type" name="attr_sheet_type" type="hidden" value="pc"/>
|
|
<input class="character-type" name="attr_flag_special" type="hidden" value="mundane"/>
|
|
<div class="pc">
|
|
<div class="tabs">
|
|
<img alt="Shadowrun black and metallic logo" src="https://raw.githubusercontent.com/clevett/Roll20-character-sheet-Shadowrun-5th-Edition/main/src/imgs/ShadowrunLogo.png"/>
|
|
<h1 data-i18n="character">Character</h1>
|
|
<label data-i18n-title="character name" title="character name">
|
|
<input type="text" name="attr_character_name" placeholder="Character name" title="@{character_name}"/>
|
|
</label>
|
|
<h1 data-i18n="player">Player</h1>
|
|
<label data-i18n-title="player name" title="player name">
|
|
<input type="text" name="attr_player_name" placeholder="Player name" title="@{player_name}"/>
|
|
</label>
|
|
<h2 data-i18n-title="/w GM">/w GM</h2>
|
|
<label class="switch" data-i18n-title="whisper rolls to gm" title="whisper rolls to gm">
|
|
<input class="whisper-toggle" name="attr_gm_toggle" type="checkbox" value="/w gm"/>
|
|
<span class="slider"></span>
|
|
</label>
|
|
<h2 data-i18n-title="wounds">wounds</h2>
|
|
<label class="switch" data-i18n-title="wounds" title="wounds">
|
|
<input class="whisper-toggle" name="attr_wounds_toggle" type="checkbox" value="@{wounds}"/>
|
|
<span class="slider"></span>
|
|
</label>
|
|
<h2 data-i18n-title="modifiers">modifiers</h2>
|
|
<label class="switch" data-i18n-title="modifiers" title="modifiers">
|
|
<input class="whisper-toggle" name="attr_modifiers_toggle" type="checkbox" value="?{Modifiers +/-|0}"/>
|
|
<span class="slider"></span>
|
|
</label>
|
|
<h2 data-i18n-title="edge">edge</h2>
|
|
<label class="switch" data-i18n-title="edge" title="edge">
|
|
<input class="whisper-toggle" name="attr_edge_toggle" type="checkbox" value="@{edge}"/>
|
|
<span class="slider"></span>
|
|
</label>
|
|
<button name="d6" title="Roll D6s" type="roll" value="@{gm_toggle} &{template:rolls}{{header=^{d6}}}{{base=^{d6}}}{{dice=[[(?{d6s|0}d6>5@{explode_toggle})]]}}">L</button>
|
|
<input name="attr_tab" type="hidden" value="options"/>
|
|
<button class="pictos" name="act_tab_options" title="@{tab}" type="action">y</button>
|
|
<button data-i18n="core" name="act_tab_core" type="action" title="@{tab}">core</button>
|
|
<button data-i18n="arms" name="act_tab_arms" type="action" title="@{tab}">arms</button>
|
|
<button data-i18n="augs" name="act_tab_augs" type="action" title="@{tab}">augs</button>
|
|
<button data-i18n="gear" name="act_tab_gear" type="action" title="@{tab}">gear</button>
|
|
<button data-i18n="magic" name="act_tab_magic" type="action" title="@{tab}">magic</button>
|
|
<button data-i18n="matrix" name="act_tab_matrix" type="action" title="@{tab}">matrix</button>
|
|
<button data-i18n="social" name="act_tab_social" type="action" title="@{tab}">social</button>
|
|
<button data-i18n="vehicle" name="act_tab_vehicle" type="action" title="@{tab}">vehicle</button>
|
|
</div>
|
|
<input class="options_toggle" name="attr_tab" type="hidden" value="options"/>
|
|
<div class="static pc-col">
|
|
<div class="pc-row info">
|
|
<div class="header">
|
|
<div class="triangle"></div>
|
|
<h1 data-i18n="personal"></h1>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box small-box">
|
|
<div class="grid row-long grid-2autocolumn">
|
|
<h2 class="text-uppercase" data-i18n="namealias"></h2>
|
|
<label data-i18n-title="namealias"><input type="text" name="attr_name" data-i18n-placeholder="name" title="@{name}"/></label>
|
|
</div>
|
|
<div class="grid row-long grid-4autocolumn">
|
|
<h2 class="text-capitalize" data-i18n="metatype"></h2>
|
|
<label data-i18n-title="metatype"><input type="text" name="attr_metatype" data-i18n-placeholder="metatype" title="@{metatype}"/></label>
|
|
<h2 class="text-capitalize" data-i18n="ethnicity"></h2>
|
|
<label data-i18n-title="ethnicity"><input type="text" name="attr_ethnicity" data-i18n-placeholder="ethnicity" title="@{ethnicity}"/></label>
|
|
</div>
|
|
<div class="grid row-long grid-8autocolumn">
|
|
<h2 class="text-capitalize" data-i18n="age"></h2>
|
|
<label data-i18n-title="age"><input type="text" name="attr_age" data-i18n-placeholder="age" title="@{age}"/></label>
|
|
<h2 class="text-capitalize" data-i18n="sex"></h2>
|
|
<label data-i18n-title="sex"><input type="text" name="attr_sex" data-i18n-placeholder="sex" title="@{sex}"/></label>
|
|
<h2 class="text-capitalize" data-i18n="height-u"></h2>
|
|
<label data-i18n-title="height-u"><input type="text" name="attr_height" data-i18n-placeholder="height-u" title="@{height}"/></label>
|
|
<h2 class="text-capitalize" data-i18n="weight"></h2>
|
|
<label data-i18n-title="weight"><input type="text" name="attr_weight" data-i18n-placeholder="weight" title="@{weight}"/></label>
|
|
</div>
|
|
<div class="grid row-long grid-6autocolumn">
|
|
<h2 class="text-capitalize" data-i18n="streetcred"></h2>
|
|
<label data-i18n-title="streetcred"><input type="text" name="attr_street cred" data-i18n-placeholder="streetcred" title="@{street cred}"/></label>
|
|
<h2 class="text-capitalize" data-i18n="notoriety"></h2>
|
|
<label data-i18n-title="notoriety"><input type="text" name="attr_notoriety" data-i18n-placeholder="notoriety" title="@{notoriety}"/></label>
|
|
<h2 class="text-capitalize" data-i18n="publicawareness"></h2>
|
|
<label data-i18n-title="publicawareness"><input type="text" name="attr_public awareness" data-i18n-placeholder="publicawareness" title="@{public awareness}"/></label>
|
|
</div>
|
|
<div class="grid row-long grid-6autocolumn">
|
|
<h2 class="text-capitalize" data-i18n="karma"></h2>
|
|
<label data-i18n-title="karma"><input type="text" name="attr_karma" data-i18n-placeholder="karma" title="@{karma}"/></label>
|
|
<h2 class="text-capitalize" data-i18n="totalkarma"></h2>
|
|
<label data-i18n-title="totalkarma"><input type="text" name="attr_total karma" data-i18n-placeholder="totalkarma" title="@{total karma}"/></label>
|
|
<h2 class="text-capitalize" data-i18n="misc"></h2>
|
|
<label data-i18n-title="misc"><input type="text" name="attr_misc" data-i18n-placeholder="misc" title="@{misc}"/></label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="pc-row">
|
|
<div class="header">
|
|
<div class="triangle"></div>
|
|
<h1 data-i18n="attributes"></h1>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box attributes">
|
|
<input class="settings-toggle" type="checkbox" name="attr_flag_attribute" checked="checked"/>
|
|
<span class="pictos text-lowercase">x</span>
|
|
<div class="grid attribute">
|
|
<div class="col">
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_body" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="body" type="roll" name="roll_body" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{body}}}{{base=^{attributes}}}{{dice=[[(@{body}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_body_base" value="" placeholder="3" title="@{body_base}"/><span class="tiny">+</span><input type="number" name="attr_body_modifier" value="" placeholder="0" title="@{body_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_body" title="@{body}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_body" title="@{body}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_agility" value="0"/>
|
|
<div class="col"><button class="text-right eclipse" data-i18n="agility" type="roll" name="roll_agility" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{agility}}}{{base=^{attributes}}}{{dice=[[(@{agility}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_agility_base" value="" placeholder="3" title="@{agility_base}"/><span class="tiny">+</span><input type="number" name="attr_agility_modifier" value="" placeholder="0" title="@{agility_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_agility" title="@{agility}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_agility" title="@{agility}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_reaction" value="0"/><div class="col"><button class="text-right eclipse" data-i18n="reaction" type="roll" name="roll_reaction" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{reaction}}}{{base=^{attributes}}}{{dice=[[(@{reaction}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button></div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_reaction_base" value="" placeholder="3" title="@{reaction_base}"/><span class="tiny">+</span><input type="number" name="attr_reaction_modifier" value="" placeholder="0" title="@{reaction_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_reaction" title="@{reaction}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_reaction" title="@{reaction}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_strength" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="strength" type="roll" name="roll_strength" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{strength}}}{{base=^{attributes}}}{{dice=[[(@{strength}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_strength_base" value="" placeholder="3" title="@{strength_base}"/><span class="tiny">+</span><input type="number" name="attr_strength_modifier" value="" placeholder="0" title="@{strength_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_strength" title="@{strength}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_strength" title="@{strength}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_willpower" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="willpower" type="roll" name="roll_willpower" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{willpower}}}{{base=^{attributes}}}{{dice=[[(@{willpower}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_willpower_base" value="" placeholder="3" title="@{willpower_base}"/><span class="tiny">+</span><input type="number" name="attr_willpower_modifier" value="" placeholder="0" title="@{willpower_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_willpower" title="@{willpower}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_willpower" title="@{willpower}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_logic" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="logic" type="roll" name="roll_logic" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{logic}}}{{base=^{attributes}}}{{dice=[[(@{logic}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_logic_base" value="" placeholder="3" title="@{logic_base}"/><span class="tiny">+</span><input type="number" name="attr_logic_modifier" value="" placeholder="0" title="@{logic_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_logic" title="@{logic}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_logic" title="@{logic}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_intuition" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="intuition" type="roll" name="roll_intuition" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{intuition}}}{{base=^{attributes}}}{{dice=[[(@{intuition}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_intuition_base" value="" placeholder="3" title="@{intuition_base}"/><span class="tiny">+</span><input type="number" name="attr_intuition_modifier" value="" placeholder="0" title="@{intuition_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_intuition" title="@{intuition}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_intuition" title="@{intuition}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_charisma" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="charisma" type="roll" name="roll_charisma" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{charisma}}}{{base=^{attributes}}}{{dice=[[(@{charisma}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_charisma_base" value="" placeholder="3" title="@{charisma_base}"/><span class="tiny">+</span><input type="number" name="attr_charisma_modifier" value="" placeholder="0" title="@{charisma_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_charisma" title="@{charisma}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_charisma" title="@{charisma}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_edge" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="edge" type="roll" name="roll_edge" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{edge}}}{{base=^{attributes}}}{{dice=[[(@{edge}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_edge" value="" placeholder="3" title="@{edge}"/>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_edge" title="@{edge}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid edge-row">
|
|
<input class="hex-highlight" type="hidden" name="attr_edge_hex" value="0"/>
|
|
<input class="edge-hider" type="hidden" name="attr_edge" value="1"/>
|
|
<div class="grid edge">
|
|
<input type="checkbox" name="attr_edge_hex" value="1"/><div class="hexagon"></div>
|
|
</div>
|
|
<div class="grid edge">
|
|
<input type="checkbox" name="attr_edge_hex" value="2"/><div class="hexagon"></div>
|
|
</div>
|
|
<div class="grid edge">
|
|
<input type="checkbox" name="attr_edge_hex" value="3"/><div class="hexagon"></div>
|
|
</div>
|
|
<div class="grid edge">
|
|
<input type="checkbox" name="attr_edge_hex" value="4"/><div class="hexagon"></div>
|
|
</div>
|
|
<div class="grid edge">
|
|
<input type="checkbox" name="attr_edge_hex" value="5"/><div class="hexagon"></div>
|
|
</div>
|
|
<div class="grid edge">
|
|
<input type="checkbox" name="attr_edge_hex" value="6"/><div class="hexagon"></div>
|
|
</div>
|
|
<div class="grid edge">
|
|
<input type="checkbox" name="attr_edge_hex" value="7"/><div class="hexagon"></div>
|
|
</div>
|
|
<div class="grid edge">
|
|
<input type="checkbox" name="attr_edge_hex" value="8"/><div class="hexagon"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col">
|
|
<input class="character-type" name="attr_flag_special" type="hidden" value="mundane"/>
|
|
<div class="grid attribute-row">
|
|
<div class="col"><div class="row-long"><h3 data-i18n="essence"></h3></div></div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<label class="mt-2" data-i18n-title="essence"><input type="text" min="0" name="attr_essence" placeholder="6" title="@{essence}"/></label>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_essence" title="@{essence}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row magic">
|
|
<input type="hidden" name="attr_magic" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="magic" type="roll" name="roll_magic" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{magic}}}{{base=^{attributes}}}{{dice=[[(@{magic}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_magic_base" value="" placeholder="3" title="@{magic_base}"/><span class="tiny">+</span><input type="number" name="attr_magic_modifier" value="" placeholder="0" title="@{magic_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_magic" title="@{magic}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_magic" title="@{magic}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row resonance">
|
|
<input type="hidden" name="attr_resonance" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="resonance" type="roll" name="roll_resonance" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{resonance}}}{{base=^{attributes}}}{{dice=[[(@{resonance}+(@{attribute_roll})+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_resonance_base" value="" placeholder="3" title="@{resonance_base}"/><span class="tiny">+</span><input type="number" name="attr_resonance_modifier" value="" placeholder="0" title="@{resonance_modifier}"/><span class="tiny">=</span><span class="totals" name="attr_display_resonance" title="@{resonance}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_display_resonance" title="@{resonance}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_initiative_mod" value="6"/>
|
|
<input type="hidden" name="attr_initiative_dice" value="1" min="1" max="5"/>
|
|
<div class="col">
|
|
<button class="eclipse text-right red" data-i18n="initiative" name="roll_initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{initiative}}}{{base=^{base}}}{{dice=[[(@{initiative_mod}+@{wounds_toggle}+@{modifiers_toggle})+(@{initiative_dice})d6cf0 &{tracker}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_initiative_mod_modifier" value="0" placeholder="0" title="@{initiative_modifier}"/><span class="tiny">+</span><input type="number" name="attr_initiative_dice_modifier" value="0" min="0" max="4" placeholder="modifier" title="@{initiative_dice_modifier}"/><span class="tiny">=</span><span name="attr_display_initiative_mod" title="@{initiative_mod}"></span><span class="tiny">+</span><span name="attr_initiative_dice" title="@{initiative_dice}"></span><span data-i18n="d6"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="d-block text-center">
|
|
<span name="attr_display_initiative_mod" title="@{initiative_mod}"></span><span class="tiny">+</span><span name="attr_initiative_dice" title="@{initiative_dice}"></span><span data-i18n="d6"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_matrix_mod" value="6"/>
|
|
<input type="hidden" name="attr_matrix_dice" value="1" min="1" max="5"/>
|
|
<div class="col">
|
|
<button class="eclipse text-right red" data-i18n="matrixinitiative" name="roll_matrixinitiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{matrixinitiative}}}{{base=^{base}}}{{dice=[[(@{matrix_mod}+@{wounds_toggle}+@{modifiers_toggle})+(@{matrix_dice})d6cf0 &{tracker}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_matrix_mod_modifier" value="0" placeholder="0" title="@{matrix_modifier}"/><span class="tiny">+</span><input type="number" name="attr_matrix_dice_modifier" value="0" min="0" max="4" placeholder="modifier" title="@{matrix_dice_modifier}"/><span class="tiny">=</span><span name="attr_display_matrix_mod" title="@{matrix_mod}"></span><span class="tiny">+</span><span name="attr_matrix_dice" title="@{matrix_dice}"></span><span data-i18n="d6"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="d-block text-center">
|
|
<span name="attr_display_matrix_mod" title="@{matrix_mod}"></span><span class="tiny">+</span><span name="attr_matrix_dice" title="@{matrix_dice}"></span><span data-i18n="d6"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_astral_mod" value="6"/>
|
|
<input type="hidden" name="attr_astral_dice" value="1" min="1" max="5"/>
|
|
<div class="col">
|
|
<button class="eclipse text-right red" data-i18n="astralinitiative" name="roll_astralinitiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{astralinitiative}}}{{base=^{base}}}{{dice=[[(@{astral_mod}+@{wounds_toggle}+@{modifiers_toggle})+(@{astral_dice})d6cf0 &{tracker}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_astral_mod_modifier" value="0" placeholder="0" title="@{astral_modifier}"/><span class="tiny">+</span><input type="number" name="attr_astral_dice_modifier" value="0" min="0" max="4" placeholder="modifier" title="@{astral_dice_modifier}"/><span class="tiny">=</span><span name="attr_display_astral_mod" title="@{astral_mod}"></span><span class="tiny">+</span><span name="attr_astral_dice" title="@{astral_dice}"></span><span data-i18n="d6"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="d-block text-center">
|
|
<span name="attr_display_astral_mod" title="@{astral_mod}"></span><span class="tiny">+</span><span name="attr_astral_dice" title="@{astral_dice}"></span><span data-i18n="d6"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_composure" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="composure" type="roll" name="roll_composure" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{composure}}}{{base=^{attributes}}}{{dice=[[(@{composure}+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_composure_modifier" value="" placeholder="0" title="@{composure_modifier}"/><span class="tiny">=</span><span name="attr_composure" title="@{composure}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_composure" title="@{composure}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_judge_intentions" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="judge_intentions" type="roll" name="roll_judge_intentions" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{judge_intentions}}}{{base=^{attributes}}}{{dice=[[(@{judge_intentions}+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_judge_intentions_modifier" value="" placeholder="0" title="@{judge_intentions_modifier}"/><span class="tiny">=</span><span name="attr_judge_intentions" title="@{judge_intentions}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_judge_intentions" title="@{judge_intentions}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_memory" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="memory" type="roll" name="roll_memory" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{memory}}}{{base=^{attributes}}}{{dice=[[(@{memory}+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_memory_modifier" value="" placeholder="0" title="@{memory_modifier}"/><span class="tiny">=</span><span name="attr_memory" title="@{memory}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_memory" title="@{memory}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_lift_carry" value="0"/>
|
|
<div class="col">
|
|
<button class="text-right eclipse" data-i18n="lift_carry" type="roll" name="roll_lift_carry" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{lift_carry}}}{{base=^{attributes}}}{{dice=[[(@{lift_carry}+@{wounds_toggle} +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<input type="number" name="attr_lift_carry_modifier" value="" placeholder="0" title="@{lift_carry_modifier}"/><span class="tiny">=</span><span name="attr_lift_carry" title="@{lift_carry}}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_lift_carry" title="@{lift_carry}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid attribute-row">
|
|
<input type="hidden" name="attr_walk" value="12"/>
|
|
<input type="hidden" name="attr_run" value="24"/>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<h3 data-i18n="movement"></h3>
|
|
</div>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row-long">
|
|
<div class="settings">
|
|
<label class="mt-2" data-i18n-title="walk modifier"><input type="number" min="0" name="attr_walk_modifier" placeholder="6" title="@{walk_modifier}"/></label><span>/</span>
|
|
<label class="mt-2" data-i18n-title="run modifier"><input type="number" min="0" name="attr_run_modifier" placeholder="6" title="@{run_modifier}"/></label><span>/ +</span>
|
|
<label class="mt-2" data-i18n-title="movement modifier"><input type="number" min="0" name="attr_movement_mod" placeholder="2" title="@{movement_mod}"/></label>
|
|
</div>
|
|
<div class="display">
|
|
<div class="mt-2 text-center d-block">
|
|
<span name="attr_walk" title="@{walk}"></span><span class="tiny">/</span><span name="attr_run" title="@{run}"></span><span class="tiny">/ +</span><span name="attr_movement_mod" title="@{movement_mod}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid limits-row">
|
|
<div class="grid limit">
|
|
<div class="col">
|
|
<h3 class="eclipse" data-i18n="physicallimit"></h3>
|
|
</div>
|
|
<div class="col">
|
|
<div class="settings">
|
|
<label data-i18n-title="physicallimit"><input type="number" name="attr_physical_limit_modifier" placeholder="0" title="@{physical_limit_modifier}"/></label>
|
|
<span class="tiny">=</span><span name="attr_physical_limit" title="@{physical_limit}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<span class="d-block text-center" name="attr_physical_limit" title="@{physical_limit}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid limit">
|
|
<div class="col">
|
|
<h3 class="eclipse" data-i18n="mentallimit"></h3>
|
|
</div>
|
|
<div class="col">
|
|
<div class="settings">
|
|
<label data-i18n-title="mentallimit"><input type="number" name="attr_mental_limit_modifier" placeholder="0" title="@{mental_limit_modifier}"/></label>
|
|
<span class="tiny">=</span><span name="attr_mental_limit" title="@{mental_limit}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<span class="d-block text-center" name="attr_mental_limit" title="@{mental_limit}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="grid limit">
|
|
<div class="col">
|
|
<h3 class="eclipse" data-i18n="sociallimit"></h3>
|
|
</div>
|
|
<div class="col">
|
|
<div class="settings">
|
|
<label data-i18n-title="sociallimit"><input type="number" name="attr_social_limit_modifier" placeholder="0" title="@{social_limit_modifier}"/></label>
|
|
<span class="tiny">=</span><span name="attr_social_limit" title="@{social_limit}"></span>
|
|
</div>
|
|
<div class="display">
|
|
<span class="d-block text-center" name="attr_social_limit" title="@{social_limit}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="pc-row">
|
|
<div class="header">
|
|
<div class="header htab">
|
|
<div class="triangle"></div>
|
|
<input class="tab-switch" name="attr_skill_toggle" title="Active skills" type="radio" value="active"/>
|
|
<h1 data-i18n="active">active..</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="header htab">
|
|
<div class="triangle"></div>
|
|
<input class="tab-switch" name="attr_skill_toggle" title="Knowledge skills" type="radio" value="knowledge"/>
|
|
<h1 data-i18n="know">know..</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="header htab">
|
|
<div class="triangle"></div>
|
|
<input class="tab-switch" name="attr_skill_toggle" title="Language skills" type="radio" value="language"/>
|
|
<h1 data-i18n="lang">lang..</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="triangle"></div>
|
|
<h1 data-i18n="skills">Skills</h1>
|
|
</div>
|
|
<div class="border-box skill-box">
|
|
<div class="pc-box medium-box">
|
|
<div class="rows repeating-container">
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="skill">Skill</h2>
|
|
<h2 data-i18n="rtg">RTG</h2>
|
|
<h2 data-i18n="attribute">Attribute</h2>
|
|
<h2 data-i18n="limit">Limit</h2>
|
|
</div>
|
|
</div>
|
|
<input class="tab-switch" name="attr_skill_toggle" type="hidden" value="active"/>
|
|
<div class="skills-active">
|
|
<div class="rows repeating-container">
|
|
<div class="row-long">
|
|
<input name="attr_default_display" type="hidden" value="Agility"/><button data-i18n="default" name="roll_default" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{default}}}{{base=@{default_display}}}{{dice=[[((@{default_attribute}+-1) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">default</button><span class="text-center">-</span>
|
|
<select class="attribute-select" name="attr_default_attribute" title="Skill attribute">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}" selected="selected">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<select class="limit-select" name="attr_limit" title="Skill limit">
|
|
<option value="">-</option>
|
|
<option data-i18n="mental" value="@{mental_limit}">Mental</option>
|
|
<option data-i18n="physical" value="@{physical_limit}" selected="selected">Physical</option>
|
|
<option data-i18n="social" value="@{social_limit}">Social</option>
|
|
<option data-i18n="attack" value="@{attack}">Attack</option>
|
|
<option data-i18n="data_processing" value="@{data_processing}">Data Processing</option>
|
|
<option data-i18n="firewall" value="@{firewall}">Firewall</option>
|
|
<option data-i18n="sleaze" value="@{sleaze}">Sleaze</option>
|
|
</select>
|
|
</div>
|
|
<fieldset class="repeating_active">
|
|
<input name="attr_display_rating" type="hidden"/>
|
|
<input name="attr_specialization" type="hidden" value=""/>
|
|
<input name="attr_display_limit" type="hidden" value="Physical"/>
|
|
<input name="attr_display_attribute" type="hidden" value="Agility"/>
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<input name="attr_display_skill" type="hidden" value=""/>
|
|
<input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="@{repeating_active_${x}_flag}"/>
|
|
<div class="buttons">
|
|
<button class="eclipse" name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+0)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{display_limit} @{limit}}}">
|
|
<span name="attr_display_skill"></span>
|
|
</button>
|
|
<button class="eclipse" name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+2)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}, @{display_limit} @{limit}}}">
|
|
<span name="attr_specialization"></span>
|
|
</button>
|
|
</div>
|
|
<span class="text-center" name="attr_display_rating" title="@{repeating_active_${x}_display_rating}"></span>
|
|
<select class="attribute-select" name="attr_attribute" title="@{repeating_active_${x}_attribute}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}" selected="selected">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<select class="limit-select" name="attr_limit" value="physical_limit" title="@{repeating_active_${x}_limit}">
|
|
<option value="">-</option>
|
|
<option data-i18n="mental" value="@{mental_limit}">Mental</option>
|
|
<option data-i18n="physical" value="@{physical_limit}" selected="selected">Physical</option>
|
|
<option data-i18n="social" value="@{social_limit}">Social</option>
|
|
<option data-i18n="attack" value="@{attack}">Attack</option>
|
|
<option data-i18n="data_processing" value="@{data_processing}">Data Processing</option>
|
|
<option data-i18n="firewall" value="@{firewall}">Firewall</option>
|
|
<option data-i18n="sleaze" value="@{sleaze}">Sleaze</option>
|
|
</select>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<select class="skill-select" name="attr_skill" value="Close Combat Group" title="@{repeating_active_${x}_skill}">
|
|
<option class="option-headers" disabled="true" data-i18n="combatskills">Combat Skills</option>
|
|
<option class="option-groups" value="Close Combat Group" data-i18n="closecombatgroup">Close Combat Group</option>
|
|
<option class="option-groups" value="Firearms Group" data-i18n="firearmsgroup">Firearms Group</option>
|
|
<option value="Archery" data-i18n="archery">Archery</option>
|
|
<option value="Automatics" data-i18n="automatics">Automatics</option>
|
|
<option value="Blades" data-i18n="blades">Blades</option>
|
|
<option value="Clubs" data-i18n="clubs">Clubs</option>
|
|
<option value="Exotic Melee" data-i18n="exoticmelee">Exotic Melee</option>
|
|
<option value="Exotic Range" data-i18n="exoticrange">Exotic Range</option>
|
|
<option value="Heavy Weapons" data-i18n="heavyweapons">Heavy Weapons</option>
|
|
<option value="Longarms" data-i18n="longarms">Longarms</option>
|
|
<option value="Pistols" data-i18n="pistols">Pistols</option>
|
|
<option value="Throwing Weapons" data-i18n="throwingweapons">Throwing Weapons</option>
|
|
<option value="Unarmed Combat" data-i18n="unarmedcombat">Unarmed Combat</option>
|
|
<option class="option-headers" disabled="true" data-i18n="physicalskills">Physical Skills</option>
|
|
<option class="option-groups" value="Athletics Group" data-i18n="athleticsgroup">Athletics Group</option>
|
|
<option class="option-groups" value="Outdoors Group" data-i18n="outdoorsgroup">Outdoors Group</option>
|
|
<option class="option-groups" value="Stealth Group" data-i18n="stealthgroup">Stealth Group</option>
|
|
<option value="Disguise" data-i18n="disguise">Disguise</option>
|
|
<option value="Diving" data-i18n="diving">Diving</option>
|
|
<option value="Escape Artist" data-i18n="escapeartist">Escape Artist</option>
|
|
<option value="Flight" data-i18n="flight">Flight</option>
|
|
<option value="Free Fall" data-i18n="freefall">Free Fall</option>
|
|
<option value="Gymnastics" data-i18n="gymnastics">Gymnastics</option>
|
|
<option value="Palming" data-i18n="palming">Palming</option>
|
|
<option value="Perception" data-i18n="perception">Perception</option>
|
|
<option value="Running" data-i18n="running">Running</option>
|
|
<option value="Sneaking" data-i18n="sneaking">Sneaking</option>
|
|
<option value="Survival" data-i18n="survival">Survival</option>
|
|
<option value="Swimming" data-i18n="swimming">Swimming</option>
|
|
<option value="Tracking" data-i18n="tracking">Tracking</option>
|
|
<option class="option-headers" disabled="true" data-i18n="socialskills">Social Skills</option>
|
|
<option class="option-groups" value="Acting Group" data-i18n="actinggroup">Acting Group</option>
|
|
<option class="option-groups" value="Influence Group" data-i18n="influencegroup">Influence Group</option>
|
|
<option value="Con" data-i18n="con">Con</option>
|
|
<option value="Etiquette" data-i18n="etiquette">Etiquette</option>
|
|
<option value="Impersonation" data-i18n="impersonation">Impersonation</option>
|
|
<option value="Instruction" data-i18n="instruction">Instruction</option>
|
|
<option value="Intimidation" data-i18n="intimidation">Intimidation</option>
|
|
<option value="Leadership" data-i18n="leadership">Leadership</option>
|
|
<option value="Negotiation" data-i18n="negotiation">Negotiation</option>
|
|
<option value="Performance" data-i18n="performance">Performance</option>
|
|
<option class="option-headers" disabled="true" data-i18n="magicalskills">Magical Skills</option>
|
|
<option class="option-groups" value="Conjuring Group" data-i18n="conjuringgroup">Conjuring Group</option>
|
|
<option class="option-groups" value="Enchanting Group" data-i18n="enchantinggroup">Enchanting Group</option>
|
|
<option class="option-groups" value="Sorcery Group" data-i18n="sorcerygroup">Sorcery Group</option>
|
|
<option value="Alchemy" data-i18n="alchemy">Alchemy</option>
|
|
<option value="Arcana" data-i18n="arcana">Arcana</option>
|
|
<option value="Artificing" data-i18n="artificing">Artificing</option>
|
|
<option value="Assensing" data-i18n="assensing">Assensing</option>
|
|
<option value="Astral Combat" data-i18n="astralcombat">Astral Combat</option>
|
|
<option value="Banishing" data-i18n="banishing">Banishing</option>
|
|
<option value="Binding" data-i18n="binding">Binding</option>
|
|
<option value="Counterspelling" data-i18n="counterspelling">Counterspelling</option>
|
|
<option value="Disenchanting" data-i18n="disenchanting">Disenchanting</option>
|
|
<option value="Ritual Spellcasting" data-i18n="ritualspellcasting">Ritual Spellcasting</option>
|
|
<option value="Spellcasting" data-i18n="spellcasting">Spellcasting</option>
|
|
<option value="Summoning" data-i18n="summoning">Summoning</option>
|
|
<option class="option-headers" disabled="true" data-i18n="resonanceskills">Resonance Skills</option>
|
|
<option class="option-groups" value="Tasking Group" data-i18n="taskinggroup">Tasking Group</option>
|
|
<option value="Compiling" data-i18n="compiling">Compiling</option>
|
|
<option value="Decompiling" data-i18n="decompiling">Decompiling</option>
|
|
<option value="Registering" data-i18n="registering">Registering</option>
|
|
<option class="option-headers" disabled="true" data-i18n="technicalskills">Technical Skills</option>
|
|
<option class="option-groups" value="Biotech Group" data-i18n="biotechgroup">Biotech Group</option>
|
|
<option class="option-groups" value="Cracking Group" data-i18n="crackinggroup">Cracking Group</option>
|
|
<option class="option-groups" value="Electronics Group" data-i18n="electronicsgroup">Electronics Group</option>
|
|
<option class="option-groups" value="Engineering Group" data-i18n="engineeringgroup">Engineering Group</option>
|
|
<option value="Aeronautics Mechanic" data-i18n="aeronauticsmechanic">Aeronautics Mechanic</option>
|
|
<option value="Animal Handling" data-i18n="animalhandling">Animal Handling</option>
|
|
<option value="Armorer" data-i18n="armorer">Armorer</option>
|
|
<option value="Artisan" data-i18n="artisan">Artisan</option>
|
|
<option value="Automotive Mechanic" data-i18n="automotivemechanic">Automotive Mechanic</option>
|
|
<option value="Biotechnology" data-i18n="biotechnology">Biotechnology</option>
|
|
<option value="Chemistry" data-i18n="chemistry">Chemistry</option>
|
|
<option value="Computer" data-i18n="computer">Computer</option>
|
|
<option value="Cybercombat" data-i18n="cybercombat">Cybercombat</option>
|
|
<option value="Cybertechnology" data-i18n="cybertechnology">Cybertechnology</option>
|
|
<option value="Demolitions" data-i18n="demolitions">Demolitions</option>
|
|
<option value="Electronic Warfare" data-i18n="electronicwarfare">Electronic Warfare</option>
|
|
<option value="First Aid" data-i18n="firstaid">First Aid</option>
|
|
<option value="Forgery" data-i18n="forgery">Forgery</option>
|
|
<option value="Hacking" data-i18n="hacking">Hacking</option>
|
|
<option value="Hardware" data-i18n="hardware">Hardware</option>
|
|
<option value="Industrial Mechanic" data-i18n="industrialmechanic">Industrial Mechanic</option>
|
|
<option value="Locksmith" data-i18n="locksmith">Locksmith</option>
|
|
<option value="Medicine" data-i18n="medicine">Medicine</option>
|
|
<option value="Nautical Mechanic" data-i18n="nauticalmechanic">Nautical Mechanic</option>
|
|
<option value="Navigation" data-i18n="navigation">Navigation</option>
|
|
<option value="Gunnery" data-i18n="gunnery">Gunnery</option>
|
|
<option value="Pilot Aerospace" data-i18n="pilotaerospace">Pilot Aerospace</option>
|
|
<option value="Pilot Aircraft" data-i18n="pilotaircraft">Pilot Aircraft</option>
|
|
<option value="Pilot Exotic Vehicle" data-i18n="pilotexoticvehicle">Pilot Exotic Vehicle</option>
|
|
<option value="Pilot Ground Craft" data-i18n="pilotgroundcraft">Pilot Ground Craft</option>
|
|
<option value="Pilot Walker" data-i18n="pilotwalker">Pilot Walker</option>
|
|
<option value="Pilot Watercraft" data-i18n="pilotwatercraft">Pilot Watercraft</option>
|
|
<option value="Software" data-i18n="software">Software</option>
|
|
</select>
|
|
<label data-i18n-title="rating" title="rating"><input name="attr_rating" min="0" placeholder="0" type="number" title="@{repeating_active_${x}_rating}"/></label>
|
|
<label data-i18n-title="ratingmodifier" title="Rating Modifier">
|
|
<span data-i18n="ratingmodifier">Rating Modifier</span>
|
|
<input name="attr_rating_modifier" placeholder="0" type="number" title="@{repeating_active_${x}_rating_modifier}"/>
|
|
</label>
|
|
<label data-i18n-title="specialization" title="specialization">
|
|
<span data-i18n="specialization">specialization</span>
|
|
<input name="attr_specialization" placeholder="Specalizations" type="text" title="@{repeating_active_${x}_specialization}"/>
|
|
</label>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<span data-i18n="notes">Notes</span>
|
|
<textarea name="attr_notes" value="" placeholder="Notes" title="@{repeating_active_${x}_notes}"></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="skills-know">
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_knowledge">
|
|
<input name="attr_display_rating" type="hidden"/><input name="attr_specialization" type="hidden" value=""/><input name="attr_display_limit" type="hidden" value="Mental"/><input name="attr_display_attribute" type="hidden" value="Logic"/><input name="attr_dicepool" type="hidden" value="0"/><input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="@{repeating_knowledge_${x}_flag}"/>
|
|
<div class="buttons">
|
|
<button class="eclipse" name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+0)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{display_limit} @{limit}}}">
|
|
<span name="attr_skill"></span>
|
|
</button>
|
|
<button class="eclipse" name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+2)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}, @{display_limit} @{limit}}}">
|
|
<span name="attr_specialization"></span>
|
|
</button>
|
|
</div>
|
|
<span class="text-center" name="attr_display_rating" title="@{repeating_knowledge_${x}_display_rating}"></span>
|
|
<select class="attribute-select" name="attr_attribute" title="@{repeating_knowledge_${x}_attribute}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}" selected="selected">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<select class="limit-select" name="attr_limit" value="physical_limit" title="@{repeating_knowledge_${x}_limit}">
|
|
<option value="">-</option>
|
|
<option data-i18n="mental" value="@{mental_limit}" selected="selected">Mental</option>
|
|
<option data-i18n="physical" value="@{physical_limit}">Physical</option>
|
|
<option data-i18n="social" value="@{social_limit}">Social</option>
|
|
<option data-i18n="attack" value="@{attack}">Attack</option>
|
|
<option data-i18n="data_processing" value="@{data_processing}">Data Processing</option>
|
|
<option data-i18n="firewall" value="@{firewall}">Firewall</option>
|
|
<option data-i18n="sleaze" value="@{sleaze}">Sleaze</option>
|
|
</select>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="skill" title="skill"><input name="attr_skill" placeholder="knowledge" type="text" title="@{repeating_knowledge_${x}_skill}"/></label>
|
|
<label data-i18n-title="rating" title="rating"><input name="attr_rating" min="0" placeholder="0" type="number" title="@{repeating_knowledge_${x}_rating}"/></label>
|
|
<label data-i18n-title="ratingmodifier" title="Rating Modifier">
|
|
<span data-i18n="ratingmodifier">Rating Modifier</span><input name="attr_rating_modifier" placeholder="0" type="number" title="@{repeating_knowledge_${x}_rating_modifier}"/>
|
|
</label>
|
|
<label data-i18n-title="specialization" title="specialization">
|
|
<span data-i18n="specialization">specialization</span><input name="attr_specialization" placeholder="Specalizations" type="text" title="@{repeating_knowledge_${x}_specialization}"/>
|
|
</label>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<span data-i18n="notes">Notes</span><textarea name="attr_notes" value="" placeholder="Notes" title="@{repeating_knowledge_${x}_notes}"></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="skills-lang">
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_language">
|
|
<input name="attr_display_rating" type="hidden"/><input name="attr_specialization" type="hidden" value=""/>
|
|
<input name="attr_display_limit" type="hidden" value="Social"/>
|
|
<input name="attr_display_attribute" type="hidden" value="Charisma"/>
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="@{repeating_language_${x}_flag}"/>
|
|
<div class="buttons">
|
|
<button class="eclipse" name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+0)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{display_limit} @{limit}}}">
|
|
<span name="attr_skill"></span>
|
|
</button>
|
|
<button class="eclipse" name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+2)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}, @{display_limit} @{limit}}}">
|
|
<span name="attr_specialization"></span>
|
|
</button>
|
|
</div>
|
|
<span class="text-center" name="attr_display_rating" title="@{repeating_language_${x}_display_rating}"></span>
|
|
<select class="attribute-select" name="attr_attribute" title="@{repeating_language_${x}_attribute}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}" selected="selected">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<select class="limit-select" name="attr_limit" value="physical_limit" title="@{repeating_language_${x}_limit}">
|
|
<option value="">-</option>
|
|
<option data-i18n="mental" value="@{mental_limit}">Mental</option>
|
|
<option data-i18n="physical" value="@{physical_limit}">Physical</option>
|
|
<option data-i18n="social" value="@{social_limit}" selected="selected">Social</option>
|
|
<option data-i18n="attack" value="@{attack}">Attack</option>
|
|
<option data-i18n="data_processing" value="@{data_processing}">Data Processing</option>
|
|
<option data-i18n="firewall" value="@{firewall}">Firewall</option>
|
|
<option data-i18n="sleaze" value="@{sleaze}">Sleaze</option>
|
|
</select>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="skill" title="skill"><input name="attr_skill" placeholder="language" type="text" title="@{repeating_language_${x}_skill}"/></label>
|
|
<label data-i18n-title="rating" title="rating"><input name="attr_rating" min="0" placeholder="0" type="number" title="@{repeating_language_${x}_rating}"/></label>
|
|
<label data-i18n-title="ratingmodifier" title="Rating Modifier">
|
|
<span data-i18n="ratingmodifier">Rating Modifier</span><input name="attr_rating_modifier" placeholder="0" type="number" title="@{repeating_language_${x}_rating_modifier}"/>
|
|
</label>
|
|
<label data-i18n-title="specialization" title="specialization">
|
|
<span data-i18n="specialization">specialization</span><input name="attr_specialization" placeholder="Specalizations" type="text" title="@{repeating_language_${x}_specialization}"/>
|
|
</label>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<span data-i18n="notes">Notes</span>
|
|
<textarea name="attr_notes" value="" placeholder="Notes" title="@{repeating_language_${x}_notes}"></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="core pc-col">
|
|
<div class="pc-row">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="corecombatinfo">Core Combat Info</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box small-box core-combat">
|
|
<div class="row-long cc-arm">
|
|
<h2 data-i18n="primaryarmor">Primary Armor</h2>
|
|
<button type="roll" name="roll_soak" value="@{gm_toggle} &{template:rolls}{{header=^{soak}}}{{base=^{base}}}{{dice=[[((@{soak})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}} style="width: 32%;">
|
|
<span name="attr_armor_name" title="@{soak}"></span>
|
|
</button>
|
|
<h3 data-i18n="rating">Rating</h3>
|
|
<button type="roll" name="roll_armor" value="@{gm_toggle} &{template:rolls}{{header=^{armor}}}{{base=^{armor}}}{{dice=[[((@{armor_rating})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}">
|
|
<span name="attr_armor_rating" title="@{armor_rating}"></span>
|
|
</button>
|
|
<div class="armor-buttons">
|
|
<button type="roll" name="roll_defense" value="@{gm_toggle} &{template:rolls}{{header=^{defense}}}{{base=^{base}}}{{dice=[[((@{defense})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Defense Roll"><span class="pictos-custom" title="@{defense}">e</span></button>
|
|
<button type="roll" name="roll_acid_protection" value="@{gm_toggle} &{template:rolls}{{header=^{acidprotection}}}{{base=^{base}}}{{dice=[[((@{soak}+@{acid_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Acid Protection"><span class="pictos-three" title="@{acid_modifier}">d</span></button>
|
|
<button type="roll" name="roll_cold_protection" value="@{gm_toggle} &{template:rolls}{{header=^{coldprotection}}}{{base=^{base}}}{{dice=[[((@{soak}+@{cold_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Cold Protection"><span class='pictos' title="@{cold_modifier}">b</span></button>
|
|
<button type="roll" name="roll_electrical_protection" value="@{gm_toggle} &{template:rolls}{{header=^{electricalprotection}}}{{base=^{base}}}{{dice=[[((@{soak}+@{electrical_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Electrical Protection"><span class='pictos' title="@{electrical_modifier}">e</span></button>
|
|
<button type="roll" name="roll_fire_protection" value="@{gm_toggle} &{template:rolls}{{header=^{fireprotection}}}{{base=^{base}}}{{dice=[[((@{soak}+@{fire_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Fire Protection"><span class="pictos-three" title="@{fire_modifier}">j</span></button>
|
|
<button type="roll" name="roll_radiation_protection" value="@{gm_toggle} &{template:rolls}{{header=^{radiationprotection}}}{{base=^{base}}}{{dice=[[((@{soak}+@{radiation_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Radiation Protection"><span class="pictos-three" title="@{radiation_modifier}">l</span></button>
|
|
</div>
|
|
</div>
|
|
<div class="row-long cc-row">
|
|
<h2 data-i18n="primaryrangedweapon">Primary Ranged Weapon</h2>
|
|
<button type="roll" name="primary range" value="@{gm_toggle} &{template:rolls}{{header=@{primary_range_weapon}}}{{base=^{base}}}{{dice=[[((@{primary_range_weapon_skill}+@{primary_range_weapon_dicepool}+@{agility})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{primary_range_weapon_mode}, ACC @{primary_range_weapon_acc}, DV @{primary_range_weapon_damage}, AP @{primary_range_weapon_ap}}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Primary range weapon"><span name="attr_primary_range_weapon" title="@{primary_range_weapon}"></span></button>
|
|
<!-- Ammo removal button -->
|
|
<button name="act_shots_remove" type="action">4</button>
|
|
<button type="action" name="act_primary_ammo" title="Shots Fired">
|
|
<img alt="small handgun icon" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Shadowrun5thEdition/images/gun.png" /><span name="attr_shots_fired"></span>
|
|
</button>
|
|
<button name="act_shots_add" type="action">4</button>
|
|
</div>
|
|
<div class="cc-row">
|
|
<h3 data-i18n="dam">Dam</h3><span name="attr_primary_range_weapon_damage" title="@{primary_range_weapon_damage}"></span>
|
|
<h3 data-i18n="acc">ACC</h3><span name="attr_primary_range_weapon_acc" title="@{primary_range_weapon_acc}"></span>
|
|
<h3 data-i18n="ap">AP</h3><span name="attr_primary_range_weapon_ap" title="@{primary_range_weapon_ap}"></span>
|
|
<h3 data-i18n="mode">Mode</h3><span name="attr_primary_range_weapon_mode" title="@{primary_range_weapon_mode}"></span>
|
|
<h3 data-i18n="rc">RC</h3><span name="attr_primary_range_weapon_recoil" title="@{primary_range_weapon_recoil}"></span>
|
|
<h3 data-i18n="ammo">Ammo</h3>
|
|
<span name="attr_primary_range_weapon_ammo" title="@{primary_range_weapon_ammo}"></span>
|
|
<span name="attr_primary_range_weapon_ammo_max" title="@{primary_range_weapon_ammo_max}"></span>
|
|
<button class="pictos" name="act_reload" type="action">0</button>
|
|
</div>
|
|
<div class="row-long cc-row">
|
|
<h2 data-i18n="primarymeleeweapon">Primary Melee Weapon</h2>
|
|
<button type="roll" name="primary melee" value="@{gm_toggle} &{template:rolls}{{header=@{primary_melee_weapon}}}{{base=^{base}}}{{dice=[[((@{primary_melee_weapon_skill}+@{primary_melee_weapon_dicepool}+@{agility})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=ACC @{primary_melee_weapon_acc}, DV @{primary_melee_weapon_damage}, AP @{primary_melee_weapon_ap}, Reach @{primary_melee_weapon_reach}}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Primary melee weapon"><span name="attr_primary_melee_weapon" title="@{primary_melee_weapon}"></span></button>
|
|
</div>
|
|
<div class="cc-row">
|
|
<h3 data-i18n="reach">Reach</h3><span name="attr_primary_melee_weapon_reach" title="@{primary_melee_weapon_reach}"></span>
|
|
<h3 data-i18n="dam">Dam</h3><span name="attr_primary_melee_weapon_damage" title="@{primary_melee_weapon_damage}"></span>
|
|
<h3 data-i18n="acc">ACC</h3><span name="attr_primary_melee_weapon_acc" title="@{primary_melee_weapon_acc}"></span>
|
|
<h3 data-i18n="ap">AP</h3><span name="attr_primary_melee_weapon_ap" title="@{primary_melee_weapon_ap}"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ START OF THE CONDITION MONITOR ROW ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
|
|
<div class="pc-row">
|
|
<div class="header right-header"><h1 data-i18n="conditionmonitor">Condition Monitor</h1><div class="right-tri"></div></div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box condition-box">
|
|
<input type="checkbox" class="settings-toggle" name="attr_flag_condition" checked="checked" title="Settings toggle" /><span>x</span>
|
|
<div class="settings">
|
|
<label data-i18n="conditionmonitormodifiers">Condition Monitor Modifiers (P/S): </label>
|
|
<input type="hidden" name="attr_physical" value="10" />
|
|
<input type="hidden" name="attr_stun" value="10" />
|
|
<input type="hidden" name="attr_physical_max" min="0" value="10" />
|
|
<input type="hidden" name="attr_stun_max" min="0" value="10" />
|
|
<input type="number" name="attr_physical_modifier" value="" placeholder="#" title="@{physical_modifier}" /><span> / </span>
|
|
<input type="number" name="attr_stun_modifier" value="" placeholder="#" title="@{stun_modifier}" /><br />
|
|
<input type="hidden" name="attr_overflow" value="3" />
|
|
<label data-i18n="overflowmodifier">Overflow Modifier</label><input type="number" name="attr_overflow_modifier" value="" placeholder="#" title="@{overflow_modifier}" /><br />
|
|
<label data-i18n="high pain tolerance">High Pain Tolerance</label>
|
|
|
|
<input type="number" name="attr_high_pain_tolerance" min="0" value="" placeholder="#" title="@{high_pain_tolerance}" /><br />
|
|
<label data-i18n="low pain tolerance">Low Pain Tolerance</label><input type="checkbox" name="attr_low_pain_tolerance" value="2" title="@{low_pain_tolerance}" /><br />
|
|
<label data-i18n="damage compensators">Damage Compensators (P/S): </label>
|
|
<input type="number" min="0" name="attr_damage_compensators_physical" value="" placeholder="#" title="@{damage_compensators_physical}" /><span> / </span>
|
|
<input type="number" min="0" name="attr_damage_compensators_stun" value="" placeholder="#" title="@{damage_compensators_stun}" />
|
|
</div>
|
|
<div class="display">
|
|
<div class="con-track">
|
|
<input type="hidden" name="attr_physical" value="0" />
|
|
<button type="action" name="act_cond_reset_physical" data-i18n="physicaldamagetrack">Physical Damage Track</button>
|
|
<div class="squares">
|
|
<input class="hex-hider" type="hidden" name="attr_physical_max" value="10" />
|
|
<input type="radio" name="attr_physical" value="1" /><span></span>
|
|
<input type="radio" name="attr_physical" value="2" /><span></span>
|
|
<input type="radio" name="attr_physical" value="3" /><span></span><div>-1</div>
|
|
<input type="radio" name="attr_physical" value="4" /><span></span>
|
|
<input type="radio" name="attr_physical" value="5" /><span></span>
|
|
<input type="radio" name="attr_physical" value="6" /><span></span><div>-2</div>
|
|
<input type="radio" name="attr_physical" value="7" /><span></span>
|
|
<input type="radio" name="attr_physical" value="8" /><span></span>
|
|
<input type="radio" name="attr_physical" value="9" /><span></span><div>-3</div>
|
|
<input type="radio" name="attr_physical" value="10" /><span></span>
|
|
<input type="radio" name="attr_physical" value="11" /><span></span>
|
|
<input type="radio" name="attr_physical" value="12" /><span></span><div>-4</div>
|
|
<input type="radio" name="attr_physical" value="13" /><span></span>
|
|
<input type="radio" name="attr_physical" value="14" /><span></span>
|
|
<input type="radio" name="attr_physical" value="15" /><span></span><div>-5</div>
|
|
<input type="radio" name="attr_physical" value="16" /><span></span>
|
|
<input type="radio" name="attr_physical" value="17" /><span></span>
|
|
<input type="radio" name="attr_physical" value="18" /><span></span><div>-6</div>
|
|
</div>
|
|
<div class="con-footer" title="@{overflow}">
|
|
<label data-i18n="overflow">Overflow</label><div class="attr-und"><span name="attr_overflow"></span></div>
|
|
</div>
|
|
</div>
|
|
<div class="con-track">
|
|
<input type="hidden" name="attr_stun" value="0" />
|
|
<button type="action" name="act_cond_reset_stun" data-i18n="stundamagetrack">Stun Damage Track</button>
|
|
<div class="squares">
|
|
<input class="hex-hider" type="hidden" name="attr_stun_max" value="10" />
|
|
<input type="radio" name="attr_stun" value="1" /><span></span>
|
|
<input type="radio" name="attr_stun" value="2" /><span></span>
|
|
<input type="radio" name="attr_stun" value="3" /><span></span><div>-1</div>
|
|
<input type="radio" name="attr_stun" value="4" /><span></span>
|
|
<input type="radio" name="attr_stun" value="5" /><span></span>
|
|
<input type="radio" name="attr_stun" value="6" /><span></span><div>-2</div>
|
|
<input type="radio" name="attr_stun" value="7" /><span></span>
|
|
<input type="radio" name="attr_stun" value="8" /><span></span>
|
|
<input type="radio" name="attr_stun" value="9" /><span></span><div>-3</div>
|
|
<input type="radio" name="attr_stun" value="10" /><span></span>
|
|
<input type="radio" name="attr_stun" value="11" /><span></span>
|
|
<input type="radio" name="attr_stun" value="12" /><span></span><div>-4</div>
|
|
<input type="radio" name="attr_stun" value="13" /><span></span>
|
|
<input type="radio" name="attr_stun" value="14" /><span></span>
|
|
<input type="radio" name="attr_stun" value="15" /><span></span><div>-5</div>
|
|
</div>
|
|
<div class="con-footer">
|
|
<span data-i18n="conditionfooter">For every 3 boxes of damage on any one damage track, the character takes a -1 Dice Pool modifier on tests; these modifiers are cumulative within and across damage tracks.</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- ~~~~~~~~ End of Condition Monitor ~~~~~~~~ -->
|
|
<div class="quality-box">
|
|
<div class="header right-header">
|
|
<div class="header htab">
|
|
<input class="tab-switch" input="input" name="attr_quality_toggle" type="radio" value="quality" checked="checked"/>
|
|
<h1 data-i18n="qualities">Qualities</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="header htab">
|
|
<div class="triangle"></div>
|
|
<input class="tab-switch" input="input" name="attr_quality_toggle" type="radio" value="martial"/>
|
|
<h1 data-i18n="martialarts">Martial Arts</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box">
|
|
<input class="tab-switch" input="input" name="attr_quality_toggle" type="hidden" value="quality"/>
|
|
<div class="quality">
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="quality">Quality</h2>
|
|
<h2 data-i18n="type">Type</h2>
|
|
</div>
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_quality">
|
|
<span class="eclipse" name="attr_quality"></span><span class="text-center" name="attr_type"></span>
|
|
<button class="pictos" name="quality_chat" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{quality}}}{{desc=@{notes}}}">w</button>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse"><span name="attr_notes"></span></div>
|
|
<div class="settings">
|
|
<input class="text-left" name="attr_quality" placeholder="quality name" title="@{repeating_quality_${x}_quality}" type="text"/>
|
|
<select name="attr_type" title="@{repeating_quality_${x}_type}" value="p">
|
|
<option data-i18n="p" value="P" selected="selected">P</option>
|
|
<option data-i18n="n" value="N">N</option>
|
|
</select>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_quality_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="martial">
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="technique">Technique</h2>
|
|
<h2 data-i18n="style">Style</h2>
|
|
</div>
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_martial">
|
|
<span class="eclipse" name="attr_technique"></span><span class="text-center" name="attr_style"></span>
|
|
<button class="pictos" name="technique_chat" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{technique}}}{{desc=@{notes}}}">w</button>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse"><span name="attr_notes"></span></div>
|
|
<div class="settings">
|
|
<input class="text-left" name="attr_technique" placeholder="technique name" title="@{repeating_martial_${x}_technique}" type="text"/>
|
|
<input name="attr_style" placeholder="style name" title="@{repeating_martial_${x}_style}" type="text"/>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_martial_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="arms pc-col">
|
|
<div class="pc-row weapons">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="weapons">Weapons</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="header right-header">
|
|
<div class="header htab">
|
|
<div class="triangle"></div>
|
|
<input class="tab-switch" name="attr_weapon_type_toggle" type="radio" value="range" checked="checked"/>
|
|
<h1 data-i18n="ranged">Ranged</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="header htab">
|
|
<div class="triangle"></div>
|
|
<input class="tab-switch" name="attr_weapon_type_toggle" type="radio" value="melee"/>
|
|
<h1 data-i18n="melee">Melee</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box">
|
|
<input class="tab-switch" name="attr_weapon_type_toggle" type="hidden" value="range"/>
|
|
<div class="rows repeating-container weapon-range">
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="weapon">Weapon</h2>
|
|
<h2 data-i18n="dam">Dam</h2>
|
|
<h2 data-i18n="acc">ACC</h2>
|
|
<h2 data-i18n="ap">AP</h2>
|
|
<h2 data-i18n="mode">Mode</h2>
|
|
<h2 data-i18n="recoil">Recoil</h2>
|
|
<h2 data-i18n="ammo">Ammo</h2>
|
|
</div>
|
|
<fieldset class="repeating_range">
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<input class="flag-primary" name="attr_primary" type="hidden" value=""/>
|
|
<button name="roll_range_weapon" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{weapon}}}{{base=^{agility}}}{{dice=[[((@{skill}+@{dicepool}+@{agility}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{mode}, ACC @{acc}, DV @{damage}, AP @{ap}}}"><span name="attr_weapon"></span></button>
|
|
<span class="text-center" name="attr_damage"></span><span class="text-center" name="attr_acc"></span><span class="text-center" name="attr_ap"></span>
|
|
<select name="attr_mode" title="@{mode}" value="BF">
|
|
<option data-i18n="bf" value="BF">BF</option>
|
|
<option data-i18n="fa" value="FA">FA</option>
|
|
<option data-i18n="sa" value="SA">SA</option>
|
|
<option data-i18n="ss" value="SS">SS</option>
|
|
<option data-i18n="other" value="Other">Other</option>
|
|
</select>
|
|
<span class="text-center" name="attr_recoil"></span><span class="text-center" name="attr_ammo"></span>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse"><span name="attr_notes"></span></div>
|
|
<div class="settings">
|
|
<label data-i18n-title="weapon" title="weapon"><input name="attr_weapon" placeholder="Ares Predator" title="@{repeating_range_${x}_weapon}" type="text" value=""/></label>
|
|
<label data-i18n-title="dam" title="dam"><input name="attr_damage" placeholder="9P" title="@{repeating_range_${x}_damage}" type="text" value=""/></label>
|
|
<label data-i18n-title="acc" title="acc"><input name="attr_acc" placeholder="5" title="@{repeating_range_${x}_acc}" type="text" value=""/></label>
|
|
<label data-i18n-title="ap" title="ap"><input name="attr_ap" placeholder="-2" title="@{repeating_range_${x}_ap}" type="number" value=""/></label>
|
|
<select name="attr_mode" title="@{mode}" value="BF">
|
|
<option data-i18n="bf" value="BF">BF</option>
|
|
<option data-i18n="fa" value="FA">FA</option>
|
|
<option data-i18n="sa" value="SA">SA</option>
|
|
<option data-i18n="ss" value="SS">SS</option>
|
|
<option data-i18n="other" value="Other">Other</option>
|
|
</select>
|
|
<label data-i18n-title="recoil" title="recoil"><input name="attr_recoil" placeholder="+2" title="@{repeating_range_${x}_recoil}" type="number" value=""/></label>
|
|
<label data-i18n-title="ammo" title="ammo"><input name="attr_ammo" placeholder="15" title="@{repeating_range_${x}_ammo}" type="number" value=""/></label>
|
|
<div class="row">
|
|
<h3 data-i18n="modeoptions">Mode Options</h3>
|
|
<label data-i18n-title="modeoptions" title="Mode Options"><input name="attr_mode_options" placeholder="SA/BF/FA" type="text" title="@{repeating_range_${x}_mode_options}}"/></label>
|
|
<h3 data-i18n="range">range</h3>
|
|
<label data-i18n-title="range" title="Range"><input name="attr_range" placeholder="25/150/350/550" type="text" title=""/></label>
|
|
<h3 data-i18n="primary">primary</h3>
|
|
<label data-i18n-title="primary" title="Primary"><input name="attr_primary" type="checkbox" title="@{repeating_range_${x}_primary}" value="primary"/></label>
|
|
</div>
|
|
<div class="row">
|
|
<h3 data-i18n="skill">skill</h3>
|
|
<select name="attr_skill" title="@{repeating_range_${x}_skill}" value="@{firearms}">
|
|
<optgroup label="Combat Skills">Combat Skills
|
|
<option data-i18n="firearmsgroup" value="@{firearms}" selected="selected">Firearms Group</option>
|
|
<option data-i18n="automatics" value="@{automatics}">Automatics</option>
|
|
<option data-i18n="archery" value="@{archery}">Archery</option>
|
|
<option data-i18n="exoticrange" value="0">Exotic Range</option>
|
|
<option data-i18n="heavyweapons" value="@{heavyweapons}">Heavy Weapons</option>
|
|
<option data-i18n="longarms" value="@{longarms}">Longarms</option>
|
|
<option data-i18n="pistols" value="@{pistols}">Pistols</option>
|
|
<option data-i18n="throwingweapons" value="@{throwingweapons}">Throwing Weapons</option>
|
|
</optgroup>
|
|
<optgroup label="Vehicle Skills">Vehicle Skills
|
|
<option data-i18n="gunnery" value="@{gunnery}">Gunnery</option>
|
|
</optgroup>
|
|
</select>
|
|
<h3 data-i18n="specialization">specialization</h3>
|
|
<label data-i18n-title="specialization" title="specialization"><input name="attr_specialization" value="2" title="@{repeating_range_${x}_specialization}" type="checkbox"/></label>
|
|
<h3 data-i18n="modifier">modifier</h3>
|
|
<label data-i18n-title="modifier" title="modifier"><input name="attr_dicepool_modifier" title="@{repeating_range_${x}_dicepool_modifier}" type="number" value="0"/></label>
|
|
<input name="attr_skill" type="hidden" value=""/>
|
|
<div class="exotic-warning">
|
|
<i data-i18n="exoticnote">Exotic weapons are not linked to a skill. Use Modifier input to set dicepool.</i>
|
|
</div>
|
|
</div>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_range_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows repeating-container weapon-melee">
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="weapon">Weapon</h2>
|
|
<h2 data-i18n="dam">Dam</h2>
|
|
<h2 data-i18n="acc">ACC</h2>
|
|
<h2 data-i18n="ap">AP</h2>
|
|
<h2 data-i18n="reach">Reach</h2>
|
|
</div>
|
|
<fieldset class="repeating_melee">
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<input class="flag-primary" name="attr_primary" type="hidden" value=""/>
|
|
<button name="roll_melee_weapon" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{weapon}}}{{base=^{agility}}}{{dice=[[((@{skill}+@{dicepool}+@{agility}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=ACC @{acc}, DV @{damage}, AP @{ap}, Reach @{reach}}}">
|
|
<span name="attr_weapon"></span>
|
|
</button>
|
|
<span class="text-center" name="attr_damage"></span><span class="text-center" name="attr_acc"></span><span class="text-center" name="attr_ap"></span><span class="text-center" name="attr_reach"></span>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse"><span name="attr_notes"></span></div>
|
|
<div class="settings">
|
|
<label data-i18n-title="weapon" title="weapon"><input name="attr_weapon" placeholder="Katana" title="@{repeating_melee_${x}_weapon}" type="text" value=""/></label>
|
|
<label data-i18n-title="dam" title="dam"><input name="attr_damage" placeholder="5P" title="@{repeating_melee_${x}_damage}" type="text" value=""/></label>
|
|
<label data-i18n-title="acc" title="acc"><input name="attr_acc" placeholder="7" title="@{repeating_melee_${x}_acc}" type="text" value=""/></label>
|
|
<label data-i18n-title="ap" title="ap"><input name="attr_ap" placeholder="-3" title="@{repeating_melee_${x}_ap}" type="number" value=""/></label>
|
|
<label data-i18n-title="reach" title="reach"><input name="attr_reach" placeholder="1" title="@{repeating_melee_${x}_reach}" type="number" value=""/></label>
|
|
<h3 data-i18n="primary">primary</h3>
|
|
<label data-i18n-title="primary" title="Primary"><input name="attr_primary" type="checkbox" title="@{repeating_melee_${x}_primary}" value="primary"/></label>
|
|
<div class="row">
|
|
<h3 data-i18n="skill">skill</h3>
|
|
<select name="attr_skill" title="@{repeating_melee_${x}_skill}" value="@{closecombat}">
|
|
<optgroup label="Combat Skills">Combat Skills
|
|
<option data-i18n="closecombatgroup" value="@{closecombat}" selected="selected">Close Combat Group</option>
|
|
<option data-i18n="blades" value="@{blades}">Blades</option>
|
|
<option data-i18n="clubs" value="@{clubs}">Clubs</option>
|
|
<option data-i18n="exoticmelee" value="0">Blades</option>
|
|
<option data-i18n="unarmedcombat" value="@{unarmedcombat}">Unarmed Combat</option>
|
|
</optgroup>
|
|
<optgroup label="Vehicle Skills">Vehicle Skills
|
|
<option data-i18n="gunnery" value="@{gunnery}">Gunnery</option>
|
|
</optgroup>
|
|
</select>
|
|
<h3 data-i18n="specialization">specialization</h3>
|
|
<label data-i18n-title="specialization" title="specialization"><input name="attr_specialization" value="2" title="@{repeating_melee_${x}_specialization}" type="checkbox"/></label>
|
|
<h3 data-i18n="modifier">modifier</h3>
|
|
<label data-i18n-title="modifier" title="modifier"><input name="attr_dicepool_modifier" title="@{repeating_melee_${x}_dicepool_modifier}" type="number"/></label>
|
|
<input name="attr_skill" type="hidden" value=""/>
|
|
<div class="exotic-warning">
|
|
<i data-i18n="exoticnote">Exotic weapons are not linked to a skill. Use Modifier input to set dicepool.</i>
|
|
</div>
|
|
</div>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_melee_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="pc-row armor">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="armor">Armor</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box">
|
|
<div class="rows repeating-container">
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="armor">Armor</h2>
|
|
<h2 data-i18n="rating">Rating</h2>
|
|
<h2 data-i18n="acid">Acid</h2>
|
|
<h2 data-i18n="cold">Cold</h2>
|
|
<h2 data-i18n="elec">Elec</h2>
|
|
<h2 data-i18n="fire">Fire</h2>
|
|
<h2 data-i18n="radi">Radi</h2>
|
|
</div>
|
|
<fieldset class="repeating_armor">
|
|
<input class="flag-primary" name="attr_primary" type="hidden" value=""/><button name="roll_soak" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{soak}}}{{base=^{body} ♦ ^{armor}}}{{dice=[[((@{body}+@{rating}+@{dicepool_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"><span name="attr_name"></span></button>
|
|
<button name="roll_armor" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{name}}}{{base= ^{armor}}}{{dice=[[((@{rating})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"><span class="text-center" name="attr_rating"></span></button>
|
|
<button name="roll_acid" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{acidprotection}}}{{base= ^{armor}}}{{dice=[[((@{body}+@{rating}+@{dicepool_modifier}+@{acid_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"><span class="text-center" name="attr_acid_modifier"></span></button>
|
|
<button name="roll_cold" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{coldprotection}}}{{base= ^{armor}}}{{dice=[[((@{body}+@{rating}+@{dicepool_modifier}+@{cold_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"><span class="text-center" name="attr_cold_modifier"></span></button>
|
|
<button name="roll_electrical" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{electricalprotection}}}{{base= ^{armor}}}{{dice=[[((@{body}+@{rating}+@{dicepool_modifier}+@{electrical_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"><span class="text-center" name="attr_electrical_modifier"></span></button>
|
|
<button name="roll_fire" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{fireprotection}}}{{base= ^{armor}}}{{dice=[[((@{body}+@{rating}+@{dicepool_modifier}+@{fire_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"><span class="text-center" name="attr_fire_modifier"></span></button>
|
|
<button name="roll_radiation" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{radiationprotection}}}{{base= ^{armor}}}{{dice=[[((@{body}+@{rating}+@{dicepool_modifier}+@{radiation_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"><span class="text-center" name="attr_radiation_modifier"></span></button>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="name" title="name">
|
|
<input name="attr_name" placeholder="Armor Jacket" title="@{@{repeating_armor_${x}_name}" type="text" value=""/>
|
|
</label>
|
|
<label data-i18n-title="rating" title="rating">
|
|
<input name="attr_rating" placeholder="12" title="@{@{repeating_armor_${x}_rating}" type="number" value=""/>
|
|
</label>
|
|
<label data-i18n-title="acid" title="acid">
|
|
<input name="attr_acid_modifier" placeholder="+5" title="@{@{repeating_armor_${x}_acid_modifier}" type="number" value=""/>
|
|
</label>
|
|
<label data-i18n-title="cold" title="cold">
|
|
<input name="attr_cold_modifier" placeholder="0" title="@{@{repeating_armor_${x}_cold_modifier}" type="number" value=""/>
|
|
</label>
|
|
<label data-i18n-title="electrical" title="electrical">
|
|
<input name="attr_electrical_modifier" placeholder="0" title="@{@{repeating_armor_${x}_electrical_modifier}" type="number" value=""/>
|
|
</label>
|
|
<label data-i18n-title="fire" title="fire">
|
|
<input name="attr_fire_modifier" placeholder="0" title="@{@{repeating_armor_${x}_fire_modifier}" type="number" value=""/>
|
|
</label>
|
|
<label data-i18n-title="radiation" title="radiation">
|
|
<input name="attr_radiation_modifier" placeholder="0" title="@{@{repeating_armor_${x}_radiation_modifier}" type="number" value=""/>
|
|
</label>
|
|
<div class="row">
|
|
<h3 data-i18n="primary">primary</h3>
|
|
<label data-i18n-title="primary" title="Primary"><input name="attr_primary" type="checkbox" title="@{@{repeating_armor_${x}_primary}" value="primary"/></label>
|
|
<h3 data-i18n="modifier">modifier</h3>
|
|
<label data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_dicepool_modifier" placeholder="0" title="@{@{repeating_armor_${x}_dicepool_modifier}" type="number" value="0"/>
|
|
</label>
|
|
</div>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_armor_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="augs pc-col">
|
|
<div class="pc-row">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="augmentations">Augmentations</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box">
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="augmentations">Augmentations</h2>
|
|
<h2 data-i18n="rating">Rating</h2>
|
|
<h2 data-i18n="essence">Essence</h2>
|
|
</div>
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_augementations">
|
|
<span name="attr_augmentation"></span><span class="text-center" name="attr_rating"></span><span class="text-center" name="attr_essence"></span><input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span><input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="Augmentations" title="Augmentations"><input class="text-left" name="attr_augmentation" placeholder="name" title="@{repeating_augementations_${x}_augmentation}" type="text" value=""/></label>
|
|
<label data-i18n-title="Rating" title="Rating"><input class="text-center" name="attr_rating" placeholder="0" title="@{repeating_augementations_${x}_rating}" type="number" value=""/></label>
|
|
<label data-i18n-title="Essence" title="Essence"><input class="text-center" name="attr_essence" placeholder="0" title="@{repeating_augementations_${x}_essence}" type="number" value=""/></label>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_augementations_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="gear pc-col">
|
|
<div class="pc-row">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="gear">gear</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box">
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="item">Item</h2>
|
|
<h2 data-i18n="rating">Rating</h2>
|
|
<h2 data-i18n="quantity">Quantity</h2>
|
|
</div>
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_items">
|
|
<select class="pictos" name="attr_location" value="person">
|
|
<option class="pictos" value="person">U</option>
|
|
<option class="pictos" value="bag">O</option>
|
|
<option class="pictos" value="home">H</option>
|
|
<option class="pictos" value="vehicle">X</option>
|
|
<option class="pictos" value="other">.</option>
|
|
</select>
|
|
<input name="attr_location" type="hidden" value="person"/><span class="text-left" name="attr_item"></span><span class="text-center" name="attr_rating"></span><span class="text-center" name="attr_quantity"></span>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<h3 data-i18n="modifications"></h3><span name="attr_modifications"></span>
|
|
<h3 data-i18n="notes"></h3><span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<h3 data-i18n="item">Item</h3>
|
|
<h3 data-i18n="rating">Rating</h3>
|
|
<h3 data-i18n="quantity">Quantity</h3>
|
|
<label data-i18n-title="item" title="item"><input class="text-left" name="attr_item" placeholder="Jammer" title="@{repeating_items_${x}_item}" type="text" value=""/></label>
|
|
<label data-i18n-title="rating" title="rating"><input name="attr_rating" placeholder="3" title="@{repeating_items_${x}_rating}" type="text" value=""/></label>
|
|
<label data-i18n-title="quantity" title="quantity"><input name="attr_quantity" placeholder="x3" title="@{repeating_items_${x}_quantity}" type="text" value=""/></label>
|
|
<h3 data-i18n="modifications"></h3>
|
|
<label data-i18n-title="modifications" title="modifications">
|
|
<input class="text-left" name="attr_modifications" placeholder="Image Link" title="@{repeating_items_${x}_modifications}" type="text" value=""/>
|
|
</label>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_items_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="magic pc-col">
|
|
<div class="pc-row spell-box">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="magic">Magic</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="header right-header">
|
|
<div class="header htab">
|
|
<div class="triangle"></div><input class="magic-toggle" name="attr_magic_toggle" title="@{magic_toggle}" type="radio" value="spells" checked="checked"/><h1 data-i18n="spells"></h1><div class="right-tri"></div>
|
|
</div>
|
|
<div class="header htab">
|
|
<div class="triangle"></div><input class="magic-toggle" name="attr_magic_toggle" title="@{magic_toggle}" type="radio" value="preps"/><h1 data-i18n="preps"></h1><div class="right-tri"></div>
|
|
</div>
|
|
<div class="header htab">
|
|
<div class="triangle"></div><input class="magic-toggle" name="attr_magic_toggle" title="@{magic_toggle}" type="radio" value="rituals"/><h1 data-i18n="rituals"></h1><div class="right-tri"></div>
|
|
</div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box">
|
|
<button data-i18n="drain" name="roll_drain" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{drain}}}{{base=^{base}}}{{dice=[[((@{drain_attribute_1}+@{drain_attribute_2}+@{drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
<select class="attribute-select" name="attr_drain_attribute_1" title="@{drain_attribute_1}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}" selected="selected">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<span>+</span>
|
|
<select class="attribute-select" name="attr_drain_attribute_2" title="@{drain_attribute_2}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}" selected="selected">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<h3 data-i18n="modifier">modifier</h3>
|
|
<label data-i18n-title="modifier" title="modifier"><input name="attr_drain_modifier" title="@{drain_modifier}" type="number" value="0"/></label>
|
|
<input class="magic-toggle" name="attr_magic_toggle" type="hidden" value="spells"/>
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="spells">spells</h2>
|
|
<h2 data-i18n="type">type</h2>
|
|
<h2 data-i18n="range">range</h2>
|
|
<h2 data-i18n="duration">duration</h2>
|
|
<h2 data-i18n="drain">drain</h2>
|
|
</div>
|
|
<div class="magic-spells spellsForumlas">
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_spell">
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<button class="display-none" name="roll_drain" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{drain}}}{{base=^{base}}}{{dice=[[((@{drain_attribute_1}+@{drain_attribute_2}+@{drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
<button name="roll_spell" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{name}}}{{base=^{magic}}}{{dice=[[((@{skill}+@{dicepool}+@{magic}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{combat_type}?{Force|}}}{{drain=[[?{Force|}+(@{drain})]] [f](~repeating_spell_drain)}}">
|
|
<span name="attr_name"></span>
|
|
</button>
|
|
<span class="text-center" name="attr_type"></span><span class="text-center" name="attr_range"></span><span class="text-center" name="attr_duration"></span><span class="text-center" name="attr_drain"></span><input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span><input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="name" title="Name"><input name="attr_name" placeholder="Fireball" title="@{repeating_spell_${x}_name}" type="text"/></label>
|
|
<select name="attr_type" title="@{repeating_spell_${x}_type}" value="physical">
|
|
<option data-i18n="mana" value="Mana">mana</option>
|
|
<option data-i18n="physical" value="Physical" selected="selected">physical</option>
|
|
</select>
|
|
<select name="attr_range" title="@{repeating_spell_${x}_range}" value="los">
|
|
<option data-i18n="los" value="LOS" selected="selected">los</option>
|
|
<option data-i18n="los (a)" value="LOS (A)">los (a)</option>
|
|
<option data-i18n="special" value="Special">special</option>
|
|
<option data-i18n="t" value="T">t</option>
|
|
<option data-i18n="t (a)" value="T (A)">t (a)</option>
|
|
</select>
|
|
<select name="attr_duration" title="@{repeating_spell_${x}_duration}" value="instant">
|
|
<option data-i18n="instant" value="Instant" selected="selected">instant</option>
|
|
<option data-i18n="permanent" value="Permanent">permanent</option>
|
|
<option data-i18n="special" value="Special">special</option>
|
|
<option data-i18n="sustained" value="Sustained">sustained</option>
|
|
</select>
|
|
<label data-i18n-title="drain" title="Drain"><input name="attr_drain" placeholder="-1" title="@{repeating_spell_${x}_drain}" type="number"/></label>
|
|
<div class="row">
|
|
<h3 data-i18n="category">Category</h3>
|
|
<select name="attr_category" title="@{repeating_spell_${x}_category}" value="Combat">
|
|
<option data-i18n="combat" value="Combat">combat</option>
|
|
<option data-i18n="detection" value="Detection">detection</option>
|
|
<option data-i18n="health" value="Health">health</option>
|
|
<option data-i18n="illusion" value="Illusion">illusion</option>
|
|
<option data-i18n="manipulation" value="Manipulation">manipulation</option>
|
|
</select>
|
|
<h3 data-i18n="combat">Combat</h3>
|
|
<select name="attr_combat_type" title="@{repeating_spell_${x}_combat_type}" value="force">
|
|
<option data-i18n="force" value="Force " selected="selected">force</option>
|
|
<option data-i18n="direct" value="Direct, Force ">direct</option>
|
|
<option data-i18n="indirect" value="Indirect, Force ?{Force|}, AP -">indirect</option>
|
|
</select>
|
|
<h3 data-i18n="damage">Damage</h3>
|
|
</div>
|
|
<div class="row">
|
|
<h3 data-i18n="skill">Skill</h3>
|
|
<select name="attr_skill" title="@{repeating_spell_${x}_skill}" value="@{spellcasting}">
|
|
<option data-i18n="sorcerygroup" value="@{sorcery}">sorcerygroup</option>
|
|
<option data-i18n="spellcasting" value="@{spellcasting}" selected="selected">spellcasting</option>
|
|
</select>
|
|
<h3 data-i18n="specialization">Specialization</h3>
|
|
<label data-i18n-title="specialization" title="Specialization"><input name="attr_specialization" title="@{repeating_spell_${x}_specialization}" type="checkbox" value="2"/></label>
|
|
<h3 data-i18n="modifierdice">modifier dice</h3>
|
|
<label data-i18n-title="modifierdice" title="modifier dice"><input name="attr_dicepool_modifier" placeholder="0" title="@{repeating_spell_${x}_dicepool_modifier}" type="number" value="0"/></label>
|
|
</div>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_spell_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="magic-preps spellsForumlas">
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_preps">
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<button class="display-none" name="roll_drain" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{drain}}}{{base=^{base}}}{{dice=[[((@{drain_attribute_1}+@{drain_attribute_2}+@{drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
<button name="roll_preps" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{name}}}{{base=^{magic}}}{{dice=[[((@{skill}+@{dicepool}+@{magic}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{combat_type}?{Force|}}}{{drain=[[?{Force|}+(@{drain})]] [f](~repeating_preps_drain)}}">
|
|
<span name="attr_name"></span>
|
|
</button>
|
|
<span class="text-center" name="attr_type"></span><span class="text-center" name="attr_range"></span><span class="text-center" name="attr_duration"></span><span class="text-center" name="attr_drain"></span><input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span><input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="name" title="Name"><input name="attr_name" placeholder="Fireball" title="@{repeating_preps_${x}_name}" type="text"/></label>
|
|
<select name="attr_type" title="@{repeating_preps_${x}_type}" value="physical">
|
|
<option data-i18n="mana" value="Mana">mana</option>
|
|
<option data-i18n="physical" value="Physical" selected="selected">physical</option>
|
|
</select>
|
|
<select name="attr_range" title="@{repeating_preps_${x}_range}" value="los">
|
|
<option data-i18n="los" value="LOS" selected="selected">los</option>
|
|
<option data-i18n="los (a)" value="LOS (A)">los (a)</option>
|
|
<option data-i18n="special" value="Special">special</option>
|
|
<option data-i18n="t" value="T">t</option>
|
|
<option data-i18n="t (a)" value="T (A)">t (a)</option>
|
|
</select>
|
|
<select name="attr_duration" title="@{repeating_preps_${x}_duration}" value="instant">
|
|
<option data-i18n="instant" value="Instant" selected="selected">instant</option>
|
|
<option data-i18n="permanent" value="Permanent">permanent</option>
|
|
<option data-i18n="special" value="Special">special</option>
|
|
<option data-i18n="sustained" value="Sustained">sustained</option>
|
|
</select>
|
|
<label data-i18n-title="drain" title="Drain"><input name="attr_drain" placeholder="-1" title="@{repeating_preps_${x}_drain}" type="number"/></label>
|
|
<div class="row">
|
|
<h3 data-i18n="category">Category</h3>
|
|
<select name="attr_category" title="@{repeating_preps_${x}_category}" value="Combat">
|
|
<option data-i18n="combat" value="Combat">combat</option>
|
|
<option data-i18n="detection" value="Detection">detection</option>
|
|
<option data-i18n="health" value="Health">health</option>
|
|
<option data-i18n="illusion" value="Illusion">illusion</option>
|
|
<option data-i18n="manipulation" value="Manipulation">manipulation</option>
|
|
</select>
|
|
<h3 data-i18n="combat">Combat</h3>
|
|
<select name="attr_combat_type" title="@{repeating_preps_${x}_combat_type}" value="force">
|
|
<option data-i18n="force" value="Force " selected="selected">force</option>
|
|
<option data-i18n="direct" value="Direct, Force ">direct</option>
|
|
<option data-i18n="indirect" value="Indirect, Force ?{Force|}, AP -">indirect</option>
|
|
</select>
|
|
<h3 data-i18n="damage">Damage</h3>
|
|
</div>
|
|
<div class="row">
|
|
<h3 data-i18n="skill">Skill</h3>
|
|
<select name="attr_skill" title="@{repeating_preps_${x}_skill}" value="@{alchemy}">
|
|
<option data-i18n="enchantinggroup" value="@{enchanting}">enchantinggroup</option>
|
|
<option data-i18n="alchemy" value="@{alchemy}" selected="selected">alchemy</option>
|
|
</select>
|
|
<h3 data-i18n="specialization">Specialization</h3>
|
|
<label data-i18n-title="specialization" title="Specialization"><input name="attr_specialization" title="@{repeating_preps_${x}_specialization}" type="checkbox" value="2"/></label>
|
|
<h3 data-i18n="modifierdice">modifier dice</h3>
|
|
<label data-i18n-title="modifierdice" title="modifier dice"><input name="attr_dicepool_modifier" placeholder="0" title="@{repeating_preps_${x}_dicepool_modifier}" type="number" value="0"/></label>
|
|
</div>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_preps_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows repeating-container prepared-preparations">
|
|
<h2 data-i18n="preperations"></h2>
|
|
<div class="row-long headers">
|
|
<h3 data-i18n="name"></h3>
|
|
<h3 data-i18n="force"></h3>
|
|
<h3 data-i18n="potency"></h3>
|
|
<h3 data-i18n="trigger"></h3>
|
|
</div>
|
|
<fieldset class="repeating_preperations">
|
|
<button name="roll_preparation" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{name}}}{{base=^{base}}}{{dice=[[((@{force}+@{potency})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}undefined">
|
|
<span name="attr_name"></span>
|
|
</button>
|
|
<span class="text-center" name="attr_force"></span><span class="text-center" name="attr_potency"></span><span class="text-center" name="attr_trigger"></span><input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span><input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="name" title="name"><input name="attr_name" placeholder="Name" title="@{repeating_preperations_${x}_name}" type="text" value=""/></label>
|
|
<label data-i18n-title="force" title="force"><input name="attr_force" placeholder="1" title="@{repeating_preperations_${x}_force}" type="number" value=""/></label>
|
|
<label data-i18n-title="potency" title="potency"><input name="attr_potency" placeholder="1" title="@{repeating_preperations_${x}_potency}" type="number" value=""/></label>
|
|
<select name="attr_trigger" title="@{repeating_preperations_${x}_trigger}" value="Command">
|
|
<optgroup label="Trigger">Trigger
|
|
<option data-i18n="command" value="Command">command</option>
|
|
<option data-i18n="contact" value="Contact" selected="selected">contact</option>
|
|
<option data-i18n="time" value="Time">time</option>
|
|
<option data-i18n="special" value="Special">special</option>
|
|
</optgroup>
|
|
</select>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_preperations_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="magic-rituals">
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_ritual">
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<button name="roll_ritual" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{name}}}{{base=^{base}}}{{dice=[[((@{skill}+@{dicepool}+@{magic}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=^{force} ?{Force|}}}">
|
|
<span name="attr_name"></span>
|
|
</button>
|
|
<span class="text-center" name="attr_type"></span><span class="text-center" name="attr_range"></span><span class="text-center" name="attr_duration"></span><span class="text-center" name="attr_drain"></span><input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span><input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="name" title="name"><input name="attr_name" placeholder="Curse (MATERIAL LINK, SPELL)" title="@{@{repeating_undefined_${x}_name}" type="text"/></label>
|
|
<div class="rows">
|
|
<h3 data-i18n="skill">skill</h3>
|
|
<select name="attr_skill" title="@{@{repeating_undefined_${x}_skill}">
|
|
<option data-i18n="sorcerygroup" value="@{sorcery}">Sorcery Group</option>
|
|
<option data-i18n="ritualspellcasting" value="@{ritualspellcasting}" selected="selected">Ritual Spellcasting</option>
|
|
</select>
|
|
<h3 data-i18n="specialization">specialization</h3>
|
|
<label data-i18n-title="specialization" title="specialization"><input name="attr_specialization" title="@{@{repeating_undefined_${x}_specialization}" type="checkbox" value="2"/></label>
|
|
<h3 data-i18n="modifier">modifier</h3>
|
|
<label data-i18n-title="modifier" title="modifier"><input name="attr_dicepool_modifier" title="@{@{repeating_undefined_${x}_dicepool_modifier}" type="number"/></label>
|
|
</div>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_ritual_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="pc-row powers">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="adeptpowers">Adept Powers or Other Abilities</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box">
|
|
<button data-i18n="drain" name="roll_drain" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{drain}}}{{base=^{base}}}{{dice=[[((@{drain_attribute_1}+@{drain_attribute_2}+@{drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
<select class="attribute-select" name="attr_drain_attribute_1" title="@{drain_attribute_1}">
|
|
<option data-i18n="body" value="@{body}" selected="selected">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<span>+</span>
|
|
<select class="attribute-select" name="attr_drain_attribute_2" title="@{drain_attribute_2}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}" selected="selected">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<h3 data-i18n="modifier">modifier</h3>
|
|
<label data-i18n-title="modifier" title="modifier"><input name="attr_drain_modifier" title="@{drain_modifier}" type="number" value="0"/></label>
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="name">Name</h2>
|
|
<h2 class="text-center" data-i18n="rating">Rating</h2>
|
|
</div>
|
|
<div class="rows repeating-container powers">
|
|
<fieldset class="repeating_powers">
|
|
<span name="attr_name"></span><span class="text-center" name="attr_rating"></span>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/>
|
|
<span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="name" title="name"><input name="attr_name" placeholder="name" title="@{repeating_powers_${x}_name}" type="text" value=""/></label>
|
|
<label data-i18n-title="rating" title="rating"><input name="attr_rating" placeholder="rating" title="@{repeating_powers_${x}_rating}" type="number" value=""/></label>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes"><textarea name="attr_notes" placeholder="Notes" title="@{repeating_powers_${x}_notes}" type="text" value=""></textarea></label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="matrix pc-col">
|
|
<div class="pc-row matrix-box">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="matrix">Matrix</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="header right-header">
|
|
<div class="header htab"><div class="triangle"></div><input class="matrix-toggle" name="attr_matrix_toggle" title="@{matrix_toggle}" type="radio" value="cyberdeck" checked="checked"/><h1 data-i18n="cyberdeck"></h1><div class="right-tri"></div></div>
|
|
<div class="header htab">
|
|
<div class="triangle"></div>
|
|
<input class="matrix-toggle" name="attr_matrix_toggle" title="@{matrix_toggle}" type="radio" value="persona"/>
|
|
<h1 data-i18n="living persona"></h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box">
|
|
<input class="matrix-toggle" name="attr_matrix_toggle" type="hidden" value="cyberdeck"/>
|
|
<div class="matrix-switches">
|
|
<input type="hidden" name="attr_hot_sim" value="0"/>
|
|
<div class="matrix-mode"><h3 data-i18n="mode"></h3>
|
|
<div class="switch-3">
|
|
<label data-i18n-title="augmented reality switch" title="augmented reality switch">
|
|
<input name="attr_matrix_mode_toggle" type="radio" value="ar" checked="checked"/><span class="text-uppercase" data-i18n="ar"></span>
|
|
</label>
|
|
<label data-i18n-title="virtual reality cold switch" title="virtual reality cold switch">
|
|
<input name="attr_matrix_mode_toggle" type="radio" value="cold"/><span class="text-uppercase" data-i18n="vr (cold)"></span>
|
|
</label>
|
|
<label data-i18n-title="virtual reality hot switch" title="virtual reality hot switch">
|
|
<input name="attr_matrix_mode_toggle" type="radio" value="hot"/><span class="text-uppercase" data-i18n="vr (hot)"></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="running-silent">
|
|
<h3 data-i18n="running silent"></h3>
|
|
<label class="switch" data-i18n-title="running silent switch" title="running silent switch">
|
|
<input class="whisper-toggle" name="attr_running_silent" type="checkbox" value="2"/><span class="slider"></span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="cyberdeck">
|
|
<div class="row-long">
|
|
<label data-i18n="model">Model</label>
|
|
<input type="text" name="attr_cyberdeck" value="" placeholder="Sony CYI-720" title="Cyberdeck name" />
|
|
</div>
|
|
<div class="row-long">
|
|
<label>
|
|
<button type="roll" name="device rating" value="&{template:rolls}{{header=^{matrixsoak}}}{{base=^{devicerating}}}{{dice=[[((@{device_rating}+@{firewall})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Roll matrix soak" data-i18n="devicerating">Device Rating</button>
|
|
</label>
|
|
<input type="number" name="attr_device_rating" min="0" value="" placeholder="4" style="margin-right: 15%;" title="@{device_rating}" />
|
|
<label data-i18n="attributearray">Attribute Array</label>
|
|
<input type="number" name="attr_attribute_1" min="0" value="" placeholder="7" />
|
|
<input type="number" name="attr_attribute_2" min="0" value="" placeholder="6" />
|
|
<input type="number" name="attr_attribute_3" min="0" value="" placeholder="5" />
|
|
<input type="number" name="attr_attribute_4" min="0" value="" placeholder="4" />
|
|
</div>
|
|
<div class="row-long">
|
|
<h3 data-i18n="total">Total</h3><h3 data-i18n="temp">Temp</h3><h3 data-i18n="modifier">modifier</h3><h3 data-i18n="base">Base</h3><h3 data-i18n="baseslider">Base slider</h3><br />
|
|
<label><button type="roll" name="attack" value="&{template:rolls}{{header=^{attack}}}{{base=^{attack}}}{{dice=[[(@{attack}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Roll attack" data-i18n="attack">Attack</button>
|
|
</label>
|
|
<div class="matrix-tot" title="@{attack}" ><span name="attr_attack"></span></div><span> = </span>
|
|
<input type="number" name="attr_attack_temp" min="0" value="" placeholder="0" title="@{attack_temp}" /><spam> + </spam>
|
|
<input type="number" name="attr_attack_modifier" min="0" value="" placeholder="0" title="@{attack_modifier}" /><spam> + </spam>
|
|
<input type="number" name="attr_attack_base" min="0" value="" placeholder="7" title="@{attack_base}" />
|
|
<div class="device-attr">
|
|
<div class="matrix-bubble matrixAttack">
|
|
<input type="radio" name="attr_attack_base" value="1" /><span></span>
|
|
<input type="radio" name="attr_attack_base" value="2" /><span></span>
|
|
<input type="radio" name="attr_attack_base" value="3" /><span></span>
|
|
<input type="radio" name="attr_attack_base" value="4" /><span></span>
|
|
<input type="radio" name="attr_attack_base" value="5" /><span></span>
|
|
<input type="radio" name="attr_attack_base" value="6" /><span></span>
|
|
<input type="radio" name="attr_attack_base" value="7" /><span></span>
|
|
<input type="radio" name="attr_attack_base" value="8" /><span></span>
|
|
<input type="radio" name="attr_attack_base" value="9" /><span></span>
|
|
<input type="radio" name="attr_attack_base" value="10" /><span></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row-long">
|
|
<label><button type="roll" name="sleaze" value="&{template:rolls}{{header=^{sleaze}}}{{base=^{base}}}{{dice=[[(@{sleaze}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Roll sleaze" data-i18n="sleaze">Sleaze</button></label>
|
|
<div class="matrix-tot" title="@{sleaze}" ><span name="attr_sleaze"></span></div><span> = </span>
|
|
<input type="number" name="attr_sleaze_temp" min="0" value="" placeholder="0" title="@{sleaze_temp}" /><spam> + </spam>
|
|
<input type="number" name="attr_sleaze_modifier" min="0" value="" placeholder="0" title="@{sleaze_modifier}" /><spam> + </spam>
|
|
<input type="number" name="attr_sleaze_base" min="0" value="" placeholder="6" title="@{sleaze_base}" />
|
|
<div class="device-attr">
|
|
<div class="matrix-bubble matrixSleaze">
|
|
<input type="radio" name="attr_sleaze_base" value="1" /><span></span>
|
|
<input type="radio" name="attr_sleaze_base" value="2" /><span></span>
|
|
<input type="radio" name="attr_sleaze_base" value="3" /><span></span>
|
|
<input type="radio" name="attr_sleaze_base" value="4" /><span></span>
|
|
<input type="radio" name="attr_sleaze_base" value="5" /><span></span>
|
|
<input type="radio" name="attr_sleaze_base" value="6" /><span></span>
|
|
<input type="radio" name="attr_sleaze_base" value="7" /><span></span>
|
|
<input type="radio" name="attr_sleaze_base" value="8" /><span></span>
|
|
<input type="radio" name="attr_sleaze_base" value="9" /><span></span>
|
|
<input type="radio" name="attr_sleaze_base" value="10" /><span></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row-long">
|
|
<label><button type="roll" name="data processing" value="&{template:rolls}{{header=^{data_processing}}}{{base=^{base}}}{{dice=[[(@{data_processing}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Roll data processing" data-i18n="dataproc">Data Proc.</button></label>
|
|
<div class="matrix-tot" title="@{data_processing}" ><span name="attr_data_processing"></span></div><span> = </span>
|
|
<input type="number" name="attr_data_processing_temp" min="0" alue="" placeholder="0" title="@{data_processing_temp}" /><spam> + </spam>
|
|
<input type="number" name="attr_data_processing_modifier" min="0" value="" placeholder="0" title="@{data_processing_modifier}" /><spam> + </spam>
|
|
<input type="number" name="attr_data_processing_base" min="0" value="" placeholder="5" title="@{data_processing_base}" />
|
|
<div class="device-attr">
|
|
<div class="matrix-bubble matrixData">
|
|
<input type="radio" name="attr_data_processing_base" value="1" /><span></span>
|
|
<input type="radio" name="attr_data_processing_base" value="2" /><span></span>
|
|
<input type="radio" name="attr_data_processing_base" value="3" /><span></span>
|
|
<input type="radio" name="attr_data_processing_base" value="4" /><span></span>
|
|
<input type="radio" name="attr_data_processing_base" value="5" /><span></span>
|
|
<input type="radio" name="attr_data_processing_base" value="6" /><span></span>
|
|
<input type="radio" name="attr_data_processing_base" value="7" /><span></span>
|
|
<input type="radio" name="attr_data_processing_base" value="8" /><span></span>
|
|
<input type="radio" name="attr_data_processing_base" value="9" /><span></span>
|
|
<input type="radio" name="attr_data_processing_base" value="10" /><span></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row-long">
|
|
<label><button type="roll" name="firewall" value="&{template:rolls}{{header=^{firewall}}}{{base=^{base}}}{{dice=[[(@{firewall}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" title="Roll firewall" data-i18n="firewall">Firewall</button></label>
|
|
<div class="matrix-tot" title="@{firewall}" ><span name="attr_firewall"></span></div><span> = </span>
|
|
<input type="number" name="attr_firewall_temp" min="0" value="" placeholder="0" title="@{firewall_temp}" /><spam> + </spam>
|
|
<input type="number" name="attr_firewall_modifier" min="0" value="" placeholder="0" title="@{firewall_modifier}" /><spam> + </spam>
|
|
<input type="number" name="attr_firewall_base" min="0" value="" placeholder="4" title="@{firewall_base}" />
|
|
<div class="device-attr">
|
|
<div class="matrix-bubble matrixFirewall">
|
|
<input type="radio" name="attr_firewall_base" value="1" /><span></span>
|
|
<input type="radio" name="attr_firewall_base" value="2" /><span></span>
|
|
<input type="radio" name="attr_firewall_base" value="3" /><span></span>
|
|
<input type="radio" name="attr_firewall_base" value="4" /><span></span>
|
|
<input type="radio" name="attr_firewall_base" value="5" /><span></span>
|
|
<input type="radio" name="attr_firewall_base" value="6" /><span></span>
|
|
<input type="radio" name="attr_firewall_base" value="7" /><span></span>
|
|
<input type="radio" name="attr_firewall_base" value="8" /><span></span>
|
|
<input type="radio" name="attr_firewall_base" value="9" /><span></span>
|
|
<input type="radio" name="attr_firewall_base" value="10" /><span></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="con-hex">
|
|
<input type="radio" name="attr_matrix" value="0" /><h2 data-i18n="conditionmonitor">Condition Monitor</h2>
|
|
<input type="radio" name="attr_matrix" value="1" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="2" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="3" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="4" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="5" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="6" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="7" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="8" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="9" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="10" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="11" /><span class="hexagon"></span>
|
|
<input type="radio" name="attr_matrix" value="12" /><span class="hexagon"></span>
|
|
</div>
|
|
<div class="rows repeating-container programs">
|
|
<h2 data-i18n="programs">Programs</h2>
|
|
<fieldset class="repeating_programs">
|
|
<input class="toggle indicator" name="attr_program_on" type="checkbox" checked="checked"/>
|
|
<span class="pictos">Q</span><span class="eclipse" name="attr_program"></span>
|
|
<button class="pictos" name="program_chat" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{program}}}{{desc=@{notes}}}">w</button>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/>
|
|
<span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="programs" title="programs"><input name="attr_program" placeholder="Program name" title="@{repeating_programs_${x}_program}" type="text" value=""/></label>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes"><textarea name="attr_notes" placeholder="Notes" title="@{repeating_programs_${x}_notes}" type="text" value=""></textarea></label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<div class="persona">
|
|
<div class="row headers"><h3 data-i18n="attribute"></h3><h3 data-i18n="total"></h3><h3 data-i18n="temp"></h3><h3 data-i18n="base"></h3></div><input type="hidden" name="attr_persona_attack" min="0" value="0"/>
|
|
<div class="row-long">
|
|
<div class="attribute">
|
|
<button class="text-left font-bolder" type="roll" name="attack" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{attack}}}{{base=^{attack}}}{{dice=[[(@{charisma}+@{persona_attack_temp}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}|Charisma,@{charisma}})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}" title="Roll attack" data-i18n="attack"></button>
|
|
</div>
|
|
<div class="total text-center">
|
|
<label data-title-i18n="attack"><input min="0" name="attr_persona_attack" placeholder="0" title="@{persona_attack}" type="number" value="@{charisma}+@{persona_attack_temp}" disabled="disabled"/></label>
|
|
</div>
|
|
<div class="temp text-center">
|
|
<label data-title-i18n="attack"><input min="0" name="attr_persona_attack_temp" placeholder="0" title="@{persona_attack_temp}" type="number" value="0"/></label>
|
|
</div>
|
|
<div class="base text-center">
|
|
<span name="attr_charisma"></span>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" name="attr_persona_data_processing" min="0" value="0"/>
|
|
<div class="row-long">
|
|
<div class="attribute">
|
|
<button class="text-left font-bolder" type="roll" name="data_processing" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{data_processing}}}{{base=^{data_processing}}}{{dice=[[(@{logic}+@{persona_data_processing_temp}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}|Charisma,@{charisma}})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}" title="Roll attack" data-i18n="data_processing"></button>
|
|
</div>
|
|
<div class="total text-center">
|
|
<label data-title-i18n="data_processing"><input min="0" name="attr_persona_data_processing" placeholder="0" title="@{persona_data_processing}" type="number" value="@{logic}+@{persona_data_processing_temp}" disabled="disabled"/></label>
|
|
</div>
|
|
<div class="temp text-center">
|
|
<label data-title-i18n="data_processing"><input min="0" name="attr_persona_data_processing_temp" placeholder="0" title="@{persona_data_processing_temp}" type="number" value="0"/></label>
|
|
</div>
|
|
<div class="base text-center">
|
|
<span name="attr_logic"></span>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" name="attr_persona_sleaze" min="0" value="0"/>
|
|
<div class="row-long">
|
|
<div class="attribute">
|
|
<button class="text-left font-bolder" type="roll" name="sleaze" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{sleaze}}}{{base=^{sleaze}}}{{dice=[[(@{intuition}+@{persona_sleaze_temp}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}|Charisma,@{charisma}})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}" title="Roll attack" data-i18n="sleaze"></button>
|
|
</div>
|
|
<div class="total text-center">
|
|
<label data-title-i18n="sleaze"><input min="0" name="attr_persona_sleaze" placeholder="0" title="@{persona_sleaze}" type="number" value="@{intuition}+@{persona_sleaze_temp}" disabled="disabled"/></label>
|
|
</div>
|
|
<div class="temp text-center">
|
|
<label data-title-i18n="sleaze"><input min="0" name="attr_persona_sleaze_temp" placeholder="0" title="@{persona_sleaze_temp}" type="number" value="0"/></label>
|
|
</div>
|
|
<div class="base text-center">
|
|
<span name="attr_intuition"></span>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" name="attr_persona_firewall" min="0" value="0"/>
|
|
<div class="row-long">
|
|
<div class="attribute">
|
|
<button class="text-left font-bolder" type="roll" name="firewall" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{firewall}}}{{base=^{firewall}}}{{dice=[[(@{willpower}+@{persona_firewall_temp}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}|Charisma,@{charisma}})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}" title="Roll attack" data-i18n="firewall"></button>
|
|
</div>
|
|
<div class="total text-center">
|
|
<label data-title-i18n="firewall"><input min="0" name="attr_persona_firewall" placeholder="0" title="@{persona_firewall}" type="number" value="@{willpower}+@{persona_firewall_temp}" disabled="disabled"/></label>
|
|
</div>
|
|
<div class="temp text-center">
|
|
<label data-title-i18n="firewall"><input min="0" name="attr_persona_firewall_temp" placeholder="0" title="@{persona_firewall_temp}" type="number" value="0"/></label>
|
|
</div>
|
|
<div class="base text-center">
|
|
<span name="attr_willpower"></span>
|
|
</div>
|
|
</div>
|
|
<div class="rows repeating-container echos">
|
|
<h2 data-i18n="echos">echos</h2>
|
|
<fieldset class="repeating_echos">
|
|
<span class="eclipse font-bolder" name="attr_echo"></span>
|
|
<button class="pictos" name="echo_chat" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{echo}}}{{desc=@{notes}}}">w</button>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/>
|
|
<span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<div class="collapse"><span name="attr_notes"></span></div>
|
|
<div class="settings">
|
|
<label data-i18n-title="echos" title="echos"><input name="attr_echo" placeholder="echo name" title="@{repeating_echos_${x}_echo}" type="text" value=""/></label>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes"><textarea name="attr_notes" placeholder="Notes" title="@{repeating_echos_${x}_notes}" type="text" value=""></textarea></label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="pc-row">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="complex form">Complex Forms</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box complex-forms">
|
|
<button data-i18n="fade" name="roll_fade" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{fade}}}{{base=^{base}}}{{dice=[[((@{fade_attribute_1}+@{fade_attribute_2}+@{fade_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
<select class="attribute-select" name="attr_fade_attribute_1" title="@{fade_attribute_1}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}" selected="selected">Resonance</option>
|
|
</select>
|
|
<span>+</span>
|
|
<select class="attribute-select" name="attr_fade_attribute_2" title="@{fade_attribute_2}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}" selected="selected">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option><option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option><option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<h3 data-i18n="modifier">modifier</h3>
|
|
<label data-i18n-title="modifier" title="modifier"><input name="attr_fade_modifier" title="@{fade_modifier}" type="number" value="0"/></label>
|
|
<div class="rows repeating-container">
|
|
<div class="row-long headers">
|
|
<h2 class="text-capitalize" data-i18n="complex form"></h2>
|
|
<h2 class="text-capitalize" data-i18n="target"></h2>
|
|
<h2 class="text-capitalize" data-i18n="duration"></h2>
|
|
<h2 class="text-capitalize" data-i18n="fade"></h2>
|
|
</div>
|
|
<fieldset class="repeating_forms">
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<button class="display-none" name="roll_fade" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{fade}}}{{base=^{base}}}{{dice=[[((@{fade_attribute_1}+@{fade_attribute_2}+@{fade_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"></button>
|
|
<button name="roll_complex_form" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{name}}}{{base=^{base}}}{{dice=[[((@{skill}+@{dicepool}+@{resonance}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Level ?{Level|}, Fade [[?{Level|}+(@{fade})]] [f](~repeating_forms_fade)}}">
|
|
<span name="attr_name"></span>
|
|
</button>
|
|
<span class="text-center eclipse" name="attr_c"></span><span class="text-center eclipse" name="attr_o"></span><span class="text-center eclipse" name="attr_m"></span><span class="text-center eclipse" name="attr_p"></span><span class="text-center eclipse" name="attr_l"></span><span class="text-center eclipse" name="attr_e"></span><span class="text-center eclipse" name="attr_x"></span><span class="text-center eclipse" name="attr_ "></span><span class="text-center eclipse" name="attr_f"></span><span class="text-center eclipse" name="attr_o"></span><span class="text-center eclipse" name="attr_r"></span><span class="text-center eclipse" name="attr_m"></span>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<label data-i18n-title="name" title="name"><input name="attr_name" placeholder="name" title="@{repeating_forms_${x}_name}" type="text" value=""/></label>
|
|
<select name="attr_target" title="@{repeating_forms_${x}_target}" value="Device">
|
|
<option class="text-capitalize" data-i18n="device" value="device">device</option>
|
|
<option class="text-capitalize" data-i18n="file" value="file">file</option>
|
|
<option class="text-capitalize" data-i18n="host" value="host">host</option>
|
|
<option class="text-capitalize" data-i18n="ic" value="ic">ic</option>
|
|
<option class="text-capitalize" data-i18n="persona" value="persona">persona</option>
|
|
<option class="text-capitalize" data-i18n="self" value="self">self</option>
|
|
<option class="text-capitalize" data-i18n="sprite" value="sprite">sprite</option>
|
|
</select>
|
|
<select name="attr_duration" title="@{repeating_forms_${x}_duration}" value="Instant">
|
|
<option class="text-capitalize" data-i18n="extended" value="extended"></option>
|
|
<option class="text-capitalize" data-i18n="instant" value="instant"></option>
|
|
<option class="text-capitalize" data-i18n="permanent" value="permanent"></option>
|
|
<option class="text-capitalize" data-i18n="other" value="other"></option>
|
|
<option class="text-capitalize" data-i18n="sustained" value="sustained"></option>
|
|
</select>
|
|
<label data-i18n-title="fade" title="fade"><input name="attr_fade" placeholder="-1" title="@{repeating_forms_${x}_fade}" type="number" value=""/></label>
|
|
<div class="row">
|
|
<h3 data-i18n="skill">skill</h3>
|
|
<select name="attr_skill" title="@{repeating_forms_${x}_skill}" value="@{software}">
|
|
<option data-i18n="electronicsgroup" value="@{electronics}">Electronics Group</option>
|
|
<option data-i18n="software" value="@{software}" selected="selected">Software</option>
|
|
</select>
|
|
<h3 data-i18n="specialization"></h3>
|
|
<label data-i18n-title="specialization" title="specialization"><input name="attr_specialization" value="2" title="@{repeating_forms_${x}_specialization}" type="checkbox"/></label>
|
|
<h3 data-i18n="modifier">modifier</h3>
|
|
<label data-i18n-title="modifier" title="modifier"><input name="attr_dicepool_modifier" title="@{repeating_forms_${x}_dicepool_modifier}" type="number"/></label>
|
|
</div>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_forms_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="social pc-col">
|
|
<div class="pc-row">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="idslifestylecurrency"></h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box lifestyle">
|
|
<div class="pc-box small-box">
|
|
<div class="row-long">
|
|
<h3 data-i18n="primarylifestyle"></h3>
|
|
<input class="text-left" name="attr_primary_lifestyle" placeholder="Middle /w GRID subscription" style="width: 77%" title="@{primary_lifestyle}" type="text"/>
|
|
</div>
|
|
<div class="row-long">
|
|
<h3 data-i18n="nuyen"></h3>
|
|
<input class="text-left" type="text" name="attr_primary_nuyen" placeholder="$1,000 UCAS" style="width: 90%" title="@{primary_nuyen}"/>
|
|
</div>
|
|
<div class="row-long">
|
|
<h3 data-i18n="licenses">
|
|
</h3><input class="text-left" type="text" name="attr_primary_licenses" placeholder="Technomancer, Pistols..." style="width: 87%" title="@{primary_licenses}"/></div>
|
|
<div class="row-long headers">
|
|
<h2 data-i18n="fakeidsrelated"></h2>
|
|
</div>
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_lifestyle">
|
|
<span class="eclipse" name="attr_name"></span>
|
|
<button class="pictos" name="lifestyle_chat" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{name}}}{{desc=^{relatedlifestyle} @{lifestyle} , ^{nuyen} @{funds}, ^{licenses} @{licenses}}}">w</button>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<div class="rows">
|
|
<h3 data-i18n="relatedlifestyle"></h3><span name="attr_lifestyle"></span>
|
|
</div>
|
|
<div class="rows">
|
|
<h3 data-i18n="nuyen"></h3><span name="attr_funds"></span>
|
|
</div>
|
|
<div class="rows">
|
|
<h3 data-i18n="licenses"></h3><span name="attr_licenses"></span>
|
|
</div>
|
|
</div>
|
|
<div class="settings">
|
|
<h3 data-i18n="fakeid"></h3>
|
|
<input class="text-left" name="attr_name" placeholder="John Doe" title="@{repeating_lifestyle_${x}_name}" type="text"/>
|
|
<h3 data-i18n="relatedlifestyle"></h3>
|
|
<textarea name="attr_lifestyle" placeholder="Middle" title="@{repeating_lifestyle_${x}_lifestyle}"></textarea>
|
|
<h3 data-i18n="funds"></h3>
|
|
<textarea name="attr_funds" placeholder="$1,000 UCAS" title="@{repeating_lifestyle_${x}_funds}"></textarea>
|
|
<h3 data-i18n="licenses"></h3>
|
|
<textarea name="attr_licenses" placeholder="Technomancer, Pistols" title="@{repeating_lifestyle_${x}_licenses}"></textarea>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="pc-row">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="contacts"></h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box contacts">
|
|
<div class="pc-box small-box">
|
|
<div class="row-long headers"><h2 data-i18n="name">name</h2><h2 data-i18n="loyalty">loyalty</h2><h2 data-i18n="connection">connection</h2><h2 data-i18n="favor">favor</h2></div>
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_contacts">
|
|
<span class="eclipse" name="attr_name"></span><span class="text-center" name="attr_loyalty"></span><span class="text-center" name="attr_connection"></span><span class="text-center" name="attr_favors"></span>
|
|
<button class="pictos" name="ontact_chat" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{name}}}{{desc=^{loyalty} @{loyalty} , ^{connection} @{connection}, ^{favor} @{favors}}}">w</button>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<input type="text" name="attr_name" placeholder="Old Crow" title="@{repeating_contacts_${x}_name}"/>
|
|
<input type="number" name="attr_loyalty" min="1" placeholder="3" title="@{repeating_contacts_${x}_name}"/>
|
|
<input type="number" name="attr_connection" min="1" placeholder="8" title="@{repeating_contacts_${x}_name}"/>
|
|
<input type="number" name="attr_favors" placeholder="+2" title="@{repeating_contacts_${x}_name}"/>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_contacts_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="vehicle pc-col">
|
|
<div class="pc-row">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="vehicle">Vehicle</h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box medium-box">
|
|
<div class="rows repeating-container">
|
|
<fieldset class="repeating_vehicle">
|
|
<input name="attr_handling" type="hidden"/>
|
|
<input name="attr_handling_off" type="hidden"/>
|
|
<input name="attr_acceleration" type="hidden"/>
|
|
<input name="attr_speed" type="hidden"/>
|
|
<input name="attr_pilot" type="hidden"/>
|
|
<input name="attr_body" type="hidden"/>
|
|
<input name="attr_armor" type="hidden"/>
|
|
<input name="attr_sensor" type="hidden"/>
|
|
<div class="row-long grid vehicle-name">
|
|
<span name="attr_name"></span>
|
|
</div>
|
|
<div class="row-long grid grid-2column">
|
|
<div class="col">
|
|
<h3 data-i18n="handling"></h3><span name="attr_display_handling"></span>
|
|
</div>
|
|
<div class="col">
|
|
<h3 data-i18n="handling_off"></h3><span name="attr_display_handling_off"></span>
|
|
</div>
|
|
</div>
|
|
<div class="row-long grid grid-2column">
|
|
<div class="col">
|
|
<h3 data-i18n="acceleration"></h3><span name="attr_display_acceleration"></span>
|
|
</div>
|
|
<div class="col">
|
|
<h3 data-i18n="speed"></h3><span name="attr_display_speed"></span>
|
|
</div>
|
|
</div>
|
|
<div class="row-long grid grid-2column">
|
|
<div class="col">
|
|
<h3 data-i18n="pilot"></h3><span name="attr_display_pilot"></span>
|
|
</div>
|
|
<div class="col">
|
|
<h3 data-i18n="body"></h3><span name="attr_display_body"></span>
|
|
</div>
|
|
</div>
|
|
<div class="row-long grid grid-2column">
|
|
<div class="col"><h3 data-i18n="armor"></h3><span name="attr_display_armor"></span></div>
|
|
<div class="col"><h3 data-i18n="sensor"></h3><span name="attr_display_sensor"></span></div>
|
|
</div>
|
|
<input class="collapse-flag" name="attr_display_flag" type="checkbox" value="true"/><span class="pictos">i</span>
|
|
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" value="true" checked="checked"/><span class="pictos">x</span>
|
|
<div class="collapse">
|
|
<span name="attr_notes"></span>
|
|
</div>
|
|
<div class="settings">
|
|
<div class="row-long grid grid-2autocolumn">
|
|
<h3 data-i18n="name"></h3>
|
|
<label data-i18n-title="vehicle name"><input name="attr_name" placeholder="name" title="vehicle name" type="text"/></label>
|
|
</div>
|
|
<div class="row-long grid-2column">
|
|
<div class="col">
|
|
<h3 data-i18n="handling"></h3>
|
|
<input name="attr_handling" type="hidden"/>
|
|
<input type="hidden" name="attr_display_handling"/>
|
|
<label data-i18n-title="handling base"><input name="attr_handling_base" placeholder="#" title="@{repeating_vehicle_${x}_base" type="number"/></label>
|
|
<label data-i18n-title="handling modifier"><input name="attr_handling_modifier" placeholder="#" title="@{repeating_vehicle_${x}_modifier" type="number"/></label>
|
|
<label data-i18n-title="handling temp"><input name="attr_handling_temp" placeholder="#" title="@{repeating_vehicle_${x}_temp" type="number"/></label>
|
|
</div>
|
|
<div class="col">
|
|
<h3 data-i18n="handling_off"></h3>
|
|
<input name="attr_handling_off" type="hidden"/>
|
|
<input type="hidden" name="attr_display_handling_off"/>
|
|
<label data-i18n-title="handling_off base"><input name="attr_handling_off_base" placeholder="#" title="@{repeating_vehicle_${x}_base" type="number"/></label>
|
|
<label data-i18n-title="handling_off modifier"><input name="attr_handling_off_modifier" placeholder="#" title="@{repeating_vehicle_${x}_modifier" type="number"/></label>
|
|
<label data-i18n-title="handling_off temp"><input name="attr_handling_off_temp" placeholder="#" title="@{repeating_vehicle_${x}_temp" type="number"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row-long grid-2column">
|
|
<div class="col">
|
|
<h3 data-i18n="acceleration"></h3>
|
|
<input name="attr_acceleration" type="hidden"/>
|
|
<input type="hidden" name="attr_display_acceleration"/>
|
|
<label data-i18n-title="acceleration base"><input name="attr_acceleration_base" placeholder="#" title="@{repeating_vehicle_${x}_base" type="number"/></label>
|
|
<label data-i18n-title="acceleration modifier"><input name="attr_acceleration_modifier" placeholder="#" title="@{repeating_vehicle_${x}_modifier" type="number"/></label>
|
|
<label data-i18n-title="acceleration temp"><input name="attr_acceleration_temp" placeholder="#" title="@{repeating_vehicle_${x}_temp" type="number"/></label>
|
|
</div>
|
|
<div class="col">
|
|
<h3 data-i18n="speed"></h3>
|
|
<input name="attr_speed" type="hidden"/>
|
|
<input type="hidden" name="attr_display_speed"/>
|
|
<label data-i18n-title="speed base"><input name="attr_speed_base" placeholder="#" title="@{repeating_vehicle_${x}_base" type="number"/></label>
|
|
<label data-i18n-title="speed modifier"><input name="attr_speed_modifier" placeholder="#" title="@{repeating_vehicle_${x}_modifier" type="number"/></label>
|
|
<label data-i18n-title="speed temp"><input name="attr_speed_temp" placeholder="#" title="@{repeating_vehicle_${x}_temp" type="number"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row-long grid-2column">
|
|
<div class="col">
|
|
<h3 data-i18n="pilot"></h3>
|
|
<input name="attr_pilot" type="hidden"/><input type="hidden" name="attr_display_pilot"/>
|
|
<label data-i18n-title="pilot base"><input name="attr_pilot_base" placeholder="#" title="@{repeating_vehicle_${x}_base" type="number"/></label>
|
|
<label data-i18n-title="pilot modifier"><input name="attr_pilot_modifier" placeholder="#" title="@{repeating_vehicle_${x}_modifier" type="number"/></label>
|
|
<label data-i18n-title="pilot temp"><input name="attr_pilot_temp" placeholder="#" title="@{repeating_vehicle_${x}_temp" type="number"/></label>
|
|
</div>
|
|
<div class="col">
|
|
<h3 data-i18n="body"></h3>
|
|
<input name="attr_body" type="hidden"/>
|
|
<input type="hidden" name="attr_display_body"/>
|
|
<label data-i18n-title="body base"><input name="attr_body_base" placeholder="#" title="@{repeating_vehicle_${x}_base" type="number"/></label>
|
|
<label data-i18n-title="body modifier"><input name="attr_body_modifier" placeholder="#" title="@{repeating_vehicle_${x}_modifier" type="number"/></label>
|
|
<label data-i18n-title="body temp"><input name="attr_body_temp" placeholder="#" title="@{repeating_vehicle_${x}_temp" type="number"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row-long grid-2column">
|
|
<div class="col">
|
|
<h3 data-i18n="armor"></h3>
|
|
<input name="attr_armor" type="hidden"/>
|
|
<input type="hidden" name="attr_display_armor"/>
|
|
<label data-i18n-title="armor base"><input name="attr_armor_base" placeholder="#" title="@{repeating_vehicle_${x}_base" type="number"/></label>
|
|
<label data-i18n-title="armor modifier"><input name="attr_armor_modifier" placeholder="#" title="@{repeating_vehicle_${x}_modifier" type="number"/></label>
|
|
<label data-i18n-title="armor temp"><input name="attr_armor_temp" placeholder="#" title="@{repeating_vehicle_${x}_temp" type="number"/></label>
|
|
</div>
|
|
<div class="col">
|
|
<h3 data-i18n="sensor"></h3>
|
|
<input name="attr_sensor" type="hidden"/>
|
|
<input type="hidden" name="attr_display_sensor"/>
|
|
<label data-i18n-title="sensor base"><input name="attr_sensor_base" placeholder="#" title="@{repeating_vehicle_${x}_base" type="number"/></label>
|
|
<label data-i18n-title="sensor modifier"><input name="attr_sensor_modifier" placeholder="#" title="@{repeating_vehicle_${x}_modifier" type="number"/></label>
|
|
<label data-i18n-title="sensor temp"><input name="attr_sensor_temp" placeholder="#" title="@{repeating_vehicle_${x}_temp" type="number"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row-long grid-2column headers">
|
|
<div class="col">
|
|
<h2 class="text-capitalize text-center" data-i18n="base"></h2><h2 class="text-capitalize text-center" data-i18n="mod"></h2><h2 class="text-capitalize text-center" data-i18n="temp"></h2>
|
|
</div>
|
|
<div class="col">
|
|
<h2 class="text-capitalize text-center" data-i18n="base"></h2><h2 class="text-capitalize text-center" data-i18n="mod"></h2><h2 class="text-capitalize text-center" data-i18n="temp"></h2>
|
|
</div>
|
|
</div>
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_vehicle_${x}_notes}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="options pc-col">
|
|
<div class="pc-row">
|
|
<div class="header right-header">
|
|
<h1 data-i18n="options"></h1>
|
|
<div class="right-tri"></div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box grid grid-2column">
|
|
<div class="col">
|
|
<div class="row"><h2 data-i18n="character"></h2></div>
|
|
<div class="row">
|
|
<label class="grid grid-2autocolumn character-type" data-i18n-title="mundane">
|
|
<h3 data-i18n="mundane"></h3>
|
|
<input class="character-type" type="checkbox" name="attr_flag_special" value="mundane" title="@{flag_special}" checked="checked"/>
|
|
</label>
|
|
</div>
|
|
<div class="row">
|
|
<label class="grid grid-2autocolumn character-type" data-i18n-title="awakened">
|
|
<h3 data-i18n="awakened"></h3>
|
|
<input class="character-type" type="checkbox" name="attr_flag_special" value="magic" title="@{flag_special}"/>
|
|
</label>
|
|
</div>
|
|
<div class="row">
|
|
<label class="grid grid-2autocolumn character-type" data-i18n-title="emerged">
|
|
<h3 data-i18n="emerged"></h3>
|
|
<input class="character-type" type="checkbox" name="attr_flag_special" value="resonance" title="@{flag_special}"/>
|
|
</label>
|
|
</div>
|
|
<hr/>
|
|
<div class="row">
|
|
<h2 data-i18n="sheetselect"></h2>
|
|
</div>
|
|
<div class="row">
|
|
<select name="attr_sheet_type" title="@{sheet_type}" value="pc">
|
|
<option value="pc" data-i18n="pc"></option>
|
|
<option value="grunt" data-i18n="grunt"></option>
|
|
<option value="host" data-i18n="host"></option>
|
|
<option value="sprite" data-i18n="sprite"></option>
|
|
<option value="vehicle" data-i18n="vehicle"></option>
|
|
</select>
|
|
</div>
|
|
<hr/>
|
|
<div class="row">
|
|
<h2 data-i18n="importer"></h2>
|
|
<button type="action" name="act_import_launch" data-i18n="importecharacter"></button>
|
|
<p data-i18n="importertext"></p>
|
|
</div>
|
|
</div>
|
|
<div class="col">
|
|
<div class="row">
|
|
<h2 data-i18n="temporarymodifiers"></h2>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="defense"></h3>
|
|
<label data-i18n-title="defense"><input type="number" name="attr_defense_temp" title="@{defense_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_defense_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="soak"></h3>
|
|
<label data-i18n-title="soak"><input type="number" name="attr_soak_temp" title="@{soak_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_soak_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<hr/>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="body"></h3>
|
|
<label data-i18n-title="body"><input type="number" name="attr_body_temp" title="@{body_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_body_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="agility"></h3>
|
|
<label data-i18n-title="agility"><input type="number" name="attr_agility_temp" title="@{agility_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_agility_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="reaction"></h3>
|
|
<label data-i18n-title="reaction"><input type="number" name="attr_reaction_temp" title="@{reaction_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_reaction_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="strength"></h3>
|
|
<label data-i18n-title="strength"><input type="number" name="attr_strength_temp" title="@{strength_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_strength_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="willpower"></h3>
|
|
<label data-i18n-title="willpower"><input type="number" name="attr_willpower_temp" title="@{willpower_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_willpower_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="logic"></h3>
|
|
<label data-i18n-title="logic"><input type="number" name="attr_logic_temp" title="@{logic_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_logic_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="intuition"></h3>
|
|
<label data-i18n-title="intuition"><input type="number" name="attr_intuition_temp" title="@{intuition_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_intuition_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="charisma"></h3>
|
|
<label data-i18n-title="charisma"><input type="number" name="attr_charisma_temp" title="@{charisma_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_charisma_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="magic"></h3>
|
|
<label data-i18n-title="magic"><input type="number" name="attr_magic_temp" title="@{magic_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_magic_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="resonance"></h3>
|
|
<label data-i18n-title="resonance"><input type="number" name="attr_resonance_temp" title="@{resonance_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_resonance_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<hr/>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="initiative"></h3>
|
|
<label data-i18n-title="initiative"><input type="number" name="attr_initiative_temp" title="@{initiative_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_initiative_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="initiativedice"></h3>
|
|
<label data-i18n-title="initiativedice"><input type="number" name="attr_initiative_dice_temp" title="@{initiative_dice_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_initiative_dice_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<hr/>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="physicallimit"></h3>
|
|
<label data-i18n-title="physicallimit"><input type="number" name="attr_physical_limit_temp" title="@{physical_limit_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_physical_limit_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="sociallimit"></h3>
|
|
<label data-i18n-title="sociallimit"><input type="number" name="attr_social_limit_temp" title="@{social_limit_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_social_limit_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="grid temp">
|
|
<h3 data-i18n="mentallimit"></h3>
|
|
<label data-i18n-title="mentallimit"><input type="number" name="attr_mental_limit_temp" title="@{mental_limit_temp}"/></label>
|
|
<label data-i18n-title="toggle on temporary bonus"><input type="checkbox" name="attr_mental_limit_temp_flag" value="on" checked="checked"/></label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="npc">
|
|
<div class="tabs">
|
|
<img alt="Shadowrun black and metallic logo" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Shadowrun5thEdition/images/ShadowrunLogo.png"/>
|
|
<h2 data-i18n-title="/w GM">/w GM</h2>
|
|
<label class="switch" data-i18n-title="whisper rolls to gm" title="whisper rolls to gm">
|
|
<input class="whisper-toggle" name="attr_gm_toggle" type="checkbox" value="/w gm"/>
|
|
<span class="slider"></span>
|
|
</label>
|
|
<h2 data-i18n-title="wounds">wounds</h2>
|
|
<label class="switch" data-i18n-title="wounds" title="wounds">
|
|
<input class="whisper-toggle" name="attr_wounds_toggle" type="checkbox" value="@{wounds}"/>
|
|
<span class="slider"></span>
|
|
</label>
|
|
<h2 data-i18n-title="modifiers">modifiers</h2>
|
|
<label class="switch" data-i18n-title="modifiers" title="modifiers">
|
|
<input class="whisper-toggle" name="attr_modifiers_toggle" type="checkbox" value="?{Modifiers +/-|0}"/>
|
|
<span class="slider"></span>
|
|
</label>
|
|
<h2 data-i18n-title="edge">edge</h2>
|
|
<label class="switch" data-i18n-title="edge" title="edge">
|
|
<input class="whisper-toggle" name="attr_edge_toggle" type="checkbox" value="@{edge}"/>
|
|
<span class="slider"></span>
|
|
</label>
|
|
<button name="d6" title="Roll D6s" type="roll" value="@{gm_toggle} &{template:rolls}{{header=^{d6}}}{{base=^{d6}}}{{dice=[[(?{d6s|0}d6>5)]]}}">L</button>
|
|
<select name="attr_sheet_type" title="Sheet Type" value="pc">
|
|
<option value="grunt" data-i18n="grunt">Grunt</option>
|
|
<option value="host" data-i18n="host">Host</option>
|
|
<option value="sprite" data-i18n="sprite">Sprite</option>
|
|
<option value="vehicle" data-i18n="vehicle">Vehicle</option>
|
|
<option value="pc" data-i18n="pc" selected="selected">PC</option>
|
|
</select>
|
|
<input name="attr_stats_toggle" type="checkbox" value="settings" checked="checked"/>
|
|
<span class="pictos">y</span>
|
|
</div>
|
|
<input name="attr_stats_toggle" type="hidden" value="settings"/>
|
|
<div class="grunt attribute">
|
|
<button data-i18n="b" name="roll_body" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{body}}}{{base=^{base}}}{{dice=[[((@{body}+@{attribute_roll}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">b</button>
|
|
<span name="attr_display_body"></span>
|
|
<label class="settings" data-i18n-title="Body" title="Body">
|
|
<input name="attr_body_base" placeholder="3" title="@{body_base}" type="number" value="3"/>
|
|
</label>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_body_modifier" placeholder="+" title="@{body_modifier}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="a" name="roll_agility" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{agility}}}{{base=^{base}}}{{dice=[[((@{agility}+@{attribute_roll}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">a</button>
|
|
<span name="attr_display_agility"></span>
|
|
<label class="settings" data-i18n-title="Agility" title="Agility">
|
|
<input name="attr_agility_base" placeholder="3" title="@{agility_base}" type="number" value="3"/>
|
|
</label>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_agility_modifier" placeholder="+" title="@{agility_modifier}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="r" name="roll_reaction" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{reaction}}}{{base=^{base}}}{{dice=[[((@{reaction}+@{attribute_roll}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">r</button>
|
|
<span name="attr_display_reaction"></span>
|
|
<label class="settings" data-i18n-title="Reaction" title="Reaction">
|
|
<input name="attr_reaction_base" placeholder="3" title="@{reaction_base}" type="number" value="3"/>
|
|
</label>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_reaction_modifier" placeholder="+" title="@{reaction_modifier}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="s" name="roll_strength" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{strength}}}{{base=^{base}}}{{dice=[[((@{strength}+@{attribute_roll}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">s</button>
|
|
<span name="attr_display_strength"></span>
|
|
<label class="settings" data-i18n-title="Strength" title="Strength">
|
|
<input name="attr_strength_base" placeholder="3" title="@{strength_base}" type="number" value="3"/>
|
|
</label>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_strength_modifier" placeholder="+" title="@{strength_modifier}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="w" name="roll_willpower" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{willpower}}}{{base=^{base}}}{{dice=[[((@{willpower}+@{attribute_roll}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">w</button>
|
|
<span name="attr_display_willpower"></span>
|
|
<label class="settings" data-i18n-title="Willpower" title="Willpower">
|
|
<input name="attr_willpower_base" placeholder="3" title="@{willpower_base}" type="number" value="3"/>
|
|
</label>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_willpower_modifier" placeholder="+" title="@{willpower_modifier}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="l" name="roll_logic" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{logic}}}{{base=^{base}}}{{dice=[[((@{logic}+@{attribute_roll}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">l</button>
|
|
<span name="attr_display_logic"></span>
|
|
<label class="settings" data-i18n-title="Logic" title="Logic">
|
|
<input name="attr_logic_base" placeholder="3" title="@{logic_base}" type="number" value="3"/>
|
|
</label>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_logic_modifier" placeholder="+" title="@{logic_modifier}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="i" name="roll_intuition" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{intuition}}}{{base=^{base}}}{{dice=[[((@{intuition}+@{attribute_roll}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">i</button>
|
|
<span name="attr_display_intuition"></span>
|
|
<label class="settings" data-i18n-title="Intuition" title="Intuition">
|
|
<input name="attr_intuition_base" placeholder="3" title="@{intuition_base}" type="number" value="3"/>
|
|
</label>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_intuition_modifier" placeholder="+" title="@{intuition_modifier}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="c" name="roll_charisma" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{charisma}}}{{base=^{base}}}{{dice=[[((@{charisma}+@{attribute_roll}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">c</button>
|
|
<span name="attr_display_charisma"></span>
|
|
<label class="settings" data-i18n-title="Charisma" title="Charisma">
|
|
<input name="attr_charisma_base" placeholder="3" title="@{charisma_base}" type="number" value="3"/>
|
|
</label>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_charisma_modifier" placeholder="+" title="@{charisma_modifier}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="e" name="roll_edge" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{edge}}}{{base=^{base}}}{{dice=[[((@{edge}+@{attribute_roll}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">e</button>
|
|
<span name="attr_edge"></span>
|
|
<label class="settings" data-i18n-title="edge" title="edge">
|
|
<input name="attr_edge" placeholder="3" title="@{edge}" type="number" value="3"/>
|
|
</label>
|
|
<h1 data-i18n="ess">ess</h1>
|
|
<span name="attr_essence"></span>
|
|
<label class="settings" data-i18n-title="essence" title="essence">
|
|
<input name="attr_essence" placeholder="6" title="@{essence}" type="number" value="6"/>
|
|
</label>
|
|
<h1 class="hide-magic" data-i18n="m">m</h1>
|
|
<span class="hide-magic" name="attr_magic"></span>
|
|
<label class="settings hide-magic" data-i18n-title="magic" title="magic">
|
|
<input name="attr_magic" placeholder="6" title="@{magic}" type="number" value="6"/>
|
|
</label>
|
|
<h1 class="hide-magic" data-i18n="f">f</h1>
|
|
<span class="hide-magic" name="attr_force"></span>
|
|
<label class="settings hide-magic" data-i18n-title="force" title="force">
|
|
<input name="attr_force" placeholder="6" title="@{force}" type="number" value="6"/>
|
|
</label>
|
|
<h1 class="hide-resonance" data-i18n="r">r</h1>
|
|
<span class="hide-resonance" name="attr_resonance"></span>
|
|
<label class="settings hide-resonance" data-i18n-title="resonance" title="resonance">
|
|
<input name="attr_resonance" placeholder="6" title="@{resonance}" type="number" value="6"/>
|
|
</label>
|
|
</div>
|
|
<div class="host attribute">
|
|
<button data-i18n="host_rating" name="roll_host_rating" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{host_rating}}}{{base=^{host_rating}}}{{dice=[[((@{host_rating}+@{host_rating}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">host_rating</button>
|
|
<span name="attr_host_rating"></span>
|
|
<label class="settings" data-i18n-title="host_rating" title="Host Rating">
|
|
<input name="attr_host_rating" placeholder="5" title="@{host_rating}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="attack" name="roll_attack" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{attack}}}{{base=^{host_rating}}}{{dice=[[((@{host_rating}+@{attack}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">attack</button>
|
|
<span name="attr_attack"></span>
|
|
<label class="settings" data-i18n-title="attack" title="Attack">
|
|
<input name="attr_attack" placeholder="5" title="@{attack}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="sleaze" name="roll_sleaze" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{sleaze}}}{{base=^{host_rating}}}{{dice=[[((@{host_rating}+@{sleaze}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">sleaze</button>
|
|
<span name="attr_sleaze"></span>
|
|
<label class="settings" data-i18n-title="sleaze" title="Sleaze">
|
|
<input name="attr_sleaze" placeholder="6" title="@{sleaze}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="data_processing" name="roll_data_processing" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{data_processing}}}{{base=^{host_rating}}}{{dice=[[((@{host_rating}+@{data_processing}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">data_processing</button>
|
|
<span name="attr_data_processing"></span>
|
|
<label class="settings" data-i18n-title="data_processing" title="Data Processing">
|
|
<input name="attr_data_processing" placeholder="7" title="@{data_processing}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="firewall" name="roll_firewall" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{firewall}}}{{base=^{host_rating}}}{{dice=[[((@{host_rating}+@{firewall}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">firewall</button>
|
|
<span name="attr_firewall"></span>
|
|
<label class="settings" data-i18n-title="firewall" title="Firewall">
|
|
<input name="attr_firewall" placeholder="8" title="@{firewall}" type="number" value=""/>
|
|
</label>
|
|
</div>
|
|
<div class="vehicle attribute">
|
|
<h1 data-i18n="hand">Hand</h1><span name="attr_handling"></span>
|
|
<label class="settings" data-i18n-title="hand" title="Hand">
|
|
<input name="attr_handling" placeholder="3" title="@{handling}" type="number" value=""/>
|
|
</label>
|
|
<h1 data-i18n="handoff">Hand (Off)</h1>
|
|
<span name="attr_handling_offroad"></span>
|
|
<label class="settings" data-i18n-title="handoff" title="Hand (Off)">
|
|
<input name="attr_handling_offroad" placeholder="3" title="@{handling_offroad}" type="number" value=""/>
|
|
</label>
|
|
<h1 data-i18n="speed">Speed</h1>
|
|
<span name="attr_speed"></span>
|
|
<label class="settings" data-i18n-title="speed" title="Speed">
|
|
<input name="attr_speed" placeholder="3" title="@{speed}" type="number" value=""/>
|
|
</label>
|
|
<h1 data-i18n="speedoff">Speed (Off)</h1>
|
|
<span name="attr_speed_offroad"></span>
|
|
<label class="settings" data-i18n-title="speedoff" title="Speed (Off)">
|
|
<input name="attr_speed_offroad" placeholder="3" title="@{speed_offroad}" type="number" value=""/>
|
|
</label>
|
|
<h1 data-i18n="accel">Accel</h1>
|
|
<span name="attr_acceleration"></span>
|
|
<label class="settings" data-i18n-title="accel" title="Accel">
|
|
<input name="attr_acceleration" placeholder="3" title="@{acceleration}" type="number" value=""/>
|
|
</label>
|
|
<h1 data-i18n="body">Body</h1>
|
|
<span name="attr_body"></span>
|
|
<label class="settings" data-i18n-title="body" title="Body">
|
|
<input name="attr_body" placeholder="3" title="@{body}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="pilot" name="roll_pilot" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{pilot}}}{{base=^{pilot}}}{{dice=[[((@{pilot}+@{pilot}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">pilot</button>
|
|
<span name="attr_pilot"></span>
|
|
<label class="settings" data-i18n-title="pilot" title="Pilot">
|
|
<input name="attr_pilot" placeholder="3" title="@{pilot}" type="number" value=""/>
|
|
</label>
|
|
<h1 data-i18n="sensor">Sensor</h1>
|
|
<span name="attr_sensor"></span>
|
|
<label class="settings" data-i18n-title="sensor" title="Sensor">
|
|
<input name="attr_sensor" placeholder="3" title="@{sensor}" type="number" value=""/>
|
|
</label>
|
|
<h1 data-i18n="seat">Seat</h1>
|
|
<span name="attr_seating"></span>
|
|
<label class="settings" data-i18n-title="seat" title="Seat">
|
|
<input name="attr_seating" placeholder="3" title="@{seating}" type="number" value=""/>
|
|
</label>
|
|
</div>
|
|
<div class="sprite attribute">
|
|
<button data-i18n="level" name="roll_level" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{level}}}{{base=^{level}}}{{dice=[[((@{level}+@{level}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">level</button>
|
|
<span name="attr_level"></span>
|
|
<label class="settings" data-i18n-title="level" title="Level">
|
|
<input name="attr_level" placeholder="5" title="@{level}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="attack" name="roll_attack" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{attack}}}{{base=^{level}}}{{dice=[[((@{level}+@{attack}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">attack</button>
|
|
<span name="attr_attack"></span>
|
|
<label class="settings" data-i18n-title="attack" title="Attack">
|
|
<input name="attr_attack" placeholder="5" title="@{attack}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="sleaze" name="roll_sleaze" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{sleaze}}}{{base=^{level}}}{{dice=[[((@{level}+@{sleaze}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">sleaze</button>
|
|
<span name="attr_sleaze"></span>
|
|
<label class="settings" data-i18n-title="sleaze" title="Sleaze">
|
|
<input name="attr_sleaze" placeholder="6" title="@{sleaze}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="data_processing" name="roll_data_processing" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{data_processing}}}{{base=^{level}}}{{dice=[[((@{level}+@{data_processing}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">data_processing</button>
|
|
<span name="attr_data_processing"></span>
|
|
<label class="settings" data-i18n-title="data_processing" title="Data Processing">
|
|
<input name="attr_data_processing" placeholder="7" title="@{data_processing}" type="number" value=""/>
|
|
</label>
|
|
<button data-i18n="firewall" name="roll_firewall" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{firewall}}}{{base=^{level}}}{{dice=[[((@{level}+@{firewall}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">firewall</button>
|
|
<span name="attr_firewall"></span>
|
|
<label class="settings" data-i18n-title="firewall" title="Firewall">
|
|
<input name="attr_firewall" placeholder="8" title="@{firewall}" type="number" value=""/>
|
|
</label>
|
|
</div>
|
|
<div class="mid body">
|
|
<div class="column">
|
|
<input name="attr_pr" type="hidden" value=""/>
|
|
<div class="rows grunt">
|
|
<h2 data-i18n="pr">Professional Rating</h2>
|
|
<span name="attr_pr" style="margin-left: 2%;"></span>
|
|
<label class="settings" data-i18n-title="pr" title="Professional Rating">
|
|
<input name="attr_pr" title="@{pr}" type="number"/>
|
|
</label>
|
|
</div>
|
|
<h1 class="settings" data-i18n="bonuses">Bonuses</h1>
|
|
<div class="rows grunt">
|
|
<button data-i18n="initiative" name="Initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{initiative}}}{{base=^{base}}}{{dice=[[((@{initiative_mod})+@{wounds_toggle}+@{modifiers_toggle})+(@{initiative_dice})d6cf0 &{tracker}]]}}">Initiative</button>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_initiative_mod_modifier" placeholder="0" title="@{initiative_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings">+</span>
|
|
<label class="settings" data-i18n-title="modifierdice" title="Modifier Dice">
|
|
<input min="0" max="4" name="attr_initiative_dice_modifier" placeholder="0" title="@{initiative_dice_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings" data-i18n="d6">d6</span>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_display_initiative_mod"></span><span class="tiny-span">+</span><span name="attr_initiative_dice"></span><span class="tiny-span" data-i18n="d6">d6</span>
|
|
</div>
|
|
<div class="rows grunt hide-magic">
|
|
<button data-i18n="astralinitiative" name="Astral Initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{astralinitiative}}}{{base=^{base}}}{{dice=[[((@{astral_mod})+@{wounds_toggle}+@{modifiers_toggle})+(@{astral_dice})d6cf0 &{tracker}]]}}">Astral Initiative</button>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_astral_mod_modifier" placeholder="0" title="@{astral_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings">+</span>
|
|
<label class="settings" data-i18n-title="modifierdice" title="Modifier Dice"><input min="0" max="4" name="attr_astral_dice_modifier" placeholder="0" title="@{astral_dice_modifier}" type="number" value="0"/></label>
|
|
<span class="settings" data-i18n="d6">d6</span>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_display_astral_mod"></span><span class="tiny-span">+</span><span name="attr_astral_dice"></span><span class="tiny-span" data-i18n="d6">d6</span>
|
|
</div>
|
|
<div class="rows grunt vehicle sprite host">
|
|
<button data-i18n="matrixinitiative" name="Matrix Initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{matrixinitiative}}}{{base=^{base}}}{{dice=[[((@{matrix_mod})+@{wounds_toggle}+@{modifiers_toggle})+(@{matrix_dice})d6cf0 &{tracker}]]}}">Matrix Initiative</button>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_matrix_mod_modifier" placeholder="0" title="@{matrix_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings">+</span>
|
|
<label class="settings" data-i18n-title="modifierdice" title="Modifier Dice">
|
|
<input min="0" max="4" name="attr_matrix_dice_modifier" placeholder="0" title="@{matrix_dice_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings" data-i18n="d6">d6</span>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_display_matrix_mod"></span><span class="tiny-span">+</span><span name="attr_matrix_dice"></span><span class="tiny-span" data-i18n="d6">d6</span>
|
|
</div>
|
|
<div class="rows grunt">
|
|
<h2 data-i18n="movement">Movement</h2>
|
|
<label class="settings" data-i18n-title="walk modifier" title="walk modifier">
|
|
<input name="attr_walk_modifier" placeholder="0" title="@{walk_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings"> / </span>
|
|
<label class="settings" data-i18n-title="run modifier" title="run modifier">
|
|
<input name="attr_run_modifier" placeholder="0" title="@{run_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings"> / + </span>
|
|
<label class="settings" data-i18n-title="movement modifier" title="movement modifier">
|
|
<input name="attr_movement_mod_modifier" placeholder="2" title="@{movement_mod_modifier}" type="number" value="2"/>
|
|
</label>
|
|
<span class="settings"></span>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_walk" title="@{walk}"></span>
|
|
<span> / </span>
|
|
<span name="attr_run" title="@{run}"></span>
|
|
<span> / + </span>
|
|
<span name="attr_movement_mod" title="@{movement_mod}"></span>
|
|
<span></span>
|
|
</div>
|
|
<div class="rows grunt">
|
|
<button data-i18n="conditionmonitorps" name="act_cond_reset" type="action">Condition Monitor (P/S)</button>
|
|
<label class="settings" data-i18n-title="physicalbonus" title="physical bonus">
|
|
<input name="attr_physical_modifier" placeholder="0" title="@{physical_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings">/</span>
|
|
<label class="settings" data-i18n-title="stunbonus" title="stun bonus">
|
|
<input name="attr_stun_modifier" placeholder="0" title="@{stun_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_physical_max" title="@{physical_max}"></span>
|
|
<span>/</span>
|
|
<span name="attr_stun_max" title="@{stun_max}"></span>
|
|
</div>
|
|
<div class="rows vehicle">
|
|
<button data-i18n="conditionmonitorpm" name="act_cond_reset" type="action">Condition Monitor (P/M)</button>
|
|
<label class="settings" data-i18n-title="physicalbonus" title="physical bonus">
|
|
<input name="attr_physical_modifier" placeholder="0" title="@{physical_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings">/</span>
|
|
<label class="settings" data-i18n-title="matrixbonus" title="matrix bonus">
|
|
<input name="attr_matrix_modifier" placeholder="0" title="@{matrix_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_physical_max" title="@{physical_max}"></span>
|
|
<span>/</span>
|
|
<span name="attr_matrix_max" title="@{matrix_max}"></span>
|
|
</div>
|
|
<div class="rows host sprite">
|
|
<button data-i18n="conditionmonitorm" name="act_cond_reset" type="action">Condition Monitor (M)</button>
|
|
<span name="attr_matrix_max"></span>
|
|
</div>
|
|
<div class="rows grunt">
|
|
<h2 data-i18n="physical">val</h2>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_physical_limit_modifier" placeholder="0" title="@{physical_limit_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_physical_limit" title="@{physical_limit}"></span>
|
|
<h2 data-i18n="mental">val</h2>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_mental_limit_modifier" placeholder="0" title="@{mental_limit_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_mental_limit" title="@{mental_limit}"></span>
|
|
<h2 data-i18n="social">val</h2>
|
|
<label class="settings" data-i18n-title="modifier" title="modifier">
|
|
<input name="attr_social_limit_modifier" placeholder="0" title="@{social_limit_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_social_limit" title="@{social_limit}"></span>
|
|
</div>
|
|
<div class="grunt pain-tolerance">
|
|
<div class="rows settings">
|
|
<h2 data-i18n="high pain tolerance"></h2>
|
|
<label data-i18n-title="high pain tolerance">
|
|
<input type="number" name="attr_high_pain_tolerance" min="0" value="" placeholder="#" title="@{high_pain_tolerance}"/>
|
|
</label>
|
|
</div>
|
|
<div class="rows settings">
|
|
<h2 data-i18n="low pain tolerance"></h2>
|
|
<label data-i18n-title="low pain tolerance">
|
|
<input type="checkbox" name="attr_low_pain_tolerance" value="2" title="@{low_pain_tolerance}"/>
|
|
</label>
|
|
</div>
|
|
<div class="rows settings">
|
|
<h2 data-i18n="damage compensators"></h2>
|
|
<label data-i18n-title="damage compensators physical">
|
|
<input type="number" min="0" name="attr_damage_compensators_physical" value="" placeholder="1" title="@{damage_compensators_physical}"/>
|
|
</label>
|
|
<span>/</span>
|
|
<label data-i18n-title="damage compensators stun">
|
|
<input type="number" min="0" name="attr_damage_compensators_stun" value="" placeholder="2" title="@{damage_compensators_stun}"/>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="rows vehicle">
|
|
<div class="rows">
|
|
<h2 data-i18n="data_processing">key</h2>
|
|
<label class="settings" data-i18n-title="data_processing" title="data_processing">
|
|
<input name="attr_data_processing" min="0" placeholder="0" title="@{data_processing}" type="number" value=""/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_data_processing"></span>
|
|
</div>
|
|
<div class="rows">
|
|
<h2 data-i18n="firewall">key</h2>
|
|
<label class="settings" data-i18n-title="firewall" title="firewall">
|
|
<input name="attr_firewall" min="0" placeholder="0" title="@{firewall}" type="number" value=""/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_firewall"></span>
|
|
</div>
|
|
<div class="rows">
|
|
<h2 data-i18n="devicerating">key</h2>
|
|
<label class="settings" data-i18n-title="devicerating" title="devicerating">
|
|
<input name="attr_device_rating" min="0" placeholder="0" title="@{device_rating}" type="number" value=""/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_device_rating"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="column">
|
|
<div class="rows">
|
|
<button data-i18n="armorrating" name="roll_armorrating" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{armorrating}}}{{base=base}}{{dice=[[((@{armor_rating}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">armorrating</button>
|
|
<label class="settings" data-i18n-title="armorrating" title="armorrating">
|
|
<input name="attr_armor_rating" placeholder="9" title="@{armor_rating}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_armor_rating"></span>
|
|
</div>
|
|
<h1 class="settings" data-i18n="modifier">Modifier</h1>
|
|
<div class="rows">
|
|
<button data-i18n="defense" name="roll_defense" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{defense}}}{{base=base}}{{dice=[[((@{defense}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">defense</button>
|
|
<label class="settings" data-i18n-title="defense" title="defense">
|
|
<input name="attr_defense_modifier" placeholder="9" title="@{defense_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_defense"></span>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="soak" name="roll_soak" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{soak}}}{{base=base}}{{dice=[[((@{soak}+@{soak_modifier}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">soak</button>
|
|
<label class="settings" data-i18n-title="soak" title="soak">
|
|
<input name="attr_soak_modifier" placeholder="0" title="@{soak_modifier}" type="number" value="0"/>
|
|
</label>
|
|
<span class="settings tiny-span">=</span>
|
|
<span name="attr_soak"></span>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="acidprotection" name="roll_acidprotection" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{acidprotection}}}{{base=base}}{{dice=[[((@{soak}+@{acid_modifier}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">acidprotection</button>
|
|
<label class="settings" data-i18n-title="acidprotection" title="acidprotection">
|
|
<input name="attr_acid_modifier" placeholder="0" title="@{acid_modifier}" type="number" value="0"/>
|
|
</label>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="coldprotection" name="roll_coldprotection" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{coldprotection}}}{{base=base}}{{dice=[[((@{soak}+@{cold_modifier}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">coldprotection</button>
|
|
<label class="settings" data-i18n-title="coldprotection" title="coldprotection">
|
|
<input name="attr_cold_modifier" placeholder="0" title="@{cold_modifier}" type="number" value="0"/>
|
|
</label>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="electricalprotection" name="roll_electricalprotection" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{electricalprotection}}}{{base=base}}{{dice=[[((@{soak}+@{electrical_modifier}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">electricalprotection</button>
|
|
<label class="settings" data-i18n-title="electricalprotection" title="electricalprotection">
|
|
<input name="attr_electrical_modifier" placeholder="0" title="@{electrical_modifier}" type="number" value="0"/>
|
|
</label>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="fireprotection" name="roll_fireprotection" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{fireprotection}}}{{base=base}}{{dice=[[((@{soak}+@{fire_modifier}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">fireprotection</button>
|
|
<label class="settings" data-i18n-title="fireprotection" title="fireprotection">
|
|
<input name="attr_fire_modifier" placeholder="0" title="@{fire_modifier}" type="number" value="0"/>
|
|
</label>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="radiationprotection" name="roll_radiationprotection" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{radiationprotection}}}{{base=base}}{{dice=[[((@{soak}+@{radiation_modifier}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">radiationprotection</button>
|
|
<label class="settings" data-i18n-title="radiationprotection" title="radiationprotection">
|
|
<input name="attr_radiation_modifier" placeholder="0" title="@{radiation_modifier}" type="number" value="0"/>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<!--/- OPTIONS-->
|
|
<div class="column">
|
|
<div class="rows">
|
|
<h1 class="settings" data-i18n="options">Options</h1>
|
|
</div>
|
|
<div class="rows grunt">
|
|
<label class="settings" data-i18n-title="mundane" title="mundane">
|
|
<input class="character-type" name="attr_flag_special" title="@{flag_special}" type="radio" value="mundane"/>
|
|
<h2 data-i18n="mundane">key</h2>
|
|
</label>
|
|
<label class="settings" data-i18n-title="awakened" title="awakened">
|
|
<input class="character-type" name="attr_flag_special" title="@{flag_special}" type="radio" value="magic"/>
|
|
<h2 data-i18n="awakened">key</h2>
|
|
</label>
|
|
<label class="settings" data-i18n-title="emerged" title="emerged">
|
|
<input class="character-type" name="attr_flag_special" title="@{flag_special}" type="radio" value="resonance"/>
|
|
<h2 data-i18n="emerged">key</h2>
|
|
</label>
|
|
</div>
|
|
<div class="rows host grunt vehicle">
|
|
<label class="settings" title="Matrix Device">
|
|
<input class="character-type" name="attr_flag_matrix" title="@{flag_matrix}" type="checkbox" value="matrix"/>
|
|
<h2>Matrix Device</h2>
|
|
</label>
|
|
</div>
|
|
<div class="rows vehicle">
|
|
<label class="settings" title="Drone">
|
|
<input class="character-type" name="attr_flag_drone" title="@{flag_drone}" type="checkbox" value="drone"/>
|
|
<h2>Drone</h2>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="end body">
|
|
<input name="attr_quality" type="hidden" value=""/>
|
|
<div class="textrow grunt">
|
|
<h1 data-i18n="quality">key</h1>
|
|
<span name="attr_quality"></span>
|
|
<label class="settings" data-i18n-title="quality" title="Qualities">
|
|
<textarea name="attr_quality" placeholder="Qualities" title="@{quality}"></textarea>
|
|
</label>
|
|
</div>
|
|
<input name="attr_augmentations" type="hidden" value=""/>
|
|
<div class="textrow grunt">
|
|
<h1 data-i18n="augmentations">key</h1>
|
|
<span name="attr_augmentations"></span>
|
|
<label class="settings" data-i18n-title="augmentations" title="Augmentations">
|
|
<textarea name="attr_augmentations" placeholder="Augmentations" title="@{augmentations}"></textarea>
|
|
</label>
|
|
</div>
|
|
<input name="attr_gear" type="hidden" value=""/>
|
|
<div class="textrow grunt vehicle">
|
|
<h1 data-i18n="gear">key</h1>
|
|
<span name="attr_gear"></span>
|
|
<label class="settings" data-i18n-title="gear" title="Gear">
|
|
<textarea name="attr_gear" placeholder="Gear" title="@{gear}"></textarea>
|
|
</label>
|
|
</div>
|
|
<input name="attr_programs" type="hidden" value=""/>
|
|
<div class="textrow vehicle">
|
|
<h1 data-i18n="programs">key</h1>
|
|
<span name="attr_programs"></span>
|
|
<label class="settings" data-i18n-title="programs" title="Programs">
|
|
<textarea name="attr_programs" placeholder="Programs" title="@{programs}"></textarea>
|
|
</label>
|
|
</div>
|
|
<input name="attr_modifications" type="hidden" value=""/>
|
|
<div class="textrow vehicle">
|
|
<h1 data-i18n="modifications">key</h1>
|
|
<span name="attr_modifications"></span>
|
|
<label class="settings" data-i18n-title="modifications" title="Modifications">
|
|
<textarea name="attr_modifications" placeholder="Modifications" title="@{modifications}"></textarea>
|
|
</label>
|
|
</div>
|
|
<input name="attr_powers" type="hidden" value=""/>
|
|
<div class="textrow grunt hide-magic">
|
|
<h1 data-i18n="powers">key</h1>
|
|
<span name="attr_powers"></span>
|
|
<label class="settings" data-i18n-title="powers" title="Powers">
|
|
<textarea name="attr_powers" placeholder="Powers" title="@{powers}"></textarea>
|
|
</label>
|
|
</div>
|
|
<input name="attr_weakness" type="hidden" value=""/>
|
|
<div class="textrow grunt hide-magic">
|
|
<h1 data-i18n="weakness">key</h1>
|
|
<span name="attr_weakness"></span>
|
|
<label class="settings" data-i18n-title="weakness" title="Weakness">
|
|
<textarea name="attr_weakness" placeholder="Weakness" title="@{weakness}"></textarea>
|
|
</label>
|
|
</div>
|
|
<div class="textrow grunt hide-magic">
|
|
<input name="attr_initiate" type="hidden" value=""/>
|
|
<h1 data-i18n="initiate">key</h1>
|
|
<span name="attr_initiate"></span>
|
|
<label class="settings" data-i18n-title="initiate" title="Initiate">
|
|
<input name="attr_initiate" placeholder="initiate" type="number" title="@{initiate}"/>
|
|
</label>
|
|
<br/>
|
|
<span name="attr_metamagic"></span>
|
|
<label class="settings" data-i18n-title="metamagic" title="metamagic">
|
|
<textarea name="attr_metamagic" placeholder="metamagic" title="@{metamagic}"></textarea>
|
|
</label>
|
|
</div>
|
|
<div class="textrow grunt hide-resonance">
|
|
<input name="attr_submersion" type="hidden" value=""/>
|
|
<h1 data-i18n="submersion">key</h1>
|
|
<span name="attr_submersion"></span>
|
|
<label class="settings" data-i18n-title="submersion" title="Submersion">
|
|
<input name="attr_submersion" placeholder="submersion" type="number" title="@{submersion}"/>
|
|
</label>
|
|
<br/>
|
|
<span name="attr_echos"></span>
|
|
<label class="settings" data-i18n-title="echos" title="echos">
|
|
<textarea name="attr_echos" placeholder="echos" title="@{echos}"></textarea>
|
|
</label>
|
|
</div>
|
|
<div class="rows grunt repeating inline-repeating">
|
|
<h1 data-i18n="skills">skills</h1>
|
|
<fieldset class="repeating_active">
|
|
<input name="attr_display_rating" type="hidden"/>
|
|
<input name="attr_specialization" type="hidden" value=""/>
|
|
<input name="attr_display_limit" type="hidden" value="Physical"/>
|
|
<input name="attr_display_attribute" type="hidden" value="Agility"/>
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<input name="attr_display_skill" type="hidden" value=""/>
|
|
<input class="toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<button class="eclipse" name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+0)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{display_limit} @{limit}}}">
|
|
<span name="attr_display_skill"></span>
|
|
</button>
|
|
<button class="eclipse" name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+2)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}, @{display_limit} @{limit}}}">
|
|
<span name="attr_specialization"></span>
|
|
</button>
|
|
<span name="attr_display_rating"></span>
|
|
<div class="settings">
|
|
<h2 data-i18n="skill">Skill</h2>
|
|
<h2 data-i18n="rating">Rating</h2>
|
|
<h2 data-i18n="ratingmodifier">Rating Modifier</h2>
|
|
<h2 data-i18n="attribute">Attribute</h2>
|
|
<h2 data-i18n="limit">Limit</h2>
|
|
<select class="skill-select" name="attr_skill" title="@{repeating_active_${x}_skill}" value="Close Combat Group">
|
|
<option class="option-headers" disabled="true" data-i18n="combatskills">Combat Skills</option>
|
|
<option class="option-groups" value="Close Combat Group" data-i18n="closecombatgroup">Close Combat Group</option>
|
|
<option class="option-groups" value="Firearms Group" data-i18n="firearmsgroup">Firearms Group</option>
|
|
<option value="Archery" data-i18n="archery">Archery</option>
|
|
<option value="Automatics" data-i18n="automatics">Automatics</option>
|
|
<option value="Blades" data-i18n="blades">Blades</option>
|
|
<option value="Clubs" data-i18n="clubs">Clubs</option>
|
|
<option value="Exotic Melee" data-i18n="exoticmelee">Exotic Melee</option>
|
|
<option value="Exotic Range" data-i18n="exoticrange">Exotic Range</option>
|
|
<option value="Heavy Weapons" data-i18n="heavyweapons">Heavy Weapons</option>
|
|
<option value="Longarms" data-i18n="longarms">Longarms</option>
|
|
<option value="Pistols" data-i18n="pistols">Pistols</option>
|
|
<option value="Throwing Weapons" data-i18n="throwingweapons">Throwing Weapons</option>
|
|
<option value="Unarmed Combat" data-i18n="unarmedcombat">Unarmed Combat</option>
|
|
<option class="option-headers" disabled="true" data-i18n="physicalskills">Physical Skills</option>
|
|
<option class="option-groups" value="Athletics Group" data-i18n="athleticsgroup">Athletics Group</option>
|
|
<option class="option-groups" value="Outdoors Group" data-i18n="outdoorsgroup">Outdoors Group</option>
|
|
<option class="option-groups" value="Stealth Group" data-i18n="stealthgroup">Stealth Group</option>
|
|
<option value="Disguise" data-i18n="disguise">Disguise</option>
|
|
<option value="Diving" data-i18n="diving">Diving</option>
|
|
<option value="Escape Artist" data-i18n="escapeartist">Escape Artist</option>
|
|
<option value="Flight" data-i18n="flight">Flight</option>
|
|
<option value="Free Fall" data-i18n="freefall">Free Fall</option>
|
|
<option value="Gymnastics" data-i18n="gymnastics">Gymnastics</option>
|
|
<option value="Palming" data-i18n="palming">Palming</option>
|
|
<option value="Perception" data-i18n="perception">Perception</option>
|
|
<option value="Running" data-i18n="running">Running</option>
|
|
<option value="Sneaking" data-i18n="sneaking">Sneaking</option>
|
|
<option value="Survival" data-i18n="survival">Survival</option>
|
|
<option value="Swimming" data-i18n="swimming">Swimming</option>
|
|
<option value="Tracking" data-i18n="tracking">Tracking</option>
|
|
<option class="option-headers" disabled="true" data-i18n="socialskills">Social Skills</option>
|
|
<option class="option-groups" value="Acting Group" data-i18n="actinggroup">Acting Group</option>
|
|
<option class="option-groups" value="Influence Group" data-i18n="influencegroup">Influence Group</option>
|
|
<option value="Con" data-i18n="con">Con</option>
|
|
<option value="Etiquette" data-i18n="etiquette">Etiquette</option>
|
|
<option value="Impersonation" data-i18n="impersonation">Impersonation</option>
|
|
<option value="Instruction" data-i18n="instruction">Instruction</option>
|
|
<option value="Intimidation" data-i18n="intimidation">Intimidation</option>
|
|
<option value="Leadership" data-i18n="leadership">Leadership</option>
|
|
<option value="Negotiation" data-i18n="negotiation">Negotiation</option>
|
|
<option value="Performance" data-i18n="performance">Performance</option>
|
|
<option class="option-headers" disabled="true" data-i18n="magicalskills">Magical Skills</option>
|
|
<option class="option-groups" value="Conjuring Group" data-i18n="conjuringgroup">Conjuring Group</option>
|
|
<option class="option-groups" value="Enchanting Group" data-i18n="enchantinggroup">Enchanting Group</option>
|
|
<option class="option-groups" value="Sorcery Group" data-i18n="sorcerygroup">Sorcery Group</option>
|
|
<option value="Alchemy" data-i18n="alchemy">Alchemy</option>
|
|
<option value="Arcana" data-i18n="arcana">Arcana</option>
|
|
<option value="Artificing" data-i18n="artificing">Artificing</option>
|
|
<option value="Assensing" data-i18n="assensing">Assensing</option>
|
|
<option value="Astral Combat" data-i18n="astralcombat">Astral Combat</option>
|
|
<option value="Banishing" data-i18n="banishing">Banishing</option>
|
|
<option value="Binding" data-i18n="binding">Binding</option>
|
|
<option value="Counterspelling" data-i18n="counterspelling">Counterspelling</option>
|
|
<option value="Disenchanting" data-i18n="disenchanting">Disenchanting</option>
|
|
<option value="Ritual Spellcasting" data-i18n="ritualspellcasting">Ritual Spellcasting</option>
|
|
<option value="Spellcasting" data-i18n="spellcasting">Spellcasting</option>
|
|
<option value="Summoning" data-i18n="summoning">Summoning</option>
|
|
<option class="option-headers" disabled="true" data-i18n="resonanceskills">Resonance Skills</option>
|
|
<option class="option-groups" value="Tasking Group" data-i18n="taskinggroup">Tasking Group</option>
|
|
<option value="Compiling" data-i18n="compiling">Compiling</option>
|
|
<option value="Decompiling" data-i18n="decompiling">Decompiling</option>
|
|
<option value="Registering" data-i18n="registering">Registering</option>
|
|
<option class="option-headers" disabled="true" data-i18n="technicalskills">Technical Skills</option>
|
|
<option class="option-groups" value="Biotech Group" data-i18n="biotechgroup">Biotech Group</option>
|
|
<option class="option-groups" value="Cracking Group" data-i18n="crackinggroup">Cracking Group</option>
|
|
<option class="option-groups" value="Electronics Group" data-i18n="electronicsgroup">Electronics Group</option>
|
|
<option class="option-groups" value="Engineering Group" data-i18n="engineeringgroup">Engineering Group</option>
|
|
<option value="Aeronautics Mechanic" data-i18n="aeronauticsmechanic">Aeronautics Mechanic</option>
|
|
<option value="Animal Handling" data-i18n="animalhandling">Animal Handling</option>
|
|
<option value="Armorer" data-i18n="armorer">Armorer</option>
|
|
<option value="Artisan" data-i18n="artisan">Artisan</option>
|
|
<option value="Automotive Mechanic" data-i18n="automotivemechanic">Automotive Mechanic</option>
|
|
<option value="Biotechnology" data-i18n="biotechnology">Biotechnology</option>
|
|
<option value="Chemistry" data-i18n="chemistry">Chemistry</option>
|
|
<option value="Computer" data-i18n="computer">Computer</option>
|
|
<option value="Cybercombat" data-i18n="cybercombat">Cybercombat</option>
|
|
<option value="Cybertechnology" data-i18n="cybertechnology">Cybertechnology</option>
|
|
<option value="Demolitions" data-i18n="demolitions">Demolitions</option>
|
|
<option value="Electronic Warfare" data-i18n="electronicwarfare">Electronic Warfare</option>
|
|
<option value="First Aid" data-i18n="firstaid">First Aid</option>
|
|
<option value="Forgery" data-i18n="forgery">Forgery</option>
|
|
<option value="Hacking" data-i18n="hacking">Hacking</option>
|
|
<option value="Hardware" data-i18n="hardware">Hardware</option>
|
|
<option value="Industrial Mechanic" data-i18n="industrialmechanic">Industrial Mechanic</option>
|
|
<option value="Locksmith" data-i18n="locksmith">Locksmith</option>
|
|
<option value="Medicine" data-i18n="medicine">Medicine</option>
|
|
<option value="Nautical Mechanic" data-i18n="nauticalmechanic">Nautical Mechanic</option>
|
|
<option value="Navigation" data-i18n="navigation">Navigation</option>
|
|
<option value="Gunnery" data-i18n="gunnery">Gunnery</option>
|
|
<option value="Pilot Aerospace" data-i18n="pilotaerospace">Pilot Aerospace</option>
|
|
<option value="Pilot Aircraft" data-i18n="pilotaircraft">Pilot Aircraft</option>
|
|
<option value="Pilot Exotic Vehicle" data-i18n="pilotexoticvehicle">Pilot Exotic Vehicle</option>
|
|
<option value="Pilot Ground Craft" data-i18n="pilotgroundcraft">Pilot Ground Craft</option>
|
|
<option value="Pilot Walker" data-i18n="pilotwalker">Pilot Walker</option>
|
|
<option value="Pilot Watercraft" data-i18n="pilotwatercraft">Pilot Watercraft</option>
|
|
<option value="Software" data-i18n="software">Software</option>
|
|
</select>
|
|
<label data-i18n-title="rating" title="rating"><input name="attr_rating" min="0" placeholder="0" title="@{repeating_active_${x}_rating}" type="number"/></label>
|
|
<label data-i18n-title="ratingmodifier" title="Rating Modifier"><input name="attr_rating_modifier" min="0" placeholder="0" title="@{repeating_active_${x}_rating_modifier}" type="number"/></label>
|
|
<select class="attribute-select" name="attr_attribute" title="@{repeating_active_${x}_attribute}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}" selected="selected">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<select class="limit-select" name="attr_limit" title="@{repeating_active_${x}_limit}" value="physical_limit">
|
|
<option value="">-</option>
|
|
<option data-i18n="mental" value="@{mental_limit}">Mental</option>
|
|
<option data-i18n="physical" value="@{physical_limit}" selected="selected">Physical</option>
|
|
<option data-i18n="social" value="@{social_limit}">Social</option>
|
|
<option data-i18n="attack" value="@{attack}">Attack</option>
|
|
<option data-i18n="data_processing" value="@{data_processing}">Data Processing</option>
|
|
<option data-i18n="firewall" value="@{firewall}">Firewall</option>
|
|
<option data-i18n="sleaze" value="@{sleaze}">Sleaze</option>
|
|
</select>
|
|
<h2 class="full-row" data-i18n="specialization">specialization</h2>
|
|
<label class="full-row" data-i18n-title="specialization" title="specialization"> <input name="attr_specialization" placeholder="Specalizations" title="@{repeating_active_${x}_specialization}" type="text"/></label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows grunt repeating inline-repeating">
|
|
<h1 data-i18n="knowledgeskills">knowledgeskills</h1>
|
|
<fieldset class="repeating_knowledge">
|
|
<input name="attr_display_rating" type="hidden"/>
|
|
<input name="attr_specialization" type="hidden" value=""/>
|
|
<input name="attr_display_limit" type="hidden" value="Mental"/>
|
|
<input name="attr_display_attribute" type="hidden" value="Logic"/>
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<input class="toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<button class="eclipse" name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+0)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{display_limit} @{limit}}}">
|
|
<span name="attr_skill"></span>
|
|
</button>
|
|
<button class="eclipse" name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+2)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}, @{display_limit} @{limit}}}">
|
|
<span name="attr_specialization"></span>
|
|
</button>
|
|
<span name="attr_display_rating"></span>
|
|
<div class="settings">
|
|
<h2 data-i18n="skill">Skill</h2>
|
|
<h2 data-i18n="rating">Rating</h2>
|
|
<h2 data-i18n="ratingmodifier">Rating Modifier</h2>
|
|
<h2 data-i18n="attribute">Attribute</h2>
|
|
<h2 data-i18n="limit">Limit</h2>
|
|
<label data-i18n-title="skill" title="skill"><input name="attr_skill" placeholder="knowledge" title="@{repeating_knowledge_${x}_skill}" type="text"/></label>
|
|
<label data-i18n-title="rating" title="rating"><input name="attr_rating" min="0" placeholder="0" title="@{repeating_knowledge_${x}_rating}" type="number"/></label>
|
|
<label data-i18n-title="ratingmodifier" title="Rating Modifier"><input name="attr_rating_modifier" min="0" placeholder="0" title="@{repeating_knowledge_${x}_rating_modifier}" type="number"/></label>
|
|
<select class="attribute-select" name="attr_attribute" title="@{repeating_knowledge_${x}_attribute}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}" selected="selected">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<select class="limit-select" name="attr_limit" title="@{repeating_knowledge_${x}_limit}" value="physical_limit">
|
|
<option value="">-</option>
|
|
<option data-i18n="mental" value="@{mental_limit}" selected="selected">Mental</option>
|
|
<option data-i18n="physical" value="@{physical_limit}">Physical</option>
|
|
<option data-i18n="social" value="@{social_limit}">Social</option>
|
|
<option data-i18n="attack" value="@{attack}">Attack</option>
|
|
<option data-i18n="data_processing" value="@{data_processing}">Data Processing</option>
|
|
<option data-i18n="firewall" value="@{firewall}">Firewall</option>
|
|
<option data-i18n="sleaze" value="@{sleaze}">Sleaze</option>
|
|
</select>
|
|
<h2 class="full-row" data-i18n="specialization">specialization</h2>
|
|
<label class="full-row" data-i18n-title="specialization" title="specialization"><input name="attr_specialization" placeholder="Specalizations" title="@{repeating_knowledge_${x}_specialization}" type="text"/></label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows grunt repeating inline-repeating">
|
|
<h1 data-i18n="languageskills">languageskills</h1>
|
|
<fieldset class="repeating_language">
|
|
<input name="attr_display_rating" type="hidden"/><input name="attr_specialization" type="hidden" value=""/>
|
|
<input name="attr_display_limit" type="hidden" value="Social"/>
|
|
<input name="attr_display_attribute" type="hidden" value="Charisma"/>
|
|
<input name="attr_dicepool" type="hidden" value="0"/>
|
|
<input class="toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<button class="eclipse" name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+0)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{display_limit} @{limit}}}">
|
|
<span name="attr_skill"></span>
|
|
</button>
|
|
<button class="eclipse" name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=@{display_attribute}}}{{dice=[[((@{dicepool}+@{attribute}+2)+(@{hot_sim}-@{running_silent}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}, @{display_limit} @{limit}}}">
|
|
<span name="attr_specialization"></span>
|
|
</button>
|
|
<span name="attr_display_rating"></span>
|
|
<div class="settings">
|
|
<h2 data-i18n="skill">Skill</h2>
|
|
<h2 data-i18n="rating">Rating</h2>
|
|
<h2 data-i18n="ratingmodifier">Rating Modifier</h2>
|
|
<h2 data-i18n="attribute">Attribute</h2>
|
|
<h2 data-i18n="limit">Limit</h2>
|
|
<label data-i18n-title="skill" title="skill"><input name="attr_skill" placeholder="language" title="@{repeating_language_${x}_skill}" type="text"/></label>
|
|
<label data-i18n-title="rating" title="rating"><input name="attr_rating" min="0" placeholder="0" title="@{repeating_language_${x}_rating}" type="number"/></label>
|
|
<label data-i18n-title="ratingmodifier" title="Rating Modifier"><input name="attr_rating_modifier" min="0" placeholder="0" title="@{repeating_language_${x}_rating_modifier}" type="number"/></label>
|
|
<select class="attribute-select" name="attr_attribute" title="@{repeating_language_${x}_attribute}">
|
|
<option data-i18n="body" value="@{body}">Body</option>
|
|
<option data-i18n="agility" value="@{agility}">Agility</option>
|
|
<option data-i18n="reaction" value="@{reaction}">Reaction</option>
|
|
<option data-i18n="strength" value="@{strength}">Strength</option>
|
|
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
|
|
<option data-i18n="logic" value="@{logic}">Logic</option>
|
|
<option data-i18n="intuition" value="@{intuition}">Intuition</option>
|
|
<option data-i18n="charisma" value="@{charisma}" selected="selected">Charisma</option>
|
|
<option data-i18n="magic" value="@{magic}">Magic</option>
|
|
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
|
|
</select>
|
|
<select class="limit-select" name="attr_limit" title="@{repeating_language_${x}_limit}" value="physical_limit">
|
|
<option value="">-</option>
|
|
<option data-i18n="mental" value="@{mental_limit}">Mental</option>
|
|
<option data-i18n="physical" value="@{physical_limit}">Physical</option>
|
|
<option data-i18n="social" value="@{social_limit}" selected="selected">Social</option>
|
|
<option data-i18n="attack" value="@{attack}">Attack</option>
|
|
<option data-i18n="data_processing" value="@{data_processing}">Data Processing</option>
|
|
<option data-i18n="firewall" value="@{firewall}">Firewall</option>
|
|
<option data-i18n="sleaze" value="@{sleaze}">Sleaze</option>
|
|
</select>
|
|
<h2 class="full-row" data-i18n="specialization">specialization</h2>
|
|
<label class="full-row" data-i18n-title="specialization" title="specialization">
|
|
<input name="attr_specialization" placeholder="Specalizations" title="@{repeating_language_${x}_specialization}" type="text"/>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows sprite repeating inline-repeating">
|
|
<h1 data-i18n="skills">skills</h1>
|
|
<fieldset class="repeating_active">
|
|
<input class="toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<button name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{skill}}}{{base=^{level}}}{{dice=[[((@{level}+@{level}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}">
|
|
<span name="attr_display_skill"></span>
|
|
</button>
|
|
<div class="settings">
|
|
<h2 class="full-row" data-i18n="skill">Skill</h2>
|
|
<select class="skill-select" name="attr_skill" title="@{repeating_active_${x}_skill}">
|
|
<option value="Computer" data-i18n="computer">Computer</option>
|
|
<option value="Cybercombat" data-i18n="cybercombat">Cybercombat</option>
|
|
<option value="Electronic Warfare" data-i18n="electronicwarfare">Electronic Warfare</option>
|
|
<option value="Hacking" data-i18n="hacking">Hacking</option>
|
|
<option value="Hardware" data-i18n="hardware">Hardware</option></select>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows sprite repeating inline-repeating">
|
|
<h1 data-i18n="powers">Powers</h1>
|
|
<fieldset class="repeating_powers">
|
|
<input class="toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span><button name="roll_power" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{power}}}{{base=^{level}}}{{dice=[[((@{level}+@{level}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"><span name="attr_power"></span></button>
|
|
<div class="settings">
|
|
<h2 class="full-row" data-i18n="power">power</h2>
|
|
<label class="full-row" data-i18n-title="power" title="power"><input name="attr_power" placeholder="power" title="@{repeating_powers_${x}_power}" type="text"/></label>
|
|
<h2 class="full-row" data-i18n="notes">Notes</h2>
|
|
<label class="full-row" data-i18n-title="notes" title="notes"><textarea name="attr_notes" placeholder="Powers notes" title="@{repeating_powers_${x}_notes}" value=""></textarea></label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows grunt vehicle repeating weapons">
|
|
<h1 data-i18n="weapons">Weapons</h1>
|
|
<fieldset class="repeating_weapon">
|
|
<input name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<input name="attr_weapon" type="hidden" value=""/>
|
|
<span name="attr_weapon_dice"></span>
|
|
<button name="roll_weapon" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{weapon_type}}}{{base=^{base}}}{{dice=[[((@{weapon_dice}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=ACC @{weapon_acc}, DV @{weapon_dv}, AP @{weapon_ap}}}{{rea=[[@{weapon_reach}]]}}">
|
|
<span name="attr_weapon_name"></span>
|
|
</button>
|
|
<span name="attr_weapon"></span>
|
|
<input name="attr_weapon_range" type="hidden" value="range"/>
|
|
<div class="settings">
|
|
<h2 data-i18n="range">Range</h2>
|
|
<h2 data-i18n="dice">Dice</h2>
|
|
<h2 data-i18n="name">Name</h2>
|
|
<h2 data-i18n="type">Type</h2>
|
|
<h2 data-i18n="reach">Reach</h2>
|
|
<h2 data-i18n="acc">ACC</h2>
|
|
<h2 data-i18n="dam">Dam</h2>
|
|
<h2 data-i18n="ap">AP</h2>
|
|
<h2 data-i18n="modes">Modes</h2>
|
|
<h2 data-i18n="recoil">Recoil</h2>
|
|
<h2 data-i18n="ammo">Ammo</h2>
|
|
<select name="attr_weapon_range" title="@{repeating_weapon_${x}_weapon_range}" value="range">
|
|
<option data-i18n="range" value="range" selected="selected">range</option>
|
|
<option data-i18n="melee" value="melee">melee</option>
|
|
</select>
|
|
<label data-i18n-title="dice" title="Dice"><input name="attr_weapon_dice" placeholder="18" title="@{repeating_weapon_${x}_weapon_dice}" type="number" value=""/></label>
|
|
<label data-i18n-title="name" title="Name"><input name="attr_weapon_name" placeholder="Ares Predator" title="@{repeating_weapon_${x}_weapon_name}" type="text" value=""/></label>
|
|
<label data-i18n-title="type" title="Type"><input name="attr_weapon_type" placeholder="Heavy Pistol" title="@{repeating_weapon_${x}_weapon_type}" type="text" value=""/></label>
|
|
<label data-i18n-title="reach" title="Reach"><input name="attr_weapon_reach" placeholder="0" title="@{repeating_weapon_${x}_weapon_reach}" type="number" value="0"/></label>
|
|
<label data-i18n-title="acc" title="ACC"><input name="attr_weapon_acc" placeholder="5" title="@{repeating_weapon_${x}_weapon_acc}" type="text" value=""/></label>
|
|
<label data-i18n-title="dam" title="Dam"><input name="attr_weapon_dv" placeholder="9P" title="@{repeating_weapon_${x}_weapon_dv}" type="text" value=""/></label>
|
|
<label data-i18n-title="ap" title="AP"><input name="attr_weapon_ap" placeholder="-2" title="@{repeating_weapon_${x}_weapon_ap}" type="number" value=""/></label>
|
|
<label data-i18n-title="modes" title="Modes"><input name="attr_weapon_mode" placeholder="SA/BF/FA" title="@{repeating_weapon_${x}_weapon_mode}" type="text" value=""/></label>
|
|
<label data-i18n-title="recoil" title="Recoil"><input name="attr_weapon_recoil" placeholder="+2" title="@{repeating_weapon_${x}_weapon_recoil}" type="text" value=""/></label>
|
|
<label data-i18n-title="ammo" title="Ammo"><input name="attr_weapon_ammo" placeholder="15" title="@{repeating_weapon_${x}_weapon_ammo}" type="number" value=""/></label>
|
|
<label data-i18n-title="notes" title="Notes"><input name="attr_weapon_note" placeholder="w/ 3 clips of explosive rounds" title="@{repeating_weapon_${x}_weapon_note}" type="text" value=""/></label>
|
|
<span>(c)</span>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows grunt repeating spells hide-magic">
|
|
<h1 data-i18n="spells">Spells</h1>
|
|
<fieldset class="repeating_NPCspell">
|
|
<input name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<input name="attr_spell" type="hidden" value=""/>
|
|
<span name="attr_dice"></span>
|
|
<button name="roll_spell" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{name}}}{{base=^{base}}}{{dice=[[((@{dice}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=^{force} ?{Force|}, Drain [[?{Force|}+(@{drain})]]}}"><span name="attr_name"></span></button>
|
|
<span name="attr_spell"></span>
|
|
<div class="settings">
|
|
<input name="attr_category" type="hidden" value=""/>
|
|
<div class="headers">
|
|
<h2 data-i18n="category">Category</h2>
|
|
<h2 data-i18n="dice">Dice</h2>
|
|
<h2 data-i18n="name">Name</h2>
|
|
<h2 data-i18n="type">Type</h2>
|
|
<h2 data-i18n="range">Range</h2>
|
|
<h2 data-i18n="duration">Duration</h2>
|
|
<h2 data-i18n="drain">Drain</h2>
|
|
<h2 data-i18n="combat">Combat</h2>
|
|
<h2 data-i18n="dam">Dam</h2>
|
|
</div>
|
|
<select name="attr_category" title="@{repeating_NPCspell_${x}_category}" value="combat">
|
|
<option data-i18n="combat" value="Combat" selected="selected">combat</option>
|
|
<option data-i18n="detection" value="Detection">detection</option>
|
|
<option data-i18n="health" value="Health">health</option>
|
|
<option data-i18n="illusion" value="Illusion">illusion</option>
|
|
<option data-i18n="manipulation" value="Manipulation">manipulation</option>
|
|
</select>
|
|
<label data-i18n-title="dice" title="Dice"><input name="attr_dice" placeholder="18" title="@{repeating_NPCspell_${x}_dice}" type="number"/></label>
|
|
<label data-i18n-title="name" title="Name"><input name="attr_name" placeholder="Fireball" title="@{repeating_NPCspell_${x}_name}" type="text"/></label>
|
|
<select name="attr_type" title="@{repeating_NPCspell_${x}_type}" value="P">
|
|
<option data-i18n="mana" value="M">mana</option>
|
|
<option data-i18n="physical" value="P">physical</option>
|
|
</select>
|
|
<select name="attr_range" title="@{repeating_NPCspell_${x}_range}" value="LOS">
|
|
<option data-i18n="los" value="LOS">los</option>
|
|
<option data-i18n="los (a)" value="LOS (A)">los (a)</option>
|
|
<option data-i18n="special" value="Special">special</option>
|
|
<option data-i18n="t" value="T">t</option>
|
|
<option data-i18n="t (a)" value="T (A)">t (a)</option>
|
|
</select>
|
|
<select name="attr_duration" title="@{repeating_NPCspell_${x}_duration}" value="Instant">
|
|
<option data-i18n="instant" value="Instant">instant</option>
|
|
<option data-i18n="permanent" value="Permanent">permanent</option>
|
|
<option data-i18n="special" value="Special">special</option>
|
|
<option data-i18n="sustained" value="Sustained">sustained</option>
|
|
</select>
|
|
<label data-i18n-title="drain" title="Drain"><input name="attr_drain" placeholder="-1" title="@{repeating_NPCspell_${x}_drain}" type="number"/></label>
|
|
<select name="attr_combat_type" title="@{repeating_NPCspell_${x}_combat_type}" value="Force">
|
|
<option value="Force " selected="selected"></option>
|
|
<option data-i18n="direct" value="Direct, Force ">direct</option>
|
|
<option data-i18n="indirect" value="Indirect, Force ?{Force|}, AP -">indirect</option>
|
|
</select>
|
|
<label data-i18n-title="dam" title="Dam"><input name="attr_damage" placeholder="P" title="@{repeating_NPCspell_${x}_damage}" type="text"/></label>
|
|
<label data-i18n-title="notes" title="Notes"><input name="attr_note" placeholder="may start fires" title="@{repeating_NPCspell_${x}_note}" type="text"/></label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows grunt repeating forms hide-resonance">
|
|
<h1 data-i18n="complex form">Complex Forms</h1>
|
|
<fieldset class="repeating_form">
|
|
<input name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<input name="attr_form" type="hidden" value=""/>
|
|
<span name="attr_form_dice"></span>
|
|
<button name="roll_complex form" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{form_name}}}{{base=^{base}}}{{dice=[[((@{form_dice}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=?{Level|}, Fade [[?{Level|}+(@{form_fade})]]}}">
|
|
<span name="attr_form_name"></span>
|
|
</button>
|
|
<span name="attr_form"></span>
|
|
<div class="settings">
|
|
<h2 data-i18n="dice">Dice</h2>
|
|
<h2 data-i18n="name">Name</h2>
|
|
<h2 data-i18n="target">Target</h2>
|
|
<h2 data-i18n="duration">Duration</h2>
|
|
<h2 data-i18n="fade">Fade</h2>
|
|
<label data-i18n-title="dice" title="Dice">
|
|
<input name="attr_form_dice" placeholder="18" title="@{repeating_form_${x}_form_dice}" type="number"/></label>
|
|
<label data-i18n-title="name" title="Name"><input name="attr_form_name" placeholder="Editor" title="@{repeating_form_${x}_form_name}" type="text"/></label>
|
|
<select name="attr_form_target" title="@{repeating_form_${x}_form_target}" value="device">
|
|
<option data-i18n="device" value="device" selected="selected">device</option>
|
|
<option data-i18n="file" value="file">file</option>
|
|
<option data-i18n="host" value="host">host</option>
|
|
<option data-i18n="ic" value="ic">ic</option>
|
|
<option data-i18n="persona" value="persona">persona</option>
|
|
<option data-i18n="self" value="self">self</option>
|
|
<option data-i18n="sprite" value="sprite">sprite</option>
|
|
</select>
|
|
<label data-i18n-title="duration" title="Duration"><input name="attr_form_duration" placeholder="Permanent" title="@{repeating_form_${x}_form_duration}" type="text"/></label>
|
|
<label data-i18n-title="fade" title="Fade"><input name="attr_form_fade" placeholder="+2" title="@{repeating_form_${x}_form_fade}" type="number"/></label>
|
|
<label data-i18n-title="notes" title="Notes"><input name="attr_form_note" placeholder="edit files" title="@{repeating_form_${x}_form_note}" type="text"/></label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="rows host repeating ic">
|
|
<h1 data-i18n="intrusioncountermeasures">Intrusion Countermeasures</h1>
|
|
<fieldset class="repeating_IC">
|
|
<input name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
|
|
<input name="attr_IC" type="hidden" value=""/>
|
|
<button name="roll_IC" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=Intrusion Countermeasures}}{{base=^{base}}}{{dice=[[((@{IC_attack})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}"><span name="attr_IC_name"></span></button>
|
|
<span name="attr_IC"></span>
|
|
<div class="settings">
|
|
<h2 data-i18n="name">Name</h2><h2 data-i18n="ic limit">IC Limit</h2>
|
|
<h2 data-i18n="defense attribute">Defense Attribute</h2>
|
|
<h2 data-i18n="defense matrix attribute">Defense Matrix Attribute</h2>
|
|
<label data-i18n-title="name" title="Name"><input name="attr_IC_name" placeholder="Black" title="@{repeating_IC_${x}_name}" type="text"/></label>
|
|
<select name="attr_IC_limit" title="@{repeating_IC_${x}_limit}" value="attack">
|
|
<option data-i18n="attack" value="Attack" selected="selected">attack</option>
|
|
<option data-i18n="data_processing" value="Data Processing">data_processing</option>
|
|
</select>
|
|
<select name="attr_IC_attribute" title="@{repeating_IC_${x}_attribute}" value="willpower">
|
|
<option data-i18n="willpower" value="Willpower" selected="selected">willpower</option>
|
|
<option data-i18n="intuition" value="Intuition">intuition</option>
|
|
<option data-i18n="logic" value="Logic">logic</option>
|
|
</select>
|
|
<select name="attr_IC_matrix" title="@{repeating_IC_${x}_matrix}" value="firewall">
|
|
<option data-i18n="attack" value="Attack">attack</option>
|
|
<option data-i18n="sleaze" value="Sleaze">sleaze</option>
|
|
<option data-i18n="data_processing" value="Data Processing">data_processing</option>
|
|
<option data-i18n="firewall" value="Firewall" selected="selected">firewall</option>
|
|
</select>
|
|
<label data-i18n-title="notes" title="Notes"><input name="attr_IC_note" placeholder="deploy the ic" title="@{repeating_IC_${x}_note}" type="text"/></label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<input name="attr_flag_matrix" type="hidden" value=""/>
|
|
<div class="matrix body matrix-device">
|
|
<div class="rows">
|
|
<h1 data-i18n="matrixdevice">Matrix Device</h1>
|
|
<label data-i18n-title="device" title="device">
|
|
<input name="attr_device_name" placeholder="Sony CIY-720" type="text"/>
|
|
</label>
|
|
<button data-i18n="devicerating" name="device rating" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=Matrix Resistance}}{{base=^{base}}}{{dice=[[((@{device_rating}+@{firewall}) +@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}" type="roll">Device Rating</button>
|
|
<label class="round" data-i18n-title="devicerating" title="devicerating">
|
|
<input name="attr_device_rating" placeholder="4" type="number" value=""/>
|
|
</label>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="attack" name="Attack" value="&{template:rolls}{{header=^{attack}}}{{base=^{base}}}{{dice=[[(@{attack}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" type="roll">Attack</button>
|
|
<div class="matrix-bubble matrixAttack">
|
|
<input name="attr_attack" value="1" type="radio"/><span></span><input name="attr_attack" value="2" type="radio"/><span></span><input name="attr_attack" value="3" type="radio"/><span></span><input name="attr_attack" value="4" type="radio"/><span></span><input name="attr_attack" value="5" type="radio"/><span></span><input name="attr_attack" value="6" type="radio"/><span></span><input name="attr_attack" value="7" type="radio"/><span></span><input name="attr_attack" value="8" type="radio"/><span></span><input name="attr_attack" value="9" type="radio"/><span></span><input name="attr_attack" value="10" type="radio"/><span></span><input name="attr_attack" value="11" type="radio"/><span></span><input name="attr_attack" value="12" type="radio"/><span></span><input name="attr_attack" value="13" type="radio"/><span></span><input name="attr_attack" value="14" type="radio"/><span></span><input name="attr_attack" value="15" type="radio"/><span></span><input name="attr_attack" value="16" type="radio"/><span></span><input name="attr_attack" value="17" type="radio"/><span></span><input name="attr_attack" value="18" type="radio"/><span></span><input name="attr_attack" value="19" type="radio"/><span></span><input name="attr_attack" value="20" type="radio"/><span></span><input name="attr_attack" value="21" type="radio"/><span></span><input name="attr_attack" value="22" type="radio"/><span></span><input name="attr_attack" value="23" type="radio"/><span></span><input name="attr_attack" value="24" type="radio"/><span></span><input name="attr_attack" value="25" type="radio"/><span></span>
|
|
</div>
|
|
<label class="round" data-i18n-title="attack" title="attack">
|
|
<input name="attr_attack" placeholder="4" type="number" value=""/>
|
|
</label>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="sleaze" name="Sleaze" value="&{template:rolls}{{header=^{sleaze}}}{{base=^{base}}}{{dice=[[(@{sleaze}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" type="roll">Sleaze</button>
|
|
<div class="matrix-bubble matrixSleaze">
|
|
<input name="attr_sleaze" value="1" type="radio"/><span></span><input name="attr_sleaze" value="2" type="radio"/><span></span><input name="attr_sleaze" value="3" type="radio"/><span></span><input name="attr_sleaze" value="4" type="radio"/><span></span><input name="attr_sleaze" value="5" type="radio"/><span></span><input name="attr_sleaze" value="6" type="radio"/><span></span><input name="attr_sleaze" value="7" type="radio"/><span></span><input name="attr_sleaze" value="8" type="radio"/><span></span><input name="attr_sleaze" value="9" type="radio"/><span></span><input name="attr_sleaze" value="10" type="radio"/><span></span><input name="attr_sleaze" value="11" type="radio"/><span></span><input name="attr_sleaze" value="12" type="radio"/><span></span><input name="attr_sleaze" value="13" type="radio"/><span></span><input name="attr_sleaze" value="14" type="radio"/><span></span><input name="attr_sleaze" value="15" type="radio"/><span></span><input name="attr_sleaze" value="16" type="radio"/><span></span><input name="attr_sleaze" value="17" type="radio"/><span></span><input name="attr_sleaze" value="18" type="radio"/><span></span><input name="attr_sleaze" value="19" type="radio"/><span></span><input name="attr_sleaze" value="20" type="radio"/><span></span><input name="attr_sleaze" value="21" type="radio"/><span></span><input name="attr_sleaze" value="22" type="radio"/><span></span><input name="attr_sleaze" value="23" type="radio"/><span></span><input name="attr_sleaze" value="24" type="radio"/><span></span><input name="attr_sleaze" value="25" type="radio"/><span></span>
|
|
</div>
|
|
<label class="round" data-i18n-title="sleaze" title="sleaze">
|
|
<input name="attr_sleaze" placeholder="4" type="number" value=""/>
|
|
</label>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="data_processing" name="Data Processing" value="&{template:rolls}{{header=^{data_processing}}}{{base=^{base}}}{{dice=[[(@{data_processing}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" type="roll">Data Processing</button>
|
|
<div class="matrix-bubble matrixData">
|
|
<input name="attr_data_processing" value="1" type="radio"/><span></span><input name="attr_data_processing" value="2" type="radio"/><span></span><input name="attr_data_processing" value="3" type="radio"/><span></span><input name="attr_data_processing" value="4" type="radio"/><span></span><input name="attr_data_processing" value="5" type="radio"/><span></span><input name="attr_data_processing" value="6" type="radio"/><span></span><input name="attr_data_processing" value="7" type="radio"/><span></span><input name="attr_data_processing" value="8" type="radio"/><span></span><input name="attr_data_processing" value="9" type="radio"/><span></span><input name="attr_data_processing" value="10" type="radio"/><span></span><input name="attr_data_processing" value="11" type="radio"/><span></span><input name="attr_data_processing" value="12" type="radio"/><span></span><input name="attr_data_processing" value="13" type="radio"/><span></span><input name="attr_data_processing" value="14" type="radio"/><span></span><input name="attr_data_processing" value="15" type="radio"/><span></span><input name="attr_data_processing" value="16" type="radio"/><span></span><input name="attr_data_processing" value="17" type="radio"/><span></span><input name="attr_data_processing" value="18" type="radio"/><span></span><input name="attr_data_processing" value="19" type="radio"/><span></span><input name="attr_data_processing" value="20" type="radio"/><span></span><input name="attr_data_processing" value="21" type="radio"/><span></span><input name="attr_data_processing" value="22" type="radio"/><span></span><input name="attr_data_processing" value="23" type="radio"/><span></span><input name="attr_data_processing" value="24" type="radio"/><span></span><input name="attr_data_processing" value="25" type="radio"/><span></span>
|
|
</div>
|
|
<label class="round" data-i18n-title="data_processing" title="data_processing">
|
|
<input name="attr_data_processing" placeholder="4" type="number" value=""/>
|
|
</label>
|
|
</div>
|
|
<div class="rows">
|
|
<button data-i18n="firewall" name="Firewall" value="&{template:rolls}{{header=^{firewall}}}{{base=^{base}}}{{dice=[[(@{firewall}+(?{Attribute|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}" type="roll">Firewall</button>
|
|
<div class="matrix-bubble matrixFirewall">
|
|
<input name="attr_firewall" value="1" type="radio"/><span></span><input name="attr_firewall" value="2" type="radio"/><span></span><input name="attr_firewall" value="3" type="radio"/><span></span><input name="attr_firewall" value="4" type="radio"/><span></span><input name="attr_firewall" value="5" type="radio"/><span></span><input name="attr_firewall" value="6" type="radio"/><span></span><input name="attr_firewall" value="7" type="radio"/><span></span><input name="attr_firewall" value="8" type="radio"/><span></span><input name="attr_firewall" value="9" type="radio"/><span></span><input name="attr_firewall" value="10" type="radio"/><span></span><input name="attr_firewall" value="11" type="radio"/><span></span><input name="attr_firewall" value="12" type="radio"/><span></span><input name="attr_firewall" value="13" type="radio"/><span></span><input name="attr_firewall" value="14" type="radio"/><span></span><input name="attr_firewall" value="15" type="radio"/><span></span><input name="attr_firewall" value="16" type="radio"/><span></span><input name="attr_firewall" value="17" type="radio"/><span></span><input name="attr_firewall" value="18" type="radio"/><span></span><input name="attr_firewall" value="19" type="radio"/><span></span><input name="attr_firewall" value="20" type="radio"/><span></span><input name="attr_firewall" value="21" type="radio"/><span></span><input name="attr_firewall" value="22" type="radio"/><span></span><input name="attr_firewall" value="23" type="radio"/><span></span><input name="attr_firewall" value="24" type="radio"/><span></span><input name="attr_firewall" value="25" type="radio"/><span></span>
|
|
</div>
|
|
<label class="round" data-i18n-title="firewall" title="firewall">
|
|
<input name="attr_firewall" placeholder="4" type="number" value=""/>
|
|
</label>
|
|
</div>
|
|
<div class="rows repeating">
|
|
<h1 data-i18n="programs">Programs</h1>
|
|
<fieldset class="repeating_programs">
|
|
<input class="toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
|
|
<span class="pictos">x</span>
|
|
<input class="toggle" name="attr_program_on" type="checkbox" checked="checked"/>
|
|
<span class="pictos">Q</span>
|
|
<button name="roll_program" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{program}}}{{desc=@{program_note}}}"><span name="attr_program"></span></button>
|
|
<span name="attr_program_note"></span>
|
|
<div class="settings">
|
|
<h2 data-i18n="name">name</h2>
|
|
<label data-i18n-title="name" title="name">
|
|
<input name="attr_program" placeholder="Program Name" title="@{repeating_programs_${x}_program}" type="text" value=""/>
|
|
</label>
|
|
<h2 data-i18n="notes">notes</h2>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_program_note" placeholder="Program Description" title="@{repeating_programs_${x}_program_note}" type="text" value=""></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="footer">
|
|
<div>
|
|
<span data-i18n="copyrightfooter"></span>
|
|
<span>Version</span>
|
|
<span name="attr_version"></span>
|
|
</div>
|
|
<img alt="Emerald Productins, LLC" src="https://raw.githubusercontent.com/clevett/Roll20-character-sheet-Shadowrun-5th-Edition/main/src/imgs/EProd_Emerald_Gloss.png"/>
|
|
</div>
|
|
<div class="rolltemplates">
|
|
<rolltemplate class="sheet-rolltemplate-rolls"><div class="sheet-template-container"><div class="sheet-template-header">{{#header}}<h1>{{header}}</h1>{{/header}}
|
|
{{#base}}<span>{{base}}</span>{{/base}}
|
|
{{#rollLess() wound 0}}<span> ♦ </span><span data-i18n="wounds"></span>{{/rollLess() wound 0}}
|
|
{{#rollLess() mod 0}}<span> ♦ </span><span data-i18n="modifier"></span>{{/rollLess() mod 0}}
|
|
{{#rollGreater() mod 0}}<span> ♦ </span><span data-i18n="modifier"></span>{{/rollGreater() mod 0}}
|
|
{{#rollGreater() edge 0}}<span> ♦ </span><span data-i18n="edge"></span>{{/rollGreater() edge 0}}</div><div class="sheet-template-body">{{#dice}}<div class="sheet-template-row"><span class="inlinerollresult">{{dice}}</span></div>{{/dice}}
|
|
{{#desc}}<div class="sheet-template-row"><span class="sheet-template-desc"> {{desc}}
|
|
{{#rollGreater() rea 0}}<span>,</span><span data-i18n="reach"></span>{{rea}}
|
|
{{/rollGreater() rea 0}}
|
|
{{#rollGreater() drain 1}}<span>,</span><span data-i18n="drain"></span>{{drain}}
|
|
{{/rollGreater() drain 1}}
|
|
{{#rollLess() drain 2}}<span>,</span><span data-i18n="drain-2"></span>{{drain}}
|
|
{{/rollLess() drain 2}}</span></div>{{/desc}}</div></div></rolltemplate>
|
|
</div>
|
|
<input type="hidden" name="attr_wounds" value="0" />
|
|
<input type="hidden" name="attr_explode_toggle" value="" />
|
|
<input type="hidden" name="attr_attribute_roll" value="" />
|
|
|
|
<input type="hidden" name="attr_armor_name" value="select a Primary in Arms" />
|
|
<input type="hidden" name="attr_soak" min="0" value="3" />
|
|
|
|
<input type="hidden" name="attr_primary_range_weapon" value="select a Primary in Arms" />
|
|
<input type="hidden" name="attr_primary_range_weapon_skill" />
|
|
<input type="hidden" name="attr_primary_range_weapon_damage" />
|
|
<input type="hidden" name="attr_primary_range_weapon_dicepool" />
|
|
<input type="hidden" name="attr_primary_range_weapon_acc" />
|
|
<input type="hidden" name="attr_primary_range_weapon_ap" />
|
|
<input type="hidden" name="attr_primary_range_weapon_mode" />
|
|
<input type="hidden" name="attr_primary_range_weapon_recoil" />
|
|
<input type="hidden" name="attr_primary_range_weapon_ammo" />
|
|
<input type="hidden" name="attr_shots_fired" value="1" />
|
|
|
|
<input type="hidden" name="attr_primary_melee_weapon" value="select a Primary in Arms" />
|
|
<input type="hidden" name="attr_primary_melee_weapon_skill" />
|
|
<input type="hidden" name="attr_primary_melee_weapon_damage" />
|
|
<input type="hidden" name="attr_primary_melee_weapon_dicepool" />
|
|
<input type="hidden" name="attr_primary_melee_weapon_acc" />
|
|
<input type="hidden" name="attr_primary_melee_weapon_ap" />
|
|
<input type="hidden" name="attr_primary_melee_weapon_reach" />
|
|
|
|
<input type="hidden" name="attr_physical_limit" value="4" />
|
|
<input type="hidden" name="attr_mental_limit"s value="4" />
|
|
<input type="hidden" name="attr_social_limit" value="5" />
|
|
<input type="hidden" name="attr_physical" value="0" />
|
|
<input type="hidden" name="attr_stun" value="0" />
|
|
<input type="hidden" name="attr_physical_max" min="0" value="10" />
|
|
<input type="hidden" name="attr_stun_max" min="0" value="10" />
|
|
<input type="hidden" name="attr_matrix" value="0" />
|
|
<input type="hidden" name="attr_matrix_max" min="8" value="10" />
|
|
<input type="hidden" name="attr_defense" value="6" />
|
|
|
|
<input type="hidden" name="attr_acting" min="0" value="0" />
|
|
<input type="hidden" name="attr_aeronauticsmechanic" min="0" value="0" />
|
|
<input type="hidden" name="attr_alchemy" min="0" value="0" />
|
|
<input type="hidden" name="attr_animalhandling" min="0" value="0" />
|
|
<input type="hidden" name="attr_arcana" min="0" value="0" />
|
|
<input type="hidden" name="attr_archery" min="0" value="0" />
|
|
<input type="hidden" name="attr_armorer" min="0" value="0" />
|
|
<input type="hidden" name="attr_artificing" min="0" value="0" />
|
|
<input type="hidden" name="attr_artisan" min="0" value="0" />
|
|
<input type="hidden" name="attr_assensing" min="0" value="0" />
|
|
<input type="hidden" name="attr_astralcombat" min="0" value="0" />
|
|
<input type="hidden" name="attr_athletics" min="0" value="0" />
|
|
<input type="hidden" name="attr_automatics" min="0" min="0" value="0" />
|
|
<input type="hidden" name="attr_automotivemechanic" min="0" value="0" />
|
|
<input type="hidden" name="attr_banishing" min="0" value="0" />
|
|
<input type="hidden" name="attr_binding" min="0" value="0" />
|
|
<input type="hidden" name="attr_biotech" min="0" value="0" />
|
|
<input type="hidden" name="attr_biotechnology" min="0" value="0" />
|
|
<input type="hidden" name="attr_blades" min="0" value="0" />
|
|
<input type="hidden" name="attr_chemistry" min="0" value="0" />
|
|
<input type="hidden" name="attr_closecombat" min="0" value="0" />
|
|
<input type="hidden" name="attr_clubs" min="0" value="0" />
|
|
<input type="hidden" name="attr_compiling" min="0" value="0" />
|
|
<input type="hidden" name="attr_computer" min="0" value="0" />
|
|
<input type="hidden" name="attr_con" min="0" value="0" />
|
|
<input type="hidden" name="attr_conjuring" min="0" value="0" />
|
|
<input type="hidden" name="attr_counterspelling" min="0" value="0" />
|
|
<input type="hidden" name="attr_cracking" min="0" value="0" />
|
|
<input type="hidden" name="attr_cybercombat" min="0" value="0" />
|
|
<input type="hidden" name="attr_cybertechnology" min="0" value="0" />
|
|
<input type="hidden" name="attr_decompiling" min="0" value="0" />
|
|
<input type="hidden" name="attr_demolitions" min="0" value="0" />
|
|
<input type="hidden" name="attr_disenchanting" min="0" value="0" />
|
|
<input type="hidden" name="attr_disguise" min="0" value="0" />
|
|
<input type="hidden" name="attr_diving" min="0" value="0" />
|
|
<input type="hidden" name="attr_electronics" min="0" value="0" />
|
|
<input type="hidden" name="attr_electronicwarfare" min="0" value="0" />
|
|
<input type="hidden" name="attr_enchanting" min="0" value="0" />
|
|
<input type="hidden" name="attr_engineering" min="0" value="0" />
|
|
<input type="hidden" name="attr_escapeartist" min="0" value="0" />
|
|
<input type="hidden" name="attr_etiquette" min="0" value="0" />
|
|
<input type="hidden" name="attr_exoticmelee" min="0" value="0" />
|
|
<input type="hidden" name="attr_exoticrange" min="0" value="0" />
|
|
<input type="hidden" name="attr_firearms" min="0" value="0" />
|
|
<input type="hidden" name="attr_firstaid" min="0" value="0" />
|
|
<input type="hidden" name="attr_flight" min="0" value="0" />
|
|
<input type="hidden" name="attr_forgery" min="0" value="0" />
|
|
<input type="hidden" name="attr_freefall" min="0" value="0" />
|
|
<input type="hidden" name="attr_gunnery" min="0" value="0" />
|
|
<input type="hidden" name="attr_gymnastics" min="0" value="0" />
|
|
<input type="hidden" name="attr_hacking" min="0" value="0" />
|
|
<input type="hidden" name="attr_hardware" min="0" value="0" />
|
|
<input type="hidden" name="attr_heavyweapons" min="0" value="0" />
|
|
<input type="hidden" name="attr_impersonation" min="0" value="0" />
|
|
<input type="hidden" name="attr_industrialmechanic" min="0" value="0" />
|
|
<input type="hidden" name="attr_influence" min="0" value="0" />
|
|
<input type="hidden" name="attr_instruction" min="0" value="0" />
|
|
<input type="hidden" name="attr_intimidation" min="0" value="0" />
|
|
<input type="hidden" name="attr_leadership" min="0" value="0" />
|
|
<input type="hidden" name="attr_locksmith" min="0" value="0" />
|
|
<input type="hidden" name="attr_longarms" min="0" value="0" />
|
|
<input type="hidden" name="attr_medicine" min="0" value="0" />
|
|
<input type="hidden" name="attr_nauticalmechanic" min="0" value="0" />
|
|
<input type="hidden" name="attr_navigation" min="0" value="0" />
|
|
<input type="hidden" name="attr_negotiation" min="0" value="0" />
|
|
<input type="hidden" name="attr_outdoors" min="0" value="0" />
|
|
<input type="hidden" name="attr_palming" min="0" value="0" />
|
|
<input type="hidden" name="attr_perception" min="0" value="0" />
|
|
<input type="hidden" name="attr_performance" min="0" value="0" />
|
|
<input type="hidden" name="attr_pilotaerospace" min="0" value="0" />
|
|
<input type="hidden" name="attr_pilotaircraft" min="0" value="0" />
|
|
<input type="hidden" name="attr_pilotexoticvehicle" min="0" value="0" />
|
|
<input type="hidden" name="attr_pilotgroundcraft" min="0" value="0" />
|
|
<input type="hidden" name="attr_pilotwalker" min="0" value="0" />
|
|
<input type="hidden" name="attr_pilotwatercraft" min="0" value="0" />
|
|
<input type="hidden" name="attr_pistols" min="0" value="0" />
|
|
<input type="hidden" name="attr_registering" min="0" value="0" />
|
|
<input type="hidden" name="attr_ritualspellcasting" min="0" value="0" />
|
|
<input type="hidden" name="attr_running" min="0" value="0" />
|
|
<input type="hidden" name="attr_sneaking" min="0" value="0" />
|
|
<input type="hidden" name="attr_software" min="0" value="0" />
|
|
<input type="hidden" name="attr_sorcery" min="0" value="0" />
|
|
<input type="hidden" name="attr_spellcasting" min="0" value="0" />
|
|
<input type="hidden" name="attr_stealth" min="0" value="0" />
|
|
<input type="hidden" name="attr_summoning" min="0" value="0" />
|
|
<input type="hidden" name="attr_survival" min="0" value="0" />
|
|
<input type="hidden" name="attr_swimming" min="0" value="0" />
|
|
<input type="hidden" name="attr_tasking" min="0" value="0" />
|
|
<input type="hidden" name="attr_throwingweapons" min="0" value="0" />
|
|
<input type="hidden" name="attr_tracking" min="0" value="0" />
|
|
<input type="hidden" name="attr_unarmedcombat" min="0" value="0" />
|
|
<script type="text/worker">
|
|
const physicalAttributes = ['body', 'agility', 'reaction', 'strength']
|
|
const mentalAttributes = ['willpower', 'logic', 'intuition', 'charisma']
|
|
const specialAttributes = ['magic', 'resonance']
|
|
const sheetAttributes = {
|
|
attributes: [...physicalAttributes, ...mentalAttributes, 'edge'],
|
|
translationsAttributes: ['attribute', 'body', 'agility', 'reaction', 'strength', 'willpower', 'logic', 'intuition', 'charisma', 'edge', 'none'],
|
|
repeating: ['quality', 'martial', 'items', 'range', 'melee', 'armor', 'spell', 'preps', 'ritual', 'powers', 'forms', 'vehicle', 'augementations', 'lifestyle', 'contacts', 'programs'],
|
|
repeatingSkills: ['active', 'knowledge', 'language'],
|
|
tabs: [`core`, `arms`, `augs`, `gear`, `magic`, `matrix`, `social`, `vehicle`, `options`],
|
|
woundCalculation: ['high_pain_tolerance', 'low_pain_tolerance', 'damage_compensators_physical', 'damage_compensators_stun', 'stun', 'physical'],
|
|
|
|
attributeLimits: ['mental_limit', 'physical_limit', 'social_limit'],
|
|
mental_limit: ['intuition', 'willpower', 'logic'],
|
|
physical_limit: ['body', 'reaction', 'strength'],
|
|
social_limit: ['essence', 'willpower', 'charisma'],
|
|
|
|
calculatedAttributes: ['body', 'agility', 'reaction', 'strength', 'willpower', 'logic', 'intuition','charisma','magic', 'resonance', 'attack', 'sleaze', 'data_processing', 'firewall'],
|
|
|
|
initiative_mod: ['reaction', 'intuition', 'initiative_mod_modifier', 'initiative_mod_temp', 'initiative_mod_temp_flag'],
|
|
astral_mod: ['intuition', 'astral_mod_modifier'],
|
|
matrix_mod: [],
|
|
|
|
derivedAttributes: ['memory', 'composure', 'defense', 'soak', 'overflow', 'judge_intentions', 'lift_carry'],
|
|
lift_carry: ['body', 'strength', 'lift_carry_modifier'],
|
|
overflow: ['body', 'overflow_modifier'],
|
|
soak: ['body', 'armor_rating', 'soak_modifier', 'soak_temp', `soak_temp_flag`],
|
|
defense: ['reaction', 'intuition', 'defense_modifier', 'defense_temp', `defense_temp_flag`],
|
|
judge_intentions: ['charisma', 'intuition', 'judge_intentions_modifier'],
|
|
composure: ['charisma', 'willpower', 'composure_modifier'],
|
|
memory: ['logic', 'willpower', 'memory_modifier'],
|
|
|
|
conditionTracks: ['stun', 'physical', 'matrix'],
|
|
physical: ['physical_modifier', 'body', 'sheet_type', 'flag_drone'],
|
|
stun: ['stun_modifier', 'willpower'],
|
|
matrix: ['matrix_modifier', 'device_rating'],
|
|
|
|
stunCharacters: ['grunt', 'pc'],
|
|
physicalCharacters: ['grunt', 'pc', 'vehicle'],
|
|
matrixCharacters: ['vehicle', 'host', 'sprite'],
|
|
matrixAttributes: ['attack', 'sleaze', 'data_processing', 'firewall'],
|
|
|
|
weaponTypes: ['range', 'melee'],
|
|
rangeAttributes: ['dicepool', 'weapon', 'damage', 'acc', 'ap', 'skill', 'ammo', 'mode', 'recoil'],
|
|
meleeAttributes: ['dicepool', 'weapon', 'damage', 'acc', 'ap', 'skill', 'reach'],
|
|
|
|
spellTypes: ['spell', 'preps', 'ritual', 'forms'],
|
|
|
|
armorAttributes: ['name', 'rating', 'acid_modifier', 'electrical_modifier', 'cold_modifier', 'fire_modifier', 'radiation_modifier', 'dicepool_modifier'],
|
|
armorSoak: ['dicepool_modifier', 'rating'],
|
|
armorProtections: ['acid', 'electrical', 'cold', 'fire', 'radiation']
|
|
}
|
|
|
|
|
|
const processingFunctions = {
|
|
convertIntegerNegative: number => number > 0 ? -Math.abs(number) : number,
|
|
convertIntegersNegatives: numbers => {
|
|
for (let [key, value] of Object.entries(numbers)) {
|
|
numbers[key] = processingFunctions.convertIntegerNegative(value);
|
|
}
|
|
return numbers
|
|
},
|
|
findRepeatingField: trigger => trigger.split('_')[1],
|
|
getReprowid: trigger => {
|
|
const split = trigger.split('_');
|
|
return `${split[0]}_${split[1]}_${split[2]}`
|
|
},
|
|
getReprowAttribute: key => {
|
|
const getReprowid = processingFunctions.getReprowid(key)
|
|
return key.split(`${getReprowid}_`)[1]
|
|
},
|
|
getTranslations: translationKeys => {
|
|
let translations = {}
|
|
translationKeys.forEach(key => translations[`${key}`] = getTranslationByKey(key))
|
|
return translations
|
|
},
|
|
parseInteger: string => parseInt(string) || 0,
|
|
parseIntegers: numbers => {
|
|
for (let [key, value] of Object.entries(numbers)) {
|
|
numbers[key] = parseInt(value) || 0;
|
|
}
|
|
return numbers
|
|
},
|
|
setAttributes: (update, silent) => silent && typeof update === 'object' ? setAttrs(update, {silent:true}) : typeof update === 'object' ? setAttrs(update) : console.error(`${update} is not an object`),
|
|
sliceAttr: attribute => attribute.slice(2, -1),
|
|
sumIntegers: numbers => numbers.reduce((a,b) => a + b, 0),
|
|
}
|
|
|
|
const shadowrunFunctions = {
|
|
addRepRow: (repRowID, attributeList) => {
|
|
let weaponAttributeWithRepeatingRow = []
|
|
attributeList.forEach(weaponAttribute => weaponAttributeWithRepeatingRow.push(`${repRowID}_${weaponAttribute}`))
|
|
return weaponAttributeWithRepeatingRow
|
|
},
|
|
|
|
attributeFactory: attrs => {
|
|
attrs = shadowrunFunctions.findFlagInKeys(attrs) ? shadowrunFunctions.processTempFlags(attrs) : attrs
|
|
attrs = processingFunctions.parseIntegers(attrs)
|
|
attrs = shadowrunFunctions.calculateBonuses(attrs)
|
|
attrs.total = processingFunctions.sumIntegers(Object.values(attrs))
|
|
attrs.base = attrs.total - attrs.bonus
|
|
return attrs
|
|
},
|
|
conditionFactory: attrs => {
|
|
attrs.attribute = shadowrunFunctions.determineConditionAttribute(attrs)
|
|
attrs.base = shadowrunFunctions.determineConditionBase(attrs.sheet_type, attrs.flag_drone)
|
|
attrs.modifier = attrs[shadowrunFunctions.findModifierInKeys(attrs)]
|
|
Object.keys(attrs).forEach(key => !['attribute', 'base', 'modifier'].includes(key) ? delete attrs[key] : false)
|
|
attrs = processingFunctions.parseIntegers(attrs)
|
|
return attrs
|
|
},
|
|
|
|
contructRepeatingWeaponAttributes: (repRowID, type) => {
|
|
const attributeList = shadowrunFunctions.determineWeaponAttributesByType(type)
|
|
const constructedWeaponAttributes = shadowrunFunctions.addRepRow(repRowID, attributeList)
|
|
return constructedWeaponAttributes
|
|
},
|
|
|
|
buildDisplay: (base, bonus) => bonus === 0 ? base : `${base} (${base + bonus})`,
|
|
|
|
calculateBonuses: attrs => {
|
|
attrs.bonus = 0
|
|
for (let [key, value] of Object.entries(attrs)) {
|
|
if (key.includes('modifier') || key.includes('temp')) {
|
|
attrs.bonus += value
|
|
delete attrs[key]
|
|
}
|
|
}
|
|
return attrs
|
|
},
|
|
calculateConditionTracks: conditionInts => Math.ceil(conditionInts.attribute/2) + conditionInts.base + conditionInts.modifier,
|
|
calculateLimitTotal: attrs => Math.ceil((attrs[0] + attrs[1] + (attrs[2] * 2))/3),
|
|
calculateRunSpeed: (agility, modifier) => (agility * 4) + modifier,
|
|
calculateWalkSpeed:(agility, modifier) => (agility * 2) + modifier,
|
|
calculateWounds: attrs => {
|
|
const divisor = attrs.low_pain_tolerance === 2 ? attrs.low_pain_tolerance : 3;
|
|
const highPain = attrs.high_pain_tolerance >= 1 ? attrs.high_pain_tolerance : 0;
|
|
let sum = 0;
|
|
|
|
["stun", "physical"].forEach(attr => {
|
|
const damageCompensator = attrs[`damage_compensators_${attr}`] || 0
|
|
let dividend = Math.max(attrs[`${attr}`] - (highPain + damageCompensator), 0)
|
|
sum -= Math.floor(dividend / divisor) || 0
|
|
})
|
|
return sum
|
|
},
|
|
|
|
convertSkillSelectToHiddenSkill: skillName => {
|
|
let skill = skillName.toLowerCase()
|
|
skill = skill.includes('group') ? skill.slice(0, -6) : skill
|
|
skill = skill.includes(" ") ? skill.replace(/ /g,"") : skill
|
|
return skill
|
|
},
|
|
|
|
determineConditionBase: (type, drone) => drone && drone === 'drone' ? 6 : type === 'vehicle' ? 12 : 8,
|
|
determineConditionAttribute: attrs => attrs.willpower ? attrs.willpower : attrs.body ? attrs.body : attrs.device_rating ? attrs.device_rating : 0,
|
|
determineExplodingEdge: newValue => newValue === `@{edge}` ? "!" : "",
|
|
determineWeaponAttributesByType: weaponType => weaponType === 'range' ? sheetAttributes.rangeAttributes : sheetAttributes.meleeAttributes,
|
|
|
|
findFlagInKeys: attrs => Object.keys(attrs).find(key => key.includes('_flag')),
|
|
findModifierInKeys: attrs => Object.keys(attrs).find(key => key.includes('_modifier')),
|
|
|
|
processTempFlags: attrs => {
|
|
try {
|
|
const tempFlag = shadowrunFunctions.findFlagInKeys(attrs)
|
|
const attrName = tempFlag.split('_temp_flag')[0]
|
|
attrs[`${tempFlag}`] === 'on' ? false : delete attrs[`${attrName}_temp`];
|
|
delete attrs[`${tempFlag}`];
|
|
return attrs
|
|
} catch (error) {
|
|
console.error(error)
|
|
}
|
|
},
|
|
|
|
resetRepeatingFieldsPrimaries: (repeatingSection, repRowID) => {
|
|
getSectionIDs(repeatingSection, ids => {
|
|
let attributesWithIDs = [];
|
|
let update = {};
|
|
ids.forEach(id => attributesWithIDs.push(`${repeatingSection}_${id}_primary`))
|
|
attributesWithIDs.forEach(attribute => !attribute.includes(repRowID) ? update[attribute] = 0 : false)
|
|
setAttrs(update);
|
|
})
|
|
},
|
|
|
|
shotsFired: (shots, trigger) => shots > 0 && trigger.includes('remove') ? shots -= 1 : trigger.includes('add') ? shots += 1 : shots,
|
|
|
|
//Reset will remove data in Primary entries on Core tab
|
|
resetPrimaryArmor: () => {
|
|
const resetPrimary = new PrimaryArmor()
|
|
let update = {}
|
|
for (let [key, value] of Object.entries(resetPrimary)) {
|
|
update[key] = value
|
|
}
|
|
return update
|
|
},
|
|
resetPrimaryWeapon: type => {
|
|
const resetPrimary = type === 'range' ? new PrimaryRangeWeapon(type) : new PrimaryMeleeWeapon(type)
|
|
let update = {}
|
|
for (let [key, value] of Object.entries(resetPrimary)) {
|
|
update[key] = value
|
|
}
|
|
return update
|
|
},
|
|
|
|
updateLimitTotal: attrs => {
|
|
attrs.essence ? Math.ceil(attrs.essence) || 0 : false;
|
|
return shadowrunFunctions.calculateLimitTotal(Object.values(attrs))
|
|
},
|
|
|
|
//Update Functions take data from one place and applies it to other attributes
|
|
updatePrimaryArmor: attrs => {
|
|
let update = {}
|
|
|
|
for (let [key, value] of Object.entries(attrs)) {
|
|
const repRowID = processingFunctions.getReprowid(key)
|
|
if (key.includes('name')) {
|
|
update['armor_name'] = attrs[`${repRowID}_name`]
|
|
} else if (key.includes('rating')) {
|
|
update['armor_rating'] = value
|
|
} else if (key.includes('dicepool_modifier')) {
|
|
update['soak_modifier'] = value
|
|
} else {
|
|
const type = key.split('_')[3]
|
|
update[`${type}_modifier`] = value
|
|
}
|
|
}
|
|
|
|
return update
|
|
},
|
|
updatePrimaryWeapons: attrs => {
|
|
let update = {}
|
|
for (let [key, value] of Object.entries(attrs)) {
|
|
const type = processingFunctions.findRepeatingField(key)
|
|
const weaponAttribute = processingFunctions.getReprowAttribute(key)
|
|
const primaryAttributeName = key.includes('weapon') ? `primary_${type}_weapon` : `primary_${type}_weapon_${weaponAttribute}`
|
|
update[primaryAttributeName] = value
|
|
|
|
if (key.includes('ammo')) {
|
|
update[`${primaryAttributeName}_max`] = value
|
|
}
|
|
}
|
|
return update
|
|
},
|
|
determineMatrixDice: attrs => {
|
|
const diceCheck = dice => dice >= 5 ? 5 : dice <= 1 ? 1 : dice;
|
|
|
|
if (attrs.edge) {
|
|
return 5
|
|
} else if (attrs.mode === 'cold') {
|
|
return diceCheck(3 + attrs.modifer)
|
|
} else {
|
|
//Hot Sims is the default
|
|
return diceCheck(4 + attrs.modifer)
|
|
}
|
|
}
|
|
}
|
|
|
|
//Edge toggle to include ! for exploding dice
|
|
const edgeToggle = newValue => {
|
|
processingFunctions.setAttributes({
|
|
explode_toggle: shadowrunFunctions.determineExplodingEdge(newValue)
|
|
})
|
|
}
|
|
|
|
const updateHostAttributes = newValue => {
|
|
newValue = processingFunctions.parseInteger(newValue)
|
|
processingFunctions.setAttributes({
|
|
matrix_max: 8 + Math.ceil(newValue/2),
|
|
ic_attack: Math.min(newValue + newValue)
|
|
})
|
|
}
|
|
|
|
const updateSpriteConditionTrack = newValue => {
|
|
newValue = processingFunctions.parseInteger(newValue)
|
|
processingFunctions.setAttributes({
|
|
matrix_max: 8 + Math.ceil(newValue/2)
|
|
})
|
|
}
|
|
|
|
//ALSO COVER COMPLEX FORMS
|
|
const updateSpellsDicepool = eventinfo => {
|
|
const repRowID = processingFunctions.getReprowid(eventinfo.triggerName)
|
|
getAttrs([`${repRowID}_specialization`, `${repRowID}_dicepool_modifier`], attrs => {
|
|
attrs = processingFunctions.parseIntegers(attrs)
|
|
processingFunctions.setAttributes({
|
|
[`${repRowID}_dicepool`]: processingFunctions.sumIntegers(Object.values(attrs))
|
|
})
|
|
})
|
|
}
|
|
|
|
const resetNpcCondition = () => setAttributes({physical: 0, stun: 0, matrix: 0})
|
|
|
|
const updatePrimary = eventinfo => {
|
|
const repRowID = processingFunctions.getReprowid(eventinfo.triggerName)
|
|
getAttrs([`${repRowID}_primary`], attrs => {
|
|
if (attrs[`${repRowID}_primary`] === 'primary') {
|
|
let update = {}
|
|
|
|
if (repRowID.includes('armor')) {
|
|
update = shadowrunFunctions.updatePrimaryArmor({[eventinfo.triggerName]: eventinfo.newValue})
|
|
} else {
|
|
update = shadowrunFunctions.updatePrimaryWeapons({[eventinfo.triggerName]: eventinfo.newValue})
|
|
}
|
|
processingFunctions.setAttributes(update)
|
|
}
|
|
})
|
|
}
|
|
|
|
const updateRepeatingPrimary = (eventinfo, type) => {
|
|
const repRowID = processingFunctions.getReprowid(eventinfo.triggerName)
|
|
if (eventinfo.newValue === undefined) {
|
|
return false
|
|
} else if (eventinfo.newValue === 'primary') {
|
|
const constructedAttributes = type === 'armor' ? shadowrunFunctions.addRepRow(repRowID, sheetAttributes.armorAttributes) : shadowrunFunctions.contructRepeatingWeaponAttributes(repRowID, type);
|
|
|
|
//get the attributes to update primary
|
|
getAttrs(constructedAttributes, attrs => {
|
|
const update = type === 'armor' ? shadowrunFunctions.updatePrimaryArmor(attrs) : shadowrunFunctions.updatePrimaryWeapons(attrs);
|
|
processingFunctions.setAttributes(update)
|
|
})
|
|
|
|
//Reset all the other primaries
|
|
shadowrunFunctions.resetRepeatingFieldsPrimaries(`repeating_${type}`, repRowID)
|
|
} else {
|
|
const update = type === 'armor' ? shadowrunFunctions.resetPrimaryArmor() : shadowrunFunctions.resetPrimaryWeapon(type);
|
|
processingFunctions.setAttributes(update)
|
|
}
|
|
}
|
|
|
|
const updateRepeatingWeaponDicepool = trigger => {
|
|
const repRowID = processingFunctions.getReprowid(trigger)
|
|
getAttrs([`${repRowID}_dicepool_modifier`, `${repRowID}_specialization`], attrs => {
|
|
attrs = processingFunctions.parseIntegers(attrs)
|
|
processingFunctions.setAttributes({
|
|
[`${repRowID}_dicepool`]: processingFunctions.sumIntegers(Object.values(attrs))
|
|
})
|
|
})
|
|
}
|
|
|
|
const updateRepeatingSkillDicepool = eventinfo => {
|
|
const repRowID = processingFunctions.getReprowid(eventinfo.triggerName)
|
|
getAttrs([`${repRowID}_skill`], attrs => {
|
|
let skill = shadowrunFunctions.convertSkillSelectToHiddenSkill(attrs[`${repRowID}_skill`])
|
|
processingFunctions.setAttributes({
|
|
[`${skill}`]: eventinfo.newValue
|
|
})
|
|
})
|
|
}
|
|
|
|
const updateRepeatingSkillLimit = eventinfo => {
|
|
const repRowID = processingFunctions.getReprowid(eventinfo.triggerName)
|
|
if (eventinfo.newValue === "none") {
|
|
processingFunctions.setAttributes({[`${repRowID}_display_limit`]: ' '})
|
|
} else if (eventinfo.newValue != undefined) {
|
|
const translationKey = processingFunctions.sliceAttr(eventinfo.newValue)
|
|
const translation = getTranslationByKey(translationKey);
|
|
processingFunctions.setAttributes({
|
|
[`${repRowID}_display_limit`]: translation
|
|
})
|
|
}
|
|
}
|
|
|
|
const updateRepeatingSkillName = eventinfo => {
|
|
const repRowID = processingFunctions.getReprowid(eventinfo.triggerName)
|
|
const translationKey = eventinfo.newValue.replace(/ /g, '').toLowerCase()
|
|
const translation = getTranslationByKey(translationKey);
|
|
processingFunctions.setAttributes({
|
|
[`${repRowID}_display_skill`]: translation
|
|
})
|
|
}
|
|
|
|
const updateRepeatingSkillAttribute = eventinfo => {
|
|
const repRowID = processingFunctions.getReprowid(eventinfo.triggerName)
|
|
const translationKey = processingFunctions.sliceAttr(eventinfo.newValue)
|
|
const translation = getTranslationByKey(translationKey);
|
|
processingFunctions.setAttributes({
|
|
[`${repRowID}_display_attribute`]: translation
|
|
})
|
|
}
|
|
|
|
const updateRepeatingSkillRating = trigger => {
|
|
const repRowID = processingFunctions.getReprowid(trigger)
|
|
getAttrs([`${repRowID}_rating`, `${repRowID}_rating_modifier`], attrs => {
|
|
attrs = shadowrunFunctions.attributeFactory(attrs)
|
|
processingFunctions.setAttributes({
|
|
[`${repRowID}_dicepool`]: attrs.total,
|
|
[`${repRowID}_display_rating`]: shadowrunFunctions.buildDisplay(attrs.base, attrs.bonus)
|
|
})
|
|
})
|
|
}
|
|
|
|
const updateWounds = () => {
|
|
getAttrs(sheetAttributes.woundCalculation, attrs => {
|
|
attrs = processingFunctions.parseIntegers(attrs)
|
|
const sum = shadowrunFunctions.calculateWounds(attrs)
|
|
processingFunctions.setAttributes({wounds: sum})
|
|
})
|
|
}
|
|
|
|
const updateConditionTracks= conditionTrack => {
|
|
getAttrs(sheetAttributes[conditionTrack], attrs => {
|
|
attrs = shadowrunFunctions.conditionFactory(attrs)
|
|
const conditionTotal = shadowrunFunctions.calculateConditionTracks(attrs)
|
|
processingFunctions.setAttributes({[`${conditionTrack}_max`]: conditionTotal}, true)
|
|
})
|
|
}
|
|
|
|
const translations = () => {
|
|
const attributes = sheetAttributes.translationsAttributes
|
|
const translations = processingFunctions.getTranslations(attributes)
|
|
let attribute_roll = `?{${translations.attribute}`
|
|
delete translations.attribute
|
|
for (let [key, value] of Object.entries(translations)) {
|
|
attribute_roll += key !== 'none' ? `|${value},@{${key}}` : `|${value},0}`
|
|
}
|
|
processingFunctions.setAttributes({attribute_roll: attribute_roll})
|
|
}
|
|
|
|
const updateShotsFired = trigger => {
|
|
getAttrs([`shots_fired`], attrs => {
|
|
attrs = processingFunctions.parseIntegers(attrs)
|
|
const shots = shadowrunFunctions.shotsFired(attrs.shots_fired, trigger)
|
|
processingFunctions.setAttributes({shots_fired: shots})
|
|
});
|
|
}
|
|
|
|
const updateAmmoWithShotsFired = () => {
|
|
getAttrs([`primary_range_weapon_ammo`, `shots_fired`], attrs => {
|
|
attrs = processingFunctions.parseIntegers(attrs)
|
|
attrs.shots_fired = processingFunctions.convertIntegerNegative(attrs.shots_fired)
|
|
processingFunctions.setAttributes({primary_range_weapon_ammo: processingFunctions.sumIntegers(Object.values(attrs))})
|
|
});
|
|
}
|
|
|
|
const updateAmmoWithMax = () => {
|
|
getAttrs([`primary_range_weapon_ammo_max`], attrs => {
|
|
attrs = processingFunctions.parseIntegers(attrs)
|
|
processingFunctions.setAttributes({primary_range_weapon_ammo: attrs.primary_range_weapon_ammo_max})
|
|
});
|
|
}
|
|
|
|
const updateTab = attr => processingFunctions.setAttributes({tab: attr})
|
|
|
|
const updateAttributes = (array, attribute) => {
|
|
getAttrs(array, attrs => {
|
|
attrs = shadowrunFunctions.attributeFactory(attrs)
|
|
processingFunctions.setAttributes({
|
|
[attribute]: attrs.total,
|
|
[`display_${attribute}`]: attrs.base === attrs.total ? attrs.base : `${attrs.base} (${attrs.total})`
|
|
})
|
|
})
|
|
}
|
|
|
|
const updateLimitTotal = attrs => {
|
|
attrs.essence ? Math.ceil(attrs.essence) || 0 : false;
|
|
return shadowrunFunctions.calculateLimitTotal(Object.values(attrs))
|
|
}
|
|
|
|
const updateLimits = attributeLimit => {
|
|
const array = sheetAttributes[attributeLimit].concat([`${attributeLimit}_modifier`, `${attributeLimit}_temp`, `${attributeLimit}_temp_flag`])
|
|
getAttrs(array, attrs => {
|
|
attrs = shadowrunFunctions.attributeFactory(attrs)
|
|
const bonus = attrs.bonus
|
|
delete attrs.bonus
|
|
const base = shadowrunFunctions.updateLimitTotal(attrs)
|
|
processingFunctions.setAttributes({
|
|
[attributeLimit]: processingFunctions.sumIntegers([base, bonus])
|
|
})
|
|
})
|
|
}
|
|
|
|
const updateMovement = () => {
|
|
getAttrs(['agility', 'walk_modifier', 'run_modifier'], attrs => {
|
|
attrs = processingFunctions.parseIntegers(attrs)
|
|
processingFunctions.setAttributes({
|
|
walk: shadowrunFunctions.calculateWalkSpeed(attrs.agility, attrs.walk_modifier),
|
|
run: shadowrunFunctions.calculateRunSpeed(attrs.agility, attrs.run_modifier)
|
|
})
|
|
})
|
|
}
|
|
|
|
const updateDerivedAttribute = derivedAttribute => {
|
|
getAttrs(sheetAttributes[derivedAttribute], attrs => {
|
|
attrs = shadowrunFunctions.attributeFactory(attrs)
|
|
processingFunctions.setAttributes({[derivedAttribute]: attrs.total})
|
|
})
|
|
}
|
|
|
|
const updateInitiativeDice = () => {
|
|
getAttrs(["initiative_dice_modifier", "edge_toggle", "initiative_dice_temp", "initiative_dice_temp_flag"], values => {
|
|
const edgeFlag = values.edge_toggle === "@{edge}" ? true : false;
|
|
values = shadowrunFunctions.processTempFlags(values)
|
|
values = processingFunctions.parseIntegers(values)
|
|
const bonus = shadowrunFunctions.calculateBonuses(values)
|
|
const total = Math.min(values.bonus+1,5)
|
|
processingFunctions.setAttributes({
|
|
initiative_dice: edgeFlag ? 5 : total
|
|
})
|
|
})
|
|
}
|
|
|
|
|
|
//- +======== EVERYTHING BELOW THIS LINE LACKS UNIT TESTS =======+
|
|
//- +======== NEEDS REFACTORING =======+
|
|
|
|
const resetConditionTrack = eventinfo => {
|
|
const attr = eventinfo.triggerName.split("_").pop();
|
|
processingFunctions.setAttributes({[`${attr}`] : 0})
|
|
}
|
|
|
|
//Calculate Matrix Initiatve.
|
|
const updateMatrixInitiative = () => {
|
|
getAttrs(["sheet_type", "data_processing", "pilot", "intuition", "matrix_mod_modifier", "host_rating", "level"], v => {
|
|
const sheetType = v.sheet_type;
|
|
v = processingFunctions.parseIntegers(v);
|
|
|
|
let base = v.data_processing;
|
|
base += sheetType === "sprite" ? v.level : sheetType === "vehicle" ? v.pilot : sheetType === "host" ? v.host_rating : v.intuition;
|
|
|
|
const total = base + v.matrix_mod_modifier;
|
|
|
|
setAttrs({
|
|
["matrix_mod"]: total,
|
|
["display_matrix_mod"]: v.matrix_mod_modifier === 0 ? base : `${base} (${total})`
|
|
})
|
|
})
|
|
}
|
|
|
|
const updateMatrixInitiativeDice = () => {
|
|
getAttrs(["matrix_dice_modifier", "edge_toggle", "matrix_mode_toggle", "initiative_dice"], v => {
|
|
const matrixAttrs = {
|
|
dice: processingFunctions.parseInteger(v.initiative_dice) || 1,
|
|
modifer: processingFunctions.parseInteger(v.matrix_dice_modifier),
|
|
edge: v.edge_toggle === "@{edge}" ? true : false,
|
|
mode: v.matrix_mode_toggle,
|
|
}
|
|
const matrixDice = shadowrunFunctions.determineMatrixDice(matrixAttrs)
|
|
|
|
setAttrs({
|
|
["matrix_dice"]: matrixDice
|
|
})
|
|
})
|
|
}
|
|
|
|
const updateHotSimsBonus = () => {
|
|
getAttrs(["matrix_mode_toggle"], v => {
|
|
setAttrs({
|
|
["hot_sim"]: v.matrix_mode_toggle == "hot" ? 2 : 0
|
|
})
|
|
})
|
|
}
|
|
|
|
//Setting the Default attribute name for default skill
|
|
const updateDefaultAttribute = newValue => {
|
|
getAttrs(["default_display"], value => {
|
|
const display = value.default_display
|
|
|
|
//This sets a hidden input with the Attribute name so the roll template can use it to indicate what attribute was rolled
|
|
const attribute = processingFunctions.sliceAttr(newValue)
|
|
const translation = getTranslationByKey(`${attribute}`)
|
|
if (translation != display) {
|
|
processingFunctions.setAttributes({default_display: translation})
|
|
}
|
|
})
|
|
}
|
|
|
|
//Calculate Astral Initiatve
|
|
const updateAstralInitiative = () => {
|
|
getAttrs(["intuition", "astral_mod_modifier"], v => {
|
|
v = processingFunctions.parseIntegers(v);
|
|
const base = v.intuition * 2, bonus = v.astral_mod_modifier, total = base + bonus;
|
|
|
|
setAttrs({
|
|
["astral_mod"]: total,
|
|
["display_astral_mod"]: bonus === 0 ? base : `${base} (${total})`
|
|
})
|
|
})
|
|
}
|
|
|
|
const updateAstralInitiativeDice = () => {
|
|
getAttrs(["astral_dice_modifier", "edge_toggle"], v => {
|
|
const edgeFlag = v.edge_toggle === "@{edge}" ? true : false;
|
|
const bonus = parseInt(v.astral_dice_modifier) || 0;
|
|
|
|
setAttrs({
|
|
astral_dice: edgeFlag ? 5 : Math.min(bonus+3,5)
|
|
})
|
|
})
|
|
}
|
|
|
|
|
|
|
|
//Weapon displays set into an Array
|
|
// Builder function to display details properly
|
|
// Note that since undefined are falsey if there's no label or sign we can leave the parameters blank
|
|
function repeatingStringBuilder(v, keyBase) {
|
|
return function(key, label, sign) {
|
|
// fetch the attr from v checking if it has a value
|
|
const val = v[`${keyBase}${key}`];
|
|
if (!val) return '';
|
|
|
|
// Apply the sign if needed
|
|
const disp = sign && val > 0 ? `+${val}` : val;
|
|
|
|
// Apply label if needed
|
|
return label ? `${label} ${disp}` : disp;
|
|
}
|
|
}
|
|
|
|
on("change:repeating_weapon", () => {
|
|
const source = "repeating_weapon_weapon";
|
|
getAttrs([`${source}_range`, `${source}_type`, `${source}_reach`, `${source}_acc`, `${source}_dv`, `${source}_ap`, `${source}_mode`, `${source}_rc`, `${source}_ammo`, `${source}_note`, `${source}_primary`], (v) => {
|
|
// Local builder putting the needed variables into scope for repeatingStringBuilder
|
|
const b = repeatingStringBuilder(v, `${source}_`);
|
|
// Determine fields to display and in their proper order and formatting
|
|
// Anonymous function is purely stylistic and adds more overhead than just a simple switch/case. Personally I find the function looks cleaner and hides any internal scope that might conflict with outside
|
|
const display = (() => {
|
|
// 0 for weapon_range is a ranged weapon. A 1 is a melee weapon.
|
|
switch(v.repeating_weapon_weapon_range) {
|
|
case '0':
|
|
// Not a fan of how ammo has to be handled. Could potentially be placed in the repeatingStringBuilder if used more often for other change:repeating functions as some sort of suffix parameter
|
|
const ammo = b('amm');
|
|
return [
|
|
b('type'),
|
|
b('acc', 'ACC'),
|
|
b('dv', 'DV'),
|
|
b('ap', 'AP', true),
|
|
b('mode'),
|
|
b('rc', 'RC'),
|
|
ammo ? `${ammo} (c)` : '',
|
|
b('note')
|
|
];
|
|
case '1': return [
|
|
b('type'),
|
|
b('reach', 'Reach', true),
|
|
b('acc', 'ACC'),
|
|
b('dv', 'DV'),
|
|
b('ap', 'AP', true),
|
|
b('note')
|
|
];
|
|
default: return [
|
|
b('type'),
|
|
b('acc', 'ACC'),
|
|
b('dv', 'DV'),
|
|
b('ap', 'AP', true),
|
|
b('note')
|
|
];
|
|
}
|
|
})()
|
|
// Remove all empty strings
|
|
.filter(s => s)
|
|
// Concat all the strings and add comma between
|
|
.join(', ');
|
|
|
|
let update = {};
|
|
update[`${source}`] = `[${display}]`;
|
|
|
|
// Finally wrap square brackets around the weapon display
|
|
setAttrs(update);
|
|
});
|
|
});
|
|
|
|
|
|
//Spell displays set into an Array
|
|
on("change:repeating_NPCspell", () => {
|
|
getAttrs(["repeating_NPCspell_combat_type", "repeating_NPCspell_type", "repeating_NPCspell_range", "repeating_NPCspell_damage", "repeating_NPCspell_duration", "repeating_NPCspell_drain", "repeating_NPCspell_note"], (v) =>{
|
|
const com = v.repeating_NPCspell_combat_type;
|
|
const typ = `Type ${v.repeating_NPCspell_type}, `;
|
|
const ran = `${v.repeating_NPCspell_range}, `;
|
|
const dam = `Damage ${v.repeating_NPCspell_damage}, `;
|
|
const dur = `Duration ${v.repeating_NPCspell_duration}, `;
|
|
const not = `, ${v.repeating_NPCspell_note}`;
|
|
const dra = v.repeating_NPCspell_drain;
|
|
|
|
const drain = (dra > 0) ? `F+${dra} ` : (dra < 0) ? `F${dra} ` :"F ";
|
|
const info = `[${typ}${ran}${dam}${dur}${drain}${not}]`;
|
|
|
|
display = (com === "Direct, Force ") ? ` (Direct) ${info}` :
|
|
(com === "Indirect, Force ?{Force|}, AP -") ? ` (Indirect) ${info}` : `${info}`;
|
|
setAttrs({repeating_NPCspell_spell: display});
|
|
});
|
|
});
|
|
|
|
//Complex Form displays set into an Array
|
|
on("change:repeating_form", () => {
|
|
getAttrs(["repeating_form_form_duration", "repeating_form_form_target", "repeating_form_form_fade", "repeating_form_form_note", ], (v) =>{
|
|
const tar = `Target ${v.repeating_form_form_target}, `;
|
|
const dur = `Duration ${v.repeating_form_form_duration}, `;
|
|
const not = `, ${v.repeating_form_form_note}` || '';
|
|
const fad = (v.repeating_form_form_fade > 0) ? `L+${v.repeating_form_form_fade}` :
|
|
(v.repeating_form_form_fade < 0) ? `L${v.repeating_form_form_fade}` : "L";
|
|
|
|
setAttrs({
|
|
repeating_form_form: ` [${tar}${dur}${fad}${not}]`
|
|
});
|
|
});
|
|
});
|
|
|
|
//IC displays are set into an Array
|
|
on("change:repeating_IC", () => {
|
|
getAttrs(["attack", "data_processing", "repeating_IC_IC_limit", "repeating_IC_IC_attribute", "repeating_IC_IC_matrix", "repeating_IC_IC_note"], (v) =>{
|
|
const att = parseInt(v.attack) || 0;
|
|
const data = parseInt(v.data_processing) || 0;
|
|
const attr = v.repeating_IC_IC_attribute;
|
|
const mat = v.repeating_IC_IC_matrix;
|
|
const not = v.repeating_IC_IC_note;
|
|
|
|
setAttrs({
|
|
repeating_IC_IC: (v.repeating_IC_IC_limit === "@{data_processing}") ? ` ([${data}] vs. ${attr} + ${mat}, ${not})` : `([${att}] vs. ${attr} + ${mat}, ${not})`
|
|
});
|
|
});
|
|
});
|
|
|
|
['acceleration', 'armor', 'body', 'data_processing', 'handling', 'handling_off', 'pilot', 'sensor','speed'].forEach(attr => {
|
|
// Attach listener
|
|
on(`change:repeating_vehicle:${attr}_base change:repeating_vehicle:${attr}_modifier change:repeating_vehicle:${attr}_temp`, () => {
|
|
// Load attribute values
|
|
getAttrs([`repeating_vehicle_${attr}_base`, `repeating_vehicle_${attr}_modifier`, `repeating_vehicle_${attr}_temp`], (v) => {
|
|
// Do some math to calculate the total
|
|
const bas = parseInt(v[`repeating_vehicle_${attr}_base`]) || 0;
|
|
const mod = parseInt(v[`repeating_vehicle_${attr}_modifier`]) || 0;
|
|
const tem = parseInt(v[`repeating_vehicle_${attr}_temp`]) || 0;
|
|
const bon = mod + tem;
|
|
const stat = bas + bon;
|
|
|
|
// Update the finalized total
|
|
setAttrs({
|
|
[attr]: stat,
|
|
[`repeating_vehicle_display_${attr}`]: bon === 0 ? bas : `${bas} (${stat})`
|
|
}, {silent: true});
|
|
});
|
|
});
|
|
});
|
|
const versioning = version => {
|
|
console.log(`%c Shadowrun 5th Edition versioning, ${version}`, "color: darkblue; font-weight:bold");
|
|
|
|
switch(true) {
|
|
case version < 1.35:
|
|
onepointthreefive()
|
|
setAttrs({version: 1.35}, () => versioning(1.35))
|
|
break;
|
|
case version < 1.41:
|
|
onepointfour()
|
|
setAttrs({version: 1.41}, () => versioning(1.41))
|
|
break;
|
|
case version < 4.0:
|
|
fourpointzero()
|
|
setAttrs({version: 4.0}, () => versioning(4.0))
|
|
break;
|
|
case version < 4.1:
|
|
fourpointone()
|
|
setAttrs({version: 4.1}, () => versioning(4.1))
|
|
break;
|
|
case version < 4.11:
|
|
fourpointone()
|
|
fourpointoneone()
|
|
setAttrs({version: 4.11}, () => versioning(4.11))
|
|
break;
|
|
case version < 4.15:
|
|
fourpointonefive()
|
|
setAttrs({version: 4.15}, () => versioning(4.15))
|
|
break;
|
|
default:
|
|
console.log(`%c Shadowrun 5th Edition is update to date. Version ${version}`, "color: green; font-weight:bold");
|
|
}
|
|
};
|
|
|
|
const fourpointonefive = () => {
|
|
updateDerivedAttribute('defense')
|
|
updateAttributes(sheetAttributes.initiative_mod, 'initiative_mod')
|
|
updateAstralInitiative()
|
|
|
|
sheetAttributes.repeatingSkills.forEach(skill => {
|
|
getSectionIDs(skill, idarray => {
|
|
let attributes = []
|
|
idarray.forEach(id => attributes.push(`repeating_${skill}_${id}_limit`))
|
|
|
|
getAttrs(attributes, values => {
|
|
let update = {}
|
|
for (let [key, value] of Object.entries(values)) {
|
|
const repRowID = processingFunctions.getReprowid(key)
|
|
if (value.includes('limit')) {
|
|
const translationKey = processingFunctions.sliceAttr(value)
|
|
update[`${repRowID}_display_limit`] = getTranslationByKey(translationKey)
|
|
} else {
|
|
update[`${repRowID}_display_limit`] = ' '
|
|
}
|
|
}
|
|
processingFunctions.setAttributes(update)
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
const fourpointoneone = () => {
|
|
getSectionIDs('forms', idarray => {
|
|
let attributes = [];
|
|
let update = {};
|
|
|
|
idarray.forEach(id => attributes.push(`repeating_forms_${id}_spec`))
|
|
|
|
getAttrs(attributes, value => {
|
|
idarray.forEach(id => update[`repeating_forms_${id}_specialization`] = value[`repeating_forms_${id}_spec`])
|
|
setAttrs(update);
|
|
});
|
|
});
|
|
}
|
|
|
|
const fourpointone = () => {
|
|
getAttrs(["initiative_modifier", "initiative_temp", "initiative_temp_flag"], value => {
|
|
setAttrs({
|
|
initiative_mod_modifier: value.initiative_modifier,
|
|
initiative_mod_temp: value.initiative_temp,
|
|
initiative_mod_temp_flag: value.initiative_mod_temp_flag
|
|
})
|
|
})
|
|
|
|
getSectionIDs('range', idarray => {
|
|
let attributes = [];
|
|
let update = {};
|
|
idarray.forEach(id => attributes.push(`repeating_range_${id}_spec`))
|
|
getAttrs(attributes, value => {
|
|
idarray.forEach(id => update[`repeating_range_${id}_specialization`] = value[`repeating_range_${id}_spec`])
|
|
setAttrs(update);
|
|
});
|
|
});
|
|
|
|
getSectionIDs('melee', idarray => {
|
|
let attributes = [];
|
|
let update = {};
|
|
idarray.forEach(id => attributes.push(`repeating_melee_${id}_spec`))
|
|
getAttrs(attributes, value => {
|
|
idarray.forEach(id => update[`repeating_melee_${id}_specialization`] = value[`repeating_melee_${id}_spec`])
|
|
setAttrs(update);
|
|
});
|
|
});
|
|
|
|
getSectionIDs("active", idarray => {
|
|
let attributes = [];
|
|
let update = {};
|
|
idarray.forEach(id => attributes.push(`repeating_active_${id}_skill`))
|
|
getAttrs(attributes, value => {
|
|
idarray.forEach(id => update[`repeating_active_${id}_display_skill`] = value[`repeating_active_${id}_skill`])
|
|
setAttrs(update);
|
|
});
|
|
});
|
|
}
|
|
|
|
const fourpointzero = () => {
|
|
const attributes = ['physical', 'physical_damage', 'stun', 'stun_damage', 'sheet_type', 'matrix_con'];
|
|
getAttrs(attributes, value => {
|
|
let update = {};
|
|
update["physical"] = value.physical_damage || 0;
|
|
update["stun"] = value.stun_damage || 0;
|
|
update["matrix"] = value.matrix_con || 0;
|
|
|
|
setAttrs(update);
|
|
});
|
|
|
|
getSectionIDs("ritual", idarray => {
|
|
let ritualAttributes = [];
|
|
let update = {};
|
|
|
|
idarray.forEach(id => {
|
|
ritualAttributes.push(`repeating_ritual_${id}_spec`);
|
|
});
|
|
|
|
getAttrs(ritualAttributes, value => {
|
|
idarray.forEach(id => {
|
|
update[`repeating_ritual_${id}_specialization`] = value[`repeating_ritual_${id}_spec`]
|
|
});
|
|
|
|
setAttrs(update);
|
|
});
|
|
});
|
|
};
|
|
|
|
const onepointfour = () => {
|
|
const toggles = [`wound_toggle`, `edge_toggle`, `modifier_toggle`];
|
|
getAttrs(toggles, (v) => {
|
|
let set = {};
|
|
toggles.forEach(attr => {
|
|
const name = attr.split("_")[0], value = v[`${attr}`].toString();
|
|
value != "0" || !value.includes(name) ? set[`${attr}`] = 0 : false;
|
|
});
|
|
setAttrs(set);
|
|
});
|
|
};
|
|
|
|
const onepointthreefive = () => {
|
|
getAttrs(["sheet_type"], (v) => {
|
|
if (v.sheet_type === "goon") {
|
|
setAttrs({
|
|
["sheet_type"]: "grunt"
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
on('sheet:opened', () => {
|
|
getAttrs(['version'], v => { versioning(parseFloat(v.version) || 1); });
|
|
translations();
|
|
});
|
|
|
|
on('clicked:shots_remove clicked:shots_add', eventinfo => updateShotsFired(eventinfo.triggerName))
|
|
|
|
on('clicked:primary_ammo', () => updateAmmoWithShotsFired())
|
|
|
|
on('clicked:reload', () => updateAmmoWithMax())
|
|
|
|
sheetAttributes.tabs.forEach(attr => on(`clicked:tab_${attr}`, () => updateTab(attr)))
|
|
|
|
on('change:agility change:walk_modifier change:run_modifier', () => updateMovement())
|
|
|
|
sheetAttributes.calculatedAttributes.forEach(attribute => {
|
|
const attributeArray = [`${attribute}_base`, `${attribute}_modifier`, `${attribute}_temp`, `${attribute}_temp_flag`]
|
|
attributeArray.forEach(attr => on(`change:${attr}`, () => updateAttributes(attributeArray, attribute)))
|
|
});
|
|
|
|
sheetAttributes.initiative_mod.forEach(attr => on(`change:${attr}`, () => updateAttributes(sheetAttributes.initiative_mod, 'initiative_mod')))
|
|
|
|
sheetAttributes.astral_mod.forEach(attr => on(`change:${attr}`, () => updateAstralInitiative()))
|
|
|
|
sheetAttributes.derivedAttributes.forEach(derivedAttribute => {
|
|
sheetAttributes[derivedAttribute].forEach(attr => on(`change:${attr}`, () => updateDerivedAttribute(derivedAttribute)))
|
|
})
|
|
|
|
sheetAttributes.attributeLimits.forEach(attributeLimit => {
|
|
sheetAttributes[attributeLimit].forEach(attr => on(`change:${attr}`, () => updateLimits(attributeLimit)))
|
|
on(`change:${attributeLimit}_modifier change:${attributeLimit}_temp change:${attributeLimit}_temp_flag`, () => updateLimits([`${attributeLimit}`]))
|
|
})
|
|
|
|
sheetAttributes.conditionTracks.forEach(conditionTrack => {
|
|
sheetAttributes[conditionTrack].forEach(attr => on(`change:${attr}`, () => updateConditionTracks(conditionTrack)))
|
|
})
|
|
|
|
sheetAttributes.woundCalculation.forEach(attr => on(`change:${attr}`, () => updateWounds()))
|
|
|
|
sheetAttributes.repeatingSkills.forEach(field => {
|
|
on(`change:repeating_${field}:rating change:repeating_${field}:rating_modifier`, eventinfo => updateRepeatingSkillRating(eventinfo.triggerName || ''))
|
|
on(`change:repeating_${field}:attribute`, eventinfo => updateRepeatingSkillAttribute(eventinfo))
|
|
on(`change:repeating_${field}:limit`, eventinfo => updateRepeatingSkillLimit(eventinfo))
|
|
on(`change:repeating_${field}:dicepool`, eventinfo => updateRepeatingSkillDicepool(eventinfo))
|
|
})
|
|
|
|
sheetAttributes.weaponTypes.forEach(type => {
|
|
on(`change:repeating_${type}:dicepool_modifier change:repeating_${type}:specialization`, eventinfo => updateRepeatingWeaponDicepool(eventinfo.triggerName))
|
|
on(`change:repeating_${type}:primary`, eventinfo => updateRepeatingPrimary(eventinfo, type))
|
|
})
|
|
|
|
sheetAttributes.rangeAttributes.forEach(attr => on(`change:repeating_range:${attr}`, eventinfo => updatePrimary(eventinfo)))
|
|
|
|
sheetAttributes.meleeAttributes.forEach(attr => on(`change:repeating_melee:${attr}`, eventinfo => updatePrimary(eventinfo)))
|
|
|
|
sheetAttributes.armorAttributes.forEach(attr => on(`change:repeating_armor:${attr}`, eventinfo => updatePrimary(eventinfo)))
|
|
|
|
on("change:repeating_armor:primary", eventinfo => updateRepeatingPrimary(eventinfo, 'armor'))
|
|
|
|
on(`change:repeating_active:skill`, eventinfo => updateRepeatingSkillName(eventinfo))
|
|
|
|
on('clicked:cond_reset_physical clicked:cond_reset_stun', eventinfo => resetConditionTrack(eventinfo))
|
|
|
|
on('change:edge_toggle', eventinfo => edgeToggle(eventinfo.newValue))
|
|
|
|
on('change:device_rating change:matrix_modifier', () => updateMatrixMaximum())
|
|
|
|
on('change:intuition change:astral_mod_modifier', () => updateAstralInitiative())
|
|
|
|
on('change:initiative_dice_modifier change:edge_toggle change:initiative_dice_temp change:initiative_dice_temp_flag', () => updateInitiativeDice())
|
|
|
|
on('change:astral_dice_modifier change:edge_toggle', () => updateAstralInitiativeDice())
|
|
|
|
on('change:host_rating change:data_processing change:pilot change:intuition change:matrix_mod_modifier change:level', () => {
|
|
updateMatrixInitiative()
|
|
})
|
|
|
|
on('change:matrix_dice_modifier change:edge_toggle change:matrix_mode_toggle', () => updateMatrixInitiativeDice())
|
|
|
|
on('change:matrix_mode_toggle', () => updateHotSimsBonus())
|
|
|
|
on("clicked:cond_reset", () => resetNpcCondition());
|
|
|
|
sheetAttributes.spellTypes.forEach(type => on(`change:repeating_${type}:dicepool_modifier change:repeating_${type}:specialization`, eventinfo => updateSpellsDicepool(eventinfo)))
|
|
|
|
on("change:level", eventinfo => updateSpriteConditionTrack(eventinfo.newValue))
|
|
|
|
on("change:host_rating", eventinfo => updateHostAttributes(eventinfo.newValue))
|
|
|
|
on("change:default_attribute", eventinfo => updateDefaultAttribute(eventinfo.newValue))
|
|
//Functions shared by all components
|
|
const buildModiferTempFlagArray = name => [`${name}_modifier`, `${name}_temp`, `${name}_temp_flag`]
|
|
|
|
const buildModiferTempFlagBaseArray = name => {
|
|
const bonus = buildModiferTempFlagArray(name)
|
|
return [`${name}_base`, ...bonus]
|
|
}
|
|
|
|
const buildDisplayString = ({base, total}) => {
|
|
const bonus = base === total
|
|
return bonus ? base : `${base} (${total})`
|
|
}
|
|
|
|
const errorMessage = (title, message) => console.log(`%c ERROR ${title}: ${message}`, "color: orange; font-weight:bold");
|
|
|
|
const parseInteger = string => parseInt(string) || 0
|
|
|
|
const checkFlag = value => !value || value == '0' ? false : true
|
|
|
|
|
|
|
|
class SheetAttribute {
|
|
constructor(name) {
|
|
this.name = name
|
|
this.base = 0
|
|
this.temp = 0
|
|
this.tempFlag = true
|
|
this.modifier = 0
|
|
this.total = this.getTotal()
|
|
this.display = this.buildDisplay()
|
|
}
|
|
|
|
setBase(value) { this.base = value }
|
|
setTemp(value) { this.temp = value }
|
|
setTempFlag(value) { this.tempFlag = value }
|
|
setModifier(value) { this.modifier = value }
|
|
setTotal(value) { this.total = value }
|
|
setDisplay(value) { this.display = value }
|
|
|
|
getName() { return this.name }
|
|
getBase() { return this.base }
|
|
getTemp() { return this.temp }
|
|
getTempFlag() { return this.tempFlag }
|
|
getModifier() { return this.modifier }
|
|
getDisplay() { return this.display }
|
|
|
|
getBonus() {
|
|
const temp = this.getTempFlag() ? this.getTemp() : 0
|
|
return temp + this.getModifier()
|
|
}
|
|
|
|
buildDisplay() {
|
|
const base = this.getBase()
|
|
const total = this.getTotal()
|
|
return base == !total || total == base ? base : `${base} (${total})`
|
|
}
|
|
|
|
getTotal() {
|
|
return this.base + this.getBonus()
|
|
}
|
|
}
|
|
class RepeatingFieldset {
|
|
constructor(groupname, id) {
|
|
this.groupname = groupname
|
|
this.reprowid = id || generateRowID()
|
|
this.flag = false
|
|
this.display_flag = false
|
|
}
|
|
|
|
getGroupName() { return this.groupname }
|
|
getRowID() { return this.reprowid }
|
|
getFlag() { return this.flag }
|
|
getDisplayFlag() { return this.display_flag }
|
|
|
|
buildRowName() {
|
|
return `repeating_${this.getGroupName()}_${this.getRowID()}`
|
|
}
|
|
|
|
addAttribute(attributesibuteName) {
|
|
return `${this.buildRowName()}_${attributesibuteName}`
|
|
}
|
|
}
|
|
|
|
class Attribute extends SheetAttribute {
|
|
constructor(name) {
|
|
super(name)
|
|
}
|
|
|
|
getAttrsArray() {
|
|
const name = this.getName()
|
|
return [`${name}_base`, `${name}_modifier`, `${name}_temp`, `${name}_temp_flag`]
|
|
}
|
|
|
|
getSheetAttributes() {
|
|
const name = this.getName()
|
|
|
|
return {
|
|
[`${name}`]: this.getTotal(),
|
|
[`${name}_base`]: this.getBase(),
|
|
[`${name}_temp`]: this.getTemp(),
|
|
[`${name}_temp_flag`]: this.getTempFlag(),
|
|
[`${name}_modifier`]: this.getModifier(),
|
|
[`${name}_display`]: this.getDisplay()
|
|
}
|
|
}
|
|
}
|
|
class Movement extends SheetAttribute {
|
|
constructor(name, agility = 0) {
|
|
super(name)
|
|
this.agility = agility
|
|
this.multiplier = this.defaultMultiplier(name)
|
|
}
|
|
|
|
setMultiplier(value) { this.multiplier = value }
|
|
|
|
getAgility() { return this.agility }
|
|
getMultiplier() { return this.multiplier }
|
|
|
|
defaultMultiplier(name) {
|
|
switch(name) {
|
|
case 'walk':
|
|
return 2
|
|
case 'run' :
|
|
return 4
|
|
default:
|
|
errorMessage('defaultMultiplier in Movement class', 'name did not match the switch cases')
|
|
}
|
|
}
|
|
|
|
getAttrsArray() {
|
|
const attributes = ['agility']
|
|
const bonus = ['walk_modifier', 'run_modifier']
|
|
return [...attributes, ...bonus]
|
|
}
|
|
|
|
getSpeed() {
|
|
return (this.getAgility() * this.getMultiplier()) + this.getModifier()
|
|
}
|
|
|
|
getSheetAttributes() {
|
|
const name = this.getName()
|
|
|
|
return {
|
|
[`${name}`]: this.getSpeed(),
|
|
[`${name}_modifier`]: this.getModifier()
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
class Limit extends SheetAttribute {
|
|
constructor(name) {
|
|
super(name)
|
|
attributes = this.determineAttributes()
|
|
}
|
|
|
|
determineAttributes() {
|
|
switch(this.getName()) {
|
|
case 'mental':
|
|
return ['intuition', 'willpower', 'logic']
|
|
case 'physical':
|
|
return ['body', 'reaction', 'strength']
|
|
case 'social':
|
|
return ['essence', 'willpower', 'charisma']
|
|
default:
|
|
errorMessage('determineAttributes in Limit class', 'name did not match the switch cases')
|
|
}
|
|
}
|
|
}
|
|
class Augmentations extends RepeatingFieldset {
|
|
constructor(name) {
|
|
super('augementations')
|
|
this.name = name
|
|
this.notes = ''
|
|
this.rating = ''
|
|
this.essence = ''
|
|
}
|
|
|
|
getName() { return this.name }
|
|
getNotes() { return this.notes }
|
|
getRating() { return this.rating }
|
|
getEssence() { return this.essence }
|
|
|
|
setNotes(value) { this.notes = value }
|
|
setRating(value) { this.rating = value }
|
|
setEssence(value) { this.essence = value }
|
|
|
|
getSheetAttributes() {
|
|
const row = this.buildRowName()
|
|
|
|
return {
|
|
[`${row}_augmentation`]: this.getName(),
|
|
[`${row}_rating`]: this.getRating(),
|
|
[`${row}_essence`]: this.getEssence(),
|
|
[`${row}_notes`]: this.getNotes(),
|
|
[`${row}_flag`]: this.getFlag(),
|
|
[`${row}_display_flag`]: this.getDisplayFlag()
|
|
}
|
|
}
|
|
}
|
|
class Gear extends RepeatingFieldset {
|
|
constructor(name) {
|
|
super('items')
|
|
this.name = name
|
|
this.notes = ''
|
|
this.rating = ''
|
|
this.quantity = '',
|
|
this.modifications = ''
|
|
}
|
|
|
|
getName() { return this.name }
|
|
getNotes() { return this.notes }
|
|
getRating() { return this.rating }
|
|
getQuantity() { return this.quantity }
|
|
getModifications() { return this.modifications }
|
|
|
|
setNotes(value) { this.notes = value }
|
|
setRating(value) { this.rating = value }
|
|
setQuantity(value) { this.quantity = value }
|
|
setModifications(value) { this.modifications = value }
|
|
|
|
getSheetAttributes() {
|
|
const row = this.buildRowName()
|
|
|
|
return {
|
|
[`${row}_item`]: this.getName(),
|
|
[`${row}_rating`]: this.getRating(),
|
|
[`${row}_quantity`]: this.getQuantity(),
|
|
[`${row}_notes`]: this.getNotes(),
|
|
[`${row}_modifications`]: this.getModifications(),
|
|
[`${row}_flag`]: this.getFlag(),
|
|
[`${row}_display_flag`]: this.getDisplayFlag()
|
|
}
|
|
}
|
|
}
|
|
|
|
class Initiative extends SheetAttribute {
|
|
constructor() {
|
|
super('initiative_mod')
|
|
}
|
|
|
|
getAttrsArray() {
|
|
const attributes = ['reaction', 'intuition']
|
|
const bonus = ['initiative_mod_modifier', 'initiative_temp','initiative_temp_flag']
|
|
return [...attributes, ...bonus]
|
|
}
|
|
|
|
getSheetAttributes() {
|
|
const name = this.getName()
|
|
|
|
return {
|
|
[`${name}`]: this.getTotal(),
|
|
[`initiative_temp`]: this.getTemp(),
|
|
[`initiative_temp_flag`]: this.getTempFlag(),
|
|
[`${name}_modifier`]: this.getModifier(),
|
|
[`${name}_display`]: this.getDisplay()
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class InitiativeDice extends SheetAttribute {
|
|
constructor(name) {
|
|
super(name)
|
|
this.base = 1
|
|
}
|
|
|
|
getAttrsArray() {
|
|
const name = this.name
|
|
const bonus = [`${name}_modifier`, `${name}_temp`, `${name}_temp_flag`]
|
|
return [...bonus, 'edge_toggle']
|
|
}
|
|
|
|
getInitiativeDice(edgeFlag) {
|
|
const total = this.getTotal()
|
|
return edgeFlag ? 5 : Math.min(total, 5)
|
|
}
|
|
|
|
getSheetAttributes() {
|
|
const name = this.getName()
|
|
|
|
return {
|
|
[`${name}`]: this.getTotal(),
|
|
[`${name}_temp`]: this.getTemp(),
|
|
[`${name}_temp_flag`]: this.getTempFlag(),
|
|
[`${name}_modifier`]: this.getModifier()
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class AstralInitiative extends SheetAttribute {
|
|
constructor() {
|
|
super('astral_mod')
|
|
}
|
|
|
|
getAttrsArray() {
|
|
const attributes = ['intuition']
|
|
const bonus = ['astral_mod_modifier']
|
|
return [...attributes, ...bonus]
|
|
}
|
|
}
|
|
|
|
|
|
class AstralInitiativeDice extends InitiativeDice {
|
|
constructor() {
|
|
super('astral_dice')
|
|
this.base = 3
|
|
}
|
|
}
|
|
|
|
|
|
class MatrixInitiative extends SheetAttribute {
|
|
constructor() {
|
|
super('matrix_mod')
|
|
}
|
|
|
|
getAttrsArray() {
|
|
const attributes = ['intuition', "data_processing", "pilot", "host_rating", "level", "sheet_type"]
|
|
const bonus = ['matrix_mod_modifier']
|
|
return [...attributes, ...bonus]
|
|
}
|
|
|
|
determineSecondAttribute(type) {
|
|
switch(type) {
|
|
case 'sprite':
|
|
return 'level'
|
|
case 'vehicle':
|
|
return 'pilot'
|
|
case 'host':
|
|
return 'host_rating'
|
|
default:
|
|
return 'intuition'
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class MatrixInitiativeDice extends InitiativeDice {
|
|
constructor() {
|
|
super('matrix_dice')
|
|
}
|
|
|
|
matrixGetAttrsArray() {
|
|
return [...this.getAttrsArray(), 'matrix_mode_toggle']
|
|
}
|
|
}
|
|
|
|
class PersonalData {
|
|
constructor() {
|
|
this.name = null,
|
|
this.metatype = null,
|
|
this.ethnicity = null,
|
|
this.age = null,
|
|
this.sex = null,
|
|
this.height = null,
|
|
this.weight = null
|
|
}
|
|
|
|
setName(value) { this.name = value}
|
|
setMetatype(value) { this.metatype = value}
|
|
setEthnicity(value) { this.ethnicity = value}
|
|
setAge(value) { this.age = value}
|
|
setSex(value) { this.sex = value}
|
|
setHeight(value) { this.height = value}
|
|
setWeight(value) { this.weight = value}
|
|
|
|
getName() { return this.name }
|
|
getMetatype() { return this.metatype }
|
|
getEthnicity() { return this.ethnicity }
|
|
getAge() { return this.age }
|
|
getSex() { return this.sex }
|
|
getHeight() { return this.height }
|
|
getWeight() { return this.weight }
|
|
|
|
getSheetAttributes() {
|
|
return {
|
|
character_name: this.getName(),
|
|
metatype: this.getMetatype(),
|
|
ethnicity: this.getEthnicity(),
|
|
age: this.getAge(),
|
|
sex: this.getSex(),
|
|
height: this.getHeight(),
|
|
weight: this.getWeight()
|
|
}
|
|
}
|
|
}
|
|
|
|
class RewardsData {
|
|
constructor() {
|
|
this.street_cred = 0
|
|
this.notoriety = 0
|
|
this.public_awareness = 0
|
|
this.karma = 0
|
|
this.total_karma = 0
|
|
this.misc = ''
|
|
}
|
|
|
|
setSteetCred(value) { this.street_cred = value}
|
|
setNotoriety(value) { this.notoriety = value}
|
|
setPublicAwareness(value) { this.public_awareness = value}
|
|
setKarma(value) { this.karma = value}
|
|
setTotalKarma(value) { this.total_karma = value}
|
|
setMisc(value) { this.misc = value}
|
|
|
|
getSteetCred() { return this.street_cred }
|
|
getNotoriety() { return this.notoriety }
|
|
getPublicAwareness() { return this.public_awareness }
|
|
getKarma() { return this.karma }
|
|
getTotalKarma() { return this.total_karma }
|
|
getMisc() { return this.misc }
|
|
|
|
getSheetAttributes() {
|
|
return {
|
|
street_cred: this.getSteetCred(),
|
|
notoriety: this.getNotoriety(),
|
|
public_awareness: this.getPublicAwareness(),
|
|
karma: this.getKarma(),
|
|
total_karma: this.getTotalKarma(),
|
|
misc: this.getMisc()
|
|
}
|
|
}
|
|
}
|
|
|
|
class PrimaryWeapon {
|
|
constructor(type) {
|
|
this[`primary_${type}_weapon`] = 'select a Primary in Arms',
|
|
this[`primary_${type}_weapon_skill`] = type === 'range' ? '@{firearms}' : '@{closecombat}',
|
|
this[`primary_${type}_weapon_damage`] = '',
|
|
this[`primary_${type}_weapon_dicepool`] = '',
|
|
this[`primary_${type}_weapon_acc`] = '',
|
|
this[`primary_${type}_weapon_ap`] = ''
|
|
}
|
|
}
|
|
|
|
class PrimaryRangeWeapon extends PrimaryWeapon {
|
|
constructor(type) {
|
|
super(type)
|
|
this[`primary_${type}_weapon_mode`] = '',
|
|
this[`primary_${type}_weapon_recoil`] = '',
|
|
this[`primary_${type}_weapon_ammo`] = '',
|
|
this[`primary_${type}_weapon_ammo_max`] = ''
|
|
}
|
|
}
|
|
|
|
class PrimaryMeleeWeapon extends PrimaryWeapon {
|
|
constructor(type) {
|
|
super(type)
|
|
this[`primary_${type}_weapon_reach`] = ''
|
|
}
|
|
}
|
|
|
|
|
|
class PrimaryArmor {
|
|
constructor(name) {
|
|
this.armor_name = name || 'select a Primary in Arms',
|
|
this.soak = 0,
|
|
this.soak_modifier = 0,
|
|
this.armor_rating = 0,
|
|
this.acid_modifier = 0,
|
|
this.cold_modifier = 0,
|
|
this.fire_modifier = 0,
|
|
this.radiation_modifier = 0,
|
|
this.electrical_modifier = 0
|
|
}
|
|
}
|
|
|
|
|
|
//Build a list of input which the user can edit manually if needed
|
|
//This shows how all their data is going to be imported onto the sheet
|
|
const importerHiddenInputsBuilder = update => {
|
|
let setText = {
|
|
"hidden": ""
|
|
};
|
|
|
|
//GENERATE INPUTS TO SAVE THE DATA
|
|
Object.keys(update).forEach(key => {
|
|
const replaceUnderscoreWithSpace = word => word.replace(/_/g, ' ')
|
|
const label = (key.includes("_")) ? replaceUnderscoreWithSpace(key) : key;
|
|
const input = `
|
|
<label>
|
|
<div>${label}</div>
|
|
<input type="text" name="comp_${key}" value="${update[key]}" />
|
|
</label>
|
|
`;
|
|
setText[`hidden`] += (setText[`hidden`].includes(input)) ? "" : input;
|
|
|
|
const feedbackLabel =
|
|
(key.includes("repeating")) ? key.split("_")[3] :
|
|
(key.includes("_")) ? replaceUnderscoreWithSpace(key) :
|
|
key;
|
|
|
|
(feedbackLabel === "flag" || feedbackLabel === "display") ?
|
|
false :
|
|
setText["results"] += addFeedback(feedbackLabel, update[key]);
|
|
});
|
|
|
|
return setText;
|
|
}
|
|
|
|
const associateChummerData = character => {
|
|
const jsonKeys = {
|
|
"name": "name"
|
|
,"adept": "flag_special"
|
|
,"age" : "age"
|
|
,"alias": "character_name"
|
|
,"armor": "armor"
|
|
,"calculatednotoriety": "notoriety"
|
|
,"calculatedpublicawareness": "public_awareness"
|
|
,"calculatedstreetcred": "street_cred"
|
|
,"cmoverflow": "overflow"
|
|
,"composure" : "composure"
|
|
,"height": "height"
|
|
,"initdice": "initiative_dice"
|
|
,"initvalue": "initiative_mod"
|
|
,"judgeintentions" : "judge_intentions"
|
|
,"karma": "karma"
|
|
,"liftandcarry": "lift_carry"
|
|
,"limitmental": "mental_limit"
|
|
,"limitphysical": "physical_limit"
|
|
,"limitsocial": "social_limit"
|
|
,"magician": "flag_special"
|
|
,"memory": "memory"
|
|
,"nuyen":"primary_nuyen"
|
|
,"physicalcm": "physical_max"
|
|
,"playername": "player_name"
|
|
,"sex": "sex"
|
|
,"stuncm": "stun_max"
|
|
,"technomancer": "flag_special"
|
|
,"totaless": "essence"
|
|
,"totalkarma": "total_karma"
|
|
,"weight": "weight"
|
|
,"indirectdefenseresist": "defense"
|
|
}
|
|
|
|
const attributeKeys = {
|
|
"BOD": "body"
|
|
,"AGI": "agility"
|
|
,"REA": "reaction"
|
|
,"STR": "strength"
|
|
,"CHA": "charisma"
|
|
,"INT": "intuition"
|
|
,"LOG": "logic"
|
|
,"WIL": "willpower"
|
|
,"EDG": "edge"
|
|
,"MAG": "magic"
|
|
,"RES": "resonance"
|
|
}
|
|
|
|
const sortedKeys = alphabatizeKeys(jsonKeys);
|
|
let setText = {
|
|
"error": "",
|
|
"results": "",
|
|
"ignored": ""
|
|
};
|
|
let update = {};
|
|
|
|
//MATRIX
|
|
const setCyberdeck = (cyberdeck) => {
|
|
update["cyberdeck"] = cyberdeck.name;
|
|
update["device_rating"] = cyberdeck.devicerating;
|
|
update["attribute_1"] = cyberdeck.attack;
|
|
update["attribute_2"] = cyberdeck.sleaze;
|
|
update["attribute_3"] = cyberdeck.dataprocessing;
|
|
update["attribute_4"] = cyberdeck.firewall;
|
|
update["matrix"] = 0;
|
|
}
|
|
|
|
// PROCESS TOP LEVEL KEYS
|
|
Object.keys(sortedKeys).forEach((key) => {
|
|
try {
|
|
const charSheetAttr = jsonKeys[key];
|
|
const chummerValue = character[key];
|
|
if ((key === "adept" || key === "magician" || key === "technomancer")) {
|
|
if (chummerValue.toUpperCase() === "TRUE") {
|
|
update[`${charSheetAttr}`] = (key === "technomancer") ? "resonance" : "magic";
|
|
} else if (!update.hasOwnProperty(`${charSheetAttr}`)) {
|
|
// if we don't have the property set already otherwise keys get overriden
|
|
update[`${charSheetAttr}`] = "mundane";
|
|
};
|
|
} else if (key === "totaless") {
|
|
const essence = chummerValue.includes(",") ? chummerValue.replace(",", ".") : chummerValue;
|
|
update[`${charSheetAttr}`] = parseFloat(essence) || 6;
|
|
} else if (chummerValue && chummerValue != null) {
|
|
update[`${charSheetAttr}`] = chummerValue;
|
|
} else {
|
|
setText["error"] += addFeedback(charSheetAttr, chummerValue);
|
|
};
|
|
|
|
const textUpdate = (update[`${charSheetAttr}`]) ? "results" : "ignored";
|
|
const feedbackText = addFeedback(jsonKeys[key].replace("_"," "), update[`${charSheetAttr}`]);
|
|
(setText[`results`].includes(feedbackText) || setText[`ignored`].includes(feedbackText)) ? false : setText[`${textUpdate}`] += feedbackText;
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(key), error);
|
|
};
|
|
});
|
|
|
|
// PROCESS METATYPE
|
|
try {
|
|
update[`metatype`] = character.metatype;
|
|
if (character.metavariant) {
|
|
update[`metatype`] += ` (${character.metavariant})`
|
|
}
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(character.metatype), error);
|
|
};
|
|
|
|
// PROCESS ATTRIBUTES
|
|
const attributes = character.attributes[1].attribute;
|
|
let attributeTotals = {
|
|
"essence": update["essence"]
|
|
}; // USED FOR LIMITS BELOW
|
|
attributes.forEach(object => {
|
|
try {
|
|
const charSheetAttr = attributeKeys[object.name];
|
|
if (charSheetAttr === "edge") {
|
|
update[`${charSheetAttr}`] = object.base;
|
|
} else {
|
|
update[`${charSheetAttr}_base`] = object.base;
|
|
update[`${charSheetAttr}_modifier`] = object.total - object.base;
|
|
};
|
|
|
|
// USED FOR LIMITS BELOW
|
|
attributeTotals[`${charSheetAttr}`] = parseInt(object.total) || 0;
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(object), error);
|
|
};
|
|
});
|
|
|
|
//PROCESS LIMITS
|
|
const limitKeys = {
|
|
"limitmental": "mental_limit"
|
|
,"limitphysical": "physical_limit"
|
|
,"limitsocial": "social_limit"
|
|
};
|
|
|
|
Object.keys(limitKeys).forEach((key) => {
|
|
//CALCULATE THE BASE FOR LIMIT
|
|
const limitCalculate = (attrsArray) => {
|
|
return Math.ceil(((attrsArray[0] + attrsArray[1] + (attrsArray[2] * 2))/3))
|
|
};
|
|
|
|
try {
|
|
let attrs = [];
|
|
if (key === "limitmental") {
|
|
attrs.push(attributeTotals["intuition"], attributeTotals["willpower"], attributeTotals["logic"]);
|
|
} else if (key === "limitphysical") {
|
|
attrs.push(attributeTotals["body"], attributeTotals["reaction"], attributeTotals["strength"]);
|
|
} else {
|
|
attrs.push(attributeTotals["essence"], attributeTotals["willpower"], attributeTotals["charisma"]);
|
|
};
|
|
|
|
//SET LIMIT MODIFIER EQUAL TO THE TOTAL IN CHUMMER - THE CALCULATED BASE LIMIT
|
|
update[`${limitKeys[key]}_modifier`] = parseInt(character[key]) - limitCalculate(attrs);
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(`${key}`), error);
|
|
};
|
|
});
|
|
|
|
// LOOP THROUGHT QUALITIES
|
|
if (character.qualities != null && character.qualities.quality != null) {
|
|
const qualitiesList = getArray(character.qualities.quality);
|
|
qualitiesList.forEach(quality => {
|
|
try {
|
|
const id = generateRowID();
|
|
update[`repeating_quality_${id}_flag`] = "display";
|
|
update[`repeating_quality_${id}_quality`] = quality.name;
|
|
update[`repeating_quality_${id}_type`] = quality.qualitytype == "Positive" ? "P" : "N";
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(quality), error);
|
|
};
|
|
});
|
|
}
|
|
|
|
// LOOP THROUGH SKILLS & GENERATE REPEATING FIELDS
|
|
if (character.skills != null && character.skills.skill != null) {
|
|
const skillsList = getArray(character.skills.skill);
|
|
skillsList.forEach((skill) => {
|
|
try {
|
|
const rating = parseInt(skill.rating) || 0;
|
|
if (rating > 0) {
|
|
const id = generateRowID();
|
|
const type =
|
|
(skill.knowledge.toUpperCase() === "TRUE" && skill.islanguage.toUpperCase() === "TRUE") ? "language" :
|
|
(skill.knowledge.toUpperCase() === "TRUE") ? "knowledge" :
|
|
"active";
|
|
const exotic = skill.exotic.toUpperCase();
|
|
const section = `repeating_${type}_${id}`
|
|
// Exotic Weapons need their name in Specialization
|
|
|
|
update[`${section}_flag`] = "display";
|
|
update[`${section}_skill`] =
|
|
(skill.name === "Exotic Melee Weapon") ? "Exotic Melee" :
|
|
(skill.name === "Exotic Ranged Weapon") ? "Exotic Range" :
|
|
skill.name;
|
|
update[`${section}_display`] =
|
|
(skill.name === "Exotic Melee Weapon") ? "Exotic Melee" :
|
|
(skill.name === "Exotic Ranged Weapon") ? "Exotic Range" :
|
|
skill.name;
|
|
update[`${section}_rating`] = skill.rating;
|
|
update[`${section}_rating_modifier`] = skill.ratingmod;
|
|
|
|
const skilltotal = parseInt(skill.rating) + parseInt(skill.ratingmod);
|
|
update[`${section}_dicepool`] = skilltotal;
|
|
|
|
//ACTIVE SKILLS HAVE THEIR TOTAL SAVED IN A HIDDEN ATTRIBUTE
|
|
if (type === "active") {
|
|
update[skill.name.toLowerCase().replace(/ /g, "")] = skilltotal;
|
|
};
|
|
|
|
//This needs to be verified with multiple specialization
|
|
if (skill.skillspecialization && skill.skillspecialization != null) {
|
|
const chummerSpecialization = skill.skillspecialization.skillspecialization.name;
|
|
const specialization = (chummerSpecialization.includes("[")) ? chummerSpecialization.slice(1, -1) : chummerSpecialization;
|
|
update[`${section}_specialization`] = specialization;
|
|
} else if (exotic === "TRUE") {
|
|
update[`${section}_specialization`] = skill.spec;
|
|
};
|
|
|
|
//CREATE THE DISPLAYS FOR SKILLS
|
|
if (update[`${section}_specialization`]) {
|
|
update[`${section}_display_specialization`] = `(${update[`${section}_specialization`]})`;
|
|
};
|
|
|
|
//DISPLAY FOR RTG
|
|
update[`${section}_display_rating`] = (skill.ratingmod != 0) ? `${skill.rating} (${skilltotal})` : `${skill.rating}`;
|
|
|
|
const attribute = skill.attribute;
|
|
update[`${section}_attribute`] = `@{${attributeKeys[attribute]}}`;
|
|
update[`${section}_display_attribute`] = attributeKeys[attribute];
|
|
|
|
update[`${section}_limit`] =
|
|
(attribute === "AGI" || attribute === "BOD" || attribute === "STR" || attribute === "REA") ? `@{physical_limit}` :
|
|
(attribute === "WIL" || attribute === "LOG" || attribute === "INT") ? `@{mental_limit}` :
|
|
(attribute === "CHA") ? `@{social_limit}` : "none";
|
|
};
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(skill), error);
|
|
};
|
|
});
|
|
}
|
|
|
|
//MOVEMENT
|
|
try {
|
|
const movement = character.movementwalk.split(",")[0].split("/");
|
|
update[`walk`] = movement[0];
|
|
update[`run`] = movement[1];
|
|
} catch (error) {
|
|
setText["error"] += addFeedback("movement", error);
|
|
};
|
|
|
|
//MARTIAL ARTS
|
|
if (character.martialarts != null && character.martialarts.martialart != null) {
|
|
const martialartsList = getArray(character.martialarts.martialart);
|
|
martialartsList.forEach((art) => {
|
|
const techniqueList = getArray(art.martialarttechniques.martialarttechnique);
|
|
techniqueList.forEach((tech) => {
|
|
try {
|
|
const id = generateRowID();
|
|
update[`repeating_martial_${id}_flag`] = "display";
|
|
update[`repeating_martial_${id}_technique`] = tech.name;
|
|
update[`repeating_martial_${id}_style`] = art.name;
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(art), error);
|
|
};
|
|
});
|
|
});
|
|
};
|
|
|
|
//WEAPON KEYS
|
|
const weaponKeys = {
|
|
"name": "weapon"
|
|
,"damage": "damage"
|
|
,"ap": "ap"
|
|
,"dicepool": "dicepool"
|
|
,"skill": "skill"
|
|
,"reach": "reach"
|
|
,"rc": "recoil"
|
|
,"mode": "mode_options"
|
|
,"accuracy": "acc"
|
|
};
|
|
|
|
//WEAPONS
|
|
if (character.weapons != null && character.weapons.weapon != null) {
|
|
const weaponsList = getArray(character.weapons.weapon);
|
|
weaponsList.forEach((weapon) => {
|
|
try {
|
|
const id = generateRowID();
|
|
const section = (weapon.type.toUpperCase() === "MELEE") ? `repeating_melee_${id}` : `repeating_range_${id}`;
|
|
const npcWeapon = `repeating_weapon_${id}`;
|
|
|
|
const category = weapon.category.toUpperCase();
|
|
Object.keys(weaponKeys).forEach((key) => {
|
|
if (weapon[`${key}`] && weapon[`${key}`] != null) {
|
|
update[`${section}_${weaponKeys[key]}`] =
|
|
(key != "damage" && weapon[`${key}`].includes("(")) ? getValInParen(weapon[`${key}`]) :
|
|
(key === "skill") ? `@{${weapon[`${key}`].toLowerCase().replace(" ", "")}}` :
|
|
weapon[`${key}`];
|
|
} else if (key === "skill" && category.includes("EXOTIC")) {
|
|
update[`${section}_skill`] = 0;
|
|
};
|
|
});
|
|
|
|
//EXOTIC WEAPONS NEED SPECIAL HANDLING
|
|
if (category.includes("EXOTIC")) {
|
|
update[`${section}_dicepool_modifier`] = weapon.dicepool;
|
|
};
|
|
|
|
//RANGED WEAPONS NEED CLIP & RANGES
|
|
if (weapon.type.toUpperCase() === "RANGED") {
|
|
if (weapon.clips != null && weapon.clips.clip != null) {
|
|
const clips = Array.isArray(weapon.clips.clip) ? weapon.clips.clip : [ weapon.clips.clip ];
|
|
update[`${section}_ammo`] = clips[0].count;
|
|
} else if (weapon.name.includes("Grenade")) {
|
|
const gearsList = getArray(character.gears.gear);
|
|
gearsList.forEach((gear) => {
|
|
if (weapon.name === gear.name) {
|
|
update[`${section}_ammo`] = gear.qty || 1;
|
|
};
|
|
});
|
|
} else if (weapon.ammo) {
|
|
update[`${section}_ammo`] = weapon.ammo;
|
|
};
|
|
|
|
//RANGE
|
|
const rangeList = weapon.ranges;
|
|
let range = "";
|
|
Object.keys(rangeList).forEach((key) => {
|
|
if (key != "name" && rangeList[key] != null) {
|
|
const rangeNumber = rangeList[key].split("-")[1];
|
|
range += (key === "short") ? `${rangeNumber}` : `/${rangeNumber}`;
|
|
};
|
|
});
|
|
update[`${section}_range`] = range;
|
|
};
|
|
|
|
//ACCESSORIES
|
|
if (weapon.accessories) {
|
|
let accessories = "";
|
|
const accessoriesList = getArray(weapon.accessories.accessory);
|
|
accessoriesList.forEach((accessory) => {
|
|
accessories += `${accessory["name"]}, `
|
|
});
|
|
|
|
update[`${section}_notes`] = accessories;
|
|
};
|
|
|
|
// TOGGLE THE SETTINGS OFF
|
|
update[`${section}_flag`] = "display";
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(weapon), error);
|
|
};
|
|
});
|
|
}
|
|
|
|
//ARMOR
|
|
if (character.armors != null && character.armors.armor != null) {
|
|
const armorsList = getArray(character.armors.armor);
|
|
armorsList.forEach((armor) => {
|
|
try {
|
|
const id = generateRowID();
|
|
if (armor.category != "Clothing") {
|
|
const section = `repeating_armor_${id}`;
|
|
let armorMods = "";
|
|
let armorGear = "";
|
|
|
|
// ARMOR NAME
|
|
update[`${section}_name`] = armor.name;
|
|
|
|
// ARMOR sometimes has a bonus
|
|
update[`${section}_rating`] = (armor.armor.includes("/+")) ? armor.armor.split("/+")[0] : armor.armor;
|
|
|
|
// ARMOR MODS
|
|
if (armor.armormods && armor.armormods != null) {
|
|
const modsList = getArray(armor.armormods.armormod);
|
|
modsList.forEach((modification) => {
|
|
armorMods += `${modification.name}, `;
|
|
|
|
if (modification.name === "Nonconductivity") {
|
|
update[`${section}_electrical_modifier`] = modification.rating;
|
|
} else if (modification.name === "Thermal Damping" || modification === "Insulation") {
|
|
update[`${section}_cold_modifier`] = modification.rating;
|
|
} else if (modification.name === "Radiation Shielding") {
|
|
update[`${section}_radiation_modifier`] = modification.rating;
|
|
} else if (modification.name === "Chemical Protection") {
|
|
update[`${section}_acid_modifier`] = modification.rating;
|
|
} else if (modification.name === "Fire Resistance") {
|
|
update[`${section}_fire_modifier`] = modification.rating;
|
|
};
|
|
});
|
|
};
|
|
|
|
// ARMOR GEAR
|
|
if (armor.gears && armor.gears != null) {
|
|
const gearList = getArray(armor.gears.gear);
|
|
gearList.forEach((gear) => {
|
|
if (gear.children) {
|
|
const childrenList = getArray(gear.children.gear);
|
|
childrenList.forEach((child) => {
|
|
armorGear += `${gear.name} (${child.name}), `;
|
|
});
|
|
} else {
|
|
armorGear += `${gear.name}, `;
|
|
};
|
|
});
|
|
};
|
|
|
|
// HIDE SETTINGS
|
|
update[`${section}_flag`] = "display";
|
|
|
|
update[`${section}_notes`] =
|
|
(armorMods && armorGear) ? `Modification: ${armorMods} Gear: ${armorGear}` :
|
|
(armorMods) ? `Modification: ${armorMods}` :
|
|
(armorGear) ? `Gear: ${armorGear}` : "";
|
|
} else {
|
|
// Chummer puts Clothing in with armor
|
|
const section = `repeating_items_${id}`;
|
|
update[`${section}_item`] = armor.name;
|
|
update[`${section}_flag`] = "display";
|
|
};
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(armor), error);
|
|
}
|
|
});
|
|
}
|
|
|
|
//AUGMENTATIONS
|
|
if (character.cyberwares != null && character.cyberwares.cyberware != null) {
|
|
const cyberwaresList = getArray(character.cyberwares.cyberware);
|
|
cyberwaresList.forEach((ware) => {
|
|
const id = generateRowID();
|
|
try {
|
|
const section = `repeating_augementations_${id}`;
|
|
update[`${section}_flag`] = "display";
|
|
update[`${section}_augmentation`] = ware.name;
|
|
update[`${section}_rating`] = ware.rating;
|
|
update[`${section}_essence`] = ware.ess;
|
|
update[`${section}_notes`] = `Grade: ${ware.grade}`;
|
|
|
|
if (ware.gears != null && ware.gears.gear != null) {
|
|
const wareGearList = getArray(ware.gears.gear);
|
|
wareGearList.forEach((gear) => {
|
|
if (gear.category.toLowerCase().includes("cyberdeck")) {
|
|
setCyberdeck(gear);
|
|
}
|
|
});
|
|
}
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(ware.name), error);
|
|
}
|
|
});
|
|
};
|
|
|
|
// GEAR
|
|
if (character.gears != null && character.gears.gear != null) {
|
|
const gearsList = getArray(character.gears.gear);
|
|
gearsList.forEach((gear) => {
|
|
const id = generateRowID();
|
|
try {
|
|
if (gear.name.toLowerCase() === "fake sin") {
|
|
const section = `repeating_lifestyle_${id}`;
|
|
update[`${section}_name`] = `${gear.extra} (rating ${gear.rating})`;
|
|
update[`${section}_lifestyle`] = (gear.location != null) ? `${gear.location},` : "";
|
|
update[`${section}_flag`] = "display";
|
|
|
|
update[`${section}_licenses`] = "";
|
|
if (gear.children && gear.children.gear != null) {
|
|
const childrenList = getArray(gear.children.gear);
|
|
childrenList.forEach((child) => {
|
|
update[`${section}_licenses`] += `${child.extra} (rating ${child.rating}), `;
|
|
});
|
|
}
|
|
} else if (gear.category.toLowerCase().includes("cyberdeck")) {
|
|
setCyberdeck(gear);
|
|
} else if (gear.category.toLowerCase().includes("programs")) {
|
|
const section = `repeating_programs_${id}`;
|
|
update[`${section}_program`] = gear.name;
|
|
update[`${section}_flag`] = "display";
|
|
} else {
|
|
const section = `repeating_items_${id}`;
|
|
let gearNotes = "";
|
|
update[`${section}_item`] = gear.name;
|
|
update[`${section}_flag`] = "display";
|
|
update[`${section}_rating`] = (gear.rating > 0) ? gear.rating : "";
|
|
|
|
//NAME
|
|
update[`${section}_item`] += (gear.name.includes("Ammo:")) ? ` (${gear.extra}) ` : "";
|
|
update[`${section}_item`] += (gear.qty > 1) ?` x${gear.qty}` : "";
|
|
|
|
//NOTES
|
|
gearNotes += (gear.location != null) ? `Location: ${gear.location},` : "";
|
|
gearNotes += (gear.qty != null) ? ` Qty: ${gear.qty},` : "";
|
|
gearNotes += (gear.extra != null) ? ` Extra: ${gear.extra},` : "";
|
|
|
|
if (gear.children && gear.children != null) {
|
|
const childrenList = getArray(gear.children.gear);
|
|
childrenList.forEach((child) => {
|
|
gearNotes += `${child.name}, `;
|
|
});
|
|
};
|
|
|
|
update[`${section}_notes`] = gearNotes;
|
|
}
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(gear.name), error);
|
|
};
|
|
});
|
|
};
|
|
|
|
//SPELL KEYS
|
|
const spellKeys = {
|
|
"category": "category"
|
|
,"name": "name"
|
|
,"range": "range"
|
|
};
|
|
|
|
// SPELLS
|
|
if (character.spells != null && character.spells.spell != null) {
|
|
const spellsList = getArray(character.spells.spell);
|
|
spellsList.forEach((spell) => {
|
|
try {
|
|
const id = generateRowID();
|
|
const type = (spell.alchemy.toUpperCase() === "TRUE") ? "preps" : "spell";
|
|
const section = `repeating_${type}_${id}`;
|
|
|
|
Object.keys(spellKeys).forEach((key) => {
|
|
if (spell[`${key}`] && spell[`${key}`] != null) {
|
|
update[`${section}_${spellKeys[key]}`] = spell[`${key}`];
|
|
};
|
|
});
|
|
|
|
// FLAG
|
|
update[`${section}_flag`] = "display";
|
|
|
|
// TYPE
|
|
update[`${section}_type`] = (spell.type === "P") ? "Physical" : "Mana";
|
|
|
|
// DRAIN
|
|
update[`${section}_drain`] = spell.dv.replace("F", "");
|
|
|
|
// SET COMBAT TYPE
|
|
if (spell.category.toUpperCase() === "COMBAT") {
|
|
const combatType = spell.descriptors.toUpperCase();
|
|
update[`${section}_combat_type`] =
|
|
(combatType.includes("DIRECT")) ? "Direct, Force " :
|
|
(combatType.includes("INDIRECT")) ? "Indirect, Force ?{Force|}, AP -" :
|
|
"Force ";
|
|
update[`${section}_damage`] = spell.damage;
|
|
}
|
|
|
|
// DURATION
|
|
const duration = spell.duration.toUpperCase();
|
|
update[`${section}_duration`] =
|
|
(duration === "S") ? "Sustained" :
|
|
(duration === "I") ? "Instant" :
|
|
(duration === "P") ? "Permanent" :
|
|
"Special";
|
|
|
|
// NOTES
|
|
if (spell.descriptors != null) {
|
|
update[`${section}_notes`] = spell.descriptors;
|
|
}
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(spell.name), error);
|
|
}
|
|
});
|
|
}
|
|
|
|
// POWERS
|
|
if (character.powers != null && character.powers.power != null) {
|
|
const powersList = getArray(character.powers.power);
|
|
powersList.forEach((power) => {
|
|
try {
|
|
const id = generateRowID();
|
|
const section = `repeating_powers_${id}`;
|
|
|
|
update[`${section}_name`] = (power.fullname != null) ? power.fullname : power.name;
|
|
update[`${section}_rating`] = power.rating;
|
|
|
|
if (power.totalpoints != null) {
|
|
update[`${section}_notes`] = `Total Points: ${power.totalpoints}.`;
|
|
}
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(power.name), error);
|
|
}
|
|
});
|
|
}
|
|
|
|
// LIFESTYLES
|
|
if (character.lifestyles != null && character.lifestyles.lifestyle != null) {
|
|
const lifestyleList = getArray(character.lifestyles.lifestyle);
|
|
lifestyleList.forEach((lifestyle) => {
|
|
try {
|
|
const id = generateRowID();
|
|
const section = `repeating_lifestyle_${id}`;
|
|
|
|
update[`${section}_name`] = lifestyle.name;
|
|
update[`${section}_flag`] = "display";
|
|
|
|
if (lifestyle.qualities != null && lifestyle.qualities.quality) {
|
|
const lqualitiesList = getArray(lifestyle.qualities.quality);
|
|
let lifestyleQualities = "";
|
|
lqualitiesList.forEach((quality) => {
|
|
try {
|
|
lifestyleQualities += (quality.fullname != null) ? quality.fullname : quality.name;
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(quality.name), error);
|
|
}
|
|
});
|
|
|
|
update[`${section}_lifestyle`] = lifestyleQualities;
|
|
}
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(lifestyle.name), error);
|
|
}
|
|
});
|
|
}
|
|
|
|
// CONTACTS
|
|
if (character.contacts != null && character.contacts.contact != null) {
|
|
const contactList = getArray(character.contacts.contact);
|
|
contactList.forEach((contact) => {
|
|
try {
|
|
const id = generateRowID();
|
|
const section = `repeating_contacts_${id}`;
|
|
let contactNotes = "";
|
|
|
|
update[`${section}_name`] = (contact.role != null) ? `${contact.name} (${contact.role})` : `${contact.name}`;
|
|
update[`${section}_loyalty`] = contact.loyalty;
|
|
update[`${section}_connection`] = contact.connection;
|
|
update[`${section}_flag`] = "display";
|
|
|
|
["metatype", "sex", "age", "preferredpayment", "hobbiesvice", "personallife"].forEach((detail) => {
|
|
if (contact[`${detail}`] != null) {
|
|
contactNotes += `${contact[`${detail}`]}. `
|
|
}
|
|
});
|
|
|
|
update[`${section}_notes`] = contactNotes;
|
|
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(contact.name), error);
|
|
}
|
|
});
|
|
}
|
|
|
|
// VEHICLE KEYS
|
|
const vehicleKeys = {
|
|
"handling": "handling_base"
|
|
,"accel": "acceleration_base"
|
|
,"speed": "speed_base"
|
|
,"body": "body_base"
|
|
,"armor": "armor_base"
|
|
,"sensor": "sensor_base"
|
|
,"pilot": "pilot_base"
|
|
};
|
|
|
|
// VEHICLES
|
|
if (character.vehicles != null && character.vehicles.vehicle != null) {
|
|
const vehicleList = getArray(character.vehicles.vehicle);
|
|
vehicleList.forEach(vehicle => {
|
|
try {
|
|
const id = generateRowID();
|
|
const section = `repeating_vehicle_${id}`;
|
|
let vehicleNotes = "";
|
|
|
|
update[`${section}_name`] = vehicle.name;
|
|
update[`${section}_flag`] = "display";
|
|
|
|
for (const [chummerKey, roll20Attr] of Object.entries(vehicleKeys)) {
|
|
if (vehicle[`${chummerKey}`] && vehicle[`${chummerKey}`] != null) {
|
|
update[`${section}_${roll20Attr}`] = checkForModifiedAttribute(vehicle[`${chummerKey}`])
|
|
}
|
|
}
|
|
|
|
["attack", "sleaze", "dataprocessing", "firewall", "devicerating"].forEach((matrixAttr) => {
|
|
vehicleNotes +=
|
|
matrixAttr === "devicerating" ? `Device Rating (${vehicle[`${matrixAttr}`]}) ` :
|
|
matrixAttr === "firewall" ? `${vehicle[`${matrixAttr}`]} ` :
|
|
`${vehicle[`${matrixAttr}`]}/`;
|
|
});
|
|
|
|
if (vehicle.mods != null && vehicle.mods.mod != null) {
|
|
const vehicleModsList = getArray(vehicle.mods.mod);
|
|
vehicleNotes += "Mods: "
|
|
vehicleModsList.forEach(mod => {
|
|
vehicleNotes += mod.fullname != null ? `${mod.fullname}, ` : `${mod.name}, `;
|
|
});
|
|
}
|
|
|
|
if (vehicle.gears != null && vehicle.gears.gear != null) {
|
|
const vehicleGearList = getArray(vehicle.gears.gear);
|
|
vehicleNotes += "Gear: "
|
|
vehicleGearList.forEach(gear => {
|
|
if (gear.children != null && gear.children.gear != null) {
|
|
const vehicleChildrenList = getArray(gear.children.gear);
|
|
let vehicleChildrenNotes = "";
|
|
vehicleChildrenList.forEach(child => vehicleChildrenNotes += `${child.name}, `);
|
|
vehicleNotes += `${gear.name} (${vehicleChildrenNotes}), `;
|
|
} else {
|
|
vehicleNotes += `${gear.name}, `;
|
|
};
|
|
});
|
|
}
|
|
|
|
update[`${section}_notes`] = vehicleNotes;
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(vehicle.name), error);
|
|
}
|
|
});
|
|
}
|
|
|
|
//COMPLEX FORMS
|
|
if (character.complexforms != null && character.complexforms.complexform != null) {
|
|
const complexFormsList = getArray(character.complexforms.complexform);
|
|
complexFormsList.forEach(chummerForm => {
|
|
try {
|
|
const section = `repeating_forms_${generateRowID()}`;
|
|
const convertAbbreviation = duration => {
|
|
switch(duration) {
|
|
case "E":
|
|
return "extended"
|
|
case "I":
|
|
return "instant"
|
|
case "P":
|
|
return "permanent"
|
|
case "S":
|
|
return "sustained"
|
|
default:
|
|
return "other"
|
|
}
|
|
}
|
|
|
|
const splitFade = value => value.includes('L+') || value.includes('L-') ? value.slice(1) : value
|
|
|
|
update[`${section}_name`] = chummerForm.name
|
|
update[`${section}_target`] = chummerForm.target.toLowerCase()
|
|
update[`${section}_duration`] = convertAbbreviation(chummerForm.duration)
|
|
update[`${section}_fade`] = splitFade(chummerForm.fv)
|
|
update[`${section}_flag`] = "display";
|
|
|
|
} catch (error) {
|
|
setText["error"] += addFeedback(JSON.stringify(form.name), error);
|
|
}
|
|
})
|
|
}
|
|
|
|
return { text: setText, character: update}
|
|
}
|
|
|
|
|
|
const importChummer = character => {
|
|
//Match Chummer JSON keys with their sheet attribute.
|
|
//Chummer name is the key, Roll20 sheet atribute is the value.
|
|
new Promise((resolve, reject) => {
|
|
const Roll20Character = associateChummerData(character)
|
|
setCharmancerText(Roll20Character.text);
|
|
resolve(Roll20Character.character)
|
|
}).then(Roll20Character => {
|
|
setAttrs(Roll20Character)
|
|
return importerHiddenInputsBuilder(Roll20Character)
|
|
}).then(importerHiddenInputs => {
|
|
setCharmancerText(importerHiddenInputs)
|
|
})
|
|
}
|
|
// APPLY Changes
|
|
on("clicked:import_launch", () => startCharactermancer("importer"))
|
|
|
|
on("mancerfinish:apply", () => {
|
|
const mancerData = getCharmancerData();
|
|
const mancerValues = mancerData["importer"].values;
|
|
|
|
Object.keys(mancerValues).forEach((key) => {
|
|
if (key == "builder" || key == "jsonData" || key == "hidden") {
|
|
delete mancerValues[key];
|
|
};
|
|
});
|
|
|
|
clean();
|
|
setAttrs(mancerValues, () => {
|
|
deleteCharmancerData(["importer"]);
|
|
finishCharactermancer();
|
|
});
|
|
});
|
|
// CHARACTERMANCER IMPORTER
|
|
|
|
const buildDirectionsString = characterSoftware => {
|
|
const chummerDirections = `
|
|
<li>In Chummer mark your character as created</li>
|
|
<li>Go to File -> Export -> Export JSON</li>
|
|
<li>Copy the JSON in the file</li>`
|
|
|
|
const herolabDirections = `
|
|
<li>Export your character from Hero Lab as XML</li>
|
|
<li>Go to the website
|
|
<input style='width:45%' type='text' value='http://beautifytools.com/xml-to-json-converter.php' />
|
|
</li>
|
|
<li>Copy the XML into the left side</li>
|
|
<li>Click the button that says "<b>Convert</b>"</li>
|
|
<li>Click the button that says "<b>Minify json</b>"</li>
|
|
<li>Copy the Results</li>
|
|
`
|
|
|
|
const directions = `
|
|
<ol>
|
|
${characterSoftware === "Chummer" ? chummerDirections : herolabDirections}
|
|
<li>Paste it into the textfield below</li>
|
|
<li>Click the Import button</li>
|
|
<li>Move to the Results section below</li>
|
|
</ol>
|
|
`
|
|
|
|
return directions
|
|
}
|
|
|
|
const buildNotesString = characterSoftware => {
|
|
const chummerNotes = `
|
|
<h3>Chummer Notes</h3>
|
|
<ul>
|
|
<li>
|
|
Chummer frequently has the wrong information for <strong>Weapons</strong>. Review them in the Arms tab after clicking apply.
|
|
</li>
|
|
<li>
|
|
<strong>specialization</strong> will not be applied to Weapons or Magic. You will need to manually update the checkbox.
|
|
</li>
|
|
</ul>
|
|
`
|
|
const herolabNotes = `
|
|
<h3>Hero Lab Notes</h3>
|
|
<ul>
|
|
<li>
|
|
Drugs and other effects are not accounted for. They will be applied to your base attributes.
|
|
</li>
|
|
<li>
|
|
This will overwrite some data but not all. Be sure to review the character after.
|
|
</li>
|
|
</ul>
|
|
`
|
|
|
|
return characterSoftware == "Chummer" ? chummerNotes : herolabNotes
|
|
}
|
|
|
|
on("page:importer", () => {
|
|
const defaultBuilder = "Chummer"
|
|
setAttrs({builder: defaultBuilder});
|
|
setCharmancerText({ "directions" : buildDirectionsString(defaultBuilder) })
|
|
});
|
|
|
|
on("clicked:import", () => {
|
|
const mancerData = getCharmancerData();
|
|
const mancerValues = mancerData["importer"].values;
|
|
let applyEnabled = true;
|
|
let setText = {};
|
|
|
|
// Verify the user entered a JSON in the textarea. If not, provide user feedabck.
|
|
if (mancerValues.jsonData) {
|
|
const parsedData = JSON.parse(mancerValues.jsonData) || false;
|
|
|
|
setText[`import-feedback`] = "";
|
|
// There is a value in the textarea! Check to see if its a valid JSON. Provide users feeadback
|
|
if (parsedData) {
|
|
setText[`import-feedback`] += `<p class="feedback">A valid JSON was pasted into the importer for ${mancerValues.builder}.</p>`
|
|
// Send the parsed data to the selected importer or let users know something went wrong
|
|
if (mancerValues.builder && mancerValues.builder === "Chummer") {
|
|
if (parsedData.characters && parsedData.characters.character) {
|
|
importChummer(parsedData.characters.character);
|
|
} else {
|
|
setText[`import-feedback`] += `<p class="warning">Parsed JSON is missing character data. Was this a exported from Chummer?</p>`;
|
|
applyEnabled = false
|
|
}
|
|
} else if (mancerValues.builder && mancerValues.builder === "Hero Lab") {
|
|
if (parsedData.document && parsedData.document.public && parsedData.document.public.character) {
|
|
importHeroLab(parsedData.document.public.character);
|
|
} else {
|
|
setText[`import-feedback`] += `<p class="warning">Parsed JSON did not have the expected object keys. Was this converted with "Minify json" from Beautify Tools ?</p>`;
|
|
applyEnabled = false
|
|
}
|
|
} else {
|
|
setText[`import-feedback`] += `<p class="warning">A character builder was not selected. Try changing your selection then change it back if needed.</p>`;
|
|
applyEnabled = false
|
|
}
|
|
} else {
|
|
setText[`import-feedback`] += `<p class="warning"><span>The text imported is not a valid JSON. Verify the JSON is formatted correctly. Check the format at,</span> JSONLint.com.</p>`;
|
|
applyEnabled = false
|
|
};
|
|
} else {
|
|
setText[`import-feedback`] = `<p class="warning">No information was entered in the JSON text area.</p>`;
|
|
applyEnabled = false
|
|
};
|
|
|
|
let buttonStatus = (applyEnabled) ? "" : "disabled";
|
|
setText[`finish-button`] = `<button class="finish" type="finish" value="apply" data-i18n="apply" ${buttonStatus}>Apply</button>`;
|
|
|
|
setCharmancerText(setText);
|
|
});
|
|
|
|
on("mancerchange:builder", eventinfo => setCharmancerText({
|
|
directions : buildDirectionsString(eventinfo.newValue),
|
|
notes: buildNotesString(eventinfo.newValue)
|
|
}))
|
|
|
|
const clean = () => {
|
|
['active', 'knowledge', 'language', 'quality', 'martial',
|
|
'range', 'melee', 'weapon', 'armor', 'augementations',
|
|
'items', 'NPCspell', 'spell', 'rituals', 'preps', 'powers',
|
|
'contacts', 'vehicle', 'lifestyle', "programs", "forms"].forEach(group => {
|
|
getSectionIDs(`repeating_${group}`, ids => ids.forEach(id => removeRepeatingRow(`repeating_${group}_${id}`)))
|
|
});
|
|
};
|
|
|
|
//USEFUL FUNCTIONS
|
|
const capitialize = (string) => string.charAt(0).toUpperCase() + string.slice(1)
|
|
|
|
const addFeedback = (attribute, value) => `<p class="feedback"><strong>${capitialize(attribute)}:</strong> ${value} </p>`
|
|
|
|
const alphabatizeKeys = (unsortedJSON) => {
|
|
let alphabeticalKeys = {};
|
|
Object.keys(unsortedJSON).sort().forEach((key) => {
|
|
alphabeticalKeys[key] = unsortedJSON[key];
|
|
});
|
|
return alphabeticalKeys
|
|
};
|
|
|
|
const getValInParen = value => value.split("(")[1].split(")")[0];
|
|
|
|
const getArray = array => Array.isArray(array) ? array : [ array ]
|
|
|
|
const getSplitNum = value => value.split("/")[0]
|
|
|
|
const checkForModifiedAttribute = value => value.includes("/") ? getSplitNum(value) : value
|
|
</script>
|
|
|
|
<!-- CHARACTERMANCER IMPORTER -->
|
|
<charmancer class="charmancer-importer">
|
|
<div class="mancer-box">
|
|
<h1 class='text-center'>Shadowrun Fifth Edition Character Importer</h1>
|
|
<p>This will import character data from a generated JSON to the Roll20 Character Sheet. First you will import the data into this charactermancer using the setup section. Secondly you'll review the data in the results section. Finally apply the changes in the complete section. Clicking the apply button will delete all data currently on the sheet.</p>
|
|
<hr />
|
|
<h2>Setup</h2>
|
|
<p>This will section is used to import data into this charactermancer.</p>
|
|
<h3>Pick Character Builder</h3>
|
|
<p>Select your character builder of preference and carefully follow the directions!</p>
|
|
<div class="pick-builder">
|
|
<label title="choose chummer">
|
|
<h4>Chummer</h4>
|
|
<input type="radio" name="comp_builder" value="Chummer" checked />
|
|
</label>
|
|
<!-- <label title="choose hero lab">
|
|
<h4>Hero Lab</h4>
|
|
<input type="radio" name="comp_builder" value="Hero Lab" checked />
|
|
</label> -->
|
|
</div>
|
|
<h3>Directions</h3>
|
|
<div class="directions"></div>
|
|
<h3>Enter JSON Here</h3>
|
|
<textarea name="comp_jsonData" placeholder="Add JSON here"></textarea>
|
|
<button type="action" name="act_import" data-i18n="import">Import</button>
|
|
<hr />
|
|
<h2>Results</h2>
|
|
<div class="import-feedback">
|
|
<p>Review for errors and resolve them in your JSON as needed before completing the import by clicking Apply. </p>
|
|
<h3>Directions</h3>
|
|
<ol>
|
|
<li>Review the data.</li>
|
|
<li>Use the checkbox <strong>Show Hidden Inputs</strong> to fix data, if needed.</li>
|
|
<li>Then move to the Complete section below</li>
|
|
</ol>
|
|
</div>
|
|
<div class="result-grid">
|
|
<h3>Character data to be updated</h3>
|
|
<div class="results"><p>Import button has not been pressed yet.</p></div>
|
|
<h3>Character data not to be updated</h3>
|
|
<div class="error"><p>Import button has not been pressed yet.</p></div>
|
|
</div>
|
|
<h4 class="hidden-header">Show Hidden Inputs</h4>
|
|
<input type="checkbox" name="comp_hidden" value="on">
|
|
<div class="hidden"></div>
|
|
<hr />
|
|
<h2>Complete</h2>
|
|
<p>After reviewing the data above, click Apply. This will <strong>overwrite</strong> data on the sheet where applicable.</p>
|
|
<h3>Directions</h3>
|
|
<ol>
|
|
<li>Click Apply to update the information on the character sheet</li>
|
|
</ol>
|
|
<div class="notes"></div>
|
|
<div class="finish-button">
|
|
<button class="finish" type="finish" value="apply" data-i18n="apply" disabled>Apply</button>
|
|
</div>
|
|
|
|
<div class="bottombar">
|
|
<button class="prev" type="cancel" value="cancel" data-i18n="cancel">Cancel</button>
|
|
</div>
|
|
</div>
|
|
</charmancer>
|
|
|
|
<charmancer class="charmancer-final">
|
|
<div class="charmancer">
|
|
<div class="">
|
|
<h1>Importing your Shadowrun character...overwriting previous data</h1>
|
|
<img alt="emerald productions, llc" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Shadowrun5thEdition/images/EProd_Title_Green.jpg" />
|
|
</div>
|
|
</div>
|
|
</charmancer>
|