Files
roll20-character-sheets/Shadowrun3e/shadowrun3e.html
T

8574 lines
434 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' />
<div class="geninfo">
<div>
<div class="SRH2W">General Information</div>
<div class="geninfo-item">
<div class="SRH5">Name:</div>
<input class="text-mid" type="text" name="attr_character_name" disabled="true">
<div></div>
<div></div>
<div class="SRH5">Sheet Type:</div>
<select name="attr_sheettype" class="largeselect">
<option selected>Character</option>
<option>NPC</option>
<option>Critter</option>
<option>Spirit</option>
<option>Drone</option>
<option>Vehicle</option>
<option>Matrix</option>
<option>Frame</option>
</select>
<div></div>
<div class="box text-mid"><a class="button" href="#popup1">Import</a></div>
</div>
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character" />
<div class="metatype-info">
<div class="SRH5">MetaType:</div><select name="attr_metatype" class="largeselect">
<option selected>Human</option>
<option>Dwarf</option>
<option>Elf</option>
<option>Ork</option>
<option>Troll</option>
</select>
<div class="SRH5">Age:</div> <input type="number" name="attr_age">
<div class="SRH5">Height:</div> <input type='number' name="attr_height">
<div class="SRH5">Weight:</div> <input type='number' name="attr_weight" step='0.01'>
</div>
<div class="spirittype-info">
<div class="SRH5">Spirit Type: </div>
<select id="spirit-type" name="attr_spirit-type" style="largeselect">
<option>Watcher</option>
<optgroup label="Elementals">
<option>Air Elemental</option>
<option>Water Elemental</option>
<option>Earth Elemental</option>
<option>Fire Elemental</option>
</optgroup>
<optgroup label="Spirits of Man">
<option>City Spirit</option>
<option>Field Spirit</option>
<option>Hearth Spirit</option>
</optgroup>
<optgroup label="Spirits of the Land">
<option>Desert Spirit</option>
<option>Forest Spirit</option>
<option>Mountain Spirit</option>
<option>Prairie Spirit</option>
</optgroup>
<optgroup label="Spirits of the Sky">
<option>Mist Spirit</option>
<option>Storm Spirit</option>
<option>Wind Spirit</option>
</optgroup>
<optgroup label="Spirits of the Waters">
<option>Lake Spirit</option>
<option>River Spirit</option>
<option>Sea Spirit</option>
</optgroup>
<optgroup label="Spirits of the Elements">
<option>Gnome</option>
<option>Manitous</option>
<option>Salamander</option>
<option>Sylphs</option>
<option>Ancestor</option>
</optgroup>
</select>
<div class="SRH5">Force:</div>
<input type="number" name="attr_force">
</div>
</div>
<div><img src="https://raw.githubusercontent.com/bahornbeck/img/master/images/srlogo.png"
alt="Shadowrun Third Edition"></div>
</div>
<div class="hidden-constants">
<input type="hidden" name="attr_iconstatuscode" value=0>
<input type='hidden' name='attr_gyro-on' value=0 />
<input type='hidden' name='attr_wp-char' value="(@{stun_pen} + @{wound_pen})" />
<input type='hidden' name='attr_wp-matrix' value="(@{stun_pen} + @{wound_pen} + @{matrix-penalty})" />
<input type='hidden' name='attr_wp-vehicle'
value="(@{vehicle-penalty} +@{rccommand-penalty} + @{rcsimsense-penalty} +@{rcsystem-penalty})" />
<input type='hidden' name='attr_ask-range' value="?{Range|Short,4|Medium,5|Long,6|Extreme,9}" />
<button type="action" name="act_init-aug" class="d6-button" title="Augmented Initiative">L</button>
<button type="action" name="act_endturn" class="d6-button" title="End Combat Turn">L</button>
<button type="action" name="act_resistroll" class="d6-button" title="Resist Roll">L</button>
<button type="action" name="act_resist-ballistic-normal" class="d6-button"
title="Resist with Ballistic Armor">L</button>
<button type="action" name="act_resist-ballistic-half" class="d6-button"
title="Resist with 1/2 Ballistic Armor">L</button>
<button type="action" name="act_resist-ballistic-double" class="d6-button"
title="Resist with double Ballistic Armor">L</button>
<button type="action" name="act_resist-impact-normal" class="d6-button" title="Resist with Impact Armor">L</button>
<button type="action" name="act_resist-impact-half" class="d6-button"
title="Resist with 1/2 Impact Armor">L</button>
<button type="action" name="act_resist-impact-double" class="d6-button"
title="Resist with double Impact Armor">L</button>
<button type="action" name="act_rangedattack-primary" class="d6-button"
title="Attack with primary equipped ranged weapons">L</button>
<button type="action" name="act_meleeattack-primary" class="d6-button"
title="Attack with primary equipped melee weapons">L</button>
<button type="action" name="act_spiritcontrol" class="d6-button" title="spirit control test">L</button>
<button type="action" name="act_banishing" class="d6-button" title="banishing test">L</button>
<button type="action" name="act_summoning" class="d6-button" title="summoning test">L</button>
<button type="action" name="act_attrib-body" class="d6-button" title="body test">L</button>
<button type="action" name="act_attrib-willpower" class="d6-button" title="willpower test">L</button>
<button type="action" name="act_attrib-intelligence" class="d6-button" title="intelligence test">L</button>
<button type="action" name="act_attrib-force" class="d6-button" title="force test">L</button>
<button type="action" name="act_attrib-body-max" class="d6-button" title="body max test">L</button>
<button type="action" name="act_attrib-willpower-max" class="d6-button" title="willpower max test">L</button>
<button type="action" name="act_attrib-intelligence-max" class="d6-button" title="intelligence max test">L</button>
</div>
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character" />
<div class="characters-npcs">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="alwaysdisplayed-buttons">
<input type='hidden' class='magictype' name='attr_magic-type' value="mage" />
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value="character" />
<button class="charbutton" type="action" name="act_character" title="Character Attributes and Karma">Attributes</button>
<button class="skillsbutton" type="action" name="act_skills" title="Active and Knowledge Skills">Skills</button>
<button class="magicbutton" type="action" name="act_magic" title="Magic Skills, Spells, Fetishes, Initiation and Adept Powers">Magic</button>
<button class="adeptbutton" type="action" name="act_magic" title="Magic Skills, Spells, Fetishes, Initiation and Adept Powers">Adept</button>
<button class="decksbutton" type="action" name="act_decks" title="Computer Skills, Cyberdeck configuration and Utilities">Decking</button>
<button class="gearbutton" type="action" name="act_gear" title="Gear, Vehicles and Nuyen">Gear</button>
<button class="riggerbutton" type="action" name="act_rigger" title="VCR, Remote Control Deck and Electronic Warfare">Rigger</button>
<button class="combatbutton" type="action" name="act_combat" title="Combat Skills and Weapons for Ranged and Melee">Combat</button>
<button class="cyberwarebutton" type="action" name="act_cyberware" title="Cyberware, Bioware and Nanotech">Cyberware</button>
<button class="contactsbutton" type="action" name="act_contacts" title="Contacts and Lifestyle Notes">Contacts/Lifestyle</button>
<button class="karmabutton" type="action" name="act_karma" title="Karma and Karam expenditures">Karma</button>
</div>
<div class="critters-only critters-buttons">
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value="character" />
<button class="charbutton" type="action" name="act_character"
title="Character Attributes and Karma">Attributes</button>
<button class="combatbutton" type="action" name="act_combat"
title="Combat Skills and Weapons for Ranged and Melee">Combat</button>
<button class="critters-powers-button" type="action" name="act_critter-powers"
title="Critter Powers and Weaknesses">Powers</button>
<button class="magicbutton" type="action" name="act_magic" title="Critter Magic">Magic</button>
</div>
<div class="spirits-only spirits-buttons">
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value="character" />
<button class="charbutton" type="action" name="act_character" title="Spirit Attributes">Attributes</button>
<button class="critters-powers-button" type="action" name="act_critter-powers"
title="Spirit Powers and Weaknesses">Powers</button>
<button class="magicbutton" type="action" name="act_magic" title="Spirit Magic">Magic</button>
</div>
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value='character' />
<div class="alwaysdisplayed">
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character" />
<div class="organism-condition">
<div class="SRH3">Condition Monitor</div>
<br>
<div class="conditionstatus">
<div></div>
<div>Uninjured</div>
<div>Light Stun</div>
<div>Moderate Stun</div>
<div>Serious Stun</div>
<div>Unconscious</div>
<div>Stun</div>
<div>
<input type="radio" name="attr_stun" value=0 CHECKED>
</div>
<div>
<input type="radio" name="attr_stun" value=1>
<input type="radio" name="attr_stun" value=2>
</div>
<div>
<input type="radio" name="attr_stun" value=3>
<input type="radio" name="attr_stun" value=4>
<input type="radio" name="attr_stun" value=5>
</div>
<div>
<input type="radio" name="attr_stun" value=6>
<input type="radio" name="attr_stun" value=7>
<input type="radio" name="attr_stun" value=8>
<input type="radio" name="attr_stun" value=9>
</div>
<div><input type="radio" name="attr_stun" value=100></div>
<div>Physical</div>
<div>
<input type="radio" name="attr_wounds" value=0 CHECKED>
</div>
<div>
<input type="radio" name="attr_wounds" value=1>
<input type="radio" name="attr_wounds" value=2>
</div>
<div>
<input type="radio" name="attr_wounds" value=3>
<input type="radio" name="attr_wounds" value=4>
<input type="radio" name="attr_wounds" value=5>
</div>
<div>
<input type="radio" name="attr_wounds" value=6>
<input type="radio" name="attr_wounds" value=7>
<input type="radio" name="attr_wounds" value=8>
<input type="radio" name="attr_wounds" value=9>
</div>
<div><input type="radio" name="attr_wounds" value=100></div>
<div></div>
<div>Uninjured</div>
<div>Light Wound</div>
<div>Moderate Wound</div>
<div>Serious Wound</div>
<div>Unconscious/Dead</div>
<div></div>
</div>
<div><br></div>
</div>
<div class="dicepool">
<input type="hidden" name="attr_combatpool-used" value=0 />
<input type="hidden" name="attr_spellpool-used" value=0 />
<input type='hidden' name='attr_spellpool-used-total' value=0 />
<input type="hidden" name="attr_hackingpool-used" value=0 />
<input type="hidden" name="attr_hackingpool-used-total" value=0 />
<input type="hidden" name="attr_controlpool-used" value=0 />
<input type="hidden" name="attr_astralpool-used" value=0 />
<input type="hidden" name="attr_taskpool-used" value=0 />
<div class="SRH3">Dice Pools</div>
<div>Max</div>
<div>Used</div>
<div> Combat Pool:</div>
<div><span name="attr_combatpool"></span></div>
<div><input type='hidden' class='combatpool-over' name='attr_combatpool-over' /><span class="combatpool-over" name="attr_combatpool-used"></span></div>
<div> Spell Pool:</div>
<div><span type="number" name="attr_spellpool"></span> </div>
<div><input type='hidden' class='spellpool-over' name='attr_spellpool-over' /><span class="spellpool-over" name="attr_spellpool-used-total"></span></div>
<div> Hacking Pool:</div>
<div><span type="number" name="attr_hackingpool"></span> </div>
<div><input type='hidden' class='hackingpool-over' name='attr_hackingpool-over' /><span class="hackingpool-over" name="attr_hackingpool-used-total"></span></div>
<div> Control Pool:</div>
<div><span type="number" name="attr_controlpool"></span> </div>
<div><input type='hidden' class='controlpool-over' name='attr_controlpool-over' /><span class="controlpool-over" name="attr_controlpool-used"></span></div>
<div> Astral Pool:</div>
<div><span type="number" name="attr_astralpool"></span> </div>
<div><input type='hidden' class='astralpool-over' name='attr_astralpool-over' /><span class="astralpool-over" name="attr_astralpool-used"></span></div>
<div> Task Pool:</div>
<div><span type="number" name="attr_taskpool"></span> </div>
<div><input type='hidden' class='taskpool-over' name='attr_taskpool-over' /><span class="taskpool-over" name="attr_taskpool-used"></span></div>
</div>
</div>
<div class="conditionstatus2">
<div>Physical Damage Overflow:</div>
<div><input type="number" name="attr_overflow" value=0 min=0 /></div>
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character" />
<div></div>
<div class="normal-init text-mid">Init Nat.</div>
<div class="normal-init"><button type="action" name="act_init" class="d6-button" title="Unaugmented Initiative"
id="natrualinit">L</button></div>
<div class="normal-init text-mid">Init. Aug.</div>
<div class="normal-init"><button type="action" name="act_init" class="d6-button" title="Augmented Initiative"
id="augmentedinit">L</button></div>
<div class="spirits-only text-mid">Init. Phy.</div>
<div class="spirits-only"><button type="action" name="act_init" class="d6-button" title="Physical Initiative"
id="spiritinit">L</button></div>
<div class="spirits-only text-mid">Init. Astr. </div>
<div class="spirits-only"><button type="action" name="act_init" class="d6-button" title="Astral Initiative"
id="astralinit">L</button></div>
<div class="text-mid">End Turn</div>
<div><button type="action" name="act_endturn" class="d6-button" title="End Combat Turn" id="endturn">L</button>
</div>
<div class="conditionstatus2-attrs">
<div class="text-mid">B: <span name="attr_body_max"></span></div>
<div class="text-mid">Q: <span name="attr_quickness_max"></span></div>
<div class="text-mid">S: <span name="attr_strength_max"></span></div>
<div class="text-mid">C: <span name="attr_charisma_max"></span></div>
<div class="text-mid">I: <span name="attr_intelligence_max"></span></div>
<div class="text-mid">W: <span name="attr_willpower_max"></span></div>
<div class="text-mid">R: <span name="attr_reaction_max"></span></div>
</div>
</div>
<div class="combat-always-visible">
<div class="SRH3">Combat conditions</div>
<div class="combat-modifiers-total">
<div class="text-mid">Ranged Modifiers: <span name="attr_rangedTN"></span></div>
<div class="text-mid">Melee Modifiers: <span name="attr_meleeTN"></span></div>
<div class="text-mid">Rounds Fired: <span name="attr_rounds-phase" value=0></span></div>
<div>Dodge<button type="action" name="act_dodge" class="d6-button" title="Dodge Attack"
id="dodge">L</button></div>
<div>Ballistic: <span name="attr_ballistic" value=0></span><button type="action" name="act_resistdmg" class="d6-button" title="Resist Damage with Ballistic Armor" id="ballistic">L</button> </div>
<div>Impact: <span name="attr_impact" value=0></span><button type="action" name="act_resistdmg" class="d6-button" title="Resist Damage with Impact Armor" id="impact">L</button> </div>
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="manual-gunnery">
<input type='hidden' class='gunnery-switch' name='attr_gunneryswitch' value="show" />
<div class="manual-gunnery-show">
<input type="hidden" class="manual-gunnery-tn" name="attr_manualgunneryTN" value=0>
<button class="gunneryswitch" type="action" name="act_gunneryswitch">Show Manual
Gunnery</button><span name="attr_manualgunneryTN"></span>
</div>
<div class="manual-gunnery-hide">
<input type="hidden" class="manual-gunnery-tn" name="attr_manualgunneryTN" value=0>
<button class="gunneryswitch" type="action" name="act_gunneryswitch">Hide Manual
Gunnery</button><span name="attr_manualgunneryTN"></span>
</div>
</div>
</div>
<div class="combat-conditions">
<div class="text-mid">Visibility</div>
<div class="text-mid">Vision Enhacement</div>
<div class="text-mid">Target Cover</div>
<div class="text-mid">Movement</div>
<div>Dual Wield</div>
<div>Called Shot</div>
<div>Aim Actions</div>
<div>Melee Foes</div>
<div>Melee Friends</div>
<div class="text-mid">Targets</div>
<div class="text-mid">Position</div>
<div>Misc Modifiers</div>
<div class="center-checkbox"><select name="attr_visibility" class="mediumselect2">
<option value=0 selected>Normal</option>
<option value="@{fulldark}">Full Dark</option>
<option value="@{partiallight}">Partail Light</option>
<option value="@{minlight}">Minimal Light</option>
<option value="@{glare}">Glare</option>
<option value="@{mist}">Mist</option>
<option value="@{lightsmoke}">Light Smoke/Rain</option>
<option value="@{fullsmoke}">Heavy Smoke/Rain</option>
<option value="@{thermalsmoke}">Thermal Smoke</option>
</select>
</div>
<div><select name="attr_visionenhancement" class="mediumselect2">
<option selected>None</option>
<option>LowLight</option>
<option>Thermal</option>
</select></div>
<div><select name="attr_cover" class="mediumselect2">
<optgroup label="Standard">
<option value=0 SELECTED>None</option>
<option value=4>Partial</option>
<option value=8>Blind Fire</option>
<optgroup label="GM's Choice">
<option value=1>+1</option>
<option value=2>+2</option>
<option value=3>+3</option>
<option value=4>+4</option>
<option value=5>+5</option>
<option value=6>+6</option>
</select></div>
<div><select name="attr_move" title="Movement actions taken" class="mediumselect2">
<option selected value=0 selected>not moving</option>
<option value=1>walk</option>
<option value=2>walk (difficult ground)</option>
<option value=4>run</option>
<option value=6>run (difficult ground)</option>s
</select></div>
<div class="center-checkbox"><input type='checkbox' name="attr_dualwield" value='2' title="2 Guns Equipped">
</div>
<div class="center-checkbox"><input type='checkbox' name="attr_calledshot" value='4' title="Called Shot">
</div>
<div class="center-checkbox"><input type='number' name="attr_aim" value="0" min="0"
title="Aim Actions Taken"></div>
<div><input type='number' name="attr_enemies" max="4" min="0" value="0" title="Enemies in Melee with you">
</div>
<div><input type='number' name="attr_friends" max="4" min="0" value="0" title="Friends in Melee with you">
</div>
<div><input type='number' name="attr_meleetargets" value="0" min="0"
title="How many targets are you attacking at one time"></div>
<div><select name="attr_position" title="Position of you vs. target in Melee" class="mediumselect2">
<option value=0 selected>None</option>
<option value=1>Superior Position</option>
<option value=2>Target Prone</option>
</select></div>
<div><input type='number' name="attr_misccombatmods" value="0" title="Any other modifiers for combat?">
</div>
</div>
<input type='hidden' class='gunnery-switch' name='attr_gunneryswitch' value="show" />
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="manual-gunnery-mods">
<div>Relative Motion</div>
<div>Relative Speed</div>
<div>Maneuver Score</div>
<div>Vehicle Damage</div>
<div>Weapon Mount</div>
<div>Terrain</div>
<div>Target Type</div>
<div><select name="attr_gunnerymotion" title="motion relative to target" class="mediumselect2">
<option value=0 selected>None</option>
<option value=-1>Towards</option>
<option value=1>Away</option>
</select></div>
<div><select name="attr_gunneryspeed" title="speed relative to target" class="mediumselect2">
<option value=0 selected>About Equal</option>
<option value=2>Up to 2X</option>
<option value=4>Up to 3X</option>
<option value=6>More than 3X</option>
</select></div>
<div><select name="attr_gunnerymaneuver" title="Maneuver score difference" class="mediumselect2">
<option value=0 selected>None</option>
<option value=-1>Attacker Greaty by 10</option>
<option value=1>Target Greater by 10</option>
</select></div>
<div><select name="attr_gunneryvehicledmg" title="Vehicle Damaged Modifiers" class="mediumselect2">
<option value=0 selected>None</option>
<option value=1>L</option>
<option value=2>M</option>
<option value=3>S</option>
</select></div>
<div><select name="attr_gunnerymount" title="Is weapon mounted?" class="mediumselect2">
<option value=2>Unmounted</option>
<option value=0 selected>mounted</option>
</select></div>
<div><select name="attr_gunneryterrain" title="Moving through terrain" class="mediumselect2">
<option value=0 selected>Normal</option>
<option value=2>Restricted</option>
<option value=4>Tight</option>
<option value=2>Combat Zone</option>
</select></div>
<div><select name="attr_gunnerytargettype" title="Target type/size" class="mediumselect2">
<option value=0 selected>Metahuman sized</option>
<option value=1>Small critter</option>
<option value=-1>Large critter</option>
<option value=1>Small drone</option>
<option value=0>Motorcyle</option>
<option value=-1>Automobile</option>
<option value=-1>Limo/Light Truck</option>
<option value=-3>Heavy Truck/Trailer</option>
<option value=-1>Boat</option>
<option value=-3>Yacht</option>
<option value=-8>Freighter/Tanker</option>
<option value=0>Ultralight glider</option>
<option value=-2>Fixed Wing</option>
<option value=-6>Commerical Airliner</option>
<option value=-2>Helicopter</option>
<option value=-6>Zepplin/Blimp</option>
<option value=-3>LAV</option>
<option value=-3>Military Ground Vehicle</option>
</select></div>
</div>
</div>
</div>
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value='character' />
<div class='sheet-character'>
<div class="attributes-init">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div>
<div class="SRH3">Attributes</div>
<div class="char-attributes">
<header class="table-top-left">Attribute</header>
<header class="table-top-mid">Base</header>
<header class="table-top-mid">Mods</header>
<header class="table-top-right">Final</header>
<header class="table-item-left">Body</header>
<div class="table-item">
<input type="number" name="attr_body" value=1 min=1 style='width:39px;' />
<div><button title="Body Test without augmentation" class="d6-button" type="action"
name="act_attrib" id="body">L</button></div>
</div>
<div class="table-item">+<input type="number" name="attr_body-mods" value=0 style='width:39px;' />=
</div>
<div class="table-item">
<span name="attr_body_max"></span>
<div><button title="Body Test with augmentation" class="d6-button" type="action" name="act_attrib"
id="body|max">L</button></div>
</div>
<header class="table-item-left">Quickness</header>
<div class="table-item">
<input type="number" name="attr_quickness" value=1 min=1 style='width:39px;' />
<div><button title="Quickness Test without augmentation" class="d6-button" type="action"
name="act_attrib" id="quickness">L</button></div>
</div>
<div class="table-item">+<input type="number" name="attr_quickness-mods" value=0 style='width:39px;' />=
</div>
<div class="table-item">
<span name="attr_quickness_max"></span>
<div><button title="Quickness Test witht augmentation" class="d6-button" type="action"
name="act_attrib" id="quickness|max">L</button></div>
</div>
<header class="table-item-left">Strength</header>
<div class="table-item">
<input type="number" name="attr_strength" value=1 min=1 style='width:39px;' />
<div><button title="Strength Test without augmentation" class="d6-button" type="action"
name="act_attrib" id="strength">L</button></div>
</div>
<div class="table-item">+<input type="number" name="attr_strength-mods" value=0 style='width:39px;' />=
</div>
<div class="table-item">
<span name="attr_strength_max"></span>
<div><button title="Strength Test with augmentation" class="d6-button" type="action"
name="act_attrib" id="strength|max">L</button></div>
</div>
<header class="table-item-left">Charisma</header>
<div class="table-item">
<input type="number" name="attr_Charisma" value=1 min=1 style='width:39px;' />
<div><button title="Charisma Test without augmentation" class="d6-button" type="action"
name="act_attrib" id="charisma">L</button></div>
</div>
<div class="table-item">+<input type="number" name="attr_charisma-mods" value=0 style='width:39px;' />=
</div>
<div class="table-item">
<span name="attr_charisma_max" value=1></span>
<div><button title="Charisma Test with augmentation" class="d6-button" type="action"
name="act_attrib" id="charisma|max">L</button></div>
</div>
<header class="table-item-left">Intelligence</header>
<div class="table-item">
<input type="number" name="attr_intelligence" value=1 min=1 style='width:39px;' />
<div><button title="Intelligence Test without augmentation" class="d6-button" type="action"
name="act_attrib" id="intelligence">L</button></div>
</div>
<div class="table-item">+<input type="number" name="attr_intelligence-mods" value=0
style='width:39px;' />=</div>
<div class="table-item">
<span name="attr_intelligence_max" value=1></span>
<div><button title="Intelligence Test with augmentation" class="d6-button" type="action"
name="act_attrib" id="intelligence|max">L</button></div>
</div>
<header class="table-item-left">Willpower</header>
<div class="table-item">
<input type="number" name="attr_willpower" value=1 min=1 style='width:39px;' />
<div><button title="Willpower Test without augmentation" class="d6-button" type="action"
name="act_attrib" id="willpower">L</button></div>
</div>
<div class="table-item">+<input type="number" name="attr_willpower-mods" value=0 style='width:39px;' />=
</div>
<div class="table-item">
<span name="attr_willpower_max" value=1></span>
<div><button title="Willpower Test with augmentation" class="d6-button" type="action"
name="act_attrib" id="willpower|max">L</button></div>
</div>
<header class="table-item-left">Essence</header>
<div class="table-item">
<input type="number" name="attr_essence" value=6 step='0.01' min='0.00' style='width:39px' />
<div><button title="Essence Test" class="d6-button" type="action" name="act_attrib"
id="essence">L</button></div>
</div>
<div></div>
<div></div>
<header class="table-item-left">Magic</header>
<div class="table-item">
<input type="number" name="attr_magic" value=0 style='width:39px;' />
<div><button title="Essence Test" class="d6-button" type="action" name="act_attrib"
id="magic">L</button></div>
</div>
<input type="number" name="attr_signature" value=4 hidden="true">
</div>
</div>
<div class="critters-only spirits-only">
<div class="SRH3">Attributes</div>
<div class="critter-attributes">
<div class="table-top-left"><b>Attribute</div>
<div class="table-top-right"><b>Level</div>
<div class="table-item-left"><b>Perception</div>
<div class="table-item">
<div class="sidebyside"><input type="number" name="attr_perception" value=0 min=0 />
<button type="action" name="act_attrib" class="d6-button" title="Perception Test"
id="perception">L</button>
</div>
</div>
<div class="table-item-left"><b>Reach</div>
<div class="table-item">
<div class="sidebyside"><input type="number" name="attr_meleereach" value=0 />
<div></div>
</div>
</div>
<div class="table-item-left"><b>Force</div>
<div class="table-item">
<div class="sidebyside"><input type="number" name="attr_force" value=0 min=0 />
<div></div>
</div>
</div>
<div class="table-item-left"><b>Attacks</div>
<div class="table-item">
<div class="critter-attack">
<input type="number" name="attr_attackpower" value=0 min=0 />
<select name="attr_attackdamage" class="mediumselect2">
<option>L</option>
<option SELECTED>M</option>
<option>S</option>
<option>D</option>
<option>L(stun)</option>
<option>M(stun)</option>
<option>S(stun)</option>
<option>D(stun)</option>
<option></option>
</select>
<button type="action" name="act_melee" id="critterattack" class="d6-button"
title="Attack Offensive">L</button>
</div>
</div>
</div>
</div>
<div>
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="SRH3">Reaction, Init & Speed</div>
<div class="reaction">
<div class="table-top-left"></div>
<div class="table-top-mid">Natural</div>
<div class="table-top-mid">Mods</div>
<div class="table-top-right">Final</div>
<header class="table-item-left">Reaction:</header>
<div class="table-item">
<input type="number" name="attr_reaction" value="1" min="1">
<button type="action" name="act_attrib" class="d6-button" title="Un-augmented Reaction Test"
id="reaction">L</button>
</div>
<div class="table-item">+<input type="number" name="attr_reaction-mods" value=0 min=0></div>
<div class="table-item"> <span name="attr_reaction_max"></span>
<button type="action" name="act_attrib" class="d6-button" title="Augmented Reaction Test"
id="reaction|max">L</button>
</div>
<header class="table-item-left">Initiative:</header>
<div class="table-item">
<input type="number" name="attr_initiative" value="1" min="1">d6
<button type="action" name="act_init" class="d6-button" title="Unaugmented Initiative"
id="natrualinit">L</button>
</div>
<div class="table-item">+<input type="number" name="attr_initiative-mods" value=0 min=0></div>
<div class="table-item"><span name="attr_initiative_max"></span>d6<button type="action" name="act_init"
class="d6-button" title="Augmented Initiative" id="augmentedinit">L</button>
</div>
<div clsss="table-item"></div>
<div clsss="table-item"></div>
<div clsss="table-item"></div>
</div>
<div class="reaction-spirit">
<div class="table-top-left"></div>
<div class="table-top-mid">Physical</div>
<div class="table-top-right">Astral</div>
<header class="table-item-left">Reaction:</header>
<div class="table-item">
<input type="number" name="attr_reaction" value="1" min="1">
<button type="action" name="act_attrib" class="d6-button" title="Reaction Test"
id="reaction">L</button>
</div>
<div class="table-item">
<input type="number" name="attr_astralreaction" value="1" min="1">
<button type="action" name="act_attrib" class="d6-button" title="Astral Reaction Test"
id="astralreaction">L</button>
</div>
<header class="table-item-left">Initiative:</header>
<div class="table-item">
<input type="number" name="attr_initiative" value="1" min="1">d6+<span
name="attr_spirit-initp"></span>
<button title="Physical Initiative" class="d6-button" type="action" name="act_init"
id="spiritinit">L</button>
</div>
<div class="table-item">
<input type="number" name="attr_initiative_max" value="1" min="1">d6+<span
name="attr_astralreaction"></span>
<button title="Astral Initiative" class="d6-button" type="action" name="act_init"
id="astralinit">L</button>
</div>
</div>
<div class="walk-run">
<input type="hidden" name="attr_run" value=0 />
<input type="hidden" name="attr_walk" value=0 />
<header class="table-item-left">Walking Rate:</header>
<div class="table-item"><span class="numberspan" name="attr_walk"></span></div>
<div class="table-item">meters per combat turn</div>
<header class="table-item-left">Running Rate:</header>
<div class="table-item"><span class="numberspan" name="attr_run"></span></div>
<div class="table-item">meters per combat turn</div>
</div>
<div class="SRH3">Dice Pools</div>
<div class="dice-pools">
<header class="table-top-left">Pool</header>
<header class="table-top-mid">Calculated</header>
<header class="table-top-mid">Mods</header>
<header class="table-top-right">Final</header>
<div class="table-item-left">Combat</div>
<div class="table-item"><span name="attr_combatpool-base"></span></div>
<div class="table-item"><input type="number" name="attr_combatpool-mods" value=0></div>
<div class="table-item"><span name="attr_combatpool"></span></div>
<div class="table-item-left">Spell</div>
<div class="table-item"><span name="attr_spellpool-base"></span></div>
<div class="table-item"><input type="number" name="attr_spellpool-mods" value=0></div>
<div class="table-item"><span name="attr_spellpool"></span></div>
<div class="table-item-left">Hacking</div>
<div class="table-item"><span name="attr_hackingpool-base"></span></div>
<div class="table-item"><input type="number" name="attr_hackingpool-mods" value=0></div>
<div class="table-item"><span name="attr_hackingpool"></span></div>
<div class="table-item-left">Control</div>
<div class="table-item"><span name="attr_controlpool-base"></span></div>
<div class="table-item"><input type="number" name="attr_controlpool-mods" value=0></div>
<div class="table-item"><span name="attr_controlpool"></span></div>
<div class="table-item-left">Astral</div>
<div class="table-item"><span name="attr_astralpool-base"></span></div>
<div class="table-item"><input type="number" name="attr_astralpool-mods" value=0></div>
<div class="table-item"><span name="attr_astralpool"></span></div>
<div class="table-item-left">Task</div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item"><input type="number" name="attr_taskpool" value=0></div>
</div>
</div>
<div class="npc-chars-only">
<div class="SRH3">Karma</div>
<div class="karma-pool">
<header class="table-top-left">Karma Pool:</header>
<div class="table-top-right karma-max">
<input type="number" name="attr_karma-pool" value=0>
/
<input type="number" name="attr_karma-pool-used" value=0>
</div>
<header class="table-item-left">Good Karma:</header>
<div class="table-item"><input type="number" name="attr_karma-good" value=0 /></div>
<header class="table-item-left">Professional Rating:</header>
<div class="table-item"><input type="number" name="attr_prorating" /></div>
</div>
</div>
</div>
</div>
<div class="sheet-skills">
<!-- Skills Tab -->
<div class="SRH2">Skills/Edges/Flaws</div>
<div class="skills-edges">
<div class="text-center">
<div class="SRH4">Skills</div>
<div class="skills-table">
<header class="table-top-left">Name</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Pool</header>
<header class="table-top-right">Roll</header>
</div>
<fieldset class="repeating_skills">
<div class="skills-table">
<div class="table-item-left"><input type="text" name="attr_skillname" class="myweapontxt"></div>
<div class="table-item"><input type="number" name="attr_skillrating" min=1 value=1></div>
<div class="table-item"><select name="attr_pool" class="mediumselect2">
<option SELECTED value="none">None</option>
<option value="combat">Combat</option>
<option value="task">Task</option>
<option value="hacking">Hacking</option>
<option value="control">Control</option>
<option value="spell">Spell</option>
<option value="astral">Astral</option>
</select></div>
<div class="table-item"><button class="d6-button" type="action" name="act_skills">L</button></div>
</div>
</fieldset>
</div>
<div class="text-center">
<div class="SRH4">Edges</div>
<div class="edges-table">
<header class="table-top-left">Type</header>
<header class="table-top-right">Rating</header>
</div>
<fieldset class='repeating_edges'>
<div class="edges-table">
<div class="table-item-left"><input type="text" name="attr_name"></div>
<div class="table-item"><input type="number" name="attr_rating"></div>
</div>
</fieldset>
</div>
<div class="text-center">
<div class="SRH4">Flaws</div>
<div class="edges-table">
<header class="table-top-left">Type</header>
<header class="table-top-right">Rating</header>
</div>
<fieldset class='repeating_flaws'>
<div class="edges-table">
<div class="table-item-left"><input type="text" name="attr_name"></div>
<div class="table-item"><input type="number" name="attr_rating"></div>
</div>
</fieldset>
</div>
</div>
</div>
<div class='sheet-magic'>
<!-- Magic Tab -->
<input type='hidden' class='magictype' name='attr_magic-type' />
<input type='hidden' name='attr_sorcery-used' value=0 />
<input type='hidden' name='attr_sorcery-used-total' value=0 />
<input type='hidden' name='attr_conjuring-used' value=0 />
<input type='hidden' name='attr_conjuring-used' value=0 />
<input type='hidden' name='attr_spelldefensedice-used' value=0 />
<input type='hidden' class='astralattributes-switch' name='attr_astralattributesswitch' value="show" />
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="spells-status">
<div class="spells-status-tracking">
<div></div>
<div>Stacked</div>
<div>Sustained</div>
<div></div>
<div>Max</div>
<div>Used</div>
<div></div>
<div>Max</div>
<div>Defense</div>
<div>Used</div>
<div></div>
<div>Max</div>
<div>Defense</div>
<div>Used</div>
<div></div>
<div>Max</div>
<div>Used</div>
<div>Spells</div>
<div><input type="number" name='attr_spellstack' class="smallnumber" min=0 value=0></div>
<div><input type="number" name='attr_spellsus' min=0 value=0></div>
<div>Spell Defense</div>
<div><input type="number" name='attr_spelldefensedice' min=0 value=0></div>
<div><span name="attr_spelldefensedice-used"></span></div>
<div>Sorcery</div>
<div><span class="sorcery-over" name="attr_sorcery"></span></div>
<div><input type="number" name="attr_sorcery-defense" min=0 value=0></input></div>
<div>
<input type='hidden' class='sorcery-over' name='attr_sorcery-over' />
<span class="sorcery-over" name="attr_sorcery-used-total"></span>
</div>
<div>Spell Pool</div>
<div><span name="attr_spellpool"></span></div>
<div><input type="number" name="attr_spellpool-defense" min=0 value=0></input></div>
<div>
<input type='hidden' class='spellpool-over' name='attr_spellpool-over' />
<span class="spellpool-over" name="attr_spellpool-used-total"></span>
</div>
<div>Conjuring</div>
<div><span name="attr_conjuring"></span></div>
<div><span name="attr_conjuring-used"></span></div>
</div>
<div class="spells-status-buttons">
<div title="Miscelaneous Modifiers for Spell Casting and Conjuring">Misc. Modifiers: <input type="number"
name='attr_spellmisc' min=0 value=0></div>
<div>Defend: </div><button title="Spell Defense" type="action" class="d6-button" name='act_spelldefense'
id="spelldefense">L</button>
<div>Dispell: </div><button title="Cancel an existing spell" type="action" class="d6-button"
name='act_dispell' id="dispelling">L</button>
<div>Summon: </div><button title="Summon a Spirit or Element" type="action" class="d6-button"
name='act_conjure' id="summoning">L</button>
<div>Banish: </div><button title="Banish a Spirit or Element" type="action" class="d6-button"
name='act_conjure' id="banishing">L</button>
<div>Control: </div><button title="Take Control of a Spirit or Element" type="action" class="d6-button"
name='act_conjure' id="spiritcontrol">L</button>
</div>
</div>
<div class="spells-spirit-status">
<div>Spells Stacked: <input type="number" name='attr_spellstack' class="smallnumber" min=0 value=0></div>
<div>Spells Sustained: <input type="number" name='attr_spellsus' min=0 value=0></div>
<div title="Miscelaneous Modifiers for Spell Casting and Conjuring">Misc. Modifiers: <input type="number"
name='attr_spellmisc' min=0 value=0></div>
<div>Dispell: </div><button title="Cancel an existing spell" type="action" class="d6-button" name='act_dispell'
id="dispelling">L</button>
<div>Resist Banish: </div><button title="Resist a Banishing action by a Mage/Shaman " type="action"
class="d6-button" name='act_resistbanish' id="resistbanish">L</button>
</div>
<div class="astralattributes-show">
<div class="SRH3">Astral Space
<button class="switch-button-show" type="action" name="act_astralattributesswitch">Show</button>
</div>
</div>
<div class="astralattributes-hide">
<div class="SRH3">Astral Space
<button class="switch-button-hide" type="action" name="act_astralattributesswitch">Hide</button>
</div>
</div>
<input type="hidden" name="attr_astralreaction" value=0>
<div class="astralattributes">
<div class="astralspace">
<div><b>Astral State: <select name="attr_astralstate">
<option selected>Physical</option>
<option>Astral Perception</option>
<option>Astral Projection</option>
</select>
</div>
<div class="text-mid"><b>Astral Reaction:</div>
<div class="text-mid"><span class="numberspan" name="attr_astralreaction" /></div>
<div class="text-mid"><button type="action" name="act_attrib" class="d6-button" title="Astral Reaction Test"
id="astralreaction">L</button></div>
<div class="text-mid"><b>Astral Initiative:</div>
<div class="text-mid">1d6+<span class="numberspan" name="attr_astralreaction" /></div>
<div class="text-mid">
<button title="Astral Initiative" class="d6-button" type="action" name="act_init"
id="astralinit">L</button>
</div>
<div></div>
</div>
<div class="astralcombat">
<div><b>Astral Combat:</div>
<div class="text-mid"><button class="attack-dice" id="astralattack" type="action" name="act_melee"
title="Astral Combat"></button></div>
<div>Weapon Focus: <span name="attr_weaponfocus-name"></span></div>
<div>Enabled <input type="checkbox" name="attr_weaponfocus-equipped" checked></div>
<div>Force:<span name="attr_weaponfocus-force"></span></div>
</div>
<br>
</div>
<input type='hidden' class='sorceryskills-switch' name='attr_sorceryskillsswitch' value="show" />
<div class="sorceryskills-show">
<div class="SRH3">Magic Skills and Configuration
<button class="switch-button-show" type="action" name="act_sorceryskillsswitch">Show</button>
</div>
</div>
<div class="sorceryskills-hide">
<div class="SRH3">Magic Skills and Configuration
<button class="switch-button-hide" type="action" name="act_sorceryskillsswitch">Hide</button>
</div>
</div>
<div class="sorcery-skills">
<div class="sorcery-config">
<div></div>
<div><b>Adept<input type="radio" name="attr_magic-type" value="adept"></div>
<div><b>Mage<input type="radio" name="attr_magic-type" value="mage" selected></div>
<div><b>Shaman<input type="radio" name="attr_magic-type" value="shaman"></div>
<div><b>Aspected Mage<input type="radio" name="attr_magic-type" value="aspect"></div>
<div></div>
</div>
<div class="sorcery-table">
<div>
<input type="checkbox" name="attr_sorcery-spec-switch" class="sorcery-spec-switch hidden-checkbox"
value=1 />
<div class="sorcery-row table-top">
<header>Sorcery:</header>
<input type="number" name="attr_sorcery" value=0>
<button class="d6-button" type="action" name="act_skilltest" id="sorcery spell" title="Spell Casting Test">L</button>
<div class="skillspec">Specialize</div>
<input type="checkbox" name="attr_sorcery-spec-switch" class="sorcery-spec-switch" value=1 />
</div>
<div class="sorcery-spec-off table-row">
<div class="magic-skills-table">
<div class="table-item-left">Spellcasting:</div>
<div class="table-item"><span name="attr_spellcasting"></span></div>
<div class="table-item-left">Spell Defense:</div>
<div class="table-item"><span name="attr_spelldefense"></span></div>
<div class="table-item-left">Dispelling:</div>
<div class="table-item"><span name="attr_dispelling"></span></div>
<div class="table-item-left">Astral Combat:</div>
<div class="table-item"><span name="attr_astralcombat"></span></div>
<div class="table-item-left">Ritual Magic:</div>
<div class="table-item"><span name="attr_ritualsorcery"></span></div>
</div>
</div>
<div class="sorcery-spec-on">
<div class="magic-skills-table table-row">
<header class="table-item-left">Spellcasting:</header>
<div class="table-item"><input type="number" name="attr_spellcasting">
<button class="d6-button" type="action" name="act_skilltest" id="spellcasting spell"
title="Spell Casting Test">L</button>
</div>
<header class="table-item-left">Spell Defense:</header>
<div class="table-item"><input type="number" name="attr_spelldefense">
<button class="d6-button" type="action" name="act_skilltest" id="spelldefense spell"
title="Spell Defense Test">L</button>
</div>
<header class="table-item-left">Dispelling:</header>
<div class="table-item"><input type="number" name="attr_dispelling">
<button class="d6-button" type="action" name="act_skilltest" id="dispelling spell"
title="Dispelling Test">L</button>
</div>
<header class="table-item-left">Astral Combat:</header>
<div class="table-item"><input type="number" name="attr_astralcombat">
<button class="d6-button" type="action" name="act_skilltest" id="astralcombat astral"
title="Ritual Magic Test">L</button>
</div>
<header class="table-item-left">Ritual Magic:</header>
<div class="table-item"><input type="number" name="attr_ritualsorcery">
<button class="d6-button" type="action" name="act_skilltest" id="ritualsorcery spell"
title="Ritual Magic Test">L</button>
</div>
</div>
</div>
</div>
<div>
<input type="checkbox" style="opacity:0;" class="conjuring-spec-switch hidden-checkbox"
name="attr_conjuring-spec-switch" value="1" />
<div class="sorcery-row table-top">
<header>Conjuring:</header>
<div><input type="number" name="attr_conjuring" value=0 /></div>
<div><button class="d6-button" type="action" name="act_skilltest" id="conjuring spell"
title="Spirit Conjuring/Control/Banishing Test">L</button></div>
<div class="skillspec">Specialize</div>
<div class="text-center"><input type="checkbox" class="conjuring-spec-switch"
name="attr_conjuring-spec-switch" value="1" /></div>
</div>
<div class="conjuring-spec-off">
<div class="magic-skills-table">
<div class="table-item-left">Summoning:</div>
<div class="table-item"><span name="attr_summoning">
</div>
<div class="table-item-left">Banishing:</div>
<div class="table-item"><span name="attr_banishing">
</div>
<div class="table-item-left">Controlling:</div>
<div class="table-item"><span name="attr_spiritcontrol"></div>
</div>
</div>
<div class="conjuring-spec-on">
<div class="magic-skills-table">
<header class="table-item-left">Summoning:</header>
<div class="table-item"><input type="number" name="attr_summoning">
<button class="d6-button" type="action" name="act_skilltest" id="summoning spell"
title="Spirit Summoning Test">L</button>
</div>
<header class="table-item-left">Banishing:</header>
<div class="table-item"><input type="number" name="attr_banishing">
<button class="d6-button" type="action" name="act_skilltest" id="banishing spell"
title="Spirit Banishing Test">L</button>
</div>
<header class="table-item-left">Controlling:</header>
<div class="table-item"><input type="number" name="attr_spiritcontrol">
<button class="d6-button" type="action" name="act_skilltest" id="spiritcontrol spell"
title="Spirit Controlling Test">L</button>
</div>
</div>
</div>
</div>
<div>
<input type="checkbox" style="opacity:0;" class="auraread-spec-switch hidden-checkbox"
name="attr_auraread-spec-switch" value="1" />
<div class="sorcery-row table-top">
<header>Aura Reading:</header>
<div><input type="number" name="attr_aurareading" value=0></div>
<div><button class="d6-button" type="action" name="act_skilltest" id="aurareading spell"
title="Aura Reading Test">L</button></div>
<div class="skillspec">Specialize</div>
<div class="text-center"><input type="checkbox" class="auraread-spec-switch"
name="attr_auraread-spec-switch" value="1" /></div>
</div>
<div class="auraread-spec-off">
<div class="magic-skills-table">
<div class="table-item-left">Auras:</div>
<div class="table-item"><span name="attr_areadauras">
</div>
<div class="table-item-left">Signatures:</div>
<div class="table-item"><span name="attr_areadsignatures">
</div>
<div class="table-item-left">Sorcery:</div>
<div class="table-item"><span name="attr_areadsorcery">
</div>
<div class="table-item-left">Conjuring:</div>
<div class="table-item"><span name="attr_areadconjuring">
</div>
</div>
</div>
<div class="auraread-spec-on">
<div class="magic-skills-table">
<header class="table-item-left">Auras:</header>
<div class="table-item"><input type="number" name="attr_areadauras" value=0>
<button class="d6-button" type="action" name="act_skilltest" id="areadauras spell"
title="Aura Reading Test">L</button>
</div>
<header class="table-item-left">Signatures:</header>
<div class="table-item"><input type="number" name="attr_areadsignatures">
<button class="d6-button" type="action" name="act_skilltest" id="areadsignatures spell"
title="Aura Signature Reading Test">L</button>
</div>
<header class="table-item-left">Sorcery:</header>
<div class="table-item"><input type="number" name="attr_areadsorcery">
<button class="d6-button" type="action" name="act_skilltest" id="areadsorcery spell"
title="Aura Sorcery Reading Test">L</button>
</div>
<header class="table-item-left">Conjuring:</header>
<div class="table-item"><input type="number" name="attr_areadconjuring">
<button class="d6-button" type="action" name="act_skilltest" id="areadconjuring spell"
title="Aura Conjuring Reading Test">L</button>
</div>
</div>
</div>
</div>
<div>
<div class="magic-skills-table table-top">
<header class="text-mid">Magic:</header>
<div class="sidebyside"><span name="attr_magic"></span><button class="d6-button" type="action"
name="act_skilltest" id="magic spell" title="Magic Test">L</button></div>
<header class="text-mid">Drain:</header>
<div class="sidebyside"><span name="attr_willpower_max"></span><button class="d6-button"
type="action" name="act_skilltest" id="willpower|max spell" title="Drain Test">L</button>
</div>
<header class="text-mid">Enchanting:</header>
<div class="sidebyside"><input type="number" name="attr_enchanting" value=0>
<button class="d6-button" type="action" name="act_skilltest" id="enchanting spell"
title="Enchanting Test">L</button>
</div>
<header class="text-mid">Divining:</header>
<div class="sidebyside"><input type="number" name="attr_divining" value=0>
<button class="d6-button" type="action" name="act_skilltest" id="divining spell"
title="Divining Test">L</button>
</div>
<header class="text-mid">Centering:</header>
<div class="sidebyside"><input type="number" name="attr_centering" value=0>
<button class="d6-button" type="action" name="act_skilltest" id="centering spell"
title="Centering Test">L</button>
</div>
<header class="text-mid">Creative Skill:</header>
<input type="text" name="attr_centeringskillname">
</div>
</div>
</div>
<br>
</div>
<div class="adept-only">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="hide-spirit-critter">
<input type='hidden' class='adeptpowers-switch' name='attr_adeptpowersswitch' value="show" />
<div class="adeptpowers-show">
<div class="SRH3">Adept Powers
<button class="switch-button-show" type="action" name="act_adeptpowersswitch">Show</button>
</div>
</div>
<div class="adeptpowers-hide">
<div class="SRH3">Adept Powers
<button class="switch-button-hide" type="action" name="act_adeptpowersswitch">Hide</button>
</div>
</div>
<div class="adept-powers">
<div class="adept-skills-table">
<header class="table-top-left">Power</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Cost</header>
<header class="table-top-mid">Activate</header>
<header class="table-top-right">Notes</header>
</div>
<div class="adept-skills-table">
<header class="table-item-left">Improved Reflexes: </header>
<div class="table-item"><input type="number" name="attr_adeptimprovedreflexes" value=0 /></div>
<div class="table-item"><input type="number" name="attr_adeptimprovedreflexescost" value=0 /></div>
<div class="table-item"><input type="checkbox" name="attr_adeptimprovedreflexesactive"></div>
<div class="table-item"><input type="text" name="attr_adeptimprovedreflexesnotes"></div>
</div>
<div class="adept-skills-table">
<header class="table-item-left">Body Boost: </header>
<div class="table-item"><input type="number" name="attr_adeptbodyboost" value=0 /></div>
<div class="table-item"><input type="number" name="attr_adeptbodyboostcost" value=0></div>
<div class="table-item"><button class="d6-button" type="action" name="act_adeptpower" id="body"
title="Boost Body">L</button></div>
<div class="table-item"><input type="text" name="attr_aadeptstrengthboostnotes"></div>
</div>
<div class="adept-skills-table">
<header class="table-item-left">Strength Boost: </header>
<div class="table-item"><input type="number" name="attr_adeptstrboost" value=0 /></div>
<div class="table-item"><input type="number" name="attr_adeptstrboostcost" value=0></div>
<div class="table-item"><button class="d6-button" type="action" name="act_adeptpower" id="strength"
title="Boost Strength">L</button></div>
<div class="table-item"><input type="text" name="attr_adeptstrboostnotes"></div>
</div>
<div class="adept-skills-table">
<header class="table-item-left">Agility Boost: </header>
<div class="table-item"><input type="number" name="attr_adeptquicknessboost" value=0></div>
<div class="table-item"><input type="number" name="attr_adeptagilityboostcost" value=0></div>
<div class="table-item"><button class="d6-button" type="action" name="act_adeptpower" id="quickness"
title="Boost Quickness">L</button></div>
<div class="table-item"><input type="text" name="attr_aadeptagilityboostnotes"></div>
</div>
<div class="adept-skills-table">
<header class="table-item-left">Pain Resistance: </header>
<div class="table-item"><input type="number" name="attr_adeptpainres" value=0></div>
<div class="table-item"><input type="number" name="attr_adeptpainrescost" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_adeptpainresactive"></div>
<div class="table-item"><input type="text" name="attr_adeptpainresnotes"></div>
</div>
<fieldset class="repeating_adeptpowers">
<div class="adept-skills-table">
<div class="table-item-left"><input type="text" name="attr_adeptpower" style="width:150px;">
</div>
<div class="table-item"><input type="number" name="attr_powerrating" min=1 "></div>
<div class=" table-item"><input type="number" name="attr_powercost" step=0.25 min=0.25"></div>
<div class="table-item"><input type="checkbox" name="attr_poweractivated"></div>
<div class="table-item"><input type="text" name="attr_powernotes"></div>
</div>
</fieldset>
</div>
</div>
</div>
<input type='hidden' class='spells-switch' name='attr_spellsswitch' value="show" />
<div class="spells-show">
<div class="SRH3">Spells
<button class="switch-button-show" type="action" name="act_spellsswitch">Show</button>
</div>
</div>
<div class="spells-hide">
<div class="SRH3">Spells
<button class="switch-button-hide" type="action" name="act_spellsswitch">Hide</button>
</div>
</div>
<div class="spells-section">
<div class="spells-table">
<div class="magic-spells-table">
<div class="table-top-left header">Name</div>
<div class="table-top-mid header" title="Spell Category">Category</div>
<div class="table-top-mid header" title="Specialization">Spec.</div>
<div class="table-top-mid header" title="Force of spell">Force</div>
<div class="table-top-mid header" title="Mana or Physical Spell">Type</div>
<div class="table-top-mid header" title="Line of Sight, Touch or AOE">Range</div>
<div class="table-top-mid header" title="attribute to target">Target</div>
<div class="table-top-mid header" title="Spell Damage">Dmg.</div>
<div class="table-top-mid header" title="Spell Durration">Dur.</div>
<div class="table-top-mid header" title="+/- modifier for Force/2 drain">Drain</div>
<div class="table-top-mid header">Drain Damage</div>
<div class="table-top-mid header">Roll</div>
<div class="table-top-right header">Description</div>
</div>
<fieldset class="repeating_spells">
<div class="magic-spells-row">
<input class="myweapontxt" type="text" name="attr_name">
<select class="mediumselect2" name="attr_spellcategory">
<option SELECTED>Combat</option>
<option>Health</option>
<option>Detection</option>
<option>Illusion</option>
<option>Elemental</option>
<option>Control</option>
<option>Telekinetic</option>
<option>Transformation</option>
</select>
<input type="number" name="attr_specialized" value=0>
<input type="number" name="attr_force" min="1" value=1>
<select name="attr_spelltype" class="mediumselect2">
<option value=0>Mana</option>
<option value=0>Physical</option>
</select>
<select class="mediumselect2" type="text" name="attr_range">
<option SELECTED title="Line of Sight Spell">LoS</option>
<option title="Area of Effect Spell">AoE</option>
<option title="Must Touch Target">Touch</option>
</select>
<select name="attr_target" class="mediumselect2">
<option value="@{target|Target|body|max}">Body</option>
<option value="@{target|Target|willpower|max}">Willpower</option>
<option value="@{target|Target|intelligence|max}">Intelligence</option>
<option value="@{target|Target|targetMove}">Elemental</option>
<option value="?{Target Number|4}">Target Number</option>
<option value="@{target|Target|force}">Force</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
<select name="attr_damage" class="mediumselect2">
<option value=0 SELECTED title="Choose for non combat spell">N/A</option>
<option value="?{Damage Level|M,2|S,3|L,1|D,4}"
title="Choose Damage at time of roll, default for combat spells">Choose</option>
<option value=1>Light</option>
<option value=2>Medium</option>
<option value=3>Serious</option>
<option value=4>Deadly</option>
<option value=10>Light(s)</option>
<option value=11>Medium(s)</option>
<option value=12>Serious(s)</option>
<option value=13>Deadly(s)</option>
</select>
<select name="attr_duration" class="mediumselect2">
<option SELECTED>I</option>
<option>S</option>
<option>P</option>
</select>
<input type="number" title="modifier to force/2 for drain resistance test" name="attr_drain"
value=0>
<select name="attr_drainlvl" class="mediumselect2">
<option value=1>Light</option>
<option value="dmglvl" SELECTED>Damage Lvl</option>
<option value=2>Medium</option>
<option value=3>Serious</option>
<option value=4>Deadly</option>
<option title="stages drain damage up 1 level from damage level of spell" value="dmglvl + 1">
Damage +1</option>
<option title="stages drain damage up 2levels from damage level of spell" value="dmglvl + 2">
Damage +2</option>
<option title="stages drain damage down 1 level from damage level of spell" value="dmglvl - 1">
Damage -1</option>
<option title="stages drain damage down 2 levels from damage level of spell" value="dmglvl - 2">
Damage -2</option>
</select>
<button class="d6-button" type="action" name="act_cast" id="spell" title="Cast Spell">L</button>
<input type="text" name="attr_description" class="myweapontxt2">
</div>
</fieldset>
</div>
<br>
</div>
<input type='hidden' class='foci-switch' name='attr_fociswitch' value="show" />
<div class="foci-show">
<div class="SRH3">Fetishes and Foci
<button class="switch-button-show" type="action" name="act_fociswitch">Show</button>
</div>
</div>
<div class="foci-hide">
<div class="SRH3">Fetishes and Foci
<button class="switch-button-hide" type="action" name="act_fociswitch">Hide</button>
</div>
</div>
<div class="fetish-foci">
<div class="foci-table">
<header class="table-top-left">Type</header>
<header class="table-top-mid">Category</header>
<header class="table-top-mid">Force</header>
<header class="table-top-right">Quantity</header>
</div>
<fieldset class="repeating_foci">
<div class="foci-table">
<select name="attr_type" class="mediumselect2">
<option value="none"></option>
<option>Expendable</option>
<option>Reusable</option>
<option>Power Focus</option>
<option>Spirit Focus</option>
</select>
<input type='hidden' class='focitype' name='attr_type' />
<div class="powerfocus">
<input name="attr_category" disabled value="power" />
</div>
<div class="reusable">
<select name="attr_category" class="mediumselect2">
<option value="none"></option>
<option value="combat">Combat</option>
<option value="health">Health</option>
<option value="detection">Detection</option>
<option value="illusion">Illusion</option>
<option value="elemental">Elemental</option>
<option value="control">Control</option>
<option value="telekinetic">Telekinetic</option>
<option value="transformation">Transformation</option>
</select>
</div>
<div class="spiritfocus">
<input type='hidden' class='magictype' name='attr_magic-type' />
<div class="mage-foci"><select name="attr_category" class="mage-foci mediumselect2">
<option value="none"></option>
<option value="fire-elem-focus">Fire</option>
<option value="water-elem-focus">Water</option>
<option value="earth-elem-focus">Earth</option>
<option value="air-elem-focus">Air</option>
<option value="city-spirit-focus">City Spirit</option>
<option value="field-spirit-focus">Field Spirit</option>
<option value="hearth-spirit-focus">Hearth Spirit</option>
<option value="desert-spirit-focus">Desert Spirit</option>
<option value="forest-spirit-focus">Forest Spirit</option>
<option value="mountain-spirit-focus">Mountain Spirit</option>
<option value="prairie-spirit-focus">Prairie Spirit</option>
<option value="mist-spirit-focus">Mist Spirit</option>
<option value="storm-spirit-focus">Storm Spirit</option>
<option value="wind-spirit-focus">Wind Spirit</option>
<option value="lake-spirit-focus">Lake Spirit</option>
<option value="river-spirit-focus">River Spirit</option>
<option value="sea-spirit-focus">Sea Spirit</option>
<option value="gnome-spirit-focus">Gnome</option>
<option value="manitous-spirit-focus">Manitous</option>
<option value="salamander-spirit-focus">Salamander</option>
<option value="sylphs-spirit-focus">Sylphs</option>
<option value="ancestor-spirit-focus">Ancestor</option>
</select></div>
</div>
<input type="number" name="attr_force" value=0 min=0 />
<div class="expendable-foci">
<input type="number" name="attr_qty" value=0 min=0 />
</div>
<div class="reusable-foci">
<input type="number" name="attr_qty" value=1 disabled />
</div>
<input type='hidden' name='attr_fociresource' />
</div>
</fieldset>
<br>
<input type='hidden' class='weaponfocus-show' name='attr_weaponfocus-show' value="false" />
<div class="weaponfocus-header">
<div class="table-top-left">Equip</div>
<div class="table-top-mid">Name</div>
<div class="table-top-mid">Reach</div>
<div class="table-top-mid">Skill</div>
<div class="table-top-mid">Conceal</div>
<div class="table-top-mid">Force</div>
<div class="table-top-mid">Power</div>
<div class="table-top-mid">Damage</div>
<div class="table-top-mid">Specialize</div>
<div class="table-top-mid">Attack</div>
<div class="table-top-right">Notes</div>
</div>
<div class="weaponfocus-attributes">
<div class="text-mid"><input type="checkbox" name="attr_weaponfocus-equipped" checked></div>
<input class="myweapontxt" type="text" name="attr_weaponfocus-name" value="Weapon Focus">
<input type="number" name="attr_weaponfocus-reach" value=0>
<select class="mediumselect2" name="attr_weaponfocus skill">
<option value="@{edged}" SELECTED>Edged</option>
<option value="@{clubs}">Club</option>
<option value="@{poles}">Pole Arm</option>
<option value="@{whips}">Whip</option>
</select>
<input type="number" name="attr_weaponfocus-conceal" value=0>
<input type="number" name="attr_weaponfocus-force" value=0>
<input type="number" name="attr_weaponfocus-pawer" value=0>
<select name="attr_weaponfocus-damage" class="mediumselect2">
<option>L</option>
<option SELECTED>M</option>
<option>S</option>
<option>D</option>
</select>
<input type="number" name="attr_weaponfocus-specialized" value=0 \>
<div><button class="attack-dice" id="weaponfocus" type="action" name="act_melee"
title="Melee Attack"></button></div>
<input class="myweapontxt" type="text" name="attr_weaponfocus-notes">
<br>
</div>
<input type='hidden' class='magicinitiate-switch' name='attr_magicinitiateswitch' value="show" />
<div class="magicinitiate-show">
<div class="SRH3">Initiation and Metamagic
<button class="switch-button-show" type="action" name="act_magicinitiateswitch">Show</button>
</div>
</div>
<div class="magicinitiate-hide">
<div class="SRH3">Initiation and Metamagic
<button class="switch-button-hide" type="action" name="act_magicinitiateswitch">Hide</button>
</div>
</div>
<div class="magicinitiate">
<div class="SRH4">Initiate Grade:<input type="number" name="attr_initiategrade" value=0></div>
<div class="metamagic-table">
<header class="table-top-left">Metamagic</header>
<header class="table-top-right">Notes</header>
</div>
<fieldset class="repeating_metamagic">
<div class="metamagic-table">
<div class="table-item-left"><input type="text" name="attr_metamagicname" /></div>
<div class="table-item"><input type="text" name="attr_metamagicnotes" /></div>
</div>
</fieldset>
<br>
</div>
<input type='hidden' class='geas-switch' name='attr_geasswitch' value="show" />
<div class="geas-show">
<div class="SRH3">Geas
<button class="switch-button-show" type="action" name="act_geasswitch">Show</button>
</div>
</div>
<div class="geas-hide">
<div class="SRH3">Geas
<button class="switch-button-hide" type="action" name="act_geasswitch">Hide</button>
</div>
</div>
<div class="geas">
<div class="geas-table">
<header class="table-top-left">Geas Type</header>
<header class="table-top-right">Geas Notes</header>
</div>
<fieldset class='repeating_geas'>
<div class="geas-table">
<div class="table-item-left"><input type="text" name="attr_geastype"></div>
<div class="table-item"><input type="text" name="attr_geasnotes"></div>
</div>
</fieldset>
<br>
</div>
<input type='hidden' class='totem-switch' name='attr_totemswitch' value="show" />
<div class="totem-show">
<div class="SRH3">Totem/Abilities
<button class="switch-button-show" type="action" name="act_totemswitch">Show</button>
</div>
</div>
<div class="totem-hide">
<div class="SRH3">Totem/Abilities
<button class="switch-button-hide" type="action" name="act_totemswitch">Hide</button>
</div>
</div>
<div class="totem">
<div class="totem-table">
<header class="table-top-left">Totem</header>
<header class="table-top-mid">Environment</header>
<header class="table-top-mid">Advantages</header>
<header class="table-top-right">Disadvantages</header>
<div class="table-item-left"><input type='text' name="attr_totem" class="myweapontxt2"></div>
<div class="table-item"><input type='text' name="attr_totemenv" class="myweapontxt2"></div>
<div class="table-item"><input type="text" name="attr_totemadv" class="myweapontxt2"></div>
<div class="table-item"><input type="text" name="attr_totemdisadv" class="myweapontxt2"></div>
</div>
</div>
</div>
</div>
<div class='sheet-decks'>
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<!--Decks Tab -->
<div class="matrix-show-deck">
<div class="SRH2">Cyberdecks and Utilities</div>
</div>
<div class="matrix-show-frame">
<div class="SRH2">Smart Frames and Agents</div>
</div>
<div class="deck-combat">
<div>
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="SRH3">Cyber Combat</div>
<div></div>
<div class="matrix-combat-condition">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="matrix-show-deck">
<div class="SRH4">Persona</div>
</div>
<div class="matrix-show-frame">
<div class="SRH4">Core</div>
</div>
<div>Undamaged</div>
<div>Light Damage</div>
<div>Moderate Damage</div>
<div>Serious Damage</div>
<div>Crashed</div>
<div class="SRH4">Condition</div>
<div>
<input type="radio" name="attr_matrix-damage" value=0 CHECKED>
</div>
<div>
<input type="radio" name="attr_matrix-damage" value=1>
<input type="radio" name="attr_matrix-damage" value=2>
</div>
<div>
<input type="radio" name="attr_matrix-damage" value=3>
<input type="radio" name="attr_matrix-damage" value=4>
<input type="radio" name="attr_matrix-damage" value=5>
</div>
<div>
<input type="radio" name="attr_matrix-damage" value=6>
<input type="radio" name="attr_matrix-damage" value=7>
<input type="radio" name="attr_matrix-damage" value=8>
<input type="radio" name="attr_matrix-damage" value=9>
</div>
<div><input type="radio" name="attr_matrix-damage" value=100></div>
</div>
<div><input type="hidden" name="attr_hackingpool-icsuppress" value=0></div>
<div class="matrix-show-deck">
<div class="deck-summary">
<div class="text-mid">DNI</div>
<div>Hot ASIST</div>
<div>Reality Filter</div>
<div>IC Suppressed</div>
<div class="text-mid">Icon Status</div>
<div class="text-mid">Host/Grid Rating</div>
<div><input checked="checked" type="checkbox" name="attr_deck-dni" value=1></div>
<div><input type="checkbox" name="attr_deck-asist" value=1> </div>
<div><input type="checkbox" name="attr_deck-realityfilter" value=1></div>
<div><input type="number" name="attr_deck-icsuppressed" value=0></div>
<select name="attr_matrix-iconstatus" class="mediumselect2">
<option SELECTED>Intruder</option>
<option>Legitimate</option>
</select>
<select name="attr_deck-systemrating" class= "mediumselect2">
<option SELECTED>Unknown</option>
<option>Blue</option>
<option>Green</option>
<option>Orange</option>
<option>Red</option>
</select>
</div>
</div>
<div class="matrix-show-frame">
<div class="frame-summary">
<div>Pilot Rating</div>
<div>Utility Payload</div>
<div>IC Suppressed</div>
<div class="text-mid">Icon Status</div>
<div class="text-mid">Host/Grid Rating</div>
<div><input type="number" name="attr_decking" min=0 value=0> </div>
<div><input type="number" name="attr_deck-utilitypayload" min=0 value=0></div>
<div><input type="number" name="attr_deck-icsuppressed" min=0 value=0></div>
<select name="attr_matrix-iconstatus" style="width: 85px;">
<option SELECTED>Intruder</option>
<option>Legitimate</option>
</select>
<select name="attr_deck-systemrating" class= "mediumselect2">
<option SELECTED>Unknown</option>
<option>Blue</option>
<option>Green</option>
<option>Orange</option>
<option>Red</option>
</select>
</div>
</div>
<input type='hidden' name='attr_deck-tn' value=0 />
<input type='hidden' name='attr_deck-util-size-loaded' value=0 />
<input type='hidden' name='attr_deck-util-rating-loaded' value=0 />
<input type='hidden' name='attr_deck-tn' value=0 />
<div class="deck-combat-system">
<div>Initiative <span name=attr_deck-initiative></span>d6 + <span name=attr_deck-reaction-final></span>
<input type='hidden' name='attr_deck-initiative' value=0 />
<button type="action" name="act_init" class="d6-button" title="Matrix Initiative"
id="matrixinit">L</button>
</div>
End Turn<button type="action" name="act_endturn" class="d6-button" title="End Combat Turn" id="endturn">L</button>
<div></div>
Sensor<button type="action" name="act_matrixmaneuvers" class="d6-button" title="Sensor Test"
id="matrixsensor">L</button>
<div></div>
Evade<button type="action" name="act_matrixmaneuvers" class="d6-button" title="Evade Detection"
id="matrixevade">L</button>
<div></div>
Parry<button type="action" name="act_matrixmaneuvers" class="d6-button" title="Parry Attack"
id="matrixparry">L</button>
<div></div>
Posistion<button type="action" name="act_matrixmaneuvers" class="d6-button" title="Position Attack"
id="matrixposition">L</button>
<div class="numberspan">Combat TN<span name="attr_deck-tn"></span></div>
Resist<button type="action" name="act_matrixresist" class="d6-button" title="Damage Resistance Test"
id="matrixresist">L</button>
<div></div>
Medic<button type="action" name="act_matrixmedic" class="d6-button" title="Medic Utility"
id="matrixmedic">L</button>
<div></div>
Decking<button type="action" name="act_matrixtest" class="d6-button" title="General Decking Test"
id="decking">L</button>
</div>
<br>
<div>Use Hacking Pool for IC supression<input type="checkbox" name="attr_deck-icsuppresspool" value=1
checked="checked"></div>
</div>
<div>
<div class="deck-summary-attributes">
<div></div>
<div></div>
<div>Full</div>
<div>Mods</div>
<div>Final</div>
<div class="mpcp-frame-toggle"><input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="matrix-show-deck">MPCP</div>
<div class="matrix-show-frame">Core</div>
</div>
<div><button type="action" name="act_matrixtest" class="d6-button" title="MPCP Test"
id="deck-mpcp-final">L</button></div>
<div><span name="attr_deck-mpcp-max"></span></div>
<div><input type="number" name="attr_deck-mpcp-mods" value=0></div>
<div><span name="attr_deck-mpcp-final"></span></div>
<div>Bod</div>
<div><button type="action" name="act_matrixtest" class="d6-button" title="Bod Test"
id="deck-bod-final">L</button></div>
<div> <span name="attr_deck-bod-max"></span></div>
<div><input type="number" name="attr_deck-bod-mods" value=0></div>
<div><span name="attr_deck-bod-final"></span></div>
<div>Evasion</div>
<div><button type="action" name="act_matrixtest" class="d6-button" title="Evasion Test"
id="deck-evasion-final">L</button></div>
<div> <span name="attr_deck-evasion-max"></span></div>
<div><input type="number" name="attr_deck-evasion-mods" value=0></div>
<div><span name="attr_deck-evasion-final"></span></div>
<div>Masking</div>
<div><button type="action" name="act_matrixtest" class="d6-button" title="Masking Test"
id="deck-masking-final">L</button></div>
<div> <span name="attr_deck-masking-max"></span></div>
<div><input type="number" name="attr_deck-masking-mods" value=0></div>
<div><span name="attr_deck-masking-final"></span></div>
<div>Sensors</div>
<div><button type="action" name="act_matrixtest" class="d6-button" title="Sensors Test"
id="deck-sensors-final">L</button></div>
<div> <span name="attr_deck-sensors-max"></span></div>
<div><input type="number" name="attr_deck-sensors-mods" value=0></div>
<div><span name="attr_deck-sensors-final"></span></div>
<div title="Detection Factor">Detect.F</div>
<div></div>
<div title="Detection Factor Maximum"> <span name="attr_deck-detection-max"></span></div>
<div><input type="number" name="attr_deck-detection-mods" value=0></div>
<div title="Detection Factor Final Modified Number"><span name="attr_deck-detection-final"></span></div>
</div>
<div class="deck-combat-modifiers">
<input type='hidden' name='attr_matrix-penalty' value=0 />
<div>Penalties: <span class="matrix-pens" name="attr_matrix-penalty"></span></div>
</div>
</div>
</div>
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="matrix-show-deck">
<div class='deck-memory-used'>
<div class="SRH4">Memory In Use:</div>
<div><input type='hidden' class='deck-mem-full' name='attr_deck-mem-overloaded' value=0 />
<span class="deck-overload" name="attr_deck-util-size-loaded"></span>
</div>
<div><button class="switch-button-hide" title="unload all utilities" type="action"
name="act_deck-utilities-unloadall">Reset</button></div>
<div>Hacking Pool: <span name="attr_hackingpool"></span></div>
<div>Hacking Pool Used:<input type='hidden' class='hackingpool-over' name='attr_hackingpool-over' /> <span class="hackingpool-over" name="attr_hackingpool-used"></span></div>
<input type='hidden' name='attr_matrix-penalty' value=0 />
<div>Penalties: <span class="matrix-pens" name="attr_matrix-penalty"></span></div>
</div>
</div>
<div class="matrix-show-deck">
<input type='hidden' class='deck-skills-switch' name='attr_deck-skills-switch' value="show" />
<div class="deck-skills-show">
<div class="SRH3">Computer skills
<button class="switch-button-show" type="action" name="act_deck-skills-switch">Show</button>
</div>
</div>
<div class="deck-skills-hide">
<div class="SRH3">Computer skills
<button class="switch-button-hide" type="action" name="act_deck-skills-switch">Hide</button>
</div>
</div>
<div class="deck-skills">
<input type="checkbox" style="opacity:0;" class="deck-spec-switch" name="attr_deck-spec-switch" value=1>
<div class="deck-skills-row table-top">
<header>Computer</header>
<input type="number" name="attr_computer" value=0>
<button class="d6-dice" type="action" name="act_skilltest" id="computer hacking"></button>
<div>specialize</div>
<input type="checkbox" class="deck-spec-switch" name="attr_deck-spec-switch" value=1>
</div>
<div class="deck-spec-off">
<div class="table-item-left">Hardware</div>
<div class="table-item"><span name="attr_computer"></div>
<div class="table-item-left">Decking</div>
<div class="table-item"><span name="attr_computer"></div>
<div class="table-item-left">Programming</div>
<div class="table-item"><span name="attr_computer"></div>
</div>
<div class="deck-spec-on">
<div class="table-item-left">Hardware</div>
<div class="table-item"><input type="number" name="attr_hardware">
<button class="d6-dice" type="action" name="act_skilltest" id="hardware hacking"></button>
</div>
<div class="table-item-left">Decking</div>
<div class="table-item"><input type="number" name="attr_decking">
<button class="d6-dice" type="action" name="act_skilltest" id="decking hacking"></button>
</div>
<div class="table-item-left">Programming</div>
<div class="table-item"><input type="number" name="attr_programming">
<button class="d6-dice" type="action" name="act_skilltest" id="programming hacking"></button>
</div>
</div><br>
</div>
</div>
<div class="matrix-show-deck">
<input type='hidden' class='deck-cyberdeck-switch' name='attr_deck-cyberdeck-switch' value="show" />
<div class="deck-cyberdeck-show">
<div class="SRH3">Cyberdeck
<button class="switch-button-show" type="action" name="act_deck-cyberdeck-switch">Show</button>
</div>
</div>
<div class="deck-cyberdeck-hide">
<div class="SRH3">Cyberdeck
<button class="switch-button-hide" type="action" name="act_deck-cyberdeck-switch">Hide</button>
</div>
</div>
</div>
<div class="matrix-show-frame">
<input type='hidden' class='deck-cyberdeck-switch' name='attr_deck-cyberdeck-switch' value="show" />
<div class="deck-cyberdeck-show">
<div class="SRH3">Frame Core
<button class="switch-button-show" type="action" name="act_deck-cyberdeck-switch">Show</button>
</div>
</div>
<div class="deck-cyberdeck-hide">
<div class="SRH3">Frame Core
<button class="switch-button-hide" type="action" name="act_deck-cyberdeck-switch">Hide</button>
</div>
</div>
</div>
<input type='hidden' class='deck-cyberdeck-switch' name='attr_deck-cyberdeck-switch' value="show" />
<div class="deck-cyberdeck">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="matrix-show-deck">
<div class="deck-attributes">
<div class="deck-name"><div>Deck Name</div><input type=text name="attr_deck-name"></div>
<div class="deck-persona">
<div>MPCP</div>
<input type="number" name="attr_deck-mpcp-max" value=0 min=0>
<input type="hidden" name="attr_deck-maxpersona" value=0>
<div>Bod</div>
<input type="number" name="attr_deck-bod-max" value=0 min=0>
<div>Evasion</div>
<input type="number" name="attr_deck-evasion-max" value=0 min=0>
<div>Masking</div>
<input type="number" name="attr_deck-masking-max" value=0 min=0>
<div>Sensors</div>
<input type="number" name="attr_deck-sensors-max" value=0 min=0>
</div>
<div class="deck-cyberdeck-specs">
<div>Hardening</div>
<input type="number" name="attr_deck-hardening" value=0 min=0>
<div>Active Memory</div>
<input type="number" name="attr_deck-activemem" value=0 min=0>
<div>Storage Memory</div>
<input type="number" name="attr_deck-storagemem" value=0 min=0>
<div>I/O Speed</div>
<input type="number" name="attr_deck-iospeed" value=0 min=0>
<div>Response Increase</div>
<input type="number" name="attr_deck-response" value=0 min=0>
<div>ICCM</div>
<input type="number" name="attr_deck-iccm" value=0 min=0>
<div>Offline Storage</div>
<input type="number" name="attr_deck-offlinestorage" value=0 min=0>
</div>
<div class="deck-extras"> </div>
</div>
</div>
<div class="matrix-show-frame">
<div class="deck-attributes">
<div class="frame-core">
<div>Type</div>
<div><select name="attr_frametype" style="width: 115px;">
<option>Smart Frame</option>
<option selected>Agent</option>
</select>
</div>
<div>Core Rating</div>
<div><input type="number" name="attr_frame-core" value=0 min=0></div>
<input type="hidden" name="attr_deck-maxpersona" value=0>
<div>Utility Payload</div>
<div><input type="number" name="attr_deck-utilitypayload" value=0 min=0></div>
<div>Pilot</div>
<div><input type="number" name="attr_decking" value=0 min=0></div>
<div>Initiative</div>
<div><input type="number" name="attr_frame-initiative" value=0 min=0></div>
</div>
<div class="frame-attributes">
<div>Bod</div>
<input type="number" name="attr_deck-bod-max" value=0 min=0>
<div>Evasion</div>
<input type="number" name="attr_deck-evasion-max" value=0 min=0>
<div>Masking</div>
<input type="number" name="attr_deck-masking-max" value=0 min=0>
<div>Sensors</div>
<input type="number" name="attr_deck-sensors-max" value=0 min=0>
</div>
</div>
</div>
</div>
<input type='hidden' class='deck-utilities-switch' name='attr_deck-utilities-switch' value="show" />
<div class="deck-utilities-show">
<div class="SRH3">Utilities
<button class="switch-button-show" type="action" name="act_deck-utilities-switch">Show</button>
</div>
</div>
<div class="deck-utilities-hide">
<div class="SRH3">Utilities
<button class="switch-button-hide" type="action" name="act_deck-utilities-switch">Hide</button>
</div>
</div>
<br>
<div class="deck-utilities">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="matrix-show-frame">
<div class='frame-util-used'>
<label>Utility Rating Sum</label>
<div><input type='hidden' class='frame-utility-full' name='attr_deck-util-overloaded' value=0 />
<span class="frame-overload" name="attr_deck-util-rating-loaded"></span>
</div>
<button class="switch-button-hide" type="action" name="act_deck-utilities-unloadall">Reset</button>
</div>
<div></div>
</div>
<div>
<div>
<div class="SRH4">Special Utilities</div>
<div class="deck-utilities-special">
<header class="table-top-left">Utility</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Multiplier</header>
<header class="table-top-mid">Size</header>
<header class="table-top-mid">Loaded</header>
<header class="table-top-mid">Effective Rating</header>
<header class="table-top-mid">Test</header>
<header class="table-top-mid">Swap Memory</header>
<header class="table-top-right">Notes</header>
<div class="table-item-left">Sleaze</div>
<div class="table-item"><input type="number" name="attr_decksleaze-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_decksleaze-multiplier" value=3></div>
<div class="table-item"><input type="number" name="attr_decksleaze-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_decksleaze-loaded" class="text-mid" value=1></div>
<div class="table-item"><input type="number" name="attr_decksleaze-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Sleaze Utility Test" id="decksleaze-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Sleaze Utility from Disk" id="decksleaze-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_decksleaze-notes"></div>
<div class="table-item-left">Track</div>
<div class="table-item"><input type="number" name="attr_decktrack-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_decktrack-multiplier" value=8></div>
<div class="table-item"><input type="number" name="attr_decktrack-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_decktrack-loaded" class="text-mid" value=1></div>
<div class="table-item"><input type="number" name="attr_decktrack-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Tracking Utility Test" id="decktrack-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Tracking Utility from Disk" id="decktrack-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_decktrack-notes"></div>
</div>
<div class="SRH4">Defensive Utilities</div>
<div class="deck-utilities-defensive">
<header class="table-top-left">Utility</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Multiplier</header>
<header class="table-top-mid">size</header>
<header class="table-top-mid">loaded</header>
<header class="table-top-mid">Effective Rating</header>
<header class="table-top-mid">Test</header>
<header class="table-top-mid">Swap Memory</header>
<header class="table-top-right">Notes</header>
<div class="table-item-left">Armor</div>
<div class="table-item"><input type="number" name="attr_deckarmor-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_deckarmor-multiplier" value=3></div>
<div class="table-item"><input type="number" name="attr_deckarmor-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_deckarmor-loaded" class="text-mid" value=1></div>
<div class="table-item"><input type="number" name="attr_deckarmor-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Armor Utility Test" id="deckarmor-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Armor Utility from Disk" id="deckarmor-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_deckarmor-notes"></div>
<div class="table-item-left">Cloak</div>
<div class="table-item"><input type="number" name="attr_deckcloak-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_deckcloak-multiplier" value=3></div>
<div class="table-item"><input type="number" name="attr_deckcloak-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_deckcloak-loaded" class="text-mid" value=1> </div>
<div class="table-item"><input type="number" name="attr_deckcloak-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Cloak Utility Test" id="deckcloak-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Cloak Utility from Disk" id="deckcloak-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_deckcloak-notes"></div>
<div class="table-item-left">Lock-On</div>
<div class="table-item"><input type="number" name="attr_decklockon-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_decklockon-multiplier" value=3></div>
<div class="table-item"><input type="number" name="attr_decklockon-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_decklockon-loaded" class="text-mid" value=1> </div>
<div class="table-item"><input type="number" name="attr_decklockon-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Lock-On Utility Test" id="decklockon-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Lock-On Utility from Disk" id="decklockon-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_decklockon-notes"></div>
<div class="table-item-left">Medic</div>
<div class="table-item"><input type="number" name="attr_deckmedic-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_deckmedic-multiplier" value=4></div>
<div class="table-item"><input type="number" name="attr_deckmedic-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_deckmedic-loaded" class="text-mid" value=1> </div>
<div class="table-item"><input type="number" name="attr_deckmedic-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Medic Utility Test" id="deckmedic-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Medic Utility from Disk" id="deckmedic-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_deckmedic-notes"></div>
</div>
<fieldset class="repeating_defensiveutils">
<div class="deck-utilities-defensive">
<div class="table-item-left"><input type="text" name="attr_utility"></div>
<div class="table-item"><input type="number" name="attr_rating" value=0></div>
<div class="table-item"><input type="number" name="attr_multiplier" value=0></div>
<div class="table-item"><input type="number" name="attr_size" value=0></div>
<div class="table-item "><input class="text-mid" type="checkbox" name="attr_loaded" value=1> </div>
<div class="table-item"><input type="number" name="attr_rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="Utility Test" id="repeating">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Utility from Disk" id="repeating">0</button></div>
<div class="table-item"><input type="text" name="attr_utilitynotes"></div>
</div>
</fieldset>
</div>
<div>
<div class="SRH4">Offensive Utilities</div>
<div class="deck-utilities-offensive">
<header class="table-top-left">Utility</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Multiplier</header>
<header class="table-top-mid">size</header>
<header class="table-top-mid">loaded</header>
<header class="table-top-mid">Effective Rating</header>
<header class="table-top-mid">Execute</header>
<header class="table-top-mid">Test</header>
<header class="table-top-mid">Swap Memory</header>
<header class="table-top-right">Notes</header>
<div class="table-item-left"><select name="attr_deckattacklevel" class="mediumselect2">
<option value="L">Attack (L)</option>
<option value="M" selected>Attack (M)</option>
<option value="S">Attack (S)</option>
<option value="D">Attack (D)</option>
</select>
</div>
<div class="table-item"><input type="number" name="attr_deckattack-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_deckattack-multiplier" value=4></div>
<div class="table-item"><input type="number" name="attr_deckattack-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_deckattack-loaded" class="text-mid" value=1></div>
<div class="table-item"><input type="number" name="attr_deckattack-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixattack" class="d6-button" title="Execute Attack vs. System Code or Icon" id="deckattack">L</button></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Attack Utility Test" id="deckattack-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Attack Utility from Disk" id="deckattack-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_deckattack-notes"></div>
<div class="table-item-left">Black Hammer</div>
<div class="table-item"><input type="number" name="attr_deckblackhammer-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_deckblackhammer-multiplier" value=20></div>
<div class="table-item"><input type="number" name="attr_deckblackhammer-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_deckblackhammer-loaded" class="text-mid" value=1></div>
<div class="table-item"><input type="number" name="attr_deckblackhammer-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixattack" class="d6-button" title="Blackhammer Utility Attack" id="deckblackhammer">L</button></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Blackhammer Utility Test" id="deckblackhammer-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Blackhammer Utility from Disk" id="deckblackhammer-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_deckblackhammer-notes"></div>
<div class="table-item-left">Killjoy</div>
<div class="table-item"><input type="number" name="attr_deckkilljoy-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_deckkilljoy-multiplier" value=10></div>
<div class="table-item"><input type="number" name="attr_deckkilljoy-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_deckkilljoy-loaded" class="text-mid" value=1></div>
<div class="table-item"><input type="number" name="attr_deckkilljoy-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixattack" class="d6-button" title="KillJoy Utility Attack" id="deckkilljoy">L</button></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="KillJoy Utility Test" id="deckkilljoy-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload KillJoy Utility from Disk" id="deckkilljoy-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_deckkilljoy-notes"></div>
<div class="table-item-left">Slow</div>
<div class="table-item"><input type="number" name="attr_deckslow-rating" value=0></div>
<div class="table-item"><input type="number" name="attr_deckslow-multiplier" value=4></div>
<div class="table-item"><input type="number" name="attr_deckslow-size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_deckslow-loaded" class="text-mid" value=1></div>
<div class="table-item"><input type="number" name="attr_deckslow-rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixattack" class="d6-button" title="Slow Utility Attack" id="deckslow">L</button></div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Slow Utility Test" id="deckslow-rating-final">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Slow Utility from Disk" id="deckslow-rating">0</button></div>
<div class="table-item"><input type="text" name="attr_deckslow-notes"></div>
</div>
<fieldset class="repeating_offensiveutils">
<div class="deck-utilities-offensive">
<div class="table-item-left"><input type="text" name="attr_utility"></div>
<div class="table-item"><input type="number" name="attr_rating" value=0></div>
<div class="table-item"><input type="number" name="attr_multiplier" value=0></div>
<div class="table-item"><input type="number" name="attr_size" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_loaded" class="text-mid" value=1> </div>
<div class="table-item"><input type="number" name="attr_rating-final" value=0></div>
<div class="table-item"><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="Utility Attack" id="matrixrepeatingattack">L</button></div>
<div class="table-item"><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="Utility Test" id="matrixrepeatingtest">L</button></div>
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Utility from Disk" id="repeating">0</button></div>
<div class="table-item"><input type="text" name="attr_utilitynotes"></div>
</div>
</fieldset>
</div>
<div class="deck-util-background">
<div class="SRH4">Additional Utilities</div>
<div class="deck-utilities-additional">
<header class="table-top-left">Utility</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Target</header>
<header class="table-top-mid">Multiplier</header>
<header class="table-top-mid">Size</header>
<header class="table-top-mid">Loaded</header>
<header class="table-top-mid">Effective Rating</header>
<header class="table-top-mid">Execute</header>
<header class="table-top-mid">Test</header>
<header class="table-top-mid">Swap Memory</header>
<header class="table-top-right">Notes</header>
</div>
<fieldset class="repeating_deck-utilities">
<div class="deck-utilities-addrow">
<input type="text" name="attr_utility" class="myweapontxt">
<input type="number" name="attr_rating" value=0>
<select name="attr_target" class="mediumselect2">
<option value="@{target|Target|matrixaccessrating}">control</option>
<option value="@{target|Target|matrixcontrolrating}">access</option>
<option value="@{target|Target|matrixindexrating}">index</option>
<option value="@{target|Target|matrixfilesrating}">files</option>
<option value="@{target|Target|matrixslaverating}">slave</option>
</select>
<input type="number" name="attr_multiplier" value=0>
<input type="number" name="attr_size" value=0>
<div class="text-mid"><input type="checkbox" name="attr_loaded" value=1></div>
<input type="number" name="attr_rating-final" value=0>
<div><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="System Operation with Utility" id="matrixrepeatingexec">L</button></div>
<div><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="Utility Test - use vs. Tar programs" id="matrixrepeatingtest">L</button></div>
<div><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Utility from Disk" id="repeating">0</button></div>
<input type="text" name="attr_notes" class="myweapontxt">
</div>
<div class="table-bottom" />
</div>
</fieldset>
</div>
</div>
</div>
</div>
<div class='sheet-karma'>
<div class="SRH3">Karma</div>
<div class="karma-summary">
<div class="table-top-left"><b>Karma Pool:</b></div>
<div class="table-top-mid"><b>Good Karma:</b></div>
<div class="table-top-right"><b>Karma Total:</b></div>
<input type="number" name="attr_karma-pool" value=0>
<input type="number" name="attr_karma-good" value=0>
<input type="number" name="attr_karma-total" value=0>
</div>
<br>
<div class="karma-history">
<header class="table-top-left">Attribute/Skill/Spell/etc.</header>
<header class="table-top-mid">Ammount of Karma</header>
<header class="table-top-mid">Date</header>
<header class="table-top-right">Notes</header>
</div>
<fieldset class="repeating_karma">
<div class="karma-history">
<div class="table-item-left"><input type="text" class="myweapontxt" name="attr_purchase"></div>
<div class="table-item"><input type="number" name="attr_cost" value=0 min=0></div>
<div class="table-item"><input type="date" name="attr_date" value=0 min=0></div>
<div class="table-item"><input type="text" class="myweapontxt" name="attr_notes"></div>
</div>
</fieldset>
<br>
<div class="SRH3">Notes</div>
<div class="character-notes">
<textarea name="attr_character-notes"></textarea>
</div>
</div>
<div class='sheet-gear'>
<div class="SRH3">Nuyen:<input type="number" style="width:200px;" name="attr_nuyen" value=0></div>
<div class="gear">
<div class="SRH3">Gear</div>
<div class="gear-table">
<header class="table-top-left">Name</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Weight</header>
<header class="table-top-mid">Conceal</header>
<header class="table-top-mid">Type</header>
<header class="table-top-mid">Quantity</header>
<header class="table-top-mid">Pool</header>
<header class="table-top-mid">Roll</header>
<header class="table-top-right">Description</header>
</div>
<fieldset class="repeating_gear">
<div class="gear-table">
<div class="table-item-left"><input type="text" class="myweapontxt" name="attr_name"></div>
<div class="table-item"><input type="number" name="attr_rating" value=0 min=0></div>
<div class="table-item"><input type="number" name="attr_weight" value=0 step='0.01' min='0.00'></div>
<div class="table-item"><input type="number" name="attr_conceal" value=0 ></div>
<div class="table-item"><select name="attr_type" class="mediumselect2">
<option value='reuse'>Reusable</option>
<option value='onetime'>Consumeable</option>
</select>
</div>
<div class="table-item"><input type="number" name="attr_quantity" value=0 min=0></div>
<div class="table-item"><select name="attr_pool" class="mediumselect2">
<option SELECTED value="none">None</option>
<option value="combat">Combat</option>
<option value="task">Task</option>
<option value="hacking">Hacking</option>
<option value="control">Control</option>
<option value="spell">Spell</option>
<option value="astral">Astral</option>
</select>
</div>
<div class="table-item"><button type="action" class="d6-button" name="act_usegear" title="Use Item">L</button></div>
<div class="table-item"><input type="text" name="attr_description"></div>
</div>
</fieldset>
</div>
<br>
<div class="SRH3">Credsticks &#165;</div>
<div class="credsticks">
<header class="table-top-left">Type</header>
<header class="table-top-mid">ID</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Balance &#165;</header>
<header class="table-top-mid">Roll</header>
<header class="table-top-right">Permits</header>
</div>
<fieldset class="repeating_credsticks">
<div class="credsticks">
<div class="table-item-left">
<select name="attr_type" class="mediumselect2">
<option SELECTED>Certified</option>
<option SELECTED>Standard</option>
<option SELECTED>Silver</option>
<option SELECTED>Gold</option>
<option SELECTED>Platinum</option>
<option SELECTED>Ebony</option>
</select>
</div>
<div class="table-item">
<select name="attr_id" class="mediumselect2">
<option SELECTED>Legitmate</option>
<option SELECTED>Forged</option>
</select>
</div>
<div class="table-item"><input type="number" name="attr_rating" value=1></div>
<div class="table-item"><input type="number" name="attr_balance" value=1><span>&#165;</span></div>
<div class="table-item"><button type="action" name="act_checkcredstick" class="d6-button">L</button></div>
<div class="table-item"><input type="text" class="myweapontxt" name="attr_notes"></div>
</div>
</fieldset>
<br>
<div class="vehicles-list">
<div class="SRH3">Vehicles List</div>
<div class="table-top">Vehicle Details and Skill rating go on sepperate Vehicle Character Sheet</div>
<div class="vehicles-table">
<header class="table-item-left">Name</header>
<header class="table-item">Model</header>
<header class="table-item">Cost &#165;</header>
<header class="table-item">Notes</header>
</div>
<fieldset class="repeating_vehicles">
<div class="vehicles-table">
<div class="table-item-left"><input type="text" name="attr_name" class="myweapontxt" ></div>
<div class="table-item"><input type="text" name="attr_model" class="myweapontxt" ></div>
<div class="table-item"><input type="number" name="attr_cost" value=0 ><span>&#165;</span></div>
<div class="table-item"><input type="text" name="attr_notes" class="myweapontxt" ></div>
</div>
</fieldset>
</div>
</div>
<div class="sheet-rigger">
<div class="vcr-attributes">
<div class="text-mid">VCR Rating:</div>
<div><input type="number" name="attr_vcr" value=0></div>
<div class="text-mid">Vehicle Reaction:</div>
<div class="text-mid"><span class="numberspan" name="attr_vcr-reaction" \></div>
<div class="text-mid">Vehicle Initiative:</div>
<div class="text-mid"><span class="numberspan" name="attr_vcr-initiative" \></div>
<div class="text-mid">IVIS Master Unit:</div><input class="text-mid" type="checkbox"
name="attr_rcdeck-ivis-master" \>
<div class="text-mid">FDDM Master Unit:</div>
<div class="text-mid"><input type="checkbox" name="attr_rcdeck-fddm-master" \></div>
</div>
<input type='hidden' class='rc-deck-switch' name='attr_rc-deck-switch' value="show" />
<div class="rc-deck-show">
<div class="SRH3">Remote Control Deck
<button class="switch-button-show" type="action" name="act_rc-deck-switch">Show</button>
</div>
</div>
<div class="rc-deck-hide">
<div class="SRH3">Remote Control Deck
<button class="switch-button-hide" type="action" name="act_rc-deck-switch">Hide</button>
</div>
</div>
<br>
<div class="rcdeck-ew-border">
<div class="rcdeck-ew">
<div class="text-mid">Intrusion Factor Base:</div>
<span name="attr_ewarfare" class="spn-nc" />
<div class="text-mid">Intrusion Factor Mods:</div>
<input type="number" name="attr_rcdeck-intrusion-mods" />
<div class="text-mid">Intrusion Factor:</div>
<span name="attr_rcdeck-intrusion-factor" class="spn-nc"></span>
</div>
</div>
<div class="rc-deck">
<input type="hidden" name="attr_rcdeck-flux" value=2 />
<div class="rcdeck-flux">
<div class="table-top-left"></div>
<div class="table-top-mid"><b>Rating</div>
<div class="table-top-mid"><b>Roll</div>
<div class="table-top-mid"><b>Flux Rating</div>
<div class="table-top-mid"><b>Modified Flux</div>
<div class="table-top-right"><b>Range</div>
<div class="table-item-left">Deck:</div>
<div class="table-item"><input type="number" name="attr_rcdeck-rating" min=0 value=0></div>
<div class="table-item"><button class="d6-button" type="action" name="act_skilltest"
id="rcdeck-rating control" title="Intrusion Detect Test">L</button></div>
<div class="table-item"><span name="attr_rcdeck-flux"></div>
<div class="table-item"><input type="number" name="attr_rcdeck-fluxmod" min=0 value=0></div>
<div class="table-item"><span name="attr_rcdeck-range"></div>
<div class="table-item-left">ECCM:</div>
<div class="table-item"><input type="number" name="attr_eccm-rating" min=0 value=0></div>
<div class="table-item"><button class="d6-button" type="action" name="act_skilltest"
id="eccm-rating control" title="ECCM Test">L</button></div>
<div class="table-item"><span name="attr_eccm-flux"></div>
<div class="table-item"><input type="number" name="attr_eccm-fluxmod" min=0 value=0></div>
<div class="table-item"><span name="attr_eccm-range"></div>
<div class="table-item-left">Electrons Warfare:</div>
<div class="table-item"><input type="number" name="attr_ewarfare" value=0 /></div>
<div class="table-item"><button class="d6-button" type="action" name="act_skilltest" id="ewarfare control"
title="Electronic Warfare or Signal Intercept Test">L</button></div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item-left">Encryption Module:</div>
<div class="table-item"><input type="number" name="attr_rcdeck-encryption-rating" value=0 /></div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item-left">Decryption Module:</div>
<div class="table-item"><input type="number" name="attr_rcdeck-decryption-rating" value=0 /></div>
<div class="table-item"><button class="d6-button" type="action" name="act_skilltest"
id="rcdeck-decryption-rating control" title="Decryption Test">L</button></div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item-left">Protocol Emulation Module:</div>
<div class="table-item"><input type="number" name="attr_rcdeck-pem-rating" value=0 /></div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item"></div>
<div class="table-item"></div>
</div>
<input type='hidden' class='drone-list-switch' name='attr_drone-list-switch' value="show" />
<div class="drone-list-show">
<div class="SRH3">Drone Subscriber List
<button class="switch-button-show" type="action" name="act_drone-list-switch">Show</button>
</div>
</div>
<div class="drone-list-hide">
<div class="SRH3">Drone Subscriber List
<button class="switch-button-hide" type="action" name="act_drone-list-switch">Hide</button>
</div>
</div>
<br>
<div class="drones-list">
<div class="drones-table">
<div class="table-top-left"><b>Name</div>
<div class="table-top-mid"><b>Type</div>
<div class="table-top-mid"><b>Model</div>
<div class="table-top-mid"><b>Cost</div>
<div class="table-top-right"><b>Notes</div>
</div>
<fieldset class="repeating_drones">
<div class="drones-table">
<div class="table-item-left"><input type="text" name="attr_name"></div>
<div class="table-item"><input type="text" name="attr_type"></div>
<div class="table-item"><input type="text" name="attr_model"></div>
<div class="table-item"><input type="number" name="attr_cost"></div>
<div class="table-item"><input type="text" name="attr_notes"></input>
</div>
</div>
</fieldset>
</div>
<input type='hidden' class='vehicle-skills-switch' name='attr_vehicle-skills-switch' value="show" />
<div class="vehicle-skills-show">
<div class="SRH3">Vehicle Skills
<button class="switch-button-show" type="action" name="act_vehicle-skills-switch">Show</button>
</div>
</div>
<div class="vehicle-skills-hide">
<div class="SRH3">Vehicle Skills
<button class="switch-button-hide" type="action" name="act_vehicle-skills-switch">Hide</button>
</div>
</div>
<br>
<div class="vehicle-skills">
<div class="SRH5">Update Vehicle Skill Here</div>
<div class="SRH5">If specializing in a specif vehicle, add modifiers to the vehicle/drone itself</div><br>
<div class="vehicle-skills-table">
<div class="table-top-left"><b>Skill</div>
<div class="table-top-mid"><b>Level</div>
<div class="table-top-mid"><b>Specialize</div>
<div class="table-top-right"><b>Remote Operation</div>
<div></div>
<div class="table-top-left"><b>Skill</div>
<div class="table-top-mid"><b>Level</div>
<div class="table-top-mid"><b>Specialize</div>
<div class="table-top-right"><b>Remote Operation</div>
<div></div>
<div class="table-item-left">Bike:</div>
<div class="table-item"><input type="number" name="attr_bike" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_bike-specialize" class="bike-spec-switch text-mid">
</div>
<div class="table-item">
<input type="checkbox" name="attr_bike-specialize" class="bike-spec-switch hidden">
<div class="bike-spec-on"><input type="number" name="attr_bike-remote" value=0></div>
<div class="bike-spec-off"><span name="attr_bike"></span></div>
</div>
<div></div>
<div class="table-item-left">Car:</div>
<div class="table-item-left"><input type="number" name="attr_car" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_car-specialize" class="car-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_car-specialize" class="car-spec-switch hidden">
<div class="car-spec-on"><input type="number" name="attr_car-remote" value=0></div>
<div class="car-spec-off"><span name="attr_car-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Hovercraft:</div>
<div class="table-item-left"><input type="number" name="attr_hovercraft" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_hovercraft-specialize" class="hovercraft-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_hovercraft-specialize" class="hovercraft-spec-switch hidden">
<div class="hovercraft-spec-on"><input type="number" name="attr_hovercraft-remote" value=0></div>
<div class="hovercraft-spec-off"><span name="attr_hovercraft-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">LTA Aircraft:</div>
<div class="table-item-left"><input type="number" name="attr_lta" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_lta-specialize" class="lta-spec-switch text-mid">
</div>
<div class="table-item">
<input type="checkbox" name="attr_lta-specialize" class="lta-spec-switch hidden">
<div class="lta-spec-on"><input type="number" name="attr_lta-remote" value=0></div>
<div class="lta-spec-off"><span name="attr_lta-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Motorboat:</div>
<div class="table-item-left"><input type="number" name="attr_motorboat" value=0> </div>
<div class="table-item"><input type="checkbox" name="attr_motorboat-specialize"
class="motorboat-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_motorboat-specialize" class="motorboat-spec-switch hidden">
<div class="motorboat-spec-on"><input type="number" name="attr_motorboat-remote" value=0></div>
<div class="motorboat-spec-off"><span name="attr_motorboat-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Rotor Aircraft:</div>
<div class="table-item-left"><input type="number" name="attr_rotor" value=0> </div>
<div class="table-item"><input type="checkbox" name="attr_rotor-specialize" class="rotor-spec-switch text-mid">
</div>
<div class="table-item">
<input type="checkbox" name="attr_rotor-specialize" class="rotor-spec-switch hidden">
<div class="rotor-spec-on"><input type="number" name="attr_rotor-remote" value=0></div>
<div class="rotor-spec-off"><span name="attr_rotor-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Sailboat:</div>
<div class="table-item"><input type="number" name="attr_sailboat" value=0> </div>
<div class="table-item"><input type="checkbox" name="attr_sailboat-specialize"
class="sailboat-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_sailboat-specialize" class="sailboat-spec-switch hidden">
<div class="sailboat-spec-on"><input type="number" name="attr_sailboat-remote" value=0></div>
<div class="sailboat-spec-off"><span name="attr_sailboat-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Ship:</div>
<div class="table-item"><input type="number" name="attr_ship" value=0> </div>
<div class="table-item"><input type="checkbox" name="attr_ship-specialize" class="ship-spec-switch text-mid">
</div>
<div class="table-item">
<input type="checkbox" name="attr_ship-specialize" class="ship-spec-switch hidden">
<div class="ship-spec-on"><input type="number" name="attr_ship-remote" value=0></div>
<div class="ship-spec-off"><span name="attr_ship-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Submarine:</div>
<div class="table-item"><input type="number" name="attr_submarine" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_submarine-specialize"
class="submarine-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_submarine-specialize" class="submarine-spec-switch hidden">
<div class="submarine-spec-on"><input type="number" name="attr_submarine-remote" value=0></div>
<div class="submarine-spec-off"><span name="attr_submarine-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Vectored Thrust:</div>
<div class="table-item"><input type="number" name="attr_vectoredthrust" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_vectoredthrust-specialize"
class="vectoredthrust-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_vectoredthrust-specialize"
class="vectoredthrust-spec-switch hidden">
<div class="vectoredthrust-spec-on"><input type="number" name="attr_vectoredthrust-remote" value=0>
</div>
<div class="vectoredthrust-spec-off"><span name="attr_vectoredthrust-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Winged Aircraft:</div>
<div class="table-item"><input type="number" name="attr_wingedaircraft" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_wingedaircraft-specialize"
class="wingedaircraft-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_wingedaircraft-specialize"
class="wingedaircraft-spec-switch hidden">
<div class="wingedaircraft-spec-on"><input type="number" name="attr_wingedaircraft-remote" value=0>
</div>
<div class="wingedaircraft-spec-off"><span name="attr_wingedaircraft-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Mechanical Arm:</div>
<div class="table-item"><input type="number" name="attr_mecharm" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_mecharm-specialize"
class="mecharm-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_mecharm-specialize" class="mecharm-spec-switch hidden">
<div class="mecharm-spec-on"><input type="number" name="attr_mecharm-remote" value=0></div>
<div class="mecharm-spec-off"><span name="attr_mecharm-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Semiballistic:</div>
<div class="table-item"><input type="number" name="attr_semiballistic" value=0> </div>
<div class="table-item"><input type="checkbox" name="attr_semiballistic-specialize"
class="semiballistic-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_semiballistic-specialize"
class="semiballistic-spec-switch hidden">
<div class="semiballistic-spec-on"><input type="number" name="attr_semiballistic-remote" value=0>
</div>
<div class="semiballistic-spec-off"><span name="attr_semiballistic-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Suborbital:</div>
<div class="table-item"><input type="number" name="attr_suborbital" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_suborbital-specialize"
class="suborbital-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_suborbital-specialize" class="suborbital-spec-switch hidden">
<div class="suborbital-spec-on"><input type="number" name="attr_suborbital-remote" value=0></div>
<div class="suborbital-spec-off"><span name="attr_suborbital-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Tracks:</div>
<div class="table-item"><input type="number" name="attr_tracks" value=0></div>
<div class="table-item"><input type="checkbox" name="attr_tracks-specialize" class="tracks-spec-switch text-mid">
</div>
<div class="table-item">
<input type="checkbox" name="attr_tracks-specialize" class="tracks-spec-switch hidden">
<div class="tracks-spec-on"><input type="number" name="attr_tracks-remote" value=0></div>
<div class="tracks-spec-off"><span name="attr_tracks-remote"></span></div>
</div>
<div></div>
<div class="table-item-left">Walkers:</div>
<div class="table-item"><input type="number" name="attr_walkers" value=0> </div>
<div class="table-item"><input type="checkbox" name="attr_walkers-specialize"
class="walkers-spec-switch text-mid"></div>
<div class="table-item">
<input type="checkbox" name="attr_walkers-specialize" class="walkers-spec-switch hidden">
<div class="walkers-spec-on"><input type="number" name="attr_walkers-remote" value=0></div>
<div class="walkers-spec-off"><span name="attr_walkers-remote"></span></div>
</div>
<div></div>
</div>
</div>
</div>
</div>
<div class='sheet-combat'>
<!-- Combat Tab -->
<div>
<div class="SRH2">Combat</div>
<input type="text" name="attr_updateviztns" hidden=true>
<input type="text" name="attr_visionprofile" hidden=true>
<input type="text" name="attr_fulldark" hidden=true>
<input type="text" name="attr_minlight" hidden=true>
<input type="text" name="attr_partiallight" hidden=true>
<input type="text" name="attr_glare" hidden=true>
<input type="text" name="attr_mist" hidden=true>
<input type="text" name="attr_lightsmoke" hidden=true>
<input type="text" name="attr_fullsmoke" hidden=true>
<input type="text" name="attr_thermalsmoke" hidden=true>
<input type='hidden' class='combatskills-switch' name='attr_combatskillsswitch' value="show" />
<div class="combatskills-show">
<div class="SRH3">Combat Skills <button class="switch-button-show" type="action" name="act_combatskillsswitch">Show</button> </div>
</div>
<div class="combatskills-hide">
<div class="SRH3">Combat Skills <button class="switch-button-hide" type="action" name="act_combatskillsswitch">Hide</button> </div>
</div>
<br>
<div class="combat-skills">
<br>
<div class="SRH5">Update Combat Skill Here</div>
<div class="SRH5">If specializing in a weapon, add modifiers to the weapon itself</div><br>
<div class="combat-skills-table">
<div class="combat-skills-items">Assualt Rifle:</b><input type="number" name="attr_assaultrifles"
value=0 /></div>
<div class="combat-skills-items">Pistols:</b><input type="number" name="attr_pistols" value=0> </div>
<div class="combat-skills-items">Rifles:</b><input type="number" name="attr_rifles" value=0> </div>
<div class="combat-skills-items">Shotguns:</b><input type="number" name="attr_shotguns" value=0> </div>
<div class="combat-skills-items">SMGs:</b><input type="number" name="attr_smgs" value=0></div>
<div class="combat-skills-items">Throwing:</b><input type="number" name="attr_throwing" value=0> </div>
<div class="combat-skills-items">Edged:</b><input type="number" name="attr_edged" value=0></div>
<div class="combat-skills-items">Clubs:</b><input type="number" name="attr_clubs" value=0 /></div>
<div class="combat-skills-items">Cyper Implant:</b><input type="number" name="attr_cyberimplant"
value=0 /></div>
<div class="combat-skills-items">Whips:</b><input type="number" name="attr_whips" value=0></div>
<div class="combat-skills-items">Pole Arms:</b><input type="number" name="attr_poles" value=0> </div>
<div class="combat-skills-items">Gunnery:</b><input type="number" name="attr_gunnery" value=0> </div>
<div class="combat-skills-items">Heavy Weapons:</b><input type="number" name="attr_heavyweapons"
value=0> </div>
<div class="combat-skills-items">Lasers:</b><input type="number" name="attr_lasers" value=0> </div>
<div class="combat-skills-items">Launchers:</b><input type="number" name="attr_launchers" value=0>
</div>
<div class="combat-skills-items">Spray:</b><input type="number" name="attr_spray" value=0> </div>
<div class="combat-skills-items">Gyrojet:</b><input type="number" name="attr_gyrojet" value=0> </div>
<div class="combat-skills-items">Projectile:</b><input type="number" name="attr_projectiles" value=0>
</div>
<div class="combat-skills-items">Demolitions:</b><input type="number" name="attr_demolitions" value=0>
</div>
<div class="combat-skills-items">Under Water:</b><input type="number" name="attr_underwatercombat"
value=0></div>
<div class="combat-skills-items">Blowgun:</b><input type="number" name="attr_blowgun" value=0> </div>
<div class="combat-skills-items">Bracer:</b><input type="number" name="attr_bracer" value=0> </div>
<div class="combat-skills-items">Gun Cane:</b><input type="number" name="attr_guncane" value=0> </div>
<div class="combat-skills-items">Oral Gun:</b><input type="number" name="attr_oralgun" value=0> </div>
<div class="combat-skills-items">Oral Strike:</b><input type="number" name="attr_oralstrike" value=0></div>
<div class="combat-skills-items">Eye Gun:</b><input type="number" name="attr_eyegun" value=0> </div>
</div>
<div></div>
<div class="combat-unarmed">
<div class="combat-skills-items">Unarmed:<input type="number" name="attr_unarmed" value=0></div>
<div class="combat-skills-items">Martial Arts:</div>
<div><input type="text" list="martialarts" value="Unarmed" style="width=80px;" name="attr_martialarts">
<datalist class="mediumselect3" id="martialarts">
<option selected>Unarmed</option>
<option>Brawling</option>
<option>MMA</option>
<option>Karate</option>
<option>Arnis</option>
<option>Muy Thai</option>
<option>Tae Kwon Do</option>
<option>Wild Cat</option>
</datalist>
</div>
<div>Notes:</div>
<textarea name="attr_martialartsnotes" style='width:300px;height:50%;margin-bottom:unset;'></textarea>
</div>
</div>
</div>
<div>
<input type='hidden' class='rangedweapons-switch' name='attr_rangedweaponsswitch' value="show" />
<div class="rangedweapons-hide">
<div class="SRH3">Ranged Weapons<button class="switch-button-show" type="action" id="rangedweaponsswitch" name="act_show-hide">Show</button> </div>
</div>
<div class="rangedweapons-show">
<div class="SRH3">Ranged Weapons<button class="switch-button-hide" type="action" id="rangedweaponsswitch" name="act_show-hide">Hide</button> </div>
</div>
<br>
<div class="rangedweapons-show">
<div class="ranged-table-headers">
<div class="table-top-left">Equip</div>
<div class="table-top-mid">General</div>
<div class="table-top-mid">Range</div>
<div class="table-top-mid">Fire Mode</div>
<div class="table-top-mid">Damage</div>
<div class="table-top-mid">Ammunition</div>
<div class="table-top-right">Show</div>
</div>
<div class="ranged-table-items">
<div class="table-item-left" title="Primary Hand">Pri</div>
<div class="table-item" title="Off Hand">Sec</div>
<div class="table-item">Name</div>
<div class="table-item">Type</div>
<div class="table-item">Conceal</div>
<div class="table-item">Min</div>
<div class="table-item">S</div>
<div class="table-item">M</div>
<div class="table-item">L</div>
<div class="table-item">Ex</div>
<div class="table-item">SS</div>
<div class="table-item">SA</div>
<div class="table-item">BF</div>
<div class="table-item">FA</div>
<div class="table-item">Power</div>
<div class="table-item">Dmg</div>
<div class="table-item">Max</div>
<div class="table-item">Remain</div>
<div class="table-item">Reload</div>
<div class="table-item">Fire</div>
<div class="table-item">More</div>
</div>
<fieldset class="repeating_rangedweapons">
<div class="ranged-table-row">
<div class="text-mid"><input title="Equipped in Primary Hand" type="checkbox"
name="attr_primary-ranged-equipped"></div>
<div class="text-mid"><input title="Equipped in Off Hand" type="checkbox"
name="attr_secondary-ranged-equipped"></div>
<input type="text" name="attr_name" class="myweapontxt">
<select name="attr_type" class="mediumselect2">
<option SELECTED>Other</option>
<option>Hold-out Pistol</option>
<option>Light Pistol</option>
<option>Machine Pistol</option>
<option>Heavy Pistol</option>
<option>SMG</option>
<option>Taser</option>
<option>Shotgun</option>
<option>Sporting Rifle</option>
<option>Sniper Rifle</option>
<option>Assault Rifle</option>
<option value="Light Machine Gun">LMG</option>
<option value="Medium Machine Gun">MMG</option>
<option value="Heavy Machine Gun">HMG</option>
<option>Assault Cannon</option>
<option>Minigun</option>
<option>Bow</option>
<option>Light Crossbow</option>
<option>Medium Crossbow</option>
<option>Heavy Crossbow</option>
<option>Sling Shot</option>
<option>Sling Launcher</option>
<option>Thrown Knife</option>
<option>Shuriken</option>
<option>Caltrops</option>
<option>Nets</option>
<option>Bracer</option>
<option>Gun Cane</option>
<option>Speargun</option>
<option>Net Gun</option>
<option>Laser Pistol</option>
<option>Laser Rifle</option>
<option>Laser Sniper</option>
<option>"Gyrojet (land)</option>
<option>"Gyrojet (water)</option>
<option>Flamethrower</option>
<option>Blowgun</option>
</select>
<input type="number" name="attr_conceal">
<input type="number" name="attr_min">
<input type="number" name="attr_short">
<input type="number" name="attr_medium">
<input type="number" name="attr_long">
<input type="number" name="attr_extreme">
<div class="text-mid"><input type="radio" name="attr_firemode" value="ss" /></div>
<div class="text-mid"><input type="radio" name="attr_firemode" value="sa" /></div>
<div class="text-mid"><input type="radio" name="attr_firemode" value="bf" /></div>
<div class="text-mid"><input type="radio" name="attr_firemode" value="fa" /></div>
<input type="number" name="attr_power">
<select name="attr_damage" title="Weapon Damage" class="mediumselect2">
<option title="Light Damage" SELECTED>L</option>
<option title="Light Damage">M</option>
<option title="Light Damage">S</option>
<option title="Light Damage">D</option>
<option title="Light Stun" value="L(stun)">L(s)</option>
<option title="Moderate Stun" value="M(stun)">M(s)</option>
<option title="Serious Stun" value="S(stun)">S(s)</option>
<option title="Deadly Stun" value="D(stun)">D(s)</option>
</select>
<input type="number" name="attr_ammo" value=0>
<input type="number" name="attr_ammoremain" value=0>
<div><button class="pictos-button" id="reloadbutton" type="action" name="act_reload"
title="Reload Weapon">0</button></div>
<div><button class="attack-dice" type="action" id="rangedattack" name="act_rangedattack" title="Fire Weapon"></button>
</div>
<div>
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
</div>
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
<span class="show-weaponmods">
<div class="text-mid"
title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box">
<b>Skill</div>
<div class="text-mid" title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
<div class="text-mid" title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
<div class="text-mid" title="Gas vents and other recoil accesories"><b>Recoil Comp</div>
<div><b>Gyro Stabalization</div>
<div title="accesories that improve to hit number for ranged combat"><b>Targeting Assistance</div>
<div class="text-mid" title="Clip, Belt, Cylinder, Magazine or Action Break"><b>Reload Type</div>
<div class="text-mid" title="number or clips, belts or individual rounds"><b>Reloads</div>
<div class="text-mid"><b>Ammo Type</div>
<div class="text-mid"><b>Notes:</div>
<select name="attr_skill" class="mediumselect2"
title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box">
<option SELECTED value="@{pistols}">Pistol</option>
<option value="@{assaultrifles}">Assualt Rifle</option>
<option value="@{heavyweapons}">Heavy Weapon</option>
<option value="@{lasers}">Laser</option>
<option value="@{projectiles}">Projectile</option>
<option value="@{rifles}">Rifle</option>
<option value="@{shotguns}">Shotgun</option>
<option value="@{smgs}">SMG</option>
<option value="@{throwing}">Thrown</option>
<option value="@{blowgun}">Blowgun</option>
<option value="@{bracer}">Bracer</option>
<option value="@{guncane}">Gun Cane</option>
<option value="@{oralgun}">Oral Gun</option>
<option value="@{oralstrike}">Oral Strike</option>
<option value="@{eyegun}">Eye Gun</option>
<option value=0>Other</option>
</select>
<div><input type="number" name="attr_specialized" value=0></div>
<div><input type="number" name="attr_tnmods" value=0></div>
<div><input type="number" name="attr_recoilcomp" title="Gas vents and other recoil accesories"
value=0></div>
<select class="mediumselect2" name="attr_gyro">
<option value="0" SELECTED>None</option>
<option value="5">Regular</option>
<option value="6">Deluxe</option>
</select>
<select class="mediumselect2" name="attr_targeting">
<option value="0" SELECTED>None</option>
<option value="-2">Smartlink</option>
<option value="-1">LaserSight</option>
<option value="-1">Smart Goggles</option>
</select>
<select name="attr_reloadmethod" class="mediumselect2">
<option>clip</option>
<option>break</option>
<option>magazine</option>
<option>speed loader</option>
<option>cylinder</option>
<option>belt</option>
</select>
<div><input type="number" name="attr_reloads" value=0></div>
<select name="attr_ammotype" class="mediumselect2">
<option value="regular">Regular</option>
<option value="adps">ADPS</option>
<option value="explosive">Explosive</option>
<option value="explosive2">Explosive EX</option>
<option value="flechette">Flechette</option>
<option value="gel">Gel</option>
<option value="tracer">Tracer</option>
<option value="av">Anti-Vehicl</option>
<option value="capsule">Capsule</option>
<option value="glazer">Glazer</option>
<option value="hic">Hi-C</option>
<option value="hpoint">Hollow Point</option>
<option value="incendiary">Incendiary</option>
<option value="mercury">Mercury</option>
<option value="tracker">Tracker</option>
</select>
<textarea name="attr_notes" style='width:150px;height:22px;'></textarea>
</span>
</div>
<div class="table-bottom" />
</fieldset>
</div>
<input type='hidden' class='meleeweapons-switch' name='attr_meleeweaponsswitch' value="show" />
<div class="meleeweapons-hide">
<div class="SRH3">Melee Weapons<button class="switch-button-show" type="action" id="meleeweaponsswitch" name="act_show-hide">Show</button> </div>
</div>
<div class="meleeweapons-show">
<div class="SRH3">Melee Weapons<button class="switch-button-hide" type="action" id="meleeweaponsswitch" name="act_show-hide">Hide</button> </div>
</div>
<br>
<div class="meleeweapons-show">
<input name="attr_meleeselected" type="hidden" \>
<input name="attr_armorselected" type="hidden" \>
<input name="attr_impact" type="hidden" value=0 \>
<input name="attr_ballistic" type="hidden" value=0 \>
<input name="attr_meleereach" value=0 type="hidden" \>
<input name="attr_meleereach_max" value=0 type="hidden" \>
<input name="attr_meleeselected" value=0 type="hidden" \>
<div class="melee-table-header">
<div class="table-top-left">Equip</div>
<div class="table-top-mid">Name</div>
<div class="table-top-mid">Skill</div>
<div class="table-top-mid">Conceal</div>
<div class="table-top-mid">Reach</div>
<div class="table-top-mid">Power</div>
<div class="table-top-mid">Damage</div>
<div class="table-top-mid"title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
<div class="table-top-mid"title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
<div class="table-top-mid">Attack</div>
<div class="table-top-right">Notes</div>
</div>
<div class="melee-table-row">
<div class="text-mid"><input type="checkbox" name="attr_unarmed-equipped" checked></div>
<input class="myweapontxt" type="text" name="attr_unarmed-name" value="Unarmed Combat" disabled>
<select class="mediumselect2" name="attr_unarmedskill">
<option value="@{unarmed}" selected>Unarmed</option>
</select>
<input type="number" name="attr_unarmed-conceal" value=0>
<input type="number" name="attr_unarmed-reach" value=0>
<div class="meleespan"><span name="attr_strength_max"></span></div>
<select name="attr_attackdamage" class="mediumselect2">
<option SELECTED>M</option>
</select>
<input type="number" name="attr_unarmed-specialized" value=0 \>
<input type="number" name="attr_unarmed-miscmods" value=0 \>
<div><button class="attack-dice" id="unarmedattack" type="action" name="act_melee"
title="Melee Attack"></button></div>
<input name="attr_notes" type="text"></input>
</div>
<div class="table-bottom" />
<fieldset class="repeating_meleeweapons">
<div class="melee-table-row">
<div class="text-mid"><input type="checkbox" name="attr_meleeequiped"></div>
<input type="text" name="attr_name">
<select name="attr_skill" class="mediumselect2">
<option value="@{clubs}">Club</option>
<option value="@{cyberimplant}">Cyber Implant</option>
<option value="@{edged}">Edged</option>
<option value="@{poles}">Pole Arm</option>
<option value="@{whips}">Whip</option>
<option value="@{unarmed}" selected>Unarmed</option>
</select>
<input type="number" name="attr_conceal" value=0 \>
<input type="number" name="attr_reach" value=0 \>
<input type="number" name="attr_power" value=0>
<select name="attr_damage" class="mediumselect2">
<option SELECTED>L</option>
<option>M</option>
<option>S</option>
<option>D</option>
<option>L(stun)</option>
<option>M(stun)</option>
<option>S(stun)</option>
<option>D(stun)</option>
</select>
<input type="number" name="attr_specialized" value=0 \>
<input type="number" name="attr_tnmods" value=0 \>
<input name="attr_miscnotes" type="text" hidden=true value="Reach Bonus: ">
<div><button class="attack-dice" type="action" name="act_attack" title="Melee Attack"></button></div>
<div><input name="attr_notes" type="text"></input></div>
</div>
<div class="table-bottom" />
</fieldset>
<input type='hidden' class='weaponfocus-show' name='attr_weaponfocus-show' value="false" />
<div class="weaponfocus">
<div class="SRH4">Weapon Focus </div>
<div class="weaponfocus-header">
<div class="table-top-left">Equip</div>
<div class="table-top-mid">Name</div>
<div class="table-top-mid">Reach</div>
<div class="table-top-mid">Skill</div>
<div class="table-top-mid">Conceal</div>
<div class="table-top-mid">Force</div>
<div class="table-top-mid">Power</div>
<div class="table-top-mid">Damage</div>
<div class="table-top-mid">Specialize</div>
<div class="table-top-mid">Attack</div>
<div class="table-top-right">Notes</div>
</div>
<div class="weaponfocus-attributes">
<div class="text-mid"><input type="checkbox" name="attr_weaponfocus-equipped" checked></div>
<input class="myweapontxt" type="text" name="attr_weaponfocus-name" value="Weapon Focus">
<input type="number" name="attr_weaponfocus-reach" value=0>
<select class="mediumselect2" name="attr_weaponfocus skill">
<option value="@{edged}" SELECTED>Edged</option>
<option value="@{clubs}">Club</option>
<option value="@{poles}">Pole Arm</option>
<option value="@{whips}">Whip</option>
</select>
<input type="number" name="attr_weaponfocus-conceal" value=0>
<input type="number" name="attr_weaponfocus-force" value=0>
<input type="number" name="attr_weaponfocus-pawer" value=0>
<select name="attr_weaponfocus-damage" class="mediumselect2">
<option>L</option>
<option SELECTED>M</option>
<option>S</option>
<option>D</option>
</select>
<input type="number" name="attr_weaponfocus-specialized" value=0 \>
<div><button class="attack-dice" id="weaponfocus" type="action" name="act_melee"
title="Melee Attack"></button></div>
<input class="myweapontxt" type="text" name="attr_weaponfocus-notes">
<br>
</div>
</div>
</div>
<input type='hidden' class='explosives-switch' name='attr_explosivesswitch' value="show" />
<div class="explosives-hide">
<div class="SRH3">Explosives<button class="switch-button-show" type="action" id="explosivesswitch" name="act_show-hide">Show</button> </div>
</div>
<div class="explosives-show">
<div class="SRH3">Explosives<button class="switch-button-hide" type="action" id="explosivesswitch" name="act_show-hide">Hide</button> </div>
</div>
<br>
<div class="explosives-show">
<div class="explosives-table-header">
<div class="table-top-left">Name</div>
<div class="table-top-mid">Type</div>
<div class="table-top-mid">Conceal</div>
<div class="table-top-mid">Min</div>
<div class="table-top-mid">S</div>
<div class="table-top-mid">M</div>
<div class="table-top-mid">L</div>
<div class="table-top-mid">Ex</div>
<div class="table-top-mid">Power</div>
<div class="table-top-mid">Damage</div>
<div class="table-top-mid">Intel.</div>
<div class="table-top-mid">Blast</div>
<div class="table-top-mid">Scatter</div>
<div class="table-top-mid">Qty.</div>
<div class="table-top-mid">Manual</div>
<div class="table-top-mid">Sensor</div>
<div class="table-top-right">More</div>
</div>
<fieldset class="repeating_explosives">
<div class="explosives-table-row">
<input type="text" name="attr_name" class="myweapontxt">
<select name="attr_exptype" class="mediumselect2">
<option value="Regular:O">R/O (Regular Offensive)</option>
<option value="Regular:D">R/D (Regular Defensive)</option>
<option value="Regular:C">R/C (Regular Concussion)</option>
<option value="Aerodynamic:O">A/O (Aerodynamic Offensive)</option>
<option value="Aerodynamic:D">A/D (Aerodynamic Defensive)</option>
<option value="Aerodynamic:C">A/C (Aerodynamic Concussion)</option>
<option value="Launcher:O">L/O (Launcher Offensive)</option>
<option value="Launcher:D">L/D (Launcher Defensive)</option>
<option value="Launcher:C">L/C (Launcher Concussion)</option>
<option selected value="Other:Other">Other</option>
</select>
<input type="number" name="attr_conceal" value=0>
<input type="number" name="attr_min" value=0>
<input type="number" name="attr_short" value=0>
<input type="number" name="attr_medium" value=0>
<input type="number" name="attr_long" value=0>
<input type="number" name="attr_extreme" value=0>
<input type="number" name="attr_power">
<div>
<select name="attr_damage" class="mediumselect2">
<option SELECTED>L</option>
<option>M</option>
<option>S</option>
<option>D</option>
<option>M(stun)</option>
<option>S(stun)</option>
<option>D(stun)</option>
</select>
</div>
<input type="number" name="attr_missleint" value=0>
<input type="number" name="attr_blast" value=0 step=0.05>
<input type="number" name="attr_scatter" value=1>
<input type="number" name="attr_ammoremain" value=0>
<div><button class="explosive-dice" type="action" name="act_rangedattack" id="explosive"
title="Explosives Attack"></button></div>
<div><button type="action" name="act_rangedattack" id="sensorexp" title="Sensor Assisted Attack">f</button>
</div>
<div>
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
</div>
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
</div>
<input type="hidden" name="attr_scatterredux">
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
<div class="explosive-mods-switch">
<div>Skill</div>
<div title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
<div title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
<div>Recoil Comp</div>
<div>Gyro Stabalization</div>
<div>Targeting Assistance</div>
<div>Range Finder</div>
<div>Notes:</div>
<select name="attr_skill" class="mediumselect2">
<option selected value="@{throwing}">Throw</option>
<option value="@{launchers}">Launcher</option>
<option value="@{demolitions}">Demolition</option>
</select>
<div><input type="number" name="attr_specialized" value=0></div>
<div><input type="number" name="attr_tnmods" value=0></div>
<div><input type="number" name="attr_recoilcomp" value=0></div>
<select class="mediumselect2" name="attr_gyro">
<option value="0" SELECTED>None</option>
<option value="5">Regular</option>
<option value="6">Deluxe</option>
</select>
<select class="mediumselect2" name="attr_targeting">
<option value="0" SELECTED>None</option>
<option value="-2">Smartlink</option>
<option value="-1">LaserSight</option>
<option value="-1">Smart Goggles</option>
</select>
<div><input name="attr_rangefinder" type="number"></div>
<input name="attr_notes" type="text"></input>
</div>
</div>
</fieldset>
</div>
<input type='hidden' class='armor-switch' name='attr_armorswitch' value="show" />
<div class="armor-hide">
<div class="SRH3">Armor<button class="switch-button-show" type="action" id="armorswitch" name="act_show-hide">Show</button> </div>
</div>
<div class="armor-show">
<div class="SRH3">Armor<button class="switch-button-hide" type="action" id="armorswitch" name="act_show-hide">Hide</button> </div>
</div>
<br>
<div class="armor-show">
<input type="hidden" name="attr_armor-combatpool-pen" value=0>
<input type="hidden" name="attr_armor-quickness-pen" value=0>
<div class="armor">
<header>Pain Resistance: </header><input type='number' name='attr_adeptpainres' value="0" min="0">
<header>Ballistic: </header><input type='number' name='attr_ballistic' value="0" min="0">
<header>Impact: </header><input type='number' name='attr_impact' value="0" min="0" >
<header>Quickness Penalty: <span name="attr_armor-quickness-pen" value=0></span></header>
<header>Combat Pool Penalty: <span name="attr_armor-combatpool-pen" value=0></span></header>
</div>
<div class="armorsets-table-header">
<div class="table-top-left">Equip</div>
<div class="table-top-mid">Name</div>
<div class="table-top-mid">Slot</div>
<div class="table-top-mid">Ballistic Rating</div>
<div class="table-top-mid">Impact Rating</div>
<div class="table-top-right">Notes</div>
</div>
<fieldset class="repeating_armor">
<div class="armorsets-table-row">
<div class="text-mid" ><input type="checkbox" name="attr_equipped">
</div>
<input type=text name="attr_armorname" class="myweapontxt">
<div><select name="attr_slot" class="mediumselect2">
<option SELECTED>body</option>
<option >helmet</option>
<option>shield</option>
<option value="ware">cyberware</option>
<option value="ware">bioware</option>
<option value="ware">nanoware</option>
<option value="gyro">gyro harness</option>
</select>
</div>
<input type="number" value=0 name="attr_ballistic">
<input type="number" value=0 name="attr_impact">
<input name="attr_armornotes" type="text"></input>
</div>
<div class="table-bottom" />
</fieldset>
</div>
<input type='hidden' class='ammo-switch' name='attr_ammoswitch' value="show" />
<div class="ammo-hide">
<div class="SRH3">Ammunition<button class="switch-button-show" type="action" id="ammoswitch" name="act_show-hide">Show</button> </div>
</div>
<div class="ammo-show">
<div class="SRH3">Ammunition<button class="switch-button-hide" type="action" id="ammoswitch" name="act_show-hide">Hide</button> </div>
</div>
<div class="ammo-show">
<br>
<div class="ammunition-list">
<div class="ammo-table-header">
<div class="table-top-left">Ammo Type</div>
<div class="table-top-mid">Ammount</div>
<div class="table-top-mid">Weight</div>
<div class="table-top-right">Damage Modifier</div>
</div>
<fieldset class="repeating_ammunition">
<div class="ammo-table-row">
<div><input type="text" name="attr_ammotype"></div>
<div><input type="number" name="attr_ammocount"></div>
<div><input type="number" name="attr_ammoweight"></div>
<input name="attr_ammonotes" type="text"></input>
</div>
<div class="table-bottom" />
</fieldset>
</div>
</div>
</div>
</div>
<div class="matrix">
<input class="matrixalert-format" type='hidden' name="attr_matrixalert" hidden=true value='None'>
<input type="number" name="attr_matrixsecuritynumber" hidden="true">
<div class="matrix-always-displayed">
<div class="matrix-attributes">
<div>Type</div>
<div>Grid</div>
<div class="matrix-rating">
<div class="header">Security Code</div>
<div>-</div>
<div class="header"> Security Value</div>
<div>/</div>
<div class="header"> Acesss</div>
<div>/</div>
<div class="header"> Control</div>
<div>/</div>
<div class="header"> Index</div>
<div>/</div>
<div class="header"> Files</div>
<div>/</div>
<div class="header"> Slave</div>
</div>
<div><select name="attr_matrixobject" class="mediumselect2">
<option>Grid</option>
<option>Host</option>
<option>VM</option>
</select></div>
<input type="text" name="attr_parentgrid">
<div class="matrix-rating">
<div><select name="attr_matrixcode" class="mediumselect2">
<option SELECTED>BLUE</option>
<option>GREEN</option>
<option>ORANGE</option>
<option>RED</option>
</select></div>
<div>-</div>
<div><input type="number" name="attr_matrixsecurityrating"></div>
<div>/</div>
<div><input type="number" name="attr_matrixaccessrating"></div>
<div>/</div>
<div><input type="number" name="attr_matrixcontrolrating"></div>
<div>/</div>
<div><input type="number" name="attr_matrixindexrating"></div>
<div>/</div>
<div><input type="number" name="attr_matrixfilesrating"></div>
<div>/</div>
<div><input type="number" name="attr_matrixslaverating"></div>
</div>
</div>
<div class="matrix-status">
<div></div>
<div class="matrix-systemrating">
<div><span name="attr_matrixcode"></span> -
<span name="attr_matrixsecurityrating"></span> /
<span name="attr_matrixaccessrating"></span> /
<span name="attr_matrixcontrolrating"></span> /
<span name="attr_matrixindexrating"></span> /
<span name="attr_matrixfilesrating"></span> /
<span name="attr_matrixslaverating"></span>
</div>
</div>
<div></div>
<div>Detection Roll</div><div><button type="action" class="d6-button" name="act_matrixdetect" title="Detection Roll" id="systemdetect">L</button></div>
<div>Security Tally</div><input title="Security Tally for all intruding icons in the system"type="number" name="attr_matrixsecuritytally">
<div></div>
<div title="Reset Security Tally for all icons in the system">Reset Tally</div><div><button type="action" class="pictos-button" name="act_matrixdetect" title="Detection Roll" id="resettally">0</button></div>
<div>Alert Status</div>
<select name="attr_matrixalert" class="mediumselect2">
<option value=0>None</option>
<option value=4>Passive</option>
<option value=5>Active</option>
</select>
<input type="number" name="attr_matrixalertTN" hidden=true>
</div>
</div>
<div class="matrixhost">
<input type='hidden' class='securitysheaf-switch' name='attr_securitysheafswitch' value="show" />
<div class="securitysheaf-show">
<div class="SRH3">Security Sheaf
<button class="switch-button-show" type="action" name="act_securitysheafswitch">Show</button>
</div>
</div>
<div class="securitysheaf-hide">
<div class="SRH3">Security Sheaf
<button class="switch-button-hide" type="action" name="act_securitysheafswitch">Hide</button>
</div>
</div>
<br>
<div class="securitysheaf">
<div class="securitytally">
<header class="table-top-left">Trigger Step</header>
<header class="table-top-right">Event</header>
</div>
<fieldset class="repeating_security">
<div class="securitytally">
<div class="table-item-left"><input type="number" name="attr_step"></div>
<div class="table-item"><input type="text" name="attr_event"></div>
</div>
</fieldset>
<br>
<div class="matrix-intruder-tally">
<header class="table-top-left">Intruder</header>
<header class="table-top-mid">Detection</header>
<header class="table-top-mid">Security Tally</header>
<header class="table-top-right">Reset Tally</header>
</div>
<fieldset class="repeating_intruders">
<div class="matrix-intruder-tally">
<div class="table-item-left"><input type="text" name="attr_intrudername"></div>
<div class="table-item"><button type="action" class="d6-button" name="act_detect" id="systemdetect" title="Detection Roll for intruding icon">L</button></div>
<div class="table-item"><input type="number" name="attr_securitytally" value=0></div>
<div class="table-item"><button type="action" class="pictos-button" name="act_detect" id="resetsecuritytally" title="Reset Security Tally">0</button></div>
</div>
</fieldset>
</div>
</div>
<br>
<input type='hidden' class='ic-switch' name='attr_ic-switch' value="show" />
<div class="ic-show">
<div class="SRH3">Intrusion Countermeasures
<button class="switch-button-show" type="action" name="act_ic-switch">Show</button>
</div>
</div>
<div class="ic-hide">
<div class="SRH3">Intrusion Countermeasures
<button class="switch-button-hide" type="action" name="act_ic-switch">Hide</button>
</div>
</div>
<div class="ic">
<input type='hidden' name='attr_deck-tn' value=0 />
<div class="ic-attributes">
<header class="table-top-left">Name</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Initiative</header>
<header class="table-top-mid">Damage</header>
<header class="table-top-mid">Type</header>
<header class="table-top-mid">Icon Status</header>
<header class="table-top-mid">Test Target</header>
<header class="table-top-mid">Sensor</header>
<header class="table-top-mid">Evade</header>
<header class="table-top-mid">Parry</header>
<header class="table-top-mid">Position</header>
<header class="table-top-mid">Execute</header>
<header class="table-top-right">Resist</header>
</div>
<fieldset class="repeating_ic">
<input type="hidden" name="attr_ic-penalty" value=0>
<div class="ic-attributes-table">
<div><input type="text" name="attr_icname"></div>
<div><input type="number" name="attr_icrating"></div>
<div><span name="attr_matrixsecuritynumber"></span>d6 +<span name="attr_icrating"></span><button type="action" name="act_init" class="d6-button" title="IC Initiative Roll">L</button></div>
<div><input type="number" name="attr_ic-damage" value=0 min=0 max=10></div>
<div><select name="attr_ictype" class="mediumselect2">
<option>Crippler</option>
<option>Killer</option>
<option>Probe</option>
<option>Scramble</option>
<option>Tar Baby</option>
<option>Blaster</option>
<option>Ripper</option>
<option>Sparky</option>
<option>Tar pit</option>
<option>Black Ic</option>
<option>Data Bomb</option>
<option>Pavlov</option>
<option>Scout</option>
<option>Trace</option>
<option>Cerebropathic</option>
<option>Psychotropic</option>
</select></div>
<div><select name="attr_matrix-iconstatus" class="mediumselect2">
<option SELECTED>Intruder</option>
<option>Legitimate</option>
</select></div>
<div><select name="attr_ictargettest" class="mediumselect2">
<option value="@{target|decker|deck-bod-final}">Bod</option>
<option value="@{target|decker|deck-evasion-final}">Evasion</option>
<option value="@{target|decker|deck-sensors-final}">Sensor</option>
<option value="@{target|decker|deck-masking-final}">Masking</option>
<option value="@{target|decker|deck-detection-final}">DetectionFactor</option>
<option>Attack</option>
<option value="@{target|decker|computer}">Computer Skill</option>
<option value="?{Utility Rating?|4}">Utility TN</option>
<option value="@{target|decker|deck-mpcp-final}">MPCP</option>
</select></div>
<div><button type="action" class="d6-button" name="act_combat" title="Sensor Test" id="icsensortest">L</button></div>
<div><button type="action" class="d6-button" name="act_combat" title="Evade Detection" id="icevade">L</button></div>
<div><button type="action" class="d6-button" name="act_combat" title="Parry Attack" id="icparry">L</button></div>
<div><button type="action" class="d6-button" name="act_combat" title="Position Attack" id="icposition">L</button></div>
<div><button type="action" class="d6-button" name="act_combat" title="IC Execute" id="icattack">L</button></div>
<div><button type="action" class="pictos3-button" name="act_combat" title="IC Resist" id="icresist">b</button></div>
<div><textarea name="attr_icnotes" style='width:275px;height:25px;'></textarea>
</div>
</fieldset>
</div>
<br>
<div class="matrixrapid">
Rapid Settings System Rating<input type="text" name="attr_matrixsystemset"><button class="quicksettings"
type="action" name="act_matrixsystemset">Apply</button>
</div>
</div>
<div class="vehicles">
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab'>
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="vehicle-only">
<div class="vehicle-buttons">
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' />
<button class="vehicle-attr-button" type="action" name="act_vehicle-attr-tab">Vehicle
Attributes</button>
<button class="vehicle-combat-button" type="action" name="act_vehicle-combat-tab">Vehicle
Combat</button>
<button class="vehicle-notes-button" type="action" name="act_vehicle-notes-tab">Vehicle Notes</button>
<button class="vehicle-ecm-button" type="action" name="act_vehicle-ecm-tab">ECM/FLUX</button>
</div>
</div>
<div class="drone-only">
<div class="vehicle-buttons">
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' />
<button class="vehicle-attr-button" type="action" name="act_vehicle-attr-tab">Drone Attributes</button>
<button class="vehicle-combat-button" type="action" name="act_vehicle-combat-tab">Drone Combat</button>
<button class="vehicle-notes-button" type="action" name="act_vehicle-notes-tab">Drone Notes</button>
<button class="vehicle-ecm-button" type="action" name="act_vehicle-ecm-tab">ECM/FLUX</button>
</div>
</div>
<div class="vehicle-always-displayed">
<div>
<div class="vehicle-combat-modifiers">
<div class="vehicle-interface">
<header class="table-close-nc">Interface</header>
<div>
<div class="vehicle-interface-details">
<div>None</div>
<div> <input type="radio" name="attr_vehicle-interface" value="none" checked="checked">
</div>
<div>Datajack</div>
<div><input type="radio" name="attr_vehicle-interface" value="datajack"></div>
<div>VCR</div>
<div><input type="radio" name="attr_vehicle-interface" value="vcr"></div>
<div>Autonav</div>
<div><input type="checkbox" name="attr_vehicle-autonav" value=1></div>
</div>
</div>
</div>
<div class="vehicle-speed">
<header class="table-close-nc">Speed</header>
<div>
<div class="vehicle-speed-details">
<div>Current</div>
<div>Maximum</div>
<div><input type="number" name="attr_speed-current" value=0 min=0></div>
<div><span name="attr_speed-max"></span></div>
</div>
<br>
<br>
</div>
</div>
<div class="vehicle-maneuever">
<header class="table-close-nc">Maneuever</header>
<div>
<div class="vehicle-maneuever-details">
<div>Score</div>
<div><input type="number" name="attr_maneuver-score" value=0 min=0></div>
<div><button class="small-rollbutton" id="generate" title="Generate Maneuver Score"
type="action" name="act_maneuever">Generate</button></div>
<div><button class="small-rollbutton" id="compare"
title="Compare Maneuver Score between two vehicles" type="action"
name="act_maneuever">Compare</button></div>
</div>
<br>
<br>
</div>
</div>
<div class="vehicle-env">
<header class="table-close-nc">Terrain</header>
<div>
<div class="vehicle-env-details">
<div>Off Road:</div>
<div><input type="checkbox" name="attr_vehicle-offroad" value=1></div>
</div>
<div>
<div>Terrain</div>
<select name="attr_terrain" class="mediumselect2">
<option SELECTED>Normal</option>
<option>Open</option>
<option>Restricted</option>
<option>Tight</option>
</select>
</div>
<br>
<br>
</div>
</div>
<div class="vehicle-env">
<header class="table-close-nc"->Environment</header>
<div>
<div class="vehicle-env-details table-close-nc">
<div>Urban Setting:</div>
<div><input type="checkbox" name="attr_vehicle-urban" value=1></div>
<div>Combat Zone:</div>
<div><input type="checkbox" name="attr_vehicle-combatzone" value=1></div>
</div>
<div class="vehicle-env-details2">
<div>Weather</div>
<select name="attr_weather" class="mediumselect2">
<option SELECTED>Normal</option>
<option>Bad</option>
<option>Terrible</option>
<option>Fog</option>
<option>Smog</option>
<option>Rain</option>
<option>Snow</option>
<option>ThunderStorm</option>
<option>Windy</option>
<option>Heavy Wind</option>
</select>
</div>
</div>
</div>
<div class="vehicle-sensor">
<header class="table-close-nc">Sensor LOS</header>
<div class="vehicle-sensor-details table-close-nc">
<div>Direct</div>
<div><input type="radio" name="attr_sensor-los" value="direct" checked="checked"></div>
<div>Interupted</div>
<div><input type="radio" name="attr_sensor-los" value="interupted"></div>
</div>
<div class="table-close-nc">Sensor Test</div>
<div><button type="action" class="pictos-button" title="Sensor Test" name="act_vehiclesensor" id="vehiclesensor">f</button></div>
</div>
</div>
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="vehicle-combat-condition">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="SRH4 vehicle-only">Vehicle</div>
<div class="SRH4 drone-only">Drone</div>
<div>Undamaged</div>
<div>Light Damage</div>
<div>Moderate Damage</div>
<div>Serious Damage</div>
<div>Destroyed</div>
<div>Condition</div>
<div>
<input type="radio" name="attr_vehicle-damage" value=0 CHECKED>
</div>
<div>
<input type="radio" name="attr_vehicle-damage" value=1>
<input type="radio" name="attr_vehicle-damage" value=2>
</div>
<div>
<input type="radio" name="attr_vehicle-damage" value=3>
<input type="radio" name="attr_vehicle-damage" value=4>
<input type="radio" name="attr_vehicle-damage" value=5>
</div>
<div>
<input type="radio" name="attr_vehicle-damage" value=6>
<input type="radio" name="attr_vehicle-damage" value=7>
<input type="radio" name="attr_vehicle-damage" value=8>
<input type="radio" name="attr_vehicle-damage" value=9>
</div>
<div><input type="radio" name="attr_vehicle-damage" value=100></div>
</div>
<div class="rc-condition">
<div class="rc-combat-condition">
<div class="SRH4">RC Signal</div>
<div>Full Strength</div>
<div>Light Degredation</div>
<div>Moderate Degredation</div>
<div>Serious Degredation</div>
<div>Disengaged</div>
<div class="text-mid-right">Command Channel</div>
<div>
<input type="radio" name="attr_rccommand-damage" value=0 CHECKED>
</div>
<div>
<input type="radio" name="attr_rccommand-damage" value=1>
<input type="radio" name="attr_rccommand-damage" value=2>
</div>
<div>
<input type="radio" name="attr_rccommand-damage" value=3>
<input type="radio" name="attr_rccommand-damage" value=4>
<input type="radio" name="attr_rccommand-damage" value=5>
</div>
<div>
<input type="radio" name="attr_rccommand-damage" value=6>
<input type="radio" name="attr_rccommand-damage" value=7>
<input type="radio" name="attr_rccommand-damage" value=8>
<input type="radio" name="attr_rccommand-damage" value=9>
</div>
<div><input type="radio" name="attr_rccommand-damage" value=100></div>
<div class="text-mid-right">Simsense Channel</div>
<div>
<input type="radio" name="attr_rcsimsense-damage" value=0 CHECKED>
</div>
<div>
<input type="radio" name="attr_rcsimsense-damage" value=1>
<input type="radio" name="attr_rcsimsense-damage" value=2>
</div>
<div>
<input type="radio" name="attr_rcsimsense-damage" value=3>
<input type="radio" name="attr_rcsimsense-damage" value=4>
<input type="radio" name="attr_rcsimsense-damage" value=5>
</div>
<div>
<input type="radio" name="attr_rcsimsense-damage" value=6>
<input type="radio" name="attr_rcsimsense-damage" value=7>
<input type="radio" name="attr_rcsimsense-damage" value=8>
<input type="radio" name="attr_rcsimsense-damage" value=9>
</div>
<div><input type="radio" name="attr_rcsimsense-damage" value=100></div>
<div class="text-mid-right">System Channel</div>
<div>
<input type="radio" name="attr_rcsystem-damage" value=0 CHECKED>
</div>
<div>
<input type="radio" name="attr_rcsystem-damage" value=1>
<input type="radio" name="attr_rcsystem-damage" value=2>
</div>
<div>
<input type="radio" name="attr_rcsystem-damage" value=3>
<input type="radio" name="attr_rcsystem-damage" value=4>
<input type="radio" name="attr_rcsystem-damage" value=5>
</div>
<div>
<input type="radio" name="attr_rcsystem-damage" value=6>
<input type="radio" name="attr_rcsystem-damage" value=7>
<input type="radio" name="attr_rcsystem-damage" value=8>
<input type="radio" name="attr_rcsystem-damage" value=9>
</div>
<div><input type="radio" name="attr_rcsystem-damage" value=100></div>
</div>
</div>
</div>
<div class="vehicle-quickstats-border">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="vehicle-driver">
<header>Driver: </header>
<input type="text" name="attr_rigger" class="myweapontxt" />
</div>
<div class="vehicle-quickstats">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div></div>
<div>Max</div>
<div>Used</div>
<div>Control Pool:</div>
<input type="number" name="attr_control-pool" min=0 value=0>
<div><input type='hidden' class='controlpool-over' name='attr_controlpool-over' /><span class="controlpool-over" name="attr_controlpool-used"></span></div>
</div>
<br>
<div class="table-top-nc"><b>Skills</div>
<div class="vehicle-quickstats">
<div>Vehicle:</div>
<input type="number" name="attr_vehicle-skill" min=0 value=0>
<div></div>
<div>Gunnery:</div>
<input type="number" name="attr_gunnery" min=0 value=0>
<div></div>
<div class="drone-only">Pilot Rating:</div>
<div class="drone-only"><span name="attr_pilot" /></div>
<div></div>
</div>
<br>
<div class="table-top-nc drone-only"><b>Operative Mode:</div>
<div class="vehicle-quickstats">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="drone-only">Primary:</div>
<div class="drone-only"></div>
<div class="drone-only"><input type="radio" name="attr_drone_mode" value="primary"></div>
<div class="drone-only">Secondary:</div>
<div class="drone-only"></div>
<div class="drone-only"><input type="radio" name="attr_drone_mode" value="secondary"></div>
</div>
</div>
</div>
<div class="vehicle-attr-tab">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="SRH4 vehicle-only">Vehicle Configuration</div>
<div class="SRH4 drone-only">Drone Configuration</div>
<div class="vehicle-info">
<div class="text-mid-left">Name</div>
<div>Manual Control</div>
<div>Datajack Port</div>
<div>Rigger Adaption</div>
<div>Remote Control</div>
<div class="text-mid">Vehicle Type </div>
<div class="text-mid">Vehicle Size </div>
<input type="text" name="attr_character_name">
<div><input type="checkbox" name="attr_vehicle-control" value=0></div>
<div><input type="checkbox" name="attr_vehicle-datajack" value=0></div>
<div><input type="checkbox" name="attr_vehicle-riggeradapted" value=0></div>
<div><input type="checkbox" name="attr_vehicle-rc" value=0></div>
<select name="attr_vehicle-type" class="mediumselect2">
<option SELECTED>Car/Pickup Truck</option>
<option>Fighter Jet</option>
<option>Heavy Truck</option>
<option>Helicopter</option>
<option>Hovercraft</option>
<option>HSCT/Suborbital</option>
<option>Large Airplane</option>
<option>LAV/T-bird</option>
<option>Limousine/Light Truck/Van</option>
<option>LTA/Zeppelin</option>
<option>Motorcycle</option>
<option>Racing Boat</option>
<option>Semiballistic</option>
<option>Small Airplane</option>
<option>Small Motorboat</option>
<option>Sports Car</option>
<option>Tracked Vehicle</option>
<option>Tractor Trailer</option>
<option>Train/Monorail</option>
<option>Ultra-light Aircraft</option>
<option>Yacht</option>
</select>
<select name="attr_vehicle-size" class="mediumselect2">
<option SELECTED>Normal</option>
<option>Large</option>
<option>Extra-Large</option>
</select>
</div>
<div class="vehicle-stats">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="SRH4 vehicle-only">Vehicle Attributes</div>
<div class="SRH4 drone-only">Drone Attributes</div>
<div class="vehicle-stats-regular">
<div class="vehicle-attributes">
<div>Handling:</div>
<div class="vehicle-offroad"><input type="number" name="attr_handling-street" min=0 value=0 />
<input type="number" name="attr_handling-offroad" min=0 value=0 />
</div>
<div>Speed:</div>
<div class="vehicle-offroad">
<input type="number" name="attr_speed-rating" min=0 value=0>
<span name="attr_speed-max"></span>
</div>
<div>Acceleration:</div>
<input type="number" name="attr_acceleration" min=0 value=0>
<div>Body:</div>
<input type="number" name="attr_body" min=0 value=0>
<div>Armor:</div>
<input type="number" name="attr_armor" min=0 value=0>
<div>Signature:</div>
<input type="number" name="attr_signature" min=0 value=0>
<div>Autonav:</div>
<input type="number" name="attr_autonav" min=0 value=0>
<div>Pilot:</div>
<input type="number" name="attr_pilot" min=0 value=0>
</div>
<div class="vehicle-config">
<div>Firmpoints:</div>
<input type="number" name="attr_firmpoints" min=0 value=0>
<div>Hardpoints:</div>
<input type="number" name="attr_hardpoints" min=0 value=0>
<div>Seating:</div>
<div><input type="text" name="attr_seating"></div>
<div>Entry Points:</div>
<div><input type="text" name="attr_entry"></div>
<div>Fuel:</div>
<input type="text" name="attr_fuel">
<div>Economy:</div>
<input type="text" name="attr_economy">
<div>Cargo:</div>
<input type="number" name="attr_cargo" min=0 value=0>
<div>Load:</div>
<input type="number" name="attr_load" min=0 value=0>
</div>
<div class="vehicle-misc">
<div>Vehicle Skill:</div>
<input type="number" name="attr_vehicle-skill" min=0 value=0>
<div>Gunnery:</div>
<input type="number" name="attr_gunnery" min=0 value=0>
<div>Walk:</div>
<div><span name="attr_walk"></span></div>
<div>Run:</div>
<div><span name="attr_run"></span></div>
<div>IVIS Pool;</div>
<input type="number" name="attr_ivis-pool" min=0 value=0>
<div>Stress:</div>
<input type="number" name="attr_stress" min=0 value=0>
<div>Setup/Breakdown:</div>
<input type="number" name="attr_setup" min=0 value=0>
<div>Total Cost:</div>
<input type="number" name="attr_totalcost" min=0 value=0>
</div>
</div>
<div class="SRH4">Rapid Attribute Set: <input type="text" name="attr_vehicle-rapid-attributes"><button class="quicksettings" type="action" name="act_vehicleset">Apply</button></div>
</div>
</div>
<div class="vehicle-notes-tab">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="SRH3 vehicle-only">Vehicle Notes</div>
<div class="SRH3 drone-only">Drone Notes</div>
<textarea name="attr_vehicle-notes" style='width:500px;height:200px'>Modification Notes</textarea>
</div>
<div class="vehicle-ecm-tab">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="SRH3 vehicle-only">Vehicle Electornics and ECM/ECCM</div>
<div class="SRH3 drone-only">Drone Electornics and ECM/ECCM</div>
<div class="vehicle-flux">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="SRH4 vehicle-only">Vehicle Flux Rating</div>
<div class="SRH4 drone-only">Drone Flux Rating</div>
<span name="attr_vehicle-flux-max"></span>
<div class="SRH4 vehicle-only">Vehicle Flux Used</div>
<div class="SRH4 drone-only">Drone Flux Used</div>
<div><input type='hidden' class='vehicle-flux-overload' name='attr_vehicle-flux-overload' value=0 />
<span class="flux-overload" name="attr_vehicle-fluxtotal"></span>
</div>
</div>
<div class="vehicle-electronics">
<div class="table-top-left"></div>
<div class="table-top-mid"><b>Rating</div>
<div class="table-top-mid"><b>Flux Rating</div>
<div class="table-top-mid"><b>Modified Flux</div>
<div class="table-top-mid"><b>Max Flux</div>
<div class="table-top-mid"><b>Roll Test</div>
<div class="table-top-right"><b>Opposition Test</div>
<div class="table-item-left">Sensors:</div>
<div class="table-item"><input type="number" name="attr_sensors-rating" min=0 value=0></div>
<div class="table-item"><span name="attr_sensors-flux"></div>
<div class="table-item"><input type="number" name="attr_sensors-fluxmod" min=0 value=0></div>
<div class="table-item"><span name="attr_sensors-fluxmax"></div>
<div class="table-item"><button type="action" class="pictos-button" title="Sensor Test" name="act_vehiclesensor" id="vehiclesensor">f</button></div>
<div class="table-item"></div>
<div class="table-item-left">Sonar:</div>
<div class="table-item"><input type="number" name="attr_sonar-rating" min=0 value=0></div>
<div class="table-item"><span name="attr_sonar-flux"></div>
<div class="table-item"><input type="number" name="attr_sonar-fluxmod" min=0 value=0></div>
<div class="table-item"><span name="attr_sonar-fluxmax"></div>
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="Sonar Test"
value="&{template:vehicle} {{type=Sonar Test}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{sonar-rating}]]d6>[[{2,( @{target|Target|signature} +@{wp-vehicle} +@{sensor-test-los} +@{sensor-test-weather} +@{sensor-test-terrain} +@{vehicle-urban} +?{Additional Modifiers|0})}kh1]]!!]] }}"></button>
</div>
<div class="table-item"></div>
<div class="table-item-left">ECM:</div>
<div class="table-item"><input type="number" name="attr_ecm-rating" min=0 value=0></div>
<div class="table-item"><span name="attr_ecm-flux"></div>
<div class="table-item"><input type="number" name="attr_ecm-fluxmod" min=0 value=0></div>
<div class="table-item"><span name="attr_ecm-fluxmax"></div>
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="ECM Jamming"
value="&{template:vehicle} {{type=ECM Jamming}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{ecm-fluxmod}]]d6>[[{2,(@{target|Target|sensors-rating} +?{Additional Modifiers|0})}kh1]]!!]] }} {{notes=Roll Oposition test for @{target|Target|token_name}}}"></button>
</div>
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="ECM Opposition Test"
value="&{template:vehicle} {{type=ECM Opposition Test}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{sensors-fluxmod}]]d6>[[{2,(@{target|Target|ecm-rating} +?{Additional Modifiers|0})}kh1]]!!]] }} {{notes= Compare net successes with @{target|Target|token_name}}}"></button>
</div>
<div class="table-item-left">ECCM:</div>
<div class="table-item"><input type="number" name="attr_eccm-rating" min=0 value=0></div>
<div class="table-item"><span name="attr_eccm-flux"></div>
<div class="table-item"><input type="number" name="attr_eccm-fluxmod" min=0 value=0></div>
<div class="table-item"><span name="attr_eccm-fluxmax"></div>
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="ECCM Counter-Jamming"
value="&{template:vehicle} {{type=ECCM Counter-Jamming}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{eccm-fluxmod}]]d6>[[{2,(@{target|Target|ecm-rating} +?{Additional Modifiers|0})}kh1]]!!]] }} {{notes=Roll Oposition test for @{target|Target|token_name}}}"></button>
</div>
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="ECCM Opposition Test"
value="&{template:vehicle} {{type=ECCM Opposition Test}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{ecm-fluxmod}]]d6>[[{2,(@{target|Target|eccm-rating} +?{Additional Modifiers|0})}kh1]]!!]] }} {{notes= Compare net successes with @{target|Target|token_name}}}"></button>
</div>
<div class="table-item-left">ED:</div>
<div class="table-item"><input type="number" name="attr_ed-rating" min=0 value=0></div>
<div class="table-item"><span name="attr_ed-flux"></div>
<div class="table-item"><input type="number" name="attr_ed-fluxmod" min=0 value=0></div>
<div class="table-item"><span name="attr_ed-fluxmax"></div>
<div class="table-item"><b>Activate</div>
<div class="table-item"></div>
<div class="table-item-left">ECD:</div>
<div class="table-item"><input type="number" name="attr_ecd-rating" min=0 value=0></div>
<div class="table-item"><span name="attr_ecd-flux"></div>
<div class="table-item"><input type="number" name="attr_ecd-fluxmod" min=0 value=0></div>
<div class="table-item"><span name="attr_ecd-fluxmax"></div>
<div class="table-item"><input type="checkbox" name="attr_ecd-enabled" value=1></div>
<div class="table-item"></div>
</div>
</div>
<div class="vehicle-combat-tab">
<div class="vehicle-stats-mini">
<div class="text-mid">Initiative:</div>
<div class="center-checkbox"><button type="action" name="act_init" class="d6-button" title="Vehicle Initiative" id="vehicleinit">L</button></div>
<div class="text-mid">End Turn:</div>
<div class="center-checkbox"><button type="action" name="act_endturn" class="d6-button" title="End Combat Turn" id="endturn">L</button></div>
<div class="text-mid">Hand</div>
<div class="text-mid"><span name="attr_handling"></span><button type="action" class="d6-button" title="Driving Test" name="act_vehicledriving" id="driving">L</button></div>
<div class="text-mid">Accel:</div>
<div class="text-mid"><span name="attr_acceleration"></span>
<button type="action" class="d6-button" title="Vehicle Acceleration Test" name="act_vehicleaction" id="accelerating">L</button></div>
<div class="text-mid">Body:</div>
<div class="text-mid"><span name="attr_body"></span><button type="action" class="d6-button" title="Resist Damage" name="act_resistvehicledmg" id="resistvehicledmg">L</button></div>
<div class="text-mid">Armor:</div>
<div class="text-mid"><span name="attr_armor"></span></div>
<div class="text-mid">Sig:</div>
<div class="text-mid"><span name="attr_signature"></span></div>
<div class="text-mid">Auto:</div>
<div class="text-mid"><span name="attr_autonav"></span></div>
<div class="text-mid">Sensor:</div>
<div class="text-mid"><span name="attr_sensors-rating"></span><button type="action" class="pictos-button" title="Sensor Test" name="act_vehiclesensor" id="vehiclesensor">f</button></div>
</div>
<div class="vehicle-actions">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="SRH3 vehicle-only">Vehicle Actions</div>
<div class="SRH3 drone-only">Drone Actions</div>
<div><button type="action" class="basic-button" title="Vehicle Acceleration Test" name="act_vehicleaction" id="accelerating">Accelerate</button></div>
<div><button type="action" class="basic-button" title="Vehicle Breaking Test" name="act_vehicleaction"
id="breaking">Brake</button></div>
<div><button type="action" class="basic-button" title="Vehicle Positioning Test"
name="act_vehicleposition" id="breaking">Position</button></div>
<div><button type="action" class="basic-button" title="Vehicle Ramming Test" name="act_vehicleaction"
id="ram">Ram</button></div>
<div><button type="action" class="basic-button" title="Vehicle Hiding Test" name="act_vehicleaction"
id="hide">Hide</button></div>
<div><button type="action" class="basic-button" title="Vehicle Relocate Test" name="act_vehicleaction"
id="relocate">Relocate</button></div>
<div><button type="action" class="basic-button" title="Vehicle Crash Test" name="act_vehiclecrash"
id="crash">Crash</button></div>
</div>
<input type='hidden' class='gunnery-switch' name='attr_gunneryswitch' value="show" />
<div class="vehicle-manual-gunnery">
<div class="table-top-left">Relative Motion</div>
<div class="table-top-mid">Movement</div>
<div class="table-top-mid">Maneuver Score</div>
<div class="table-top-mid">Visibility</div>
<div class="table-top-mid">Sensor Mode</div>
<div class="table-top-mid">Target Type</div>
<div class="table-top-mid">Manual TN</div>
<div class="table-top-mid">Sensor TN</div>
<div class="table-top-right">Recoil</div>
<div class="table-item-left"><select name="attr_gunnerymotion" class="mediumselect2" title="motion relative to target">
<option value=0 selected>None</option>
<option value=-1>Towards</option>
<option value=1>Away</option>
</select></div>
<div class="table-item"><select name="attr_move" class="mediumselect2" title="relative movement target">
<option value=0 selected>About Equal</option>
<option value=2>Up to 2X</option>
<option value=4>Up to 3X</option>
<option value=6>More than 3X</option>
<option value=0>Not Moving</option>
<option value=1>walk</option>
<option value=2>walk (difficult ground)</option>
<option value=4>run</option>
<option value=6>run (difficult ground)</option>s
</select></div>
<div class="table-item"><select name="attr_gunnerymaneuver" class="mediumselect2" title="Maneuver score difference">
<option value=0 selected>None</option>
<option value=-1>Attacker Greaty by 10</option>
<option value=1>Target Greater by 10</option>
</select></div>
<div class="table-item"><select name="attr_visibility" class="mediumselect2">
<option value=0 selected>Normal</option>
<option value="@{fulldark}">Full Dark</option>
<option value="@{partiallight}">Partail Light</option>
<option value="@{minlight}">Minimal Light</option>
<option value="@{glare}">Glare</option>
<option value="@{mist}">Mist</option>
<option value="@{lightsmoke}">Light Smoke/Rain</option>
<option value="@{fullsmoke}">Heavy Smoke/Rain</option>
<option value="@{thermalsmoke}">Thermal Smoke</option>
</select> </div>
<div class="table-item"><select name="attr_visionenhancement" class="mediumselect2">
<option>None</option>
<option selected>LowLight</option>
<option>Thermal</option>
</select></div>
<input type='hidden' name='attr_gunnermount' value=0" />
<div class="table-item"><select name="attr_gunnerytargettype" class="mediumselect2" title="Target type/size">
<option value=0 selected>Metahuman sized</option>
<option value=1>Small critter</option>
<option value=-1>Large critter</option>
<option value=1>Small drone</option>
<option value=0>Motorcyle</option>
<option value=-1>Automobile</option>
<option value=-1>Limo/Light Truck</option>
<option value=-3>Heavy Truck/Trailer</option>
<option value=-1>Boat</option>
<option value=-3>Yacht</option>
<option value=-8>Freighter/Tanker</option>
<option value=0>Ultralight glider</option>
<option value=-2>Fixed Wing</option>
<option value=-6>Commerical Airliner</option>
<option value=-2>Helicopter</option>
<option value=-6>Zepplin/Blimp</option>
<option value=-3>LAV</option>
<option value=-3>Military Ground Vehicle</option>
</select></div>
<div class="table-item"><span class="text-mid" name="attr_rangedTN"></div>
<div class="table-item"><span class="text-mid" name="attr_sensor-gunnery-tn"></div>
<div class="table-item"><span class="text-mid" name="attr_recoilpen"></div>
</div>
<div class="SRH3">Vehicle Weapons</div>
<div class="vehicles-weapons">
<div class="ranged-table-headers">
<div class="table-top-left">Equip</div>
<div class="table-top-mid">General</div>
<div class="table-top-mid">Range</div>
<div class="table-top-mid">Fire Mode</div>
<div class="table-top-mid">Damage</div>
<div class="table-top-mid">Ammunition</div>
<div class="table-top-right">Show</div>
</div>
<div class="ranged-table-items">
<div class="table-item-left" title="Primary Hand">Pri</div>
<div class="table-item" title="Off Hand">Sec</div>
<div class="table-item">Name</div>
<div class="table-item">Type</div>
<div class="table-item">Mount</div>
<div class="table-item">Min</div>
<div class="table-item">S</div>
<div class="table-item">M</div>
<div class="table-item">L</div>
<div class="table-item">Ex</div>
<div class="table-item">SS</div>
<div class="table-item">SA</div>
<div class="table-item">BF</div>
<div class="table-item">FA</div>
<div class="table-item">Power</div>
<div class="table-item">Damage</div>
<div class="table-item">Max</div>
<div class="table-item">Remain</div>
<div class="table-item">Manual</div>
<div class="table-item">Sensor</div>
<div class="table-item">More</div>
</div>
<fieldset class="repeating_rangedweapons">
<div class="ranged-table-row">
<div></div>
<div></div>
<input type="text" name="attr_name" class="myweapontxt">
<select name="attr_type" class="mediumselect2">
<option SELECTED>Other</option>
<option>Hold-out Pistol</option>
<option>Light Pistol</option>
<option>Machine Pistol</option>
<option>Heavy Pistol</option>
<option>SMG</option>
<option>Taser</option>
<option>Shotgun</option>
<option>Sporting Rifle</option>
<option>Sniper Rifle</option>
<option>Assault Rifle</option>
<option>Light Machine Gun</option>
<option>Medium Machine Gun</option>
<option>Heavy Machine Gun</option>
<option>Assault Cannon</option>
<option>Minigun</option>
<option>Bow</option>
<option>Light Crossbow</option>
<option>Medium Crossbow</option>
<option>Heavy Crossbow</option>
<option>Sling Shot</option>
<option>Sling Launcher</option>
<option>Thrown Knife</option>
<option>Shuriken</option>
<option>Caltrops</option>
<option>Nets</option>
<option>Bracer</option>
<option>Gun Cane</option>
<option>Speargun</option>
<option>Net Gun</option>
<option>Laser Pistol</option>
<option>Laser Rifle</option>
<option>Laser Sniper</option>
<option>"Gyrojet (land)</option>
<option>"Gyrojet (water)</option>
<option>Flamethrower</option>
<option>Blowgun</option>
</select>
<select name="attr_weaponmont" class="mediumselect2">
<option SELECTED">Hard</option>
<option>Firm</option>
<option>Hard</option>
<option>Turret</option>
</select>
<input type="number" name="attr_min">
<input type="number" name="attr_short">
<input type="number" name="attr_medium">
<input type="number" name="attr_long">
<input type="number" name="attr_extreme">
<div class="text-mid"><input type="checkbox" name="attr_firemode" value="ss"/></div>
<div class="text-mid"><input type="checkbox" name="attr_firemode" value="sa"1 /></div>
<div class="text-mid"><input type="checkbox" name="attr_firemode" value="bf"/></div>
<div class="text-mid"><input type="checkbox" name="attr_firemode" value="fa"/></div>
<input type="number" name="attr_power">
<select name="attr_damage" class="mediumselect2">
<option SELECTED>L</option>
<option>M</option>
<option>S</option>
<option>D</option>
<option>L(stun)</option>
<option>M(stun)</option>
<option>S(stun)</option>
<option>D(stun)</option>
</select>
<input type="number" name="attr_ammo" value=0>
<input type="number" name="attr_ammoremain" value=0>
<div><button class="attack-dice" type="action" id="vehicleranged" name="act_rangedattack"
title="Manual Gunnery"></button></div>
<div><button type="action" id="vehiclesensor" name="act_rangedattack"
title="Sensor Enhanced Gunnery">f</button></div>
<div>
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
</div>
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
<span class="show-weaponmods">
<div class="text-mid" title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box"> <b>Skill</div>
<div class="text-mid" title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
<div class="text-mid" title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
<div class="text-mid" title="Gas vents and other recoil accesories"><b>Recoil Comp</div>
<div><b>Gyro Stabalization</div>
<div title="accesories that improve to hit number for ranged combat"><b>Targeting Assistance
</div>
<div class="text-mid" title="Clip, Belt, Cylinder, Magazine or Action Break"><b>Reload Type
</div>
<div class="text-mid" title="number or clips, belts or individual rounds"><b>Reloads</div>
<div class="text-mid"><b>Ammo Type</div>
<div class="text-mid"><b>Notes:</div>
<select name="attr_skill" class="mediumselect3"
title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box">
<option SELECTED value="@{gunnery}">Gunnery</option>
</select>
<div><input type="number" name="attr_specialized" value=0></div>
<div><input type="number" name="attr_tnmods" value=0></div>
<div><input type="number" name="attr_recoilcomp" title="Gas vents and other recoil accesories"
value=0></div>
<select class="mediumselect3" name="attr_gyro">
<option value="0" SELECTED>None</option>
<option value="5">Regular</option>
<option value="6">Deluxe</option>
</select>
<select class="mediumselect3" name="attr_targeting">
<option value="0" SELECTED>None</option>
<option value="-2">Smartlink</option>
<option value="-1">LaserSight</option>
<option value="-1">Smart Goggles</option>
</select>
<select name="attr_reloadmethod" class="mediumselect3">
<option>clip</option>
<option>break</option>
<option>magazine</option>
<option>speed loader</option>
<option>cylinder</option>
<option>belt</option>
</select>
<div><input type="number" name="attr_reloads" value=0></div>
<select name="attr_ammotype" class="mediumselect3">
<option value="regular">Regular</option>
<option value="adps">ADPS</option>
<option value="explosive">Explosive</option>
<option value="explosive2">Explosive EX</option>
<option value="flechette">Flechette</option>
<option value="gel">Gel</option>
<option value="tracer">Tracer</option>
<option value="av">Anti-Vehicl</option>
<option value="capsule">Capsule</option>
<option value="glazer">Glazer</option>
<option value="hic">Hi-C<option>
<option value="hpoint">Hollow Point</option>
<option value="incendiary">Incendiary</option>
<option value="mercury">Mercury</option>
<option value="tracker">Tracker</option>
</select>
textarea name="attr_notes" style='width:150px;height:22px;'></textarea>
</span>
</div>
<div class="table-bottom" />
</fieldset>
<div class="SRH3">Missles/Rockets</div>
<div class="explosives-table-header">
<div class="table-top-left">Name</div>
<div class="table-top-mid">Type</div>
<div class="table-top-mid">Mount</div>
<div class="table-top-mid">Min</div>
<div class="table-top-mid">S</div>
<div class="table-top-mid">M</div>
<div class="table-top-mid">L</div>
<div class="table-top-mid">Ex</div>
<div class="table-top-mid">Power</div>
<div class="table-top-mid">Damage</div>
<div class="table-top-mid">Intel.</div>
<div class="table-top-mid">Blast</div>
<div class="table-top-mid">Scatter</div>
<div class="table-top-mid">Qty.</div>
<div class="table-top-mid">Manual</div>
<div class="table-top-mid">Sensor</div>
<div class="table-top-right">More</div>
</div>
<fieldset class="repeating_explosives">
<div class="explosives-table-row">
<input type="text" name="attr_name" class="myweapontxt">
<select name="attr_exptype" class="mediumselect2">
<option value="Launcher:O">L/O (Launcher Offensive)</option>
<option value="Launcher:D">L/D (Launcher Defensive)</option>
<option value="Launcher:C">L/C (Launcher Concussion)</option>
<option selected value="Other:Other">Other</option>
</select>
<select name="attr_weaponmont" class="mediumselect2">
<option SELECTED">Hardpoint</option>
<option>Firmpoint</option>
<option>Turret</option>
</select>
<div class="weaponronum"><span name="attr_min" value=0></span></div>
<div class="weaponronum"><span name="attr_short" value=0></span></div>
<div class="weaponronum"><span name="attr_medium" value=0></span></div>
<div class="weaponronum"><span name="attr_long" value=0></span></div>
<div class="weaponronum"><span name="attr_extreme" value=0></span></div>
<input type="number" name="attr_power">
<div>
<select name="attr_damage" class="mediumselect2">
<option SELECTED>L</option>
<option>M</option>
<option>S</option>
<option>D</option>
<option>L(stun)</option>
<option>M(stun)</option>
<option>S(stun)</option>
<option>D(stun)</option>
</select>
</div>
<input type="number" name="attr_missleint" value=0>
<input type="number" name="attr_blast" value=0 step=0.05>
<input type="number" name="attr_scatter" value=1>
<input type="number" name="attr_ammoremain" value=0>
<div><button class="explosive-dice" type="action" name="act_rangedattack" id="vehicle-explosive"
title="Explosives Attack"></button></div>
<div><button type="action" name="act_rangedattack" id="vehicle-sensorexp"
title="Sensor Assisted Attack" class="pictos-button">f</button></div>
<div>
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
</div>
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
<input type="hidden" name="attr_scatterredux">
<div class="explosive-mods-switch">
<div>Skill</div>
<div title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
<div title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
<div>Recoil Comp</div>
<div>Gyro Stabalization</div>
<div>Targeting Assistance</div>
<div>Range Finder</div>
<div>Notes:</div>
<select name="attr_skill" class="mediumselect3">
<option selected value="@{launchers}">Launcher</option>
<option value="@{demolitions}">Demolition</option>
</select>
<div><input type="number" name="attr_specialized" value=0></div>
<div><input type="number" name="attr_tnmods" value=0></div>
<div><input type="number" name="attr_recoilcomp" value=0></div>
<select class="mediumselect3" name="attr_gyro">
<option value="0" SELECTED>None</option>
<option value="5">Regular</option>
<option value="6">Deluxe</option>
</select>
<select class="mediumselect3" name="attr_targeting">
<option value="0" SELECTED>None</option>
<option value="-2">Smartlink</option>
<option value="-1">LaserSight</option>
<option value="-1">Smart Goggles</option>
</select>
<div><input name="attr_rangefinder" type="number"></div>
<textarea name="attr_notes" style='width:210px;height:20px'></textarea>
</div>
</div>
<div class="table-bottom" />
</fieldset>
<br>
</div>
</div>
</div>
</div>
<div class="sheet-cyberware">
<div class="cyberware-lists">
<div class="SRH2">Cyberware</div>
<div class="cyberware-list">
<header class="table-top-left">Name</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Essence</header>
<header class="table-top-right">Description</header>
</div>
<fieldset class="repeating_cyberware">
<div class="cyberware-list">
<div class="table-item-left"><input type="text" name="attr_cyberware-name"></div>
<div class="table-item"><input type="number" name="attr_cyberware-rating"></div>
<div class="table-item"><input type='number' name='attr_cyberware-essence' step='0.01' value=0></div>
<div class="table-item"><input type="text" name="attr_cyberware-notes"></div>
</fieldset>
<div class="SRH2">Bioware</div>
<div class="cyberware-list">
<header class="table-top-left">Name</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Bio Index</header>
<header class="table-top-right">Description</header>
</div>
<fieldset class="repeating_bioware">
<div class="cyberware-list">
<div class="table-item-left"><input type="text" name="attr_bioware-name"></div>
<div class="table-item"><input type="number" name="attr_bioware-rating"></div>
<div class="table-item"><input type='number' name='attr_bioware-index' step='0.01' value=0></div>
<div class="table-item"><input type="text" name="attr_bioware-notes"></div>
</div>
</fieldset>
<div class="SRH2">Nanotech</div>
<div class="cyberware-list">
<header class="table-top-left">Name</header>
<header class="table-top-mid">Rating</header>
<header class="table-top-mid">Essence</header>
<header class="table-top-right">Description</header>
</div>
<fieldset class="repeating_nanotech">
<div class="cyberware-list">
<div class="table-item-left"><input type="text" name="attr_nanotech-name"></div>
<div class="table-item"><input type="number" name="attr_nanotech-rating"></div>
<div class="table-item"><input type='number' name='attr_nanotech-essence' step='0.01' value=0></div>
<div class="table-item"><input type="text" name="attr_nanotech-notes"></div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-contacts">
<div class="SRH2">Lifestyle</div>
<div>
<div>
<div class="SRH3">Contacts</div>
<div class="contacts">
<header class="table-top-left">Name</header>
<header class="table-top-mid">Contact Type</header>
<header class="table-top-right">Notes Type</header>
</div>
<fieldset class="repeating_contacts">
<div class="contacts">
<input type="text" name="attr_name">
<select name="attr_contacttype" class="mediumselect2">
<option SELECTED>Contact</option>
<option>Buddy</option>
<option>Friend for Life</option>
<option>Followers</option>
</select>
<input name="attr_contactdetail" type="text" value="Name Occupation Upkeep">
</div>
</fieldset>
</div>
</div>
<div>
<div class="SRH3">Lifestyle Class/Gear at Home</div>
<div class="lifestyles">
<header class="table-top-left">Lifestyle</header>
<header class="table-top-mid">Cost</header>
<header class="table-top-mid">Months Paid</header>
<header class="table-top-mid">Address</header>
<header class="table-top-mid">Description</header>
<header class="table-top-mid">Edges/Flaws</header>
</div>
<fieldset class="repeating_lifestyles">
<div class="lifestyles">
<input type="text" name="attr_lifestyle">
<input type="number" name="attr_cost">
<input type="number" name="attr_monthspaid">
<input type="text" name="attr_address">
<input type="text" name="attr_description">
<input type="text" name="attr_edgesflaws">
</div>
</fieldset>
</div>
</div>
<div class="sheet-spirit">
</div>
<div class="sheet-critter-powers">
<div class="critter-powers">
<div>
<div class="SRH4">Powers</div>
<div class="critter-powers-table">
<div class="table-top-left"><b>Power</div>
<div class="table-top-right"><b>Description</div>
</div>
<fieldset class='repeating_critter-powers'>
<div class="critter-powers-table">
<div class="table-item-left"><input type="text" name="attr_name" /></div>
<div class="table-item"><input type="text" name="attr_description" /></div>
</div>
</fieldset>
</div>
<div>
<div class="SRH4">Weakness</div>
<div class="critter-powers-table">
<div class="table-top-left"><b>Weakness</div>
<div class="table-top-right"><b>Description</div>
</div>
<fieldset class='repeating_critter-weaknesses'>
<div class="critter-powers-table">
<div class="table-item-left"><input type="text" name="attr_name" /></div>
<div class="table-item"><input type="text" name="attr_description" /></div>
</div>
</fieldset>
</div>
</div>
</div>
<div id="popup1" class="overlay">
<div class="popup">
<h2>JSON Import</h2>
<a class="close" href="#">×</a>
<div class="content">
<textarea name="attr_jsonnpc" style='width:500px;height:400px;resize:none; overlfow-y: scroll;'></textarea>
<button type="action" name="act_jsonimport-char" href="#">JSON Import</button>
</div>
</div>
</div>
<script type="text/worker">
const buttonlist = ["character","skills","magic","decks","gear","combat","rigger", "contacts", "critter-powers", "karma", "cyberware","vehicle-attr-tab", "vehicle-combat-tab", "vehicle-notes-tab", "vehicle-ecm-tab"];
buttonlist.forEach(button => {
console.log(button)
on(`clicked:${button}`, function() {
setAttrs({ sheetTab: button });
});
});
</script>
<script type="text/worker">
console.log('loading rangedweapons stats');
const rangedstats = {
"Hold-out Pistol": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{pistols}", wfamily: "Firearms"},
"Bracer": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{bracer}", wfamily: "Special"},
"Gun Cane": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{guncane}", wfamily: "Special"},
"Light Pistol": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{pistols}", wfamily: "Firearms"},
"Machine Pistol": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{pistols}", wfamily: "Firearms"},
"Heavy Pistol": { short: 5, medium: 20, long: 40, extreme: 60, skill: "@{pistols}", wfamily: "Firearms"},
"Laser Pistol": { short: 5, medium: 20, long: 40, extreme: 60, skill: "@{lasers}", wfamily: "Laser"},
"SMG": { short: 10, medium: 40, long: 80, extreme: 150, skill: "@{smgs}", wfamily: "Firearms"},
"Speargun": { short: 10, medium: 40, long: 80, extreme: 150, skill: "@{smgs}", wfamily: "Special" },
"Taser": { short: 5, medium: 10, long: 12, extreme: 15, skill: "@{pistols}", wfamily: "Special"},
"Shotgun": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{shotguns}", wfamily: "Firearms"},
"Net Gun": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{shotguns}", wfamily: "Special"},
"Sporting Rifle": { short: 100, medium: 250, long: 500, extreme: 750, skill: "@{rifles}", wfamily: "Firearms"},
"Laser Rifle": { short: 100, medium: 250, long: 500, extreme: 750, skill: "@{lasers}", wfamily: "Laser"},
"Sniper Rifle": { short: 150, medium: 300, long: 700, extreme: 1000, skill: "@{rifles}", wfamily: "Firearms"},
"Laser Sniper": { short: 150, medium: 300, long: 700, extreme: 1000, skill: "@{lasers}", wfamily: "Laser"},
"Assault Rifle": { short: 50, medium: 150, long: 350, extreme: 550, skill: "@{assaultrifles}", wfamily: "Firearms"},
"Light Machine Gun": { short: 75, medium: 200, long: 400, extreme: 800, skill: "@{heavyweapons}", wfamily: "Heavy" },
"Medium Machine Gun": { short: 80, medium: 250, long: 750, extreme: 1200, skill: "@{heavyweapons}", wfamily: "Heavy" },
"Heavy Machine Gun": { short: 80, medium: 250, long: 800, extreme: 1500, skill: "@{heavyweapons}", wfamily: "Heavy" },
"Assault Cannon": { short: 100, medium: 300, long: 900, extreme: 2400, skill: "@{heavyweapons}", wfamily: "Heavy" },
"Minigun": { short: 75, medium: 200, long: 400, extreme: 800, skill: "@{heavyweapons}", wfamily: "Heavy" },
"Sling Shot": { short: "mystr", medium: "mystr * 2", long:"mystr * 5", extreme: "mystr * 7", skill: "@{projectiles}", wfamily: "Projectile" },
"Sling Launcher": { short: "mystr * 3", medium: "mystr * 5", long:"mystr * 20", extreme: "mystr * 30", skill: "@{projectiles}", wfamily: "Projectile" },
"Bow": { short: "mystr", medium: "mystr * 10", long:"mystr * 30", extreme: "mystr * 60", skill: "@{projectiles}", wfamily: "Projectile" },
"Light Crossbow": { short: "mystr * 2", medium: "mystr * 8", long: "mystr * 20", extreme: "mystr * 40", skill: "@{projectiles}", wfamily: "Projectile" },
"Medium Crossbow": { short: "mystr * 3", medium: "mystr * 12" , long: "mystr * 30", extreme: "mystr * 50", skill: "@{projectiles}", wfamily: "Projectile" },
"Heavy Crossbow": { short: "mystr * 5", medium: "mystr * 15", long: "mystr * 40", extreme: "mystr * 60", skill: "@{projectiles}", wfamily: "Projectile" },
"Thrown Knife": { short: "mystr", medium: "mystr * 3", long: "mystr * 5", extreme: "mystr * 7", skill: "@{throwing}", wfamily: "Throwing" },
"Shuriken": { short: "mystr", medium: "mystr * 2", long: "mystr * 5", extreme: "mystr * 7", skill: "@{throwing}", wfamily: "Throwing" },
"Caltrops": { short: "mystr * 3", medium: "mystr * 5", long: "mystr * 10", extreme: "mystr * 20", skill: "@{throwing}", wfamily: "Throwing" },
"Nets": { short: 2, medium: 4, long: 6, extreme: 10, skill: "@{throwing}", wfamily: "Throwing" },
"Gyrojet (land)": { short: 5, medium: 20, long: 40, extreme: 60, skill: "@{gyrojet}", wfamily: "Special" },
"Gyrojet (water)": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{gyrojet}", wfamily: "Special" },
"Blowgun": { short: 3, medium: 8, long: 12, extreme: 15, skill: "@{blowgun}", wfamily: "Special" },
"Flamethrower": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{spray}", wfamily: "Special" },
"Other": { short: 0, medium: 0, long: 0, extreme: 0, skill: 0, wfamily: "Other" }
}
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);
}
};
on("change:repeating_rangedweapons:type", function() {
console.log('updating range based on weapon type');
getAttrs(["repeating_rangedweapons_type", "strength_max"], function(myval) {
var myatts={};
const mytype=myval["repeating_rangedweapons_type"];
const mystr=parseInt(myval.strength_max)
console.log('type: ' + mytype);
myatts["repeating_rangedweapons_short"]=eval(rangedstats[mytype]["short"]);
myatts["repeating_rangedweapons_medium"]=eval(rangedstats[mytype]["medium"]);
myatts["repeating_rangedweapons_long"]=eval(rangedstats[mytype]["long"]);
myatts["repeating_rangedweapons_extreme"]=eval(rangedstats[mytype]["extreme"]);
myatts["repeating_rangedweapons_wfamily"]=rangedstats[mytype]["wfamily"];
myatts["repeating_rangedweapons_skill"]=rangedstats[mytype]["skill"];
console.log(myatts);
setAttrs(myatts);
});
});
const matrixtn={BLUE: {Intruder: 3, Legitimate: 6, secrating: 1}, GREEN: {Intruder: 4, Legitimate: 5, secrating: 2}, ORANGE: {Intruder: 5, Legitimate: 4, secrating: 3}, RED: {Intruder: 6, Legitimate: 3, secrating: 4}};
const matrixsecnumber={1: "BLUE", 2: "GREEN", 3: "ORANGE",4: "RED"};
const attributes=[ "body", "quickness", "strength", "charisma", "willpower", "intelligence", "force" ];
const quicknesslinked=["@{blowgun}", "@{bracer}", "@{guncane}", "@{gyrojet}", "@{eyegun}", "@{oralgun}", "@{oralstrike}", "@{pistols}", "@{smgs}", "@{rifles}", "@{assaultrifles}", "@{lasers}", "@{whips}", "@{stealth}", "@{shotguns}"]
const damagetable = {
"N/A": 0,
"L": 1,
"M": 2,
"S": 3,
"D": 4,
0: "N/A",
1: "L",
2: "M",
3: "S",
4: "D",
"L(stun)": 10,
"M(stun)": 11,
"S(stun)": 12,
"D(stun)": 13,
10: "L(stun)",
11: "M(stun)",
12: "S(stun)",
13: "D(stun)"
}
var getRandomInt = function(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive
}
on("change:weaponfocus-force", function() {
atts=[];
getAttrs(["weaponfocus-force"], function (myval) {
atts["weaponfocus-show"]="false";
if ( myval["weaponfocus-force"] > 0 ) atts["weaponfocus-show"]="true";
setAttrs(atts);
});
});
on('clicked:repeating_gear:usegear', (info) => {
var atts=[];
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
atts.push(myrepeat.concat("rating"));
atts.push(myrepeat.concat("quantity"));
atts.push(myrepeat.concat("type"));
atts.push(myrepeat.concat("pool"));
atts.push(myrepeat.concat("name"));
getAttrs(atts, function(myval) {
var sets={};
let rating=parseInt(myval[myrepeat.concat("rating")]);
let qty=parseInt(myval[myrepeat.concat("quantity")]);
let mypool=myval[myrepeat.concat("pool")];
const poolname = mypool.charAt(0).toUpperCase() + mypool.slice(1);
const pool=mypool + "pool";
let myname=myval[myrepeat.concat("name")];
let mytype=myval[myrepeat.concat("type")];
calcDice=rating;
if ( mypool != "none" ) calcDice += " + ?{" + poolname + " Pool Dice?}";
var myroll="&{template:item} {{item=" + myname +"}}{{myname=@{character_name}}}";
myroll += "{{targetnumber=[[?{Target Number?|4}]]}}";
if ( mypool != "none" ) myroll += "{{poolname=" + poolname + " Pool}}{{pooldice=[[?{" + poolname + " Pool Dice?|0}]]}}";
myroll += "{{rolldice=[[" + calcDice + " ]]}}";
myroll += "{{result=[[ [[ " + calcDice + " ]]d6>[[?{Target Number?}]]!! ]]}}";
if ( ( mytype == "onetime" ) && ( qty < 1 ) ) myroll="/w gm &{template:info}{{character=@{character_name}}}{{action=You are out of " + myname + "}}";
console.log(myroll);
startRoll(myroll, (results) => {
if ( mypool != "none" ) updatepoolused("taskpool", results.results.pooldice.result);
if (( mytype == "onetime" ) && ( qty > 0 )) {
sets[myrepeat.concat("quantity")] = qty -1;
setAttrs(sets);
}
finishRoll( results.rollId);
});
});
});
on('clicked:repeating_credsticks:checkcredstick', (info) => {
var atts=[];
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
atts.push(myrepeat.concat("rating"));
atts.push(myrepeat.concat("id"));
getAttrs(atts, function(myval) {
let rating=parseInt(myval[myrepeat.concat("rating")]);
let myid=myval[myrepeat.concat("id")];
var myroll="&{template:item} {{item=" + myid + " credstick}}{{myname=@{character_name}}}{{poolname=Task Pool}}{{targetnumber=[[?{Verification System Rating?|4}]]}}";
myroll += "{{pooldice=[[?{Task Pool Dice?|0}]]}}{{rolldice=[[" + rating + " + ?{Task Pool Dice?} ]]}}";
myroll += "{{result=[[ [[ " + rating + " + ?{Task Pool Dice?} ]]d6>[[?{Verification System Rating?}]]!! ]]}}";
console.log(myroll);
startRoll(myroll, (results) => {
updatepoolused("taskpool", results.results.pooldice.result);
finishRoll( results.rollId);
});
});
});
on('clicked:repeating_skills:skills', (info) => {
const attrlist=["skillname", "skillrating", "pool"];
var atts=["character_name"];
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
attrlist.forEach(myatt=>{
atts.push(myrepeat.concat(myatt));
});
getAttrs(atts, function(myval) {
const skill=myval[myrepeat.concat("skillname")];
const rating=parseInt(myval[myrepeat.concat("skillrating")]);
const mypool=myval[myrepeat.concat("pool")];
const poolname = mypool.charAt(0).toUpperCase() + mypool.slice(1);
const pool=mypool + "pool";
console.log('start roll for ' + skill);
var calcDice= rating;
if ( mypool != "none" ) calcDice += " + ?{" + poolname + " Pool Dice?}";
const calcTN="?{What is the Target Number?|4} + @{stun_pen} + @{wound_pen}";
var myroll="&{template:skill} {{skill=" + skill + "}}{{myname=" + myval["character_name"] + "}}";
if ( mypool != "none" ) myroll += "{{pooldice=[[?{" + poolname + " Pool Dice?|0}]]}}{{poolname=" + poolname + " Pool}}";
myroll +="{{targetnumber=[[ " + calcTN + " ]]}}{{rolldice=[[ " + calcDice + " ]]}}";
myroll += "{{result=[[ [[ " + calcDice + " ]]d6>[[{2,( " + calcTN + " )}kh1]]!!} ]]}}";
startRoll(myroll, (results) => {
console.log('R: ' + results);
if ( mypool != "none" ) updatepoolused(pool, results.results.pooldice.result);
finishRoll( results.rollId);
});
});
});
on('clicked:skilltest', (info) => {
var [myskill,mypool]=info["htmlAttributes"]["id"].split(" ");
var skill = myskill.charAt(0).toUpperCase() + myskill.slice(1);
var pool = mypool.charAt(0).toUpperCase() + mypool.slice(1);
console.log('skill: ' + myskill + ' pool: ' + mypool);
const calcDice="@{" + myskill + "} + ?{" + pool + " Pool Dice?}";
const calcTN="?{Target Number?|4} + @{stun_pen} + @{wound_pen}";
var myroll="&{template:skill} {{myname=@{character_name}}}{{skill=" + skill + "}}{{poolname=" + pool + " Pool}}{{pooldice=[[?{" + pool + " Pool Dice?|0}]]}}"
myroll+="{{targetnumber=[[" + calcTN + "]]}}{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{result= [[ [[" + calcDice + "]]d6>[[{2,(" + calcTN +")}kh1]]!! ]] }}";
console.log(myroll);
startRoll(myroll, (results) => {
updatepoolused(mypool.concat("pool"), results.results.pooldice.result);
finishRoll( results.rollId);
});
});
var updatepoolused = function(pool, used) {
poolused=pool.concat("-used");
sets={}
getAttrs([poolused], function (myval) {
sets[poolused]=used + parseInt(myval[poolused]);
console.log(sets);
setAttrs(sets);
});
}
on('clicked:repeating_defensiveutils:matrixrepeatingtest clicked:repeating_offensiveutils:matrixrepeatingtest clicked:repeating_deck-utilities:matrixrepeatingtest', (info) => {
var atts=[];
var source=info['sourceAttribute'].split('_');
const myid=info["htmlAttributes"]["id"]
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
var action;
var target;
var calcTN;
var calcDice;
var utiltarget;
const myutil=myrepeat.concat("utility");
const myrating=myrepeat.concat("rating-final");
atts.push(myutil, myrating);
if ( myid == "matrixrepeatingexec" ) utiltarget=myrepeat.concat("target");
atts.push(utiltarget);
if ( myid == "matrixrepeatingexec" ) console.log('utiltarget: ' + utiltarget);
console.log(atts);
getAttrs(atts, function(myval) {
console.log(myval);
const myutilvalue=myval[myutil];
const myratingvalue=myval[myrating];
const myutiltarget=myval[utiltarget];
if ( myid == "matrixrepeatingattack" ) {
action = "{{action=" + myutilvalue + " Attack}}";
target = "{{target=@{target|Target|token_name}}}";
calcTN="@{deck-tn} + @{wound_pen} + @{stun_pen} +@{matrix-penalty} +?{Miscellaneous Modifiers|0}";
calcDice="@{decking} + ?{Hacking Pool Dice}";
} else if ( myid == "matrixrepeatingexec" ) {
console.log('utiltarget ' + myutiltarget);
action="{{action=System Operation with " + myutilvalue + " Utility}}";
target = "{{target=@{target|Target|token_name}}}";
calcTN= myutiltarget + " + floor(@{target|Target|matrixalert}/2) + @{wound_pen} + @{stun_pen} +@{matrix-penalty} - " + myratingvalue;
calcDice="@{decking} + ?{Hacking Pool Dice}";
} else {
action="{{action=" + myutilvalue + " Test}}";
target ="{{target=?{Target Number?|4}}}";
calcTN="?{Target Number?} + @{wound_pen} + @{stun_pen} + @{wp-matrix}";
calcDice=myratingvalue + " + ?{Hacking Pool Dice}";
}
var myroll="&{template:matrix}{{myname=@{character_name}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}";
myroll+= target + action;
myroll+="{{utilitylevel=" + myratingvalue + "}}"
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!!]] }}"
console.log(myroll);
startRoll(myroll, (results) => {
updatepoolused("hackingpool", results.results.hackingpool.result);
finishRoll( results.rollId);
});
});
});
on('clicked:taric', (info) => {
console.log(info);
console.log('sup dude');
});
on('clicked:mytst1', (info) => {
console.log(info);
mytstfunc('sup mo fo');
});
var mytstfunc = function (info) {
console.log(info);
};
on("change:repeating_intruders:intrudername", function(){
getAttrs(["repeating_intruders_intrudername"], function (myval) {
var mydecker="@{";
mydecker=mydecker.concat(myval["repeating_intruders_intrudername"]);
mydecker=mydecker.concat("|");
setAttrs({"repeating_intruders_detecttarget": mydecker});
});
});
on('clicked:matrixdetect', (info) => {
sets={};
console.log(info);
const myid=info["htmlAttributes"]["id"];
const mytitle=info["htmlAttributes"]["title"];
getAttrs(["matrixsecuritytally"], function (myval) {
var mytally=parseInt(myval["matrixsecuritytally"]);
if ( myid == "systemdetect" ) {
var myroll="&{template:matrix}{{target=@{target|Target|token_name}}}{{myname=@{character_name}}}{{action=Detection Roll}}" ;
myroll+="{{targetnumber=@{target|Target|deck-detection-final}}}";
myroll+="{{rolldice=[[@{matrixsecurityrating}]]}}";
myroll+="{{roll=[[@{matrixsecurityrating}d6>[[{2,(@{target|Target|deck-detection-final})}kh1]]!! ]]}}";
console.log(myroll);
startRoll(myroll, (results) => {
mytally += results.results.roll.result;
sets["matrixsecuritytally"]=mytally;
console.log(sets);
setAttrs(sets);
finishRoll( results.rollId);
});
} else {
sets["matrixsecuritytally"]=0;
setAttrs(sets);
}
});
});
on('clicked:repeating_intruders:detect', (info) => {
sets={};
console.log(info);
const myid=info["htmlAttributes"]["id"];
const mytitle=info["htmlAttributes"]["title"];
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
const intruder = myrepeat + "detecttarget"
const sectally = myrepeat + "securitytally";
getAttrs([intruder, sectally], function (myval) {
const mytarget=myval[intruder];
var mytally=parseInt(myval[sectally]);
if ( myid == "systemdetect" ) {
var myroll="&{template:matrix}{{target=@{" + intruder + "}character_name}}}{{myname=@{character_name}}}{{action=Detection Roll}}" ;
myroll+="{{targetnumber=@{" + intruder + "}deck-detection-final}}}";
myroll+="{{rolldice=[[@{matrixsecurityrating}]]}}";
myroll+="{{roll=[[@{matrixsecurityrating}d6>[[{2,(@{" + intruder + "}deck-detection-final})}kh1]]!! ]]}}";
console.log(myroll);
startRoll(myroll, (results) => {
mytally += results.results.roll.result;
sets[sectally]=mytally;
console.log(sets);
setAttrs(sets);
finishRoll( results.rollId);
});
} else {
sets[sectally]=0;
setAttrs(sets);
}
});
});
on('clicked:matrixresist', (info) => {
var payload, myid;
if ( info["htmlAttributes"]["id"] != undefined) {
myid=info["htmlAttributes"]["id"];
} else if ( info["originalRollId"] != undefined ) {
payload=rollEscape.unescape(info["originalRollId"]);
}
var calcTN;
var calcDice;
var myroll="&{template:matrix}";
console.log(info);
if ( payload ) {
console.log(payload);
power=payload["power"];
attribute=payload["attribute"];
attacktype=payload["attacktype"];
console.log ('power ' + power + ' att ' + attribute + ' attacktype ' + attacktype);
calcDice="@{" + attribute + "} + ?{Hacking Pool Dice|0}";
calcTN="?{Power of Attack?|" + power + "}";
if ( attacktype == "cybercombat" ) calcTN+= " - @{deckarmor-rating-final}";
} else {
calcTN="?{Power of Attack?|0} - @{deckarmor-rating-final}";
calcDice="@{deck-bod-final} + ?{Hacking Pool Dice|0}";
}
myroll+="{{action=Damage Resistance Test}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{utilitylevel=Armor Rating @{deckarmor-rating-final}}}";
myroll+="{{myname=@{character_name}}}{{target=?{Power of Attack?}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}";
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}";
console.log(myroll);
startRoll(myroll, (results) => {
updatepoolused("hackingpool", results.results.hackingpool.result);
finishRoll( results.rollId);
});
});
const iclist = {
proactive: ["Crippler", "Ripper", "Killer", "Blaster", "Sparky", "Scout", "Black Ic", "Cerebropathic", "Psychotropic", "Trace"],
reactive: ["Probe", "Scramble", "Tar Baby", "Tar pit", "Data Bomb", "Pavlov"]
};
on('clicked:matrixattack', (info) => {
const myid=info["htmlAttributes"]["id"]
const mytitle=info["htmlAttributes"]["title"]
console.log(info);
getAttrs(["deck-systemrating"], function (myval) {
var calcTN="0 + @{wound_pen} + @{stun_pen} + @{matrix-penalty} + ?{Miscellaneous Modifiers|0}";
const systemrating=myval["deck-systemrating"].toUpperCase();
var calcDice="@{decking} + ?{Hacking Pool Dice|0}"
var myaction="{{action=" + mytitle + "}}";
if (myid == "deckattack") myaction="{{action=Attack @{deckattacklevel}}}"
var myroll="&{template:matrix}"
myroll+= myaction;
myroll+="{{rolldice=[[" + calcDice + "]]}}"
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{utilitylevel=[[@{" + myid + "-rating-final}]]}}"
myroll+="{{senddata=[[0]]}}";
myroll+="{{iconstatus=[[@{target|Target|iconstatuscode}]]}}";
if ( systemrating == "UNKNOWN" ) myroll+="{{systemrating=[[@{target|Host|matrixsecuritynumber}]]}}";
else myroll+="{{systemrating=[[" + matrixtn[systemrating]["secrating"] + "]]}}";
myroll+="{{myname=@{character_name}}} {{target=@{target|Target|token_name}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}";
myroll+="{{utilitylevel=@{deckattack-rating-final}}}";
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}";
console.log(myroll);
startRoll(myroll, (results) => {
if ( results.results.iconstatus.result == 0) myicon="Legitimate";
else myicon="Intruder";
var finaltn=results.results.targetnumber.result
const mysystem=matrixsecnumber[results.results.systemrating.result];
const myhosttn=matrixtn[mysystem][myicon];
finaltn += myhosttn;
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
updatepoolused("hackingpool", results.results.hackingpool.result);
let payload= {
power: results.results.utilitylevel.result,
attacktype: "cybercombat",
attribute: "deck-bod-final"
}
finishRoll( results.rollId,
{
senddata: rollEscape.escape(payload),
targetnumber: finaltn,
roll: finaldice,
});
});
});
});
on('clicked:matrixmedic', (info) => {
console.log(info);
const myid=info["htmlAttributes"]["id"]
const mytitle=info["htmlAttributes"]["title"]
var calcTN="?{Wound Level?|Light,4|Moderate,5|Serious,6}";
var calcDice="@{deckmedic-rating-final}"
var myroll="&{template:matrix}"
myroll+="{{action=Medic Utility}}"
myroll+="{{rolldice=[[" + calcDice + "]]}}"
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{myname=@{character_name}}}{{target=?{Wound Level?} Damage}}{{hackingpool=Not Available}}"
myroll+="{{utilitylevel=@{deckmedic-rating-final}}}"
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}"
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
on('clicked:swapmemory clicked:repeating_defensiveutils:swapmemory clicked:repeating_offensiveutils:swapmemory clicked:repeating_deck-utilities:swapmemory', (info) => {
console.log(info);
var sets={};
var atts=[];
var myatt;
var myutil;
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
if ( info['sourceAttribute'] ) {
source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
myatt=myrepeat + "rating";
atts.push(myrepeat + "utility");
} else {
myutil=myid.split("-")[0];
myutil=myutil.slice(4);
myatt=myid;
}
atts.push(myatt);
const myfinal=myatt + "-final";
console.log(atts);
getAttrs(atts, function (myval) {
console.log('myval');
console.log(myval);
sets[myfinal]=parseInt(myval[myatt]);
if ( myutil == null ) myutil=myval[myrepeat + "utility"];
console.log(sets);
setAttrs(sets);
myroll="&{template:info}{{character=@{character_name}}}{{action=Swap Memory}}{{type=Simple}}{{info1=Reloading Utility " + myutil + " into Memory}}";
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
});
on('clicked:matrixtest', (info) => {
var atts=[];
if ( info['sourceAttribute'] ) console.log(' got ' + info['sourceAttribute'] );
/* var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_'); */
console.log(info);
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
var calcTN="?{Target Number?} + @{wp-matrix}";
var calcDice="@{" + myid + "} + ?{Hacking Pool Dice}"
var myroll="&{template:matrix}{{myname=@{character_name}}}{{target=?{Target Number?|4}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}"
myroll+= "{{action=" + mytitle + "}}{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
myroll+= "{{roll= [[ [[ " + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!!]] }}"
startRoll(myroll, (results) => {
updatepoolused("hackingpool", results.results.hackingpool.result);
finishRoll( results.rollId);
});
});
on('clicked:matrixmaneuvers', (info) => {
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
var myutil="@{deckcloak-rating-final}";
var myatt="deck-evasion-final";
if ( mytitle == "Evade Detection" ) myatt = "deck-sensors-final";
if ( mytitle == "Parry Attack" ) myutil = "@{decklockon-rating-final}";
if ( mytitle == "Sensor Test" ) myutil = "@{decklockon-rating-final}";
var calcTN="@{target|Target|" + myatt + "} + @{wp-matrix} +?{Miscellaneous Modifiers|0} - " + myutil;
var calcDice="@{decking} + ?{Hacking Pool Dice}"
var myroll="&{template:matrix}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}"
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{action=" + mytitle + "}}"
myroll+="{{roll= [[ [[" + calcDice + "]]d6>[[ {2,(" + calcTN + ")}kh1]]!! ]] }}"
myroll+="{{detect=[Detect](~@{target|Target|token_name}|detection)}}"
startRoll(myroll, (results) => {
updatepoolused("hackingpool", results.results.hackingpool.result);
finishRoll( results.rollId);
});
});
on('clicked:adeptpower', (info) => {
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
const uppermyid=myid.charAt(0).toUpperCase() + myid.slice(1);
atts=["rbodymod", "rbodymax", "rquickmod", "rquickmax", "rstrmod", "rstrmax", "body", "strength", "quickness", "adeptbodyboost", "adeptquicknessbost", "adeptstrengthboost"];
getAttrs(atts, function(myval) {
var drainlvl;
const myboost=parseInt(myval["adept" + myid + "boost"]) + parseInt(myval[myid]);
const mymod=myval["r" + myid + "mod"];
const mymax=myval["r" + myid + "max"];
const my2x=mymax * 2;
if (myboost <= mymod) drainlvl="L";
else if (myboost <= mymax) drainlvl="M";
else drainlvl="S";
console.log('boost: ' + myboost);
console.log('mod: ' + mymod);
console.log('max: ' + mymax);
console.log('2x: ' + my2x);
console.log('Drain: ' + drainlvl);
var calcDice="@{magic} + ?{Spell Pool Dice}";
var calcTN="ceil(@{" + myid + "}/2 )";
var calcDrainTN="ceil((@{" + myid + "} + @{adept" + myid + "boost} ) /2 )";
var calcDrainDice="@{willpower|max} + ?{Drain Pool Dice}";
var myroll="&{template:adept}{{myname=@{character_name}}}";
myroll+="{{spellpool=[[?{Spell Pool Dice|0} + ?{Drain Pool Dice|0}]]}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{targetofspell=@{" + uppermyid + "}}}";
myroll+="{{spellname=" + uppermyid + " Boost}}";
myroll+="{{draindamage=[[0]]}}{{powerlevel=@{adept" + myid + "boost}}}";
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[" + calcTN + "]]!! ]] }}";
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId,
{
draindamage: drainlvl,
});
});
});
});
var refreshpools = function () {
atts=[];
atts["rounds-phase"]=0;
atts["controlpool-used"]=0;
atts["hackingpool-used"]=0;
atts["astralpool-used"]=0;
atts["combatpool-used"]=0;
atts["spellpool-used"]=0;
atts["sorcery-used"]=0;
atts["spelldefense-used"]=0;
atts["taskpool-used"]=0;
setAttrs(atts);
};
on('clicked:repeating_spells:cast', (info) => {
var atts=["magic", "spellpool-used", "sorcery-used"];
var source=info['sourceAttribute'].split('_');
const myid=info["htmlAttributes"]["id"]
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
const attlist=["target", "force", "drain", "drainlvl", "name", "description", "damage", "range", "spellcategory"];
attlist.forEach(attr=>{
let myname=myrepeat + attr;
atts.push(myname);
});
console.log(atts);
getAttrs(atts, function(myval) {
console.log('vals');
console.log(myval);
const magic=myval["magic"];
const range=myval[myrepeat + "range"];
const spellcat=myval[myrepeat + "spellcategory"];
const force=myval[myrepeat + "force"];
const target=myval[myrepeat + "target"];
const drain=myval[myrepeat + "drain"];
const spused=parseInt(myval["spellpool-used"]);
const sorceryused=parseInt(myval["sorcery-used"]);
var drainlvl=myval[myrepeat + "drainlvl"];
const name=myval[myrepeat + "name"];
const description=myval[myrepeat + "description"];
const damage=myval[myrepeat + "damage"];
var resistattr;
var targetofspell=target;
if (target.includes("@{target")) {
targetofspell="@{target|Target|token_name}";
resistattr=target.split("|")[2];
}
var myroll="&{template:spell}{{myname=@{character_name}}}";
if ( range == "AoE" ) {
targetofspell="AoE";
if ( spellcat == "Elemental" ) {
calcTN = "4 + @{rangedTN} + (2*(@{spellstack}+@{spellsus})) +@{spellmisc} + @{move}";
myroll+="{{targetnumber=[[" + calcTN + "]] + Cover & Target Movement}}";
} else {
if ( resistattr != null ) {
calcTN= " (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen} + @{rangedvizTN}";
myroll+="{{targetnumber=[[" + calcTN + "]] + Cover & " + resistattr + "}}";
} else {
calcTN= target + " + (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen} + @{rangedvizTN}";
myroll+="{{targetnumber=[[" + calcTN + "]] + Cover}}";
}
}
} else {
if ( spellcat == "Elemental" ) {
calcTN = target + " + 4 + @{rangedTN} + (2*(@{spellstack}+@{spellsus})) +@{spellmisc} + @{move}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
} else {
calcTN= target + " + (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen} + @{rangedvizTN} + @{cover}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
}
}
var calcDice="?{Sorcery Dice?} + ?{Spell Pool Dice?}";
var calcDrainTN="floor(?{Force?}/2) + " + drain + " + ( 2 * @{spellsus} )";
var calcDrainDice="@{willpower|max} + ?{Sorcery Dice for Drain?} + ?{Spell Pool Dice for Drain?}";
myroll+="{{draindamage=[[0]]}}";
myroll+="{{sorcerydice=[[?{Sorcery Dice?|@{spellcasting}} + ?{Sorcery Dice for Drain?|0}]]}}";
myroll+="{{spellpool=[[?{Spell Pool Dice?|0} + ?{Spell Pool Dice for Drain?|0}]]}}";
myroll+="{{spellname=" + name + "}}";
myroll+="{{description=" + description +"}}";
myroll+="{{spelldamage=[[" + damage + "]]}}"
myroll+="{{castforce=?{Force?|" + force + "}}}";
myroll+="{{targetofspell=" + targetofspell + "}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
if ( range == "AoE" ) {
myroll+="{{cast=[[0]]}}";
myroll+="{{roll=[[ [[" + calcDice + "]]d6>[[" + calcTN + "]]!! ]] }}";
} else {
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
}
if (target.includes("@{target")) {
console.log('attr split: ' + resistattr);
myroll += "{{spelldefense=[Spell Defense](~selected|spelldefense)}}";
if ( range != "AoE" ) {
if (spellcat == "Elemental" ) myroll += "{{resistspell=[Resist Spell with 1/2 Impact ](~@{target|Target|character_name}|resist-impact-half)}}";
else if ( resistattr == "force" ) myroll += "{{resistspell=[Resist Spell with force](~@{target|Target|character_name}|attrib-force)}}";
else myroll += "{{resistspell=[Resist Spell](~@{target|Target|character_name}|attrib-" + resistattr +"-max)}}";
} else {
if ( spellcat == "Elemental" ) myroll += "{{resistspell=[Resist Spell with 1/2 Impact ](~selected|resist-impact-half)}}"
else if ( resistattr == "force" ) myroll += "{{resistspell=[Resist Spell with force](~selected|attrib-force)}}"
else myroll += "{{resistspell=[Resist Spell](~selected|attrib-" + resistattr +"-max)}}"
}
}
console.log(myroll);
startRoll(myroll, (results) => {
atts=[];
console.log(results.results.spelldamage.result);
const finaldmg=damagetable[results.results.spelldamage.result];
var draindmg;
var finalcast;
if (drainlvl.includes("dmglvl")) {
let dmglvl=parseInt(results.results.spelldamage.result);
draindmg=eval(drainlvl);
console.log('drdmg calc: ' + draindmg);
var dmgmax=4;
var dmgmin=1;
if (draindmg >= 10) dmgmax=13;
if (draindmg >= 10) dmgmin=10;
if (draindmg > dmgmax) draindmg=dmgmax;
if (draindmg < dmgmin) draindmg=dmgmin;
} else {
draindmg = parseInt(drainlvl);
console.log('drdmg stright: ' + damagetable[draindmg]);
}
/* set drain damage to stun damage if force of spell is less than magic rating*/
if ( (draindmg < 10 ) && ( force <= magic )) draindmg = draindmg + 9;
/* set drain damage to physical damage if force of spell is greater than magic rating*/
if ( (draindmg >= 10 ) && ( force > magic )) draindmg = draindmg - 9;
draindmg=damagetable[draindmg];
console.log('drdmg : ' + draindmg);
atts["sorcery-used"]= sorceryused + parseInt(results.results.sorcerydice.result);
atts["spellpool-used"]= spused + parseInt(results.results.spellpool.result);
console.log('finalcast: ' + finalcast);
if ( range == "AoE" ) {
finalcast=results.results.roll.dice;
finishRoll( results.rollId,
{
spelldamage: finaldmg,
draindamage: draindmg,
cast: finalcast,
});
} else {
finishRoll( results.rollId,
{
spelldamage: finaldmg,
draindamage: draindmg,
});
}
console.log(atts);
setAttrs(atts);
});
});
});
var initiative = function (init, reaction, dmgpen, mytitle, character) {
console.log('init ' + init + ' reaction ' + reaction + ' dmgpen ' + dmgpen + ' mytitle ' + mytitle + ' character ' + character );
penatts=["stun_pen", "wound_pen", "matrix-penalty", "vehicle-penalty", "rccommand-penalty", "rcsimsense-penalty", "rcsystem-penalty"];
getAttrs(penatts, function (myval) {
console.log(init, reaction)
var myroll="&{template:init} {{character=" + character + "}}{{type=" + mytitle + "}}"
myroll += "{{roll=[[" + init + "d6+" + reaction + dmgpen + " &{tracker}]]}}"
if (myval["matrix-penalty"] >= 10) {
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name}'s icon has crashed}}";
}
if (myval["vehicle-penalty"] >= 10) {
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name} is destroyed }}";
}
if ( (myval["rccommand-penalty"] >= 10) || (myval["rcsimsense-penalty"] >= 10) || (myval["rcsystem-penalty"] >= 10) ) {
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name} is disengaged }}";
}
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
};
on('clicked:init-aug', (info) => {
const myid=info["htmlAttributes"]["id"]
let init="@{initiative|max}";
let reaction="@{reaction|max}";
let dmgpen=" -@{wp-char}";
let character="@{character_name}";
let mytitle="Augmented Initiative Roll";
initiative(init, reaction, dmgpen, mytitle, character);
});
on('clicked:repeating_ic:init', (info) => {
gets=[];
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
const mytitle=info["htmlAttributes"]["title"]
gets.push(myrepeat.concat("icrating"));
gets.push(myrepeat.concat("icname"));
gets.push(myrepeat.concat("ic-penalty"));
getAttrs(gets, function (myval) {
var penalty;
console.log(myval);
const init = "@{matrixsecuritynumber}";
const reaction = parseInt(myval[myrepeat.concat("icrating")]);
const character = myval[myrepeat.concat("icname")];
var penalty = -1 * parseInt(myval[myrepeat.concat("ic-penalty")]);
if ( penalty == 0 ) penalty = " + 0 ";
initiative(init, reaction, penalty, mytitle, character);
});
});
on('clicked:init', (info) => {
console.log(info);
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
var dmgpen=" -@{wp-char}";
character="@{character_name}";
if ( myid == "augmentedinit" ) {
init="@{initiative|max}";
reaction="@{reaction|max}";
} else if ( myid == "astralinit" ) {
init=1;
reaction="@{astralreaction}";
} else if ( myid == "spiritinit" ) {
init="@{initiative}";
reaction="@{spirit-initp}";
} else if ( myid == "matrixinit" ) {
init="@{deck-initiative}";
reaction="@{deck-reaction-final}";
var dmgpen=" - ( @{wp-char} + @{wp-matrix})";
} else if ( myid == "vehicleinit" ) {
init="(@{vehicle-driver}initiative} + @{vehicle-initbonus})";
reaction="@{vehicle-driver}reaction} + @{vehicle-reactbonus}";
var dmgpen=" - (@{vehicle-driver}stun_pen}-@{vehicle-driver}wound_pen} - @{wp-vehicle})";
} else if ( myid == "iceinit" ) {
init="@{deck-initiative}";
reaction="@{deck-reaction-final}";
var dmgpen=" - ( @{wp-char} + @{wp-matrix})";
} else {
init="@{initiative}";
reaction="@{reaction}";
}
initiative(init, reaction, dmgpen, mytitle, character);
refreshpools();
});
on('clicked:endturn', (info) => {
var myroll="&{template:init} {{character=@{character_name}}}{{type=End Combat Pass}}"
myroll += "{{setinit=[[10 &{tracker:-}]]}}"
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId);
refreshpools();
});
});
on('clicked:resistbanish', (info) => {
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
var calcDice= "@{force}";
calcTN="@{target|Target|magic}";
var myroll="&{template:spell}{{myname=@{character_name}}}";
myroll+="{{targetofspell=@{target|Target|character_name}}}";
myroll+="{{spellname=Resist Banish}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
const floor = function(v) {
return (v >= 0 || -1) * Math.floor(Math.abs(v));
}
const ammomods = {
regular: { armor: "ballistic", av: 0, power: 0, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
adps: { armor: "Math.floor(ballistic * 0.5)", av: 0, power: 0, dmg: 0, recoil: 1, barrier: 0.5, knockdown: 1 },
explosive: { armor: "ballistic", av: 0, power: 1, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
explosive2: { armor: "ballistic", av: 0, power: 2, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
flechette: { armor: "(Math.max(ballistic, (impact * 2)))", av: -0.5, power: 0, dmg: "((ballistic + impact) ==0)? 1 : 0;", recoil: 1, barrier: 2, knockdown: 1 },
gel: { armor: "impact", av: 0, power: -2, dmg: 0, recoil: 1, barrier: 1, knockdown: 2 },
tracer: { armor: "ballistic", av: 0, power: "-(Math.floor(rounds/3))", dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
av: { armor: "Math.floor(ballistic * 0.5)", av: 1, power: 0, dmg: 0, recoil: 1, barrier: 0.5, knockdown: 1 },
capsule: { armor: "impact", av: 0, power: -2, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
glazer: { armor: "Math.max((ballistic * 2), (impact * 2))", av: -0.5, power: 2, dmg: "((ballistic + impact) ==0)? 1 : 0;", recoil: 1, barrier: 2, knockdown: 1 },
hic: { armor: "Math.max(ballistic,impact)", av: 0, power: "(range==6)? -1 : (range==9)? -1", dmg: 0, recoil: 2, barrier: 1, knockdown: 1 },
hpoint: { armor: "ballistic + impact", av: 0, power: "((ballistic + impact ==0)? 3 : 1", dmg: 0, recoil: 2, barrier: 1, knockdown: 1 },
incendiary: { armor: "ballistic", av: 0, power: 0, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
mercury: { armor: "Math.max((ballistic * 2), (impact * 2))", av: -0.5, power: 0, dmg: "((ballistic + impact) ==0)? 1 : 0;", recoil: 1, barrier: 2, knockdown: 1 },
tracker: { armor: "ballistic", av: 0, power: 0, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 }
}
const resistdmg = function (myid, mods) {
atts=["ballistic", "impact", "dermal-armor"];
getAttrs(atts, function (myval) {
const ballistic=myval["ballistic"];
const impact=myval["impact"];
const dermalarmor=myval["dermal-armor"];
var wdmg;
var dmgcode=0;
var weapondmg="none";
var dodge=0;
myroll="&{template:resistance}";
if ( mods=="regular" ) mods=1;
if ( mods=="normal" ) mods=1;
if ( mods=="double" ) mods=2;
if ( mods=="half" ) mods=0.5;
if ( typeof mods === 'object' && mods !== null ) {
const ammo=mods["ammotype"].toLowerCase();
weapondmg = mods["wdmg"];
dodge = mods["dodge"];
const range = mods["range"];
const armorval = eval(ammomods[ammo]["armor"]);
const powermod = eval(ammomods[ammo]["power"]);
const dmgmod = eval(ammomods[ammo]["dmg"]);
dmgcode = damagetable[weapondmg] + dmgmod;
console.log ('armorval ' + armorval + ' powermod ' + powermod + ' dmgmod ' + dmgmod + ' range ' + range);
myroll +="{{Power=?{Attack Power|" + mods.power + "}}}";
myroll+="{{wpndmg=" + weapondmg + "}}";
myroll +="{{attacktest=[[" + mods["attacktest"] + "]]}}";
myroll+="{{dodge=[[" + mods["dodge"] + "]]}}";
myroll +="{{AttackType=" + ammo + "}}";
calcTN="?{Attack Power} + " + powermod + " - " + armorval;
} else {
myroll +="{{Power=?{Attack Power|4}}}";
myroll +="{{AttackType=" + mods + "}}";
calcTN="?{Attack Power} - (floor(@{" + myid + "} * " + mods + "))";
}
let actionname = myid.charAt(0).toUpperCase() + myid.slice(1);
var calcDice= "@{body|max} + ?{Combat Pool Dice}";
myroll +="{{name=" + actionname + " Armor}}{{character=@{character_name}}}{{armorvalue=@{" + myid + "}}}{{combatpool=[[?{Combat Pool Dice|0}]]}}";
myroll +="{{action=Resistance Test}}";
myroll +="{{finaldmg=[[0]]}}{{netresult=[[0]]}}";
myroll +="{{rolldice=[[" + calcDice + "]]}}";
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
console.log(myroll);
console.log(' unmod weapons code ' + dmgcode);
startRoll(myroll, (results) => {
console.log('dmgcode ' + dmgcode);
const netresult=results.results.attacktest.result - ( results.results.roll.result + dodge );
console.log('netresult ' + netresult);
const stage=floor(netresult/2);
var finaldmg=dmgcode + stage;
console.log('finaldmg ' + finaldmg);
var dmgmax=4;
var dmgmin=1;
if (dmgcode >= 10) dmgmax=13;
if (dmgcode >= 10) dmgmin=10;
if (finaldmg > dmgmax) finaldmg=dmgmax;
if (finaldmg < dmgmin) finaldmg=dmgmin;
updatepoolused("combatpool", results.results.combatpool.result);
if (weapondmg != "none") {
finishRoll( results.rollId, {
finaldmg: damagetable[finaldmg],
netresult: netresult,
});
} else { finishRoll( results.rollId); }
});
});
};
on('clicked:resistdmg', (info) => {
console.log(info);
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
mods="?{Attack Type|Normal,1|Elemental,0.5|ADPS,0.5|Half,0.5|Double,2}";
resistdmg(myid, mods);
});
on('clicked:resistroll', (info) => {
const payload=rollEscape.unescape(info.originalRollId);
console.log(payload);
resistdmg(payload["armortype"], payload);
});
const resistmods=["half", "normal", "double"];
resistmods.forEach(mod => {
var myball="resist-ballistic-" + mod;
var myimpact="resist-impact-" + mod;
on(`clicked:${myball}`, (info) => {
console.log(rollEscape.unescape(info.originalRollId));
resistdmg("ballistic", mod);
});
on(`clicked:${myimpact}`, (info) => {
console.log(rollEscape.unescape(info.originalRollId));
resistdmg("impact", mod);
});
});
on('clicked:resistvehicledmg', (info) => {
console.log(info);
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
var calcDice= "@{body|max} + ?{Control Pool Dice}";
calcTN="?{Adjuted Attack Power}";
myroll="&{template:resistance}";
myroll +="{{name=Vehicle Damage Test}}{{character=@{character_name}}}{{armorvalue=@{armor}}}{{controlpool=[[?{Control Pool Dice|0}]]}}";
myroll +="{{action=Resistance Test}}";
myroll +="{{rolldice=[[" + calcDice + "]]}}";
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
console.log(myroll);
startRoll(myroll, (results) => {
updatepoolused("controlpool", results.results.controlpool.result);
finishRoll( results.rollId);
});
});
var dodge = function (mods) {
myroll="&{template:resistance}";
if ( typeof mods === 'object' && mods !== null ) {
payload=mods;
console.log(payload);
mods="?{Modifiers?|" + Math.floor(payload["rounds"] / 3 ) + "}";
myroll +="{{senddata=[[0]]}}";
}
console.log('mods: ' + mods);
var calcDice= "?{Combat Pool Dice}";
calcTN="4 + " + mods;
myroll +="{{name=Dodge}}{{character=@{character_name}}}"
myroll +="{{combatpool=[[?{Combat Pool Dice|0}]]}}";
myroll +="{{action=Dodge Test}}";
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
myroll +="{{rolldice=[[" + calcDice + "]]}}";
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
console.log(myroll);
startRoll(myroll, (results) => {
updatepoolused("combatpool", results.results.combatpool.result);
console.log(payload);
if ( payload ) {
payload["dodge"]=results.results.roll.result;
finishRoll( results.rollId, { senddata: rollEscape.escape(payload), });
} else {
finishRoll( results.rollId);
}
});
};
on('clicked:dodge', (info) => {
console.log(info);
if ( info["htmlAttributes"]["id"] != undefined) {
mods="?{Modifiers?|0}";
}
else if ( info["originalRollId"] != undefined ) {
mods=rollEscape.unescape(info["originalRollId"]);
}
dodge(mods);
});
var conjuring = function (myid) {
const atts=["charisma_max", "magic-type", "magic", "summoning", "banishing", "spiritcontrol", "character_name"]
getAttrs(atts, function(myval) {
const mycharisma=myval["charisma_max"];
var calcTN;
var calcDrainTN;
var calcDice= parseInt(myval[myid]) + " + ?{Spell Pool Dice} + ?{Spirit Focus Dice}";
if (myid != "summoning") calcDice+= " + ?{Are you the summoner of the spirit?|Yes," + mycharisma + "|No,0}"
var action;
if (myid == "summoning" ) {
calcTN="?{Force?}";
var calcDice="?{Conjuring Dice?|" + parseInt(myval[myid]) + "} + ?{Spirit Focus Dice}";
calcDrainTN="?{Force?}";
action="Conjure Force ?{Force?} Spirit";
} else {
calcTN="@{target|Target|force}";
let actionname = myid.charAt(0).toUpperCase() + myid.slice(1);
action= actionname + " Force @{target|Target|force} Spirit";
}
var calcDrainDice=mycharisma + " + ?{Conjuring Dice for Drain?|0} + ?{Spirit Focus Dice}";
var myroll="&{template:spell}{{myname=" + myval["character_name"] + "}}";
myroll+="{{draindamage=[[0]]}}"
if (myid == "summoning" ) myroll+="{{spiritforce=[[?{Force?|1}]]}}"
else myroll+="{{spiritforce=[[ @{target|Target|force} ]]}}"
myroll+="{{spellpool=[[?{Spell Pool Dice|0} + ?{Drain Pool Dice|0}]]}}";
myroll+="{{spellname=" + action + "}}";
myroll+="{{spiritdice=[[?{Spirit Focus Dice|0}]]}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
if (myid == "summoning" ) {
myroll+="{{draintn=[[" + calcDrainTN + "]]}}";
myroll+="{{draindice=[[" + calcDrainDice + "]]}}";
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
}
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
if (myid == "banishing" ) myroll += "{{resist=[Resist Banish](~@{target|Target|character_name}|resistbanish)}}"
console.log(myroll);
startRoll(myroll, (results) => {
const spiritforce=results.results.spiritforce.result;
var finaldrain;
if ( spiritforce <= (mycharisma/2)) finaldrain="L";
else if ( spiritforce <= mycharisma ) finaldrain="M";
else if ( spiritforce >= ( mycharisma * 1.5 ) ) finaldrain="D";
else finaldrain="S";
if ( spiritforce <= myval["magic"] ) finaldrain.concat("(s)");
console.log('roll')
console.log(results.results.rolldice.result);
console.log('tn')
console.log(results.results.targetnumber.result);
finishRoll( results.rollId, {
draindamage: finaldrain,
});
});
});
};
const conjurelist = ["spiritcontrol","summoning","banishing"];
conjurelist.forEach(action => {
console.log(action)
on(`clicked:${action}`, conjuring(action) );
});
on('clicked:conjure', (info) => {
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
console.log("clicked conjure: " + myid);
conjuring(myid);
});
on('clicked:dispell', (info) => {
console.log("clicked dispell");
var calcDice="?{Sorcery Dice?} + ?{Spell Pool Dice?}";
var calcTN="?{Force of Spell?}";
var calcDrainTN="floor( ?{Force of Spell?}/2) + ( 2 * @{spellsus} )";
var calcDrainDice="@{willpower|max} + ?{Sorcery Dice for Drain?} + ?{Spell Pool Dice for Drain?} +?{Drain Modifier?|0}";
var myroll="&{template:spell}{{myname=@{character_name}}}";
myroll+="{{sorcerydice=[[?{Sorcery Dice?|@{spellcasting}} + ?{Sorcery Dice for Drain?|0}]]}}";
myroll+="{{spellpool=[[?{Spell Pool Dice?|0} + ?{Spell Pool Dice for Drain?|0}]]}}";
myroll+="{{spellname=DISPELL}}";
myroll+="{{castforce=[[?{Force of Spell?|0}]]}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
on('clicked:spelldefense', (info) => {
console.log("clicked spelldefense");
var calcDice="?{Sorcery Dice?} + ?{Spell Pool Dice?}";
var calcTN="?{Force of Spell?}";
var myroll="&{template:spell}{{myname=@{character_name}}}";
myroll+="{{sorcerydice=[[?{Sorcery Dice?|@{spelldefense}}]]}}";
myroll+="{{castforce=[[?{Force of Spell?|0}]]}}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{spellpool=[[?{Spell Pool Dice?|0}]]}}";
myroll+="{{spellname=SPELL DEFENSE}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{targetofspell=@{target|Ally|token_name}}}";
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
on('clicked:vehicledriving', (info) => {
calcTN="@{handling} + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} +@{wp-vehicle} - @{driving-test-interface} +@{driving-test-weather} +@{driving-test-terrain} +@{driving-test-size} +?{Additional Modifiers|0}";
calcDice="[[@{vehicle-skill-final} + @{driving-test-autonav} + ?{Control Pool Dice?}]]"
var myroll="&{template:vehicle}{{type=Driving Test}}{{controlpool=[[?{Control Pool Dice?|0}]]}}{{character=@{character_name}}}"
myroll += "{{targetnumber=[[" + calcTN + "]]}}"
myroll += "{{roll=[[ " + calcDice + "d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}"
console.log(myroll);
var atts=[];
startRoll(myroll, (results) => {
updatepoolused("controlpool", results.results.controlpool.result);
finishRoll( results.rollId, { })
});
});
on('clicked:vehiclesensor', (info) => {
calcTN="[[{2,(@{target|Target|signature} +@{wp-vehicle} +@{sensor-test-los} +@{sensor-test-weather} +@{sensor-test-terrain} +@{vehicle-urban} +?{Additional Modifiers|0})}kh1]]";
calcDice="[[@{sensors-rating}]]";
calcDiceECD="[[@{ecd-rating} * @{ecd-enabled} ]]";
var myroll="&{template:vehicle}{{type=Sensor Test}}{{character=@{character_name}}}";
myroll += "{{targetnumber=" + calcTN + "}}"
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
myroll += "{{ecd=[[ " + calcDiceECD + "d6>" + calcTN + "!! ]] }}"
console.log(myroll);
var atts=[];
startRoll(myroll, (results) => {
finishRoll( results.rollId, { })
});
});
on('clicked:vehicleposition', (info) => {
calcTN="[[{2,(@{handling} + @{speed-exceeding} + @{driving-position-terrain} - @{vehicle-actionbonus} + (@{vehicle-autonav} * @{autonav}) + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} + @{wp-vehicle} )}kh1]]";
calcDice="[[@{vehicle-skill-final} + ?{Control Pool Dice?}]]"
var myroll="&{template:vehicle}{{type=Position Maneuever}}{{controlpool=[[?{Control Pool Dice?|0}]]}}{{character=@{character_name}}}"
myroll += "{{targetnumber=" + calcTN + "}}{{position=[[0]]}}"
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
console.log(myroll);
var atts=[];
getAttrs(["maneuver-score"], function(myval) {
startRoll(myroll, (results) => {
const newscore = parseInt(myval["maneuver-score"]) + results.results.roll.result ;
atts["maneuver-score"] = newscore;
console.log('new man score: ' + atts["maneuver-score"]);
updatepoolused("controlpool", results.results.controlpool.result);
finishRoll( results.rollId, {
position: newscore,
})
setAttrs(atts);
});
});
});
on('clicked:vehiclecrash', (info) => {
calcTN="[[{2,(@{handling} + @{driving-crash-terrain} + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} +@{wp-vehicle} )}kh1]]"
calcDice="[[@{vehicle-skill-final} + ?{Control Pool Dice?} + (@{vehicle-autonav} * @{autonav})]]"
var myroll="&{template:vehicle}{{type=Crash Test}}{{controlpool=[[?{Control Pool Dice?|0}]]}}{{character=@{character_name}}}"
myroll += "{{targetnumber=" + calcTN + "}}{{speed=[[@{speed-current}]]}}{{reaction=[[@{vehicle-driver}reaction|max}]]}}"
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
console.log(myroll);
var atts=[];
startRoll(myroll, (results) => {
const speed = results.results.speed.result
const reaction = results.results.reaction.result
console.log('speed: ' + speed);
console.log('reaction: ' + reaction);
var speedmod=0;
if ( speed <= ( reaction * 20 )) speedmod=0;
else if ( speed <= ( reaction * 30 )) speedmod=1;
else if ( speed <= ( reaction * 40 )) speedmod=2;
else speedmod=4;
console.log('final: ' + speedmod );
var finaltn = results.results.targetnumber.result + speedmod;
if ( finaltn < 2 ) finaltn = 2;
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
updatepoolused("controlpool", results.results.controlpool.result);
finishRoll( results.rollId,
{
targetnumber: finaltn,
roll: finaldice,
});
});
});
on('clicked:vehicleaction', (info) => {
var myaction=info["htmlAttributes"]["id"];
var myterrain="driving-ab-terrain";
var myaction = myaction.charAt(0).toUpperCase() + myaction.slice(1);
var autonav="@{autonav}";
var vcr = "@{vehicle-actionbonus}";
var miscmods="?{How many additional enemy vehicles?";
var speeding=1;
var vmbelow10=4;
var vmbelow00=2;
var baseTN="@{handling}";
var calcDice="[[@{vehicle-skill-final} + ?{Control Pool Dice?}]]";
if ( myaction =="Ram" ) {
myterrain="driving-ram-terrain";
autonav="(@{autonav} + 2)";
enemies=0;
}
else if ( myaction =="Hide" ) {
myterrain="driving-hide-terrain";
vmbelow10=6;
vmbelow00=3;
speeding=2;
}
else if ( myaction =="Relocate" ) {
myterrain="driving-relocate-terrain";
miscmods="?{Successes from Hiding Test?";
speeding=2;
vcr=0;
autonav="( @{autonav} * -1)";
calcDice="[[@{sensors-rating} + ?{Control Pool Dice?}]]";
baseTN="@{target|Target|signature}";
}
var vmsmod=0;
var calcTN="[[{2,(" + baseTN + " + " + miscmods + "} + ( @{speed-exceeding} * " + speeding + ") + @{" + myterrain + "} - " + vcr + " + (@{vehicle-autonav} * "
calcTN += autonav + ") + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} +@{wp-vehicle} )}kh1]]"
var myroll="&{template:vehicle} {{type=Accelerating Action}}{{controlpool=[[?{Control Pool Dice?|0}]]}} {{character=@{character_name}}} {{miscmods=" + miscmods + "|0}}}"
myroll += "{{rolldice=" + calcDice + "}}"
myroll += "{{target=vs. @{target|Target|token_name}}}{{type=" + myaction + "}}"
myroll += "{{targetnumber=" + calcTN + "}}"
myroll += "{{delta=[[@{maneuver-score} - @{target|Target|maneuver-score} ]]}}"
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
console.log(myroll);
startRoll(myroll, (results) => {
console.log(results);
console.log(results.results.roll.dice);
if ( results.results.delta.result >= 11 ) vmsmod=-4;
else if ( results.results.delta.result > 1 ) vmsmod=-2;
else if ( results.results.delta.result == 0 ) vmsmod=0;
else if ( results.results.delta.result >= -10 ) vmsmod=vmbelow00;
else if ( results.results.delta.result < -10 ) vmsmod=vmbelow10;
else vmsmod=0;
console.log(vmsmod);
var finaltn = results.results.targetnumber.result + vmsmod;
if (finaltn < 2) finaltn=2;
console.log(results.results.roll.dice);
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
updatepoolused("controlpool", results.results.controlpool.result);
finishRoll( results.rollId,
{
targetnumber: finaltn,
roll: finaldice,
});
});
});
var rollattribute = function (attrib) {
console.log(attrib);
var mymode="";
var mybase=attrib.toUpperCase();
if (attrib.includes("max")) {
mymode="Augmented";
mybase=attrib.split("|")[0].toUpperCase();
}
console.log(attrib);
const attroll="&{template:attribute} {{character=@{character_name}}}{{Attribute=" + mybase + " " + mymode + "}} {{targetnumber=[[?{Target Number?|4}]]}}{{combatpool= [[?{Combat Dice Pool?|0}]]}}{{result= [[ [[@{" + attrib +"} + ?{Combat Dice Pool?}]]d6>[[{2,(?{Target Number?} + @{stun_pen} + @{wound_pen})}kh1]]!! ]] }}"
startRoll(attroll, (results) => {
console.log(results.results.combatpool.result)
finishRoll( results.rollId);
});
};
attributes.forEach(myatt => {
var myevent="attrib-" + myatt;
var myeventmax="attrib-" + myatt + "-max";
var myattmax = myatt + "|max";
on(`clicked:${myevent}`, (info) => {
console.log('running ' + myatt );
rollattribute(myatt);
});
on(`clicked:${myeventmax}`, (info) => {
console.log('running ' + myattmax );
rollattribute(myattmax);
});
});
on('clicked:attrib', (info) => {
console.log(info);
var attrib=info["htmlAttributes"]["id"];
rollattribute(attrib);
});
on('clicked:maneuever', (info) => {
var mytype=info["htmlAttributes"]["id"]
if ( mytype == "generate") {
var manroll="&{template:vehicle} {{type=Maneuver Score}} {{character=@{character_name}}}{{controlpool=[[?{Control Pool Dice?|0}]]}} {{roll=[[ [[@{vehicle-skill-final} + ?{Control Pool Dice?}]]d6KH1 + @{terrain-points} + @{speed-points} + @{vehicle-points} ]] }}"
} else {
var manroll="&{template:vehicle} {{type=Compare Maneuver Score}} {{character=@{character_name}}} {{target=@{target|Target|character_name}}} {{charscore=[[@{maneuver-score}]]}} {{targetscore=[[@{target|Target|maneuver-score}]]}} {{roll=[[@{maneuver-score} - @{target|Target|maneuver-score} ]]}} "
}
startRoll(manroll, (results) => {
updatepoolused("controlpool", results.results.controlpool.result);
console.log('results: ' + results.results.roll.result)
finishRoll( results.rollId);
setAttrs({"maneuver-score": results.results.roll.result});
});
});
on('clicked:repeating_rangedweapons:reload', (info) => {
console.log("reloading");
var setatts={};
var atts=[];
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
var acttype="complex";
var myroll;
atts.push(myrepeat.concat("ammo"));
atts.push(myrepeat.concat("reloadmethod"));
atts.push(myrepeat.concat("ammoremain"));
atts.push(myrepeat.concat("name"));
atts.push(myrepeat.concat("reloads"));
atts.push("quickness_max");
console.log(atts);
getAttrs(atts, function(myval) {
const max=parseInt(myval[myrepeat.concat("ammo")]);
const myweapon=myval[myrepeat.concat("name")];
const myreload=myval[myrepeat.concat("reloadmethod")];
const remain=parseInt(myval[myrepeat.concat("ammoremain")]);
const maxload = max - remain
const quick=parseInt(myval["quickness_max"]);
var myreloads=myval[myrepeat.concat("reloads")];
var rounds=max;
var reloadaction="Complex";
var ammoused=1;
var reloadtxt=rounds + " rounds with a " + myreload;
if (myreload=="clip") acttype="simple";
if ( ( myreload == "cylinder" ) || ( myreload == "magazine" ) || ( myreload=="break" ) ) {
if ( quick > maxload ) {
ammoused = maxload;
} else {
ammoused = quick;
}
if ( ammoused > myreloads ) ammoused = myreloads;
rounds = ammoused + remain;
}
const reloadsleft=myreloads - ammoused;
if (myreloads < 1) {
console.log('out of ammo');
ammoused=0;
myroll="/w gm &{template:info}{{character=@{character_name}}}{{action=Reload: " + myweapon + "}}{{type=" + acttype +"}}{{info1=Out of Ammo }}";
} else {
console.log('ammo okay');
myroll="/w gm &{template:info}{{character=@{character_name}}}{{action=Reload: " + myweapon + "}}{{type=" + acttype + "}}{{info1=Loaded " + reloadtxt + "}}";
if ( ( myreload == "cylinder" ) || ( myreload == "magazine" ) || ( myreload=="break" ) ) {
myroll += "{{info2=" + reloadsleft + " Spare Rounds Remaining}}";
} else {
myroll += "{{info2=" + reloadsleft +" Spare " + myreload + "s Remaining}}";
}
}
setatts[myrepeat.concat("ammoremain")]=rounds;
setatts[myrepeat.concat("reloads")]=reloadsleft;
setAttrs(setatts);
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
});
on('clicked:repeating_rangedweapons:showmore clicked:repeating_explosives:showmore', (info) => {
var source=info['sourceAttribute'];
console.log('attribute is ' + source);
getAttrs([source], function(myval){
console.log('attribute value is ' + myval[source]);
if (myval[source] == "show") {
setAttrs({[source]: "hide"});
} else {
setAttrs({[source]: "show"});
}
});
});
on('clicked:repeating_rangedweapons:rangedattack', (info) => {
var setatts={};
var atts=["sensors-rating", "combatpool-used", "controlpool-used", "gyro-on", "armor-quickness-pen", "rounds-phase", "character_name"];
var recoilx=1;
var rounds=1;
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
var mymode=info["htmlAttributes"]["id"]
const weaponattrs=["damage", "power", "name", "skill", "wfamily", "specialized", "targeting", "recoilcomp", "gyro", "ammotype", "ammoremain", "sa", "ss","bf", "fa", "tnmods", "firemode"] ;
weaponattrs.forEach(myatt=>{
atts.push(myrepeat.concat(myatt));
});
getAttrs(atts, function(myval) {
if ( (myval[myrepeat.concat("wfamily")] == "Heavy" ) && ( ( mymode != "vehiclesensor" ) || ( mymode != "vehicleranged" )) ) recoilx=2;
var vehiclesensors=0, armorpen=0, armorpenroll="", pool, poolname, dmgmax=4, finalrounds;
if ( myval["sensors-rating"] ) vehiclesensors=myval["sensors-rating"] ;
const tnmods= myval[myrepeat.concat("tnmods")];
const myname= myval["character_name"];
const myweapon= myval[myrepeat.concat("name")];
const combatused=parseInt(myval["combatpool-used"]);
const controlused=parseInt(myval["controlpool-used"]);
var wdmg= myval[myrepeat.concat("damage")];
const ammoremain= myval[myrepeat.concat("ammoremain")];
const ammotype= myval[myrepeat.concat("ammotype")];
const targetaim= myval[myrepeat.concat("targeting")];
const myskill=myval[myrepeat.concat("skill")];
var gyro= myval[myrepeat.concat("gyro")];
if ( myval["gyro-on"] == 0 ) gyro=0;
const firemode= myval[myrepeat.concat("firemode")];
var dmgnumber= damagetable[wdmg];
if (( ammotype == "gel" || ammotype == "capsule" ) && dmgnumber < 10 ) {
dmgnumber += 9;
wdmg=damagetable[dmgnumber];
}
if (dmgnumber >= 10) dmgmax=13;
var wpower= myval[myrepeat.concat("power")];
var ammoleft=myval[myrepeat.concat("ammoremain")];
const prevrounds=myval["rounds-phase"];
var recoilcomp= myval[myrepeat.concat("recoilcomp")];
if (( firemode == "bf") && ( ammoleft <= 3)) rounds ="?{Rounds|" + ammoleft + "}";
else if (( firemode == "bf") && ( ammoleft > 3)) rounds ="?{Rounds|3}";
else if (( firemode == "fa") && ( ammoleft <= 10)) rounds ="?{Rounds|" + ammoleft + "}";
else if (( firemode == "fa") && ( ammoleft > 10)) rounds ="?{Rounds|" + ( 10 - prevrounds ) +"}";
var recoil="";
if (( firemode == "bf") || (firemode == "fa")) {
recoil="{0,(" + recoilx + " * (( ?{Rounds Already Fired in Combat Phase|" + prevrounds + "} + ?{Rounds} ) - (" + recoilcomp + " + " + gyro + ")))}kh1";
} else if (firemode == "sa" ) {
recoil="{0,(" + recoilx + " * ( ?{Rounds Already Fired in Combat Phase|" + prevrounds + "} - (" + recoilcomp + " + " + gyro + ")))}kh1";
}
if (ammoleft <= 0 ) {
roll="&{template:info}{{character=@{character_name}}}{{action=Attack: " + myweapon + "}}{{type=Simple}}{{info1=Out of Ammo }}";
startRoll(roll, (results) => {
finishRoll( results.rollId,{});
});
} else {
specialized=myval[myrepeat.concat("specialized")] || 0
if ( quicknesslinked.includes(myskill) ) {
armorpen=myval["armor-quickness-pen"];
armorpenroll= "{{armorpen=@{armor-quickness-pen}}}";
}
var calcTN = "[[ "
if ( mymode == "vehiclesensor" ) {
calcTN += "@{sensor-gunnery-tn} + @{vehicle-driver}wp-char} + @{wp-vehicle}"
poolname="Control";
pool="controlpool";
} else if ( mymode == "vehicleranged" ) {
calcTN += " ?{Range} + @{rangedTN} + @{target|Target|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + @{wp-vehicle}";
poolname="Control";
pool="controlpool";
} else {
calcTN += " ?{Range} + @{rangedTN} + @{target|Target|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + " + armorpen;
poolname="Combat";
pool="combatpool";
}
calcTN += " + ?{Additional Modifiers|" + tnmods + "} + " + recoil;
calcTN += " ]]"
var calcDice = "[[ " + myskill + " + " + specialized + " + ?{" + poolname + " Pool Dice|0}"
if ( mymode == "vehiclesensor" ) calcDice += " + " + Math.floor(vehiclesensors / 2 )
calcDice += " ]]"
var roll="&{template:attack}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}";
roll += "{{rounds=[[" + rounds + "]]}}{{range=[[@{ask-range}]]}}";
roll += "{{targetnumber=" + calcTN + " }}{{rolldice=" + calcDice + "}}";
roll += "{{weaponname=" + myweapon + "}}{{weapondamage=" + wdmg + "}}{{weaponpower=[[" + wpower + "]]}}";
roll += "{{" + pool + "=[[?{" + poolname + " Pool Dice}]]}}{{weaponname=" + myweapon + "}}{{ammotype=" + ammotype + "}}";
roll += "{{attacktest=[[ " + calcDice + "d6>[[ {2, " + calcTN + "}kh1 ]]!! ]] }}";
if ( mymode == "rangedattack" ) {
roll += "{{dodge=[Dodge](~@{target|Target|token_name}|dodge)}}";
roll += "{{senddata=[[0]]}}"
}
roll += armorpenroll;
roll += "{{rangedmods=@{rangedTN}}}";
roll += "{{movemods=[[{0,( @{move} - " + gyro + ") }kh1]]}}";
roll += "{{targetmods=" + targetaim + "}}";
console.log(roll);
startRoll(roll, (results) => {
var poolresults;
setatts["rounds-phase"]=results.results.rounds.result + prevrounds;
const myrounds=results.results.rounds.result;
if ( mymode == "rangedattack" ) poolresults=results.results.combatpool.result + combatused;
else poolresults=results.results.controlpool.result + controlused;
finalrounds=myrounds;
if ( myrounds > ammoleft ) {
finalrounds=parseInt(ammoleft);
}
if ( finalrounds > 1 ) wpower=parseInt(wpower) + finalrounds;
let payload= {
attacker: myname,
armortype: "ballistic",
range: results.results.range.result,
wdmg: wdmg,
rounds: results.results.rounds.result,
dodge: 0,
attacktest: results.results.attacktest.result,
power: wpower,
ammotype: ammotype.toLowerCase(),
}
finishRoll( results.rollId,
{
weaponpower: wpower,
rounds: finalrounds,
senddata: rollEscape.escape(payload),
})
setatts[myrepeat.concat("ammoremain")]=ammoremain - finalrounds;
setatts[pool.concat("-used")]=poolresults;
setAttrs(setatts);
});
}
});
});
on('clicked:melee', (info) => {
console.log(info);
var atts=[];
const mymode=info["htmlAttributes"]["id"];
console.log(mymode);
var myfocus = 0;
var focus="";
var force="";
var mydamage;
var myskill;
var myweapon;
var mypower;
var pool="combatpool";
var defaultmsg="";
var defaultpen=0;
var myspec=0;
const meleeattrs=["unarmed", "unarmed-specialized", "cyberimplant", "weaponfocus-equipped", "weaponfocus-damage", "gyro-on"];
getAttrs(meleeattrs, function(myval) {
if ( mymode == "astralattack" ) {
pool="astralpool";
myweapon="Astral Attack";
var myskill="@{astralcombat}";
myskill="@{astralcombat} + @{weaponfocus-force}"
var mydamage="M"
if ( myval["weaponfocus-equipped"]=="on" ) {
myskill += "( " + myskill + " + @{weaponfocus-force} )"
mydamage=myval["weaponfocus-damage"];
}
mypower="@{charisma|max}";
focus="{{weaponfocus=@{weaponfocus-name}}}"
force="{{focusforce=@{weaponfocus-force}}}"
}
else if ( mymode == "unarmedattack" ) {
var gyropen=0;
var gyropenroll="";
if ( myval["gyro-on"] == 1 ) {
gyropen=4;
gyropenroll = "{{gyropen=" + gyropen + "}}";
}
mydamage=myval["@{attackdamage}"];
myskill=myval["unarmed"];
myspec=myval["unarmed-specialized"];
myweapon="@{martialarts}";
mypower="@{strength|max}";
if ( myval["unarmed"] == 0 ) {
console.log('unarmed is 0');
if (myval["cyberimplant"] == 0) {
myskill="@{strength|max}";
defaultpen=4;
pool="false";
var defaultmsg="{{default=Skill Defaulted to Strength Attribute with +" + defaultpen + " to hit}}";
} else {
myskill=myval["cyberimplant"];
defaultpen=2;
var defaultmsg="{{default=Skill Defaulted to Cyber Implant skill with +" + defaultpen + " to hit}}";
}
}
}
else if ( mymode == "critterattack" ) {
myskill="@{reaction|max}";
mydamage="@{attackdamage}";
mypower="@{attackpower}";
myweapon="Attack";
} else {
console.log(' id ' + mymode + ' does not match');
}
var calcTN="4 + @{meleeTN} + ( ( @{target|Target|meleereach|max} - @{meleereach|max} ) * ?{Use Reach Modifier?} ) + " + defaultpen + " + " + gyropen;
var calcDice=myskill + " + " + myspec ;
var myroll="&{template:attack}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}{{weapondamage="
console.log('pool name is ' + pool);
myroll+= mydamage + "}}{{weaponpower=[[" + mypower + "]]}}"
if ( pool == "combatpool" ) {
calcDice += " + ?{Combat Pool Dice}"
myroll += "{{pooldice=[[?{Combat Pool Dice|0}]]}}"
myroll += "{{pooltype=Combat}}";
} else if ( pool == "astralpool" ) {
calcDice += " + ?{Astral Pool Dice}"
myroll += "{{pooldice=[[?{Astral Pool Dice|0}]]}}"
myroll += "{{pooltype=Astral}}";
} else {
myroll += "{{pooldice=[[0]]}}"
}
myroll+= "{{charreach=[[@{meleereach|max}]]}}{{targetreach=[[@{target|Target|meleereach|max}]]}}"
myroll+="{{weaponname=" + myweapon + "}}{{reachmod=[[?{Use Reach Modifier?|Yes,1|No,0}]]}}"
myroll+="{{reachbonus=[[(@{target|Target|meleereach|max} - @{meleereach|max} ) * ?{Use Reach Modifier?}]]}}"
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}"
myroll+="{{attacktest=[[ [[" + calcDice + "]]d6>[[ {2,[[ " + calcTN + "]]}kh1]]!! ]] }}"
myroll+=defaultmsg;
myroll+=gyropenroll;
console.log(myroll);
startRoll(myroll, (results) => {
var reachmodtxt="Reach Bonus Applied" ;
if ( results.results.reachmod.result == 0 ) reachmodtxt="Reach Bonus Not Applied";
if ( pool != "none" ) updatepoolused(pool, results.results.pooldice.result );
finishRoll( results.rollId, {
reachmod: reachmodtxt,
});
});
});
});
on('clicked:repeating_meleeweapons:attack', (info) => {
console.log(info);
var atts=["combatpool-used", "gyro-on", "armor-quickness-pen"];
var rounds=1;
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
var mymode=info["htmlAttributes"]["id"];
const meleeattrs=["damage", "power", "name", "skill", "reach", "specialized", "notes"] ;
meleeattrs.forEach(myatt=>{
atts.push(myrepeat.concat(myatt));
});
getAttrs(atts, function(myval) {
var gyropenroll="";
var gyropen=0;
if ( myval["gyro-on"] == 1 ) {
gyropen=4;
gyropenroll = "{{gyropen=" + gyropen + "}}";
}
const combatused= parseInt(myval["combatpool-used"]);
const myweapon= myval[myrepeat.concat("name")];
const myreach= myval[myrepeat.concat("reach")];
const mydamage= myval[myrepeat.concat("damage")];
const mypower= myval[myrepeat.concat("power")];
const myskill= myval[myrepeat.concat("skill")];
const myspec= myval[myrepeat.concat("specialized")];
const mynotes= myval[myrepeat.concat("notes")];
var armorpen=0;
var myroll="&{template:attack}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}{{weapondamage=" + mydamage + "}}";
if ( quicknesslinked.includes(myskill) ) {
console.log('quick pen');
armorpen=myval["armor-quickness-pen"];
console.log(armorpen);
myroll+= "{{armorpen=@{armor-quickness-pen}}}";
}
calcDice="[[ " + myskill + " + " + myspec + " + ?{Combat Pool Dice}]]";
calcTN="[[ {2,(4 + @{meleeTN} + " + gyropen + " + ( ( @{target|Target|meleereach|max} - " + myreach + ") * ?{Use Reach Modifier?} ) + " + armorpen + ")}kh1 ]]";
myroll+= "{{weaponpower=[[" + mypower + "]]}}{{combatpool=[[?{Combat Pool Dice|0}]]}}"
myroll+= "{{charreach=[[@{meleereach|max}]]}}{{targetreach=[[@{target|Target|meleereach|max}]]}}"
myroll+="{{weaponname=" + myweapon + "}}{{reachmod=[[?{Use Reach Modifier?|Yes,1|No,0}]]}}"
myroll+="{{reachbonus=[[(@{target|Target|meleereach|max} - " + myreach + ") * ?{Use Reach Modifier?}]]}}"
myroll+="{{rolldice=" + calcDice + "}}{{targetnumber=" + calcTN + "}}"
myroll+="{{attacktest=[[" + calcDice + "d6>" + calcTN + "!! ]] }}"
myroll += "{{meleemods=@{meleeTN}}}";
myroll += gyropenroll;
console.log(myroll);
startRoll(myroll, (results) => {
var reachmodtxt="Reach Bonus Applied" ;
if ( results.results.reachmod.result == 0 ) reachmodtxt="Reach Bonus Not Applied";
finishRoll( results.rollId, {
reachmod: reachmodtxt,
});
atts["combatpool-used"] = results.results.combatpool.result + combatused;
setAttrs(atts);
});
});
});
on('clicked:repeating_explosives:rangedattack', (info) => {
var setatts={};
var scatter="";
var atts=["combatpool-used", "controlpool-used"];
var rounds=1;
var expint=0;
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
var mymode=info["htmlAttributes"]["id"]
const scatimg="https://raw.githubusercontent.com/bahornbeck/img/master/images/scatterdiagram";
const weaponattrs=["damage", "power", "name", "ammoremain", "skill", "wfamily", "specialized", "targeting", "recoilcomp", "gyro", "ammo", "scatter", "blast","scatterredux", "missleint", "tnmods"] ;
weaponattrs.forEach(myatt=>{
atts.push(myrepeat.concat(myatt));
});
getAttrs(atts, function(myval) {
const combatused= parseInt(myval["combatpool-used"]);
const controlused= parseInt(myval["controlpool-used"]);
const myweapon= myval[myrepeat.concat("name")];
const wdmg= myval[myrepeat.concat("damage")];
const ammoremain= myval[myrepeat.concat("ammoremain")];
const gyro= myval[myrepeat.concat("gyro")];
const targetaim= myval[myrepeat.concat("targeting")];
const tnmods= myval[myrepeat.concat("tnmods")];
var dmgnumber= damagetable[wdmg];
var range="{{range=?{Range|Short,4|Medium,5|Long,6|Extreme,9}}}";
var missleintel=0;
var calcTN;
if ( mymode=="sensorexp") {
range="";
missleintel=myval[myrepeat.concat("missleint")] || 0;
expint="{{expint=[[" + missleintel + "]]}}"
calcTN="[[ @{target|Target|signature} + ?{Urban Environment?|Yes,2|No,0} + @{wp-char}";
poolname="Combat";
pool="combatpool";
} else if ( mymode=="vehicle-sensorexp" ) {
range="";
missleintel=myval[myrepeat.concat("missleint")] || 0;
expint="{{expint=[[" + missleintel + "]]}}"
calcTN="[[ @{target|Target|signature} + ?{Urban Environment?|Yes,2|No,0} + @{wp-vehicle} + @{gunnery-test-los}";
poolname="Control";
pool="controlpool";
} else if ( mymode=="vehicle-explosive" ) {
calcTN = "[[ ?{Range} + @{rangedTN} + @{target|Target|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + @{wp-vehicle}";
poolname="Control";
pool="controlpool";
} else {
poolname="Combat";
pool="combatpool";
calcTN = "[[ ?{Range} + @{rangedTN} + @{target|Target|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + @{wp-char}";
}
let direction=getRandomInt(1, 7);
const myskill=myval[myrepeat.concat("skill")];
const myscat=myval[myrepeat.concat("scatter")];
const myblast=myval[myrepeat.concat("blast")];
const myredux=myval[myrepeat.concat("scatterredux")];
const specialized=myval[myrepeat.concat("specialized")] || 0;
if (ammoremain <= 0 ) {
roll="&{template:info}{{character=@{character_name}}}{{action=Attack: " + myweapon + "}}{{type=Simple}}{{info1=Out of Explosives }}";
startRoll(roll, (results) => {
finishRoll( results.rollId,{});
});
} else {
var calcDice = "[[ " + myskill + " + " + specialized + " + ?{" + poolname + " Pool Dice|0} + " + missleintel + " ]]"
calcTN += " + ?{Additional Modifiers|" + tnmods + "} ]]"
var roll="&{template:explosive}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}" + range
roll += "{{rolldice=" + calcDice + "}}{{targetnumber=[[{2,( " + calcTN + ")}kh1]]}}";
roll += "{{weapondamage=" + myval[myrepeat.concat("damage")] + "}}";
roll += "{{weaponpower=" + myval[myrepeat.concat("power")] + "}}" + expint;
if ( ( mymode=="vehicle-explosive" ) || ( mymode=="vehicle-sensorexp") ) roll += "{{controlpool=[[?{Control Pool Dice|0}]]}}";
else roll += "{{combatpool=[[?{Combat Pool Dice|0}]]}}";
roll += "{{weaponname=" + myval[myrepeat.concat("name")] + "}}";
roll += "{{attacktest=[[ " + calcDice + "d6>[[ {2, ( " + calcTN + ")}kh1 ]]!! ]] }}";
roll += "{{scatdir=[[1d6]]}}{{scatter=[[" + myscat + "d6]]}}{{blastradius=" + myblast ;
roll += "}}{{scatterredux=" + myredux + "}}{{scatdirnumber=[[" + direction ;
roll += "]]}}{{scatdir=" + scatimg + direction + ".png}}";
roll += "{{resist=[Resist Explosive](~selected|resist-impact-normal)}}";
console.log(roll);
startRoll(roll, (results) => {
var myscatter = results.results.scatter.result;
const mysuccess = results.results.attacktest.result;
console.log('start scatter: ' + myscatter);
console.log('successes: ' + mysuccess);
myscatter = myscatter - ( mysuccess * myredux) - missleintel;
if ( myscatter < 0 ) myscatter=0;
finishRoll( results.rollId,
{
scatter: myscatter,
}
);
if (( mymode=="vehicle-explosive" ) || ( mymode=="vehicle-sensorexp")) setatts["controlpool-used"] = results.results.controlpool.result + controlused;
else setatts["combatpool-used"] = results.results.combatpool.result + combatused;
setatts[myrepeat.concat("ammoremain")]=ammoremain - 1;
setAttrs(setatts);
});
}
});
});
const loadattributes=[ "body", "quickness", "strength", "charisma", "willpower", "intelligence", "perception", "reaction", "initiative"];
const critteratts=[ "perception", "attacks", "force", "reach"];
const weaponskills=[ "clubs", "assaultrifles", "cyberimplant", "edged", "gunnery", "heavyweapons", "lasers", "launchers", "pistols", "poles", "projectiles", "rifles", "shotguns", "smgs", "whips", "throwing", "demolitions", "underwatercombat", "unarmed" ]
const magicskills=["sorcery", "spellcasting", "spelldefense","dispelling","astralcombat", "ritualsorcery", "conjuring", "summoning", "banishing", "spiritcontrol","aurareading", "areadauras", "areadsignatures","areadsorcery"]
const sorceryspec=["spellcasting", "spelldefense","dispelling","astralcombat", "ritualsorcery"];
const conjuringspec=["summoning", "banishing", "spiritcontrol"];
const auraspec=["aurareading", "areadauras", "areadsignatures","areadsorcery"];
const deckspec=["hardware", "decking", "programming"];
const vehiclespec=["vehicle-type", "vehicle-size", "handling-street", "handling-offroad", "speed-rating", "acceleration", "body", "armor", "signature", "autonav", "pilot", "firmpoints", "hardpoints", "seating", "entry", "fuel", "economy", "cargo", "load", "vehicle-skill", "gunnery", "ivis-pool", "totalcost", "driver", "rigger"];
const vehiclespec2=[{"type": "vehicle-type"}, {"size": "vehicle-size"}, {"street": "handling-street"}, {"offroad": "vehicle-offroad"}, {"speed": "speed-rating"}, {"skill": "vehicle-skill"}];
const rangedatts=["name", "skill", "conceal", "short", "medium", "long", "extreme", "ammo", "power", "damage", "specialized", "modes", "recoilcomp", "gyro", "targeting", "notes"]
const meleeatts=["name", "skill", "conceal", "power", "damage", "specialized", "reach", "notes"]
const explosiveatts=["name", "skill", "conceal", "short", "medium", "long", "extreme", "ammo", "power", "damage", "specialized", "modes", "recoilcomp", "gyro", "targeting", "notes", "missleint", "blast", "scatter", "rangefinder"]
const gearatts=["name", "quantity", "weight", "rating", "description"];
const decklist=["mpcp", "bod", "evasion", "masking", "sensors"];
const deckopts=["hardening", "activemem", "storagemem", "response", "iccm", "offlinestorage"];
const utillist=["sleaze" , "track", "utility", "armor", "cloak", "lockon", "medic", "blackhammer", "killjoy", "slow"];
const spellatts=["name", "specialized", "force", "type", "range", "target", "damage", "drain", "drainlvl", "description"];
const cyberatts=["name", "rating", "essence", "notes"];
const bioatts=["name", "rating", "index", "notes"];
const critterpoweratts=["name", "description"];
on("clicked:jsonimport-char", function(){
getAttrs(["jsonnpc"], function(myval) {
npc=JSON.parse(myval["jsonnpc"]);
console.log(npc);
loadCharacter(npc);
});
});
var loadCharacter = function (npc) {
getAttrs(["jsonnpc"], function(myval) {
var atts={};
repeatskills=[];
npc=JSON.parse(myval["jsonnpc"]);
console.log(npc);
if ( npc["skills"] ) { var skills = npc["skills"]; } else { var skills = [];}
if ( npc["vehicles"] ) { var vehicles = npc["vehicles"]; } else { var vehicles = [];}
if ( npc["spells"] ) { var spells = npc["spells"]; } else { var spells = [];}
if ( npc["cyberware"] ) { var cyberware = npc["cyberware"]; } else { var cyberware = [];}
if ( npc["bioware"] ) { var bioware = npc["bioware"]; } else { var bioware = [];}
if ( npc["nanotech"] ) { var nanotech = npc["nanotech"]; } else { var nanotech = [];}
if ( npc["gear"] ) { var gear = npc["gear"]; } else { var gear = [];}
if ( npc["weaknesses"] ) { var weaknesses = npc["weaknesses"]; } else { var weaknesses = [];}
if ( npc["powers"] ) { var powers = npc["powers"]; } else { var powers = [];}
if ( npc["foci"] ) { var foci = npc["foci"]; } else { var foci = [];}
if ( npc["cyberdeck"] ) { var cyberdeck = npc["cyberdeck"]; } else { var cyberdeck = {};}
if ( npc["utilities"] ) { var utilities = npc["utilities"]; } else { var utilities = [];}
if ( npc["armor"] ) { var armorsets = npc["armor"]; } else { var armorsets = [];}
if ( npc["ranged"] ) { var ranged = npc["ranged"]; } else { var ranged = [];}
if ( npc["melee"] ) { var melee = npc["melee"]; } else { var melee = [];}
if ( npc["explosives"] ) { var explosives = npc["explosives"]; } else { var explosives = [];}
if ( npc["character_name"] ) atts["character_name"]=npc["character_name"] ;
if ( npc["metatype"] ) { atts["metatype"]=npc["metatype"] ; } else { atts["metatype"]="Human";}
if ( npc["vcr"] ) atts["vcr"]=npc["vcr"];
if ( npc["magic"] ) atts["magic"]=npc["magic"];
if ( npc["essense"] ) { atts["essense"]=npc["essense"]; } else { atts["essense"]=6;}
console.log('loading attributes');
loadattributes.forEach(myatt=>{
let max=myatt.concat("_max");
let mod=myatt.concat("-mods");
if(npc[myatt]) atts[myatt]=npc[myatt];
if(npc[mod]) atts[mod]=npc[mod];
if(npc[max]) atts[mod]=npc[max] - npc[myatt];
if(npc[max] == 'initiative_max') console.log('initme' + npc[max]);
});
console.log('loading critter attributes');
critteratts.forEach(myatt=>{
if (npc[myatt]) {
if (myatt == "attacks") {
myattack=npc[myatt].split('');
atts["attackdamage"]=myattack.pop();
atts["attackpower"]=parseInt(myattack.join(''));
} else if (myatt="reach"){
atts["meleereach"]=npc[myatt];
} else {
atts[myatt]=npc[myatt];
}
}
});
console.log('loading skills');
skills.forEach(skill=>{
let myskill = skill["name"].toLowerCase();
if ( weaponskills.includes(myskill) ) {
atts[myskill] = skill["rating"];
} else if (magicskills.includes(myskill)) {
if ( sorceryspec.includes(myskill)) atts["sorcery-spec-switch"]=1;
if ( conjuringspec.includes(myskill)) atts["conjuring-spec-switch"]=1;
if ( auraspec.includes(myskill)) atts["auraread-spec-switch"]=1;
atts[myskill] = skill["rating"];
} else if (atts[myskill]=="decking") {
atts[myskill] = skill["rating"];
} else if ( deckspec.includes(myskill)) {
atts["deck-spec-switch"]=1;
atts[myskill] = skill["rating"];
} else {
repeatskills.push(skill);
}
});
console.log('loading armor');
armorsets.forEach(armor=>{
console.log(armor);
var newrowid = generateRowID();
atts["repeating_armor_" + newrowid + "_armorname"] = armor["name"];
atts["repeating_armor_" + newrowid + "_ballistic"] = armor["ballistic"];
atts["repeating_armor_" + newrowid + "_impact"] = armor["impact"];
if ( armor["equipped"] == true ) atts["repeating_armor_" + newrowid + "_equipped"] = "on";
});
console.log('loading ranged');
ranged.forEach(weapon=>{
var newrowid = generateRowID();
let pre="@{";
let post="}";
let mycheck="check";
console.log('adding ranged weapon ' + weapon["name"]);
rangedatts.forEach(myatt=>{
if (weapon[myatt]) {
if ( myatt=="skill" ) {
atts["repeating_rangedweapons_" + newrowid + "_" + myatt ] = pre.concat(weapon[myatt].concat(post));
console.log('ranged skill' + pre.concat(weapon[myatt].concat(post)) );
} else if (myatt=="modes") {
console.log('adding ranged weapon modes');
weapon[myatt].forEach(firemode=>{
atts["repeating_rangedweapons_" + newrowid + "_" + firemode.concat(mycheck) ] = 1;
});
} else {
console.log('adding ranged weapon ' + weapon["name"] + ' attribute ' + myatt + ' value ' + weapon[myatt]);
atts["repeating_rangedweapons_" + newrowid + "_" + myatt ] = weapon[myatt];
}
}
});
atts["repeating_rangedweapons_" + newrowid + "_showweaponmod"] = 1;
});
console.log('loading explosives');
explosives.forEach(weapon=>{
var newrowid = generateRowID();
let pre="@{";
let post="}";
explosiveatts.forEach(myatt=>{
if (weapon[myatt]) {
if ( myatt=="skill" ) {
atts["repeating_explosives_" + newrowid + "_" + myatt ] = pre.concat(weapon[myatt].concat(post));
} else {
atts["repeating_explosives_" + newrowid + "_" + myatt ] = weapon[myatt];
}
}
});
});
console.log('loading melee weapons');
melee.forEach(weapon=>{
var newrowid = generateRowID();
let pre="@{";
let post="}";
meleeatts.forEach(myatt=>{
if (weapon[myatt]) {
if ( myatt=="skill" ) {
atts["repeating_melee_" + newrowid + "_" + myatt ] = pre.concat(weapon[myatt].concat(post));
} else {
atts["repeating_melee_" + newrowid + "_" + myatt ] = weapon[myatt];
}
}
});
});
console.log('loading skills ');
repeatskills.forEach(skill=>{
var newrowid = generateRowID();
atts["repeating_skills_" + newrowid + "_skillname"] = skill["name"];
atts["repeating_skills_" + newrowid + "_skillrating"] = skill["rating"];
});
console.log('loading spells ');
spells.forEach(spell=>{
var newrowid = generateRowID();
spellatts.forEach(myatt=>{
if (spell[myatt]) {
atts["repeating_spells_" + newrowid + "_" + myatt ] = spell[myatt];
}
});
});
console.log('loading foci ');
foci.forEach(myfoci=>{
var newrowid = generateRowID();
atts["repeating_foci_" + newrowid + "_fociname"] = myfoci["name"];
atts["repeating_foci_" + newrowid + "_type"] = myfoci["specialized"] || "E";
atts["repeating_foci_" + newrowid + "_qty"] = myfoci["qty"] ||0 ;
atts["repeating_foci_" + newrowid + "_power"] = myfoci["force"] || 0;
});
vehicles.forEach(car=>{
var newrowid = generateRowID();
atts["repeating_vehicles_" + newrowid + "_name"] = car["name"];
atts["repeating_vehicles_" + newrowid + "_cost"] = car["cost"] ||0 ;
if (car["model"]) atts["repeating_vehicles_" + newrowid + "_model"] = car["model"];
if (car["notes"]) atts["repeating_vehicles_" + newrowid + "notes"] = car["notes"];
});
cyberware.forEach(ware=>{
var newrowid = generateRowID();
cyberatts.forEach(myatt=>{
if (ware[myatt]) {
atts["repeating_cyberware_" + newrowid + "_cyberware-" + myatt] = ware[myatt];
}
});
});
nanotech.forEach(nano=>{
var newrowid = generateRowID();
cyberatts.forEach(myatt=>{
if (nano[myatt]) {
atts["repeating_nanotech_" + newrowid + "_nanotech-" + myatt ] = nano[myatt];
}
});
});
bioware.forEach(bio=>{
var newrowid = generateRowID();
bioatts.forEach(myatt=>{
if (bio[myatt]) {
atts["repeating_bioware_" + newrowid + "_bioware-" + myatt ] = bio[myatt];
}
});
});
gear.forEach(item=>{
var newrowid = generateRowID();
gearatts.forEach(myatt=>{
if (item[myatt]) {
atts["repeating_gear_" + newrowid + "_" + myatt ] = item[myatt];
}
});
});
powers.forEach(power=>{
var newrowid = generateRowID();
critterpoweratts.forEach(myatt=>{
if (power[myatt]) {
atts["repeating_critter-powers_" + newrowid + "_" + myatt ] = power[myatt];
}
});
});
weaknesses.forEach(weak=>{
console.log('weak:'+ weak);
var newrowid = generateRowID();
critterpoweratts.forEach(myatt=>{
if (weak[myatt]) {
atts["repeating_critter-weaknesses_" + newrowid + "_" + myatt ] = weak[myatt];
}
});
});
var deckp="deck-";
var decks="-max";
for (const [key, value] of Object.entries(cyberdeck)) {
console.log('key is ' + key);
if ( decklist.includes(key)) {
let atutil = deckp.concat(key.concat(decks));
atts[atutil]=value;
} else if ( deckopts.includes(key)) {
let atutil = deckp.concat(key);
atts[atutil]=value;
}
};
utilities.forEach(util=>{
let myutil = util["name"].toLowerCase();
if ( utillist.includes(myutil)) {
let pre="deck";
let rat="-rating";
let mul="-multiplier";
let size="-multiplier";
let myrat=pre.concat(myutil.concat(rat));
let mymul=pre.concat(myutil.concat(mul));
let mysize=pre.concat(myutil.concat(size));
if (util["rating"]) atts[myrat]=util["rating"];
if (util["multiplier"]) atts[mymul]=util["multiplier"];
if (util["size"]) atts[mysize]=util["size"];
}
else {
var newrowid = generateRowID();
atts["repeating_deck-utilities_" + newrowid + "_utility"] = util["name"];
atts["repeating_deck-utilities_" + newrowid + "_rating"] = util["rating"] || 0;
atts["repeating_deck-utilities_" + newrowid + "_target"] = util["target"] || "matrixaccess";
atts["repeating_deck-utilities_" + newrowid + "_multiplier"] = util["multiplier"] || 1;
atts["repeating_deck-utilities_" + newrowid + "_size"] = util["size"] || 0;
}
});
vehiclespec.forEach(myatt=>{
if ( npc[myatt]) atts[myatt]=npc[myatt];
});
for (const [key, value] of Object.entries(vehiclespec2)) {
if ( npc[key]) atts[value]=npc[key];
};
console.log(repeatskills);
console.log(atts);
setAttrs(atts);
});
};
const switchbuttons1 = ["securitysheaf", "astralattributes", "sorceryskills", "spells", "adeptpowers", "magicinitiate", "foci", "geas", "totem", "combatskills", "cyberware", "deckingskills", "bioware", "gear", "contacts"];
const switchbuttons2 = ["gunnery","deck-utilities-","deck-skills-", "deck-cyberdeck-", "drones-skills-", "drones-models-", "vehicle-skills-", "drone-list-", "ic-", "rc-deck-" ];
const switchbuttons = switchbuttons1.concat(switchbuttons2)
switchbuttons.forEach(button => {
let mybutton=button.concat('switch');
on(`clicked:${mybutton}`, function() {
console.log(mybutton)
getAttrs([mybutton], function(myval){
if (myval[mybutton] == "show") {
setAttrs({[mybutton]: "hide"});
} else {
setAttrs({[mybutton]: "show"});
}
});
});
});
on("clicked:show-hide", (info) => {
const myid=info["htmlAttributes"]["id"]
console.log('clicked ' + myid);
getAttrs([myid], function(myval) {
if (myval[myid] == "show") setAttrs({[myid]: "hide"});
else setAttrs({[myid]: "show"});
});
});
const vehicleskills=["bike","car","hovercraft", "motorboat", "sailboat", "submarine", "wingedaircraft", "tracks", "semiballistic", "lta", "rotor", "ship", "vectoredthrust", "mecharm", "suborbital", "walkers"];
let vchangelist="";
let vonprefix=" change:";
let vonsuffix="-specialize";
let vattrs=[];
vehicleskills.forEach(skill => {
let myvonchange = vonprefix.concat(skill.concat(vonsuffix));
vchangelist += myvonchange;
});
on(vchangelist, function(eventinfo) {
var mybase=eventinfo["sourceAttribute"].split("-")[0]
var myspec=eventinfo["sourceAttribute"];
var myremote=mybase.concat("-remote")
vattrs.push(mybase);
vattrs.push(myspec);
console.log(vattrs);
getAttrs(vattrs, function(myval) {
if (myval[myspec] == 0) {
console.log('setting ' + myremote + ' to ' + myval[mybase]);
setAttrs({[myremote]: myval[mybase]});
}
});
});
const deckutilrepeat=["deck-utilities", "offensiveutils", "defensiveutils"]
const utilitylist=["decksleaze", "decktrack", "deckarmor", "deckcloak", "deckmedic", "decklockon", "deckattack", "deckblackhammer", "deckkilljoy", "deckslow"];
let changelist="change:deckattack-multiplier";
let onprefix=" change:";
let onsuffix="-rating";
utilitylist.forEach(util => {
let myonchange = onprefix.concat(util);
myonchange = myonchange.concat("-rating");
changelist += myonchange;
});
on(changelist, function(eventinfo) {
let myutil=eventinfo["sourceAttribute"].split("-")[0];
var myrating=myutil.concat("-rating");
var mymulti=myutil.concat("-multiplier");
var mysize=myutil.concat("-size");
getAttrs([myrating, mymulti], function(myval) {
let r = parseInt(myval[myrating]);
let m = parseInt(myval[mymulti]);
let s = (r * r) * m;
setAttrs({[mysize]: s});
});
});
const personalist=["deck-mpcp", "deck-bod", "deck-evasion", "deck-sensors", "deck-masking", "deck-detection"];
let pchangelist="sheet:opened change:deck-realityfilter change:deck-icsuppresspool change:deck-icsuppressed";
let ponprefix=" change:";
var pgetatts=["deck-realityfilter","deck-icsuppressed","deck-icsuppresspool", "hackingpool-used"];
personalist.forEach(p => {
pchangelist += ponprefix.concat(p.concat("-max"));
pchangelist += ponprefix.concat(p.concat("-mods"));
pgetatts.push(p.concat("-max"));
pgetatts.push(p.concat("-mods"));
});
on(pchangelist, function() {
console.log('deck-mpcp change');
getAttrs(pgetatts, function(myval) {
sets={};
console.log(myval);
console.log(myval["deck-realityfilter"]);
var hp = parseInt(myval["hackingpool"]);
var hackpool= hp || 0;
var mysuppress=parseInt(myval["deck-icsuppressed"]);
sets["deck-mpcp-final"] = parseInt(myval["deck-mpcp-max"]) + parseInt(myval["deck-mpcp-mods"]) - parseInt(myval["deck-realityfilter"]);
sets["deck-bod-final"] = parseInt(myval["deck-bod-max"]) + parseInt(myval["deck-bod-mods"]);
sets["deck-sensors-final"] = parseInt(myval["deck-sensors-max"]) + parseInt(myval["deck-sensors-mods"]);
sets["deck-evasion-final"] = parseInt(myval["deck-evasion-max"]) + parseInt(myval["deck-evasion-mods"]);
sets["deck-masking-final"] = parseInt(myval["deck-masking-max"]) + parseInt(myval["deck-masking-mods"]);
if ( myval["deck-icsuppresspool"] == 1) {
sets["hackingpool-icsuppress"] = mysuppress;
sets["deck-detection-final"] = parseInt(myval["deck-detection-max"]) + parseInt(myval["deck-detection-mods"]);
} else {
sets["deck-detection-final"] = parseInt(myval["deck-detection-max"]) + parseInt(myval["deck-detection-mods"]) - mysuppress;
}
console.log(sets);
setAttrs(sets);
});
});
on("change:frame-initiative change:frame-core", function () {
getAttrs(["frame-initiative", "frame-core"], function(myval) {
var mycore = parseInt(myval["frame-core"]);
var myinit = parseInt(myval["frame-initiative"] + 1 );
setAttrs({"deck-mpcp-max": mycore, "deck-reaction-final": mycore, "deck-initiative": myinit });
});
});
var utilsizechange;
const cprefix=" change:repeating_";
deckutilrepeat.forEach(p => {
utilsizechange += cprefix.concat(p.concat(":multiplier"));
utilsizechange += cprefix.concat(p.concat(":size"));
utilsizechange += cprefix.concat(p.concat(":rating"));
});
on(utilsizechange, function(info) {
console.log(info);
getAttrs(["repeating_deck-utilities_rating", "repeating_deck-utilities_multiplier"], function(myval) {
let r = parseInt(myval["repeating_deck-utilities_rating"]);
let m = parseInt(myval["repeating_deck-utilities_multiplier"]);
let s = (r * r) * m;
let myattr = "repeating_deck-utilities_size";
setAttrs({[myattr]: s});
});
});
on("change:matrixsecurityrating", function() {
console.log('change of sec rating');
getAttrs(["matrixsecurityrating"], function(myval) {
let sr = parseInt(myval["matrixsecurityrating"]);
setAttrs({"deck-bod-max":sr, "deck-evasion-max":sr, "deck-masking-max":sr, "deck-sensors-max":sr, "deck-mpcp-max":sr, "deck-detection-max":sr});
});
});
var deckchangelist;
utilitylist.forEach(p => {
deckchangelist += ponprefix.concat(p.concat("-loaded"));
deckchangelist += ponprefix.concat(p.concat("-size"));
deckchangelist += ponprefix.concat(p.concat("-rating"));
});
deckutilrepeat.forEach(p => {
const utilatts=["loaded", "size", "rating"];
deckchangelist += " change:repeating_" + p + ":loaded";
deckchangelist += " change:repeating_" + p + ":size";
deckchangelist += " change:repeating_" + p + ":rating";
});
on(deckchangelist, function(info) {
var myatts=["deck-utilitypayload", "deck-activemem", "deck-util-size-loaded", "deck-util-rating-loaded"];
console.log(info);
myold=info["previousValue"];
mynew=info["newValue"];
var myattrib;
var myrepeat;
var mybase;
var mysizeattr;
var myloadattr;
var myratingattr;
if (info["sourceAttribute"].includes("repeating_")) {
mybase=info["sourceAttribute"].split("_");
myattrib=mybase.pop();
myrepeat=mybase.join('_');
mysizeattr=myrepeat.concat("_size");
myloadattr=myrepeat.concat("_loaded");
myratingattr=myrepeat.concat("_rating");
myratingfinal=myrepeat.concat("_rating-final");
} else {
mybase=info["sourceAttribute"].split("-");
myattrib=mybase.pop();
myrepeat=mybase;
mysizeattr=myrepeat +"-size";
myloadattr=myrepeat + "-loaded";
myratingattr=myrepeat + "-rating";
myratingfinal=myrepeat + "-rating-final";
}
myatts.push(mysizeattr, myloadattr, myratingattr, );
console.log('myatt: ' + myattrib);
console.log('myrepeat: ' + myrepeat);
console.log(myatts);
if (myattrib.includes("loaded")) console.log('change load');
if (myattrib.includes("rating")) console.log('change rating');
if (myattrib.includes("size")) console.log('change size');
getAttrs(myatts, function(myval){
var newsize;
var newratings;
setatts=[];
const currentsize=parseInt(myval["deck-util-size-loaded"]);
const currentrat=parseInt(myval["deck-util-rating-loaded"]);
if ( myattrib == "loaded" ) {
if ( myval[myloadattr] == 1 ) {
console.log('loading utility ' + myrepeat);
newsize=currentsize + parseInt(myval[mysizeattr]);
newratings=currentrat + parseInt(myval[myratingattr]);
setatts[myratingfinal]=parseInt(myval[myratingattr]);
} else {
console.log('un-loading utility ' + myrepeat);
newsize=currentsize - parseInt(myval[mysizeattr]);
newratings=currentrat - parseInt(myval[myratingattr]);
setatts[myratingfinal]=0;
}
} else if ( myattrib == "size" ) {
if ( myval[myloadattr] == 1 ) {
newsize = currentsize + ( parseInt(myval[mysizeattr]) - parseInt(myold));
console.log('change of size ' + myrepeat + ' from: ' + myold + ' to: ' + myval[mysizeattr]);
}
} else if ( myattrib == "rating") {
if ( myval[myloadattr] == 1 ) {
newratings = currentrat + ( parseInt(myval[myratingattr]) - parseInt(myold));
console.log('change of rating ' + myrepeat + ' from: ' + myold + ' to: ' + myval[myratingattr]);
}
} else {
console.log('invalid event');
}
console.log('debug size' + newsize);
console.log('debug rating' + newratings);
if (newsize != null) setatts["deck-util-size-loaded"]=newsize;
if (newratings != null) setatts["deck-util-rating-loaded"]=newratings;
console.log('setatts');
console.log(setatts);
setAttrs(setatts);
});
});
on("change:deck-systemrating change:matrix-iconstatus change:deck-activemem change:deck-utilitypayload change:deck-util-size-loaded change:deck-util-rating-loaded", function() {
getatts=["deck-systemrating", "matrix-iconstatus", "deck-activemem", "deck-utilitypayload", "deck-util-size-loaded", "deck-util-rating-loaded"];
getAttrs(getatts, function(myval) {
let myoverloaded = 0;
let myratingoload = 0;
if ( parseInt(myval["deck-util-size-loaded"]) > parseInt(myval["deck-activemem"]) ) {
myoverloaded=1;
}
if ( parseInt(myval["deck-util-rating-loaded"]) > parseInt(myval["deck-utilitypayload"]) ) {
myratingoload=1;
}
console.log('load:' + myoverloaded);
setAttrs({"deck-mem-overloaded": myoverloaded, "deck-util-overloaded": myratingoload});
});
});
on("sheet:opened change:deck-systemrating change:matrix-iconstatus", function() {
getAttrs(["deck-systemrating","matrix-iconstatus"], function(myval) {
sets={};
var mytn=0;
const rating=myval["deck-systemrating"].toUpperCase();
const icon=myval["matrix-iconstatus"];
if ( rating != "UNKNOWN") sets["deck-tn"]=matrixtn[rating][icon];
if ( icon == "Legitimate") sets["iconstatuscode"]=0;
else sets["iconstatuscode"]=1;
console.log(sets)
setAttrs(sets);
});
});
on("change:matrixcode", function() {
console.log('matrixsecuritynumber')
getAttrs(["matrixcode"], function (myvar) {
const rating=myvar["matrixcode"].toUpperCase();
sets={};
sets["matrixsecuritynumber"]=matrixtn[rating]["secrating"];
console.log(sets)
setAttrs(sets);
});
});
on("change:deckattacklevel", function() {
const multipliers={L:2, M:3, S:4, D:5};
getAttrs(["deckattacklevel"], function(myval) {
const mylevel=myval["deckattacklevel"];
console.log('test level: ' + multipliers[mylevel]);
setAttrs({"deckattack-multiplier": multipliers[mylevel]});
});
});
on('clicked:repeating_ic:combat', (info) => {
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
gets=["matrixcode"];
var source=info['sourceAttribute'].split('_');
var sourceattr=source.pop();
var myrepeat=source.join('_').concat('_');
gets.push(myrepeat.concat("icrating"));
gets.push(myrepeat.concat("ictargettest"));
gets.push(myrepeat.concat("icname"));
gets.push(myrepeat.concat("ictype"));
gets.push(myrepeat.concat("ic-penalty"));
gets.push(myrepeat.concat("matrix-iconstatus"));
getAttrs(gets, function (myval) {
var myatt="@{target|Target|deck-evasion-final}";
const name=myval[myrepeat.concat("icname")];
const ictype=myval[myrepeat.concat("ictype")];
console.log('ictype ' + ictype);
const penalty=parseInt(myval[myrepeat.concat("ic-penalty")]);
const targeticon=myval[myrepeat.concat("matrix-iconstatus")];
var icmode="proactive";
if ( iclist["reactive"].includes(ictype)) {
icmode="reactive";
}
const code=myval["matrixcode"].toUpperCase();
const rating=parseInt(myval[myrepeat.concat("icrating")]);
var ictest=myval[myrepeat.concat("ictargettest")];
var targetatt="bod";
if ( (icmode="proactive") && (ictest.includes("target")) ) targetatt=ictest.split("-")[1];
const attacktn =matrixtn[code][targeticon];
if ( icmode=="proactive" ) ictest=attacktn;
if ( ictype == "Probe" ) {
console.log('probe!');
ictest="@{target|decker|deck-detection-final}";
}
const payload = {
power: rating,
attribute: "deck-" + targetatt + "-final",
attacktype: ictype
};
var target="{{target=@{target|Target|token_name}}}";
if ( mytitle == "Evade Detection" ) myatt = "@{target|Target|deck-sensors-final}";
if ( mytitle == "IC Resist" ) myatt = "?{Power of Attack?|2}";
if ( mytitle == "IC Resist" ) target = "{{target=" + name + "}}";
if ( mytitle == "IC Execute" ) {
myatt = ictest;
console.log('myatt ' + myatt);
target="{{target=@{target|decker|token_name}}}";
}
var calcTN= myatt + " +?{Miscellaneous Modifiers|0} + " + penalty;
var calcDice="@{matrixsecurityrating}"
if (( ictype == "Probe") || (ictype == "Scramble")) calcDice=rating;
if (( ictype == "Tar Baby") || (ictype == "Tar pit")) calcDice=rating;
var myroll="&{template:matrix}{{myname=" + name + "}}";
myroll+=target;
myroll+="{{senddata=[[0]]}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{action=" + mytitle + "}}"
myroll+="{{roll= [[ [[" + calcDice + "]]d6>[[ {2,(" + calcTN + ")}kh1]]!! ]] }}"
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId,
{
senddata: rollEscape.escape(payload),
});
});
});
});
on("clicked:deck-utilities-unloadall", function() {
utilatts=[];
utilrepeatatts=[];
offenserepeatatts=[];
defenserepeatatts=[];
utilitylist.forEach(util=>{
let myattr=util.concat("-loaded");
utilatts[myattr]=0;
});
console.log('utilatts');
console.log(utilatts);
setAttrs(utilatts);
/* setAttrs(utilatts); */
deckutilrepeat.forEach(rsection=>{
getSectionIDs(rsection, function(idarray) {
console.log(rsection);
var myatts=[];
idarray.forEach((m, id) => {
let myrepeat="repeating_" + rsection +"_" + m + "_loaded";;
myatts[myrepeat]=0;
});
console.log(rsection);
console.log(myatts);
setAttrs(myatts);
});
});
var finalatts=[];
finalatts["deck-util-size-loaded"]=0;
finalatts["deck-util-rating-loaded"]=0;
setAttrs(finalatts);
});
on("sheet:opened change:eccm-fluxmod change:rcdeck-fluxmod", function() {
getAttrs(["eccm-fluxmod", "rcdeck-fluxmod"], function (myval) {
const mysystems = ["eccm", "rcdeck"];
myset={};
var myrange=0;
mysystems.forEach(mysys => {
let mod = mysys.concat("-fluxmod");
let range = mysys.concat("-range");
let myflux = (myval[mod])
if ( myflux == 0 ) myrange=.25;
if ( myflux == 1 ) myrange=1;
if ( myflux == 2 ) myrange=2;
if ( myflux == 3 ) myrange=4;
if ( myflux == 4 ) myrange=6;
if ( myflux == 5 ) myrange=9;
if ( myflux == 6 ) myrange=12;
if ( myflux == 7 ) myrange=16;
if ( myflux == 8 ) myrange=20;
if ( myflux == 9 ) myrange=25;
if ( myflux >= 10 ) myrange= ( 2 * myflux ) + 10;
myset[range] = myrange;
});
setAttrs(myset);
});
});
on("change:sensors-rating change:body change:sonar-rating change:ecm-rating change:eccm-rating change:ed-rating change:ecd-rating", function(){
getAttrs(["sensors-rating", "body", "sonar-rating", "ecm-rating", "eccm-rating", "ed-rating", "ecd-rating"], function (myval) {
var sensorflux = Math.ceil(parseInt(myval["sensors-rating"]) *1.5);
var sensormax = sensorflux + Math.floor(parseInt(myval["body"])/2);
var sonarflux = Math.ceil(parseInt(myval["sonar-rating"]) *1.5);
var sonarmax = sonarflux + Math.floor(parseInt(myval["body"])/2);
var ecmflux = Math.ceil(parseInt(myval["ecm-rating"]) *1.5);
var ecmmax = ecmflux + Math.floor(parseInt(myval["body"])/2);
var eccmflux = Math.ceil(parseInt(myval["eccm-rating"]) *1.5);
var eccmmax = eccmflux + Math.floor(parseInt(myval["body"])/2);
var edflux = Math.ceil(parseInt(myval["ed-rating"]) *1.5);
var edmax = edflux + Math.floor(parseInt(myval["body"])/2);
var ecdflux = Math.ceil(parseInt(myval["ecd-rating"]) *1.5);
var ecdmax = ecdflux + Math.floor(parseInt(myval["body"])/2);
setAttrs({"sensors-flux": sensorflux, "sensors-fluxmax": sensormax, "ecm-flux": ecmflux, "ecm-fluxmax": ecmmax, "eccm-flux": eccmflux, "eccm-fluxmax": eccmmax, "ed-flux": edflux, "ed-fluxmax": edmax, "ecd-flux": ecdflux, "ecd-fluxmax": ecdmax, "sonar-flux": sonarflux, "sonar-fluxmax": sonarmax, "sensors-fluxmod": sensorflux, "sonar-fluxmod": sonarflux, "ecm-fluxmod": ecmflux, "eccm-fluxmod": eccmflux, "ed-fluxmod": edflux, "ecd-fluxmod": ecdflux});
});
});
on("sheet:opened change:sensors-fluxmod change:sonar-fluxmod change:ecm-fluxmod change:eccm-fluxmod change:ed-fluxmod change:ecd-fluxmod change:body change:ecd-enabled", function () {
getAttrs(["sensors-fluxmod", "sonar-fluxmod", "ecm-fluxmod", "eccm-fluxmod", "ed-fluxmod", "ecd-fluxmod", "sensors-flux", "sonar-flux", "ecm-flux", "eccm-flux", "ed-flux", "ecd-flux", "body", "ecd-enabled"], function (myval) {
var overload=0;
var sensor=Math.max(0,myval["sensors-fluxmod"] - myval["sensors-flux"] );
var sonar=Math.max(0,myval["sonar-fluxmod"] - myval["sonar-flux"] );
var ecm=Math.max(0,myval["ecm-fluxmod"] - myval["ecm-flux"] );
var eccm=Math.max(0,myval["eccm-fluxmod"] - myval["eccm-flux"] );
var ed=Math.max(0,myval["ed-fluxmod"] - myval["ed-flux"] );
var ecd=Math.max(0,myval["ecd-fluxmod"] - myval["ecd-flux"] );
var total=sensor + sonar + ecm + eccm + ed + ecd;
var maxflux = parseInt(myval["body"]) - parseInt(myval["ecd-enabled"]);
if ( total > maxflux ) overload=1;
setAttrs({"vehicle-fluxtotal": total, "vehicle-flux-max": maxflux, "vehicle-flux-overload": overload});
});
});
on("change:vehicle-autonav change:autonav", function(){
getAttrs(["vehicle-autonav", "autonav"], function (myval) {
var autonav=0;
if (myval["vehicle-autonav"] == "0") autonav=0;
if (myval["vehicle-autonav"] == "1") autonav=myval["autonav"];
setAttrs({"driving-test-autonav": autonav});
});
});
on("change:vehicle-offroad change:handling-street change:handling-offroad", function(){
getAttrs(["vehicle-offroad", "handling-street", "handling-offroad"], function (myval) {
var handling=0;
if (myval["vehicle-offroad"] == "0") handling=myval["handling-street"];
if (myval["vehicle-offroad"] == "1") handling=myval["handling-offroad"];
console.log('handling set to ' + handling);
setAttrs({"handling": handling});
});
});
on("change:vehicle-size", function(){
getAttrs(["vehicle-size"], function (myval) {
var size=0;
if (myval["vehicle-size"] == "Large") size=2;
if (myval["vehicle-size"] == "Extra-Large") size=3;
setAttrs({"driving-test-size": size});
});
});
on("change:rigger", function(){
getAttrs(["rigger"], function (myval) {
var mydriver="@{";
mydriver=mydriver.concat(myval["rigger"]);
mydriver=mydriver.concat("|");
setAttrs({"vehicle-driver": mydriver});
});
});
on("sheet:opened change:vehicle-urban change:gunnery-test-los", function () {
getAttrs(["vehicle-urban", "gunnery-test-los"], function(myval) {
var sensorgun=(myval["vehicle-urban"] * 2 ) + myval["gunnery-test-los"];
console.log('sensor gunnery tn mods' + sensorgun);
setAttrs({"sensor-gunnery-tn": sensorgun });
});
});
on("change:speed-current change:speed-rating change:vehicle-penalty", function() {
getAttrs(["speed-current", "speed-rating", "vehicle-penalty"], function(myval) {
let speed=parseInt(myval["speed-current"]);
let speedrating=parseInt(myval["speed-rating"]);
var kph = Math.ceil(speedrating * 1.2);
var sp = Math.floor(speed / 10);
var exceed=0;
if (myval["vehicle-penalty"] == "2") speedrating=Math.ceil(speedrating*0.75);
if (myval["vehicle-penalty"] == "3") speedrating=Math.ceil(speedrating*0.50);
if (speed > speedrating ) {
exceed=1;
} else {
exceed=0;
}
let maxspeed=speedrating*1.5;
setAttrs({"speed-points": sp, "speed-kph": kph, "speed-exceeding": exceed, "speed-max": maxspeed});
});
});
on("sheet:opened change:vehicle-skill change:gunnery change:drone_mode change:pilot", function() {
getAttrs(["gunnery", "pilot", "drone_mode", "vehicle-skill"], function(myval) {
var mygunnery=myval["gunnery"];
var myskill=myval["vehicle-skill"];
if ( myval["drone_mode"] == "secondary" ) {
mygunnery=myval["pilot"];
myskill=myval["pilot"];
}
console.log('setting weapon skill to gunnery');
setAttrs({"weaponskill": mygunnery, "vehicle-skill-final": myskill});
});
});
on("sheet:opened change:rcdeck-intrusion-mods change:ewarfare", function () {
getAttrs(["rcdeck-intrusion-mods", "ewarfare"], function (myval) {
let myfinal=parseInt(myval["rcdeck-intrusion-mods"]) + parseInt(myval["ewarfare"]);
setAttrs({"rcdeck-intrusion-factor": myfinal});
});
});
on("change:sensor-los", function(){
getAttrs(["sensor-los"], function (myval) {
var st=0;
switch (myval["sensor-los"]) {
case "direct":
var st=-2;
var gt=-3;
break;
case "interupted":
var st=0;
var gt=0;
break;
}
setAttrs({"sensor-test-los": st, "gunnery-test-los": gt});
});
});
on("change:vehicle-type", function(){
getAttrs(["vehicle-type"], function (myval) {
var vp=0;
if ( myval["vehicle-type"] == "Car/Pickup Truck" ) vp=0 ;
if ( myval["vehicle-type"] == "Fighter Jet" ) vp=20 ;
if ( myval["vehicle-type"] == "Heavy Truck" ) vp=-5 ;
if ( myval["vehicle-type"] == "Helicopter" ) vp=5 ;
if ( myval["vehicle-type"] == "Hovercraft" ) vp=2 ;
if ( myval["vehicle-type"] == "HSCT/Suborbital" ) vp=-15 ;
if ( myval["vehicle-type"] == "Large Airplane" ) vp=-5 ;
if ( myval["vehicle-type"] == "LAV/T-bird" ) vp=10 ;
if ( myval["vehicle-type"] == "Limousine/Light Truck/Van" ) vp=-3 ;
if ( myval["vehicle-type"] == "LTA/Zeppelin" ) vp=-10 ;
if ( myval["vehicle-type"] == "Motorcycle" ) vp=5 ;
if ( myval["vehicle-type"] == "Racing Boat" ) vp=5 ;
if ( myval["vehicle-type"] == "Semiballistic" ) vp=-25 ;
if ( myval["vehicle-type"] == "Small Airplane" ) vp=0;
if ( myval["vehicle-type"] == "Small Motorboat" ) vp=0 ;
if ( myval["vehicle-type"] == "Sports Car" ) vp=3 ;
if ( myval["vehicle-type"] == "Tracked Vehicle" ) vp=-3 ;
if ( myval["vehicle-type"] == "Tractor Trailer" ) vp=-7 ;
if ( myval["vehicle-type"] == "Train/Monorail" ) vp=-10 ;
if ( myval["vehicle-type"] == "Ultra-light Aircraft" ) vp=10 ;
if ( myval["vehicle-type"] == "Yacht" ) vp=-10 ;
setAttrs({"vehicle-points": vp});
});
});
on("sheet:opened change:vcr", function() {
getAttrs(["reaction", "vcr"], function(myval) {
let myr = parseInt(myval["reaction"]) + (2 * parseInt(myval["vcr"]));
let myi = 1 + parseInt(myval["vcr"]);
setAttrs({"vcr-reaction": myr, "vcr-initiative": myi});
});
});
on("sheet:opened change:vehicle-interface", function(){
getAttrs(["vehicle-interface"], function (myval) {
var react=0;
var init=0;
var action=0;
var dt=0;
const vi=myval["vehicle-interface"];
console.log(vi);
const interfaces={
none: { react: 0, init: 0, action: 0, dt: 0},
datajack: { react: 1, init: 0, action: 0, dt: 1 },
vcr: { react: "(@{vehicle-driver}vcr} * 2)", init: "@{vehicle-driver}vcr}", action: "(@{vehicle-driver}vcr} * 2)", dt: "@{vehicle-driver}vcr}" }
};
console.log('interfaces test: ' + interfaces[vi]["react"]);
switch (myval["vehicle-interface"]) {
case "none":
var react=0;
var init=0;
var action=0;
var dt=0;
break;
case "datajack":
var react=1;
var init=0;
var dt=1;
break;
case "vcr":
var react="(@{vehicle-driver}vcr} * 2)";
var init="@{vehicle-driver}vcr}";
var action="(@{vehicle-driver}vcr} * 2)";
var dt="@{vehicle-driver}vcr}";
break;
}
setAttrs({"vehicle-reactbonus":react, "vehicle-initbonus":init, "vehicle-actionbonus":action, "driving-test-interface": dt});
});
});
on("sheet:opened change:weather", function(){
getAttrs(["weather"], function (myval) {
var dt=0;
var st=0;
switch (myval["weather"]) {
case "Bad":
var dt=2;
var st=1;
break;
case "Terrible":
var dt=4;
var st=1;
break;
case "Windy":
var dt=2;
break;
case "Snow":
var dt=2;
var st=1;
break;
case "Rain":
var dt=2;
var st=1;
break;
case "Fog":
var dt=2;
var st=1;
break;
case "Smog":
var dt=2;
var st=1;
break;
case "Heavy Wind":
var dt=4;
break;
case "ThunderStorm":
var dt=4;
var st=1;
break;
}
setAttrs({"driving-test-weather": dt, "sensor-test-weather": st});
});
});
on("change:terrain", function(){
getAttrs(["terrain"], function (myval) {
var [dt, st, tp, ab, pos, ram, hide, relo, crash]=[0,0,0,0,0,0,0,0,0];
switch (myval["terrain"]) {
case "Open":
var dt=-1;
var tp=0;
var ab=-1;
var pos=-1;
var ram=-1;
var hide=4;
var relo=-3;
var crash=-1;
var mg=0;
break;
case "Normal":
var dt=0;
var tp=-2;
var ab=0;
var pos=0;
var ram=0;
var hide=2;
var relo=-1;
var crash=0;
var mg=0;
break;
case "Restricted":
var dt=1;
var tp=-4;
var ab=1;
var pos=1;
var ram=1;
var hide=0;
var relo=0;
var crash=2;
var mg=2;
break;
case "Tight":
var dt=3;
var st=1;
var tp=-10;
var ab=3;
var pos=3;
var ram=2;
var hide=-2;
var relo=3;
var crash=4;
var mg=3;
break;
}
setAttrs({"driving-test-terrain": dt, "sensor-test-terrain": st, "driving-ab-terrain": ab, "driving-position-terrain": pos, "driving-ram-terrain": ram, "driving-hide-terrain": hide, "driving-relocate-terrain": relo, "driving-crash-terrain": crash, "terrain-points": tp, "terrain-manual-gunnery": mg});
});
});
on("clicked:vehicleset", function(){
getAttrs(["vehicle-rapid-attributes"], function (myval) {
const [hand, speed, accel, body, armor, sig, auto, pilot, sensor, cargo, load] = myval["vehicle-rapid-attributes"].split(" ")
var [on, off] = hand.split("/");
if (off == null ) off =on;
setAttrs({"handling-street": on, "handling-offroad": off, "speed-rating": speed, "acceleration": accel, "body": body, "armor": armor, "signature": sig, "autonav": auto, "pilot": pilot, "sensors-rating": sensor, "cargo": cargo, "load": load });
console.log('on is ' + on + ' off is ' + off)
});
});
on("clicked:matrixsystemset", function(){
getAttrs(["matrixsystemset"], function (myval) {
setmatrixsystem(myval["matrixsystemset"]);
});
});
var setmatrixsystem = function (rating) {
console.log(rating);
atts=[];
const [mycode, myrating] = rating.split("-")
console.log('mycode:' + mycode + ' myrating ' + myrating);
let finalcode = mycode.toUpperCase()
const [system, access, control, index, files, slave ] = myrating.split("/")
atts["character_name"]=rating;
atts["matrixcode"]=finalcode;
atts["matrixsecurityrating"]=system;
atts["matrixcontrolrating"]=control;
atts["matrixindexrating"]=index;
atts["matrixfilesrating"]=files;
atts["matrixslaverating"]=slave;
console.log(atts);
setAttrs(atts);
};
on("sheet:opened", function(){
getAttrs(["first_time"], function(myval){
if (myval.first_time != "false") {
console.log('running firstime');
updatevisionmods("Human");
updateWoundPenalty();
updateStunPenalty();
updateVisionTNs();
updatepools();
updatePenalty("vehicle");
updatePenalty("rccommand");
updatePenalty("rcsystem");
updatePenalty("rcsimsense");
updatePenalty("matrix");
setupdefaults();
setattributelimits("Human")
setAttrs({first_time: "false"});
}
});
});
on("sheet:opened change:sorcery-spec-switch change:conjuring-spec-switch change:auraread-spec-switch change:sorcery change:conjuring change:aurareading", function()
{
getAttrs(["sorcery-spec-switch", "conjuring-spec-switch", "auraread-spec-switch", "sorcery", "conjuring", "aurareading"], function(myval) {
if ( parseInt(myval["sorcery-spec-switch"]) == 0 ) {
setAttrs({spellcasting: parseInt(myval.sorcery), spelldefense: parseInt(myval.sorcery),dispelling: parseInt(myval.sorcery),astralcombat: parseInt(myval.sorcery), ritualsorcery:parseInt(myval.sorcery)});
}
if ( parseInt(myval["conjuring-spec-switch"]) == 0 ) {
setAttrs({summoning: parseInt(myval.conjuring), banishing: parseInt(myval.conjuring),spiritcontrol: parseInt(myval.conjuring)});
}
if ( parseInt(myval["auraread-spec-switch"]) == 0 ) {
setAttrs({areadauras: parseInt(myval.aurareading),areadsignatures: parseInt(myval.aurareading),areadsorcery: parseInt(myval.aurareading),areadconjuring: parseInt(myval.aurareading)});
}
});
});
on("change:deck-spec-switch change:computer", function()
{
getAttrs(["deck-spec-switch", "computer"], function(myval) {
console.log(myval);
if ( parseInt(myval["deck-spec-switch"]) == 0 ) {
console.log('not specialized')
setAttrs({hardware: parseInt(myval.computer), decking: parseInt(myval.computer),programming: parseInt(myval.computer)});
}
});
});
on("change:metatype", function(){
getAttrs(["metatype"], function(myval){
console.log(myval.metatype)
updatevisionmods(myval.metatype);
setattributelimits(myval.metatype);
});
});
on("change:visionenhancement", function(){
getAttrs(["metatype", "visionenhancement"], function(myval){
console.log(myval.visionenhancement)
if (myval.visionenhancement == "None" ) {
var vision=(myval.metatype)
} else {
var vision=(myval.visionenhancement)
}
updatevisionmods(vision);
});
});
on("change:body change:body-mods", function(){
getAttrs([ "body","body-mods"], function(myval) {
let final_body = parseInt(myval.body) + parseInt(myval["body-mods"])
setAttrs({body_max: final_body, bodymax: final_body})
});
});
on("change:intelligence change:intelligence-mods", function(){
getAttrs([ "intelligence","intelligence-mods"], function(myval) {
let final_int = parseInt(myval.intelligence) + parseInt(myval["intelligence-mods"])
setAttrs({intelligence_max: final_int, intmax: final_int})
});
});
on("change:willpower change:willpower-mods", function(){
getAttrs([ "willpower","willpower-mods"], function(myval) {
let final_will = parseInt(myval.willpower) + parseInt(myval["willpower-mods"])
setAttrs({willpower_max: final_will, willmax: final_will})
});
});
on("change:charisma change:charisma-mods", function(){
getAttrs([ "charisma","charisma-mods"], function(myval) {
let final_char = parseInt(myval.charisma) + parseInt(myval["charisma-mods"])
setAttrs({charisma_max: final_char, charmax: final_char})
});
});
on("change:quickness change:quickness-mods", function(){
getAttrs([ "quickness","quickness-mods"], function(myval) {
let final_quickness = parseInt(myval.quickness) + parseInt(myval["quickness-mods"])
setAttrs({quickness_max: final_quickness, agilitymax: final_quickness})
});
});
on("change:strength change:strength-mods", function(){
getAttrs([ "strength","strength-mods"], function(myval) {
let final_str = parseInt(myval.strength) + parseInt(myval["strength-mods"])
setAttrs({strength_max: final_str, strmax: final_str})
});
});
on("change:meleereach change:metatype", function () {
getAttrs(["meleereach", "metatype"], function (myval) {
var meleemods=0;
if ( myval["metatype"] == "Troll" ) meleemods=1;
const meleemax=parseInt(myval["meleereach"]) + meleemods;
setAttrs({meleereach_max: meleemax});
});
});
on("change:repeating_rangedweapons:firemode", function(eventinfo){
getAttrs(["repeating_rangedweapons_firemode", "repeating_rangedweapons_name", "repeating_rangedweapons_targeting"], function(myval) {
const firemode=myval["repeating_rangedweapons_firemode"];
const weapon=myval["repeating_rangedweapons_name"];
const targeting=myval["repeating_rangedweapons_targeting"];
var myroll="/w gm &{template:info}{{character=@{character_name}}}{{type=Switched Weapon " + weapon + " to " + firemode + " firing mode }}";
if ( targeting == -2 ) myroll += "{{action=Free}}";
else myroll += "{{action=Simple}}";
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
});
on("change:repeating_rangedweapons:primary-ranged-equipped change:repeating_rangedweapons:secondary-ranged-equipped", function(eventinfo){
const myweapon=eventinfo.sourceAttribute
console.log(myweapon);
setatts=[];
var mybase=myweapon.split("_");
var myattr=mybase.pop();
const myrepeat=mybase.join('_');
const r1equipped=myrepeat.concat("_primary-ranged-equipped");
const r2equipped=myrepeat.concat("_secondary-ranged-equipped");
getatts=[myweapon, r1equipped, r2equipped, "rangedselected", "ranged2selected"]
getAttrs(getatts, function(myval) {
console.log('myatt ' + myattr);
console.log('values');
console.log(myval);
const lastused=myval["rangedselected"];
const lastused2=myval["ranged2selected"];
if (myval[myweapon] == "on") {
if ( myattr == "primary-ranged-equipped" ) {
console.log('in ranged1');
if ( myval[r2equipped] == "on" ) {
console.log('equipeed as secondary');
setatts[r2equipped]=0;
}
setatts["rangedselected"]=myweapon;
setatts[lastused]=0;
} else if ( myattr == "secondary-ranged-equipped" ) {
console.log('in ranged2');
if ( myval[r1equipped] == "on" ) {
console.log('equipeed as primary');
setatts[r1equipped]=0;
}
setatts["ranged2selected"]=myweapon;
setatts[lastused2]=0;
setatts["dualwield"]=2;
} else {
console.log('wrong event for ' + myattr);
}
console.log(setatts);
} else if ( myval[myweapon] == 0 ) {
console.log(' weapon unselected');
if (( myattr == "primary-ranged-equipped" ) && ( lastused == myweapon )) {
setatts["rangedselected"]="None";
} else if ( ( myattr == "secondary-ranged-equipped" ) && ( lastused2 == myweapon )) {
setatts["ranged2selected"]="None";
setatts["dualwield"]=0;
}
}
setAttrs(setatts);
});
});
on("change:repeating_meleeweapons:meleeequiped change:repeating_meleeweapons:2ndmeleeequiped change:unarmed-equipped change:weaponfocus-equipped", function(eventinfo){
const myweapon=eventinfo.sourceAttribute
console.log(myweapon);
setatts=[];
var getatts=["meleeselected", "melee2selected"]
if ( myweapon == "unarmed-equipped" ) {
console.log('defualt unarmed' );
getatts.push("unarmed-equipped");
getAttrs(getatts, function(myval) {
const ue = myval["unarmed-equipped"];
console.log('ue: ' + ue);
const m1 = myval["meleeselected"];
const m2 = myval["melee2selected"];
if ( ue == "on" ) {
if ( m1 != "unarmed-equipped" ) setatts[m1]=0;
if ( m2 != "unarmed-equipped" ) setatts[m2]=0;
setatts["meleeselected"]="unarmed-equipped";
setatts["melee2selected"]="unarmed-equipped";
setatts["meleereach"]=0;
setAttrs(setatts);
}
});
} else if ( myweapon == "weaponfocus-equipped" ) {
console.log('weaponfocus' );
getatts.push("weaponfocus-equipped");
getatts.push("weaponfocus-reach");
getAttrs(getatts, function(myval) {
const ue = myval["weaponfocus-equipped"];
console.log('ue: ' + ue);
const m1 = myval["meleeselected"];
const m2 = myval["melee2selected"];
if ( ue == "on" ) {
if ( m1 != "weaponfocus-equipped" ) setatts[m1]=0;
if ( m2 != "weaponfocus-equipped" ) setatts[m2]=0;
setatts["meleeselected"]="weaponfocus-equipped";
setatts["melee2selected"]="weaponfocus-equipped";
setatts["meleereach"]=myval["weaponfocus-reach"];
setAttrs(setatts);
}
});
} else {
var mybase=myweapon.split("_");
var myattr=mybase.pop();
const myrepeat=mybase.join('_');
const reach=myrepeat.concat("_reach");
const m1equipped=myrepeat.concat("_meleeequiped");
const m2equipped=myrepeat.concat("_2ndmeleeequiped");
getatts.push(myweapon, reach, m1equipped, m2equipped);
getAttrs(getatts, function(myval) {
console.log('myatt ' + myattr);
console.log('values');
console.log(myval);
const lastused=myval["meleeselected"];
const lastused2=myval["melee2selected"];
if (myval[myweapon] == "on") {
if ( myattr == "meleeequiped" ) {
console.log('in melee1');
if ( myval[m2equipped] == "on" ) {
console.log('equipeed as secondary');
setatts[m2equipped]=0;
}
setatts["meleeselected"]=myweapon;
setatts[lastused]=0;
setatts["meleereach"]=myval[reach];
} else if ( myattr == "2ndmeleeequiped" ) {
console.log('in melee2');
if ( myval[m1equipped] == "on" ) {
console.log('equipeed as primary');
setatts[m1equipped]=0;
}
setatts["melee2selected"]=myweapon;
setatts[lastused2]=0;
} else {
console.log('wrong event for ' + myattr);
}
console.log(setatts);
} else if ( myval[myweapon] == 0 ) {
console.log(' weapon unselected');
if (( myattr == "meleeequiped" ) && ( lastused == myweapon )) {
setatts["meleereach"]=0;
setatts["meleeselected"]="None";
} else if ( ( myattr == "2ndmeleeequiped" ) && ( lastused2 == myweapon )) {
setatts["melee2selected"]="None";
}
}
setAttrs(setatts);
});
}
});
on("change: change:repeating_meleeweapons:reach", function(eventinfo){
getAttrs(["repeating_meleeweapons_reach", "repeating_meleeweapons_meleeequiped"], function(myval) {
if ( myval.repeating_meleeweapons_meleeequiped == "on" ) {
setAttrs({meleereach: myval.repeating_meleeweapons_reach});
}
});
});
on("change:repeating_armor:equipped change:repeating_armor:ballistic change:repeating_armor:impact", function(eventinfo){
var sets={};
var ballistic=0;
var impact=0;
var armorval={"body-bal": [0], "body-im": [0], "helmet-bal": [0], "helmet-im": [0], "shield-bal": [0], "shield-im": [0], "ware-bal": [0], "ware-im": [0], "gyro-bal": [0], "gyro-im": [0]};
fields=["equipped", "ballistic", "impact", "slot"];
getSectionIDs("repeating_armor", idArray => {
var attrArray = idArray.reduce((m, id) => [ ...m, ...(fields.map(field => `repeating_armor_${id}_${field}`))], []);
attrArray.push("quickness_max");
getAttrs(attrArray, function(myval) {
console.log('myval');
console.log(myval);
console.log(idArray);
const myquick=parseInt(myval["quickness_max"]);
idArray.forEach(m => {
if (myval["repeating_armor_" + m + "_equipped"] == "on" ) {
let bal=myval["repeating_armor_" + m + "_slot"] + "-bal";
let imp=myval["repeating_armor_" + m + "_slot"] + "-im";
armorval[bal].push(parseInt(myval["repeating_armor_" + m + "_ballistic"]));
armorval[imp].push(parseInt(myval["repeating_armor_" + m + "_impact"]));
}
});
console.log(armorval);
let shield_bal=Math.max(...armorval["shield-bal"]);
let shield_im=Math.max(...armorval["shield-im"]);
let gyro_bal=Math.max(...armorval["gyro-bal"]);
let gyro_im=Math.max(...armorval["gyro-im"]);
let helmet_bal=Math.max(...armorval["helmet-bal"]);
let helmet_im=Math.max(...armorval["helmet-im"]);
let ware_bal= armorval["ware-bal"].reduce((a, b) => a + b, 0);
let ware_im= armorval["ware-im"].reduce((a, b) => a + b, 0);
armorval["body-bal"].sort();
armorval["body-im"].sort();
let body_bal = armorval["body-bal"].pop() + Math.floor( armorval["body-bal"].pop() / 2 );
let body_im = armorval["body-im"].pop() + Math.floor( armorval["body-im"].pop() / 2 );
ballistic= body_bal + shield_bal + helmet_bal;
impact= body_im + shield_im + helmet_im;
let ballover = ballistic - myquick;
let impactover = impact - myquick;
if ( ballover < 0 ) ballover=0;
if ( impactover < 0 ) impactover=0;
let combatpen= -1 * (Math.floor((ballover + impactover) / 2 ));
if ( gyro_bal > 0 ) sets["gyro-on"]=1;
else sets["gyro-on"]=0;
sets["ballistic"]=ballistic + ware_bal + gyro_bal;
sets["impact"]=impact + ware_im + gyro_bal;;
sets["armor-quickness-pen"]=ballover;
sets["armor-combatpool-pen"]=combatpen;
setAttrs(sets);
});
});
});
on("sheet:opened change:updateviztns change:cover change:move change:dualwield change:calledshot change:aim change:enemies change:friends change:meleetargets change:position change:misccombatmods change:stun_pen change:wound_pen change:manualgunneryTN", function() {
updateRangeTNs();
updateMeleeTNs();
});
on("change:gunnerymotion change:gunneryspeed change:gunnerymaneuver change:gunneryvehicledmg change:gunnerymount change:gunneryterrain change:gunnerytargettype", function() {
updateManualGunneryTNs();
});
on("sheet:opened change:perception change:strength change:magic change:deck-mpcp-final change:willpower change:intelligence change:quickness change:charisma change:body change:frametype change:reaction change:vcr", function() {
updatepools();
});
on("change:stun change:adeptpainres", function() {
updateStunPenalty();
});
on("change:wounds change:adeptpainres", function() {
updateWoundPenalty();
});
on("change:visionprofile change:visibility", function() {
updateVisionTNs();
});
on("change:matrix-damage change:rccommand-damage change:rcsimsense-damage change:rcsystem-damage change:vehicle-damage change:repeating_ic:ic-damage", function(eventinfo) {
let myattribute=""
console.log(eventinfo);
if ( eventinfo["sourceAttribute"].startsWith("repeating") ) {
console.log("found");
myattribute=eventinfo["sourceAttribute"].split("-").slice(0, -1).join('-');
} else {
console.log("not");
myattribute=eventinfo["sourceAttribute"].split("-")[0];
}
updatePenalty(myattribute);
});
on("change:sheettype", function(){
getAttrs(["sheettype"], function (myval) {
var myatts={};
const mysheet=myval["sheettype"];
if ((mysheet == "Vehicle") || (mysheet == "Drone")) {
myatts["sheettab"]="vehicle-attr-tab";
} else {
myatts["sheettab"]="character";
}
if ((mysheet == "Critter") || (mysheet == "Spirit")) myatts["gunneryswitch"]="hide";
if (mysheet == "Matrix") myatts["iconstatuscode"]=0;
setAttrs(myatts);
});
});
on("change:metatype change:quickness change:acceleration change:handling-street change:speed", function() {
console.log('setting running and walking rates');
getAttrs(["quickness_max", "metatype" ,"sheettype", "speed", "handling-street", "acceleration"], function (myval) {
console.log('sheet type is: ' + myval["sheettype"]);
if ( myval["sheettype"] == "Vehicle" ) {
console.log('sheet type again is: ' + myval["sheettype"]);
var mywalk = myval["acceleration"];
var myrun = Math.floor( parseInt(myval["speed"]) / parseInt(myval["handling-street"]));
} else {
var mywalk = parseInt(myval["quickness_max"])
if (myval["metatype"] == "Dwarf" ) {
var myrun = ( mywalk * 2 );
} else {
var myrun = ( mywalk * 3 );
}
}
setAttrs({walk: mywalk, run: myrun});
});
});
on("change:deck-dni change:intelligence_max change:reaction change:deck-asist change:deck-response change:deck-realityfilter", function() {
getAttrs(["deck-dni", "intelligence_max", "reaction", "deck-response", "deck-asist", "deck-realityfilter"], function (myval) {
var dnibonus=0;
var response=0;
var initiative=1;
if ((myval["deck-dni"] == "1") && (myval["deck-asist"]== "1")) {
dnibonus= myval["intelligence_max"] + 2;
} else if ((myval["deck-dni"] == "1") && (myval["deck-asist"]== "0")) {
dnibonus= myval["intelligence_max"];
} else {
dnibonus= myval["reaction"];
}
if (myval["deck-asist"] == "1" ) {
response=( dnibonus + (parseInt(myval["deck-response"]) *2 ) + ( parseInt(myval["deck-realityfilter"]) *2 ));
initiative +=(parseInt(myval["deck-response"]) + parseInt(myval["deck-realityfilter"]));
} else {
response=dnibonus;
}
console.log('reaction:' + response);
console.log('initiative:' + initiative);
setAttrs({"deck-reaction-final": response, "deck-initiative": initiative});
});
});
on("change:sorcery-defense change:spellpool-defense change:sorcery-used change:spellpool-used", function() {
getAttrs(["sorcery-defense", "spellpool", "sorcery", "spellpool-defense", "spellpool-used", "sorcery-used"], function (myval) {
atts=[];
console.log('updating defense dice');
var poolover=0;
var sorceryover=0;
let sorcery=parseInt(myval["sorcery"]);
let pool=parseInt(myval["spellpool"]);
let md=parseInt(myval["spellpool-defense"]);
let sd=parseInt(myval["sorcery-defense"]);
let mpu=parseInt(myval["spellpool-used"]);
let su=parseInt(myval["sorcery-used"]);
let sorcerytotal= sd + su;
let pooltotal= md + mpu;
if ( sorcerytotal > sorcery ) sorceryover=1;
if ( pooltotal > pool ) poolover=1;
atts["sorcery-over"]=sorceryover;
atts["spellpool-over"]=poolover;
atts["spelldefensedice"]=md + sd;
atts["sorcery-used-total"]=sd + su;
atts["spellpool-used-total"]=md + mpu;
console.log(atts);
setAttrs(atts);
});
});
on("sheet:opened change:deck-masking-final change:decksleaze-rating", function() {
getAttrs(["deck-masking-final", "decksleaze-rating"], function (myval) {
console.log(myval["deck-masking-final"]);
let mymask=parseInt(myval["deck-masking-final"]) || 0;
let mysleaze=parseInt(myval["decksleaze-rating"]) || 0;
let mydf = Math.ceil((mymask + mysleaze ) / 2);
setAttrs({"deck-detection-max": mydf});
});
});
on("sheet:opened change:reaction change:reaction-mods change:initiative-mods", function () {
getAttrs(["reaction", "reaction-mods", "initiative-mods", "initiative"], function (myval) {
myatts={};
myatts["reaction_max"]=parseInt(myval["reaction-mods"]) + parseInt(myval["reaction"]);
myatts["initiative_max"]=parseInt(myval["initiative-mods"]) + parseInt(myval["initiative"]);
setAttrs(myatts);
console.log(myatts);
});
});
console.log('loading explosive ranges');
const explosiveranges={
"Regular": { min: 0, short: "mystr * 3", "medium": "mystr * 5", long: "mystr * 10", extreme: "mystr * 20", scatter: 1, scatterredux: 2, skill: "@{throwing}" },
"Aerodynamic": { min:0, short: "mystr * 3", "medium": "mystr * 5", long: "mystr * 20", extreme: "mystr * 30", scatter: 2, scatterredux: 4, skill: "@{throwing}" },
"Launcher": { min: 5, short: 50, medium: 100, long: 150, extreme: 300, scatter: 3, scatterredux: 4, skill: "@{launchers}" },
"Other": { min:0, short: 0, medium: 0, long: 0, extreme: 0, scatter: 0, scatterredux: 0, skill: "@{throwing}" },
"O": { power: 10, damage: "S", blast: 1 },
"D": { power: 10, damage: "S", blast: 0.5 },
"C": { power: 12, damage: "M(stun)", blast: 1 }
};
on("change:strength_max", function() {
getSectionIDs("explosives", function(idarray) {
idarray.forEach((m, id) => {
var myrepeat="repeating_explosives_" + m;
console.log('myrepeat: ' + myrepeat);
updaeteexplosives(myrepeat);
});
});
});
on("change:hackingpool-icsuppress change:hackingpool-used change:hackingpool change:controlpool change:controlpool-used change:combatpool change:combatpool-used change:taskpool change:taskpool-used change:astralpool change:astralpool-used", function() {
getAttrs(["hackingpool-used", "hackingpool-icsuppress", "hackingpool", "controlpool", "controlpool-used", "combatpool", "combatpool-used", "taskpool", "taskpool-used", "astralpool", "astralpool-used"], function(myval) {
sets={"hackingpool-over": 0, "controlpool-over": 0, "combatpool-over": 0, "astralpool-over": 0, "taskpool-over": 0};
hackusedic=parseInt(myval["hackingpool-icsuppress"]);
hackused=parseInt(myval["hackingpool-used"]);
hackpool=parseInt(myval["hackingpool"]);
hackpoolfinal=hackused + hackusedic;
sets["hackingpool-used-total"]=hackpoolfinal;
controlused=parseInt(myval["controlpool-used"]);
controlpool=parseInt(myval["controlpool"]);
combatused=parseInt(myval["combatpool-used"]);
combatpool=parseInt(myval["combatpool"]);
taskused=parseInt(myval["taskpool-used"]);
taskpool=parseInt(myval["taskpool"]);
astralused=parseInt(myval["astralpool-used"]);
astralpool=parseInt(myval["astralpool"]);
console.log(myval);
console.log('cu: ' + combatused);
console.log('cp: ' + combatpool);
if ( taskused > taskpool ) sets["taskpool-over"]=1;
if ( astralused > astralpool ) sets["astralpool-over"]=1;
if ( combatused > combatpool ) sets["combatpool-over"]=1;
if ( controlused > controlpool ) sets["controlpool-over"]=1;
if ( hackpoolfinal > hackpool ) sets["hackingpool-over"]=1;
console.log(sets);
setAttrs(sets);
});
});
on("change:repeating_explosives:exptype", function(eventinfo){
console.log(eventinfo)
var mybase=eventinfo["sourceAttribute"].split("_");
var myattr=mybase.pop();
const myrepeat=mybase.join('_');
console.log('mybase: ' + mybase + ' repeat: ' + myrepeat) ;
updaeteexplosives(myrepeat);
})
var updaeteexplosives = function(repeatingattr) {
const exptype=repeatingattr.concat("_exptype");
var mygetatts=[exptype]
mygetatts.push("strength_max");
getAttrs(mygetatts, function(myval) {
console.log(myval);
console.log(exptype);
console.log(repeatingattr);
const mystr=parseInt(myval.strength_max)
const etype=myval[exptype].split(":")
console.log(etype)
var atts={};
/* strenght based calcs */
console.log('strenght is ' + mystr);
atts[repeatingattr.concat("_min")]=explosiveranges[etype[0]]["min"];
atts[repeatingattr.concat("_skill")]=explosiveranges[etype[0]]["skill"];
atts[repeatingattr.concat("_short")]=eval(explosiveranges[etype[0]]["short"]);
atts[repeatingattr.concat("_medium")]=eval(explosiveranges[etype[0]]["medium"]);
atts[repeatingattr.concat("_long")]=eval(explosiveranges[etype[0]]["long"]);
atts[repeatingattr.concat("_extreme")]=eval(explosiveranges[etype[0]]["extreme"]);
atts[repeatingattr.concat("_scatter")]=explosiveranges[etype[0]]["scatter"];
atts[repeatingattr.concat("_scatterredux")]=explosiveranges[etype[0]]["scatterredux"];
atts[repeatingattr.concat("_power")]=explosiveranges[etype[1]]["power"];
atts[repeatingattr.concat("_damage")]=explosiveranges[etype[1]]["damage"];
atts[repeatingattr.concat("_blast")]=explosiveranges[etype[1]]["blast"];
console.log('setting repeating explosive atts: ');
console.log(atts);
setAttrs(atts);
});
};
on("change:combatpool-mods change:armor-combatpool-pen change:combatpool-base change:spellpool-mods change:spellpool-base change:hackingpool-mods change:hackingpool-base change:controlpool-mods change:controlpool-base change:astralpool-mods change:astralpool-base change:gyro-on", function () {
sets={};
atts=["combatpool-mods", "combatpool-base", "armor-combatpool-pen","spellpool-mods", "spellpool-base", "hackingpool-mods", "hackingpool-base", "controlpool-mods", "controlpool-base", "astralpool-mods", "astralpool-base", "gyro-on"]
getAttrs(atts, function (myval) {
if ( myval["gyro-on"] == 1 ) sets["combatpool"] = Math.floor(( parseInt(myval["combatpool-mods"]) + parseInt(myval["combatpool-base"]) + parseInt(myval["armor-combatpool-pen"]) ) / 2);
else sets["combatpool"] = parseInt(myval["combatpool-mods"]) + parseInt(myval["combatpool-base"]) + parseInt(myval["armor-combatpool-pen"]);
sets["spellpool"] = parseInt(myval["spellpool-mods"]) + parseInt(myval["spellpool-base"]);
sets["hackingpool"] = parseInt(myval["hackingpool-mods"]) + parseInt(myval["hackingpool-base"]);
sets["controlpool"] = parseInt(myval["controlpool-mods"]) + parseInt(myval["controlpool-base"]);
sets["hackingpool"] = parseInt(myval["hackingpool-mods"]) + parseInt(myval["hackingpool-base"]);
sets["astralpool"] = parseInt(myval["astralpool-mods"]) + parseInt(myval["astralpool-base"]);
setAttrs(sets);
console.log(sets);
});
});
var updatepools = function() {
getAttrs(["strength_max","magic","deck-mpcp-final","perception", "willpower_max","intelligence_max", "quickness_max", "charisma_max", "body_max", "frametype", "reaction", "vcr", "sheettype"], function(myval) {
var myatts={}
var myvcr = parseInt(myval.vcr);
var myperception = parseInt(myval.perception) || 0;
var myreact = parseInt(myval.reaction);
var mymagic = parseInt(myval.magic);
var mympcp = parseInt(myval["deck-mpcp-final"]);
var myagil = parseInt(myval.quickness_max);
var mystr = parseInt(myval.strength_max);
var mywill = parseInt(myval.willpower_max);
var myint = parseInt(myval.intelligence_max);
var mychar = parseInt(myval.charisma_max);
var mybody = parseInt(myval.body_max);
myatts["combatpool-base"]= Math.floor((myagil + Math.max(myint,myperception) + mywill)/2);
if (myval.sheettype != "Spirit" ) myatts["reaction"] = Math.floor((myagil + myint)/2);
if (mymagic > 0 ) {
console.log("magic is not 0");
myatts["spellpool-base"] = Math.floor((mymagic + myint + mywill)/3);
myatts["astralpool-base"] = Math.floor( (mychar + mywill + myint) /2 );
myatts["astralreaction"]= ( 20 + myval.intelligence_max);
} else if (myval.sheettype == "Spirit" ) {
myatts["spellpool-base"] = 0;
myatts["astralpool-base"] = 0;
} else {
myatts["spellpool-base"] = 0;
myatts["astralpool-base"] = 0;
myatts["astralreaction"] = 0;
}
if ( mympcp > 0 ) {
myatts["hackingpool-base"] = Math.floor( (mympcp + myint) /3 );
} else {
myatts["hackingpool-base"] = 0;
}
if (myval.frametype == "Smart Frame") {
myatts["hackingpool-base"] = 0;
}
if (myvcr > 0) {
myatts["controlpool-base"] = myreact + ( 2 * myvcr);
} else {
myatts["controlpool-base"] = 0;
}
setAttrs(myatts);
});
};
var setupdefaults = function() {
setAttrs({sheettype: "Character", targetMove: -1, charisma_max: 1, strength_max: 1, willpower_max: 1, body_max: 1, quickness_max: 1, intelligence_max: 1, attr_rangedTN: 0, attr_meleeTN: 0, attr_misccombatmods: 0, signature: 4 })
};
var updatePenalty = function(attribute) {
console.log('calculating penalty for ' + attribute)
let myatt = attribute.concat("-damage");
let mypen = attribute.concat("-penalty");
getAttrs([myatt], function(myval) {
sets={};
console.log('dmg ' + myval[myatt]);
console.log('pen ' + mypen);
var penalty = 0;
var dmg = parseInt(myval[myatt]);
if ( dmg > 10) penalty = 4;
else if (dmg > 5) penalty = 3;
else if (dmg > 2) penalty = 2;
else if (dmg > 0) penalty = 1;
sets[mypen]=penalty;
console.log(sets);
setAttrs(sets);
});
};
var updateWoundPenalty = function () {
getAttrs(["wounds","adeptpainres"], function(v) {
var penalty = 0;
var wounds = parseInt(v.wounds);
var res = parseInt(v.adeptpainres);
if (wounds > res) {
if ( wounds > 10) penalty = 4;
else if (wounds > 5) penalty = 3;
else if (wounds > 2) penalty = 2;
else if (wounds > 0) penalty = 1;
}
setAttrs({"wound_pen": penalty});
});
};
var updateStunPenalty = function () {
getAttrs(["stun","adeptpainres"], function(v) {
var penalty = 0;
var stun = parseInt(v.stun);
var res = parseInt(v.adeptpainres);
if (stun > res) {
if (stun > 10 ) penalty = 100;
else if (stun > 5) penalty = 3;
else if (stun > 2) penalty = 2;
else if (stun > 0) penalty = 1;
}
setAttrs({"stun_pen": penalty});
});
};
console.log('loading racial maxes');
const racemaximum={
"Human": {B: 6, Q: 6, S: 6, C: 6, I: 6, W: 6, Bm: 9, Qm: 9, Sm: 9, Cm: 9, Im: 9, Wm: 9 },
"Elf": {B: 6, Q: 7, S: 6, C: 8, I: 6, W: 6, Bm: 9, Qm: 11, Sm: 9, Cm: 12, Im: 9, Wm: 9 },
"Dwarf": {B: 7, Q: 6, S: 8, C: 6, I: 6, W: 7, Bm: 11, Qm: 9, Sm: 12, Cm: 9, Im: 9, Wm: 11 },
"Ork": {B: 9, Q: 6, S: 8, C: 5, I: 5, W: 6, Bm: 14, Qm: 9, Sm: 12, Cm: 8, Im: 8, Wm: 9 },
"Troll": {B: 11, Q: 5, S: 10, C: 4, I: 4, W: 6, Bm: 17, Qm: 8, Sm: 15, Cm: 6, Im: 6, Wm: 9 },
};
var setattributelimits = function(metatype) {
console.log ("setting racial limits based on metatype")
var atts={};
atts["rbodymod"]=racemaximum[metatype]["B"];
atts["rbodymax"]=racemaximum[metatype]["Bm"];
atts["rquickmod"]=racemaximum[metatype]["Q"];
atts["rquickmax"]=racemaximum[metatype]["Qm"];
atts["rstrmod"]=racemaximum[metatype]["S"];
atts["rstrmax"]=racemaximum[metatype]["Sm"];
atts["rchamod"]=racemaximum[metatype]["C"];
atts["rchamax"]=racemaximum[metatype]["Cm"];
atts["rintmod"]=racemaximum[metatype]["I"];
atts["rintmax"]=racemaximum[metatype]["Im"];
atts["rwillmod"]=racemaximum[metatype]["W"];
atts["rwillmax"]=racemaximum[metatype]["Wm"];
setAttrs(atts);
};
var updateVisionTNs = function() {
getAttrs(["visibility","fulldark", "minlight", "partiallight", "glare", "mist", "lightsmoke", "fullsmoke", "thermalsmoke", "updateviztns"], function(myval) {
switch (myval.visibility) {
case "0":
var myvisibilityRangeTn=0;
break;
case "@{fulldark}":
var myvisibilityRangeTn=parseInt(myval.fulldark);
break;
case "@{partiallight}":
var myvisibilityRangeTn=parseInt(myval.partiallight);
break;
case "@{minlight}":
var myvisibilityRangeTn=parseInt(myval.minlight);
break;
case "@{glare}":
var myvisibilityRangeTn=parseInt(myval.glare);
break;
case "@{mist}":
var myvisibilityRangeTn=parseInt(myval.mist);
break;
case "@{lightsmoke}":
var myvisibilityRangeTn=parseInt(myval.lightsmoke);
break;
case "@{fullsmoke}":
var myvisibilityRangeTn=parseInt(myval.fullsmoke);
break;
case "@{thermalsmoke}":
var myvisibilityRangeTn=parseInt(myval.thermalsmoke);
break;
}
if ( myvisibilityRangeTn == 8) {
var myvisibilityMeleeTn = 8
} else {
var myvisibilityMeleeTn = Math.floor(myvisibilityRangeTn / 2)
}
if ( myval.updateviztns == "flip" ) {
var updateflag = "flop"
} else {
var updateflag = "flip"
}
console.log(myvisibilityRangeTn)
console.log(myvisibilityMeleeTn)
setAttrs({updateviztns:updateflag, rangedvizTN: myvisibilityRangeTn, meleevizTN: myvisibilityMeleeTn});
});
};
var updatevisionmods = function(myval) {
console.log ('updating vision')
console.log(myval)
if ( (myval) == "Elf" ) {
console.log("Setting Elf")
setAttrs({visionprofile: myval, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4});
} else if ( (myval) == "Ork" ) {
console.log("Setting Ork")
setAttrs({visionprofile: myval, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4});
} else if ( (myval) == "Dwarf" ) {
console.log("Setting Dwarf")
setAttrs({visionprofile: myval, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6});
} else if ( (myval) == "Troll" ) {
console.log("Setting Troll")
setAttrs({visionprofile: myval, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6});
} else if ((myval) == "Human" ) {
console.log("Setting Human")
setAttrs({visionprofile: myval, fulldark: 8, minlight: 6, partiallight: 2, glare: 2, mist: 2, lightsmoke: 4, fullsmoke: 6, thermalsmoke: 4});
} else if ( (myval) == "LowLight" ) {
console.log("Setting LowLight")
setAttrs({visionprofile: myval, fulldark: 8, minlight: 4, partiallight: 1, glare: 4, mist: 2, lightsmoke: 4, fullsmoke: 6, thermalsmoke: 4});
} else if ( (myval) == "Thermal" ) {
console.log("Setting Thermal")
setAttrs({visionprofile: myval, fulldark: 4, minlight: 4, partiallight: 2, glare: 4, mist: 0, lightsmoke: 0, fullsmoke: 1, thermalsmoke: 8});
}
};
var updateMeleeTNs = function() {
getAttrs(["rangedvizTN", "meleevizTN", "cover", "move", "dualwield", "calledshot", "aim", "enemies", "friends", "meleetargets", "position", "misccombatmods", "stun_pen","wound_pen"], function(myval) {
console.log("updateMeleeTN")
targetNumberMelee = parseInt(myval.calledshot) + parseInt(myval.meleevizTN) + parseInt(myval.enemies) - parseInt(myval.friends) + parseInt(myval.misccombatmods) + ( 2 * parseInt(myval.meleetargets) ) - parseInt(myval.position) + parseInt(myval.stun_pen) + parseInt(myval.wound_pen);
console.log(targetNumberMelee)
setAttrs({meleeTN: targetNumberMelee});
});
};
var updateRangeTNs = function() {
getAttrs(["rangedvizTN", "meleevizTN", "cover", "move", "dualwield", "calledshot", "aim", "enemies", "friends", "meleetargets", "position", "misccombatmods", "stun_pen","wound_pen", "manualgunneryTN" ], function(myval) {
console.log("updateRangeTN")
targetNumberRange = parseInt(myval.calledshot) + parseInt(myval.rangedvizTN) + parseInt(myval.cover) + parseInt(myval.dualwield) + (2 * parseInt(myval.enemies)) - parseInt(myval.aim) + parseInt(myval.misccombatmods) + parseInt(myval.stun_pen) + parseInt(myval.wound_pen) + parseInt(myval.manualgunneryTN);
switch (parseInt(myval.move)) {
case 0:
var mytargetMove=-1;
break;
case 1:
var mytargetMove=0;
break;
case 2:
var mytargetMove=0;
break;
case 4:
var mytargetMove=2;
break;
case 6:
var mytargetMove=2;
break;
}
console.log(targetNumberRange)
setAttrs({rangedTN: targetNumberRange, targetMove:mytargetMove });
});
};
var updateManualGunneryTNs = function() {
getAttrs(["gunnerymotion", "gunneryspeed", "gunnerymaneuver", "gunneryvehicledmg", "gunnerymount", "gunneryterrain", "gunnerytargettype" ], function(myval) {
console.log("updateGunneryTN")
targetNumberGunnery = parseInt(myval.gunnerymotion) + parseInt(myval.gunneryspeed) + parseInt(myval.gunnerymaneuver) + parseInt(myval.gunneryvehicledmg) + parseInt(myval.gunnerymount) + parseInt(myval.gunneryterrain) + parseInt(myval.gunnerytargettype)
console.log(targetNumberGunnery)
setAttrs({manualgunneryTN: targetNumberGunnery});
});
};
</script>
<script type="text/worker">
const spirits= {
"Watcher":
{B: "(F)", Q: "(F)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F)",
astral_init: "(F + 20)", init: 0, attackpower: "(F)", attackdmg: "L(stun)", reach: 0,
powers: ["Air Cover", "Alarm", "Attack Dog", "Bug", "Courier", "Irritant"]},
"Air Elemental":
{B: "( F - 2 )", Q: "(( F + 3)*4)", S: "( F - 3)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
astral_init: "(F + 20)", init: "(F + 12)", attackpower: 0, attackdmg: "L", reach: 0,
powers: ["Engulf", "Materialization", "Movement", "Noxious Breath", "Psychokinesis" ],
weaknesses: ["airtight seals", "Vulnerability (Earth)"] },
"Earth Elemental":
{ B: "( F + 4 )", Q: "((F - 2) * 2)", S: "( F + 4)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F+4)", attackdmg: "S", reach: 0,
powers: ["Engulf", "Materialization", "Movement"],
weaknesses: ["Vulnerability (Air)"] },
"Fire Elemental":
{B: "( F + 1 )", Q: "((F + 2) * 3)", S: "( F - 2)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
astral_init: "(F + 20 )", init: "(F + 11 )", attackpower: "(F-2)", attackdmg: "M", reach: 1,
powers: [ "Engulf", "Flame Aura", "Guard", "Materialization", "Innate Spell (Flamethrower)"],
weaknesses: ["Vulnerability (Water)"] },
"Water Elemental":
{B: "( F + 2 )", Q: "(F * 2)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
astral_init: "(F + 20 )", init: "(F + 11 )", attackpower: "(F)", attackdmg: "S(stun)", reach: 0,
powers: [ "Engulf", "Materialization", "Movement" ],
weaknesses: ["Vulnerability (Fire)"] },
"City Spirit": {
B: "( F + 1 )", Q: "((F + 2) * 3)", S: "(F - 2 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
astral_init: "(F + 20 )" , init: "(F + 11 )", attackpower: "(F - 2)", attackdmg: "M", reach: 0,
powers: ["Accident", "Concealment", "Confusion", "Fear", "Guard", "Materialization", "Search"]
},
"Field Spirit": {
B: "( F + 1 )", Q: "((F + 2) * 3)", S: "(F - 2 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
astral_init: "(F + 20 )", init: "(F + 11 )", attackpower: "(F - 2)", attackdmg: "M", reach: 0,
powers: [ "Accident", "Concealment", "Guard", "Materialization", "Search"]
},
"Hearth Spirit": {
B: "( F + 1 )", Q: "((F + 2) * 3)", S: "(F - 2 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
astral_init: "(F + 20 )", init: "(F + 11 )", attackpower: "(F - 2)", attackdmg: "M", reach: 0,
powers: [ "Accident", "Concealment", "Confusion", "Guard" ]
},
"Desert Spirit": {
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 0,
powers: [ "Concealment", "Guard", "Materialization", "Movement", "Search" ]
},
"Forest Spirit": {
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 0,
powers: ["Accident", "Concealment", "Confusion", "Fear", "Guard", "Materialization" ]
},
"Mountain Spirit": {
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 0,
powers: ["Accident", "Concealment", "Guard", "Materialization", "Movement", "Search"]
},
"Prairie Spirit": {
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 0,
powers: ["Accident", "Concealment", "Guard", "Materialization", "Movement", "Search"]
},
"Mist Spirit": {
B: "( F - 2 )", Q: "((F + 3) * 4)", S: "(F - 3 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
astral_init: "(F + 20 )", init: "(F + 12 )", attackpower: "(F - 3)", attackdmg: "M(stun)", reach: 0,
powers: [ "Accident", "Concealment", "Confusion", "Guard", "Materialization", "Movement" ]
},
"Storm Spirit": {
B: "( F - 2 )", Q: "((F + 3) * 4)", S: "(F - 3 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
astral_init: "(F + 20 )", init: "(F + 12 )", attackpower: "(F - 3)", attackdmg: "M(stun)", reach: 0,
powers: [ "Concealment", "Confusion", "Fear", "Materialization", "Innate Spell (Lightning Bolt)"]
},
"Wind Spirit": {
B: "( F - 2 )", Q: "((F + 3) * 4)", S: "(F - 3 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
astral_init: "(F + 20 )", init: "(F + 12 )", attackpower: 0, attackdmg: "L", reach: 0,
powers: [ "Accident", "Confusion", "Guard", "Materialization", "Movement", "Search"]
},
"Lake Spirit": {
B: "( F + 2 )", Q: "(F * 2)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 1)",
astral_init: "(F + 20 )", init: "(F + 9 )", attackpower: "(F)", attackdmg: "S(stun)", reach: 0,
powers: ["Accident", "Engulf", "Fear", "Guard", "Materialization", "Movement", "Search"]
},
"River Spirit": {
B: "( F + 2 )", Q: "(F * 2)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 1)",
astral_init: "(F + 20 )", init: "(F + 9 )", attackpower: "(F)", attackdmg: "S(stun)", reach: 0,
powers: ["Accident", "Concealment", "Engulf", "Fear", "Guard", "Materialization", "Movement", "Search"]
},
"Sea Spirit": {
B: "( F + 2 )", Q: "(F * 2)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 1)",
astral_init: "(F + 20 )", init: "(F + 9 )", attackpower: "(F)", attackdmg: "S(stun)", reach: 0,
powers: ["Accident", "Concealment", "Confusion", "Engulf", "Fear", "Guard", "Materialization", "Movement", "Search"]
},
"Gnome": {
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 1,
powers: ["Concealment", "Engulf", "Fear", "Guard", "Materialization", "Magical Guard"],
weaknesses: ["Vulnerability (Air)"]
},
"Manitous": {
B: "( F + 3 )", Q: "(F * 2)", S: "(F + 1 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F)",
astral_init: "(F + 20 )", init: "(F + 10 )", attackpower: "(F + 3)", attackdmg: "S", reach: 1,
powers: ["Accident", "Concealment", "Confusion", "Engulf", "Fear", "Guard", "Materialization", "Magical Guard"]
},
"Salamander": {
B: "( F + 1 )", Q: "(( F + 2) * 3)", S: "(F - 2 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
astral_init: "(F + 20 )", init: "(F + 10 )", attackpower: "(F - 2)", attackdmg: "M", reach: 0,
powers: [ "Engulf", "Flame Aura", "Immunity (Fire)", "Guard", "Materialization", "Innate Spell (Flamethrower)", "Magical Guard", "Psychokinesis"],
weaknesses: ["Vulnerability (Water)"]
},
"Sylphs": {
B: "( F - 2 )", Q: "(( F + 3) * 4)", S: "(F - 3 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
astral_init: "(F + 20 )", init: "(F + 12 )", attackpower: "(F - 3)", attackdmg: "M(stun)", reach: 0,
powers: ["Concealment", "Confusion", "Engulf", "Guard", "Materialization", "Magical Guard", "Movement", "Psychokinesis"],
weaknesses: ["Vulnerability (Earth)"]
},
"Ancestor": {
B: "( F + 2 )", Q: "(F * 3)", S: "(F + 1)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F)",
astral_init: "(F + 20 )" , init: "(F + 10 )", attackpower: "(F + 1)", attackdmg: "M(stun)", reach: 0,
powers: ["Accident", "Divination", "Guard", "Materialization", "Search"]
}
}
const spiritatts=[ "body", "quickness", "strength", "charisma", "willpower", "intelligence", "perception", "reaction", "initiative", "attacks", "force", "reach"];
on("change:spirit-type change:force", function() {
getAttrs(["spirit-type", "sheettype", "force"], function(myval) {
var atts=[];
const sheettype=myval["sheettype"];
const spirittype=myval["spirit-type"];
const F=parseInt(myval["force"]);
if (sheettype != "Spirit") {
console.log('not a spirit');
} else {
console.log('setting spirit attributes based on type and force');
if (spirittype == "Watcher") {
atts["initiative"]=0;
atts["initiative-mods"]=1;
} else {
atts["initiative"]=1;
atts["initiative-mods"]=0;
}
atts["body"]=eval(spirits[spirittype]["B"]);
atts["quickness"]=eval(spirits[spirittype]["Q"]);
atts["strength"]=eval(spirits[spirittype]["S"]);
atts["charisma"]=eval(spirits[spirittype]["C"]);
atts["intelligence"]=eval(spirits[spirittype]["I"]);
atts["perception"]=eval(spirits[spirittype]["I"]);
atts["willpower"]=eval(spirits[spirittype]["W"]);
atts["essence"]=eval(spirits[spirittype]["E"]);
atts["reaction"]=eval(spirits[spirittype]["R"]);
atts["spirit-initp"]=eval(spirits[spirittype]["init"]);
atts["astralreaction"]=eval(spirits[spirittype]["astral_init"]);
atts["attackpower"]=eval(spirits[spirittype]["attackpower"]);
atts["attackdamage"]=spirits[spirittype]["attackdmg"];
const powers=spirits[spirittype]["powers"];
getSectionIDs("critter-powers", function(idarray) {
idarray.forEach(id=>{
removeRepeatingRow("repeating_critter-powers_" + id);
});
});
getSectionIDs("critter-weaknesses", function(idarray) {
idarray.forEach(id=>{
removeRepeatingRow("repeating_critter-weaknesses_" + id);
});
});
if (spirits[spirittype]["weaknesses"]) {
const weaknesses=spirits[spirittype]["weaknesses"];
weaknesses.forEach(weak=>{
var newrowid = generateRowID();
atts["repeating_critter-weaknesses_" + newrowid + "_name" ] = weak;
});
};
if (spirits[spirittype]["powers"]) {
const powers=spirits[spirittype]["powers"];
powers.forEach(power=>{
var newrowid = generateRowID();
atts["repeating_critter-powers_" + newrowid + "_name" ] = power;
});
};
console.log(atts);
setAttrs(atts);
}
});
})
on("remove:repeating_foci change:repeating_foci", function(eventinfo) {
const attribs=["category", "force", "type"];
console.log(eventinfo);
mytrigger=eventinfo["triggerName"];
console.log('mytrigger ' + mytrigger);
atts=[];
if (mytrigger == "remove:repeating_foci" ) {
myrepeat=eventinfo["sourceAttribute"];
myattrib="remove";
} else {
mybase=eventinfo["sourceAttribute"].split("_");
myattrib=mybase.pop();
myrepeat=mybase.join('_');
}
if (myattrib == "remove" ) {
let cat = eventinfo["removedInfo"][myrepeat.concat("_category")];
let type = eventinfo["removedInfo"][myrepeat.concat("_type")];
if ( type == "Power Focus" ) atts["power-focus"]=0;
else if ( type == "Spirit Focus") atts[cat]=0;
else if ( type == "Expendable" ) atts["exp-" + cat]=0;
else if ( type == "Reusable" ) atts["reusable-" + cat]=0;
else return;
console.log(atts);
setAttrs(atts);
} else if (myattrib != "qty" ) {
gets=[];
gets.push(myrepeat.concat("_category"));
gets.push(myrepeat.concat("_force"));
gets.push(myrepeat.concat("_type"));
getAttrs(gets, function(myval) {
let cat=myval[myrepeat.concat("_category")];
let force=myval[myrepeat.concat("_force")];
let type=myval[myrepeat.concat("_type")];
if (type == "Power Focus") {
atts["power-focus"]=force
} else if ( type == "Spirit Focus" ) {
atts[cat]=force;
} else if ( type == "Expendable" ) {
if ( cat == "none" ) return;
var myatt="exp-" + cat;
atts[myatt]=force;
} else if ( type == "Reusable" ) {
if ( cat == "none" ) return;
var myatt="reusable-" + cat;
atts[myatt]=force;
} else {
console.log('skipping');
}
console.log(atts);
setAttrs(atts);
});
}
});
on("change:repeating_spells:range change:repeating_spells:spellcategory", function(myval) {
getAttrs(["repeating_spells_spellcategory", "repeating_spells_range"], function(myval) {
const spellcategory=myval["repeating_spells_spellcategory"];
const range=myval["repeating_spells_range"];
console.log(spellcategory)
console.log(range)
atts=[];
if ( spellcategory == "Elemental" ) {
atts["repeating_spells_target"]="@{target|Target|targetMove}";
console.log(atts);
setAttrs(atts);
}
});
});
</script>
<rolltemplate class="sheet-rolltemplate-spell">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader">{{myname}}: {{spellname}} {{castforce}} vs. {{targetofspell}}</div>
<div class="sheet-rtrow"><b>Rolling:</b> {{computed::rolldice}}d6 vs. {{targetnumber}} </div>
{{#spelldamage}}<div class="sheet-rtrow"><b>Damage:</b> {{computed::spelldamage}} </div>{{/spelldamage}}
{{#sorcerydice}}<div class="sheet-rtrow"><b>Sorcery Dice Used:</b> {{sorcerydice}}</div>{{/sorcerydice}}
{{#spellpool}}<div class="sheet-rtrow"><b>Spell Pool Used:</b> {{spellpool}}</div>{{/spellpool}}
{{#cast}}<div class="sheet-rtrow"><b>Casting Test:</b> {{computed::cast}}</div>{{/cast}}
{{#casttest}}<div class="sheet-rtrow"><b>Casting Test:</b> {{casttest}}</div>{{/casttest}}
{{#draintest}}<div class="sheet-rtrow"><b>Drain Test:</b> {{draintest}} vs. {{computed::draindamage}}</div>
{{/draintest}}
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
{{#resist}}<div class="sheet-rtrow"><b>{{targetofspell}}:</b> {{resist}}</div>{{/resist}}
{{#spelldefense}}<div class="sheet-rtrow">{{spelldefense}} Target of <b>{{castforce}}</b> </div>
{{/spelldefense}}
{{#resistspell}}<div class="sheet-rtrow">{{resistspell}} Target of {{castforce}}</div>{{/resistspell}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-adept">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader">{{myname}}: {{spellname}} {{powerlevel}} vs. {{targetofspell}}</div>
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
<div class="sheet-rtrow"><span>Spell Pool Used: </span>{{spellpool}}</div>
<div class="sheet-rtrow"><span>Casting Test: </span>{{casttest}}</div>
<div class="sheet-rtrow"><span>Drain Test: </span>{{draintest}} vs. {{computed::draindamage}}</div>
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-attack">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader"><b>{{myname}}:</b> {{weaponname}} vs. {{target}}</div>
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
<div class="sheet-rtrow"><b>Attack Test:</b> {{attacktest}}</div>
{{#combatpool}}<div class="sheet-rtrow"><b>Combat Pool Used:</b> {{combatpool}} </div>{{/combatpool}}
{{#controlpool}}<div class="sheet-rtrow"><b>Control Pool Used:</b> {{controlpool}} </div>{{/controlpool}}
<div class="sheet-rtrow"><b>Weapon Damage:</b> {{computed::weaponpower}} <b>{{weapondamage}}</div>
{{#rounds}}<div class="sheet-rtrow">{{ammotype}} <b>Rounds:</b> {{computed::rounds}}</div>{{/rounds}}
{{#weaponfocus}}<div class="sheet-rtrow"><b>Weapon Focus:</b> {{weaponfocus}} {{focusforce}}</div>
{{/weaponfocus}}
{{#charreach}}<div class="sheet-rtrow"><b>{{myname}} Reach:</b> {{charreach}}</div>{{/charreach}}
{{#targetreach}}<div class="sheet-rtrow"><b>{{target}} Reach:</b> {{targetreach}}</div>{{/targetreach}}
{{#default}}<div class="sheet-rtrow">{{default}}</div>{{/default}}
{{#senddata}}<div class="sheet-rtrow"><b>{{target}}:</b> [Dodge](~selected|dodge||{{computed::senddata}}) [Resist](~selected|resistroll||{{computed::senddata}})</div>{{/senddata}}
<div class="sheet-rtrow"><b>Mods:</b>{{#rangedmods}}Ranged: {{rangedmods}}
{{/rangedmods}}{{#meleemods}} Melee: {{meleemods}}
{{/meleemods}}{{#armorpen}} Armor Penalty: {{armorpen}}{{/armorpen}}
{{#gyropen}} Gyro Penalty: {{gyropen}}
{{/gyropen}} {{#movemods}} Move Penalty: {{movemods}}{{/movemods}}
{{#targetmods}} aim assit {{targetmods}}{{/targetmods}}
{{#reachmod}}{{computed::reachmod}}{{/reachmod}}
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-explosive">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader"><b>{{myname}}:</b> {{weaponname}} vs. {{target}}</div>
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
<div class="sheet-rtrow"><b>Attack Test:</b> {{attacktest}}</div>
{{#combatpool}}<div class="sheet-rtrow"><b>Combat Pool Used:</b> {{combatpool}} </div>{{/combatpool}}
{{#controlpool}}<div class="sheet-rtrow"><b>Control Pool Used:</b> {{controlpool}} </div>{{/controlpool}}
<div class="sheet-rtrow"><b>Weapon Damage:</b> {{weaponpower}}{{weapondamage}}</div>
<div class="sheet-rtrow"><b>Scatter:</b> {{computed::scatter}}m in {{scatdirnumber}} Direction</div>
{{#scatdir}}[img]({{scatdir}}){{/scatdir}}
<div class="sheet-rtrow">Power reduces by 1 each {{blastradius}}m away</div>
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
{{#resist}}<div class="sheet-rtrow"><b>{{target}}:</b> {{resist}}</div>{{/resist}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-item">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader">{{myname}} uses {{item}}</div>
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
<div class="sheet-rtrow"><span>Item Test: </span>{{result}}</div>
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
{{#poolname}}<div class="sheet-rtrow">{{poolname}}: {{pooldice}}</div>{{/poolname}}
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#dicepool}}<div class="sheet-rtrow">Dice Pool Used: {{dicepool}}</div>{{/dicepool}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-skill">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader">{{myname}}: {{skill}}</div>
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
<div class="sheet-rtrow"><span>Skill Test: </span>{{result}}</div>
{{#poolname}}<div class="sheet-rtrow">{{poolname}}: {{pooldice}}</div>{{/poolname}}
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#dicepool}}<div class="sheet-rtrow">Dice Pool Used: {{dicepool}}</div>{{/dicepool}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-attribute">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader">{{character}}: {{Attribute}}</div>
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
<div class="sheet-rtrow"><span>Success Test: </span>{{result}}</div>
<div class="sheet-rtrow"><span>Target Number: </span>{{targetnumber}}</div>
<div class="sheet-rtrow"><span>Combat Pool: </span>{{combatpool}}</div>
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-init">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader">{{character}} {{type}}</div>
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
{{#roll}}<div class="sheet-rtrow"><b>Roll:</b> {{roll}}</div>{{/roll}}
<div class="rtrow">All pools refreshed</div>
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
{{#rollGreater() roll 10}}<div></div> {{character}} has qualified for multiple combat phases!
</div> {{/rollGreater() roll 10}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-resistance">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader">{{character}}: {{Power}}{{wpndmg}} vs {{name}} {{armorvalue}}</div>
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
<div class="sheet-rtrow"><b>Result:</b> {{roll}} </div>
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
{{#finaldmg}}<div class="rtrow-small">Attack:{{attacktest}} - (resist:{{roll}} + dodge:{{dodge}})</div>
<div class="rtrow"><b>Final Damage:</b> staged to <b>{{computed::finaldmg}}</b></div>{{/finaldmg}}
<div class="sheet-rtrow">Combat Pool Used: {{combatpool}}</div>
{{#senddata}}<div class="sheet-rtrow"><b>{{character}}:</b> [Resist](~selected|resistroll||{{computed::senddata}})</div>{{/senddata}}
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-matrix">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader"><b>{{myname}} vs. {{target}}</b></div>
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{computed::targetnumber}} </div>
{{#hackingpool}}<div class="rtrow"><b>Hacking Pool Dice:</b> {{hackingpool}}</div>{{/hackingpool}}
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
<div class="sheet-rtrow"><b>{{action}}:</b> {{computed::roll}}</div>
{{#senddata}}<div class="sheet-rtrow"><b>{{target}}:</b> [Resist](~selected|matrixresist||{{computed::senddata}})</div>{{/senddata}}
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
{{#detect}}<div class="sheet-rtrow"><b>{{target}}:</b> {{detect}}</div>{{/detect}}
{{#clickme}}<div class="sheet-rtrow">{{clickme}}</div>{{/clickme}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-silent">
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-vehicle">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader"><b>{{character}}</b>: {{target}}</div>
<div class="sheet-rtrow"><span><b>{{type}}:</b> </span>{{computed::roll}}</div>
{{#controlpool}}<div class="sheet-rtrow"><b>Control Pool Dice Used:</b> {{controlpool}}</div>{{/controlpool}}
{{#targetnumber}}<div class="sheet-rtrow"><b>Target Number</b> {{computed::targetnumber}}</div>{{/targetnumber}}
{{#description}}<div class="sheet-rtrow">{{description}}</div>{{/description}}
{{#charscore}}<div class="sheet-rtrow"><b>{{character}} score:</b> {{charscore}}</div>{{/charscore}}
{{#targetscore}}<div class="sheet-rtrow"><b>{{target}} score:</b> {{targetscore}}</div>{{/targetscore}}
{{#delta}}<div class="sheet-rtrow">Maneuever Score Difference: {{delta}}</div>{{/delta}}
{{#ecd}}<div class="sheet-rtrow">ECD Test: {{ecd}}</div>{{/ecd}}
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
{{#position}}<div class="sheet-rtrow"><b>New Position Score:</b> {{computed::position}}</div>{{/position}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-info">
<div class="sheet-rtcontainer">
<div class="sheet-rtheader">{{character}}: Info</div>
<div class="sheet-rtrow">Action: {{action}}</div>
{{#type}}<div class="sheet-rtrow">Type: {{type}}</div>{{/type}}
{{#info1}}<div class="sheet-rtrow">{{info1}}</div>{{/info1}}
{{#info2}}<div class="sheet-rtrow">{{info2}}</div>{{/info2}}
</div>
</rolltemplate>