mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 11:42:29 +00:00
[Shadowrun Sixth World] New Feature: Added Patterncraft skill from Deus Ex Arcana splatbook
14709 lines
839 KiB
HTML
14709 lines
839 KiB
HTML
<div class="compendium-drop-target npcs grunts contacts vehicles drones spirits sprites critters hosts">
|
|
<input type="hidden" value="" accept="Category" name="attr_compendium_drop_category"/>
|
|
<input type="hidden" value="" accept="Name" name="attr_compendium_drop_name"/>
|
|
<input type="hidden" value="" accept="data" name="attr_canvas_drop_data"/>
|
|
<input type="hidden" value="" accept="dropSubhead" name="attr_compendium_drop_header">
|
|
<input type="hidden" value="" accept="Content" name="attr_compendium_drop_content">
|
|
</div>
|
|
<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="">
|
|
<input class="compendium-drop-category" type="hidden" accept="Category" name="attr_compendium_drop_category" 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" i18n-data-placeholder="charactername" 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" i18n-data-placeholder="playername" placeholder="Player name" title="@{player_name}"/>
|
|
</label>
|
|
</div>
|
|
<div class="header-toggles">
|
|
<span> </span>
|
|
<h2 data-i18n="wgm" 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" data-i18n="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" data-i18n="modifiers">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" data-i18n="wdie">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> </span>
|
|
</div>
|
|
<div class="header-navtabs">
|
|
<input name="attr_tab" type="hidden" value="core"/>
|
|
<h1> </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" data-i18n-placeholder="name" placeholder="name" title="@{name}" />
|
|
</div>
|
|
<div class="row-long pd-meta">
|
|
<h2 data-i18n="metatype">Metatype</h2><input type="text" name="attr_metatype" data-i18n-placeholder="metatype" placeholder="metatype" title="@{metatype}" />
|
|
<h2 data-i18n="ethnicity">Ethnicity</h2><input type="text" name="attr_ethnicity" data-i18n-placeholder="ethnicity" placeholder="ethnicity" title="@{ethnicity}" />
|
|
</div>
|
|
<div class="row-long pd-age">
|
|
<h2 data-i18n="age">Age</h2><input type="text" name="attr_age" data-i18n-placeholder="age" placeholder="age" title="@{age}" />
|
|
<h2 data-i18n="sex">Sex</h2><input type="text" name="attr_sex" data-i18n-placeholder="sex" placeholder="sex" title="@{sex}" />
|
|
<h2 data-i18n="height-u">Height</h2><input type="text" name="attr_height" data-i18n-placeholder="height-u" placeholder="height" title="@{height}" >
|
|
<h2 data-i18n="weight">Weight</h2><input type="text" name="attr_weight" data-i18n-placeholder="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">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">Mod</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 data-i18n="effects">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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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> </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" data-i18n-placeholder="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" data-i18n-placeholder="mods" 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 data-i18n="knowledge">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 data-i18n="skills">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-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}]]}}{{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-computed}{{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-computed}{{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_display_rating" title="@{repeating_skills_${x}_display_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="Patterncraft" data-i18n="patterncraft">Patterncraft</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" data-i18n-placeholder="skillsphrtg" 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" data-i18n-placeholder="specializationword" 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" data-i18n-placeholder="expertiseword" 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" data-i18n-placeholder="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_type">Character Type</h2><br />
|
|
<select name="attr_flag_special">
|
|
<option data-i18n="mundane" value="mundane" selected>Mundane</option>
|
|
<option data-i18n="awakened" value="magic">Awakened</option>
|
|
<option data-i18n="technomancer" value="resonance">Technomancer</option>
|
|
</select>
|
|
</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>
|
|
<option value="gm_helper" data-i18n="gm_helper">GM Helper</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" data-i18n="enable_edge_rerolls_description">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" data-i18n="enable_modifier_changes_description">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> </div>
|
|
<button type="action" name="act_dr" value="@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{defense} ^{rating}}}{{rating=@{defense_rating}}}">
|
|
<span class="center"><span data-i18n="dr">DR</span> <span name="attr_defense_rating"></span></span>
|
|
</button>
|
|
<div> </div>
|
|
<button type="action" name="act_defense" value="@{gm_toggle} &{template:rolls-computed}{{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" data-i18n="defense">Defense</span>
|
|
</button>
|
|
<div> </div>
|
|
<button type="action" name="act_toxin_resist" value="@{gm_toggle} &{template:rolls-computed}{{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" data-i18n="resisttoxin">Resist Toxin</span>
|
|
</button>
|
|
<div> </div>
|
|
<button type="action" name="act_soak" value="@{gm_toggle} &{template:rolls-computed}{{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" data-i18n="soakdamage">Soak Damage</span>
|
|
</button>
|
|
<div> </div>
|
|
</div>
|
|
<div class="magic-defense">
|
|
<div> </div>
|
|
<button type="action" name="act_magic_ar" value="@{gm_toggle} &{template:rolls-computed}{{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> </div>
|
|
<button type="action" name="act_direct_magic_defense" value="@{gm_toggle} &{template:rolls-computed}{{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> </div>
|
|
<button type="action" name="act_indirect_magic_defense" value="@{gm_toggle} &{template:rolls-computed}{{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>
|
|
</div>
|
|
|
|
<div class="matrix-defense">
|
|
<div> </div>
|
|
<button name="act_matrix_attack_rating" type="action" value="&{template:rolls-computed}{{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> </div>
|
|
<button name="act_matrix_defense_rating" type="action" value="&{template:rolls-computed}{{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> </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> </div>
|
|
<button name="act_soak_biofeedback" type="action" value="@{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]]}}">
|
|
<span class="center" title="Willpower"><span class="center" data-i18n="biofeedbacksoak">Biofeedback Soak</span></span>
|
|
</button>
|
|
<div> </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" data-i18n="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" data-i18n="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" data-i18n="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" data-i18n="fire"> Fire </span><span class="armor-resist-value" name="attr_resist_fire_total"></span></span>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<span> </span>
|
|
</div>
|
|
<div class="row-long cc-row primary-range">
|
|
<h2 data-i18n="primaryrangedweapon">Primary Ranged Weapon</h2>
|
|
<h2> </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 name="attr_primary_range_weapon-rowid" type="hidden" value=""/>
|
|
<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-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}]]}}{{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> </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" />
|
|
<input type="hidden" name="attr_primary_range_weapon_notes" value="" />
|
|
<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 class="row-long cc-row primary-range-mods">
|
|
<h2 class="right mods-list-label" data-i18n="weapon_mods_list">Weapon Mods List</h2>
|
|
<span class="mods-flag pictos">y</span>
|
|
<input class="mods-flag modal-state" id="modal-primary-mods" name="attr_mods-flag" title="Weapon Mods Toggle" type="checkbox"/>
|
|
|
|
<div class="modal">
|
|
<label class="modal__bg" for="modal-primary-mods"></label>
|
|
<div class="modal__inner">
|
|
<label class="modal__close" for="modal-primary-mods"></label>
|
|
<div class="mods-title"><span name="attr_primary_range_weapon_name"></span><br><span i18n="weapon_mods_list">Weapon Mods List</span></div>
|
|
<div class="rows repeating-container">
|
|
<div class="row-long headers">
|
|
<span></span>
|
|
<h2 data-i18n="name">Name</h2>
|
|
<h2 data-i18n="location">Duration</h2>
|
|
<h2 data-i18n="source">Source</h2>
|
|
</span></span>
|
|
</span></span>
|
|
</div>
|
|
<fieldset class="repeating_range-weapon-mods">
|
|
<input name="attr_primary_range_weapon-rowid" type="hidden" value=""/>
|
|
<input class="settings-flag" name="attr_flag" type="hidden" value="settings"/>
|
|
<div class="buttons">
|
|
<input class="toggle" name="attr_active" value="on" type="checkbox"/>
|
|
<span class="pictos powerbutton">2</span>
|
|
</div>
|
|
<span name="attr_name" title="@{repeating_weapon-mods_${x}_name}"></span>
|
|
<span class="text-align-center" name="attr_location" title="@{repeating_range-weapon-mods_${x}_location}"></span>
|
|
<span class="text-align-center" name="attr_source" title="@{repeating_range-weapon-mods_${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> </span>
|
|
<input type="text" name="attr_name" value="" placeholder="" title="Mod Name" />
|
|
<input type="text" name="attr_location" value="" placeholder="" title="Location" />
|
|
<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_range-weapon-mods_${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_range-weapon-mods_${x}_modifications}"></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div>
|
|
<span> </span>
|
|
</div>
|
|
<div class="row-long cc-row primary-melee">
|
|
<h2 data-i18n="primarymeleeweapon">Primary Melee Weapon</h2>
|
|
<h2> </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">
|
|
<input type="hidden" name="primary_melee_weapon_notes" value="">
|
|
<button name="act_primary_melee_weapon" type="action" value="@{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}]]}}{{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> </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-computed}{{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☆ 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>
|
|
<input type="radio" name="attr_physical_damage" value="19" /><span></span>
|
|
<input type="radio" name="attr_physical_damage" value="20" /><span></span>
|
|
<input type="radio" name="attr_physical_damage" value="21" /><span></span><div>-7</div>
|
|
<input type="radio" name="attr_physical_damage" value="22" /><span></span>
|
|
<input type="radio" name="attr_physical_damage" value="23" /><span></span>
|
|
<input type="radio" name="attr_physical_damage" value="24" /><span></span><div>-8</div>
|
|
<input type="radio" name="attr_physical_damage" value="25" /><span></span>
|
|
<input type="radio" name="attr_physical_damage" value="26" /><span></span>
|
|
<input type="radio" name="attr_physical_damage" value="27" /><span></span><div>-9</div>
|
|
<input type="radio" name="attr_physical_damage" value="28" /><span></span>
|
|
<input type="radio" name="attr_physical_damage" value="29" /><span></span>
|
|
<input type="radio" name="attr_physical_damage" value="30" /><span></span><div>-10</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-computed}{{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. ☆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>
|
|
<input type="radio" name="attr_stun_damage" value="16" /><span></span>
|
|
<input type="radio" name="attr_stun_damage" value="17" /><span></span>
|
|
<input type="radio" name="attr_stun_damage" value="18" /><span></span><div>-6</div>
|
|
<input type="radio" name="attr_stun_damage" value="19" /><span></span>
|
|
<input type="radio" name="attr_stun_damage" value="20" /><span></span>
|
|
<input type="radio" name="attr_stun_damage" value="21" /><span></span><div>-7</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> </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" data-i18n-placeholder="qualitiesphname" 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" data-i18n-placeholder="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" data-i18n-placeholder="mods" 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} &{template:rolls-computed}{{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" data-i18n-placeholder="techniquesphname" placeholder="technique name" title="@{repeating_martial_${x}_technique}" type="text"/>
|
|
<input name="attr_style" data-i18n-placeholder="techniquesphstyle" 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" data-i18n-placeholder="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-computed}{{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>
|
|
<h3 data-i18n="has_mods">Has Mods</h3>
|
|
<input name="attr_has_mods" value="1" title="@{repeating_range_${x}_has_mods" type="checkbox"/>
|
|
</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-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}]]}}{{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 type="hidden" name="attr_dicepool">
|
|
<input class="flag-primary" name="attr_primary" type="hidden" value=""/>
|
|
<input class="flag-primary" name="attr_additional" type="hidden" value=""/>
|
|
<button class="dicepool" name="act_grenadeweapon" type="action" value="@{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}]]}}{{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>
|
|
<button class="no-dicepool" name="act_grenadeweaponnodicepool" type="action" value="@{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}]]}}{{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" data-i18n-placeholder="grenadephname" 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" data-i18n-placeholder="grenadephgz" 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" data-i18n-placeholder="grenadephclose" placeholder="12P" title="@{repeating_grenade_${x}_close}" type="text" value=""/>
|
|
</label>
|
|
<label data-i18n-title="near" title="Near 4-50">
|
|
<input name="attr_near" data-i18n-placeholder="grenadephnear" placeholder="8P" title="@{repeating_grenade_${x}_near}" type="text" value=""/>
|
|
</label>
|
|
<label data-i18n-title="blast" title="Blast Area">
|
|
<input name="attr_blast" data-i18n-placeholder="grenadephblast" 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="custom_dicepool" value="custom">Custom Dicepool</option>
|
|
<option data-i18n="thrown" value="@{athletics}+@{agility}">Thrown</option>
|
|
<option data-i18n="launcher" value="@{exotic weapons}+@{logic}">Exotic Weapons</option>
|
|
<option data-i18n="engineering" value="@{engineering}+@{logic}">Engineering</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" data-i18n-placeholder="armorphname" 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">
|
|
|
|
<div class="row1">
|
|
<label data-i18n-title="Augmentations" title="Augmentations">
|
|
<input name="attr_name" data-i18n-placeholder="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 name="attr_essence_cost" placeholder="0" title="@{repeating_augmentations_${x}_essence_cost}" type="number" step="0.01" value=""/>
|
|
</label>
|
|
<span> </span>
|
|
<span> </span>
|
|
</div>
|
|
|
|
<div class="row2">
|
|
<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="omega" value="Omega">Omega</option>
|
|
<option data-i18n="exoware" vaue="Exoware">Exoware</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>
|
|
<option data-i18n="gammaware" value="Gammaware">Gammaware</option>
|
|
</select>
|
|
</label>
|
|
</div>
|
|
<div class="row3">
|
|
<label data-i18n-title="essence_base" title="Essence Base">
|
|
<span data-i18n="essence_base" title="Place the base essence cost for Standard Grade, Rating 1 augmentation here. If the essence cost is based on Rating x #.#, enter 'Rating x 0.1' and make sure 'Essence Cost Raw' is unchecked"></span>
|
|
<input class="" style="width: unset;" name="attr_essence_base" placeholder="" title="@{repeating_augmentations_${x}_essence_base" type="text" value="" />
|
|
</label>
|
|
<span> </span>
|
|
<label data-i18n-title="essence_cost_raw_title" title="Use Raw Essence Cost (no calculations applied)">
|
|
<span data-i18n="essence_cost_raw" title="Do not apply any calculations to the current Essence Cost value. This is checked by default for legacy characters to avoid changing data incorrectly."></span>
|
|
<input class="" name="attr_essence_cost_raw" placeholder="" title="@{repeating_augmentations_${x}_essence_base" type="hidden" value="" />
|
|
<input class="" name="attr_essence_cost_raw" placeholder="" title="@{repeating_augmentations_${x}_essence_base" type="checkbox" value="1" />
|
|
</label>
|
|
</div>
|
|
|
|
<label data-i18n-title="notes" title="notes">
|
|
<span data-i18n="notes">notes</span>
|
|
<textarea name="attr_notes" data-i18n-placeholder="notes" placeholder="Notes" title="@{repeating_augmentations_${x}_notes}"></textarea>
|
|
</label>
|
|
<label data-i18n-title="modifications" title="modifications">
|
|
<span data-i18n="modifications">modifications</span>
|
|
<textarea name="attr_modifications" data-i18n-placeholder="mods" placeholder="Attribute: +/- 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" data-i18n-placeholder="geardefaultname" 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" data-i18n-placeholder="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" data-i18n-placeholder="mods" 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-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}]]}}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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" data-i18n-placeholder="spellsphname" 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" data-i18n-placeholder="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-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}]]}}{{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-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}]]}}{{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" data-i18n-placeholder="preparationsphname" 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" data-i18n-placeholder="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-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}]]}}{{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-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?|})+@{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" 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" data-i18n-placeholder="ritualsphname" 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" data-i18n-placeholder="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-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}]]}}{{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" checked="checked" value="on"/><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" data-i18n-placeholder="powersphname" placeholder="name" title="@{repeating_powers_${x}_name}" type="text" value=""/>
|
|
</label>
|
|
<label data-i18n-title="rating" title="rating">
|
|
<input name="attr_rating" data-i18n-placeholder="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" data-i18n-placeholder="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" data-i18n-placeholder="mods" 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-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}]]}}{{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> </span>
|
|
<button name="act_conjuring" type="action" value="@{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}]]}}{{desc=[Spirit Resist](~@{character_name}|SpiritResistForce?{Force?})}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="summonspirit"></span></button>
|
|
<span> </span>
|
|
<h3 data-i18n="asrep">AsRep</h3>
|
|
<label data-i18n-title="asrep" title="Astral Reputation">
|
|
<input name="attr_astral_reputation" title="@{astral_reputation}" placeholder="" type="number" value=""/>
|
|
</label>
|
|
<span> </span>
|
|
<!-- hidden spirit resist buttons -->
|
|
<button class="btn ui-draggable" name="act_SpiritResistForce1" type="action" style="display: none;" value="@{gm_toggle} &{template:rolls-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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" data-i18n-placeholder="spiritsphforce" placeholder="force" title="@{repeating_spirits_${x}_force}" type="number" value=""/>
|
|
</label>
|
|
<label data-i18n-title="spirit" title="spirit">
|
|
<input class="left" name="attr_spirit" data-i18n-placeholder="spiritsphspirit" 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" data-i18n-placeholder="spiritsphskills" 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" data-i18n-placeholder="spiritsphpowers" 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" data-i18n-placeholder="spiritsphattacks" 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-logic" value="Hermeticism">Hermeticism (Logic)</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-charisma" value="Shamanism">Shamanism (Charisma)</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" checked="checked" value="on"/><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" data-i18n-placeholder="metamagicsphname" placeholder="name" title="@{repeating_metamagic_${x}_name}" type="text" value=""/>
|
|
</label>
|
|
<label data-i18n-title="rating" title="rating">
|
|
<input name="attr_rating" data-i18n-placeholder="metamagicsphrating" 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" data-i18n-placeholder="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" data-i18n-placeholder="mods" 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> </span>
|
|
<label><button class="techno-hide" name="act_matrix_device_rating" type="action" value="&{template:rolls-computed}{{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> </span>
|
|
<label><button name="act_matrix_attack_rating" type="action" value="&{template:rolls-computed}{{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> </span>
|
|
<label><button name="act_matrix_defense_rating" type="action" value="&{template:rolls-computed}{{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> </span>
|
|
</div>
|
|
<div class="row-long row-matrix-soak">
|
|
<div> </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> </div>
|
|
<button name="act_soak_biofeedback" type="action" value="@{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=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> </div>
|
|
</div>
|
|
<div class="row-long technomancer-attributes techno-see">
|
|
<span> </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> </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> </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> </h2>
|
|
<h2> </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> </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> </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="" data-i18n-placeholder="devicesphname" 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> </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="controlrig" value="Control Rig">Control Rig</option>
|
|
<option data-i18n="mtoc" value="M-TOC">M-TOC</option>
|
|
</select>
|
|
</label>
|
|
<span> </span>
|
|
<h3 data-i18n="activeprogramslots">ActiveProgram 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> </span>
|
|
</div>
|
|
<div class="row3">
|
|
<span> </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> </span>
|
|
</div>
|
|
<div class="row4">
|
|
<span> </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> </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> </span>
|
|
</div>
|
|
<div class="row-condition-monitor">
|
|
<span> </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> </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> </span>
|
|
</div>
|
|
<div class="row5">
|
|
<h3 data-i18n="notes">notes</h3>
|
|
<label data-i18n-title="notes" title="notes">
|
|
<textarea name="attr_notes" data-i18n-placeholder="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" data-i18n-placeholder="mods" 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" data-i18n-placeholder="programsphname" 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" data-i18n-placeholder="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" data-i18n-placeholder="mods" 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-computed}{{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-computed}{{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-computed}{{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-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}]]}}{{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" data-i18n-placeholder="complexformsphname" 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" data-i18n-placeholder="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" data-i18n-placeholder="mods" 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"/>
|
|
<button style="display: none !important;" name="act_fade_registering" type="action" value=""></button>
|
|
<div class="pc-row submersion-headers">
|
|
<button data-i18n="resistfade" name="act_fade_compiling" type="action" value="@{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}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}{{desc=Willpower + Charisma}}"></button>
|
|
<span> </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> </span>
|
|
<button name="act_compiling" type="action" value="@{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|Assassin|Defender|Modular|Music|Primal|Other} Sprite, Level ?{Level?|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15}}}{{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> </span>
|
|
<button name="act_registering" type="action" value="@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Registering ?{Sprite Type?|Courier|Crack|Data|Fault|Machine|Assassin|Defender|Modular|Music|Primal|Other} Sprite, Level ?{Level?|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15}}}{{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}|spriteRegisterLevel?{Level?})}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span data-i18n="registersprite"></span></button>
|
|
<span> </span>
|
|
<!-- hidden sprite resist buttons -->
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel1" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 1 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[2d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel2" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 2 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[4d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel3" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 3 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[6d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel4" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 4 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[8d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel5" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 5 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[10d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel6" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 6 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[12d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel7" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 7 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[14d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel8" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 8 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[16d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel9" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 9 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[18d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel10" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 10 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[20d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel11" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 11 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[22d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel12" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 12 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[24d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel13" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 13 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[26d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel14" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 14 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[28d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteresistlevel15" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 15 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[30d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}"></button>
|
|
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel1" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 1 ^{sprite}}}{{base=Registering Resist}}{{dice=[[2d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel2" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 2 ^{sprite}}}{{base=Registering Resist}}{{dice=[[4d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel3" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 3 ^{sprite}}}{{base=Registering Resist}}{{dice=[[6d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel4" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 4 ^{sprite}}}{{base=Registering Resist}}{{dice=[[8d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel5" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 5 ^{sprite}}}{{base=Registering Resist}}{{dice=[[10d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel6" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 6 ^{sprite}}}{{base=Registering Resist}}{{dice=[[12d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel7" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 7 ^{sprite}}}{{base=Registering Resist}}{{dice=[[14d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel8" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 8 ^{sprite}}}{{base=Registering Resist}}{{dice=[[16d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel9" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 9 ^{sprite}}}{{base=Registering Resist}}{{dice=[[18d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel10" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 10 ^{sprite}}}{{base=Registering Resist}}{{dice=[[20d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel11" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 11 ^{sprite}}}{{base=Registering Resist}}{{dice=[[22d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel12" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 12 ^{sprite}}}{{base=Registering Resist}}{{dice=[[24d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel13" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 13 ^{sprite}}}{{base=Registering Resist}}{{dice=[[26d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel14" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 14 ^{sprite}}}{{base=Registering Resist}}{{dice=[[28d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></button>
|
|
<button class="btn ui-draggable" name="act_spriteregisterlevel15" type="action" style="display: none !important;" value="@{gm_toggle} &{template:rolls-computed}{{header=^{level} 15 ^{sprite}}}{{base=Registering Resist}}{{dice=[[30d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}"></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" data-i18n-placeholder="echosphname" placeholder="Echo 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" data-i18n-placeholder="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" data-i18n-placeholder="mods" placeholder="Attribute: +/-mod" title="@{repeating_echos_${x}_modifications}"></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div> </div>
|
|
|
|
<div class="rows">
|
|
<h1 data-i18n="sprites">Sprites</h1>
|
|
</div>
|
|
<div class="rows repeating-container sprites">
|
|
<div class="pc-row headers">
|
|
<span> </span>
|
|
<h2 data-i18n="lvl">Lvl</h2>
|
|
<h2 data-i18n="type">Type</h2>
|
|
<h2 data-i18n="tasks">Tasks</h2>
|
|
<h2 data-i18n="cm">CM</h2>
|
|
<h2 data-i18n="OS">OS</h2>
|
|
<span> </span>
|
|
<span> </span>
|
|
<span> </span>
|
|
</div>
|
|
<fieldset class="repeating_sprites">
|
|
<span> </span>
|
|
<span name="attr_level"></span>
|
|
<span name="attr_type"></span>
|
|
<span name="attr_tasks"></span>
|
|
<span name="attr_condition_monitor"></span>
|
|
<span name="attr_os"></span>
|
|
<span> </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="assassinsprite" value="Assassin">Assassin</option>
|
|
<option data-i18n="defendersprite" value="Defender">Defender</option>
|
|
<option data-i18n="modularprite" value="Modular">Modular</option>
|
|
<option data-i18n="musicsprite" value="Music">Music</option>
|
|
<option data-i18n="primalsprite" value="Primal">Primal</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>
|
|
<label data-i18n-title="cm" title="CM">
|
|
<input name="attr_condition_monitor" type="number" title="@{repeating_sprites_${x}_condition_monitor}" min="0" step="1" value="">
|
|
</label>
|
|
<label data-i18n-title="OS" title="OS">
|
|
<input name="attr_os" type="number" title="@{repeating_sprites_${x}_os}" min="0" step="1" value="">
|
|
</label>
|
|
<span> </span>
|
|
<label data-i18n-title="notes" title="Notes"><span data-i18n="notes">Notes</span>
|
|
<textarea name="attr_notes" data-i18n-placeholder="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" data-i18n-placeholder="birthnameph" placeholder="John Q Public" title="@{birth_name}" />
|
|
</div>
|
|
<div class="row-long">
|
|
<div class="row-long heat-rep-asrep">
|
|
<span> </span>
|
|
<h2 data-i18n="reputation">Reputation</h2><input type="number" name="attr_reputation" placeholder="#" title="@{reputation}" />
|
|
<span> </span>
|
|
<h2 data-i18n="heat">Heat</h2><input type="number" name="attr_heat" placeholder="#" title="@{heat}" />
|
|
<span> </span>
|
|
<h2 data-i18n="asrep">AsRep</h2><input type="number" name="attr_astral_reputation" placeholder="" title="@{astral_reputation}" />
|
|
<span> </span>
|
|
</div>
|
|
</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" data-i18n-placeholder="sinsphname" 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" data-i18n-placeholder="sinsphlifestyle" placeholder="Middle" title="Related lifestyle"></textarea>
|
|
<h3 data-i18n="licenses">Licenses</h3>
|
|
<textarea name="attr_licenses" data-i18n-placeholder="sinsphlicenses" placeholder="Technomancer, Pistols" title="Licenses"></textarea>
|
|
<h3 data-i18n="notes">Notes</h3>
|
|
<textarea name="attr_notes" data-i18n-placeholder="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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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-computed}{{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> </span>
|
|
<span> </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" value="on" />
|
|
<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" data-i18n-placeholder="contactsphname" 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> </span>
|
|
<span> </span>
|
|
<h3 data-i18n="notes">Notes</h3>
|
|
<textarea name="attr_notes" data-i18n-placeholder="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" data-i18n-placeholder="vehiclesphname" placeholder="name" title="Vehicle name" />
|
|
<span> </span>
|
|
<span> </span>
|
|
<span> </span>
|
|
<span> </span>
|
|
<span> </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" data-i18n-placeholder="word_onroad" placeholder="On" title="Handling On-Road" />
|
|
<input type="number" name="attr_handling_offroad" data-i18n-placeholder="word_offroad" placeholder="Off" title="Handling Off-Road" />
|
|
<input type="number" name="attr_handling_modifier" data-i18n-placeholder="word_mod" 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" data-i18n-placeholder="word_base" placeholder="Base" title="Acceleration Base" />
|
|
<input type="number" name="attr_acceleration_modifier" data-i18n-placeholder="word_mod" placeholder="Mod" title="Acceleration Modifier" />
|
|
<input type="hidden" name="attr_display_acceleration" />
|
|
<span> </span>
|
|
<label data-i18n="speed">Speed</label>
|
|
<input type="hidden" name="attr_speed" />
|
|
<input type="number" name="attr_speed_base" data-i18n-placeholder="word_base" placeholder="Base" title="Speed Interval" />
|
|
<input type="number" name="attr_speed_modifier" data-i18n-placeholder="word_mod" placeholder="Mod" title="Speed Modifier" />
|
|
<input type="number" name="attr_speed_max" data-i18n-placeholder="word_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" data-i18n-placeholder="word_base" placeholder="Base" title="Body Base" />
|
|
<input type="number" name="attr_body_modifier" data-i18n-placeholder="word_mod" placeholder="Mod" title="Body Modifier" />
|
|
<span> </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" data-i18n-placeholder="word_base" placeholder="Base" title="Armor Base" />
|
|
<input type="number" name="attr_armor_modifier" data-i18n-placeholder="word_mod" placeholder="Mod" title="Armor Modifier" />
|
|
<span> </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" data-i18n-placeholder="word_base" placeholder="Base" title="Pilot Base" />
|
|
<input type="number" name="attr_pilot_modifier" data-i18n-placeholder="word_mod" placeholder="Mod" title="Pilot Modifier" />
|
|
<span> </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" data-i18n-placeholder="word_base" placeholder="Base" title="Sensor Base" />
|
|
<input type="number" name="attr_sensor_modifier" data-i18n-placeholder="word_mod" placeholder="Mod" title="Sensor Modifier" />
|
|
<span> </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-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}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
|
|
<input type="number" name="attr_clearsight" title="Clearsight" value="0">
|
|
</div>
|
|
<span> </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-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}]]}}{{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-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}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
|
|
<input type="number" name="attr_evasion" title="evasion" value="0">
|
|
</div>
|
|
<span> </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-computed}{{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-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}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
|
|
<input type="number" name="attr_stealth" title="stealth" value="0">
|
|
</div>
|
|
<span> </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-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}]]}}{{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" data-i18n-placeholder="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-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}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
|
|
<span name="attr_clearsight"></span>
|
|
</div>
|
|
<span> </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-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}]]}}{{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-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}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
|
|
<span name="attr_evasion"></span>
|
|
</div>
|
|
<span> </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-computed}{{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-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}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"></button>
|
|
<span name="attr_stealth"></span>
|
|
</div>
|
|
<span> </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-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}]]}}{{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" data-i18n-placeholder="playernotesph" 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> </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> </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> </span>
|
|
</div>
|
|
<div class="collapse"><span name="attr_notes"></span></div>
|
|
|
|
<div class="settings">
|
|
<div class="sess-info">
|
|
</span> </span>
|
|
<input type="text" name="attr_date" value="" data-i18n-placeholder="sessionsphdate" placeholder="Date Played" title="Date Played" />
|
|
<input type="text" name="attr_name" value="" data-i18n-placeholder="sessionsphname" placeholder="Session Name" title="Session Name" />
|
|
<input type="text" name="attr_gm" value="" data-i18n-placeholder="sessionsphgm" placeholder="Agent/GM" title="Agent/GM" />
|
|
</span> </span>
|
|
</div>
|
|
<div class="sess-awards">
|
|
<span> </span>
|
|
<input type="text" name="attr_karma" value="" data-i18n-placeholder="sessionsphkarma" placeholder="Karma" title="Karma" />
|
|
<input type="text" name="attr_nuyen" value="" data-i18n-placeholder="sessionsphnuyen" placeholder="Nuyen" title="Nuyen" />
|
|
<input type="text" name="attr_reputation" value="" data-i18n-placeholder="sessionsphreputation" placeholder="Reputation" title="Reputation" />
|
|
<input type="text" name="attr_heat" value="" data-i18n-placeholder="sessionsphheat" placeholder="Heat" title="Heat" />
|
|
</span> </span>
|
|
</div>
|
|
<label data-i18n-title="notes" title="notes"><span data-i18n="notes">Notes</span>
|
|
<textarea name="attr_notes" data-i18n-placeholder="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"><b>2025-11-13 v.92</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Patterncraft to skills
|
|
</ul>
|
|
<span class="changelog-entry"><b>2025-07-15 v.91</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Minor bugfixes
|
|
</ul>
|
|
<span class="changelog-entry"><b>2025-07-11 v.91</b> Karovex</span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added 'fade_compiling_modifier' to support the Sprite Conduit echo bonus
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added 'sprite_resist_dv_modifier' to suppor the Technoshaman compiling DV reduction
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Sprite levels 11-15
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added New Sprite Types (Assassin, Defender, Modular, Music, Primal)
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added CM and OS trackers per sprite
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Register Sprite macro chain
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - While Compiling a Sprite, the 'Resist Fade' macro will now roll the proper stats (Willpower+Charisma instead of Willpower+Logic)
|
|
</ul>
|
|
<span class="changelog-entry"><b>2025-03-16 v.90</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added i18n values for translating many placeholders and some other labels throughout the Player facing sheet. Thanks to Talon_Zorch for his hard work translating the sheet on Crowdin and compiling the list for me to add.
|
|
</ul>
|
|
<span class="changelog-entry"><b><REDACTED> v.89</b> <REDACTED></span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Did a v.89 ever exist? The megacorps say it did not and you should stop wondering about it... <span style="font-size: smaller;">skipped a version number, oops</span>
|
|
</ul>
|
|
<span class="changelog-entry"><b>2024-10-11 v.88</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added lwa spirits from Shadows In Focus: That Old Voodoo to the Spirit NPC sheet. (Agwe, Azaca, Damballah, Erzulie, Ghede, Legba, Obatala, Ogoun and Shango)
|
|
</ul>
|
|
<span class="changelog-entry"><b>2024-06-05 v.87</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Found an issue with imports where items would be dropped mysteriously. This affected anything that was in a repeating list and was tied to unique ids within Roll20. Added another check to prevent duplicate ids.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2024-03-03 v.86</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Essence Mod works again
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Omega, Exoware and Gammaware to Augmentation grade drop downs and essence calculations. They do not however add the bad luck quality or extra condition monitor boxes when selected.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-09-04 v.85</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - GM Helper sheet, added extended test and d6 roll buttons so GMs can roll from the sheet if needed.
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - PC Vehicles tab, handling mod was only reflected on the onroad handling value not the offroad value when settings mode was turned off.
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - GM Helper sheet, incrementing OS using the + button was doing strange things, this has been fixed.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-07-10 v.84</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Skill mods in the repeating skill list now should update those skills everywhere in the sheet.
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - AoE Spells weren't adding the right amount of drain for 12m and 14m
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Attribute+Attribute selections were missing Strength
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Sprint rolls now include -1 skill modifier if the PC doesn't have an Athletics skill. Also added a function to resynch the hidden skill attributes any time a skill name is changed (via the drop down changing) or a skill is deleted.
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Fixed the increment button on the OS Tracker it now adds 1 instead of concatenating a 1 after the other digits sometimes.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-06-15 v.83</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Beginning work on the GM Helper sheet, step 1 add an OS Tracker. I'm open to suggestions for other helpful GM tools to include in this sheet in the usual venues (Discord, Patreon, Roll20 DMs)
|
|
<li><span class="bullet">F</span><b>New Feature</b> - GMs rejoice, select a token on the board and click the "Track Selected" button on the GM Helper character sheet to add the selected character's name and A/S/D/F to the tracker.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-05-30 v.82</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">E</span><b>Update</b> - Added Hack & Slash Matrix Actions to the Rolls Pane -> Matrix Roll Buttons
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Matrix Roll Buttons Legality Filter, this allows you to hide illegal actions. For pcs without a matrix persona or that are worried about OS
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Matrix Roll Buttons Access Level Filter, this allows you to hide actions that are not usable at a particular Matrix Access Level (outsider/user/admin)
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-05-22 v.81</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - More weapon dicepool tweaks
|
|
<li><span class="bullet">F</span><b>New Feature</b> - NPC->Spirits made spirits awakened and now display the spells section for them. Dicepool does not auto-update when spirit force changes, that is an exercise for the user.
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Critter Powers drag and drop from the compendium for spirits and grunts.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-05-18 v.80</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - PC Qualities were always showing up as Negative regardless of the actual type.
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - PC->Spells Ranges of Touch were showing up as LOS.
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - PC/NPC Defense rolls throwing an error for the armor_rating, updated PC sheets to use defense_rating so they match NPC sheets.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-05-01 v.79</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Resonance and Level to the sprite skill rolls attribute options
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Magic and Force to the spirit skill rolls attribute options
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Magic AR to combat spell roll templates
|
|
<li><span class="bullet">F</span><b>New Feature</b> - PC Added DR to Defense rolls template
|
|
<li><span class="bullet">F</span><b>New Feature</b> - NPC Added Universal Dicepool Adjustment (@{uda}) for GMs that with to add a dicepool penalty/bonus to all rolls the NPC makes.
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Fix to Grunts dicepool bug.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-03-27 v.78</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Final(?) fix to Spirit and Vehicle dicepool bug. Spirit ranged/melee dicepools are set when the spirit is created (when force/type are changed and reset toggle is on). Vehicle pools are set when the sheet owner sets them. They will only change now if/when they are in grunt groups and the number of grunts change or the sheet owner changes the dicepool directly.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-03-20 v.77</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - (?) Trying to fix some dicepool bugs on NPC and Vehicle sheets tied to grunt groups.
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Vehicle physical and matrix condition monitors weren't updating right on drag and drop
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-03-13 v.76</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Fixed Spirit Astral initiative dice had been reduced to mere metahumanity levels, they've been returned to their previous exceptionalism.
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-02-27 v.75</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">F</span><b>New Feature</b> - PC-Magic-Conjuring Added Astral Reputation and added AsRep to Summon Spirit button output
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Heat, Reputation and AsRep to the Social Pane
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Drag and Drop support for Gear-Ammunition-Grenades Gear-Ammunition-Rockets to place them in the Arms-Grenades section instead of Gear
|
|
<li><span class="bullet">F</span><b>New Feature</b> - Added Grenade dicepool calculations
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-02-27 v.74</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Fix for matrix device stats on drag and drop for NPCs
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - Fix for Sprite drag and drop issue
|
|
<li><span class="bullet">F</span><b>New Feature</b> - NPCs->Grunts added a stun monitor and flag to display it (it is hidden by default)
|
|
</ul>
|
|
<span class="changelog-entry"><b>2023-02-23 v.73</b> Chuz (James Culp)</span>
|
|
<ul>
|
|
<li><span class="bullet">A</span><b>Bugfix</b> - PC Initiatives - Fixed a condition where if a dice mod is set and then the initiative base is changed it keeps adding the dice mod repeatedly.
|
|
</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>
|
|
<button class="btn ui-draggable" name="act_matrixresist_w_f" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_dp_f" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_f_f" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_int_dp" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_dp_s" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_c_dp" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_dp_dr" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_a_dp" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_w_s" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_dr_dr" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_l_f" type="action" style="display: none;" value=""></button>
|
|
<button class="btn ui-draggable" name="act_matrixresist_pilot_f" 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">
|
|
<input type="hidden" name="attr_display_illegal_matrix_actions" value="">
|
|
<input type="hidden" name="attr_matrix_access_level_filter" value="">
|
|
<h3 data-i18n="rollbuttonsdisclaimer"></h3><br>
|
|
<span class="full-width">
|
|
<label class="fright" data-i18n-title="illegal_actions" title="Display Illegal Actions">
|
|
<span data-i18n="illegal_actions"></span>
|
|
<input type="checkbox" name="attr_display_illegal_matrix_actions" value="1" checked="checked" title="@{display_illegal_matrix_actions}">
|
|
</label>
|
|
</span>
|
|
<span class="full-width">
|
|
<label class="fleft" 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>
|
|
<label class="fright" data-i18n-title="matrix_access_level" title="Access Level Filter">
|
|
<span data-i18n="access_level_filter"></span>
|
|
<select name="attr_matrix_access_level_filter" title="@{matrix_access_level_filter}">
|
|
<option data-i18n="all" value="all">All</option>
|
|
<option data-i18n="outsider" value="outsider">Outsider</option>
|
|
<option data-i18n="user" value="user">User</option>
|
|
<option data-i18n="admin" value="admin">Admin</option>
|
|
</select>
|
|
</label>
|
|
</span>
|
|
<hr>
|
|
<h2 data-i18n="matrixmajor">Matrix Major Actions</h2>
|
|
<button title="Cracking + Logic" class="illegal outsider crb" name="act_matrix_backdoor_entry" type="action" value=""><span data-i18n="backdoorentry"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_brute_force" type="action" value=""><span data-i18n="bruteforce"></span></button>
|
|
<button title="Cracking + Logic" class="legal user admin hs" name="act_matrix_calibration" type="action" value=""><span data-i18n="calibration"></span></button>
|
|
<button title="Cracking + Logic" class="illegal admin crb" name="act_matrix_check_os" type="action" value=""><span data-i18n="checkos"></span></button>
|
|
<button title="Electronics + Logic" class="legal user admin crb" name="act_matrix_control_device" type="action" value=""><span data-i18n="controldevice"></span></button>
|
|
<button title="Cracking + Logic" class="illegal user admin crb" name="act_matrix_crack_file" type="action" value=""><span data-i18n="crackfile"></span></button>
|
|
<button title="Cracking + Logic" class="illegal admin crb" name="act_matrix_crash_program" type="action" value=""><span data-i18n="crashprogram"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_data_spike" type="action" value=""><span data-i18n="dataspike"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin hs" name="act_matrix_delayed_command" type="action" value=""><span data-i18n="delayed_command"></span></button>
|
|
<button title="Electronics + Logic" class="illegal outsider hs" name="act_matrix_denial_of_service" type="action" value=""><span data-i18n="denial_of_service"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin hs" name="act_matrix_device_lock" type="action" value=""><span data-i18n="device_lock"></span></button>
|
|
<button title="Cracking + Logic" class="legal user admin crb" name="act_matrix_disarm_data_bomb" type="action" value=""><span data-i18n="disarmdatabomb"></span></button>
|
|
<button title="Electronics + Logic" class="legal user admin crb" name="act_matrix_edit_file" type="action" value=""><span data-i18n="editfile"></span></button>
|
|
<button title="Electronics + Logic" class="legal user admin crb" name="act_matrix_encrypt_file" type="action" value=""><span data-i18n="encryptfile"></span></button>
|
|
<button title="Electronics + Logic" class="illegal user admin crb" name="act_matrix_erase_matrix_signature" type="action" value=""><span data-i18n="erasematrixsignature"></span></button>
|
|
<button title="Electronics + Logic" class="legal admin crb" name="act_matrix_format_device" type="action" value=""><span data-i18n="formatdevice"></span></button>
|
|
<span class="matrix-action legal outsider user admin crb" data-i18n="fullmatrixdefense"></span>
|
|
<button title="Cracking + Logic" class="illegal user admin hs" name="act_matrix_garbage_in_garbage_out" type="action" value=""><span data-i18n="garbage_in_garbage_out"></span></button>
|
|
<button title="Electronics + Logic" class="illegal user admin crb" name="act_matrix_hash_check" type="action" value=""><span data-i18n="hashcheck"></span></button>
|
|
<button title="Cracking + Intuition" class="illegal outsider user admin crb" name="act_matrix_hide" type="action" value=""><span data-i18n="hide"></span></button>
|
|
<button title="Electronics + Willpower" class="legal outsider user admin crb" name="act_matrix_jackout" type="action" value=""><span data-i18n="jackout"></span></button>
|
|
<button title="Cracking + Logic" class="illegal admin crb" name="act_matrix_jam_signals" type="action" value=""><span data-i18n="jamsignals"></span></button>
|
|
<button title="Electronics + Logic" class="legal user admin crb" name="act_matrix_jump_into_rigged_device" type="action" value=""><span data-i18n="jumpintoriggeddevice"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider hs" name="act_matrix_known_exploit_backdoor_entry" type="action" value=""><span data-i18n="known_exploit_backdoor_entry"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider hs" name="act_matrix_masquerade" type="action" value=""><span data-i18n="masquerade"></span></button>
|
|
<button title="Electronics + Intuition" class="legal outsider user admin crb" name="act_matrix_matrix_perception" type="action" value=""><span data-i18n="matrixperception"></span></button>
|
|
<button title="Electronics + Intuition" class="legal outsider user admin crb" name="act_matrix_matrix_search" type="action" value=""><span data-i18n="matrixsearch"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider hs" name="act_matrix_metahuman_in_the_middle" type="action" value=""><span data-i18n="metahuman_in_the_middle"></span></button>
|
|
<button title="Electronics + Logic" class="illegal admin hs" name="act_matrix_modify_icon" type="action" value=""><span data-i18n="modify_icon"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider hs" name="act_matrix_popup" type="action" value=""><span data-i18n="popup"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_probe" type="action" value=""><span data-i18n="probe"></span></button>
|
|
<button title="Electronics + Logic" class="legal admin crb" name="act_matrix_reboot_device" type="action" value=""><span data-i18n="rebootdevice"></span></button>
|
|
<button title="Electronics + Logic" class="illegal admin crb" name="act_matrix_set_data_bomb" type="action" value=""><span data-i18n="setdatabomb"></span></button>
|
|
<button title="Cracking + Logic" class="illegal admin crb" name="act_matrix_snoop" type="action" value=""><span data-i18n="snoop"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_spoof_command" type="action" value=""><span data-i18n="spoofcommand"></span></button>
|
|
<button title="Electronics + Logic" class="illegal admin hs" name="act_matrix_subvert_infrastructure" type="action" value=""><span data-i18n="subvert_infrastructure"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_tarpit" type="action" value=""><span data-i18n="tarpit"></span></button>
|
|
<button title="Electronics + Intuition" class="illegal admin crb" name="act_matrix_trace_icon" type="action" value=""><span data-i18n="traceicon"></span></button>
|
|
<button title="Electronics + Logic" class="legal outsider user admin hs" name="act_matrix_threat_analysis" type="action" value=""><span data-i18n="threat_analysis"></span></button>
|
|
<hr>
|
|
<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=""><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>
|
|
<button title="Electronics + Logic" class="illegal outsider hs" name="act_matrix_squelch" type="action" value=""><span data-i18n="squelch"></span></button>
|
|
<span class="matrix-action legal admin" data-i18n="switchinterfacemode"></span>
|
|
<span class="matrix-action legal outsider" data-i18n="virtual_aim"></span>
|
|
<button title="Cracking + Logic" class="illegal user admin hs" name="act_matrix_watchdog" type="action" value=""><span data-i18n="watchdog"></span></button>
|
|
</div>
|
|
|
|
<input class="tab-switch" name="attr_rolls_toggle" type="hidden" value="misc"/>
|
|
<div class="rolls-misc">
|
|
<h2 data-i18n="convert">Convert</h2>
|
|
<span> </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> </span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- =========================================================
|
|
NPC SHEETS
|
|
========================================================= -->
|
|
<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=""/>
|
|
<input name="attr_show_stun" 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>
|
|
<option value="gm_helper" data-i18n="gm_helper">GM Helper</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="Assassin" data-i18n="assassinsprite">Assassin</option>
|
|
<option value="Defender" data-i18n="defendersprite">Defender</option>
|
|
<option value="Modular" data-i18n="modularprite">Modular</option>
|
|
<option value="Music" data-i18n="musicsprite">Music</option>
|
|
<option value="Primal" data-i18n="primalsprite">Primal</option>
|
|
<option value="Other" data-i18n="other">Other</option>
|
|
</select>
|
|
<select class="spirit" name="attr_spirit_type" title="Spirit Type">
|
|
<option value="Air" data-i18n="air">Air</option>
|
|
<option value="Beasts" data-i18n="beasts">Beasts</option>
|
|
<option value="Blood" data-i18n="blood"></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="Insect (Caretaker)" data-i18n="insect_caretaker">Insect (Caretaker)</option>
|
|
<option value="Insect (Nymph)" data-i18n="insect_nymph">Insect (Nymph)</option>
|
|
<option value="Insect (Scout)" data-i18n="insect_scout">Insect (Scout)</option>
|
|
<option value="Insect (Soldier)" data-i18n="insect_soldier">Insect (Soldier)</option>
|
|
<option value="Insect (Worker)" data-i18n="insect_worker">Insect (Worker)</option>
|
|
<option value="Insect (Queen)" data-i18n="insect_queen">Insect (Queen/Mother)</option>
|
|
<option value="Insect (Alpha)" data-i18n="insect_alpha">Insect (Alpha)</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="Agwe" data-i18n="agwe">Agwe</option>
|
|
<option value="Azaca" data-i18n="azaca">Azaca</option>
|
|
<option value="Damballah" data-i18n="damballah">Damballah</option>
|
|
<option value="Erzulie" data-i18n="erzulie">Erzulie</option>
|
|
<option value="Ghede" data-i18n="ghede">Ghede</option>
|
|
<option value="Legba" data-i18n="legba">Legba</option>
|
|
<option value="Obatala" data-i18n="obatala">Obatala</option>
|
|
<option value="Ogoun" data-i18n="ogoun">Ogoun</option>
|
|
<option value="Shango" data-i18n="shango">Shango</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"> </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"> </span>
|
|
<span></span>
|
|
|
|
<h2 data-i18n="name"></h2>
|
|
<input name="attr_character_name" type="text" />
|
|
|
|
</div>
|
|
<div class="header-toggles pc-box">
|
|
<span> </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> </span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="border-box">
|
|
<div class="grunt attribute pc-box">
|
|
<button data-i18n="body" name="act_body" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_agility" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_reaction" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_strength" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_willpower" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_logic" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_intuition" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_charisma" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_edge" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="0"/>
|
|
</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="0"/>
|
|
</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="act_body" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_agility" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_reaction" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_strength" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_willpower" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_logic" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_intuition" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_charisma" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_edge" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="0"/>
|
|
</span></label>
|
|
</div>
|
|
|
|
<div class="host attribute pc-box">
|
|
<button data-i18n="host_rating" name="act_host_rating" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_host_attack" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_host_sleaze" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_host_data_processing" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_host_firewall" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_pilot" type="action" value="@{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}]]}}{{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="act_level" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="1"/>
|
|
</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="act_sprite_attack" type="action" value="@{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}]]}}{{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="act_sprite_sleaze" type="action" value="@{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}]]}}{{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="act_sprite_data_processing" type="action" value="@{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}]]}}{{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="act_sprite_firewall" type="action" value="@{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}]]}}{{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="act_resonance" type="action" value="@{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}]]}}{{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 sprite vehicle host">
|
|
<h2 data-i18n="universal_dicepool_adjustment">Universal Dicepool Adjustment</h2><span name="attr_uda" style="margin-left: 2%;"></span>
|
|
<label class="settings" data-i18n-title="universal_dicepool_adjustment" title="Professional Rating">
|
|
<input name="attr_uda" title="@{uda}" type="number" value="0"/>
|
|
</label>
|
|
</div>
|
|
<div class="rows grunt spirit 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 vehicle">
|
|
<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="5"/>
|
|
</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="act_initiative" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_astral_initiative" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_astral_initiative" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_matrix_initiative" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_cold_sim_initiative" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_hot_sim_initiative" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_initiative" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_sprint" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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">
|
|
<span name="attr_alternate_movement"></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 show-stun">
|
|
<span data-i18n="stun">Stun</span>
|
|
<label class="settings" data-i18n-title="conditionmonitor" title="Condition Monitor">
|
|
<input name="attr_stun" placeholder="0" title="@{stun}" type="number" value=""/>
|
|
</label><span class="settings"> / </span>
|
|
<label class="settings" data-i18n-title="conditionmonitor" title="Condition Monitor">
|
|
<input name="attr_stun_max" placeholder="0" title="@{stun_max}" type="number" value=""/>
|
|
</label>
|
|
<span class="toggle-display" name="attr_stun" title="@{stun}"></span><span class="toggle-display"> / </span><span class="toggle-display" name="attr_stun_max" title="@{stun_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="action" name="act_direct_magic_defense" value="@{gm_toggle} &{template:rolls-computed}{{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="action" name="act_indirect_magic_defense" value="@{gm_toggle} &{template:rolls-computed}{{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 data-i18n="dr" name="act_spirit_dr" type="action" value="@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defenserating}}}{{rating=@{defense_rating}}}">DR</button>
|
|
<span class="toggle-display"><span name="attr_defense_rating"></span> </span>
|
|
<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="act_defense" type="action" title="Reaction + Intuition" value="@{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}]]}}{{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="act_soak" type="action" title="Body" value="@{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}]]}}{{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 sprite host">
|
|
<input name="attr_flag_matrix" type="hidden" value=""/>
|
|
<div class="matrix">
|
|
<button name="act_matrix_attack_rating" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_matrix_defense_rating" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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 vehicle">
|
|
<input name="attr_flag_matrix" type="hidden" value=""/>
|
|
<div class="matrix">
|
|
<button name="act_matrix_defense_rating" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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="act_soak_matrix" type="action" title="Firewall" value="@{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}]]}}{{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="act_soak_biofeedback" type="action" title="Willpower" value="@{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}]]}}{{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="act_soak_matrix" type="action" title="Firewall" value="@{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}]]}}{{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="dr" name="act_vehicle_dr" type="action" value="@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defenserating}}}{{rating=@{defense_rating}}}">DR</button>
|
|
<button data-i18n="defense" name="act_vehicle_defense" type="action" value="@{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}]]}}{{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="act_soak" type="action" value="@{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}]]}}{{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 spirit">
|
|
<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="Show Stun Monitor?">
|
|
<input class="character-type" name="attr_show_stun" title="@{show_stun}" type="checkbox" value="show_stun"/>
|
|
<h2 data-i18n="showstunmonitor">Show Stun Monitor?</h2>
|
|
</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> </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="act_npc_clearsight" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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> </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_npc_electronicwarfare" type="action" value="@{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}]]}}{{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> </span>
|
|
</div>
|
|
<div class="textrow autosofts">
|
|
<span> </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="act_npc_evasion" type="action" value="@{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}]]}}{{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> </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_npc_maneuvering" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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> </span>
|
|
</div>
|
|
<div class="textrow autosofts">
|
|
<span> </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="act_npc_stealth" type="action" value="@{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}]]}}{{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> </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="act_npc_targeting" type="action" value="@{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}]]}}{{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> </span>
|
|
</div>
|
|
<div class="textrow autosofts">
|
|
<span> </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="act_npc_targeting2" type="action" value="@{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}]]}}{{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> </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="act_npc_targeting3" type="action" value="@{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}]]}}{{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> </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">
|
|
<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>
|
|
|
|
<input name="attr_weaknesses" type="hidden" value=""/>
|
|
<div class="textrow grunt spirit">
|
|
<h1 data-i18n="weaknesses">Weaknesses</h1>
|
|
<span name="attr_weaknesses"></span><br>
|
|
<label class="settings" data-i18n-title="powers" title="Powers">
|
|
<textarea class="full-row" name="attr_weaknesses" placeholder="Weaknesses" title="@{weaknesses}"></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_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="act_skill" type="action" value="@{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}]]}}{{desc=}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span><span name="attr_name"></span> <span name="attr_dicepool"></span></span></button>
|
|
<input class="skill-button-hider" name="attr_spec" type="hidden" value=""/>
|
|
<button name="act_spec" type="action" value="@{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}]]}}{{desc=Spec: @{specialization}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span class="skill_spec" name="attr_spec"></span></button>
|
|
<input class="skill-button-hider" name="attr_expert" type="hidden" value=""/>
|
|
<button name="act_expert" type="action" value="@{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}]]}}{{desc=Expert: @{expertise}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span class="skill_expert" name="attr_expert"></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="Patterncraft" data-i18n="patterncraft">Patterncraft</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_spec" placeholder="Specializations" title="@{repeating_skills_${x}_spec}" 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_expert" placeholder="Expertise" title="@{repeating_skills_${x}_expert}" 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-computed}{{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="act_spriteskill" type="action" value="@{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}]]}}{{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="act_spiritskill" type="action" value="@{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}]]}}{{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-computed}{{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 name="attr_skill" type="hidden" value="Firearms"/>
|
|
<input name="attr_rating" type="hidden" value="0" />
|
|
<input name="attr_attribute" type="hidden" value="Agility"/>
|
|
<input name="attr_attr_rating" 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 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=""/>
|
|
<input name="attr_dicepool" type="hidden" value=""/>
|
|
<input name="attr_dicepool_base" type="hidden" value=""/>
|
|
<button class="no-dicepool" name="act_npcrangeweaponnodicepool" type="action" value="@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (Dicepool: ?{Skill / Autosoft Rating?|1,1|2,2|3,3|4,4|5,5|6,6|7,7|8,8|9,9|10,10} + ?{Attribute / Sensor Rating?|1,1|2,2|3,3|4,4|5,5|6,6|7,7|8,8|9,9|10,10})}}{{dice=[[(?{Skill / Autosoft Rating?}+?{Attribute / Sensor Rating?}+@{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>
|
|
<button class="dicepool" name="act_npcrangeweapon" type="action" value="@{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}]]}}{{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" data-i18n-placeholder="armsphname" placeholder="Ares Predator" title="@{repeating_range_${x}_name}" 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_base" data-i18n-placeholder="armsphdam" 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 class="atk-dp-mod" data-i18n="modifier">modifier</h3>
|
|
<label class="atk-dp-mod" 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 name="attr_skill" type="hidden" value="Close Combat"/>
|
|
<input name="attr_rating" type="hidden" value="0" />
|
|
<input name="attr_attribute" type="hidden" value="Agility"/>
|
|
<input name="attr_attr_rating" 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 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=""/>
|
|
<input name="attr_dicepool" type="hidden" value=""/>
|
|
<input name="attr_dicepool_base" type="hidden" value=""/>
|
|
<input name="attr_dicepool_modifier" type="hidden" value=""/>
|
|
<button class="no-dicepool" name="act_npcmeleeweaponnodicepool" type="action" value="@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name} (Dicepool: ?{Skill / Autosoft?|1,1|2,2|3,3|4,4|5,5|6,6|7,7|8,8|9,9|10,10} + ?{Attribute / Sensor?|1,1|2,2|3,3|4,4|5,5|6,6|7,7|8,8|9,9|10,10})}}{{dice=[[(?{Skill / Autosoft?}+?{Attribute / Sensor?}+@{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>
|
|
<button class="dicepool" name="act_npcmeleeweapon" type="action" value="@{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}]]}}{{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" data-i18n-placeholder="meleephname" 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_base" data-i18n-placeholder="meleephdam" 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>
|
|
<div class="row atk-dp-mod">
|
|
<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" data-i18n-placeholder="notes" placeholder="Notes" title="@{repeating_melee_${x}_notes}"></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- NEW npcspell repeating section -->
|
|
<div class="rows grunt spirit 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-computed}{{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="act_spell_drain" type="action" value="@{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}]]}}{{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> </span>
|
|
<span> </span>
|
|
</div>
|
|
<fieldset class="repeating_spell">
|
|
<input name="attr_category" type="hidden" value="" />
|
|
<input name="attr_range" type="hidden" value="" />
|
|
<input name="attr_dicepool" type="hidden" value="" />
|
|
<button class="dicepool" name="act_npcspell" type="action" value="@{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=[[((@{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 class="no-dicepool" name="act_npcspellnodicepool" type="action" value="@{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=[[((@{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 class="dicepool" name="act_npcspellaoe" type="action" value="@{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=[[((@{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 class="no-dicepool" name="act_npcspellaoenodicepool" type="action" value="@{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=[[((@{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 class="dicepool" name="act_npcnoncombatspell" type="action" value="@{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=[[((@{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 class="no-dicepool" name="act_npcnoncombatspellnodicepool" type="action" value="@{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=[[((@{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 class="dicepool" name="act_npcnoncombatspellaoe" type="action" value="@{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=[[((@{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 class="no-dicepool" name="act_npcnoncombatspellaoenodicepool" type="action" value="@{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=[[((@{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_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_spell_${x}_name}" type="text"/>
|
|
</label>
|
|
<label data-i18n-title="dice" title="Dice">
|
|
<input name="attr_dicepool" placeholder="18" title="@{repeating_spell_${x}_dicepool}" type="number"/>
|
|
</label>
|
|
<select name="attr_type" title="@{repeating_spell_${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_spell_${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_spell_${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_spell_${x}_drain}" type="number"/>
|
|
</label>
|
|
<span> </span>
|
|
<span> </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_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 class="right" 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>
|
|
<h3 class="right" data-i18n="damage">Damage</h3>
|
|
<select name="attr_damage" title="@{repeating_spell_${x}_damage}">
|
|
<option data-i18n="unset" value="">Unset</option>
|
|
<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_spell_${x}_notes}" type="text"/></textarea>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="rows grunt repeating forms hide-resonance">
|
|
<h1 data-i18n="complexforms">Complex Forms</h1>
|
|
<div class="rows headers">
|
|
<h2 data-i18n="dice">Dice</h2>
|
|
<h2 class="name" data-i18n="name">Name</h2>
|
|
<h2 class="duration" data-i18n="duration">Duration</h2>
|
|
<h2 class="skill" data-i18n="skill">Skill</h2>
|
|
<h2 data-i18n="fade">Fade</h2>
|
|
<span> </span>
|
|
</div>
|
|
<fieldset class="repeating_forms">
|
|
<input name="attr_flag" title="Settings toggle" type="checkbox" checked="checked"/><span class="pictos">x</span>
|
|
<input name="attr_form" type="hidden" value=""/>
|
|
<input name='attr_skill' type="hidden" />
|
|
<input name='attr_skillname' type="hidden" value="" />
|
|
<span class="dice" name="attr_dice"></span>
|
|
<span class='hide-roll-button' name='attr_skill'></span>
|
|
<span class='show-name'>
|
|
<button name="act_complexformnoroll" type="action" value="@{gm_toggle} &{template:rolls-computed}{{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-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}]]}}{{desc=@{notes}}}{{fade=[[@{fade}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
|
|
<button name="act_complexformdice" type="action" value="@{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}]]}}{{desc=@{notes}}}{{fade=[[@{fade}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}"><span name="attr_name"></span></button>
|
|
<span class="duration" name="attr_duration"></span>
|
|
<span class="skill" name="attr_skillname"></span>
|
|
<span class="fade_value" name="attr_fade"></span>
|
|
<span> </span>
|
|
<div class="settings">
|
|
<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>
|
|
<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>
|
|
<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> </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> </span>
|
|
<span> </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-computed}{{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-computed}{{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> </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> </span>
|
|
<span> </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-computed}{{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_matrix_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} &{template:rolls-computed}{{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"/>
|
|
|
|
<div class="rolls-matrix">
|
|
<input type="hidden" name="attr_display_illegal_matrix_actions" value="">
|
|
<input type="hidden" name="attr_matrix_access_level_filter" value="">
|
|
<h3 data-i18n="rollbuttonsdisclaimer"></h3><br>
|
|
<span class="full-width">
|
|
<label class="fright" data-i18n-title="illegal_actions" title="Display Illegal Actions">
|
|
<span data-i18n="illegal_actions"></span>
|
|
<input type="checkbox" name="attr_display_illegal_matrix_actions" value="1" checked="checked" title="@{display_illegal_matrix_actions}">
|
|
</label>
|
|
</span>
|
|
<span class="full-width">
|
|
<label class="fleft" 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>
|
|
<label class="fright" data-i18n-title="matrix_access_level" title="Access Level Filter">
|
|
<span data-i18n="access_level_filter"></span>
|
|
<select name="attr_matrix_access_level_filter" title="@{matrix_access_level_filter}">
|
|
<option data-i18n="all" value="all">All</option>
|
|
<option data-i18n="outsider" value="outsider">Outsider</option>
|
|
<option data-i18n="user" value="user">User</option>
|
|
<option data-i18n="admin" value="admin">Admin</option>
|
|
</select>
|
|
</label>
|
|
</span>
|
|
|
|
<h2 data-i18n="matrixmajor">Matrix Major Actions</h2>
|
|
<button title="Cracking + Logic" class="illegal outsider crb" name="act_matrix_backdoor_entry" type="action" value=""><span data-i18n="backdoorentry"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_brute_force" type="action" value=""><span data-i18n="bruteforce"></span></button>
|
|
<button title="Cracking + Logic" class="legal user admin hs" name="act_matrix_calibration" type="action" value=""><span data-i18n="calibration"></span></button>
|
|
<button title="Cracking + Logic" class="illegal admin crb" name="act_matrix_check_os" type="action" value=""><span data-i18n="checkos"></span></button>
|
|
<button title="Electronics + Logic" class="legal user admin crb" name="act_matrix_control_device" type="action" value=""><span data-i18n="controldevice"></span></button>
|
|
<button title="Cracking + Logic" class="illegal user admin crb" name="act_matrix_crack_file" type="action" value=""><span data-i18n="crackfile"></span></button>
|
|
<button title="Cracking + Logic" class="illegal admin crb" name="act_matrix_crash_program" type="action" value=""><span data-i18n="crashprogram"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_data_spike" type="action" value=""><span data-i18n="dataspike"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin hs" name="act_matrix_delayed_command" type="action" value=""><span data-i18n="delayed_command"></span></button>
|
|
<button title="Electronics + Logic" class="illegal outsider hs" name="act_matrix_denial_of_service" type="action" value=""><span data-i18n="denial_of_service"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin hs" name="act_matrix_device_lock" type="action" value=""><span data-i18n="device_lock"></span></button>
|
|
<button title="Cracking + Logic" class="legal user admin crb" name="act_matrix_disarm_data_bomb" type="action" value=""><span data-i18n="disarmdatabomb"></span></button>
|
|
<button title="Electronics + Logic" class="legal user admin crb" name="act_matrix_edit_file" type="action" value=""><span data-i18n="editfile"></span></button>
|
|
<button title="Electronics + Logic" class="legal user admin crb" name="act_matrix_encrypt_file" type="action" value=""><span data-i18n="encryptfile"></span></button>
|
|
<button title="Electronics + Logic" class="illegal user admin crb" name="act_matrix_erase_matrix_signature" type="action" value=""><span data-i18n="erasematrixsignature"></span></button>
|
|
<button title="Electronics + Logic" class="legal admin crb" name="act_matrix_format_device" type="action" value=""><span data-i18n="formatdevice"></span></button>
|
|
<span class="matrix-action legal outsider user admin crb" data-i18n="fullmatrixdefense"></span>
|
|
<button title="Cracking + Logic" class="illegal user admin hs" name="act_matrix_garbage_in_garbage_out" type="action" value=""><span data-i18n="garbage_in_garbage_out"></span></button>
|
|
<button title="Electronics + Logic" class="illegal user admin crb" name="act_matrix_hash_check" type="action" value=""><span data-i18n="hashcheck"></span></button>
|
|
<button title="Cracking + Intuition" class="illegal outsider user admin crb" name="act_matrix_hide" type="action" value=""><span data-i18n="hide"></span></button>
|
|
<button title="Electronics + Willpower" class="legal outsider user admin crb" name="act_matrix_jackout" type="action" value=""><span data-i18n="jackout"></span></button>
|
|
<button title="Cracking + Logic" class="illegal admin crb" name="act_matrix_jam_signals" type="action" value=""><span data-i18n="jamsignals"></span></button>
|
|
<button title="Electronics + Logic" class="legal user admin crb" name="act_matrix_jump_into_rigged_device" type="action" value=""><span data-i18n="jumpintoriggeddevice"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider hs" name="act_matrix_known_exploit_backdoor_entry" type="action" value=""><span data-i18n="known_exploit_backdoor_entry"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider hs" name="act_matrix_masquerade" type="action" value=""><span data-i18n="masquerade"></span></button>
|
|
<button title="Electronics + Intuition" class="legal outsider user admin crb" name="act_matrix_matrix_perception" type="action" value=""><span data-i18n="matrixperception"></span></button>
|
|
<button title="Electronics + Intuition" class="legal outsider user admin crb" name="act_matrix_matrix_search" type="action" value=""><span data-i18n="matrixsearch"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider hs" name="act_matrix_metahuman_in_the_middle" type="action" value=""><span data-i18n="metahuman_in_the_middle"></span></button>
|
|
<button title="Electronics + Logic" class="illegal admin hs" name="act_matrix_modify_icon" type="action" value=""><span data-i18n="modify_icon"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider hs" name="act_matrix_popup" type="action" value=""><span data-i18n="popup"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_probe" type="action" value=""><span data-i18n="probe"></span></button>
|
|
<button title="Electronics + Logic" class="legal admin crb" name="act_matrix_reboot_device" type="action" value=""><span data-i18n="rebootdevice"></span></button>
|
|
<button title="Electronics + Logic" class="illegal admin crb" name="act_matrix_set_data_bomb" type="action" value=""><span data-i18n="setdatabomb"></span></button>
|
|
<button title="Cracking + Logic" class="illegal admin crb" name="act_matrix_snoop" type="action" value=""><span data-i18n="snoop"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_spoof_command" type="action" value=""><span data-i18n="spoofcommand"></span></button>
|
|
<button title="Electronics + Logic" class="illegal admin hs" name="act_matrix_subvert_infrastructure" type="action" value=""><span data-i18n="subvert_infrastructure"></span></button>
|
|
<button title="Cracking + Logic" class="illegal outsider user admin crb" name="act_matrix_tarpit" type="action" value=""><span data-i18n="tarpit"></span></button>
|
|
<button title="Electronics + Intuition" class="illegal admin crb" name="act_matrix_trace_icon" type="action" value=""><span data-i18n="traceicon"></span></button>
|
|
<button title="Electronics + Logic" class="legal outsider user admin hs" name="act_matrix_threat_analysis" type="action" value=""><span data-i18n="threat_analysis"></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=""><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>
|
|
<button title="Electronics + Logic" class="illegal outsider hs" name="act_matrix_squelch" type="action" value=""><span data-i18n="squelch"></span></button>
|
|
<span class="matrix-action legal admin" data-i18n="switchinterfacemode"></span>
|
|
<span class="matrix-action legal outsider" data-i18n="virtual_aim"></span>
|
|
<button title="Cracking + Logic" class="illegal user admin hs" name="act_matrix_watchdog" type="action" value=""><span data-i18n="watchdog"></span></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- =========================================================
|
|
GM HELPER -> MATRIX ENCOUNTER SHEET
|
|
========================================================= -->
|
|
<div class="gm-helper">
|
|
<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"/>
|
|
<div class="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>
|
|
<option value="gm_helper" data-i18n="gm_helper">GM Helper</option>
|
|
</select>
|
|
<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>
|
|
<span></span>
|
|
|
|
<h2 data-i18n="name"></h2>
|
|
<input name="attr_character_name" type="text" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="border-box">
|
|
<div class="pc-box">
|
|
<h1 class="center" data-i18n="gm_helper">GM Helper</h1>
|
|
<button class="" name="act_add_to_os_tracker" type="action"><span data-i18n="track_selected"></span></button>
|
|
<div class="rows repeating-container os-tracker">
|
|
<div class="row-long headers">
|
|
<span> </span>
|
|
<h2 class="left" data-i18n="name">Name</h2>
|
|
<h2 data-i18n="access_level">Access Level</h2>
|
|
<h2 class="center" data-i18n="OS">OS</h2>
|
|
<span> </span>
|
|
<span> </span>
|
|
</div>
|
|
<fieldset class="repeating_os-tracker">
|
|
<span> </span>
|
|
<span class="bold purple" name="attr_name"></span>
|
|
<span class="center" name="attr_access_level"></span>
|
|
<span class="center">
|
|
<button class="pictos os-control-btn" name="act_osdel" type="action" data-i18n-title="remove">-</button>
|
|
<span style="display: inline-block; width: 2em; text-align: center;" class="" name="attr_os"></span>
|
|
<button class="pictos os-control-btn" name="act_osadd" type="action" data-i18n-title="add">+</button>
|
|
</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> </span>
|
|
<label class="left" data-i18n-title="name" title="Name">
|
|
<input name="attr_name" placeholder="PC #1" title="@{repeating_os-tracker_${x}_name}" type="text"/>
|
|
</label>
|
|
<select class="centered" name="attr_access_level" data-i18n-title="access_level" title="Access Level">
|
|
<option data-i18n="none">None</option>
|
|
<option data-i18n="outsider">Outsider</option>
|
|
<option data-i18n="user">User</option>
|
|
<option data-i18n="admin">Admin</option>
|
|
<option data-i18n="other">Other</option>
|
|
</select>
|
|
<label class="center" data-i18n-title="OS" title="OS">
|
|
<input name="attr_os" title="@{repeating_os-tracker_${x}_os}" type="number" value="0"/>
|
|
</label>
|
|
<span> </span>
|
|
<span> </span>
|
|
|
|
<label data-i18n-title="notes" title="Notes">
|
|
<textarea name="attr_notes" placeholder="notes"></textarea>
|
|
</label>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
|
|
<br><br><br><br><br><br><br><br><br><br><br><br>
|
|
</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_sheet_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}}<span data-i18n="loyalty">Loyalty</span><br>{{loyalty}}{{/loyalty}}</span>
|
|
<span>{{#connection}}<span data-i18n="connection">Connection</span><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}}<span data-i18n="loyalty">Loyalty</span><br>{{loyalty}}{{/loyalty}}</span>
|
|
<span>{{#connection}}<span data-i18n="connection">Connection</span><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}}
|
|
{{#defense_rating}}<span>DR: {{defense_rating}}</span><br>{{/defense_rating}}
|
|
{{#magicar}}<span>Magic AR: {{magicar}}</span><br>{{/magicar}}
|
|
{{#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 2: {{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;"> {{#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;"> </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}}
|
|
|
|
{{#attackinfo}}
|
|
<div class="sheet-template-row">
|
|
<div class="sheet-weapon-info">
|
|
{{#melee}}<span class="sheet-tip sheet-weap-melee">
|
|
<span title="">Melee Attack</span>
|
|
</span>{{/melee}}
|
|
{{#damage}}<span class="sheet-tip sheet-weap-dv">
|
|
<span title="Damage Value (DV)">{{damage}}</span>
|
|
</span>{{/damage}}
|
|
{{#firingmode}}<span class="sheet-tip sheet-weap-mode">
|
|
<span title="Firing Mode">{{firingmode}}</span>
|
|
</span>{{/firingmode}}
|
|
{{#ammotype}}<span class="sheet-tip sheet-weap-ammo">
|
|
<span title="Ammo Type">{{ammotype}}</span>
|
|
</span>{{/ammotype}}
|
|
{{#ars}}<span class="sheet-tip sheet-weap-ars">
|
|
<span title="0-3m">{{arclose}}{{^arclose}}-{{/arclose}}</span> / <span title="4-50m">{{arnear}}{{^arnear}}-{{/arnear}}</span> / <span title="51-250m">{{armedium}}{{^armedium}}-{{/armedium}}</span> / <span title="251-500m">{{arfar}}{{^arfar}}-{{/arfar}}</span> / <span title="500+m">{{arextreme}}{{^arextreme}}-{{/arextreme}}</span>
|
|
</span>{{/ars}}
|
|
{{#skill}}<span class="sheet-tip sheet-weap-skill">
|
|
<span title="Skill">{{skill}}</span>
|
|
</span>{{/skill}}
|
|
{{#attribute}}<span class="sheet-tip sheet-weap-attr">
|
|
<span title="Attribute">{{attribute}}</span>
|
|
</span>{{/attribute}}
|
|
<span class="sheet-tip sheet-weap-spec">
|
|
{{#rollGreater() weapspec 0}}<span title="">Specialized</span>{{/rollGreater() weapspec 0}}
|
|
{{#rollGreater() weapexpert 0}}<span title="">Expertise</span>{{/rollGreater() weapexpert 0}}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
{{/attackinfo}}
|
|
|
|
{{#npcattackinfo}}
|
|
<div class="sheet-template-row">
|
|
<div class="sheet-npcweapon-info">
|
|
{{#damage}}<span class="sheet-tip sheet-weap-dv">
|
|
<span title="Damage Value (DV)">{{damage}}</span>
|
|
</span>{{/damage}}
|
|
{{#melee}}<span class="sheet-tip sheet-weap-melee">
|
|
<span title="">Melee Attack</span>
|
|
</span>{{/melee}}
|
|
{{#firingmode}}<span class="sheet-tip sheet-weap-mode">
|
|
<span title="Firing Mode">{{firingmode}}</span>
|
|
</span>{{/firingmode}}
|
|
{{#ars}}<span class="sheet-tip sheet-weap-ars">
|
|
<span title="0-3m">{{arclose}}{{^arclose}}-{{/arclose}}</span> / <span title="4-50m">{{arnear}}{{^arnear}}-{{/arnear}}</span> / <span title="51-250m">{{armedium}}{{^armedium}}-{{/armedium}}</span> / <span title="251-500m">{{arfar}}{{^arfar}}-{{/arfar}}</span> / <span title="500+m">{{arextreme}}{{^arextreme}}-{{/arextreme}}</span>
|
|
</span>{{/ars}}
|
|
</div>
|
|
</div>
|
|
{{/npcattackinfo}}
|
|
|
|
{{#desc}}
|
|
<div class="sheet-template-row">
|
|
<span class="sheet-template-desc">{{desc}}</span>
|
|
</div>
|
|
{{/desc}}
|
|
|
|
{{#astralrep}}
|
|
<div class="sheet-template-row">
|
|
<span class="sheet-template-desc">Astral Reputation: {{astralrep}}</span>
|
|
</div>
|
|
{{/astralrep}}
|
|
|
|
{{#tip}}
|
|
<div class="sheet-template-row sheet-tip">
|
|
<span class="sheet-tip">{{tip}}</span>
|
|
</div>
|
|
{{/tip}}
|
|
|
|
{{#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_damage_mod" />
|
|
<input type="hidden" name="attr_primary_range_weapon_near_mod" />
|
|
<input type="hidden" name="attr_primary_range_weapon_close_mod" />
|
|
<input type="hidden" name="attr_primary_range_weapon_medium_mod" />
|
|
<input type="hidden" name="attr_primary_range_weapon_far_mod" />
|
|
<input type="hidden" name="attr_primary_range_weapon_extreme_mod" />
|
|
<input type="hidden" name="attr_primary_range_weapon_dicepool" />
|
|
<input type="hidden" name="attr_primary_range_weapon_dicepool_mod" value="0" />
|
|
<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_full_auto_penalty_mod" />
|
|
<input type="hidden" name="attr_burst_fire_penalty_mod" />
|
|
<input type="hidden" name="attr_burst_wide_penalty_mod" />
|
|
<input type="hidden" name="attr_semi_auto_penalty_mod" />
|
|
<input type="hidden" name="attr_single_shot_penalty_mod" />
|
|
<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_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_spellcasting_specialist" value="0" />
|
|
<input type="hidden" name="attr_spellcasting_expert" value="0" />
|
|
<input type="hidden" name="attr_universal_dicepool_adjustment" value="0" />
|
|
|
|
<input type="hidden" name="attr_astral" value="-1" />
|
|
<input type="hidden" name="attr_athletics" value="-1" />
|
|
<input type="hidden" name="attr_biotech" value="-1" />
|
|
<input type="hidden" name="attr_closecombat" value="-1" />
|
|
<input type="hidden" name="attr_con" value="-1" />
|
|
<input type="hidden" name="attr_conjuring" value="-1" />
|
|
<input type="hidden" name="attr_cracking" value="-1" />
|
|
<input type="hidden" name="attr_electronics" value="-1" />
|
|
<input type="hidden" name="attr_enchanting" value="-1" />
|
|
<input type="hidden" name="attr_engineering" value="-1" />
|
|
<input type="hidden" name="attr_exoticweapons" value="-1" />
|
|
<input type="hidden" name="attr_firearms" value="-1" />
|
|
<input type="hidden" name="attr_influence" value="-1" />
|
|
<input type="hidden" name="attr_outdoors" value="-1" />
|
|
<input type="hidden" name="attr_patterncraft" value="-1" />
|
|
<input type="hidden" name="attr_perception" value="-1" />
|
|
<input type="hidden" name="attr_piloting" value="-1" />
|
|
<input type="hidden" name="attr_sorcery" value="-1" />
|
|
<input type="hidden" name="attr_stealth" value="-1" />
|
|
<input type="hidden" name="attr_tasking" value="-1" />
|
|
|
|
<input type="hidden" name="attr_fade_compiling_modifier" value="0" />
|
|
<input type="hidden" name="attr_sprite_resist_dv_modifier" value="0" />
|
|
|
|
<input type="hidden" name="attr_sheet_version" value="0.92">
|
|
<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() {
|
|
console.log("Sheet Opened!");
|
|
getAttrs(['sheet_type', 'sheet_version', 'data_version'], (v) => {
|
|
if(! v['sheet_version'] || ! v['sheet_type'] || ! v['data_version']) {
|
|
console.log(`%c Shadowrun 6th World Unable to load`, "color: red; font-weight: bold");
|
|
}
|
|
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");
|
|
case (v.data_version < 0.71):
|
|
_v71_update();
|
|
console.log("Data now fits v.71");
|
|
show_changelog();
|
|
case (v.data_version < 0.72):
|
|
_v72_update();
|
|
console.log("Data now fits v.72");
|
|
case (v.data_version < 0.77):
|
|
_v77_update();
|
|
console.log("Data now fits v.77");
|
|
case (v.data_version < 0.80):
|
|
_v80_update();
|
|
console.log("Data now fits v.80");
|
|
case (v.data_version < 0.81):
|
|
_v81_update();
|
|
console.log("Data now fits v.81");
|
|
case (v.data_version < 0.84):
|
|
_v84_update();
|
|
show_changelog();
|
|
console.log("Data now fits v.84");
|
|
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 _v84_update = () => {
|
|
// set the new attr_skill values
|
|
update_skill_ratings();
|
|
show_changelog();
|
|
};
|
|
|
|
var _v81_update = () => {
|
|
getAttrs(["sheet_type"], (v) => {
|
|
if(v.sheet_type == 'spirit') {
|
|
setAttrs({
|
|
flag_special: 'magic'
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
var _v80_update = () => {
|
|
getAttrs(["sheet_type", "defense_rating", "armor_rating"], (v) => {
|
|
if(v.sheet_type == 'pc') {
|
|
if(v.armor_rating && (! v.defense_rating || v.defense_rating == 0)) {
|
|
setAttrs({
|
|
defense_rating: v.armor_rating
|
|
});
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
var _v77_update = () => {
|
|
getAttrs(["sheet_type"], (v) => {
|
|
if(v.sheet_type == 'grunt' || v.sheet_type == 'spirit' || v.sheet_type == 'vehicle') {
|
|
// set the new repeating melee and repeating ranged dicepool_base attribute to dicepool - dicepool_modifier
|
|
getSectionIDs('repeating_range', (ids) => {
|
|
ids.forEach((row_id) => {
|
|
getAttrs([`repeating_range_${row_id}_dicepool_base`, `repeating_range_${row_id}_dicepool`, `repeating_range_${row_id}_dicepool_modifier`], (v) => {
|
|
setAttrs({
|
|
[`repeating_range_${row_id}_dicepool_base`]: parseInt(v[`repeating_range_${row_id}_dicepool`]) - parseInt(v[`repeating_range_${row_id}_dicepool_modifier`])
|
|
}, {silent: true});
|
|
});
|
|
});
|
|
});
|
|
|
|
getSectionIDs('repeating_melee', (ids) => {
|
|
ids.forEach((row_id) => {
|
|
getAttrs([`repeating_melee_${row_id}_dicepool_base`, `repeating_melee_${row_id}_dicepool`, `repeating_melee_${row_id}_dicepool_modifier`], (v) => {
|
|
setAttrs({
|
|
[`repeating_melee_${row_id}_dicepool_base`]: parseInt(v[`repeating_melee_${row_id}_dicepool`]) - parseInt(v[`repeating_melee_${row_id}_dicepool_modifier`])
|
|
}, {silent: true});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
var _v72_update = () => {
|
|
getAttrs(["sheet_type"], (v) => {
|
|
if(v.sheet_type == 'grunt' || v.sheet_type == 'spirit') {
|
|
// We need to rename the repeating spells for npcs and move all of their data
|
|
getSectionIDs('repeating_npcspell', (spell_IDs) => {
|
|
let usedSpellIDs = [];
|
|
spell_IDs.forEach((spellID) => {
|
|
let newSpellID = generateRowID();
|
|
while(newSpellID in usedSpellIDs) {
|
|
newSpellID = generateRowID();
|
|
}
|
|
usedSpellIDs.push(newSpellID);
|
|
|
|
let newSpell = {};
|
|
let npc_attrs = [];
|
|
let attr_list = ["name", "dicepool", "type", "range", "duration", "drain", "category", "effect_type", "damage", "notes", "display_flag", "flag"];
|
|
attr_list.forEach((attr) => {
|
|
npc_attrs.push(`repeating_npcspell_${spellID}_${attr}`);
|
|
});
|
|
|
|
getAttrs(npc_attrs, (npcspell) => {
|
|
toUpdate = {};
|
|
attr_list.forEach((attr) => {
|
|
toUpdate[`repeating_spell_${newSpellID}_${attr}`] = npcspell[`repeating_npcspell_${spellID}_${attr}`] || '';
|
|
});
|
|
|
|
setAttrs(toUpdate, {silent: true});
|
|
});
|
|
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
|
|
// we need to rename the npc complex forms section and move the data over
|
|
if(v.sheet_type == 'grunt') {
|
|
getSectionIDs('repeating_form', (form_IDs) => {
|
|
let usedformIDs = [];
|
|
form_IDs.forEach((formID) => {
|
|
let newformID = generateRowID();
|
|
while(newformID in usedformIDs) {
|
|
newformID = generateRowID();
|
|
}
|
|
usedformIDs.push(newformID);
|
|
|
|
let newform = {};
|
|
let npc_attrs = [];
|
|
let attr_list = ["dice", "name", "duration", "fade", "notes", "skill", "spec", "expert"];
|
|
attr_list.forEach((attr) => {
|
|
npc_attrs.push(`repeating_form_${formID}_${attr}`);
|
|
});
|
|
|
|
getAttrs(npc_attrs, (form) => {
|
|
toUpdate = {};
|
|
attr_list.forEach((attr) => {
|
|
toUpdate[`repeating_forms_${newformID}_${attr}`] = form[`repeating_form_${formID}_${attr}`] || '';
|
|
});
|
|
|
|
setAttrs(toUpdate, {silent: true});
|
|
});
|
|
|
|
});
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
var _v71_update = () => {
|
|
getAttrs(["sheet_type", "device_rating"], (v) => {
|
|
// update npc skill specializations and expertise to match spec/expert like PCs use
|
|
if(v.sheet_type != 'pc') {
|
|
getSectionIDs('repeating_skills', (rows) => {
|
|
rows.forEach((row) => {
|
|
var skillRow = 'repeating_skills_' + row;
|
|
getAttrs([`${skillRow}_specialization`, `${skillRow}_expertise`], (v) => {
|
|
let toUpdate = {};
|
|
if(v[`${skillRow}_specialization`]) {
|
|
toUpdate[`${skillRow}_spec`] = v[`${skillRow}_specialization`];
|
|
}
|
|
if(v[`${skillRow}_expertise`]) {
|
|
toUpdate[`${skillRow}_expert`] = v[`${skillRow}_expertise`];
|
|
}
|
|
setAttrs(toUpdate);
|
|
});
|
|
});
|
|
});
|
|
|
|
// Update npc sheets to use matrix_device_rating instead of device_rating
|
|
if(v.device_rating) {
|
|
setAttrs({
|
|
matrix_device_rating: v.device_rating
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
// Update sprite, host, vehicle sheets to remove meat space attributes so matrix defense buttons work right
|
|
getAttrs(["sheet_type", "body", "agility", "reaction", "strength", "willpower", "logic", "intuition", "charisma"], (v) => {
|
|
if(v.sheet_type == 'sprite' || v.sheet_type == 'host') {
|
|
setAttrs({
|
|
body: 0,
|
|
agility: 0,
|
|
reaction: 0,
|
|
strength: 0,
|
|
willpower: 0,
|
|
logic: 0,
|
|
intuition: 0,
|
|
charisma: 0
|
|
});
|
|
}
|
|
if(v.sheet_type == 'vehicle') {
|
|
setAttrs({
|
|
agility: 0,
|
|
reaction: 0,
|
|
strength: 0,
|
|
willpower: 0,
|
|
logic: 0,
|
|
intuition: 0,
|
|
charisma: 0
|
|
});
|
|
}
|
|
});
|
|
|
|
|
|
// Update npc sheets repeating spells to display the correct value for "Type"
|
|
getAttrs(["sheet_type"], (sheet) => {
|
|
if(sheet.sheet_type != 'pc') {
|
|
getSectionIDs('repeating_npcspell', (spells) => {
|
|
spells.forEach((spell) => {
|
|
var spellID = 'repeating_npcspell_' + spell;
|
|
getAttrs([`${spellID}_type`, `${spellID}_damage`, `${spellID}_category`], (v) => {
|
|
if(v[`${spellID}_category`] != 'Combat') {
|
|
v[`${spellID}_damage`] = '';
|
|
}
|
|
|
|
setAttrs({
|
|
[`${spellID}_type`]: v[`${spellID}_type`].charAt(0).toUpperCase(),
|
|
[`${spellID}_damage`]: v[`${spellID}_damage`]
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|
|
|
|
// Update repeating augmentations to preserve legacy data.
|
|
getSectionIDs("augmentations", (ids) => {
|
|
// If there are no augmentations it was likely triggered by a deletion, need to reset aug_essence_cost to 0
|
|
ids.forEach((id) => {
|
|
getAttrs([`repeating_augmentations_${id}_essence_cost`, `repeating_augmentations_${id}_essence_base`], (aug_ess) => {
|
|
let toUpdate = {};
|
|
if(aug_ess[`repeating_augmentations_${id}_essence_cost`]) {
|
|
toUpdate[`repeating_augmentations_${id}_essence_base`] = aug_ess[`repeating_augmentations_${id}_essence_cost`];
|
|
}
|
|
|
|
toUpdate[`repeating_augmentations_${id}_essence_cost_raw`] = 1;
|
|
|
|
// set the changes
|
|
setAttrs(toUpdate);
|
|
});
|
|
});
|
|
});
|
|
|
|
};
|
|
|
|
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 'Patterncraft':
|
|
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', 'range-weapon-mods'];
|
|
|
|
repeating_sections.forEach((section) => {
|
|
on(`change:repeating_${section}:notes`, (eventInfo) => {
|
|
if(eventInfo.sourceType != 'player') {
|
|
return;
|
|
}
|
|
console.log("notes changed, looking for an import");
|
|
console.log(eventInfo);
|
|
|
|
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?|0} [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]|Magic,@{magic} [Magic]|Resonance,@{resonance} [Resonance]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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?|0} [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]|Magic,@{magic} [Magic]|Resonance,@{resonance} [Resonance]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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?|0} [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]|Magic,@{magic} [Magic]|Resonance,@{resonance} [Resonance]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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?|0} [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]|Magic,@{magic} [Magic]|Resonance,@{resonance} [Resonance]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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?|0} [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]|Magic,@{magic} [Magic]|Resonance,@{resonance} [Resonance]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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?|0} [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]|Magic,@{magic} [Magic]|Resonance,@{resonance} [Resonance]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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?|0} [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]|Magic,@{magic} [Magic]|Resonance,@{resonance} [Resonance]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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?|0} [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]|Magic,@{magic} [Magic]|Resonance,@{resonance} [Resonance]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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?|0} [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]|Magic,@{magic} [Magic]|Resonance,@{resonance} [Resonance]}]]+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}]]}}",
|
|
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}+@{uda})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}]]}}",
|
|
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}+@{uda})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}]]}}",
|
|
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}+@{uda})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=@{defense_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}+@{uda})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}]]}}{{defense_rating=@{defense_rating}}}",
|
|
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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=@{primary_melee_weapon_notes}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{tip=**Next:** Target rolls Defense}}{{melee=1}}{{attackinfo=1}}{{ars=1}}{{arclose=@{primary_melee_weapon_close}}}{{arnear=@{primary_melee_weapon_near}}}{{armedium=@{primary_melee_weapon_medium}}}{{arfar=@{primary_melee_weapon_far}}}{{arextreme=@{primary_melee_weapon_extreme}}}{{damage=@{primary_melee_weapon_damage}}}{{skill=@{primary_melee_weapon_skill}}}{{attribute=@{primary_melee_weapon_attribute}}}{{weapspec=[[@{primary_melee_weapon_spec}]]}}{{weapexpert=[[@{primary_melee_weapon_expert}]]}}",
|
|
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_mod}+@{primary_range_weapon_dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=@{primary_range_weapon_notes}}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}{{tip=**Next:** Target rolls Defense}}{{attackinfo=1}}{{ars=1}}{{arclose=@{primary_range_weapon_close}}}{{arnear=@{primary_range_weapon_near}}}{{armedium=@{primary_range_weapon_medium}}}{{arfar=@{primary_range_weapon_far}}}{{arextreme=@{primary_range_weapon_extreme}}}{{firingmode=@{primary_range_weapon_mode}}}{{damage=@{primary_range_weapon_damage}}}{{ammotype=@{primary_range_weapon_ammo_type}}}{{skill=@{primary_range_weapon_skill}}}{{attribute=@{primary_range_weapon_attribute}}}{{weapspec=[[@{primary_range_weapon_spec}]]}}{{weapexpert=[[@{primary_range_weapon_expert}]]}}",
|
|
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_mod}+@{primary_range_weapon_dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})/@{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=@{primary_range_weapon_notes}}}{{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]]}}{{tip=**Next:** Target rolls Defense}}{{attackinfo=1}}{{ars=1}}{{arclose=@{primary_range_weapon_close}}}{{arnear=@{primary_range_weapon_near}}}{{armedium=@{primary_range_weapon_medium}}}{{arfar=@{primary_range_weapon_far}}}{{arextreme=@{primary_range_weapon_extreme}}}{{firingmode=@{primary_range_weapon_mode}}}{{damage=@{primary_range_weapon_damage}}}{{ammotype=@{primary_range_weapon_ammo_type}}}{{skill=@{primary_range_weapon_skill}}}{{attribute=@{primary_range_weapon_attribute}}}{{weapspec=[[@{primary_range_weapon_spec}]]}}{{weapexpert=[[@{primary_range_weapon_expert}]]}}",
|
|
|
|
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☆ 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. ☆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}+@{uda})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}+@{uda})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}]]}}",
|
|
grenadeweaponnodicepool: "@{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}+@{uda})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}]]}}",
|
|
grenadeweapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}+@{uda})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}]]}}{{magicar=@{magic_ar}}}",
|
|
spellaoe: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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,6|14m,7|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}]]}}{{magicar=@{magic_ar}}}",
|
|
noncombatspell: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{dicepool_modifier}+@{specialization}+@{expertise})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}+@{uda})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,6|14m,7|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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}+@{uda})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}]]}}{{astralrep=@{astral_reputation}}}",
|
|
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?|0} [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}+@{uda})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?|0} [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}+@{uda})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?|0} [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}+@{uda})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?|0} [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}+@{uda})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}+@{uda})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}+@{fade_compiling_modifier}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}",
|
|
fade_registering: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{resistfade} ^{registering}}}{{dice=[[(@{willpower}+@{charisma}+@{fade_compiling_modifier}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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|Assassin|Defender|Modular|Music|Primal|Other} Sprite, Level ?{Level?|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15}}}{{dice=[[((@{tasking}+@{resonance}+?{Skill Level?|Skilled (+0),0|Specialization (+2),2|Expertise (+3),3})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}",
|
|
registering: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Registering ?{sprite Type?|Courier|Crack|Data|Fault|Machine|Assassin|Defender|Modular|Music|Primal|Other} Sprite, Level ?{Level?|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15}}}{{dice=[[((@{tasking}+@{resonance}+?{Skill Level?|Skilled (+0),0|Specialization (+2),2|Expertise (+3),3})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=[Sprite Resist](~@{character_name}|spriteregisterlevel?{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{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-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteresistlevel11: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 11 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[22d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteresistlevel12: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 12 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[24d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteresistlevel13: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 13 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[26d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteresistlevel14: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 14 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[28d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteresistlevel15: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 15 ^{sprite}}}{{base=Compiling Resist}}{{dice=[[30d6>5-@{sprite_resist_dv_modifier}]]}}{{desc=[Resist Fade](~@{character_name}|fade_compiling)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
|
|
spriteregisterlevel1: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 1 ^{sprite}}}{{base=Registering Resist}}{{dice=[[2d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel2: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 2 ^{sprite}}}{{base=Registering Resist}}{{dice=[[4d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel3: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 3 ^{sprite}}}{{base=Registering Resist}}{{dice=[[6d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel4: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 4 ^{sprite}}}{{base=Registering Resist}}{{dice=[[8d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel5: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 5 ^{sprite}}}{{base=Registering Resist}}{{dice=[[10d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel6: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 6 ^{sprite}}}{{base=Registering Resist}}{{dice=[[12d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel7: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 7 ^{sprite}}}{{base=Registering Resist}}{{dice=[[14d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel8: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 8 ^{sprite}}}{{base=Registering Resist}}{{dice=[[16d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel9: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 9 ^{sprite}}}{{base=Registering Resist}}{{dice=[[18d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel10: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 10 ^{sprite}}}{{base=Registering Resist}}{{dice=[[20d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel11: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 11 ^{sprite}}}{{base=Registering Resist}}{{dice=[[22d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel12: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 12 ^{sprite}}}{{base=Registering Resist}}{{dice=[[24d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel13: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 13 ^{sprite}}}{{base=Registering Resist}}{{dice=[[26d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel14: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 14 ^{sprite}}}{{base=Registering Resist}}{{dice=[[28d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
spriteregisterlevel15: "@{gm_toggle} &{template:rolls-computed}{{header=^{level} 15 ^{sprite}}}{{base=Registering Resist}}{{dice=[[30d6>5]]}}{{desc=[Resist Fade](~@{character_name}|fade_registering)}}{{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}+@{uda})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}]]}}",
|
|
complexformdice: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{complexform} @{name}}}{{dice=[[((@{dice}+@{dicepool_modifier}+@{spec}+@{expert})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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-computed}{{header=@{character_name}}}{{base=^{complexform} @{name}}}{{desc=@{notes}}}{{fade=[[@{fade}]]}}",
|
|
|
|
connections1: "/w GM &{template:rolls-computed}{{header=@{character_name}}}{{base=^{connection} 1}}{{dice=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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=[[(?{SRM Rule: Specialized Knowledge (+3 dice)?|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}+@{uda})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}+@{uda})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_w_f: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{willpower} + ^{firewall}}}{{dice=[[(@{selected|willpower}+@{selected|firewall}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_dp_f: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{data_processing} + ^{firewall}}}{{dice=[[(@{selected|data_processing}+@{selected|firewall}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_f: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{firewall} + ^{firewall}}}{{dice=[[(@{selected|firewall}+@{selected|firewall}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_int_dp: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{intuition} + ^{data_processing}}}{{dice=[[(@{selected|intuition}+@{selected|data_processing}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_dp_s: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{data_processing} + ^{sleaze}}}{{dice=[[(@{selected|data_processing}+@{selected|sleaze}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_c_dp: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{charisma} + ^{data_processing}}}{{dice=[[(@{selected|charisma}+@{selected|data_processing}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_dp_dr: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{data_processing} + ^{devicerating}}}{{dice=[[(@{selected|firewall}+@{selected|matrix_device_rating}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_a_dp: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{attack} + ^{data_processing}}}{{dice=[[(@{selected|attack}+@{selected|data_processing}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_w_s: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{willpower} + ^{sleaze}}}{{dice=[[(@{selected|willpower}+@{selected|sleaze}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_dr_dr: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{devicerating} x 2}}{{dice=[[(@{selected|matrix_device_rating}+@{selected|matrix_device_rating}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_l_f: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{logic} + ^{firewall}}}{{dice=[[(@{selected|logic}+@{selected|firewall}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_pilot_f: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{firewall} + ^{pilot}}}{{dice=[[(@{selected|firewall}+@{selected|pilot}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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_s_s: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{selected|wounds_toggle}]]}}{{edge=[[@{selected|edge_toggle}]]}}{{header=@{selected|character_name}}}{{base=^{sleaze} + ^{sleaze}}}{{dice=[[(@{selected|sleaze}+@{selected|sleaze}+@{selected|wounds_toggle}+@{selected|modifiers_toggle}+@{selected|edge_toggle}+@{uda})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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f), CRB p.180}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f), CRB p.180}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), Threshold: 4, CRB p.180}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. [Willpower + Firewall](~selected|matrixresist_w_f), CRB p.180}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. Encryption Rating x 2, CRB p.180}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Data Processing + Device Rating](~selected|matrixresist_dp_dr), CRB p.181}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Data Processing + Firewall](~selected|matrixresist_dp_f), CRB p.181}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. Data Bomb Rating x 2, CRB p.181}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), Hits = Encryption Rating, CRB p.181}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f) |or| [Firewall x 2](~selected|matrixresist_f_f), CRB p.181}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. [Willpower + Firewall](~selected|matrixresist_w_f) |or| [Firewall x 2](~selected|matrixresist_f_f), CRB p.181}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), CRB p.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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{intuition}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Intuition + Data Processing](~selected|matrixresist_int_dp) |or| [Data Processing + Sleaze](~selected|matrixresist_dp_s), CRB p.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_jackout: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Jack Out}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{willpower}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. [Charisma + Data Processing](~selected|matrixresist_c_dp) |or| [Attack + Data Processing](~selected|matrixresist_a_dp), CRB p.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_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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), CRB p.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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. [Willpower + Firewall](~selected|matrixresist_w_f) |or| [Firewall x 2](~selected|matrixresist_f_f), CRB p.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_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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. [Willpower + Sleaze](~selected|matrixresist_w_s), CRB p.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_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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), Extended Test, 10 Minute Interval, CRB p.183}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f) |or| [Firewall x 2](~selected|matrixresist_f_f), CRB p.183}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), vs. [Willpower + Firewall](~selected|matrixresist_w_f) |or| [Firewall x 2](~selected|matrixresist_f_f), CRB p.183}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Device Rating x 2](~selected|matrixresist_dr_dr), CRB p.183}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Logic + Firewall](~selected|matrixresist_l_f) |or| [Data Processing + Firewall](~selected|matrixresist_dp_f), CRB p.184}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Data Processing + Firewall](~selected|matrixresist_dp_f) |or| [Pilot + Firewall](~selected|matrixresist_pilot_f), CRB p.184}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Data Processing + Firewall](~selected|matrixresist_dp_f), CRB p.184}}{{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?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{intuition}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Sleaze](~selected|matrixresist_w_s) |or| [Firewall + Sleaze](~selected|matrixresist_f_s), CRB p.184}}{{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_calibration: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Calibration}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), HS p.28}}{{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_delayed_command: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Delayed Command}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Data Processing + Firewall](~selected|matrixresist_dp_f) |or| [Pilot + Firewall](~selected|matrixresist_pilot_f), HS p.28}}{{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_denial_of_service: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Denial of Service}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f), HS p.28}}{{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_device_lock: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Device Lock}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f), HS p.29}}{{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_garbage_in_garbage_out: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Garbage/In Garbage Out}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f), HS p.29}}{{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_known_exploit_backdoor_entry: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Known Exploit Backdoor Entry}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f) |or| [Firewall x 2](~selected|matrixresist_f_f), HS p.30}}{{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_masquerade: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Masquerade}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Intuition + Data Processing](~selected|matrixresist_int_dp), HS p.30}}{{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_metahuman_in_the_middle: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Metahuman in the Middle}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Intuition + Data Processing](~selected|matrixresist_int_dp), HS p.30}}{{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_modify_icon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Modify Icon}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Intuition + Data Processing](~selected|matrixresist_int_dp) |or| [Data Processing + Sleaze](~selected|matrixresist_dp_s), HS p.30}}{{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_popup: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Popup}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Intuition + Data Processing](~selected|matrixresist_int_dp), HS p.30}}{{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_squelch: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Squelch}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Intuition + Sleaze](~selected|matrixresist_int_s) |or| [Sleaze x 2](~selected|matrixresist_s_s), HS p.30}}{{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_subvert_infrastructure: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Subvert Infrastructure}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f), HS p.30}}{{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_threat_analysis: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Threat Analysis}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{electronics}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Legal), HS p.31}}{{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_watchdog: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=Matrix Watchdog}}{{?{Training Level?|Trained,0|Specialized,2|Expertise,3}}}{{dice=[[(@{cracking}+@{logic}+?{Training Level?|0}+@{modifiers_toggle}+@{wounds_toggle}+@{edge_toggle}+(@{matrix_overclock}*2)-@{matrix_noise}+@{uda})d6>5@{explode_toggle}cs>5cf<[[(1+@{bad_luck})]]]]}}{{desc=(Illegal), vs. [Willpower + Firewall](~selected|matrixresist_w_f), HS p.31}}{{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}]]}}",
|
|
|
|
// NPC specific rolls
|
|
host_rating: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{host_rating}}}{{rating=@{host_rating}}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
|
|
host_attack: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{attack}+[[?{Attribute|None,0 [None]|Custom,?{Dice?|0} [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}+@{uda})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}]]}}",
|
|
host_sleaze: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{sleaze}+[[?{Attribute|None,0 [None]|Custom,?{Dice?|0} [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}+@{uda})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}]]}}",
|
|
host_data_processing: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{data_processing}+[[?{Attribute|None,0 [None]|Custom,?{Dice?|0} [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}+@{uda})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}]]}}",
|
|
host_firewall: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{firewall}+[[?{Attribute|None,0 [None]|Custom,?{Dice?|0} [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}+@{uda})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}]]}}",
|
|
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}+@{uda})d6>5@{explode_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}]]}}",
|
|
level: "@{gm_toggle} &{template:rolls-computed}{{header=@{character_name}}}{{base=^{level}}}{{rating=@{level}}}",
|
|
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}+@{uda})d6>5@{explode_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}]]}}",
|
|
sprite_attack: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{attack}+[[?{Attribute|None,0 [None]|Custom,?{Dice?|0} [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}+@{uda})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}]]}}",
|
|
sprite_sleaze: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{sleaze}+[[?{Attribute|None,0 [None]|Custom,?{Dice?|0} [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}+@{uda})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}]]}}",
|
|
sprite_data_processing: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{data_processing}+[[?{Attribute|None,0 [None]|Custom,?{Dice?|0} [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}+@{uda})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}]]}}",
|
|
sprite_firewall: "&{template:rolls-computed}{{header=@{character_name}}}{{dice=[[(@{firewall}+[[?{Attribute|None,0 [None]|Custom,?{Dice?|0} [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}+@{uda})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}]]}}",
|
|
spriteskill:"@{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}|Resonance,@{resonance}|Level,@{level}|None,0}}}{{dice=[[(@{level}+?{Attribute}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
vehicle_dr: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defenserating} = ^{piloting} (?{Piloting?|No Pilot,@{pilot}|1|2|3|4|5|6|7|8|9|10}) + ^{armor} (@{armor})}}{{rating=[[?{Piloting?}+@{armor}]]}}",
|
|
vehicle_defense: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defense} = ^{piloting} (?{Piloting?|No Pilot,@{pilot}|1|2|3|4|5|6|7|8|9|10}) + ^{evasion} (?{Evasion Autosoft Rating or Pilot Reaction?| No Evasion Autosoft,0|1|2|3|4|5|6|7|8|9|10})}}{{dice=[[((?{Piloting?}+?{Evasion Autosoft Rating or Pilot Reaction?}+@{defense_modifier})+@{modifiers_toggle}+@{edge_toggle}+@{uda})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{wilddie_dice=[[0]]}}",
|
|
npc_clearsight: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{clearsight} = ^{clearsight} + ^{sensor}}}{{dice=[[(@{clearsight}+@{sensor}+@{modifiers_toggle}+@{edge_toggle}+@{uda})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
npc_electronicwarfare: "@{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}+@{uda})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}]]}}",
|
|
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}+@{uda})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}]]}}",
|
|
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}+@{uda})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}]]}}",
|
|
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}+@{uda})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}]]}}",
|
|
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}+@{uda})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}]]}}",
|
|
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}+@{uda})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}]]}}",
|
|
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}+@{uda})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}]]}}",
|
|
spirit_dr: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=^{defenserating}}}{{rating=@{defense_rating}}}",
|
|
spiritskill: "@{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}|Magic,@{magic}|Force,@{force}|None,0})}}{{dice=[[(@{force}+?{Attribute}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})d6>5@{explode_toggle}]]}}{{wilddie=[[@{wild_die}]]}}{{glitch=[[0]]}}{{wilddie_dice=[[0]]}}{{dicepool=[[0]]}}{{misses=[[0]]}}{{hits=[[0]]}}{{fours=[[0]]}}{{rerolls=[[@{rerolls}]]}}",
|
|
npcrangeweapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}{{tip=**Next:** Target rolls Defense}}{{npcattackinfo=1}}{{ars=1}}{{arclose=@{close}}}{{arnear=@{near}}}{{armedium=@{medium}}}{{arfar=@{far}}}{{arextreme=@{extreme}}}{{firingmode=@{mode}}}{{damage=@{damage}}}{{ammotype=}}{{skill=}}{{attribute=}}{{weapspec=}}{{weapexpert=}}",
|
|
npcrangeweaponnodicepool: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(?{Skill / Autosoft Rating?|1,1|2,2|3,3|4,4|5,5|6,6|7,7|8,8|9,9|10,10}+?{Attribute / Sensor Rating?|1,1|2,2|3,3|4,4|5,5|6,6|7,7|8,8|9,9|10,10}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}{{tip=**Next:** Target rolls Defense\n**Set Pool** for the weapon to remove prompt.}}{{npcattackinfo=1}}{{ars=1}}{{arclose=@{close}}}{{arnear=@{near}}}{{armedium=@{medium}}}{{arfar=@{far}}}{{arextreme=@{extreme}}}{{firingmode=@{mode}}}{{damage=@{damage}}}{{ammotype=}}{{skill=}}{{attribute=}}{{weapspec=}}{{weapexpert=}}",
|
|
npcmeleeweapon: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}{{tip=**Next:** Target rolls Defense}}{{npcattackinfo=1}}{{ars=1}}{{arclose=@{close}}}{{arnear=@{near}}}{{armedium=@{medium}}}{{arfar=@{far}}}{{arextreme=@{extreme}}}{{firingmode=}}{{damage=@{damage}}}{{ammotype=}}{{skill=}}{{attribute=}}{{weapspec=}}{{weapexpert=}}{{melee=1}}",
|
|
npcmeleeweaponnodicepool: "@{gm_toggle} &{template:rolls-computed}{{mod=[[@{modifiers_toggle}]]}}{{wound=[[@{wounds_toggle}]]}}{{edge=[[@{edge_toggle}]]}}{{header=@{character_name}}}{{base=@{name}}}{{dice=[[(?{Skill / Autosoft Rating?|1,1|2,2|3,3|4,4|5,5|6,6|7,7|8,8|9,9|10,10}+?{Attribute / Sensor Rating?|1,1|2,2|3,3|4,4|5,5|6,6|7,7|8,8|9,9|10,10}+@{dicepool_modifier}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}{{tip=**Next:** Target rolls Defense\n**Set Pool** for the weapon to remove prompt.}}{{npcattackinfo=1}}{{ars=1}}{{arclose=@{close}}}{{arnear=@{near}}}{{armedium=@{medium}}}{{arfar=@{far}}}{{arextreme=@{extreme}}}{{firingmode=}}{{damage=@{damage}}}{{ammotype=}}{{skill=}}{{attribute=}}{{weapspec=}}{{weapexpert=}}{{melee=1}}",
|
|
|
|
npcspell: "@{gm_toggle} &{template:rolls-computed}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}{{magicar=@{magic_ar}}}",
|
|
npcspellaoe: "@{gm_toggle} &{template:rolls-computed}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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,6|14m,7|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}]]}}{{magicar=@{magic_ar}}}",
|
|
npcnoncombatspell: "@{gm_toggle} &{template:rolls-computed}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}",
|
|
npcnoncombatspellaoe: "@{gm_toggle} &{template:rolls-computed}{{dice=[[(@{dicepool}+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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,6|14m,7|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}]]}}",
|
|
|
|
npcspellnodicepool: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{spellcasting_specialist}+@{spellcasting_expert})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}{{magicar=@{magic_ar}}}",
|
|
npcspellaoenodicepool: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{spellcasting_specialist}+@{spellcasting_expert})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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,6|14m,7|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}]]}}{{magicar=@{magic_ar}}}",
|
|
npcnoncombatspellnodicepool: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{spellcasting_specialist}+@{spellcasting_expert})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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}]]}}",
|
|
npcnoncombatspellaoenodicepool: "@{gm_toggle} &{template:rolls-computed}{{dice=[[((@{skill}+@{magic}+@{spellcasting_specialist}+@{spellcasting_expert})+@{wounds_toggle}+@{modifiers_toggle}+@{edge_toggle}+@{uda})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,6|14m,7|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}]]}}",
|
|
|
|
add_to_os_tracker: "{{name=[[0 [@{selected|character_name}]]]}}{{attack=[[0 [@{selected|attack}]]]}}{{sleaze=[[0 [@{selected|sleaze}]]]}}{{data_processing=[[0 [@{selected|data_processing}]]]}}{{firewall=[[0 [@{selected|firewall}]]]}}",
|
|
};
|
|
|
|
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','spriteresistlevel11','spriteresistlevel12','spriteresistlevel13','spriteresistlevel14','spriteresistlevel15',
|
|
'fade_registering', 'registering', 'spriteregisterlevel1', 'spriteregisterlevel2', 'spriteregisterlevel3', 'spriteregisterlevel4', 'spriteregisterlevel5', 'spriteregisterlevel6', 'spriteregisterlevel7', 'spriteregisterlevel8', 'spriteregisterlevel9', 'spriteregisterlevel10','spriteregisterlevel11','spriteregisterlevel12','spriteregisterlevel13','spriteregisterlevel14','spriteregisterlevel15',
|
|
'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',
|
|
'matrix_calibration', 'matrix_delayed_command', 'matrix_denial_of_service', 'matrix_device_lock', 'matrix_garbage_in_garbage_out', 'matrix_known_exploit_backdoor_entry', 'matrix_masquerade', 'matrix_metahuman_in_the_middle', 'matrix_modify_icon', 'matrix_popup', 'matrix_squelch', 'matrix_subvert_infrastructure', 'matrix_threat_analysis', 'matrix_watchdog',
|
|
'matrixresist_int_f', 'matrixresist_f_s', 'matrixresist_w_f', 'matrixresist_dp_f', 'matrixresist_f_f', 'matrixresist_int_dp', 'matrixresist_dp_s', 'matrixresist_c_dp', 'matrixresist_dp_dr', 'matrixresist_a_dp', 'matrixresist_w_s', 'matrixresist_dr_dr', 'matrixresist_l_f', 'matrixresist_pilot_f', 'matrixresist_s_s',
|
|
'host_rating', 'host_attack', 'host_sleaze', 'host_data_processing', 'host_firewall',
|
|
'pilot', 'vehicle_dr', 'vehicle_defense', 'npc_clearsight', 'npc_electronicwarfare', 'npc_evasion', 'npc_maneuvering', 'npc_stealth', 'npc_targeting', 'npc_targeting2', 'npc_targeting3',
|
|
'level', 'sprite_attack', 'sprite_sleaze', 'sprite_data_processing', 'sprite_firewall', 'resonance',
|
|
'spirit_dr', 'spiritskill',
|
|
].forEach((button) => {
|
|
on(`clicked:${button}`, (eventInfo) => {
|
|
console.log(eventInfo);
|
|
var rollButton = rollButtons[eventInfo.triggerName.slice(8)];
|
|
console.log(rollButton);
|
|
rollProcessor(rollButton);
|
|
});
|
|
});
|
|
|
|
// Add selected token to OS Tracker
|
|
on(`clicked:add_to_os_tracker`, (eventInfo) => {
|
|
console.log(eventInfo);
|
|
var rollButton = rollButtons.add_to_os_tracker;
|
|
|
|
startRoll(`!${rollButton}`, (results) => {
|
|
let exp_regex = /0 \[(.*?)\]/;
|
|
let os_tracker_row = {
|
|
name: results.results.name.expression.replace(exp_regex, "$1"),
|
|
attack: results.results.attack.expression.replace(exp_regex, "$1"),
|
|
sleaze: results.results.sleaze.expression.replace(exp_regex, "$1"),
|
|
data_processing: results.results.data_processing.expression.replace(exp_regex, "$1"),
|
|
firewall: results.results.firewall.expression.replace(exp_regex, "$1"),
|
|
};
|
|
|
|
// make a new repeatingRowID
|
|
var newId = generateRowID();
|
|
setAttrs({
|
|
[`repeating_os-tracker_${newId}_name`]: os_tracker_row.name,
|
|
[`repeating_os-tracker_${newId}_attack`]: os_tracker_row.attack,
|
|
[`repeating_os-tracker_${newId}_sleaze`]: os_tracker_row.sleaze,
|
|
[`repeating_os-tracker_${newId}_data_processing`]: os_tracker_row.data_processing,
|
|
[`repeating_os-tracker_${newId}_firewall`]: os_tracker_row.firewall,
|
|
[`repeating_os-tracker_${newId}_notes`]: `A: ${os_tracker_row.attack} | S: ${os_tracker_row.sleaze} | D: ${os_tracker_row.data_processing} | F: ${os_tracker_row.firewall}`,
|
|
[`repeating_os-tracker_${newId}_display_flag`]: "on",
|
|
[`repeating_os-tracker_${newId}_flag`]: 0,
|
|
});
|
|
|
|
finishRoll(
|
|
results.rollId, {
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
|
|
// 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', 'repeating_skills:spriteskill', 'repeating_skills:spiritskill'].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', 'skill'].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:grenadeweaponnodicepool', 'repeating_grenade:grenadeweapon', 'repeating_range:npcrangeweaponnodicepool', 'repeating_range:npcrangeweapon', 'repeating_melee:npcrangeweaponnodicepool', 'repeating_melee:npcmeleeweaponnodicepool', 'repeating_melee:npcmeleeweapon'].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', 'medium', 'far', 'extreme', 'blast', 'rating', 'attr_rating', 'damage', 'skill', 'attribute', 'mode', 'notes', 'dicepool', 'dicepool_mod'].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 Spell/Preparation/Ritual Rolls
|
|
['repeating_spell:spell', 'repeating_spell:spellaoe', 'repeating_spell:noncombatspell', 'repeating_spell:noncombatspellaoe', 'repeating_preparations:preparation', 'repeating_ritual:ritual', 'repeating_npcspell:npcspell', 'repeating_npcspell:npcspellaoe', 'repeating_npcspell:npcnoncombatspell', 'repeating_npcspell:npcnoncombatspellaoe', 'repeating_spell:npcspell', 'repeating_spell:npcspellaoe', 'repeating_spell:npcnoncombatspell', 'repeating_spell:npcnoncombatspellaoe', 'repeating_spell:npcspellnodicepool', 'repeating_spell:npcspellaoenodicepool', 'repeating_spell:npcnoncombatspellnodicepool', 'repeating_spell:npcnoncombatspellaoenodicepool'].forEach((button) => {
|
|
on(`clicked:${button}`, (eventInfo) => {
|
|
var buttonType = eventInfo.triggerName.split('_')[eventInfo.triggerName.split('_').length - 1];
|
|
var rollButton = rollButtons[buttonType];
|
|
|
|
['sheet_type', 'name', 'category', 'effect_type', 'skill', 'dicepool_modifier', 'specialization', 'expertise', 'drain', 'spec', 'expert', 'threshold', 'potency', 'notes', 'damage', 'dicepool', 'effect_type'].forEach((field) => {
|
|
var replacement = eventInfo.triggerName.slice(8);
|
|
|
|
var re = RegExp(buttonType+'$', "g");
|
|
replacement = replacement.replace(re, field);
|
|
|
|
rollButton = rollButton.replace('@{'+field+'}', '@{'+replacement+'}');
|
|
});
|
|
|
|
getAttrs(['spellcasting_specialist', 'spellcasting_expert'], (v) => {
|
|
rollButton = rollButton.replace('@{spellcasting_specialist}', v.spellcasting_specialist);
|
|
rollButton = rollButton.replace('@{spellcasting_expert}', v.spellcasting_expert);
|
|
});
|
|
|
|
rollProcessor(rollButton);
|
|
});
|
|
});
|
|
|
|
// Repeating Complex Form Rolls
|
|
['repeating_forms:complexform', 'repeating_forms:complexformdice', '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', 'dice', '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.log(ev);
|
|
//console.log(passthrough);
|
|
//console.log(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.log("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;
|
|
};
|
|
|
|
|
|
|
|
// 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
|
|
});
|
|
};
|
|
|
|
|
|
|
|
/*******************************************
|
|
* 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:modifications remove:repeating_metamagic change:repeating_effects:modifications remove:repeating_effects change:repeating_effects:active remove:repeating_range-weapon-mods change:repeating_range-weapon-mods:modifications change:repeating_range-weapon-mods: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', 'fade_compiling_modifier', 'sprite_resist_dv_modifier'
|
|
];
|
|
|
|
repName = /(.+-[^_]+)_(.*)$/.exec(eventInfo.triggerName);
|
|
var repAttr;
|
|
if(! repName) {
|
|
repName = eventInfo.triggerName;
|
|
} else {
|
|
repAttr = repName[2];
|
|
repName = repName[1];
|
|
}
|
|
|
|
// Unfortunately we were having issues letting this trigger on
|
|
// sheet worker changes to repeating-range-weapon-mods
|
|
if(repName.includes("repeating_range-weapon-mods_", 0) && repAttr == "active" && eventInfo.sourceType != "player") {
|
|
return;
|
|
}
|
|
|
|
var attrsToGet = ['enable_modifiers', 'enable_unrestricted_modifiers', `${repName}_powered_on`, `${repName}_active`, `${repName}_modifications`];
|
|
getAttrs(attrsToGet, (v) => {
|
|
if(v.enable_modifiers != "1") {
|
|
return;
|
|
}
|
|
|
|
|
|
// 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") {
|
|
return;
|
|
}
|
|
if(v[`${repName}_active`] && v[`${repName}_active`] !== "on") {
|
|
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 is 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") {
|
|
return;
|
|
}
|
|
if(eventInfo.removedInfo[`${eventInfo.sourceAttribute}_active`] && eventInfo.removedInfo[`${eventInfo.sourceAttribute}_active`] !== "on") {
|
|
return;
|
|
}
|
|
|
|
eventInfo.previousValue = eventInfo.removedInfo[`${eventInfo.sourceAttribute}_modifications`];
|
|
eventInfo.newValue = '';
|
|
}
|
|
|
|
|
|
// if previousValue and newValue are the same and it was not 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]
|
|
});
|
|
}
|
|
}
|
|
})
|
|
|
|
});
|
|
});
|
|
|
|
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 change:primary_range_weapon_dicepool_modifier change:primary_range_weapon_damage_mod change:primary_range_weapon_close_mod change:primary_range_weapon_near_mod change:primary_range_weapon_medium_mod change:primary_range_weapon_far_mod change:primary_range_weapon_extreme_mod", (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', 'primary_range_weapon_damage_mod', 'primary_range_weapon_dicepool_mod', 'primary_range_weapon_close_mod', 'primary_range_weapon_near_mod', 'primary_range_weapon_medium_mod', 'primary_range_weapon_far_mod', 'primary_range_weapon_extreme_mod', 'full_auto_penalty_mod', 'burst_fire_penalty_mod', 'burst_wide_penalty_mod', 'semi_auto_penalty_mod', 'single_shot_penalty_mod'], (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: v.primary_range_weapon_close_mod | 0,
|
|
arModN: v.primary_range_weapon_near_mod | 0,
|
|
arModM: v.primary_range_weapon_medium_mod | 0,
|
|
arModF: v.primary_range_weapon_far_mod | 0,
|
|
arModE: v.primary_range_weapon_extreme_mod | 0,
|
|
dvMod: v.primary_range_weapon_damage_mod | 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 += v.full_auto_penalty_mod | 0;
|
|
mods.arMod += -6;
|
|
break;
|
|
case "Burst Fire":
|
|
// 4 rounds, AR -4, DV +2
|
|
rounds = 4;
|
|
mods.arMod += v.burst_fire_penalty_mod | 0;
|
|
mods.arMod += -4;
|
|
mods.dvMod += 2;
|
|
break;
|
|
case "Burst Fire Wide":
|
|
// 4 rounds, AR -4, split dice pool 2 parts
|
|
rounds = 4;
|
|
mods.arMod += v.burst_wide_penalty_mod | 0;
|
|
mods.arMod += -4;
|
|
mods.dvMod += 0;
|
|
split_dicepool = 2;
|
|
break;
|
|
case "Semi Auto":
|
|
// 2 rounds, AR -2, DV +1
|
|
rounds = 2;
|
|
mods.arMod += v.semi_auto_penalty_mod | 0;
|
|
mods.arMod += -2;
|
|
mods.dvMod += 1;
|
|
break;
|
|
case "Single Shot":
|
|
default:
|
|
// 1 round, No changes
|
|
rounds = 1;
|
|
mods.arMod += v.single_shot_penalty_mod | 0;
|
|
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 + essence_mod - aug_mods - calculated augmentation costs = total)
|
|
var update_essence = (eventInfo) => {
|
|
let ess = 6;
|
|
|
|
getSectionIDs("augmentations", (ids) => {
|
|
// If there are no augmentations it was likely triggered by a deletion, need to reset aug_essence_cost to 0
|
|
if(ids.length == 0) {
|
|
setAttrs({
|
|
aug_essence_cost: 0
|
|
});
|
|
}
|
|
|
|
_.each(ids, (id) => {
|
|
getAttrs([`repeating_augmentations_${id}_essence_cost`, `repeating_augmentations_${id}_grade`, `repeating_augmentations_${id}_essence_base`, `repeating_augmentations_${id}_essence_cost_raw`, `repeating_augmentations_${id}_has_rating`, `repeating_augmentations_${id}_rating`], (aug_ess) => {
|
|
let toUpdate = {};
|
|
let ess_cost = aug_ess[`repeating_augmentations_${id}_essence_cost`] || 0,
|
|
rating = aug_ess[`repeating_augmentations_${id}_rating`] || '',
|
|
use_raw = aug_ess[`repeating_augmentations_${id}_essence_cost_raw`] || 0,
|
|
ess_base = aug_ess[`repeating_augmentations_${id}_essence_base`] || '',
|
|
grade = aug_ess[`repeating_augmentations_${id}_grade`] || 'Standard';
|
|
if(ess_cost == 'NaN') {
|
|
ess_cost = 0;
|
|
}
|
|
|
|
// If use_raw isn't checked we're expected to do magic
|
|
if(use_raw == 0) {
|
|
// regex to catch "rating x (*)" and use the * part for our essence base multiplied by the rating
|
|
let re = /\s*rating\s*x\s*(.*)/i;
|
|
let aug_base = aug_ess[`repeating_augmentations_${id}_essence_base`] || "";
|
|
let matches = [];
|
|
if(typeof aug_base == "string") {
|
|
matches = aug_base.match(re);
|
|
}
|
|
|
|
if(matches && matches[1]) {
|
|
ess_cost = parseFloat(rating * matches[1]).toFixed(2);
|
|
} else {
|
|
ess_cost = parseFloat(aug_base).toFixed(2);
|
|
}
|
|
|
|
// Update the essence cost based on the selected grade
|
|
switch(grade) {
|
|
case 'Standard':
|
|
case 'Gammaware':
|
|
ess_cost = parseFloat(ess_cost * 1).toFixed(2);
|
|
break;
|
|
case 'Used':
|
|
case 'Omega':
|
|
case 'Exoware':
|
|
ess_cost = parseFloat(ess_cost * 1.1).toFixed(2);
|
|
break;
|
|
case 'Alphaware':
|
|
ess_cost = parseFloat(ess_cost * 0.8).toFixed(2);
|
|
break;
|
|
case 'Betaware':
|
|
ess_cost = parseFloat(ess_cost * 0.7).toFixed(2);
|
|
break;
|
|
case 'Deltaware':
|
|
ess_cost = parseFloat(ess_cost * 0.5).toFixed(2);
|
|
break;
|
|
default:
|
|
ess_cost = parseFloat(ess_cost * 1.1).toFixed(2);
|
|
break;
|
|
};
|
|
} else {
|
|
// we're using the essence_cost raw without any modification so nothing to do here
|
|
}
|
|
|
|
// remove the essence cost of this aug from the current essence
|
|
ess = parseFloat(ess - ess_cost).toFixed(2);
|
|
|
|
toUpdate[`repeating_augmentations_${id}_essence_cost`] = parseFloat(ess_cost).toFixed(2);
|
|
toUpdate[`essence`] = parseFloat(ess).toFixed(2);
|
|
toUpdate[`aug_essence_cost`] = parseFloat(6 - parseFloat(ess)).toFixed(2);
|
|
|
|
// set the changes
|
|
setAttrs(toUpdate, { silent: true} );
|
|
});
|
|
});
|
|
|
|
|
|
|
|
getAttrs(['essence_mod', 'magic', 'matrix_device_essence_cost'], (a) => {
|
|
var ess_mod = 0;
|
|
if(! isNaN(a['essence_mod']) && a['essence_mod'] !== '') {
|
|
ess_mod = a['essence_mod'];
|
|
}
|
|
ess = parseFloat(ess) + parseFloat(ess_mod);
|
|
ess = parseFloat(ess) - parseFloat(a['matrix_device_essence_cost']) || 0;
|
|
|
|
setAttrs({
|
|
essence: parseFloat(ess).toFixed(2)
|
|
}, { silent: true });
|
|
});
|
|
});
|
|
};
|
|
|
|
|
|
//This function watches for changes to augmentations and updates recalculates essence
|
|
on("change:essence_mod remove:repeating_augmentations change:repeating_augmentations:essence_cost change:repeating_augmentations:rating change:repeating_augmentations:grade change:repeating_augmentations:essence_base change:repeating_augmentations:essence_cost_raw change:matrix_device_essence_cost", (eventInfo) => {
|
|
console.log(eventInfo);
|
|
update_essence(eventInfo);
|
|
});
|
|
|
|
|
|
// 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 */
|
|
/********************************************************/
|
|
// Show the skill assigned for NPC Complex Forms
|
|
on("change:repeating_forms:skill", (eventInfo) => {
|
|
let row_id = eventInfo.sourceAttribute.slice(0, -6);
|
|
let skillnames = {
|
|
'@{electronics}': "Electronics",
|
|
'@{cracking}': "Cracking",
|
|
'@{tasking}': "Tasking",
|
|
};
|
|
getAttrs([`${row_id}_skill`], (v) => {
|
|
let display = skillnames[v[`${row_id}_skill`]] || "No Roll";
|
|
let toUpdate = {};
|
|
|
|
setAttrs({
|
|
[`${row_id}_skillname`]: display
|
|
}, {silent: true});
|
|
});
|
|
});
|
|
|
|
//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 remove:repeating_armor", (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({
|
|
'defense_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");
|
|
attrs.push('compendium_drop_in_progress');
|
|
getAttrs(attrs, (v) =>{
|
|
// If we're in the middle of a compendium drop don't update the tracks, sometimes the compendiums set odd values
|
|
if(v.compendium_drop_in_progress) {
|
|
return;
|
|
}
|
|
|
|
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:matrix_device_rating change:matrix_modifier change:sensor", () => {
|
|
getAttrs(["sheet_type", "matrix_device_rating", "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.matrix_device_rating) || parseInt(v.device_rating) || 0;
|
|
mod = parseInt(v.matrix_modifier) || 0;
|
|
}
|
|
|
|
const tot = Math.ceil(dev/2) + 8 + mod;
|
|
|
|
setAttrs({
|
|
matrix: tot,
|
|
matrix_hex: tot,
|
|
matrix_max: tot,
|
|
matrix_hex_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;
|
|
//console.log(v);
|
|
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");
|
|
}
|
|
}
|
|
|
|
//console.log("stu: "+stu+"\nphy: "+phy+"\npain_tolerance: "+pain_tolerance+"\nphys_thresh: "+phys_thresh+"\nstun_thresh: "+stun_thresh);
|
|
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", "initiative_dice_mod", "initiative_dice_temp", "initiative_dice_temp_flag"], (v) => {
|
|
if(v.sheet_type === 'spirit') {
|
|
// spirit initiative is auto-calculated elsewhere
|
|
return;
|
|
}
|
|
//console.log("Initiative Updating");
|
|
//console.log(v);
|
|
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;
|
|
//console.log("bas: "+bas+"\ntot: "+tot);
|
|
// const dice = parseInt(v.initiative_dice) || 1;
|
|
const dice = 1;
|
|
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 = dice + dice_mod + dice_tmp;
|
|
//console.log("dice: "+dice+"\ndice_mod: "+dice_mod+"\ndice_tmp: "+dice_tmp+"\ndice_tot: "+dice_tot);
|
|
if(v.sheet_type === 'vehicle') {
|
|
bas = v.pilot * 2 || 0;
|
|
tot = bas + mod + tmp;
|
|
|
|
dice_tot = 4 + dice_mod + dice_tmp;
|
|
}
|
|
//console.log("dice_tot: "+dice_tot);
|
|
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", "astral_initiative_dice", "sheet_type"], (v) => {
|
|
// spirits have specifically defined initiatives, this is messing them up
|
|
if(v.sheet_type === 'spirit') {
|
|
return;
|
|
}
|
|
|
|
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;
|
|
let dice_base = 2;
|
|
|
|
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 = dice_base + 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;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//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, matrix_max: tot});
|
|
});
|
|
});
|
|
|
|
|
|
on("change:repeating_skills:name", (eventInfo) => {
|
|
update_skill_attribute(eventInfo.triggerName.replace('_name', ''), eventInfo.newValue);
|
|
|
|
// resynch the hidden attr_<SKILLNAME> attributes so the old skill gets wiped and the new one gets set.
|
|
update_skill_ratings();
|
|
});
|
|
|
|
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 'Patterncraft':
|
|
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;
|
|
}
|
|
};
|
|
|
|
|
|
on("change:repeating_skills:specialization", (eventInfo) => {
|
|
let key = eventInfo.triggerName
|
|
key = key.substring(0, key.length - 10);
|
|
|
|
setAttrs({
|
|
[key]: eventInfo.newValue
|
|
});
|
|
});
|
|
|
|
//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") || source.includes("mod")) {
|
|
getAttrs([`${field}_rating`, `${field}_mod`, `${field}_name`, 'sheet_type'], (v) => {
|
|
if(v.sheet_type == 'spirit') {
|
|
return;
|
|
}
|
|
const bas = parseInt(v[`${field}_rating`]) || 0;
|
|
const mod = parseInt(v[`${field}_mod`]) || 0;
|
|
const tot = parseInt(bas) + parseInt(mod);
|
|
const skill = v[`${field}_name`] || '';
|
|
let display = bas;
|
|
if(mod) {
|
|
display += " ("+tot+")";
|
|
}
|
|
|
|
// Update repeating melee weapon skill and rating values
|
|
getSectionIDs("melee", function(ids) {
|
|
ids.forEach((id) => {
|
|
getAttrs([`repeating_melee_${id}_skill`], (v2) => {
|
|
if(v2[`repeating_melee_${id}_skill`] == v[`${field}_name`]) {
|
|
setAttrs({
|
|
[`repeating_melee_${id}_rating`]: parseInt(tot),
|
|
[`repeating_melee_${id}_dicepool`]: tot
|
|
});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
// 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]: tot
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
setAttrs({
|
|
[`${field}_dicepool`]: tot,
|
|
[`${field}_rating`]: bas,
|
|
[`${field}_display_rating`]: display,
|
|
[skill]: tot
|
|
});
|
|
});
|
|
} 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');
|
|
};
|
|
});
|
|
});
|
|
|
|
on("remove:repeating_skills", (eventInfo) => {
|
|
console.log("Skill deleted");
|
|
console.log(eventInfo);
|
|
update_skill_ratings();
|
|
});
|
|
|
|
// Do some housekeeping on the hidden attr_<SKILLNAME> (ex: attr_closecombat, attr_sorcery, etc) attributes
|
|
var update_skill_ratings = () => {
|
|
let skill_list = {'astral': '-1', 'athletics': '-1', 'biotech': '-1', 'closecombat': '-1', 'con': '-1', 'conjuring': '-1', 'cracking': '-1', 'electronics': '-1', 'enchanting': '-1', 'engineering': '-1', 'exoticweapons': '-1', 'firearms': '-1', 'influence': '-1', 'outdoors': '-1', 'patterncraft': '-1', 'perception': '-1', 'piloting': '-1', 'sorcery': '-1', 'stealth': '-1', 'tasking': '-1'};
|
|
|
|
// walk the repeating skills section to grab the skills that the PC currently has
|
|
toGet = [];
|
|
getSectionIDs('repeating_skills', (skill_IDs) => {
|
|
// grab the name and rating attribute names for each of their skills
|
|
skill_IDs.forEach((rowID) => {
|
|
toGet.push('repeating_skills_'+rowID+'_name');
|
|
toGet.push('repeating_skills_'+rowID+'_rating');
|
|
});
|
|
|
|
// get all of the current skills and update skill_list with the current ratings for those skills
|
|
// leaving everything else at -1
|
|
getAttrs(toGet, (v) => {
|
|
skill_IDs.forEach((ID) => {
|
|
let skill_name_simplified = v[`repeating_skills_${ID}_name`].toLowerCase().replace(/\s/g, '');
|
|
skill_list[skill_name_simplified] = v[`repeating_skills_${ID}_rating`];
|
|
});
|
|
|
|
|
|
// update the hidden attr_<SKILLNAME> attributes with the current skill rank or -1.
|
|
setAttrs(skill_list);
|
|
});
|
|
});
|
|
};
|
|
|
|
var disable_ranged_mods = () => {
|
|
// Get the currently active mods and disable them
|
|
var enabled_mods = [];
|
|
getSectionIDs('repeating_range-weapon-mods', (rows) => {
|
|
toUpdate = {};
|
|
rows.forEach((row) => {
|
|
getAttrs([`repeating_range-weapon-mods_${row}_active`, `repeating_range-weapon-mods_${row}_name`], (mod) => {
|
|
if(mod[`repeating_range-weapon-mods_${row}_active`] == "on") {
|
|
enabled_mods.push(row);
|
|
setAttrs({
|
|
[`repeating_range-weapon-mods_${row}_active`]: 0,
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
setAttrs({
|
|
primary_range_weapon_close_mod: 0,
|
|
primary_range_weapon_near_mod: 0,
|
|
primary_range_weapon_medium_mod: 0,
|
|
primary_range_weapon_far_mod: 0,
|
|
primary_range_weapon_extreme_mod: 0,
|
|
primary_range_weapon_damage_mod: 0,
|
|
primary_range_weapon_dicepool_mod: 0
|
|
});
|
|
|
|
});
|
|
|
|
return enabled_mods;
|
|
};
|
|
|
|
|
|
// Deal with grenade type changes to attempt to calculate dicepool
|
|
on("change:repeating_grenade:type change:repeating_grenade:dicepool change:repeating_grenade:spec change:repeating_grenade:expert change:repeating_grenade:dicepool_modifier", (eventInfo) => {
|
|
console.log(eventInfo);
|
|
let key = '';
|
|
let changed = '';
|
|
if(eventInfo.triggerName.endsWith("type")) {
|
|
key = eventInfo.triggerName.slice(0, -5);
|
|
changed = "type";
|
|
} else if(eventInfo.triggerName.endsWith("dicepool")) {
|
|
key = eventInfo.triggerName.slice(0, -9);
|
|
changed = "dicepool";
|
|
} else if(eventInfo.triggerName.endsWith("spec")) {
|
|
key = eventInfo.triggerName.slice(0, -5);
|
|
changed = "spec";
|
|
} else if(eventInfo.triggerName.endsWith("expert")) {
|
|
key = eventInfo.triggerName.slice(0, -7);
|
|
changed = "expert";
|
|
} else if(eventInfo.triggerName.endsWith("dicepool_modifier")) {
|
|
key = eventInfo.triggerName.slice(0, -18);
|
|
changed = "dicepool_modifier";
|
|
}
|
|
|
|
getAttrs([`${key}_dicepool`, `${key}_type`, `${key}_spec`, `${key}_expert`, `${key}_dicepool_modifier`, "agility", "logic", "athletics", "engineering", "exotic weapons"], (v) => {
|
|
let toSet = {};
|
|
console.log(v);
|
|
if(changed === "dicepool") {
|
|
// just set the type to "Custom Dicepool" so the player knows it's being overridden
|
|
toSet[`${key}_type`] = 'custom';
|
|
toSet[`${key}_spec`] = 0;
|
|
toSet[`${key}_expert`] = 0;
|
|
toSet[`${key}_dicepool_modifier`] = 0;
|
|
} else if(changed === "spec" || changed === "expert" || changed === "dicepool_modifier") {
|
|
let dp = parseInt(v[`${key}_dicepool`]) || 0,
|
|
pv = parseInt(eventInfo.previousValue) || 0,
|
|
nv = parseInt(eventInfo.newValue) || 0;
|
|
|
|
dp -= pv;
|
|
dp += nv;
|
|
|
|
toSet[`${key}_dicepool`] = dp;
|
|
} else if(changed === "type") {
|
|
let dp = 0;
|
|
if(parseInt(v[`${key}_spec`])) {
|
|
dp += 2;
|
|
}
|
|
if(parseInt(v[`${key}_expert`])) {
|
|
dp += 3;
|
|
}
|
|
if(v[`${key}_dicepool_modifier`]) {
|
|
dp += parseInt(v[`${key}_dicepool_modifier`]);
|
|
}
|
|
console.log("dp after spec, expert, mod: "+dp);
|
|
if(v[`${key}_type`].includes("agility") && v.agility) {
|
|
dp += v.agility;
|
|
}
|
|
if(v[`${key}_type`].includes("logic") && v.logic) {
|
|
dp += v.logic;
|
|
}
|
|
|
|
console.log("dp after agility and logic: "+dp);
|
|
if(v[`${key}_type`].includes("athletics")) {
|
|
if(v.athletics) {
|
|
dp += v.athletics;
|
|
} else {
|
|
dp += -1;
|
|
}
|
|
}
|
|
if(v[`${key}_type`].includes("engineering")) {
|
|
if(v.engineering) {
|
|
dp += v.engineering;
|
|
} else {
|
|
dp += -1;
|
|
}
|
|
}
|
|
if(v[`${key}_type`].includes("exotic weapons")) {
|
|
if(v["exotic weapons"]) {
|
|
dp += v["exotic weapons"];
|
|
} else {
|
|
dp += -1;
|
|
}
|
|
}
|
|
console.log("dp after athletics, engineering and exotic weapons: "+dp);
|
|
|
|
if(v[`${key}_type`] == "custom") {
|
|
dp = v.dicepool || 0;
|
|
toSet[`${key}_spec`] = 0;
|
|
toSet[`${key}_expert`] = 0;
|
|
toSet[`${key}_dicepool_modifier`] = 0;
|
|
}
|
|
|
|
toSet[`${key}_dicepool`] = dp;
|
|
}
|
|
console.log(toSet);
|
|
setAttrs(toSet, {silent: true});
|
|
});
|
|
});
|
|
|
|
|
|
//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);
|
|
const regex = /_(-.*)$/;
|
|
var rowID = eventInfo.triggerName.match(regex)[1];
|
|
|
|
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`, `${weap}_has_mods`, `${weap}_notes`, `sheet_type`, `${weap}_dicepool`, `${weap}_dicepool_base`], (v) => {
|
|
// Trying to detect this firing on a remove: event and stop processing if it was
|
|
if(typeof eventInfo.newValue === 'undefined' && typeof eventInfo.previousValue === 'undefined' && ! v[`${weap}_name`]) {
|
|
console.log("do nothing!");
|
|
return;
|
|
}
|
|
|
|
|
|
if(eventInfo.sourceAttribute.endsWith("dicepool") && eventInfo.newValue && eventInfo.newValue != "0") {
|
|
if(eventInfo.sourceType === 'player') {
|
|
setAttrs({
|
|
[`${weap}_dicepool_base`]: v[`${weap}_dicepool`],
|
|
}, {silent: true});
|
|
}
|
|
// return;
|
|
} else if(eventInfo.sourceAttribute.endsWith("dicepool") && ! eventInfo.newValue) {
|
|
setAttrs({
|
|
[`${weap}_dicepool_base`]: 0,
|
|
[`${weap}_dicepool`]: 0
|
|
}, {silent: true});
|
|
} else if(v[`${weap}_dicepool_base`] && v[`${weap}_dicepool_base`] != v[`${weap}_dicepool`]) {
|
|
|
|
}
|
|
|
|
// If this is a vehicle/drone or spirit sheet there's nothing more to do
|
|
if(v.sheet_type == 'vehicle' || v.sheet_type == 'spirit') {
|
|
return;
|
|
}
|
|
|
|
|
|
// We only auto-fill the dicepool if it's empty or 0
|
|
if(v.sheet_type == 'pc' || (! v[`${weap}_dicepool`] || v[`${weap}_dicepool`] == 0)) {
|
|
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}_dicepool_base`]: tot,
|
|
[`${weap}_attribute`]: attribute,
|
|
[`${weap}_attr_rating`]: attr
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
// Apply dicepool mod if that changed
|
|
if(eventInfo.sourceAttribute.endsWith('_dicepool_modifier')) {
|
|
let nv = parseInt(eventInfo.newValue) || 0;
|
|
let pv = parseInt(eventInfo.previousValue) || 0;
|
|
let delta = nv - pv;
|
|
let tot = parseInt(v[`${weap}_dicepool`]) + parseInt(delta);
|
|
|
|
setAttrs({
|
|
[`${weap}_dicepool`]: tot,
|
|
[`${weap}_dicepool_base`]: tot
|
|
}, {silent: true});
|
|
}
|
|
|
|
/* 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", "notes"];
|
|
|
|
//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`];
|
|
toEnable.primary_range_weapon_rowID = rowID;
|
|
|
|
|
|
setAttrs(toEnable);
|
|
|
|
}
|
|
|
|
// Add any melee 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") {
|
|
// if it's a ranged weapon disabled any primary_ranged_mods that were active
|
|
if(type === "range") {
|
|
var enabled_mods = disable_ranged_mods();
|
|
|
|
// pop up the mods interface if there were mods
|
|
// so the user can enable the right ones
|
|
if(v[`${weap}_has_mods`] == 1) {
|
|
setAttrs({
|
|
[`mods-flag`]: "on",
|
|
tab: "core"
|
|
});
|
|
}
|
|
}
|
|
|
|
//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(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
|
|
}, {silent: true});
|
|
} else { // they are now a grunt group member we need to adjust dicepool and ARs
|
|
var dp = parseInt(dice) + 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
|
|
}, {silent: true});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
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) {
|
|
var handling_or = parseInt(v[`${id}_handling_offroad`]) + parseInt(v[`${id}_handling_modifier`]);
|
|
handling = handling + ' (' + handling_or + ')';
|
|
}
|
|
|
|
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', 'compendium_drop_data', 'canvas_drop_data'], (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;
|
|
case 'Assassin':
|
|
attack = level + 3;
|
|
sleaze = level + 2;
|
|
dataproc = level + 1;
|
|
firewall = level;
|
|
resonance = level;
|
|
hot_base = (level * 2) + 1;
|
|
hot_dice = 4;
|
|
skills = ['Electronics', 'Cracking'];
|
|
powers = ['Death Mark', 'Phantom'];
|
|
break;
|
|
case 'Defender':
|
|
attack = level;
|
|
sleaze = level + 1;
|
|
dataproc = level + 2;
|
|
firewall = level + 3;
|
|
resonance = level;
|
|
hot_base = (level * 2) + 1;
|
|
hot_dice = 4;
|
|
skills = ['Electronics', 'Cracking'];
|
|
powers = ['Shield', 'Stability'];
|
|
break;
|
|
case 'Modular':
|
|
attack = level + 1;
|
|
sleaze = level + 2;
|
|
dataproc = level + 1;
|
|
firewall = level + 2;
|
|
resonance = level;
|
|
hot_base = (level * 2) + 1;
|
|
hot_dice = 4;
|
|
skills = ['Electronics', 'Engineering', 'Cracking'];
|
|
powers = [];
|
|
break;
|
|
case 'Music':
|
|
attack = level;
|
|
sleaze = level;
|
|
dataproc = level + 4;
|
|
firewall = level;
|
|
resonance = level + 1;
|
|
hot_base = (level * 2) + 4;
|
|
hot_dice = 4;
|
|
skills = ['Electronics', 'Con (Performance only)'];
|
|
powers = ['Captivate Audience', 'Harmonize'];
|
|
break;
|
|
case 'Primal':
|
|
attack = level + 3;
|
|
sleaze = level + 1;
|
|
dataproc = level + 3;
|
|
firewall = level + 1;
|
|
resonance = level + 1;
|
|
hot_base = (level * 2) + 3;
|
|
hot_dice = 4;
|
|
skills = ['Electronics', 'Cracking'];
|
|
powers = ['Digital Scream', 'Fractal Dream'];
|
|
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}`);
|
|
});
|
|
|
|
let usedIDs = [];
|
|
skills.forEach(skill => {
|
|
// make a new repeatingRowID
|
|
var newId = generateRowID();
|
|
while(newId in usedIDs) {
|
|
newId = generateRowID();
|
|
}
|
|
usedIDs.push(newId);
|
|
|
|
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}`);
|
|
});
|
|
|
|
|
|
let usedIDs = [];
|
|
powers.forEach(power => {
|
|
// make a new repeatingRowID
|
|
var newId = generateRowID();
|
|
while(newId in usedIDs) {
|
|
newId = generateRowID();
|
|
}
|
|
usedIDs.push(newId);
|
|
|
|
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'
|
|
});
|
|
|
|
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),
|
|
weaknesses: ''
|
|
};
|
|
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;
|
|
spirit.weaknesses = 'Allergy (Inhalation vector toxins, Severe)';
|
|
|
|
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,
|
|
'skill': 'Magic',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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;
|
|
spirit.weaknesses = 'Allergy (silver, Severe)';
|
|
|
|
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,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'skill': 'Magic',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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;
|
|
spirit.weaknesses = 'Allergy (Electricity, Severe)';
|
|
|
|
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,
|
|
'skill': 'Magic',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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;
|
|
spirit.weaknesses = 'Allergy (Cold, Severe), Vulnerability (fire extinguishers)';
|
|
|
|
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,
|
|
'skill': 'Magic',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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;
|
|
spirit.weaknesses = ' Allergy (ferrous metal, Severe)';
|
|
|
|
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,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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;
|
|
spirit.weaknesses = 'Allergy (fire, Severe)';
|
|
|
|
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,
|
|
'skill': 'Magic',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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;
|
|
spirit.weaknesses = 'Allergy (fire, vulnerability)';
|
|
|
|
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,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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;
|
|
spirit.weaknesses = 'Allergy (wood, severe)';
|
|
|
|
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,
|
|
'skill': 'Magic',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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;
|
|
spirit.weaknesses = 'Allergy (gold, severe)';
|
|
|
|
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,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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;
|
|
spirit.weaknesses = 'Allergy (corrosives, severe)';
|
|
|
|
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;
|
|
case 'Blood':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force + 4;
|
|
spirit.agility = force + 2;
|
|
spirit.reaction = force + 1;
|
|
spirit.strength = force + 3;
|
|
spirit.willpower = force + 1;
|
|
spirit.logic = force;
|
|
spirit.intuition = force;
|
|
spirit.charisma = (force > 1) ? force - 1 : 1;
|
|
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) + 1;
|
|
spirit.initiative_dice = 2;
|
|
spirit.astral_initiative_base = force * 2;
|
|
spirit.astral_initiative_dice = 3;
|
|
spirit.defense_rating = force + 4;
|
|
spirit.weaknesses = 'Essence Loss (1 point per day)';
|
|
|
|
skills = ['Astral', 'Athletics', 'Close Combat', 'Outdoors', 'Perception'];
|
|
powers = ['Astral Form', 'Binding', 'Engulf', 'Enhanced Senses (Smell)', 'Fear', 'Materialization'];
|
|
optional_powers = ['Concealment', 'Confusion', 'Guard', 'Movement', 'Natural Weapon (claws/bite)', 'Noxious Breath'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Engulf',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': parseInt(force + 2) + 'P',
|
|
'c': (force * 2) + 2,
|
|
'n': ((force * 2) - 2),
|
|
'm': ((force * 2) - 8),
|
|
'f': ((force * 2) - 10),
|
|
'e': 0,
|
|
'notes': ''
|
|
},
|
|
{
|
|
'name': 'Optional claw/bite',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': Math.ceil(force / 2) + 'P',
|
|
'c': (force * 2) + 2,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': 'Requires Natural Weapon Optional Power'
|
|
}];
|
|
break;
|
|
case 'Insect (Caretaker)':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force;
|
|
spirit.agility = force + 1;
|
|
spirit.reaction = force + 1;
|
|
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 = 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 + 3;
|
|
spirit.weaknesses = 'Allergy (Insecticides, Severe), Evanescence';
|
|
|
|
skills = ['Astral', 'Close Combat', 'Influence', 'Perception'];
|
|
powers = ['Animal Control (Insect Type)', 'Astral Form', 'Guard', 'Hive Mind', 'Inhabitation (Living Vessels)', 'Innate Spell (Physical Barrier)', 'Sapience'];
|
|
optional_powers = ['Binding', 'Confusion', 'Enhanced Senses (Smell)', 'Thermographic Vision', 'Ultrasound'];
|
|
ranged = [];
|
|
close = [];
|
|
break;
|
|
case 'Insect (Nymph)':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = (force > 1) ? force - 1 : 1;
|
|
spirit.agility = force;
|
|
spirit.reaction = force + 3;
|
|
spirit.strength = (force > 1) ? force - 1 : 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) + 7;
|
|
spirit.move_speed = 5;
|
|
spirit.sprint_speed = 10;
|
|
spirit.sprint_modifier = 3;
|
|
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;
|
|
spirit.weaknesses = 'Allergy (Insecticides, Severe), Evanescence';
|
|
|
|
skills = ['Astral', 'Athletics', 'Close Combat', 'Perception', 'Sorcery'];
|
|
powers = ['Animal Control (Insect Type)', 'Astral Form', 'Enhanced Senses (Smell)', 'Thermographic Vision', 'Ultrasound', 'Hive Mind', 'Inhabitation (Living Vessels)', 'Innate Spell (any one Illusion Spell known to the summoner)', 'Sapience'];
|
|
optional_powers = ['Compulsion', 'Fear'];
|
|
ranged = [];
|
|
close = [];
|
|
break;
|
|
case 'Insect (Scout)':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force;
|
|
spirit.agility = force + 2;
|
|
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 = 4;
|
|
spirit.physical = Math.ceil(force / 2) + 8;
|
|
spirit.move_speed = 5;
|
|
spirit.sprint_speed = 10;
|
|
spirit.sprint_modifier = 3;
|
|
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;
|
|
spirit.weaknesses = 'Allergy (Insecticides, Severe), Evanescence';
|
|
|
|
skills = ['Astral', 'Close Combat', 'Perception', 'Stealth'];
|
|
powers = ['Animal Control (Insect Type)', 'Astral Form', 'Hive Mind', 'Inhabitation (Living Vessels)', 'Innate Spell (Physical Barrier)', 'Movement', 'Sapience', 'Search'];
|
|
optional_powers = ['Confusion', 'Guard', 'Enhanced Senses (Smell)', 'Thermographic Vision', 'Ultrasound'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Natural Weapon (claw/bite)',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': Math.ceil(force / 2) + 'P',
|
|
'c': (force * 2) + 1,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Insect (Soldier)':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force + 2;
|
|
spirit.agility = force + 1;
|
|
spirit.reaction = force + 1;
|
|
spirit.strength = force + 3;
|
|
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) + 9;
|
|
spirit.move_speed = 5;
|
|
spirit.sprint_speed = 10;
|
|
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;
|
|
spirit.weaknesses = 'Allergy (Insecticides, Moderate), Evanescence';
|
|
|
|
skills = ['Astral', 'Athletics', 'Close Combat', 'Con', 'Perception', 'Stealth'];
|
|
powers = ['Animal Control', 'Astral Form', 'Fear', 'Hive Mind', 'Inhabitation (Living Vessels)', 'Natural Weapon', 'Sapience'];
|
|
optional_powers = ['Binding', 'Concealment', 'Noxious Breath', 'Venom'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Natural Weapon (claw/bite)',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': Math.ceil(force / 2) + 'P',
|
|
'c': (force * 2) + 1,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Insect (Worker)':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force;
|
|
spirit.agility = force;
|
|
spirit.reaction = force;
|
|
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) + 9;
|
|
spirit.move_speed = 5;
|
|
spirit.sprint_speed = 10;
|
|
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 + 1;
|
|
spirit.weaknesses = 'Allergy (Insecticides, Severe), Evanescence';
|
|
|
|
skills = ['Astral', 'Athletics', 'Close Combat', 'Perception', 'Stealth'];
|
|
powers = ['Animal Control', 'Astral Form', 'Enhanced Senses (Smell)', 'Enhanced Senses (Thermographic Vision)', 'Hive Mind', 'Inhabitation (Living Vessels)', 'Movement', 'Natural Weapon', 'Sapience', 'Search'];
|
|
optional_powers = ['Concealment', 'Enhanced Senses (Ultrasound)', 'Venom'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Natural Weapon (claw/bite)',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': Math.ceil(force / 2) + 'P',
|
|
'c': force * 2,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Insect (Queen)':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force + 5;
|
|
spirit.agility = force + 3;
|
|
spirit.reaction = force + 4;
|
|
spirit.strength = force + 5;
|
|
spirit.willpower = force + 1;
|
|
spirit.logic = force + 1;
|
|
spirit.intuition = force;
|
|
spirit.charisma = force;
|
|
spirit.major_actions = 1;
|
|
spirit.minor_actions = 3;
|
|
spirit.physical = Math.ceil(force / 2) + 10;
|
|
spirit.move_speed = 5;
|
|
spirit.sprint_speed = 10;
|
|
spirit.sprint_modifier = 2;
|
|
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 + 5;
|
|
spirit.weaknesses = 'Allergy (Insecticides, Severe)';
|
|
|
|
skills = ['Astral', 'Athletics', 'Close Combat', 'Con', 'Influence', 'Perception', 'Spellcasting'];
|
|
powers = ['Animal Control (Insect Type)', 'Astral Gateway', 'Compulsion', 'Enhanced Senses (Smell or Thermographic Vision or Ultrasound)', 'Fear', 'Hive Mind', 'Inhabitation (Living Vessels)', 'Sapience', 'Search', 'Spirit Pact', 'Wealth'];
|
|
optional_powers = ['Concealment', 'Guard', 'Noxious Breath', 'Venom'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Natural Weapon (claw/bite)',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': parseInt(Math.ceil(force / 2) + 2) + 'P',
|
|
'c': (force * 2) + 9,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Insect (Alpha)':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force + 3;
|
|
spirit.agility = force + 2;
|
|
spirit.reaction = force + 2;
|
|
spirit.strength = force + 3;
|
|
spirit.willpower = force + 1;
|
|
spirit.logic = (force > 2) ? force - 2 : 1;
|
|
spirit.intuition = force + 1;
|
|
spirit.charisma = force;
|
|
spirit.major_actions = 1;
|
|
spirit.minor_actions = 4;
|
|
spirit.physical = Math.ceil(force / 2) + 9;
|
|
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 = 0;
|
|
spirit.astral_initiative_dice = 0;
|
|
spirit.defense_rating = force + 4;
|
|
spirit.weaknesses = '';
|
|
|
|
skills = ['Astral (Perception only)', 'Athletics', 'Close Combat', 'Con', 'Influence', 'Outdoors', 'Perception', 'Stealth'];
|
|
powers = ['Animal Control', 'Enhanced Senses (Smell)', 'Enhanced Senses (Thermographic Vision)', 'Fear', 'Hive Mind', 'Inhabitation (Living Vessels)', 'Movement', 'Natural Weapon', 'Sapience'];
|
|
optional_powers = ['Binding', 'Concealment', 'Noxious Breath', 'Venom'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Natural Weapon (claw/bite)',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': parseInt(Math.ceil(force / 2) + 2) + 'P',
|
|
'c': (force * 2) + 4,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Agwe':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force;
|
|
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 = 2;
|
|
spirit.initiative_base = (force * 2);
|
|
spirit.initiative_dice = 2;
|
|
spirit.astral_initiative_base = (force * 2);
|
|
spirit.astral_initiative_dice = 3;
|
|
spirit.defense_rating = force;
|
|
spirit.weaknesses = 'Allergy (Fire, Severe)';
|
|
|
|
skills = ['Astral', 'Athletics', 'Close Combat', 'Exotic Ranged Weapon', 'Perception'];
|
|
powers = ['Astral Form', 'Concealment', 'Confusion', 'Fear', 'Guard', 'Movement', 'Possession', 'Sapience', 'Search'];
|
|
optional_powers = ['Accident', 'Elemental Attack (Cold)', 'Energy Aura (Cold)', 'Weather Control'];
|
|
ranged = [{
|
|
'name': 'Elemental Attack',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Exotic Ranged Weapon',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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': 'Strike',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': '2P',
|
|
'c': (force * 2) + 2,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Azaca':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force + 2;
|
|
spirit.agility = force;
|
|
spirit.reaction = force;
|
|
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) + 9;
|
|
spirit.move_speed = 5;
|
|
spirit.sprint_speed = 10;
|
|
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;
|
|
spirit.weaknesses = 'Allergy (Electricity, Severe)';
|
|
|
|
skills = ['Astral', 'Close Combat', 'Exotic Ranged Weapon', 'Perception'];
|
|
powers = ['Astral Form', 'Confusion', 'Guard', 'Movement', 'Possession', 'Sapience', 'Search'];
|
|
optional_powers = ['Concealment', 'Elemental Attack (Chemical)', 'Engulf (Earth)', 'Fear'];
|
|
ranged = [{
|
|
'name': 'Elemental Attack',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Exotic Ranged Weapon',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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': 'Strike',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': '2P',
|
|
'c': (force * 2) + 1,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Damballah':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force;
|
|
spirit.agility = force + 1;
|
|
spirit.reaction = force + 2;
|
|
spirit.strength = force;
|
|
spirit.willpower = force;
|
|
spirit.logic = force + 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) + 2;
|
|
spirit.initiative_dice = 2;
|
|
spirit.astral_initiative_base = (force * 2);
|
|
spirit.astral_initiative_dice = 3;
|
|
spirit.defense_rating = force;
|
|
spirit.weaknesses = 'Allergy (Diseases, Severe)';
|
|
|
|
skills = ['Astral', 'Close Combat', 'Perception', 'Sorcery'];
|
|
powers = ['Animal Control (snakes)', 'Astral Form', 'Confusion', 'Guard', 'Magical Guard', 'Possession', 'Sapience', 'Search'];
|
|
optional_powers = ['Concealment', 'Corrosive Spit', 'Natural Weapon (claws/bite)', 'Noxious Breath', 'Search', 'Venom'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Bite',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': '2P',
|
|
'c': (force * 2) + 2,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Erzulie':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force;
|
|
spirit.agility = force;
|
|
spirit.reaction = force;
|
|
spirit.strength = force + 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) + 1;
|
|
spirit.initiative_dice = 2;
|
|
spirit.astral_initiative_base = (force * 2) + 2;
|
|
spirit.astral_initiative_dice = 3;
|
|
spirit.defense_rating = force;
|
|
spirit.weaknesses = '';
|
|
|
|
skills = ['Astral', 'Close Combat', 'Perception'];
|
|
powers = ['Astral Form', 'Confusion', 'Influence (love or lust)', 'Possession', 'Sapience', 'Search'];
|
|
optional_powers = ['Fear', 'Movement', 'Psychokinesis'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Strike',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': '2P',
|
|
'c': (force * 2) + 1,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Ghede':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force;
|
|
spirit.agility = force + 1;
|
|
spirit.reaction = force + 1;
|
|
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 = 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;
|
|
spirit.weaknesses = '';
|
|
|
|
skills = ['Astral', 'Athletics', 'Close Combat', 'Exotic Ranged Weapon', 'Perception', 'Sorcery'];
|
|
powers = ['Accident', 'Astral Form', 'Confusion', 'Fear', 'Guard', 'Magical Guard', 'Possession', 'Sapience', 'Search'];
|
|
optional_powers = ['Concealment', 'Enhanced Sense (Hearing)', 'Enhanced Senses (Low-Light Vision)', 'Enhanced Senses (Thermographic Vision)', 'Enhanced Senses (Smell)', 'Influence', 'Psychokinesis'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Strike',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': '2P',
|
|
'c': (force * 2) + 2,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Legba':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = (force > 1) ? force - 1 : 1;
|
|
spirit.agility = force + 1;
|
|
spirit.reaction = force;
|
|
spirit.strength = force + 1;
|
|
spirit.willpower = force;
|
|
spirit.logic = force;
|
|
spirit.intuition = force;
|
|
spirit.charisma = force + 2;
|
|
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);
|
|
spirit.initiative_dice = 2;
|
|
spirit.astral_initiative_base = (force * 2);
|
|
spirit.astral_initiative_dice = 3;
|
|
spirit.defense_rating = (force > 1) ? force - 1 : 1;
|
|
spirit.weaknesses = 'Allergy (Electricity, Severe)';
|
|
|
|
skills = ['Astral', 'Close Combat', 'Exotic Ranged Weapon', 'Perception', 'Sorcery'];
|
|
powers = ['Accident', 'Astral Form', 'Concealment', 'Confusion', 'Guard', 'Magical Guard', 'Possession', 'Sapience', 'Search'];
|
|
optional_powers = ['Enhanced Sense (Hearing)', 'Enhanced Senses (Low-Light Vision)', 'Enhanced Senses (Thermographic Vision)', 'Enhanced Senses (Smell)', 'Fear', 'Influence', 'Shadow Cloak'];
|
|
ranged = [];
|
|
close = [{
|
|
'name': 'Strike',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': '2P',
|
|
'c': (force * 2) + 1,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Obatala':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force + 1;
|
|
spirit.agility = force + 2;
|
|
spirit.reaction = force + 2;
|
|
spirit.strength = force + 1;
|
|
spirit.willpower = force + 1;
|
|
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 = 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 + 1;
|
|
spirit.weaknesses = 'Allergy (Alcohol, Severe)';
|
|
|
|
skills = ['Astral', 'Close Combat', 'Exotic Ranged Weapon', 'Perception', 'Sorcery'];
|
|
powers = ['Astral Form', 'Confusion', 'Guard', 'Influence (peace and calm)', 'Magical Guard', 'Possession', 'Sapience', 'Search'];
|
|
optional_powers = ['Concealment', 'Elemental Attack (conjuror chooses element during summoning)', 'Natural Weapon', 'Psychokinesis', 'Skill Specialization (choose any Close Combat skill specialization)'];
|
|
ranged = [{
|
|
'name': 'Elemental Attack',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Exotic Ranged Weapon',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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': 'Strike',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': '2P',
|
|
'c': (force * 2) + 3,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Ogoun':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = force;
|
|
spirit.agility = force + 2;
|
|
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 = 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;
|
|
spirit.weaknesses = 'Allergy (Water, Severe)';
|
|
|
|
skills = ['Astral', 'Close Combat', 'Exotic Ranged Weapon', 'Perception'];
|
|
powers = ['Astral Form', 'Concealment', 'Confusion', 'Elemental Attack (Fire)', 'Elemental Aura (Fire)', 'Fear', 'Possession', 'Sapience'];
|
|
optional_powers = ['Guard', 'Noxious Breath', 'Search'];
|
|
ranged = [{
|
|
'name': 'Elemental Attack',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Exotic Ranged Weapon',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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': 'Strike',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': '2P',
|
|
'c': (force * 2) + 2,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
break;
|
|
case 'Shango':
|
|
spirit.tasks_modifier = '';
|
|
spirit.body = (force > 1) ? force - 1 : 1;
|
|
spirit.agility = force + 2;
|
|
spirit.reaction = force + 2;
|
|
spirit.strength = (force > 1) ? force - 1 : 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) + 1;
|
|
spirit.astral_initiative_dice = 3;
|
|
spirit.defense_rating = force + 2;
|
|
spirit.weaknesses = 'Allergy (Toxins, Severe)';
|
|
|
|
skills = ['Astral', 'Close Combat', 'Exotic Ranged Weapon', 'Perception'];
|
|
powers = ['Astral Form', 'Concealment', 'Fear', 'Guard', 'Immunity (Fire)', 'Innate Spell (Lightning Bolt)', 'Possession', 'Sapience', 'Search'];
|
|
optional_powers = ['Elemental Attack (Cold or Electricity)', 'Energy Aura (Cold or Electricity)', 'Noxious Breath', 'Psychokinesis'];
|
|
ranged = [{
|
|
'name': 'Elemental Attack',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Exotic Ranged Weapon',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': 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': 'Strike',
|
|
'pool': force + spirit.agility,
|
|
'skill': 'Close Combat',
|
|
'rating': force,
|
|
'attribute': 'Agility',
|
|
'attr_rating': spirit.agility,
|
|
'dam': '2P',
|
|
'c': (force * 2) + 1,
|
|
'n': 0,
|
|
'm': 0,
|
|
'f': 0,
|
|
'e': 0,
|
|
'notes': ''
|
|
}];
|
|
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;
|
|
spirit.weaknesses = '';
|
|
|
|
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,
|
|
'weaknesses': spirit.weaknesses,
|
|
});
|
|
|
|
|
|
// 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}`);
|
|
});
|
|
}
|
|
|
|
let usedIDs = [];
|
|
if(ids.length == 0 || v.spirit_reset_toggle === 'reset') {
|
|
skills.forEach(skillname => {
|
|
// make a new repeatingRowID
|
|
var newId = generateRowID();
|
|
while(newId in usedIDs) {
|
|
newId = generateRowID();
|
|
}
|
|
usedIDs.push(newId);
|
|
|
|
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',
|
|
'Animal Control (Insect Type)': 'CRB pg.221',
|
|
'Astral Form': 'CRB pg.222',
|
|
'Astral Gateway': 'SW pg.66',
|
|
'Astral Projection': 'SW pg.66',
|
|
'Aura Masking': 'SW pg.66',
|
|
'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',
|
|
'Endowment': 'SW pg.67',
|
|
'Energy Aura (Cold)': 'CRB pg.223',
|
|
'Energy Aura (Electricity)': 'CRB pg.223',
|
|
'Energy Aura (Fire)': 'CRB pg.223',
|
|
'Energy Drain': 'SW pg.67',
|
|
'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',
|
|
'Hidden Life': 'SW pg.67',
|
|
'Influence': 'CRB pg.225',
|
|
'Inhabitation': 'SW pg.67',
|
|
'Inhabitation (Living Vessels)': 'SW pg.67',
|
|
'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',
|
|
'Mutable Form': 'SW pg.69',
|
|
'Natural Weapon (claws/bite)': 'CRB pg.226',
|
|
'Noxious Breath': 'CRB pg.226',
|
|
'Personal Domain': 'SW pg.69',
|
|
'Possession': 'SW pg.69',
|
|
'Psychokinesis': 'CRB pg.227',
|
|
'Quake': 'SW pg.69',
|
|
'Realistic Form': 'SW pg.70',
|
|
'Regeneration': 'SW pg.70',
|
|
'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',
|
|
'Storm': 'SW pg.70',
|
|
'Temporal Displacement': 'SW pg.71',
|
|
'Venom': 'CRB pg.228',
|
|
'Vessel Trading': 'SW pg.71',
|
|
'Weather Control': 'CRB pg.228',
|
|
'Wealth': 'SW pg.71',
|
|
};
|
|
|
|
// 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') {
|
|
let usedIDs = [];
|
|
powers.forEach(power => {
|
|
// make a new repeatingRowID
|
|
var newId = generateRowID();
|
|
while(newId in usedIDs) {
|
|
newId = generateRowID();
|
|
}
|
|
usedIDs.push(newId);
|
|
|
|
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.toLowerCase());
|
|
});
|
|
}
|
|
|
|
if((ids.length == 0 || v.spirit_reset_toggle === 'reset') && ranged && ranged.length > 0) {
|
|
let usedIDs = [];
|
|
ranged.forEach(atk => {
|
|
// make a new repeatingRowID
|
|
let newId = generateRowID();
|
|
while(newId in usedIDs) {
|
|
newId = generateRowID();
|
|
}
|
|
usedIDs.push(newId);
|
|
|
|
setAttrs({
|
|
[`repeating_range_${newId}_name`]: atk.name,
|
|
[`repeating_range_${newId}_skill`]: atk.skill,
|
|
[`repeating_range_${newId}_rating`]: atk.rating,
|
|
[`repeating_range_${newId}_attribute`]: atk.attribute,
|
|
[`repeating_range_${newId}_attr_rating`]: atk.attr_rating,
|
|
[`repeating_range_${newId}_dicepool`]: atk.pool,
|
|
[`repeating_range_${newId}_dicepool_base`]: atk.pool,
|
|
[`repeating_range_${newId}_damage_base`]: atk.dam,
|
|
[`repeating_range_${newId}_close_base`]: (atk.c > 0) ? atk.c : 0,
|
|
[`repeating_range_${newId}_near_base`]: (atk.n > 0) ? atk.n : 0,
|
|
[`repeating_range_${newId}_medium_base`]: (atk.m > 0) ? atk.m : 0,
|
|
[`repeating_range_${newId}_far_base`]: (atk.f > 0) ? atk.f : 0,
|
|
[`repeating_range_${newId}_extreme_base`]: (atk.e > 0) ? atk.e : 0,
|
|
[`repeating_range_${newId}_notes`]: atk.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 && close.length > 0) {
|
|
let usedIDs = [];
|
|
close.forEach(atk => {
|
|
// make a new repeatingRowID
|
|
let newId = generateRowID();
|
|
while(newId in usedIDs) {
|
|
newId = generateRowID();
|
|
}
|
|
usedIDs.push(newId);
|
|
|
|
setAttrs({
|
|
[`repeating_melee_${newId}_name`]: atk.name,
|
|
[`repeating_melee_${newId}_skill`]: atk.skill,
|
|
[`repeating_melee_${newId}_rating`]: atk.rating,
|
|
[`repeating_melee_${newId}_attribute`]: atk.attribute,
|
|
[`repeating_melee_${newId}_attr_rating`]: atk.attr_rating,
|
|
[`repeating_melee_${newId}_dicepool`]: atk.pool,
|
|
[`repeating_melee_${newId}_dicepool_base`]: atk.pool,
|
|
[`repeating_melee_${newId}_damage_base`]: atk.dam,
|
|
[`repeating_melee_${newId}_close_base`]: (atk.c > 0) ? atk.c : 0,
|
|
[`repeating_melee_${newId}_near_base`]: (atk.n > 0) ? atk.n : 0,
|
|
[`repeating_melee_${newId}_medium_base`]: (atk.m > 0) ? atk.m : 0,
|
|
[`repeating_melee_${newId}_far_base`]: (atk.f > 0) ? atk.f : 0,
|
|
[`repeating_melee_${newId}_extreme_base`]: (atk.e > 0) ? atk.e : 0,
|
|
[`repeating_melee_${newId}_notes`]: atk.notes,
|
|
[`repeating_melee_${newId}_flag`]: 0
|
|
}, {silent: true});
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
setAttrs({
|
|
grunt_group_member: 0,
|
|
flag_special: 'magic'
|
|
});
|
|
});
|
|
};
|
|
|
|
|
|
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;
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
/********************************************************/
|
|
/* Matrix Encounter Sheet Workers */
|
|
/********************************************************/
|
|
|
|
// increment/decrement OS in the OS tracker
|
|
on("clicked:repeating_os-tracker:osadd clicked:repeating_os-tracker:osdel", (eventInfo) => {
|
|
let key = eventInfo.triggerName.slice(0, -6).slice(8);
|
|
key = key + '_os';
|
|
|
|
getAttrs([key], (v) => {
|
|
let newval = parseInt(v[`${key}`]);
|
|
if(eventInfo.triggerName.endsWith('add')) {
|
|
newval += parseInt(1);
|
|
} else {
|
|
newval -= parseInt(1);
|
|
if(newval < 0) {
|
|
newval = 0;
|
|
}
|
|
}
|
|
|
|
setAttrs({
|
|
[`${key}`]: parseInt(newval)
|
|
});
|
|
});
|
|
});
|
|
|
|
// Add character to the OS tracker
|
|
const add_to_OS_tracker = (attrs) => {
|
|
console.log(attrs);
|
|
};
|
|
|
|
|
|
|
|
|
|
//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 WORKERS *
|
|
*********************/
|
|
on("sheet:compendium-drop", (eventInfo) => {
|
|
console.info("/*************************************************/");
|
|
console.info("/* DROP EVENT */");
|
|
console.info("/*************************************************/");
|
|
console.log(eventInfo);
|
|
console.log("starting compendium_drop_done");
|
|
compendium_drop_done();
|
|
});
|
|
|
|
// Compendium Dropped to Canvas
|
|
on("change:canvas_drop_data", (eventInfo) => {
|
|
console.log("Compendium Item Dropped on Canvas!");
|
|
|
|
setAttrs({compendium_drop_in_progress: true}, {silent:true});
|
|
compendium_drop_handler('canvasdrop', eventInfo);
|
|
});
|
|
|
|
// Compendium Dropped to Sheet
|
|
on("change:compendium_drop_data", (eventInfo) => {
|
|
console.log("Compendium Item Dropped on Sheet!");
|
|
|
|
setAttrs({compendium_drop_in_progress: true}, {silent:true});
|
|
compendium_drop_handler('sheetdrop', eventInfo);
|
|
});
|
|
|
|
var compendium_drop_done = function() {
|
|
setAttrs({
|
|
compendium_drop_in_progress: ''
|
|
}, {silent:true});
|
|
}
|
|
|
|
|
|
let priorities = {
|
|
'NPCs': 0,
|
|
'Contacts': 1,
|
|
'Grunts': 2,
|
|
'Critters': 3,
|
|
'Drone': 4,
|
|
'Drones': 5,
|
|
'Vehicle': 6,
|
|
'Vehicles': 7,
|
|
'Spirits': 8,
|
|
'Hosts': 9,
|
|
'Sprites': 10,
|
|
'Qualities': 11,
|
|
'Spells': 12,
|
|
'Combat': 13,
|
|
'Detection': 14,
|
|
'Health': 15,
|
|
'Illusion': 16,
|
|
'Manipulation': 17,
|
|
'Rituals': 18,
|
|
'Powers': 19,
|
|
'Metamagic': 20,
|
|
'gear-misc': 21,
|
|
'Gear': 22,
|
|
'Complex Forms': 23,
|
|
'ICs': 24,
|
|
'Sprite Powers': 25,
|
|
'Augmentations': 26,
|
|
'gear-armor': 27,
|
|
'Armor': 28,
|
|
'Ranged': 29,
|
|
'weapon-ranged': 30,
|
|
'Melee': 31,
|
|
'weapon-melee': 32,
|
|
'Weapon Both': 33,
|
|
'Devices': 34,
|
|
'Programs': 35,
|
|
'Critter Powers': 36,
|
|
};
|
|
|
|
|
|
var compendium_drop_handler = ((dropType, eventInfo) => {
|
|
try{
|
|
data = JSON.parse(eventInfo.newValue) || false;
|
|
} catch(e) {
|
|
// wipe out compendium_drop_data until the next time
|
|
setAttrs({
|
|
'canvas_drop_data': '',
|
|
'compendium_drop_data': '',
|
|
'compendium_drop_content': ''
|
|
}, {silent: true});
|
|
return;
|
|
}
|
|
console.log(data);
|
|
|
|
// wipe out compendium_drop_data until the next time
|
|
// we're doing this here so errors don't leave ghost data
|
|
setAttrs({
|
|
'canvas_drop_data': '',
|
|
'compendium_drop_data': '',
|
|
'compendium_drop_content': ''
|
|
}, {silent: true});
|
|
|
|
if(eventInfo.sourceType != 'player' || ! data) {
|
|
console.log("not player triggered or compendium data empty");
|
|
return;
|
|
}
|
|
|
|
// if there are blobs, add those and ignore the parent (it should be one of the blobs?)
|
|
if(data.blobs && Object.keys(data.blobs).length > 0) {
|
|
console.log(data.blobs);
|
|
let orderedBlobs = {};
|
|
Object.keys(data.blobs).forEach((key) => {
|
|
blob = data.blobs[key];
|
|
|
|
if(! blob.Category) {
|
|
if(data.Category == "QSR Tool Cards") {
|
|
blob.Category = trans["qsr_blob_types"][data["data-type"]];
|
|
} else if(blob["data-Category"]) {
|
|
blob.Category = blob["data-Category"];
|
|
} else if(blob["data-category"]) {
|
|
blob.Category = blob["data-category"];
|
|
} else {
|
|
blob.Category = data.Category;
|
|
}
|
|
}
|
|
|
|
if(Object.keys(priorities).includes(blob.Category)) {
|
|
blob.sort_priority = priorities[blob.Category];
|
|
} else {
|
|
blob.sort_priority = 99;
|
|
}
|
|
|
|
orderedBlobs[key] = blob;
|
|
});
|
|
|
|
// Custom sort the orderedBlobs so they are processed in the order we want
|
|
let blobKeys = Object.keys(orderedBlobs);
|
|
|
|
blobKeys.sort(function(a, b) {
|
|
return orderedBlobs[a].sort_priority - orderedBlobs[b].sort_priority;
|
|
});
|
|
|
|
// Now process the blobs
|
|
blobKeys.forEach((key) => {
|
|
let blob = orderedBlobs[key];
|
|
|
|
if(! blob["data-name"]) {
|
|
blob["data-name"] = key;
|
|
}
|
|
|
|
if(dropType == 'canvasdrop') {
|
|
canvas_import(blob);
|
|
} else {
|
|
compendium_import(blob);
|
|
}
|
|
});
|
|
} else {
|
|
if(dropType == 'canvasdrop') {
|
|
canvas_import(data);
|
|
return;
|
|
} else {
|
|
compendium_import(data);
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
var canvas_import = function(data) {
|
|
// process the dropped data
|
|
switch(data.Category) {
|
|
case 'NPCs':
|
|
case 'Contacts':
|
|
case 'Grunts':
|
|
case 'Critters':
|
|
case 'Drone':
|
|
case 'Drones':
|
|
case 'Vehicles':
|
|
case 'Spirits':
|
|
case 'Hosts':
|
|
case 'Sprites':
|
|
console.log(data.Category + " dropped on canvas.");
|
|
canvasDroppedNPC(data);
|
|
break;
|
|
default:
|
|
console.log("Unknown Canvas Drop: "+data.Category+" Sending it to the compendium drop handler.");
|
|
compendium_import(data);
|
|
break;
|
|
}
|
|
console.log("done canvas_import");
|
|
};
|
|
|
|
var compendium_import = function(data) {
|
|
// process the dropped data
|
|
console.log("compendium item dropped: "+data.Category);
|
|
console.log(data);
|
|
switch(data.Category) {
|
|
case 'NPCs':
|
|
compendiumAddContact(data);
|
|
break;
|
|
case 'Drone':
|
|
case 'Drones':
|
|
case 'Vehicle':
|
|
case 'Vehicles':
|
|
compendiumAddDrone(data);
|
|
break;
|
|
/* sheet drop items below */
|
|
case 'Combat':
|
|
case 'Detection':
|
|
case 'Health':
|
|
case 'Illusion':
|
|
case 'Manipulation':
|
|
case 'Spells':
|
|
compendiumAddSpell(data);
|
|
break;
|
|
case 'Rituals':
|
|
compendiumAddRitual(data);
|
|
break;
|
|
case 'Powers':
|
|
compendiumAddPower(data);
|
|
break;
|
|
case 'Critter Powers':
|
|
compendiumAddCritterPower(data);
|
|
break;
|
|
case 'Metamagic':
|
|
compendiumAddMetamagic(data);
|
|
break;
|
|
case 'Qualities':
|
|
compendiumAddQuality(data);
|
|
break;
|
|
case 'gear-armor':
|
|
case 'Armor':
|
|
compendiumAddArmor(data);
|
|
break;
|
|
case 'gear-misc':
|
|
case 'Gear':
|
|
if(data["data-gear_type"] == "Ammunition" && (data["data-gear_subtype"] == "Grenades" || data["data-gear_subtype"] == "Rockets")) {
|
|
compendiumAddGrenade(data);
|
|
} else {
|
|
compendiumAddGear(data);
|
|
}
|
|
break;
|
|
case 'Ranged':
|
|
case 'weapon-ranged':
|
|
compendiumAddWeapon('range', data);
|
|
break;
|
|
case 'Melee':
|
|
case 'weapon-melee':
|
|
compendiumAddWeapon('melee', data);
|
|
break;
|
|
case 'Weapon Both':
|
|
compendiumAddWeapon('range', data);
|
|
compendiumAddWeapon('melee', data);
|
|
break;
|
|
case 'Devices':
|
|
compendiumAddDevice(data);
|
|
break;
|
|
case 'Programs':
|
|
compendiumAddProgram(data);
|
|
break;
|
|
case 'Complex Forms':
|
|
compendiumAddComplexForm(data);
|
|
break;
|
|
case 'ICs':
|
|
compendiumAddIC(data);
|
|
break;
|
|
case 'Sprite Powers':
|
|
compendiumAddSpritePower(data);
|
|
break;
|
|
case 'Augmentations':
|
|
compendiumAddAugmentation(data);
|
|
break;
|
|
default:
|
|
console.log("Unknown Compendium Drop: "+data.Category);
|
|
break;
|
|
}
|
|
}
|
|
|
|
var canvasDroppedNPC = function(data) {
|
|
console.log("processing canvasDroppedNPC");
|
|
var tokenAttrs = {
|
|
showname: 1,
|
|
width: data["data-token_width"] || 70,
|
|
height: data["data-token_height"] || 70
|
|
};
|
|
|
|
// default condition monitors for physical and matrix
|
|
let physical = 0, matrix = 0;
|
|
console.log("Category: "+data.Category);
|
|
switch(data.Category) {
|
|
case 'Spirits':
|
|
setAttrs({
|
|
sheet_type: 'spirit',
|
|
spirit_type: data["data-spirit_type"] || '',
|
|
});
|
|
|
|
// tokenAttrs.bar1_value = physical || 0;
|
|
// tokenAttrs.bar1_max = physical || 0;
|
|
tokenAttrs.bar1_link = 'physical';
|
|
tokenAttrs.bar3_value = 0;
|
|
tokenAttrs.bar3_max = 7;
|
|
break;
|
|
case 'Vehicle':
|
|
case 'Vehicles':
|
|
case 'Drone':
|
|
case 'Drones':
|
|
if(typeof data["data-physical"] !== 'undefined') {
|
|
physical = data["data-physical"];
|
|
} else if(typeof data["data-body_base"] !== 'undefined') {
|
|
physical = 8 + Math.ceil(data["data-body_base"] / 2);
|
|
}
|
|
console.log("Physical: "+physical);
|
|
if(typeof data["data-matrix"] !== 'undefined') {
|
|
matrix = data["data-matrix"];
|
|
} else if(typeof data["data-sensor_base"] !== 'undefined') {
|
|
matrix = 8 + Math.ceil(data["data-sensor_base"] / 2);
|
|
}
|
|
console.log("Matrix: "+matrix);
|
|
|
|
if(! data["data-physical"]) {
|
|
data["data-physical"] = physical;
|
|
}
|
|
if(! data["data-matrix"]) {
|
|
data["data-matrix"] = matrix;
|
|
}
|
|
|
|
canvasAddDrone(data);
|
|
|
|
tokenAttrs.bar1_value = physical;
|
|
tokenAttrs.bar1_max = physical;
|
|
tokenAttrs.bar2_value = matrix;
|
|
tokenAttrs.bar2_max = matrix;
|
|
tokenAttrs.bar3_value = 0;
|
|
tokenAttrs.bar3_max = data["data-speed_max"] || 0;
|
|
break;
|
|
case 'NPCs':
|
|
canvasAddNPC(data);
|
|
|
|
if(typeof data["data-physical"] !== 'undefined') {
|
|
physical = data["data-physical"];
|
|
} else if(typeof data["data-body_base"] !== 'undefined') {
|
|
physical = 8 + Math.ceil(data["data-body_base"] / 2);
|
|
}
|
|
|
|
if(typeof data["data-matrix"]) {
|
|
matrix = data["data-matrix"];
|
|
} else if(typeof data["data-device_rating"]) {
|
|
matrix = 8 + Math.ceil(data["data-device_rating"]);
|
|
}
|
|
|
|
tokenAttrs.bar1_value = physical;
|
|
tokenAttrs.bar1_max = physical;
|
|
tokenAttrs.bar2_value = matrix;
|
|
tokenAttrs.bar2_max = matrix;
|
|
tokenAttrs.bar3_value = data["data-edge"] || 0;
|
|
tokenAttrs.bar3_max = 7;
|
|
|
|
break;
|
|
case 'Sprites':
|
|
setAttrs({
|
|
sheet_type: 'sprite',
|
|
sprite_type: data["data-sprite_type"] || '',
|
|
tasks: 1,
|
|
matrix: 9,
|
|
matrix_max: 9,
|
|
});
|
|
|
|
tokenAttrs.bar1_link = 'sheetattr_matrix';
|
|
tokenAttrs.bar2_link = 'sheetattr_tasks';
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
setup_token(tokenAttrs);
|
|
};
|
|
|
|
var setup_token = (tokenAttrs) => {
|
|
// setDefaultToken({
|
|
// bar1_value: tokenAttrs.bar1_value,
|
|
// bar1_max: tokenAttrs.bar1_value_max,
|
|
// bar1_link: "physical";
|
|
// bar2_value: tokenAttrs.bar2_value,
|
|
// bar2_max: tokenAttrs.bar2_value_max,
|
|
// bar2_link: "matrix";
|
|
// bar3_value: tokenAttrs.bar3_value,
|
|
// bar3_max: tokenAttrs.bar3_value_max,
|
|
// bar3_link: "speed";
|
|
// showname: tokenAttrs.showname,
|
|
// width: tokenAttrs.width,
|
|
// height: tokenAttrs.height
|
|
// });
|
|
console.log("setting token attrs");
|
|
console.log(tokenAttrs);
|
|
setDefaultToken(tokenAttrs);
|
|
};
|
|
|
|
|
|
/**************************************
|
|
* CANVAS IMPORTERS *
|
|
**************************************/
|
|
var canvasAddNPC = function(data) {
|
|
addattrs = {};
|
|
|
|
var type = 'vehicle';
|
|
|
|
addattrs.sheet_type = 'grunt';
|
|
addattrs["flag"] = false;
|
|
addattrs["stats_toggle"] = false;
|
|
|
|
// attributes that need no translation
|
|
["body_base", "agility_base", "reaction_base", "strength_base", "willpower_base", "logic_base", "intuition_base", "charisma_base", "edge", "magic", "resonance", "initiative_base", "defense_rating", "physical", "stun", "metatype", "pr", "move_speed", "sprint_speed", "sprint_modifier", "matrix_initiative_base", "cold_sim_initiative_base", "hot_sim_initiative_base", "pain_tolerance", "submersion", "initiate", "major_actions", "minor_actions", "alternate_movement"].forEach((attr) => {
|
|
if(data[`data-${attr}`]) {
|
|
addattrs[attr] = data[`data-${attr}`];
|
|
} else {
|
|
addattrs[attr] = '';
|
|
}
|
|
});
|
|
|
|
addattrs.physical_max = addattrs['physical'];
|
|
|
|
|
|
// Need to convert initiative dice to initiative dice and initiative dice mod
|
|
["initiative_dice", "matrix_initiative_dice", "cold_sim_initiative_dice", "hot_sim_initiative_dice"].forEach((die) => {
|
|
let dice_base = 1;
|
|
switch(die) {
|
|
case 'initiative_dice':
|
|
case 'matrix_initiative_dice':
|
|
dice_base = 1;
|
|
break;
|
|
case 'cold_sim_initiative_dice':
|
|
dice_base = 2;
|
|
break;
|
|
case 'hot_sim_initiative_dice':
|
|
dice_base = 3;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
let dice_mod = 0;
|
|
if(data[`data-${die}`]) {
|
|
dice_mod = parseInt(data[`data-${die}`] - dice_base);
|
|
}
|
|
|
|
addattrs[`${die}`] = dice_base;
|
|
addattrs[`${die}_mod`] = dice_mod;
|
|
});
|
|
|
|
|
|
// attribute mods need to be calculated and applied
|
|
["body", "agility", "reaction", "strength", "willpower", "logic", "intuition", "charisma"].forEach((attr) => {
|
|
if(data[`data-${attr}_modified`] && data[`data-${attr}_base`]) {
|
|
addattrs[`${attr}_modifier`] = parseInt(data[`data-${attr}_modified`] - data[`data-${attr}_base`]);
|
|
}
|
|
});
|
|
|
|
|
|
// if they have a resonance attribute make them a technomancer
|
|
if(data["data-resonance"]) {
|
|
addattrs["flag_special"] = "resonance";
|
|
}
|
|
|
|
|
|
// if they have a magic attribute make them awakened
|
|
// If there's magic compare logic intuition and charisma to figure out which to use for spell_drain_attribute_2
|
|
// check if they have sorcery_specialization or sorcery_expertise as "Spellcasting"
|
|
if(data["data-magic"]) {
|
|
addattrs["flag_special"] = "magic";
|
|
|
|
let drain_attr = '@{logic}';
|
|
let drain_val = addattrs.logic_base;
|
|
if(drain_val < addattrs.intuition_base) {
|
|
drain_attr = '@{intuition}';
|
|
drain_val = addattrs.intuition_base;
|
|
}
|
|
if(drain_val < addattrs.charisma_base) {
|
|
drain_attr = '@{charisma}';
|
|
drain_val = addattrs.charisma_base;
|
|
}
|
|
|
|
addattrs.spell_drain_attribute_2 = drain_attr;
|
|
if(data[`data-sorcery_rating`]) {
|
|
addattrs["spellcasting_expert"] = 0;
|
|
addattrs["spellcasting_specialist"] = 0;
|
|
if(data[`data-sorcery_expertise`] == 'Spellcasting') {
|
|
addattrs["spellcasting_expert"] = 3;
|
|
} else if(data[`data-sorcery_specialization`] == 'Spellcasting') {
|
|
addattrs["spellcasting_specialist"] = 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Attributes that need translation
|
|
let blocks = {
|
|
"qualities_text": "quality",
|
|
"gear_text": "gear",
|
|
"augmentations_text": "augmentations",
|
|
"powers_text": "powers",
|
|
"weaknesses_text": "weaknesses",
|
|
"spells_text": "spells",
|
|
"metamagics_text": "metamagic",
|
|
"echoes_text": "echos",
|
|
"complex_forms_text": "complex_forms",
|
|
"essence": "essence_mod"
|
|
};
|
|
|
|
Object.keys(blocks).forEach((key) => {
|
|
if(key == "essence") {
|
|
addattrs[blocks[key]] = data[`data-${key}`] - 6;
|
|
} else {
|
|
addattrs[blocks[key]] = data[`data-${key}`] || '';
|
|
}
|
|
});
|
|
|
|
// if there are matrix attributes (ASDF) deal with them and turn "has matrix device" on
|
|
if(data["data-attack"] || data["data-sleaze"] || data["data-data_process"] || data["data-firewall"] || data["data-device_name"] || data["data-device_rating"]) {
|
|
addattrs["flag_matrix"] = "matrix";
|
|
addattrs["device_name"] = data["data-device_name"] || "";
|
|
addattrs["matrix_device_rating"] = data["data-device_rating"] || "";
|
|
addattrs["attack"] = data["data-attack"] || 0;
|
|
addattrs["sleaze"] = data["data-sleaze"] || 0;
|
|
addattrs["data_processing"] = data["data-data_processing"] || 0;
|
|
addattrs["firewall"] = data["data-firewall"] || 0;
|
|
|
|
// get them a matrix condition monitor
|
|
let matrix = 9;
|
|
if(data["data-matrix"]) {
|
|
matrix = data["data-matrix"];
|
|
} else if(data["data-device_rating"]) {
|
|
matrix = parseInt(8 + Math.ceil(data["data-device_rating"] / 2));
|
|
}
|
|
addattrs["matrix"] = matrix;
|
|
addattrs["matrix_max"] = matrix;
|
|
}
|
|
|
|
// Knowledges and Languages
|
|
if(data["data-knowledges"]) {
|
|
let usedIDs = [];
|
|
data["data-knowledges"].split(/,\s*/).forEach((knowledge) => {
|
|
let row_id = generateRowID();
|
|
while(row_id in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id);
|
|
|
|
addattrs["repeating_knowledge_" + row_id + "_flag"] = false;
|
|
addattrs["repeating_knowledge_" + row_id + "_name"] = knowledge;
|
|
addattrs["repeating_knowledge_" + row_id + "_type"] = 'Knowledge';
|
|
});
|
|
}
|
|
|
|
|
|
if(data["data-languages"]) {
|
|
let usedIDs = [];
|
|
data["data-languages"].split(/,\s*/).forEach((language) => {
|
|
let row_id = generateRowID();
|
|
while(row_id in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id);
|
|
|
|
addattrs["repeating_knowledge_" + row_id + "_flag"] = false;
|
|
addattrs["repeating_knowledge_" + row_id + "_name"] = language;
|
|
addattrs["repeating_knowledge_" + row_id + "_type"] = 'Language';
|
|
});
|
|
}
|
|
|
|
|
|
// Skills stuff
|
|
let usedIDs = [];
|
|
["astral", "athletics", "biotech", "close_combat", "con", "conjuring", "cracking", "electronics", "enchanting", "engineering", "exotic_weapons", "firearms", "influence", "outdoors", "patterncraft", "perception", "piloting", "sorcery", "stealth", "tasking"].forEach((skill) => {
|
|
if(data["data-" + skill + "_rating"]) {
|
|
let row_id = generateRowID();
|
|
while(row_id in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id);
|
|
|
|
name = skill.split('_').map(word => ucfirst(word)).join(' ');
|
|
addattrs[skill] = data["data-"+skill+"_rating"];
|
|
|
|
addattrs["repeating_skills_" + row_id + "_rating"] = data["data-" + skill + "_rating"];
|
|
addattrs["repeating_skills_" + row_id + "_flag"] = false;
|
|
addattrs["repeating_skills_" + row_id + "_name"] = name;
|
|
if(data["data-" + skill + "_specialization"]) {
|
|
addattrs["repeating_skills_" + row_id + "_specialization"] = data["data-" + skill + "_specialization"];
|
|
}
|
|
if(data["data-" + skill + "_expertise"]) {
|
|
addattrs["repeating_skills_" + row_id + "_expertise"] = data["data-" + skill + "_expertise"];
|
|
}
|
|
}
|
|
});
|
|
|
|
addattrs["notes"] = '';
|
|
let labels = {"contact_uses": "Uses: ", "contact_places_to_meet": "Places To Meet: ", "contact_similar_contacts": "Similar Contacts: "};
|
|
["contact_uses", "contact_places_to_meet", "contact_similar_contacts", "description", "notes"].forEach((k) => {
|
|
if(typeof data[`data-${k}`] !== 'undefined') {
|
|
if(labels[k]) {
|
|
addattrs["notes"] += labels[k];
|
|
}
|
|
addattrs["notes"] += data[`data-${k}`] + "\n";
|
|
}
|
|
});
|
|
console.log("/*********************************************/");
|
|
console.log("Addattrs: ");
|
|
console.log(addattrs);
|
|
|
|
setAttrs(addattrs);
|
|
};
|
|
|
|
|
|
var canvasAddDrone = function(data) {
|
|
addattrs = {};
|
|
|
|
var type = 'vehicle';
|
|
|
|
addattrs.sheet_type = 'vehicle';
|
|
addattrs["stats_toggle"] = false;
|
|
|
|
addattrs["handling"] = data["data-handling_onroad"] || 0;
|
|
addattrs["handling_offroad"] = data["data-handling_offroad"] || 0;
|
|
addattrs["seating"] = data["data-seats"] || 0;
|
|
addattrs["acceleration"] = data["data-acceleration"] || 0;
|
|
addattrs["interval"] = data["data-speed_base"] || 0;
|
|
addattrs["speed_max"] = data["data-speed_max"] || 0;
|
|
addattrs["body_base"] = data["data-body_base"] || 0;
|
|
addattrs["armor"] = data["data-armor_base"] || 0;
|
|
addattrs["pilot"] = data["data-pilot_base"] || 0;
|
|
addattrs["sensor"] = data["data-sensor_base"] || 0;
|
|
addattrs["device_rating"] = data["data-sensor_base"] || 0;
|
|
addattrs["clearsight"] = data["data-clearsight"] || 0;
|
|
addattrs["electronicwarfare"] = data["data-electronicwarfare"] || 0;
|
|
addattrs["evasion"] = data["data-evasion"] || 0;
|
|
addattrs["maneuvering"] = data["data-maneuvering"] || 0;
|
|
addattrs["stealth"] = data["data-stealth"] || 0;
|
|
addattrs["targeting"] = data["data-targeting"] || 0;
|
|
addattrs["physical"] = data["data-physical"] || 0;
|
|
addattrs["physical_max"] = data["data-physical"] || 0;
|
|
addattrs["matrix"] = data["data-matrix"] || 0;
|
|
addattrs["matrix_max"] = data["data-matrix"] || 0;
|
|
|
|
addattrs["notes"] = data["data-description"] || '';
|
|
|
|
if(data["data-type"] == 'drone') {
|
|
addattrs["flag_drone"] = "drone";
|
|
}
|
|
|
|
setAttrs(addattrs);
|
|
};
|
|
|
|
|
|
|
|
|
|
/**************************************
|
|
* COMPENDIUM IMPORTERS *
|
|
**************************************/
|
|
var compendiumAddDrone = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var type = 'vehicle';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_type"] = data["data-drone_type"] || 'Other';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_handling_onroad"] = data["data-handling_onroad"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_handling_offroad"] = data["data-handling_offroad"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_seats"] = data["data-seats"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_acceleration_base"] = data["data-acceleration"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_speed_base"] = data["data-speed_base"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_speed_max"] = data["data-speed_max"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_body_base"] = data["data-body_base"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_armor_base"] = data["data-armor_base"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_pilot_base"] = data["data-pilot_base"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_sensor_base"] = data["data-sensor_base"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_clearsight"] = data["data-clearsight"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_electronicwarfare"] = data["data-electronicwarfare"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_evasion"] = data["data-evasion"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_maneuvering"] = data["data-maneuvering"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_stealth"] = data["data-stealth"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_targeting"] = data["data-targeting"] || 0;
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] = data["data-description"] || '';
|
|
rowattrs.sheet_type = 'pc';
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddProgram = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var type = 'programs';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] = '';
|
|
if(data["data-rules"]) {
|
|
var rules = [];
|
|
try{
|
|
rules = JSON.parse(data["data-rules"]) || false;
|
|
} catch(e) {
|
|
// wipe out compendium_drop_data until the next time
|
|
}
|
|
|
|
rules.forEach((rule) => {
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] += rule.rule;
|
|
});
|
|
}
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] += data["data-description"] || '';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_modifications"] = data["data-modifications"] || '';
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddDevice = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var type = 'devices';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_matrix_device_rating"] = data["data-device_rating"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_type"] = data["data-device_type"] || 'Commlink';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_active_program_slots"] = data["data-active_program_slots"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_attack"] = data["data-attack"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_sleaze"] = data["data-sleaze"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_data_processing"] = data["data-data_processing"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_firewall"] = data["data-firewall"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_matrix_initiative_bonus"] = data["data-matrix_initiative_bonus"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_essence_cost"] = data["data-essence_cost"] || 0;
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_modifications"] = data["data-modifications"] || '';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] = data["data-description"] || '';
|
|
|
|
getAttrs(['sheet_type', 'matrix', 'compendium_drop_category'], (v) => {
|
|
// we don't want to do this stuff to the PC sheet it'll mess things up
|
|
if(v.compendium_drop_category == 'NPCs' || v.sheet_type == 'grunt') {
|
|
if(! data["data-matrix"] && data["data-device_rating"]) {
|
|
rowattrs['matrix'] = 8 + Math.ceil(data["data-device_rating"] / 2);
|
|
rowattrs['matrix_max'] = rowattrs['matrix'];
|
|
} else if(data["data-matrix"]) {
|
|
rowattrs['matrix'] = data["data-matrix"];
|
|
rowattrs['matrix_max'] = data["data-matrix"];
|
|
}
|
|
|
|
rowattrs['flag_matrix'] = "matrix";
|
|
rowattrs['device_name'] = data["data-name"] || 'Matrix Device';
|
|
rowattrs['matrix_device_rating'] = data["data-device_rating"] || 1;
|
|
rowattrs['attack'] = data["data-attack"] || 0;
|
|
rowattrs['sleaze'] = data["data-sleaze"] || 0;
|
|
rowattrs['data_processing'] = data["data-data_processing"] || 0;
|
|
rowattrs['firewall'] = data["data-firewall"] || 0;
|
|
}
|
|
|
|
setAttrs(rowattrs);
|
|
});
|
|
};
|
|
|
|
|
|
var compendiumAddGrenade = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
if(data["data-gear_subtype"] == "Grenades") {
|
|
rowattrs["repeating_grenade_" + row_id + "_type"] = "@{athletics}+@{agility}";
|
|
} else {
|
|
rowattrs["repeating_grenade_" + row_id + "_type"] = "@{exotic_weapons}+@{logic}";
|
|
}
|
|
|
|
rowattrs["repeating_grenade_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_grenade_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_grenade_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_grenade_" + row_id + "_dicepool"] = 0;
|
|
rowattrs["repeating_grenade_" + row_id + "_ground_zero"] = data["data-dvgz"] || '-';
|
|
rowattrs["repeating_grenade_" + row_id + "_close"] = data["data-dvclose"] || '-';
|
|
rowattrs["repeating_grenade_" + row_id + "_near"] = data["data-dvnear"] || '-';
|
|
rowattrs["repeating_grenade_" + row_id + "_blast"] = data["data-blast"] || '-';
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddWeapon = function(type = 'range', data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_skill"] = trans.Weapons[data["data-skill"]] || '';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_dicepool"] = 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_dicepool_base"] = 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_damage"] = data["data-dv"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_damage_base"] = data["data-dv"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_close"] = data["data-close"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_close_base"] = data["data-close"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_near"] = data["data-near"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_near_base"] = data["data-near"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_medium"] = data["data-medium"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_medium_base"] = data["data-medium"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_far"] = data["data-far"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_far_base"] = data["data-far"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_extreme"] = data["data-extreme"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_extreme_base"] = data["data-extreme"] || '-';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_dicepool_modifier"] = data["data-dicepool_modifier"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_has_mods"] = data["data-has_mods"] || '';
|
|
|
|
data["data-ammo"] = (data["data-ammo"]) ? data["data-ammo"].match(/^(\d+)/)[0] : '';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_ammo"] = data["data-ammo"];
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] = (data["data-extras"]) ? data["data-extras"] : '';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] += data["data-description"] || '';
|
|
|
|
|
|
if(type == 'range') {
|
|
// firing modes setup
|
|
rowattrs["repeating_" + type + "_" + row_id + "_firing_modes"] = data["data-firing_modes"] || 'SS';
|
|
var modes = rowattrs["repeating_" + type + "_" + row_id + "_firing_modes"].split(/\s*\/\s*/i);
|
|
modes.forEach(mode => {
|
|
switch(mode.toUpperCase()) {
|
|
case 'SS':
|
|
rowattrs["repeating_" + type + "_" + row_id + "_singleshot"] = 1;
|
|
break;
|
|
case 'SA':
|
|
rowattrs["repeating_" + type + "_" + row_id + "_semiauto"] = 1;
|
|
break;
|
|
case 'BF':
|
|
rowattrs["repeating_" + type + "_" + row_id + "_burstfire"] = 1;
|
|
break;
|
|
case 'BW':
|
|
rowattrs["repeating_" + type + "_" + row_id + "_burstwide"] = 1;
|
|
break;
|
|
case 'FA':
|
|
rowattrs["repeating_" + type + "_" + row_id + "_fullauto"] = 1;
|
|
break;
|
|
};
|
|
});
|
|
}
|
|
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddGear = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var type = 'items';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_rating"] = data["data-rating"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_quantity"] = data["data-quantity"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_modifications"] = data["data-modifications"] || 0;
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] = data["data-description"] || '';
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddArmor = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var type = 'armor';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_rating"] = data["data-rating"] || data["data-defense"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_chem"] = data["data-chem"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_cold"] = data["data-cold"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_elec"] = data["data-elec"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_fire"] = data["data-fire"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_cumulative"] = data["data-cumulative"] || '';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_social"] = data["data-social"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_capacity"] = data["data-capacity"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] = data["data-description"] || '';
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddSpell = function(data) {
|
|
getAttrs(["magic", "sorcery", "force", "sheet_type"], (v) => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
|
|
['data-damage', 'data-duration', 'data-effect_type', 'data-range'].forEach((key) => {
|
|
if(typeof(data[key]) === 'undefined') {
|
|
data[key] = '';
|
|
}
|
|
});
|
|
|
|
let spell_type = 'spell';
|
|
console.log("Adding Spell: "+data["data-name"]);
|
|
if(v.sheet_type != 'pc' && v.magic > 0 && v.sorcery > 0) {
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_dicepool"] = parseInt(v.magic) + parseInt(v.sorcery);
|
|
} else if(v.sheet_type == 'spirit' && (! v.sorcery || v.sorcery == '0')) {
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_dicepool"] = parseInt(v.magic) + parseInt(v.force);
|
|
} else {
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_dicepool"] = 0;
|
|
}
|
|
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_skill"] = '@{sorcery}';
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_notes"] = data["data-description"] || '';
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_category"] = ucfirst(data["data-category"]) || '';
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_damage"] = trans.Spells.damage[data["data-damage"].toUpperCase()] || '';
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_drain"] = data["data-drain"] || 0;
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_duration"] = trans.Spells.duration[data["data-duration"].toUpperCase()] || '';
|
|
|
|
var eftype = '';
|
|
if(data["data-effect_type"]) {
|
|
eftype = data["data-effect_type"].toUpperCase();
|
|
} else if(data["data-typename"]) {
|
|
eftype = data["data-typename"];
|
|
var reg = /.*\((.*)\).*/;
|
|
eftype = eftype.match(reg) || ('', '');
|
|
eftype = eftype[1].toUpperCase();
|
|
}
|
|
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_effect_type"] = trans.Spells.effect_type[eftype] || '';
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_range"] = trans.Spells.range[data["data-range"].toUpperCase()] || '';
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_type"] = ucfirst(data["data-type"]) || '';
|
|
|
|
rowattrs["repeating_" + spell_type + "_" + row_id + "_notes"] = data["data-notes"] || '';
|
|
setAttrs(rowattrs);
|
|
});
|
|
};
|
|
|
|
|
|
var compendiumAddQuality = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var rep_type = 'quality';
|
|
|
|
['data-description', 'data-game_effect'].forEach((key) => {
|
|
if(typeof(data[key]) === 'undefined') {
|
|
data[key] = '';
|
|
}
|
|
});
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_type"] = (data["data-positive"] == "TRUE") ? 'P' : 'N';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] = data["data-description"] + data["data-game_effect"];
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddMetamagic = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var rep_type = 'metamagic';
|
|
|
|
[].forEach((key) => {
|
|
if(typeof(data[key]) === 'undefined') {
|
|
data[key] = '';
|
|
}
|
|
});
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] = data["data-description"];
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddRitual = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var rep_type = 'ritual';
|
|
|
|
[].forEach((key) => {
|
|
if(typeof(data[key]) === 'undefined') {
|
|
data[key] = '';
|
|
}
|
|
});
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_threshold"] = data["data-threshold"] || 0;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] = data["data-features"] + "\n" + data["data-description"];
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddPower = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var rep_type = 'powers';
|
|
|
|
[].forEach((key) => {
|
|
if(typeof(data[key]) === 'undefined') {
|
|
data[key] = '';
|
|
}
|
|
});
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_display_flag"] = 'on';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_activation"] = trans['Powers']['activation'][data["data-activation"].toUpperCase()] || 'Passive';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] = data["data-description"];
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_modifications"] = data["data-modifications"] || '';
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddCritterPower = function(data) {
|
|
console.log("Critter Power Drop");
|
|
getAttrs(['sheet_type', 'powers'], (v) => {
|
|
if(v.sheet_type == 'grunt') {
|
|
let powers = v.powers;
|
|
let re = /\((.*?)\)/gi;
|
|
let parens = powers.match(re);
|
|
|
|
powers.replace(re, parens);
|
|
powers = v.powers.split(/,\s*/);
|
|
|
|
let powerName = data["data-name"];
|
|
|
|
v.powers = [v.powers, powerName].join(', ');
|
|
|
|
setAttrs({
|
|
powers: v.powers
|
|
}, {silent: true});
|
|
} else if(v.sheet_type == 'spirit') {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
var rep_type = 'powers';
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_display_flag"] = 'on';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] = data["data-description"];
|
|
|
|
setAttrs(rowattrs);
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
var compendiumAddComplexForm = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var rep_type = 'forms';
|
|
|
|
['data-duration'].forEach((key) => {
|
|
if(typeof(data[key]) === 'undefined') {
|
|
data[key] = '';
|
|
}
|
|
});
|
|
|
|
let skill_keys = {
|
|
'Electronics': '@{electronics}',
|
|
'Cracking': '@{cracking}',
|
|
'Tasking': '@{tasking}'
|
|
};
|
|
if(data["data-skill"] && skill_keys[data["data-skill"]]) {
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_skill"] = skill_keys[data["data-skill"]];
|
|
} else {
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_skill"] = '';
|
|
}
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_display_flag"] = 'on';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_fade"] = data["data-fade"];
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_duration"] = ucfirst(data["data-duration"]);
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] = data["data-description"];
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddIC = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var rep_type = 'IC';
|
|
|
|
[].forEach((key) => {
|
|
if(typeof(data[key]) === 'undefined') {
|
|
data[key] = '';
|
|
}
|
|
});
|
|
|
|
getAttrs(['sheet_type', 'host_rating', 'data_processing'], (v) => {
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_display_flag"] = 'on';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_powered_on_IC"] = 'off';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_dice"] = v.host_rating * 2;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_ar"] = v.host_rating * 2;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_cm"] = v.host_rating * 2;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_init"] = v.data_processing * 2;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_attribute"] = data["data-defense_attribute_1"];
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_matrix"] = data["data-defense_attribute_2"];
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] = data["data-description"];
|
|
|
|
setAttrs(rowattrs);
|
|
});
|
|
};
|
|
|
|
|
|
var compendiumAddSpritePower = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var rep_type = 'powers';
|
|
|
|
[].forEach((key) => {
|
|
if(typeof(data[key]) === 'undefined') {
|
|
data[key] = '';
|
|
}
|
|
});
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] = data["data-description"];
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddContact = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var rep_type = 'contacts';
|
|
|
|
["data-loyalty", "data-influence", "data-favors"].forEach((key) => {
|
|
if(typeof(data[key]) === 'undefined') {
|
|
data[key] = '';
|
|
}
|
|
});
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = false;
|
|
if(! data["data-loyalty"] || ! data["data-influence"]) {
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_flag"] = "on";
|
|
}
|
|
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_loyalty"] = data["data-loyalty"];
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_influence"] = data["data-connections"];
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_favors"] = data["data-favors"];
|
|
|
|
let labels = {"contact_uses": "Uses: ", "contact_places_to_meet": "Places To Meet: ", "contact_similar_contacts": "Similar Contacts: "};
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] = '';
|
|
["contact_uses", "contact_places_to_meet", "contact_similar_contacts", "description", "notes"].forEach((k) => {
|
|
if(typeof data[`data-${k}`] !== 'undefined') {
|
|
if(labels[k]) {
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] += labels[k];
|
|
}
|
|
rowattrs["repeating_" + rep_type + "_" + row_id + "_notes"] += data[`data-${k}`] + "\n";
|
|
}
|
|
});
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
var compendiumAddAugmentation = function(data) {
|
|
rowattrs = {};
|
|
|
|
row_id = generateRowID();
|
|
|
|
var type = 'augmentations';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_flag"] = false;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_display_flag"] = "on";
|
|
rowattrs["repeating_" + type + "_" + row_id + "_name"] = data["data-name"] || 'No Name';
|
|
if(data["data-has_rating"] == 'true') {
|
|
rowattrs["repeating_" + type + "_" + row_id + "_rating"] = data["data-rating"] || 0;
|
|
} else {
|
|
rowattrs["repeating_" + type + "_" + row_id + "_rating"] = '';
|
|
}
|
|
rowattrs["repeating_" + type + "_" + row_id + "_essence_cost"] = parseFloat(data["data-essence_cost"]) || 0.0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_essence_base"] = data["data-essence_cost"] || 0;
|
|
rowattrs["repeating_" + type + "_" + row_id + "_capacity"] = data["data-capacity_cost"] || '';
|
|
|
|
rowattrs["repeating_" + type + "_" + row_id + "_modifications"] = data["data-modifications"] || '';
|
|
rowattrs["repeating_" + type + "_" + row_id + "_notes"] = data["data-description"] || '';
|
|
|
|
setAttrs(rowattrs);
|
|
};
|
|
|
|
|
|
|
|
|
|
const trans = {
|
|
'Spells': {
|
|
'range': {
|
|
'T': 'T',
|
|
'TOUCH': 'T',
|
|
'LOS': 'LOS',
|
|
'LOS(A)': 'LOS(A)'
|
|
},
|
|
'duration': {
|
|
'INSTANTANEOUS': 'Instant',
|
|
'I': 'Instant',
|
|
'SUSTAINED': 'Sustained',
|
|
'S': 'Sustained',
|
|
'LIMITED': 'Limited',
|
|
'L': 'Limited',
|
|
'PERMANENT': 'Permanent',
|
|
'P': 'Permanent',
|
|
},
|
|
'damage': {
|
|
'STUN': 'Stun',
|
|
'PHYSICAL': 'Physical',
|
|
'PHYSICAL_SPECIAL': 'Physical, Special',
|
|
'PHYSICAL, SPECIAL': 'Physical, Special',
|
|
},
|
|
'effect_type': {
|
|
'DIRECT COMBAT': 'Direct Combat',
|
|
'DIRECT COMBAT, AREA': 'Direct Combat, Area',
|
|
'INDIRECT COMBAT': 'Indirect Combat',
|
|
'INDIRECT COMBAT, AREA': 'Indirect Combat, Area',
|
|
'SENSE_SINGLE': 'Single-Sense',
|
|
'SENSE_MULTI': 'Multi-Sense'
|
|
}
|
|
},
|
|
'Powers': {
|
|
'activation': {
|
|
'MINOR ACTION': 'Minor',
|
|
'MAJOR ACTION': 'Major',
|
|
'PASSIVE': 'Passive'
|
|
}
|
|
},
|
|
'qsr_blob_types': {
|
|
'weapon-ranged': 'Ranged',
|
|
'weapon-melee': 'Melee',
|
|
'weapon-both': 'Weapon Both',
|
|
'spell': 'Spells',
|
|
'gear-misc': 'Gear',
|
|
'gear-armor': 'Armor',
|
|
'gear-commlink': 'Devices',
|
|
'gear-cyberdeck': 'Devices',
|
|
'program': 'Programs',
|
|
'drone': 'Vehicles',
|
|
'npc': 'NPC'
|
|
},
|
|
"Weapons": {
|
|
'athletics': 'Athletics',
|
|
'Athletics': 'Athletics',
|
|
'close_combat': 'Close Combat',
|
|
'Close Combat': 'Close Combat',
|
|
'exotic_weapons': 'Exotic Weapons',
|
|
'Exotic Weapons': 'Exotic Weapons',
|
|
'engineering': 'Engineering',
|
|
'Engineering': 'Engineering',
|
|
'firearms': 'Firearms',
|
|
'Firearms': 'Firearms',
|
|
'unarmed': 'Unarmed',
|
|
'Unarmed': 'Unarmed',
|
|
},
|
|
};
|
|
|
|
|
|
/********************/
|
|
/* 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
|
|
let usedIDs = [];
|
|
json.qualities.forEach(quality => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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
|
|
usedIDs = [];
|
|
json.skills.forEach(skill => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
var skill_parts = [];
|
|
skill.id.split('_').map((part) => {
|
|
skill_parts.push(ucfirst(part));
|
|
});
|
|
var skill_name = skill_parts.join(' ');
|
|
|
|
if(skill.id != "knowledge" && skill.id != "language") {
|
|
rowattrs["repeating_skills_" + row_id + "_display_name"] = skill.name;
|
|
rowattrs["repeating_skills_" + row_id + "_name"] = skill_name;
|
|
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
|
|
usedIDs = [];
|
|
json.armors.forEach(armor => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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
|
|
usedIDs = [];
|
|
console.log("Processing items...");
|
|
|
|
json.items.forEach(item => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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'
|
|
};
|
|
usedIDs = [];
|
|
json.augmentations.forEach(augmentation => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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 + "_essence_base"] = augmentation.essence;
|
|
rowattrs["repeating_augmentations_" + row_id + "_essence_cost_raw"] = 1;
|
|
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',
|
|
}
|
|
};
|
|
usedIDs = [];
|
|
json.vehicles.concat(json.drones).forEach(vehicle => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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 + ') ';
|
|
});
|
|
|
|
|
|
usedIDs = [];
|
|
Object.keys(sins).forEach(key => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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
|
|
usedIDs = [];
|
|
json.contacts.forEach(contact => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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'
|
|
};
|
|
usedIDs = [];
|
|
json.longRangeWeapons.forEach(range => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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
|
|
usedIDs = [];
|
|
json.closeCombatWeapons.forEach(melee => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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'
|
|
};
|
|
usedIDs = [];
|
|
json.spells.forEach(spell => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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
|
|
usedIDs = [];
|
|
json.rituals.forEach(ritual => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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',
|
|
};
|
|
usedIDs = [];
|
|
json.adeptPowers.forEach(power => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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
|
|
usedIDs = [];
|
|
if(json.metamagic) {
|
|
json.metamagic.forEach(meta => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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
|
|
usedIDs = [];
|
|
if(json.echoes) {
|
|
json.echoes.forEach(echo => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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'
|
|
};
|
|
usedIDs = [];
|
|
if(json.complexForms) {
|
|
json.complexForms.forEach(form => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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
|
|
usedIDs = [];
|
|
if(json.martialArts) {
|
|
json.martialArts.forEach(mart => {
|
|
if(mart.techniques[0]) {
|
|
mart.techniques.forEach(tech => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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',
|
|
'CONTROL_RIG': 'Control Rig',
|
|
'TAC_NET': 'M-TOC'
|
|
}
|
|
usedIDs = [];
|
|
if(json.matrixItems) {
|
|
json.matrixItems.forEach(dev => {
|
|
rowattrs = {};
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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
|
|
usedIDs = [];
|
|
if(programs) {
|
|
rowattrs = {};
|
|
Object.keys(programs).forEach(key => {
|
|
row_id = generateRowID();
|
|
while(row_id.toLowerCase() in usedIDs) {
|
|
row_id = generateRowID();
|
|
}
|
|
usedIDs.push(row_id.toLowerCase());
|
|
|
|
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}`);
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
|
|
/******************
|
|
* Utilities *
|
|
******************/
|
|
const ucfirst = (string = '') => {
|
|
return string.charAt(0).toUpperCase() + string.slice(1) || '';
|
|
};
|
|
</script>
|
|
</div>
|