Files
roll20-character-sheets/Shadowrun Sixth World/Shadowrun6thEdition.html
T
James C (aka Chuz) d00b83eea6 Bugfix x 2
Bugfix - PC Weapon skills weren't applying the -1 unskilled penalty to some skills, this has been updated however users will need to update the skill to something else and back to trigger the data change.
	Bugfix - PC Sheet imported from Genesis in a non-English language had many problems mostly related to skills.  I believe I've fixed these issues please report any new ones
2022-11-17 16:33:30 -05:00

11200 lines
674 KiB
HTML

<div id='SR6WE' class="compendium-drop-target">
<div class="drop-zone">
<span>Dragging From Compendium</span>
</div>
<input class="sheet_type" name="attr_sheet_type" type="hidden" value="pc"/>
<input class="character-type" name="attr_flag_special" type="hidden" value="mundane"/>
<input class="enable-modifiers" name="attr_enable_modifiers" type="hidden" value="0"/>
<input class="compendium-drop-data" type="hidden" accept="data" name="attr_compendium_drop_data" value="">
<input class="compendium-drop-content" type="hidden" accept="Content" name="attr_compendium_drop_content" value="">
<div class="pc">
<img class="shadowrun-logo" alt="Shadowrun sixth edition logo" src="https://s3.amazonaws.com/files.d20.io/images/204802539/QInmmma8HvUBA90c8e8H8Q/max.png?1614545502"/>
<div class="tabs">
<div class="header-names">
<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>
</div>
<div class="header-toggles">
<span>&nbsp;</span>
<h2 data-i18n-title="whispergm">/w GM</h2>
<label class="switch" data-i18n-title="whispergm" 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="dicepoolmodifiers">Modifiers</h2>
<label class="switch" data-i18n-title="dicepoolmodifiers" title="Dicepool Modifiers">
<input class="whisper-toggle" name="attr_modifiers_toggle" type="checkbox" value="?{Modifiers +/-|0}"/><span class="slider"></span>
</label>
<h2 data-i18n-title="addedgetodicepool">Edge</h2>
<label class="switch" data-i18n-title="addedgetodicepool" title="Add Edge to your dice pool and exploding 6's">
<input class="whisper-toggle" name="attr_edge_toggle" type="checkbox" value="@{edge}"/><span class="slider"></span>
</label>
<h2 data-i18n-title="wilddie">Wild Die</h2>
<label class="switch" data-i18n-title="wilddie" title="Change Last # Dice To Wild Dice">
<input class="whisper-toggle" name="attr_wild_die" type="checkbox" value="?{# Wild Dice?|0}"/><span class="slider"></span>
</label>
<span>&nbsp;</span>
</div>
<div class="header-navtabs">
<input name="attr_tab" type="hidden" value="core"/>
<h1>&nbsp;</h1>
<button name="act_extended_start" class="icon pictos" title="Start Extended Test" type="action" value="">r</button>
<button name="act_d6" class="icon d6" title="Roll D6s" type="action" value="">L</button>
<button class="pictos" name="act_tab_options" title="@{tab}" type="action"><span style="font-family: pictos;">y</span></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>
<button data-i18n="notes" name="act_tab_notes" type="action" title="@{tab}">notes</button>
<button data-i18n="rolls" name="act_tab_rolls" type="action" title="@{tab}">rolls</button>
</div>
</div>
<input class="options_toggle" name="attr_tab" type="hidden" value="options"/>
<div class="static pc-col">
<div class="pc-row core-info">
<div class="header"><div class="triangle"></div><h1 data-i18n="personal">Personal Data</h1></div>
<div class="border-box">
<div class="pc-box small-box">
<div class="row-long pd-nam">
<h2 data-i18n="namealias">NAME/PRIMARY ALIAS</h2><input type="text" name="attr_character_name" placeholder="name" title="@{name}" />
</div>
<div class="row-long pd-meta">
<h2 data-i18n="metatype">Metatype</h2><input type="text" name="attr_metatype" placeholder="metatype" title="@{metatype}" />
<h2 data-i18n="ethnicity">Ethnicity</h2><input type="text" name="attr_ethnicity" placeholder="ethnicity" title="@{ethnicity}" />
</div>
<div class="row-long pd-age">
<h2 data-i18n="age">Age</h2><input type="text" name="attr_age" placeholder="age" title="@{age}" />
<h2 data-i18n="sex">Sex</h2><input type="text" name="attr_sex" placeholder="sex" title="@{sex}" />
<h2 data-i18n="height-u">Height</h2><input type="text" name="attr_height" placeholder="height" title="@{height}" >
<h2 data-i18n="weight">Weight</h2><input type="text" name="attr_weight" placeholder="weight" title="@{weight}" />
</div>
<div class="row-long pd-rep">
<h2 data-i18n="reputation">Reputation</h2><input type="number" name="attr_reputation" placeholder="#" title="@{reputation}" />
<h2 data-i18n="heat">Heat</h2><input type="number" name="attr_heat" placeholder="#" title="@{heat}" />
<h2 class="nuyen">¥</h2><input type="number" name="attr_nuyen" placeholder="0" title="@{nuyen}" />
</div>
<div class="row-long pd-kar">
<h2 data-i18n="karma">Karma</h2><input style="width: 2em;" type="number" name="attr_karma" placeholder="#" title="@{karma}" />
<h2 data-i18n="total karma">Total Karma</h2><input style="width: 2em;" type="number" name="attr_total_karma" placeholder="#" title="@{total_karma}" />
</div>
<div class="row-long pd-kar">
<h2 data-i18n="essence">Base Essence</h2><input disabled="disabled" style="width: 1.5em !important;" type="number" step="0.01" min="0.00" name="attr_essence_base" value="6" title="@{essence_base}" /> + <h2 data-i18n="essencemodifier">Modifier</h2><input style="width: 3em !important;" type="number" step="0.01" min="-6.00" name="attr_essence_mod" placeholder="0" title="@{essence_mod}" /> - <h2 data-i18n="augmentations">Augmentations</h2><span name="attr_aug_essence_cost" title="@{aug_essence_cost}"></span> = <h2 data-i18n="currentessence">Current Essence</h2><span name="attr_essence" title="@{essence}"></span>
</div>
</div>
</div>
</div>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ START OF ATTRIBUTES ROW ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<div class="pc-row">
<div class="header left-header">
<div class="header htab">
<div class="triangle"></div>
<input class="attributes-toggle" name="attr_attributes_toggle" title="@{attributes_toggle}" type="radio" value="effects"/>
<h1>Effects</h1>
<div class="right-tri"></div>
</div>
<div class="header htab">
<div class="triangle"></div>
<input class="attributes-toggle" name="attr_attributes_toggle" title="@{attributes_toggle}" type="radio" value="attributes"/>
<h1 data-i18n="attributes">Attributes</h1>
</div>
</div>
<div class="border-box">
<input class="attributes-toggle" name="attr_attributes_toggle" title="@{attributes_toggle}" type="hidden" value="attributes" />
<div class="attributes-active">
<div class="pc-box medium-box attr-box">
<input type="checkbox" class="settings-toggle" name="attr_flag_attribute" checked="checked" title="Settings toggle" /><span>x</span>
<div class="attr-col attr-col-left">
<!-- ~~:+: Body :+:~~ -->
<input type="hidden" name="attr_body" value="" />
<button class="btn ui-draggable" name="act_body" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{body}}}{{dice=[[(@{body}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}"><span class="red" data-i18n="body">Body</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_body_base" value="1" placeholder="3" title="@{body_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_body_modifier" value="" placeholder="0" title="@{body_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_body" title="@{body}"></span>
</div>
<div class="display"><span name="attr_display_body" title="@{body}"></span></div>
</div>
<!-- ~~:+: Agility :+:~~ -->
<input type="hidden" name="attr_agility" value="" />
<button name="act_agility" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{agility}}}{{dice=[[(@{agility}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span class="red" data-i18n="agility">Agility</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_agility_base" value="1" placeholder="3" title="@{agility_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_agility_modifier" value="" placeholder="0" title="@{agility_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_agility" title="@{agility}"></span>
</div>
<div class="display"><span name="attr_display_agility" title="@{agility}"></span></div>
</div>
<!-- ~~:+: Reaction :+:~~ -->
<input type="hidden" name="attr_reaction" value="" />
<button name="act_reaction" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{reaction}}}{{dice=[[(@{reaction}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span class="red" data-i18n="reaction">Reaction</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_reaction_base" value="1" placeholder="3" title="@{reaction_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_reaction_modifier" value="" placeholder="0" title="@{reaction_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_reaction" title="@{reaction}"></span>
</div>
<div class="display"><span name="attr_display_reaction" title="@{reaction}"></span></div>
</div>
<!-- ~~:+: Strength :+:~~ -->
<input type="hidden" name="attr_strength" value="" />
<button name="act_strength" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{strength}}}{{dice=[[(@{strength}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span class="red" data-i18n="strength">Strength</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_strength_base" value="1" placeholder="3" title="@{strength_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_strength_modifier" value="" placeholder="0" title="@{strength_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_strength" title="@{strength}"></span>
</div>
<div class="display"><span name="attr_display_strength" title="@{strength}"></span></div>
</div>
<!-- ~~:+: Willpower :+:~~ -->
<input type="hidden" name="attr_willpower" value="" />
<button name="act_willpower" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{willpower}}}{{dice=[[(@{willpower}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="willpower">Willpower</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_willpower_base" value="1" placeholder="3" title="@{willpower_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_willpower_modifier" value="" placeholder="0" title="@{willpower_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_willpower" title="@{willpower}"></span>
</div>
<div class="display"><span name="attr_display_willpower" title="@{willpower}"></span></div>
</div>
<!-- ~~:+: Logic :+:~~ -->
<input type="hidden" name="attr_logic" value="" />
<button name="act_logic" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{logic}}}{{dice=[[(@{logic}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="logic">Logic</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_logic_base" value="1" placeholder="3" title="@{logic_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_logic_modifier" value="" placeholder="0" title="@{logic_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_logic" title="@{logic}"></span>
</div>
<div class="display"><span name="attr_display_logic" title="@{logic}"></span></div>
</div>
<!-- ~~:+: Intuition :+:~~ -->
<input type="hidden" name="attr_intuition" value="" />
<button name="act_intuition" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{intuition}}}{{dice=[[(@{intuition}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="intuition">Intuition</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_intuition_base" value="1" placeholder="3" title="@{intuition_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_intuition_modifier" value="" placeholder="0" title="@{intuition_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_intuition" title="@{intuition}"></span>
</div>
<div class="display"><span name="attr_display_intuition" title="@{intuition}"></span></div>
</div>
<!-- ~~:+: Charisma :+:~~ -->
<input type="hidden" name="attr_charisma" value="" />
<button name="act_charisma" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{charisma}}}{{dice=[[(@{charisma}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="charisma">Charisma</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_charisma_base" value="1" placeholder="3" title="@{charisma_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_charisma_modifier" value="" placeholder="0" title="@{charisma_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_charisma" title="@{charisma}"></span>
</div>
<div class="display"><span name="attr_display_charisma" title="@{charisma}"></span></div>
</div>
<!-- ~~:+: Edge :+:~~ -->
<button name="act_edge" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{edge}}}{{dice=[[(@{edge}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="edge">Edge</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_edge" value="1" placeholder="3" title="@{edge}" />
</div>
<div class="display"><span name="attr_edge" title="@{edge}"></span></div>
</div>
<div class="edg-hex" style="width: 100%;">
<input class="edge-zero" type="hidden" name="attr_edge_hex" value="0"/>
<input class="hex-hider" type="hidden" name="attr_edge_max" value="7"/>
<input type="hidden" name="attr_edge_hex_max" value="7"/>
<input type="checkbox" name="attr_edge_hex" value="1" /><span class="hexagon"></span>
<input type="checkbox" name="attr_edge_hex" value="2" /><span class="hexagon"></span>
<input type="checkbox" name="attr_edge_hex" value="3" /><span class="hexagon"></span>
<input type="checkbox" name="attr_edge_hex" value="4" /><span class="hexagon"></span>
<input type="checkbox" name="attr_edge_hex" value="5" /><span class="hexagon"></span>
<input type="checkbox" name="attr_edge_hex" value="6" /><span class="hexagon"></span>
<input type="checkbox" name="attr_edge_hex" value="7" /><span class="hexagon"></span>
</div>
</div>
<div class="attr-col attr-col-right">
<!-- ~~:+: Magic or Resonance :+:~~ -->
<input type="hidden" name="attr_display_magic" value="" />
<input type="hidden" name="attr_magic_max" value="6" />
<input type="hidden" name="attr_display_resonance" value="" />
<label data-i18n="magicres">Magic/Resonance</label>
<div class="attr-und">
<div class="settings">
<div class="hide-magic">
<input type="number" name="attr_magic_base" placeholder="0" title="@{magic_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_magic_modifier" placeholder="0" title="@{magic_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_magic" title="@{magic}"></span>
</div>
<div class="hide-resonance">
<input type="number" name="attr_resonance_base" placeholder="0" title="@{resonance_base}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_resonance_modifier" placeholder="0" title="@{resonance_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_display_resonance" title="@{resonance}"></span>
</div>
</div>
<div class="display">
<div class="hide-magic"><span name="attr_display_magic" title="@{magic}"></span></div>
<div class="hide-resonance"><span name="attr_display_resonance" title="@{resonance}"></span></div>
</div>
</div>
<!-- ~~:+: Initiative :+:~~ -->
<input type="hidden" name="attr_initiative_base" value="0" />
<input type="hidden" name="attr_initiative_dice_mod" value="1" />
<input type="hidden" name="attr_initiative_dice" value="1" />
<button class="attr-ini" name="act_initiative" type="action" value="@{gm_toggle} &{template:rolls}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{initiative}}}{{dice=[[ceil([[(@{initiative_base}+@{modifiers_toggle})+(1d6cf0 + (@{initiative_dice} + @{wounds_toggle} - 1)d6cf0)]] @{combat_paralysis_initiative_mod}) &{tracker}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}">
<span class="attr-ini red init-settings" data-i18n="initiative">Initiative</span>
<span class="attr-ini red init-display" data-i18n="initiative">Initiative</span>
</button>
<div class="attr-und attr-ini">
<div class="settings">
<input type="number" name="attr_initiative_mod" value="0" placeholder="0" title="@{initiative_mod}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_initiative_dice_mod" value="0" min="0" max="4" placeholder="0" title="@{initiative_dice_mod}" />
<span class="tiny-span"> = </span>
<span name="attr_display_initiative_base"></span><span class="tiny-span"> + </span>
<span name="attr_initiative_dice"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
<div class="display">
<span name="attr_display_initiative_base" title="@{display_initiative_base}"></span><span class="tiny-span"> + </span>
<span name="attr_initiative_dice" title="@{initiative_dice}"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
</div>
<!-- ~~:+: Astral Initative :+:~~ -->
<input type="hidden" name="attr_astral_initiative_base" value="0" />
<input type="hidden" name="attr_astral_initiative_dice_mod" value="0" />
<input type="hidden" name="attr_astral_initiative_dice" value="2" />
<div class="hide-magic" style="width: 100% !important">
<button class="attr-ini" name="act_astral_initiative" type="action" value="@{gm_toggle} &{template:rolls}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{astral} ^{initiative}}}{{dice=[[ceil([[(@{astral_initiative_base}+@{modifiers_toggle})+(1d6cf0 + (@{astral_initiative_dice} + @{wounds_toggle} - 1)d6cf0)]] @{combat_paralysis_initiative_mod}) &{tracker}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}">
<span class="attr-ini red init-settings" data-i18n="astralini">Astral Init</span>
<span class="attr-ini red init-display" data-i18n="astralinitiative">Astral Initiative</span>
</button>
<div class="attr-und attr-ini">
<div class="settings">
<input type="number" name="attr_astral_initiative_mod" value="0" placeholder="modifier" title="@{astral_initiative_mod}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_astral_initiative_dice_mod" value="0" min="0" max="3" placeholder="0" title="@{astral_initiative_dice_mod}" />
<span class="tiny-span"> = </span>
<span name="attr_display_astral_initiative_base" title="@{display_astral_initiative_base}"></span><span class="tiny-span"> + </span>
<span name="attr_astral_initiative_dice" title="@{astral_initiative_dice}"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
<div class="display">
<span name="attr_display_astral_initiative_base" title="@{display_astral_initiative_base}"></span><span class="tiny-span"> + </span>
<span name="attr_astral_initiative_dice" title="@{astral_initiative_dice}"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
</div>
</div>
<!-- ~~:+: Matrix Initative :+:~~ -->
<input type="hidden" name="attr_matrix_initiative_base" value="0" />
<input type="hidden" name="attr_matrix_initiative_dice_mod" value="0" />
<input type="hidden" name="attr_matrix_initiative_dice" value="0" />
<button class="attr-ini" name="act_matrix_initiative" type="action" value="@{gm_toggle} &{template:rolls}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{matrixinitiative}}}{{dice=[[ceil([[(@{matrix_initiative_base}+@{modifiers_toggle})+(1d6cf0 + (@{matrix_initiative_dice}+@{wounds_toggle} - 1)d6cf0)]] @{combat_paralysis_initiative_mod}) &{tracker}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}">
<span class="attr-ini red init-settings" data-i18n="matrixinit">Matrix AR Ini</span>
<span class="attr-ini red init-display" data-i18n="matrixinitiative">Matrix AR Initiative</span>
</button>
<div class="attr-und attr-ini">
<div class="settings">
<input type="number" name="attr_matrix_initiative_mod" value="0" placeholder="0" title="@{matrix_initiative_mod}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_matrix_initiative_dice_mod" value="0" min="0" max="5" placeholder="0" title="@{matrix_initiative_dice_mod}" />
<span class="tiny-span"> = </span>
<span name="attr_matrix_initiative_base" title="@{matrix_initiative_base}"></span><span class="tiny-span"> + </span>
<span name="attr_matrix_initiative_dice" title="@{matrix_initiative_dice}"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
<div class="display">
<span name="attr_matrix_initiative_base" title="@{matrix_initiative_base}"></span><span class="tiny-span"> + </span>
<span name="attr_matrix_initiative_dice" title="@{matrix_initiative_dice}"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
</div>
<!-- ~~:+: Cold Sim VR Initative :+:~~ -->
<input type="hidden" name="attr_cold_sim_initiative_base" value="0" />
<input type="hidden" name="attr_cold_sim_initiative_dice_mod" value="0" />
<input type="hidden" name="attr_cold_sim_initiative_dice" />
<button class="attr-ini" name="act_cold_sim_initiative" type="action" value="@{gm_toggle} &{template:rolls}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{coldsiminitiative}}}{{dice=[[ceil([[(@{cold_sim_initiative_base}+@{modifiers_toggle})+(1d6cf0 + (@{cold_sim_initiative_dice}+@{wounds_toggle} - 1)d6cf0)]] @{combat_paralysis_initiative_mod}) &{tracker}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}">
<span class="attr-ini red init-settings" data-i18n="coldsiminit">Cold Sim Init</span>
<span class="attr-ini red init-display" data-i18n="coldsiminitiative">Cold Sim VR Initiative</span>
</button>
<div class="attr-und attr-ini">
<div class="settings">
<input type="number" name="attr_cold_sim_initiative_mod" value="0" placeholder="0" title="@{cold_sim_initiative_mod}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_cold_sim_initiative_dice_mod" value="0" min="0" max="5" placeholder="0" title="@{cold_sim_initiative_dice_mod}" />
<span class="tiny-span"> = </span>
<span name="attr_cold_sim_initiative_base" title="@{cold_sim_initiative_base}"></span><span class="tiny-span"> + </span>
<span name="attr_cold_sim_initiative_dice" title="@{cold_sim_initiative_dice}"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
<div class="display">
<span name="attr_cold_sim_initiative_base" title="@{cold_sim_initiative_base}"></span><span class="tiny-span"> + </span>
<span name="attr_cold_sim_initiative_dice" title="@{cold_sim_initiative_dice}"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
</div>
<!-- ~~:+: Hot Sim VR Initative :+:~~ -->
<input type="hidden" name="attr_hot_sim_initiative_base" value="0" />
<input type="hidden" name="attr_hot_sim_initiative_dice_mod" value="0" />
<input type="hidden" name="attr_hot_sim_initiative_dice" value="0" />
<button class="attr-ini" name="act_hot_sim_initiative" type="action" value="@{gm_toggle} &{template:rolls}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{hotsiminitiative}}}{{dice=[[ceil([[(@{hot_sim_initiative_base}+@{modifiers_toggle})+(1d6cf0+ (@{hot_sim_initiative_dice}+@{wounds_toggle}-1)d6cf0)]] @{combat_paralysis_initiative_mod}) &{tracker}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}">
<span class="attr-ini red init-settings" data-i18n="hotsiminit">Hot Sim Init</span>
<span class="attr-ini red init-display" data-i18n="hotsiminitiative">Hot Sim VR Initiative</span>
</button>
<div class="attr-und attr-ini">
<div class="settings">
<input type="number" name="attr_hot_sim_initiative_mod" value="0" placeholder="0" title="@{hot_sim_initiative_mod}" /><span class="tiny-span"> + </span>
<input type="number" name="attr_hot_sim_initiative_dice_mod" value="0" min="0" max="5" placeholder="0" title="@{hot_sim_initiative_dice_mod}" />
<span class="tiny-span"> = </span>
<span name="attr_hot_sim_initiative_base" title="@{hot_sim_initiative_base}"></span><span class="tiny-span"> + </span>
<span name="attr_hot_sim_initiative_dice" title="@{hot_sim_initiative_dice}"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
<div class="display">
<span name="attr_hot_sim_initiative_base" title="@{hot_sim_base}"></span><span class="tiny-span"> + </span>
<span name="attr_hot_sim_initiative_dice" title="@{hot_sim_dice}"></span><span class="tiny-span" data-i18n="d6">d6</span>
</div>
</div>
<!-- ~~:+: Composure :+:~~ -->
<input type="hidden" name="attr_composure" value="" />
<button name="act_composure" data-i18n-title="Willpower + Charisma" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{composure}}}{{dice=[[(@{composure}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="composure">Composure</span></button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_composure_modifier" placeholder="0" title="@{composure_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_composure" title="@{composure}"></span>
</div>
<div class="display">
<span name="attr_composure" title="@{composure}"></span>
</div>
</div>
<!-- ~~:+: Judge Intentions :+:~~ -->
<input type="hidden" name="attr_judge_intentions" value="" />
<button name="act_judge_intentions" data-i18n-title="Willpower + Intuition" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{judgeintentions}}}{{dice=[[(@{judge_intentions}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span data-i18n="judgeintentions">Judge Intentions</span>
</button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_judge_intentions_modifier" placeholder="0" title="@{judge_intentions_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_judge_intentions" title="@{judge_intentions}"></span>
</div>
<div class="display">
<span name="attr_judge_intentions" title="@{judge_intentions}"></span>
</div>
</div>
<!-- ~~:+: Memory :+:~~ -->
<input type="hidden" name="attr_memory" value="" />
<button name="act_memory" data-i18n-title="Logic + Intuition" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{memory}}}{{dice=[[(@{memory}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span data-i18n="memory">Memory</span>
</button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_memory_modifier" placeholder="0" title="@{memory_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_memory" title="@{memory}"></span>
</div>
<div class="display">
<span name="attr_memory" title="@{memory}"></span>
</div>
</div>
<!-- ~~:+: Social Rating :+:~~ -->
<input type="hidden" name="attr_social_rating" value="" />
<button type="action" name="act_social_rating" data-i18n-title="social_rating_desc" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{social_rating}}}{{rating=@{social_rating}}}">
<span data-i18n="social_rating">Social Rating</span>
</button>
<div class="attr-und">
<div class="settings">
<span name="attr_social_rating" title="@{social_rating}"></span>
</div>
<div class="display">
<span name="attr_social_rating" title="@{social_rating}"></span>
</div>
</div>
<!-- ~~:+: Lift & Carry :+:~~ -->
<input type="hidden" name="attr_lift_carry" value="" />
<button name="act_lift_carry" data-i18n-title="Body + Willpower" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{liftcarry}}}{{dice=[[(@{lift_carry}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span data-i18n="liftcarry">Lift & Carry</span>
</button>
<div class="attr-und">
<div class="settings">
<input type="number" name="attr_lift_carry_modifier" placeholder="0" title="@{lift_carry_modifier}" /><span class="tiny-span"> = </span>
<span class="totals" name="attr_lift_carry" title="@{lift_carry}"></span>
</div>
<div class="display">
<span name="attr_lift_carry" title="@{lift_carry}"></span>
</div>
</div>
<!-- ~~:+: Walk & Run :+:~~ -->
<label data-i18n="movement">Movement</label>
<div class="attr-und">
<div class="settings">
<input style="width: 1.75em !important;" type="number" name="attr_move_speed" value="10" placeholder="10" title="@{move_speed}" />
<span class="tiny-span">/</span>
<input style="width: 1.75em !important;" type="number" name="attr_sprint_speed" value="15" placeholder="15" title="@{sprint_speed}" />
<span class="tiny-span">+</span>
<input style="width: 1.5em !important;" type="number" name="attr_sprint_modifier" value="1" title="@{sprint_modifier}" />
</div>
<div class="display">
<button name="act_sprint" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=@{sprint_speed}+(Athletics+Agility hits * @{sprint_modifier})}}{{dice=[[@{sprint_speed}+((@{athletics}+@{agility}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle} * @{sprint_modifier})]] meters}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span data-i18n="sprint">Sprint</span>
</button>
</div>
</div>
</div>
</div>
</div><!-- ~~~~~~~~ End of PC Attributes~~~~~~~~ -->
<div class="attributes-effects">
<div class="pc-box medium-box attr-box">
<div class="rows repeating-container">
<div class="row-long headers">
<span></span>
<h2 data-i18n="name">Name</h2>
<h2 data-i18n="duration">Duration</h2>
<h2 data-i18n="source">Source</h2>
</span></span>
</span></span>
</div>
<fieldset class="repeating_effects">
<input class="settings-flag" name="attr_flag" type="hidden" value="settings"/>
<div class="buttons">
<input class="toggle" name="attr_active" value="on" type="checkbox" checked="checked"/>
<span class="pictos powerbutton">2</span>
</div>
<span name="attr_name" title="@{repeating_effects_${x}_name}"></span>
<span class="text-align-center" name="attr_duration" title="@{repeating_effects_${x}_duration}"></span>
<span class="text-align-center" name="attr_source" title="@{repeating_effects_${x}_source}"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
</span>&nbsp;</span>
<input type="text" name="attr_name" value="" placeholder="" title="Effect Name" />
<input type="text" name="attr_duration" value="" placeholder="" title="Duration" />
<input type="text" name="attr_source" value="" placeholder="" title="Source" />
</span></span>
</span></span>
<label data-i18n-title="notes" title="notes"><span data-i18n="notes">Notes</span>
<textarea name="attr_notes" placeholder="Notes" title="{repeating_effects_${x}_notes}"></textarea>
</label>
<label data-i18n-title="modifications" title="modifications"><span data-i18n="modifications">Modifications</span>
<textarea name="attr_modifications" placeholder="Modifications" title="{repeating_effects_${x}_modifications}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div><!-- ~~~~~~~~ End of PC Effects ~~~~~~~~ -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ START OF Knowledge/Skills ROW ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<div class="pc-row">
<div class="header left-header">
<div class="header htab">
<div class="triangle"></div>
<input class="skills-toggle" name="attr_skills_toggle" title="@{skills_toggle}" type="radio" value="knowledge"/>
<h1>Knowledge</h1>
<div class="right-tri"></div>
</div>
<div class="header htab">
<div class="triangle"></div>
<input class="skills-toggle" name="attr_skills_toggle" title="@{skills_toggle}" type="radio" value="active" checked="checked"/>
<h1>Skills</h1>
</div>
</div>
<div class="border-box skill-box">
<div class="pc-box medium-box">
<input class="skills-toggle" name="attr_skills_toggle" type="hidden" value="active"/>
<div class="skills-active">
<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="mod">Mod</h2>
<h2 data-i18n="attribute">Attribute</h2>
</div>
<div class="row-long">
<input name="attr_default_display" type="hidden" value="Agility"/>
<button data-i18n="default" name="act_default" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{default} = @{default_display} - 1}}{{dice=[[((@{default_attribute}+@{unskilled_mod}+-1)+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">default</button><span class="text-align-center">-1</span>
<input name="attr_unskilled_mod" min="0" placeholder="0" type="number" step="1" value="0" title="attr_unskilled_mod"/>
<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>
</div>
<fieldset class="repeating_skills">
<input name="attr_display_rating" type="hidden"/>
<input name="attr_display_name" type="hidden"/>
<input name="attr_display_spec" type="hidden" value=""/>
<input name="attr_display_expert" type="hidden" value=""/>
<input name="attr_display_attribute" type="hidden" value="Intuition"/>
<input name="attr_dicepool" type="hidden" value="0"/>
<input class="settings-flag" name="attr_flag" type="hidden" value="settings"/>
<div class="buttons">
<button name="act_skill" class="skill" type="action" value=""><span name="attr_display_name"></span></button>
<span class="skill-button-hider" name="attr_spec">hideme</span><button name="act_spec" class="skill_spec" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} +2 (Spec: @{display_spec})}}{{dice=[[((@{rating}+@{attribute}+@{mod}+2)+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{spec}\n@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span class="skill_spec" name="attr_display_spec"></span></button>
<span class="skill-button-hider" name="attr_expert">hideme</span><button name="act_expert" class="skill_expert" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} +3 (Expert: @{display_expert})}}{{dice=[[((@{rating}+@{attribute}+@{mod}+3)+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Expertise: @{expert}\n@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span class="skill_expert" name="attr_display_expert"></span></button>
</div>
<span class="text-align-center" name="attr_rating" title="@{repeating_skills_${x}_rating}"></span>
<input name="attr_mod" step="1" value="0" placeholder="0" type="number" title="mod"/>
<select class="attribute-select" name="attr_attribute" title="undefined_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}">Charisma</option>
<option data-i18n="magic" value="@{magic}">Magic</option>
<option data-i18n="resonance" value="@{resonance}">Resonance</option>
</select>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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_name" title="name">
<option value="Astral" data-i18n="astral">Astral</option>
<option value="Athletics" data-i18n="athletics">Athletics</option>
<option value="Biotech" data-i18n="biotech">Biotech</option>
<option value="Close Combat" data-i18n="closecombat">Close Combat</option>
<option value="Con" data-i18n="con">Con</option>
<option value="Conjuring" data-i18n="conjuring">Conjuring</option>
<option value="Cracking" data-i18n="cracking">Cracking</option>
<option value="Electronics" data-i18n="electronics">Electronics</option>
<option value="Enchanting" data-i18n="enchanting">Enchanting</option>
<option value="Engineering" data-i18n="engineering">Engineering</option>
<option value="Exotic Weapons" data-i18n="exoticweapons">Exotic Weapons</option>
<option value="Firearms" data-i18n="firearms">Firearms</option>
<option value="Influence" data-i18n="influence">Influence</option>
<option value="Outdoors" data-i18n="outdoors">Outdoors</option>
<option value="Perception" data-i18n="perception">Perception</option>
<option value="Piloting" data-i18n="piloting">Piloting</option>
<option value="Sorcery" data-i18n="sorcery">Sorcery</option>
<option value="Stealth" data-i18n="stealth">Stealth</option>
<option value="Tasking" data-i18n="tasking">Tasking</option>
<option value="Language" data-i18n="language">Language</option>
<option value="Knowledge" data-i18n="knowledge">Knowledge</option>
</select>
<label data-i18n-title="rating" title="rating">
<input name="attr_rating" step="1" placeholder="Rtg" type="number" title="rating" value='' />
</label>
<label data-i18n-title="mod" title="mod">
<input name="attr_mod" value="0" step="1" placeholder="Mod" type="number" title="mod"/>
</label>
<select class="attribute-select" name="attr_attribute" title="undefined_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}" selected="selected">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>
<label data-i18n-title="specialization" title="specialization"> <span class="skill_spec" data-i18n="specialization">specialization</span>
<input name="attr_spec" placeholder="specialization" type="text" title="specialization"/>
</label>
<label data-i18n-title="expertise" title="expertise"> <span class="skill_expert" data-i18n="expertise">Expertise</span>
<input name="attr_expert" placeholder="expertise" type="text" title="expertise"/>
</label>
<label data-i18n-title="notes" title="notes"><span data-i18n="notes">Notes</span>
<textarea name="attr_notes" placeholder="Notes" title="undefined_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
<div class="skills-knowledge">
<div class="rows repeating-container">
<div class="row-long headers">
<h2 data-i18n="knowledge">Knowledge</h2>
<h2 data-i18n="type">Type</h2>
</div>
<fieldset class="repeating_knowledges">
<span name="attr_name"></span>
<span class="center" name="attr_type"></span>
<input class="settings-flag" name="attr_flag" type="hidden" value="settings" title="undefined_flag}"/>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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" value="" placeholder="" title="Knowledge / Language Name" />
<select class="center" data-i18n-title="type" name="attr_type" title="skill_type">
<option data-i18n="knowledge" value="Knowledge">Knowledge</option>
<option data-i18n="language" value="Language">Language</option>
</select>
<label data-i18n-title="notes" title="notes"><span data-i18n="notes">Notes</span>
<textarea name="attr_notes" placeholder="Notes" title="undefined_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="options pc-col">
<div class="pc-row">
<div class="header right-header"><h1 data-i18n="options">Options</h1><div class="right-tri"></div></div>
<div class="border-box">
<div class="pc-box">
<div class="op-col op-col-left">
<div>
<h2 data-i18n="character">Character</h2><br />
<label data-i18n="mundane">Mundane</label><input class="character-type" type="checkbox" name="attr_flag_special" value="mundane" title="@{flag_special}" checked /><br />
<label data-i18n="awakened">Awakened</label><input class="character-type" type="checkbox" name="attr_flag_special" value="magic" title="@{flag_special}" /><br />
<label data-i18n="technomancer">Technomancer</label><input class="character-type" type="checkbox" name="attr_flag_special" value="resonance" title="@{flag_special}" />
</div>
<hr />
<div>
<h2 data-i18n="sheetselect">Sheet Select</h2><br />
<select name="attr_sheet_type" title="@{sheet_type}">
<option value="pc" data-i18n="pc">PC</option>
<option value="grunt" data-i18n="grunt">Grunt</option>
<option value="spirit" data=i18n="spirit">Spirit</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>
</select>
</div>
<hr />
<div>
<h2 data-i18n="misc">Misc</h2><br />
<label data-i18n="enable_edge_rerolls">Enable Edge Rerolls</label><input class="enable-rerolls" type="checkbox" name="attr_rerolls" value="1" title="@{enable_modifiers}" checked="checked" /><br />
<span class="tiny red">Enables Edge Reroll buttons on roll templates (the +, +4s and - buttons).</span><br />
</div>
<hr />
<div>
<h2 data-i18n="modifier_text_boxes">Modifier Text Boxes</h2><br />
<label data-i18n="enable_modifier_changes">Enable Modifier Changes</label><input class="enable-modifiers" type="checkbox" name="attr_enable_modifiers" value="1" title="@{enable_modifiers}" /><br />
<span class="tiny red">Warning: If not used correctly this can break your character data.</span><br />
<label data-i18n="enable_unrestricted_modifiers">Enable Unrestricted Modifiers</label><input type="checkbox" name="attr_enable_unrestricted_modifiers" value="1" title="@{enable_unrestricted_modifiers}" /><br />
</div>
</div>
<div class="op-col op-col-right">
<div>
<h2 data-i18n="temporarymodifiers">Temporary Modifiers</h2><br />
<label data-i18n="defense">Defense</label><input type="number" name="attr_defense_temp" title="@{defense_temp}" value="0" /><input type="checkbox" name="attr_defense_temp_flag" value="on" checked />
<label data-i18n="soak">Soak</label><input type="number" name="attr_soak_temp" title="@{soak_temp}" value="0" /><input type="checkbox" name="attr_soak_temp_flag" value="on" checked />
<hr />
<label data-i18n="body">Body</label><input type="number" name="attr_body_temp" title="@{body_temp}" value="0" /><input type="checkbox" name="attr_body_temp_flag" value="on" checked />
<label data-i18n="agility">Agility</label><input type="number" name="attr_agility_temp" title="@{agility_temp}" value="0" /><input type="checkbox" name="attr_agility_temp_flag" value="on" checked />
<label data-i18n="reaction">Reaction</label><input type="number" name="attr_reaction_temp" title="@{reaction_temp}" value="0" /><input type="checkbox" name="attr_reaction_temp_flag" value="on" checked />
<label data-i18n="strength">Strength</label><input type="number" name="attr_strength_temp" title="@{strength_temp}" value="0" /><input type="checkbox" name="attr_strength_temp_flag" value="on" checked />
<label data-i18n="willpower">Willpower</label><input type="number" name="attr_willpower_temp" title="@{willpower_temp}" value="0" /><input type="checkbox" name="attr_willpower_temp_flag" value="on" checked />
<label data-i18n="logic">Logic</label><input type="number" name="attr_logic_temp" title="@{logic_temp}" value="0" /><input type="checkbox" name="attr_logic_temp_flag" value="on" checked />
<label data-i18n="intuition">Intuition</label><input type="number" name="attr_intuition_temp" title="@{intuition_temp}" value="0" /><input type="checkbox" name="attr_intuition_temp_flag" value="on" checked />
<label data-i18n="charisma">Charisma</label><input type="number" name="attr_charisma_temp" title="@{charisma_temp}" value="0" /><input type="checkbox" name="attr_charisma_temp_flag" value="on" checked />
<label data-i18n="magic">Magic</label><input type="number" name="attr_magic_temp" title="@{magic_temp}" value="0" /><input type="checkbox" name="attr_magic_temp_flag" value="on" checked />
<label data-i18n="resonance">Resonance</label><input type="number" name="attr_resonance_temp" title="@{resonance_temp}" value="0" /><input type="checkbox" name="attr_resonance_temp_flag" value="on" checked />
<hr />
<label data-i18n="initiative">Initiative</label><input type="number" name="attr_initiative_temp" title="@{initiative_temp}" value="0" /><input type="checkbox" name="attr_initiative_temp_flag" value="on" checked />
<label data-i18n="initiativedice">Initiative Dice</label><input type="number" name="attr_initiative_dice_temp" title="@{initiative_dice_temp}" value="0" /><input type="checkbox" name="attr_initiative_dice_temp_flag" value="on" checked />
<label data-i18n="astralinitiative">Astral Initiative</label><input type="number" name="attr_astral_initiative_temp" title="@{astral_initiative_temp}" value="0" /><input type="checkbox" name="attr_astral_initiative_temp_flag" value="on" checked />
<label data-i18n="astralinitiativedice">Initiative Dice</label><input type="number" name="attr_astral_initiative_dice_temp" title="@{astral_initiative_dice_temp}" value="0" /><input type="checkbox" name="attr_astral_initiative_dice_temp_flag" value="on" checked />
<label data-i18n="matrixinitiative">Matrix Initiative</label><input type="number" name="attr_matrix_initiative_temp" title="@{matrix_initiative_temp}" value="0" /><input type="checkbox" name="attr_matrix_initiative_temp_flag" value="on" checked />
<label data-i18n="matrixinitiativedice">Matrix Initiative Dice</label><input type="number" name="attr_matrix_initiative_dice_temp" title="@{matrix_initiative_dice_temp}" value="0" /><input type="checkbox" name="attr_matrix_initiative_dice_temp_flag" value="on" checked />
<label data-i18n="coldsiminitiative">Cold Sim VR Initiative</label><input type="number" name="attr_cold_sim_initiative_temp" title="@{cold_sim_initiative_temp}" value="0" /><input type="checkbox" name="attr_cold_sim_initiative_temp_flag" value="on" checked />
<label data-i18n="coldsiminitiativedice">Cold Sim VR Initiative Dice</label><input type="number" name="attr_cold_sim_initiative_dice_temp" title="@{cold_sim_initiative_dice_temp}" value="0" /><input type="checkbox" name="attr_cold_sim_initiative_dice_temp_flag" value="on" checked />
<label data-i18n="hotsiminitiative">Hot Sim VR Initiative</label><input type="number" name="attr_hot_sim_initiative_temp" title="@{hot_sim_initiative_temp}" value="0" /><input type="checkbox" name="attr_hot_sim_initiative_temp_flag" value="on" checked />
<label data-i18n="hotsiminitiativedice">Hot Sim VR Initiative Dice</label><input type="number" name="attr_hot_sim_initiative_dice_temp" title="@{hot_sim_initiative_dice_temp}" value="0" /><input type="checkbox" name="attr_hot_sim_initiative_dice_temp_flag" value="on" checked />
</div>
</div>
<div class="importer">
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/>
<span class="pictos">c</span>
<div class="collapse importer-input">
<button class="import-button" name="act_import" type="action" value="">Import</button>
<textarea name="attr_import_data" placeholder="WARNING! Anything placed here CAN completely corrupt your character, make a copy!" title="Paste Genesis JSON Here"></textarea>
</div>
<span class="importer-feedback" name="attr_import_feedback"></span>
</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">
<div class="armor-info">
<div>&nbsp;</div>
<button type="action" name="act_dr" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{defense} ^{rating}}}{{rating=@{armor_rating}}}">
<span class="center"><span data-i18n="dr">DR</span> <span name="attr_armor_rating"></span></span>
</button>
<div>&nbsp;</div>
<button type="action" name="act_defense" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{defense} = ^{reaction} + ^{intuition}}}{{dice=[[((@{defense})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" name="defense" title="@{defense} = Reaction + Intuition">Defense</span>
</button>
<div>&nbsp;</div>
<button type="action" name="act_toxin_resist" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{toxin} ^{resistance} = ^{body} + ^{willpower}}}{{dice=[[((@{body}+@{willpower}+?{Toxin Resistance Gear?|0})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" name="toxin_resist" title="Body + Willpower">Resist Toxin</span>
</button>
<div>&nbsp;</div>
<button type="action" name="act_soak" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{soak} ^{damage}}}{{dice=[[((@{soak})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" name="soak" title="@{soak} = Body">Soak Damage</span>
</button>
<div>&nbsp;</div>
</div>
<div class="magic-defense">
<div>&nbsp;</div>
<button type="action" name="act_magic_ar" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{magic} ^{attack} ^{rating}}}{{rating=@{magic_ar}}}{{desc=Magic + @{tradition_attribute}}}">
<span class="center"><span data-i18n="magicar">Magic AR</span> <span name="attr_magic_ar"></span></span>
</button>
<div>&nbsp;</div>
<button type="action" name="act_direct_magic_defense" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{direct} ^{magic} ^{defense}}}{{dice=[[((@{willpower}+@{intuition})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=Willpower + Intuition}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" title="Willpower + Intuition"><span class="center" data-i18n="directmagicdefense">Direct Magic Defense</span></span>
</button>
<div>&nbsp;</div>
<button type="action" name="act_indirect_magic_defense" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{indirect} ^{magic} ^{defense}}}{{dice=[[((@{reaction}+@{willpower})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=Reaction + Willpower}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" title="Reaction + Willpower"><span class="center" data-i18n="indirectmagicdefense">Indirect Magic Defense</span></span>
</button>
<div>&nbsp;</div>
</div>
<div class="matrix-defense">
<div>&nbsp;</div>
<button name="act_matrix_attack_rating" type="action" value="&{template:rolls}{{header=@{character_name}}}{{base=Matrix Attack Rating}}{{rating=[[(@{attack}+@{sleaze})]]}}{{desc=Attack + Sleaze}}" title="Matrix Attack Rating">
<span><span data-i18n="matrix_ar">Matrix AR</span><span name='attr_matrix_attack_rating'></span></span>
</button>
<div>&nbsp;</div>
<button name="act_matrix_defense_rating" type="action" value="&{template:rolls}{{header=@{character_name}}}{{base=Matrix Defense Rating}}{{rating=[[@{matrix_defense_rating}]]}}{{desc=Data Processing + Firewall}}" title="Matrix Defense Rating">
<span><span data-i18n="matrix_dr">Matrix DR</span><span name='attr_matrix_defense_rating'></span></span>
</button>
<div>&nbsp;</div>
<button name="act_soak_matrix" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{matrix} ^{soak} = ^{firewall}}}{{dice=[[(@{firewall}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" title="Firewall"><span class="center" data-i18n="matrixsoak">Matrix Soak</span></span>
</button>
<div>&nbsp;</div>
<button name="act_soak_biofeedback" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{biofeedback} ^{soak} = ^{willpower}}}{{dice=[[(@{willpower}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" title="Willpower"><span class="center" data-i18n="biofeedbacksoak">Biofeedback Soak</span></span>
</button>
<div>&nbsp;</div>
</div>
<div class="armor-resists">
<h2 data-i18n="resists">Resists</h2>
<span class="armor-resist" title="@{resist_chem_total}"><span class="pictos3 chem">d</span><span class="chem"> Chem </span><span class="armor-resist-value" name="attr_resist_chem_total"></span></span>
<span class="armor-resist" title="@{resist_cold_total}"><span class='pictos cold'>b</span><span class="cold"> Cold </span><span class="armor-resist-value" name="attr_resist_cold_total"></span></span>
<span class="armor-resist" title="@{resist_elec_total}"><span class='pictos elec'>e</span><span class="elec"> Elec </span><span class="armor-resist-value" name="attr_resist_elec_total"></span></span>
<span class="armor-resist" title="@{resist_fire_total}"><span class="pictos3 fire">j</span><span class="fire"> Fire </span><span class="armor-resist-value" name="attr_resist_fire_total"></span></span>
</div>
</div>
<div>
<span>&nbsp;</span>
</div>
<div class="row-long cc-row primary-range">
<h2 data-i18n="primaryrangedweapon">Primary Ranged Weapon</h2>
<h2>&nbsp;</h2>
<h2 class="center" data-i18n="pool">Pool</h2>
<h2 class="center" data-i18n="dam">Dam</h2>
<h2 class="center" data-i18n="c" title="Close 0-3">C</h2>
<h2 class="center" data-i18n="n" title="Near 4-50">N</h2>
<h2 class="center" data-i18n="m" title="Medium 51-250">M</h2>
<h2 class="center" data-i18n="f" title="Far 251-500">F</h2>
<h2 class="center" data-i18n="e" title="Extreme 500+">E</h2>
</div>
<div class="cc-row primary-range">
<input type="hidden" name="attr_primary_range_weapon_split_dicepool" value="0" />
<button name="act_primary_range_weapon" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{primary_range_weapon}}}{{dice=[[(@{primary_range_weapon_rating}+@{primary_range_weapon_attr_rating}+@{primary_range_weapon_spec}+@{primary_range_weapon_expert}+@{primary_range_weapon_dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Mode @{primary_range_weapon_mode}, Damage @{primary_range_weapon_damage}, Skill @{primary_range_weapon_skill}, Attribute: @{primary_range_weapon_attribute}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_primary_range_weapon" title="@{primary_range_weapon}"></span></button>
<button name="act_primary_range_weapon_split_pool_2" type="action" value=""><span name="attr_primary_range_weapon" title="@{primary_range_weapon}"></span></button>
<span>&nbsp;</span>
<span class="center" name="attr_primary_range_weapon_dicepool"></span>
<span class="center" name="attr_primary_range_weapon_damage"></span>
<span class="center" name="attr_primary_range_weapon_close"></span>
<span class="center" name="attr_primary_range_weapon_near"></span>
<span class="center" name="attr_primary_range_weapon_medium"></span>
<span class="center" name="attr_primary_range_weapon_far"></span>
<span class="center" name="attr_primary_range_weapon_extreme"></span>
</div>
<div class="row-long cc-row primary-range-row2">
<input type="hidden" name="attr_primary_range_weapon_mode_singleshot" value="0" />
<input type="hidden" name="attr_primary_range_weapon_mode_semiauto" value="0" />
<input type="hidden" name="attr_primary_range_weapon_mode_burst" value="0" />
<input type="hidden" name="attr_primary_range_weapon_mode_burstwide" value="0" />
<input type="hidden" name="attr_primary_range_weapon_mode_fullauto" value="0" />
<input type="hidden" name="attr_primary_range_weapon_mode_other" value="0" />
<input type="hidden" name="attr_primary_range_weapon_default_mode" value="" />
<input type="hidden" name="attr_primary_range_weapon_base_damage" value="0" />
<input type="hidden" name="attr_primary_range_weapon_base_close" value="0" />
<input type="hidden" name="attr_primary_range_weapon_base_near" value="0" />
<input type="hidden" name="attr_primary_range_weapon_base_medium" value="0" />
<input type="hidden" name="attr_primary_range_weapon_base_far" value="0" />
<input type="hidden" name="attr_primary_range_weapon_base_extreme" value="0" />
<select id="attr_primary_range_weapon_mode" name="attr_primary_range_weapon_mode" title="@{primary_range_weapon_mode}">
<option data-i18n="singleshot" value="Single Shot">Single Shot</option>
<option data-i18n="semiauto" value="Semi Auto">Semi-Auto</option>
<option data-i18n="burstfire" value="Burst Fire">Burst Fire</option>
<option data-i18n="burstwide" value="Burst Fire Wide">Burst Fire Wide</option>
<option data-i18n="fullauto" value="Full Auto">Full Auto</option>
<option data-i18n="other" value="Other">Other</option>
</select>
<span></span>
<select id="attr_primary_range_weapon_ammo_type" name="attr_primary_range_weapon_ammo_type" title="@{primary_range_weapon_ammo_type}">
<option data-i18n="regular" value="Regular">Regular</option>
<option data-i18n="apds" value="APDS">APDS</option>
<option data-i18n="explosive" value="Explosive">Explosive</option>
<option data-i18n="flechette" value="Flechette">Flechette</option>
<option data-i18n="gel" value="Gel">Gel</option>
<option data-i18n="handloaded" value="Handloaded">Handloaded</option>
<option data-i18n="matchgrade" value="Match-Grade">Match-Grade</option>
<option data-i18n="revo" value="rEVO">rEVO</option>
<option data-i18n="sticknshock" value="Stick-n-Shock">Stick-n-Shock</option>
<option data-i18n="other" value="Other">Other</option>
</select>
<span></span>
<!-- Ammo removal button -->
<button class="shots" name="act_shots_remove" type="action" data-i18n-title="fewershots">4</button>
<button class="shots" 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 class="shots" name="act_shots_add" type="action" data-i18n-title="moreshots">4</button>
<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 shots" name="act_reload" type="action" data-i18n-title="reload">0</button>
</div>
<div>
<span>&nbsp;</span>
</div>
<div class="row-long cc-row primary-melee">
<h2 data-i18n="primarymeleeweapon">Primary Melee Weapon</h2>
<h2>&nbsp;</h2>
<h2 class="center" data-i18n="pool">Pool</h2>
<h2 class="center" data-i18n="dam">Dam</h2>
<h2 class="center" data-i18n="c" title="Close 0-3">C</h2>
<h2 class="center" data-i18n="n" title="Near 4-50">N</h2>
<h2 class="center" data-i18n="m" title="Medium 51-250">M</h2>
<h2 class="center" data-i18n="f" title="Far 251-500">F</h2>
<h2 class="center" data-i18n="e" title="Extreme 500+">E</h2>
</div>
<div class="cc-row primary-melee">
<button name="act_primary_melee_weapon" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{primary_melee_weapon_name}}}{{dice=[[(@{primary_melee_weapon_rating}+@{primary_melee_weapon_attr_rating}+@{primary_melee_weapon_spec}+@{primary_melee_weapon_expert}+@{primary_melee_weapon_dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Damage @{primary_melee_weapon_damage}, Skill: @{primary_melee_weapon_skill}, Attribute: @{primary_melee_weapon_attribute}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_primary_melee_weapon_name"></span></button>
<span>&nbsp;</span>
<span class="center" name="attr_primary_melee_weapon_dicepool" title="@{primary_melee_weapon_dicepool}"></span>
<span class="center" name="attr_primary_melee_weapon_damage" title="@{primary_melee_weapon_damage}"></span>
<span class="center" name="attr_primary_melee_weapon_close" title="@{primary_melee_weapon_close}"></span>
<span class="center" name="attr_primary_melee_weapon_near" title="@{primary_melee_weapon_near}"></span>
<span class="center" name="attr_primary_melee_weapon_medium" title="@{primary_melee_weapon_medium}"></span>
<span class="center" name="attr_primary_melee_weapon_far" title="@{primary_melee_weapon_far}"></span>
<span class="center" name="attr_primary_melee_weapon_extreme" title="@{primary_melee_weapon_extreme}"></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" value="10" />
<input type="hidden" name="attr_stun_max" 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="paintolerance">Pain Tolerance</label>
<select name="attr_pain_tolerance">
<option value="+1" data-i18n="highpaintolerance">High Pain Tolerance</option>
<option value="0" data-i18n="none" selected="selected">None</option>
<option value="-1" data-i18n="lowpaintolerance">Low Pain Tolerance</option>
</select>
<div class="con-footer">
<span data-i18n="painfooter">Low Pain Tolerance doubles wound modifiers and High Pain Tolerance lowers the modifier to wound modifiers by 1 per level.</span>
</div>
</div>
<div class="display">
<div class="con-track">
<input type="hidden" name="attr_physical_damage" value="0" />
<button name="act_cond_reset_physical" type="action" data-i18n="resetphysicaltrack">Reset Physical Track</button>
<button name="act_natural_healing_physical" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{natural} ^{healing} ^{physical}\n^{body} + ^{body}}}{{dice=[[(@{body}+@{body}+?{Medical Care?|No,0|Yes,2})d6>5]]}}{{desc=Natural Healing (Physical), This test can be performed once per 24 hours of rest to recover Overflow/Physical damage.\n\n&star; Duration is halved with the Quick Healer quality.}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}{{glitch=[[0]]}}"><span class="center"><span class="center" data-i18n="naturalhealingphysical">Natural Healing (Physical)</span></span></button>
<div class="squares">
<input class="hex-hider" type="hidden" name="attr_physical_max" value="10" />
<input type="radio" name="attr_physical_damage" value="1" /><span></span>
<input type="radio" name="attr_physical_damage" value="2" /><span></span>
<input type="radio" name="attr_physical_damage" value="3" /><span></span><div>-1</div>
<input type="radio" name="attr_physical_damage" value="4" /><span></span>
<input type="radio" name="attr_physical_damage" value="5" /><span></span>
<input type="radio" name="attr_physical_damage" value="6" /><span></span><div>-2</div>
<input type="radio" name="attr_physical_damage" value="7" /><span></span>
<input type="radio" name="attr_physical_damage" value="8" /><span></span>
<input type="radio" name="attr_physical_damage" value="9" /><span></span><div>-3</div>
<input type="radio" name="attr_physical_damage" value="10" /><span></span>
<input type="radio" name="attr_physical_damage" value="11" /><span></span>
<input type="radio" name="attr_physical_damage" value="12" /><span></span><div>-4</div>
<input type="radio" name="attr_physical_damage" value="13" /><span></span>
<input type="radio" name="attr_physical_damage" value="14" /><span></span>
<input type="radio" name="attr_physical_damage" value="15" /><span></span><div>-5</div>
<input type="radio" name="attr_physical_damage" value="16" /><span></span>
<input type="radio" name="attr_physical_damage" value="17" /><span></span>
<input type="radio" name="attr_physical_damage" 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_damage" value="0" />
<button name="act_cond_reset_stun" type="action" data-i18n="resetstuntrack">Reset Stun Track</button>
<button name="act_natural_healing_stun" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{natural} ^{healing} ^{stun}\n^{body} + ^{willpower}}}{{dice=[[(@{body}+@{willpower}+?{Medical Care?|No,0|Yes,2})d6>5]]}}{{desc=Natural Healing (Stun), This test can be performed once per hour of rest to recover stun damage. &star;Duration is halved with the Quick Healer quality}}"><span class="center"><span class="center" data-i18n="naturalhealingstun">Natural Healing (Stun)</span></span></button>
<div class="squares">
<input class="hex-hider" type="hidden" name="attr_stun_max" value="10" />
<input type="radio" name="attr_stun_damage" value="1" /><span></span>
<input type="radio" name="attr_stun_damage" value="2" /><span></span>
<input type="radio" name="attr_stun_damage" value="3" /><span></span><div>-1</div>
<input type="radio" name="attr_stun_damage" value="4" /><span></span>
<input type="radio" name="attr_stun_damage" value="5" /><span></span>
<input type="radio" name="attr_stun_damage" value="6" /><span></span><div>-2</div>
<input type="radio" name="attr_stun_damage" value="7" /><span></span>
<input type="radio" name="attr_stun_damage" value="8" /><span></span>
<input type="radio" name="attr_stun_damage" value="9" /><span></span><div>-3</div>
<input type="radio" name="attr_stun_damage" value="10" /><span></span>
<input type="radio" name="attr_stun_damage" value="11" /><span></span>
<input type="radio" name="attr_stun_damage" value="12" /><span></span><div>-4</div>
<input type="radio" name="attr_stun_damage" value="13" /><span></span>
<input type="radio" name="attr_stun_damage" value="14" /><span></span>
<input type="radio" name="attr_stun_damage" 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" 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" 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" 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="rtg">RTG</h2>
<h2 data-i18n="type">Type</h2>
<h2>&nbsp;</h2>
</div>
<div class="rows repeating-container">
<fieldset class="repeating_quality">
<span name="attr_name"></span>
<span class="center" name="attr_rating"></span>
<span class="center" name="attr_type"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<button class="pictos" name="quality_chat" type="roll" value="@{gm_toggle} &{template:quality}{{header=@{character_name}}}{{base=@{name}}}{{desc=@{notes}}}{{rating=@{rating}}}">w</button>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
<input name="attr_name" placeholder="quality name" title="@{repeating_quality_${x}_name}" type="text"/>
<label data-i18n-title="rating" title="@{repeating_quality_${x}_rating}">
<input name="attr_rating" placeholder="-" type="number" title="@{repeating_quality_${x}_rating}"/>
</label>
<select name="attr_type" title="@{repeating_quality_${x}_type}">
<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}"></textarea>
</label>
<h3 data-i18n="modifications">modifications</h3>
<label data-i18n-title="modifications" title="modifications">
<textarea name="attr_modifications" placeholder="Mechanic: +/- mod" title="@{repeating_quality_${x}_modifications}"></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 name="attr_technique"></span><span class="center" name="attr_style"></span>
<button class="pictos" name="technique_chat" type="roll" value="@{gm_toggle} &amp;{template:rolls}{{header=@{character_name}}}{{base=@{style} - @{technique}}}{{desc=@{notes}}}">w</button>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
<input 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}"></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">
<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 class="header htab">
<div class="triangle"></div>
<input class="tab-switch" name="attr_weapon_type_toggle" type="radio" value="grenade"/>
<h1 data-i18n="grenade">Grenade</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">
<span></span>
<h2 data-i18n="weapon">Weapon</h2>
<h2 data-i18n="pool">Pool</h2>
<h2 data-i18n="dam">Dam</h2>
<h2 class="center" data-i18n="c" title="Close 0-3">C</h2>
<h2 class="center" data-i18n="n" title="Near 4-50">N</h2>
<h2 class="center" data-i18n="m" title="Medium 51-250">M</h2>
<h2 class="center" data-i18n="f" title="Far 251-500">F</h2>
<h2 class="center" data-i18n="e" title="Extreme 500+">E</h2>
<h2 data-i18n="ammo">Ammo</h2>
</div>
<fieldset class="repeating_range">
<input title="@{repeating_range_${x}_rating}" name="attr_rating" type="hidden" value="0" />
<input name="attr_skill" type="hidden" value=""/>
<input name="attr_attribute" type="hidden" value="Agility"/>
<input name="attr_attr_rating" type="hidden" value="1"/>
<input name="attr_updateme" type="hidden" value="0"/>
<input class="flag-primary" name="attr_primary" type="hidden" value=""/>
<input class="flag-primary" name="attr_additional" type="hidden" value=""/>
<input class="toggle" name="attr_primary" value="primary" type="checkbox" />
<span class="pictos powerbutton">2</span>
<button name="act_rangeweapon" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{weapon}\n@{skill} + @{attribute}}}{{dice=[[(@{rating}+@{attr_rating}+@{spec}+@{expert}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Mode: SS, Damage @{damage}, Skill: @{skill}, Attribute: @{attribute}, Notes @{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_dicepool"></span>
<span class="center" name="attr_damage"></span>
<span class="center" name="attr_close"></span>
<span class="center" name="attr_near"></span>
<span class="center" name="attr_medium"></span>
<span class="center" name="attr_far"></span>
<span class="center" name="attr_extreme"></span>
<span class="center" name="attr_ammo"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
<span></span>
<label data-i18n-title="weapon" title="weapon">
<input name="attr_name" placeholder="Ares Predator" title="@{repeating_range_${x}_weapon}" type="text" value=""/>
</label>
<label data-i18n-title="pool" title="pool">
<input name="attr_dicepool" placeholder="" title="@{repeating_range_${x}_dicepool}" 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="c" title="Close">
<input name="attr_close" placeholder="-" title="@{repeating_range_${x}_close}" type="text" value=""/>
</label>
<label data-i18n-title="n" title="Near">
<input name="attr_near" placeholder="-" title="@{repeating_range_${x}_near}" type="text" value=""/>
</label>
<label data-i18n-title="m" title="Medium">
<input name="attr_medium" placeholder="-" title="@{repeating_range_${x}_medium}" type="text" value=""/>
</label>
<label data-i18n-title="f" title="Far">
<input name="attr_far" placeholder="-" title="@{repeating_range_${x}_far}" type="text" value=""/>
</label>
<label data-i18n-title="e" title="Extreme">
<input name="attr_extreme" placeholder="-" title="@{repeating_range_${x}_extreme}" type="text" value=""/>
</label>
<label data-i18n-title="ammo" title="ammo">
<input name="attr_ammo" placeholder="15" title="@{repeating_range_${x}_ammo}" type="number" value=""/>
</label>
<span></span>
<span></span>
<div class="row">
<h3 data-i18n="firingmodes">Firing Modes</h3>
<label data-i18n-title="modeoptions" title="Mode Options">
<input name="attr_firing_modes" placeholder="SS/SA/BF/BW/FA" type="text" title="@{repeating_range_${x}_firing_modes}}"/>
</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}" value='0' type="number"/>
</label>
</div>
<div class="row">
<input type="hidden" name="attr_singleshot" value="0" />
<input type="hidden" name="attr_semiauto" value="0" />
<input type="hidden" name="attr_burst" value="0" />
<input type="hidden" name="attr_burstwide" value="0" />
<input type="hidden" name="attr_fullauto" value="0" />
<input type="hidden" name="attr_other" value="0" />
<h3 data-i18n="defaultfiringmode">Default Firing Mode</h3>
<select name="attr_default_mode" title="@{default_mode}">
<option data-i18n="singleshot" value="Single Shot" selected="selected">Single Shot</option>
<option data-i18n="semiauto" value="Semi Auto">Semi-Auto</option>
<option data-i18n="burstfire" value="Burst Fire">Burst Fire</option>
<option data-i18n="burstwide" value="Burst Fire">Burst Fire Wide</option>
<option data-i18n="fullauto" value="Full Auto">Full Auto</option>
<option data-i18n="other" value="Other">Other</option>
</select>
</div>
<div class="row">
<h3 data-i18n="skill">skill</h3>
<select name="attr_skill" title="@{repeating_range_${x}_skill}">
<option data-i18n="firearms" value="Firearms" selected="selected">Firearms</option>
<option data-i18n="exoticweapons" value="Exotic Weapons">Exotic Weapons</option>
<option data-i18n="athletics" value="Athletics">Athletics</option>
<option data-i18n="engineering" value="Engineering">Engineering</option>
</select>
<h3 data-i18n="specialization">specialization</h3>
<label data-i18n-title="specialization" title="specialization">
<input name="attr_spec" value="2" title="@{repeating_range_${x}_spec}" type="checkbox"/>
</label>
<h3 data-i18n="expertise">expertise</h3>
<label data-i18n-title="expertise" title="expertise">
<input name="attr_expert" value="3" title="@{repeating_range_${x}_expert}" type="checkbox"/>
</label>
<input name="attr_skill" type="hidden" value=""/>
<input name="attr_rating" 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}"></textarea>
</label>
</div>
</fieldset>
</div>
<div class="rows repeating-container weapon-melee">
<div class="row-long headers">
<span></span>
<h2 data-i18n="weapon">Weapon</h2>
<h2 data-i18n="pool">Pool</h2>
<h2 data-i18n="dam">Dam</h2>
<h2 data-i18n="c" title="Close 0-3">C</h2>
<h2 data-i18n="n" title="Near 4-50">N</h2>
<h2 data-i18n="m" title="Medium 51-250">M</h2>
<h2 data-i18n="f" title="Far 251-500">F</h2>
<h2 data-i18n="e" title="Extreme 500+">E</h2>
</div>
<fieldset class="repeating_melee">
<input title="@{repeating_melee_${x}_rating}" name="attr_rating" type="hidden" value="0" />
<input name="attr_skill" type="hidden" value=""/>
<input name="attr_attribute" type="hidden" value="Agility"/>
<input name="attr_attr_rating" type="hidden" value="1"/>
<input name="attr_updateme" type="hidden" value="0"/>
<input class="flag-primary" name="attr_primary" type="hidden" value=""/>
<input class="flag-primary" name="attr_additional" type="hidden" value=""/>
<input class="toggle" name="attr_primary" value="primary" type="checkbox" />
<span class="pictos powerbutton">2</span>
<button name="act_meleeweapon" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(@{rating}+@{attr_rating}+@{spec}+@{expert}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Damage @{damage}, Skill: @{skill}, Attribute: @{attribute}, Notes: @{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_dicepool"></span>
<span class="center" name="attr_damage"></span>
<span class="center" name="attr_close"></span>
<span class="center" name="attr_near"></span>
<span class="center" name="attr_medium"></span>
<span class="center" name="attr_far"></span>
<span class="center" name="attr_extreme"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
<span></span>
<label data-i18n-title="name" title="name">
<input name="attr_name" placeholder="Katana" title="@{repeating_melee_${x}_name}" type="text" value=""/>
</label>
<label data-i18n-title="pool" title="pool">
<input name="attr_dicepool" placeholder="0d6" title="@{repeating_melee_${x}_dicepool}" 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="close" title="Close 0-3">
<input name="attr_close" placeholder="-" title="@{repeating_melee_${x}_close}" type="text" value=""/>
</label>
<label data-i18n-title="near" title="Near 4-50">
<input name="attr_near" placeholder="-" title="@{repeating_melee_${x}_near}" type="text" value=""/>
</label>
<label data-i18n-title="medium" title="Medium 51-250">
<input name="attr_medium" placeholder="-" title="@{repeating_melee_${x}_medium}" type="text" value=""/>
</label>
<label data-i18n-title="far" title="Far 251-500">
<input name="attr_far" placeholder="-" title="@{repeating_melee_${x}_far}" type="text" value=""/>
</label>
<label data-i18n-title="extreme" title="Extreme 500+">
<input name="attr_extreme" placeholder="-" title="@{repeating_melee_${x}_extreme}" type="text" value=""/>
</label>
<div class="row">
<h3 data-i18n="skill">skill</h3>
<select name="attr_skill" title="@{repeating_melee_${x}_skill}">
<option data-i18n="closecombat" value="Close Combat" selected="selected">Close Combat</option>
<option data-i18n="athletics" value="Athletics">Athletics</option>
<option data-i18n="exoticweapons" value="Exotic Weapons">Exotic Weapons</option>
<option data-i18n="engineering" value="Engineering">Engineering</option>
</select>
<h3 data-i18n="specialization">specialization</h3>
<label data-i18n-title="specialization" title="specialization">
<input name="attr_spec" value="2" title="@{repeating_melee_${x}_spec}" type="checkbox"/>
</label>
<h3 data-i18n="expertise">expertise</h3>
<label data-i18n-title="expertise" title="expertise">
<input name="attr_expert" value="3" title="@{repeating_melee_${x}_expert}" type="checkbox"/>
</label>
<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>
<div class="row">
<h3 data-i18n="modifier">modifier</h3>
<label data-i18n-title="modifier" title="modifier">
<input name="attr_dicepool_modifier" title="@{repeating_melee_${x}_dicepool_modifier}" value='0' 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_melee_${x}_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
<div class="rows repeating-container weapon-grenade">
<button name="roll_GrenadeScatterAndDistance" style="display: none !important;" type="roll" value="/w GM &{template:multirow}{{header=Grenade}}{{base=Bounce & Scatter}}{{desc=Scatter Direction [[2d6]]}}{{desc2=Bounce Distance [[{[[2d6]]-(?{Hits?|0}?{Range?|Close,+4|Near,+2|Medium,+0|Far,-2|Extreme,-4}),0}kh1]]m}}"></button>
<div class="row-long headers">
<h2 data-i18n="grenade">Grenade</h2>
<h2 data-i18n="pool">Pool</h2>
<h2 data-i18n="gz" title="Ground Zero ~1m">GZ</h2>
<h2 data-i18n="c" title="Close 1-3">C</h2>
<h2 data-i18n="n" title="Near 4-50">N</h2>
<h2 data-i18n="blast" title="Blast Area">Blast</h2>
</div>
<fieldset class="repeating_grenade">
<input class="flag-primary" name="attr_primary" type="hidden" value=""/>
<input class="flag-primary" name="attr_additional" type="hidden" value=""/>
<button name="act_grenadeweapon" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(@{type}+@{spec}+@{expert}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=DV @{ground_zero}/@{close}/@{near}, Blast Area: @{blast}, Notes: @{notes} [GM Roll Scatter](~@{character_name}|GrenadeScatterAndDistance)}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_dicepool"></span>
<span class="center" name="attr_ground_zero"></span>
<span class="center" name="attr_close"></span>
<span class="center" name="attr_near"></span>
<span class="center" name="attr_blast"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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="Fragmentation" title="@{repeating_grenade_${x}_name}" type="text" value=""/>
</label>
<label data-i18n-title="pool" title="pool">
<input name="attr_dicepool" title="@{repeating_grenade_${x}_dicepool}" type="text" value=""/>
</label>
<label data-i18n-title="gz" title="Ground Zero <1m">
<input name="attr_ground_zero" placeholder="16P" title="@{repeating_grenade_${x}_ground_zero}" type="text" value=""/>
</label>
<label data-i18n-title="close" title="Close 1-3">
<input name="attr_close" placeholder="12P" title="@{repeating_grenade_${x}_close}" type="text" value=""/>
</label>
<label data-i18n-title="near" title="Near 4-50">
<input name="attr_near" placeholder="8P" title="@{repeating_grenade_${x}_near}" type="text" value=""/>
</label>
<label data-i18n-title="blast" title="Blast Area">
<input name="attr_blast" placeholder="20m" title="@{repeating_grenade_${x}_blast}" type="text" value=""/>
</label>
<div class="row">
<h3 data-i18n="type">type</h3>
<select name="attr_type" title="@{repeating_grenade_${x}_type}">
<option data-i18n="thrown" value="@{athletics}+@{agility}">thrown</option>
<option data-i18n="launcher" value="@{exotic weapons}+@{logic}">Exotic Weapons</option>
</select>
<h3 data-i18n="specialization">specialization</h3>
<label data-i18n-title="specialization" title="specialization">
<input name="attr_spec" value="2" title="@{repeating_grenade_${x}_spec}" type="checkbox"/>
</label>
<h3 data-i18n="expertise">expertise</h3>
<label data-i18n-title="expertise" title="expertise">
<input name="attr_expert" value="3" title="@{repeating_grenade_${x}_expert}" type="checkbox"/>
</label>
</div>
<div class="row">
<h3 data-i18n="modifier">modifier</h3>
<label data-i18n-title="modifier" title="modifier">
<input name="attr_dicepool_modifier" title="@{repeating_grenade_${x}_dicepool_modifier}" placeholder='0' 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_grenade_${x}_notes}"></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="dr">DR</h2>
<h2 data-i18n="chem">Chem</h2>
<h2 data-i18n="cold">Cold</h2>
<h2 data-i18n="elec">Elec</h2>
<h2 data-i18n="fire">Fire</h2>
<h2 data-i18n="social">Social</h2>
</div>
<fieldset class="repeating_armor">
<input class="flag-primary" name="attr_primary" type="hidden" value=""/>
<span name="attr_name"></span>
<span class="center" name="attr_rating"></span>
<span class="center" name="attr_chem"></span>
<span class="center" name="attr_cold"></span>
<span class="center" name="attr_elec"></span>
<span class="center" name="attr_fire"></span>
<span class="center" name="attr_social"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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="chemical" title="chemical">
<input name="attr_chem" placeholder="0" title="@{repeating_armor_${x}_chem}" type="number" value="0" min="0" step="1"/>
</label>
<label data-i18n-title="cold" title="cold">
<input name="attr_cold" placeholder="0" title="@{repeating_armor_${x}_cold}" type="number" value="0" min="0" step="1"/>
</label>
<label data-i18n-title="elec" title="elec">
<input name="attr_elec" placeholder="0" title="@{repeating_armor_${x}_elec}" type="number" value="0" min="0" step="1"/>
</label>
<label data-i18n-title="fire" title="fire">
<input name="attr_fire" placeholder="0" title="@{repeating_armor_${x}_fire}" type="number" value="0" min="0" step="1"/>
</label>
<label data-i18n-title="social" title="social">
<input name="attr_social" placeholder="0" title="@{repeating_armor_${x}_social}" type="number" value="0" step="1"/>
</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="cumulative">Cumulative</h3>
<label data-i18n-title="cumulative" title="Cumulative">
<input name="attr_cumulative" type="checkbox" title="@{repeating_armor_${x}_cumulative}" value="cumulative"/>
</label>
<h3 data-i18n="capacity">Capacity</h3>
<label data-i18n-title="capacity" title="Capacity">
<input name="attr_capacity" placeholder="0" title="@{repeating_armor_${x}_capacity}" type="number" value="0" step="1"/>
</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}"></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="esscost">Ess Cost</h2>
</div>
<div class="rows repeating-container">
<fieldset class="repeating_augmentations"><span name="attr_name"></span><span class="center" name="attr_rating"></span><span class="center" name="attr_essence_cost"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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 name="attr_name" placeholder="name" title="@{repeating_augmentations_${x}_augmentation}" type="text" value=""/>
</label>
<label data-i18n-title="Rating" title="Rating">
<input name="attr_rating" placeholder="0" title="@{repeating_augmentations_${x}_rating}" type="number" value=""/>
</label>
<label data-i18n-title="Essence" title="Essence">
<input class="augmentation_essence" name="attr_essence_cost" placeholder="0" title="@{repeating_augmentations_${x}_essence_cost}" type="number" step='0.01' value=""/>
</label>
<span>&nbsp;</span>
<span>&nbsp;</span>
<label data-i18n-title="Grade" title="Grade">
<span data-i18n="grade"></span>
<select name="attr_grade" title="@{repeating_augmentations_${x}_grade}">
<option data-i18n="used" value="Used">Used</option>
<option data-i18n="standard" value="Standard" selected="selected">Standard</option>
<option data-i18n="alphaware" value="Alphaware">Alphaware</option>
<option data-i18n="betaware" value="Betaware">Betaware</option>
<option data-i18n="deltaware" value="Deltaware">Deltaware</option>
</select>
</label>
<h3 data-i18n="notes">notes</h3>
<label data-i18n-title="notes" title="notes">
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_augmentations_${x}_notes}"></textarea>
</label>
<h3 data-i18n="modifications">modifications</h3>
<label data-i18n-title="modifications" title="modifications">
<textarea name="attr_modifications" placeholder="Mechanic: +/- mod" title="@{repeating_augmentations_${x}_modifications}"></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"><span name="attr_name"></span><span class="center" name="attr_rating"></span><span class="center" name="attr_quantity"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<button class="pictos" name="item_chat" type="roll" value="@{gm_toggle} &{template:quality}{{header=@{character_name}}}{{base=@{name}}}{{desc=@{notes}}}{{rating=@{rating}}}">w</button>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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="Jammer" title="@{repeating_items_${x}_name}" 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="notes">notes</h3>
<label data-i18n-title="notes" title="notes">
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_items_${x}_notes}"></textarea>
</label>
<h3 data-i18n="modifications">modifications</h3>
<label data-i18n-title="modifications" title="modifications">
<textarea name="attr_modifications" placeholder="Attribute: +/- mod" title="@{repeating_items_${x}_modifications}"></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">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="prep">Prep...</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">Rituals</h1>
<div class="right-tri"></div>
</div>
</div>
<div class="border-box">
<div class="pc-box medium-box">
<input class="magic-toggle" name="attr_magic_toggle" type="hidden" value="spells"/>
<div class="magic-spells spellsFormulas">
<div class="row-long">
<button data-i18n="drain" name="act_spell_drain" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{spell} ^{drain}}}{{dice=[[((@{spell_drain_attribute_1}+@{spell_drain_attribute_2}+@{spell_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<select class="attribute-select" name="attr_spell_drain_attribute_1" title="@{spell_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_spell_drain_attribute_2" title="@{spell_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_spell_drain_modifier" title="@{spell_drain_modifier}" type="number" value="0"/>
</label>
</div>
<div class="rows repeating-container">
<div class="row-long headers">
<h2 data-i18n="spell">Spell</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>
<fieldset class="repeating_spell">
<input name="attr_dicepool" type="hidden" value="0" />
<input name="attr_category" type="hidden" value="" />
<input name="attr_range" type="hidden" value="" />
<button name="act_spell" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{ampup=[[?{Amp Up|0|1|2|3|4|5|6|7|8|9|10}]]}}{{increasearea=[[?{Increase Area|0m,0|2m,1|4m,2|6m,3|8m,4|10m,5|12m,5|14m,6|16m,8|18m,9|20m,10}*2]]}}{{drain=[[?{Amp Up}*2+?{Increase Area}+(@{drain})]]}}{{desc=@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<button name="act_spellaoe" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{ampup=[[?{Amp Up|0|1|2|3|4|5|6|7|8|9|10}]]}}{{increasearea=[[?{Increase Area|0m,0|2m,1|4m,2|6m,3|8m,4|10m,5|12m,5|14m,6|16m,8|18m,9|20m,10}*2]]}}{{drain=[[?{Amp Up}*2+?{Increase Area}+(@{drain})]]}}{{desc=@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<button name="act_noncombatspell" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{increasearea=[[?{Increase Area|0m,0|2m,1|4m,2|6m,3|8m,4|10m,5|12m,5|14m,6|16m,8|18m,9|20m,10}*2]]}}{{drain=[[?{Increase Area}+(@{drain})]]}}{{desc=@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<button name="act_noncombatspellaoe" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{increasearea=[[?{Increase Area|0m,0|2m,1|4m,2|6m,3|8m,4|10m,5|12m,5|14m,6|16m,8|18m,9|20m,10}*2]]}}{{drain=[[?{Increase Area}+(@{drain})]]}}{{desc=@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_type"></span>
<span class="center" name="attr_range"></span>
<span class="center" name="attr_duration"></span>
<span class="center" name="attr_drain"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox" checked="checked"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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}">
<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}">
<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="touch" value="T">touch</option>
</select>
<select name="attr_duration" title="@{repeating_spell_${x}_duration}">
<option data-i18n="instant" value="Instant" selected="selected">Instant</option>
<option data-i18n="sustained" value="Sustained">Sustained</option>
<option data-i18n="limited" value="Limited">Limited</option>
<option data-i18n="permanent" value="Permanent">Permanent</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}">
<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>
<h3 data-i18n="effecttype">Effect Type</h3>
<select name="attr_effect_type" title="@{repeating_spell_${x}_effect_type}">
<option data-i18n="none" value="" selected="selected">None</option>
<option data-i18n="directcombat" value="Direct Combat">Direct Combat</option>
<option data-i18n="directcombatarea" value="Direct Combat, Area">Direct Combat, Area</option>
<option data-i18n="indirectcombat" value="Indirect Combat">Indirect Combat</option>
<option data-i18n="indirectcombatarea" value="Indirect Combat, Area">Indirect Combat, Area</option>
<option data-i18n="singlesense" value="Single-Sense">Single-Sense</option>
<option data-i18n="multisense" value="Multi-Sense">Multi-Sense</option>
</select>
</div>
<div class="row">
<h3 data-i18n="skill">Skill</h3>
<select name="attr_skill" title="@{repeating_spell_${x}_skill}">
<option data-i18n="sorcery" value="@{sorcery}" selected="selected">Sorcery</option>
<option data-i18n="conjuring" value="@{conjuring}">Conjuring</option>
<option data-i18n="enchanting" value="@{enchanting}">Enchanting</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="expertise">Expertise</h3>
<label data-i18n-title="expertise" title="Expertise">
<input name="attr_expertise" title="@{repeating_spell_${x}_expertise}" type="checkbox" value="3"/>
</label>
</div>
<div class="row">
<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="text" value="0" />
</label>
<h3 data-i18n="damage_type">Damage Type</h3>
<select name="attr_damage" title="@{repeating_spell_${x}_damage}">
<option data-i18n="unset" value="" selected="selected">Unset</option>
<option data-i18n="stun" value="Stun">Stun</option>
<option data-i18n="physical" value="Physical">Physical</option>
<option data-i18n="physical_special" value="Physical, Special">Physical, Special</option>
</select>
</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}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
<div class="magic-preps spellsFormulas">
<div class="row-long">
<button data-i18n="drain" name="act_preparation_drain" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{preparation} ^{drain}}}{{dice=[[((@{spell_drain_attribute_1}+@{spell_drain_attribute_2}+@{spell_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<select class="attribute-select" name="attr_spell_drain_attribute_1" title="@{spell_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_spell_drain_attribute_2" title="@{spell_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_spell_drain_modifier" title="@{spell_drain_modifier}" type="number" value="0"/>
</label>
</div>
<div class="rows repeating-container prepared-preparations">
<div class="row-long headers">
<h3 data-i18n="preparation">preparation</h3>
<h3 data-i18n="magic">magic</h3>
<h3 data-i18n="potency">potency</h3>
<h3 data-i18n="trigger">trigger</h3>
</div>
<fieldset class="repeating_preparations">
<button name="act_preparation" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[((@{magic}+@{potency}+@{expert}+@{spec})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_magic"></span>
<span class="center" name="attr_potency"></span>
<span class="center" name="attr_trigger"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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_preparations_${x}_name}" type="text" value=""/>
</label>
<label data-i18n-title="magic" title="magic">
<input name="attr_magic" placeholder="1" title="@{repeating_preparations_${x}_magic}" type="number" value=""/>
</label>
<label data-i18n-title="potency" title="potency">
<input name="attr_potency" placeholder="1" title="@{repeating_preparations_${x}_potency}" type="number" value=""/>
</label>
<select name="attr_trigger" title="@{repeating_preparations_${x}_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>
</select>
<div class="row">
<h3 data-i18n="specialization">Specialization</h3>
<label data-i18n-title="specialization" title="Specialization">
<input name="attr_spec" title="@{repeating_preparations_${x}_specialization}" type="checkbox" value="2"/>
</label>
<h3 data-i18n="expertise">Expertise</h3>
<label data-i18n-title="expertise" title="Expertise">
<input name="attr_expert" title="@{repeating_preparations_${x}_expertise}" type="checkbox" value="3"/>
</label>
</div>
<h3 data-i18n="notes">notes</h3>
<label data-i18n-title="notes" title="notes">
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_preparations_${x}_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
<div class="magic-rituals">
<div class="row-long">
<button data-i18n="drain" name="act_ritual_drain" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{ritual} ^{drain}}}{{dice=[[((@{spell_drain_attribute_1}+@{spell_drain_attribute_2}+@{spell_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<select class="attribute-select" name="attr_spell_drain_attribute_1" title="@{spell_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_spell_drain_attribute_2" title="@{spell_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_spell_drain_modifier" title="@{spell_drain_modifier}" type="number" value="0"/>
</label>
</div>
<div class="rows repeating-container">
<div class="row-long headers">
<h2 data-i18n="ritual">Ritual</h2>
<h2 class="center" data-i18n="threshold">Threshold</h2>
</div>
<fieldset class="repeating_ritual">
<input name="attr_dicepool" type="hidden" value="0"/>
<button name="act_ritual" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (Sorcery + Magic + Teamwork Hits)}}{{dice=[[((@{skill}+@{magic}+@{spec}+@{expert}+@{dicepool_modifier}+?{Teamwork test hits?|})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Threshold: @{threshold}, Teamwork Test Hits: ?{Teamwork test hits?|}\nNotes:@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_threshold"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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="Ritual Name" title="@{@{repeating_undefined_${x}_name}" type="text"/>
</label>
<label data-i18n-title="threshold" title="threshold">
<input name="attr_threshold" title="@{@{repeating_ritual_${x}_threshold}" type="number" value="1" step="1"/>
</label>
<div class="row">
<input type="hidden" name="attr_skill" value="@{sorcery}">
<h3 data-i18n="specialization">Specialization</h3>
<label data-i18n-title="specialization" title="specialization">
<input name="attr_spec" title="@{@{repeating_ritual_${x}_spec}" type="checkbox" value="2"/>
</label>
<h3 data-i18n="expertise">Expertise</h3>
<label data-i18n-title="expertise" title="expertise">
<input name="attr_expert" title="@{@{repeating_ritual_${x}_expert}" type="checkbox" value="3"/>
</label>
<h3 data-i18n="mod">mod</h3>
<label data-i18n-title="modifier" title="modifier">
<input name="attr_dicepool_modifier" title="@{@{repeating_ritual_${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}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
<div class="pc-row powers-box">
<div class="header right-header">
<div class="header htab">
<div class="triangle"></div>
<input class="powers-toggle" name="attr_powers_toggle" title="@{powers_toggle}" type="radio" value="adept" checked="checked"/>
<h1 data-i18n="adept">Adept</h1>
<div class="right-tri"></div>
</div>
<div class="header htab">
<div class="triangle"></div>
<input class="powers-toggle" name="attr_powers_toggle" title="@{powers_toggle}" type="radio" value="conjuring"/>
<h1 data-i18n="conjuring">Conjuring</h1>
<div class="right-tri"></div>
</div>
<div class="header htab">
<div class="triangle"></div>
<input class="powers-toggle" name="attr_powers_toggle" title="@{powers_toggle}" type="radio" value="meta"/>
<h1 data-i18n="meta">Meta</h1>
<div class="right-tri"></div>
</div>
</div>
<div class="border-box">
<div class="pc-box medium-box">
<input class="powers-toggle" name="attr_powers_toggle" type="hidden" value="adept"/>
<div class="powers-adept">
<div class="row-long">
<button data-i18n="drain" name="act_adept_drain" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{adept} ^{power} ^{drain}}}{{dice=[[((@{adept_drain_attribute_1}+@{adept_drain_attribute_2}+@{adept_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<select class="attribute-select" name="attr_adept_drain_attribute_1" title="@{adept_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_adept_drain_attribute_2" title="@{adept_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_adept_drain_modifier" title="@{adept_drain_modifier}" type="number" value="0"/>
</label>
</div>
<div class="row-long headers">
<h2 data-i18n="name">Power</h2>
<h2 class="center" data-i18n="level">Level</h2>
<h2 class="center" data-i18n="act">Act</h2>
</div>
<div class="rows repeating-container powers">
<fieldset class="repeating_powers">
<span name="attr_name"></span>
<span class="center" name="attr_rating"></span>
<span class="center" name="attr_activation"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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>
<label data-i18n-title="activation" title="activation">
<select class="attribute-select" name="attr_activation" title="@{repeating_powers_${x}_activation}">
<option data-i18n="major" value="Major">Major</option>
<option data-i18n="minor" value="Minor">Minor</option>
<option data-i18n="passive" value="Passive">Passive</option>
</select>
</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}"></textarea>
</label>
<h3 data-i18n="modifications">modifications</h3>
<label data-i18n-title="modifications" title="modifications">
<textarea name="attr_modifications" placeholder="Attribute: +/- mod" title="@{repeating_items_${x}_modifications}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
<div class="powers-conjuring">
<div class="row-long">
<button data-i18n="drain" name="act_conjuring_drain" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{conjuring} ^{drain}}}{{dice=[[((@{conjuring_drain_attribute_1}+@{conjuring_drain_attribute_2}+@{conjuring_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<select class="attribute-select" name="attr_conjuring_drain_attribute_1" title="@{conjuring_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_conjuring_drain_attribute_2" title="@{conjuring_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="mod">Mod</h3>
<label data-i18n-title="modifier" title="modifier">
<input name="attr_conjuring_drain_modifier" title="@{conjuring_drain_modifier}" placeholder="mod" type="number" value="0"/>
</label>
</div>
<div class="row-long summon-spirit-button">
<span>&nbsp;</span>
<button name="act_conjuring" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Conjuring Spirit of ?{Spirit Type?|Air|Beasts|Earth|Fire|Kin|Water|Plant|Guardian|Guidance|Task} Force ?{Force?|1|2|3|4|5|6|7|8|9|10}}}{{dice=[[((@{conjuring}+@{magic}+?{Skill Level?|Skilled (+0),0|Specialization (+2),2|Expertise (+3),3})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=[Spirit Resist](~@{character_name}|SpiritResistForce?{Force?})}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="summonspirit"></span></button>
<span>&nbsp;</span>
<!-- hidden spirit resist buttons -->
<button class="btn ui-draggable" name="act_SpiritResistForce1" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 1 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[2d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
<button class="btn ui-draggable" name="act_SpiritResistForce2" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 2 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[4d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
<button class="btn ui-draggable" name="act_SpiritResistForce3" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 3 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[6d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
<button class="btn ui-draggable" name="act_SpiritResistForce4" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 4 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[8d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
<button class="btn ui-draggable" name="act_SpiritResistForce5" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 5 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[10d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
<button class="btn ui-draggable" name="act_SpiritResistForce6" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 6 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[12d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
<button class="btn ui-draggable" name="act_SpiritResistForce7" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 7 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[14d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
<button class="btn ui-draggable" name="act_SpiritResistForce8" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 8 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[16d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
<button class="btn ui-draggable" name="act_SpiritResistForce9" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 9 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[18d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
<button class="btn ui-draggable" name="act_SpiritResistForce10" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls}{{header=^{force} 10 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[20d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Drain)}}"></button>
</div>
<div class="row-long headers">
<h2 data-i18n="force">Force</h2>
<h2 class="left" data-i18n="spirit">Spirit</h2>
<h2 data-i18n="favors">Favors</h2>
</div>
<div class="rows repeating-container spirits">
<fieldset class="repeating_spirits">
<span class="center" name="attr_force"></span>
<span class="left" name="attr_spirit"></span>
<span class="center" name="attr_services"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapse"><span name="attr_skills"></span></div>
<div class="collapse"><span name="attr_powers"></span></div>
<div class="collapse"><span name="attr_attacks"></span></div>
<div class="settings">
<div class="row spirit-top">
<label data-i18n-title="force" title="force">
<input name="attr_force" placeholder="force" title="@{repeating_spirits_${x}_force}" type="number" value=""/>
</label>
<label data-i18n-title="spirit" title="spirit">
<input class="left" name="attr_spirit" placeholder="spirit" title="@{repeating_spirits_${x}_spirit}" type="text" value=""/>
</label>
<label data-i18n-title="services" title="Services">
<input name="attr_services" placeholder="1" title="@{repeating_spirits_${x}_services}" type="number" value=""/>
</label>
</div>
<div class="row attr-headers">
<h2 data-i18n="b">B</h2>
<h2 data-i18n="a">A</h2>
<h2 data-i18n="r">R</h2>
<h2 data-i18n="s">S</h2>
<h2 data-i18n="w">W</h2>
<h2 data-i18n="l">L</h2>
<h2 data-i18n="i">I</h2>
<h2 data-i18n="c">C</h2>
<h2 data-i18n="m">M</h2>
<h2 data-i18n="ess">Ess</h2>
</div>
<div class="row spirit-attr">
<label data-i18n-title="body" title="Body">
<input name="attr_body" title="@{repeating_spirits_${x}_body}" placeholder="" type="number" step="1" value=""/>
</label>
<label data-i18n-title="agility" title="Agility">
<input name="attr_agility" title="@{repeating_spirits_${x}_agility}" placeholder="" type="number" step="1" value=""/>
</label>
<label data-i18n-title="reaction" title="Reaction">
<input name="attr_reaction" title="@{repeating_spirits_${x}_reaction}" placeholder="" type="number" step="1" value=""/>
</label>
<label data-i18n-title="strength" title="Strength">
<input name="attr_strength" title="@{repeating_spirits_${x}_strength}" placeholder="" type="number" step="1" value=""/>
</label>
<label data-i18n-title="willpower" title="Willpower">
<input name="attr_willpower" title="@{repeating_spirits_${x}_willpower}" placeholder="" type="number" step="1" value=""/>
</label>
<label data-i18n-title="logic" title="Logic">
<input name="attr_logic" title="@{repeating_spirits_${x}_logic}" placeholder="" type="number" step="1" value=""/>
</label>
<label data-i18n-title="intuition" title="Intuition">
<input name="attr_intuition" title="@{repeating_spirits_${x}_intuition}" placeholder="" type="number" step="1" value=""/>
</label>
<label data-i18n-title="charisma" title="Charisma">
<input name="attr_charisma" title="@{repeating_spirits_${x}_charisma}" placeholder="" type="number" step="1" value=""/>
</label>
<label data-i18n-title="magic" title="Magic">
<input name="attr_magic" title="@{repeating_spirits_${x}_magic}" placeholder="" type="number" step="1" value=""/>
</label>
<label data-i18n-title="essence" title="Essence">
<input name="attr_essence" title="@{repeating_spirits_${x}_essence}" placeholder="" type="number" step="1" value=""/>
</label>
</div>
<div class="row spirit-cmmove">
<h3 data-i18n="actions">Actions</h3>
<label data-i18n-title="actions" title="Actions">
<span data-i18n="a"> </span><input name="attr_actions_major" title="@{repeating_spirits_${x}_actions_major}" type="number" value="1"/>
<span class="tiny">/</span>
<span data-i18n="i"> </span><input name="attr_actions_minor" title="@{repeating_spirits_${x}_actions_minor}" type="number" value="2"/>
</label>
<h3 data-i18n="conditionmonitor">Condition Monitor</h3>
<label data-i18n-title="conditionmonitor" title="Condition Monitor">
<input name="attr_physical" title="@{repeating_spirits_${x}_physical}" type="number" value=""/>
</label>
<h3 data-i18n="movement">Movement</h3>
<label data-i18n-title="movement" title="Movement">
<input name="attr_move_speed" title="@{repeating_spirits_${x}_move_speed}" type="number" value="10"/>
<input name="attr_sprint_speed" title="@{repeating_spirits_${x}_sprint_speed}" type="number" value="15"/>
<input name="attr_sprint_mod" title="@{repeating_spirits_${x}_sprint_mod}" type="number" value="1"/>
</label>
</div>
<div class="row spirit-initiatives">
<h3 data-i18n="initiative">Initiative</h3>
<label data-i18n-title="initiative" title="Initiative">
<input name="attr_initiative_base" title="@{repeating_spirits_${x}_initiative_base}" type="number" value=""/>
<span class="tiny"> + </span>
<input name="attr_initiative_dice" title="@{repeating_spirits_${x}_initiative_dice}" type="number" value=""/>
<span class="tiny">d6</span>
</label>
<h3 data-i18n="astralinitiative">Astral Initiative</h3>
<label data-i18n-title="astralinitiative" title="Astral Initiative">
<input name="attr_astral_initiative_base" title="@{repeating_spirits_${x}_astral_initiative_base}" type="number" value=""/>
<span class="tiny"> + </span>
<input name="attr_astral_initiative_dice" title="@{repeating_spirits_${x}_astral_initiative_dice}" type="number" value=""/>
<span class="tiny">d6</span>
</label>
</div>
<div class="row spirit-skills">
<h3 data-i18n="skills">Skills</h3>
<label data-i18n-title="skills" title="Skills">
<textarea name="attr_skills" placeholder="Skills" title="@{repeating_spirits_${x}_skills}"></textarea>
</label>
</div>
<div class="row spirit-powers">
<h3 data-i18n="powers">powers</h3>
<label data-i18n-title="powers" title="powers">
<textarea name="attr_powers" placeholder="powers" title="@{repeating_spirits_${x}_powers}"></textarea>
</label>
</div>
<div class="row spirit-attacks">
<h3 data-i18n="attacks">attacks</h3>
<label data-i18n-title="attacks" title="attacks">
<textarea name="attr_attacks" placeholder="attacks" title="@{repeating_spirits_${x}_attacks}"></textarea>
</label>
</div>
</div>
</fieldset>
</div>
</div>
<div class="powers-meta">
<div class="row-long mage-setup">
<div class="row1">
<span></span>
<select class='mage-type' name='attr_mage_type' title='@{mage_type}'>
<option data-i18n="mage" value="Mage" selected="selected">Mage</option>
<option data-i18n="adept" value="Adept">Adept</option>
<option data-i18n="mysticadept" value="Mystic Adept">Mystic Adept</option>
</select>
<span></span>
<h3 data-i18n="initiategrade">Initiate Grade</h3>
<label data-i18n-title="initiategrade" title="initiategrade">
<input name="attr_initiate_grade" placeholder="0" title="@{initiate_grade}" type="number" min="0" step="1" value="">
</label>
<span></span>
<input type="hidden" name="attr_magic_ar" value="0">
<label><button name="act_magic_ar" type="action" value="&{template:rolls-computed}{{header=@{character_name}}}{{base=^{magic} ^{attack} ^{rating}}}{{rating=[[@{magic_ar}]]}}{{desc=Magic + @{tradition_attribute}}}" title="Magic Attack Rating"><span class="red"><span data-i18n="magicar">Magic AR</span> <span name='attr_magic_ar'></span></span></button></label>
</div>
<div class="row2">
<span></span>
<h2 data-i18n="tradition">Tradition</h2>
<label data-i18n-title="tradition" title="tradition">
<select name='attr_tradition' title='@{tradition}'>
<option data-i18n="hermeticism" value="Hermeticism">Hermeticism</option>
<option data-i18n="hermeticism-intuition" value="Hermeticism (Intuition)">Hermeticism (Intuition)</option>
<option data-i18n="hermeticism-charisma" value="Hermeticism (Charisma)">Hermeticism (Charisma)</option>
<option data-i18n="shamanism" value="Shamanism">Shamanism</option>
<option data-i18n="shamanism-logic" value="Shamanism (Logic)">Shamanism (Logic)</option>
<option data-i18n="shamanism-intuition" value="Shamanism (Intuition)">Shamanism (Intuition)</option>
</select>
</label>
<span></span>
<h2 class="magic-aspect" data-i18n-title="aspect" title="aspect">Aspect</h2>
<select class="magic-aspect" name='attr_aspect' title='@{aspect}'>
<option data-i18n="non-aspected" value="Non-Aspected">Non-Aspected</option>
<option data-i18n="sorcery" value="Sorcery">Sorcery</option>
<option data-i18n="conjuring" value="Conjuring">Conjuring</option>
<option data-i18n="enchanting" value="Enchanting">Enchanting</option>
</select>
</div>
</div>
<div class="row-long headers">
<h2 data-i18n="metamagic">Metamagic</h2>
<h2 class="center" data-i18n="level">Level</h2>
</div>
<div class="rows repeating-container metamagic">
<fieldset class="repeating_metamagic">
<span name="attr_name"></span>
<span class="center" name="attr_rating"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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_metamagic_${x}_name}" type="text" value=""/>
</label>
<label data-i18n-title="rating" title="rating">
<input name="attr_rating" placeholder="rating" title="@{repeating_metamagic_${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_metamagic_${x}_notes}"></textarea>
</label>
<h3 data-i18n="modifications">modifications</h3>
<label data-i18n-title="modifications" title="modifications">
<textarea name="attr_modifications" placeholder="Attribute: +/- mod" title="@{repeating_items_${x}_modifications}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="matrix pc-col">
<div class="pc-row matrix-box">
<div class="header right-header">
<h1 data-i18n="persona">Persona</h1>
<div class="right-tri"></div>
</div>
<div class="border-box">
<div class="pc-box medium-box">
<div class="cyberdeck">
<div class="row-matrix-combat-stats">
<input type="hidden" name="attr_matrix_device_rating" value="0">
<input type="hidden" name="attr_matrix_defense_rating" value="0">
<input type="hidden" name="attr_matrix_defense_rating_modifier" value="0">
<input type="hidden" name="attr_matrix_attack_rating" value="0">
<input type="hidden" name="attr_matrix_device_initiative_bonus" value="0">
<input type="hidden" name="attr_matrix_device_essence_cost" value="0">
<span>&nbsp;</span>
<label><button class="techno-hide" name="act_matrix_device_rating" type="action" value="&{template:rolls}{{header=@{character_name}}}{{base=Matrix Device Rating}}{{rating=@{matrix_device_rating}}}" title="Matrix Device Rating"><span data-i18n="devicerating">Device Rating</span><span name='attr_matrix_device_rating'></span></button></label>
<span>&nbsp;</span>
<label><button name="act_matrix_attack_rating" type="action" value="&{template:rolls}{{header=@{character_name}}}{{base=Matrix Attack Rating}}{{rating=[[(@{attack}+@{sleaze})]]}}{{desc=Attack + Sleaze}}" title="Matrix Attack Rating"><span data-i18n="attackrating">Attack Rating</span><span name='attr_matrix_attack_rating'></span></button></label>
<span>&nbsp;</span>
<label><button name="act_matrix_defense_rating" type="action" value="&{template:rolls}{{header=@{character_name}}}{{base=Matrix Defense Rating}}{{rating=[[@{matrix_defense_rating}]]}}{{desc=Data Processing + Firewall}}" title="Matrix Defense Rating"><span data-i18n="defenserating">Defense Rating</span><span name='attr_matrix_defense_rating'></span></button></label>
<span>&nbsp;</span>
</div>
<div class="row-long row-matrix-soak">
<div>&nbsp;</div>
<button name="act_soak_matrix" type="action" value="@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{matrix} ^{soak} = ^{firewall}}}{{dice=[[((@{firewall})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" title="Firewall"><span class="center" data-i18n="matrixsoak">Matrix Soak</span></span>
</button>
<div>&nbsp;</div>
<button name="act_soak_biofeedback" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{biofeedback} ^{soak} = ^{willpower}}}{{dice=[[(@{willpower}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=Willpower + Intuition}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" title="Willpower"><span class="center" data-i18n="biofeedbacksoak">Biofeedback Soak</span></span>
</button>
<div>&nbsp;</div>
</div>
<div class="row-long technomancer-attributes techno-see">
<span>&nbsp;</span>
<label data-i18n="attributearray">Attribute Array</label>
<input type="number" name="attr_attack_base" step="1" min="0" value="" placeholder="A" />
<input type="number" name="attr_sleaze_base" step="1" min="0" value="" placeholder="S" />
<input type="number" name="attr_data_processing_base" step="1" min="0" value="" placeholder="D" />
<input type="number" name="attr_firewall_base" step="1" min="0" value="" placeholder="F" />
<span>&nbsp;</span>
</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 name="act_matrix_attack" type="action" value="" 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="0" placeholder="0" title="@{attack_temp}" /> +
<input type="number" name="attr_attack_modifier" min="0" value="0" placeholder="0" title="@{attack_modifier}" /> +
<input type="number" name="attr_attack_base" min="0" value="0" placeholder="7" title="@{attack_base}" />
<div class="device-attr">
<div class="matrix-bubble matrixAttack">
<input type="radio" name="attr_attack_base" value="0" /><span></span>
<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 name="act_matrix_sleaze" type="action" value="" 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="0" placeholder="0" title="@{sleaze_temp}" /> +
<input type="number" name="attr_sleaze_modifier" min="0" value="0" placeholder="0" title="@{sleaze_modifier}" /> +
<input type="number" name="attr_sleaze_base" min="0" value="0" placeholder="6" title="@{sleaze_base}" />
<div class="device-attr">
<div class="matrix-bubble matrixSleaze">
<input type="radio" name="attr_sleaze_base" value="0" /><span></span>
<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 name="act_matrix_data_processing" type="action" value="" 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" value="0" placeholder="0" title="@{data_processing_temp}" /> +
<input type="number" name="attr_data_processing_modifier" min="0" value="0" placeholder="0" title="@{data_processing_modifier}" /> +
<input type="number" name="attr_data_processing_base" min="0" value="0" placeholder="5" title="@{data_processing_base}" />
<div class="device-attr">
<div class="matrix-bubble matrixData">
<input type="radio" name="attr_data_processing_base" value="0" /><span></span>
<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 name="act_matrix_firewall" type="action" value="" 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="0" placeholder="0" title="@{firewall_temp}" /> +
<input type="number" name="attr_firewall_modifier" min="0" value="0" placeholder="0" title="@{firewall_modifier}" /> +
<input type="number" name="attr_firewall_base" min="0" value="0" placeholder="4" title="@{firewall_base}" />
<div class="device-attr">
<div class="matrix-bubble matrixFirewall">
<input type="radio" name="attr_firewall_base" value="0" /><span></span>
<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 techno-hide">
<input type="hidden" name="attr_condition_monitor_link" value="">
<input type="hidden" name="attr_matrix_hex_max" value="12">
<input type="radio" name="attr_matrix_hex" value="0" /><h2 data-i18n="conditionmonitor">Condition Monitor</h2>
<input type="radio" name="attr_matrix_hex" value="1" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="2" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="3" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="4" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="5" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="6" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="7" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="8" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="9" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="10" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="11" /><span class="hexagon"></span>
<input type="radio" name="attr_matrix_hex" value="12" /><span class="hexagon"></span>
</div>
</div>
<div>&nbsp;</div>
<div class="rows repeating-container devices">
<div class="row-long headers">
<h2 data-i18n="device">Device</h2>
<h2 data-i18n="rtg">RTG</h2>
<h2 data-i18n="primary">Primary</h2>
<h2>&nbsp;</h2>
<h2>&nbsp;</h2>
</div>
<fieldset class="repeating_devices">
<span name="attr_name"></span>
<span name="attr_device_rating"></span>
<span name="attr_primary_device"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="persona-attribute-buttons techno-hide">
<div class="row3">
<span>&nbsp;</span>
<span>
<input type="checkbox" name="attr_attack_primary" value="1">
<button name="attack"><span data-i18n="attack">Attack</span> <span name="attr_attack"></span></button>
</span>
<span>
<input type="checkbox" name="attr_sleaze_primary" value="1">
<button name="sleaze"><span data-i18n="sleaze"></span> <span name="attr_sleaze"></span></button>
</span>
<span>
<input type="checkbox" name="attr_data_processing_primary" value="1">
<button name="dataproc"><span data-i18n="dataproc"></span> <span name="attr_data_processing"></span></button>
</span>
<span>
<input type="checkbox" name="attr_firewall_primary" value="1">
<button name="firewall"><span data-i18n="firewall"></span> <span name="attr_firewall"></span></button>
</span>
<span>&nbsp;</span>
</div>
</div>
<div class="collapse">
<span name="attr_notes"></span>
</div>
<div class="settings">
<div class="rows">
<div class="row1">
<label data-i18n-title="device" title="device">
<input name="attr_name" title="@{repeating_devices_${x}_name}" type="text" value="" placeholder="Fairlight Excalibur"/>
</label>
<label data-i18n-title="devicerating" title="devicerating">
<input name="attr_device_rating" placeholder="6" title="@{repeating_devices_${x}_device_rating}" type="number" value=""/>
</label>
<label data-i18n-title="primary" title="primary">
<input type="checkbox" name="attr_primary_device" title="@{repeating_devices_${x}_primary_device}" value="1">
</label>
</div>
<div class="row2">
<span>&nbsp;</span>
<h3 data-i18n="devicetype">Device Type</h3>
<label data-i18n-title="devicetype" title="Device Type">
<select name="attr_type" title="@{repeating_devices_${x}_type}">
<option data-i18n="commlink" value="Commlink">Commlink</option>
<option data-i18n="cyberdeck" value="Cyberdeck">Cyberdeck</option>
<option data-i18n="cyberjack" value="Cyberjack">Cyberjack</option>
<option data-i18n="commandconsole" value="Command Console">Command Console</option>
<option data-i18n="mtoc" value="M-TOC">M-TOC</option>
</select>
</label>
<span>&nbsp;</span>
<h3 data-i18n="activeprogramslots">Program Slots</h3>
<label data-i18n-title="activeprogramslots" title="Program Slots">
<input name="attr_active_program_slots" title="@{repeating_devices_${x}_active_program_slots" type="number" step="1" value="0">
</label>
<span>&nbsp;</span>
</div>
<div class="row3">
<span>&nbsp;</span>
<label data-i18n-title="attack" title="attack">
<span data-i18n="attack"></span>
<input type="number" name="attr_attack" value="" placeholder="9" title="@{repeating_devices_${x}_attack" step="1">
</label>
<label data-i18n-title="sleaze" title="Sleaze">
<span data-i18n="sleaze"></span>
<input type="number" name="attr_sleaze" value="" placeholder="9" title="@{repeating_devices_${x}_sleaze" step="1">
</label>
<label data-i18n-title="dataproc" title="Data Proc">
<span data-i18n="dataproc"></span>
<input type="number" name="attr_data_processing" value="" placeholder="9" title="@{repeating_devices_${x}_data_processing" step="1">
</label>
<label data-i18n-title="firewall" title="Firewall">
<span data-i18n="firewall"></span>
<input type="number" name="attr_firewall" value="" placeholder="9" title="@{repeating_devices_${x}_firewall" step="1">
</label>
<span>&nbsp;</span>
</div>
<div class="row4">
<span>&nbsp;</span>
<h3 data-i18n="matrixinitiativedicebonus">Matrix Initiative Dice Bonus</h3>
<label data-i18n-title="matrixinitiativebonus" title="Matrix Initiative Bonus">
<input type="number" name="attr_matrix_initiative_bonus" value="" title="@{repeating_devices_${x}_matrix_initiative_bonus" step="1">
</label>
<span>&nbsp;</span>
<h3 data-i18n="essencecost">Essence Cost</h3>
<label data-i18n-title="essencecost" title="Essence Cost">
<input type="number" name="attr_essence_cost" value="" title="@{repeating_devices_${x}_essence_cost" step=".01">
</label>
<span>&nbsp;</span>
</div>
<div class="row-condition-monitor">
<span>&nbsp;</span>
<h3 data-i18n="conditionmonitor">Current Condition Monitor</h3>
<label data-i18n-title="conditionmonitor" title="conditionmonitor">
<input type="number" name="attr_condition_monitor" value="" title="@{repeating_devices_${x}_condition_monitor}" step="1">
</label>
<span>&nbsp;</span>
<h3 data-i18n="conditionmonitormax">Condition Monitor Max</h3>
<label data-i18n-title="conditionmonitormax" title="conditionmonitormax">
<input type="number" name="attr_condition_monitor_max" value="" title="@{repeating_devices_${x}_condition_monitor_max}" step="1">
</label>
<span>&nbsp;</span>
</div>
<div class="row5">
<h3 data-i18n="notes">notes</h3>
<label data-i18n-title="notes" title="notes">
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_devices_${x}_notes}"></textarea>
</label>
</div>
<div class="row5">
<h3 data-i18n="modifications">modifications</h3>
<label data-i18n-title="modifications" title="modifications">
<textarea name="attr_modifications" placeholder="Attribute: +/-mod" title="@{repeating_devices_${x}_modifications}"></textarea>
</label>
</div>
</div><!-- end rows -->
</div><!-- end settings -->
</fieldset>
</div>
<div class="rows repeating-container programs">
<h2 data-i18n="programs">Programs</h2>
<fieldset class="repeating_programs">
<input class="toggle" name="attr_powered_on" type="checkbox" checked="checked"/>
<span class="pictos">Q</span>
<span name="attr_name"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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_name" 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}"></textarea>
</label>
<h3 data-i18n="modifications">Modifications</h3>
<label data-i18n-title="modifications" title="Modifications">
<textarea name="attr_modifications" placeholder="Attribute: +/-mod" title="@{repeating_programs_${x}_modifications}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
</div>
</div>
<!-- Technomancer -->
<div class="pc-row techno techno-see">
<div class="header right-header">
<h1 data-i18n="technomancer">Technomancer</h1>
<div class="right-tri"></div>
</div>
<div class="header right-header">
<div class="header htab">
<div class="triangle"></div>
<input class="techno-toggle" name="attr_techno_toggle" title="@{techno_toggle}" type="radio" value="complexforms"/>
<h1 data-i18n="complexforms">Complex Forms</h1>
<div class="right-tri"></div>
</div>
<div class="header htab">
<div class="triangle"></div>
<input class="techno-toggle" name="attr_techno_toggle" title="@{techno_toggle}" type="radio" value="submersion"/>
<h1 data-i18n="submersion">Submersion</h1>
<div class="right-tri"></div>
</div>
</div>
<div class="border-box">
<div class="pc-box medium-box">
<input class="techno-toggle" name="attr_techno_toggle" type="hidden" value="complexforms"/>
<div class="complex-forms-rolls complexforms">
<input type="hidden" name="attr_complex_form_attack_rating" value="0">
<button name="roll_complex_forms_attack_rating" type="roll" value="&{template:rolls}{{header=@{character_name}}}{{base=Complex Form Attack Rating}}{{rating=[[@{electronics}+@{resonance}]]}}{{desc=Electronics + Resonance}}" title="Complex Form Attack Rating"><span data-i18n="attackrating">Attack Rating</span><span name='attr_complex_form_attack_rating'></span></button>
<button data-i18n="resistfade" name="act_fade" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{resistfade}}}{{dice=[[(@{willpower}+@{logic}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}{{desc=Willpower + Logic}}"></button>
<div class="rows repeating-container complex-forms">
<div class="row-long headers">
<h2 data-i18n="complexform">Complex Form</h2>
<h2 data-i18n="duration">Duration</h2>
<h2 data-i18n="fade">Fade</h2>
</div>
<fieldset class="repeating_forms">
<input name="attr_dicepool" type="hidden" value="0"/>
<span class='hide-roll-button' name='attr_skill'></span><span class='show-name'><button name="act_complexformnoroll" type="action" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{complexform} @{name}}}{{desc=@{notes}}}{{fade=[[@{fade}]]}}"><span name="attr_name"></span></button></span>
<button name="act_complexform" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{complexform} @{name}}}{{dice=[[((@{skill}+@{resonance}+@{dicepool_modifier}+@{spec}+@{expert})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=@{notes}}}{{fade=[[@{fade}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_duration"></span>
<span class="center" name="attr_fade"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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_duration" title="@{repeating_forms_${x}_duration}">
<option data-i18n="instant" value="Instant">Instant</option>
<option data-i18n="sustained" value="Sustained">Sustained</option>
<option data-i18n="limited" value="Limited">Limited</option>
<option data-i18n="permanent" value="Permanent">Permanent</option>
<option data-i18n="other" value="Other">Other</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}">
<option data-i18n="noroll" value="">No Roll</option>
<option data-i18n="cracking" value="@{cracking}">Cracking</option>
<option data-i18n="electronics" value="@{electronics}">Electronics</option>
<option data-i18n="tasking" value="@{tasking}">Tasking</option>
</select>
<h3 data-i18n="specialization">Specialization</h3>
<label data-i18n-title="specialization" title="Specialization">
<input name="attr_spec" value="2" title="@{repeating_forms_${x}_spec}" type="checkbox"/>
</label>
<h3 data-i18n="expertise">Expertise</h3>
<label data-i18n-title="expertise" title="Expertise">
<input name="attr_expert" value="3" title="@{repeating_forms_${x}_expert}" type="checkbox"/>
</label>
</div>
<div class="row">
<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}"></textarea>
</label>
<h3 data-i18n="modifications">Modifications</h3>
<label data-i18n-title="modifications" title="Modifications">
<textarea name="attr_modifications" placeholder="Attribute: +/-mod" title="@{repeating_forms_${x}_modifications}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
<div class="complex-forms-rolls submersion">
<input class="techno-toggle" name="attr_techno_toggle" type="hidden" value="submersion"/>
<div class="pc-row submersion-headers">
<button data-i18n="resistfade" name="act_fade_compiling" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{resistfade} ^{compiling}}}{{dice=[[(@{willpower}+@{charisma}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}{{desc=Willpower + Charisma}}"></button>
<span>&nbsp;</span>
<h2 data-i18n="submersionlevel">Submersion Level</h2>
<label data-i18n-title="submersionlevel" title="Submersion Level">
<input name="attr_submersion_level" value="0" title="@{submersion_level}" type="number" min='0' step='1'>
</label>
</div>
<div class="row-long compile-sprite-button">
<span>&nbsp;</span>
<button name="act_compiling" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Compiling ?{sprite Type?|Courier|Crack|Data|Fault|Machine|Other} Sprite, Level ?{Level?|1|2|3|4|5|6|7|8|9|10}}}{{dice=[[((@{tasking}+@{resonance}+?{Skill Level?|Skilled (+0),0|Specialization (+2),2|Expertise (+3),3})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=[Sprite Resist](~@{character_name}|spriteResistLevel?{Level?})}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="compilesprite"></span></button>
<span>&nbsp;</span>
<!-- hidden sprite resist buttons -->
<button class="btn ui-draggable" name="act_spriteresistlevel1" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 1 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[2d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
<button class="btn ui-draggable" name="act_spriteresistlevel2" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 2 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[4d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
<button class="btn ui-draggable" name="act_spriteresistlevel3" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 3 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[6d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
<button class="btn ui-draggable" name="act_spriteresistlevel4" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 4 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[8d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
<button class="btn ui-draggable" name="act_spriteresistlevel5" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 5 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[10d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
<button class="btn ui-draggable" name="act_spriteresistlevel6" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 6 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[12d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
<button class="btn ui-draggable" name="act_spriteresistlevel7" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 7 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[14d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
<button class="btn ui-draggable" name="act_spriteresistlevel8" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 8 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[16d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
<button class="btn ui-draggable" name="act_spriteresistlevel9" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 9 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[18d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
<button class="btn ui-draggable" name="act_spriteresistlevel10" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls}{{header=^{level} 10 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[20d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}"></button>
</div>
<div class="rows">
<h1 data-i18n="echos">Echos</h1>
</div>
<div class="rows repeating-container echoes">
<fieldset class="repeating_echoes">
<span name="attr_name"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
<label data-i18n-title="echo" title="Echo">
<input name="attr_name" type="text" title="@{repeating_echos_${x}_name}">
</label>
<label data-i18n-title="notes" title="Notes"><span data-i18n="notes">Notes</span>
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_echos_${x}_notes}"></textarea>
</label>
<label data-i18n-title="modifications" title="Modifications"><span data-i18n="modifications">Modifications</span>
<textarea name="attr_modifications" placeholder="Attribute: +/-mod" title="@{repeating_echos_${x}_modifications}"></textarea>
</label>
</div>
</fieldset>
</div>
<div>&nbsp;</div>
<div class="rows">
<h1 data-i18n="sprites">Sprites</h1>
</div>
<div class="rows repeating-container sprites">
<div class="pc-row headers">
<span>&nbsp;</span>
<h2 data-i18n="lvl">Lvl</h2>
<h2 data-i18n="type">Type</h2>
<h2 data-i18n="tasks">Tasks</h2>
<span>&nbsp;</span>
<span>&nbsp;</span>
<span>&nbsp;</span>
</div>
<fieldset class="repeating_sprites">
<span>&nbsp;</span>
<span name="attr_level"></span>
<span name="attr_type"></span>
<span name="attr_tasks"></span>
<span>&nbsp;</span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
<label data-i18n-title="level" title="Level">
<input name="attr_level" title="@{repeating_sprites_${x}_level}" type="number" min='0' step='1' value=''>
</label>
<label data-i18n-title="tasks" title="Tasks">
<select name="attr_type" title="@{repeating_sprites_${x}_type}">
<option data-i18n="couriersprite" value="Courier">Courier</option>
<option data-i18n="cracksprite" value="Crack">Crack</option>
<option data-i18n="datasprite" value="Data">Data</option>
<option data-i18n="faultsprite" value="Fault">Fault</option>
<option data-i18n="machinesprite" value="Machine">Machine</option>
<option data-i18n="other" value="Other">Other</option>
</select>
</label>
<label data-i18n-title="tasks" title="@{repeating_sprites_${x}_tasks}">
<input name="attr_tasks" type="number" title="@{repeating_sprites_${x}_tasks}" min='0' step='1' value=''>
</label>
<span>&nbsp;</span>
<label data-i18n-title="notes" title="Notes"><span data-i18n="notes">Notes</span>
<textarea name="attr_notes" placeholder="Notes" title="@{repeating_sprites_${x}_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="social pc-col">
<div class="pc-row"><!-- ~~~~~~~~ Start of Lifestyles Row ~~~~~~~~ -->
<div class="header right-header">
<h1 data-i18n="idslifestylecurrency">IDs/Lifestyles/Currency</h1>
<div class="right-tri"></div>
</div>
<div class="border-box repeat-box lifestyle">
<div class="pc-box small-box social-box">
<div class="row-long">
<h3 class="nuyen">¥</h3>
<input type="text" name="attr_nuyen" placeholder="-" title="@{nuyen}" />
<h3 data-i18n="birthname">Birth Name</h3>
<input type="text" name="attr_birth_name" placeholder="John Q Public" title="@{birth_name}" />
</div>
<div class="row-long">
&nbsp;
</div>
<div class="row-long sins-headers">
<h3 data-i18n="sinname">SIN Name</h3>
<h3 data-i18n="rtg">RTG</h3>
<h3 data-i18n="lifestylelicensesnotes" class="center">Lifestyle / Licenses / Notes</h3>
<span></span>
</div>
<fieldset class="repeating_lifestyle">
<input type="hidden" class="settings-toggle" name="attr_flag" value="settings" />
<input class="display-flag" type="checkbox" name="attr_display_flag" />
<span name="attr_name"></span>
<span class="center" name="attr_rating"></span>
<span class="collapsible">
<span class="desc-lifestyle" name="attr_lifestyle"></span>
<span class="desc-lifestyle" name="attr_licenses"></span>
<span class="desc-lifestyle" name="attr_notes"></span>
</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="settings">
<label data-i18n-title="fakeid" title="Fake ID">
<span data-i18n="fakeid">Fake ID</span>
<input type="text" name="attr_name" placeholder="SIN Name" title="SIN Name" />
</label>
<span></span>
<label data-i18n-title="rating" title="Rating">
<span data-i18n="rating">Rating</span>
<input type="number" name="attr_rating" placeholder="1" title="Rating" />
</label>
<h3 data-i18n="relatedlifestyle">Related Lifestyle</h3>
<textarea name="attr_lifestyle" placeholder="Middle" title="Related lifestyle"></textarea>
<h3 data-i18n="licenses">Licenses</h3>
<textarea name="attr_licenses" placeholder="Technomancer, Pistols" title="Licenses"></textarea>
<h3 data-i18n="notes">Notes</h3>
<textarea name="attr_notes" placeholder="Notes" title="Notes"></textarea>
</div>
</fieldset>
</div>
</div>
</div>
<!-- ~~~~~~~~ End of Lifestyle Row ~~~~~~~~ -->
<!-- ~~~~~~~~ Start Contacts Row ~~~~~~~~ -->
<div class="pc-row">
<div class="header right-header">
<h1 data-i18n="contacts">Contacts</h1>
<div class="right-tri"></div>
</div>
<div class="border-box repeat-box contacts">
<div class="pc-box small-box">
<button class="btn ui-draggable" name="act_loyalty1" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 1}}{{dice=[[(@{charisma}+@{influence}+1)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_loyalty2" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 2}}{{dice=[[(@{charisma}+@{influence}+2)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_loyalty3" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 3}}{{dice=[[(@{charisma}+@{influence}+3)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_loyalty4" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 4}}{{dice=[[(@{charisma}+@{influence}+4)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_loyalty5" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 5}}{{dice=[[(@{charisma}+@{influence}+5)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_loyalty6" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 6}}{{dice=[[(@{charisma}+@{influence}+6)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_loyalty7" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 7}}{{dice=[[(@{charisma}+@{influence}+7)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_loyalty8" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 8}}{{dice=[[(@{charisma}+@{influence}+8)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_loyalty9" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 9}}{{dice=[[(@{charisma}+@{influence}+9)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_loyalty10" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{loyalty} 10}}{{dice=[[(@{charisma}+@{influence}+10)d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections1" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 1}}{{dice=[[2d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections2" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 2}}{{dice=[[4d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections3" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 3}}{{dice=[[6d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections4" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 4}}{{dice=[[8d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections5" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 5}}{{dice=[[10d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections6" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 6}}{{dice=[[12d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections7" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 7}}{{dice=[[14d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections8" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 8}}{{dice=[[16d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections9" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 9}}{{dice=[[18d6>5]]}}"></button>
<button class="btn ui-draggable" name="act_connections10" type="action" style="display: none;" value="/w GM &{template:rolls}{{header=@{character_name}}}{{base=^{connection} 10}}{{dice=[[20d6>5]]}}"></button>
<div class="row-long">
<h3 data-i18n="name">Name</h3>
<h3 data-i18n="loyalty">Loyalty</h3>
<h3 data-i18n="connection">Connection</h3>
<h3 data-i18n="favor">Favor</h3>
<span>&nbsp;</span>
<span>&nbsp;</span>
</div>
<fieldset class="repeating_contacts">
<input type="hidden" class="settings-toggle" name="attr_flag" value="settings" />
<input class="display-flag" type="checkbox" name="attr_display_flag" />
<label title="Contact name"><span name="attr_display"></span></label>
<label title="Loyalty"><span name="attr_loyalty"></span></label>
<label title="Influence"><span name="attr_influence"></span></label>
<label title="Favors"><span name="attr_favors"></span></label>
<button class="pictos" name="contact_chat" type="roll" value="@{gm_toggle} &{template:contact}{{header=@{character_name}}}{{name=@{name}}}{{loyalty=@{loyalty}}}{{connection=@{influence}}}{{favor=@{favors}}}{{desc=@{notes}}}">w</button>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapsible">
<div class="desc" title="Notes"><span name="attr_notes"></span></div>
</div>
<div class="settings">
<input type="text" name="attr_name" placeholder="Contact Name" title="Contact name" />
<input type="number" name="attr_loyalty" min="1" placeholder="1" title="Loyalty" />
<input type="number" name="attr_influence" min="1" placeholder="1" title="Influence" />
<input type="number" name="attr_favors" placeholder="-" title="Favors" />
<span>&nbsp;</span>
<span>&nbsp;</span>
<h3 data-i18n="notes">Notes</h3>
<textarea name="attr_notes" placeholder="Notes"></textarea>
</div>
</fieldset>
</div>
</div>
</div><!-- ~~~~~~~~ End of Contacts row ~~~~~~~~ -->
</div>
<!-- PC Vehicles / Drones -->
<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 repeat-box vehicle-box">
<div class="pc-box medium-box">
<fieldset class="repeating_vehicle">
<input type="hidden" class="settings-toggle" name="attr_flag" value="settings" />
<div class="settings">
<div>
<div class="row-long">
<label style="width: 10%;" data-i18n="vehicle">Vehicle</label>
<input style="width: 30%;" type="text" name="attr_name" placeholder="name" title="Vehicle name" />
<span>&nbsp;</span>
<span>&nbsp;</span>
<span>&nbsp;</span>
<span>&nbsp;</span>
<span>&nbsp;</span>
<label data-i18n="type" style="width: 10%; text-align: right;">Type</label>
<select class="attribute-select" style="width: 30%" name="attr_type" title="@{repeating_vehicle_${x}_type}">
<option data-i18n="bike" value="Bike">Bike</option>
<option data-i18n="atv" value="ATV">ATV</option>
<option data-i18n="car" value="Car">Car</option>
<option data-i18n="truck" value="Truck">Truck</option>
<option data-i18n="van" value="Van">Van</option>
<option data-i18n="bus" value="Bus">Bus</option>
<option data-i18n="tracked" value="Tracked">Tracked</option>
<option data-i18n="hovercraft" value="Hovercraft">Hovercraft</option>
<option data-i18n="pwc" value="PWC">PWC</option>
<option data-i18n="boat" value="Boat">Boat</option>
<option data-i18n="ship" value="Ship">Ship</option>
<option data-i18n="submarine" value="Submarine">Submarine</option>
<option data-i18n="fixedwingaircraft" value="Fixed Wing Aircraft">Fixed Wing Aircraft</option>
<option data-i18n="rotorcraft" value="Rotorcraft">Rotorcraft</option>
<option data-i18n="vtolvstol" value="VTOL/VSTOL">VTOL/VSTOL</option>
<option data-i18n="ltav" value="LTAV">LTAV</option>
<option data-i18n="lav" value="LAV">LAV</option>
<option data-i18n="gravity" value="Gravity">Gravity</option>
<option data-i18n="trailer" value="Trailer">Trailer</option>
<option data-i18n="other" value="Other">Other</option>
<option data-i18n="drone" value="Drone">Drone</option>
<option data-i18n="microdrone" value="Microdrone">Microdrone</option>
<option data-i18n="minidrone" value="Minidrone">Minidrone</option>
<option data-i18n="smalldrone" value="Small Drone">Small Drone</option>
<option data-i18n="mediumdrone" value="Medium Drone">Medium Drone</option>
<option data-i18n="largedrone" value="Large Drone">Large Drone</option>
</select>
</div>
<div class="row-long">
<label data-i18n="handling">Handling</label>
<input type="hidden" name="attr_handling" />
<input type="number" name="attr_handling_onroad" placeholder="On" title="Handling On-Road" />
<input type="number" name="attr_handling_offroad" placeholder="Off" title="Handling Off-Road" />
<input type="number" name="attr_handling_modifier" placeholder="Mod" title="Handling Temp Modifier" />
<input type="hidden" name="attr_display_handling" />
<input type="hidden" name="attr_seats" />
<label data-i18n="seats" style="width: 14%;" >Seats</label>
<input type="number" name="attr_seats" placeholder="#" title="# Seats" />
</div>
<div class="row-long">
<label data-i18n="acceleration">Acceleration</label>
<input type="hidden" name="attr_acceleration" />
<input type="number" name="attr_acceleration_base" placeholder="Base" title="Acceleration Base" />
<input type="number" name="attr_acceleration_modifier" placeholder="Mod" title="Acceleration Modifier" />
<input type="hidden" name="attr_display_acceleration" />
<span>&nbsp;</span>
<label data-i18n="speed">Speed</label>
<input type="hidden" name="attr_speed" />
<input type="number" name="attr_speed_base" placeholder="Base" title="Speed Interval" />
<input type="number" name="attr_speed_modifier" placeholder="Mod" title="Speed Modifier" />
<input type="number" name="attr_speed_max" placeholder="Max" title="Speed Max" />
<input type="hidden" name="attr_display_speed" />
</div>
<div class="row-long">
<label data-i18n="body">Body</label>
<input type="hidden" name="attr_body" />
<input type="number" name="attr_body_base" placeholder="Base" title="Body Base" />
<input type="number" name="attr_body_modifier" placeholder="Mod" title="Body Modifier" />
<span>&nbsp;</span>
<input type="hidden" name="attr_display_body" />
<label data-i18n="armor">Armor</label>
<input type="hidden" name="attr_armor" />
<input type="number" name="attr_armor_base" placeholder="Base" title="Armor Base" />
<input type="number" name="attr_armor_modifier" placeholder="Mod" title="Armor Modifier" />
<span>&nbsp;</span>
<input type="hidden" name="attr_display_armor" />
</div>
<div class="row-long">
<label data-i18n="pilot">Pilot</label>
<input type="hidden" name="attr_pilot" />
<input type="number" name="attr_pilot_base" placeholder="Base" title="Pilot Base" />
<input type="number" name="attr_pilot_modifier" placeholder="Mod" title="Pilot Modifier" />
<span>&nbsp;</span>
<input type="hidden" name="attr_display_pilot" />
<label data-i18n="sensor">Sensor</label>
<input type="hidden" name="attr_sensor" />
<input type="number" name="attr_sensor_base" placeholder="Base" title="Sensor Base" />
<input type="number" name="attr_sensor_modifier" placeholder="Mod" title="Sensor Modifier" />
<span>&nbsp;</span>
<input type="hidden" name="attr_display_sensor" />
</div>
<div class="row-long autosofts">
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_clearsight" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="clearsight" name="act_pcclearsight" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{clearsight} = ^{clearsight} + ^{sensor}}}{{dice=[[(@{clearsight}+@{display_sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input type="number" name="attr_clearsight" title="Clearsight" value="0">
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_electronicwarfare" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="electronicwarfare" name="act_pcelectronicwarfare" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{electronicwarfare} = ^{electronicwarfare} + ^{sensor}}}{{dice=[[(@{electronicwarfare}+@{display_sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input type="number" name="attr_electronicwarfare" title="Electronic Warfare" value="0">
</div>
</div>
<div class="row-long autosofts">
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_evasion" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="evasion" name="act_pcevasion" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{evasion} = ^{evasion} + ^{pilot}}}{{dice=[[(@{evasion}+@{display_pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input type="number" name="attr_evasion" title="evasion" value="0">
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_maneuvering" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="maneuvering" name="act_pcmaneuvering" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{maneuvering} = ^{maneuvering} + ^{pilot}}}{{dice=[[(@{maneuvering}+@{display_pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input type="number" name="attr_maneuvering" title="Electronic Warfare" value="0">
</div>
</div>
<div class="row-long autosofts">
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_stealth" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="stealth" name="act_pcstealth" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{stealth} = ^{stealth} + ^{pilot}}}{{dice=[[(@{stealth}+@{display_pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input type="number" name="attr_stealth" title="stealth" value="0">
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_targeting_0" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="targeting" name="act_pctargeting" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{targeting} = ^{targeting} + ^{sensor}}}{{dice=[[(@{targeting}+@{display_sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input type="number" name="attr_targeting" title="[Weapon] Targeting" value="0">
</div>
</div>
<h3 data-i18n="notes">Notes</h3>
<textarea name="attr_notes" placeholder="Notes"></textarea>
</div>
<div><br><br></div>
</div>
<div class="display">
<input class="display-flag" type="checkbox" name="attr_display_flag" />
<div class="row-long">
<div class="display-row" title="Vehicle">
<h3 data-i18n="vehicle">Vehicle</h3>
<div>
<span name="attr_name"></span>
</div>
</div>
<div class="display-row" title="Type">
<h3 data-i18n="type">Type</h3>
<div>
<span name="attr_type"></span>
</div>
</div>
</div>
<div class="row-long">
<div class="display-row" title="Handling">
<h3 data-i18n="handling">Handling</h3>
<div class="vehicle-stat">
<span name="attr_display_handling"></span>
</div>
</div>
<div class="display-row" title="Seats">
<h3 data-i18n="seats">Seats</h3>
<div class="vehicle-stat">
<span name="attr_seats"></span>
</div>
</div>
</div>
<div class="row-long">
<div class="display-row" title="Acceleration">
<h3 data-i18n="acceleration">Acceleration</h3>
<div class="vehicle-stat">
<span name="attr_display_acceleration"></span>
</div>
</div>
<div class="display-row" title="Speed">
<h3 data-i18n="speed">Speed</h3>
<div class="vehicle-stat">
<span name="attr_display_speed"></span>
</div>
</div>
</div>
<div class="row-long">
<div class="display-row" title="Body">
<h3 data-i18n="body">Body</h3>
<div class="vehicle-stat">
<span name="attr_display_body"></span>
</div>
</div>
<div class="display-row" title="Armor">
<h3 data-i18n="armor">Armor</h3>
<div class="vehicle-stat">
<span name="attr_display_armor"></span>
</div>
</div>
</div>
<div class="row-long">
<div class="display-row" title="Pilot">
<h3 data-i18n="pilot">Pilot</h3>
<div class="vehicle-stat">
<span name="attr_display_pilot"></span>
</div>
</div>
<div class="display-row" title="Sensor">
<h3 data-i18n="sensor">Sensor</h3>
<div class="vehicle-stat">
<span name="attr_display_sensor"></span>
</div>
</div>
</div>
<div class="row-long autosofts">
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_clearsight" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="clearsight" name="act_pcclearsight" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{clearsight} = ^{clearsight} + ^{sensor}}}{{dice=[[(@{clearsight}+@{display_sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<span name="attr_clearsight"></span>
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_electronicwarfare" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="electronicwarfare" name="act_pcelectronicwarfare" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{electronicwarfare} = ^{electronicwarfare} + ^{sensor}}}{{dice=[[(@{electronicwarfare}+@{display_sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<span name="attr_electronicwarfare"></span>
</div>
</div>
<div class="row-long autosofts">
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_evasion" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="evasion" name="act_pcevasion" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{evasion} = ^{evasion} + ^{pilot}}}{{dice=[[(@{evasion}+@{display_pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<span name="attr_evasion"></span>
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_maneuvering" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="maneuvering" name="act_pcmaneuvering" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{maneuvering} = ^{maneuvering} + ^{pilot}}}{{dice=[[(@{maneuvering}+@{display_pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<span name="attr_maneuvering"></span>
</div>
</div>
<div class="row-long autosofts">
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_stealth" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="stealth" name="act_pcstealth" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{stealth} = ^{stealth} + ^{pilot}}}{{dice=[[(@{stealth}+@{display_pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<span name="attr_stealth"></span>
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_targeting_0" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="targeting" name="act_pctargeting" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{targeting} = ^{targeting} + ^{sensor}}}{{dice=[[(@{targeting}+@{display_sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<span name="attr_targeting"></span>
</div>
</div>
<div class="collapsible">
<div class="desc"><span name="attr_notes"></span></div>
</div>
</div>
<button class="pictos settings-button" name="act_vehicle" type="action">x</button>
</fieldset>
</div>
</div>
</div>
</div>
<div class="notes pc-col">
<div class="pc-row">
<div class="header right-header">
<div class="header htab">
<input class="tab-switch" name="attr_notes_toggle" type="radio" value="notes" checked="checked"/>
<h1 data-i18n="notes">Notes</h1>
<div class="right-tri"></div>
</div>
</div>
<div class="header right-header">
<div class="header htab">
<div class="triangle"></div>
<input class="tab-switch" name="attr_notes_toggle" type="radio" value="logs"/>
<h1 data-i18n="logs">Logs</h1>
<div class="right-tri"></div>
</div>
</div>
<div class="header">
<div class="header htab">
<div class="triangle"></div>
<input class="tab-switch" name="attr_notes_toggle" type="radio" value="changelog"/>
<h1 data-i18n="updates">Updates</h1>
</div>
</div>
<div class="border-box">
<div class="pc-box">
<!-- <div><img name="attr_character_token" style="width: 70px; float: left;"><img name="attr_character_avatar" style="width: 100px; float: right;"></div> -->
<div class="notes-col">
<input class="tab-switch" name="attr_notes_toggle" type="hidden" value="notes"/>
<div class="notes-notes">
<textarea name="attr_player_notes" class="pc-notes" placeholder="This space intentionally left blank."></textarea>
</div>
<input class="tab-switch" name="attr_notes_toggle" type="hidden" value="logs"/>
<div class="notes-logs">
<h2 data-i18n="session_logs">Session Logs</h2>
<div class="rows repeating-container">
<div class="row-long headers">
<span></span>
<h2 data-i18n="date">Date</h2>
<h2 data-i18n="session_name">Session Name</h2>
<h2 data-i18n="agent/gm">Agent/GM</h2>
</span></span>
</div>
<div class="row-long headers2">
<span></span>
<h2 data-i18n="karma">Karma</h2>
<h2>Nuyen</h2>
<h2 data-i18n="reputation">Reputation</h2>
<h2 data-i18n="heat">Heat</h2>
</span></span>
</div>
<fieldset class="repeating_sessions">
<input style="display: none;" class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
<input style="display: none;" class="collapse-flag" name="attr_display_flag" title="Collapse toggle" type="checkbox" checked="checked"/>
<div class="sess-info">
<span>&nbsp;</span>
<span name="attr_date" title="@{repeating_sessions_${x}_date}"></span>
<span name="attr_name" title="@{repeating_sessions_${x}_name}"></span>
<span name="attr_gm" title="@{repeating_sessions_${x}_gm}"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
</div>
<div class="sess-awards">
<span>&nbsp;</span>
<span name="attr_karma" title="@{repeating_sessions_${x}_karma}"></span>
<span name="attr_nuyen" title="@{repeating_sessions_${x}_nuyen}"></span>
<span name="attr_reputation" title="@{repeating_sessions_${x}_reputation}"></span>
<span name="attr_heat" title="@{repeating_sessions_${x}_heat}"></span>
<span>&nbsp;</span>
</div>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
<div class="sess-info">
</span>&nbsp;</span>
<input type="text" name="attr_date" value="" placeholder="Date Played" title="Date Played" />
<input type="text" name="attr_name" value="" placeholder="Session Name" title="Session Name" />
<input type="text" name="attr_gm" value="" placeholder="Agent/GM" title="Agent/GM" />
</span>&nbsp;</span>
</div>
<div class="sess-awards">
<span>&nbsp;</span>
<input type="text" name="attr_karma" value="" placeholder="Karma" title="Karma" />
<input type="text" name="attr_nuyen" value="" placeholder="Nuyen" title="Nuyen" />
<input type="text" name="attr_reputation" value="" placeholder="Reputation" title="Reputation" />
<input type="text" name="attr_heat" value="" placeholder="Heat" title="Heat" />
</span>&nbsp;</span>
</div>
<label data-i18n-title="notes" title="notes"><span data-i18n="notes">Notes</span>
<textarea name="attr_notes" placeholder="Notes" title="{repeating_effects_${x}_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
<input class="tab-switch" name="attr_notes_toggle" type="hidden" value="changelog"/>
<div class="notes-changelog">
<div name="changelog" class="changelog">
<h1 class="changelog-header">Most Recent Updates</h1>
<span class="changelog-entry">**2022-11-21 ** v.65 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">A</span><b>Bugfix</b> - PC Weapon skills weren't applying the -1 unskilled penalty to some skills, this has been updated however users will need to update the skill to something else and back to trigger the data change.
<li><span class="bullet">A</span><b>Bugfix</b> - PC Sheet imported from Genesis in a non-English language had many problems mostly related to skills. I believe I've fixed these issues please report any new ones
<li><span class="bullet">A</span><b>Bugfix</b> - NPC Spell roll template issue where if drain was under 2 it added "Drain: 2" at the bottom of the description.
</ul>
<span class="changelog-entry">**2022-11-14 ** v.64 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">A</span><b>Bugfix</b> - PC Judge Intentions wasn't updating on Willpower changes.
</ul>
<span class="changelog-entry">**2022-10-31 ** v.63 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">F</span><b>New Feature</b> - PC Attribute roll buttons now prompt for a second attribute or custom dice modifier for those occasions when the DM says Roll Reaction+Intuition instead of Roll Defense
<li><span class="bullet">A</span><b>Bugfix</b> - PC Defense, Direct Magic Defense and Indirect Magic Defense roll buttons didn't include Wound Penalties (defense pretended to but didn't apply the penalty)
</ul>
<span class="changelog-entry">**2022-10-24 ** v.62 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">F</span><b>New Feature</b> - PC->Matrix->ASDF Roll buttons now include more options to combine them with. None, Custom, mind attributes and ASDF.
<li><span class="bullet">F</span><b>New Feature</b> - NPCs now have updated ASDF roll buttons as well!
<li><span class="bullet">F</span><b>New Feature</b> - NPCs now have the newer version of the d6's roll button and the new Extended Tests capability.
<li><span class="bullet">F</span><b>New Feature</b> - Added Extended Tests capabilities.
</ul>
<span class="changelog-entry">**2022-09-20 ** v.61 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">A</span><b>Bugfix</b> - NPC->Spells were missing the Limited duration, added it.
<li><span class="bullet">A</span><b>Bugfix</b> - Charactersheet Tab - removed the underline.
<li><span class="bullet">A</span><b>Bugfix</b> - Updated Matrix Rolls trained prompt to say "Trained" instead of "No" (which made no sense)
</ul>
<span class="changelog-entry">**2022-09-13 ** v.60 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">A</span><b>Bugfix</b> - PC->Rolls->Matrix actions including cracking were not using the Cracking skill rating but whatever the rating of the last updated skill was. Fixed the bug causing this and loading the sheet the first time should update the attr_cracking value to be correct again.
</ul>
<span class="changelog-entry">**2022-08-30 ** v.59 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">A</span><b>Bugfix</b> - Non-PC sheets were broken anywhere that a textarea (notes style) entry existed you couldn't display it to add or edit the values.
<li><span class="bullet">F</span><b>New Feature</b> - New Feature - character_name sanitization. Sometimes we want to use names with characters that will break roll buttons and other parts of the sheet. This replaces the bad characters with an asterisk *
</ul>
<span class="changelog-entry">**2022-08-16 ** v.58 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">F</span><b>New Feature</b> - Added the ability to change the ammo type in use on Core->Primary Ranged with the AR and DV changes applied. Default will be Standard.
<li><span class="bullet">F</span><b>New Feature</b> - Added split rolls for Burst Fire Wide firing mode on the Core->Primary Ranged weapons. This splits the dicepool (on odd pools the left roll Atk 1 gets the extra die). If Wild Dice are toggled on a prompt will appear for each attack. Glitches are calculated for each attack separately.
</ul>
<span class="changelog-entry">2022-08-08 - v.57 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">A</span><b>Bugfix</b> - Updated mouseover text for Metamagics to indicate they are repeating metamagic not repeating powers
<li><span class="bullet">A</span><b>Bugfix</b> - Updated Non-PC sheets to have Matrix AR, Matrix DR, Matrix Soak and Biofeedback Soak buttons as appropriate in the Defenses Pane
<li><span class="bullet">F</span><b>New Feature</b> - Some updates to the Magic->Meta tab to clean up the layout and put a Magic AR button there as well.
<li><span class="bullet">A</span><b>Bugfix</b> - Fixed some weirdness with Social->Sins and Social->Contacts pane styles.
<li><span class="bullet">A</span><b>Bugfix</b> - (not really a bug) updated the color for the Edge and Matrix Condition Monitor hexes to be the purple everything else is.
<li><span class="bullet">F</span><b>New Feature</b> - Added Matrix Soak and Biofeedback Soak buttons to Core Pane and Matrix Pane
<li><span class="bullet">F</span><b>New Feature</b> - Added Damage Type to Combat spells in Magic->Spells pane, the Damage Type selector will disappear for non-combat spells.
<li><span class="bullet">F</span><b>New Feature</b> - Updated Effect Type to hide values that make no sense (i.e. Single Sense / Multi Sense for anything but Illusion spells and The 4 combat options for any non-combat spells)
<li><span class="bullet">F</span><b>New Feature</b> - Updated Spells to make it so the pop-up prompts for Amp-Up and Increase Area ONLY pop up when the spell is of the right type. Only Combat spells get "Amp Up" prompts, Only "LOS (A)" spells get "Increase Area" prompts. The "Agony" spell is by definition LOS but acts like LOS (A) in that it can be extended to multiple targets, you will want to enter it as LOS (A) there may be other similar spells.
<li><span class="bullet">F</span><b>New Feature</b> - Added Notes->Updates Pane to display most recent changes. The sheet will automatically open to this page if changes are made to functionality that need to be highlighted.
<li><span class="bullet">F</span><b>New Feature</b> - Added the Primary button to Arms->Melee weapons with the same functionality as the Arms->Ranged weapons have.
<li><span class="bullet">F</span><b>New Feature</b> - Arms->Ranged now have a Default Firing mode selection. This will be the selected firing mode when you initially set this weapon to primary, or if you change this while it's the primary weapon it will set the firing mode on the primary weapon as well.
</ul>
<span class="changelog-entry">2022-08-04 - v.56 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">A</span><b>Bugfix</b> - There were 10 repeating sections that didn't use "name" for the name field. Fixed this to make other automated tasks easier to achieve in the future.
<li><span class="bullet">F</span><b>New Feature</b> - added Composure roll button to Grunts
<li><span class="bullet">A</span><b>Bugfix</b> - Cleaned up non-PC sheets to show condition monitors better (including the max)
<li><span class="bullet">A</span><b>Bugfix</b> - Fixed how display of matrix device and matrix roll buttons work.
<li><span class="bullet">F</span><b>New Feature</b> - normalized the styling on non-PC sheets a little bit to help mark separate sections better.
<li><span class="bullet">F</span><b>New Feature</b> - Added Logs section under the Notes Pane for keeping track of missions and rewards. This is purely for note taking purposes and isn't automated anywhere.
</ul>
<span class="changelog-entry">2022-07-26 - v.55 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">A</span><b>Bugfix</b> - Imports choked if the character in Genesis has a lifestyle that is not associated with a specific SIN, the code is more forgiving for this now.
<li><span class="bullet">F</span><b>New Feature</b> - Added Edge Roll buttons to most PC sheet roll buttons on the sheet. These can be toggled on/off via the check box in the Options Pane if you don't want them for your character/campaign.
<li><span class="bullet">A</span><b>Bugfix</b> - There was an extraneous } character on the D6 roll button, it has been nullified.
<li><span class="bullet">A</span><b>Bugfix</b> - Minor style changes to Options Pane and main rolls-computed roll template.
<li><span class="bullet">A</span><b>Bugfix</b> - fixed css on PC matrix devices so the notes expand the full width when displayed.
<li><span class="bullet">E</span><b>Update</b> - Due to changes in the latest CRB printing, matrix device initiative bonuses have been verified to be a dice bonus, updated initiatives to reflect that.
<li><span class="bullet">A</span><b>Bugfix</b> - Found an error condition where an item (program for example) with an on/off switch that was using modifications when deleted, even when turned off reversed the modifications causing data issues.
<li><span class="bullet">A</span><b>Bugfix</b> - Fixed mistyped attribute names in the modifications whitelist astral_initiative_dice_mod, matrix_initiative_dice_mod, cold_sim_initiative_dice_mod and hot_sim_initiative_dice_mod modifiers should now work in modifications boxes. The mouseover titles have been fixed as well.
<li><span class="bullet">A</span><b>Bugfix</b> - NPC Wound modifiers are now correctly applying per TWO boxes of damage, per CRB pg.203.
</ul>
<span class="changelog-entry">2022-07-22 - v.54 Chuz (James Culp)</span>
<ul>
<li><span class="bullet">F</span><b>New Feature</b> - Added Notes imports to all repeating sections with a notes field except Sprites and Spirits (players should really be using separate character sheets for these)
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="rolls pc-col">
<div class="pc-row">
<div class="header right-header">
<h1 data-i18n="rolls">Rolls</h1>
<div class="right-tri"></div>
</div>
<br>
<div class="header right-header">
<div class="header htab">
<div class="triangle"></div>
<input class="tab-switch" name="attr_rolls_toggle" type="radio" value="matrix" checked="checked"/>
<h1 data-i18n="matrixactions">Matrix Actions</h1>
<div class="right-tri"></div>
</div>
<div class="header htab">
<div class="triangle"></div>
<input class="tab-switch" name="attr_rolls_toggle" type="radio" value="misc"/>
<h1 data-i18n="misc">Misc</h1>
<div class="right-tri"></div>
</div>
</div>
<!-- Hidden Buttons -->
<div style="display: none;">
<button name="act_extended_next" type="action" style="display: none;" value=""></button>
<button name="act_bump_fours1" type="action" style="display: none;"></button>
<button name="act_bump_fours2" type="action" style="display: none;"></button>
<button name="act_bump_fours3" type="action" style="display: none;"></button>
<button name="act_bump_fours4" type="action" style="display: none;"></button>
<button name="act_bump_fours5" type="action" style="display: none;"></button>
<button name="act_bump_fours6" type="action" style="display: none;"></button>
<button name="act_bump_fours7" type="action" style="display: none;"></button>
<button name="act_reroll1" type="action" style="display: none;"></button>
<button name="act_reroll2" type="action" style="display: none;"></button>
<button name="act_reroll3" type="action" style="display: none;"></button>
<button name="act_reroll4" type="action" style="display: none;"></button>
<button name="act_reroll5" type="action" style="display: none;"></button>
<button name="act_reroll6" type="action" style="display: none;"></button>
<button name="act_reroll7" type="action" style="display: none;"></button>
<button name="act_reroll8" type="action" style="display: none;"></button>
<button name="act_reroll9" type="action" style="display: none;"></button>
<button name="act_reroll10" type="action" style="display: none;"></button>
<button name="act_reroll11" type="action" style="display: none;"></button>
<button name="act_reroll12" type="action" style="display: none;"></button>
<button name="act_reroll13" type="action" style="display: none;"></button>
<button name="act_reroll14" type="action" style="display: none;"></button>
<button name="act_reroll15" type="action" style="display: none;"></button>
<button name="act_reroll16" type="action" style="display: none;"></button>
<button name="act_reroll17" type="action" style="display: none;"></button>
<button name="act_reroll18" type="action" style="display: none;"></button>
<button name="act_reroll19" type="action" style="display: none;"></button>
<button name="act_reroll20" type="action" style="display: none;"></button>
<button name="act_reroll21" type="action" style="display: none;"></button>
<button name="act_reroll22" type="action" style="display: none;"></button>
<button name="act_reroll23" type="action" style="display: none;"></button>
<button name="act_reroll24" type="action" style="display: none;"></button>
<button name="act_reroll25" type="action" style="display: none;"></button>
<button name="act_reroll26" type="action" style="display: none;"></button>
<button name="act_reroll27" type="action" style="display: none;"></button>
<button name="act_reroll28" type="action" style="display: none;"></button>
<button name="act_reroll29" type="action" style="display: none;"></button>
<button name="act_reroll30" type="action" style="display: none;"></button>
<button name="act_reroll31" type="action" style="display: none;"></button>
<button name="act_reroll32" type="action" style="display: none;"></button>
<button name="act_reroll33" type="action" style="display: none;"></button>
<button name="act_reroll34" type="action" style="display: none;"></button>
<button name="act_reroll35" type="action" style="display: none;"></button>
<button name="act_reroll36" type="action" style="display: none;"></button>
<button name="act_reroll37" type="action" style="display: none;"></button>
<button name="act_reroll38" type="action" style="display: none;"></button>
<button name="act_reroll39" type="action" style="display: none;"></button>
<button name="act_reroll40" type="action" style="display: none;"></button>
<button name="act_reroll41" type="action" style="display: none;"></button>
<button name="act_reroll42" type="action" style="display: none;"></button>
<button name="act_reroll43" type="action" style="display: none;"></button>
<button name="act_reroll44" type="action" style="display: none;"></button>
<button name="act_reroll45" type="action" style="display: none;"></button>
<button name="act_reroll46" type="action" style="display: none;"></button>
<button name="act_reroll47" type="action" style="display: none;"></button>
<button name="act_reroll48" type="action" style="display: none;"></button>
<button name="act_reroll49" type="action" style="display: none;"></button>
<button name="act_reroll50" type="action" style="display: none;"></button>
</div>
<div style="display: none;">
<button class="btn ui-draggable" name="act_matrixresist_int_f" type="action" style="display: none;" value=""></button>
<button class="btn ui-draggable" name="act_matrixresist_f_s" type="action" style="display: none;" value=""></button>
</div>
<div class="border-box">
<div class="pc-box">
<div class="rolls-col">
<input class="tab-switch" name="attr_rolls_toggle" type="hidden" value="matrix"/>
<div class="rolls-matrix">
<h3 data-i18n="rollbuttonsdisclaimer"></h3><br>
<label data-i18n-title="matrix_noise" title="Matrix Noise">
<span data-i18n="matrix_noise"></span>
<input type="number" name="attr_matrix_noise" value="0" placeholder="0" title="@{matrix_noise}" step="1">
</label>
<h2 data-i18n="matrixmajor">Matrix Major Actions</h2>
<button title="Cracking + Logic" class="illegal outsider" name="act_matrix_backdoor_entry" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Backdoor Entry}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="backdoorentry"></span></button>
<button title="Cracking + Logic" class="illegal outsider user admin" name="act_matrix_brute_force" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Brute Force}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="bruteforce"></span></button>
<button title="Cracking + Logic" class="illegal admin" name="act_matrix_check_os" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Check OS}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), Threshold: 4}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="checkos"></span></button>
<button title="Electronics + Logic" class="legal user admin" name="act_matrix_control_device" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Control Device}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Willpower + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="controldevice"></span></button>
<button title="Cracking + Logic" class="illegal user admin" name="act_matrix_crack_file" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Crack File}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Encryption Rating x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="crackfile"></span></button>
<button title="Cracking + Logic" class="illegal admin" name="act_matrix_crash_program" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Crash Program}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Data Processing + Device Rating}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="crashprogram"></span></button>
<button title="Cracking + Logic" class="illegal outsider user admin" name="act_matrix_data_spike" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Data Spike}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Data Processing + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="dataspike"></span></button>
<button title="Cracking + Logic" class="legal user admin" name="act_matrix_disarm_data_bomb" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Disarm Data Bomb}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Data Bomb Rating x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="disarmdatabomb"></span></button>
<button title="Electronics + Logic" class="legal user admin" name="act_matrix_edit_file" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Edit File}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Intuition + Firewall |or| Firewall + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="editfile"></span></button>
<button title="Electronics + Logic" class="legal user admin" name="act_matrix_encrypt_file" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Encrypt File}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), Hits = Encryption Rating}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="encryptfile"></span></button>
<button title="Electronics + Logic" class="illegal user admin" name="act_matrix_erase_matrix_signature" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Erase Matrix Signature}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="erasematrixsignature"></span></button>
<button title="Electronics + Logic" class="legal admin" name="act_matrix_format_device" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Format Device}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="formatdevice"></span></button>
<span class="matrix-action legal outsider user admin" data-i18n="fullmatrixdefense"></span>
<button title="Electronics + Logic" class="illegal user" name="act_matrix_hash_check" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Hash Check}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), CRB pg.182}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="hashcheck"></span></button>
<button title="Cracking + Intuition" class="illegal outsider user admin" name="act_matrix_hide" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Hide}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Intuition + Data Processing |or| Data Processing + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="hide"></span></button>
<button title="Electronics + Willpower" class="legal outsider user admin" name="act_matrix_jackout" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jack Out}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{willpower}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Charisma + Data Processing |or| Attack + Data Processing}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="jackout"></span></button>
<button title="Cracking + Logic" class="illegal admin" name="act_matrix_jam_signals" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jam Signals}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), CRB pg.182}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="jamsignals"></span></button>
<button title="Electronics + Logic" class="legal user admin" name="act_matrix_jump_into_rigged_device" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jump Into Rigged Device}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="jumpintoriggeddevice"></span></button>
<button title="Electronics + Intuition" class="legal outsider user admin" name="act_matrix_matrix_perception" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Matrix Perception}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), * Without Resonance or Cyberdeck), vs. Willpower + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="matrixperception"></span></button>
<button title="Electronics + Intuition" class="legal outsider user admin" name="act_matrix_matrix_search" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Matrix Search}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), Extended Test, 10 Minute Interval}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="matrixsearch"></span></button>
<button title="Cracking + Logic" class="illegal outsider user admin" name="act_matrix_probe" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Probe}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="probe"></span></button>
<button title="Electronics + Logic" class="legal admin" name="act_matrix_reboot_device" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Reboot Device}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="rebootdevice"></span></button>
<button title="Electronics + Logic" class="illegal admin" name="act_matrix_set_data_bomb" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Set Data Bomb}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Device Rating x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="setdatabomb"></span></button>
<button title="Cracking + Logic" class="illegal admin" name="act_matrix_snoop" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Snoop}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Logic + Firewall |or| Data Processing + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="snoop"></span></button>
<button title="Cracking + Logic" class="illegal outsider user admin" name="act_matrix_spoof_command" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Spoof Command}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. (Data Processing or Pilot) + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="spoofcommand"></span></button>
<button title="Cracking + Logic" class="illegal outsider user admin" name="act_matrix_tarpit" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Tar Pit}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Data Processing + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="tarpit"></span></button>
<button title="Electronics + Intuition" class="illegal admin" name="act_matrix_trace_icon" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Trace Icon}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Sleaze |or| Firewall + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="traceicon"></span></button>
<h2 data-i18n="matrixminor">Matrix Minor Actions</h2>
<span class="matrix-action legal user admin" data-i18n="changeicon"></span>
<span class="matrix-action legal" data-i18n="enterexithost"></span>
<button title="Electronics + Intuition" class="legal outsider user admin" name="act_matrix_matrix_perception" type="action" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Matrix Perception}}{{?{Specialization or Expertise?|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=* With Resonance or Cyberdeck, (Legal), vs. Willpower + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="matrixperception"></span></button>
<span class="matrix-action legal admin" data-i18n="reconfigurematrixattribute"></span>
<span class="matrix-action legal outsider user admin" data-i18n="sendmessage"></span>
<span class="matrix-action legal admin" data-i18n="switchinterfacemode"></span>
</div>
<input class="tab-switch" name="attr_rolls_toggle" type="hidden" value="misc"/>
<div class="rolls-misc">
<h2 data-i18n="convert">Convert</h2>
<span>&nbsp;</span>
<input type=number name="attr_measurement1" value="">
<select name="attr_conversion">
<option data-i18n="lb-kg" value="lb-kg">lb <=> kg</option>
<option data-i18n="ft-m" value="ft-m">ft <=> m</option>
<option data-i18n="mi-km" value="mi-km">mi <=> km</option>
</select>
<input type=number name="attr_measurement2" value="">
<span>&nbsp;</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- NPC SHEET -->
<div class="npc">
<img class="shadowrun-logo" alt="Shadowrun sixth edition logo" src="https://s3.amazonaws.com/files.d20.io/images/204802539/QInmmma8HvUBA90c8e8H8Q/max.png?1614545502"/>
<input name="attr_stats_toggle" type="hidden" value="settings" checked="checked"/>
<input name="attr_flag_matrix" type="hidden" value=""/>
<div class="tabs border-box">
<div class="pc-box">
<div class="header-nav">
<input name="attr_stats_toggle" type="checkbox" value="settings" checked="checked"/>
<span class="pictos">y</span>
<select name="attr_sheet_type" title="Sheet Type">
<option value="pc" data-i18n="pc">PC</option>
<option value="grunt" data-i18n="grunt">Grunt</option>
<option value="spirit" data=i18n="spirit">Spirit</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>
</select>
<select class="sprite" name="attr_sprite_type" title="Sprite Type">
<option value="Courier" data-i18n="couriersprite">Courier</option>
<option value="Crack" data-i18n="cracksprite">Crack</option>
<option value="Data" data-i18n="datasprite">Data</option>
<option value="Fault" data-i18n="faultsprite">Fault</option>
<option value="Machine" data-i18n="machinesprite">Machine</option>
<option value="Other" data-i18n="other">Other</option>
</select>
<select class="spirit" name="attr_spirit_type" title="Sprite Type">
<option value="Air" data-i18n="air">Air</option>
<option value="Beasts" data-i18n="beasts">Beasts</option>
<option value="Earth" data-i18n="earth">Earth</option>
<option value="Fire" data-i18n="fire">Fire</option>
<option value="Guardian" data-i18n="guardian">Guardian</option>
<option value="Guidance" data-i18n="guidance">Guidance</option>
<option value="Kin" data-i18n="kin">Kin</option>
<option value="Plant" data-i18n="plant">Plant</option>
<option value="Task" data-i18n="task">Task</option>
<option value="Water" data-i18n="water">Water</option>
<option value="Other" data-i18n="other">Other</option>
</select>
<h2 class="grunt" data-i18n="metatype"></h2>
<input class="grunt" name="attr_metatype" type="text" />
<span class="host vehicle">&nbsp;</span>
<span class="spirit">
<h3 data-i18n-title="resettoggle" data-i18n="reset"></h3>
</span>
<span class="spirit">
<label class="switch" data-i18n-title="resettoggle" title="Reset skills, powers and weapons when changing type or force">
<input name="attr_spirit_reset_toggle" type="checkbox" checked="checked" value="reset"/><span class="slider"></span>
</label>
</span>
<span class="host vehicle sprite">&nbsp;</span>
<span></span>
<h2 data-i18n="name"></h2>
<input name="attr_character_name" type="text" />
</div>
<div class="header-toggles pc-box">
<span>&nbsp;</span>
<button name="act_extended_start" class="icon pictos" title="Start Extended Test" type="action" value="">r</button>
<button name="act_d6" class="icon d6" title="Roll D6s" type="action" value="">L</button>
<h2 data-i18n-title="whispergm">/w GM</h2>
<label class="switch" data-i18n-title="whispergm" 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="dicepoolmodifiers">Modifiers</h2>
<label class="switch" data-i18n-title="dicepoolmodifiers" title="Dicepool Modifiers">
<input class="whisper-toggle" name="attr_modifiers_toggle" type="checkbox" value="?{Modifiers +/-|0}"/><span class="slider"></span>
</label>
<h2 data-i18n-title="addedgetodicepool">Edge</h2>
<label class="switch" data-i18n-title="addedgetodicepool" title="Add Edge to your dice pool and exploding 6's">
<input class="whisper-toggle" name="attr_edge_toggle" type="checkbox" value="@{edge}"/><span class="slider"></span>
</label>
<h2 data-i18n-title="wilddie">Wild Die</h2>
<label class="switch" data-i18n-title="wilddie" title="Roll a single wild die">
<input class="whisper-toggle" name="attr_wild_die" type="checkbox" value="1"/><span class="slider"></span>
</label>
<span>&nbsp;</span>
</div>
</div>
</div>
<div class="border-box">
<div class="grunt attribute pc-box">
<button data-i18n="body" name="roll_body" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{body}}}{{dice=[[(@{body}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="agility" name="roll_agility" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{agility}}}{{dice=[[(@{agility}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="reaction" name="roll_reaction" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{reaction}}}{{dice=[[(@{reaction}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="strength" name="roll_strength" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{strength}}}{{dice=[[(@{strength}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="willpower" name="roll_willpower" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{willpower}}}{{dice=[[(@{willpower}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="logic" name="roll_logic" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{logic}}}{{dice=[[(@{logic}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="intuition" name="roll_intuition" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{intuition}}}{{dice=[[(@{intuition}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="charisma" name="roll_charisma" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{charisma}}}{{dice=[[(@{charisma}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="edge" name="roll_edge" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{edge}}}{{dice=[[(@{edge}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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" step='0.01' value="6"/>
</label>
<h1 class="hide-magic" data-i18n="magic">m</h1><span class="hide-magic" name="attr_magic"></span>
<label class="hide-magic" data-i18n-title="magic" title="magic"><span class="settings">
<input name="attr_magic" placeholder="6" title="@{magic}" type="number" value="6"/>
</span></label>
<h1 class="hide-resonance" data-i18n="resonance">r</h1><span class="hide-resonance" name="attr_resonance"></span>
<label class="hide-resonance" data-i18n-title="resonance" title="resonance"><span class="settings">
<input class="hide-resonance" name="attr_resonance" placeholder="6" title="@{resonance}" type="number" value="6"/>
</span></label>
</div>
<div class="spirit attribute pc-box">
<h1 data-i18n="force">Force</h1><span name="attr_force"></span>
<label data-i18n-title="force" title="force"><span class="settings">
<input name="attr_force" placeholder="0" title="@{force}" type="number" value="1"/>
</span></label>
<label class="settings" data-i18n-title="modifier" title="modifier" style="display: none;"></label>
<h1 data-i18n="tasks">Tasks</h1><span class="spirit" name="attr_tasks"></span>
<label data-i18n-title="tasks" title="tasks"><span class="settings">
<input name="attr_tasks_base" placeholder="0" title="@{tasks}" type="number" value="1"/>
</span></label>
<label class="settings" data-i18n-title="modifier" title="modifier">
<input name="attr_tasks_modifier" placeholder="+" title="@{tasks_modifier}" type="number" value=""/>
</label>
<button data-i18n="body" name="roll_body" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{body}}}{{dice=[[(@{body}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="1"/>
</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="agility" name="roll_agility" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{agility}}}{{dice=[[(@{agility}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="1"/>
</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="reaction" name="roll_reaction" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{reaction}}}{{dice=[[(@{reaction}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="1"/>
</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="strength" name="roll_strength" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{strength}}}{{dice=[[(@{strength}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="1"/>
</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="willpower" name="roll_willpower" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{willpower}}}{{dice=[[(@{willpower}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="1"/>
</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="logic" name="roll_logic" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{logic}}}{{dice=[[(@{logic}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="1"/>
</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="intuition" name="roll_intuition" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{intuition}}}{{dice=[[(@{intuition}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="1"/>
</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="charisma" name="roll_charisma" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{charisma}}}{{dice=[[(@{charisma}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="1"/>
</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="edge" name="roll_edge" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{edge}}}{{dice=[[(@{edge}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="0"/>
</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" step='0.01' value="6"/>
</label>
<h1 data-i18n="magic">m</h1><span name="attr_magic"></span>
<label data-i18n-title="magic" title="magic"><span class="settings">
<input name="attr_magic" placeholder="6" title="@{magic}" type="number" value="1"/>
</span></label>
</div>
<div class="host attribute pc-box">
<button data-i18n="host_rating" name="roll_host_rating" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{host_rating}}}{{rating=@{host_rating}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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=@{character_name}}}{{base=^{attack}}}{{dice=[[(@{attack}+?{Secondary Attribute?|None,0|Host Rating,@{host_rating}|Attack,@{attack}|Sleaze,@{sleaze}|Data Processing,@{data_processing}|Firewall,@{firewall}}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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=@{character_name}}}{{base=^{sleaze}}}{{dice=[[(@{sleaze}+?{Secondary Attribute?|None,0|Host Rating,@{host_rating}|Attack,@{attack}|Sleaze,@{sleaze}|Data Processing,@{data_processing}|Firewall,@{firewall}}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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=@{character_name}}}{{base=^{data_processing}}}{{dice=[[(@{data_processing}+?{Secondary Attribute?|None,0|Host Rating,@{host_rating}|Attack,@{attack}|Sleaze,@{sleaze}|Data Processing,@{data_processing}|Firewall,@{firewall}}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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=@{character_name}}}{{base=^{firewall}}}{{dice=[[(@{firewall}+?{Secondary Attribute?|None,0|Host Rating,@{host_rating}|Attack,@{attack}|Sleaze,@{sleaze}|Data Processing,@{data_processing}|Firewall,@{firewall}}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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 pc-box">
<h1 data-i18n="hand">Hand</h1><span name="attr_handling"></span>
<label class="settings" data-i18n-title="hand" title="Handling">
<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="Handling (Offroad)">
<input name="attr_handling_offroad" placeholder="3" title="@{handling_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="interval">Interval</h1><span name="attr_interval"></span>
<label class="settings" data-i18n-title="interval" title="Speed Interval">
<input name="attr_interval" placeholder="3" title="@{interval}" type="number" value=""/>
</label>
<input name='attr_speed' type='hidden' value='0'>
<h1 data-i18n="maxspeed">Max Speed</h1><span name="attr_speed_max"></span>
<label class="settings" data-i18n-title="maxspeed" title="Max Speed">
<input name="attr_speed_max" placeholder="3" title="@{speed_max}" 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_base" placeholder="3" title="@{body}" type="number" value=""/>
</label>
<h1 data-i18n="armor">Armor</h1><span name="attr_armor"></span>
<label class="settings" data-i18n-title="armor" title="Armor">
<input name="attr_armor" placeholder="3" title="@{armor}" 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}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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 pc-box">
<button data-i18n="level" name="roll_level" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{level}}}{{rating=@{level}}}">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>
<h1 data-i18n="tasks">Tasks</h1><span name="attr_tasks"></span>
<label class="settings" data-i18n-title="tasks" title="Tasks">
<input name="attr_tasks" placeholder="0" title="@{tasks}" 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=@{character_name}}}{{base=^{attack}}}{{dice=[[(@{attack}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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=@{character_name}}}{{base=^{sleaze}}}{{dice=[[(@{sleaze}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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=@{character_name}}}{{base=^{data_processing}}}{{dice=[[(@{data_processing}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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=@{character_name}}}{{base=^{firewall}}}{{dice=[[(@{firewall}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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>
<button data-i18n="resonance" name="roll_resonance" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{resonance}}}{{dice=[[(@{resonance}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">resonance</button><span name="attr_resonance"></span>
<label class="settings" data-i18n-title="resonance" title="resonance">
<input name="attr_resonance" placeholder="8" title="@{resonance}" type="number" value=""/>
</label>
</div>
</div>
<div class="border-box">
<div class="mid body pc-box">
<div class="column">
<!-- INITIATIVE/ACTIONS -->
<div class="rows">
<h1 data-i18n="init_actions">Initiative / Actions</h1>
</div>
<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>
<div class="rows grunt spirit vehicle sprite host">
<h2 data-i18n="actions">Actions</h2>
<label class="settings" data-i18n-title="majoractions" title="Major Actions">
<span data-i18n="a">A</span><input name="attr_major_actions" placeholder="1" title="@{major_actions}" type="number" value="1"/>
</label>
<span class="settings">, </span>
<label class="settings" data-i18n-title="minoractions" title="Minor Actions">
<span data-i18n="i">I</span><input min="0" name="attr_minor_actions" placeholder="2" title="@{minor_actions}" type="number" value="2"/>
</label>
<span class="toggle-display"> <span data-i18n="a">A</span><span name="attr_major_actions"></span><span class="tiny-span">, </span><span data-i18n="i">I</span><span name="attr_minor_actions"></span></span>
</div>
<div class="rows grunt spirit">
<button data-i18n="initiative" name="Initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{initiative}}}{{dice=[[(@{initiative_base}+@{wounds_toggle}+@{modifiers_toggle})+(@{initiative_dice})d6cf0 &{tracker}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">Initiative</button>
<label class="settings" data-i18n-title="modifier" title="modifier">
<input name="attr_initiative_base" placeholder="0" title="@{initiative_base}" type="number" value="0"/>
</label><span class="settings">+</span>
<label class="settings" data-i18n-title="initiativedice" title="Initiative Dice">
<input min="0" max="5" name="attr_initiative_dice" placeholder="0" title="@{initiative_dice}" type="number" value="0"/>
</label><span class="settings" data-i18n="d6">d6</span>
<span class="toggle-display"> <span class="settings tiny-span">=</span><span name="attr_initiative_base"></span><span class="tiny-span">+</span><span name="attr_initiative_dice"></span><span class="tiny-span" data-i18n="d6">d6</span></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=@{character_name}}}{{base=^{astralinitiative}}}{{dice=[[(@{astral_initiative_base}+@{wounds_toggle}+@{modifiers_toggle})+(@{astral_initiative_dice})d6cf0 &{tracker}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">Astral Initiative</button>
<label class="settings" data-i18n-title="modifier" title="modifier">
<input name="attr_astral_initiative_base" placeholder="0" title="@{astral_initiative_base}" type="number" value="0"/>
</label><span class="settings">+</span>
<label class="settings" data-i18n-title="astral_initiative_dice" title="Astral Initiative Dice">
<input min="0" max="5" name="attr_astral_initiative_dice" placeholder="0" title="@{astral_initiative_dice}" type="number" value="0"/>
</label><span class="settings" data-i18n="d6">d6</span>
<span class="toggle-display"> <span class="settings tiny-span">=</span><span name="attr_astral_initiative_base"></span><span class="tiny-span">+</span><span name="attr_astral_initiative_dice"></span><span class="tiny-span" data-i18n="d6">d6</span></span>
</div>
<div class="rows spirit">
<button data-i18n="astralinitiative" name="Astral Initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{astralinitiative}}}{{dice=[[(@{astral_initiative_base}+@{wounds_toggle}+@{modifiers_toggle})+(@{astral_initiative_dice})d6cf0 &{tracker}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">Astral Initiative</button>
<label class="settings" data-i18n-title="modifier" title="modifier">
<input name="attr_astral_initiative_base" placeholder="0" title="@{astral_initiative_base}" type="number" value="0"/>
</label><span class="settings">+</span>
<label class="settings" data-i18n-title="astral_initiative_dice" title="Astral Initiative Dice">
<input min="0" max="5" name="attr_astral_initiative_dice" placeholder="0" title="@{astral_initiative_dice}" type="number" value="0"/>
</label><span class="settings" data-i18n="d6">d6</span>
<span class="toggle-display"> <span class="settings tiny-span">=</span><span name="attr_astral_initiative_base"></span><span class="tiny-span">+</span><span name="attr_astral_initiative_dice"></span><span class="tiny-span" data-i18n="d6">d6</span></span>
</div>
<div class="rows grunt">
<button data-i18n="matrixinitiative" name="Matrix Initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{matrixinitiative}}}{{dice=[[(@{matrix_initiative_base}+@{wounds_toggle}+@{modifiers_toggle})+(@{matrix_initiative_dice})d6cf0 &{tracker}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">Matrix Initiative</button>
<label class="settings" data-i18n-title="modifier" title="modifier">
<input name="attr_matrix_initiative_base" placeholder="0" title="@{matrix_initiative_base}" type="number" value="0"/>
</label><span class="settings">+</span>
<label class="settings" data-i18n-title="matrix_initiative_dice" title="Matrix Initiative Dice">
<input min="0" max="5" name="attr_matrix_initiative_dice" placeholder="0" title="@{matrix_initiative_dice}" type="number" value="0"/>
</label><span class="settings" data-i18n="d6">d6</span>
<span class="toggle-display"> <span class="settings tiny-span">=</span><span name="attr_matrix_initiative_base"></span><span class="tiny-span">+</span><span name="attr_matrix_initiative_dice"></span><span class="tiny-span" data-i18n="d6">d6</span></span>
</div>
<div class="rows grunt">
<button data-i18n="coldsiminitiative" name="Cold Sim Initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{coldsiminitiative}}}{{dice=[[(@{cold_sim_initiative_base}+@{wounds_toggle}+@{modifiers_toggle})+(@{cold_sim_initiative_dice})d6cf0 &{tracker}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">Cold Sim Initiative</button>
<label class="settings" data-i18n-title="modifier" title="modifier">
<input name="attr_cold_sim_initiative_base" placeholder="0" title="@{cold_sim_initiative_base}" type="number" value="0"/>
</label><span class="settings">+</span>
<label class="settings" data-i18n-title="coldsiminitiativedice" title="Cold Sim Initiative Dice">
<input min="0" max="5" name="attr_cold_sim_initiative_dice" placeholder="0" title="@{cold_sim_initiative_dice}" type="number" value="0"/>
</label><span class="settings" data-i18n="d6">d6</span>
<span class="toggle-display"> <span class="settings tiny-span">=</span><span name="attr_cold_sim_initiative_base"></span><span class="tiny-span">+</span><span name="attr_cold_sim_initiative_dice"></span><span class="tiny-span" data-i18n="d6">d6</span></span>
</div>
<div class="rows grunt sprite host">
<button data-i18n="hotsiminitiative" name="Hot Sim Initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{hotsiminitiative}}}{{dice=[[(@{hot_sim_initiative_base}+@{wounds_toggle}+@{modifiers_toggle})+(@{hot_sim_initiative_dice})d6cf0 &{tracker}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">Hot Sim Initiative</button>
<label class="settings" data-i18n-title="modifier" title="modifier">
<input name="attr_hot_sim_initiative_base" placeholder="0" title="@{hot_sim_initiative_base}" type="number" value="0"/>
</label><span class="settings">+</span>
<label class="settings" data-i18n-title="hotsiminitiativedice" title="Hot Sim Initiative Dice">
<input min="0" max="5" name="attr_hot_sim_initiative_dice" placeholder="0" title="@{hot_sim_initiative_dice}" type="number" value="0"/>
</label><span class="settings" data-i18n="d6">d6</span>
<span class="toggle-display"> <span class="settings tiny-span">=</span><span name="attr_hot_sim_initiative_base"></span><span class="tiny-span">+</span><span name="attr_hot_sim_initiative_dice"></span><span class="tiny-span" data-i18n="d6">d6</span></span>
</div>
<div class="rows vehicle">
<button data-i18n="initiative" name="Initiative" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{initiative}}}{{dice=[[(@{initiative_base}+@{wounds_toggle}+@{modifiers_toggle})+(@{initiative_dice})d6cf0 &{tracker}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">Initiative</button>
<label class="settings" data-i18n-title="modifier" title="modifier">
<input name="attr_initiative_base" placeholder="0" title="@{initiative_base}" type="number" value="0"/>
</label><span class="settings">+</span>
<label class="settings" data-i18n-title="initiativedice" title="Initiative Dice">
<input min="0" max="5" name="attr_initiative_dice" placeholder="0" title="@{initiative_dice}" type="number" value="4"/>
</label><span class="settings" data-i18n="d6">d6</span>
<span class="toggle-display"> <span class="settings tiny-span">=</span><span name="attr_initiative_base"></span><span class="tiny-span">+</span><span name="attr_initiative_dice"></span><span class="tiny-span" data-i18n="d6">d6</span></span>
</div>
<div class="rows grunt spirit">
<button name="sprint" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=@{sprint_speed}+(Athletics+Agility hits * @{sprint_modifier})}}{{dice=[[@{sprint_speed}+((@{athletics}+@{agility}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle} * @{sprint_modifier})]] meters}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="sprint"></span></button>
<label class="settings" data-i18n-title="move speed" title="Move Speed">
<input name="attr_move_speed" placeholder="0" title="@{move_speed}" type="number" value="10"/>
</label><span class="settings"> / </span>
<label class="settings" data-i18n-title="sprint speed" title="Sprint Speed">
<input name="attr_sprint_speed" placeholder="0" title="@{sprint_speed}" type="number" value="15"/>
</label><span class="settings"> / + </span>
<label class="settings" data-i18n-title="sprint modifier" title="Sprint Modifier">
<input name="attr_sprint_modifier" placeholder="2" title="@{sprint_modifier}" type="number" value="1"/>
</label><span class="settings"></span>
<span class="toggle-display"> <span class="settings tiny-span">=</span><span name="attr_move_speed" title="@{move_speed}"></span><span> / </span><span name="attr_sprint_speed" title="@{sprint_speed}"></span><span> / + </span><span name="attr_sprint_modifier" title="@{sprint_modifier}"></span><span></span></span>
</div>
<div class="rows grunt spirit">
<button class="btn ui-draggable" data-i18n="composure" name="act_composure" type="action" data-i18n-title="Willpower + Charisma" value="@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{composure}}}{{dice=[[(@{composure}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}"><span data-i18n="composure">Composure</span></button>
</div>
<div class="rows grunt spirit vehicle sprite">
<h1>Condition Monitors</h1>
</div>
<div class="rows grunt spirit vehicle">
<span data-i18n="physical">Physical</span>
<label class="settings" data-i18n-title="conditionmonitor" title="Condition Monitor">
<input name="attr_physical" placeholder="0" title="@{physical}" type="number" value=""/>
</label><span class="settings"> / </span>
<label class="settings" data-i18n-title="conditionmonitor" title="Condition Monitor">
<input name="attr_physical_max" placeholder="0" title="@{physical_max}" type="number" value=""/>
</label>
<span class="toggle-display" name="attr_physical" title="@{physical}"></span><span class="toggle-display"> / </span><span class="toggle-display" name="attr_physical_max" title="@{physical_max}"></span>
<br>
</div>
<div class="rows grunt spirit vehicle sprite">
<input name="attr_flag_matrix" type="hidden" value=""/>
<div class="matrix">
<span data-i18n="matrix">Matrix</span>
<label class="settings" data-i18n-title="conditionmonitor" title="Condition Monitor">
<input name="attr_matrix" placeholder="0" title="@{matrix}" type="number" value=""/>
</label><span class="settings"> / </span>
<label class="settings" data-i18n-title="conditionmonitor" title="Condition Monitor">
<input name="attr_matrix_max" placeholder="0" title="@{matrix_max}" type="number" value=""/>
</label>
<span class="toggle-display" name="attr_matrix" title="@{matrix}"></span><span class="toggle-display"> / </span><span class="toggle-display" name="attr_matrix_max" title="@{matrix_max}"></span>
</div>
</div>
</div>
<div class="column">
<!-- DEFENSES -->
<div class="rows">
<h1 data-i18n="defenses">Defenses</h1>
</div>
<div class="rows grunt spirit">
<button type="roll" name="roll_direct_magic_defense" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{direct} ^{magic} ^{defense}}}{{dice=[[((@{willpower}+@{intuition})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=Willpower + Intuition}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" title="Willpower + Intuition"><span class="center" data-i18n="directmagicdefense">Direct Magic Defense</span></span>
</button>
<button type="roll" name="roll_indirect_magic_defense" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{indirect} ^{magic} ^{defense}}}{{dice=[[((@{reaction}+@{willpower})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=Reaction + Willpower}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">
<span class="center" title="Reaction + Willpower"><span class="center" data-i18n="indirectmagicdefense">Indirect Magic Defense</span></span>
</button>
</div>
<div class="rows grunt spirit">
<button name="roll_dr" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defenserating}}}{{rating=@{defense_rating}}}">
<span class="center"><span data-i18n="dr">DR</span> <span name="attr_defense_rating"></span></span>
</button>
<label class="settings" data-i18n-title="defenserating" title="defenserating">
<input name="attr_defense_rating" placeholder="9" title="@{defense_rating}" type="number" value="0"/>
</label>
<button data-i18n="defense" name="roll_defense" type="roll" title="Reaction + Intuition" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defense} = ^{reaction} + ^{intuition}}}{{dice=[[(@{reaction}+@{intuition}+@{defense_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="toggle-display"> <span class="tiny">+</span><span name="attr_defense_modifier"></span></span>
<button data-i18n="soak" name="roll_soak" type="roll" title="Body" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{soak} ^{damage}}}{{dice=[[(@{body}+@{soak_modifier}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="toggle-display"> <span class="tiny">+</span><span name="attr_soak_modifier"></span></span>
</div>
<div class="rows grunt vehicle sprite host">
<input name="attr_flag_matrix" type="hidden" value=""/>
<div class="matrix">
<button name="roll_matrix_ar" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{matrix} ^{attackrating}}}{{rating=@{matrix_attack_rating}}}">
<span class="center"><span data-i18n="matrix_ar">Matrix AR</span> <span name="attr_matrix_attack_rating"></span></span>
</button>
<label class="settings" data-i18n-title="matrix_ar" title="matrix_ar">
<input name="attr_matrix_attack_rating" placeholder="9" title="@{matrix_attack_rating}" type="number" value="0"/>
</label>
<button name="roll_matrix_dr" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{matrix} ^{defenserating}}}{{rating=@{matrix_defense_rating}}}">
<span class="center"><span data-i18n="matrix_dr" title="@{matrix_defense_rating">DR</span> <span name="attr_matrix_defense_rating"></span></span>
</button>
<label class="settings" data-i18n-title="matrix_dr" title="matrix_dr">
<input name="attr_matrix_defense_rating" placeholder="9" title="@{matrix_defense_rating}" type="number" value="0"/>
</label>
</div>
</div>
<div class="rows grunt">
<input name="attr_flag_matrix" type="hidden" value=""/>
<div class="matrix">
<button data-i18n="soakmatrix" name="roll_soak" type="roll" title="Firewall" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{soak} ^{matrix} ^{damage} = ^{firewall}}}{{dice=[[(@{firewall}+@{soak_matrix_modifier}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">soak matrix</button>
<label class="settings" data-i18n-title="soakmatrix" title="soak">
<input name="attr_soak_matrix_modifier" placeholder="0" title="@{soak_matrix_modifier}" type="number" value="0"/>
</label>
<span class="toggle-display"> <span class="tiny">+</span><span name="attr_soak_matrix_modifier"></span></span>
<button data-i18n="soakbiofeedback" name="roll_soak" type="roll" title="Willpower" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{soak} ^{biofeedback} ^{damage} = ^{willpower}}}{{dice=[[(@{willpower}+@{soak_biofeedback_modifier}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">soak biofeedback</button>
<label class="settings" data-i18n-title="soakbiofeedback" title="soak">
<input name="attr_soak_biofeedback_modifier" placeholder="0" title="@{soak_biofeedback_modifier}" type="number" value="0"/>
</label>
<span class="toggle-display"> <span class="tiny">+</span><span name="attr_soak_biofeedback_modifier"></span></span>
</div>
</div>
<div class="rows vehicle sprite host">
<input name="attr_flag_matrix" type="hidden" value=""/>
<div class="matrix">
<button data-i18n="soakmatrix" name="roll_soak" type="roll" title="Firewall" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{soak} ^{matrix} ^{damage} = ^{firewall}}}{{dice=[[(@{firewall}+@{soak_matrix_modifier}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">soak matrix</button>
<label class="settings" data-i18n-title="soakmatrix" title="soak">
<input name="attr_soak_matrix_modifier" placeholder="0" title="@{soak_matrix_modifier}" type="number" value="0"/>
</label>
<span class="toggle-display"> <span class="tiny">+</span><span name="attr_soak_matrix_modifier"></span></span>
</div>
</div>
<div class="rows grunt">
<span class="pictos3 chem">d</span><span class="chem"> Chem </span> <span name="attr_chem_total"></span>
<label class="settings" data-i18n-title="chemprotection" title="chemprotection">
<input name="attr_chem_modifier" placeholder="0" title="@{chem_modifier}" type="number" value="0"/>
</label>
<span class="toggle-display"> <span name="attr_chem_modifier"></span></span>
<span class="pictos cold">b</span><span class="cold"> Cold </span> <span name="attr_cold_total"></span>
<label class="settings" data-i18n-title="coldprotection" title="coldprotection">
<input name="attr_cold_modifier" placeholder="0" title="@{cold_modifier}" type="number" value="0"/>
</label>
<span class="toggle-display"> <span name="attr_cold_modifier"></span></span>
</div>
<div class="rows grunt">
<span class="pictos elec">e</span><span class="elec"> Elec </span> <span name="attr_elec_total"></span>
<label class="settings" data-i18n-title="elecprotection" title="elecprotection">
<input name="attr_elec_modifier" placeholder="0" title="@{elec_modifier}" type="number" value="0"/>
</label>
<span class="toggle-display"> <span name="attr_elec_modifier"></span></span>
<span class="pictos3 fire">j</span><span class="fire"> Fire </span> <span name="attr_fire_total"></span>
<label class="settings" data-i18n-title="fireprotection" title="fireprotection">
<input name="attr_fire_modifier" placeholder="0" title="@{fire_modifier}" type="number" value="0"/>
</label>
<span class="toggle-display"> <span name="attr_fire_modifier"></span></span>
</div>
<div class="rows vehicle">
<button data-i18n="defense" name="roll_defense" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defense} = ^{pilot} + ^{evasion}}}{{dice=[[((?{Pilot Rating?| No Pilot, @{pilot}| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10}+?{Evasion Autosoft Rating?| No Evasion Autosoft, 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10}+@{defense_modifier})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="toggle-display"> <span class="tiny">+</span><span name="attr_defense_modifier"></span></span>
</div>
<div class="rows host">
<button data-i18n="defense" name="roll_defense" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defense} = ^{data_processing} + ^{firewall}}}{{dice=[[(@{data_processing}+@{firewall}+@{defense_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="toggle-display"> <span class="tiny">+</span><span name="attr_defense_modifier"></span></span>
</div>
<div class="rows vehicle">
<button data-i18n="soak" name="roll_soak" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{soak} ^{damage}}}{{dice=[[(@{body}+@{soak_modifier}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}">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="toggle-display"> <span class="tiny">+</span><span name="attr_soak_modifier"></span></span>
</div>
</div>
<!-- OPTIONS -->
<div class="column">
<div class="rows">
<h1 data-i18n="options">Options</h1>
</div>
<div class="rows grunt">
<label class="settings" data-i18n-title="archetype" title="Archetype">
<h2 data-i18n="archetype">Archetype</h2>
<select name="attr_flag_special">
<option value="mundane" data-i18n="mundane" selected="selected">Mundane</option>
<option value="magic" data-i18n="awakened">Awakened</option>
<option value="resonance" data-i18n="technomancer">Technomancer</option>
</select>
</label>
<label class="settings" data-i18n-title="paintolerance" title="Pain Tolerance">
<h2 data-i18n="paintolerance">Pain Tolerance</h2>
<select name="attr_pain_tolerance">
<option value="+1" data-i18n="highpaintolerance">High Pain Tolerance</option>
<option value="0" data-i18n="none" selected="selected">None</option>
<option value="-1" data-i18n="lowpaintolerance">Low Pain Tolerance</option>
</select>
</label>
</div>
<div class="rows grunt">
<label class="settings" title="Has Matrix Device">
<input class="character-type" name="attr_flag_matrix" title="@{flag_matrix}" type="checkbox" value="matrix"/>
<h2 data-i18n="hasmatrixdevice">Has Matrix Device</h2>
</label>
</div>
<div class="rows grunt spirit vehicle">
<label title="Grunt Group">
<input class="grunt-group-member" name="attr_grunt_group_member" title="@{grunt_group_member}" type="checkbox" value="grunt_group_member"/>
<h2 data-i18n="gruntgroupmember">Grunt Group Member</h2>
</label>
</div>
<div class="rows grunt spirit vehicle">
<label title="Grunt Count">
<h2 data-i18n="number_grunts"># Grunts</h2>
<input class="grunt-group-count" name="attr_grunt_group_count" title="@{grunt_group_count}" type="number" min='0' value="0"/>
</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>
<br>
<div class="border-box">
<div class="end body pc-box">
<input name="attr_quality" type="hidden" value=""/>
<div class="textrow grunt">
<h1 data-i18n="qualities">Qualities</h1>
<span name="attr_quality"></span><br>
<label class="settings" data-i18n-title="quality" title="Qualities">
<textarea class="full-row" 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">Augmentations</h1>
<span name="attr_augmentations"></span><br>
<label class="settings" data-i18n-title="augmentations" title="Augmentations">
<textarea class="full-row" 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">Gear</h1>
<span name="attr_gear"></span><br>
<label class="settings" data-i18n-title="gear" title="Gear">
<textarea class="full-row" name="attr_gear" placeholder="Gear" title="@{gear}"></textarea>
</label>
</div>
<div class="textrow vehicle">
<h1 data-i18n="autosofts">Autosofts</h1>
<div class="textrow autosofts">
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_clearsight" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="clearsight" name="roll_clearsight" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{clearsight} = ^{clearsight} + ^{sensor}}}{{dice=[[(@{clearsight}+@{sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input class="settings" type="number" name="attr_clearsight" title="Clearsight" value="0">
<span class="toggle-display" name="attr_clearsight"></span>
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_electronicwarfare" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="electronicwarfare" name="roll_npc_ew" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{electronicwarfare} = ^{electronicwarfare} + ^{sensor}}}{{dice=[[(@{electronicwarfare}+@{sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input class="settings" type="number" name="attr_electronicwarfare" title="Electronic Warfare" value="0">
<span class="toggle-display" name="attr_electronicwarfare"></span>
</div>
<span>&nbsp;</span>
</div>
<div class="textrow autosofts">
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_evasion" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="evasion" name="roll_npc_evasion" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{evasion} = ^{evasion} + ^{pilot}}}{{dice=[[(@{evasion}+@{pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input class="settings" type="number" name="attr_evasion" title="evasion" value="0">
<span class="toggle-display" name="attr_evasion"></span>
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_maneuvering" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="maneuvering" name="roll_npc_maneuvering" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{maneuvering} = ^{maneuvering} + ^{pilot}}}{{dice=[[(@{maneuvering}+@{pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input class="settings" type="number" name="attr_maneuvering" title="Electronic Warfare" value="0">
<span class="toggle-display" name="attr_maneuvering"></span>
</div>
<span>&nbsp;</span>
</div>
<div class="textrow autosofts">
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_stealth" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="stealth" name="roll_npc_stealth" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{stealth} = ^{stealth} + ^{pilot}}}{{dice=[[(@{stealth}+@{pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input class="settings" type="number" name="attr_stealth" title="stealth" value="0">
<span class="toggle-display" name="attr_stealth"></span>
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_targeting_1" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="targeting" name="roll_npc_targeting" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{targeting_weapon} ^{targeting} = ^{targeting} + ^{sensor}}}{{dice=[[(@{targeting}+@{sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input class="settings" type="number" name="attr_targeting" title="[Weapon] Targeting" value="0">
<input class="settings" type="text" name="attr_targeting_weapon" title="[Weapon]" value="" placeholder="AK-97">
<span class="toggle-display" name="attr_targeting"></span>
<span class="toggle-display"></span>
<span class="toggle-display" name="attr_targeting_weapon"></span>
</div>
<span>&nbsp;</span>
</div>
<div class="textrow autosofts">
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_targeting_2" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="targeting" name="roll_npc_targeting2" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{targeting2_weapon} ^{targeting} = ^{targeting} + ^{sensor}}}{{dice=[[(@{targeting2}+@{sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input class="settings" type="number" name="attr_targeting2" title="[Weapon2] Targeting" value="0">
<input class="settings" type="text" name="attr_targeting2_weapon" title="[Weapon2]" value="" placeholder="AK-97">
<span class="toggle-display" name="attr_targeting2"></span>
<span class="toggle-display"></span>
<span class="toggle-display" name="attr_targeting2_weapon"></span>
</div>
<span>&nbsp;</span>
<div class="autosoft-column">
<input class="toggle" name="attr_powered_on_targeting_3" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button data-i18n="targeting" name="roll_npc_targeting3" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{targeting3_weapon} ^{targeting} = ^{targeting} + ^{sensor}}}{{dice=[[(@{targeting3}+@{sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<input class="settings" type="number" name="attr_targeting3" title="[Weapon3] Targeting" value="0">
<input class="settings" type="text" name="attr_targeting3_weapon" title="[Weapon3]" value="" placeholder="AK-97">
<span class="toggle-display" name="attr_targeting3"></span>
<span class="toggle-display"></span>
<span class="toggle-display" name="attr_targeting3_weapon"></span>
</div>
<span>&nbsp;</span>
</div>
</div>
<input name="attr_programs" type="hidden" value=""/>
<div class="textrow vehicle">
<h1 data-i18n="programs">Programs</h1>
<span name="attr_programs"></span><br>
<label class="settings" data-i18n-title="programs" title="Programs">
<textarea class="full-row" 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">Modifications</h1>
<span name="attr_modifications"></span><br>
<label class="settings" data-i18n-title="modifications" title="Modifications">
<textarea class="full-row" 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">Powers</h1>
<span name="attr_powers"></span><br>
<label class="settings" data-i18n-title="powers" title="Powers">
<textarea class="full-row" name="attr_powers" placeholder="Powers" title="@{powers}"></textarea>
</label>
</div>
<div class="textrow grunt hide-magic">
<input name="attr_initiate" type="hidden" value=""/>
<h1 data-i18n="initiation">Initiation</h1>
<span name="attr_initiate"></span><br>
<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 class="full-row" 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 class="full-row" 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_skills">
<input name="attr_display_rating" type="hidden"/>
<input name="attr_specialization" type="hidden" value=""/>
<input name="attr_expertise" type="hidden" value=""/>
<input name="attr_display_attribute" type="hidden" value="Intuition"/>
<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 name="roll_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{display_attribute})}}{{dice=[[(@{dicepool}+@{attribute}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span><span name="attr_name"></span> <span name="attr_dicepool"></span></span></button>
<button name="roll_specialization" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{display_attribute}) + ^{specialization}}}{{dice=[[(@{dicepool}+@{attribute}+2+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Spec: @{specialization}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span class="skill_spec" name="attr_specialization"></span></button>
<button name="roll_expertise" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{display_attribute}) + ^{expertise}}}{{dice=[[(@{dicepool}+@{attribute}+3+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Expert: @{expertise}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span class="skill_expert" name="attr_expertise"></span></button><span class="tiny">, </span>
<div class="settings">
<h2 data-i18n="skill">Skill</h2>
<h2 data-i18n="rating">Rating</h2>
<h2 data-i18n="mod">Mod</h2>
<h2 data-i18n="attribute">Attribute</h2>
<select class="skill-select" name="attr_name" title="@{repeating_skills_${x}_name}">
<option value="Astral" data-i18n="astral">Astral</option>
<option value="Athletics" data-i18n="athletics">Athletics</option>
<option value="Biotech" data-i18n="biotech">Biotech</option>
<option value="Close Combat" data-i18n="closecombat">Close Combat</option>
<option value="Con" data-i18n="con">Con</option>
<option value="Conjuring" data-i18n="conjuring">Conjuring</option>
<option value="Cracking" data-i18n="cracking">Cracking</option>
<option value="Electronics" data-i18n="electronics">Electronics</option>
<option value="Enchanting" data-i18n="enchanting">Enchanting</option>
<option value="Engineering" data-i18n="engineering">Engineering</option>
<option value="Exotic Weapons" data-i18n="exoticweapons">Exotic Weapons</option>
<option value="Firearms" data-i18n="firearms">Firearms</option>
<option value="Influence" data-i18n="influence">Influence</option>
<option value="Outdoors" data-i18n="outdoors">Outdoors</option>
<option value="Perception" data-i18n="perception">Perception</option>
<option value="Piloting" data-i18n="piloting">Piloting</option>
<option value="Sorcery" data-i18n="sorcery">Sorcery</option>
<option value="Stealth" data-i18n="stealth">Stealth</option>
<option value="Tasking" data-i18n="tasking">Tasking</option>
</select>
<label data-i18n-title="rating" title="rating">
<input name="attr_rating" min="0" placeholder="0" title="@{repeating_skills_${x}_rating}" type="number"/>
</label>
<label data-i18n-title="ratingmodifier" title="Rating Modifier">
<input name="attr_rating_modifier" min="0" placeholder="0" title="@{repeating_skills_${x}_rating_modifier}" type="number"/>
</label>
<select class="attribute-select" name="attr_attribute" title="@{repeating_skills_${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}" selected="selected">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>
<h2 class="full-row skill_spec" data-i18n="specialization">Specialization (+2)</h2>
<label class="full-row" data-i18n-title="specialization" title="specialization">
<input name="attr_specialization" placeholder="Specalizations" title="@{repeating_skills_${x}_specialization}" type="text"/>
</label>
<h2 class="full-row skill_expert" data-i18n="expertise">Expertise (+3)</h2>
<label class="full-row" data-i18n-title="expertise" title="expertise">
<input name="attr_expertise" placeholder="Expertise" title="@{repeating_skills_${x}_expertise}" type="text"/>
</label>
</div>
</fieldset>
</div>
<div class="rows grunt repeating inline-repeating">
<h1 data-i18n="knowledge">knowledge</h1><br>
<fieldset class="repeating_knowledge">
<input class="toggle red" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<button name="roll_npc_knowledge" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{type})}}{{desc=@{notes}}}"><span name="attr_name"></span></button>
<div class="settings">
<h2 data-i18n="skill">Skill</h2>
<label data-i18n-title="name" title="Name">
<input name="attr_name" placeholder="Name" title="@{repeating_knowledge_${x}_name}" type="text"/>
</label>
<label data-i18n-title="type" title="Type">
<select class="center" data-i18n-title="type" name="attr_type" title="skill_type">
<option data-i18n="knowledge" value="Knowledge">Knowledge</option>
<option data-i18n="language" value="Language">Language</option>
</select>
</label>
<label data-i18n-title="notes" title="notes"><span data-i18n="notes">Notes</span>
<textarea class="full-row" name="attr_notes" placeholder="Notes" title="@{repeating_knowledge_${x}_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
<div class="rows sprite repeating inline-repeating">
<h1 data-i18n="skills">skills</h1>
<fieldset class="repeating_skills">
<input class="toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<button name="roll_sprite_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{skill} @{level} + Attribute ?{Attribute|Logic,@{data_processing}|Intuition,@{sleaze}|Charisma,@{attack}|Willpower,@{firewall}|None,0}}}{{dice=[[(@{level}+?{Attribute}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_skill"></span></button>
<div class="settings">
<h2 class="full-row" data-i18n="skill">Skill</h2>
<select class="skill-select" name="attr_skill" title="@{repeating_skills_${x}_skill}">
<option value="Cracking" data-i18n="cracking">Cracking</option>
<option value="Electronics" data-i18n="electronics">Electronics</option>
<option value="Engineering" data-i18n="engineering">Engineering</option>
</select>
</div>
</fieldset>
</div>
<div class="rows spirit repeating inline-repeating">
<h1 data-i18n="skills">Skills</h1>
<fieldset class="repeating_skills">
<input class="toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<button name="roll_spirit_skill" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{skill} ^{force} (@{force}) + ^{attribute} (?{Attribute|Body,@{body}|Agility,@{agility}|Reaction,@{reaction}|Strength,@{strength}|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}|Charisma,@{charisma}|None,0})}}{{dice=[[(@{force}+?{Attribute}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_skill"></span></button>
<div class="settings">
<h2 class="full-row" data-i18n="skill">Skill</h2>
<label data-i18n-title="name" title="name">
<input name="attr_skill" placeholder="name" title="@{repeating_skills_${x}_skill}" type="text"/>
</label>
<h2 class="full-row" data-i18n="notes">Notes</h2>
<label class="full-row" data-i18n-title="notes" title="notes">
<textarea class="full-row" name="attr_notes" placeholder="skills notes" title="@{repeating_skills_${x}_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
<div class="rows sprite spirit 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}{{header=@{character_name}}}{{base=@{name}}}{{desc=@{notes}}}"><span name="attr_name"></span></button>
<div class="settings">
<h2 class="full-row" data-i18n="name">name</h2>
<label data-i18n-title="name" title="name">
<input name="attr_name" placeholder="name" title="@{repeating_powers_${x}_name}" type="text"/>
</label>
<h2 class="full-row" data-i18n="notes">Notes</h2>
<label class="full-row" data-i18n-title="notes" title="notes">
<textarea class="full-row" name="attr_notes" placeholder="Powers notes" title="@{repeating_powers_${x}_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
<div class="rows grunt spirit vehicle repeating-container weapon-range">
<h1 data-i18n="rangedweapons">Ranged Weapons</h1>
<div class="row-long headers">
<h2 data-i18n="weapon">Weapon</h2>
<h2 data-i18n="pool">Pool</h2>
<h2 data-i18n="dam">Dam</h2>
<h2 data-i18n="c">C</h2>
<h2 data-i18n="n">N</h2>
<h2 data-i18n="m">M</h2>
<h2 data-i18n="f">F</h2>
<h2 data-i18n="e">E</h2>
<h2 data-i18n="mode">Mode</h2>
<h2 data-i18n="ammo">Ammo</h2>
</div>
<fieldset class="repeating_range">
<input title="@{repeating_range_${x}_rating}" name="attr_rating" type="hidden" value="0" />
<input name="attr_skill" type="hidden" value=""/>
<input class="flag-primary" name="attr_primary" type="hidden" value=""/>
<input class="flag-primary" name="attr_additional" type="hidden" value=""/>
<input name="attr_dicepool" type="hidden" value=""/>
<input name="attr_damage" type="hidden" value=""/>
<input name="attr_close" type="hidden" value=""/>
<input name="attr_near" type="hidden" value=""/>
<input name="attr_medium" type="hidden" value=""/>
<input name="attr_far" type="hidden" value=""/>
<input name="attr_extreme" type="hidden" value=""/>
<button name="roll_npc_range_weapon" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (Dicepool: @{dicepool})}}{{dice=[[(@{dicepool}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Mode @{mode}, Damage @{damage}, Dicepool = @{dicepool} + Wounds @{wounds_toggle} + Modifiers @{modifiers_toggle} + Edge @{edge_toggle}, Notes @{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_dicepool"></span>
<span class="center" name="attr_damage"></span>
<span class="center" name="attr_close"></span>
<span class="center" name="attr_near"></span>
<span class="center" name="attr_medium"></span>
<span class="center" name="attr_far"></span>
<span class="center" name="attr_extreme"></span>
<select name="attr_mode" title="@{mode}">
<option data-i18n="ss" value="SS">SS</option>
<option data-i18n="sa" value="SA">SA</option>
<option data-i18n="bf" value="BF">BF</option>
<option data-i18n="fa" value="FA">FA</option>
<option data-i18n="other" value="Other">Other</option>
</select>
<span class="center" name="attr_ammo"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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="Ares Predator" title="@{repeating_range_${x}_name}" type="text" value=""/>
</label>
<label data-i18n-title="pool" title="pool">
<input name="attr_dicepool_base" placeholder="" title="@{repeating_range_${x}_dicepool_base}" type="text" value=""/>
</label>
<label data-i18n-title="dam" title="dam">
<input name="attr_damage_base" placeholder="9P" title="@{repeating_range_${x}_damage_base}" type="text" value=""/>
</label>
<label data-i18n-title="c" title="Close">
<input name="attr_close_base" placeholder="-" title="@{repeating_range_${x}_close_base}" type="text" value=""/>
</label>
<label data-i18n-title="n" title="Near">
<input name="attr_near_base" placeholder="-" title="@{repeating_range_${x}_near_base}" type="text" value=""/>
</label>
<label data-i18n-title="m" title="Medium">
<input name="attr_medium_base" placeholder="-" title="@{repeating_range_${x}_medium_base}" type="text" value=""/>
</label>
<label data-i18n-title="f" title="Far">
<input name="attr_far_base" placeholder="-" title="@{repeating_range_${x}_far_base}" type="text" value=""/>
</label>
<label data-i18n-title="e" title="Extreme">
<input name="attr_extreme_base" placeholder="-" title="@{repeating_range_${x}_extreme_base}" type="text" value=""/>
</label>
<span class="center">SS</span>
<label data-i18n-title="ammo" title="ammo">
<input name="attr_ammo" placeholder="15" title="@{repeating_range_${x}_ammo}" type="number" value=""/>
</label>
<span></span>
<span></span>
<div class="row">
<h3 data-i18n="firingmodes">Firing Modes</h3>
<label data-i18n-title="modeoptions" title="Mode Options">
<input name="attr_firing_modes" placeholder="SS/SA/BF/BW/FA" type="text" title="@{repeating_range_${x}_firing_modes}}"/>
</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>
</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}"></textarea>
</label>
</div>
</fieldset>
</div>
<div class="rows grunt spirit vehicle rows repeating-container weapon-melee">
<h1 data-i18n="meleeweapons">Melee Weapons</h1>
<div class="row-long headers">
<h2 data-i18n="weapon">Weapon</h2>
<h2 data-i18n="pool">Pool</h2>
<h2 data-i18n="dam">Dam</h2>
<h2 data-i18n="c" title="Close 0-3">C</h2>
<h2 data-i18n="n" title="Near 4-50">N</h2>
<h2 data-i18n="m" title="Medium 51-250">M</h2>
<h2 data-i18n="f" title="Far 251-500">F</h2>
<h2 data-i18n="e" title="Extreme 500+">E</h2>
</div>
<fieldset class="repeating_melee">
<input title="@{repeating_melee_${x}_rating}" name="attr_rating" type="hidden" value="0" />
<input name="attr_skill" type="hidden" value=""/>
<input class="flag-primary" name="attr_primary" type="hidden" value=""/>
<input class="flag-primary" name="attr_additional" type="hidden" value=""/>
<input name="attr_dicepool" type="hidden" value=""/>
<input name="attr_damage" type="hidden" value=""/>
<input name="attr_close" type="hidden" value=""/>
<input name="attr_near" type="hidden" value=""/>
<input name="attr_medium" type="hidden" value=""/>
<input name="attr_far" type="hidden" value=""/>
<input name="attr_extreme" type="hidden" value=""/>
<button name="roll_npc_melee_weapon" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (Dicepool: @{dicepool})}}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=DV @{damage}, Notes: @{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_dicepool"></span>
<span class="center" name="attr_damage"></span>
<span class="center" name="attr_close"></span>
<span class="center" name="attr_near"></span>
<span class="center" name="attr_medium"></span>
<span class="center" name="attr_far"></span>
<span class="center" name="attr_extreme"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" 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="Katana" title="@{repeating_melee_${x}_name}" type="text" value=""/>
</label>
<label data-i18n-title="pool" title="pool">
<input name="attr_dicepool_base" placeholder="0d6" title="@{repeating_melee_${x}_dicepool_base}" type="text" value=""/>
</label>
<label data-i18n-title="dam" title="dam">
<input name="attr_damage_base" placeholder="5P" title="@{repeating_melee_${x}_damage_base}" type="text" value=""/>
</label>
<label data-i18n-title="close" title="Close 0-3">
<input name="attr_close_base" placeholder="-" title="@{repeating_melee_${x}_close_base}" type="text" value=""/>
</label>
<label data-i18n-title="near" title="Near 4-50">
<input name="attr_near_base" placeholder="-" title="@{repeating_melee_${x}_near_base}" type="text" value=""/>
</label>
<label data-i18n-title="medium" title="Medium 51-250">
<input name="attr_medium_base" placeholder="-" title="@{repeating_melee_${x}_medium_base}" type="text" value=""/>
</label>
<label data-i18n-title="far" title="Far 251-500">
<input name="attr_far_base" placeholder="-" title="@{repeating_melee_${x}_far_base}" type="text" value=""/>
</label>
<label data-i18n-title="extreme" title="Extreme 500+">
<input name="attr_extreme_base" placeholder="-" title="@{repeating_melee_${x}_extreme_base}" 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_melee_${x}_notes}"></textarea>
</label>
</div>
</fieldset>
</div>
<div class="rows grunt repeating-container spells hide-magic">
<h1 data-i18n="spells">Spells</h1>
<div class="row-long">
<button type="roll" name="roll_magic_ar" value="@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{magic} ^{attack} ^{rating}}}{{rating=@{magic_ar}}}">
<span class="center"><span data-i18n="magicar">Magic AR</span> <span name="attr_magic_ar"></span></span>
</button>
<button data-i18n="drain" name="roll_drain" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{spell} ^{drain}}}{{dice=[[((@{spell_drain_attribute_1}+@{spell_drain_attribute_2}+@{spell_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
<select class="attribute-select" name="attr_spell_drain_attribute_1" title="@{spell_drain_attribute_1}">
<option data-i18n="willpower" value="@{willpower}">Willpower</option>
</select><span>+</span>
<select class="attribute-select" name="attr_spell_drain_attribute_2" title="@{spell_drain_attribute_2}">
<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>
</select>
<h3 data-i18n="modifier">modifier</h3>
<label data-i18n-title="modifier" title="modifier">
<input name="attr_spell_drain_modifier" title="@{spell_drain_modifier}" type="number" value="0"/>
</label>
</div>
<div class="rows headers spells-header">
<h2 data-i18n="name">Name</h2>
<h2 data-i18n="dice">Dice</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>
<span>&nbsp;</span>
<span>&nbsp;</span>
</div>
<fieldset class="repeating_NPCspell">
<button name="roll_npc_spell" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{ampup=[[?{Amp Up|0|1|2|3|4|5|6|7|8|9|10}]]}}{{increasearea=[[?{Increase Area|0m,0|2m,1|4m,2|6m,3|8m,4|10m,5|12m,5|14m,6|16m,8|18m,9|20m,10}*2]]}}{{drain=[[?{Amp Up}*2+?{Increase Area}+(@{drain})]]}}{{desc=@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_dicepool"></span>
<span class="center" name="attr_type"></span>
<span class="center" name="attr_range"></span>
<span class="center" name="attr_duration"></span>
<span class="center" name="attr_drain"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox" checked="checked"/><span class="pictos">i</span>
<input class="settings-flag" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
<div class="row1">
<label data-i18n-title="name" title="Name">
<input name="attr_name" placeholder="Fireball" title="@{repeating_NPCspell_${x}_name}" type="text"/>
</label>
<label data-i18n-title="dice" title="Dice">
<input name="attr_dicepool" placeholder="18" title="@{repeating_NPCspell_${x}_dicepool}" type="number"/>
</label>
<select name="attr_type" title="@{repeating_NPCspell_${x}_type}">
<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}">
<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="touch" value="T">Touch</option>
</select>
<select name="attr_duration" title="@{repeating_NPCspell_${x}_duration}">
<option data-i18n="instant" value="Instant">instant</option>
<option data-i18n="permanent" value="Permanent">permanent</option>
<option data-i18n="limited" value="Limited">Limited</option>
<option data-i18n="sustained" value="Sustained">sustained</option>
<option data-i18n="special" value="Special">special</option>
</select>
<label data-i18n-title="drain" title="Drain">
<input name="attr_drain" placeholder="-1" title="@{repeating_NPCspell_${x}_drain}" type="number"/>
</label>
<span>&nbsp;</span>
<span>&nbsp;</span>
</div>
<div class="row2">
<input name="attr_category" type="hidden" value="combat"/>
<h3 class="right" data-i18n="category">Category</h3>
<select name="attr_category" title="@{repeating_NPCspell_${x}_category}">
<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>
<h3 class="right" data-i18n="effecttype">Effect Type</h3>
<select name="attr_effect_type" title="@{repeating_NPCspell_${x}_effect_type}">
<option data-i18n="none" value="" selected="selected">None</option>
<option data-i18n="directcombat" value="Direct Combat">Direct Combat</option>
<option data-i18n="directcombatarea" value="Direct Combat, Area">Direct Combat, Area</option>
<option data-i18n="indirectcombat" value="Indirect Combat">Indirect Combat</option>
<option data-i18n="indirectcombatarea" value="Indirect Combat, Area">Indirect Combat, Area</option>
<option data-i18n="singlesense" value="Single-Sense">Single-Sense</option>
<option data-i18n="multisense" value="Multi-Sense">Multi-Sense</option>
</select>
<h3 class="right" data-i18n="damage">Damage</h3>
<select name="attr_damage" title="@{repeating_NPCspell_${x}_damage}">
<option data-i18n="physical" value="Physical">Physical</option>
<option data-i18n="stun" value="Stun">Stun</option>
<option data-i18n="pspecial" value="Physical, Special">Physical, Special</option>
</select>
<h3 data-i18n="notes">Notes</h3>
<label data-i18n-title="notes" title="Notes">
<textarea class="full-row" name="attr_notes" placeholder="may start fires" title="@{repeating_NPCspell_${x}_notes}" type="text"/></textarea>
</label>
</div>
</div>
</fieldset>
</div>
<div class="rows grunt repeating forms hide-resonance">
<h1 data-i18n="complexform">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_dice"></span>
<button name="roll_complex form" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(@{dice}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=Fade @{fade}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span name="attr_duration"></span>
<span name="attr_fade"></span>
<div class="settings">
<h2 data-i18n="dice">Dice</h2>
<h2 data-i18n="name">Name</h2>
<h2 data-i18n="duration">Duration</h2>
<h2 data-i18n="fade">Fade</h2>
<label data-i18n-title="dice" title="Dice">
<input name="attr_dice" placeholder="18" title="@{repeating_form_${x}_dice}" type="number"/>
</label>
<label data-i18n-title="name" title="Name">
<input name="attr_name" placeholder="Editor" title="@{repeating_form_${x}_name}" type="text"/>
</label>
<label data-i18n-title="duration" title="Duration">
<select name="attr_duration" title="@{repeating_forms_${x}_duration}">
<option data-i18n="instant" value="Instant">Instant</option>
<option data-i18n="sustained" value="Sustained">Sustained</option>
<option data-i18n="limited" value="Limited">Limited</option>
<option data-i18n="permanent" value="Permanent">Permanent</option>
<option data-i18n="other" value="Other">Other</option>
</select>
</label>
<label data-i18n-title="fade" title="Fade">
<input name="attr_fade" placeholder="+2" title="@{repeating_form_${x}_fade}" type="number"/>
</label>
<label data-i18n-title="notes" title="Notes">
<input name="attr_notes" placeholder="edit files" title="@{repeating_form_${x}_notes}" type="text"/>
</label>
</div>
</fieldset>
</div>
<div class="rows host repeating-container ic">
<h1 data-i18n="intrusioncountermeasures">Intrusion Countermeasures</h1>
<div class="row-long headers">
<span>&nbsp;</span>
<h2 data-i18n="ic">IC</h2>
<h2 data-i18n="pool">Pool</h2>
<h2 data-i18n="ar">AR</h2>
<h2 data-i18n="cm">CM</h2>
<h2 data-i18n="init">Init</h2>
<h2 data-i18n="defense">Defense</h2>
<span>&nbsp;</span>
<span>&nbsp;</span>
</div>
<fieldset class="repeating_IC">
<input name="attr_IC" type="hidden" value=""/>
<input class="toggle" name="attr_powered_on_IC" type="checkbox" value='1'/>
<span class="pictos">Q</span>
<button name="roll_IC" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{ic}: @{name}}}{{dice=[[(@{dice}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=vs. @{attribute}+@{matrix}\n@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
<span class="center" name="attr_dice"></span>
<span class="center" name="attr_ar"></span>
<label data-i18n-title="cm" title="Condition Monitor">
<input name="attr_cm" title="@{repeating_form_${x}_cm}" type="number"/>
</label>
<button name="roll_IC_init" type="roll" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}:IC}}{{base=^{ic}: ^{initiative}}}{{dice=[[(@{initdice}+@{modifiers_toggle}+@{edge_toggle})d6+@{init}]]}}"><span data-i18n="initiative"></span></button>
<span class="center" name="attr_defense"></span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox" />
<span class="pictos">i</span>
<input class="settings-toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked" />
<span class="pictos">x</span>
<div class="collapse"><span name="attr_notes"></span></div>
<div class="settings">
<span>&nbsp;</span>
<label data-i18n-title="name" title="Name">
<input name="attr_name" placeholder="Black" title="@{repeating_IC_${x}_name}" type="text"/>
</label>
<label data-i18n-title="dice" title="Dice">
<input name="attr_dice" title="@{repeating_IC_${x}_dice}" type="number"/>
</label>
<label data-i18n-title="ar" title="Attack Rating">
<input name="attr_ar" title="@{repeating_IC_${x}_ar}" type="number"/>
</label>
<label data-i18n-title="cm" title="Condition Monitor">
<input name="attr_cm" title="@{repeating_IC_${x}_cm}" type="number"/>
</label>
<span class="initiative center">
<label data-i18n-title="init" title="Initiative">
<input name="attr_init" title="@{repeating_IC_${x}_init}" type="number" />
</label>
<span class="tiny">+</span>
<label data-i18n-title="init" title="Initiative Dice">
<input name="attr_initdice" title="@{repeating_IC_${x}_initdice}" type="number" value="3" />
</label>
<span class="tiny">d6</span>
</span>
<span class="defense_attributes center">
<select name="attr_attribute" title="@{repeating_IC_${x}_attribute}">
<option data-i18n="none" value="None">None</option>
<option data-i18n="intuition" value="Intuition">intuition</option>
<option data-i18n="logic" value="Logic">logic</option>
<option data-i18n="willpower" value="Willpower" selected="selected">willpower</option>
</select>
<span class="tiny">+</span>
<select name="attr_matrix" title="@{repeating_IC_${x}_matrix}">
<option data-i18n="none" value="None">None</option>
<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>
</span>
<span>&nbsp;</span>
<span>&nbsp;</span>
<label data-i18n-title="notes" title="Notes">
<textarea name="attr_notes" placeholder="deploy the ic"></textarea>
</label>
</div>
</fieldset>
</div>
<div class="textrow host slaved-devices">
<h1 data-i18n="slaveddevices">Slaved Devices</h1><br>
<span name='attr_slaved_devices'></span>
<label class="settings" data-i18n-title="slaveddevices" title="Slaved Devices">
<textarea class="full-row" name="attr_slaved_devices" placeholder="Cameras, door locks, elevator controls..." title="@{slaved_devices}"></textarea>
</label>
</div>
<div class="textrow host sculpting">
<h1 data-i18n="sculpting">Sculpting</h1><br>
<span name='attr_sculpting'></span>
<label class="settings" data-i18n-title="sculpting" title="Sculpting">
<textarea class="full-row" name="attr_sculpting" placeholder="In VR, the host is designed to look like a large black pyramid..." title="@{sculpting}"></textarea>
</label>
</div>
<div class="textrow host security-procedures">
<h1 data-i18n="securityprocedures">Security Procedures</h1><br>
<span name='attr_security_procedures'></span>
<label class="settings" data-i18n-title="securityprocedures" title="Security Procedures">
<textarea class="full-row" name="attr_security_procedures" placeholder="Patrol IC running at all times, Once alarmed, the host launches IC in this order..." title="@{security_procedures}"></textarea>
</label>
</div>
<div class="textrow host pay-data">
<h1 data-i18n="paydata">Pay Data</h1><br>
<span name='attr_pay_data'></span>
<label class="settings" data-i18n-title="paydata" title="Pay Data">
<textarea class="full-row" name="attr_pay_data" placeholder="Housekeeping codes worth 500nuyen if sold within a week..." title="@{pay_data}"></textarea>
</label>
</div>
<div class="textrow grunt host sprite spirit vehicle notes">
<h1 data-i18n="notes">Notes</h1><br>
<span name='attr_notes'></span>
<label class="settings" data-i18n-title="notes" title="Notes">
<textarea class="full-row" name="attr_notes" placeholder="" title="@{notes}"></textarea>
</label>
</div>
</div>
</div><!-- end border-box div -->
<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=@{character_name}}}{{base=@{device_name} ^{device} ^{rating}}}{{dice=[[(@{device_rating}+@{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 name="act_matrix_attack" type="action" value="" title="Roll attack" data-i18n="attack">Attack</button>
<div class="matrix-bubble matrixAttack">
<input name="attr_attack" value="0" type="radio"/><span></span>
<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>
</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 name="act_matrix_sleaze" type="action" value="" title="Roll Sleaze" data-i18n="sleaze" >Sleaze</button>
<div class="matrix-bubble matrixSleaze">
<input name="attr_sleaze" value="0" type="radio"/><span></span>
<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>
</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 name="act_matrix_data_processing" type="action" value="" title="Roll Data Processing" data-i18n="data_processing">Data Processing</button>
<div class="matrix-bubble matrixData">
<input name="attr_data_processing" value="0" type="radio"/><span></span>
<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>
</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 name="act_matrix_firewall" type="action" value="" title="Roll Firewall" data-i18n="firewall">Firewall</button>
<div class="matrix-bubble matrixFirewall">
<input name="attr_firewall" value="0" type="radio"/><span></span>
<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>
</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_powered_on" type="checkbox" checked="checked"/>
<span class="pictos">Q</span>
<button name="roll_program" type="roll" value="@{gm_toggle} &amp;{template:rolls}{{header=@{character_name}}}{{base=@{name}}}{{desc=@{program_note}}}"><span name="attr_name"></span></button>
<input class="toggle" name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/>
<span class="pictos">x</span>
<input class="collapse-flag" name="attr_display_flag" type="checkbox"/>
<span class="pictos">i</span>
<div class="collapse">
<span name="attr_program_note"></span>
</div>
<div class="settings">
<h2 data-i18n="name">name</h2>
<label data-i18n-title="name" title="name">
<input name="attr_name" placeholder="Program Name" title="@{repeating_programs_${x}_name}" 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}"></textarea>
</label>
</div>
</fieldset>
</div>
</div>
<div class="matrix body">
<div class="npc-roll-rows">
<div class="pc-row">
<div class="header right-header">
<h1 data-i18n="matrixactions">Matrix Actions</h1>
</div>
</div>
<div class="pc-row">
<div class="border-box">
<div class="pc-box">
<div class="rolls-col">
<input class="tab-switch" name="attr_rolls_toggle" type="hidden" value="matrix"/>
<h3 data-i18n="rollbuttonsdisclaimer"></h3><br>
<h2 data-i18n="matrixmajor">Matrix Major Actions</h2>
<div class="rolls-matrix">
<button type="roll" title="Cracking + Logic" class="illegal outsider" name="roll_matrix_backdoor_entry" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Backdoor Entry}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="backdoorentry"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal outsider user admin" name="roll_matrix_brute_force" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Brute Force}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="bruteforce"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal admin" name="roll_matrix_check_os" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Check OS}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), Threshold: 4}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="checkos"></span></button>
<button type="roll" title="Electronics + Logic" class="legal user admin" name="roll_matrix_control_device" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Control Device}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Willpower + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="controldevice"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal user admin" name="roll_matrix_crack_file" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Crack File}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Encryption Rating x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="crackfile"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal admin" name="roll_matrix_crash_program" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Crash Program}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Data Processing + Device Rating}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="crashprogram"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal outsider user admin" name="roll_matrix_data_spike" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Data Spike}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Data Processing + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="dataspike"></span></button>
<button type="roll" title="Cracking + Logic" class="legal user admin" name="roll_matrix_disarm_data_bomb" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Disarm Data Bomb}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Data Bomb Rating x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="disarmdatabomb"></span></button>
<button type="roll" title="Electronics + Logic" class="legal user admin" name="roll_matrix_edit_file" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Edit File}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Intuition + Firewall |or| Firewall + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="editfile"></span></button>
<button type="roll" title="Electronics + Logic" class="legal user admin" name="roll_matrix_encrypt_file" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Encrypt File}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), Hits = Encryption Rating}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="encryptfile"></span></button>
<button type="roll" title="Electronics + Logic" class="illegal user admin" name="roll_matrix_erase_matrix_signature" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Erase Matrix Signature}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="erasematrixsignature"></span></button>
<button type="roll" title="Electronics + Logic" class="legal admin" name="roll_matrix_format_device" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Format Device}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="formatdevice"></span></button>
<span class="matrix-action legal outsider user admin" data-i18n="fullmatrixdefense"></span>
<button type="roll" title="Electronics + Logic" class="illegal user" name="roll_matrix_hash_check" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Hash Check}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), CRB pg.182}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="hashcheck"></span></button>
<button type="roll" title="Cracking + Intuition" class="illegal outsider user admin" name="roll_matrix_hide" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Hide}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Intuition + Data Processing |or| Data Processing + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="hide"></span></button>
<button type="roll" title="Electronics + Willpower" class="legal outsider user admin" name="roll_matrix_jackout" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jack Out}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{willpower}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Charisma + Data Processing |or| Attack + Data Processing}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="jackout"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal admin" name="roll_matrix_jam_signals" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jam Signals}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), CRB pg.182}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="jamsignals"></span></button>
<button type="roll" title="Electronics + Logic" class="legal user admin" name="roll_matrix_jump_into_rigged_device" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jump Into Rigged Device}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="jumpintoriggeddevice"></span></button>
<button type="roll" title="Electronics + Intuition" class="legal outsider user admin" name="roll_matrix_matrix_perception" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Matrix Perception}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), * Without Resonance or Cyberdeck), vs. Willpower + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="matrixperception"></span></button>
<button type="roll" title="Electronics + Intuition" class="legal outsider user admin" name="roll_matrix_matrix_search" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Matrix Search}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), Extended Test, 10 Minute Interval}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="matrixsearch"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal outsider user admin" name="roll_matrix_probe" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Probe}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="probe"></span></button>
<button type="roll" title="Electronics + Logic" class="legal admin" name="roll_matrix_reboot_device" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Reboot Device}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Legal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="rebootdevice"></span></button>
<button type="roll" title="Electronics + Logic" class="illegal admin" name="roll_matrix_set_data_bomb" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Set Data Bomb}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Device Rating x 2}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="setdatabomb"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal admin" name="roll_matrix_snoop" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Snoop}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Logic + Firewall |or| Data Processing + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="snoop"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal outsider user admin" name="roll_matrix_spoof_command" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Spoof Command}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. (Data Processing or Pilot) + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="spoofcommand"></span></button>
<button type="roll" title="Cracking + Logic" class="illegal outsider user admin" name="roll_matrix_tarpit" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Tar Pit}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Data Processing + Firewall}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="tarpit"></span></button>
<button type="roll" title="Electronics + Intuition" class="illegal admin" name="roll_matrix_trace_icon" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Trace Icon}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=(Illegal), vs. Willpower + Sleaze |or| Firewall + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="traceicon"></span></button>
</div>
<h2 data-i18n="matrixminor">Matrix Minor Actions</h2>
<div class="rolls-matrix">
<span class="matrix-action legal user admin" data-i18n="changeicon"></span>
<span class="matrix-action legal" data-i18n="enterexithost"></span>
<button type="roll" title="Electronics + Intuition" class="legal outsider user admin" name="roll_matrix_matrix_perception" value="@{gm_toggle} &{template:rolls}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Matrix Perception}}{{?{Specialization or Expertise?|Untrained,-1|No,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Specialization or Expertise?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{desc=* With Resonance or Cyberdeck, (Legal), vs. Willpower + Sleaze}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="matrixperception"></span></button>
<span class="matrix-action legal admin" data-i18n="reconfigurematrixattribute"></span>
<span class="matrix-action legal outsider user admin" data-i18n="sendmessage"></span>
<span class="matrix-action legal admin" data-i18n="switchinterfacemode"></span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div>
<span data-i18n="copyrightfooter">The Topps Company, Inc. has sole ownership of the names, logo, artwork, marks, photographs, sounds, audio, video and/or any proprietary material used in influence with the game Shadowrun. The Topps Company, Inc. has granted permission to use such names, logos, artwork, marks and/or any proprietary materials for promotional and informational purposes on its website but does not endorse, and is not affiliated with any official capacity whatsoever.
</span>
<span>Version </span><span name="attr_version"></span>
</div>
</div>
<div class="rolltemplates">
<!--Roll Template for Generic Info 6 each desc and bigdesc rows-->
<rolltemplate class="rolltemplate-multirow">
<div class="template-body">
<div class="template-header">
{{#header}}{{header}}{{/header}}
{{#base}}<br><span>{{base}}</span>{{/base}}
</div>
{{#desc}}<div class="template-row">
<span class="template-desc">
{{desc}}
</span>
</div>{{/desc}}
{{#bigdesc}}<div class="template-row">
{{bigdesc}}
</div>{{/bigdesc}}
{{#divided}}<div class="template-row split">
<span>{{#left}}{{left}}{{/left}}</span>
<span>{{#right}}{{right}}{{/right}}</span>
</div>{{/divided}}
{{#desc2}}<div class="template-row">
<span class="template-desc">
{{desc2}}
</span>
</div>{{/desc2}}
{{#bigdesc2}}<div class="template-row">
{{bigdesc2}}
</div>{{/bigdesc2}}
{{#divided2}}<div class="template-row split">
<span>{{#left2}}{{left2}}{{/left2}}</span>
<span>{{#right2}}{{right2}}{{/right2}}</span>
</div>{{/divided2}}
{{#desc3}}<div class="template-row">
<span class="template-desc">
{{desc3}}
</span>
</div>{{/desc3}}
{{#bigdesc3}}<div class="template-row">
{{bigdesc3}}
</div>{{/bigdesc3}}
{{#divided3}}<div class="template-row split">
<span>{{#left3}}{{left3}}{{/left3}}</span>
<span>{{#right3}}{{right3}}{{/right3}}</span>
</div>{{/divided3}}
{{#desc4}}<div class="template-row">
<span class="template-desc">
{{desc4}}
</span>
</div>{{/desc4}}
{{#bigdesc4}}<div class="template-row">
{{bigdesc4}}
</div>{{/bigdesc4}}
{{#divided4}}<div class="template-row split">
<span>{{#left4}}{{left4}}{{/left4}}</span>
<span>{{#right4}}{{right4}}{{/right4}}</span>
</div>{{/divided4}}
{{#desc5}}<div class="template-row">
<span class="template-desc">
{{desc5}}
</span>
</div>{{/desc5}}
{{#bigdesc5}}<div class="template-row">
{{bigdesc5}}
</div>{{/bigdesc5}}
{{#divided5}}<div class="template-row split">
<span>{{#left5}}{{left5}}{{/left5}}</span>
<span>{{#right5}}{{right5}}{{/right5}}</span>
</div>{{/divided5}}
{{#desc6}}<div class="template-row">
<span class="template-desc">
{{desc6}}
</span>
</div>{{/desc6}}
{{#bigdesc6}}<div class="template-row">
{{bigdesc6}}
</div>{{/bigdesc6}}
{{#divided6}}<div class="template-row split">
<span>{{#left6}}{{left6}}{{/left6}}</span>
<span>{{#right6}}{{right6}}{{/right6}}</span>
</div>{{/divided6}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-multirow">
<div class="sheet-template-body">
<div class="sheet-template-header">
{{#header}}{{header}}{{/header}}
{{#base}}<br><span>{{base}}</span>{{/base}}
</div>
{{#desc}}<div class="sheet-template-row">
<span class="sheet-template-desc">
{{desc}}
</span>
</div>{{/desc}}
{{#bigdesc}}<div class="sheet-template-row">
{{bigdesc}}
</div>{{/bigdesc}}
{{#divided}}<div class="sheet-template-row sheet-split">
<span>{{#left}}{{left}}{{/left}}</span>
<span>{{#right}}{{right}}{{/right}}</span>
</div>{{/divided}}
{{#desc2}}<div class="sheet-template-row">
<span class="sheet-template-desc">
{{desc2}}
</span>
</div>{{/desc2}}
{{#bigdesc2}}<div class="sheet-template-row">
{{bigdesc2}}
</div>{{/bigdesc2}}
{{#divided2}}<div class="sheet-template-row sheet-split">
<span>{{#left2}}{{left2}}{{/left2}}</span>
<span>{{#right2}}{{right2}}{{/right2}}</span>
</div>{{/divided2}}
{{#desc3}}<div class="sheet-template-row">
<span class="sheet-template-desc">
{{desc3}}
</span>
</div>{{/desc3}}
{{#bigdesc3}}<div class="sheet-template-row">
{{bigdesc3}}
</div>{{/bigdesc3}}
{{#divided3}}<div class="sheet-template-row sheet-split">
<span>{{#left3}}{{left3}}{{/left3}}</span>
<span>{{#right3}}{{right3}}{{/right3}}</span>
</div>{{/divided3}}
{{#desc4}}<div class="sheet-template-row">
<span class="sheet-template-desc">
{{desc4}}
</span>
</div>{{/desc4}}
{{#bigdesc4}}<div class="sheet-template-row">
{{bigdesc4}}
</div>{{/bigdesc4}}
{{#divided4}}<div class="sheet-template-row sheet-split">
<span>{{#left4}}{{left4}}{{/left4}}</span>
<span>{{#right4}}{{right4}}{{/right4}}</span>
</div>{{/divided4}}
{{#desc5}}<div class="sheet-template-row">
<span class="sheet-template-desc">
{{desc5}}
</span>
</div>{{/desc5}}
{{#bigdesc5}}<div class="sheet-template-row">
{{bigdesc5}}
</div>{{/bigdesc5}}
{{#divided5}}<div class="sheet-template-row sheet-split">
<span>{{#left5}}{{left5}}{{/left5}}</span>
<span>{{#right5}}{{right5}}{{/right5}}</span>
</div>{{/divided5}}
{{#desc6}}<div class="sheet-template-row">
<span class="sheet-template-desc">
{{desc6}}
</span>
</div>{{/desc6}}
{{#bigdesc6}}<div class="sheet-template-row">
{{bigdesc6}}
</div>{{/bigdesc6}}
{{#divided6}}<div class="sheet-template-row sheet-split">
<span>{{#left6}}{{left6}}{{/left6}}</span>
<span>{{#right6}}{{right6}}{{/right6}}</span>
</div>{{/divided6}}
</div>
</rolltemplate>
<!--Roll Template for sharing Quality Info-->
<rolltemplate class="rolltemplate-quality">
<div class="template-body">
<div class="template-header">
{{#header}}{{header}}{{/header}}
{{#base}}<br><span>{{base}}</span>{{/base}}
{{#rating}}<br><span>Rating: {{rating}}</span>{{/rating}}
</div>
<div class="template-row">
<span class="template-desc">
{{#desc}}{{desc}}{{/desc}}
</span>
</div>
</div>
</rolltemplate>
<!--Roll Template for sharing Quality Info-->
<rolltemplate class="sheet-rolltemplate-quality">
<div class="sheet-template-body">
<div class="sheet-template-header">
{{#header}}{{header}}{{/header}}
{{#base}}<br><span>{{base}}</span>{{/base}}
{{#rating}}<br><span>Rating: {{rating}}</span>{{/rating}}
</div>
<div class="sheet-template-row">
<span class="sheet-template-desc">
{{#desc}}{{desc}}{{/desc}}
</span>
</div>
</div>
</rolltemplate>
<!--Roll Template for sharing Contact Info-->
<rolltemplate class="rolltemplate-contact">
<div class="template-body">
<div class="template-header">
{{#header}}{{header}}{{/header}}
</div>
{{#name}}<div class="template-row">{{name}}</div>{{/name}}
<div class="template-row sheet-split">
<span>{{#loyalty}}Loyalty<br>{{loyalty}}{{/loyalty}}</span>
<span>{{#connection}}Connection<br>{{connection}}{{/connection}}</span>
</div>
{{#desc}}
<div class="template-row">
<span class="template-desc">
{{desc}}
</span>
</div>
{{/desc}}
<div class="template-row">
<span class="template-desc">
[Roll Loyalty](~{{header}}|Loyalty{{loyalty}})
</span>
<span class="template-desc">
[Roll Connections](~{{header}}|Connections{{connection}})
</span>
</div>
</div>
</rolltemplate>
<!--Roll Template for sharing Contact Info-->
<rolltemplate class="sheet-rolltemplate-contact">
<div class="sheet-template-body">
<div class="sheet-template-header">
{{#header}}{{header}}{{/header}}
</div>
{{#name}}<div class="sheet-template-row">{{name}}</div>{{/name}}
<div class="sheet-template-row sheet-split">
<span>{{#loyalty}}Loyalty<br>{{loyalty}}{{/loyalty}}</span>
<span>{{#connection}}Connection<br>{{connection}}{{/connection}}</span>
</div>
{{#desc}}
<div class="sheet-template-row">
<span class="sheet-template-desc">
{{desc}}
</span>
</div>
{{/desc}}
<div class="sheet-template-row">
<span class="sheet-template-desc">
[Roll Loyalty](~{{header}}|Loyalty{{loyalty}})
</span>
<span class="sheet-template-desc">
[Roll Connections](~{{header}}|Connections{{connection}})
</span>
</div>
</div>
</rolltemplate>
<!--Roll Template Original-->
<rolltemplate class="sheet-rolltemplate-rolls">
<div class="sheet-template-body">
<div class="sheet-template-header">
{{#header}}{{header}}{{/header}}{{#spec}}<span> ({{spec}})</span>{{/spec}}<br />
{{#arm}}<span>{{arm}}</span>{{/arm}}
{{#base}}<span>{{base}}</span><br>{{/base}}
{{#rollLess() wound 0}}<span>|</span><span data-i18n="wounds">Wounds</span> ({{wound}})<span>|</span>{{/rollLess() wound 0}}
{{#rollLess() mod 0}}<span>|</span><span data-i18n="modifier">Modifier</span> ({{mod}})<span>|</span>{{/rollLess() mod 0}}
{{#rollGreater() mod 0}}<span>|</span><span data-i18n="modifier">Modifier</span> ({{mod}})<span>|</span>{{/rollGreater() mod 0}}
{{#rollGreater() edge 0}}<span>|</span><span data-i18n="edge">Edge</span> ({{edge}})<span>|</span>{{/rollGreater() edge 0}}
{{#rollGreater() combat_paralysis 0}}<span>|</span><span data-i18n="combat_paralysis">Combat Paralysis</span><span>|</span>{{/rollGreater() combat_paralysis 0}}
{{#effecttype}}<br /><span>{{effecttype}}</span>{{/effecttype}}
</div>
{{#dice}}<div class="sheet-template-row">Hits: {{dice}}</div>{{/dice}}
{{#rollGreater() wilddie 0}}
<div class="sheet-template-row">Wild Die Rolled! {{wilddie}}<br>
{{#rollLess() wilddie 2}}
<div class="sheet-template-row"><span class="sheet-red">Remove all 5s!</span></div>
{{/rollLess() wilddie 2}}
{{#rollBetween() wilddie 2 4}}
<div class="sheet-template-row">No Change!</div>
{{/rollBetween() wilddie 2 4}}
{{#rollGreater() wilddie 4}}
<div class="sheet-template-row green"><span class="sheet-green">+3 Hits!</span></div>
{{/rollGreater() wilddie 4}}
</div>
{{/rollGreater() wilddie 0}}
{{#rating}}<div class="sheet-template-row">{{rating}}</div>{{/rating}}
{{#ampup}}{{#rollGreater() ampup 0}}
<div class="sheet-template-row">
<span class="sheet-template-desc">Amp Up: {{ampup}}</span>
</div>
{{/rollGreater() ampup 0}}{{/ampup}}
{{#drain}}{{#rollGreater() drain 0}}
<div class="sheet-template-row">
<span class="sheet-template-desc">Drain: {{drain}}</span>
</div>
{{/rollGreater() drain 0}}{{/drain}}
{{#increasearea}}{{#rollGreater() increasearea 0}}
<div class="sheet-template-row">
<span class="sheet-template-desc">Increase Area: {{increasearea}}m</span>
</div>
{{/rollGreater() increasearea 0}}{{/increasearea}}
{{#fade}}{{#rollGreater() fade 0}}
<div class="sheet-template-row">
<span class="sheet-template-desc">Fade: {{fade}}</span>
</div>
{{/rollGreater() fade 0}}{{/fade}}
{{#desc}}
<div class="sheet-template-row">
<span class="sheet-template-desc">
{{desc}}
</span>
</div>
{{/desc}}
{{#opp}}<div class="sheet-template-row">{{opp}}</div>{{/opp}}
</div>
</rolltemplate>
<!--Roll Template New Computed Stuff-->
<rolltemplate class="sheet-rolltemplate-rolls-computed">
<div class="sheet-template-body">
<div class="sheet-template-header nott">
{{#header}}{{header}}{{/header}}{{#spec}}<span> ({{spec}})</span>{{/spec}}<br />
{{#arm}}<span>{{arm}}</span>{{/arm}}
{{#reason}}<span>{{reason}}</span><br>{{/reason}}
{{#base}}<span>{{base}}</span><br>{{/base}}
{{#effecttype}}<span>{{effecttype}}</span><br>{{/effecttype}}
{{#computed::dicepool}}<span class="dicepool">Dicepool: {{computed::dicepool}}</span><br>{{/computed::dicepool}}
{{#rollLess() wound 0}}<span>|</span><span data-i18n="wounds">Wounds</span> ({{wound}})<span>|</span>{{/rollLess() wound 0}}
{{#rollLess() mod 0}}<span>|</span><span data-i18n="modifier">Modifier</span> ({{mod}})<span>|</span>{{/rollLess() mod 0}}
{{#rollGreater() mod 0}}<span>|</span><span data-i18n="modifier">Modifier</span> ({{mod}})<span>|</span>{{/rollGreater() mod 0}}
{{#rollGreater() edge 0}}<span>|</span><span data-i18n="edge">Edge</span> ({{edge}})<span>|</span>{{/rollGreater() edge 0}}
{{#rollGreater() overclock 0}}<span>|</span><span data-i18n="overclock">Overclock</span> (2)<span>|</span>{{/rollGreater() overclock 0}}
{{#rollGreater() matrix_noise 0}}<span>|</span><span data-i18n="noise">Noise</span> ({{matrix_noise}})<span>|</span>{{/rollGreater() matrix_noise 0}}
{{#rollGreater() combat_paralysis 0}}<span>|</span><span data-i18n="combat_paralysis">Combat Paralysis</span><span>|</span>{{/rollGreater() combat_paralysis 0}}
</div>
{{#rollGreater() computed::glitch 0}}
{{#rollLess() computed::glitch 2}}<div class="sheet-template-row red glitch"><span class="sheet-red">GLITCH!</span></div>{{/rollLess() computed::glitch 2}}
{{#rollGreater() computed::glitch 1}}<div class="sheet-template-row red glitch critglitch"><span class="sheet-red">CRITICAL GLITCH!</span></div>{{/rollGreater() computed::glitch 1}}
{{/rollGreater() computed::glitch 0}}
{{^split_pool}}
{{#dice}}
<div class="sheet-template-row">
<span style="width: 70%">Hits: <!-- {{dice}} => -->{{computed::dice}}</span>
</div>
{{/dice}}
{{/split_pool}}
{{#split_pool}}
<div class="sheet-template-row sheet-split">
<span class="glitchspan">
{{#rollGreater() computed::glitch1 0}}
{{#rollLess() computed::glitch1 2}}<div class="sheet-template-row red glitch"><span class="sheet-red">GLITCH!</span></div>{{/rollLess() computed::glitch1 2}}
{{#rollGreater() computed::glitch1 1}}<div class="sheet-template-row red glitch critglitch"><span class="sheet-red">CRITICAL GLITCH!</span></div>{{/rollGreater() computed::glitch1 1}}
{{/rollGreater() computed::glitch1 0}}
</span>
<span class="glitchspan">
{{#rollGreater() computed::glitch2 0}}
{{#rollLess() computed::glitch2 2}}<div class="sheet-template-row red glitch"><span class="sheet-red">GLITCH!</span></div>{{/rollLess() computed::glitch2 2}}
{{#rollGreater() computed::glitch2 1}}<div class="sheet-template-row red glitch critglitch"><span class="sheet-red">CRITICAL GLITCH!</span></div>{{/rollGreater() computed::glitch2 1}}
{{/rollGreater() computed::glitch2 0}}
</span>
<span style="width: 95%">
<span class="split_pool_dicepool nott">Dicepool {{computed::split_pool_dicepool_1}}</span><br>
<span class="split_pool_results">Atk 1: {{computed::roll1}}</span>
{{#rollGreater() wilddie1 0}}
<div class="sheet-template-row wilddice nott">{{wilddie1}} Wild Dice!<br>[{{computed::wilddie1_dice}}]</div>
{{/rollGreater() wilddie1 0}}
</span>
<span style="width: 95%">
<span class="split_pool_dicepool nott">Dicepool {{computed::split_pool_dicepool_2}}</span><br>
<span class="split_pool_results">Atk 1: {{computed::roll2}}</span>
{{#rollGreater() wilddie2 0}}
<div class="sheet-template-row wilddice nott">{{wilddie2}} Wild Dice!<br>[{{computed::wilddie2_dice}}]</div>
{{/rollGreater() wilddie2 0}}
</span>
</div>
{{/split_pool}}
{{#rollGreater() rerolls 0}}
<div class="sheet-template-row">
<span class="left" style="width: 30%; font-size:smaller;" class="sheet-template-desc">
<span title="Reroll Misses">{{#rollGreater() computed::misses 0}}[+](~{{header}}|reroll{{computed::misses}}){{/rollGreater() computed::misses 0}}</span>
<span title="Bump 4's to 5's">{{#rollGreater() computed::fours 0}}[+4s](~{{header}}|bump_fours{{computed::fours}}){{/rollGreater() computed::fours 0}}</span>
</span>
<span style="width: 40%; font-size: smaller;">Rerolls</span>
<span class="right" style="width: 30%; font-size: smaller;">&nbsp;{{#rollGreater() computed::hits 0}}<span title="Reroll Hits">[-](~{{header}}|reroll{{computed::hits}})</span>{{/rollGreater() computed::hits 0}}{{#rollLess() computed::hits 1}}<span title="Reroll Hits" style="cursor: not-allowed; pointer-events: none;">&nbsp;</span>{{/rollLess() computed::hits 1}}</span>
</div>
{{/rollGreater() rerolls 0}}
{{#extendedtest}}
<div class="sheet-template-row intervals-hitstotal">
<span style="padding-right: 5% !important" class="dicepool nott">Intervals: {{computed::intervals}}</span>
<span style="padding-left: 5% !important" class="nott">Total Hits: {{computed::hitstotal}}</span>
</div>
{{/extendedtest}}
{{#sprint}}<div class="sheet-template-row">Sprint: {{dice}} meters</div>{{/sprint}}
{{#initiative}}<div class="sheet-template-row">Initiative: <!-- {{initiative}} => --> {{computed::initiative}}</div>{{/initiative}}
{{#rollGreater() wilddie 0}}
<div class="sheet-template-row wilddice nott">{{wilddie}} Wild Dice!<br>[{{computed::wilddie_dice}}]</div>
{{/rollGreater() wilddie 0}}
{{#rating}}<div class="sheet-template-row">{{rating}}</div>{{/rating}}
{{#ampup}}{{#rollGreater() ampup 0}}
<div class="sheet-template-row">
<span class="sheet-template-desc nott">Amp Up: {{ampup}}</span>
</div>
{{/rollGreater() ampup 0}}{{/ampup}}
{{#drain}}{{#rollGreater() drain 0}}
<div class="sheet-template-row">
<span class="sheet-template-desc nott">Drain: {{drain}}</span>
</div>
{{/rollGreater() drain 0}}{{/drain}}
{{#increasearea}}{{#rollGreater() increasearea 0}}
<div class="sheet-template-row">
<span class="sheet-template-desc nott">Increase Area: {{increasearea}}m</span>
</div>
{{/rollGreater() increasearea 0}}{{/increasearea}}
{{#damagetype}}
<div class="sheet-template-row">
<span class="sheet-template-desc">Damage Type: {{damagetype}}</span>
</div>
{{/damagetype}}
{{#fade}}{{#rollGreater() fade 0}}
<div class="sheet-template-row">
<span class="sheet-template-desc nott">Fade: {{fade}}</span>
</div>
{{/rollGreater() fade 0}}{{/fade}}
{{#desc}}
<div class="sheet-template-row">
<span class="sheet-template-desc">{{desc}}</span>
</div>
{{/desc}}
{{#extendedtest}}
<div class="sheet-template-row">
{{#rollGreater() computed::dicepool 1}}
<span class="sheet-template-desc nott">[Next Roll](~{{header}}|extended_next||{{computed::passthrough}},{{reason}}) {{newdicepool}} dice</span>
{{/rollGreater() computed::dicepool 1}}
{{#rollLess() computed::dicepool 2}}
<span class="sheet-template-desc">**Dicepool Exhausted**</span>
{{/rollLess() computed::dicepool 2}}
</div>
{{/extendedtest}}
{{#opp}}<div class="sheet-template-row">{{opp}}</div>{{/opp}}
</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" value="3" />
<input type="hidden" name="attr_armor" value="3" />
<input type="hidden" name="attr_chem_protection" value="3" />
<input type="hidden" name="attr_cold_protection" value="3" />
<input type="hidden" name="attr_elec_protection" value="3" />
<input type="hidden" name="attr_fire_protection" value="3" />
<input type="hidden" name="attr_radiation_protection" 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_spec" />
<input type="hidden" name="attr_primary_range_weapon_expert" />
<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_reach" />
<input type="hidden" name="attr_aug_essence_cost" value="0" />
<input type="hidden" name="attr_initiative_mod" value="0" />
<input type="hidden" name="attr_initiative_dice" value="1" />
<input type="hidden" name="attr_astral_mod" value="6" />
<input type="hidden" name="attr_astral_dice" value="2" />
<input type="hidden" name="attr_matrix_mod" value="0" />
<input type="hidden" name="attr_matrix_dice" />
<input type="hidden" name="attr_matrix_initiative_dice_mod" value="0" />
<input type="hidden" name="attr_cold_sim_mod" value="0" />
<input type="hidden" name="attr_cold_sim_dice" />
<input type="hidden" name="attr_cold_sim_initiative_dice_mod" value="0" />
<input type="hidden" name="attr_hot_sim_mod" value="0" />
<input type="hidden" name="attr_hot_sim_dice" />
<input type="hidden" name="attr_hot_sim_initiative_dice_mod" value="0" />
<input type="hidden" name="attr_walk" value="12" />
<input type="hidden" name="attr_run" value="24" />
<input type="hidden" name="attr_physical" value="10" />
<input type="hidden" name="attr_stun" value="10" />
<input type="hidden" name="attr_physical_max" value="10" />
<input type="hidden" name="attr_stun_max" value="10" />
<input type="hidden" name="attr_matrix" value="10" />
<input type="hidden" name="attr_matrix_max" value="10" />
<input type="hidden" name="attr_defense" value="6" />
<input type="hidden" name="attr_acting" value="0" />
<input type="hidden" name="attr_aeronauticsmechanic" value="0" />
<input type="hidden" name="attr_alchemy" value="0" />
<input type="hidden" name="attr_animalhandling" value="0" />
<input type="hidden" name="attr_arcana" value="0" />
<input type="hidden" name="attr_archery" value="0" />
<input type="hidden" name="attr_armorer" value="0" />
<input type="hidden" name="attr_artificing" value="0" />
<input type="hidden" name="attr_artisan" value="0" />
<input type="hidden" name="attr_assensing" value="0" />
<input type="hidden" name="attr_astralcombat" value="0" />
<input type="hidden" name="attr_athletics" value="0" />
<input type="hidden" name="attr_automatics" value="0" />
<input type="hidden" name="attr_automotivemechanic" value="0" />
<input type="hidden" name="attr_banishing" value="0" />
<input type="hidden" name="attr_binding" value="0" />
<input type="hidden" name="attr_biotech" value="0" />
<input type="hidden" name="attr_biotechnology" value="0" />
<input type="hidden" name="attr_blades" value="0" />
<input type="hidden" name="attr_chemistry" value="0" />
<input type="hidden" name="attr_closecombat" value="0" />
<input type="hidden" name="attr_clubs" value="0" />
<input type="hidden" name="attr_compiling" value="0" />
<input type="hidden" name="attr_computer" value="0" />
<input type="hidden" name="attr_con" value="0" />
<input type="hidden" name="attr_conjuring" value="0" />
<input type="hidden" name="attr_counterspelling" value="0" />
<input type="hidden" name="attr_cracking" value="0" />
<input type="hidden" name="attr_cybercombat" value="0" />
<input type="hidden" name="attr_cybertechnology" value="0" />
<input type="hidden" name="attr_decompiling" value="0" />
<input type="hidden" name="attr_demolitions" value="0" />
<input type="hidden" name="attr_disenchanting" value="0" />
<input type="hidden" name="attr_disguise" value="0" />
<input type="hidden" name="attr_diving" value="0" />
<input type="hidden" name="attr_electronics" value="0" />
<input type="hidden" name="attr_electronicwarfare" value="0" />
<input type="hidden" name="attr_enchanting" value="0" />
<input type="hidden" name="attr_engineering" value="0" />
<input type="hidden" name="attr_escapeartist" value="0" />
<input type="hidden" name="attr_etiquette" value="0" />
<input type="hidden" name="attr_exoticmelee" value="0" />
<input type="hidden" name="attr_exoticrange" value="0" />
<input type="hidden" name="attr_exoticweapons" value="0" />
<input type="hidden" name="attr_firearms" value="0" />
<input type="hidden" name="attr_firstaid" value="0" />
<input type="hidden" name="attr_flight" value="0" />
<input type="hidden" name="attr_forgery" value="0" />
<input type="hidden" name="attr_freefall" value="0" />
<input type="hidden" name="attr_gunnery" value="0" />
<input type="hidden" name="attr_gymnastics" value="0" />
<input type="hidden" name="attr_hacking" value="0" />
<input type="hidden" name="attr_hardware" value="0" />
<input type="hidden" name="attr_heavyweapons" value="0" />
<input type="hidden" name="attr_impersonation" value="0" />
<input type="hidden" name="attr_industrialmechanic" value="0" />
<input type="hidden" name="attr_influence" value="0" />
<input type="hidden" name="attr_instruction" value="0" />
<input type="hidden" name="attr_intimidation" value="0" />
<input type="hidden" name="attr_leadership" value="0" />
<input type="hidden" name="attr_locksmith" value="0" />
<input type="hidden" name="attr_longarms" value="0" />
<input type="hidden" name="attr_medicine" value="0" />
<input type="hidden" name="attr_nauticalmechanic" value="0" />
<input type="hidden" name="attr_navigation" value="0" />
<input type="hidden" name="attr_negotiation" value="0" />
<input type="hidden" name="attr_outdoors" value="0" />
<input type="hidden" name="attr_palming" value="0" />
<input type="hidden" name="attr_perception" value="0" />
<input type="hidden" name="attr_performance" value="0" />
<input type="hidden" name="attr_pilot" value="0" />
<input type="hidden" name="attr_pistols" value="0" />
<input type="hidden" name="attr_registering" value="0" />
<input type="hidden" name="attr_ritualspellcasting" value="0" />
<input type="hidden" name="attr_running" value="0" />
<input type="hidden" name="attr_sneaking" value="0" />
<input type="hidden" name="attr_software" value="0" />
<input type="hidden" name="attr_sorcery" value="0" />
<input type="hidden" name="attr_spellcasting" value="0" />
<input type="hidden" name="attr_stealth" value="0" />
<input type="hidden" name="attr_summoning" value="0" />
<input type="hidden" name="attr_survival" value="0" />
<input type="hidden" name="attr_swimming" value="0" />
<input type="hidden" name="attr_tasking" value="0" />
<input type="hidden" name="attr_throwingweapons" value="0" />
<input type="hidden" name="attr_tracking" value="0" />
<input type="hidden" name="attr_unarmedcombat" value="0" />
<input type="hidden" name="attr_combat_paralysis" value="0" />
<input type="hidden" name="attr_combat_paralysis_initiative_mod" value="" />
<input type="hidden" name="attr_bad_luck" value="0" />
<input type="hidden" name="attr_matrix_overclock" value="0" />
<input type="hidden" name="attr_rerolls" value="0" />
<input type="hidden" name="attr_phys_wound_threshold" value="3" />
<input type="hidden" name="attr_stun_wound_threshold" value="3" />
<input type="hidden" name="attr_resist_pain" value="0" />
<input type="hidden" name="attr_damage_compensator" value="0" />
<input type="hidden" name="attr_rerolls" value="1" />
<input type="hidden" name="attr_tradition_attribute" value="" />
<input type="hidden" name="attr_wild_die1" value="0" />
<input type="hidden" name="attr_wild_die2" value="0" />
<input type="hidden" name="attr_sheet_version" value="0.65">
<input type="hidden" name="attr_data_version" value="0">
<script type="text/worker">
// Sheet workers
// Data conversion for changes between sheet versions
on("sheet:opened", function() {
getAttrs(['sheet_type', 'sheet_version', 'data_version'], (v) => {
console.log(`%c Shadowrun 6th World v${v['sheet_version']}`, "color: blue; font-weight:bold");
console.log(`%c Sheet Type: ${v['sheet_type']}`, "color: red; font-weight:bold");
console.log(`%c Data Version: v${v['data_version']}`, "color: black; font-weight:bold");
if(v.sheet_version != v.data_version) {
console.log("Sheet ("+v.sheet_version+") and Data ("+v.data_version+") version mismatch, updating...");
switch(true) {
case (v.data_version == 0):
// fixed broken soak values
update_common_rolls(["body", "soak_modifier", "soak_temp", `soak_temp_flag`]);
['body', 'agility', 'reaction', 'strength', 'willpower', 'logic', 'intuition', 'charisma', 'magic', 'resonance'].forEach(attr => {
update_attributes(attr);
});
update_essence();
techno_update();
update_initiative();
update_astral_initiative();
update_matrix_initiative();
sprite_update();
case (v.data_version < 0.37):
_pre_v37_update();
console.log("Data now fits v.37");
case (v.data_version < 0.38):
_v38_update();
console.log("Data now fits v.38");
case (v.data_version < 0.39):
_v39_update();
console.log("Data now fits v.39");
case (v.data_version < 0.41):
_v41_update();
console.log("Data now fits v.42");
case (v.data_version < 0.54):
_v53_update();
console.log("Data now fits v.54");
case (v.data_version < 0.56):
_v56_update();
console.log("Data now fits v.56");
case (v.data_version < 0.57):
_v57_update();
console.log("Data now fits v.57");
show_changelog();
case (v.data_version < 0.58):
_v58_update();
console.log("Data now fits v.58");
case (v.data_version < 0.59):
_v58_update();
_v59_update();
console.log("Data now fits v.59");
case (v.data_version < 0.60):
_v60_update();
console.log("Data now fits v.60");
case (v.data_version < 0.65):
_v65_update();
console.log("Data now fits v.65");
default:
setAttrs({
'data_version': v.sheet_version
});
break;
}
console.log("Done.");
}
});
});
var show_changelog = () => {
// Force the PC sheets to the changelog section to see the latest updates
setAttrs({
'tab': 'notes',
'notes_toggle': 'changelog'
});
};
var _v65_update = () => {
// Define new field repeating_skills_display_name
getSectionIDs('repeating_skills', (rows) => {
rows.forEach((row) => {
var skillRow = 'repeating_skills_' + row + '_name';
getAttrs([skillRow], (v) => {
var skill_name_simplified = v[skillRow].toLowerCase().replace(/\s/g, '');
var skill_name_translated = getTranslationByKey(skill_name_simplified);
setAttrs({
[`repeating_skills_${row}_display_name`]: skill_name_translated
});
});
});
});
};
var _v60_update = () => {
// Update attr_cracking to reflect the correct value
getSectionIDs('repeating_skills', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_skills_${row}_name`, `repeating_skills_${row}_rating`], (v) => {
if(v[`repeating_skills_${row}_name`] == 'Cracking') {
skillName = v[`repeating_skills_${row}_name`];
setAttrs({
[`${skillName}`]: v[`repeating_skills_${row}_rating`]
});
}
});
});
});
};
var _v59_update = () => {
getAttrs(['character_name'], (v) => {
console.log(v);
set_display_name(v.character_name);
});
};
var _v58_update = () => {
setAttrs({
wild_die1: "?{Wild Dice for First Roll?|0}",
wild_die2: "?{Wild Dice for Second Roll?|0}"
});
};
var _v57_update = () => {
// Update the tradition_attribute if they're awakened and it hasn't been set. Also update Magic AR as well.
getAttrs(['flag_special', 'tradition_attribute', 'tradition', 'magic', 'magic_ar', 'logic', 'intuition', 'charisma'], (v) => {
if(v.flag_special == 'magic' && ! v.tradition_attribute) {
var magic_ar = v.magic || 0;
// make a default tradition attribute (Shaman of course!)
tradition_attribute = 'Charisma';
switch(v.tradition) {
case "Hermeticism":
case "Hermeticism (Logic)":
case "Shamanism (Logic)":
magic_ar += v.logic;
tradition_attribute = 'Logic';
break;
case "Hermeticism (Intuition)":
case "Shamanism (Intuition)":
magic_ar += v.intuition;
tradition_attribute = 'Intuition';
break;
case "Hermeticism (Charisma)":
case "Shamanism (Charisma)":
case "Shamanism":
magic_ar += v.charisma;
tradition_attribute = 'Charisma';
break;
default:
magic_ar = 0;
break;
}
setAttrs({
'magic_ar': magic_ar,
'tradition_attribute': tradition_attribute
});
}
});
};
var _v56_update = () => {
// Update repeating_augmentations_augmentation to be repeating_augmentations_name
getSectionIDs('repeating_augmentations', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_augmentations_${row}_augmentation`, `repeating_augmentations_${row}_augmentation`], (v) => {
if(! v[`repeating_augmentations_${row}_name`] && v[`repeating_augmentations_${row}_augmentation`]) {
setAttrs({
[`repeating_augmentations_${row}_name`]: v[`repeating_augmentations_${row}_augmentation`],
[`repeating_augmentations_${row}_augmentation`]: ''
});
}
});
});
});
// Update repeating_devices_device to be repeating_devices_name
getSectionIDs('repeating_devices', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_devices_${row}_device`, `repeating_devices_${row}_name`], (v) => {
if(! v[`repeating_devices_${row}_name`] && v[`repeating_devices_${row}_device`]) {
setAttrs({
[`repeating_devices_${row}_name`]: v[`repeating_devices_${row}_device`],
[`repeating_devices_${row}_device`]: ''
});
}
});
});
});
// Update repeating_programs_program to be repeating_programs_name
getSectionIDs('repeating_programs', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_programs_${row}_program`, `repeating_programs_${row}_name`], (v) => {
if(! v[`repeating_programs_${row}_name`] && v[`repeating_programs_${row}_program`]) {
setAttrs({
[`repeating_programs_${row}_name`]: v[`repeating_programs_${row}_program`],
[`repeating_programs_${row}_program`]: ''
});
}
});
});
});
// Update repeating_echoes_echo to be repeating_echoes_name
getSectionIDs('repeating_echoes', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_echoes_${row}_echo`, `repeating_echoes_${row}_name`], (v) => {
if(! v[`repeating_echoes_${row}_name`] && v[`repeating_echoes_${row}_echo`]) {
setAttrs({
[`repeating_echoes_${row}_name`]: v[`repeating_echoes_${row}_echo`],
[`repeating_echoes_${row}_echo`]: ''
});
}
});
});
});
// Update repeating_IC_IC_* to be repeating_IC_*
getSectionIDs('repeating_IC', (rows) => {
rows.forEach((row) => {
['name', 'dice', 'ar', 'cm', 'init', 'initdice', 'attribute', 'matrix'].forEach((attr) => {
getAttrs([`repeating_IC_${row}_IC_${attr}`, `repeating_IC_${row}_${attr}`], (v) => {
if(! v[`repeating_IC_${row}_${attr}`] && v[`repeating_IC_${row}_IC_${attr}`]) {
setAttrs({
[`repeating_IC_${row}_${attr}`]: v[`repeating_IC_${row}_IC_${attr}`],
[`repeating_IC_${row}_IC_${attr}`]: ''
});
}
});
});
});
});
// Update repeating_quality_quality to be repeating_quality_name
getSectionIDs('repeating_quality', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_quality_${row}_quality`, `repeating_quality_${row}_name`], (v) => {
if(! v[`repeating_quality_${row}_name`] && v[`repeating_quality_${row}_quality`]) {
setAttrs({
[`repeating_quality_${row}_name`]: v[`repeating_quality_${row}_quality`],
[`repeating_quality_${row}_quality`]: ''
});
}
});
});
});
// Update repeating_items_item to be repeating_items_name
getSectionIDs('repeating_items', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_items_${row}_item`, `repeating_items_${row}_name`], (v) => {
if(! v[`repeating_items_${row}_name`] && v[`repeating_items_${row}_item`]) {
setAttrs({
[`repeating_items_${row}_name`]: v[`repeating_items_${row}_item`],
[`repeating_items_${row}_item`]: ''
});
}
});
});
});
// Update repeating_melee_weapon to be repeating_melee_name
getSectionIDs('repeating_melee', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_melee_${row}_weapon`, `repeating_melee_${row}_name`], (v) => {
if(! v[`repeating_melee_${row}_name`] && v[`repeating_melee_${row}_weapon`]) {
setAttrs({
[`repeating_melee_${row}_name`]: v[`repeating_melee_${row}_weapon`],
[`repeating_melee_${row}_weapon`]: ''
});
}
});
});
});
// Update repeating_range_weapon to be repeating_range_name
getSectionIDs('repeating_range', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_range_${row}_weapon`, `repeating_range_${row}_name`], (v) => {
if(! v[`repeating_range_${row}_name`] && v[`repeating_range_${row}_weapon`]) {
setAttrs({
[`repeating_range_${row}_name`]: v[`repeating_range_${row}_weapon`],
[`repeating_range_${row}_weapon`]: ''
});
}
});
});
});
// Update repeating_grenade_weapon to be repeating_grenade_name
getSectionIDs('repeating_grenade', (rows) => {
rows.forEach((row) => {
getAttrs([`repeating_grenade_${row}_weapon`, `repeating_grenade_${row}_name`], (v) => {
if(! v[`repeating_grenade_${row}_name`] && v[`repeating_grenade_${row}_weapon`]) {
setAttrs({
[`repeating_grenade_${row}_name`]: v[`repeating_grenade_${row}_weapon`],
[`repeating_grenade_${row}_weapon`]: ''
});
}
});
});
});
};
var _v53_update = () => {
// Update repeating_IC_IC_note to be repeating_IC_notes
getSectionIDs('repeating_IC', (ICRows) => {
ICRows.forEach((row) => {
getAttrs([`repeating_IC_${row}_IC_note`], (v) => {
setAttrs({
[`repeating_IC_${row}_notes`]: v[`repeating_IC_${row}_IC_note`],
[`repeating_IC_${row}_IC_note`]: ''
});
});
});
});
};
var _v41_update = () => {
// Update repeating_skills_${x}_attribute and _display_attribute
getSectionIDs('repeating_skills', (skillRows) => {
skillRows.forEach((row) => {
getAttrs([`repeating_skills_${row}_name`], (v) => {
update_skill_attribute(`repeating_skills_${row}`, v[`repeating_skills_${row}_name`]);
});
});
});
};
var _v39_update = () => {
// this section updates the AR values that were set for attr_close - attr_extreme to be the value for the previously undefined attr_close_base - attr_extreme_base
['range', 'melee'].forEach((type) => {
getSectionIDs(`repeating_${type}`, (sections) => {
sections.forEach((section) => {
[`repeating_${type}_${section}_close`, `repeating_${type}_${section}_near`, `repeating_${type}_${section}_medium`, `repeating_${type}_${section}_far`, `repeating_${type}_${section}_extreme`, `repeating_${type}_${section}_dicepool`, `repeating_${type}_${section}_damage`, 'sheet_type'].forEach((attr) => {
getAttrs([`${attr}`], (v) => {
setAttrs({
[`${attr}_base`]: v[`${attr}`]
});
});
});
});
});
});
};
var _v38_update = () => {
getAttrs(['sheet_type'], (v) => {
if(v.sheet_type === 'grunt') {
// Grunt skills somehow ended up thinking they were all based on agility at least for the display part and for many apparently the actual selected attribute.
// this code just sets them to their default associated attribute which should annoy the fewest users.
getSectionIDs('repeating_skills', (skill) => {
skill.forEach((skillID) => {
getAttrs([`repeating_skills_${skillID}_attribute`, `repeating_skills_${skillID}_display_attribute`, `repeating_skills_${skillID}_name`], (attrs) => {
var attribute;
switch(attrs[`repeating_skills_${skillID}_name`]) {
case 'Athletics':
case 'Close Combat':
case 'Exotic Weapons':
case 'Firearms':
case 'Stealth':
attribute = 'Agility';
break;
case 'Con':
case 'Influence':
attribute = 'Charisma';
break;
case 'Astral':
case 'Outdoors':
case 'Perception':
attribute = 'Intuition';
break;
case 'Biotech':
case 'Cracking':
case 'Electronics':
case 'Engineering':
attribute = 'Logic';
break;
case 'Conjuring':
case 'Enchanting':
case 'Sorcery':
attribute = 'Magic';
break;
case 'Piloting':
attribute = 'Reaction';
break;
case 'Tasking':
attribute = 'Resonance';
break;
default:
attribute = 'Agility';
break;
}
setAttrs({
[`repeating_skills_${skillID}_attribute`]: '@{'+attribute.toLowerCase()+'}',
[`repeating_skills_${skillID}_display_attribute`]: attribute
});
});
});
});
}
});
}
var _pre_v37_update = () => {
// Update trigger sheetworkers for weapons to set attribute and attr_rating values
['melee', 'range'].forEach((type) => {
getSectionIDs(`${type}`, function(ids) {
for(var i = 0; i < ids.length; i++) {
let skill = `repeating_${type}_` + ids[i] + "_skill";
let attr = `repeating_${type}_` + ids[i] + "_attribute";
let rating = `repeating_${type}_` + ids[i] + "_attr_rating";
let prim = `repeating_${type}_` + ids[i] + "_primary";
let updme = `repeating_${type}_` + ids[i] + "_updateme";
getAttrs([skill, prim, 'agility', 'logic', `primary_${type}_weapon_dicepool_modifier`], (v) => {
var attribute = 'Agility';
var attr_rating = v.agility;
switch(v[`${skill}`]) {
case 'engineering':
attribute = 'Logic';
attr_rating = v.logic;
break;
case 'athletics':
case 'close combat':
case 'exotic weapons':
case 'firearms':
default:
attribute = 'Agility';
attr_rating = v.agility;
break;
}
setAttrs({
[attr]: attribute,
[rating]: attr_rating
});
if(v[`${prim}`] === "primary") {
var dpm = v[`primary_${type}_weapon_dicepool_modifier`] || 0;
setAttrs({
[`primary_${type}_weapon_attribute`]: attribute,
[`primary_${type}_weapon_attr_rating`]: attr_rating,
[`primary_${type}_weapon_dicepool_modifier`]: dpm,
[`${updme}`]: ".37"
});
}
});
}
});
});
}
/******************************************************************/
/* Notes Imports */
/* Allows changes to "notes" fields to act as a pseudo-importer */
/******************************************************************/
const repeating_sections = ['spell', 'npcspell', 'augmentations',
'quality', 'IC', 'range', 'melee',
'grenade', 'contacts', 'vehicle',
'devices', 'programs', 'preparations',
'ritual', 'spirits', 'powers',
'metamagic', 'forms', 'echoes', 'sprites',
'items', 'armor', 'skills', 'knowledges', 'effects'];
repeating_sections.forEach((section) => {
on(`change:repeating_${section}:notes`, (eventInfo) => {
console.log("notes changed, looking for an import");
console.log(eventInfo);
if(eventInfo.sourceType != 'player') {
return;
}
var rep_row = eventInfo.sourceAttribute.match(/(repeating_[^_]+?)_([^_]+?)_(.+)/);
var note = eventInfo.newValue;
var dat = {};
if(typeof(note) !== 'undefined' && note.search("JSON=") == 0) {
note = note.slice(5);
dat = JSON.parse(note);
toSave = {};
Object.keys(dat).forEach(k => {
toSave[`${rep_row[1]}_${rep_row[2]}_${k}`] = dat[k];
});
setAttrs(toSave);
}
});
});
/*************************************************************
* Post Roll Processing *
*************************************************************/
// Roll Button Definitions
const rollButtons = {
d6: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=?{Roll Reason?|d6}}}{{dice=[[(?{d6s|0}d6>5cs>5cf<[[(1+@{bad_luck})]]?{Exploding 6s?|N, |Y,!})]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=@{rerolls}}}{{header=@{character_name}}}",
bump_fours: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{bump4s}}}{{desc=Bumping ?{How many?|-#-} fours to fives.\n+?{How many?} hits,\n-[[?{How many?} * 2]] Edge}}",
reroll: "@{gm_toggle} &{template:rolls-computed}{{dice=[[(?{Reroll how many?|-#-}d6>5cs>5cf<[[(1+@{bad_luck})]])]]}}{{dicepool=[[0]]}}{{header=@{character_name}}}{{base=^{rerolling} ?{Reroll how many?|-#-} ^{dice}}}",
body: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{dice=[[(@{body}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Body,@{body} [Body]|Agility,@{agility} [Agility]|Reaction,@{reaction} [Reaction],Strength,@{strength} [Strength]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Edge,@{edge} [Edge]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{body} + ?{Attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
agility: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{dice=[[(@{agility}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Body,@{body} [Body]|Agility,@{agility} [Agility]|Reaction,@{reaction} [Reaction],Strength,@{strength} [Strength]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Edge,@{edge} [Edge]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{agility} + ?{Attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
reaction: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{dice=[[(@{reaction}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Body,@{body} [Body]|Agility,@{agility} [Agility]|Reaction,@{reaction} [Reaction],Strength,@{strength} [Strength]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Edge,@{edge} [Edge]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{reaction} + ?{Attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
strength: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{dice=[[(@{strength}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Body,@{body} [Body]|Agility,@{agility} [Agility]|Reaction,@{reaction} [Reaction],Strength,@{strength} [Strength]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Edge,@{edge} [Edge]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{strength} + ?{Attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
willpower: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{dice=[[(@{willpower}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Body,@{body} [Body]|Agility,@{agility} [Agility]|Reaction,@{reaction} [Reaction],Strength,@{strength} [Strength]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Edge,@{edge} [Edge]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{willpower} + ?{Attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
logic: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{dice=[[(@{logic}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Body,@{body} [Body]|Agility,@{agility} [Agility]|Reaction,@{reaction} [Reaction],Strength,@{strength} [Strength]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Edge,@{edge} [Edge]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{logic} + ?{Attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
intuition: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{dice=[[(@{intuition}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Body,@{body} [Body]|Agility,@{agility} [Agility]|Reaction,@{reaction} [Reaction],Strength,@{strength} [Strength]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Edge,@{edge} [Edge]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{intuition} + ?{Attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
charisma: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{dice=[[(@{charisma}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Body,@{body} [Body]|Agility,@{agility} [Agility]|Reaction,@{reaction} [Reaction],Strength,@{strength} [Strength]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Edge,@{edge} [Edge]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{charisma} + ?{Attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
edge: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{dice=[[(@{edge}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Body,@{body} [Body]|Agility,@{agility} [Agility]|Reaction,@{reaction} [Reaction],Strength,@{strength} [Strength]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Edge,@{edge} [Edge]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{edge} + ?{Attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
composure: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{composure}}}{{dice=[[(@{composure}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
judge_intentions: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{judgeintentions}}}{{dice=[[(@{judge_intentions}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
memory: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{memory}}}{{dice=[[(@{memory}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
social_rating: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{social_rating}}}{{rating=@{social_rating}}}",
lift_carry: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{liftcarry}}}{{dice=[[(@{lift_carry}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
sprint: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{sprint_speed}+(Athletics + Agility hits * @{sprint_modifier}) meters}}{{dice=[[@{sprint_speed}+((@{athletics}+@{agility}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]] * @{sprint_modifier})]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{sprint=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
default: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{default} = @{default_display} - 1}}{{dice=[[((@{default_attribute}+@{unskilled_mod}+-1)+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
skill: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} + @{display_attribute}}}{{dice=[[((@{rating}+@{attribute}+@{mod})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=@{notes}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spec: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} + @{display_attribute} +2}}{{dice=[[((@{rating}+@{attribute}+@{mod}+2)+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Spec: @{spec}\n@{notes}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
specialization: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} + @{display_attribute} + ^{specialization}}}{{dice=[[(@{dicepool}+@{attribute}+2+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Spec: @{specialization}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
expert: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} + @{display_attribute} +3}}{{dice=[[((@{rating}+@{attribute}+@{mod}+3)+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Expert: @{expert}\n@{notes}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
expertise: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} + @{display_attribute} + ^{expertise}}}{{dice=[[(@{dicepool}+@{attribute}+3+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Expert: @{expertise}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
dr: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{defenserating}}}{{rating=@{armor_rating}}}",
defense: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defense} = ^{reaction} + ^{intuition}}}{{dice=[[((@{defense})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
toxin_resist: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{toxin_resistance} = ^{body} + ^{willpower}}}{{dice=[[((@{body}+@{willpower}+?{Toxin Resistance Gear?|0})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
soak: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{soak} ^{damage}}}{{dice=[[((@{soak})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
magic_ar: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{magic} ^{attack} ^{rating}}}{{rating=@{magic_ar}}}{{desc=^{magic} + @{tradition_attribute}}}",
direct_magic_defense: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{direct} ^{magic} ^{defense}}}{{dice=[[((@{willpower}+@{intuition})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{desc=Willpower + Intuition}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
indirect_magic_defense: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{indirect} ^{magic} ^{defense}}}{{dice=[[((@{reaction}+@{willpower})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{desc=Reaction + Willpower}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
soak_matrix: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{matrix} ^{soak} = ^{firewall}}}{{dice=[[((@{firewall})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
soak_biofeedback: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{biofeedback} ^{soak} = ^{willpower}}}{{dice=[[((@{willpower})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}]]}}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{desc=}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
primary_melee_weapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{primary_melee_weapon_name}}}{{dice=[[(@{primary_melee_weapon_rating}+@{primary_melee_weapon_attr_rating}+@{primary_melee_weapon_spec}+@{primary_melee_weapon_expert}+@{primary_melee_weapon_dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Damage @{primary_melee_weapon_damage}, Skill: @{primary_melee_weapon_skill}, Attribute: @{primary_melee_weapon_attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
primary_range_weapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{primary_range_weapon}}}{{dice=[[(@{primary_range_weapon_rating}+@{primary_range_weapon_attr_rating}+@{primary_range_weapon_spec}+@{primary_range_weapon_expert}+@{primary_range_weapon_dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Mode: @{primary_range_weapon_mode}, Damage: @{primary_range_weapon_damage}, Ammo: @{primary_range_weapon_ammo_type}, Skill: @{primary_range_weapon_skill}, Attribute: @{primary_range_weapon_attribute}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
primary_range_weapon_split_pool_2: "@{gm_toggle} &{template:rolls-computed}{{roll1=[[[[ceil((@{primary_range_weapon_rating}+@{primary_range_weapon_attr_rating}+@{primary_range_weapon_spec}+@{primary_range_weapon_expert}+@{primary_range_weapon_dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})/@{primary_range_weapon_split_dicepool})]]d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{roll2=[[[[floor((@{primary_range_weapon_rating}+@{primary_range_weapon_attr_rating}+@{primary_range_weapon_spec}+@{primary_range_weapon_expert}+@{primary_range_weapon_dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})/@{primary_range_weapon_split_dicepool})]]d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{dice=[[(@{primary_range_weapon_rating}+@{primary_range_weapon_attr_rating}+@{primary_range_weapon_spec}+@{primary_range_weapon_expert}+@{primary_range_weapon_dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{primary_range_weapon}}}{{split_pool=[[@{primary_range_weapon_split_dicepool}]]}}{{desc=Damage: @{primary_range_weapon_damage}\nMode: @{primary_range_weapon_mode}\nAmmo: @{primary_range_weapon_ammo_type}\nSkill: @{primary_range_weapon_skill}, Attribute: @{primary_range_weapon_attribute}}}{{wilddie1=[[@{wild_die1}]]}}{{wilddie2=[[@{wild_die2}]]}}{{glitch1=[[0]]}}{{glitch2=[[0]]}}{{wilddie1_dice=[[0]]}}{{wilddie2_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{total_hits1=[[0]]}}{{total_hits2=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{split_pool_dicepool_1=[[0]]}}{{split_pool_dicepool_2=[[0]]}}",
natural_healing_physical: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{natural} ^{healing} ^{physical}\n^{body} + ^{body}}}{{dice=[[(@{body}+@{body}+?{Medical Care?|No,0|Yes,2})d6>5cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Natural Healing (Physical), This test can be performed once per 24 hours of rest to recover Overflow/Physical damage.\n\n&star; Duration is halved with the Quick Healer quality.}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
natural_healing_stun: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{natural} ^{healing} ^{stun}\n^{body} + ^{willpower}}}{{dice=[[(@{body}+@{willpower}+?{Medical Care?|No,0|Yes,2})d6>5cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Natural Healing (Stun), This test can be performed once per hour of rest to recover stun damage. &star;Duration is halved with the Quick Healer quality}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
rangeweapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(@{rating}+@{attr_rating}+@{spec}+@{expert}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Mode @{mode}, Damage @{damage}, Skill: @{skill}, Attribute: @{attribute}, Notes @{notes}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
meleeweapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(@{rating}+@{attr_rating}+@{spec}+@{expert}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Damage @{damage}, Skill: @{skill}, Attribute: @{attribute}, Notes: @{notes}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
grenadeweapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(@{type}+@{spec}+@{expert}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=DV @{ground_zero}/@{close}/@{near}, Blast Area: @{blast}, Notes: @{notes} [GM Roll Scatter](~@{character_name}|GrenadeScatterAndDistance)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
GrenadeScatterAndDistance: "/w GM &{template:multirow}{{header=Grenade}}{{base=Bounce & Scatter}}{{desc=Scatter Direction [[2d6]]}}{{desc2=Bounce Distance [[{[[2d6]]-(?{Hits?|0}?{Range?|Close,+4|Near,+2|Medium,+0|Far,-2|Extreme,-4}),0}kh1]]m}}",
spell: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{ampup=[[?{Amp Up|0|1|2|3|4|5|6|7|8|9|10}]]}}{{drain=[[?{Amp Up}*2+(@{drain})]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{damagetype=@{damage}}}{{desc=@{notes}}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spellaoe: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{ampup=[[?{Amp Up|0|1|2|3|4|5|6|7|8|9|10}]]}}{{increasearea=[[?{Increase Area|0m,0|2m,1|4m,2|6m,3|8m,4|10m,5|12m,5|14m,6|16m,8|18m,9|20m,10}*2]]}}{{drain=[[?{Amp Up}*2+?{Increase Area}+(@{drain})]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{damagetype=@{damage}}}{{desc=@{notes}}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
noncombatspell: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{drain=[[@{drain}]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{damagetype=@{damage}}}{{desc=@{notes}}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
noncombatspellaoe: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{increasearea=[[?{Increase Area|0m,0|2m,1|4m,2|6m,3|8m,4|10m,5|12m,5|14m,6|16m,8|18m,9|20m,10}*2]]}}{{drain=[[?{Increase Area}+(@{drain})]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{damagetype=@{damage}}}{{desc=@{notes}}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
preparation: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[((@{magic}+@{potency}+@{expert}+@{spec})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=@{notes}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
ritual: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (Sorcery + Magic + Teamwork Hits)}}{{dice=[[((@{skill}+@{magic}+@{spec}+@{expert}+@{dicepool_modifier}+?{Teamwork test hits?|0})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc= Threshold:@{threshold}\nTeamwork Test Hits: ?{Teamwork test hits?|}\nNotes:@{notes}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spell_drain: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{spell} ^{drain}}}{{dice=[[((@{spell_drain_attribute_1}+@{spell_drain_attribute_2}+@{spell_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
preparation_drain: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{preparation} ^{drain}}}{{dice=[[((@{spell_drain_attribute_1}+@{spell_drain_attribute_2}+@{spell_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
ritual_drain: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{ritual} ^{drain}}}{{dice=[[((@{spell_drain_attribute_1}+@{spell_drain_attribute_2}+@{spell_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
adept_drain: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{adept} ^{power} ^{drain}}}{{dice=[[((@{adept_drain_attribute_1}+@{adept_drain_attribute_2}+@{adept_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
conjuring_drain: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{conjuring} ^{drain}}}{{dice=[[((@{conjuring_drain_attribute_1}+@{conjuring_drain_attribute_2}+@{conjuring_drain_modifier})+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
conjuring: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Conjuring Spirit of ?{Spirit Type?|Air|Beasts|Earth|Fire|Kin|Water|Plant|Guardian|Guidance|Task} Force ?{Force?|1|2|3|4|5|6|7|8|9|10}}}{{dice=[[((@{conjuring}+@{magic}+?{Skill Level?|Skilled (+0),0|Specialization (+2),2|Expertise (+3),3})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=[Spirit Resist](~@{character_name}|SpiritResistForce?{Force?})}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce1: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 1 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[2d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce2: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 2 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[4d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce3: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 3 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[6d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce4: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 4 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[8d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce5: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 5 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[10d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce6: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 6 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[12d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce7: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 7 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[14d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce8: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 8 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[16d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce9: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 9 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[18d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spiritresistforce10: "@{gm_toggle} &{template:rolls-computed}{{header=^{force} 10 ^{spirit}}}{{base=Summoning Resist}}{{dice=[[20d6>5]]}}{{desc=[Resist Drain](~@{character_name}|Conjuring_Drain)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
matrix_device_rating: "&{template:rolls-computed}{{header=@{character_name}}}{{base=Matrix Device Rating}}{{rating=@{matrix_device_rating}}}",
matrix_attack_rating: "&{template:rolls-computed}{{header=@{character_name}}}{{base=Matrix Attack Rating}}{{rating=[[(@{attack}+@{sleaze})]]}}{{desc=Attack + Sleaze}}",
matrix_defense_rating: "&{template:rolls-computed}{{header=@{character_name}}}{{base=Matrix Defense Rating}}{{rating=[[@{matrix_defense_rating}]]}}{{desc=Data Processing + Firewall}}",
matrix_attack: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{attack}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Attack,@{attack} [Attack]|Sleaze,@{sleaze} [Sleaze]|Data Processing,@{data_processing} [Data Processing]|Firewall,@{firewall} [Firewall]}]]+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{matrix} ^{attack} + ?{Attribute}}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
matrix_sleaze: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{sleaze}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Attack,@{attack} [Attack]|Sleaze,@{sleaze} [Sleaze]|Data Processing,@{data_processing} [Data Processing]|Firewall,@{firewall} [Firewall]}]]+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{matrix} ^{sleaze} + ?{Attribute}}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
matrix_data_processing: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{data_processing}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Attack,@{attack} [Attack]|Sleaze,@{sleaze} [Sleaze]|Data Processing,@{data_processing} [Data Processing]|Firewall,@{firewall} [Firewall]}]]+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{matrix} ^{data_processing} + ?{Attribute}}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
matrix_firewall: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{firewall}+[[?{Attribute|None,0 [None]|Custom,?{Dice?&#124;0&#125; [Custom]|Willpower,@{willpower} [Willpower]|Logic,@{logic} [Logic]|Intuition,@{intuition} [Intuition]|Charisma,@{charisma} [Charisma]|Attack,@{attack} [Attack]|Sleaze,@{sleaze} [Sleaze]|Data Processing,@{data_processing} [Data Processing]|Firewall,@{firewall} [Firewall]}]]+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{base=^{matrix} ^{firewall} + ?{Attribute}}}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
fade: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{resistfade}}}{{dice=[[(@{willpower}+@{logic}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{desc=Willpower + Logic}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
fade_compiling: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{resistfade} ^{compiling}}}{{dice=[[(@{willpower}+@{charisma}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{desc=Willpower + Charisma}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
compiling: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Compiling ?{sprite Type?|Courier|Crack|Data|Fault|Machine|Other} Sprite, Level ?{Level?|1|2|3|4|5|6|7|8|9|10}}}{{dice=[[((@{tasking}+@{resonance}+?{Skill Level?|Skilled (+0),0|Specialization (+2),2|Expertise (+3),3})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=[Sprite Resist](~@{character_name}|spriteresistlevel?{Level?})}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel1: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 1 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[2d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel2: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 2 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[4d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel3: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 3 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[6d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel4: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 4 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[8d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel5: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 5 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[10d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel6: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 6 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[12d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel7: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 7 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[14d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel8: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 8 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[16d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel9: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 9 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[18d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
spriteresistlevel10: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 10 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[20d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
complexform: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{complexform} @{name}}}{{dice=[[((@{skill}+@{resonance}+@{dicepool_modifier}+@{spec}+@{expert})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=@{notes}}}{{fade=[[@{fade}]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
complexformnoroll: "@{gm_toggle} &{template:rolls}{{header=@{character_name}}}{{base=^{complexform} @{name}}}{{desc=@{notes}}}{{fade=[[@{fade}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections1: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 1}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+2)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections2: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 2}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+4)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections3: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 3}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+6)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections4: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 4}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+8)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections5: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 5}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+10)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections6: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 6}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+12)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections7: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 7}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+14)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections8: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 8}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+16)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections9: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 9}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+18)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
connections10: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 10}}{{dice=[[(?{Specialized Knowledge?|N,0|Y,3}+20)d6>5]]}}{{glitch=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty1: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 1}}{{dice=[[(@{charisma}+@{influence}+1)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty2: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 2}}{{dice=[[(@{charisma}+@{influence}+2)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty3: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 3}}{{dice=[[(@{charisma}+@{influence}+3)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty4: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 4}}{{dice=[[(@{charisma}+@{influence}+4)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty5: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 5}}{{dice=[[(@{charisma}+@{influence}+5)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty6: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 6}}{{dice=[[(@{charisma}+@{influence}+6)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty7: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 7}}{{dice=[[(@{charisma}+@{influence}+7)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty8: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 8}}{{dice=[[(@{charisma}+@{influence}+8)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty9: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 9}}{{dice=[[(@{charisma}+@{influence}+9)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
loyalty10: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{loyalty} 10}}{{dice=[[(@{charisma}+@{influence}+10)d6>5]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
pcclearsight: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{clearsight} = ^{clearsight} + ^{sensor}}}{{dice=[[(@{clearsight}+@{display_sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
pcevasion: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{evasion} = ^{evasion} + ^{pilot}}}{{dice=[[(@{evasion}+@{display_pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
pcstealth: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{stealth} = ^{stealth} + ^{pilot}}}{{dice=[[(@{stealth}+@{display_pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
pcelectronicwarfare: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{electronicwarfare} = ^{electronicwarfare} + ^{sensor}}}{{dice=[[(@{electronicwarfare}+@{display_sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
pcmaneuvering: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{maneuvering} = ^{maneuvering} + ^{pilot}}}{{dice=[[(@{maneuvering}+@{display_pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
pctargeting: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name} / @{name}}}{{base=^{targeting} = ^{targeting} + ^{sensor}}}{{dice=[[(@{targeting}+@{display_sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
matrixresist_int_f: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{intuition} + ^{firewall}}}{{dice=[[(@{selected|intuition}+@{selected|firewall}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle})d6>5@{selected|explode_toggle}cs>5cf<[[(1+@{selected|bad_luck})]]]]}}{{desc=}}{{wilddie=[[@{selected|wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
matrixresist_f_s: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{firewall} + ^{sleaze}}}{{dice=[[(@{selected|firewall}+@{selected|sleaze}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle})d6>5@{selected|explode_toggle}cs>5cf<[[(1+@{selected|bad_luck})]]]]}}{{desc=}}{{wilddie=[[@{selected|wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
matrix_backdoor_entry: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Backdoor Entry}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Willpower + Firewall}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_brute_force: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Brute Force}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Willpower + Firewall}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_check_os: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Check OS}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), Threshold: 4}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_control_device: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Control Device}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. Willpower + Firewall}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_crack_file: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Crack File}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Encryption Rating x 2}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_crash_program: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Crash Program}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Data Processing + Device Rating}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_data_spike: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Data Spike}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Data Processing + Firewall}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_disarm_data_bomb: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Disarm Data Bomb}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. Data Bomb Rating x 2}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
// matrix_edit_file: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Edit File}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. Intuition + Firewall |or| Firewall + Sleaze}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_edit_file: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Edit File}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. [Intuition + Firewall](~selected|matrixresist_int_f) |or| [Firewall + Sleaze](~selected|matrixresist_f_s)}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_encrypt_file: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Encrypt File}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), Hits = Encryption Rating}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_erase_matrix_signature: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Erase Matrix Signature}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_format_device: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Format Device}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_hash_check: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Hash Check}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), CRB pg.182}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_hide: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Hide}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{intuition}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Intuition + Data Processing |or| Data Processing + Sleaze}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_jackout: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jack Out}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{willpower}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. Charisma + Data Processing |or| Attack + Data Processing}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_jam_signals: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jam Signals}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), CRB pg.182}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_jump_into_rigged_device: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jump Into Rigged Device}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_matrix_perception: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Matrix Perception}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. Willpower + Sleaze}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_matrix_search: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Matrix Search}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), Extended Test, 10 Minute Interval}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_probe: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Probe}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_reboot_device: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Reboot Device}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. Willpower + Firewall |or| Firewall x 2}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_set_data_bomb: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Set Data Bomb}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Device Rating x 2}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_snoop: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Snoop}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Logic + Firewall |or| Data Processing + Firewall}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_spoof_command: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Spoof Command}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. (Data Processing or Pilot) + Firewall}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_tarpit: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Tar Pit}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Data Processing + Firewall}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
matrix_trace_icon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Trace Icon}}{{?{Training Level?|Untrained,-1|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Willpower + Sleaze |or| Firewall + Sleaze}}{{wilddie=[[@{wild_die}+@{matrix_overclock}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{overclock=[[@{matrix_overclock}]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{matrix_noise=[[@{matrix_noise}]]}}",
extended_start: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Begin Extended Test}}{{reason=?{Extended Test Reason?}}}{{dice=[[(?{Dicepool?|1}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Extended Test Beginning}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{extendedtest=[[1]]}}{{newdicepool=[[(?{Dicepool?|1}-1)]]}}{{dicepool=[[?{Dicepool?|1}]]}}{{hitstotal=[[0]]}}{{intervals=[[1]]}}{{passthrough=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
extended_next: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Continue Extended Test}}{{dice=[[(%DICEPOOL%+@{modifiers_toggle}+@{wounds_toggle})d6>5cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Extended Test Continuing}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{extendedtest=[[2]]}}{{newdicepool=[[%NEWDICEPOOL%]]}}{{dicepool=[[%DICEPOOL%]]}}{{hitstotal=[[0]]}}{{intervals=[[%INTERVALS%]]}}{{reason=%REASON%}}{{passthrough=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
ar: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{attackrating} = ^{attack} + ^{sleaze}}}{{rating=[[@{attack}+@{sleaze}]]}}",
attack: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{attack}}}{{dice=[[(@{attack}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
complex_forms_attack_rating: "&{template:rolls-computed}{{header=@{character_name}}}{{base=Complex Form Attack Rating}}{{rating=[[@{electronics}+@{resonance}]]}}{{desc=Electronics + Resonance}}",
contchat: "@{gm_toggle} &{template:contact}{{header=@{character_name}}}{{name=@{name}}}{{loyalty=@{loyalty}}}{{connection=@{influence}}}{{favor=@{favors}}}{{desc=@{notes}}}",
data_processing: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{data_processing}}}{{dice=[[(@{data_processing}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
matrix_dr: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{matrix} ^{defenserating}}}{{rating=[[@{data_processing}+@{firewall}]]}}{{desc=Data Processing + Firewall}}",
firewall: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{firewall}}}{{dice=[[(@{firewall}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
host_rating: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{host_rating}}}{{rating=@{host_rating}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
IC: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{ic}: @{name}}}{{dice=[[(@{dice}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=vs. @{attribute}+@{matrix}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
IC_init: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}:IC}}{{base=^{ic}: ^{initiative}}}{{dice=[[(@{initdice}+@{modifiers_toggle}+@{edge_toggle})d6+@{init}]]}}",
item_chat: "@{gm_toggle} &{template:quality}{{header=@{character_name}}}{{base=@{name}}}{{desc=@{notes}}}{{rating=@{rating}}}",
level: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{level}}}{{rating=@{level}}}",
matrix_defense: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defense} = ^{data_processing} + ^{firewall}}}{{dice=[[(@{data_processing}+@{firewall}+@{defense_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_defense: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defense} = ^{reaction} + ^{intuition}}}{{dice=[[(@{reaction}+@{intuition}+@{defense_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_evasion: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{evasion} = ^{evasion} + ^{pilot}}}{{dice=[[(@{evasion}+@{pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_ew: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{electronicwarfare} = ^{electronicwarfare} + ^{sensor}}}{{dice=[[(@{electronicwarfare}+@{sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_knowledge: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{type})}}{{desc=@{notes}}}",
npc_maneuvering: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{maneuvering} = ^{maneuvering} + ^{pilot}}}{{dice=[[(@{maneuvering}+@{pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_melee_weapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (Dicepool: @{dicepool})}}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=DV @{damage}, Notes: @{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_range_weapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (Dicepool: @{dicepool})}}{{dice=[[(@{dicepool}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=Mode @{mode}, Damage @{damage}, Dicepool = @{dicepool} + Wounds @{wounds_toggle} + Modifiers @{modifiers_toggle} + Edge @{edge_toggle}, Notes @{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_spell: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{category} ^{magic})}}{{effecttype=@{effect_type}}}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{ampup=[[?{Amp Up|0|1|2|3|4|5|6|7|8|9|10}]]}}{{increasearea=[[?{Increase Area|0m,0|2m,1|4m,2|6m,3|8m,4|10m,5|12m,5|14m,6|16m,8|18m,9|20m,10}*2]]}}{{drain=[[?{Amp Up}*2+?{Increase Area}+(@{drain})]]}}{{desc=@{notes}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_skill: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (@{display_attribute})}}{{dice=[[(@{dicepool}+@{attribute}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_soak: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{soak} ^{damage}}}{{dice=[[(@{body}+@{soak_modifier}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_matrix_soak: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{soak} ^{matrix} ^{damage} = ^{firewall}}}{{dice=[[(@{firewall}+@{soak_matrix_modifier}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_biofeedback_soak: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{soak} ^{biofeedback} ^{damage} = ^{willpower}}}{{dice=[[(@{willpower}+@{soak_biofeedback_modifier}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_stealth: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{stealth} = ^{stealth} + ^{pilot}}}{{dice=[[(@{stealth}+@{pilot}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_targeting: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{targeting_weapon} ^{targeting} = ^{targeting} + ^{sensor}}}{{dice=[[(@{targeting}+@{sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_targeting2: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{targeting2_weapon} ^{targeting} = ^{targeting} + ^{sensor}}}{{dice=[[(@{targeting2}+@{sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
npc_targeting3: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{targeting3_weapon} ^{targeting} = ^{targeting} + ^{sensor}}}{{dice=[[(@{targeting3}+@{sensor}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
pilot: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=^{pilot}}}{{base=^{pilot}}}{{dice=[[(@{pilot}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
power: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=@{name}}}{{desc=@{notes}}}",
program: "@{gm_toggle} &amp;{template:rolls-computed}{{header=@{character_name}}}{{base=@{name}}}{{desc=@{program_note}}}",
quality_chat: "@{gm_toggle} &{template:quality}{{header=@{character_name}}}{{base=@{quality}}}{{desc=@{notes}}}{{rating=@{rating}}}",
resonance: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{resonance}}}{{dice=[[(@{resonance}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
sleaze: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{sleaze}}}{{dice=[[(@{sleaze}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
spirit_skill: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{skill} ^{force} (@{force}) + ^{attribute} (?{Attribute|Body,@{body}|Agility,@{agility}|Reaction,@{reaction}|Strength,@{strength}|Willpower,@{willpower}|Logic,@{logic}|Intuition,@{intuition}|Charisma,@{charisma}|None,0})}}{{dice=[[(@{force}+?{Attribute}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
sprite_skill: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{skill} @{level} + Attribute ?{Attribute|Logic,@{data_processing}|Intuition,@{sleaze}|Charisma,@{attack}|Willpower,@{firewall}|None,0}}}{{dice=[[(@{level}+?{Attribute}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
technique_chat: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=@{style} - @{technique}}}{{desc=@{notes}}}",
vehicle_defense: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defense} = ^{pilot} + ^{evasion}}}{{dice=[[((?{Pilot Rating?| No Pilot, @{pilot}| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10}+?{Evasion Autosoft Rating?| No Evasion Autosoft, 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10}+@{defense_modifier})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
};
const initiatives = {
initiative: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[0]]}}{{edge=[[0]]}}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{initiative}}}{{initiative=[[(@{initiative_base}+@{modifiers_toggle})+(@{initiative_dice}d6cf0)]]}}",
astral_initiative: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[0]]}}{{edge=[[0]]}}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{astral} ^{initiative}}}{{initiative=[[(@{astral_initiative_base}+@{modifiers_toggle})+(@{astral_initiative_dice}d6cf0)]]}}",
cold_sim_initiative: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[0]]}}{{edge=[[0]]}}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{coldsiminitiative}}}{{initiative=[[(@{cold_sim_initiative_base}+@{modifiers_toggle})+(@{cold_sim_initiative_dice}d6cf0)]]}}",
hot_sim_initiative: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[0]]}}{{edge=[[0]]}}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{hotsiminitiative}}}{{initiative=[[(@{hot_sim_initiative_base}+@{modifiers_toggle})+(@{hot_sim_initiative_dice}d6cf0)]]}}",
matrix_initiative: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[0]]}}{{edge=[[0]]}}{{combat_paralysis=[[@{combat_paralysis}]]}}{{header=@{character_name}}}{{base=^{matrixinitiative}}}{{initiative=[[(@{matrix_initiative_base}+@{modifiers_toggle})+(@{matrix_initiative_dice}d6cf0)]]}}",
};
// Initiative Rollers
Object.keys(initiatives).forEach((ini) => {
on(`clicked:${ini}`, (eventInfo) => {
const displayRoll = startRoll(initiatives[eventInfo.triggerName.slice(8)], (results) => {
var rolled = results.results.initiative.dice;
var init = results.results.initiative.result;
// combat_paralysis means initiative gets divided by 2 rounded up.
if(results.results.combat_paralysis.result) {
init = Math.ceil(init / 2);
}
let trueInitiative = init;
finishRoll(
results.rollId, {
initiative: init,
glitch: 0,
wilddie_dice: 0,
wilddie: 0,
}
);
// Roll with the API (!) to hide the roll and add the same value as the calculated initiative to the tracker
const trackerRoll = startRoll(`![[${trueInitiative}&{tracker}]]`, (tracker) => {
finishRoll(
tracker.rollId, {}
);
});
});
});
});
// Normal non-repeating rollers
['d6',
'body', 'agility', 'reaction', 'strength', 'willpower', 'logic', 'intuition', 'charisma', 'edge',
'composure', 'judge_intentions', 'memory', 'social_rating', 'lift_carry', 'sprint',
'default',
'dr', 'defense', 'toxin_resist', 'soak', 'magic_ar', 'direct_magic_defense', 'indirect_magic_defense', 'soak_matrix', 'soak_biofeedback', 'primary_range_weapon', 'primary_range_weapon_split_pool_2', 'primary_melee_weapon',
'natural_healing_physical', 'natural_healing_stun',
'spell_drain', 'preparation_drain', 'ritual_drain', 'adept_drain', 'conjuring_drain',
'conjuring', 'SpiritResistForce1', 'SpiritResistForce2', 'SpiritResistForce3', 'SpiritResistForce4', 'SpiritResistForce5', 'SpiritResistForce6', 'SpiritResistForce7', 'SpiritResistForce8', 'SpiritResistForce9', 'SpiritResistForce10',
'matrix_device_rating', 'matrix_attack_rating', 'matrix_defense_rating', 'matrix_attack', 'matrix_sleaze', 'matrix_data_processing', 'matrix_firewall',
'fade', 'fade_compiling', 'compiling', 'spriteresistlevel1', 'spriteresistlevel2', 'spriteresistlevel3', 'spriteresistlevel4', 'spriteresistlevel5', 'spriteresistlevel6', 'spriteresistlevel7', 'spriteresistlevel8', 'spriteresistlevel9', 'spriteresistlevel10',
'connections1', 'connections2', 'connections3', 'connections4', 'connections5', 'connections6', 'connections7', 'connections8', 'connections9', 'connections10',
'loyalty1', 'loyalty2', 'loyalty3', 'loyalty4', 'loyalty5', 'loyalty6', 'loyalty7', 'loyalty8', 'loyalty9', 'loyalty10',
'matrix_backdoor_entry', 'matrix_brute_force', 'matrix_check_os', 'matrix_control_device', 'matrix_crack_file', 'matrix_crash_program', 'matrix_data_spike', 'matrix_disarm_data_bomb', 'matrix_edit_file', 'matrix_encrypt_file', 'matrix_erase_matrix_signature', 'matrix_format_device', 'matrix_hash_check', 'matrix_hide', 'matrix_jackout', 'matrix_jam_signals', 'matrix_jump_into_rigged_device', 'matrix_matrix_perception', 'matrix_matrix_search', 'matrix_probe', 'matrix_reboot_device', 'matrix_set_data_bomb', 'matrix_snoop', 'matrix_spoof_command', 'matrix_tarpit', 'matrix_trace_icon',
'matrixresist_int_f', 'matrixresist_f_s'
].forEach((button) => {
on(`clicked:${button}`, (eventInfo) => {
console.log(eventInfo);
var rollButton = rollButtons[eventInfo.triggerName.slice(8)];
console.log(rollButton);
rollProcessor(rollButton);
});
});
// Bump 4s 1-7
for(c = 1; c < 7; c++) {
on(`clicked:bump_fours${c}`, (eventInfo) => {
var to_bump = eventInfo.triggerName.slice(18);
var rollButton = rollButtons.bump_fours;
rollButton = rollButton.replace('-#-', to_bump);
rollProcessor(rollButton);
});
}
// Rerolls 1-50
for(c = 1; c < 50; c++) {
on(`clicked:reroll${c}`, (eventInfo) => {
var default_dice = eventInfo.triggerName.slice(14);
var rollButton = rollButtons.reroll;
rollButton = rollButton.replace('-#-', default_dice);
rollProcessor(rollButton);
});
}
// Repeating Skill Rolls
['repeating_skills:skill', 'repeating_skills:spec', 'repeating_skills:expert'].forEach((button) => {
on(`clicked:${button}`, (eventInfo) => {
var buttonType = eventInfo.triggerName.split('_')[eventInfo.triggerName.split('_').length - 1];
var rollButton = rollButtons[buttonType];
['name', 'spec', 'expert', 'display_spec', 'display_expert', 'rating', 'attribute', 'display_attribute', 'mod', 'notes'].forEach((field) => {
var replacement = eventInfo.triggerName.slice(8);
var re = RegExp(buttonType+'$', "g");
replacement = replacement.replace(re, field);
rollButton = rollButton.replace('@{'+field+'}', '@{'+replacement+'}');
});
console.log(rollButton);
rollProcessor(rollButton);
});
});
// Repeating Weapon Rolls
['repeating_range:rangeweapon', 'repeating_melee:meleeweapon', 'repeating_grenade:grenadeweapon'].forEach((button) => {
on(`clicked:${button}`, (eventInfo) => {
var buttonType = eventInfo.triggerName.split('_')[eventInfo.triggerName.split('_').length - 1];
var rollButton = rollButtons[buttonType];
['name', 'type', 'spec', 'expert', 'dicepool_modifier', 'ground_zero', 'close', 'near', 'blast', 'rating', 'attr_rating', 'damage', 'skill', 'attribute', 'mode', 'notes'].forEach((field) => {
var replacement = eventInfo.triggerName.slice(8);
var re = RegExp(buttonType+'$', "g");
replacement = replacement.replace(re, field);
rollButton = rollButton.replace('@{'+field+'}', '@{'+replacement+'}');
});
rollProcessor(rollButton);
});
});
// Repeating Spell/Preparation/Ritual Rolls
['repeating_spell:spell', 'repeating_spell:spellaoe', 'repeating_spell:noncombatspell', 'repeating_spell:noncombatspellaoe', 'repeating_preparations:preparation', 'repeating_ritual:ritual'].forEach((button) => {
on(`clicked:${button}`, (eventInfo) => {
var buttonType = eventInfo.triggerName.split('_')[eventInfo.triggerName.split('_').length - 1];
var rollButton = rollButtons[buttonType];
['name', 'category', 'effect_type', 'skill', 'dicepool_modifier', 'specialization', 'expertise', 'drain', 'spec', 'expert', 'threshold', 'potency', 'notes', 'damage'].forEach((field) => {
var replacement = eventInfo.triggerName.slice(8);
var re = RegExp(buttonType+'$', "g");
replacement = replacement.replace(re, field);
rollButton = rollButton.replace('@{'+field+'}', '@{'+replacement+'}');
});
rollProcessor(rollButton);
});
});
// Repeating Complex Form Rolls
['repeating_forms:complexform', 'repeating_forms:complexformnoroll'].forEach((button) => {
on(`clicked:${button}`, (eventInfo) => {
var buttonType = eventInfo.triggerName.split('_')[eventInfo.triggerName.split('_').length - 1];
var rollButton = rollButtons[buttonType];
['name', 'skill', 'dicepool_modifier', 'spec', 'expert', 'fade', 'notes'].forEach((field) => {
var replacement = eventInfo.triggerName.slice(8);
var re = RegExp(buttonType+'$', "g");
replacement = replacement.replace(re, field);
rollButton = rollButton.replace('@{'+field+'}', '@{'+replacement+'}');
});
rollProcessor(rollButton);
});
});
// Repeating Vehicle Rolls
['repeating_vehicle:pcclearsight', 'repeating_vehicle:pcevasion', 'repeating_vehicle:pcstealth', 'repeating_vehicle:pcelectronicwarfare', 'repeating_vehicle:pcmaneuvering', 'repeating_vehicle:pctargeting'].forEach((button) => {
on(`clicked:${button}`, (eventInfo) => {
var buttonType = eventInfo.triggerName.split('_')[eventInfo.triggerName.split('_').length - 1];
var rollButton = rollButtons[buttonType];
['name', 'display_sensor', 'display_pilot', 'clearsight', 'evasion', 'stealth', 'electronicwarfare', 'maneuvering', 'targeting', 'notes'].forEach((field) => {
var replacement = eventInfo.triggerName.slice(8);
var re = RegExp(buttonType+'$', "g");
replacement = replacement.replace(re, field);
rollButton = rollButton.replace('@{'+field+'}', '@{'+replacement+'}');
});
rollProcessor(rollButton);
});
});
// Generic Extended Test Rolls
['extended_start', 'extended_next'].forEach((button) => {
on(`clicked:${button}`, async (eventInfo) => {
//console.log(eventInfo);
//console.log("Extended Test!");
var buttonName = eventInfo.triggerName.slice(17);
rollButton = rollButtons[eventInfo.triggerName.slice(8)];
let passthrough = {};
if(eventInfo.originalRollId) {
let parts = eventInfo.originalRollId.split(',');
//console.log(parts);
passthrough = rollEscape.unescape(parts[0]);
//console.log("Passthrough unescaped.");
//console.log(passthrough);
// update the dicepool and new dicepool (-1 each) and update intervals (+1)
passthrough.dicepool -= 1;
passthrough.newdicepool -= 1;
passthrough.intervals++;
passthrough.reason = parts[1];
// replace placeholders in the rollButton string with the passthrough values
rollButton = rollButton.replace(/%BASE%/g, passthrough.base);
rollButton = rollButton.replace(/%DICEPOOL%/g, passthrough.dicepool);
rollButton = rollButton.replace(/%REASON%/g, passthrough.reason);
rollButton = rollButton.replace(/%DESC%/g, passthrough.desc);
rollButton = rollButton.replace(/%NEWDICEPOOL%/g, passthrough.newdicepool);
rollButton = rollButton.replace(/%INTERVALS%/g, passthrough.intervals);
}
//console.log("Passthrough parsed.");
//console.log("rollButton updated.");
//console.log(rollButton);
await rollProcessor(rollButton, eventInfo, passthrough);
});
});
/* Thanks to Oosh on the Roll20 forums for this bit of code
Helper - the data passed through in an action button needs these characters escaped
I have used a mongrel escape sequence to avoid triggering anything internal in Roll20
This may not be a complete list of characters that need escaping! If you have heavily
punctuated text, it might break the passthrough!
*/
const rollEscape = {
chars: {
'"': '%quot;',
',': '%comma;',
':': '%colon;',
'}': '%rcub;',
'{': '%lcub;',
},
escape(str) {
str = (typeof(str) === 'object') ? JSON.stringify(str) : (typeof(str) === 'string') ? str : null;
return (str) ? `${str}`.replace(new RegExp(`[${Object.keys(this.chars)}]`, 'g'), (r) => this.chars[r]) : null;
},
unescape(str) {
str = `${str}`.replace(new RegExp(`(${Object.values(this.chars).join('|')})`, 'g'), (r) => Object.entries(this.chars).find(e=>e[1]===r)[0]);
return JSON.parse(str);
}
};
/************************************
* Roll Processor
* - This does the heavy lifting
************************************/
var rollProcessor = async (rollButton, ev = {}, passthrough = {}) => {
console.info(ev);
console.info(passthrough);
console.info(rollButton);
getAttrs(["bad_luck"], (v) => {
startRoll(rollButton, (results) => {
console.log(results.results);
// setup our passthrough values
if(results.results.extendedtest && results.results.extendedtest.result == 1) {
console.info("Setting up passthrough for start");
passthrough.dicepool = parseInt(results.results.dicepool.result);
passthrough.newdicepool = parseInt(results.results.dicepool.result - 1);
passthrough.hitstotal = parseInt(0);
passthrough.intervals = parseInt(1);
// passthrough.reason = results.results.reason.expression;
console.log(passthrough);
}
console.log(results.results);
if(! results.results.dice) {
results.results.dice = {dice: []}
}
if(! results.results.wilddie) {
results.results.wilddie = {dice: []}
}
var split_pool_dicepool_1 = 0;
var split_pool_dicepool_2 = 0;
// If they are splitting their pool we need to fudge the results.results.dice object
// to be roll1 and roll2 objects combined.
if(results.results.split_pool && results.results.split_pool.result && results.results.roll1 && results.results.roll2) {
split_pool_dicepool_1 = results.results.roll1.dice.length;
split_pool_dicepool_2 = results.results.roll2.dice.length;
results.results.dice.dice = results.results.roll1.dice.concat(results.results.roll2.dice);
results.results.dice.result = results.results.roll1.result + results.results.roll2.result;
} else {
results.results.roll1 = [];
results.results.roll2 = [];
}
var rolled = results.results.dice.dice;
var fours = rolled.reduce((a, v) => (v == 4 ? a + 1 : a), 0);
// deal with wild dice on normal rolls else split rolls
if(! results.results.split_pool) {
wd_out = process_wild_dice(results.results.wilddie.result, rolled);
hits = wd_out.hits;
total_hits = wd_out.total_hits;
wd_results = wd_out.wd_results;
hits1 = 0;
total_hits1 = 0;
roll1_wd_results = 0;
results.results.wilddie1 = [];
hits2 = 0;
total_hits2 = 0;
roll2_wd_results = 0;
results.results.wilddie2 = [];
} else {
wd_out = process_wild_dice(results.results.wilddie1.result, results.results.roll1.dice);
hits1 = wd_out.hits;
total_hits1 = wd_out.total_hits;
roll1_wd_results = wd_out.wd_results;
wd_out = process_wild_dice(results.results.wilddie2.result, results.results.roll2.dice);
hits2 = wd_out.hits;
total_hits2 = wd_out.total_hits;
roll2_wd_results = wd_out.wd_results;
hits = hits1 + hits2;
total_hits = total_hits1 + total_hits2;
wd_results = roll1_wd_results + roll2_wd_results;
}
// Check for glitches on normal rolls else split rolls
if(! results.results.split_pool) {
glitch = check_glitches(v, rolled, hits);
glitch1 = 0;
glitch2 = 0;
} else {
glitch = 0;
glitch1 = check_glitches(v, results.results.roll1.dice, hits);
glitch2 = check_glitches(v, results.results.roll2.dice, hits);
}
if(results.results.sprint) {
dice = results.results.dice.results;
}
var misses = results.results.dice.dice.length - hits;
// handle last second total hits tally for extended tests
if(results.results.extendedtest && results.results.extendedtest.result) {
passthrough.hitstotal = parseInt(passthrough.hitstotal + total_hits);
//console.log(passthrough);
}
finishRoll(
results.rollId, {
dice: total_hits,
roll1: total_hits1,
roll2: total_hits2,
glitch: glitch,
glitch1: glitch1,
glitch2: glitch2,
wilddie_dice: wd_results,
wilddie1_dice: roll1_wd_results,
wilddie2_dice: roll2_wd_results,
wilddie: results.results.wilddie.result,
wilddie1: results.results.wilddie1.result,
wilddie2: results.results.wilddie2.result,
dicepool: results.results.dice.dice.length,
split_pool_dicepool_1: split_pool_dicepool_1,
split_pool_dicepool_2: split_pool_dicepool_2,
misses: misses,
hits: hits,
hits1: hits1,
hits2: hits2,
fours: fours,
passthrough: rollEscape.escape(passthrough),
hitstotal: passthrough.hitstotal,
}
);
});
});
};
var process_wild_dice = (wd_result, rolled) => {
var wild_die_results = [];
var wilddie_dice = [];
if(wd_result) {
wild_die_results = rolled.slice(0, wd_result);
wilddie_dice = wild_die_results.join(', ');
} else {
wd_result = 0;
}
wd_results = wild_die_results.join(', ');
var wild_die_hits = 0;
var hits_threshold = 5;
var wd_hits = 0;
var wd_glitch = 0;
// deal with (potentially) multiple wild dice
// we sort these in ascending order because glitches impact other stuff
wild_die_results.sort(function(a, b){return a-b}).forEach((die) => {
if(die < 2) {
hits_threshold = 6;
wd_glitch++;
}
if(die >= hits_threshold) {
wd_hits += 2;
}
});
var hits = rolled.reduce((a, v) => (v >= hits_threshold ? a + 1 : a), 0);
var total_hits = hits + wd_hits;
return {hits: hits, total_hits: total_hits, wd_results: wd_results};
};
var check_glitches = (v, rolled, hits) => {
var glitch_threshold = 1;
if(parseInt(v.bad_luck) > 0) {
glitch_threshold = 2;
}
var glitches_ones = rolled.reduce((a, v) => (v == 1 ? a + 1 : a), 0);
var glitches = rolled.reduce((a, v) => (v <= glitch_threshold ? a + 1 : a), 0);
// bad luck will not cause critical glitches so if it would have been a critical glitch counting 2s it is just a glitch
var glitch = 0;
if(glitches > rolled.length / 2) {
if(hits) {
glitch = 1;
} else if(glitches_ones <= rolled.length / 2) {
// without bad luck it would not have been a glitch so critical glitch just becomes a glitch.
glitch = 1;
} else {
glitch = 2;
}
}
return glitch;
};
/*******************************************
* Modifications field processing *
* - This allows custom attribute overrides *
* via the 'Modifications' inputs *
*******************************************/
//"
on("change:repeating_quality:modifications remove:repeating_quality change:repeating_augmentations:modifications remove:repeating_augmentations change:repeating_items:modifications remove:repeating_items change:repeating_devices:modifications remove:repeating_devices change:repeating_programs:modifications change:repeating_programs:powered_on remove:repeating_programs change:repeating_echoes:modifications remove:repeating_echoes change:repeating_forms:modifications remove:repeating_forms change:repeating_powers:modifications remove:repeating_powers change:repeating_metamagic remove:repeating_metamagic change:repeating_effects remove:repeating_effects change:repeating_effects:active", (eventInfo) => {
var allowed_modifiers = [
'body_modifier', 'agility_modifier', 'reaction_modifier', 'strength_modifier', 'willpower_modifier', 'logic_modifier', 'intuition_modifier', 'charisma_modifier',
'magic_modifier', 'resonance_modifier',
'overflow_modifier', 'physical_modifier', 'stun_modifier',
'initiative_mod', 'initiative_dice_mod', 'astral_initiative_mod', 'astral_initiative_dice_mod', 'matrix_initiative_mod', 'matrix_initiative_dice_mod', 'cold_sim_initiative_mod', 'cold_sim_initiative_dice_mod', 'hot_sim_initiative_mod', 'hot_sim_initiative_dice_mod',
'composure_modifier', 'judge_intentions_modifier', 'memory_modifier', 'lift_carry_modifier', 'move_speed', 'sprint_speed', 'sprint_modifier',
'attack_modifier', 'sleaze_modifier', 'data_processing_modifier', 'firewall_modifier', 'matrix_defense_rating_modifier',
'combat_paralysis'
];
console.log(eventInfo);
repName = /(.+-[^_]+)_(.*)$/.exec(eventInfo.triggerName);
if(! repName) {
repName = eventInfo.triggerName;
} else {
repName = repName[1];
}
var attrsToGet = ['enable_modifiers', 'enable_unrestricted_modifiers', `${repName}_powered_on`, `${repName}_active`, `${repName}_modifications`];
getAttrs(attrsToGet, (v) => {
if(v.enable_modifiers != "1") {
return;
}
console.log(v);
// If we're using either powered_on or active buttons we need to make sure the toggle is on for one of them
// and we only do this if the modifications itself was changed
if(eventInfo.sourceAttribute.includes("modifications")) {
if(v[`${repName}_powered_on`] && v[`${repName}_powered_on`] !== "on") {
//console.log("not powered 'on', returning");
return;
}
if(v[`${repName}_active`] && v[`${repName}_active`] !== "on") {
//console.log("not active 'on', returning");
return;
}
}
// If the change was triggered by a power_on or active toggle changing
// we need to update our newValue and previousValue appropriately to apply or remove the effect
if(eventInfo.sourceAttribute.includes("powered_on") || eventInfo.sourceAttribute.includes("active")) {
if(eventInfo.newValue === "on") {
eventInfo.previousValue = '';
eventInfo.newValue = v[`${repName}_modifications`];
} else {
eventInfo.newValue = '';
eventInfo.previousValue = v[`${repName}_modifications`];
}
}
// If it's actually a removal of the repeating item we need to make sure if the item has powered_on or active buttons that it's not off (if it's off the mods were already removed)
if(eventInfo.removedInfo) {
if(eventInfo.removedInfo[`${eventInfo.sourceAttribute}_powered_on`] && eventInfo.removedInfo[`${eventInfo.sourceAttribute}_powered_on`] !== "on") {
//console.log("not powered 'on', do nothing");
return;
}
if(eventInfo.removedInfo[`${eventInfo.sourceAttribute}_active`] && eventInfo.removedInfo[`${eventInfo.sourceAttribute}_active`] !== "on") {
//console.log("not active 'on', do nothing");
return;
}
eventInfo.previousValue = eventInfo.removedInfo[`${eventInfo.sourceAttribute}_modifications`];
eventInfo.newValue = '';
}
// if previousValue and newValue are the same and it wasn't removed it was added. Not sure why roll20 gives us the newValue as previousValue when creating an entry
if(eventInfo.previousValue === eventInfo.newValue) {
eventInfo.previousValue = '';
}
var oldParts = (eventInfo.previousValue) ? eventInfo.previousValue.split(/\s*,\s*/) : [];
var newParts = (eventInfo.newValue) ? eventInfo.newValue.split(/\s*,\s*/) : [];
var op = {},
np = {},
mods = {},
keys = {};
mods.old = {};
mods.new = {};
oldParts.forEach(e => {
parts = e.split(/\s*:\s*/);
if(mods.old[parts[0]]) {
mods.old[parts[0]] += parseInt(parts[1]);
} else {
mods.old[parts[0]] = parseInt(parts[1]);
}
(typeof keys[parts[0]] === 'undefined') ? keys[parts[0]] = 1 : keys[parts[0]]++;
})
newParts.forEach(e => {
parts = e.split(/\s*:\s*/);
if(mods.new[parts[0]]) {
mods.new[parts[0]] += parseInt(parts[1]);
} else {
mods.new[parts[0]] = parseInt(parts[1]);
}
(typeof keys[parts[0]] === 'undefined') ? keys[parts[0]] = 1 : keys[parts[0]]++;
})
Object.keys(keys).forEach(k => {
if(mods.old[k] == mods.new[k]) {
// Nothing changed, skipping
} else {
if(! allowed_modifiers.includes(k) && v[`enable_unrestricted_modifiers`] != 1) {
console.log('Unrestricted Modifiers not enabled, tried to update ('+k+') which is not whitelisted');
} else if(k !== "0" && k !== "on") {
update_attribute({
'key': k,
'old': mods.old[k],
'new': mods.new[k]
});
}
}
})
});
});
// Wild Die toggle changed
on("change:wild_die", (eventInfo) => {
console.log(eventInfo);
if(eventInfo.newValue == 0) {
setAttrs({
wild_die1: eventInfo.newValue,
wild_die2: eventInfo.newValue
});
} else {
setAttrs({
wild_die1: "?{Wild Dice for First Roll?|0}",
wild_die2: "?{Wild Dice for Second Roll?|0}"
});
}
});
on("change:character_name", (eventInfo) => {
set_display_name(eventInfo.newValue);
});
var set_display_name = (name) => {
character_name = name.replace(/[\}\)\|]/g, '*');
setAttrs({
character_name: character_name
});
};
var update_attribute = (attr) => {
getAttrs([`${attr.key}`], (v) => {
if(v[`${attr.key}`] !== 'NaN') {
currentV = /([+-]*\d+)(.*)/.exec(v[`${attr.key}`]);
} else {
v[`${attr.key}`] = 0;
currentV = [0, 0, ''];
}
// Sanity checking because js freaks out on undefined or NaN values when you try to do math with them
if(! v[`${attr.key}`]) {
v[`${attr.key}`] = 0;
}
if(! currentV) {
currentV = [0, 0, ''];
}
if(! attr.new) {
attr.new = 0;
}
if(! attr.old) {
attr.old = 0;
}
var newV = 0;
// the mod was removed, undo the old value
if(attr.old && ! attr.new) {
newV = parseInt(currentV[1]) - parseInt(attr.old)
}
// the mod was added, use the new value
if(! attr.old && attr.new) {
newV = parseInt(currentV[1]) + parseInt(attr.new);
}
// it's an update to the mod, figure out the difference and apply it
if(attr.old && attr.new && attr.old != attr.new) {
var diff = modify_value([attr.old, attr.new]);
newV = parseInt(v[`${attr.key}`]) + parseInt(diff)
}
setAttrs({
[`${attr.key}`]: newV + currentV[2]
});
});
};
var modify_value = (params) => {
var diff = 0;
var re = /([+-]*)(\d+)/;
var oldV = re.exec(params[0]);
var newV = re.exec(params[1]);
if(parseInt(oldV[0]) > parseInt(newV[0])) { // oldV is higher, we are subtracting
// subtracting
diff = -1 * (parseInt(oldV[0]) - parseInt(newV[0]));
} else if(parseInt(oldV[0]) < parseInt(newV[0])) { // newV is higher, we are adding
// adding
diff = parseInt(newV[0]) - parseInt(oldV[0]);
} else { // they are equal
// no change diff still 0;
}
return diff;
};
on("clicked:shots_remove clicked:shots_add", (eventInfo) => {
getAttrs([`shots_fired`], (v) => {
let shots = parseInt(v[`shots_fired`]) || 0;
const trigger = eventInfo.triggerName;
setAttrs({
shots_fired: (shots > 0 && trigger.includes("remove")) ? shots -= 1 : trigger.includes("add") ? shots += 1 : shots
});
});
});
on("clicked:primary_ammo", (eventInfo) => {
getAttrs([`primary_range_weapon_ammo`, `shots_fired`], (v) => {
let ammo = parseInt(v[`primary_range_weapon_ammo`]) || 0;
const shots = parseInt(v[`shots_fired`]) || 0;
setAttrs({
primary_range_weapon_ammo: ammo -= shots
});
});
});
on("change:primary_range_weapon_mode change:primary_range_weapon_ammo_type", (eventInfo) => {
var rounds = 1;
var split_dicepool = 0;
getAttrs(['primary_range_weapon_mode', 'primary_range_weapon_ammo_type', 'primary_range_weapon_base_damage', 'primary_range_weapon_base_close', 'primary_range_weapon_base_near', 'primary_range_weapon_base_medium', 'primary_range_weapon_base_far', 'primary_range_weapon_base_extreme', 'primary_range_weapon_split_dicepool'], (v) => {
var toSet = {
primary_range_weapon_damage: v.primary_range_weapon_base_damage,
primary_range_weapon_close: v.primary_range_weapon_base_close,
primary_range_weapon_near: v.primary_range_weapon_base_near,
primary_range_weapon_medium: v.primary_range_weapon_base_medium,
primary_range_weapon_far: v.primary_range_weapon_base_far,
primary_range_weapon_extreme: v.primary_range_weapon_base_extreme
};
var mods = {
arMod: 0,
arModC: 0,
arModN: 0,
arModM: 0,
arModF: 0,
arModE: 0,
dvMod: 0,
dv_type: ''
};
// Setup mods for firing mode
switch(v.primary_range_weapon_mode) {
case "Full Auto":
// 10 rounds, AR -6
rounds = 10;
mods.arMod += -6;
break;
case "Burst Fire":
// 4 rounds, AR -4, DV +2
rounds = 4;
mods.arMod += -4;
mods.dvMod += 2;
break;
case "Burst Fire Wide":
// 4 rounds, AR -4, split dice pool 2 parts
rounds = 4;
mods.arMod += -4;
mods.dvMod += 0;
split_dicepool = 2;
break;
case "Semi Auto":
// 2 rounds, AR -2, DV +1
rounds = 2;
mods.arMod += -2;
mods.dvMod += 1;
break;
case "Single Shot":
default:
// 1 round, No changes
rounds = 1;
mods.arMod += 0;
mods.dvMod += 0;
}
// Setup mods for ammo type
switch(v.primary_range_weapon_ammo_type) {
case "APDS":
// AR +2, DV -1
mods.arMod += +2;
mods.dvMod += -1;
break;
case "Explosive":
// AR +0, DV +1
mods.arMod += 0;
mods.dvMod += +1;
break;
case "Flechette":
// AR +1, DV -1
mods.arMod += +1;
mods.dvMod += -1;
break;
case "Gel":
// AR +0, DV +0, Damage Type: S
mods.arMod += 0;
mods.dvMod += 0;
mods.dv_type = 'S';
break;
case "Handloaded":
// AR +1, DV +0
mods.arMod += +1;
mods.dvMod += 0;
break;
case "Match-Grade":
// AR +0, DV -1, C +1, N +2, M +3, F +3, E +2
mods.arMod += 0;
mods.dvMod += -1;
mods.arModC += +1;
mods.arModN += +2;
mods.arModM += +3;
mods.arModF += +3;
mods.arModE += +2;
break;
case "rEVO":
// AR +0, DV +1, C +1, N -1, M -1, F -2, E -2
mods.arMod += 0;
mods.dvMod += +1;
mods.arModC += +1;
mods.arModN += -1;
mods.arModM += -1;
mods.arModF += -2;
mods.arModE += -2;
break;
case "Stick-n-Shock":
// AR +1, DV -1, Damage Type: S(e)
mods.arMod += +1;
mods.dvMod += -1;
mods.dv_type = 'S(e)';
break;
case "Regular":
// AR +0, DV +0
mods.arMod += 0;
mods.dvMod += 0;
break;
default:
// No changes
mods.arMod += 0;
mods.dvMod += 0;
}
toSet = adjAttrs({
attrs: toSet,
arMod: mods.arMod,
arModC: mods.arModC,
arModN: mods.arModN,
arModM: mods.arModM,
arModF: mods.arModF,
arModE: mods.arModE,
dvMod: mods.dvMod,
dv_type: mods.dv_type,
});
toSet.shots_fired = rounds;
toSet.primary_range_weapon_split_dicepool = split_dicepool;
setAttrs(toSet);
});
});
var adjAttrs = (p) => {
Object.keys(p.attrs).forEach(a => {
mod = p.arMod;
mod_extra = 0;
if(a.endsWith("_damage")) {
mod = p.dvMod;
}
if(a.includes('close') && p.arModC) {
mod_extra = p.arModC;
}
if(a.includes('near') && p.arModN) {
mod_extra = p.arModN;
}
if(a.includes('medium') && p.arModM) {
mod_extra = p.arModM;
}
if(a.includes('far') && p.arModF) {
mod_extra = p.arModF;
}
if(a.includes('extreme') && p.arModE) {
mod_extra = p.arModE;
}
pieces = /(\d+)(.*)/.exec(p.attrs[`${a}`]);
var tot = p.attrs[`${a}`];
if(pieces) {
if(pieces[1] && pieces[1] > 0) {
tot = parseInt(pieces[1]) + parseInt(mod) + parseInt(mod_extra);
if(tot < 0) {
tot = 0;
}
}
// if this was damage then there is a second piece (the damage type P, S, S(e), etc)
// if p.dv_type exists the firing mode or ammo type change the damage type
if(pieces[2] && p.dv_type) {
pieces[2] = p.dv_type;
}
p.attrs[`${a}`] = tot + pieces[2];
}
});
return p.attrs;
}
on("clicked:reload", (eventInfo) => {
getAttrs([`primary_range_weapon_ammo_max`], (v) => {
const reload = parseInt(v[`primary_range_weapon_ammo_max`]) || 0;
setAttrs({
primary_range_weapon_ammo: reload
});
});
});
// 2022-02-01 I don't think this does anything
["active", "knowledge", "language"].forEach((attr) => {
on(`clicked:repeating_${attr}:skill`, (eventInfo) => {
settingsToggle(eventInfo);
});
});
["quality", "martial", "items", "range", "melee", "armor", "spell", "preps", "ritual", "powers", "forms", "vehicle", "augementations", "lifestyle", "contacts", "programs"].forEach((attr) => {
on(`clicked:repeating_${attr}:${attr}`, (eventInfo) => {
settingsToggle(eventInfo);
});
});
// This triggers hiding settings when the player clicks one of the roll buttons
const settingsToggle = (eventInfo) => {
const split = eventInfo.sourceAttribute.split("_");
const source = `${split[0]}_${split[1]}_${split[2]}`;
getAttrs([`${source}_flag`], (v) => {
setAttrs({
[`${source}_flag`]: (v[`${source}_flag`] === "settings") ? "display" : "settings"
});
});
};
[`core`, `arms`, `augs`, `gear`, `magic`, `matrix`, `social`, `vehicle`, `options`, `notes`, `rolls`].forEach(attr => {
on(`clicked:tab_${attr}`, () => {
setAttrs({tab: attr});
});
});
on("change:body change:strength change:lift_carry_modifier", (eventInfo) => {
const source = eventInfo.sourceAttribute;
update_common_rolls(["body", "willpower", "lift_carry_modifier"]);
//ONLY RUN ON BODY CHANGE
if (source.includes("body")) {
update_common_rolls(["body", "body", "overflow_modifier"]);
update_common_rolls(["body", "soak_modifier", "soak_temp", `soak_temp_flag`]);
update_track("physical");
};
});
on("change:overflow_modifier", (eventInfo) => {
update_common_rolls(["body", "body", "overflow_modifier"]);
});
on("change:reaction change:intuition", (eventInfo) => {
const source = eventInfo.sourceAttribute;
update_common_rolls(["reaction", "intuition", "defense_modifier", "defense_temp", `defense_temp_flag`]);
update_initiative();
//ONLY RUN ON INTUITION CHANGE
(source.includes("intuition")) ? update_common_rolls(["willpower", "intuition", "judge_intentions_modifier"]) : false;
});
on("change:willpower", () => {
update_common_rolls(["intuition", "willpower", "judge_intentions_modifier"]);
update_common_rolls(["charisma", "willpower", "composure_modifier"]);
update_common_rolls(["body", "willpower", "lift_carry_modifier"]);
update_track("stun");
});
on("change:logic change:memory_modifier", (eventInfo) => {
const source = eventInfo.sourceAttribute;
update_common_rolls(["logic", "intuition", "memory_modifier"]);
});
on("change:intuition change:memory_modifier", (eventInfo) => {
const source = eventInfo.sourceAttribute;
update_common_rolls(["logic", "intuition", "memory_modifier"]);
});
on("change:charisma change:composure_modifier change:judge_intentions_modifier", (eventInfo) => {
const source = eventInfo.sourceAttribute;
//CHARISMA & COMPOSURE UPDATE COMPOSURE
(source.includes("charisma") || source.includes("composure")) ? update_common_rolls(["charisma", "willpower", "composure_modifier"]) : false;
//CHARISMA & JUDGE INTENTIONS UPDATE JUDGE INTENTIONS
(source.includes("charisma") || source.includes("judge")) ? update_common_rolls(["willpower", "intuition", "judge_intentions_modifier"]) : false;
});
on("change:essence", () => {
// This shouldn't be manually changed by the player it's a calculated value. See the update_essence function.
});
on("change:physical_modifier change:flag_drone", () => {
update_track("physical");
});
on("change:stun_modifier", () => {
update_track("stun");
});
on("change:combat_paralysis", (eventInfo) => {
if(eventInfo.newValue == 1) {
setAttrs({
'combat_paralysis_initiative_mod': '/2'
});
} else {
setAttrs({
'combat_paralysis_initiative_mod': ''
});
}
});
on("change:reaction change:intuition change:defense_modifier change:defense_temp change:defense_temp_flag", () => {
update_common_rolls(["reaction", "intuition", "defense_modifier", "defense_temp", `defense_temp_flag`]);
});
on("change:body change:soak_modifier change:soak_temp change:soak_temp_flag", () => {
update_common_rolls(["body", "doesntmatter", "soak_modifier", "soak_temp", `soak_temp_flag`]);
});
on("change:pain_tolerance change:resist_pain change:damage_compensator", () => {
update_wounds();
});
// Update the name of the attribute used when rolling Unskilled Skill Use
on("change:default_attribute", (eventInfo) => {
getAttrs(['default_attribute'], (v) => {
var new_attr;
if(eventInfo.newValue) {
new_attr = eventInfo.newValue;
} else {
new_attr = v.default_attribute;
}
// newValue will be something like "@{attribute_name}" so we cut out the @{ and } and capitalize the first letter
setAttrs({
'default_display': new_attr.charAt(2).toUpperCase() + new_attr.slice(3, -1)
});
});
});
//Calculate ATTRIBUTES
['tasks', 'body', 'agility', 'reaction', 'strength', 'willpower', 'logic', 'intuition', 'charisma', 'magic', 'resonance'].forEach(attr => {
// Attach listener
on(`change:${attr}_base change:${attr}_modifier change:${attr}_temp change:${attr}_temp_flag`, () => {
update_attributes(attr);
});
});
var update_attributes = (attr) => {
// Load attribute values
getAttrs([`${attr}_base`, `${attr}_modifier`, `${attr}_temp`, `${attr}_temp_flag`], (v) => {
// Do some math to calculate the total
const bas = parseInt(v[`${attr}_base`]) || 0;
const mod = parseInt(v[`${attr}_modifier`]) || 0;
const tem = (v[`${attr}_temp_flag`] === "on") ? parseInt(v[`${attr}_temp`]) || 0 : 0;
const bon = mod + tem;
const stat = bas + bon;
// Update the finalized total
setAttrs({
[attr]: stat,
[`display_${attr}`]: bon === 0 ? bas : `${bas} (${stat})`
});
});
};
// Update the essence count (6 - aug_mods - calculated augmentation costs = total)
var update_essence = () => {
let ess = 6;
getSectionIDs("augmentations", (ids) => {
_.each(ids, (id) => {
getAttrs([`repeating_augmentations_${id}_essence_cost`], (aug_ess) => {
ess -= aug_ess[`repeating_augmentations_${id}_essence_cost`];
aug_cost = 6 - parseFloat(ess);
setAttrs({
essence: parseFloat(ess).toFixed(2),
aug_essence_cost: parseFloat(aug_cost).toFixed(2)
});
});
});
getAttrs(['essence_mod', 'magic', 'matrix_device_essence_cost'], (a) => {
var em = 0;
if(! isNaN(a['essence_mod']) && a['essence_mod'] !== '') {
em = a['essence_mod'];
}
ess += parseFloat(em);
ess -= parseFloat(a['matrix_device_essence_cost']) || 0;
// Trying to update magic as essence drops but it's not a simple process will revisit later
// var magic = 0;
// if(! isNaN(a['magic']) && a['magic'] !== '') {
// magic = a['magic'];
// }
setAttrs({
essence: parseFloat(ess).toFixed(2)
});
});
});
};
//This function watches for changes to augmentations and updates recalculates essence
on("change:essence_mod remove:repeating_augmentations change:repeating_augmentations:essence_cost change:matrix_device_essence_cost", (eventInfo) => {
update_essence();
});
// Catch changes to magic, tradition, logic, intuition or charisma to update magic AR
on("change:magic change:tradition change:logic change:intuition change:charisma change:spell_drain_attribute_1 change:spell_drain_attribute_2", (eventInfo) => {
getAttrs(["sheet_type", "magic", "tradition", "logic", "intuition", "charisma", "spell_drain_attribute_1", "spell_drain_attribute_2"], (v) => {
var magic_ar = v.magic;
// do magic_ar different for grunts and spirits
if(v.sheet_type === 'grunt' || v.sheet_type === 'spirit') {
var drain_attr = v.spell_drain_attribute_2;
drain_attr = drain_attr.replace("@{", "");
drain_attr = drain_attr.replace("}", "");
magic_ar = parseInt(v.magic) + parseInt(v[`${drain_attr}`]);
setAttrs({
'magic_ar': magic_ar
});
return;
}
tradition_attribute = 'Charisma';
switch(v.tradition) {
case "Hermeticism":
case "Hermeticism (Logic)":
case "Shamanism (Logic)":
magic_ar += v.logic;
tradition_attribute = 'Logic';
break;
case "Hermeticism (Intuition)":
case "Shamanism (Intuition)":
magic_ar += v.intuition;
tradition_attribute = 'Intuition';
break;
case "Shamanism":
case "Shamanism (Charisma)":
case "Hermeticism (Charisma)":
magic_ar += v.charisma;
tradition_attribute = 'Charisma';
break;
default:
magic_ar = 0;
break;
}
setAttrs({
'magic_ar': magic_ar,
'tradition_attribute': tradition_attribute
});
});
});
/********************************************************/
/* MATRIX TAB SHEET WORKERS */
/********************************************************/
//This function watches for changes to repeating_devices and updates the ASDF and Device Rating as needed
on("change:repeating_devices remove:repeating_devices", (eventInfo) => {
const source = eventInfo.sourceAttribute;
const newV = eventInfo.newValue;
// sum repeating device matrix initiative bonuses and essence costs
getSectionIDs('devices', function(ids) {
var matrix_bonus = 0;
var essence_cost = 0;
ids.forEach(id => {
getAttrs([`repeating_devices_${id}_matrix_initiative_bonus`, `repeating_devices_${id}_essence_cost`], (a) => {
matrix_bonus += parseInt(a[`repeating_devices_${id}_matrix_initiative_bonus`]) || 0;
essence_cost += parseFloat(a[`repeating_devices_${id}_essence_cost`]) || 0;
setAttrs({
matrix_device_initiative_bonus: matrix_bonus,
matrix_device_essence_cost: essence_cost
});
});
});
// If the device list is empty update these to 0 which triggers recalculations.
if(ids.length == 0) {
setAttrs({
matrix_device_initiative_bonus: 0,
matrix_device_essence_cost: 0,
matrix_device_rating: 0
});
}
});
// Get a bunch of attributes (device rating, primary, ASDF, condition monitor, condition monitor max)
getAttrs(['attr_matrix_con', 'attr_condition_monitor_link', 'repeating_device_name', 'repeating_device_device_rating', 'repeating_device_primary_device', 'repeating_device_attack', 'repeating_device_attack_primary', 'repeating_device_sleaze', 'repeating_device_sleaze_primary', 'repeating_device_data_processing', 'repeating_device_data_processing_primary', 'repeating_device_firewall', 'repeating_device_firewall_primary', 'repeating_device_condition_monitor', 'repeating_device_condition_monitor_max', 'repeating_device_matrix_initiative_bonus'], (v) => {
var toUpdate = {};
// Check if the event was related to the primary flag being turned on (we'll need to recalculate
if(source.includes('primary_device') && newV == '1') {
// Update the attr_matrix_device_rating
toUpdate['matrix_device_rating'] = v['repeating_device_device_rating'] || 0;
// Update condition_monitor_link with the full id of this device
toUpdate['condition_monitor_link'] = eventInfo.triggerName;
// Update matrix_hex with the new condition
toUpdate['matrix_hex'] = v['repeating_device_condition_monitor'] || 0;
// Update matrix_hex with the new condition
toUpdate['matrix_hex_max'] = v['repeating_device_condition_monitor_max'] || 0;
// Uncheck 'primary' from other devices
getSectionIDs('devices', function(ids) {
var updates = {};
ids.forEach(id => {
if('repeating_devices_'+id != eventInfo.triggerName) {
updates[`repeating_devices_${id}_primary_device`] = 0;
}
});
setAttrs(updates);
});
}
/* When the device rating changes so should the Condition Monitor Max ONLY IF they haven't entered something there already*/
if(source.includes('device_rating')) {
if(! v['repeating_device_condition_monitor_max']) {
var device_condition_monitor_max = 8 + Math.ceil(v['repeating_device_device_rating'] / 2)
toUpdate[`${eventInfo.triggerName}_condition_monitor_max`] = device_condition_monitor_max;
if(typeof(v['repeating_device_condition_monitor']) == 'undefined') {
toUpdate[`${eventInfo.triggerName}_condition_monitor`] = device_condition_monitor_max;
}
}
}
/* If they changed the device's condition monitor update the hexes ONLY IF THIS IS THE PRIMARY DEVICE */
if(source.includes('condition_monitor') && v['repeating_device_primary_device'] == '1') {
// Update matrix_hex with the new condition
toUpdate['matrix_hex'] = v['repeating_device_condition_monitor'] || 0;
}
/* If they changed an attribute
If the attribute from this device is used by the persona
Update the persona attribute as well
*/
['attack', 'sleaze', 'data_processing', 'firewall'].forEach(attr => {
if(source.includes(`${attr}`)) {
// one of the attrs changed, is it the primary for the persona?
if(v[`repeating_device_${attr}_primary`] == '1') {
toUpdate[`${attr}_base`] = v[`repeating_device_${attr}`] || 0;
}
if(source.includes(`${attr}_primary`) && newV == '1') {
// If they selected the button uncheck the attribute button from other devices
getSectionIDs('devices', function(ids) {
var updates = {};
ids.forEach(id => {
if('repeating_devices_'+id != eventInfo.triggerName) {
updates[`repeating_devices_${id}_${attr}_primary`] = 0;
}
});
setAttrs(updates);
});
}
}
});
// update everything in toUpdate
setAttrs(toUpdate);
});
});
on("sheet:opened change:attack change:sleaze", (eventInfo) => {
getAttrs(['attack', 'sleaze'], (v) => {
const attack = v['attack'] || 0;
const sleaze = v['sleaze'] || 0;
setAttrs({
matrix_attack_rating: parseInt(attack) + parseInt(sleaze)
});
});
});
on("sheet:opened change:data_processing change:firewall change:matrix_defense_rating_modifier", (eventInfo) => {
getAttrs(['data_processing', 'firewall', 'matrix_defense_rating_modifier'], (v) => {
const data_processing = v['data_processing'] || 0;
const firewall = v['firewall'] || 0;
const matrix_defense_rating_modifier = v['matrix_defense_rating_modifier'] || 0;
setAttrs({
matrix_defense_rating: parseInt(data_processing) + parseInt(firewall) + parseInt(matrix_defense_rating_modifier)
});
});
});
on("change:willpower change:logic change:intuition change:charisma change:flag_special", (eventInfo) => {
techno_update();
});
var techno_update = () => {
getAttrs(['willpower', 'logic', 'intuition', 'charisma', 'flag_special'], (v) => {
if(v['flag_special'] == 'resonance') {
setAttrs({
attack_base: v['charisma'],
sleaze_base: v['intuition'],
data_processing_base: v['logic'],
firewall_base: v['willpower'],
});
}
});
};
/* condition monitor hex change updates device condition monitor */
on("change:matrix_hex", (eventInfo) => {
getAttrs(['matrix_hex', 'condition_monitor_link'], (v) => {
setAttrs({
[`${v['condition_monitor_link']}_condition_monitor`]: v['matrix_hex']
});
});
});
/* Complex Forms Sheetworkers */
on("change:electronics change:resonance", (eventInfo) => {
getAttrs(['electronics', 'resonance'], (v) => {
var complex_forms_attack_rating = parseInt(v['electronics']) || 0;
complex_forms_attack_rating += parseInt(v['resonance']) || 0;
setAttrs({
'complex_form_attack_rating': complex_forms_attack_rating
});
});
});
//This function checks changes to repeating_armor and updates the Primary Armor if needed
on("change:repeating_armor change:body change:charisma", (eventInfo) => {
const source = eventInfo.sourceAttribute;
const newV = eventInfo.newValue;
const arm = ["repeating_armor"];
const armors = [`${arm}_name`, `${arm}_rating`, `${arm}_chem_modifier`, `${arm}_elec_modifier`, `${arm}_cold_modifier`,`${arm}_fire_modifier`, `${arm}_dicepool_modifier`];
//Check if the event was related to the primary flag & armor is set to primary
if (source.includes('primary') && newV === 'primary') {
//Get attributes from the repeating_armor
getAttrs(armors, (v) => {
let update = {};
//Update the hidden static Primary Armor attributes with the repeating_armor attributes
_.each(armors, (armor) => {
const name = (armor.includes("name") || armor.includes("rating")) ? armor.split("repeating_")[1] : armor.split(`${arm}_`)[1];
update[`${name}`] = v[`${armor}`];
});
setAttrs(update);
});
//Set the other repeating_armor primary flags to 0 aka unchecked
getSectionIDs(`${arm}`, function(ids) {
let IDs = [];
let update = {};
for(var i=0; i < ids.length; i++) {
IDs.push(`${arm}_` + ids[i] + "_primary");
};
IDs.forEach(id => {
if (id != source) {
update[`${id}`] = 0;
};
});
setAttrs(update);
});
//Check if the event was for a relevant Primary Armor attribute
} else if (source.includes('name') || source.includes('rating') || source.includes('dicepool') || source.includes('chem') || source.includes('cold') || source.includes('elec') || source.includes('fire')) {
//Get the primary flag attribute for this armor. Also get the repeating_armor attribute we'll need for an update, doing it now is more efficient.
getAttrs([`${arm}_primary`, `${source}`], (v) => {
//Check if this armor is the designated Primary Armor.
if (v[`${arm}_primary`] === 'primary') {
let update = {};
//Apply the repeating_armor attribute to its static counterpart
switch (true) {
case /name/.test(source) :
update["armor_name"] = v[`${source}`];
break;
case /rating/.test(source) :
update["armor_rating"] = v[`${source}`];
break;
case /dicepool/.test(source) :
update["soak_modifier"] = v[`${source}`];
break;
case /chem/.test(source) :
update["chem_modifier"] = v[`${source}`];
break;
case /cold/.test(source) :
update["cold_modifier"] = v[`${source}`];
break;
case /elec/.test(source):
update["elec_modifier"] = v[`${source}`];
break;
case /fire/.test(source) :
update["fire_modifier"] = v[`${source}`];
break;
default:
console.log(`Source ${source} was invalid`);
}
setAttrs(update);
};
});
}
// Update DR and resists on Core Combat Info -> Armor section
getSectionIDs("armor", function(ids) {
// Update rating and resist totals
let ratingTot = 0,
chemTot = 0,
coldTot = 0,
elecTot = 0,
fireTot = 0,
socialTot = 0;
getAttrs(['body', 'charisma'], (v) => {
ratingTot = v['body'];
socialTot = v['charisma'];
});
ids.forEach(id => {
var armorFields = [`${arm}_${id}_rating`, `${arm}_${id}_chem`, `${arm}_${id}_cold`, `${arm}_${id}_elec`, `${arm}_${id}_fire`, `${arm}_${id}_social`, `${arm}_${id}_primary`, `${arm}_${id}_cumulative`];
getAttrs(armorFields, (af) => {
if(af[`${arm}_${id}_primary`] != 0 || af[`${arm}_${id}_cumulative`] != 0) {
ratingTot += parseInt(af[`${arm}_${id}_rating`]);
socialTot += parseInt(af[`${arm}_${id}_social`]);
}
chemTot += parseInt(af[`${arm}_${id}_chem`]);
coldTot += parseInt(af[`${arm}_${id}_cold`]);
elecTot += parseInt(af[`${arm}_${id}_elec`]);
fireTot += parseInt(af[`${arm}_${id}_fire`]);
setAttrs({
'armor_rating': ratingTot,
'resist_cold_total': coldTot,
'resist_chem_total': chemTot,
'resist_elec_total': elecTot,
'resist_fire_total': fireTot,
'social_rating': socialTot,
});
});
});
});
});
// COMMON ROLLS: MEMORY, JUDGE INTENTIONS, COMPOSURE, LIFT & CARRY, OVERFLOW, DEFENSE, & SOAK ROLLS
const update_common_rolls = (attrs) => {
getAttrs(attrs, (v) => {
const found = attrs.find((mod) => { return mod.includes("_modifier") });
const name = found.split("_modifier")[0];
let numbers = [];
//DEFENSE & SOAK HAVE TWO EXTRA ATTRIBUTES. TEMP IS NEEDED BUT ONLY IF THE FLAG IS CHECKED IN SETTINGS
const array = (name === "defense" || name === "soak") ? (v[`${name}_temp_flag`] === "on") ? attrs.splice(0, 4) : attrs.splice(0, 3) : attrs;
_.each(array, (attr) => {
numbers.push(parseInt(v[`${attr}`]) || 0);
});
const add = (a, b) => a + b, sum = numbers.reduce(add);
setAttrs({[`${name}`]: sum});
});
};
//Update condition tracks
const update_track = (track) => {
let attrs = [`${track}_modifier`, `${track}_damage`];
(track === "stun") ? attrs.push("willpower") : attrs.push("body", "sheet_type", "flag_drone");
getAttrs(attrs, (v) =>{
const attr1 = attrs[2], stat1 = parseInt(v[`${attr1}`]) || 0; //Willpower or Body
const mod = parseInt(v[`${track}_modifier`]) || 0;
const dam = parseInt(v[`${track}_damage`]) || 0;
let update = {};
if (track === "stun" || v["sheet_type"] === "pc" || v["sheet_type"] === "grunt") {
tot = Math.ceil(stat1/2) + 8 + mod;
} else if (v["sheet_type"] === "vehicle" && v["flag_drone"] === "drone") {
tot = (Math.ceil(stat1/2) + 8 + mod);
} else if (v["sheet_type"] === "vehicle") {
tot = (Math.ceil(stat1/2) + 8 + mod);
} else if (v["sheet_type"] === "spirit") {
// spirits are auto calculated
return;
} else {
tot = 0; //Sprites don't have Stun or Physical track
};
const current = (dam != 0) ? tot - dam : tot;
update[`${track}`] = current;
update[`${track}_max`] = tot;
setAttrs(update, {silent:true});
});
};
//Calculate Device Rating Track
on("change:device_rating change:matrix_modifier change:sensor", () => {
getAttrs(["sheet_type", "device_rating","matrix_modifier","matrix", "sensor"], (v) =>{
if(v.sheet_type == "vehicle") {
dev = parseInt(v.sensor) || 0;
mod = parseInt(v.matrix_modifier) || 0;
} else {
dev = parseInt(v.device_rating) || 0;
mod = parseInt(v.matrix_modifier) || 0;
}
const dam = parseInt(v.matrix) || 0;
const tot = Math.ceil(dev/2) + 8 + mod;
const current = (dam > 0) ? dam : tot;
setAttrs({matrix: current});
setAttrs({matrix_max: tot});
});
});
//Convert physical into the physical damage track boxes and reverse
['physical', 'stun'].forEach(attr => {
on(`change:${attr} change:${attr}_damage`, (eventInfo) => {
getAttrs([`${attr}`, `${attr}_damage`, `${attr}_max`, 'sheet_type'], (v) => {
const stat = parseInt(v[`${attr}`]) || 0,
dam = parseInt(v[`${attr}_damage`]) || 0,
max = parseInt(v[`${attr}_max`]) || 0,
source = eventInfo.sourceAttribute;
const wou = (source === `${attr}`) ? max - stat : max - dam;
if (source === `${attr}`) {
(dam === wou) ? false : ((stat < max && dam != wou) ? setAttrs({[`${attr}_damage`]: wou}, {silent: true}) : setAttrs({[`${attr}_damage`]: 0}, {silent: true}));
} else {
(stat === wou) ? false : setAttrs({[`${attr}`]: wou}, {silent: true});
};
update_wounds();
});
});
});
const update_wounds = () => {
getAttrs(["sheet_type", "stun_damage", "physical_damage", "pain_tolerance", "phys_wound_threshold", "stun_wound_threshold", "resist_pain", "damage_compensator"], (v) => {
let stu = parseInt(v.stun_damage) || 0,
phy = parseInt(v.physical_damage) || 0,
pain_tolerance = parseInt(v.pain_tolerance) || 0,
phys_thresh = parseInt(v.phys_wound_threshold) || 3,
stun_thresh = parseInt(v.stun_wound_threshold) || 3;
console.log(v);
if(v.sheet_type == 'grunt') {
phys_thresh = 2,
stun_thresh = 2;
}
//console.log(v);
//console.log("stu: "+stu+"\nphy: "+phy+"\npain_tolerance: "+pain_tolerance+"\nphys_thresh: "+phys_thresh+"\nstun_thresh: "+stun_thresh);
// Damage Compensator
if(v.damage_compensator > 0) {
p_int = Math.floor(phy / phys_thresh) || 0;
p_modulus = phy % phys_thresh || 0;
s_int = Math.floor(stu / stun_thresh) || 0;
s_modulus = stu % stun_thresh || 0;
dcomp = parseInt(v.damage_compensator);
//console.log("p_int: "+p_int+"\np_modulus: "+p_modulus+"\ns_int: "+s_int+"\ns_modulus: "+s_modulus);
//console.log("dcomp: "+dcomp);
if(p_int > 0 && s_int > 0) {
// both have wound mods
//console.log("both phys and stun");
// if dcomp can wipe out both modulus + 2 (effectively removing 2 penalty dice) do it
// if not but it is greater than p_modulus + 1 or s_modulus + 1 get rid of one of the penalty dice
if(dcomp >= (p_modulus + s_modulus + 2)) {
phy -= (p_modulus + 1);
stu -= (s_modulus + 1);
dcomp -= (p_modulus + s_modulus + 2);
} else if(dcomp > (p_modulus + 1)) {
phy -= (p_modulus + 1);
dcomp -= (p_modulus + 1);
} else if(dcomp > (s_modulus + 1)) {
stu -= (s_modulus + 1);
dcomp -= (s_modulus + 1);
}
//console.log("phy: "+phy+"\nstu: "+stu+"\ndcomp: "+dcomp);
// If there's still dcomp to use up if it's greater than phy_threshold or stu_threshold and they have penalties wipe them out.
//console.log((phy - (phys_thresh - 1)) + (stu - (stun_thresh - 1)));
if(dcomp >= (phy - (phys_thresh - 1)) + (stu - (stun_thresh - 1))) {
phy = phys_thresh - 1;
stu = stun_thresh - 1;
}
//console.log("phy: "+phy+"\nstu: "+stu+"\ndcomp: "+dcomp);
if(phys_thresh == stun_thresh || phys_thresh > stun_thresh) {
// stun has the lower threshold or they're the same, knock it's penalties out first
while((dcomp >= phys_thresh || dcomp >= stun_thresh) && (phy > phys_thresh || stu > stun_thresh)) {
if(dcomp >= stun_thresh && stu > stun_thresh - 1) {
stu -= stun_thresh;
dcomp -= stun_thresh;
//console.log("lowering stu by: "+stun_thresh+"\ndcomp: "+dcomp);
} else if(dcomp >= phys_thresh && phy > phys_thresh - 1) {
phy -= phys_thresh;
dcomp -= phys_thresh;
//console.log("lowering phy by: "+phys_thresh+"\ndcomp: "+dcomp);
} else {
//console.log("breaking, phy: "+phy+" stu: "+stu+" dcomp: "+dcomp);
break;
}
}
} else {
// physical has the lower threshold, knock it's penalties out first
while(dcomp >= phys_thresh && dcomp > stun_thresh && phy >= phys_thresh && stu > stun_thresh) {
if(dcomp >= phys_thresh && phy > phys_thresh - 1) {
phy -= phys_thresh;
dcomp -= phys_thresh;
} else if(dcomp >= stun_thresh && stu > stun_thresh - 1) {
stu -= stun_thresh;
dcomp -= stun_thresh;
} else {
break;
}
}
}
//console.log("phy: "+phy+"\nstu: "+stu);
} else if(p_int > 0) {
// physical is the only one impacting the PC
//console.log("just phys");
if(phy > v.damage_compensator) {
phy = phy - parseInt(v.damage_compensator);
} else {
phy = 0;
}
//console.log("phy now: "+phy);
} else if(s_int > 0) {
// stun is the only one impacting the PC
//console.log("just stun");
if(stu > v.damage_compensator) {
stu = stu - parseInt(v.damage_compensator);
} else {
stu = 0;
}
//console.log("stu now: "+stu);
} else {
// neither is impacting the PC
//console.log("neither phys nor stun");
}
}
pMod = (phy > 0) ? (Math.floor(phy / phys_thresh)) : 0;
sMod = (stu > 0) ? (Math.floor(stu / stun_thresh)) : 0;
//console.log("pMod: "+pMod+"\nsMod: "+sMod);
wou = Math.floor(-(pMod) + -(sMod));
//console.log("wou: "+wou);
// Pain Tolerance (high or low)
if(pain_tolerance < 0) {
wou = wou * 2;
} else if(pain_tolerance > 0 && wou < 0) {
wou = wou + 1;
}
//console.log("post pain_tolerance wou: "+wou);
// Resist Pain
if(v.resist_pain > 0) {
wou = wou + parseInt(v.resist_pain);
if(wou > 0) {
wou = 0;
}
}
//console.log("post resist_pain wou: "+wou);
setAttrs({wounds: wou});
});
};
// Trigger initiative updates
['initiative_mod', 'initiative_dice_mod', 'initiative_temp', 'initiative_temp_flag', 'initiative_dice_temp', 'initiative_dice_temp_flag', 'pilot'].forEach(attr => {
on(`change:${attr}`, (eventInfo) => {
update_initiative();
});
});
//Calculate Initiative
var update_initiative = () => {
getAttrs(["sheet_type", "pilot", "reaction", "intuition", "initiative_mod", "initiative_temp", "initiative_temp_flag", "initiative_dice_mod", "initiative_dice_temp", "initiative_dice_temp_flag"], (v) => {
if(v.sheet_type === 'spirit') {
// spirit initiative is auto-calculated elsewhere
return;
}
const rea = parseInt(v.reaction) || 0;
const int = parseInt(v.intuition) || 0;
const mod = parseInt(v.initiative_mod) || 0;
const tmp = (v.initiative_temp_flag === "on") ? parseInt(v.initiative_temp) || 0 : 0;
var bas = rea + int;
var tot = rea + int + mod + tmp;
const dice_mod = parseInt(v.initiative_dice_mod) || 0;
const dice_tmp = (v.initiative_dice_temp_flag === "on") ? parseInt(v.initiative_dice_temp) || 0 : 0;
var dice_tot = 1 + dice_mod + dice_tmp;
if(v.sheet_type === 'vehicle') {
bas = v.pilot * 2 || 0;
tot = bas + mod + tmp;
dice_tot = 4 + dice_mod + dice_tmp;
}
let update = {};
update["initiative_base"] = tot;
update["display_initiative_base"] = (mod != 0 || tmp != 0) ? `${bas} (${tot})` : bas;
update["initiative_dice"] = dice_tot;
setAttrs(update);
});
};
// Trigger astral initiative updates
['astral_initiative_mod', 'astral_initiative_dice_mod', 'astral_initiative_temp', 'astral_initiative_temp_flag', 'astral_initiative_dice_temp', 'astral_initiative_dice_temp_flag', 'intuition', 'logic'].forEach(attr => {
on(`change:${attr}`, (eventInfo) => {
update_astral_initiative();
});
});
//Calculate Astral Initiative
var update_astral_initiative = () => {
getAttrs(["intuition", "logic", "astral_initiative_mod", "astral_initiative_temp", "astral_initiative_temp_flag", "astral_initiative_dice_mod", "astral_initiative_dice_temp", "astral_initiative_dice_temp_flag"], (v) => {
const int = parseInt(v.intuition) || 0;
const log = parseInt(v.logic) || 0;
const mod = parseInt(v.astral_initiative_mod) || 0;
const tmp = (v.astral_initiative_temp_flag === "on") ? parseInt(v.astral_initiative_temp) || 0 : 0;
const bas = int + log;
const tot = int + log + mod + tmp;
const dice_mod = parseInt(v.astral_initiative_dice_mod) || 0;
const dice_tmp = (v.astral_initiative_dice_temp_flag === "on") ? parseInt(v.astral_initiative_dice_temp) || 0 : 0;
const dice_tot = 2 + dice_mod + dice_tmp;
let update = {};
update["astral_initiative_base"] = tot;
update["display_astral_initiative_base"] = (mod != 0 || tmp != 0) ? `${bas} (${tot})` : bas;
update["astral_initiative_dice"] = dice_tot;
setAttrs(update);
});
};
//Calculate Matrix Initiatve.
on("change:host_rating change:data_processing change:intuition change:reaction change:level change:matrix_initiative_mod change:matrix_initiative_dice_mod change:matrix_initiative_temp change:matrix_initiative_temp_flag change:matrix_initiative_dice_temp change:matrix_initiative_dice_temp_flag change:cold_sim_initiative_mod change:cold_sim_initiative_dice_mod change:cold_sim_initiative_temp change:cold_sim_initiative_temp_flag change:cold_sim_initiative_dice_temp change:cold_sim_initiative_dice_temp_flag change:hot_sim_initiative_mod change:hot_sim_initiative_dice_mod change:hot_sim_initiative_temp change:hot_sim_initiative_temp_flag change:hot_sim_initiative_dice_temp change:hot_sim_initiative_dice_temp_flag change:matrix_device_initiative_bonus", (eventInfo) => {
update_matrix_initiative();
});
var update_matrix_initiative = () => {
getAttrs(["sheet_type", "data_processing", "pilot", "intuition", "reaction", "host_rating", "level", "matrix_initiative_mod", "matrix_initiative_dice_mod", "matrix_initiative_temp", "matrix_initiative_temp_flag", "matrix_initiative_dice_temp", "matrix_initiative_dice_temp_flag", "cold_sim_initiative_mod", "cold_sim_initiative_dice_mod", "cold_sim_initiative_temp", "cold_sim_initiative_temp_flag", "cold_sim_initiative_dice_temp", "cold_sim_initiative_dice_temp_flag", "hot_sim_initiative_mod", "hot_sim_initiative_dice_mod", "hot_sim_initiative_temp", "hot_sim_initiative_temp_flag", "hot_sim_initiative_dice_temp", "hot_sim_initiative_dice_temp_flag", "matrix_device_initiative_bonus"], (v) => {
const dat = parseInt(v.data_processing) || 0;
const pil = parseInt(v.pilot) || 0;
const int = parseInt(v.intuition) || 0;
const rea = parseInt(v.reaction) || 0;
const hos = parseInt(v.host_rating) || 0;
const lev = parseInt(v.level) || 0;
const dev = parseInt(v.matrix_device_initiative_bonus) || 0;
const init_mod = parseInt(v.matrix_initiative_mod) || 0;
const cold_sim_init_mod = parseInt(v.cold_sim_initiative_mod) || 0;
const hot_sim_init_mod = parseInt(v.hot_sim_initiative_mod) || 0;
const dice_mod = parseInt(v.matrix_initiative_dice_mod) || 0;
const cold_sim_dice_mod = parseInt(v.cold_sim_initiative_dice_mod) || 0;
const hot_sim_dice_mod = parseInt(v.hot_sim_initiative_dice_mod) || 0;
const tmp = (v.matrix_initiative_temp_flag === "on") ? parseInt(v.matrix_initiative_temp) || 0 : 0;
const dice_tmp = (v.matrix_initiative_dice_temp_flag === "on") ? parseInt(v.matrix_initiative_dice_temp) || 0 : 0;
const cold_tmp = (v.cold_sim_initiative_temp_flag === "on") ? parseInt(v.cold_sim_initiative_temp) || 0 : 0;
const cold_dice_tmp = (v.cold_sim_initiative_dice_temp_flag === "on") ? parseInt(v.cold_sim_initiative_dice_temp) || 0 : 0;
const hot_tmp = (v.hot_sim_initiative_temp_flag === "on") ? parseInt(v.hot_sim_initiative_temp) || 0 : 0;
const hot_dice_tmp = (v.hot_sim_initiative_dice_temp_flag === "on") ? parseInt(v.hot_sim_initiative_dice_temp) || 0 : 0;
let update = {};
matrix_dice = 1;
cold_sim_dice = 2;
hot_sim_dice = 3;
switch(v.sheet_type) {
case 'pc':
matrix_tot = rea + int + init_mod + tmp;
matrix_dice = matrix_dice + dice_mod + dice_tmp;
cold_sim_tot = int + dat + cold_sim_init_mod + cold_tmp;
cold_sim_dice = cold_sim_dice + dev + cold_sim_dice_mod + cold_dice_tmp;
hot_sim_tot = int + dat + hot_sim_init_mod + hot_tmp;
hot_sim_dice = hot_sim_dice + dev + hot_sim_dice_mod + hot_dice_tmp;
break;
case 'sprite':
/* Handled when spirit_type and force are changed */
return;
case 'vehicle':
matrix_tot = pil + pil;
cold_sim_tot = pil + pil;
hot_sim_tot = pil + pil;
hot_sim_dice = 4;
break;
case 'host':
hot_sim_tot = dat + dat;
cold_sim_tot = hot_sim_tot;
matrix_tot = hot_sim_tot;
break;
case 'sprite':
/* Handled when sprite_type and level are changed */
return;
default:
matrix_tot = rea + int;
cold_sim_tot = int + dat;
hot_sim_tot = int + dat;
break;
}
update["matrix_initiative_base"] = matrix_tot;
update["matrix_initiative_dice"] = matrix_dice;
update["cold_sim_initiative_base"] = cold_sim_tot;
update["cold_sim_initiative_dice"] = cold_sim_dice;
update["hot_sim_initiative_base"] = hot_sim_tot;
update["hot_sim_initiative_dice"] = hot_sim_dice;
setAttrs(update);
});
};
//Edge toggle to include ! for exploding dice
on("change:edge_toggle", () => {
getAttrs(["edge_toggle"], (v) =>{
edg = (v.edge_toggle != 0) ? "!" : "";
setAttrs({explode_toggle: edg});
});
});
//Calculate Reset Condition Track
on("clicked:cond_reset", () => {
getAttrs(["sheet_type","physical_max","stun_max", "matrix_max"], (v) => {
var phy = parseInt(v.physical_max) || 0;
var stun = parseInt(v.stun_max) || 0;
var mat = parseInt(v.matrix_max) || 0;
let update = {};
if (v.sheet_type === "grunt" || v.sheet_type === "pc") {
update["physical"] = phy;
update["stun"] = stun;
} else if (v.sheet_type === "sprite") {
update["matrix"] = mat;
} else if (v.sheet_type === "vehicle") {
update["physical"] = phy;
update["matrix"] = mat;
} else {
return "Not a grunt or vehicle";
};
setAttrs(update);
});
});
on("clicked:cond_reset_physical clicked:cond_reset_stun", (eventInfo) => {
const attr = eventInfo.triggerName.split("_")[2];
setAttrs({
[`${attr}_damage`] : 0
});
});
//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_name";
getAttrs([`${source}_range`, `${source}_type`, `${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_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('dv', 'DV'),
b('mode'),
ammo ? `${ammo} (c)` : '',
b('note')
];
case '1': return [
b('type'),
b('dv', 'DV'),
b('note')
];
default: return [
b('type'),
b('dv', 'DV'),
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});
});
});
//IC displays are set into an Array
on("change:repeating_IC", () => {
getAttrs(["host_rating", "attack", "data_processing", "repeating_IC_attribute", "repeating_IC_matrix", "repeating_IC_notes"], (v) =>{
const host = v.host_rating;
const att = parseInt(v.attack) || 0;
const data = parseInt(v.data_processing) || 0;
const attr = v.repeating_IC_attribute;
const mat = v.repeating_IC_matrix;
const not = v.repeating_notes;
var def = 'None';
if(attr == 'None' && mat == 'None') {
def = 'None';
} else {
def = `${attr} \+ ${mat}`;
}
setAttrs({
repeating_IC_defense: def
});
});
});
//IC Attack Dice & Condition Track
on("change:host_rating", () => {
getAttrs(["host_rating"], (v) => {
var hos = parseInt(v.host_rating) || 0;
var tot = 8 + Math.ceil(hos/2);
var atk = Math.min(hos + hos);
setAttrs({matrix: tot});
setAttrs({ic_attack: atk});
});
});
//Sprite Condition Track
on("change:level", () => {
getAttrs(["level"], (v) => {
var lev = parseInt(v.level) || 0;
var tot = 8 + Math.ceil(lev/2);
setAttrs({matrix: tot});
});
});
on("change:repeating_skills:name", (eventInfo) => {
console.log(eventInfo);
update_skill_attribute(eventInfo.triggerName.replace('_name', ''), eventInfo.newValue);
});
var update_skill_attribute = (prefix, skill) => {
var skill_name_simplified = skill.toLowerCase().replace(/\s/g, '');
var skill_name_translated = getTranslationByKey(skill_name_simplified);
switch(skill) {
case 'Athletics':
case 'Close Combat':
case 'Exotic Weapons':
case 'Firearms':
case 'Stealth':
translation = getTranslationByKey("agility");
setAttrs({[`${prefix}_display_name`]: skill_name_translated, [`${prefix}_attribute`]: '@{agility}', [`${prefix}_display_attribute`]: translation});
break;
case 'Con':
case 'Influence':
translation = getTranslationByKey("charisma");
setAttrs({[`${prefix}_display_name`]: skill_name_translated, [`${prefix}_attribute`]: '@{charisma}', [`${prefix}_display_attribute`]: translation});
break;
case 'Astral':
case 'Outdoors':
case 'Perception':
translation = getTranslationByKey("intuition");
setAttrs({[`${prefix}_display_name`]: skill_name_translated, [`${prefix}_attribute`]: '@{intuition}', [`${prefix}_display_attribute`]: translation});
break;
case 'Biotech':
case 'Cracking':
case 'Electronics':
case 'Engineering':
translation = getTranslationByKey("logic");
setAttrs({[`${prefix}_display_name`]: skill_name_translated, [`${prefix}_attribute`]: '@{logic}', [`${prefix}_display_attribute`]: translation});
break;
case 'Conjuring':
case 'Enchanting':
case 'Sorcery':
translation = getTranslationByKey("magic");
setAttrs({[`${prefix}_display_name`]: skill_name_translated, [`${prefix}_attribute`]: '@{magic}', [`${prefix}_display_attribute`]: translation});
break;
case 'Piloting':
translation = getTranslationByKey("reaction");
setAttrs({[`${prefix}_display_name`]: skill_name_translated, [`${prefix}_attribute`]: '@{reaction}', [`${prefix}_display_attribute`]: translation});
break;
case 'Tasking':
translation = getTranslationByKey("resonance");
setAttrs({[`${prefix}_display_name`]: skill_name_translated, [`${prefix}_attribute`]: '@{resonance}', [`${prefix}_display_attribute`]: translation});
break;
default:
translation = getTranslationByKey("agility");
setAttrs({[`${prefix}_display_name`]: skill_name_translated, [`${prefix}_attribute`]: '@{agility}', [`${prefix}_display_attribute`]: translation});
break;
}
};
//REFACTORED Skills
['repeating_skills','repeating_active','repeating_knowledge','repeating_language', 'agility', 'logic'].forEach(field => {
on(`change:${field}`, (eventInfo) => {
const source = eventInfo.sourceAttribute;
const type = eventInfo.sourceType;
// updating agility was causing this to trigger for "repeating_skills_attribute"
if(eventInfo.sourceAttribute == 'repeating_skills_attribute') {
return;
}
if (source.includes("rating")) {
getAttrs([`${field}_rating`, `${field}_rating_modifier`, `${field}_name`, 'sheet_type'], (v) => {
if(v.sheet_type == 'spirit') {
return;
}
const bas = parseInt(v[`${field}_rating`]) || 0;
const mod = parseInt(v[`${field}_rating_modifier`]) || 0;
const tot = parseInt(bas) + parseInt(mod);
const skill = v[`${field}_name`] || '';
// Update repeating melee weapon skill and rating values
getSectionIDs("melee", function(ids) {
for(var i = 0; i < ids.length; i++) {
let skillIdName = "repeating_melee_" + ids[i] + "_skill";
let skillRating = "repeating_melee_" + ids[i] + "_rating";
getAttrs([skillIdName], (v2) => {
if(v2[skillIdName] == v[`${field}_name`]) {
setAttrs({
[skillRating]: bas
});
}
});
}
});
// Update repeating range weapon skill and rating values
getSectionIDs("range", function(ids) {
for(var i = 0; i < ids.length; i++) {
let skillIdName = "repeating_range_" + ids[i] + "_skill";
let skillRating = "repeating_range_" + ids[i] + "_rating";
getAttrs([skillIdName], (v2) => {
if(v2[skillIdName] == v[`${field}_name`]) {
setAttrs({
[skillRating]: bas
});
}
});
}
});
setAttrs({
[`${field}_dicepool`]: tot,
[`${field}_rating`]: bas,
[`${field}_display_rating`]: (mod === 0) ? bas : `${bas} (${tot})`,
[skill]: bas
});
});
} else if (source.includes("logic") || source.includes("agility")) {
var diff = eventInfo.newValue - eventInfo.previousValue;
// Update repeating melee and range weapon dicepool if it uses this attribute
['range', 'melee'].forEach((type) => {
getSectionIDs(type, function(ids) {
for(var i = 0; i < ids.length; i++) {
let attr = `repeating_${type}_` + ids[i] + "_attribute";
let attr_rating = `repeating_${type}_` + ids[i] + "_attr_rating";
let pool = `repeating_${type}_` + ids[i] + "_dicepool";
getAttrs([attr, pool, 'sheet_type'], (v2) => {
if(v2.sheet_type == 'spirit' || v2.sheet_type == 'grunt' || v2.sheet_type == 'vehicle') {
return;
}
if(v2[`${attr}`].toLowerCase() == source.toLowerCase()) {
setAttrs({
[`${pool}`]: parseInt(v2[`${pool}`]) + diff,
[`${attr_rating}`]: eventInfo.newValue
});
}
});
}
});
});
} else if (source.includes("attribute") && type === "player") {
getAttrs([`${source}`], (v) => {
const attribute = v[`${source}`].slice(2, -1);
const translation = getTranslationByKey(`${attribute}`);
setAttrs({
[`${field}_display_attribute`]: translation
});
});
} else if (source.includes("spec") && type === "player") {
getAttrs([`${source}`], (v) => {
const bas = v[`${source}`];
const size = bas.length;
let display = (size >= 0 && size <= 15) ? `${bas}` : "(" + bas.slice(0, 15) + "...)";
setAttrs({
[`${field}_display_spec`]: display
});
});
} else if (source.includes("expert") && type === "player") {
getAttrs([`${source}`], (v) => {
const bas = v[`${source}`];
const size = bas.length;
let display = (size >= 0 && size <= 15) ? `${bas}` : "(" + bas.slice(0, 15) + "...)";
setAttrs({
[`${field}_display_expert`]: display
});
});
} else if (source.endsWith("skill")) {
getAttrs([`${source}`], (v) => {
const bas = v[`${source}`];
const size = bas.length;
let display = (size > 0 && size <= 20) ? bas : (size > 20 ) ? bas.slice(0, 20) + "..." : " ";
setAttrs({
[`${field}_display`]: display
});
});
} else if (source.includes("dicepool")) {
var rep_row = source.match(/(repeating_[^_]+?)_([^_]+?)_(.+)/);
var name = rep_row[1]+'_'+rep_row[2]+'_name';
getAttrs([`${source}`, `${name}`], (v) => {
const skill = v[`${name}`];
let lowercase = skill.toLowerCase();
let removeGroup = (lowercase.includes("group")) ? lowercase.slice(0, -6) : lowercase;
let skillSet = (removeGroup.includes(" ")) ? removeGroup.replace(/ /g,"") : removeGroup;
setAttrs({
[`${skillSet}`]: v[`${source}`]
});
});
} else {
// console.log('Change to '+source+' did not set attr');
};
});
});
//REFACTORED Range & MELEE UPDATES
['repeating_range','repeating_melee'].forEach(weap => {
on(`change:${weap}`, (eventInfo) => {
const source = eventInfo.sourceAttribute;
const newV = eventInfo.newValue;
const type = weap.slice(-5);
getAttrs([`${weap}_name`, `${weap}_dicepool_modifier`, `${weap}_spec`, `${weap}_expert`, `${weap}_skill`, `${weap}_attribute`, `${weap}_attr_rating`, `${weap}_primary`, `${weap}_firing_modes`, `${weap}_default_mode`, `${weap}_damage`, `${weap}_close`, `${weap}_near`, `${weap}_medium`, `${weap}_far`, `${weap}_extreme`, `sheet_type`], (v) => {
if(v.sheet_type != 'pc') {
return;
}
const mod = parseInt(v[`${weap}_dicepool_modifier`]) || 0;
const spec = parseInt(v[`${weap}_spec`]) || 0;
const expert = parseInt(v[`${weap}_expert`]) || 0;
const skill = v[`${weap}_skill`] || '';
var attribute = 'Agility';
switch(skill) {
case 'Engineering':
attribute = 'Logic';
break;
case 'Firearms':
case 'Close Combat':
case 'Athletics':
case 'Exotic Weapons':
attribute = 'Agility';
break;
}
getAttrs([`${skill}`, `${attribute}`], (s) => {
rating = s[`${skill}`] || -1;
if(rating <= 0) {
rating = -1;
}
attr = s[`${attribute}`] || 1;
const tot = parseInt(attr) + parseInt(mod) + parseInt(spec) + parseInt(expert) + parseInt(rating);
setAttrs({
[`${weap}_rating`]: rating,
[`${weap}_dicepool`]: tot,
[`${weap}_attribute`]: attribute,
[`${weap}_attr_rating`]: attr
});
});
/* if it is the primary weapon any update needs to be reflected on Core->Arms */
if (v[`${weap}_primary`] === "primary") {
//Shared attributes names.
let array = ["dicepool", "dicepool_modifier", "name", "damage", "skill", "rating", "close", "near", "medium", "far", "extreme", "spec", "expert", "attribute", "attr_rating", "default_mode"];
//Add the range or melee specific ones
if(type === "range") {
array.push("ammo", "ammo_max", "mode");
// update the primary range firing modes available
var modes = v[`repeating_range_firing_modes`].split(/\s*\/\s*/i);
var toEnable = {
primary_range_weapon_mode_singleshot: 0,
[`${weap}_singleshot`]: 0,
primary_range_weapon_mode_semiauto: 0,
[`${weap}_semiauto`]: 0,
primary_range_weapon_mode_burst: 0,
[`${weap}_burst`]: 0,
primary_range_weapon_mode_burstwide: 0,
[`${weap}_burstwide`]: 0,
primary_range_weapon_mode_fullauto: 0,
[`${weap}_fullauto`]: 0,
primary_range_weapon_mode_other: 0,
[`${weap}_other`]: 0,
};
modes.forEach(mode => {
switch(mode.toUpperCase()) {
case 'SS':
toEnable.primary_range_weapon_mode_singleshot = 1;
toEnable[`${weap}_singleshot`] = 1;
break;
case 'SA':
toEnable.primary_range_weapon_mode_semiauto = 1;
toEnable[`${weap}_semiauto`] = 1;
break;
case 'BF':
toEnable.primary_range_weapon_mode_burst = 1;
toEnable[`${weap}_burst`] = 1;
break;
case 'BW':
toEnable.primary_range_weapon_mode_burstwide = 1;
toEnable[`${weap}_burstwide`] = 1;
break;
case 'FA':
toEnable.primary_range_weapon_mode_fullauto = 1;
toEnable[`${weap}_fullauto`] = 1;
break;
default:
toEnable.primary_range_weapon_mode_other = 1;
toEnable[`${weap}_other`] = 1;
break;
};
});
// save the weapon's damage and ARs to the primary base for use in the firing mode calculator
toEnable.primary_range_weapon_base_damage = v[`${weap}_damage`];
toEnable.primary_range_weapon_base_close = v[`${weap}_close`];
toEnable.primary_range_weapon_base_near = v[`${weap}_near`];
toEnable.primary_range_weapon_base_medium = v[`${weap}_medium`];
toEnable.primary_range_weapon_base_far = v[`${weap}_far`];
toEnable.primary_range_weapon_base_extreme = v[`${weap}_extreme`];
setAttrs(toEnable);
}
// Add any range specific attributes
if(type === "melee") {
}
//Add the repeating section to the begining of each attribute
let attrs = [];
for(var i=0; i < array.length; i++) {
attrs.push(`${weap}_` + array[i]);
};
attrs.push(`primary_${type}_weapon_mode`);
getAttrs(attrs, (v) => {
let update = {};
//Primary weapon name does not follow the naming scheme.
update[`primary_${type}_weapon`] = v[`${weap}_name`];
_.each(array, (value) => {
if (value != undefined || value != "weapon") {
update[`primary_${type}_weapon_${value}`] = (value === "ammo_max") ? v[`${weap}_ammo`] : v[`${weap}_${value}`];
};
});
// Update the selected firing mode to the default (if that or primary was the change)
if(source.includes('default_mode') || (source.includes('range') && source.includes('primary'))) {
update[`primary_${type}_weapon_mode`] = v[`${weap}_default_mode`];
} else {
update[`primary_${type}_weapon_mode`] = v[`primary_${type}_weapon_mode`];
}
setAttrs(update);
});
};
// If the player changed the primary status of the weapon, uncheck the other weapons
if (source.includes('primary') && eventInfo.sourceType === "player") {
//Set the other repeating_weapon primarys to 0 aka unchecked
getSectionIDs(`${weap}`, function(ids) {
let IDs = [];
let update = {};
for(var i=0; i < ids.length; i++) {
IDs.push(`${weap}_` + ids[i] + "_primary");
};
IDs.forEach(id => {
if (id != source) {
update[`${id}`] = 0;
}
});
setAttrs(update);
});
} else if(source.includes('dicepool') || source.includes('weapon') || source.includes('damage') || source.includes('skill') || source.includes('rating') || source.includes('ammo') || source.includes('mode') || source.includes('close') || source.includes('near') || source.includes('medium') || source.includes('far') || source.includes('extreme') || source.includes('spec') || source.includes('expert')) {
getAttrs([`${weap}_primary`, `${source}`], (v) => {
if (v[`${weap}_primary`] === 'primary') {
let update = {};
//This whole process needs refactored in the future. Its working for now.
if (source.includes('ammo')) {
update[`primary_${type}_weapon_ammo`] = v[`${source}`];
update[`primary_${type}_weapon_ammo_max`] = v[`${source}`];
} else {
// console.log(eventInfo);
};
setAttrs(update);
};
});
} else {
console.log("Change was not relevant.");
};
});
});
});
// Grunt weapon AR change
['range', 'melee'].forEach((type) => {
on(`change:repeating_${type}:close_base change:repeating_${type}:near_base change:repeating_${type}:medium_base change:repeating_${type}:far_base change:repeating_${type}:extreme_base change:repeating_${type}:dicepool_base`, (eventInfo) => {
if(parseInt(eventInfo.newValue) < 0 || isNaN(eventInfo.newValue)) {
eventInfo.newValue = 0;
}
if(parseInt(eventInfo.previousValue) < 0 || isNaN(eventInfo.previousValue)) {
eventInfo.previousValue = 0;
}
delta = parseInt(eventInfo.newValue) - parseInt(eventInfo.previousValue);
display = eventInfo.sourceAttribute.slice(0,-5);
getAttrs(['sheet_type', display], (v) => {
// this only gets applied to grunts, spirits and vehicles
if(v.sheet_type != 'grunt' && v.sheet_type != 'spirit' && v.sheet_type != 'vehicle') {
return;
}
var newV = parseInt(v[`${display}`]) + delta || 0;
if(newV < 0) {
newV = 0;
}
setAttrs({
[`${display}`]: newV
});
});
});
});
// Grunt Groups Count changes
on("change:grunt_group_count change:grunt_group_member change:repeating_melee:mode change:repeating_range:mode change:repeating_melee:damage_base change:repeating_range:damage_base", (eventInfo) => {
['range', 'melee'].forEach((wtype) => {
getSectionIDs(`${wtype}`, (ids) => {
ids.forEach((id) => {
getAttrs([`repeating_${wtype}_${id}_dicepool_base`, `repeating_${wtype}_${id}_dicepool_modifier`, `repeating_${wtype}_${id}_close_base`, `repeating_${wtype}_${id}_near_base`, `repeating_${wtype}_${id}_medium_base`, `repeating_${wtype}_${id}_far_base`, `repeating_${wtype}_${id}_extreme_base`, `repeating_${wtype}_${id}_damage_base`, `repeating_${wtype}_${id}_mode`, 'mode', 'grunt_group_count', 'grunt_group_member', 'sheet_type'], (w) => {
if(w.sheet_type != 'grunt' && w.sheet_type != 'spirit' && w.sheet_type != 'vehicle') {
return;
}
var grunts = 0;
if(w.grunt_group_member == 0) {
grunts = 0;
} else {
grunts = w.grunt_group_count;
}
firing_mode_mods = {
SS: { AR: 0, DV: 0 },
SA: { AR: -2, DV: +1 },
BF: { AR: -4, DV: +2 },
FA: { AR: -6, DV: 0 },
Other: { AR: 0, DV: 0 }
};
var firing_mode = 'SS';
if(wtype == 'range') {
firing_mode = w[`repeating_${wtype}_${id}_mode`] || w.mode || 'SS';
}
var DV = adjAttrs({
dvMod: firing_mode_mods[firing_mode].DV,
arMod: firing_mode_mods[firing_mode].AR,
attrs: {
attr_damage: w[`repeating_${wtype}_${id}_damage_base`]
}
}).attr_damage;
var bonuses = {
AR: 0,
dice: 0
}
if(w.grunt_group_member != '0' && parseInt(w.grunt_group_count) > 1) {
bonuses = grunt_group_bonuses(w.grunt_group_count);
}
var c = parseInt(w[`repeating_${wtype}_${id}_close_base`]) || '';
c = (c > 0) ? c + parseInt(bonuses.AR) + parseInt(firing_mode_mods[firing_mode].AR) : '';
c = (c <= 0) ? '' : c;
var n = parseInt(w[`repeating_${wtype}_${id}_near_base`]) || '';
n = (n > 0) ? n + parseInt(bonuses.AR) + parseInt(firing_mode_mods[firing_mode].AR) : '';
n = (n <= 0) ? '' : n;
var m = parseInt(w[`repeating_${wtype}_${id}_medium_base`]) || '';
m = (m > 0) ? m + parseInt(bonuses.AR) + parseInt(firing_mode_mods[firing_mode].AR) : '';
m = (m <= 0) ? '' : m;
var f = parseInt(w[`repeating_${wtype}_${id}_far_base`]) || '';
f = (f > 0) ? f + parseInt(bonuses.AR) + parseInt(firing_mode_mods[firing_mode].AR) : '';
f = (f <= 0) ? '' : f;
var e = parseInt(w[`repeating_${wtype}_${id}_extreme_base`]) || '';
e = (e > 0) ? e + parseInt(bonuses.AR) + parseInt(firing_mode_mods[firing_mode].AR) : '';
e = (e <= 0) ? '' : e;
var dice = parseInt(w[`repeating_${wtype}_${id}_dicepool_base`]) || '';
var diceMod = parseInt(w[`repeating_${wtype}_${id}_dicepool_modifier`]) || 0;
if(w.grunt_group_member == 0) { // Not a grunt group member
var dp = parseInt(dice) + parseInt(diceMod) + parseInt(bonuses.dice) || 0;
setAttrs({
[`repeating_${wtype}_${id}_damage`]: DV,
[`repeating_${wtype}_${id}_dicepool`]: dp,
[`repeating_${wtype}_${id}_close`]: c,
[`repeating_${wtype}_${id}_near`]: n,
[`repeating_${wtype}_${id}_medium`]: m,
[`repeating_${wtype}_${id}_far`]: f,
[`repeating_${wtype}_${id}_extreme`]: e
});
} else { // they are now a grunt group member we need to adjust dicepool and ARs
var dp = parseInt(dice) + parseInt(diceMod) + parseInt(bonuses.dice) || 0;
setAttrs({
[`repeating_${wtype}_${id}_damage`]: DV,
[`repeating_${wtype}_${id}_dicepool`]: dp,
[`repeating_${wtype}_${id}_close`]: c,
[`repeating_${wtype}_${id}_near`]: n,
[`repeating_${wtype}_${id}_medium`]: m,
[`repeating_${wtype}_${id}_far`]: f,
[`repeating_${wtype}_${id}_extreme`]: e
});
}
});
});
});
});
});
var grunt_group_bonuses = (p) => {
var b = {
AR: p - 1,
dice: Math.floor((p - 1) / 2)
};
return b;
};
//Repeating contacts for PC sheet
on("change:repeating_contacts", () => {
getAttrs(["repeating_contacts_name"], (v) => {
const name = (v.repeating_contacts_name);
((name).length > 0 && (name).length <= 30) ? setAttrs({repeating_contacts_display: (name)}) :
((name).length > 30) ? setAttrs({repeating_contacts_display: (name).slice(0, 30) + "..."}) :
setAttrs({repeating_contacts_display: " "});
});
});
//Cyberdeck Calculations
['attack', 'sleaze', 'data_processing', 'firewall'].forEach(attr => {
on(`change:${attr}_base change:${attr}_modifier change:${attr}_temp`, () => {
update_common_rolls([`${attr}_base`, `${attr}_modifier`, `${attr}_temp`]);
});
});
on("change:repeating_vehicle", (eventInfo) => {
const id = eventInfo.triggerName;
getAttrs([`${id}_handling_onroad`, `${id}_handling_offroad`, `${id}_handling_modifier`, `${id}_acceleration_base`, `${id}_acceleration_modifier`, `${id}_speed_base`, `${id}_speed_modifier`, `${id}_speed_max`, `${id}_armor_base`, `${id}_armor_modifier`, `${id}_body_base`, `${id}_body_modifier`, `${id}_pilot_base`, `${id}_pilot_modifier`, `${id}_sensor_base`, `${id}_sensor_modifier`, `${id}_seats`], (v) => {
Object.keys(v).forEach(k => {
if(isNaN(parseInt(v[`${k}`]))) {
v[`${k}`] = 0;
}
});
var handling = parseInt(v[`${id}_handling_onroad`]) + parseInt(v[`${id}_handling_modifier`]);
if(v[`${id}_handling_offroad`] != 0) {
handling = handling + ' (' + v[`${id}_handling_offroad`] + ')';
}
var speed = parseInt(v[`${id}_speed_base`]) + parseInt(v[`${id}_speed_modifier`]);
speed = speed + ' (' + v[`${id}_speed_max`] + ')';
setAttrs({
"repeating_vehicle_display_handling": handling,
"repeating_vehicle_display_speed": speed,
"repeating_vehicle_display_acceleration": parseInt(v[`${id}_acceleration_base`]) + parseInt(v[`${id}_acceleration_modifier`]),
"repeating_vehicle_display_body": parseInt(v[`${id}_body_base`]) + parseInt(v[`${id}_body_modifier`]),
"repeating_vehicle_display_armor": parseInt(v[`${id}_armor_base`]) + parseInt(v[`${id}_armor_modifier`]),
"repeating_vehicle_display_pilot": parseInt(v[`${id}_pilot_base`]) + parseInt(v[`${id}_pilot_modifier`]),
"repeating_vehicle_display_sensor": parseInt(v[`${id}_sensor_base`]) + parseInt(v[`${id}_sensor_modifier`])
});
});
});
/*
['acceleration', 'armor', 'body', 'data_processing', 'handling_onroad', 'handling_offroad', 'pilot', 'sensor','speed'].forEach(attr => {
// Attach listener
on(`change:repeating_vehicle:${attr}_base change:repeating_vehicle:${attr}_modifier change:repeating_vehicle:${attr}_temp change:repeating_vehicle:${attr}_max`, () => {
// Load attribute values
getAttrs([`repeating_vehicle_${attr}_base`, `repeating_vehicle_${attr}_modifier`, `repeating_vehicle_${attr}_temp`, `repeating_vehicle_${attr}_max`], (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 max = parseInt(v[`repeating_vehicle_${attr}_max`]) || 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});
});
});
});
*/
/******************/
/* Sprite Scripts */
/******************/
on("change:sprite_type change:level", (eventInfo) => {
sprite_update();
});
var sprite_update = () => {
getAttrs(['level', 'sprite_type', 'sheet_type'], (v) => {
if(v.sheet_type != 'sprite') {
return;
}
var level = parseInt(v.level);
var attack = 1,
sleaze = 1,
dataproc = 1,
firewall = 1,
resonance = 1,
hot_base = 1,
hot_dice = 1;
var skills = ['Electronics', 'Cracking'];
var powers = [];
switch(v.sprite_type) {
case 'Courier':
attack = level;
sleaze = level + 3;
dataproc = level + 1;
firewall = level + 2;
resonance = level;
hot_base = (level * 2) + 1;
hot_dice = 4;
powers = ['Cookie', 'Hash'];
break;
case 'Crack':
attack = level;
sleaze = level + 3;
dataproc = level + 2;
firewall = level + 1;
resonance = level;
hot_base = (level * 2) + 2;
hot_dice = 4;
powers = ['Phantom', 'Suppression'];
break;
case 'Data':
attack = (level - 1) || 1;
sleaze = level;
dataproc = level + 4;
firewall = level + 1;
resonance = level;
hot_base = (level * 2) + 4;
hot_dice = 4;
powers = ['Camouflage', 'Watermark'];
break;
case 'Fault':
attack = level + 3;
sleaze = level;
dataproc = level + 1;
firewall = level + 2;
resonance = level;
hot_base = (level * 2) + 1;
hot_dice = 4;
powers = ['Electron Storm', 'Trap'];
break;
case 'Machine':
attack = level + 1;
sleaze = level;
dataproc = level + 3;
firewall = level + 2;
resonance = level;
hot_base = (level * 2) + 3;
hot_dice = 4;
skills = ['Electronics', 'Engineering'];
powers = ['Diagnostics', 'Override', 'Stability'];
break;
default:
attack = level;
sleaze = level;
dataproc = level;
firewall = level;
resonance = level;
hot_base = (level * 2) + 1;
hot_dice = 4;
break;
}
setAttrs({
'attack': attack,
'sleaze': sleaze,
'data_processing': dataproc,
'firewall': firewall,
'resonance': resonance,
'hot_sim_initiative_base': hot_base,
'hot_sim_initiative_dice': hot_dice
});
// Check if there are already skills
getSectionIDs(['repeating_skills'], function (ids) {
ids.forEach(rowId => {
removeRepeatingRow(`repeating_skills_${rowId}`);
});
skills.forEach(skill => {
// make a new repeatingRowID
var newId = generateRowID();
setAttrs({
[`repeating_skills_${newId}_skill`]: skill,
[`repeating_skills_${newId}_level`]: level,
[`repeating_skills_${newId}_flag`]: 0
});
});
});
// Some notes for the powers, we don't want to infringe copyrights so we'll point to the Core Rule Book page,
// They can type whatever they want in later
var notes = {
'Camouflage': 'CRB pg.194',
'Cookie': 'CRB pg.194',
'Diagnostics': 'CRB pg.194',
'Electron Storm': 'CRB pg.194',
'Hash': 'CRB pg.194',
'Override': 'CRB pg.194',
'Phantom': 'CRB pg.194',
'Stability': 'CRB pg.194',
'Suppression': 'CRB pg.194',
'Trap': 'CRB pg.194',
'Watermark': 'CRB pg.195'
};
// Check if there are already powers
getSectionIDs(['repeating_powers'], function (ids) {
ids.forEach(rowId => {
removeRepeatingRow(`repeating_powers_${rowId}`);
});
powers.forEach(power => {
// make a new repeatingRowID
var newId = generateRowID();
setAttrs({
[`repeating_powers_${newId}_name`]: power,
[`repeating_powers_${newId}_notes`]: notes[power],
[`repeating_powers_${newId}_flag`]: 0
});
});
});
});
};
/******************/
/* Spirit Scripts */
/******************/
on("change:spirit_type change:force", (eventInfo) => {
spirit_update();
});
var spirit_update = () => {
setAttrs({
grunt_group_member: 'grunt_group_member'
}, {}, () => { console.log("grunt group member set"); });
getAttrs(['force', 'spirit_type', 'sheet_type', 'spirit_reset_toggle'], (v) => {
if(v.sheet_type != 'spirit') {
return;
}
var force = parseInt(v.force);
var spirit = {
tasks_modifier: 0,
body: 1,
agility: 1,
reaction: 1,
strength: 1,
willpower: 1,
logic: 1,
intuition: 1,
charisma: 1,
edge: 0,
magic: force,
essence: force,
major_actions: 1,
minor_actions: 2,
physical: 9,
move_speed: 10,
sprint_speed: 15,
sprint_modifier: 1,
initiative_base: 6,
initiative_dice: 2,
astral_initiative_base: 2,
astral_initiative_dice: 3,
defense_rating: 1,
number_optional_powers: Math.floor(force / 3)
};
var skills = ['Astral'];
var powers = ['Astral Form', 'Materialization', 'Sapience'];
var ranged = {};
var close = {};
switch(v.spirit_type) {
case 'Air':
spirit.tasks_modifier = '';
spirit.body = (force > 2) ? force - 2 : 1;
spirit.agility = force + 3;
spirit.reaction = force + 4;
spirit.strength = (force > 3) ? force - 3 : 1;
spirit.willpower = force;
spirit.logic = force;
spirit.intuition = force;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = Math.ceil(force / 2) + 8;
spirit.move_speed = 5;
spirit.sprint_speed = 10;
spirit.sprint_modifier = 5;
spirit.initiative_base = (force * 2) + 4;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = (force * 2);
spirit.astral_initiative_dice = 3;
spirit.defense_rating = (force > 2) ? force - 2 : 1;
skills = ['Astral', 'Athletics', 'Close Combat', 'Exotic Ranged Weapon', 'Perception'];
powers = ['Accident', 'Astral Form', 'Concealment', 'Confusion', 'Engulf (Air)', 'Materialization', 'Movement', 'Sapience', 'Search'];
optional_powers = ['Elemental Attack (Cold)', 'Elemental Attack (Electricity)', 'Energy Aura', 'Fear', 'Guard', 'Noxious Breath', 'Psychokinesis'];
ranged = {
'name': 'Elemental Attack',
'pool': force + spirit.agility,
'dam': force + 'P',
'c': force * 2,
'n': ((force * 2) - 2),
'm': ((force * 2) - 8),
'f': ((force * 2) - 10),
'e': 0,
'notes': 'Requires Elemental Attack Optional Power'
};
close = {
'name': 'Engulf',
'pool': force + spirit.agility,
'dam': parseInt(force + 2) + 'S',
'c': (force * 2) + 1,
'n': 0,
'm': 0,
'f': 0,
'e': 0,
'notes': 'Damage adds Fatigue I'
};
break;
case 'Beasts':
spirit.tasks_modifier = '';
spirit.body = force + 2;
spirit.agility = force + 1;
spirit.reaction = force;
spirit.strength = force + 2;
spirit.willpower = force;
spirit.logic = force;
spirit.intuition = force;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = Math.ceil(force / 2) + 8;
spirit.move_speed = 5;
spirit.sprint_speed = 10;
spirit.sprint_modifier = 3;
spirit.initiative_base = force * 2;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = force * 2;
spirit.astral_initiative_dice = 3;
spirit.defense_rating = force + 2;
skills = ['Astral', 'Close Combat', 'Perception'];
powers = ['Animal Control', 'Astral Form', 'Enhanced Senses (Hearing)', 'Enhanced Senses (Low-Light Vision)', 'Enhanced Senses (Smell)', 'Fear', 'Materialization', 'Movement', 'Sapience'];
optional_powers = ['Concealment', 'Confusion', 'Guard', 'Natural Weapon', 'Noxious Breath', 'Search', 'Venom'];
ranged = {};
close = {
'name': 'Claws/Bite',
'pool': force + spirit.agility,
'dam': parseInt(Math.ceil(force / 2)) + 'P',
'c': force * 2,
'n': 0,
'm': 0,
'f': 0,
'e': 0,
'notes': 'Requires Natural Weapon (claws/bite) Optional Power'
};
break;
case 'Earth':
spirit.tasks_modifier = '';
spirit.body = force + 4;
spirit.agility = (force > 2) ? force - 2 : 1;
spirit.reaction = (force > 1) ? force - 1 : 1;
spirit.strength = force + 4;
spirit.willpower = force;
spirit.logic = (force > 1) ? force - 1 : 1;
spirit.intuition = force;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = Math.ceil(force / 2) + 8;
spirit.move_speed = 5;
spirit.sprint_speed = 10;
spirit.sprint_modifier = 1;
spirit.initiative_base = (force * 2) - 1;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = force * 2;
spirit.astral_initiative_dice = 3;
spirit.defense_rating = force + 4;
skills = ['Astral', 'Close Combat', 'Exotic Ranged Weapons', 'Perception'];
powers = ['Astral Form', 'Binding', 'Guard', 'Fear', 'Materialization', 'Movement', 'Sapience', 'Search'];
optional_powers = ['Concealment', 'Confusion', 'Elemental Attack (Chemical)', 'Engulf (Earth)', 'Fear'];
ranged = {
'name': 'Elemental Attack',
'pool': force + spirit.agility,
'dam': force + 'P',
'c': force * 2,
'n': ((force * 2) - 2),
'm': ((force * 2) - 8),
'f': ((force * 2) - 10),
'e': 0,
'notes': 'Requires Elemental Attack Optional Power'
};
close = {
'name': 'Engulf',
'pool': force + spirit.agility,
'dam': parseInt(force + 2) + 'S',
'c': (force * 2) + 1,
'n': 0,
'm': 0,
'f': 0,
'e': 0,
'notes': 'Requires Engulf Optional Power, Damage adds Fatigue I'
};
break;
case 'Fire':
spirit.tasks_modifier = '';
spirit.body = force + 1;
spirit.agility = force + 2;
spirit.reaction = force + 3;
spirit.strength = (force > 2) ? force - 2 : 1;
spirit.willpower = force;
spirit.logic = force;
spirit.intuition = force + 1;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = Math.ceil(force / 2) + 8;
spirit.move_speed = 5;
spirit.sprint_speed = 10;
spirit.sprint_modifier = 5;
spirit.initiative_base = (force * 2) + 4;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = (force * 2);
spirit.astral_initiative_dice = 3;
spirit.defense_rating = force + 1;
skills = ['Astral', 'Athletics', 'Close Combat', 'Exotic Ranged Weapon', 'Perception'];
powers = ['Accident', 'Astral Form', 'Confusion', 'Elemental Attack (Fire)', 'Energy Aura (Fire)', 'Engulf (Fire)', 'Materialization', 'Sapience'];
optional_powers = ['Fear', 'Guard', 'Noxious Breath', 'Search'];
ranged = {
'name': 'Elemental Attack',
'pool': force + spirit.agility,
'dam': force + 'P',
'c': force * 2,
'n': ((force * 2) - 2),
'm': ((force * 2) - 8),
'f': ((force * 2) - 10),
'e': 0,
'notes': ''
};
close = {
'name': 'Engulf',
'pool': force + spirit.agility,
'dam': parseInt(force + 2) + 'S',
'c': (force * 2) + 1,
'n': 0,
'm': 0,
'f': 0,
'e': 0,
'notes': 'Damage adds Fatigue I'
};
break;
case 'Kin':
spirit.tasks_modifier = '';
spirit.body = force + 1;
spirit.agility = force;
spirit.reaction = force + 2;
spirit.strength = (force > 2) ? force - 2 : 1;
spirit.willpower = force;
spirit.logic = force;
spirit.intuition = force + 1;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = Math.ceil(force / 2) + 8;
spirit.move_speed = 5;
spirit.sprint_speed = 10;
spirit.sprint_modifier = 1;
spirit.initiative_base = (force * 2) + 3;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = (force * 2);
spirit.astral_initiative_dice = 3;
spirit.defense_rating = force + 1;
skills = ['Astral', 'Close Combat', 'Perception', 'Sorcery'];
powers = ['Accident', 'Astral Form', 'Concealment', 'Confusion', 'Enhanced Senses (Low-Light Vision)', 'Enhanced Senses (Thermographic Vision)', 'Guard', 'Influence', 'Materialization', 'Sapience', 'Search'];
optional_powers = ['Fear', 'Innate Spell', 'Movement', 'Psychokinesis'];
ranged = {};
close = {
'name': 'Fists',
'pool': force + spirit.agility,
'dam': parseInt(Math.ceil(force / 2)) + 'S',
'c': force * 2,
'n': 0,
'm': 0,
'f': 0,
'e': 0,
'notes': ''
};
break;
case 'Water':
spirit.tasks_modifier = '';
spirit.body = force;
spirit.agility = force + 1;
spirit.reaction = force + 2;
spirit.strength = force;
spirit.willpower = force;
spirit.logic = force;
spirit.intuition = force;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = Math.ceil(force / 2) + 8;
spirit.move_speed = 5;
spirit.sprint_speed = 10;
spirit.sprint_modifier = 2;
spirit.initiative_base = (force * 2) + 2;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = (force * 2);
spirit.astral_initiative_dice = 3;
spirit.defense_rating = force;
skills = ['Astral', 'Athletics (Swimming)', 'Close Combat', 'Exotic Ranged Weapon', 'Perception'];
powers = ['Astral Form', 'Concealment', 'Confusion', 'Engulf (Water)', 'Materialization', 'Movement', 'Sapience', 'Search'];
optional_powers = ['Accident', 'Binding', 'Elemental Attack (Cold)', 'Energy Aura (Cold)', 'Guard', 'Weather Control'];
ranged = {
'name': 'Elemental Attack',
'pool': force + spirit.agility,
'dam': force + 'P',
'c': force * 2,
'n': ((force * 2) - 2),
'm': ((force * 2) - 8),
'f': ((force * 2) - 10),
'e': 0,
'notes': 'Requires Elemental Attack Optional Power'
};
close = {
'name': 'Engulf',
'pool': force + spirit.agility,
'dam': parseInt(force + 2) + 'S',
'c': (force * 2) + 1,
'n': 0,
'm': 0,
'f': 0,
'e': 0,
'notes': 'Damage adds Fatigue I'
};
break;
case 'Plant':
spirit.tasks_modifier = '';
spirit.body = force + 2;
spirit.agility = (force > 1) ? force - 1 : 1;
spirit.reaction = force;
spirit.strength = force + 1;
spirit.willpower = force;
spirit.logic = (force > 1) ? force - 1 : 1;
spirit.intuition = force;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = Math.ceil(force / 2) + 8;
spirit.move_speed = 10;
spirit.sprint_speed = 15;
spirit.sprint_modifier = 1;
spirit.initiative_base = force * 2;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = force * 2;
spirit.astral_initiative_dice = 3;
spirit.defense_rating = force + 2;
skills = ['Astral', 'Close Combat', 'Exotic Ranged Weapon', 'Perception', 'Spellcasting'];
powers = ['Astral Form', 'Concealment', 'Engulf', 'Fear', 'Guard', 'Magical Guard', 'Materialization', 'Sapience', 'Silence'];
optional_powers = ['Accident', 'Confusion', 'Movement', 'Noxious Breath', 'Search'];
ranged = {};
close = {
'name': 'Engulf',
'pool': force + spirit.agility,
'dam': force + 'S',
'c': force * 3,
'n': 0,
'm': 0,
'f': 0,
'e': 0,
'notes': 'Damage adds Fatigue I'
};
break;
case 'Guardian':
spirit.tasks_modifier = '';
spirit.body = force + 1;
spirit.agility = force + 2;
spirit.reaction = force + 3;
spirit.strength = force + 2;
spirit.willpower = force;
spirit.logic = force;
spirit.intuition = force;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 4;
spirit.physical = Math.ceil((force + 1) / 2) + 8;
spirit.move_speed = 10;
spirit.sprint_speed = 15;
spirit.sprint_modifier = 1;
spirit.initiative_base = (force * 2) + 3;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = (force * 2);
spirit.astral_initiative_dice = 3;
spirit.defense_rating = (force * 2) + 1;
skills = ['Astral', 'Close Combat', 'Exotic Ranged Weapon', 'Perception'];
powers = ['Astral Form', 'Fear', 'Guard', 'Magical Guard', 'Materialization', 'Movement', 'Sapience'];
optional_powers = ['Animal Control', 'Concealment', 'Elemental Attack', 'Natural Weapon', 'Psychokinesis', 'Skill Specialization'];
ranged = {
'name': 'Elemental Attack',
'pool': force + spirit.agility,
'dam': force + 'P',
'c': force * 2,
'n': ((force * 2) - 2),
'm': ((force * 2) - 8),
'f': ((force * 2) - 10),
'e': 0,
'notes': 'Requires Elemental Attack Optional Power'
};
close = {
'name': 'Natural Weapon',
'pool': force + spirit.agility,
'dam': parseInt((force / 2) + 1) + 'P',
'c': force * 2,
'n': 0,
'm': 0,
'f': 0,
'e': 0,
'notes': 'Requires Natural Weapon Optional Power'
};
break;
case 'Guidance':
spirit.tasks_modifier = '';
spirit.body = force + 3;
spirit.agility = (force > 1) ? force - 1 : 1;
spirit.reaction = force + 2;
spirit.strength = force + 1;
spirit.willpower = force;
spirit.logic = force;
spirit.intuition = force;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = Math.ceil(force / 2) + 8;
spirit.move_speed = 10;
spirit.sprint_speed = 15;
spirit.sprint_modifier = 1;
spirit.initiative_base = (force * 2) + 2;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = force * 2;
spirit.astral_initiative_dice = 3;
spirit.defense_rating = force + 3;
skills = ['Astral', 'Close Combat', 'Perception', 'Spellcasting'];
powers = ['Astral Form', 'Confusion', 'Divining', 'Guard', 'Magical Guard', 'Materialization', 'Sapience', 'Search', 'Shadow Cloak'];
optional_powers = ['Engulf', 'Enhanced Senses (Hearing)', 'Enhanced Senses (Low-Light Vision)', 'Enhanced Senses (Thermographic Vision)', 'Enhanced Senses (Smell)', 'Fear', 'Influence'];
ranged = {};
close = {
'name': 'Engulf',
'pool': force + spirit.agility,
'dam': force + 'S',
'c': force * 3,
'n': 0,
'm': 0,
'f': 0,
'e': 0,
'notes': 'Requires Engulf Optional Power, Damage adds Fatigue I'
};
break;
case 'Task':
spirit.tasks_modifier = '1';
spirit.body = force;
spirit.agility = force;
spirit.reaction = force + 2;
spirit.strength = force + 2;
spirit.willpower = force;
spirit.logic = force;
spirit.intuition = force;
spirit.charisma = force;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = Math.ceil(force / 2) + 8;
spirit.move_speed = 10;
spirit.sprint_speed = 15;
spirit.sprint_modifier = 1;
spirit.initiative_base = (force * 2) + 2;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = force * 2;
spirit.astral_initiative_dice = 3;
spirit.defense_rating = force;
skills = ['Astral', 'Close Combat', 'Perception'];
powers = ['Accident', 'Astral Form', 'Binding', 'Materialization', 'Movement', 'Sapience', 'Search', 'Skill', 'Skill Specialization'];
optional_powers = ['Concealment', 'Enhanced Senses (Hearing)', 'Enhanced Senses (Low-Light Vision)', 'Enhanced Senses (Thermographic Vision)', 'Enhanced Senses (Smell)', 'Influence', 'Psychokinesis', 'Skill'];
ranged = {};
close = {};
break;
default:
spirit.tasks_modifier = '';
spirit.body = 1;
spirit.agility = 1;
spirit.reaction = 1;
spirit.strength = 1;
spirit.willpower = 1;
spirit.logic = 1;
spirit.intuition = 1;
spirit.charisma = 1;
spirit.magic = 1;
spirit.major_actions = 1;
spirit.minor_actions = 3;
spirit.physical = 9;
spirit.move_speed = 10;
spirit.sprint_speed = 15;
spirit.sprint_modifier = 1;
spirit.initiative_base = 5;
spirit.initiative_dice = 2;
spirit.astral_initiative_base = 2;
spirit.astral_initiative_dice = 3;
spirit.defense_rating = 1;
powers = [];
skills = [];
break;
}
setAttrs({
'tasks_modifier': spirit.tasks_modifier,
'body_base': spirit.body,
'agility_base': spirit.agility,
'reaction_base': spirit.reaction,
'strength_base': spirit.strength,
'willpower_base': spirit.willpower,
'logic_base': spirit.logic,
'intuition_base': spirit.intuition,
'charisma_base': spirit.charisma,
'edge': spirit.edge,
'magic': spirit.magic,
'essence': spirit.essence,
'major_actions': spirit.major_actions,
'minor_actions': spirit.minor_actions,
'physical': spirit.physical,
'physical_max': spirit.physical,
'move_speed': spirit.move_speed,
'sprint_speed': spirit.sprint_speed,
'sprint_modifier': spirit.sprint_modifier,
'initiative_base': spirit.initiative_base,
'initiative_dice': spirit.initiative_dice,
'astral_initiative_base': spirit.astral_initiative_base,
'astral_initiative_dice': spirit.astral_initiative_dice,
'defense_rating': spirit.defense_rating
});
// Check if there are already skills
getSectionIDs(['repeating_skills'], function (ids) {
// if there are any skills already set up let's not mess with them
// the GM / player may have them how they want them.
toUpdate = {};
if(v.spirit_reset_toggle === 'reset') {
// The reset toggle is turned on, wipe out the skills
ids.forEach(rowId => {
removeRepeatingRow(`repeating_skills_${rowId}`);
});
}
if(ids.length == 0 || v.spirit_reset_toggle === 'reset') {
skills.forEach(skillname => {
// make a new repeatingRowID
var newId = generateRowID();
toUpdate[`repeating_skills_${newId}_skill`] = skillname;
toUpdate[`repeating_skills_${newId}_flag`] = 0;
});
setAttrs(toUpdate);
}
});
// Some notes for the powers, we don't want to infringe copyrights so we'll point to the Core Rule Book page,
// They can type whatever they want in later
var notes = {
'Accident': 'CRB pg.221',
'Animal Control': 'CRB pg.221',
'Astral Form': 'CRB pg.222',
'Binding': 'CRB pg.222',
'Concealment': 'CRB pg.222',
'Confusion': 'CRB pg.222',
'Divining': 'SW pg.67',
'Elemental Attack': 'conjuror chooses element duiring summoning - CRB pg.223',
'Elemental Attack (Cold)': 'CRB pg.223',
'Elemental Attack (Chemical)': 'CRB pg.223',
'Elemental Attack (Electricity)': 'CRB pg.223',
'Elemental Attack (Fire)': 'CRB pg.223',
'Energy Aura (Cold)': 'CRB pg.223',
'Energy Aura (Electricity)': 'CRB pg.223',
'Energy Aura (Fire)': 'CRB pg.223',
'Engulf': 'CRB pg.223',
'Engulf (Air)': 'CRB pg.223',
'Engulf (Earth)': 'CRB pg.223',
'Engulf (Fire)': 'CRB pg.223',
'Engulf (Water)': 'CRB pg.223',
'Enhanced Senses (Hearing)' : 'CRB pg.223',
'Enhanced Senses (Low-Light)' : 'CRB pg.223',
'Enhanced Senses (Smell)' : 'CRB pg.223',
'Enhanced Senses (Thermographic)' : 'CRB pg.223',
'Enhanced Senses (Select One)': 'CRB pg.223',
'Fear': 'CRB pg.224',
'Guard': 'CRB pg.224',
'Influence': 'CRB pg.225',
'Innate Spell': 'any one spell known by the summoner; only one spell effect may be added - CRB pg.225',
'Magical Guard': 'SW pg.69',
'Materialization': 'CRB pg.225',
'Movement': 'CRB pg.226',
'Natural Weapon (claws/bite)': 'CRB pg.226',
'Noxious Breath': 'CRB pg.226',
'Psychokinesis': 'CRB pg.227',
'Sapience': 'CRB pg.227',
'Search': 'CRB pg.227',
'Shadow Cloak': 'SW pg.70',
'Silence': 'SW pg.70',
'Skill': 'Choose one from Biotech, Electronics, Engineering, Outdoors or Piloting and a Specialization in the chosen skill as well as an appropriate Knowledge Skill - SW pg.56',
'Skill Specialization': 'choose any skill specialization appropriate to the spirit - SW pg.55',
'Venom': 'CRB pg.228',
'Weather Control': 'CRB pg.228'
};
// Check if there are already powers
getSectionIDs(['repeating_powers'], function (ids) {
// if there are any powers already set up let's not mess with them
// the GM / player may have them how they want them.
if(v.spirit_reset_toggle === 'reset') {
// The reset toggle is turned on, wipe out the skills
ids.forEach(rowId => {
removeRepeatingRow(`repeating_powers_${rowId}`);
});
}
if(ids.length == 0 || v.spirit_reset_toggle === 'reset') {
powers.forEach(power => {
// make a new repeatingRowID
var newId = generateRowID();
setAttrs({
[`repeating_powers_${newId}_name`]: power,
[`repeating_powers_${newId}_notes`]: notes[power] || '',
[`repeating_powers_${newId}_flag`]: 0
});
});
}
});
// Check if there are already ranged weapons
if((ranged && Object.keys(ranged).length > 0) || v.spirit_reset_toggle === 'reset') {
getSectionIDs(['repeating_range'], function (ids) {
// if there are any ranged already set up let's not mess with them
// the GM / player may have them how they want them.
if(v.spirit_reset_toggle === 'reset') {
// The reset toggle is turned on, wipe out the skills
ids.forEach(rowId => {
removeRepeatingRow(`repeating_range_${rowId}`);
});
}
if((ids.length == 0 || v.spirit_reset_toggle === 'reset') && ranged && Object.keys(ranged).length > 0) {
// make a new repeatingRowID
var newId = generateRowID();
setAttrs({
[`repeating_range_${newId}_name`]: ranged.name,
[`repeating_range_${newId}_dicepool`]: ranged.pool,
[`repeating_range_${newId}_dicepool_base`]: ranged.pool,
[`repeating_range_${newId}_damage_base`]: ranged.dam,
[`repeating_range_${newId}_close_base`]: (ranged.c > 0) ? ranged.c : 0,
[`repeating_range_${newId}_near_base`]: (ranged.n > 0) ? ranged.n : 0,
[`repeating_range_${newId}_medium_base`]: (ranged.m > 0) ? ranged.m : 0,
[`repeating_range_${newId}_far_base`]: (ranged.f > 0) ? ranged.f : 0,
[`repeating_range_${newId}_extreme_base`]: (ranged.e > 0) ? ranged.e : 0,
[`repeating_range_${newId}_notes`]: ranged.notes,
[`repeating_range_${newId}_flag`]: 0
}, {silent: true});
}
});
}
// Check if there are already melee weapons
if((close && Object.keys(close).length > 0) || v.spirit_reset_toggle === 'reset') {
getSectionIDs(['repeating_melee'], function (ids) {
// if there are any melee already set up let's not mess with them
// the GM / player may have them how they want them.
if(v.spirit_reset_toggle === 'reset') {
// The reset toggle is turned on, wipe out the skills
ids.forEach(rowId => {
removeRepeatingRow(`repeating_melee_${rowId}`);
});
}
if((ids.length == 0 || v.spirit_reset_toggle === 'reset') && close && Object.keys(close).length > 0) {
// make a new repeatingRowID
var newId = generateRowID();
setAttrs({
[`repeating_melee_${newId}_name`]: close.name,
[`repeating_melee_${newId}_dicepool`]: close.pool,
[`repeating_melee_${newId}_dicepool_base`]: close.pool,
[`repeating_melee_${newId}_damage_base`]: close.dam,
[`repeating_melee_${newId}_close_base`]: (close.c > 0) ? close.c : 0,
[`repeating_melee_${newId}_near_base`]: (close.n > 0) ? close.n : 0,
[`repeating_melee_${newId}_medium_base`]: (close.m > 0) ? close.m : 0,
[`repeating_melee_${newId}_far_base`]: (close.f > 0) ? close.f : 0,
[`repeating_melee_${newId}_extreme_base`]: (close.e > 0) ? close.e : 0,
[`repeating_melee_${newId}_notes`]: close.notes,
[`repeating_melee_${newId}_flag`]: 0
}, {silent: true});
}
});
}
setAttrs({
grunt_group_member: 0
}, {}, () => { console.log("grunt group member updated"); });
});
};
on("change:measurement1 change:measurement2", (eventInfo) => {
if(eventInfo.sourceType !== "player") {
return;
}
getAttrs(['measurement1', 'measurement2', 'conversion'], (v) => {
switch (v.conversion) {
case 'lb-kg':
if(eventInfo.sourceAttribute === 'measurement1') {
var kg = v.measurement1 * .453592;
setAttrs({
'measurement2': kg.toFixed(2)
});
} else {
var lb = v.measurement2 / .453592;
setAttrs({
'measurement1': lb.toFixed(2)
});
}
break;
case 'ft-m':
if(eventInfo.sourceAttribute === 'measurement1') {
var ft = v.measurement1 * .3048;
setAttrs({
'measurement2': ft.toFixed(2)
});
} else {
var m = v.measurement2 / .3048;
setAttrs({
'measurement1': m.toFixed(2)
});
}
break;
case 'mi-km':
if(eventInfo.sourceAttribute === 'measurement1') {
var mi = v.measurement1 * 1.60934;
setAttrs({
'measurement2': mi.toFixed(2)
});
} else {
var km = v.measurement2 / 1.60934;
setAttrs({
'measurement1': km.toFixed(2)
});
}
break;
default:
break;
}
});
});
//USEFUL FUNCTIONS
const capitialize = (string) => {
return string.charAt(0).toUpperCase() + string.slice(1);
};
const addFeedback = (attribute, value) => {
return `<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) => {
return value.split("(")[1].split(")")[0];
};
const getArray = (array) => {
return Array.isArray(array) ? array : [ array ];
};
const getSplitNum = (value) => {
return value.split("/")[0];
}
mylog = function(msg) {
let d = new Date();
let lines = new Error().stack.split("\n");
log(d.toUTCString() + " " + lines[2].trim() + " " + msg);
}
/**************/
/* COMPENDIUM */
/**************/
// Compendium Drop workers
on("change:compendium_drop_data", (eventInfo) => {
console.log("Compendium Item Dropped!");
console.log(eventInfo.newValue);
// var data = eventInfo.newValue;
try{
data = JSON.parse(eventInfo.newValue) || false;
} catch(e) {
// wipe out compendium_drop_data until the next time
setAttrs({
'compendium_drop_data': '',
'compendium_drop_content': ''
});
return;
}
if(eventInfo.sourceType != 'player' || ! data) {
console.log("not player triggered or compendium data empty");
return;
}
getAttrs(['compendium_drop_content'], (v) => {
// process the dropped data
switch(data.Category) {
case 'Spells':
compendiumAddSpell(data, v.compendium_drop_content);
break;
default:
break;
}
});
// wipe out compendium_drop_data until the next time
setAttrs({
'compendium_drop_data': '',
'compendium_drop_content': ''
});
});
var compendiumAddSpell = function(data, content) {
rowattrs = {};
console.log(data);
console.log(content);
row_id = generateRowID();
var spell_type = 'spell';
rowattrs["repeating_" + spell_type + "_" + row_id + "_name"] = data.Name;
rowattrs["repeating_" + spell_type + "_" + row_id + "_skill"] = '@{sorcery}';
rowattrs["repeating_" + spell_type + "_" + row_id + "_notes"] = content;
setAttrs(rowattrs);
}
/********************/
/* GENESIS IMPORTER */
/********************/
on("clicked:import", (eventInfo) => {
let setText = {};
let applyEnabled = true;
getAttrs(['import_data'], (v) => {
// Verify the user entered a JSON in the textarea. If not, provide user feedabck.
let parsedData = '';
if (v.import_data) {
setText[`import-feedback`] = "";
// Try to parse the JSON
try{
parsedData = JSON.parse(v.import_data) || false;
} catch(e) {
setText[`import-feedback`] += `JSON Parse Error: ` + e + "\n";
}
// There is a value in the textarea! Check to see if its a valid JSON. Provide users feeadback
if (parsedData) {
setText[`import-feedback`] += `Valid JSON was imported.` + "\n";
} else {
setText[`import-feedback`] += `The text imported is not valid JSON. Verify the JSON is formatted correctly. Check the format at, JSONLint.com.` + "\n";
applyEnabled = false
};
} else {
setText[`import-feedback`] = `Nothing entered in the JSON text area.` + "\n";
applyEnabled = false
};
let import_feedback = '';
if(applyEnabled) {
let success = doImport(parsedData);
if(success) {
import_feedback = 'Import successful. ' + "\n";
} else {
import_feedback = 'Import failed. ' + "\n";
import_feedback += setText[`import-feedback`];
}
} else {
import_feedback = 'Import failed. ' + "\n";
import_feedback += setText[`import-feedback`];
}
setAttrs({
import_feedback: import_feedback
});
});
});
// clear the import_feedback when they change the contents of import_data
on("change:import_data", (eventInfo) => {
setAttrs({
import_feedback: " "
});
});
var doImport = (json) => {
setAttrs({
import_feedback: ' '
});
// wipe the current character
clean();
console.log("Doing character import");
// Mappings [Genesis attr]: [Roll20 attr]
// top level data
var base = {
name: "birth_name",
metaType: "metatype",
age: "age",
freeKarma: "karma",
gender: "sex",
karma: "total_karma",
notes: "notes",
nuyen: "nuyen",
streetName: "character_name",
weight: "weight",
size: "height",
initiation: "initiate_grade",
submersion: "submersion_level",
notes: "player_notes",
heat: "heat",
reputation: "reputation",
};
var attributes = {
BODY: "body_base",
AGILITY: "agility_base",
REACTION: "reaction_base",
STRENGTH: "strength_base",
WILLPOWER: "willpower_base",
LOGIC: "logic_base",
INTUITION: "intuition_base",
CHARISMA: "charisma_base",
EDGE: "edge",
MAGIC: "magic_base",
RESONANCE: "resonance_base",
POWER_POINTS: "power_points"
};
var attrs = {};
attrs.flag_special = 'mundane';
Object.keys(base).forEach(key => {
if(json[key]) {
attrs[base[`${key}`]] = json[`${key}`];
}
});
attrs.player_notes = 'Character imported on ' + new Date().toJSON() + "\n" + attrs.player_notes + "\n";
console.log("Character base imported.");
json.attributes.forEach(attribute => {
if(attribute.id && attribute.modifiedValue) {
attrs[attributes[attribute.id]] = attribute.modifiedValue;
// change character type (flag_special) for technomancers and awakened
if(attribute.id == "MAGIC" && attribute.modifiedValue > 0) {
attrs.flag_special = 'magic';
} else if (attribute.id == "RESONANCE" && attribute.modifiedValue > 0) {
attrs.flag_special = 'resonance';
}
// update edge hexes too
if(attribute.id == "EDGE") {
attrs.edge_hex = attribute.modifiedValue;
}
}
});
console.log("Character attributes imported.");
// Set the non-repeating attributes now
setAttrs(attrs);
// Process qualities
json.qualities.forEach(quality => {
rowattrs = {};
row_id = generateRowID();
if(quality.choice) {
rowattrs["repeating_quality_" + row_id + "_name"] = quality.name + " (" + quality.choice + ")";
} else {
rowattrs["repeating_quality_" + row_id + "_name"] = quality.name;
}
rowattrs["repeating_quality_" + row_id + "_type"] = quality.positive ? "P" : "N";
rowattrs["repeating_quality_" + row_id + "_notes"] = quality.page + "\n" + quality.description;
rowattrs["repeating_quality_" + row_id + "_rating"] = quality.rating || '';
rowattrs["repeating_quality_" + row_id + "_flag"] = 'display';
setAttrs(rowattrs);
});
console.log("Character qualities imported.");
// Process skills, knowledges and languages
json.skills.forEach(skill => {
rowattrs = {};
row_id = generateRowID();
if(skill.id != "knowledge" && skill.id != "language") {
rowattrs["repeating_skills_" + row_id + "_display_name"] = skill.name;
rowattrs["repeating_skills_" + row_id + "_name"] = skill.id.charAt(0).toUpperCase() + skill.id.slice(1);
rowattrs["repeating_skills_" + row_id + "_display_attribute"] = skill.attribute;
rowattrs["repeating_skills_" + row_id + "_attribute"] = skill.attribute;
rowattrs["repeating_skills_" + row_id + "_rating"] = skill.rating;
rowattrs["repeating_skills_" + row_id + "_dicepool"] = skill.rating;
rowattrs["repeating_skills_" + row_id + "_display_rating"] = skill.rating;
rowattrs["repeating_skills_" + row_id + "_flag"] = 'display';
rowattrs[skill.name] = skill.rating;
rowattrs[skill.id.charAt(0).toUpperCase() + skill.id.slice(1)] = skill.rating;
if(skill.specializations) {
skill.specializations.forEach(spec => {
if(spec.expertise) {
rowattrs["repeating_skills_" + row_id + "_expert"] = spec.name;
rowattrs["repeating_skills_" + row_id + "_display_expert"] = spec.name;
} else {
rowattrs["repeating_skills_" + row_id + "_spec"] = spec.name;
rowattrs["repeating_skills_" + row_id + "_display_spec"] = spec.name;
}
});
}
if(skill.influencedBy) {
rowattrs["repeating_skills_" + row_id + "_notes"] = skill.influencedBy.join(", ") + "\n" + skill.description;
}
} else {
rowattrs["repeating_knowledges_" + row_id + "_name"] = skill.name;
rowattrs["repeating_knowledges_" + row_id + "_type"] = skill.id.charAt(0).toUpperCase() + skill.id.slice(1);
rowattrs["repeating_knowledges_" + row_id + "_flag"] = 'display';
if(skill.influencedBy) {
rowattrs["repeating_knowledges_" + row_id + "_notes"] = skill.influencedBy.join(", ") + "\n" + skill.description;
}
}
setAttrs(rowattrs);
});
console.log("Character skills, knowledges and languages imported.");
// Process armor
json.armors.forEach(armor => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_armor_" + row_id + "_name"] = armor.name;
rowattrs["repeating_armor_" + row_id + "_rating"] = armor.rating;
rowattrs["repeating_armor_" + row_id + "_social"] = (armor.socialrating) ? armor.socialrating : 0;
rowattrs["repeating_armor_" + row_id + "_notes"] = armor.page + "\n" + armor.description;
rowattrs["repeating_armor_" + row_id + "_flag"] = 'display';
if(! armor.isIgnored && ! armor.primary) {
rowattrs["repeating_armor_" + row_id + "_cumulative"] = 'cumulative';
} else if(armor.primary) {
rowattrs["repeating_armor_" + row_id + "_primary"] = 'primary';
}
if(armor.accessories) {
armor.accessories.forEach(acc => {
rowattrs["repeating_armor_" + row_id + "_notes"] += ", " + acc.name;
if(acc.name.includes(" Protection", -11)) {
var resist = acc.name.slice(0, 4);
resist = resist.toLowerCase();
rowattrs["repeating_armor_" + row_id + "_" + resist] = acc.rating || 1;
} else if(acc.name.includes(" Resistance", -11)) {
var resist = acc.name.slice(0, 4);
resist = resist.toLowerCase();
rowattrs["repeating_armor_" + row_id + "_" + resist] = acc.rating || 1;
}
});
}
setAttrs(rowattrs);
});
console.log("Character armor imported");
// Process items
json.items.forEach(item => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_items_" + row_id + "_name"] = item.name;
rowattrs["repeating_items_" + row_id + "_rating"] = item.rating;
rowattrs["repeating_items_" + row_id + "_quantity"] = item.count;
rowattrs["repeating_items_" + row_id + "_flag"] = 'display';
rowattrs["repeating_items_" + row_id + "_notes"] = '[' + item.type + ']{' + item.subType + '} ' + item.page + "\n" + item.description + "\n";
rowattrs["repeating_items_" + row_id + "_type"] = item.type;
rowattrs["repeating_items_" + row_id + "_sub_type"] = item.subType;
if(item.accessories) {
item.accessories.forEach(acc => {
rowattrs["repeating_items_" + row_id + "_notes"] += ", " + acc.name;
});
}
setAttrs(rowattrs);
});
console.log("Character items imported");
// Process augmentations
var aug_grades = {
'STANDARD': 'Standard',
'ALPHA': 'Alphaware',
'BETA': 'Betaware',
'DELTA': 'Deltaware',
'USED': 'Used'
};
json.augmentations.forEach(augmentation => {
rowattrs = {};
row_id = generateRowID();
if(augmentation.level == '-') {
augmentation.level = '';
}
// some augs have the rating in the name...
if(augmentation.name.includes("Rating")) {
const re = /^(.*), Rating (\d+)/i;
var m = augmentation.name.match(re);
if(m && m[1]) {
augmentation.name = m[1];
}
if(m && m[2] && ! augmentation.level) {
augmentation.level = parseInt(m[2]);
}
}
rowattrs["repeating_augmentations_" + row_id + "_name"] = augmentation.name;
rowattrs["repeating_augmentations_" + row_id + "_rating"] = augmentation.level;
rowattrs["repeating_augmentations_" + row_id + "_grade"] = aug_grades[augmentation.quality];
rowattrs["repeating_augmentations_" + row_id + "_essence_cost"] = augmentation.essence;
rowattrs["repeating_augmentations_" + row_id + "_flag"] = 'display';
rowattrs["repeating_augmentations_" + row_id + "_notes"] = augmentation.page + "\n" + augmentation.description + "\n";
if(augmentation.accessories) {
augmentation.accessories.forEach(acc => {
rowattrs["repeating_augmentations_" + row_id + "_notes"] += ", " + acc.name;
});
}
setAttrs(rowattrs);
});
console.log("Character augmentations imported");
// Process vehicles and drones
veh_types = {
'VEHICLES': {
'BIKES': 'Bikes',
'ATVS': 'ATV',
'CARS': 'Car',
'TRUCKS': 'Truck',
'VANS': 'Van',
'BUS': 'Bus',
'TRACKED': 'Tracked',
'HOVERCRAFT': 'Hovercraft',
'PWC': 'PWC',
'BOATS': 'Boat',
'SHIPS': 'Ship',
'SUBMARINES': 'Submarine',
'FIXED_WING': 'Fixed Wing Aircraft',
'ROTORCRAFT': 'Rotorcraft',
'VTOL': 'VTOL/VSTOL',
'LTAV': 'LTAV',
'LAV': 'LAV',
'GRAV': 'Gravity',
'MOD_TRAILER': 'Trailer',
'OTHER': 'Other'
},
'DRONES': {
'DRONE_LARGE': 'Large Drone',
'DRONE_MEDIUM': 'Medium Drone',
'DRONE_SMALL': 'Small Drone',
'DRONE_MINI': 'Minidrone',
'DRONE_MICRO': 'Microdrone',
}
};
json.vehicles.concat(json.drones).forEach(vehicle => {
rowattrs = {};
row_id = generateRowID();
if(vehicle.type && vehicle.type == 'VEHICLES') {
rowattrs["repeating_vehicle_" + row_id + "_type"] = veh_types.VEHICLES[vehicle.subtype] || 'Other';
rowattrs["repeating_vehicle_" + row_id + "_subtype"] = vehicle.subtype || ' ';
} else {
rowattrs["repeating_vehicle_" + row_id + "_type"] = veh_types.DRONES[vehicle.type] || 'Drone';
rowattrs["repeating_vehicle_" + row_id + "_subtype"] = vehicle.subtype || ' ';
}
rowattrs["repeating_vehicle_" + row_id + "_name"] = vehicle.name;
rowattrs["repeating_vehicle_" + row_id + "_handling_onroad"] = vehicle.handlOn;
rowattrs["repeating_vehicle_" + row_id + "_handling_offroad"] = vehicle.handlOff;
rowattrs["repeating_vehicle_" + row_id + "_acceleration_base"] = vehicle.accelOn;
rowattrs["repeating_vehicle_" + row_id + "_speed_base"] = vehicle.speedIntOn;
rowattrs["repeating_vehicle_" + row_id + "_speed_max"] = vehicle.speed;
rowattrs["repeating_vehicle_" + row_id + "_body_base"] = vehicle.body;
rowattrs["repeating_vehicle_" + row_id + "_armor_base"] = vehicle.armor;
rowattrs["repeating_vehicle_" + row_id + "_pilot_base"] = vehicle.pilot;
rowattrs["repeating_vehicle_" + row_id + "_sensor_base"] = vehicle.sensor;
rowattrs["repeating_vehicle_" + row_id + "_seats"] = vehicle.seats || 0;
rowattrs["repeating_vehicle_" + row_id + "_flag"] = 'display';
rowattrs["repeating_vehicle_" + row_id + "_notes"] = vehicle.page + "\n" + vehicle.description + "\n";
if(vehicle.accessories) {
var accs = [];
vehicle.accessories.forEach(acc => {
accs.push(acc.name);
});
rowattrs["repeating_vehicle_" + row_id + "_notes"] += accs.join(', ');
}
setAttrs(rowattrs);
});
console.log("Character vehicles and drones imported");
// Process SINs
var sins = {};
json.sins.forEach(sin => {
sins[sin.name] = sin;
sins[sin.name].lifestyle = '';
sins[sin.name].licenses = '';
});
json.lifestyles.forEach(life => {
if(life.sin) {
sins[life.sin].lifestyle += '(' + life.customName + ', ' + life.name + ', ' + life.paidMonths + ' months)';
}
});
json.licenses.forEach(lic => {
sins[lic.sin].licenses += '(' + lic.name + ') ';
});
Object.keys(sins).forEach(key => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_lifestyle_" + row_id + "_name"] = sins[key].name;
rowattrs["repeating_lifestyle_" + row_id + "_rating"] = sins[key].quality;
rowattrs["repeating_lifestyle_" + row_id + "_lifestyle"] = sins[key].lifestyle;
rowattrs["repeating_lifestyle_" + row_id + "_licenses"] = sins[key].licenses;
rowattrs["repeating_lifestyle_" + row_id + "_notes"] = sins[key].description || '';
rowattrs["repeating_lifestyle_" + row_id + "_flag"] = 'display';
setAttrs(rowattrs);
});
console.log("Character sins, lifestyles and licenses imported");
// Process contacts
json.contacts.forEach(contact => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_contacts_" + row_id + "_favors"] = '0';
if(contact.name && contact.name.includes("FP")) {
const re = /\s*\((\d+)\s*FP\)/i;
var m = contact.name.match(re);
rowattrs["repeating_contacts_" + row_id + "_favors"] = m[1] || '';
contact.name = contact.name.replace(re, '');
}
rowattrs["repeating_contacts_" + row_id + "_name"] = contact.name || 'Anonymous ' + contact.type;
rowattrs["repeating_contacts_" + row_id + "_loyalty"] = contact.loyalty || 0;
rowattrs["repeating_contacts_" + row_id + "_influence"] = contact.influence || 0;
rowattrs["repeating_contacts_" + row_id + "_notes"] = contact.type + "\n" + contact.description;
rowattrs["repeating_contacts_" + row_id + "_flag"] = 'display';
setAttrs(rowattrs);
});
console.log("Character contacts imported");
// Process ranged weapons
var weapon_skills = {
'firearms': 'Firearms',
'exotic_weapons': 'Exotic Weapons',
'athletics': 'Athletics',
'close_combat': 'Close Combat',
'engineering': 'Engineering'
};
json.longRangeWeapons.forEach(range => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_range_" + row_id + "_name"] = range.name;
rowattrs["repeating_range_" + row_id + "_pool"] = range.pool;
rowattrs["repeating_range_" + row_id + "_dicepool_base"] = range.pool;
rowattrs["repeating_range_" + row_id + "_damage"] = range.damage;
rowattrs["repeating_range_" + row_id + "_skill"] = weapon_skills[range.skill];
rowattrs["repeating_range_" + row_id + "_type"] = range.type || '';
rowattrs["repeating_range_" + row_id + "_subtype"] = range.subtype || '';
rowattrs["repeating_range_" + row_id + "_flag"] = 'display';
var ARs = range.attackRating.split('/');
rowattrs["repeating_range_" + row_id + "_close"] = ARs[0];
rowattrs["repeating_range_" + row_id + "_near"] = ARs[1];
rowattrs["repeating_range_" + row_id + "_medium"] = ARs[2];
rowattrs["repeating_range_" + row_id + "_far"] = ARs[3];
rowattrs["repeating_range_" + row_id + "_extreme"] = ARs[4];
var re = /(\d+)/;
var m = range.ammunition.match(re);
if(m) {
rowattrs["repeating_range_" + row_id + "_ammo"] = m[1] || 0;
} else {
rowattrs["repeating_range_" + row_id + "_ammo"] = 0;
}
rowattrs["repeating_range_" + row_id + "_firing_modes"] = range.mode;
rowattrs["repeating_range_" + row_id + "_notes"] = range.page + "\n" + range.description + "\n";
if(range.wifi) {
range.wifi.forEach(wifi => {
rowattrs["repeating_range_" + row_id + "_notes"] += "Wireless: " + wifi + "\n";
});
}
var modifier = 0;
if(range.accessories) {
var accessories = [];
range.accessories.forEach(acc => {
accessories.push(acc.name);
if(acc.name.includes('martlink') || acc.name.includes('martgun')) {
modifier = 1;
}
});
rowattrs["repeating_range_" + row_id + "_notes"] += accessories.join(', ');
}
rowattrs["repeating_range_" + row_id + "_dicepool_modifier"] = modifier;
setAttrs(rowattrs);
});
console.log("Character long range weapons imported");
// Process melee weapons
json.closeCombatWeapons.forEach(melee => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_melee_" + row_id + "_name"] = melee.name;
rowattrs["repeating_melee_" + row_id + "_dicepool"] = melee.pool;
rowattrs["repeating_melee_" + row_id + "_dicepool_base"] = melee.pool;
rowattrs["repeating_melee_" + row_id + "_damage"] = melee.damage;
rowattrs["repeating_melee_" + row_id + "_type"] = melee.type || '';
rowattrs["repeating_melee_" + row_id + "_subtype"] = melee.subtype || '';
rowattrs["repeating_melee_" + row_id + "_skill"] = weapon_skills[melee.skill];
rowattrs["repeating_melee_" + row_id + "_flag"] = 'display';
var ARs = melee.attackRating.split('/');
rowattrs["repeating_melee_" + row_id + "_close"] = ARs[0];
rowattrs["repeating_melee_" + row_id + "_near"] = ARs[1];
rowattrs["repeating_melee_" + row_id + "_medium"] = ARs[2];
rowattrs["repeating_melee_" + row_id + "_far"] = ARs[3];
rowattrs["repeating_melee_" + row_id + "_extreme"] = ARs[4];
rowattrs["repeating_melee_" + row_id + "_notes"] = melee.page + "\n" + melee.description + "\n";
if(melee.wifi) {
melee.wifi.forEach(wifi => {
rowattrs["repeating_melee_" + row_id + "_notes"] += "Wireless: " + wifi + "\n";
});
}
var modifier = 0;
if(melee.accessories) {
var accessories = [];
melee.accessories.forEach(acc => {
accessories.push(acc.name);
});
rowattrs["repeating_melee_" + row_id + "_notes"] += accessories.join(', ');
}
rowattrs["repeating_melee_" + row_id + "_dicepool_modifier"] = modifier;
setAttrs(rowattrs);
});
console.log("Character melee weapons imported");
// Process spells and Preparations
var categories = {
'Combat spells': 'Combat',
'Detection spells': 'Detection',
'Heal spells': 'Health',
'Illusion spells': 'Illusion',
'Manipulation spells': 'Manipulation'
};
var effect_types = {
'Direct Combat': 'Direct Combat',
'Indirect Combat': 'Indirect Combat',
'Direct Combat, Area': 'Direct Combat, Area',
'Indirect Combat, Area': 'Indirect Combat, Area',
'Single-Sense': 'Single-Sense',
'Multi-Sense': 'Multi-Sense'
};
var durations = {
'Instantaneous': 'Instant',
'Sustained': 'Sustained',
'Limited': 'Limited',
'Permanent': 'Permanent'
};
var ranges = {
'Line of sight': 'LOS',
'Line of sight (Area)': 'LOS (A)',
'Special': 'Special',
'Touch': 'T'
};
json.spells.forEach(spell => {
rowattrs = {};
row_id = generateRowID();
var spell_type = 'spell';
if(spell.isAlchemistic) {
spell_type = 'preparations';
}
rowattrs["repeating_" + spell_type + "_" + row_id + "_name"] = spell.name;
rowattrs["repeating_" + spell_type + "_" + row_id + "_category"] = categories[spell.category];
rowattrs["repeating_" + spell_type + "_" + row_id + "_effect_type"] = '';
rowattrs["repeating_" + spell_type + "_" + row_id + "_type"] = spell.type;
rowattrs["repeating_" + spell_type + "_" + row_id + "_duration"] = durations[spell.duration];
rowattrs["repeating_" + spell_type + "_" + row_id + "_range"] = ranges[spell.range];
rowattrs["repeating_" + spell_type + "_" + row_id + "_drain"] = spell.drain;
rowattrs["repeating_" + spell_type + "_" + row_id + "_skill"] = '@{sorcery}';
if(spell.features) {
var effect_type = '';
var effect_area = '';
spell.features.forEach(fea => {
if(fea == 'area') {
effect_area = 'area';
} else {
effect_type = fea;
}
});
switch(effect_type) {
case 'direct':
effect_type = 'Direct Combat';
break;
case 'indirect':
effect_type = 'Indirect Combat';
break;
case 'sense_single':
effect_type = 'Single-Sense';
break;
case 'sense_multi':
effect_type = 'Multi-Sense';
break;
default:
effect_type = 'None';
break;
}
spell.effect_type = effect_type;
if(effect_area == 'area') {
spell.effect_type = spell.effect_type + ', Area';
}
rowattrs["repeating_" + spell_type + "_" + row_id + "_effect_type"] = spell.effect_type;
}
rowattrs["repeating_" + spell_type + "_" + row_id + "_display_flag"] = 'display';
rowattrs["repeating_" + spell_type + "_" + row_id + "_notes"] = spell.page + "\n" + spell.description + "\n";
if(spell.influencedBy[0]) {
rowattrs["repeating_" + spell_type + "_" + row_id + "_notes"] += "Influenced By: ";
var influences = [];
spell.influencedBy.forEach(inf => {
influences.push(inf);
});
rowattrs["repeating_" + spell_type + "_" + row_id + "_notes"] += influences.join(', ') + "\n";
}
setAttrs(rowattrs);
});
console.log("Character spells and preparations imported");
// Process rituals
json.rituals.forEach(ritual => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_ritual_" + row_id + "_name"] = ritual.name;
rowattrs["repeating_ritual_" + row_id + "_threshold"] = ritual.threshold;
rowattrs["repeating_ritual_" + row_id + "_flag"] = 'display';
rowattrs["repeating_ritual_" + row_id + "_notes"] = ritual.page + "\n" + ritual.description + "\n";
if(ritual.features[0]) {
rowattrs["repeating_ritual_" + row_id + "_notes"] += "Features: ";
var feats = [];
ritual.features.forEach(inf => {
feats.push(inf);
});
rowattrs["repeating_ritual_" + row_id + "_notes"] += feats.join(', ') + "\n";
}
console.log(rowattrs);
setAttrs(rowattrs);
});
console.log("Character rituals imported");
// Process adept powers
var powerActivations = {
'MAJOR_ACTION': 'Major',
'MINOR_ACTION': 'Minor',
'PASSIVE': 'Passive',
};
json.adeptPowers.forEach(power => {
rowattrs = {};
row_id = generateRowID();
power.rating = 1;
re = /\s*(\d+)$/;
var m = power.name.match(re);
if(m && m[1]) {
power.rating = m[1];
power.name = power.name.replace(re, '');
}
rowattrs["repeating_powers_" + row_id + "_name"] = power.name;
rowattrs["repeating_powers_" + row_id + "_rating"] = power.level || '';
rowattrs["repeating_powers_" + row_id + "_cost"] = power.cost;
rowattrs["repeating_powers_" + row_id + "_activation"] = powerActivations[power.activation];
rowattrs["repeating_powers_" + row_id + "_display_flag"] = 'display';
rowattrs["repeating_powers_" + row_id + "_notes"] = power.page + "\n" + power.description + "\n";
setAttrs(rowattrs);
});
console.log("Character adept powers imported");
// Process metamagic
if(json.metamagic) {
json.metamagic.forEach(meta => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_metamagic_" + row_id + "_name"] = meta.name;
rowattrs["repeating_metamagic_" + row_id + "_display_flag"] = 'display';
rowattrs["repeating_metamagic_" + row_id + "_notes"] = meta.page + "\n" + meta.description + "\n";
console.log(rowattrs);
setAttrs(rowattrs);
});
console.log("Character meta magics imported");
}
// Process echoes
if(json.echoes) {
json.echoes.forEach(echo => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_echoes_" + row_id + "_name"] = echo.name;
rowattrs["repeating_echoes_" + row_id + "_display_flag"] = 'display';
rowattrs["repeating_echoes_" + row_id + "_notes"] = echo.page + "\n" + echo.description + "\n";
setAttrs(rowattrs);
});
console.log("Character echoes imported");
}
// Process complex forms
var cf_durations = {
'Sustained': 'Sustained',
'Immediate': 'Instant',
'Permanent': 'Permanent'
};
if(json.complexForms) {
json.complexForms.forEach(form => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_forms_" + row_id + "_name"] = form.name;
rowattrs["repeating_forms_" + row_id + "_duration"] = cf_durations[form.duration];
rowattrs["repeating_forms_" + row_id + "_fade"] = form.fading;
rowattrs["repeating_forms_" + row_id + "_display_flag"] = 'display';
rowattrs["repeating_forms_" + row_id + "_notes"] = form.page + "\n" + form.description + "\n";
if(form.influences[0]) {
rowattrs["repeating_forms_" + row_id + "_notes"] += "Influenced By: ";
var influences = [];
form.influences.forEach(inf => {
influences.push(inf);
});
rowattrs["repeating_forms_" + row_id + "_notes"] += influences.join(', ') + "\n";
}
setAttrs(rowattrs);
});
console.log("Character complex forms imported");
}
// Process martial arts
if(json.martialArts) {
json.martialArts.forEach(mart => {
if(mart.techniques[0]) {
mart.techniques.forEach(tech => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_martial_" + row_id + "_technique"] = tech;
rowattrs["repeating_martial_" + row_id + "_style"] = mart.name;
rowattrs["repeating_martial_" + row_id + "_display_flag"] = 'display';
rowattrs["repeating_martial_" + row_id + "_notes"] = mart.page + "\n" + mart.description + "\n";
setAttrs(rowattrs);
});
}
});
console.log("Character martial arts imported");
}
// Process matrix devices
var programs = {};
var prog_list = [];
var matrix_device_types = {
'COMMLINK': 'Commlink',
'CYBERDECK': 'Cyberdeck',
'CYBER_HEADWARE': 'Cyberjack',
'RIGGER_CONSOLE': 'Command Console',
'TAC_NET': 'M-TOC'
}
if(json.matrixItems) {
json.matrixItems.forEach(dev => {
rowattrs = {};
row_id = generateRowID();
rowattrs["repeating_devices_" + row_id + "_name"] = dev.name;
rowattrs["repeating_devices_" + row_id + "_device_rating"] = dev.deviceRating;
rowattrs["repeating_devices_" + row_id + "_type"] = matrix_device_types[dev.subType];
rowattrs["repeating_devices_" + row_id + "_active_program_slots"] = dev.concurrentPrograms;
rowattrs["repeating_devices_" + row_id + "_attack"] = dev.attack;
rowattrs["repeating_devices_" + row_id + "_sleaze"] = dev.sleaze;
rowattrs["repeating_devices_" + row_id + "_data_processing"] = dev.dataProcessing;
rowattrs["repeating_devices_" + row_id + "_firewall"] = dev.firewall;
rowattrs["repeating_devices_" + row_id + "_display_flag"] = 'display';
rowattrs["repeating_devices_" + row_id + "_notes"] = dev.page + "\n" + dev.description + "\n";
if(dev.accessories) {
var accessories = [];
dev.accessories.forEach(acc => {
if(acc.rating) {
accessories.push(acc.name + ' ' + acc.rating);
} else {
accessories.push(acc.name);
}
});
rowattrs["repeating_devices_" + row_id + "_notes"] += accessories.join(', ');
}
// Build the list of programs to be used later
if(dev.programs) {
dev.programs.forEach(prog => {
if(! prog_list.includes(prog.name)) {
prog_list.push(prog.name);
programs[prog.name] = prog;
}
});
}
setAttrs(rowattrs);
});
console.log("Character matrix devices imported");
}
// Process programs
if(programs) {
rowattrs = {};
Object.keys(programs).forEach(key => {
row_id = generateRowID();
rowattrs["repeating_programs_" + row_id + "_name"] = programs[key].name;
rowattrs["repeating_programs_" + row_id + "_notes"] = programs[key].page + "\n" + programs[key].description;
});
setAttrs(rowattrs);
console.log("Character programs imported");
}
return true;
};
const clean = () => {
["quality", "skills", "knowledges", "armor", "items", "augmentations", "vehicle", "lifestyle", "contacts", "range", "melee", "spell", "ritual", "powers", "metamagic", "echoes", "forms", "martial", "devices", "programs"].forEach(group => {
getSectionIDs(`repeating_${group}`, (ids) => {
ids.forEach((id) => {
removeRepeatingRow(`repeating_${group}_${id}`);
});
});
});
};
</script>
</div>