Files
roll20-character-sheets/Shadowrun3e/shadowrun3e.html
T
2021-08-14 13:39:12 -04:00

7057 lines
362 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">
Name:
<input class="text-mid" type="text" name="attr_character_name" disabled="true">
<div></div>
Sheet Type:
<div class="text-mid"><select name="attr_sheettype" style="Width:100px">
<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 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>MetaType: <select name="attr_metatype" style="width:100px">
<option selected>Human</option>
<option>Dwarf</option>
<option>Elf</option>
<option>Ork</option>
<option>Troll</option>
</select></div>
<div>Age: <input type="number" name="attr_age"></div>
<div>Height: <input type='number' name="attr_height"></div>
<div>Weight: <input type='number' name="attr_weight" step='0.01'></div>
</div>
<div class="spirittype-info">
<div for="spirit-type">Spirit Type:
<select id="spirit-type" name="attr_spirit-type" style="width:100px">
<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>
<div>Force: <input type="number" name="attr_force"></div>
</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_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-control' value="?{Control Pool Dice|0}" />
<input type='hidden' name='attr_get-control' value="?{Control Pool Dice}" />
<input type='hidden' name='attr_ask-combat' value="?{Combat Pool Dice|0}" />
<input type='hidden' name='attr_get-combat' value="?{Combat Pool Dice}" />
<input type='hidden' name='attr_ask-hack' value="?{Hacking Pool Dice|0}" />
<input type='hidden' name='attr_get-hack' value="?{Hacking Pool Dice}" />
<input type='hidden' name='attr_ask-spell' value="?{Magic Pool Dice|0}" />
<input type='hidden' name='attr_get-spell' value="?{Magic Pool Dice}" />
<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_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>
</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>
<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>
<div class="SRH3">Dice Pools</div>
<div> Combat Pool:<span class="dicepool" name="attr_combatpool"> </span> </div>
<div> Spell Pool:<span class="dicepool" type="number" name="attr_magicpool"></span> </div>
<div> Hacking Pool:<span class="dicepool" type="number" name="attr_hackingpool-max"></span> </div>
<div> Control Pool:<span class="dicepool" type="number" name="attr_controlpool"></span> </div>
<div> Astral Pool:<span class="dicepool" type="number" name="attr_astralpool"></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-center">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-center">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-center">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-center">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-center">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-center">B: <span name="attr_body_max"></span></div>
<div class="text-mid-center">Q: <span name="attr_quickness_max"></span></div>
<div class="text-mid-center">S: <span name="attr_strength_max"></span></div>
<div class="text-mid-center">C: <span name="attr_charisma_max"></span></div>
<div class="text-mid-center">I: <span name="attr_intelligence_max"></span></div>
<div class="text-mid-center">W: <span name="attr_willpower_max"></span></div>
<div class="text-mid-center">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-center">Ranged Modifiers: <span name="attr_rangedTN"></span></div>
<div class="text-mid-center">Melee Modifiers: <span name="attr_meleeTN"></span></div>
<div class="text-mid-center">Misc. Modifiers: <span name="attr_misccombatmods" value=0></span></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">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" style="width:120px">
<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" style="width:90px">
<option selected>None</option>
<option>LowLight</option>
<option>Thermal</option>
</select></div>
<div><select name="attr_cover" style="width:70px">
<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" style="width:100px" title="Movement actions taken">
<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" style="width:100px" title="Position of you vs. target in Melee">
<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" style="width:100px" title="motion relative to target">
<option value=0 selected>None</option>
<option value=-1>Towards</option>
<option value=1>Away</option>
</select></div>
<div><select name="attr_gunneryspeed" style="width:100px" title="speed relative to 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>
</select></div>
<div><select name="attr_gunnerymaneuver" style="width:100px" 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><select name="attr_gunneryvehicledmg" style="width:100px" title="Vehicle Damaged Modifiers">
<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" style="width:100px" title="Is weapon mounted?">
<option value=2>Unmounted</option>
<option value=0 selected>mounted</option>
</select></div>
<div><select name="attr_gunneryterrain" style="width:100px" title="Moving through terrain">
<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" style="width:100px" 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>
</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">
<input type="number" name="attr_attackpower" value=0 min=0 style="width:35px;" />
<div class="flex-center"><select name="attr_attackdamage" style="width: 70px;text-align: center;font-size:10px">
<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></div>
<button type="action" name="act_melee" id="critterattack" class="d6-button" title="Attack Offensive">L</button>
</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>
<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=1>
/
<input type="number" name="attr_karma_pool_max" value=1>
</div>
<header class="table-item-left">Good Karma:</header>
<div class="table-item"><input type="number" name="attr_good_karma" 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-right"></header>
</div>
<fieldset class="repeating_skills">
<div class="skills-table">
<div class="table-item-left"><input type="text" name="attr_skillname"></div>
<div class="table-item"><input type="number" name="attr_skillrating" min=1 value=1></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' class='astralattributes-switch' name='attr_astralattributesswitch' value="show" />
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="spells-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>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 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>
<br>
<br>
<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-center"><button class="attack-dice" id="astralattack" type="action" name="act_melee" title="Astral Combat"></button></div>
<div>Weapon Focus:</div>
<div><input class="myweapontxt" type="text" name="attr_weaponfocus-name"></div>
<div></div>
<div>Force: </div><div><input type="number" name="attr_weaponfocus-force" value=0></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="aspect"></div>
<div><b>Aspected Mage<input type="radio" name="attr_magic-type" value="shaman"></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>
<div><input type="number" name="attr_sorcery" value=0></div>
<div><button class="d6-button" type="action" name="act_skilltest" id="sorcery spell" title="Spell Casting Test">L</button></div>
<div class="skillspec">Specialize</div>
<div class="text-center">
<input type="checkbox" name="attr_sorcery-spec-switch" class="sorcery-spec-switch" value=1/>
</div>
</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-dice" type="action" name="act_skilltest" id="conjuring spell" title="Spirit Conjuring/Control/Banishing Test"></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-center">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-center">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-center">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-center">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-center">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-center">Creative Skill:</header>
<div><input type="text" name="attr_centeringskillname" style="width:130px"></div>
</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>Illusion</option>
<option>Elemental</option>
<option>Controll</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} + 4 + @{rangedTN} + @{move})">Elemental (single target)</option>
<option value="4 + @{rangedTN})">AOE Elemental</option>
<option value="?{Target Number|4}">Target Number</option>
<option value="@{target|Target|force}">Force</option>
<option value="4">AOE</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">
<input type='hidden' class='magictype' name='attr_magic-type'/>
<div class="foci-table">
<header class="table-top-left">Name</header>
<header class="table-top-mid">Force</header>
<div class="table-item-left">Power Foci</div>
<div class="table-item"><input type="number" name="attr_powerfoci" value=0></div>
</div>
<div class="mage-only-foci">
<div class="table-item-left">Air Elemental</div>
<div class="table-item"><input type="number" name="attr_airfoci" value=0></div>
<div class="table-item-left">Water Elemental</div>
<div class="table-item"><input type="number" name="attr_waterfoci" value=0></div>
<div class="table-item-left">Earth Elemental</div>
<div class="table-item"><input type="number" name="attr_earthfoci" value=0></div>
<div class="table-item-left">Fire Elemental</div>
<div class="table-item"><input type="number" name="attr_firefoci" value=0></div>
</div>
<div class="shaman-only-foci">
<div class="table-item-left">City Spirit</div>
<div class="table-item"><input type="number" name="attr_citifoci" value=0></div>
<div class="table-item-left">Field Spirit</div>
<div class="table-item"><input type="number" name="attr_fieldfoci" value=0></div>
<div class="table-item-left">Hearth Spirit</div>
<div class="table-item"><input type="number" name="attr_hearthfoci" value=0></div>
<div></div><div></div><div></div><div></div>
<div class="table-item-left">Desert Spirit</div>
<div class="table-item"><input type="number" name="attr_desertfoci" value=0></div>
<div class="table-item-left">Forest Spirit</div>
<div class="table-item"><input type="number" name="attr_forestfoci" value=0></div>
<div class="table-item-left">Mountain Spirit</div>
<div class="table-item"><input type="number" name="attr_mountainfoci" value=0></div>
<div class="table-item-left">Prairie Spirit</div>
<div class="table-item"><input type="number" name="attr_prairiefoci" value=0></div>
<div></div><div></div>
<div class="table-item-left">Mist Spirit</div>
<div class="table-item"><input type="number" name="attr_mistfoci" value=0></div>
<div class="table-item-left">Storm Spirit</div>
<div class="table-item"><input type="number" name="attr_stormfoci" value=0></div>
<div class="table-item-left">Wind Spirit</div>
<div class="table-item"><input type="number" name="attr_windfoci" value=0></div>
<div></div><div></div><div></div><div></div>
<div class="table-item-left">Lake Spirit</div>
<div class="table-item"><input type="number" name="attr_lakefoci" value=0></div>
<div class="table-item-left">River Spirit</div>
<div class="table-item"><input type="number" name="attr_riverfoci" value=0></div>
<div class="table-item-left">Sea Spirit</div>
<div class="table-item"><input type="number" name="attr_seafoci" value=0></div>
<div></div><div></div><div></div><div></div>
<div class="table-item-left">Gnome</div>
<div class="table-item"><input type="number" name="attr_gnomefoci" value=0></div>
<div class="table-item-left">Manitous</div>
<div class="table-item"><input type="number" name="attr_manitousfoci" value=0></div>
<div class="table-item-left">Salamander</div>
<div class="table-item"><input type="number" name="attr_salamanderfoci" value=0></div>
<div class="table-item-left">Sylphs</div>
<div class="table-item"><input type="number" name="attr_sylphfoci" value=0></div>
<div class="table-item-left">Ancestor</div>
<div class="table-item"><input type="number" name="attr_ancestorfoci" value=0></div>
</div>
<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 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 class="text-mid">Alert Status</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>
<div><select name="attr_matrix-iconstatus" style="width: 85px;">
<option SELECTED>Intruder</option>
<option>Legitimate</option>
</select></div>
<div>
<select name="attr_deck-systemrating" style="width: 85px;">
<option SELECTED>Blue</option>
<option>Green</option>
<option>Orange</option>
<option>Red</option>
</select>
</div>
<div><select name="attr_deck-alertstatus" style="width: 85px;">
<option value=0 SELECTED>None</option>
<option value=4>Passive</option>
<option value=5>Active</option>
</select>
</div>
</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 class="text-mid">Alert Status</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>
<div><select name="attr_matrix-iconstatus" style="width: 85px;">
<option SELECTED>Intruder</option>
<option>Legitimate</option>
</select></div>
<div>
<select name="attr_deck-systemrating" style="width: 85px;">
<option SELECTED>Blue</option>
<option>Green</option>
<option>Orange</option>
<option>Red</option>
</select>
</div>
<div><select name="attr_deck-alertstatus" style="width: 85px;">
<option value=0 SELECTED>None</option>
<option value=4>Passive</option>
<option value=5>Active</option>
</select>
</div>
</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>
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>HackPool</div>
<div></div>
<div><span name="attr_hackingpool-max"></span></div>
<div><input type="number" name="attr_hackingpool-mods" value=0></div>
<div><span name="attr_hackingpool-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>
<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>
<div><input type="number" name="attr_computer" value=0>
<button class="d6-dice" type="action" name="act_skilltest" id="computer hacking"></button>
</div>
<div>specialize</div>
<div>
<input type="checkbox" class="deck-spec-switch" name="attr_deck-spec-switch" value=1 >
</div>
</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>
<br>
<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-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-storagemem" 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-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>
<div></div>
</div>
<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">Test</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" value=1>
</div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Sleaze Utility Test" id="decksleaze-rating">L</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" value=1>
</div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Tracking Utility Test" id="decktrack-rating">L</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">Test</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" value=1>
</div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Armor Utility Test" id="deckarmor-rating">L</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"style="text-align: center;"><input type="checkbox" name="attr_deckcloak-loaded" value=1>
</div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Cloak Utility Test" id="deckcloak-rating">L</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" style="text-align: center;"><input type="checkbox" name="attr_decklockon-loaded" value=1>
</div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Lock-On Utility Test" id="decklockon-rating">L</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" style="text-align: center;"><input type="checkbox" name="attr_deckmedic-loaded" value=1>
</div>
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Medic Utility Test" id="deckmedic-rating">L</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" style="width:85px;"></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" style="text-align: center;"><input type="checkbox" name="attr_loaded" value=1>
</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"><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">Execute</header>
<header class="table-top-mid">Test</header>
<header class="table-top-right">Notes</header>
<div class="table-item-left"><select name="attr_deckattacklevel" style="width: 100px;">
<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" style="text-align: center;"><input type="checkbox" name="attr_deckattack-loaded" value=1></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">L</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" style="text-align: center;"><input type="checkbox" name="attr_deckblackhammer-loaded" value=1></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">L</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" style="text-align: center;"><input type="checkbox" name="attr_deckkilljoy-loaded" value=1></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">L</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" style="text-align: center;"><input type="checkbox" name="attr_deckslow-loaded" value=1></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">L</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" style="width:85px;"></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" style="text-align: center;"><input type="checkbox" name="attr_loaded" value=1>
</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"><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">Execute</header>
<header class="table-top-mid">Test</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-center"><input type="checkbox" name="attr_loaded" value=1></div>
<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>
<input type="text" name="attr_notes" class="myweapontxt">
</div>
<div class="table-bottom" />
</div>
</fieldset>
</div>
</div>
</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">Quantity</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" style="width:120px;" 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_quantity" value=0 min=0></div>
<div class="table-item"><button type="roll" class="d6-dice" name="roll_use_item" title="Use Item"
value="&{template:gear} {{name=@{item}}} {{ Success Test = [[ {@{rating}d6>?{What is the Target Number?}!!} ]] }}"></button></div>
<div class="table-item"><input type="text" name="attr_description" style="width:250px;"></div>
</div>
</fieldset>
</div>
<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</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" style="width:120px;" /></div>
<div class="table-item"><input type="text" name="attr_model" style="width:120px;" /></div>
<div class="table-item"><input type="number" name="attr_cost" style="width:120px;" value=0 /></div>
<div class="table-item"><textarea name="attr_notes" style='width:300px;height:30px'></textarea></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 Controll 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 Controll 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" style="width:120px;" /></div>
<div class="table-item"><input type="text" name="attr_type" style="width:120px;" /></div>
<div class="table-item"><input type="text" name="attr_model" style="width:120px;" /></div>
<div class="table-item"><input type="number" name="attr_cost" style="width:120px;" /></div>
<div class="table-item"><textarea name="attr_notes" style='width:300px;height:18px'></textarea></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"> </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"></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"></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">
</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"></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">
</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"></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">
</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"></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"></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"></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"></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"></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"></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"></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"></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 class="sheet-row">
<div class="SRH2">Combat</div>
<input type="text" class="hidden_for_sheetworker" name="attr_updateviztns" hidden=true>
<input type="text" class="hidden_for_sheetworker" name="attr_visionprofile" hidden=true>
<input type="text" class="hidden_for_sheetworker" name="attr_fulldark" hidden=true>
<input type="text" class="hidden_for_sheetworker" name="attr_minlight" hidden=true>
<input type="text" class="hidden_for_sheetworker" name="attr_partiallight" hidden=true>
<input type="text" class="hidden_for_sheetworker" name="attr_glare" hidden=true>
<input type="text" class="hidden_for_sheetworker" name="attr_mist" hidden=true>
<input type="text" class="hidden_for_sheetworker" name="attr_lightsmoke" hidden=true>
<input type="text" class="hidden_for_sheetworker" name="attr_fullsmoke" hidden=true>
<input type="text" class="hidden_for_sheetworker" 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">Off-Hand Edged:</b><input type="number" name="attr_offhandedged" value=0></div>
<div class="combat-skills-items">Off-Hand Clubs:</b><input type="number" name="attr_offhandclubs" value=0 /></div>
<div class="combat-skills-items">Off-Hand Cyber:</b><input type="number" name="attr_offhandcyberimplant" value=0></div>
<div class="combat-skills-items">Off-Hand Whips:</b><input type="number" name="attr_offhandwhips" 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="Regular" 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>
<div class="SRH3">Ranged Weapons</div>
<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-center"><input title="Equipped in Primary Hand" type="checkbox" name="attr_primary-ranged-equipped"></div>
<div class="text-mid-center"><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" style='width:50px;'>
<input type="checkbox" name="attr_ss" value=1 class="text-mid-center" />
<input type="checkbox" name="attr_sa" value=1 class="text-mid-center" />
<input type="checkbox" value=1 name="attr_bf" class="text-mid-center" />
<input type="checkbox" value=1 name="attr_fa" class="text-mid-center" />
<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" 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 points for sepcializatin here. Use negative numbers if defaulting from another skill"><b>Specialize</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="@{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_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>
<div><input type="text" list="ammotype" value="Regular" class="myweapontxt2" name="attr_ammotype"></div>
<datalist class="mediumselect3" id="ammotype">
<option>Regular</option>
<option>ADPS</option>
<option>Explosive</option>
<option>Flechette</option>
<option>Gel</option>
<option>Tracer</option>
<option>Explosive EX</option>
</datalist>
<textarea name="attr_notes" style='width:150px;height:22px;'></textarea>
</span>
</div>
<div class="table-bottom" />
</fieldset>
<div class="SRH3">Melee Weapons </div>
<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">Primary Equip</div>
<div class="table-top-mid">Off-Hand 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">Specialize FocusPwr</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-center"><input type="checkbox" name="attr_unarmed-equipped" checked></div>
<div></div>
<input class="myweapontxt" type="text" name="attr_unarmed-name" value="Unarmed Combat">
<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 \>
<div><button class="attack-dice" id="unarmedattack" type="action" name="act_melee" title="Melee Attack"></button></div>
<textarea name="attr_notes" style='width:200px;height:20px'></textarea></div>
</div>
<div class="table-bottom" />
<fieldset class="repeating_meleeweapons">
<div class="melee-table-row">
<div class="text-mid-center"><input type="checkbox" name="attr_meleeequiped"></div>
<div class="text-mid-center"><input type="checkbox" name="attr_2ndmeleeequiped"></div>
<input type="text" name="attr_name" style="width: 100px;">
<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 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><textarea name="attr_notes" style='width:200px;height:20px'></textarea></div>
</div>
<div class="table-bottom" />
</fieldset>
<div class="SRH3">Explosives</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">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">
<input type="hidden" name="attr_scatterredux">
<div class="explosive-mods-switch">
<div>Skill</div>
<div>Specialize</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="@{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_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:300px;height:20px'></textarea>
</div>
</div>
<div class="table-bottom" />
</fieldset>
<br>
<div class="SRH3">Natural Armor</div>
<div class="armor">
<div class="SRH4">Dermal <input type="number" name='attr_dermalarmour' value="0" min="0"></div>
<div class="SRH4">Pain Resistance <input type='number' name='attr_adeptpainres' value="0" min="0" max=9></div>
</div>
<div class="SRH3">Armor Sets</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">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 style="text-align: center; padding-top: 8px;"><input type="checkbox" name="attr_equipped">
</div>
<div><input type=text name="attr_armorname" style="width: 150px;"></div>
<div><input type="number" value=0 name="attr_ballistic" style="width: 80px;"></div>
<div><input type="number" value=0 name="attr_impact" style="width: 80px;"></div>
<textarea name="attr_armornotes" style='width:300px;height:18px;'></textarea>
</div>
<div class="table-bottom" />
</fieldset>
<div class="SRH3">Ammunition</div>
<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 class="text-mid-center"><input type="text" name="attr_ammotype"></div>
<div class="text-mid-center"><input type="number" name="attr_ammocount"></div>
<div class="text-mid-center"><input type="number" name="attr_ammoweight"></div>
<textarea name="attr_ammonotes" style='width:300px;height:18px'></textarea>
</div>
<div class="table-bottom" />
</fieldset>
</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"> Controll</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" style="width: 65px;">
<option>Grid</option>
<option>Host</option>
<option>VM</option>
</select></div>
<div><input type="text" name="attr_parentgrid"></div>
<div class="matrix-rating">
<div><select name="attr_matrixcode" style="width: 80px;">
<option>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_matrixcontrollrating"></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_matrixcontrollrating"></span> /
<span name="attr_matrixindexrating"></span> /
<span name="attr_matrixfilesrating"></span> /
<span name="attr_matrixslaverating"></span>
</div>
</div>
<div>Detection Roll<button type="roll" class="d6-dice" name="roll_detection" title="Detection Roll"
value="&{template:matrix} {{target=@{target|Decker|character_name}}}{{myname=@{character_name}}} {{action=Detection Roll}} {{roll=[[@{matrixsecurityrating}d6>{2,(@{target|Decker|deck-detection-final})}kh1]]}}">
</button></div>
<div>Security tally
<input type="number" name="attr_matrixsecuritytally">
</div>
<div>Alert Status
<select name="attr_matrixalert" style="width: 70px;">
<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>
<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-right">Security Tally</header>
</div>
<fieldset class="repeating_intruders">
<div class="matrix-intruder-tally">
<div class="table-item-left"><input type="text" name="attr_intrudername" style="width: 120px"></div>
<div class="table-item"><input type="number" name="attr_securitytally"></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">Attack</header>
<header class="table-top-right">Resist</header>
</div>
<fieldset class="repeating_ic">
<input type="hidden" name="attr_matrix-penalty">
<div class="ic-attributes-table">
<div><input type="text" name="attr_ic_name" style="width: 110px;"></div>
<div><input type="number" name="attr_icrating"></div>
<div><span name="attr_matrixsecuritynumber"></span><span>d6 +</span><span
name="attr_icrating"></span><button type="roll" class="d6-dice" name="roll_initiative"
title="IC Initiative Roll"
value="&{template:default} {{character=@{character_name}}} {{type=IC Initiative Roll}} {{character=@{character_name}}} {{roll=[[@{matrixsecuritynumber}d6+@{icrating}-@{wound_pen} &{tracker}]]}}"></button>
</div>
<div><input type="number" name="attr_matrix-damage" sytle="width: 60px;" min=0 max=10></div>
<div><select name="attr_ictype" style="width: 80px;">
<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>Scout</option>
<option>Trace</option>
<option>Cerebropathic</option>
<option>Psychotropic</option>
</select></div>
<div><select name="attr_matrix-iconstatus" style="width: 85px;">
<option SELECTED>Legitimate</option>
<option>Intruder</option>
</select></div>
<div><select name="attr_ictargettest" style="width: 80px;">
<option value=@{target|decker|bod}>Bod</option>
<option value=@{target|decker|evasion}>Evasion</option>
<option value=@{target|decker|sensor}>Sensor</option>
<option value=@{target|decker|masking}>Masking</option>
<option value=@{target|decker|detectionFactor}>DetectionFactor</option>
<option>Attack</option>
<option>Computer Skill</option>
<option>Utility TN</option>
<option>MPCP</option>
<option>Jammer</option>
</select></div>
<div><button type="roll" class="d6-dice" name="roll_matrix_sensor" title="Sensor Test"
value="&{template:matrix} {{myname=@{character_name}}} {{target=@{target|decker|character_name}}}{{action=Sensor Test}}{{roll=[[@{matrixsecurityrating}d6>[[ {2,(@{target|decker|deck-evasion-final} +@{matrix-penalty} +?{Miscellaneous Modifiers|0})}kh1]]!! ]] }}"></button>
</div>
<div><button type="roll" class="d6-dice" name="roll_matrix_evade" title="Evade Detection"
value="&{template:matrix}{{myname=@{character_name}}}{{target=@{target|decker|character_name}}}{{action=Evade Detection}}{{roll=[[@{matrixsecurityrating}d6>[[ {2,(@{target|decker|deck-sensors-final} +@{matrix-penalty} +?{Miscellaneous Modifiers|0} )}kh1]]!! ]] }}"></button>
</div>
<div><button type="roll" class="d6-dice" name="roll_matrix_parry" title="Parry Attack"
value="&{template:matrix}{{myname=@{character_name}}}{{target=@{target|decker|character_name}}}{{action=Parry Attack}}{{roll=[[@{matrixsecurityrating}d6>[[ {2,(@{target|decker|deck-evasion-final} + @{matrix-penalty} +?{Miscellaneous Modifiers|0} )}kh1]]!! ]] }}"></button>
</div>
<div><button type="roll" class="d6-dice" name="roll_matrix_position" title="Position Attack"
value="&{template:matrix}{{myname=@{character_name}}}{{target=@{target|decker|character_name}}}{{action=Position Attack}}{{roll= [[@{matrixsecurityrating}d6>[[ {2,(@{target|decker|deck-evasion-final} + @{matrix-penalty} +?{Miscellaneous Modifiers|0} )}kh1]]!! ]] }}"></button>
</div>
<div><button type="roll" class="d6-dice" name="roll_icattack" title="IC Attack Roll"
value="&{template:matrix} {{target=@{target|decker|character_name}}} {{character=@{character_name}}} {{action=IC Attack}} {{roll=[[@{matrixsecurityrating}d6>[[@{deck-tn}+@{matrix-penalty} +?{Miscellaneous Modifiers|0}]] ]]}}">
</button></div>
<div><button type="roll" class="d6-dice" name="roll_icresist" title="IC Resist Roll"
value="&{template:matrix}{{myname=@{character_name}}}{{target=?{Power of Attack?}}}{{action=Damage Resistance Test}}{{roll= [[ @{matrixsecurityrating}d6>[[{2,(?{Power of Attack?|2} + ?{Miscellaneous Modifiers|0} )}kh1]]!! ]] }}"></button>
</button>
</div>
</div>
<div class="table-item-left"><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-item-nc">Interface</header>
<div class="table-right-nc">
<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">
<div class="table-item-nc">Speed</div>
<div class="table-right-nc">
<div class="vehicle-speed-details">
<div>Current</div>
<div>Maximum</div>
<div><input type="number" name="attr_speed-current" value=0 min=0/ style="width:60px;" />
</div>
<div><span name="attr_speed-max"></span></div>
</div>
<br>
<br>
</div>
</div>
<div class="vehicle-maneuever">
<div class="table-item-nc">Maneuever</div>
<div class="table-right-nc">
<div class="vehicle-maneuever-details">
<div>Score</div>
<div><input type="number" name="attr_maneuver-score" value=0 min=0/ style="width:58px;">
</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">
<div class="table-item-nc">Terrain</div>
<div class="table-right-nc">
<div class="vehicle-env-details">
<div>Off Road:</div>
<div><input type="checkbox" name="attr_vehicle-offroad" value=1></div>
</div>
<div class="vehicle-env-details2">
<div>Terrain</div>
<select name="attr_terrain" style="width:80px;">
<option SELECTED>Normal</option>
<option>Open</option>
<option>Restricted</option>
<option>Tight</option>
</select>
</div>
<br>
<br>
</div>
</div>
<div class="vehicle-env">
<div class="table-item-nc">Environment</div>
<div class="table-right-nc">
<div class="vehicle-env-details">
<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" style="width:80px;">
<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">
<div class="table-item-nc">Sensor LOS</div>
<div class="vehicle-sensor-details table-item-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-right-nc">Sensor Test</div>
<div class="table-right-nc">
<button type="roll" class="d6-dice" name="roll_skill" title="Sensor Test"
value="&{template:vehicle} {{type=Sensor Test}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{sensors-rating}]]d6>[[{2,( @{target|Target|signature} +@{wp-vehicle} +@{sensor-test-los} +@{sensor-test-weather} +@{sensor-test-terrain} +@{vehicle-urban} +?{Additional Modifiers|0})}kh1]]!!]] }} {{ecd=[[ [[@{ecd-rating} * @{ecd-enabled}]]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>
</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>
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="table-close-nc">Test</div>
<div>Driver:<input name="attr_rigger" type="text" style="width:100px;" /></div>
<div class="vehicle-quickstats">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div>Control Pool:</div>
<div><input type="number" name="attr_control-pool" min=0 value=0></div>
<div>Vehicle Skill:</div>
<div><input type="number" name="attr_vehicle-skill" min=0 value=0></div>
<div>Gunnery:</div>
<div><input type="number" name="attr_gunnery" min=0 value=0></div>
<div class="drone-only table-close-nc">Pilot Rating:</div>
<div class="drone-only table-close-nc"><span class="spn-nc" name="attr_pilot" /></div>
</div>
<div class="table-close-nc drone-only"><b>Operative Mode:</div>
<div class="vehicle-quickstats2">
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
<div class="drone-only">Primary:</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"><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" style="width:90px;"></div>
<div>Entry Points:</div>
<div><input type="text" name="attr_entry" style="width:90px;"></div>
<div>Fuel:</div>
<input type="text" name="attr_fuel" style="width:90px;">
<div>Economy:</div>
<input type="text" name="attr_economy" style="width:90px;">
<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>Rapid Attribute Set<input type="text" name="attr_vehicle-rapid-attributes" style="width:250px;"
\><button class="quicksettings" type="action" name="act_vehicleset">Apply</button>
</div>
</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="roll" class="d6-dice" name="roll_skill" title="Sensor Test"
value="&{template:vehicle} {{type=Sensor Test}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{sensors-rating}]]d6>[[{2,( @{target|Target|signature} +@{wp-vehicle} +@{sensor-test-los} +@{sensor-test-weather} +@{sensor-test-terrain} +@{vehicle-urban} +?{Additional Modifiers|0})}kh1]]!!]] }} {{ecd=[[ [[@{ecd-rating} * @{ecd-enabled}]]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">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>Activte</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">Hand</div>
<div class="text-mid"><span name="attr_handling"></span>
<button type="roll" class="d6-dice" name="roll_skill" title="Driving Test"
value="&{template:vehicle} {{type=Driving Test}} {{character=@{character_name}}} {{controlpool=?{Control Pool Dice?|0}}} {{roll=[[ [[ @{vehicle-skill-final} + @{driving-test-autonav} + ?{Control Pool Dice?}]]d6>[[{2,(@{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})}kh1]]!!]] }}"></button>
</div>
<div class="text-mid">Accel:</div>
<div class="text-mid"><span name="attr_acceleration"></span></div>
<div class="text-mid">Body:</div>
<div class="text-mid"><span name="attr_body"></span>
<button type="roll" class="d6-dice" name="roll_skill" title="Resist Damage"
value="&{template:vehicle} {{type=Damage Resistance}} {{character=@{character_name}}} {{controlpool=?{Control Pool Dice?|0}}} {{roll=[[ [[ @{body} + ?{Control Pool Dice?}]]d6>[[?{Power of Attack|1}]]!!]] }}"></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></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="hidedice-button" title="Vehicle Acceleration Test" name="act_vehicleaction" id="accelerating">Accelerate</button></div>
<div><button type="action" class="hidedice-button" title="Vehicle Breaking Test" name="act_vehicleaction" id="breaking">Brake</button></div>
<div><button type="action" class="hidedice-button" title="Vehicle Positioning Test" name="act_vehicleposition" id="breaking">Position</button></div>
<div><button type="action" class="hidedice-button" title="Vehicle Ramming Test" name="act_vehicleaction" id="ram">Ram</button></div>
<div><button type="action" class="hidedice-button" title="Vehicle Hiding Test" name="act_vehicleaction" id="hide">Hide</button></div>
<div><button type="action" class="hidedice-button" title="Vehicle Relocate Test" name="act_vehicleaction" id="relocate">Relocate</button></div>
<div><button type="action" class="hidedice-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-right">Sensor TN</div>
<div class="table-item-left"><select name="attr_gunnerymotion" style="width:100px" 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" style="width:100px" 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" style="width:100px" 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" style="width:120px">
<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" style="width:90px">
<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" style="width:100px" 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 name="attr_rangedTN"></div>
<div class="table-item"><span name="attr_sensor-gunnery-tn"></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" style='width:50px;'>
<input type="checkbox" name="attr_ss" value=1 class="text-mid-center" />
<input type="checkbox" name="attr_sa" value=1 class="text-mid-center" />
<input type="checkbox" value=1 name="attr_bf" class="text-mid-center" />
<input type="checkbox" value=1 name="attr_fa" class="text-mid-center" />
<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 points for sepcializatin here. Use negative numbers if defaulting from another skill"><b>Specialize</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_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>
<div><input type="text" list="ammotype" value="Regular" class="myweapontxt2" name="attr_ammotype"></div>
<datalist class="mediumselect3" id="ammotype">
<option>Regular</option>
<option>ADPS</option>
<option>Explosive</option>
<option>Flechette</option>
<option>Gel</option>
<option>Tracer</option>
<option>Explosive EX</option>
</datalist>
<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="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">
<input type="hidden" name="attr_scatterredux">
<div class="explosive-mods-switch">
<div>Skill</div>
<div>Specialize</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_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:250px;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" style="width:120px"></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" style='width:300px'></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" style="width:120px"></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" style='width:300px;'></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" style="width:120px"></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" style='width:300px;'></div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-contacts">
<div class="SRH2">Lifestyle</div>
<div>
<div>
<div class="SRH3">Contacts</div>
<button type="action" class="hidedice-button" title="TEST Test" name="act_mytst1" id="crash">TEST</button>
<fieldset class="repeating_contacts">
<div class="contacts">
<select name="attr_contacttype" style="Width:130px">
<option SELECTED>Contact</option>
<option>Buddy</option>
<option>Friend for Life</option>
<option>Followers</option>
</select>
<textarea name="attr_contactdetail"
style='width:275px;height:50px'>Name Occupation Upkeep</textarea>
</div>
</fieldset>
</div>
</div>
<div>
<div class="SRH3">Lifestyle Class/Gear at Home</div>
<textarea name="attr_lifestylegear" style="width:780px;height:50px"></textarea>
</div>
</div>
<div class="sheet-spirit">
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" style="width:116px;" /></div>
<div class="table-item"><input type="text" name="attr_description" style="width:220px;" /></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" style="width:116px;" /></div>
<div class="table-item"><input type="text" name="attr_description" style="width:220px;" /></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", "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" }
}
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);
});
});
</script>
<script type="text/worker">
const attributes=[ "body", "quickness", "strength", "charisma", "willpower", "intelligence", "force" ];
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('clicked:repeating_skills:skills', (info) => {
const attrlist=["skillname", "skillrating"];
var atts=[];
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) {
let skill=myval[myrepeat.concat("skillname")];
let rating=myval[myrepeat.concat("skillrating")];
console.log('start roll for ' + skill);
const rollq="&{template:skill} {{skill=" + skill + "}}{{myname=" + myval["character_name"] + "}}{{poolname=Combat Pool}}{{pooldice=?{Pool Dice?|0}}}{{result=[[ {[[" + rating + " + ?{Pool Dice?}]]d6>[[?{What is the Target Number?|4} + @{stun_pen} + @{wound_pen}]]!!} ]]}}";
startRoll(rollq, (results) => {
console.log('R: ' + results);
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) => {
finishRoll( results.rollId);
});
});
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");
atts.push(myutil, myrating);
if ( myid == "matrixrepeatingexec" ) utiltarget=myrepeat.concat("target");
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];
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" ) {
action="{{action=System Operation with " + myutilvalue + " Utility}}";
target = "{{target=@{" + utiltarget + "}}}";
calcTN="@{" + utiltarget + "} + floor(@{deck-alertstatus}/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) => {
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('clicked:matrixresist', (info) => {
console.log(info);
const myid=info["htmlAttributes"]["id"];
const mytitle=info["htmlAttributes"]["title"];
var calcTN="?{Power of Attack?|0} - @{deckarmor-rating}";
var calcDice="@{deck-bod-final} + ?{Hacking Pool Dice|0}";
var myroll="&{template:matrix}";
myroll+="{{action=Damage Resistance Test}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{utilitylevel=Armor Rating @{deckarmor-rating}}}";
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) => {
finishRoll( results.rollId);
});
});
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}"
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}}}"
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}"
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
on('clicked:matrixattack', (info) => {
console.log(info);
const myid=info["htmlAttributes"]["id"]
const mytitle=info["htmlAttributes"]["title"]
var calcTN="@{deck-tn} + @{wound_pen} + @{stun_pen} + @{matrix-penalty} + ?{Miscellaneous Modifiers|0}";
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}}}"
myroll+="{{myname=@{character_name}}} {{target=@{target|Target|token_name}}}{{HackingPool=?{Hacking Pool Dice|0}}}"
myroll+="{{utilitylevel=@{deckattack-rating}}}"
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}"
console.log(myroll);
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>[[" + calcTN + "]]!!]] }}"
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
on('clicked:matrixmaneuvers', (info) => {
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
var myutil="@{deckcloak-rating}";
var myatt="deck-evasion-final";
if ( mytitle == "Evade Detection" ) myatt = "deck-sensors-final";
if ( mytitle == "Parry Attack" ) myutil = "@{decklockon-rating}";
if ( mytitle == "Sensor Test" ) myutil = "@{decklockon-rating}";
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|character_name}|detection)}}"
startRoll(myroll, (results) => {
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} + ?{Magic 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+="{{MagicPool=[[?{Magic 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,
});
});
});
});
on('clicked:repeating_spells:cast', (info) => {
var atts=["magic"];
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"];
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 force=myval[myrepeat + "force"];
const target=myval[myrepeat + "target"];
const drain=myval[myrepeat + "drain"];
var drainlvl=myval[myrepeat + "drainlvl"];
const name=myval[myrepeat + "name"];
const description=myval[myrepeat + "description"];
const damage=myval[myrepeat + "damage"];
var targetofspell=target;
if (target.includes("@{target")) targetofspell="@{target|Target|token_name}"
var calcDice="@{spellcasting} + ?{Magic Pool Dice}";
var calcTN= target + " + (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen}";
var calcDrainTN="floor(" + force + "/2) + " + drain + " + ( 2 * @{spellsus} )";
var calcDrainDice="@{willpower|max} + ?{Drain Pool Dice}";
var myroll="&{template:spell}{{myname=@{character_name}}}";
myroll+="{{draindamage=[[0]]}}"
myroll+="{{spellname=" + name + "}}";
myroll+="{{description=" + description +"}}";
myroll+="{{MagicPool=[[?{Magic Pool Dice|0} + ?{Drain Pool Dice|0}]]}}";
myroll+="{{spelldamage=[[" + damage + "]]}}"
myroll+="{{castforce=?{Force?|" + force + "}}}"
myroll+="{{targetofspell=" + targetofspell + "}}";
myroll+="{{rolldice=[[" + calcDice + "]]}}";
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[" + calcTN + "]]!! ]] }}";
if (target.includes("@{target")) {
resistattr=target.split("|")[2];
console.log('attr split: ' + resistattr);
if ( resistattr == "force" ) myroll += "{{resistspell=[Resist Spell with force](~@{target|Target|character_name}|attrib-force)}}"
if ( resistattr == "targetMove" ) myroll += "{{resistspell=[Resist Spell with 1/2 Impact ](~@{target|Target|character_name}|resist-impact-half)}}"
else myroll += "{{resistspell=[Resist Spell with " + resistattr + " max](~@{target|Target|character_name}|attrib-" + resistattr +"-max)}}"
}
console.log(myroll);
startRoll(myroll, (results) => {
console.log('tst');
console.log(results.results.spelldamage.result);
const finaldmg=damagetable[results.results.spelldamage.result];
var draindmg;
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);
finishRoll( results.rollId,
{
spelldamage: finaldmg,
draindamage: draindmg,
});
});
});
});
var initiative = function (init, reaction, dmgpen, mytitle) {
penatts=["stun_pen", "wound_pen", "matrix-penalty", "vehicle-penalty", "rccommand-penalty", "rcsimsense-penalty", "rcsystem-penalty"];
getAttrs(penatts, function (myval) {
console.log('test');
console.log(init, reaction)
var myroll="&{template:init} {{character=@{character_name}}}{{type=" + mytitle + "}}"
myroll += "{{roll=[[" + init + "d6+" + reaction + dmgpen + " &{tracker}]]}}"
if (myval["wound_pen"] >= 10) {
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name} is unconcious or dead}}";
}
if (myval["stun_pen"] >= 10) {
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name} is unconcious}}";
}
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) => {
let init="@{initiative|max}";
let reaction="@{reaction|max}";
let dmgpen=" -@{wp-char}";
let mytitle="Augmented Initiative Roll";
initiative(init, reaction, dmgpen, mytitle);
});
on('clicked:init', (info) => {
console.log(info);
const mytitle=info["htmlAttributes"]["title"]
const myid=info["htmlAttributes"]["id"]
var dmgpen=" -@{wp-char}";
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);
});
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);
});
});
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>[[" + calcTN + "]]!! ]] }}";
console.log(myroll);
startRoll(myroll, (results) => {
finishRoll( results.rollId);
});
});
var resistdmg = function (myid, mods) {
if ( mods=="normal" ) mods=1;
if ( mods=="double" ) mods=2;
if ( mods=="half" ) mods=0.5;
let actionname = myid.charAt(0).toUpperCase() + myid.slice(1);
var calcDice= "@{body|max} + @{dermalarmour} + ?{Combat Dice}";
calcTN="?{Attack Power} - (floor(@{ballistic} * " + mods + "))";
myroll="&{template:resistance}";
myroll +="{{name=" + actionname + " Armor}}{{character=@{character_name}}}{{armorvalue=@{" + myid + "}}}{{CombatPool=[[?{Combat Dice|0}]]}}";
myroll +="{{Power=?{Attack Power|4}}}";
myroll +="{{rolldice=[[" + calcDice + "]]}}";
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
myroll +="{{AttackType=" + mods + "}}";
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
console.log(myroll);
startRoll(myroll, (results) => {
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);
});
const resistmods=["half", "normal", "double"];
resistmods.forEach(mod => {
var myball="resist-ballistic-" + mod;
var myimpact="resist-impact-" + mod;
on(`clicked:${myball}`, (info) => {
resistdmg("ballistic", mod);
});
on(`clicked:${myimpact}`, (info) => {
resistdmg("impact", mod);
});
});
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]) + " + ?{Magic 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?}";
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 + " + ?{Drain Pool Dice} + ?{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+="{{MagicPool=[[?{Magic 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>[[" + calcTN + "]]!! ]] }}";
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: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"]);
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;
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;
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>[[?{Target Number?} + @{stun_pen} + @{wound_pen}]]!! ]] }}"
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) => {
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"];
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"] ;
weaponattrs.forEach(myatt=>{
atts.push(myrepeat.concat(myatt));
});
getAttrs(atts, function(myval) {
if (myval[myrepeat.concat("wfamily")] == "Heavy" ) recoilx=2;
var vehiclesensors=0;
if ( myval["sensors-rating"] ) vehiclesensors=myval["sensors-rating"] ;
const myweapon= myval[myrepeat.concat("name")];
const wdmg= myval[myrepeat.concat("damage")];
const ammoremain= myval[myrepeat.concat("ammoremain")];
const ammotype= myval[myrepeat.concat("ammotype")];
const targetaim= myval[myrepeat.concat("targeting")];
const gyro= myval[myrepeat.concat("gyro")];
const ss= myval[myrepeat.concat("ss")];
const sa= myval[myrepeat.concat("sa")];
const bf= myval[myrepeat.concat("bf")];
const fa= myval[myrepeat.concat("fa")];
var dmgnumber= damagetable[wdmg];
console.log('dmgnumber ' + dmgnumber);
var dmgmax=4;
if (dmgnumber >= 10) dmgmax=13;
var wpower= myval[myrepeat.concat("power")];
var ammoleft=myval[myrepeat.concat("ammoremain")];
var finalrounds;
var recoilcomp= myval[myrepeat.concat("recoilcomp")];
var recoil="{0,( ?{Recoil Penalty} - ( " + recoilcomp + " + " + gyro + " ) )}kh1"
var uncomprecoil="{{recoil=[[{0,( ?{Recoil Penalty|0} +1 - ( " + recoilcomp + " + " + gyro + " ) )}kh1]]}}"
if ((bf==1) || (fa==1)) {
rounds="?{Rounds|3}"
recoil="{0,( ?{Recoil Penalty|0} + (" + recoilx + " * (?{Rounds} - ( " + recoilcomp + " + " + gyro + " ) )))}kh1";
uncomprecoil="{{recoil=[[" + recoil + "]]}}"
}
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
var calcTN = "[[ "
if ( mymode == "vehiclesensor" ) {
calcTN += "@{sensor-gunnery-tn} + @{vehicle-driver}wp-char}"
} else {
calcTN += " ?{Range} + @{rangedTN} + @{target|Target|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim
}
calcTN += " + ?{Additional Modifiers|0} + " + recoil + " + @{wp-vehicle}"
calcTN += " ]]"
var calcDice = "[[ " + myval[myrepeat.concat("skill")] + " + " + specialized + " + ?{Combat 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}}}" + uncomprecoil
roll += "{{targetnumber=" + calcTN + " }}{{rolldice=" + calcDice + "}}"
roll += "{{weaponname=" + myweapon + "}}{{weapondamage=" + wdmg + "}}{{weaponpower=[[" + wpower + "]]}}"
roll += "{{combatpool=[[?{Combat Pool Dice}]]}}{{weaponname=" + myweapon + "}}{{ammotype=" + ammotype + "}}"
roll += "{{attacktest=[[ " + calcDice + "d6>[[ {2, " + calcTN + "}kh1 ]]!! ]] }}"
roll += "{{resist=[Resist](~@{target|Target|token_name}|resist_ballistic)}}"
console.log(roll);
startRoll(roll, (results) => {
const myrounds=results.results.rounds.result;
finalrounds=myrounds;
if ( myrounds > ammoleft ) {
finalrounds=parseInt(ammoleft);
}
if ((bf==1) || (fa==1)) wpower=parseInt(wpower) + finalrounds;
finishRoll( results.rollId,
{
weaponpower: wpower,
rounds: finalrounds,
})
setatts[myrepeat.concat("ammoremain")]=ammoremain - finalrounds;
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 combatpool="true";
var defaultmsg="";
var defaultpen=0;
var myspec=0;
const meleeattrs=["unarmed", "unarmed-specialized", "cyberimplant"];
getAttrs(meleeattrs, function(myval) {
if ( mymode == "astralattack" ) {
myweapon="Astral Attack";
myskill="@{astralcombat} + @{weaponfocus-force}"
mydamage="M"
mypower="@{charisma|max}";
focus="{{weaponfocus=@{weaponfocus-name}}}"
force="{{focusforce=@{weaponfocus-force}}}"
}
else if ( mymode == "unarmedattack" ) {
mydamage=myval["@{attackdamage}"];
myskill=myval["unarmed"];
myspec=myval["unarmed-specialized"];
myweapon="@{martialarts}";
mypower="@{strength|max}";
if ( myval["unarmed"] == 0 ) {
if (myval["cyberimplant"] == 0) {
myskill="@{strength|max}";
defaultpen=4;
combatpool="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;
var calcDice=myskill + " + " + myspec ;
if ( combatpool == "true" ) calcDice += " + ?{Combat Pool Dice}"
var myroll="&{template:attack}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}{{weapondamage="
myroll+= mydamage + "}}{{weaponpower=[[" + mypower + "]]}}"
if ( combatpool == "true" ) myroll += "{{combatpool=[[?{Combat Pool Dice|0}]]}}"
else myroll += "{{combatpool=[[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;
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,
});
});
});
});
on('clicked:repeating_meleeweapons:attack', (info) => {
console.log(info);
var atts=[];
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) {
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")];
calcDice="[[ " + myskill + " + " + myspec + " + ?{Combat Pool Dice}]]";
calcTN="[[ {2,(4 + @{meleeTN} + ( ( @{target|Target|meleereach|max} - " + myreach + ") * ?{Use Reach Modifier?} ))}kh1 ]]";
var myroll="&{template:attack}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}{{weapondamage="
myroll+= mydamage + "}}{{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 + "!! ]] }}"
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,
});
});
});
});
on('clicked:repeating_explosives:rangedattack', (info) => {
var setatts={};
var scatter="";
var atts=[];
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"] ;
weaponattrs.forEach(myatt=>{
atts.push(myrepeat.concat(myatt));
});
getAttrs(atts, function(myval) {
const myweapon= myval[myrepeat.concat("name")];
const wdmg= myval[myrepeat.concat("damage")];
const ammoremain= myval[myrepeat.concat("ammoremain")];
const gyro= myval[myrepeat.concat("gyro")];
var dmgnumber= damagetable[wdmg];
var range="{{range=@{ask-range}}}";
var missleintel=0;
var targetnumber=" ?{Range} + @{target|Target|targetMove}";
if ( mymode=="sensorexp") {
console.log('got a missle');
range="";
missleintel=myval[myrepeat.concat("missleint")] || 0;
expint="{{expint=[[" + missleintel + "]]}}"
var targetnumber=" @{target|Target|signature} + ?{Urban Environment?|Yes,2|No,0}";
}
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 + " + ?{Combat Pool Dice|0} + " + missleintel + " ]]"
var calcTN = "[[" + targetnumber + " + @{wp-vehicle} + " + myval[myrepeat.concat("targeting")]
calcTN += " + ?{Additional Modifiers|0} + @{rangedTN} + {0,( @{move} - " + gyro + ") }kh1 ]]"
var roll="&{template:explosive}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}" + range
roll += "{{rolldice=" + calcDice + "}}{{targetnumber=" + calcTN + "}}"
roll += "{{weapondamage=" + myval[myrepeat.concat("damage")] + "}}"
roll += "{{weaponpower=" + myval[myrepeat.concat("power")] + "}}" + expint
roll += "{{combatpool=[[?{Combat Pool Dice|0}]]}}{{weaponname=" + myval[myrepeat.concat("name")] + "}}"
roll += "{{attacktest=[[" + calcDice + "d6>" + calcTN + "]]}}"
roll += "{{scatdir=[[1d6]]}}{{scatter=[[" + myscat + "d6]]}}{{blastradius=" + myblast
roll += "}}{{scatterredux=" + myredux + "}}{{scatdirnumber=[[" + direction
roll += "]]}}{{scatdir=" + scatimg + direction + ".png}}"
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,
}
);
setatts[myrepeat.concat("ammoremain")]=ammoremain - 1;
setAttrs(setatts);
});
}
});
});
</script>
<script type="text/worker">
const attributes=[ "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');
attributes.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);
});
};
</script>
<script type="text/worker">
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"});
}
});
});
});
</script>
<script type="text/worker">
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]});
}
});
});
</script>
<script type="text/worker">
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(onsuffix);
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", "hackingpool", "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"];
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() {
getAttrs(pgetatts, function(myval) {
console.log(myval);
console.log(myval["deck-realityfilter"]);
var hp = parseInt(myval["hackingpool-max"]);
var hackpool= hp || 0;
var mysuppress=parseInt(myval["deck-icsuppressed"]);
var mympcp = parseInt(myval["deck-mpcp-max"]) + parseInt(myval["deck-mpcp-mods"]) - parseInt(myval["deck-realityfilter"]);
var mybod = parseInt(myval["deck-bod-max"]) + parseInt(myval["deck-bod-mods"]);
var mysensors = parseInt(myval["deck-sensors-max"]) + parseInt(myval["deck-sensors-mods"]);
var myevasion = parseInt(myval["deck-evasion-max"]) + parseInt(myval["deck-evasion-mods"]);
var mymasking = parseInt(myval["deck-masking-max"]) + parseInt(myval["deck-masking-mods"]);
if ( myval["deck-icsuppresspool"] == 1) {
var myhackingpool = hackpool + parseInt(myval["hackingpool-mods"]) - mysuppress;
var mydetection = parseInt(myval["deck-detection-max"]) + parseInt(myval["deck-detection-mods"]);
} else {
var myhackingpool = hackpool + parseInt(myval["hackingpool-mods"] );
var mydetection = parseInt(myval["deck-detection-max"]) + parseInt(myval["deck-detection-mods"]) - mysuppress;
}
setAttrs({ "deck-mpcp-final": mympcp, "deck-bod-final": mybod, "deck-sensors-final": mysensors, "deck-evasion-final": myevasion, "deck-masking-final": mymasking, "hackingpool-final": myhackingpool, "deck-detection-final": mydetection });
});
});
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(":size"));
utilsizechange += cprefix.concat(p.concat(":rating"));
});
on(utilsizechange, function(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() {
getAttrs(["matrixsecurityrating"], function(myval) {
let sr = parseInt(myval["matrixsecurityrating"]);
setAttrs({"deck-bod-final":sr, "deck-evasion-final":sr, "deck-masking-final":sr, "deck-sensors-final":sr, "deck-mpcp-final":sr, "deck-detection-final":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");
} else {
mybase=info["sourceAttribute"].split("-");
myattrib=mybase.pop();
myrepeat=mybase;
mysizeattr=myrepeat +"-size";
myloadattr=myrepeat + "-loaded";
myratingattr=myrepeat + "-rating";
}
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]);
} else {
console.log('un-loading utility ' + myrepeat);
newsize=currentsize - parseInt(myval[mysizeattr]);
newratings=currentrat - parseInt(myval[myratingattr]);
}
} 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("change:deck-systemrating change:matrix-iconstatus", function() {
getAttrs(["deck-systemrating","matrix-iconstatus"], function(myval) {
var mytn=0;
switch(myval["deck-systemrating"]) {
case "Blue":
if (myval["matrix-iconstatus"] == "Intruder") {
mytn=3;
} else {
mytn=6;
}
break;
case "Green":
if (myval["matrix-iconstatus"] == "Intruder") {
mytn=4;
} else {
mytn=5;
}
break;
case "Orange":
if (myval["matrix-iconstatus"] == "Intruder") {
mytn=5;
} else {
mytn=4;
}
break;
case "Red":
if (myval["matrix-iconstatus"] == "Intruder") {
mytn=6;
} else {
mytn=3;
}
break;
}
setAttrs({"deck-tn": mytn});
});
});
on("change:deckattacklevel", function() {
getAttrs(["deckattacklevel"], function(myval) {
switch (myval["deckattacklevel"]) {
case "L":
var mymultiplier=2;
break;
case "M":
var mymultiplier=3;
break;
case "S":
var mymultiplier=4;
break;
case "D":
var mymultiplier=5;
break;
}
setAttrs({"deckattack-multiplier": mymultiplier});
});
});
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);
});
</script>
<script type="text/worker">
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;
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)
});
});
</script>
<script type="text/worker">
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["matrixcode"]=finalcode;
atts["matrixsecurityrating"]=system;
atts["matrixcontrollrating"]=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: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", 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 {
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: change:repeating_armor:ballistic change:repeating_armor:impact", function(eventinfo){
getAttrs(["repeating_armor_ballistic", "repeating_armor_impact", "repeating_armor_equipped"], function(myval) {
if ( myval.repeating_armor_equipped == "on" ) {
setAttrs({ballistic: myval.repeating_armor_ballistic, impact: myval.repeating_armor_impact});
}
});
});
on("change:repeating_armor:equipped", function(eventinfo){
const myarmor=eventinfo.sourceAttribute;
getAttrs([myarmor, "repeating_armor_ballistic", "repeating_armor_impact", "armorselected"], function(myval) {
if (myval[myarmor] == "on") {
console.log('donning armor')
let lastused=myval.armorselected;
setAttrs({armorselected: myarmor, [lastused]: 0});
setAttrs({ballistic: myval.repeating_armor_ballistic, impact: myval.repeating_armor_impact});
} else if ( (myarmor == myval.armorselected) && (myval[myarmor] != "on") ) {
console.log('taking off armor')
setAttrs({ballistic: 0, impact: 0, armorselected: "None" })
} else {
console.log('not found for armor')
}
});
});
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-max 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:matrix-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={};
if ((myval["sheettype"] == "Vehicle") || (myval["sheettype"] == "Drone")) {
myatts
myatts["sheettab"]="vehicle-attr-tab";
} else {
myatts["sheettab"]="character";
}
if ((myval["sheettype"] == "Critter") || (myval["sheettype"] == "Spirit")) {
myatts["gunneryswitch"]="hide";
} else {
}
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:matrixcode", function() {
console.log('matrixsecuritynumber')
getAttrs(["matrixcode"], function (myvar) {
switch (myvar.matrixcode) {
case "BLUE":
var myval = 1
break;
case "GREEN":
var myval = 2
break;
case "ORANGE":
var myval = 3
break;
case "RED":
var myval = 4
break;
}
setAttrs({matrixsecuritynumber: myval});
});
});
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("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: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);
});
};
var updatepools = function() {
getAttrs(["strength_max","magic","deck-mpcp-max","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-max"]);
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"]=mycombatpool = 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["magicpool"] = Math.floor((mymagic + myint + mywill)/3);
myatts["astralpool"] = Math.floor( (mychar + mywill + myint) /2 );
myatts["astralreaction"]= ( 20 + myval.intelligence_max);
} else if (myval.sheettype == "Spirit" ) {
myatts["magicpool"] = 0;
myatts["astralpool"] = 0;
} else {
myatts["magicpool"] = 0;
myatts["astralpool"] = 0;
myatts["astralreaction"] = 0;
}
if ( mympcp > 0 ) {
myatts["hackingpool-max"] = Math.floor( (mympcp + myint) /3 );
} else {
myatts["hackingpool-max"] = 0;
}
if (myval.frametype == "Smart Frame") {
myatts["hackingpool-max"] = 0;
}
if (myvcr > 0) {
myatts["controlpool"] = myreact + ( 2 * myvcr);
} else {
myatts["controlpool"] = 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) {
var penalty = 0;
var dmg = parseInt(myval[myatt]);
if ( dmg > 10) penalty = 100;
else if (dmg > 5) penalty = 3;
else if (dmg > 2) penalty = 2;
else if (dmg > 0) penalty = 1;
setAttrs({[mypen]: penalty});
});
};
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 = 100;
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);
}
});
})
</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> {{rolldice}}d6 vs. {{targetnumber}} </div>
{{#spelldamage}}<div class="sheet-rtrow"><b>Damage:</b> {{computed::spelldamage}} </div>{{/spelldamage}}
{{#MagicPool}}<div class="sheet-rtrow"><b>Magic Pool Used:</b> {{MagicPool}}</div>{{/MagicPool}}
<div class="sheet-rtrow"><b>Casting Test:</b> {{casttest}}</div>
{{#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}}
{{#resistspell}}<div class="sheet-rtrow"><b>{{targetofspell}}:</b> {{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>Magic Pool Used: </span>{{MagicPool}}</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>
<div class="sheet-rtrow"><b>Combat Pool Used:</b> {{combatpool}} </div>
<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}}
{{#reachmod}}<div class="sheet-rtrow">{{reachbonus}} {{computed::reachmod}}</div>{{/reachmod}}
{{#recoil}}<div class="sheet-rtrow"><b>Uncompensated Recoil:</b> {{recoil}} </div>{{/recoil}}
{{#resist}}<div class="sheet-rtrow"><b>{{target}}:</b> {{resist}}</div>{{/resist}}
</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>
<div class="sheet-rtrow"><b>Combat Pool Used:</b> {{combatpool}}</div>
<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-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>
<div class="sheet-rtrow">{{poolname}}: {{pooldice}}</div>
{{#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}}
{{#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}}: {{type}}</div>
<div class="rtrow">Attack {{Power}} vs {{name}} {{armorvalue}}</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>Resistance Test: </span>{{roll}}</div>
<div class="sheet-rtrow"><span>Combat Pool Used: </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-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. {{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> {{roll}}</div>
{{#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>
<div class="sheet-rtrow">Type: {{type}}</div>
{{#info1}}<div class="sheet-rtrow">{{info1}}</div>{{/info1}}
{{#info2}}<div class="sheet-rtrow">{{info2}}</div>{{/info2}}
</div>
</rolltemplate>