mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
10319 lines
568 KiB
HTML
10319 lines
568 KiB
HTML
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' />
|
||
<div class="geninfo">
|
||
<div>
|
||
<div class="SRH2W" data-i18n="general-info">General Information</div>
|
||
<div class="geninfo-item">
|
||
<div class="SRH5" data-i18n="name">Name</div>
|
||
<input class="text-mid" type="text" name="attr_character_name" disabled="true">
|
||
<div></div>
|
||
<div></div>
|
||
<div class="SRH5" data-i18n="sheet-type">Sheet Type:</div>
|
||
<select name="attr_sheettype" class="largeselect" value="Character">
|
||
<option data-i18n="character" value="Character" selected>Character</option>
|
||
<option data-i18n="npc" value="NPC">NPC</option>
|
||
<option data-i18n="critter" value="Critter">Critter</option>
|
||
<option data-i18n="spirit" value="Spirit">Spirit</option>
|
||
<option data-i18n="drone" value="Drone">Drone</option>
|
||
<option data-i18n="vehicle" value="Vehicle">Vehicle</option>
|
||
<option data-i18n="matrix" value="Matrix">Matrix</option>
|
||
<option data-i18n="frame" value="Frame">Frame</option>
|
||
</select>
|
||
<div></div>
|
||
<div class="box text-mid"><a class="button" href="#popup1" data-i18n="import">Import</a><a class="button"
|
||
href="#popup2" data-i18n="export">Export</a></div>
|
||
|
||
</div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character" />
|
||
<div class="metatype-info">
|
||
<div class="SRH5" data-i18n="metatype">MetaType:</div><select name="attr_metatype" class="largeselect">
|
||
<option value="Human" data-i18n="human" selected>Human</option>
|
||
<option value="Dwarf" data-i18n="dwarf">Dwarf</option>
|
||
<option value="Elf" data-i18n="efl">Elf</option>
|
||
<option value="Ork" data-i18n="ork">Ork</option>
|
||
<option value="Troll" data-i18n="troll">Troll</option>
|
||
<option>Cyclops</option>
|
||
<option>Fomori</option>
|
||
<option>Giant</option>
|
||
<option>Minotaur</option>
|
||
<option>Hobgoblin</option>
|
||
<option>Oni</option>
|
||
<option>Ogre</option>
|
||
<option>Satyr</option>
|
||
<option>Menehune</option>
|
||
<option>Koborokuru</option>
|
||
<option>Gnome</option>
|
||
<option>Wakyambi</option>
|
||
<option value="Nightone">Night One</option>
|
||
<option>Dryad</option>
|
||
</select>
|
||
<div class="SRH5" data-i18n="age">Age:</div> <input type="number" name="attr_age">
|
||
<div class="SRH5" data-i18n="height">Height:</div> <input type='number' name="attr_height">
|
||
<div class="SRH5" data-i18n="weight">Weight:</div> <input type='number' name="attr_weight" step='0.01'>
|
||
</div>
|
||
<div class="spirittype-info">
|
||
<div class="SRH5" data-i18n="spirit-type">Spirit Type: </div>
|
||
<select id="spirit-type" name="attr_spirit-type" class="mediumselect2">
|
||
<option value="watcher" data-i18n="watcher">Watcher</option>
|
||
<optgroup data-i18n-label="elementals" label="Elementals">
|
||
<option value="airelemental"data-i18n="air-elemental">Air Elemental</option>
|
||
<option value="waterelemental"data-i18n="water-elemental">Water Elemental</option>
|
||
<option value="earthelemental"data-i18n="earth-elemental">Earth Elemental</option>
|
||
<option value="fireelemental"data-i18n="fire-elemental">Fire Elemental</option>
|
||
</optgroup>
|
||
<optgroup data-i18n-label="spirit-of-man" label="Spirits of Man">
|
||
<option value="cityspirit" data-i18n="city-spirit">City Spirit</option>
|
||
<option value="fieldspirit" data-i18n="field-spirit">Field Spirit</option>
|
||
<option value="hearthspirit" data-i18n="hearth-spirit">Hearth Spirit</option>
|
||
</optgroup>
|
||
<optgroup data-i18n-label="spirit-of-land" label="Spirits of the Land">
|
||
<option value="desertspirit" data-i18n="desert-spirit">Desert Spirit</option>
|
||
<option value="forestspirit" data-i18n="forest-spirit">Forest Spirit</option>
|
||
<option value="mountainspirit" data-i18n="mountain-spirit">Mountain Spirit</option>
|
||
<option value="prairiespirit" data-i18n="prairie-spirit">Prairie Spirit</option>
|
||
</optgroup>
|
||
<optgroup data-i18n-label="spirit-of-sky" label="Spirits of the Sky">
|
||
<option value="mistspirit" data-i18n="mist-spirit">Mist Spirit</option>
|
||
<option value="stormspirit" data-i18n="storm-spirit">Storm Spirit</option>
|
||
<option value="windspirit" data-i18n="wind-spirit">Wind Spirit</option>
|
||
</optgroup>
|
||
<optgroup data-i18n-label="spirit-of-water" label="Spirits of the Waters">
|
||
<option value="lakespirit" data-i18n="lake-spirit">Lake Spirit</option>
|
||
<option value="riverspirit" data-i18n="river-spirit">River Spirit</option>
|
||
<option value="seaspirit" data-i18n="sea-spirit">Sea Spirit</option>
|
||
</optgroup>
|
||
<optgroup data-i18n-label="spirit-of-elements" label="Spirits of the Elements">
|
||
<option value="gnome" data-i18n="gnome">Gnome</option>
|
||
<option value="manitous" data-i18n="manitous">Manitous</option>
|
||
<option value="salamander" data-i18n="salamander">Salamander</option>
|
||
<option value="sylph" data-i18n="sylph">Sylphs</option>
|
||
<option value="ancestor" data-i18n="ancestor">Ancestor</option>
|
||
</optgroup>
|
||
</select>
|
||
<div class="SRH5" data-i18n="force">Force:</div>
|
||
<input type="number" name="attr_force">
|
||
</div>
|
||
</div>
|
||
<div><img src="https://raw.githubusercontent.com/bahornbeck/img/master/images/srlogo.png"
|
||
alt="Shadowrun Third Edition"></div>
|
||
|
||
</div>
|
||
|
||
|
||
<div class="hidden-constants">
|
||
<input type="hidden" name="attr_carrying-weight" value=0>
|
||
<input type="hidden" name="attr_carrying-max" value=0>
|
||
<input type="hidden" name="attr_carrying-stun" value=0>
|
||
<input type="hidden" name="attr_carrying-wound" value=0>
|
||
<input type="hidden" name="attr_rangedTN" value=0>
|
||
<input type="hidden" name="attr_meleeTN" value=0>
|
||
<input type="hidden" name="attr_meelereach" value=0>
|
||
<input type="hidden" name="attr_api-newsheet" value=0>
|
||
<input type="hidden" name="attr_stun_pen" value=0>
|
||
<input type="hidden" name="attr_wound_pen" value=0>
|
||
<input type="hidden" name="attr_meleevizTN" value=0>
|
||
<input type="hidden" name="attr_rangedvizTN" value=0>
|
||
<input type="hidden" name="attr_iconstatuscode" value=0>
|
||
<input type='hidden' name='attr_gyro-on' value=0 />
|
||
<input type='hidden' name='attr_armor-on' value=0 />
|
||
<input type='hidden' name='attr_wp-char' value="(@{stun_pen} + @{wound_pen})" />
|
||
<input type='hidden' name='attr_wp-matrix' value="(@{stun_pen} + @{wound_pen} + @{matrix-penalty})" />
|
||
<input type='hidden' name='attr_wp-vehicle'
|
||
value="(@{vehicle-penalty} +@{rccommand-penalty} + @{rcsimsense-penalty} +@{rcsystem-penalty})" />
|
||
<button type="action" name="act_init-aug" class="d6-button" title="Augmented Initiative">L</button>
|
||
<button type="action" name="act_endturn" class="d6-button" title="End Combat Turn">L</button>
|
||
<button type="action" name="act_resistroll" class="d6-button" title="Resist Roll">L</button>
|
||
<button type="action" name="act_resistspell" class="d6-button" title="Resist Spell">L</button>
|
||
<button type="action" name="act_checkaoe" class="d6-button" title="Check AoE result">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_missed" class="d6-button" title="attack missed">L</button>
|
||
<button type="action" name="act_spellblocked" class="d6-button" title="spell fully blocked">L</button>
|
||
<button type="action" name="act_meleedefend" class="d6-button" title="melee defense test">L</button>
|
||
<button type="action" name="act_meleedefendfull" class="d6-button" title="melee full-defense test">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' value="Character" />
|
||
<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"
|
||
data-i18n="attributes">Attributes</button>
|
||
<button class="skillsbutton" type="action" name="act_skills" title="Active and Knowledge Skills"
|
||
data-i18n="skills">Skills</button>
|
||
<button class="magicbutton" type="action" name="act_magic"
|
||
title="Magic Skills, Spells, Fetishes, Initiation and Adept Powers" data-i18n="magic">Magic</button>
|
||
<button class="adeptbutton" type="action" name="act_magic"
|
||
title="Magic Skills, Spells, Fetishes, Initiation and Adept Powers" data-i18n="adept">Adept</button>
|
||
<button class="decksbutton" type="action" name="act_decks"
|
||
title="Computer Skills, Cyberdeck configuration and Utilities" data-i18n="decking">Decking</button>
|
||
<button class="gearbutton" type="action" name="act_gear" title="Gear, Vehicles and Nuyen"
|
||
data-i18n="gear">Gear</button>
|
||
<button class="riggerbutton" type="action" name="act_rigger"
|
||
title="VCR, Remote Control Deck and Electronic Warfare" data-i18n="rigger">Rigger</button>
|
||
<button class="combatbutton" type="action" name="act_combat"
|
||
title="Combat Skills and Weapons for Ranged and Melee" data-i18n="combat">Combat</button>
|
||
<button class="cyberwarebutton" type="action" name="act_cyberware" title="Cyberware, Bioware and Nanotech"
|
||
data-i18n="cyberware">Cyberware</button>
|
||
<button class="contactsbutton" type="action" name="act_contacts" title="Contacts and Lifestyle Notes"
|
||
data-i18n="contacts-lifesytle">Contacts/Lifestyle</button>
|
||
<button class="karmabutton" type="action" name="act_karma" title="Karma and Karam expenditures"
|
||
data-i18n="karma">Karma</button>
|
||
</div>
|
||
<div class="critters-only critters-buttons">
|
||
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value="character" />
|
||
<button class="charbutton" type="action" name="act_character" title="Character Attributes and Karma"
|
||
data-i18n="attributes">Attributes</button>
|
||
<button class="combatbutton" type="action" name="act_combat"
|
||
title="Combat Skills and Weapons for Ranged and Melee" data-i18n="combat">Combat</button>
|
||
<button class="critters-powers-button" type="action" name="act_critter-powers"
|
||
title="Critter Powers and Weaknesses" data-i18n="powers">Powers</button>
|
||
<button class="magicbutton" type="action" name="act_magic" title="Critter Magic"
|
||
data-i18n="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"
|
||
data-i18n="attributes">Attributes</button>
|
||
<button class="critters-powers-button" type="action" name="act_critter-powers"
|
||
title="Spirit Powers and Weaknesses" data-i18n="powers">Powers</button>
|
||
<button class="magicbutton" type="action" name="act_magic" title="Spirit Magic" data-i18n="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" data-i18n="condition-monitor">Condition Monitor</div>
|
||
<br>
|
||
<div class="conditionstatus">
|
||
<div></div>
|
||
<div data-i18n="uninjured">Uninjured</div>
|
||
<div data-i18n="light-stun">Light Stun</div>
|
||
<div data-i18n="moderate-stun">Moderate Stun</div>
|
||
<div data-i18n="serious-stun">Serious Stun</div>
|
||
<div data-i18n="unconscious">Unconscious</div>
|
||
<div data-i18n="stun">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 data-i18n="physical">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 data-i18n="uninjured">Uninjured</div>
|
||
<div data-i18n="light-wound">Light Wound</div>
|
||
<div data-i18n="moderate-wound">Moderate Wound</div>
|
||
<div data-i18n="serious-wound">Serious Wound</div>
|
||
<div data-i18n="deadly-wound">Deadly Wound</div>
|
||
<div></div>
|
||
|
||
</div>
|
||
<div><br></div>
|
||
</div>
|
||
<div class="dicepool">
|
||
<input type="hidden" name="attr_combatpool-used" value=0 />
|
||
<input type="hidden" name="attr_spellpool-used" value=0 />
|
||
<input type='hidden' name='attr_spellpool-used-total' value=0 />
|
||
<input type="hidden" name="attr_hackingpool-used" value=0 />
|
||
<input type="hidden" name="attr_hackingpool-used-total" value=0 />
|
||
<input type="hidden" name="attr_controlpool-used" value=0 />
|
||
<input type="hidden" name="attr_astralpool-used" value=0 />
|
||
<input type="hidden" name="attr_taskpool-used" value=0 />
|
||
<div class="SRH3" data-i18n="dice-pools">Dice Pools</div>
|
||
<div data-i18n="maxiumum-abreviation">Max</div>
|
||
<div data-i18n="used">Used</div>
|
||
<div data-i18n="combat-pool"> Combat Pool:</div>
|
||
<div><span name="attr_combatpool"></span></div>
|
||
<div><input type='hidden' class='combatpool-over' name='attr_combatpool-over' /><span
|
||
class="combatpool-over" name="attr_combatpool-used"></span></div>
|
||
<div data-i18n="spell-pool"> Spell Pool:</div>
|
||
<div><span type="number" name="attr_spellpool"></span> </div>
|
||
<div><input type='hidden' class='spellpool-over' name='attr_spellpool-over' /><span class="spellpool-over"
|
||
name="attr_spellpool-used-total"></span></div>
|
||
<div data-i18n="hacking-pool"> Hacking Pool:</div>
|
||
<div><span type="number" name="attr_hackingpool"></span> </div>
|
||
<div><input type='hidden' class='hackingpool-over' name='attr_hackingpool-over' /><span
|
||
class="hackingpool-over" name="attr_hackingpool-used-total"></span></div>
|
||
<div data-i18n="control-pool"> Control Pool:</div>
|
||
<div><span type="number" name="attr_controlpool"></span> </div>
|
||
<div><input type='hidden' class='controlpool-over' name='attr_controlpool-over' /><span
|
||
class="controlpool-over" name="attr_controlpool-used"></span></div>
|
||
<div data-i18n="astral-pool"> Astral Pool:</div>
|
||
<div><span type="number" name="attr_astralpool"></span> </div>
|
||
<div><input type='hidden' class='astralpool-over' name='attr_astralpool-over' /><span
|
||
class="astralpool-over" name="attr_astralpool-used"></span></div>
|
||
<div data-i18n="task-pool"> Task Pool:</div>
|
||
<div><span type="number" name="attr_taskpool"></span> </div>
|
||
<div><input type='hidden' class='taskpool-over' name='attr_taskpool-over' /><span class="taskpool-over"
|
||
name="attr_taskpool-used"></span></div>
|
||
</div>
|
||
</div>
|
||
<div class="conditionstatus2">
|
||
<div data-i18n="physical-damage-overflow">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" data-i18n="initiative-natural">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" data-i18n="initiative-augmented">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" data-i18n="initiative-physical">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" data-i18n="initiative-astral">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" data-i18n="end-turn">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"> <span data-i18n="body-abbreviation">B:</span> <span class="number-span"
|
||
name="attr_body_max"></span></div>
|
||
<div class="text-mid"> <span data-i18n="quickness-abbreviation">Q:</span> <span class="number-span"
|
||
name="attr_quickness_max"></span></div>
|
||
<div class="text-mid"> <span data-i18n="strength-abbreviation">S:</span> <span class="number-span"
|
||
name="attr_strength_max"></span></div>
|
||
<div class="text-mid"> <span data-i18n="charisma-abbreviation">C:</span> <span class="number-span"
|
||
name="attr_charisma_max"></span></div>
|
||
<div class="text-mid"> <span data-i18n="intelligence-abbreviation">I:</span> <span class="number-span"
|
||
name="attr_intelligence_max"></span></div>
|
||
<div class="text-mid"> <span data-i18n="willpower-abbreviation">W:</span> <span class="number-span"
|
||
name="attr_willpower_max"></span></div>
|
||
<div class="text-mid"> <span data-i18n="reaction-abbreviation">R:</span> <span class="number-span"
|
||
name="attr_reaction_max"></span></div>
|
||
</div>
|
||
</div>
|
||
<div class="combat-always-visible">
|
||
<div class="SRH3" data-i18n="combat-conditions">Combat conditions</div>
|
||
<div class="combat-modifiers-total">
|
||
<div class="text-mid"><span data-i18n="ranged-modifiers">Ranged Modifiers:</span><span class="number-span"
|
||
name="attr_rangedTN"></span></div>
|
||
<div class="text-mid"><span data-i18n="melee-modifiers">Melee Modifiers:</span> <span class="number-span"
|
||
name="attr_meleeTN"></span></div>
|
||
<div class="text-mid"><span data-i18n="rounds-fired">Rounds Fired:</span> <span class="number-span"
|
||
name="attr_rounds-phase" value=0></span></div>
|
||
<div class="text-mid"><span data-i18n="dodge">Dodge</span><button type="action" name="act_dodge"
|
||
class="d6-button" title="Dodge Attack" id="dodge">L</button></div>
|
||
<div class="text-mid"><span data-i18n="ballistic">Ballistic:</span> <span class="number-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 class="text-mid"><span data-i18n="impact">Impact:</span> <span class="number-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"
|
||
data-i18n="show-manual-gunnery">Show Manual Gunnery</button><span class="number-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"
|
||
data-i18n="hide-manual-gunnery">Hide Manual Gunnery</button><span class="number-span"
|
||
name="attr_manualgunneryTN"></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="combat-conditions">
|
||
<div class="text-mid" data-i18n="visibility">Visibility</div>
|
||
<div class="text-mid" data-i18n="vision-enhacement">Vision Enhacement</div>
|
||
<div class="text-mid" data-i18n="target-cover">Target Cover</div>
|
||
<div class="text-mid" data-i18n="movement">Movement</div>
|
||
<div data-i18n="dual-wield">Dual Wield</div>
|
||
<div data-i18n="called-shot">Called Shot</div>
|
||
<div data-i18n="aim-actions">Aim Actions</div>
|
||
<div data-i18n="melee-foes">Melee Foes</div>
|
||
<div data-i18n="melee-friends">Melee Friends</div>
|
||
<div class="text-mid" data-i18n="targets">Targets</div>
|
||
<div class="text-mid" data-i18n="position">Position</div>
|
||
<div data-i18n="miscellaneous-modifiers">Misc Modifiers</div>
|
||
<div class="center-checkbox"><select name="attr_visibility" class="mediumselect2">
|
||
<option data-i18n="normal" value=0 selected>Normal</option>
|
||
<option data-i18n="full-dark" value="@{fulldark}">Full Dark</option>
|
||
<option data-i18n="partial-light" value="@{partiallight}">Partail Light</option>
|
||
<option data-i18n="minimal-light" value="@{minlight}">Minimal Light</option>
|
||
<option data-i18n="glare" value="@{glare}">Glare</option>
|
||
<option data-i18n="mist" value="@{mist}">Mist</option>
|
||
<option data-i18n="light-smoke-rain" value="@{lightsmoke}">Light Smoke/Rain</option>
|
||
<option data-i18n="heavy-smoke-rain" value="@{fullsmoke}">Heavy Smoke/Rain</option>
|
||
<option data-i18n="thermal-smoke" value="@{thermalsmoke}">Thermal Smoke</option>
|
||
</select>
|
||
</div>
|
||
<div><select name="attr_visionenhancement" class="mediumselect2">
|
||
<option data-i18n="none" value="None" selected>None</option>
|
||
<option value="LowLight" data-i18n="low-light">LowLight</option>
|
||
<option value="Thermal" data-i18n="thermal">Thermal</option>
|
||
<option value="Cybernetic" data-i18n="cybernetic">Cybernetic</option>
|
||
<option value="Ultrasound" data-i18n="ultrasound">Ultrasound</option>
|
||
</select></div>
|
||
<div><select name="attr_cover" class="mediumselect2">
|
||
<optgroup data-i18n-label="standard" label="Standard">
|
||
<option value=0 SELECTED>None</option>
|
||
<option data-i18n="partial" value=4>Partial</option>
|
||
<option data-i18n="blind-fire" value=8>Blind Fire</option>
|
||
<optgroup data-i18n-label="gm-choice" label="GM's Choice">
|
||
<option value=1>+1</option>
|
||
<option value=2>+2</option>
|
||
<option value=3>+3</option>
|
||
<option value=4>+4</option>
|
||
<option value=5>+5</option>
|
||
<option value=6>+6</option>
|
||
</select></div>
|
||
<div><select name="attr_move" title="Movement actions taken" class="mediumselect2">
|
||
<option selected value=0 data-i18n="not-moving">not moving</option>
|
||
<option value=1 data-i18n="walk">walk</option>
|
||
<option value=2 data-i18n="walk-difficult-ground">walk (difficult ground)</option>
|
||
<option value=4 data-i18n="run">run</option>
|
||
<option value=6 data-i18n="run-difficult-ground">run (difficult ground)</option>s
|
||
</select></div>
|
||
|
||
<div class="center-checkbox"><input type='checkbox' name="attr_dualwield" value='2' title="2 Guns Equipped">
|
||
</div>
|
||
<div class="center-checkbox"><input type='checkbox' name="attr_calledshot" value='4' title="Called Shot">
|
||
</div>
|
||
<div class="center-checkbox"><input type='number' name="attr_aim" value="0" min="0"
|
||
title="Aim Actions Taken"></div>
|
||
<div><input type='number' name="attr_enemies" max="4" min="0" value="0" title="Enemies in Melee with you">
|
||
</div>
|
||
<div><input type='number' name="attr_friends" max="4" min="0" value="0" title="Friends in Melee with you">
|
||
</div>
|
||
<div><input type='number' name="attr_meleetargets" value="0" min="0"
|
||
title="How many targets are you attacking at one time"></div>
|
||
<div><select name="attr_position" title="Position of you vs. target in Melee" class="mediumselect2">
|
||
<option data-i18n="none" value=0 selected>None</option>
|
||
<option data-i18n="superior-position" value=1>Superior Position</option>
|
||
<option data-i18n="target-prone" 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 data-i18n="relative-motion">Relative Motion</div>
|
||
<div data-i18n="relative-speed">Relative Speed</div>
|
||
<div data-i18n="maneuver-score">Maneuver Score</div>
|
||
<div data-i18n="vehicle-damage">Vehicle Damage</div>
|
||
<div data-i18n="Weapon-mount">Weapon Mount</div>
|
||
<div data-i18n="terrain">Terrain</div>
|
||
<div data-i18n="target-type">Target Type</div>
|
||
<div><select name="attr_gunnerymotion" title="motion relative to target" class="mediumselect2">
|
||
<option value=0 selected>None</option>
|
||
<option data-i18n="towards" value=-1>Towards</option>
|
||
<option data-i18n="away" value=1>Away</option>
|
||
</select></div>
|
||
<div><select name="attr_gunneryspeed" title="speed relative to target" class="mediumselect2">
|
||
<option value=0 selected> = </option>
|
||
<option value=2> <= 2X</option>
|
||
<option value=4> <= 3X</option>
|
||
<option value=6> > 3X</option>
|
||
</select></div>
|
||
<div><select name="attr_gunnerymaneuver" title="Maneuver score difference" class="mediumselect2">
|
||
<option data-i18n="none" value=0 selected>None</option>
|
||
<option data-i18n="attacker-greater" value=-1>Attacker Greaty by 10</option>
|
||
<option data-i18n="target-greater" value=1>Target Greater by 10</option>
|
||
</select></div>
|
||
<div><select name="attr_gunneryvehicledmg" title="Vehicle Damaged Modifiers" class="mediumselect2">
|
||
<option data-i18n="none" value=0 selected>None</option>
|
||
<option data-i18n="light-damage-abbreviation" value=1>L</option>
|
||
<option data-i18n="moderate-damage-abbreviation" value=2>M</option>
|
||
<option data-i18n="serious-damage-abbreviation" value=3>S</option>
|
||
</select></div>
|
||
<div><select name="attr_gunnerymount" title="Is weapon mounted?" class="mediumselect2">
|
||
<option data-i18n="unmounted" value=2>Unmounted</option>
|
||
<option data-i18n="mounted" value=0 selected>mounted</option>
|
||
</select></div>
|
||
<div><select name="attr_gunneryterrain" title="Moving through terrain" class="mediumselect2">
|
||
<option data-i18n="normal" value=0 selected>Normal</option>
|
||
<option data-i18n="restricted" value=2>Restricted</option>
|
||
<option data-i18n="tight" value=4>Tight</option>
|
||
<option data-i18n="combat-zone" value=2>Combat Zone</option>
|
||
</select></div>
|
||
<div><select name="attr_gunnerytargettype" title="Target type/size" class="mediumselect2">
|
||
<option data-i18n="metahuman-sized" value=0 selected>Metahuman sized</option>
|
||
<option data-i18n="small-critter" value=1>Small critter</option>
|
||
<option data-i18n="large-critter" value=-1>Large critter</option>
|
||
<option data-i18n="small-drone" value=1>Small drone</option>
|
||
<option data-i18n="motorcyle" value=0>Motorcyle</option>
|
||
<option data-i18n="automobile" value=-1>Automobile</option>
|
||
<option data-i18n="limo-Light-truck" value=-1>Limo/Light Truck</option>
|
||
<option data-i18n="heavy-truck-trailer" value=-3>Heavy Truck/Trailer</option>
|
||
<option data-i18n="boat" value=-1>Boat</option>
|
||
<option data-i18n="yacht" value=-3>Yacht</option>
|
||
<option data-i18n="freighter-tanker" value=-8>Freighter/Tanker</option>
|
||
<option data-i18n="ultralight-glider" value=0>Ultralight glider</option>
|
||
<option data-i18n="fixed-wing" value=-2>Fixed Wing</option>
|
||
<option data-i18n="commerical-airliner" value=-6>Commerical Airliner</option>
|
||
<option data-i18n="helicopter" value=-2>Helicopter</option>
|
||
<option data-i18n="zepplin-blimp" value=-6>Zepplin/Blimp</option>
|
||
<option data-i18n="lav" value=-3>LAV</option>
|
||
<option data-i18n="military-ground-vehicle" 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" data-i18n="attributes">Attributes</div>
|
||
<div class="char-attributes">
|
||
<header class="table-top-left" data-i18n="attribute">Attribute</header>
|
||
<header class="table-top-mid" data-i18n="base">Base</header>
|
||
<header class="table-top-mid" data-i18n="mods">Mods</header>
|
||
<header class="table-top-right" data-i18n="final">Final</header>
|
||
<header class="table-item-left" data-i18n="body">Body</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_body" value=1 min=1 style='width:39px;' />
|
||
<div><button data-i18n-title="body-test-natural" 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 data-i18n-title="body-test-aug" 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" data-i18n="quickness">Quickness</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_quickness" value=1 min=1 style='width:39px;' />
|
||
<div><button data-i18n-title="quickness-test-natural" 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 data-i18n-title="quickness-test-natural" 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" data-i18n="strength">Strength</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_strength" value=1 min=1 style='width:39px;' />
|
||
<div><button data-i18n-title="strength-test-natural" 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 data-i18n-title="strength-test-natural" 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" data-i18n="charisma">Charisma</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_Charisma" value=1 min=1 style='width:39px;' />
|
||
<div><button data-i18n-title="charisma-test-natural" 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 data-i18n-title="charisma-test-natural" 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" data-i18n="intelligence">Intelligence</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_intelligence" value=1 min=1 style='width:39px;' />
|
||
<div><button data-i18n-title="intelligence-test-natural"
|
||
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 data-i18n-title="intelligence-test-natural" 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" data-i18n="willpower">Willpower</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_willpower" value=1 min=1 style='width:39px;' />
|
||
<div><button data-i18n-title="willpower-test-natural" 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 data-i18n-title="willpower-test-natural" 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" data-i18n="essence">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 data-i18n-title="essence-test" 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" data-i18n="magic">Magic</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_magic" value=0 style='width:39px;' />
|
||
<div><button data-i18n-title="magic-test" title="Magic 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" data-i18n="attributes">Attributes</div>
|
||
<div class="critter-attributes">
|
||
<header class="table-top-left" data-i18n="attribute">Attribute</header>
|
||
<header class="table-top-right" data-i18n="level">Level</header>
|
||
<header class="table-item-left" data-i18n="perception">Perception</header>
|
||
<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" data-i18n-title="perception-test"
|
||
title="Perception Test" id="perception">L</button>
|
||
</div>
|
||
</div>
|
||
<header class="table-item-left" data-i18n="reach">Reach</header>
|
||
<div class="table-item">
|
||
<div class="sidebyside"><input type="number" name="attr_meleereach" value=0 />
|
||
<div></div>
|
||
</div>
|
||
</div>
|
||
<header class="table-item-left" data-i18n="force">Force</header>
|
||
<div class="table-item">
|
||
<div class="sidebyside"><input type="number" name="attr_force" value=0 min=0 />
|
||
<div></div>
|
||
</div>
|
||
</div>
|
||
<header class="table-item-left" data-i18n="attacks">Attacks</header>
|
||
<div class="table-item">
|
||
<div class="critter-attack">
|
||
<input type="number" name="attr_attackpower" value=0 min=0 />
|
||
<select name="attr_attackdamage" class="mediumselect2">
|
||
<option data-i18n="light-damage-abbreviation" value="L">L</option>
|
||
<option data-i18n="moderate-damage-abbreviation" value="M" SELECTED>M</option>
|
||
<option data-i18n="serious-damage-abbreviation" value="S">S</option>
|
||
<option data-i18n="deadly-damage-abbreviation" value="D">D</option>
|
||
<option data-i18n="light-stun-abbreviation" value="L(stun)">L(s)</option>
|
||
<option data-i18n="moderate-stun-abbreviation" value="M(stun)">M(s)</option>
|
||
<option data-i18n="serious-stun-abbreviation" value="S(stun)">S(s)</option>
|
||
<option data-i18n="deadly-stun-abbreviation" value="D(stun)">D(s)</option>
|
||
<option></option>
|
||
</select>
|
||
<button type="action" name="act_melee" id="critterattack" class="d6-button"
|
||
title="Attack">L</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH3" data-i18n="reaction-init-speed">Reaction, Init & Speed</div>
|
||
<div class="reaction">
|
||
<div class="table-top-left"></div>
|
||
<div class="table-top-mid" data-i18n="natural">Natural</div>
|
||
<div class="table-top-mid" data-i18n="mods">Mods</div>
|
||
<div class="table-top-right" data-i18n="final">Final</div>
|
||
<header class="table-item-left" data-i18n="reaction">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" data-i18n="initiative">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" data-i18n="physical">Physical</div>
|
||
<div class="table-top-right" data-i18n="astral">Astral</div>
|
||
<header class="table-item-left" data-i18n="reaction">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" data-i18n="initiative">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" data-i18n="walking-rate">Walking Rate:</header>
|
||
<div class="table-item"><span class="numberspan" name="attr_walk"></span></div>
|
||
<div class="table-item" data-i18n="meters-per-combat-turn">meters per combat turn</div>
|
||
<header class="table-item-left" data-i18n="running-rate">Running Rate:</header>
|
||
<div class="table-item"><span class="numberspan" name="attr_run"></span></div>
|
||
<div class="table-item" data-i18n="meters-per-combat-turn">meters per combat turn</div>
|
||
</div>
|
||
|
||
|
||
<div class="SRH3">Dice Pools</div>
|
||
<div class="dice-pools">
|
||
<header class="table-top-left" data-i18n="pool">Pool</header>
|
||
<header class="table-top-mid" data-i18n="calculated">Calculated</header>
|
||
<header class="table-top-mid" data-i18n="mods">Mods</header>
|
||
<header class="table-top-right" data-i18n="final">Final</header>
|
||
<div class="table-item-left" data-i18n="combat">Combat</div>
|
||
<div class="table-item"><span name="attr_combatpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_combatpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_combatpool"></span></div>
|
||
<div class="table-item-left" data-i18n="spell">Spell</div>
|
||
<div class="table-item"><span name="attr_spellpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_spellpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_spellpool"></span></div>
|
||
<div class="table-item-left" data-i18n="hacking">Hacking</div>
|
||
<div class="table-item"><span name="attr_hackingpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_hackingpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_hackingpool"></span></div>
|
||
<div class="table-item-left" data-i18n="control">Control</div>
|
||
<div class="table-item"><span name="attr_controlpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_controlpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_controlpool"></span></div>
|
||
<div class="table-item-left" data-i18n="astral">Astral</div>
|
||
<div class="table-item"><span name="attr_astralpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_astralpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_astralpool"></span></div>
|
||
<div class="table-item-left" data-i18n="task">Task</div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"><input type="number" name="attr_taskpool" value=0></div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="npc-chars-only">
|
||
<div class="SRH3">Karma</div>
|
||
<div class="karma-pool">
|
||
<header class="table-top-left" data-i18n="karma-pool">Karma Pool:</header>
|
||
<div class="table-top-right karma-max">
|
||
<input type="number" name="attr_karma-pool" value=0>
|
||
/
|
||
<input type="number" name="attr_karma-pool-used" value=0>
|
||
</div>
|
||
<header class="table-item-left" data-i18n="good-karma">Good Karma:</header>
|
||
<div class="table-item"><input type="number" name="attr_karma-good" value=0 /></div>
|
||
<header class="table-item-left" data-i18n="professional-rating">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" data-i18n="skills-edges-flaws">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" data-i18n="name">Name</header>
|
||
<header class="table-top-mid" data-i18n="rating">Rating</header>
|
||
<header class="table-top-mid" data-i18n="pool">Pool</header>
|
||
<header class="table-top-right" data-i18n="roll">Roll</header>
|
||
</div>
|
||
<fieldset class="repeating_skills">
|
||
<div class="skills-table">
|
||
<div class="table-item-left"><input type="text" name="attr_skillname" class="myweapontxt"></div>
|
||
<div class="table-item"><input type="number" name="attr_skillrating" min=1 value=1></div>
|
||
<div class="table-item"><select name="attr_pool" class="mediumselect2">
|
||
<option SELECTED value="none">None</option>
|
||
<option data-i18n="combat" value="combat">Combat</option>
|
||
<option data-i18n="task" value="task">Task</option>
|
||
<option data-i18n="hacking" value="hacking">Hacking</option>
|
||
<option data-i18n="control" value="control">Control</option>
|
||
<option data-i18n="spell" value="spell">Spell</option>
|
||
<option data-i18n="astral" value="astral">Astral</option>
|
||
</select></div>
|
||
<div class="table-item"><button class="d6-button" type="action" name="act_skills">L</button></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div class="text-center">
|
||
<div class="SRH4">Edges</div>
|
||
<div class="edges-table">
|
||
<header class="table-top-left" data-i18n="type">Type</header>
|
||
<header class="table-top-right" data-i18n="rating">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" data-i18n="type">Type</header>
|
||
<header class="table-top-right" data-i18n="rating">Rating</header>
|
||
</div>
|
||
<fieldset class='repeating_flaws'>
|
||
<div class="edges-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name"></div>
|
||
<div class="table-item"><input type="number" name="attr_rating"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class='sheet-magic'>
|
||
<!-- Magic Tab -->
|
||
<input type='hidden' class='magictype' name='attr_magic-type' />
|
||
<input type='hidden' name='attr_spelldefmin' value=0 />
|
||
<input type='hidden' name='attr_sorcery-used' value=0 />
|
||
<input type='hidden' name='attr_sorcery-used-total' value=0 />
|
||
<input type='hidden' name='attr_conjuring-used' value=0 />
|
||
<input type='hidden' name='attr_conjuring-used' value=0 />
|
||
<input type='hidden' name='attr_spelldefensedice-used' value=0 />
|
||
<input type='hidden' class='astralattributes-switch' name='attr_astralattributesswitch' value="show" />
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="spells-status">
|
||
<div class="spells-status-tracking">
|
||
<div></div>
|
||
<div data-i18n="stacked">Stacked</div>
|
||
<div data-i18n="sustained">Sustained</div>
|
||
<div></div>
|
||
<div data-i18n="max">Max</div>
|
||
<div data-i18n="used">Used</div>
|
||
<div></div>
|
||
<div data-i18n="max">Max</div>
|
||
<div data-i18n="defense">Defense</div>
|
||
<div data-i18n="used">Used</div>
|
||
<div></div>
|
||
<div data-i18n="max">Max</div>
|
||
<div data-i18n="defense">Defense</div>
|
||
<div data-i18n="used">Used</div>
|
||
<div></div>
|
||
<div data-i18n="max">Max</div>
|
||
<div data-i18n="used">Used</div>
|
||
<div data-i18n="spells">Spells</div>
|
||
<div><input type="number" name='attr_spellstack' class="smallnumber" min=0 value=0></div>
|
||
<div><input type="number" name='attr_spellsus' min=0 value=0></div>
|
||
<div data-i18n="spell-defense">Spell Defense</div>
|
||
<div><input type="number" name='attr_spelldefensedice' min=0 value=0></div>
|
||
<div><span name="attr_spelldefensedice-used"></span></div>
|
||
<div data-i18n="sorcery">Sorcery</div>
|
||
<div><span class="sorcery-over" name="attr_sorcery"></span></div>
|
||
<div><input type="number" name="attr_sorcery-defense" min=0 value=0></input></div>
|
||
<div>
|
||
<input type='hidden' class='sorcery-over' name='attr_sorcery-over' />
|
||
<span class="sorcery-over" name="attr_sorcery-used-total"></span>
|
||
</div>
|
||
<div data-i18n="spell-pool">Spell Pool</div>
|
||
<div><span name="attr_spellpool"></span></div>
|
||
<div><input type="number" name="attr_spellpool-defense" min=0 value=0></input></div>
|
||
<div>
|
||
<input type='hidden' class='spellpool-over' name='attr_spellpool-over' />
|
||
<span class="spellpool-over" name="attr_spellpool-used-total"></span>
|
||
</div>
|
||
<div data-i18n="conjuring">Conjuring</div>
|
||
<div><span name="attr_conjuring"></span></div>
|
||
<div><span name="attr_conjuring-used"></span></div>
|
||
|
||
</div>
|
||
<div class="spells-status-buttons">
|
||
<div title="Miscelaneous Modifiers for Spell Casting and Conjuring" data-i18n="misc-modifiers">Misc.
|
||
Modifiers: </div>
|
||
<input type="number" name='attr_spellmisc' min=0 value=0>
|
||
<div data-i18n="defend">Defend: </div><button title="Spell Defense" type="action" class="d6-button"
|
||
name='act_spelldefense' id="spelldefense">L</button>
|
||
<div data-i18n="dispell">Dispell: </div><button title="Cancel an existing spell" type="action"
|
||
class="d6-button" name='act_dispell' id="dispelling">L</button>
|
||
<div data-i18n="summon">Summon: </div><button title="Summon a Spirit or Element" type="action"
|
||
class="d6-button" name='act_conjure' id="summoning">L</button>
|
||
<div data-i18n="banish">Banish: </div><button title="Banish a Spirit or Element" type="action"
|
||
class="d6-button" name='act_conjure' id="banishing">L</button>
|
||
<div data-i18n="control">Control: </div><button title="Take Control of a Spirit or Element" type="action"
|
||
class="d6-button" name='act_conjure' id="spiritcontrol">L</button>
|
||
</div>
|
||
</div>
|
||
<div class="spells-spirit-status">
|
||
<div data-i18n="spells-stacked">Spells Stacked:</div> <input type="number" name='attr_spellstack'
|
||
class="smallnumber" min=0 value=0>
|
||
<div data-i18n="spells-sustained">Spells Sustained:</div> <input type="number" name='attr_spellsus' min=0
|
||
value=0>
|
||
<div title="Miscelaneous Modifiers for Spell Casting and Conjuring" data-i18n="misc-modifiers">Misc. Modifiers:
|
||
</div> <input type="number" name='attr_spellmisc' min=0 value=0>
|
||
<div data-i18n="dispell">Dispell: </div><button title="Cancel an existing spell" type="action" class="d6-button"
|
||
name='act_dispell' id="dispelling">L</button>
|
||
<div data-i18n="resist-banish">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>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="magic-tabs">
|
||
<input type='hidden' class='magictype' name='attr_magic-type' />
|
||
<input type="hidden" class="magic-tabs-switch" name="attr_magictab" value="sorcery">
|
||
<button class="magic-tabs-astral" type="action" name="act_astral-tab" data-i8n="astral-uppercase" data-i18n-title="astral-state-combat" title="Astral State and Combat">ASTRAL</button>
|
||
<button class="magic-tabs-skills" type="action" name="act_sorcery-tab" data-i8n="skills-uppercase" data-i18n-title="magic-skills-configuration" title="Magic Skills and Configuration">SKILLS</button>
|
||
<button class="magic-tabs-spells" type="action" name="act_spells-tab">SPELLS</button>
|
||
<button class="magic-tabs-conjuring" type="action" name="act_conjuring-tab">CONJURING</button>
|
||
<div class="adept-only">
|
||
<button class="magic-tabs-adept" type="action" name="act_adept-tab" data-i8n="adept-uppercase"
|
||
data-i18n-title="adept-powers" title="Adept Powers">ADEPT</button>
|
||
</div>
|
||
<button class="magic-tabs-foci" type="action" name="act_foci-tab" data-i8n="foci-uppercase">FOCI</button>
|
||
<button class="magic-tabs-initiate" type="action" name="act_initiate-tab"
|
||
data-i8n="initiate-uppercase">INITIATE</button>
|
||
<button class="magic-tabs-geas" type="action" name="act_geas-tab" data-i8n="geas-uppercase">GAES</button>
|
||
<button class="magic-tabs-totem" type="action" name="act_totem-tab" data-i8n="totem-uppercase">TOTEM</button>
|
||
<div class="tabs-empty"></div>
|
||
</div>
|
||
<div class="spirit-magic-tabs">
|
||
<input type='hidden' class='magictype' name='attr_magic-type' />
|
||
<input type="hidden" class="magic-tabs-switch" name="attr_magictab" value="astral">
|
||
<button class="magic-tabs-astral" type="action" name="act_astral-tab" data-i8n="astral-uppercase" data-i18n-title="astral-state-combat" title="Astral State and Combat">ASTRAL</button>
|
||
<button class="magic-tabs-spells" type="action" name="act_spells-tab">SPELLS</button>
|
||
<div class="tabs-empty"></div>
|
||
</div>
|
||
<input type="hidden" class="magic-tabs-switch" name="attr_magictab" value="sorcery">
|
||
<input type="hidden" name="attr_astralreaction" value=0>
|
||
<div class="astralattributes">
|
||
<br>
|
||
<div class="astralspace">
|
||
<div><b>Astral State:</div>
|
||
<select name="attr_astralstate" class="mediumselect2">
|
||
<option data-i18n="physical" value="physical" selected>Physical</option>
|
||
<option data-i18n="astral-perception" value="astral-perception">Astral Perception</option>
|
||
<option data-i18n="astral-projection" value="astral-projection">Astral Projection</option>
|
||
</select>
|
||
<header class="text-mid" data-i18n="astral-reaction">Astral Reaction:</header>
|
||
<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>
|
||
<header class="text-mid" data-i18n="astral-initiative">Astral Initiative:</header>
|
||
<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">
|
||
<header data-i18n="astral-combat">Astral Combat:</header>
|
||
<div class="text-mid"><button class="attack-dice" id="astralattack" type="action" name="act_melee"
|
||
title="Astral Combat"></button></div>
|
||
<div data-i18n="weapon-focus">Weapon Focus:</div>
|
||
<div> <span name="attr_weaponfocus-name"></span></div>
|
||
<div data-i18n="enabled">Enabled</div><input type="checkbox" name="attr_weaponfocus-equipped" checked>
|
||
<div></div>
|
||
<div data-i18n="force">Force:</div>
|
||
<div><span name="attr_weaponfocus-force"></span></div>
|
||
</div>
|
||
<br>
|
||
</div>
|
||
<div class="sorcery-skills">
|
||
<br>
|
||
<div class="sorcery-config">
|
||
<div></div>
|
||
<header data-i18n="adept">Adept</header><input type="radio" name="attr_magic-type" value="adept">
|
||
<div></div>
|
||
<header data-i18n="mage">Mage</header><input type="radio" name="attr_magic-type" value="mage" selected>
|
||
<div></div>
|
||
<header data-i18n="shaman">Shaman</header><input type="radio" name="attr_magic-type" value="shaman">
|
||
<div></div>
|
||
<header data-i18n="aspected-mage">Aspected Mage</header><input type="radio" name="attr_magic-type" value="aspect">
|
||
<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 data-i18n="sorcer">Sorcery:</header>
|
||
<input type="number" name="attr_sorcery" value=0>
|
||
<button class="d6-button" type="action" name="act_skilltest" id="sorcery spell" title="Spell Casting Test">L</button>
|
||
<div class="skillspec" data-i18n="specialize">Specialize</div>
|
||
<input type="checkbox" name="attr_sorcery-spec-switch" class="sorcery-spec-switch" value=1 />
|
||
|
||
</div>
|
||
<div class="sorcery-spec-off table-row">
|
||
<div class="magic-skills-table">
|
||
<div class="table-item-left" data-i18n="spellcasting">Spellcasting:</div>
|
||
<div class="table-item"><span name="attr_spellcasting"></span></div>
|
||
<div class="table-item-left" data-i18n="spell-defense">Spell Defense:</div>
|
||
<div class="table-item"><span name="attr_spelldefense"></span></div>
|
||
<div class="table-item-left" data-i18n="dispelling">Dispelling:</div>
|
||
<div class="table-item"><span name="attr_dispelling"></span></div>
|
||
<div class="table-item-left" data-i18n="astral-combat">Astral Combat:</div>
|
||
<div class="table-item"><span name="attr_astralcombat"></span></div>
|
||
<div class="table-item-left" data-i18n="ritual-magic">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" data-i18n="spellcasting">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" data-i18n="spell-defense">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" data-i18n="dispelling">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" data-i18n="astral-combat">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" data-i18n="ritual-magic">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 data-i18n="conjuring">Conjuring:</header>
|
||
<div><input type="number" name="attr_conjuring" value=0 /></div>
|
||
<div><button class="d6-button" type="action" name="act_skilltest" id="conjuring spell"
|
||
title="Spirit Conjuring/Control/Banishing Test">L</button></div>
|
||
<div class="skillspec" data-i18n="specialize">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" data-i18n="summoning">Summoning:</div>
|
||
<div class="table-item"><span name="attr_summoning">
|
||
</div>
|
||
<div class="table-item-left" data-i18n="banishing">Banishing:</div>
|
||
<div class="table-item"><span name="attr_banishing">
|
||
</div>
|
||
<div class="table-item-left" data-i18n="controlling">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" data-i18n="summoning">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" data-i18n="banishing">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" data-i18n="controlling">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 data-i18n="aura-reading">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" data-i18n="specialize">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" data-i18n="auras">Auras:</div>
|
||
<div class="table-item"><span name="attr_areadauras">
|
||
</div>
|
||
<div class="table-item-left" data-i18n="signatures">Signatures:</div>
|
||
<div class="table-item"><span name="attr_areadsignatures">
|
||
</div>
|
||
<div class="table-item-left" data-i18n="sorcery">Sorcery:</div>
|
||
<div class="table-item"><span name="attr_areadsorcery">
|
||
</div>
|
||
<div class="table-item-left" data-i18n="conjuring">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" data-i18n="auras">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" data-i18n="signatures">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" data-i18n="sorcery">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" data-i18n="conjuring">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" data-i18n="magic">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" data-i18n="drain">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" data-i18n="enchanting">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" data-i18n="divining">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" data-i18n="centering">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" data-i18n="creative-skill">Creative Skill:</header>
|
||
<input type="text" name="attr_centeringskillname">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="adept-only">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="hide-spirit-critter">
|
||
<input type="hidden" class="magic-tabs-switch" name="attr_magictab" value="skills">
|
||
<div class="adept-powers">
|
||
<br>
|
||
<div class="adept-skills-table">
|
||
<header class="table-top-left" data-i18n="power">Power</header>
|
||
<header class="table-top-mid" data-i18n="rating">Rating</header>
|
||
<header class="table-top-mid" data-i18n="cost">Cost</header>
|
||
<header class="table-top-mid" data-i18n="activate">Activate</header>
|
||
<header class="table-top-right" data-i18n="notes">Notes</header>
|
||
</div>
|
||
<div class="adept-skills-table">
|
||
<header class="table-item-left" data-i18n="improved-reflexes">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" data-i18n="body-boost">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_aadeptbodyboostnotes"></div>
|
||
</div>
|
||
<div class="adept-skills-table">
|
||
<header class="table-item-left" data-i18n="strength-boost">Strength Boost: </header>
|
||
<div class="table-item"><input type="number" name="attr_adeptstrengthboost" value=0 /></div>
|
||
<div class="table-item"><input type="number" name="attr_adeptstrengthboostcost" 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_adeptstrengthboostnotes"></div>
|
||
</div>
|
||
<div class="adept-skills-table">
|
||
<header class="table-item-left" data-i18n="agility-boost">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" data-i18n="pain-resistance">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>
|
||
<div class="spells-section">
|
||
<br>
|
||
<div class="spells-table">
|
||
<div class="magic-spells-table">
|
||
<div class="table-top-left header" data-i18n="name">Name</div>
|
||
<div class="table-top-mid header" title="Spell Category" data-i18n="category">Category</div>
|
||
<div class="table-top-mid header" data-i18n="plus-dice-abbreviation">+Dice</div>
|
||
<div class="table-top-mid header" title="Force of spell" data-i18n="force">Force</div>
|
||
<div class="table-top-mid header" title="Reusable Foci" data-i18n="foci">Foci</div>
|
||
<div class="table-top-mid header" title="Expendable Foci" data-i18n="expendable-abbreviation">Exp.</div>
|
||
<div class="table-top-mid header" title="Mana or Physical Spell" data-i18n="type">Type</div>
|
||
<div class="table-top-mid header" title="Line of Sight, Touch or AOE" data-i18n="range">Range</div>
|
||
<div class="table-top-mid header" title="attribute to target" data-i18n="target">Target</div>
|
||
<div class="table-top-mid header" title="Spell Damage" data-i18n="damage-abbreviation">Dmg.</div>
|
||
<div class="table-top-mid header" title="Spell Durration" data-i18n="durration-abbreviation">Dur.</div>
|
||
<div class="table-top-mid header" title="+/- modifier for Force/2 drain" data-i18n="drain">Drain</div>
|
||
<div class="table-top-mid header" data-i18n="drain-damage">Drain Damage</div>
|
||
<div class="table-top-mid header" data-i18n="roll">Roll</div>
|
||
<div class="table-top-right header" data-i18n="description">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 data-i18n="combat" value="Combat" SELECTED>Combat</option>
|
||
<option data-i18n="health" value="Health">Health</option>
|
||
<option data-i18n="detection" value="Detection">Detection</option>
|
||
<option data-i18n="illusion" value="Illusion">Illusion</option>
|
||
<option data-i18n="elemental" value="Elemental">Elemental</option>
|
||
<option data-i18n="control" value="Control">Control</option>
|
||
<option data-i18n="telekinetic" value="Telekinetic">Telekinetic</option>
|
||
<option data-i18n="transformation" value="Transformation">Transformation</option>
|
||
</select>
|
||
<input type="number" name="attr_specialized" value=0>
|
||
<input type="number" name="attr_force" min="1" value=1>
|
||
<input type="number" name="attr_foci" value=0>
|
||
<input type="number" name="attr_expendable-foci" value=0>
|
||
<select name="attr_spelltype" class="mediumselect2">
|
||
<option data-i18n="mana" value="mana">Mana</option>
|
||
<option data-i18n="physical" value="physical">Physical</option>
|
||
</select>
|
||
<select class="mediumselect2" type="text" name="attr_range">
|
||
<option data-i18n="line-of-sight-acronym" value="LoS" SELECTED title="Line of Sight Spell">LoS
|
||
</option>
|
||
<option data-i18n="area-of-effect-acronym" value="AoE" title="Area of Effect Spell">AoE</option>
|
||
<option data-i18n="touch" value="Touch" title="Must Touch Target">Touch</option>
|
||
</select>
|
||
<select name="attr_target" class="mediumselect2">
|
||
<option data-i18n="body" value="@{target|Target|body|max}">Body</option>
|
||
<option data-i18n="willpower" value="@{target|Target|willpower|max}">Willpower</option>
|
||
<option data-i18n="intelligence" value="@{target|Target|intelligence|max}">Intelligence</option>
|
||
<option data-i18n="elemental" value="@{target|Target|targetMove}">Elemental</option>
|
||
<option data-i18n="target-number" value="?{Target Number|4}">Target Number</option>
|
||
<option data-i18n="force" value="@{target|Target|force}">Force</option>
|
||
<option value="2">2</option>
|
||
<option value="3">3</option>
|
||
<option value="4">4</option>
|
||
<option value="5">5</option>
|
||
<option value="6">6</option>
|
||
</select>
|
||
<select name="attr_damage" class="mediumselect2">
|
||
<option value=0 SELECTED title="Choose for non combat spell">N/A</option>
|
||
<option value="?{Damage Level|M,2|S,3|L,1|D,4|L(stun),10|M(stun),11|S(stun),12|D(stun)13}"
|
||
title="Choose Damage at time of roll, default for combat spells">Choose</option>
|
||
<option data-i18n="light" value=1>Light</option>
|
||
<option data-i18n="moderate" value=2>Moderate</option>
|
||
<option data-i18n="serious" value=3>Serious</option>
|
||
<option data-i18n="deadly" value=4>Deadly</option>
|
||
<option data-i18n="light-stun-abbreviation" value=10>Light(s)</option>
|
||
<option data-i18n="moderate-stun-abbreviation" value=11>Moderate(s)</option>
|
||
<option data-i18n="serious-stun-abbreviation" value=12>Serious(s)</option>
|
||
<option data-i18n="deadly-stun-abbreviation" value=13>Deadly(s)</option>
|
||
</select>
|
||
<select name="attr_duration" class="mediumselect2">
|
||
<option data-i18n="instant-abbreviation" value="I" SELECTED>I</option>
|
||
<option data-i18n="sustained-abbreviation" value="S">S</option>
|
||
<option data-i18n="permanent-abbreviation" value="P">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 data-i18n="light" value=1>Light</option>
|
||
<option data-i18n="damage-level" value="dmglvl" SELECTED>Damage Lvl</option>
|
||
<option data-i18n="medium" value=2>Medium</option>
|
||
<option data-i18n="serious" value=3>Serious</option>
|
||
<option data-i18n="deadly" value=4>Deadly</option>
|
||
<option data-i18n="damage-level-add-1"
|
||
title="stages drain damage up 1 level from damage level of spell" value="dmglvl + 1">Damage
|
||
+1</option>
|
||
<option data-i18n="damage-level-add-2"
|
||
title="stages drain damage up 2levels from damage level of spell" value="dmglvl + 2">Damage
|
||
+2</option>
|
||
<option data-i18n="damage-level-subtract-1"
|
||
title="stages drain damage down 1 level from damage level of spell" value="dmglvl - 1">
|
||
Damage -1</option>
|
||
<option data-i18n="damage-level-subtract-2"
|
||
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>
|
||
<div class="fetish-foci">
|
||
<br>
|
||
<div class="foci-table">
|
||
<header class="table-top-left" data-i18n="type">Type</header>
|
||
<header class="table-top-mid" data-i18n="category">Category</header>
|
||
<header class="table-top-mid" data-i18n="force">Force</header>
|
||
<header class="table-top-right" data-i18n="quantity">Quantity</header>
|
||
</div>
|
||
<fieldset class="repeating_foci">
|
||
<div class="foci-table">
|
||
<select name="attr_type" class="mediumselect2">
|
||
<option data-i18n="none" value="none"></option>
|
||
<option data-i18n="expendable" value="expendable">Expendable</option>
|
||
<option data-i18n="reusable" value="reusable">Reusable</option>
|
||
<option data-i18n="power-focus" value="power">Power Focus</option>
|
||
<option data-i18n="spirit-focus" value="spirit">Spirit Focus</option>
|
||
</select>
|
||
<input type='hidden' class='focitype' name='attr_type' />
|
||
<div class="powerfocus">
|
||
<input name="attr_category" disabled value="power" />
|
||
</div>
|
||
<div class="reusable">
|
||
<select name="attr_category" class="mediumselect2">
|
||
<option data-i18n="none" value="none"></option>
|
||
<option data-i18n="combat" value="combat">Combat</option>
|
||
<option data-i18n="health" value="health">Health</option>
|
||
<option data-i18n="detection" value="detection">Detection</option>
|
||
<option data-i18n="illusion" value="illusion">Illusion</option>
|
||
<option data-i18n="manipulation" value="manipulation">Manipulation</option>
|
||
</select>
|
||
</div>
|
||
<div class="spiritfocus">
|
||
<input type='hidden' class='magictype' name='attr_magic-type' />
|
||
<div class="mage-foci"><select name="attr_category" class="mage-foci mediumselect2">
|
||
<option data-i18n="none" value="none"></option>
|
||
<option data-i18n="fire" value="fire-elem-focus">Fire</option>
|
||
<option data-i18n="water" value="water-elem-focus">Water</option>
|
||
<option data-i18n="earth" value="earth-elem-focus">Earth</option>
|
||
<option data-i18n="air" value="air-elem-focus">Air</option>
|
||
<option data-i18n="city-sprit" value="city-spirit-focus">City Spirit</option>
|
||
<option data-i18n="field-sprit" value="field-spirit-focus">Field Spirit</option>
|
||
<option data-i18n="hearth-sprit" value="hearth-spirit-focus">Hearth Spirit</option>
|
||
<option data-i18n="desert-sprit" value="desert-spirit-focus">Desert Spirit</option>
|
||
<option data-i18n="forest-sprit" value="forest-spirit-focus">Forest Spirit</option>
|
||
<option data-i18n="mountain-sprit" value="mountain-spirit-focus">Mountain Spirit</option>
|
||
<option data-i18n="prairie-sprit" value="prairie-spirit-focus">Prairie Spirit</option>
|
||
<option data-i18n="mist-sprit" value="mist-spirit-focus">Mist Spirit</option>
|
||
<option data-i18n="storm-sprit" value="storm-spirit-focus">Storm Spirit</option>
|
||
<option data-i18n="wind-sprit" value="wind-spirit-focus">Wind Spirit</option>
|
||
<option data-i18n="lake-sprit" value="lake-spirit-focus">Lake Spirit</option>
|
||
<option data-i18n="river-sprit" value="river-spirit-focus">River Spirit</option>
|
||
<option data-i18n="sea-sprit" value="sea-spirit-focus">Sea Spirit</option>
|
||
<option data-i18n="gnome" value="gnome-spirit-focus">Gnome</option>
|
||
<option data-i18n="manitous" value="manitous-spirit-focus">Manitous</option>
|
||
<option data-i18n="salamander" value="salamander-spirit-focus">Salamander</option>
|
||
<option data-i18n="sylphs" value="sylphs-spirit-focus">Sylphs</option>
|
||
<option data-i18n="ancestor" value="ancestor-spirit-focus">Ancestor</option>
|
||
</select></div>
|
||
</div>
|
||
<input type="number" name="attr_force" value=0 min=0 />
|
||
<div class="expendable-foci">
|
||
<input type="number" name="attr_qty" value=0 min=0 />
|
||
</div>
|
||
<div class="reusable-foci">
|
||
<input type="number" name="attr_qty" value=1 disabled />
|
||
</div>
|
||
<input type='hidden' name='attr_fociresource' />
|
||
</div>
|
||
</fieldset>
|
||
<br>
|
||
<input type='hidden' class='weaponfocus-show' name='attr_weaponfocus-show' value="false" />
|
||
<div class="weaponfocus-header">
|
||
<div class="table-top-left" data-i18n="equip">Equip</div>
|
||
<div class="table-top-mid" data-i18n="name">Name</div>
|
||
<div class="table-top-mid" data-i18n="reach">Reach</div>
|
||
<div class="table-top-mid" data-i18n="skill">Skill</div>
|
||
<div class="table-top-mid" data-i18n="conceal">Conceal</div>
|
||
<div class="table-top-mid" data-i18n="force">Force</div>
|
||
<div class="table-top-mid" data-i18n="power">Power</div>
|
||
<div class="table-top-mid" data-i18n="damage">Damage</div>
|
||
<div class="table-top-mid" data-i18n="plus-dice-abbreviation">+Dice</div>
|
||
<div class="table-top-mid" data-i18n="plus-target-number-abberviation">+TN</div>
|
||
<div class="table-top-mid" data-i18n="attack">Attack</div>
|
||
<div class="table-top-right" data-i18n="notes">Notes</div>
|
||
</div>
|
||
<div class="weaponfocus-attributes">
|
||
<div class="text-mid"><input type="checkbox" name="attr_weaponfocus-equipped" checked></div>
|
||
<input class="myweapontxt" type="text" name="attr_weaponfocus-name" value="Weapon Focus">
|
||
<input type="number" name="attr_weaponfocus-reach" value=0>
|
||
<select class="mediumselect2" name="attr_weaponfocus skill">
|
||
<option value="@{edged}" SELECTED data-i18n="edged">Edged</option>
|
||
<option value="@{clubs}" data-i18n="club">Club</option>
|
||
<option value="@{poles}" data-i18n="pole-arm">Pole Arm</option>
|
||
<option value="@{whips}" data-i18n="whip">Whip</option>
|
||
</select>
|
||
<input type="number" name="attr_weaponfocus-conceal" value=0>
|
||
<input type="number" name="attr_weaponfocus-force" value=0>
|
||
<input type="number" name="attr_weaponfocus-power" value=0>
|
||
<select name="attr_weaponfocus-damage" class="mediumselect2">
|
||
<option data-i18n="light-damage-abbreviation">L</option>
|
||
<option data-i18n="moderate-damage-abbreviation" SELECTED>M</option>
|
||
<option data-i18n="serious-damage-abbreviation">S</option>
|
||
<option data-i18n="deadly-damage-abbreviation">D</option>
|
||
</select>
|
||
<input type="number" name="attr_weaponfocus-specialized" value=0 \>
|
||
<input type="number" name="attr_weaponfocus-tnmods" value=0 \>
|
||
<div><button class="attack-dice" id="weaponfocus" type="action" name="act_melee"
|
||
title="Melee Attack"></button></div>
|
||
<input class="myweapontxt" type="text" name="attr_weaponfocus-notes">
|
||
</div>
|
||
</div>
|
||
<div class="magicinitiate">
|
||
<br>
|
||
<div class="magicinitiate-level">
|
||
<div class="SRH4" data-i18n="initiate-grade">Initiate Grade:</div>
|
||
<input type="number" name="attr_initiategrade" value=0>
|
||
</div>
|
||
<div class="metamagic-table">
|
||
<header class="table-top-left" data-i18n="metamagic">Metamagic</header>
|
||
<header class="table-top-right" data-i18n="notes">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>
|
||
<div class="geas">
|
||
<br>
|
||
<div class="geas-table">
|
||
<header class="table-top-left" data-i18n="geas-type">Geas Type</header>
|
||
<header class="table-top-right" data-i18n="geas-notes">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>
|
||
<div class="totem">
|
||
<br>
|
||
<div class="totem-table">
|
||
<header class="table-top-left" data-i18n="totem">Totem</header>
|
||
<header class="table-top-mid" data-i18n="environment">Environment</header>
|
||
<header class="table-top-mid" data-i18n="advantages">Advantages</header>
|
||
<header class="table-top-right" data-i18n="disadvantages">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 class="conjuring">
|
||
<br>
|
||
<div class="conjuring-table">
|
||
<div class="table-top-left header" data-i18n="spirit-name">Spirit Name</div>
|
||
<div class="table-top-mid header" data-i18n="spirit-type">Spirit Type</div>
|
||
<div class="table-top-mid header" data-i18n="force">Force</div>
|
||
<div class="table-top-mid header" data-i18n="fetish">Fetish</div>
|
||
<div class="table-top-mid header" data-i18n="expendable">Expendable</div>
|
||
<div class="table-top-mid header" data-i18n="summon">Summon</div>
|
||
<div class="table-top-right header" data-i18n="banish">Banish</div>
|
||
</div>
|
||
<fieldset class='repeating_conjuring'>
|
||
<div class="conjuring-table">
|
||
<input type="text" name="name">
|
||
<select name="attr_type" class="conjuring-type">
|
||
<option data-i18n="watcher">Watcher</option>
|
||
<option data-i18n="air-elemental">Air Elemental</option>
|
||
<option data-i18n="water-elemental">Water Elemental</option>
|
||
<option data-i18n="earth-elemental">Earth Elemental</option>
|
||
<option data-i18n="fire-elemental">Fire Elemental</option>
|
||
<option data-i18n="city-spirit">City Spirit</option>
|
||
<option data-i18n="field-spirit">Field Spirit</option>
|
||
<option data-i18n="hearth-spirit">Hearth Spirit</option>
|
||
<option data-i18n="desert-spirit">Desert Spirit</option>
|
||
<option data-i18n="forest-spirit">Forest Spirit</option>
|
||
<option data-i18n="mountain-spirit">Mountain Spirit</option>
|
||
<option data-i18n="prairie-spirit">Prairie Spirit</option>
|
||
<option data-i18n="mist-spirit">Mist Spirit</option>
|
||
<option data-i18n="storm-spirit">Storm Spirit</option>
|
||
<option data-i18n="wind-spirit">Wind Spirit</option>
|
||
<option data-i18n="lake-spirit">Lake Spirit</option>
|
||
<option data-i18n="river-spirit">River Spirit</option>
|
||
<option data-i18n="sea-spirit">Sea Spirit</option>
|
||
<option data-i18n="gnome">Gnome</option>
|
||
<option data-i18n="manitous">Manitous</option>
|
||
<option data-i18n="salamander">Salamander</option>
|
||
<option data-i18n="sylph">Sylphs</option>
|
||
<option data-i18n="ancestor">Ancestor</option>
|
||
</select>
|
||
<input type="number" value=1 name="attr_force">
|
||
<input type="number" value=0 name="attr_fetish">
|
||
<input type="number" value=0 name="attr_expendable">
|
||
<button class="pictos-button" data-i18n-title="summon-spirit" title="summon spirit" type="action"
|
||
id="summons" name="act_conjure-spirit">L</button>
|
||
<button class="pictos-button" data-i18n-title="banish-spirit" title="banish spirit" type="action"
|
||
id="banish" name="act_conjure-spirit">L</button>
|
||
</div>
|
||
</fieldset>
|
||
</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" data-i18n="cyberdecks-and-utilities">Cyberdecks and Utilities</div>
|
||
</div>
|
||
<div class="matrix-show-frame">
|
||
<div class="SRH2" data-i18n="smart-frames-and-agents">Smart Frames and Agents</div>
|
||
</div>
|
||
<div class="deck-combat">
|
||
<div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH3" data-i18n="cyber-combat">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" data-i18n="persona">Persona</div>
|
||
</div>
|
||
<div class="matrix-show-frame">
|
||
<div class="SRH4" data-i18n="core">Core</div>
|
||
</div>
|
||
<div data-i18n="undamaged">Undamaged</div>
|
||
<div data-i18n="light-damage">Light Damage</div>
|
||
<div data-i18n="moderate-damage">Moderate Damage</div>
|
||
<div data-i18n="serious-damage">Serious Damage</div>
|
||
<div data-i18n="crashed">Crashed</div>
|
||
<div class="SRH4" data-i18n="condition">Condition</div>
|
||
<div>
|
||
<input type="radio" name="attr_matrix-damage" value=0 CHECKED>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_matrix-damage" value=1>
|
||
<input type="radio" name="attr_matrix-damage" value=2>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_matrix-damage" value=3>
|
||
<input type="radio" name="attr_matrix-damage" value=4>
|
||
<input type="radio" name="attr_matrix-damage" value=5>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_matrix-damage" value=6>
|
||
<input type="radio" name="attr_matrix-damage" value=7>
|
||
<input type="radio" name="attr_matrix-damage" value=8>
|
||
<input type="radio" name="attr_matrix-damage" value=9>
|
||
</div>
|
||
<div><input type="radio" name="attr_matrix-damage" value=100></div>
|
||
</div>
|
||
<div><input type="hidden" name="attr_hackingpool-icsuppress" value=0></div>
|
||
<div class="matrix-show-deck">
|
||
<div class="deck-summary">
|
||
<div class="text-mid">DNI</div>
|
||
<div data-i18n="hot-asist">Hot ASIST</div>
|
||
<div data-i18n="reality-filter">Reality Filter</div>
|
||
<div data-i18n="ic-suppressed">IC Suppressed</div>
|
||
<div class="text-mid" data-i18n="icon-status">Icon Status</div>
|
||
<div class="text-mid" data-i18n="host-grid-rating">Host/Grid Rating</div>
|
||
<div><input checked="checked" type="checkbox" name="attr_deck-dni" value=1></div>
|
||
<div><input type="checkbox" name="attr_deck-asist" value=1> </div>
|
||
<div><input type="checkbox" name="attr_deck-realityfilter" value=1></div>
|
||
<div><input type="number" name="attr_deck-icsuppressed" value=0></div>
|
||
<select name="attr_matrix-iconstatus" class="mediumselect2">
|
||
<option data-i18n="intruder" value="Intruder" SELECTED>Intruder</option>
|
||
<option data-i18n="legitimate" value="Legitimate">Legitimate</option>
|
||
</select>
|
||
<select name="attr_deck-systemrating" class="mediumselect2">
|
||
<option data-i18n="unknown" value="Unknown" SELECTED>Unknown</option>
|
||
<option data-i18n="blue" value="Blue">Blue</option>
|
||
<option data-i18n="green" value="Green">Green</option>
|
||
<option data-i18n="orange" value="Orange">Orange</option>
|
||
<option data-i18n="red" value="Red">Red</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="matrix-show-frame">
|
||
<div class="frame-summary">
|
||
<div data-i18n="pilot-rating">Pilot Rating</div>
|
||
<div data-i18n="utility-payload">Utility Payload</div>
|
||
<div data-i18n="ic-suppressed">IC Suppressed</div>
|
||
<div class="text-mid" data-i18n="icon-status">Icon Status</div>
|
||
<div class="text-mid" data-i18n="host-grid-rating">Host/Grid Rating</div>
|
||
<div><input type="number" name="attr_decking" min=0 value=0> </div>
|
||
<div><input type="number" name="attr_deck-utilitypayload" min=0 value=0></div>
|
||
<div><input type="number" name="attr_deck-icsuppressed" min=0 value=0></div>
|
||
<select name="attr_matrix-iconstatus" style="width: 85px;">
|
||
<option data-i18n="intruder" value="Intruder" SELECTED>Intruder</option>
|
||
<option data-i18n="legitimate" value="Legitimate">Legitimate</option>
|
||
</select>
|
||
<select name="attr_deck-systemrating" class="mediumselect2">
|
||
<option data-i18n="unknown" value="Unknown" SELECTED>Unknown</option>
|
||
<option data-i18n="blue" value="Blue">Blue</option>
|
||
<option data-i18n="green" value="Green">Green</option>
|
||
<option data-i18n="orange" value="Orange">Orange</option>
|
||
<option data-i18n="red" value="Red">Red</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
|
||
<input type='hidden' name='attr_deck-tn' value=0 />
|
||
<input type='hidden' name='attr_deck-util-size-loaded' value=0 />
|
||
<input type='hidden' name='attr_deck-util-rating-loaded' value=0 />
|
||
<input type='hidden' name='attr_deck-tn' value=0 />
|
||
<input type='hidden' name='attr_deck-initiative' value=0 />
|
||
<div class="deck-combat-system">
|
||
<div data-i18n="initiative">Initiative</div><span name=attr_deck-initiative></span>d6 + <span
|
||
name=attr_deck-reaction-final></span>
|
||
<button type="action" name="act_init" class="d6-button" title="Matrix Initiative"
|
||
id="matrixinit">L</button>
|
||
<div data-i18n="end-turn">End Turn</div><button type="action" name="act_endturn" class="d6-button" title="End Combat Turn" id="endturn">L</button>
|
||
<div data-i18n="attack">Attack></div><div><button type="action" name="act_matrixattack" class="pictos-custom-attack" title="Execute Attack vs. System Code or Icon" id="deckattack">[</button></div>
|
||
<div data-i18n="evade">Evade</div><button type="action" name="act_matrixmaneuvers" class="d6-button" title="Evade Detection" id="matrixevade">L</button>
|
||
<div data-i18n="parry">Parry</div><button type="action" name="act_matrixmaneuvers" class="d6-button" title="Parry Attack" id="matrixparry">L</button>
|
||
<div data-i18n="position">Posistion</div><button type="action" name="act_matrixmaneuvers"
|
||
class="d6-button" title="Position Attack" id="matrixposition">L</button>
|
||
</div>
|
||
<div class="deck-combat-system2">
|
||
<div class="numberspan" data-i18n="combat-tn">Combat TN</div><span name="attr_deck-tn"></span>
|
||
<div></div>
|
||
<div data-i18n="resist">Resist</div><div><button type="action" name="act_matrixresist" class="pictos3-button" title="Damage Resistance Test" id="matrixresist">b</button></div>
|
||
<div></div>
|
||
<div data-i18n="medic">Medic</div><div><button type="action" name="act_matrixmedic" class="pictos-button" title="Medic Utility" id="matrixmedic">k</button></div>
|
||
<div></div>
|
||
<div data-i18n="decking">Decking</div><button type="action" name="act_matrixtest" class="d6-button"
|
||
title="General Decking Test" id="decking">L</button>
|
||
<div></div>
|
||
<div data-i18n="hardening">Hardening</div> <span name="attr_deck-hardening"> </span>
|
||
<div></div>
|
||
<div data-i18n="armor">Armor</div> <span name="attr_deckarmor-rating-final"> </span>
|
||
<div></div>
|
||
</div>
|
||
<br>
|
||
<div class="hack-pool-option">
|
||
<div data-i18n="use-hacking-pool-for-ic-supression">Use Hacking Pool for IC supression</div><input
|
||
type="checkbox" name="attr_deck-icsuppresspool" value=1 checked="checked">
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div class="deck-summary-attributes">
|
||
<div></div>
|
||
<div></div>
|
||
<div data-i18n="full">Full</div>
|
||
<div data-i18n="mods">Mods</div>
|
||
<div data-i18n="final">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" data-i18n="core">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 data-i18n="bod">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 data-i18n="evasion">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 data-i18n="masking">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 data-i18n="sensors">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 data-i18n="detection-factor-abbreviation" title="Detection Factor">Detect.F</div>
|
||
<div></div>
|
||
<div title="Detection Factor Maximum"> <span name="attr_deck-detection-max"></span></div>
|
||
<div><input type="number" name="attr_deck-detection-mods" value=0></div>
|
||
<div title="Detection Factor Final Modified Number"><span name="attr_deck-detection-final"></span></div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="matrix-show-deck">
|
||
<div class='deck-memory-used'>
|
||
<input type='hidden' class='matrix-status' name='attr_matrix-status' value="out" />
|
||
<div data-i18n="jack-in">Jack In</div><button class="pictos-button matrix-status" type="action"
|
||
name="act_jackin">Q</button>
|
||
<div></div>
|
||
<div data-i18n="memory-in-use">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>/<span name="attr_deck-activemem"></div>
|
||
<div><button class="switch-button-hide" title="unload all utilities" type="action"
|
||
name="act_deck-utilities-unloadall" data-i18n="reset">Reset</button></div>
|
||
<div></div>
|
||
<div data-i18n="hacking-pool">Hacking Pool:</div>
|
||
<div><span name="attr_hackingpool"></span></div>
|
||
<div></div>
|
||
<div data-i18n="hacking-pool-used">Hacking Pool Used:</div>
|
||
<input type='hidden' class='hackingpool-over' name='attr_hackingpool-over' /> <span class="hackingpool-over"
|
||
name="attr_hackingpool-used"></span>
|
||
<input type='hidden' name='attr_matrix-penalty' value=0 />
|
||
<div></div>
|
||
<div data-i18n="penalties">Penalties:</div>
|
||
<div><span class="matrix-pens" name="attr_matrix-penalty"></span></div>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" class="decking-tabs-switch" name="attr_deckingtab" value="decking">
|
||
<div class="decking-tabs">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character">
|
||
<input type="hidden" class="decking-tabs-switch" name="attr_deckingtab" value="decking">
|
||
<button class="decking-tabs-cyberdeck" type="action" name="act_cyberdeck-tab" data-i8n="cyberdeck-uppercase" data-i18n-title="cyberdeck-configuration" title="Cyberdeck Configuration">CYBERDECK</button>
|
||
<button class="decking-tabs-skills" type="action" name="act_decking-tab" data-i8n="computer-skills-uppercase" data-i18n-title="computer-skills" title="Computer Skills">COMPUTER SKILLS</button>
|
||
<button class="decking-tabs-frame" type="action" name="act_frame-tab" data-i8n="frame-core-uppercase" data-i18n-title="frame-configuration" title="Frame Configuration">FRAME CORE</button>
|
||
<button class="decking-tabs-utilities" type="action" name="act_utilities-tab" data-i8n="utilities-uppercase" data-i18n-title="utilities-configuration" title="Utilities Configuration">UTILITIES</button>
|
||
<div class="tabs-empty"></div>
|
||
</div>
|
||
<div class="deck-skills">
|
||
<div class="deck-skills-row table-top">
|
||
<header data-i18n="computer">Computer</header>
|
||
<input type="number" name="attr_computer" value=0>
|
||
<button class="d6-dice" type="action" name="act_skilltest" id="computer hacking"></button>
|
||
<div data-i18n="specialize">specialize</div>
|
||
<input type="checkbox" class="deck-spec-switch" name="attr_deck-spec-switch" value=1>
|
||
</div>
|
||
<input type="checkbox" class="deck-spec-switch hidden-checkbox" name="attr_deck-spec-switch" value=1>
|
||
<div class="deck-spec-off">
|
||
<div data-i18n="hardware" class="table-item-left">Hardware</div>
|
||
<div class="table-item"><span name="attr_computer"></div>
|
||
<div data-i18n="decking" class="table-item-left">Decking</div>
|
||
<div class="table-item"><span name="attr_computer"></div>
|
||
<div data-i18n="programming" class="table-item-left">Programming</div>
|
||
<div class="table-item"><span name="attr_computer"></div>
|
||
</div>
|
||
<div class="deck-spec-on">
|
||
<div data-i18n="hardware" 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 data-i18n="decking" 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 data-i18n="programming" 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>
|
||
</div>
|
||
<div class="deck-cyberdeck">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="matrix-show-deck">
|
||
<div class="deck-attributes">
|
||
<div class="deck-name">
|
||
<div data-i18n="deck-name">Deck Name</div><input type=text name="attr_deck-name">
|
||
</div>
|
||
<div class="deck-persona">
|
||
<div>MPCP</div>
|
||
<input type="number" name="attr_deck-mpcp-max" value=0 min=0>
|
||
<input type="hidden" name="attr_deck-maxpersona" value=0>
|
||
<div data-i18n="bod">Bod</div>
|
||
<input type="number" name="attr_deck-bod-max" value=0 min=0>
|
||
<div data-i18n="evasion">Evasion</div>
|
||
<input type="number" name="attr_deck-evasion-max" value=0 min=0>
|
||
<div data-i18n="masking">Masking</div>
|
||
<input type="number" name="attr_deck-masking-max" value=0 min=0>
|
||
<div data-i18n="sensors">Sensors</div>
|
||
<input type="number" name="attr_deck-sensors-max" value=0 min=0>
|
||
</div>
|
||
<div class="deck-cyberdeck-specs">
|
||
<div data-i18n="hardening">Hardening</div>
|
||
<input type="number" name="attr_deck-hardening" value=0 min=0>
|
||
<div data-i18n="active-memory">Active Memory</div>
|
||
<input type="number" name="attr_deck-activemem" value=0 min=0>
|
||
<div data-i18n="storage-memory">Storage Memory</div>
|
||
<input type="number" name="attr_deck-storagemem" value=0 min=0>
|
||
<div data-i18n="io-speed">I/O Speed</div>
|
||
<input type="number" name="attr_deck-iospeed" value=0 min=0>
|
||
<div data-i18n="response-increase">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 data-i18n="offline-storage">Offline Storage</div>
|
||
<input type="number" name="attr_deck-offlinestorage" value=0 min=0>
|
||
</div>
|
||
<div class="deck-extras">
|
||
<div>Notes</div>
|
||
<textarea name="attr_deck-notes" style='width:300px;height:50%;margin-bottom:unset;'></textarea>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="matrix-show-frame">
|
||
<div class="deck-attributes">
|
||
<div class="frame-core">
|
||
<div data-i18n="type">Type</div>
|
||
<div><select name="attr_frametype" style="width: 115px;">
|
||
<option value="Smart Frame" data-i18n="smart-frame">Smart Frame</option>
|
||
<option value="Agent" selected data-i18n="agent">Agent</option>
|
||
</select>
|
||
</div>
|
||
<div data-i18n="core-rating">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 data-i18n="utility-payload">Utility Payload</div>
|
||
<div><input type="number" name="attr_deck-utilitypayload" value=0 min=0></div>
|
||
<div data-i18n="pilot">Pilot</div>
|
||
<div><input type="number" name="attr_decking" value=0 min=0></div>
|
||
<div data-i18n="initiative">Initiative</div>
|
||
<div><input type="number" name="attr_frame-initiative" value=0 min=0></div>
|
||
</div>
|
||
<div class="frame-attributes">
|
||
<div data-i18n="bod">Bod</div>
|
||
<input type="number" name="attr_deck-bod-max" value=0 min=0>
|
||
<div data-i18n="evasion">Evasion</div>
|
||
<input type="number" name="attr_deck-evasion-max" value=0 min=0>
|
||
<div data-i18n="masking">Masking</div>
|
||
<input type="number" name="attr_deck-masking-max" value=0 min=0>
|
||
<div data-i18n="sensors">Sensors</div>
|
||
<input type="number" name="attr_deck-sensors-max" value=0 min=0>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="deck-utilities">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="matrix-show-frame">
|
||
<div class='frame-util-used'>
|
||
<label data-i18n="utility-rating-sum">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" data-i18n="special-utilities">Special Utilities</div>
|
||
<div class="deck-utilities-special">
|
||
<header data-i18n="utility" class="table-top-left">Utility</header>
|
||
<header data-i18n="rating" class="table-top-mid">Rating</header>
|
||
<header data-i18n="multiple" class="table-top-mid">Multiplier</header>
|
||
<header data-i18n="size" class="table-top-mid">Size</header>
|
||
<header data-i18n="loaded" class="table-top-mid">Loaded</header>
|
||
<header data-i18n="effective-rating" class="table-top-mid">Effective Rating</header>
|
||
<header data-i18n="test" class="table-top-mid">Test</header>
|
||
<header data-i18n="swap-memory" class="table-top-mid">Swap Memory</header>
|
||
<header data-i18n="notes" class="table-top-right">Notes</header>
|
||
<div data-i18n="sleaze" class="table-item-left">Sleaze</div>
|
||
<div class="table-item"><input type="number" name="attr_decksleaze-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_decksleaze-multiplier" value=3></div>
|
||
<div class="table-item"><input type="number" name="attr_decksleaze-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_decksleaze-loaded" class="text-mid"
|
||
value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_decksleaze-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="pictos-button" title="Sleaze Utility Test" id="decksleaze-rating-final">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Sleaze Utility from Disk" id="decksleaze-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_decksleaze-notes"></div>
|
||
<div data-i18n="track" class="table-item-left">Track</div>
|
||
<div class="table-item"><input type="number" name="attr_decktrack-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_decktrack-multiplier" value=8></div>
|
||
<div class="table-item"><input type="number" name="attr_decktrack-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_decktrack-loaded" class="text-mid"
|
||
value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_decktrack-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="pictos-button" title="Tracking Utility Test" id="decktrack-rating-final">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Tracking Utility from Disk" id="decktrack-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_decktrack-notes"></div>
|
||
|
||
</div>
|
||
|
||
<div data-i18n="defensive-utilities" class="SRH4">Defensive Utilities</div>
|
||
<div class="deck-utilities-defensive">
|
||
<header data-i18n="utility" class="table-top-left">Utility</header>
|
||
<header data-i18n="rating" class="table-top-mid">Rating</header>
|
||
<header data-i18n="multiplier" class="table-top-mid">Multiplier</header>
|
||
<header data-i18n="size" class="table-top-mid">size</header>
|
||
<header data-i18n="loaded" class="table-top-mid">loaded</header>
|
||
<header data-i18n="effective-rating" class="table-top-mid">Effective Rating</header>
|
||
<header data-i18n="test" class="table-top-mid">Test</header>
|
||
<header data-i18n="swap-memory" class="table-top-mid">Swap Memory</header>
|
||
<header data-i18n="notes" class="table-top-right">Notes</header>
|
||
<div data-i18n="armor" class="table-item-left">Armor</div>
|
||
<div class="table-item"><input type="number" name="attr_deckarmor-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckarmor-multiplier" value=3></div>
|
||
<div class="table-item"><input type="number" name="attr_deckarmor-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckarmor-loaded" class="text-mid"
|
||
value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_deckarmor-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="pictos-button" title="Armor Utility Test" id="deckarmor-rating-final">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Armor Utility from Disk" id="deckarmor-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckarmor-notes"></div>
|
||
<div data-i18n="cloak" class="table-item-left">Cloak</div>
|
||
<div class="table-item"><input type="number" name="attr_deckcloak-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckcloak-multiplier" value=3></div>
|
||
<div class="table-item"><input type="number" name="attr_deckcloak-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckcloak-loaded" class="text-mid"
|
||
value=1> </div>
|
||
<div class="table-item"><input type="number" name="attr_deckcloak-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="pictos-button" title="Cloak Utility Test" id="deckcloak-rating-final">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button"
|
||
title="Reload Cloak Utility from Disk" id="deckcloak-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckcloak-notes"></div>
|
||
<div data-i18n="lock-on" class="table-item-left">Lock-On</div>
|
||
<div class="table-item"><input type="number" name="attr_decklockon-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_decklockon-multiplier" value=3></div>
|
||
<div class="table-item"><input type="number" name="attr_decklockon-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_decklockon-loaded" class="text-mid"
|
||
value=1> </div>
|
||
<div class="table-item"><input type="number" name="attr_decklockon-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="pictos-button" title="Lock-On Utility Test" id="decklockon-rating-final">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button"
|
||
title="Reload Lock-On Utility from Disk" id="decklockon-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_decklockon-notes"></div>
|
||
<div data-i18n="medic" class="table-item-left">Medic</div>
|
||
<div class="table-item"><input type="number" name="attr_deckmedic-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckmedic-multiplier" value=4></div>
|
||
<div class="table-item"><input type="number" name="attr_deckmedic-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckmedic-loaded" class="text-mid" value=1> </div>
|
||
<div class="table-item"><input type="number" name="attr_deckmedic-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixmedic" class="pictos-button" title="Medic Utility Execute" id="deckmedic-rating-final">k</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Medic Utility from Disk" id="deckmedic-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckmedic-notes"></div>
|
||
</div>
|
||
<fieldset class="repeating_defensiveutils">
|
||
<div class="deck-utilities-defensive">
|
||
<div class="table-item-left"><input type="text" name="attr_utility"></div>
|
||
<div class="table-item"><input type="number" name="attr_rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_multiplier" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_size" value=0></div>
|
||
<div class="table-item "><input class="text-mid" type="checkbox" name="attr_loaded" value=1>
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixrepeatingtest" class="pictos-button" title="Utility Test" id="repeating">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button"
|
||
title="Reload Utility from Disk" id="repeating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_utilitynotes"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div>
|
||
<div data-i18n="offensive-utilities" class="SRH4">Offensive Utilities</div>
|
||
<div class="deck-utilities-offensive">
|
||
<header data-i18n="utility" class="table-top-left">Utility</header>
|
||
<header data-i18n="rating" class="table-top-mid">Rating</header>
|
||
<header data-i18n="multiplier" class="table-top-mid">Multiplier</header>
|
||
<header data-i18n="size" class="table-top-mid">size</header>
|
||
<header data-i18n="loaded" class="table-top-mid">loaded</header>
|
||
<header data-i18n="effective-rating" class="table-top-mid">Effective Rating</header>
|
||
<header data-i18n="execute" class="table-top-mid">Execute</header>
|
||
<header data-i18n="test" class="table-top-mid">Test</header>
|
||
<header data-i18n="swap-memory" class="table-top-mid">Swap Memory</header>
|
||
<header data-i18n="notes" class="table-top-right">Notes</header>
|
||
<div class="table-item-left"><select name="attr_deckattacklevel" class="mediumselect2">
|
||
<option data-i18n="attack-light-damage-abbreviation" value="L">Attack (L)</option>
|
||
<option data-i18n="attack-moderate-damage-abbreviation" value="M" selected>Attack (M)
|
||
</option>
|
||
<option data-i18n="attack-serious-damage-abbreviation" value="S">Attack (S)</option>
|
||
<option data-i18n="attack-deadly-damage-abbreviation" value="D">Attack (D)</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_deckattack-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckattack-multiplier" value=4></div>
|
||
<div class="table-item"><input type="number" name="attr_deckattack-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckattack-loaded" class="text-mid"
|
||
value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_deckattack-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixattack" class="pictos-custom-button" title="Execute Attack vs. System Code or Icon" id="deckattack">[</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="pictos-button" title="Attack Utility Test" id="deckattack-rating-final">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Attack Utility from Disk" id="deckattack-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckattack-notes"></div>
|
||
<div data-i18n="black-hammer" class="table-item-left">Black Hammer</div>
|
||
<div class="table-item"><input type="number" name="attr_deckblackhammer-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckblackhammer-multiplier" value=20></div>
|
||
<div class="table-item"><input type="number" name="attr_deckblackhammer-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckblackhammer-loaded" class="text-mid"
|
||
value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_deckblackhammer-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixattack" class="pictos-custom-button" title="Blackhammer Utility Attack" id="deckblackhammer">[</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="pictos-button" title="Blackhammer Utility Test" id="deckblackhammer-rating-final">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Blackhammer Utility from Disk" id="deckblackhammer-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckblackhammer-notes"></div>
|
||
<div data-i18n="killjoy" class="table-item-left">Killjoy</div>
|
||
<div class="table-item"><input type="number" name="attr_deckkilljoy-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckkilljoy-multiplier" value=10></div>
|
||
<div class="table-item"><input type="number" name="attr_deckkilljoy-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckkilljoy-loaded" class="text-mid"
|
||
value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_deckkilljoy-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixattack" class="pictos-custom-button" title="KillJoy Utility Attack" id="deckkilljoy">[</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="pictos-button" title="KillJoy Utility Test" id="deckkilljoy-rating-final">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload KillJoy Utility from Disk" id="deckkilljoy-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckkilljoy-notes"></div>
|
||
<div data-i18n="slow" class="table-item-left">Slow</div>
|
||
<div class="table-item"><input type="number" name="attr_deckslow-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckslow-multiplier" value=4></div>
|
||
<div class="table-item"><input type="number" name="attr_deckslow-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckslow-loaded" class="text-mid" value=1>
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_deckslow-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixattack" class="pictos-button" title="Slow Utility Attack" id="deckslow">t</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="pictos-button" title="Slow Utility Test" id="deckslow-rating-final">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Slow Utility from Disk" id="deckslow-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckslow-notes"></div>
|
||
|
||
</div>
|
||
<fieldset class="repeating_offensiveutils">
|
||
<div class="deck-utilities-offensive">
|
||
<div class="table-item-left"><input type="text" name="attr_utility"></div>
|
||
<div class="table-item"><input type="number" name="attr_rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_multiplier" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_loaded" class="text-mid" value=1>
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixrepeatingtest" class="pictos-custom-button" title="Utility Attack" id="matrixrepeatingattack">[</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixrepeatingtest" class="pictos-button" title="Utility Test" id="matrixrepeatingtest">2</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Utility from Disk" id="repeating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_utilitynotes"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div class="deck-util-background">
|
||
<div class="SRH4" data-i18n="additional-utilities">Additional Utilities</div>
|
||
<div class="deck-utilities-additional">
|
||
<header data-i18n="utility" class="table-top-left">Utility</header>
|
||
<header data-i18n="rating" class="table-top-mid">Rating</header>
|
||
<header data-i18n="target" class="table-top-mid">Target</header>
|
||
<header data-i18n="multiplier" class="table-top-mid">Multiplier</header>
|
||
<header data-i18n="size" class="table-top-mid">Size</header>
|
||
<header data-i18n="loaded" class="table-top-mid">Loaded</header>
|
||
<header data-i18n="effective-rating" class="table-top-mid">Effective Rating</header>
|
||
<header data-i18n="execute" class="table-top-mid">Execute</header>
|
||
<header data-i18n="test" class="table-top-mid">Test</header>
|
||
<header data-i18n="swap-memory" class="table-top-mid">Swap Memory</header>
|
||
<header data-i18n="notes" 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 data-i18n="access" value="@{target|Target|matrixaccessrating}">access</option>
|
||
<option data-i18n="control" value="@{target|Target|matrixcontrolrating}">control</option>
|
||
<option data-i18n="index" value="@{target|Target|matrixindexrating}">index</option>
|
||
<option data-i18n="files" value="@{target|Target|matrixfilesrating}">files</option>
|
||
<option data-i18n="slave" value="@{target|Target|matrixslaverating}">slave</option>
|
||
</select>
|
||
<input type="number" name="attr_multiplier" value=0>
|
||
<input type="number" name="attr_size" value=0>
|
||
<div class="text-mid"><input type="checkbox" name="attr_loaded" value=1></div>
|
||
<input type="number" name="attr_rating-final" value=0>
|
||
<div><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="System Operation with Utility" id="matrixrepeatingexec">L</button></div>
|
||
<div><button type="action" name="act_matrixrepeatingtest" class="pictos-button" title="Utility Test - use vs. Tar programs" id="matrixrepeatingtest">2</button></div>
|
||
<div><button type="action" name="act_swapmemory" class="pictos-button"
|
||
title="Reload Utility from Disk" id="repeating">0</button></div>
|
||
<input type="text" name="attr_notes" class="myweapontxt">
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class='sheet-karma'>
|
||
<div data-i18n="karma" class="SRH3">Karma</div>
|
||
<div class="karma-summary">
|
||
<header data-i18n="karma-pool" class="table-top-left">Karma Pool:</header>
|
||
<header data-i18n="good-karma" class="table-top-mid">Good Karma:</header>
|
||
<header data-i18n="karma-total" class="table-top-right">Karma Total:</header>
|
||
<input type="number" name="attr_karma-pool" value=0>
|
||
<input type="number" name="attr_karma-good" value=0>
|
||
<input type="number" name="attr_karma-total" value=0>
|
||
</div>
|
||
<br>
|
||
<div class="karma-history">
|
||
<header data-i18n="attribute-skill-spell-etc" class="table-top-left">Attribute/Skill/Spell/etc.</header>
|
||
<header data-i18n="ammount-of-karma" class="table-top-mid">Ammount of Karma</header>
|
||
<header data-i18n="date" class="table-top-mid">Date</header>
|
||
<header data-i18n="notes" class="table-top-right">Notes</header>
|
||
</div>
|
||
<fieldset class="repeating_karma">
|
||
<div class="karma-history">
|
||
<div class="table-item-left"><input type="text" class="myweapontxt" name="attr_purchase"></div>
|
||
<div class="table-item"><input type="number" name="attr_cost" value=0 min=0></div>
|
||
<div class="table-item"><input type="text" name="attr_date"></div>
|
||
<div class="table-item"><input type="text" class="myweapontxt" name="attr_notes"></div>
|
||
</div>
|
||
</fieldset>
|
||
<br>
|
||
<div data-i18n="notes" class="SRH3">Notes</div>
|
||
<div class="character-notes">
|
||
<textarea name="attr_character-notes"></textarea>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
<div class='sheet-gear'>
|
||
<input type="hidden" class="gear-tabs-switch" name="attr_geartab" value="gear">
|
||
<div class="gear-tabs">
|
||
<input type="hidden" class="gear-tabs-switch" name="attr_geartab" value="gear">
|
||
<button class="gear-tabs-gear nuyen-total" type="action" name="act_gear-tab" data-i18n-title="gear" title="Gear"><span data-i18n="gear">GEAR</span><span> </span><span name="attr_carrying-weight"></span><span>kg</span></button>
|
||
<button class="gear-tabs-credsticks nuyen-total" type="action" name="act_credsticks-tab" title="credsticks" data-i18n-title="credsticks"><span data-i18n="credsticks">Credsticks</span><span> </span><span name="attr_nuyen"></span><span>¥</span></button>
|
||
<button class="gear-tabs-vehiclelist" type="action" name="act_vehiclelist-tab"
|
||
data-i8n="vehicles-list-uppercase" data-i18n-title="vehilces-owned-by-character"
|
||
title="Vehicles Owned by Character">Vehicles List</button>
|
||
<div class="tabs-empty"></div>
|
||
</div>
|
||
<div class="gear">
|
||
<div class="SRH3" data-i18n="gear">Gear</div>
|
||
<div class="gear-table">
|
||
<header data-i18n="name" class="table-top-left">Name</header>
|
||
<header data-i18n="rating" class="table-top-mid">Rating</header>
|
||
<header data-i18n="weight" class="table-top-mid">Weight</header>
|
||
<header data-i18n="carrying" class="table-top-mid">Carrying</header>
|
||
<header data-i18n="in-stash" class="table-top-mid">In Stash</header>
|
||
<header data-i18n="conceal" class="table-top-mid">Conceal</header>
|
||
<header data-i18n="type" class="table-top-mid">Type</header>
|
||
<header data-i18n="quantity" class="table-top-mid">Quantity</header>
|
||
<header data-i18n="pool" class="table-top-mid">Pool</header>
|
||
<header data-i18n="roll" class="table-top-mid">Roll</header>
|
||
<header data-i18n="description" class="table-top-right">Description</header>
|
||
</div>
|
||
<fieldset class="repeating_gear">
|
||
<div class="gear-table">
|
||
<div class="table-item-left"><input type="text" class="myweapontxt" name="attr_name"></div>
|
||
<div class="table-item"><input type="number" name="attr_rating" value=0 min=0></div>
|
||
<div class="table-item"><input type="number" name="attr_weight" value=0 step='0.01' min='0.00'></div>
|
||
<div class="table-item"><input type="radio" name="attr_load" value=1 checked></div>
|
||
<div class="table-item"><input type="radio" name="attr_load" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_conceal" value=0></div>
|
||
<div class="table-item"><select name="attr_type" class="mediumselect2">
|
||
<option data-i18n="reusable" value='reuse'>Reusable</option>
|
||
<option data-i18n="consumeable" value='onetime'>Consumeable</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_quantity" value=0 min=0></div>
|
||
<div class="table-item"><select name="attr_pool" class="mediumselect2">
|
||
<option SELECTED value="none">None</option>
|
||
<option data-i18n="combat" value="combat">Combat</option>
|
||
<option data-i18n="task" value="task">Task</option>
|
||
<option data-i18n="hacking" value="hacking">Hacking</option>
|
||
<option data-i18n="control" value="control">Control</option>
|
||
<option data-i18n="spell" value="spell">Spell</option>
|
||
<option data-i18n="astral" value="astral">Astral</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item"><button type="action" class="d6-button" name="act_usegear"
|
||
title="Use Item">L</button></div>
|
||
<div class="table-item"><input type="text" name="attr_description"></div>
|
||
</div>
|
||
</fieldset>
|
||
<br>
|
||
<div class="SRH3" data-i18n="carrying">carrying</div>
|
||
<div class="weight-table">
|
||
<b class="table-top-left" data-i18n="category">Category</b>
|
||
<b class="table-top-right" data-i18n="weight">Weight</b>
|
||
<div class="table-item-left" data-i18n="ranged-weapons">Ranged Weapons</div>
|
||
<div class="table-item"><span name="attr_rangedweapons-weight"></span></div>
|
||
<div class="table-item-left" data-i18n="melee-weapons">Melee Weapons</div>
|
||
<div class="table-item"><span name="attr_melee-weight-final"></span></div>
|
||
<div class="table-item-left" data-i18n="explosives">Explosives</div>
|
||
<div class="table-item"><span name="attr_explosives-weight"></span></div>
|
||
<div class="table-item-left" data-i18n="armor">Armor</div>
|
||
<div class="table-item"><span name="attr_armor-weight"></span></div>
|
||
<div class="table-item-left" data-i18n="ammunition">Ammunition</div>
|
||
<div class="table-item"><span name="attr_ammunition-weight"></span></div>
|
||
<div class="table-item-left" data-i18n="gear">Gear</div>
|
||
<div class="table-item"><span name="attr_gear-weight"></span></div>
|
||
<b class="table-item-left" data-i18n="total">total</b>
|
||
<b class="table-item"><span name="attr_carrying-weight"></span></b>
|
||
</div>
|
||
</div>
|
||
<div class="credsticks-show">
|
||
<div class="SRH3" data-i18n="credsticks">Credsticks ¥</div>
|
||
<div class="credsticks">
|
||
<header data-i18n="type" class="table-top-left">Type</header>
|
||
<header data-i18n="id" class="table-top-mid">ID</header>
|
||
<header data-i18n="rating" class="table-top-mid">Rating</header>
|
||
<header data-i18n="balance" class="table-top-mid">Balance ¥</header>
|
||
<header data-i18n="roll" class="table-top-mid">Roll</header>
|
||
<header data-i18n="permits" class="table-top-right">Permits</header>
|
||
</div>
|
||
<fieldset class="repeating_credsticks">
|
||
<div class="credsticks">
|
||
<div class="table-item-left">
|
||
<select name="attr_type" class="mediumselect2">
|
||
<option data-i18n="certified" value="Certified" SELECTED>Certified</option>
|
||
<option data-i18n="standard" value="Standard" SELECTED>Standard</option>
|
||
<option data-i18n="silver" value="Silver" SELECTED>Silver</option>
|
||
<option data-i18n="gold" value="Gold" SELECTED>Gold</option>
|
||
<option data-i18n="platinum" value="Platinum" SELECTED>Platinum</option>
|
||
<option data-i18n="ebony" value="Ebony" SELECTED>Ebony</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item">
|
||
<select name="attr_id" class="mediumselect2">
|
||
<option data-i18n="legitimate" value="Legitimate" SELECTED>Legitimate</option>
|
||
<option data-i18n="forged" value="Forged" SELECTED>Forged</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_rating" value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_balance" value=0><span>¥</span></div>
|
||
<div class="table-item"><button type="action" name="act_checkcredstick" class="d6-button">L</button>
|
||
</div>
|
||
<div class="table-item"><input type="text" class="myweapontxt" name="attr_notes"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div class="vehicles-list">
|
||
<div class="SRH3" data-i18n="vehicles-list">Vehicles List</div>
|
||
<div class="table-top" data-i18n="vehicles-skill-message">Vehicle Details and Skill rating go on sepperate
|
||
Vehicle Character Sheet</div>
|
||
<div class="vehicles-table">
|
||
<header data-i18n="name" class="table-item-left">Name</header>
|
||
<header data-i18n="model" class="table-item">Model</header>
|
||
<header data-i18n="cost" class="table-item">Cost ¥</header>
|
||
<header data-i18n="notes" class="table-item">Notes</header>
|
||
</div>
|
||
<fieldset class="repeating_vehicles">
|
||
<div class="vehicles-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name" class="myweapontxt"></div>
|
||
<div class="table-item"><input type="text" name="attr_model" class="myweapontxt"></div>
|
||
<div class="table-item"><input type="number" name="attr_cost" value=0><span>¥</span></div>
|
||
<div class="table-item"><input type="text" name="attr_notes" class="myweapontxt"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="sheet-rigger">
|
||
<div class="vcr-attributes">
|
||
<div data-i18n="vcr-rating" class="text-mid">VCR Rating:</div>
|
||
<div><input type="number" name="attr_vcr" value=0></div>
|
||
<div data-i18n="vehicle-reaction" class="text-mid">Vehicle Reaction:</div>
|
||
<div class="text-mid"><span class="numberspan" name="attr_vcr-reaction" \></div>
|
||
<div data-i18n="vehicle-initiative" class="text-mid">Vehicle Initiative:</div>
|
||
<div class="text-mid"><span class="numberspan" name="attr_vcr-initiative" \></div>
|
||
<div data-i18n="ivis-master-unit" class="text-mid">IVIS Master Unit:</div><input class="text-mid"
|
||
type="checkbox" name="attr_rcdeck-ivis-master" \>
|
||
<div data-i18n="fddm-master-unit" class="text-mid">FDDM Master Unit:</div>
|
||
<div class="text-mid"><input type="checkbox" name="attr_rcdeck-fddm-master" \></div>
|
||
</div>
|
||
<div class="rigger-tabs">
|
||
<input type="hidden" class="rigger-tabs-switch" name="attr_riggertab" value="rigger">
|
||
<button class="rigger-tabs-rcdeck" type="action" name="act_rcdeck-tab" data-i8n="remote-control-deck-uppercase"
|
||
data-i18n-title="remote control deck" title="Remote Control Deck Configuration">Remote Control Deck</button>
|
||
<button class="rigger-tabs-subscriber" type="action" name="act_subscriber-tab"
|
||
data-i8n="drone-subscriber-list-uppercase" data-i18n-title="drone-subscriber-list"
|
||
title="Drone Subscriber List">Subscriber List</button>
|
||
<button class="rigger-tabs-skills" type="action" name="act_rigger-tab"
|
||
data-i8n="vehicle-skills-uppercase">Vehicle Skills</button>
|
||
<div class="tabs-empty"></div>
|
||
</div>
|
||
<input type="hidden" class="rigger-tabs-switch" name="attr_riggertab" value="rigger">
|
||
<div class="drones-list">
|
||
<div class="drones-table">
|
||
<header data-i18n="name" class="table-top-left">Name</header>
|
||
<header data-i18n="type" class="table-top-mid">Type</header>
|
||
<header data-i18n="model" class="table-top-mid">Model</header>
|
||
<header data-i18n="cost" class="table-top-mid">Cost</header>
|
||
<header data-i18n="notes" class="table-top-right">Notes</header>
|
||
</div>
|
||
<fieldset class="repeating_drones">
|
||
<div class="drones-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name"></div>
|
||
<div class="table-item"><input type="text" name="attr_type"></div>
|
||
<div class="table-item"><input type="text" name="attr_model"></div>
|
||
<div class="table-item"><input type="number" name="attr_cost"></div>
|
||
<div class="table-item"><input type="text" name="attr_notes"></input>
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div class="rigger-rcdeck">
|
||
<div class="rcdeck-ew-border">
|
||
<div class="rcdeck-ew">
|
||
<div data-i18n="intrusion-factor-base" class="text-mid">Intrusion Factor Base:</div>
|
||
<span name="attr_ewarfare" class="spn-nc" />
|
||
<div data-i18n="intrusion-factor-modifier" class="text-mid">Intrusion Factor Mods:</div>
|
||
<input type="number" name="attr_rcdeck-intrusion-mods" />
|
||
<div data-i18n="intrusion-factor" 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-nc"></div>
|
||
<header data-i18n="rating" class="table-top-mid-nc">Rating</header>
|
||
<header data-i18n="roll" class="table-top-mid-nc">Roll</header>
|
||
<header data-i18n="flux-rating" class="table-top-mid-nc">Flux Rating</header>
|
||
<header data-i18n="modified-flux" class="table-top-mid-nc">Modified Flux</header>
|
||
<header data-i18n="range" class="table-top-right-nc">Range</header>
|
||
<header data-i18n="deck" class="table-item-left-nc">Deck:</header>
|
||
<div class="table-item-nc"><input type="number" name="attr_rcdeck-rating" min=0 value=0></div>
|
||
<div class="table-item-nc"><button class="d6-button" type="action" name="act_skilltest"
|
||
id="rcdeck-rating control" title="Intrusion Detect Test">L</button></div>
|
||
<div class="table-item-nc"><span name="attr_rcdeck-flux"></div>
|
||
<div class="table-item-nc"><input type="number" name="attr_rcdeck-fluxmod" min=0 value=0></div>
|
||
<div class="table-item-nc"><span name="attr_rcdeck-range"></div>
|
||
<div data-i18n="eccm" class="table-item-left-nc">ECCM:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_eccm-rating" min=0 value=0></div>
|
||
<div class="table-item-nc"><button class="d6-button" type="action" name="act_skilltest"
|
||
id="eccm-rating control" title="ECCM Test">L</button></div>
|
||
<div class="table-item-nc"><span name="attr_eccm-flux"></div>
|
||
<div class="table-item-nc"><input type="number" name="attr_eccm-fluxmod" min=0 value=0></div>
|
||
<div class="table-item-nc"><span name="attr_eccm-range"></div>
|
||
<div data-i18n="electronic-warfare" class="table-item-left-nc">Electronic Warfare:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_ewarfare" value=0 /></div>
|
||
<div class="table-item-nc"><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-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
<div data-i18n="encryption-module" class="table-item-left-nc">Encryption Module:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_rcdeck-encryption-rating" value=0 /></div>
|
||
<div class="table-item-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
<div data-i18n="decryption-module" class="table-item-left-nc">Decryption Module:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_rcdeck-decryption-rating" value=0 /></div>
|
||
<div class="table-item-nc"><button class="d6-button" type="action" name="act_skilltest"
|
||
id="rcdeck-decryption-rating control" title="Decryption Test">L</button></div>
|
||
<div class="table-item-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
<div data-i18n="protocol-emulation-module" class="table-item-left-nc">Protocol Emulation Module:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_rcdeck-pem-rating" value=0 /></div>
|
||
<div class="table-item-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
<div class="table-item-nc"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" class="rigger-tabs-switch" name="attr_riggertab" value="rigger">
|
||
<div class="vehicle-skills">
|
||
<div data-i18n="update-vehicle-skill-here" class="SRH5">Update Vehicle Skill Here</div>
|
||
<div data-i18n="vehicle-specialize-message" class="SRH5">If specializing in a specif vehicle, add modifiers to
|
||
the vehicle/drone itself</div><br>
|
||
<div class="vehicle-skills-table">
|
||
<header data-i18n="skill" class="table-top-left-nc">Skill</header>
|
||
<header data-i18n="level" class="table-top-mid-nc">Level</header>
|
||
<header data-i18n="specialize" class="table-top-mid-nc">Specialize</header>
|
||
<header data-i18n="remote-operation" class="table-top-right-nc">Remote Operation</header>
|
||
<div></div>
|
||
<header data-i18n="skill" class="table-top-left-nc">Skill</header>
|
||
<header data-i18n="level" class="table-top-mid-nc">Level</header>
|
||
<header data-i18n="specialize" class="table-top-mid-nc">Specialize</header>
|
||
<header data-i18n="remote-operation" class="table-top-right-nc">Remote Operation</header>
|
||
<div></div>
|
||
<div data-i18n="bike" class="table-item-left-nc">Bike:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_bike" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_bike-specialize"
|
||
class="bike-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="car" class="table-item-left-nc">Car:</div>
|
||
<div class="table-item-left-nc"><input type="number" name="attr_car" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_car-specialize"
|
||
class="car-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="hovercraft" class="table-item-left-nc">Hovercraft:</div>
|
||
<div class="table-item-left-nc"><input type="number" name="attr_hovercraft" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_hovercraft-specialize"
|
||
class="hovercraft-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="lighter-than-air-aircraft-abbreviated" class="table-item-left-nc">LTA Aircraft:</div>
|
||
<div class="table-item-left-nc"><input type="number" name="attr_lta" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_lta-specialize"
|
||
class="lta-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="motorboat" class="table-item-left-nc">Motorboat:</div>
|
||
<div class="table-item-left-nc"><input type="number" name="attr_motorboat" value=0> </div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_motorboat-specialize"
|
||
class="motorboat-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="rotor-aircraft" class="table-item-left-nc">Rotor Aircraft:</div>
|
||
<div class="table-item-left-nc"><input type="number" name="attr_rotor" value=0> </div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_rotor-specialize"
|
||
class="rotor-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="sailboat" class="table-item-left-nc">Sailboat:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_sailboat" value=0> </div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_sailboat-specialize"
|
||
class="sailboat-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="ship" class="table-item-left-nc">Ship:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_ship" value=0> </div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_ship-specialize"
|
||
class="ship-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="submarine" class="table-item-left-nc">Submarine:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_submarine" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_submarine-specialize"
|
||
class="submarine-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="vectored-thrust" class="table-item-left-nc">Vectored Thrust:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_vectoredthrust" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_vectoredthrust-specialize"
|
||
class="vectoredthrust-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="winged-aircraft" class="table-item-left-nc">Winged Aircraft:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_wingedaircraft" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_wingedaircraft-specialize"
|
||
class="wingedaircraft-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="mechanical-arm" class="table-item-left-nc">Mechanical Arm:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_mecharm" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_mecharm-specialize"
|
||
class="mecharm-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="semiballistic" class="table-item-left-nc">Semiballistic:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_semiballistic" value=0> </div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_semiballistic-specialize"
|
||
class="semiballistic-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="suborbital" class="table-item-left-nc">Suborbital:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_suborbital" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_suborbital-specialize"
|
||
class="suborbital-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="tracks" class="table-item-left-nc">Tracks:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_tracks" value=0></div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_tracks-specialize"
|
||
class="tracks-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="walkers" class="table-item-left-nc">Walkers:</div>
|
||
<div class="table-item-nc"><input type="number" name="attr_walkers" value=0> </div>
|
||
<div class="table-item-nc"><input type="checkbox" name="attr_walkers-specialize"
|
||
class="walkers-spec-switch text-mid"></div>
|
||
<div class="table-item-nc">
|
||
<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 data-i18n="combat-skills-weapons-armor-and-ammunition" class="SRH2">Combat Skills, Weapons, Armor and Ammo</div>
|
||
<input type="hidden" class="combat-tabs-switch" name="attr_combattab" value="combat">
|
||
<div class="combat-tabs">
|
||
<input type="hidden" class="combat-tabs-switch" name="attr_combattab" value="combat">
|
||
<button class="combat-tabs-combat" type="action" name="act_combat-tab" data-i8n="combat-skills-uppercase"
|
||
data-i18n-title="combat-skills" title="combat skills">COMBAT SKILLS</button>
|
||
<button class="combat-tabs-ranged" type="action" name="act_ranged-tab" data-i8n="ranged-weapons-uppercase"
|
||
data-i18n-title="ranged-weapons" title="ranged weapons">RANGED WEAPONS</button>
|
||
<button class="combat-tabs-melee" type="action" name="act_melee-tab" data-i8n="melee-weapons-uppercase"
|
||
data-i18n-title="melee-weapons" title="melee weapons">MELEE WEAPONS</button>
|
||
<button class="combat-tabs-explosives" type="action" name="act_explosives-tab" data-i8n="explosives-uppercase"
|
||
data-i18n-title="explosives" title="explosives weapons">EXPLOSIVES</button>
|
||
<button class="combat-tabs-armor" type="action" name="act_armor-tab" data-i8n="armor-uppercase"
|
||
data-i18n-title="armor" title="armor">ARMOR</button>
|
||
<button class="combat-tabs-ammo" type="action" name="act_ammo-tab" data-i8n="ammunition-uppercase"
|
||
data-i18n-title="ammunition" title="ammunition">AMMUNITION</button>
|
||
<div class="tabs-empty"></div>
|
||
</div>
|
||
<div class="combat-skills">
|
||
<div data-i18n="update-combat-skills-here" class="SRH5">Update Combat Skill Here</div>
|
||
<div data-i18n="combat-skills-specialization-message" 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">
|
||
<header data-i18n="assualt-rifle">Assualt Rifle:</header><input type="number" name="attr_assaultrifles"
|
||
value=0 />
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="pistols">Pistols:</header><input type="number" name="attr_pistols" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="rifles">Rifles:</header><input type="number" name="attr_rifles" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="shotguns">Shotguns:</header><input type="number" name="attr_shotguns" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="sub-machine-gun-abbreviation">SMGs:</header><input type="number" name="attr_smgs"
|
||
value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="throwing">Throwing:</header><input type="number" name="attr_throwing" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="edged">Edged:</header><input type="number" name="attr_edged" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="clubs">Clubs:</header><input type="number" name="attr_clubs" value=0 />
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="cyber-implant">Cyper Implant:</header><input type="number" name="attr_cyberimplant"
|
||
value=0 />
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="whip">Whip:</header><input type="number" name="attr_whips" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="pole-arm">Pole Arm:</header><input type="number" name="attr_poles" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="gunnery">Gunnery:</header><input type="number" name="attr_gunnery" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="heavy-weapons">Heavy Weapons:</header><input type="number" name="attr_heavyweapons"
|
||
value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="lasers">Lasers:</header><input type="number" name="attr_lasers" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="launchers">Launchers:</header><input type="number" name="attr_launchers" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="spray">Spray:</header><input type="number" name="attr_spray" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="gyrojet">Gyrojet:</header><input type="number" name="attr_gyrojet" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="projectile">Projectile:</header><input type="number" name="attr_projectiles" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="demolitions">Demolitions:</header><input type="number" name="attr_demolitions"
|
||
value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="under-water">Under Water:</header><input type="number" name="attr_underwatercombat"
|
||
value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="blowgun">Blowgun:</header><input type="number" name="attr_blowgun" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="bracer">Bracer:</header><input type="number" name="attr_bracer" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="gun-cane">Gun Cane:</header><input type="number" name="attr_guncane" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="oral-gun">Oral Gun:</header><input type="number" name="attr_oralgun" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="oral-strike">Oral Strike:</header><input type="number" name="attr_oralstrike"
|
||
value=0>
|
||
</div>
|
||
<div class="combat-skills-items">
|
||
<header data-i18n="eye-gun">Eye Gun:</header><input type="number" name="attr_eyegun" value=0>
|
||
</div>
|
||
</div>
|
||
<div></div>
|
||
<div class="combat-unarmed">
|
||
<div data-i18n="unarmed">Unarmed:</div><input type="number" name="attr_unarmed" value=0>
|
||
<div></div>
|
||
<div data-i18n="martial-arts">Martial Arts:</div>
|
||
<div><input type="text" list="martialarts" value="Unarmed" name="attr_martialarts">
|
||
<datalist class="mediumselect" id="martialarts">
|
||
<option data-i18n="unarmed" selected>Unarmed</option>
|
||
<option data-i18n="brawling">Brawling</option>
|
||
<option data-i18n="mma">MMA</option>
|
||
<option data-i18n="karate">Karate</option>
|
||
<option data-i18n="arnis">Arnis</option>
|
||
<option data-i18n="muy-thai">Muy Thai</option>
|
||
<option data-i18n="tae-kwon-do">Tae Kwon Do</option>
|
||
<option data-i18n="wild-cat">Wild Cat</option>
|
||
</datalist>
|
||
</div>
|
||
<div></div>
|
||
<div data-i18n="notes">Notes:</div>
|
||
<textarea name="attr_martialartsnotes" style='width:300px;height:50%;margin-bottom:unset;'></textarea>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="rangedweapons">
|
||
<div class="ranged-table-headers">
|
||
<div class="table-top-left-nc" data-i18n="equip">Equip</div>
|
||
<div class="table-top-mid-nc" data-i18n="general">General</div>
|
||
<div class="table-top-mid-nc" data-i18n="range">Range</div>
|
||
<div class="table-top-mid-nc" data-i18n="fire-mode">Fire Mode</div>
|
||
<div class="table-top-mid-nc" data-i18n="damage">Damage</div>
|
||
<div class="table-top-mid-nc" data-i18n="ammunition">Ammunition</div>
|
||
<div class="table-top-right-nc" data-i18n="show">Show</div>
|
||
</div>
|
||
<div class="ranged-table-items">
|
||
<div class="table-item-left-nc" title="Primary Hand" data-i18n="primary-abbreviation">Pri</div>
|
||
<div class="table-item-nc" title="Off Hand" data-i18n="secondary-abbreviation">Sec</div>
|
||
<div class="table-item-nc" data-i18n="name">Name</div>
|
||
<div class="table-item-nc" data-i18n="type">Type</div>
|
||
<div class="table-item-nc" data-i18n="conceal">Conceal</div>
|
||
<div class="table-item-nc" data-i18n="minimum-abbreviation">Min</div>
|
||
<div class="table-item-nc" data-i18n="short-abbreviation">S</div>
|
||
<div class="table-item-nc" data-i18n="medium-abbreviation">M</div>
|
||
<div class="table-item-nc" data-i18n="long-abbreviation">L</div>
|
||
<div class="table-item-nc" data-i18n="extreme-abbreviation">Ex</div>
|
||
<div class="table-item-nc" data-i18n="single-shot-abbreviation">SS</div>
|
||
<div class="table-item-nc" data-i18n="semi-automatic-abbreviation">SA</div>
|
||
<div class="table-item-nc" data-i18n="burst-fire-abbreviation">BF</div>
|
||
<div class="table-item-nc" data-i18n="full-automatic-abbreviation">FA</div>
|
||
<div class="table-item-nc" data-i18n="power">Power</div>
|
||
<div class="table-item-nc" data-i18n="damage-abbreviation">Dmg</div>
|
||
<div class="table-item-nc" data-i18n="maximum-abbreviation">Max</div>
|
||
<div class="table-item-nc" data-i18n="remain">Remain</div>
|
||
<div class="table-item-nc" data-i18n="reload">Reload</div>
|
||
<div class="table-item-nc" data-i18n="fire">Fire</div>
|
||
<div class="table-item-nc" data-i18n="more">More</div>
|
||
</div>
|
||
<fieldset class="repeating_rangedweapons">
|
||
<div class="ranged-table-row">
|
||
<div class="text-mid"><input title="Equipped in Primary Hand" type="checkbox"
|
||
name="attr_primary-ranged-equipped"></div>
|
||
<div class="text-mid"><input title="Equipped in Off Hand" type="checkbox"
|
||
name="attr_secondary-ranged-equipped"></div>
|
||
<input type="text" name="attr_name" class="myweapontxt">
|
||
<select name="attr_type" class="mediumselect2">
|
||
<option data-i18n="other" value="Other" SELECTED>Other</option>
|
||
<option data-i18n="hold-out-pistol " value="Hold-out Pistol">Hold-out Pistol</option>
|
||
<option data-i18n="light-pistol" value="Light Pistol">Light Pistol</option>
|
||
<option data-i18n="machine-pistol" value="Machine Pistol">Machine Pistol</option>
|
||
<option data-i18n="heavy-pistol" value="Heavy Pistol">Heavy Pistol</option>
|
||
<option data-i18n="sub-machine-gun-abbreviation" value="SMG">SMG</option>
|
||
<option data-i18n="taser" value="Taser">Taser</option>
|
||
<option data-i18n="shotgun" value="Shotgun">Shotgun</option>
|
||
<option data-i18n="sporting-rifle" value="Sporting Rifle">Sporting Rifle</option>
|
||
<option data-i18n="sniper-rifle" value="Sniper Rifle">Sniper Rifle</option>
|
||
<option data-i18n="assault-rifle" value="Assault Rifle">Assault Rifle</option>
|
||
<option data-i18n="light-machine-gun-abbreviation" value="Light Machine Gun">LMG</option>
|
||
<option data-i18n="medium-machine-gun-abbreviation" value="Medium Machine Gun">MMG</option>
|
||
<option data-i18n="heavy-machine-gun-abbreviation" value="Heavy Machine Gun">HMG</option>
|
||
<option data-i18n="assualt-cannon" value="Assault Cannon">Assault Cannon</option>
|
||
<option data-i18n="minigun" value="Minigun">Minigun</option>
|
||
<option data-i18n="bow" value="Bow">Bow</option>
|
||
<option data-i18n="light-crossbow" value="Light Crossbow">Light Crossbow</option>
|
||
<option data-i18n="medium-crossbow" value="Medium Crossbow">Medium Crossbow</option>
|
||
<option data-i18n="heavy-crossbow" value="Heavy Crossbow">Heavy Crossbow</option>
|
||
<option data-i18n="sling-shot" value="Sling Shot">Sling Shot</option>
|
||
<option data-i18n="sling-launcher" value="Sling Launcher">Sling Launcher</option>
|
||
<option data-i18n="thrown-knife" value="Thrown Knife">Thrown Knife</option>
|
||
<option data-i18n="shuriken" value="Shuriken">Shuriken</option>
|
||
<option data-i18n="caltrops" value="Caltrops">Caltrops</option>
|
||
<option data-i18n="nets" value="Nets">Nets</option>
|
||
<option data-i18n="bracer" value="Bracer">Bracer</option>
|
||
<option data-i18n="gun-cane" value="Gun Cane">Gun Cane</option>
|
||
<option data-i18n="speargun" value="Speargun">Speargun</option>
|
||
<option data-i18n="net-gun" value="Net Gun">Net Gun</option>
|
||
<option data-i18n="laser-pistol" value="Laser Pistol">Laser Pistol</option>
|
||
<option data-i18n="laser-rifle" value="Laser Rifle">Laser Rifle</option>
|
||
<option data-i18n="laser-sniper" value="Laser Sniper">Laser Sniper</option>
|
||
<option data-i18n="gyrojet-land" value="Gyrojet (land)">Gyrojet (land)</option>
|
||
<option data-i18n="gyrojet-water" value="Gyrojet (water)">Gyrojet (water)</option>
|
||
<option data-i18n="flamethrower" value="Flamethrower">Flamethrower</option>
|
||
<option data-i18n="blowgun" value="Blowgun">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">
|
||
<input type="hidden" name="attr_firemode" value="sa">
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="ss"></div>
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="sa"></div>
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="bf"></div>
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="fa"></div>
|
||
<input type="number" name="attr_power" value=1>
|
||
<select name="attr_damage" title="Weapon Damage" class="mediumselect2">
|
||
<option data-i18n="light-damage-abbreviation" title="Light Damage" value="L" SELECTED>L</option>
|
||
<option data-i18n="moderate-damage-abbreviation" title="Moderate Damage" value="M">M</option>
|
||
<option data-i18n="serious-damage-abbreviation" title="Serious Damage" value="S">S</option>
|
||
<option data-i18n="deadly-damage-abbreviation" title="Deadly Damage" value="D">D</option>
|
||
<option data-i18n="light-stun-abbreviation" title="Light Stun" value="L(stun)">L(s)</option>
|
||
<option data-i18n="moderate-stun-abbreviation" title="Moderate Stun" value="M(stun)">M(s)</option>
|
||
<option data-i18n="serious-stun-abbreviation" title="Serious Stun" value="S(stun)">S(s)</option>
|
||
<option data-i18n="deadly-stun-abbreviation" title="Deadly Stun" value="D(stun)">D(s)</option>
|
||
</select>
|
||
<input type="number" name="attr_ammo" value=0>
|
||
<input type="number" name="attr_ammoremain" value=0>
|
||
<div><button class="pictos-button" id="reloadbutton" type="action" name="act_reload"
|
||
title="Reload Weapon">0</button></div>
|
||
<div><button class="attack-dice" type="action" id="rangedattack" name="act_rangedattack"
|
||
title="Fire Weapon"></button>
|
||
</div>
|
||
<div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
|
||
</div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<span class="show-weaponmods">
|
||
<div class="ranged-mods">
|
||
<input type="hidden" class="ammofilter" name="attr_type" >
|
||
<div class="text-mid"
|
||
title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box">
|
||
<b data-i18n="skill">Skill
|
||
</div>
|
||
<div class="text-mid"
|
||
title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)"
|
||
data-i18n="plus-dice-abbreviation">+Dice</div>
|
||
<div class="text-mid"
|
||
title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks"
|
||
data-i18n="plus-target-number-abberviation">+TN</div>
|
||
<header class="text-mid" title="Gas vents and other recoil accesories"
|
||
data-i18n="recoil-compensation-abbreviation">Recoil Comp</header>
|
||
<header data-i18n="gyro-stabalization">Gyro Stabalization</header>
|
||
<header title="accesories that improve to hit number for ranged combat"
|
||
data-i18n="targeting-assistance">Targeting Assistance</header>
|
||
<header class="text-mid" title="Clip, Belt, Cylinder, Magazine or Action Break"
|
||
data-i18n="reload-type">Reload Type</header>
|
||
<header class="text-mid" title="number or clips, belts or individual rounds" data-i18n="reloads">
|
||
Reloads</header>
|
||
<header class="text-mid" data-i18n="ammo-type">Ammo Type</header>
|
||
<header class="text-mid" data-i18n="weight">Weight</header>
|
||
<header class="text-mid" data-i18n="carrying">Carrying</header>
|
||
<header class="text-mid" data-i18n="in-stash">In Stash</header>
|
||
<header class="text-mid" data-i18n="ammo-weight">Ammo Weight</header>
|
||
<header class="text-mid" data-i18n="show-notes">Show Notes:</header>
|
||
<select name="attr_skill" class="mediumselect2"
|
||
title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box">
|
||
<option data-i18n="pistol" SELECTED value="@{pistols}">Pistol</option>
|
||
<option data-i18n="assault-rifle" value="@{assaultrifles}">Assault Rifle</option>
|
||
<option data-i18n="heavy-weapon" value="@{heavyweapons}">Heavy Weapon</option>
|
||
<option data-i18n="laser" value="@{lasers}">Laser</option>
|
||
<option data-i18n="projectile" value="@{projectiles}">Projectile</option>
|
||
<option data-i18n="rifle" value="@{rifles}">Rifle</option>
|
||
<option data-i18n="shotgun" value="@{shotguns}">Shotgun</option>
|
||
<option data-i18n="sub-machine-gun-abbreviation" value="@{smgs}">SMG</option>
|
||
<option data-i18n="thrown" value="@{throwing}">Thrown</option>
|
||
<option data-i18n="blowgun" value="@{blowgun}">Blowgun</option>
|
||
<option data-i18n="bracer" value="@{bracer}">Bracer</option>
|
||
<option data-i18n="gun-cane" value="@{guncane}">Gun Cane</option>
|
||
<option data-i18n="oral-gun" value="@{oralgun}">Oral Gun</option>
|
||
<option data-i18n="oral-strike" value="@{oralstrike}">Oral Strike</option>
|
||
<option data-i18n="eye-gun" value="@{eyegun}">Eye Gun</option>
|
||
<option data-i18n="other" value=0>Other</option>
|
||
</select>
|
||
<div><input type="number" name="attr_specialized" value=0></div>
|
||
<div><input type="number" name="attr_tnmods" value=0></div>
|
||
<div><input type="number" name="attr_recoilcomp" title="Gas vents and other recoil accesories"
|
||
value=0></div>
|
||
<select class="mediumselect2" name="attr_gyro">
|
||
<option data-i18n="none" value="0" SELECTED>None</option>
|
||
<option data-i18n="cyberarm" value="3">Cyberarm</option>
|
||
<option data-i18n="regular" value="5">Regular</option>
|
||
<option data-i18n="deluxe" value="6">Deluxe</option>
|
||
</select>
|
||
<select class="mediumselect2" name="attr_targeting">
|
||
<option data-i18n="none" value="0" SELECTED>None</option>
|
||
<option data-i18n="smartlink" value="-2">Smartlink</option>
|
||
<option data-i18n="laser-sight" value="-1">LaserSight</option>
|
||
<option data-i18n="smart-goggles" value="-1.00">Smart Goggles</option>
|
||
</select>
|
||
<select name="attr_reloadmethod" class="mediumselect2">
|
||
<option data-i18n="clip" value="clip">clip</option>
|
||
<option data-i18n="break" value="break">break</option>
|
||
<option data-i18n="magazine" value="magazine">magazine</option>
|
||
<option data-i18n="speed-loader" value="speed loader">speed loader</option>
|
||
<option data-i18n="cylinder" value="cylinder">cylinder</option>
|
||
<option data-i18n="belt" value="belt">belt</option>
|
||
</select>
|
||
<div><input type="number" name="attr_reloads" value=0></div>
|
||
<select name="attr_ammotype" class="mediumselect2 ammotype">
|
||
<option data-i18n="regular" value="regular">Regular</option>
|
||
<option data-i18n="explosive" value="explosive">Explosive</option>
|
||
<option data-i18n="explosive-ex" value="explosive2">Explosive EX</option>
|
||
<option data-i18n="hammerheads" value="hammerheads">Hammerheads</option>
|
||
<option value="screamer">Screamer</option>
|
||
<option value="gyrojetplus">GyroJet Plus</option>
|
||
<option value="gyrojetplusseeker">GyroJet Plus Seeker</option>
|
||
<option value="gyrojetseeker">GyroJet Seeker</option>
|
||
<option value="largenet">Large Net</option>
|
||
<option data-i18n="adps" value="adps">ADPS</option>
|
||
<option data-i18n="flechette" value="flechette">Flechette</option>
|
||
<option data-i18n="gel" value="gel">Gel</option>
|
||
<option data-i18n="tracer" value="tracer">Tracer</option>
|
||
<option data-i18n="anti-vehicle" value="av">Anti-Vehicl</option>
|
||
<option data-i18n="capsule" value="capsule">Capsule</option>
|
||
<option data-i18n="glazer" value="glazer">Glazer</option>
|
||
<option data-i18n="Hi-C" value="hic">Hi-C</option>
|
||
<option data-i18n="hollow-point" value="hpoint">Hollow Point</option>
|
||
<option data-i18n="incendiary" value="incendiary">Incendiary</option>
|
||
<option data-i18n="mercury" value="mercury">Mercury</option>
|
||
<option data-i18n="tracker" value="tracker">Tracker</option>
|
||
<option value="bigd">Big D's Temper</option>
|
||
<option data-i18n="bola" value="bola">Bola</option>
|
||
<option data-i18n="flare" value="flare">Flare</option>
|
||
<option value="shocklock">Shock Lock</option>
|
||
<option data-i18n="stun-shell" value="stunshell">Stun Shell</option>
|
||
</select>
|
||
<div><input type="number" name="attr_weight" value=0 step='0.01'></div>
|
||
<div class="text-mid"><input type="radio" name="attr_load" value=1 checked></div>
|
||
<div class="text-mid"><input type="radio" name="attr_load" value=0></div>
|
||
<div><input type="number" name="attr_ammoweight" value=0 step='0.01'></div>
|
||
<div>
|
||
<input type="hidden" class="show-notes" name="attr_shownotes" value="show">
|
||
<button class="pictos-button" type="action" name="act_shownotes" data-i18n-title="show-notes" title="Show Notes">y</button>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" class="show-notes" name="attr_shownotes" value="show">
|
||
<div class="ranged-notes">
|
||
<div data-i18n="notes">Notes</div>
|
||
<div></div>
|
||
<textarea name="attr_notes" style='width:300px;height:22px;'></textarea>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
<br>
|
||
<div class="weight">
|
||
<div data-i18n="weight">Weight</div>
|
||
<div></div>
|
||
<div class="numberspan"><span name="attr_rangedweapons-weight"></span>kg</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="meleeweapons">
|
||
<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="unarmed-equipped" type="hidden" \>
|
||
<div class="melee-table-header">
|
||
<div class="table-top-left-nc" data-i18n="equip">Equip</div>
|
||
<div class="table-top-mid-nc" data-i18n="name">Name</div>
|
||
<div class="table-top-mid-nc" data-i18n="skill">Skill</div>
|
||
<div class="table-top-mid-nc" data-i18n="conceal">Conceal</div>
|
||
<div class="table-top-mid-nc" data-i18n="reach">Reach</div>
|
||
<div class="table-top-mid-nc" data-i18n="power">Power</div>
|
||
<div class="table-top-mid-nc" data-i18n="damage">Damage</div>
|
||
<div class="table-top-mid-nc"
|
||
title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)"
|
||
data-i18n="plus-dice-abbreviation">+Dice</div>
|
||
<div class="table-top-mid-nc"
|
||
title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks"
|
||
data-i18n="plus-target-number-abberviation">+TN</div>
|
||
<div class="table-top-mid-nc" data-i18n="weight">Weight</div>
|
||
<div class="table-top-mid-nc" data-i18n="carrying">Carrying</div>
|
||
<div class="table-top-mid-nc" data-i18n="in-stash">In Stash</div>
|
||
<div class="table-top-mid-nc" data-i18n="attack">Attack</div>
|
||
<div class="table-top-right-nc" data-i18n="notes">Notes</div>
|
||
</div>
|
||
<div class="melee-table-row">
|
||
<div class="text-mid"><input type="checkbox" name="attr_unarmed-equipped" checked></div>
|
||
<input class="myweapontxt" type="text" name="attr_unarmed-name" value="Unarmed Combat" disabled>
|
||
<select class="mediumselect2" name="attr_unarmedskill">
|
||
<option data-i18n="unarmed" 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 data-i18n="moderate-stun-abbreviation" value="M(stun)" SELECTED>M(stun)</option>
|
||
</select>
|
||
<input type="number" name="attr_unarmed-specialized" value=0 \>
|
||
<input type="number" name="attr_unarmed-miscmods" value=0 \>
|
||
<input type="number" name="attr_unarmed-weight" disabled value=0>
|
||
<div class="text-mid"></div>
|
||
<div class="text-mid"></div>
|
||
<div><button class="attack-dice" id="unarmedattack" type="action" name="act_melee" title="Melee Attack"></button></div>
|
||
<input name="attr_notes" type="text"></input>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
<input type='hidden' class='weaponfocus-show' name='attr_weaponfocus-show' value="false" />
|
||
<div class="show-weaponfocus-melee">
|
||
<div class="weaponfocus">
|
||
<div class="text-mid"><input type="checkbox" name="attr_weaponfocus-equipped" checked></div>
|
||
<input class="myweapontxt" type="text" name="attr_weaponfocus-name" value="Weapon Focus">
|
||
<select class="mediumselect2" name="attr_weaponfocus skill">
|
||
<option value="@{edged}" SELECTED data-i18n="edged">Edged</option>
|
||
<option value="@{clubs}" data-i18n="club">Club</option>
|
||
<option value="@{poles}" data-i18n="pole-arm">Pole Arm</option>
|
||
<option value="@{whips}" data-i18n="whip">Whip</option>
|
||
</select>
|
||
<input type="number" name="attr_weaponfocus-conceal" value=0>
|
||
<input type="number" name="attr_weaponfocus-reach" value=0>
|
||
<input type="number" name="attr_weaponfocus-power" value=0>
|
||
<select name="attr_weaponfocus-damage" class="mediumselect2">
|
||
<option data-i18n="light-damage-abbreviation">L</option>
|
||
<option data-i18n="moderate-damage-abbreviation" SELECTED>M</option>
|
||
<option data-i18n="serious-damage-abbreviation">S</option>
|
||
<option data-i18n="deadly-damage-abbreviation">D</option>
|
||
</select>
|
||
<input type="number" name="attr_weaponfocus-specialized" value=0 \>
|
||
<input type="number" name="attr_weaponfocus-tnmods" value=0 \>
|
||
<input type="number" name="attr_weaponfocus-weight" value=0>
|
||
<div class="text-mid"><input type="radio" name="attr_weaponfocus-load" value=1 checked></div>
|
||
<div class="text-mid"><input type="radio" name="attr_weaponfocus-load" value=0></div>
|
||
<div><button class="attack-dice" id="weaponfocus" type="action" name="act_melee"
|
||
title="Melee Attack"></button></div>
|
||
<input class="myweapontxt" type="text" name="attr_weaponfocus-notes">
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</div>
|
||
<fieldset class="repeating_meleeweapons">
|
||
<div class="melee-table-row">
|
||
<div class="text-mid"><input type="checkbox" name="attr_meleeequiped"></div>
|
||
<input type="text" name="attr_name">
|
||
<select name="attr_skill" class="mediumselect2">
|
||
<option data-i18n="club" value="@{clubs}">Club</option>
|
||
<option data-i18n="cyber-implant" value="@{cyberimplant}">Cyber Implant</option>
|
||
<option data-i18n="edged" value="@{edged}">Edged</option>
|
||
<option data-i18n="pole-arm" value="@{poles}">Pole Arm</option>
|
||
<option data-i18n="whip" value="@{whips}">Whip</option>
|
||
<option data-i18n="unarmed" 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 data-i18n="light-damage-abbreviation" title="Light Damage" value="L" SELECTED>L</option>
|
||
<option data-i18n="moderate-damage-abbreviation" title="Moderate Damage" value="M">M</option>
|
||
<option data-i18n="serious-damage-abbreviation" title="Serious Damage" value="S">S</option>
|
||
<option data-i18n="deadly-damage-abbreviation" title="Deadly Damage" value="D">D</option>
|
||
<option data-i18n="light-stun-abbreviation" title="Light Stun" value="L(stun)">L(s)</option>
|
||
<option data-i18n="moderate-stun-abbreviation" title="Moderate Stun" value="M(stun)">M(s)</option>
|
||
<option data-i18n="serious-stun-abbreviation" title="Serious Stun" value="S(stun)">S(s)</option>
|
||
<option data-i18n="deadly-stun-abbreviation" title="Deadly Stun" value="D(stun)">D(s)</option>
|
||
</select>
|
||
<input type="number" name="attr_specialized" value=0 \>
|
||
<input type="number" name="attr_tnmods" value=0 \>
|
||
<input type="number" name="attr_weight" value=0 step='0.01'>
|
||
<div class="text-mid"><input type="radio" name="attr_load" value=1 checked></div>
|
||
<div class="text-mid"><input type="radio" name="attr_load" value=0></div>
|
||
<input name="attr_miscnotes" type="text" hidden=true value="Reach Bonus: ">
|
||
<div><button class="attack-dice" type="action" name="act_attack" id="repeatingmelee"
|
||
title="Melee Attack"></button></div>
|
||
<div><input name="attr_notes" type="text"></input></div>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
<br>
|
||
<div class="weight">
|
||
<div data-i18n="weight">Weight</div>
|
||
<div></div>
|
||
<div class="numberspan"><span name="attr_melee-weight-final"></span>kg</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="explosives">
|
||
<div class="explosives-table-header">
|
||
<div class="table-top-left-nc" data-i18n="name">Name</div>
|
||
<div class="table-top-mid-nc" data-i18n="type">Type</div>
|
||
<div class="table-top-mid-nc" data-i18n="conceal">Conceal</div>
|
||
<div class="table-top-mid-nc" data-i18n="minimum-abbreviation">Min</div>
|
||
<div class="table-top-mid-nc" data-i18n="short-abbreviation">S</div>
|
||
<div class="table-top-mid-nc" data-i18n="medium-abbreviation">M</div>
|
||
<div class="table-top-mid-nc" data-i18n="long-abbreviation">L</div>
|
||
<div class="table-top-mid-nc" data-i18n="extreme-abbreviation">Ex</div>
|
||
<div class="table-top-mid-nc" data-i18n="power">Power</div>
|
||
<div class="table-top-mid-nc" data-i18n="damage">Damage</div>
|
||
<div class="table-top-mid-nc" data-i18n="intelligence-abbreviation">Intel.</div>
|
||
<div class="table-top-mid-nc" data-i18n="blast">Blast</div>
|
||
<div class="table-top-mid-nc" data-i18n="scatter">Scatter</div>
|
||
<div class="table-top-mid-nc" data-i18n="quantity-abbreviation">Qty.</div>
|
||
<div class="table-top-mid-nc" data-i18n="manual">Manual</div>
|
||
<div class="table-top-mid-nc" data-i18n="sensor">Sensor</div>
|
||
<div class="table-top-right-nc" data-i18n="more">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 data-i18n="regular-offensive" value="Regular:O">R/O (Regular Offensive)</option>
|
||
<option data-i18n="regular-defensive" value="Regular:D">R/D (Regular Defensive)</option>
|
||
<option data-i18n="regular-concussion" value="Regular:C">R/C (Regular Concussion)</option>
|
||
<option data-i18n="aerodynamic-offensive" value="Aerodynamic:O">A/O (Aerodynamic Offensive)</option>
|
||
<option data-i18n="aerodynamic-defensive" value="Aerodynamic:D">A/D (Aerodynamic Defensive)</option>
|
||
<option data-i18n="aerodynamic-concussion" value="Aerodynamic:C">A/C (Aerodynamic Concussion)
|
||
</option>
|
||
<option data-i18n="launcher-offensive" value="Launcher:O">L/O (Launcher Offensive)</option>
|
||
<option data-i18n="launcher-defensive" value="Launcher:D">L/D (Launcher Defensive)</option>
|
||
<option data-i18n="launcher-concussion" value="Launcher:C">L/C (Launcher Concussion)</option>
|
||
<option data-i18n="other" 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" value=1>
|
||
<div>
|
||
<select name="attr_damage" class="mediumselect2">
|
||
<option data-i18n="light-damage-abbreviation" title="Light Damage" value="L" SELECTED>L</option>
|
||
<option data-i18n="moderate-damage-abbreviation" title="Moderate Damage" value="M">M</option>
|
||
<option data-i18n="serious-damage-abbreviation" title="Serious Damage" value="S">S</option>
|
||
<option data-i18n="deadly-damage-abbreviation" title="Deadly Damage" value="D">D</option>
|
||
<option data-i18n="light-stun-abbreviation" title="Light Stun" value="L(stun)">L(s)</option>
|
||
<option data-i18n="moderate-stun-abbreviation" title="Moderate Stun" value="M(stun)">M(s)
|
||
</option>
|
||
<option data-i18n="serious-stun-abbreviation" title="Serious Stun" value="S(stun)">S(s)</option>
|
||
<option data-i18n="deadly-stun-abbreviation" title="Deadly Stun" value="D(stun)">D(s)</option>
|
||
</select>
|
||
</div>
|
||
<input type="number" name="attr_missleint" value=0>
|
||
<input type="number" name="attr_blast" value=0 step=0.05>
|
||
<input type="number" name="attr_scatter" value=1>
|
||
<input type="number" name="attr_ammoremain" value=0>
|
||
<div><button class="explosive-dice" type="action" name="act_rangedattack" id="explosive"
|
||
title="Explosives Attack"></button></div>
|
||
<div><button type="action" name="act_rangedattack" id="sensorexp"
|
||
title="Sensor Assisted Attack">f</button>
|
||
</div>
|
||
<div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
|
||
</div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
</div>
|
||
<input type="hidden" name="attr_scatterredux">
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<div class="explosive-mods-switch">
|
||
<div data-i18n="skill">Skill</div>
|
||
<div data-i18n="plus-dice-abbreviation"
|
||
title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">
|
||
+Dice</div>
|
||
<div data-i18n="plus-target-number-abberviation"
|
||
title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">
|
||
+TN</div>
|
||
<div data-i18n="recoil-compensation-abbreviation">Recoil Comp</div>
|
||
<div data-i18n="gyro-stabalization">Gyro Stabalization</div>
|
||
<div data-i18n="target-assistance">Targeting Assistance</div>
|
||
<div data-i18n="range-finder">Range Finder</div>
|
||
<div data-i18n="weight">Weight</div>
|
||
<div data-i18n="carrying">Carrying</div>
|
||
<div data-i18n="in-stash">In Stash</div>
|
||
<div data-i18n="notes">Notes:</div>
|
||
<select name="attr_skill" class="mediumselect2">
|
||
<option data-i18n="throw" selected value="@{throwing}">Throw</option>
|
||
<option data-i18n="launcher" value="@{launchers}">Launcher</option>
|
||
<option data-i18n="demolition" value="@{demolitions}">Demolition</option>
|
||
</select>
|
||
<div><input type="number" name="attr_specialized" value=0></div>
|
||
<div><input type="number" name="attr_tnmods" value=0></div>
|
||
<div><input type="number" name="attr_recoilcomp" value=0></div>
|
||
<select class="mediumselect2" name="attr_gyro">
|
||
<option data-i18n="none" value="0" SELECTED>None</option>
|
||
<option data-i18n="regular" value="5">Regular</option>
|
||
<option data-i18n="deluxe" value="6">Deluxe</option>
|
||
</select>
|
||
<select class="mediumselect2" name="attr_targeting">
|
||
<option data-i18n="none" value="0" SELECTED>None</option>
|
||
<option data-i18n="smartlink" value="-2">Smartlink</option>
|
||
<option data-i18n="laser-sight" value="-1">LaserSight</option>
|
||
<option data-i18n="smart-goggles" value="-1.00">Smart Goggles</option>
|
||
</select>
|
||
<div><input name="attr_rangefinder" type="number"></div>
|
||
<div><input type="number" name="attr_weight" value=0 step='0.01'></div>
|
||
<div class="text-mid"><input type="radio" name="attr_load" value=1 checked></div>
|
||
<div class="text-mid"><input type="radio" name="attr_load" value=0></div>
|
||
<input name="attr_notes" type="text"></input>
|
||
</div>
|
||
|
||
</fieldset>
|
||
<br>
|
||
<div class="weight">
|
||
<div data-i18n="weight">Weight</div>
|
||
<div></div>
|
||
<div class="numberspan"><span name="attr_explosives-weight"></span>kg</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="armor">
|
||
<input type="hidden" name="attr_armor-combatpool-pen" value=0>
|
||
<input type="hidden" name="attr_armor-quickness-pen" value=0>
|
||
<div class="armor-headers">
|
||
<header data-i18n="pain-resistance">Pain Resistance: </header><input type='number' name='attr_adeptpainres'
|
||
value="0" min="0">
|
||
<header data-i18n="ballistic">Ballistic: </header><input type='number' name='attr_ballistic' value="0"
|
||
min="0">
|
||
<header data-i18n="impact">Impact: </header><input type='number' name='attr_impact' value="0" min="0">
|
||
<header data-i18n="quickness-penalty">Quickness Penalty:</header>
|
||
<div> <span name="attr_armor-quickness-pen" value=0></span></div>
|
||
<header data-i18n="combat-pool-penalty">Combat Pool Penalty:</header>
|
||
<div> <span name="attr_armor-combatpool-pen" value=0></span></div>
|
||
<header data-i18n="dermal-armor">Dermal Armor:</header><input name="attr_dermal-armor" type="checkbox"
|
||
value=1>
|
||
</div>
|
||
<div class="armorsets-table-header">
|
||
<div class="table-top-left-nc" data-i18n="equip">Equip</div>
|
||
<div class="table-top-mid-nc" data-i18n="name">Name</div>
|
||
<div class="table-top-mid-nc" data-i18n="slot">Slot</div>
|
||
<div class="table-top-mid-nc" data-i18n="ballistic-rating">Ballistic Rating</div>
|
||
<div class="table-top-mid-nc" data-i18n="impact-rating">Impact Rating</div>
|
||
<div class="table-top-mid-nc" data-i18n="weight">Weight</div>
|
||
<div class="table-top-mid-nc" data-i18n="carrying">Carrying</div>
|
||
<div class="table-top-mid-nc" data-i18n="in-stash">In Stash</div>
|
||
<div class="table-top-right-nc" data-i18n="notes">Notes</div>
|
||
</div>
|
||
<fieldset class="repeating_armor">
|
||
<div class="armorsets-table-row">
|
||
<div class="text-mid"><input type="checkbox" name="attr_equipped">
|
||
</div>
|
||
<input type=text name="attr_armorname" class="myweapontxt">
|
||
<div><select name="attr_slot" class="mediumselect2">
|
||
<option SELECTED value="body" data-i18n="body">body</option>
|
||
<option value="helmet" data-i18n="helmet">helmet</option>
|
||
<option value="shield" data-i18n="shield">shield</option>
|
||
<option value="ware" data-i18n="cyberware">cyberware</option>
|
||
<option value="ware" data-i18n="bioware">bioware</option>
|
||
<option value="ware" data-i18n="nanoware">nanoware</option>
|
||
<option value="gyro" data-i18n="gyro-harness">gyro harness</option>
|
||
<option value="magic" data-i18n="magic">magic</option>
|
||
</select>
|
||
</div>
|
||
<input type="number" value=0 name="attr_ballistic">
|
||
<input type="number" value=0 name="attr_impact">
|
||
<div><input type="number" name="attr_weight" value=0 step='0.01'></div>
|
||
<div class="text-mid"><input type="radio" name="attr_load" value=1 checked></div>
|
||
<div class="text-mid"><input type="radio" name="attr_load" value=0></div>
|
||
<input name="attr_armornotes" type="text"></input>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
<br>
|
||
<div class="weight">
|
||
<div data-i18n="weight">Weight</div>
|
||
<div></div>
|
||
<div class="numberspan"><span name="attr_armor-weight"></span>kg</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="ammo">
|
||
<div class="ammunition-list">
|
||
<div class="ammo-table-header">
|
||
<div class="table-top-left-nc" data-i18n="ammo-type">Ammo Type</div>
|
||
<div class="table-top-mid-nc" data-i18n="quantity">Quantity</div>
|
||
<div class="table-top-mid-nc" data-i18n="weight">Weight</div>
|
||
<div class="table-top-mid-nc" data-i18n="carrying">Carrying</div>
|
||
<div class="table-top-mid-nc" data-i18n="in-stash">In Stash</div>
|
||
<div class="table-top-right-nc" data-i18n="damage-modifier">Damage Modifier</div>
|
||
</div>
|
||
<fieldset class="repeating_ammunition">
|
||
<div class="ammo-table-row">
|
||
<select name="attr_ammotype" class="mediumselect2 ammotype">
|
||
<option data-i18n="regular" value="regular">Regular</option>
|
||
<option data-i18n="explosive" value="explosive">Explosive</option>
|
||
<option data-i18n="explosive-ex" value="explosive2">Explosive EX</option>
|
||
<option value="gyrojet">GyroJet</option>
|
||
<option value="gyrojetplus">GyroJet Plus</option>
|
||
<option value="gyrojetplusseeker">GyroJet Plus Seeker</option>
|
||
<option value="gyrojetseeker">GyroJet Seeker</option>
|
||
<option value="arrows">Arrows</option>
|
||
<option value="arrowsexp">Arrow Explosive</option>
|
||
<option value="arrowsexpex">Arrow Explosive EX</option>
|
||
<option value="screamer">Screamer</option>
|
||
<option data-i18n="hammerheads" value="hammerheads">Hammerheads</option>
|
||
<option value="net">Net</option>
|
||
<option value="largenet">Large Net</option>
|
||
<option data-i18n="adps" value="adps">ADPS</option>
|
||
<option data-i18n="flechette" value="flechette">Flechette</option>
|
||
<option data-i18n="gel" value="gel">Gel</option>
|
||
<option data-i18n="tracer" value="tracer">Tracer</option>
|
||
<option data-i18n="anti-vehicle" value="av">Anti-Vehicl</option>
|
||
<option data-i18n="capsule" value="capsule">Capsule</option>
|
||
<option data-i18n="glazer" value="glazer">Glazer</option>
|
||
<option data-i18n="Hi-C" value="hic">Hi-C</option>
|
||
<option data-i18n="hollow-point" value="hpoint">Hollow Point</option>
|
||
<option data-i18n="incendiary" value="incendiary">Incendiary</option>
|
||
<option data-i18n="mercury" value="mercury">Mercury</option>
|
||
<option data-i18n="tracker" value="tracker">Tracker</option>
|
||
<option value="bigd">Big D's Temper</option>
|
||
<option data-i18n="bola" value="bola">Bola</option>
|
||
<option data-i18n="flare" value="flare">Flare</option>
|
||
<option value="shocklock">Shock Lock</option>
|
||
<option data-i18n="stun-shell" value="stunshell">Stun Shell</option>
|
||
</select>
|
||
<div><input type="number" name="attr_ammocount" value=0></div>
|
||
<div><input type="number" name="attr_ammoweight" value=0 step='0.01'></div>
|
||
<div class="text-mid"><input type="radio" name="attr_ammoload" value=1 checked></div>
|
||
<div class="text-mid"><input type="radio" name="attr_ammoload" value=0></div>
|
||
<input name="attr_ammonotes" type="text"></input>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
<br>
|
||
<div class="weight">
|
||
<div data-i18n="weight">Weight</div>
|
||
<div></div>
|
||
<div class="numberspan"><span name="attr_ammunition-weight"></span>kg</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
<div class="matrix">
|
||
<input class="matrixalert-format" type='hidden' name="attr_matrixalert" hidden=true value='None'>
|
||
<input type="number" name="attr_matrixsecuritynumber" hidden="true">
|
||
<div class="matrix-always-displayed">
|
||
<div class="matrix-attributes">
|
||
<div data-i18n="type">Type</div>
|
||
<div data-i18n="grid">Grid</div>
|
||
<div class="matrix-rating">
|
||
<div class="header" data-i18n="security-code">Security Code</div>
|
||
<div>-</div>
|
||
<div class="header" data-i18n="security-value"> Security Value</div>
|
||
<div>/</div>
|
||
<div class="header" data-i18n="access"> Acesss</div>
|
||
<div>/</div>
|
||
<div class="header" data-i18n="control"> Control</div>
|
||
<div>/</div>
|
||
<div class="header" data-i18n="index"> Index</div>
|
||
<div>/</div>
|
||
<div class="header" data-i18n="files"> Files</div>
|
||
<div>/</div>
|
||
<div class="header" data-i18n="slave"> Slave</div>
|
||
</div>
|
||
<div><select name="attr_matrixobject" class="mediumselect2">
|
||
<option data-i18n="grid" value="Grid">Grid</option>
|
||
<option data-i18n="host" value="Host">Host</option>
|
||
<option data-i18n="virtual-machine-abbreviation" value="VM">VM</option>
|
||
</select></div>
|
||
<input type="text" name="attr_parentgrid">
|
||
<div class="matrix-rating">
|
||
<div><select name="attr_matrixcode" class="mediumselect2">
|
||
<option data-i18n="blue" value="BLUE" SELECTED>BLUE</option>
|
||
<option data-i18n="green" value="GREEN">GREEN</option>
|
||
<option data-i18n="orange" value="ORANGE">ORANGE</option>
|
||
<option data-i18n="red" value="RED">RED</option>
|
||
</select></div>
|
||
<div>-</div>
|
||
<div><input type="number" name="attr_matrixsecurityrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixaccessrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixcontrolrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixindexrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixfilesrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixslaverating"></div>
|
||
</div>
|
||
</div>
|
||
<div class="matrix-status">
|
||
<div></div>
|
||
<div class="matrix-systemrating">
|
||
<div><span name="attr_matrixcode"></span> -
|
||
<span name="attr_matrixsecurityrating"></span> /
|
||
<span name="attr_matrixaccessrating"></span> /
|
||
<span name="attr_matrixcontrolrating"></span> /
|
||
<span name="attr_matrixindexrating"></span> /
|
||
<span name="attr_matrixfilesrating"></span> /
|
||
<span name="attr_matrixslaverating"></span>
|
||
</div>
|
||
</div>
|
||
<div></div>
|
||
<div data-i18n="detection-roll">Detection Roll</div>
|
||
<div><button type="action" class="d6-button" name="act_matrixdetect" title="Detection Roll"
|
||
id="systemdetect">L</button></div>
|
||
<div data-i18n="security-tally">Security Tally</div><input
|
||
title="Security Tally for all intruding icons in the system" type="number"
|
||
name="attr_matrixsecuritytally">
|
||
<div></div>
|
||
<div title="Reset Security Tally for all icons in the system">Reset Tally</div>
|
||
<div><button type="action" class="pictos-button" name="act_matrixdetect" title="Detection Roll"
|
||
id="resettally">0</button></div>
|
||
<div data-i18n="alert-status">Alert Status</div>
|
||
<select name="attr_matrixalert" class="mediumselect2">
|
||
<option data-i18n="none" value=0>None</option>
|
||
<option data-i18n="passive" value=4>Passive</option>
|
||
<option data-i18n="active" value=5>Active</option>
|
||
</select>
|
||
<input type="number" name="attr_matrixalertTN" hidden=true>
|
||
</div>
|
||
</div>
|
||
<div class="matrixhost">
|
||
<input type='hidden' class='securitysheaf-switch' name='attr_securitysheafswitch' value="show" />
|
||
<div class="securitysheaf-show">
|
||
<div class="SRH3">Security Sheaf</div>
|
||
<button class="switch-button-show" type="action" name="act_securitysheafswitch"
|
||
data-i18n="show">Show</button>
|
||
</div>
|
||
<div class="securitysheaf-hide">
|
||
<div class="SRH3">Security Sheaf</div>
|
||
<button class="switch-button-hide" type="action" name="act_securitysheafswitch"
|
||
data-i18n="hide">Hide</button>
|
||
</div>
|
||
<br>
|
||
<div class="securitysheaf">
|
||
<div class="securitytally-header">
|
||
<header data-i18n="trigger-step" class="table-top-left">Trigger Step</header>
|
||
<header data-i18n="event" 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">
|
||
<header data-i18n="intruder" class="table-top-left">Intruder</header>
|
||
<header data-i18n="detection" class="table-top-mid">Detection</header>
|
||
<header data-i18n="security-tally" class="table-top-mid">Security Tally</header>
|
||
<header data-i18n="rest-tally" class="table-top-mid">Reset Tally</header>
|
||
<header data-i18n="select-token" class="table-top-right">Select Token</header>
|
||
</div>
|
||
<fieldset class="repeating_intruders">
|
||
<div class="matrix-intruder-tally">
|
||
<div class="table-item-left"><input type="text" name="attr_intrudername"></div>
|
||
<div class="table-item"><button type="action" class="d6-button" name="act_detect" id="systemdetect"
|
||
title="Detection Roll for intruding icon">L</button></div>
|
||
<div class="table-item"><input type="number" name="attr_securitytally" value=0></div>
|
||
<div class="table-item"><button type="action" class="pictos-button" name="act_detect"
|
||
id="resetsecuritytally" title="Reset Security Tally">0</button></div>
|
||
<div class="table-item"><button type="action" class="pictos-custom-button" name="act_settokenname"
|
||
id="ic" title="Set Token Name by Selecting Token">w</button></div>
|
||
</div>
|
||
</fieldset>
|
||
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<input type='hidden' class='ic-switch' name='attr_ic-switch' value="show" />
|
||
<div class="ic-show">
|
||
<div class="SRH3" data-i18n="intrusion-countermeasures">Intrusion Countermeasures</div>
|
||
<button class="switch-button-show" type="action" name="act_ic-switch" data-i18n="show">Show</button>
|
||
</div>
|
||
<div class="ic-hide">
|
||
<div class="SRH3" data-i18n="intrusion-countermeasures">Intrusion Countermeasures</div>
|
||
<button class="switch-button-hide" type="action" name="act_ic-switch" data-i18n="hide">Hide</button>
|
||
</div>
|
||
<div class="ic">
|
||
<input type='hidden' name='attr_deck-tn' value=0 />
|
||
<div class="ic-attributes">
|
||
<header class="table-top-left" data-i18n="name">Name</header>
|
||
<header class="table-top-mid" data-i18n="rating">Rating</header>
|
||
<header class="table-top-mid" data-i18n="initiative">Initiative</header>
|
||
<header class="table-top-mid" data-i18n="damage">Damage</header>
|
||
<header class="table-top-mid" data-i18n="type">Type</header>
|
||
<header class="table-top-mid" data-i18n="test-target">Test Target</header>
|
||
<header class="table-top-mid" data-i18n="sensor">Sensor</header>
|
||
<header class="table-top-mid" data-i18n="evade">Evade</header>
|
||
<header class="table-top-mid" data-i18n="parry">Parry</header>
|
||
<header class="table-top-mid" data-i18n="position">Position</header>
|
||
<header class="table-top-mid" data-i18n="execute">Execute</header>
|
||
<header class="table-top-right" data-i18n="resist">Resist</header>
|
||
</div>
|
||
<fieldset class="repeating_ic">
|
||
<input type="hidden" name="attr_ic-penalty" value=0>
|
||
<div class="ic-attributes-table">
|
||
<div><input type="text" name="attr_icname"></div>
|
||
<div><input type="number" name="attr_icrating"></div>
|
||
<div><span name="attr_matrixsecuritynumber"></span>d6 +<span name="attr_icrating"></span><button
|
||
type="action" name="act_init" class="d6-button" title="IC Initiative Roll">L</button></div>
|
||
<div><input type="number" name="attr_ic-damage" value=0 min=0 max=10></div>
|
||
<div><select name="attr_ictype" class="mediumselect2">
|
||
<option data-i18n="crippler" value="Crippler">Crippler</option>
|
||
<option data-i18n="killer" value="Killer">Killer</option>
|
||
<option data-i18n="probe" value="Probe">Probe</option>
|
||
<option data-i18n="scramble" value="Scramble">Scramble</option>
|
||
<option data-i18n="tar-baby" value="Tar Baby">Tar Baby</option>
|
||
<option data-i18n="blaser" value="Blaster">Blaster</option>
|
||
<option data-i18n="ripper" value="Ripper">Ripper</option>
|
||
<option data-i18n="sparky" value="Sparky">Sparky</option>
|
||
<option data-i18n="tar-pi" value="Tar pit">Tar pit</option>
|
||
<option data-i18n="black-ic-lethal" value="blackiclethal">Black IC Lethal</option>
|
||
<option data-i18n="black-ic-non-lethal" value="blackicnonlethal">Black IC Non-Lethal</option>
|
||
<option data-i18n="data-bomb" value="Data Bomb">Data Bomb</option>
|
||
<option data-i18n="pavlov" value="Pavlov">Pavlov</option>
|
||
<option data-i18n="scout" value="Scout">Scout</option>
|
||
<option data-i18n="trace" value="Trace">Trace</option>
|
||
<option data-i18n="cerebropathic" value="cerebropathic">Cerebropathic</option>
|
||
<option data-i18n="psychotropic" value="psychotropic">Psychotropic</option>
|
||
</select></div>
|
||
<div><select name="attr_ictargettest" class="mediumselect2">
|
||
<option value="@{target|decker|deck-bod-final}" data-i18n="bod">Bod</option>
|
||
<option value="@{target|decker|deck-evasion-final}" data-i18n="evasion">Evasion</option>
|
||
<option value="@{target|decker|deck-sensors-final}" data-i18n="sensor">Sensor</option>
|
||
<option value="@{target|decker|deck-masking-final}" data-i18n="masking">Masking</option>
|
||
<option value="@{target|decker|deck-detection-final}" data-i18n="detection-factor">DetectionFactor</option>
|
||
<option data-i18n="attack" value="attack">Attack</option>
|
||
<option value="@{target|decker|computer}" data-i18n="computer-skill">Computer Skill</option>
|
||
<option value="?{Utility Rating?|4}" data-i18n="utility-target-number-abbreviation">Utility TN
|
||
</option>
|
||
<option value="@{target|decker|deck-mpcp-final}" data-i18n="mpcp">MPCP</option>
|
||
</select></div>
|
||
<div><button type="action" name="act_matrixtest" class="pictos-button" title="Sensors Test" id="deck-sensors-final">f</button></div>
|
||
<div><button type="action" class="d6-button" name="act_matrixmaneuvers" title="Evade Detection" id="icevade">L</button></div>
|
||
<div><button type="action" class="d6-button" name="act_matrixmaneuvers" title="Parry Attack" id="icparry">L</button></div>
|
||
<div><button type="action" class="d6-button" name="act_matrixmaneuvers" title="Position Attack" id="icposition">L</button></div>
|
||
<div><button type="action" class="pictos-custom-button" name="act_combat" title="IC Execute" id="icattack">[</button></div>
|
||
<div><button type="action" class="pictos3-button" name="act_matrixresist" title="IC Resist" id="icresist">b</button></div>
|
||
<div><textarea name="attr_icnotes" style='width:275px;height:25px;'></textarea>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<br>
|
||
|
||
<div class="matrixrapid">
|
||
<div data-i18n="rapid-settings-system-rating">Rapid Settings System Rating</div><input type="text"
|
||
name="attr_matrixsystemset"><button class="quicksettings" type="action" name="act_matrixsystemset"
|
||
data-i18n="apply">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"
|
||
data-i18n="vehicle-attributes">Vehicle Attributes</button>
|
||
<button class="vehicle-combat-button" type="action" name="act_vehicle-combat-tab"
|
||
data-i18n="vehicle-combat">Vehicle Combat</button>
|
||
<button class="vehicle-notes-button" type="action" name="act_vehicle-notes-tab"
|
||
data-i18n="vehicle-notes">Vehicle Notes</button>
|
||
<button class="vehicle-ecm-button" type="action" name="act_vehicle-ecm-tab"
|
||
data-i18n="ecm-flux">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"
|
||
data-i18n="drone-attributes">Drone Attributes</button>
|
||
<button class="vehicle-combat-button" type="action" name="act_vehicle-combat-tab"
|
||
data-i18n="drone-combat">Drone Combat</button>
|
||
<button class="vehicle-notes-button" type="action" name="act_vehicle-notes-tab"
|
||
data-i18n="drone-notes">Drone Notes</button>
|
||
<button class="vehicle-ecm-button" type="action" name="act_vehicle-ecm-tab"
|
||
data-i18n="ecm-flux">ECM/FLUX</button>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-always-displayed">
|
||
<div>
|
||
<div class="vehicle-combat-modifiers">
|
||
<div class="vehicle-interface">
|
||
<header class="table-close-nc" data-i18n="interface">Interface</header>
|
||
<div>
|
||
<div class="vehicle-interface-details">
|
||
<div data-i18n="none">None</div>
|
||
<div> <input type="radio" name="attr_vehicle-interface" value="none" checked="checked">
|
||
</div>
|
||
<div data-i18n="datajack">Datajack</div>
|
||
<div><input type="radio" name="attr_vehicle-interface" value="datajack"></div>
|
||
<div data-i18n="VCR">VCR</div>
|
||
<div><input type="radio" name="attr_vehicle-interface" value="vcr"></div>
|
||
<div data-i18n="autonav">Autonav</div>
|
||
<div><input type="checkbox" name="attr_vehicle-autonav" value=1></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-speed">
|
||
<header class="table-close-nc" data-i18n="speed">Speed</header>
|
||
<div>
|
||
<div class="vehicle-speed-details">
|
||
<div data-i18n="current">Current</div>
|
||
<div data-i18n="maximum">Maximum</div>
|
||
<div><input type="number" name="attr_speed-current" value=0 min=0></div>
|
||
<div><span name="attr_speed-max"></span></div>
|
||
</div>
|
||
<br>
|
||
<br>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-maneuever">
|
||
<header class="table-close-nc" data-i18n="maneuever">Maneuever</header>
|
||
<div>
|
||
<div class="vehicle-maneuever-details">
|
||
<div>Score</div>
|
||
<div><input type="number" name="attr_maneuver-score" value=0 min=0></div>
|
||
<div><button class="small-rollbutton" id="generate" title="Generate Maneuver Score" type="action" name="act_maneuever" data-i18n="generate">Generate</button></div>
|
||
<div><button class="small-rollbutton" id="compare" title="Compare Maneuver Score between two vehicles" type="action" name="act_maneuever" data-i18n="compare">Compare</button></div>
|
||
</div>
|
||
<br>
|
||
<br>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-env">
|
||
<header class="table-close-nc">Terrain</header>
|
||
<div>
|
||
<div class="vehicle-env-details">
|
||
<div data-i18n="off-road">Off Road:</div>
|
||
<div><input type="checkbox" name="attr_vehicle-offroad" value=1></div>
|
||
</div>
|
||
<div>
|
||
<div>Terrain</div>
|
||
<select name="attr_terrain" class="mediumselect2">
|
||
<option data-i18n="normal" value="Normal" SELECTED>Normal</option>
|
||
<option data-i18n="open" value="Open">Open</option>
|
||
<option data-i18n="restricted" value="Restricted">Restricted</option>
|
||
<option data-i18n="tight" value="Tight">Tight</option>
|
||
</select>
|
||
</div>
|
||
<br>
|
||
<br>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-env">
|
||
<header class="table-close-nc" data-i18n="environment">Environment</header>
|
||
<div>
|
||
<div class="vehicle-env-details table-close-nc">
|
||
<div data-i18n="urban-setting">Urban Setting:</div>
|
||
<div><input type="checkbox" name="attr_vehicle-urban" value=1></div>
|
||
<div data-i18n="combat-zone">Combat Zone:</div>
|
||
<div><input type="checkbox" name="attr_vehicle-combatzone" value=1></div>
|
||
</div>
|
||
<div class="vehicle-env-details2">
|
||
<div data-i18n="weather">Weather</div>
|
||
<select name="attr_weather" class="mediumselect2">
|
||
<option value="Normal" data-i18n="normal" SELECTED>Normal</option>
|
||
<option value="Bad" data-i18n="bad">Bad</option>
|
||
<option value="Terrible" data-i18n="terrible">Terrible</option>
|
||
<option value="Fog" data-i18n="fog">Fog</option>
|
||
<option value="Smog" data-i18n="smog">Smog</option>
|
||
<option value="Rain" data-i18n="rain">Rain</option>
|
||
<option value="Snow" data-i18n="snow">Snow</option>
|
||
<option value="ThunderStorm" data-i18n="thunderstorm">ThunderStorm</option>
|
||
<option value="Windy" data-i18n="windy">Windy</option>
|
||
<option value="Heavy Wind" data-i18n="heavy-wind">Heavy Wind</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-sensor">
|
||
<header class="table-close-nc" data-i18n="sensor-los">Sensor LOS</header>
|
||
<div class="vehicle-sensor-details table-close-nc">
|
||
<div>Direct</div>
|
||
<div><input type="radio" name="attr_sensor-los" value="direct" checked="checked"></div>
|
||
<div>Interupted</div>
|
||
<div><input type="radio" name="attr_sensor-los" value="interupted"></div>
|
||
</div>
|
||
<div class="table-close-nc" data-i18n="sensor-test">Sensor Test</div>
|
||
<div><button type="action" class="pictos-button" title="Sensor Test" name="act_vehiclesensor"
|
||
id="vehiclesensor">f</button></div>
|
||
</div>
|
||
</div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="vehicle-combat-condition">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH4 vehicle-only" data-i18n="vehicle">Vehicle</div>
|
||
<div class="SRH4 drone-only" data-i18n="drone">Drone</div>
|
||
<div data-i18n="undamaged">Undamaged</div>
|
||
<div data-i18n="light-damage">Light Damage</div>
|
||
<div data-i18n="moderate-damage">Moderate Damage</div>
|
||
<div data-i18n="serious-damage">Serious Damage</div>
|
||
<div data-i18n="destroyed">Destroyed</div>
|
||
<div data-i18n="condition">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" data-i18n="rc-signal">RC Signal</div>
|
||
<div data-i18n="full-strength">Full Strength</div>
|
||
<div data-i18n="light-degredation">Light Degredation</div>
|
||
<div data-i18n="moderate-degredation">Moderate Degredation</div>
|
||
<div data-i18n="serious-degredation">Serious Degredation</div>
|
||
<div data-i18n="disengaged">Disengaged</div>
|
||
<div class="text-mid-right" data-i18n="command-channel">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" data-i18n="simsense-channel">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" data-i18n="system-channel">System Channel</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsystem-damage" value=0 CHECKED>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsystem-damage" value=1>
|
||
<input type="radio" name="attr_rcsystem-damage" value=2>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsystem-damage" value=3>
|
||
<input type="radio" name="attr_rcsystem-damage" value=4>
|
||
<input type="radio" name="attr_rcsystem-damage" value=5>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsystem-damage" value=6>
|
||
<input type="radio" name="attr_rcsystem-damage" value=7>
|
||
<input type="radio" name="attr_rcsystem-damage" value=8>
|
||
<input type="radio" name="attr_rcsystem-damage" value=9>
|
||
</div>
|
||
<div><input type="radio" name="attr_rcsystem-damage" value=100></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-quickstats-border">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="vehicle-driver">
|
||
<button type="action" name="act_setrigger" id="rigger"
|
||
title="Set Rigger/Vehicle Operator Name by Selecting Token" data-i18n="driver">Driver</button>
|
||
<input type="text" name="attr_rigger" class="myweapontxt" />
|
||
<button type="action" class="pictos-button" name="act_setrigger" id="refresh-rigger"
|
||
title="Update Control Pool and Gunnery skill for operator">0</button>
|
||
</div>
|
||
<div class="vehicle-quickstats">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div></div>
|
||
<div data-i18n="maimum-abbreviation">Max</div>
|
||
<div data-i18n="used">Used</div>
|
||
<div data-i18n="control-pool">Control Pool:</div>
|
||
<input type="number" name="attr_controlpool" min=0 value=0>
|
||
<div><input type='hidden' class='controlpool-over' name='attr_controlpool-over' /><span
|
||
class="controlpool-over" name="attr_controlpool-used"></span></div>
|
||
</div>
|
||
<br>
|
||
<header class="table-top-nc" data-i18n="skills">Skills</header>
|
||
<div class="vehicle-quickstats">
|
||
<div data-i18n="vehicle">Vehicle:</div>
|
||
<input type="number" name="attr_vehicle-skill" min=0 value=0>
|
||
<div></div>
|
||
<div data-i18n="gunnery">Gunnery:</div>
|
||
<input type="number" name="attr_gunnery" min=0 value=0>
|
||
<div></div>
|
||
<div class="drone-only" data-i18n="pilot-rating">Pilot Rating:</div>
|
||
<div class="drone-only"><span name="attr_pilot" /></div>
|
||
<div></div>
|
||
</div>
|
||
<br>
|
||
<header class="table-top-nc drone-only" data-i18n="operative-mode">Operative Mode:</header>
|
||
<div class="vehicle-quickstats">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="drone-only" data-i18n="primary">Primary:</div>
|
||
<div class="drone-only"></div>
|
||
<div class="drone-only"><input type="radio" name="attr_drone_mode" value="primary"></div>
|
||
<div class="drone-only" data-i18n="secondary">Secondary:</div>
|
||
<div class="drone-only"></div>
|
||
<div class="drone-only"><input type="radio" name="attr_drone_mode" value="secondary"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="vehicle-attr-tab">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH4 vehicle-only" data-i18n="vehicle-configuration">Vehicle Configuration</div>
|
||
<div class="SRH4 drone-only" data-i18n="drone-configuration">Drone Configuration</div>
|
||
<div class="vehicle-info">
|
||
<div class="text-mid-left" data-i18n="name">Name</div>
|
||
<div data-i18n="manual-control">Manual Control</div>
|
||
<div data-i18n="datajack-port">Datajack Port</div>
|
||
<div data-i18n="rigger-adaption">Rigger Adaption</div>
|
||
<div data-i18n="remote-control">Remote Control</div>
|
||
<div class="text-mid" data-i18n="vehicle-type">Vehicle Type </div>
|
||
<div class="text-mid" data-i18n="vehicle-size">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 data-i18n="car-pickup-truck" value="cartruck" SELECTED>Car/Pickup Truck</option>
|
||
<option data-i18n="fighter-jet" value="jet">Fighter Jet</option>
|
||
<option data-i18n="heavy-truck" value="bigtruck">Heavy Truck</option>
|
||
<option data-i18n="helicopter" value="helicopter">Helicopter</option>
|
||
<option data-i18n="hovercraft" value="hovercraft">Hovercraft</option>
|
||
<option data-i18n="suborbital" value="suborbital">HSCT/Suborbital</option>
|
||
<option data-i18n="large-airplane" value="bigplane">Large Airplane</option>
|
||
<option data-i18n="lav" value="lav">LAV/T-bird</option>
|
||
<option data-i18n="limousine" value="limo">Limousine/Light Truck/Van</option>
|
||
<option data-i18n="lighter-than-air" value="lta">LTA/Zeppelin</option>
|
||
<option data-i18n="motorcycle" value="motorcycle">Motorcycle</option>
|
||
<option data-i18n="racing-boat" value="racingboat">Racing Boat</option>
|
||
<option data-i18n="semiballistic" value="semiballistic">Semiballistic</option>
|
||
<option data-i18n="small-airplane" value="smallplane">Small Airplane</option>
|
||
<option data-i18n="small-boat" value="smallboat">Small Motorboat</option>
|
||
<option data-i18n="sports-car" value="sportscar">Sports Car</option>
|
||
<option data-i18n="tracked-vehicle" value="tracked">Tracked Vehicle</option>
|
||
<option data-i18n="tractor-trailer" value="tractor">Tractor Trailer</option>
|
||
<option data-i18n="train" value="train">Train/Monorail</option>
|
||
<option data-i18n="ultralight" value="ultralight">Ultra-light Aircraft</option>
|
||
<option data-i18n="yacht" value="yacht">Yacht</option>
|
||
<option data-i18n="walkers" value="walkers">Walkers</option>
|
||
</select>
|
||
<select name="attr_vehicle-size" class="mediumselect2">
|
||
<option data-i18n="normal" value="Normal" SELECTED>Normal</option>
|
||
<option data-i18n="large" value="Large">Large</option>
|
||
<option data-i18n="extra-large" value="Extra-Large">Extra-Large</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="vehicle-stats">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH4 vehicle-only" data-i18n="vehicle-attributes">Vehicle Attributes</div>
|
||
<div class="SRH4 drone-only" data-i18n="drone-attributes">Drone Attributes</div>
|
||
<div class="vehicle-stats-regular">
|
||
<div class="vehicle-attributes">
|
||
<div data-i18n="handling">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 data-i18n="speed">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 data-i18n="acceleration">Acceleration:</div>
|
||
<input type="number" name="attr_acceleration" min=0 value=0>
|
||
<div data-i18n="body">Body:</div>
|
||
<input type="number" name="attr_body" min=0 value=0>
|
||
<div data-i18n="armor">Armor:</div>
|
||
<input type="number" name="attr_armor" min=0 value=0>
|
||
<div data-i18n="signature">Signature:</div>
|
||
<input type="number" name="attr_signature" min=0 value=0>
|
||
<div data-i18n="autonav">Autonav:</div>
|
||
<input type="number" name="attr_autonav" min=0 value=0>
|
||
<div data-i18n="pilot">Pilot:</div>
|
||
<input type="number" name="attr_pilot" min=0 value=0>
|
||
</div>
|
||
<div class="vehicle-config">
|
||
<div data-i18n="firmpoints">Firmpoints:</div>
|
||
<input type="number" name="attr_firmpoints" min=0 value=0>
|
||
<div data-i18n="hardpoint">Hardpoints:</div>
|
||
<input type="number" name="attr_hardpoints" min=0 value=0>
|
||
<div data-i18n="seating">Seating:</div>
|
||
<div><input type="text" name="attr_seating"></div>
|
||
<div data-i18n="entry-points">Entry Points:</div>
|
||
<div><input type="text" name="attr_entry"></div>
|
||
<div data-i18n="fuel">Fuel:</div>
|
||
<input type="text" name="attr_fuel">
|
||
<div data-i18n="economy">Economy:</div>
|
||
<input type="text" name="attr_economy">
|
||
<div data-i18n="cargo">Cargo:</div>
|
||
<input type="number" name="attr_cargo" min=0 value=0>
|
||
<div data-i18n="load">Load:</div>
|
||
<input type="number" name="attr_load" min=0 value=0>
|
||
</div>
|
||
<div class="vehicle-misc">
|
||
<div data-i18n="vehicle-skill">Vehicle Skill:</div>
|
||
<input type="number" name="attr_vehicle-skill" min=0 value=0>
|
||
<div data-i18n="gunnery">Gunnery:</div>
|
||
<input type="number" name="attr_gunnery" min=0 value=0>
|
||
<div data-i18n="walk">Walk:</div>
|
||
<div><span name="attr_walk"></span></div>
|
||
<div data-i18n="run">Run:</div>
|
||
<div><span name="attr_run"></span></div>
|
||
<div data-i18n="ivis-pool">IVIS Pool;</div>
|
||
<input type="number" name="attr_ivis-pool" min=0 value=0>
|
||
<div data-i18n="stress">Stress:</div>
|
||
<input type="number" name="attr_stress" min=0 value=0>
|
||
<div data-i18n="setup-breakdown">Setup/Breakdown:</div>
|
||
<input type="number" name="attr_setup" min=0 value=0>
|
||
<div data-i18n="total-cost">Total Cost:</div>
|
||
<input type="number" name="attr_totalcost" min=0 value=0>
|
||
</div>
|
||
</div>
|
||
<div class="SRH4" data-i18n="rapid-attributes-set">Rapid Attribute Set:</div><input type="text"
|
||
name="attr_vehicle-rapid-attributes">
|
||
<button class="quicksettings" type="action" name="act_vehicleset" data-i18n="apply">Apply</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-notes-tab">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH3 vehicle-only" data-i18n="vehicle-notes">Vehicle Notes</div>
|
||
<div class="SRH3 drone-only" data-i18n="drone-notes">Drone Notes</div>
|
||
<textarea data-i18n="modification-notes" 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" data-i18n="vehicle-electronics-and-ecm-eccm">Vehicle Electornics and ECM/ECCM</div>
|
||
<div class="SRH3 drone-only" data-i18n="drone-electronics-and-ecm-eccm">Drone Electornics and ECM/ECCM</div>
|
||
<div class="vehicle-flux">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
|
||
|
||
<div class="SRH4 vehicle-only" data-i18n="vehicle-flux-rating">Vehicle Flux Rating</div>
|
||
<div class="SRH4 drone-only" data-i18n="drone-flux-rating">Drone Flux Rating</div>
|
||
<span name="attr_vehicle-flux-max"></span>
|
||
<div class="SRH4 vehicle-only" data-i18n="vehicle-flux-used">Vehicle Flux Used</div>
|
||
<div class="SRH4 drone-only" data-i18n="drone-flux-used">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">
|
||
<header class="table-top-left"></header>
|
||
<header class="table-top-mid" data-i18n="rating">Rating</header>
|
||
<header class="table-top-mid" data-i18n="flux-rating">Flux Rating</header>
|
||
<header class="table-top-mid" data-i18n="modified-flux">Modified Flux</header>
|
||
<header class="table-top-mid" data-i18n="max-flux">Max Flux</header>
|
||
<header class="table-top-mid" data-i18n="roll-test">Roll Test</header>
|
||
<header class="table-top-right" data-i18n="opposition-test">Opposition Test</header>
|
||
<div class="table-item-left" data-i18n="sensors">Sensors:</div>
|
||
<div class="table-item"><input type="number" name="attr_sensors-rating" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_sensors-flux"></div>
|
||
<div class="table-item"><input type="number" name="attr_sensors-fluxmod" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_sensors-fluxmax"></div>
|
||
<div class="table-item"><button type="action" class="pictos-button" title="Sensor Test" name="act_vehiclesensor"
|
||
id="vehiclesensor">f</button></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item-left" data-i18n="sonar">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="action" class="d6-button" name="act_ewarfare" title="Sonar Test"
|
||
id="sonar">L</button></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item-left" data-i18n="ECM">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="action" class="d6-button" name="act_ewarfare" title="ECM Jamming"
|
||
id="ecmjamming">L</button></div>
|
||
<div class="table-item"><button type="action" class="d6-button" name="act_ewarfare" title="ECM Opposition Test"
|
||
id="ecmopposition">L</button></div>
|
||
<div class="table-item-left data-i18n=" ECCM"">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="action" class="d6-button" name="act_ewarfare" title="ECCM Counter-Jamming"
|
||
id="eccmcounter">L</button></div>
|
||
<div class="table-item"><button type="action" class="d6-button" name="act_ewarfare" title="ECCM Opposition Test"
|
||
id="eccmopposition">L</button></div>
|
||
<div class="table-item-left" data-i18n="ED">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>
|
||
<header class="table-item" data-i18n="activate">Activate</header>
|
||
<div class="table-item"></div>
|
||
<div class="table-item-left" data-i18n="ECD">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" data-i18n="initiative">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" data-i18n="end-turn">End Turn:</div>
|
||
<div class="center-checkbox"><button type="action" name="act_endturn" class="d6-button" title="End Combat Turn"
|
||
id="endturn">L</button></div>
|
||
<div class="text-mid" data-i18n="handling-abbreviation">Hand</div>
|
||
<div class="text-mid"><span name="attr_handling"></span><button type="action" class="d6-button"
|
||
title="Driving Test" name="act_vehicledriving" id="driving">L</button></div>
|
||
<div class="text-mid" data-i18n="accleration-abbreviation">Accel:</div>
|
||
<div class="text-mid"><span name="attr_acceleration"></span>
|
||
<button type="action" class="d6-button" title="Vehicle Acceleration Test" name="act_vehicleaction"
|
||
id="accelerating">L</button>
|
||
</div>
|
||
<div class="text-mid" data-i18n="body">Body:</div>
|
||
<div class="text-mid"><span name="attr_body"></span><button type="action" class="d6-button"
|
||
title="Resist Damage" name="act_resistvehicledmg" id="resistvehicledmg">L</button></div>
|
||
<div class="text-mid" data-i18n="armor">Armor:</div>
|
||
<div class="text-mid"><span name="attr_armor"></span></div>
|
||
<div class="text-mid" data-i18n="signature-abbreviation">Sig:</div>
|
||
<div class="text-mid"><span name="attr_signature"></span></div>
|
||
<div class="text-mid" data-i18n="auto-pilot-rating-abbreviation">Auto:</div>
|
||
<div class="text-mid"><span name="attr_autonav"></span></div>
|
||
<div class="text-mid" data-i18n="sensor">Sensor:</div>
|
||
<div class="text-mid"><span name="attr_sensors-rating"></span><button type="action" class="pictos-button"
|
||
title="Sensor Test" name="act_vehiclesensor" id="vehiclesensor">f</button></div>
|
||
</div>
|
||
|
||
<div class="vehicle-actions">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH3 vehicle-only" data-i18n="vehicle-actions">Vehicle Actions</div>
|
||
<div class="SRH3 drone-only" data-i18n="drone-actions">Drone Actions</div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Acceleration Test" name="act_vehicleaction"
|
||
id="accelerating" data-i18n="accelerate">Accelerate</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Breaking Test" name="act_vehicleaction"
|
||
id="breaking" data-i18n="brake">Brake</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Positioning Test" name="act_vehicleposition"
|
||
id="position">Position</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Ramming Test" name="act_vehicleaction" id="ram"
|
||
data-i18n="ram">Ram</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Hiding Test" name="act_vehicleaction" id="hide"
|
||
data-i18n="hide">Hide</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Relocate Test" name="act_vehicleaction"
|
||
id="relocate" data-i18n="relocate">Relocate</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Crash Test" name="act_vehiclecrash" id="crash"
|
||
data-i18n="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" data-i18n="relative-motion">Relative Motion</div>
|
||
<div class="table-top-mid" data-i18n="movement">Movement</div>
|
||
<div class="table-top-mid" data-i18n="maneuver-score">Maneuver Score</div>
|
||
<div class="table-top-mid" data-i18n="visibility">Visibility</div>
|
||
<div class="table-top-mid" data-i18n="sensor-mode">Sensor Mode</div>
|
||
<div class="table-top-mid" data-i18n="target-type">Target Type</div>
|
||
<div class="table-top-mid" data-i18n="manual-target-nubmber-abbreviation">Manual TN</div>
|
||
<div class="table-top-mid" data-i18n="sensor-target-nubmber-abbreviation">Sensor TN</div>
|
||
<div class="table-top-right">Recoil</div>
|
||
<div class="table-item-left"><select name="attr_gunnerymotion" class="mediumselect2"
|
||
title="motion relative to target">
|
||
<option data-i18n="none" value=0 selected>None</option>
|
||
<option data-i18n="towards" value=-1>Towards</option>
|
||
<option data-i18n="away" value=1>Away</option>
|
||
</select></div>
|
||
<div class="table-item"><select name="attr_move" class="mediumselect2" title="relative movement target">
|
||
<option data-i18n="about-equal" value=0 selected>About Equal</option>
|
||
<option data-i18n="up-to-2x" value=2>Up to 2X</option>
|
||
<option data-i18n="up-to-3x" value=4>Up to 3X</option>
|
||
<option data-i18n="more-than-3x" value=6>More than 3X</option>
|
||
<option data-i18n="not-moving" value=0>Not Moving</option>
|
||
<option data-i18n="walk" value=1>walk</option>
|
||
<option data-i18n="walk-difficult-ground" value=2>walk (difficult ground)</option>
|
||
<option data-i18n="run" value=4>run</option>
|
||
<option data-i18n="run-difficult-ground" value=6>run (difficult ground)</option>s
|
||
</select></div>
|
||
<div class="table-item"><select name="attr_gunnerymaneuver" class="mediumselect2"
|
||
title="Maneuver score difference">
|
||
<option data-i18n="none" value=0 selected>None</option>
|
||
<option data-i18n="attacker-greater-by-10" value=-1>Attacker Greaty by 10</option>
|
||
<option data-i18n="target-greater-by-10" value=1>Target Greater by 10</option>
|
||
</select></div>
|
||
<div class="table-item"><select name="attr_visibility" class="mediumselect2">
|
||
<option data-i18n="normal" value=0 selected>Normal</option>
|
||
<option data-i18n="full-dark " value="@{fulldark}">Full Dark</option>
|
||
<option data-i18n="partial-light" value="@{partiallight}">Partail Light</option>
|
||
<option data-i18n="minimal-light" value="@{minlight}">Minimal Light</option>
|
||
<option data-i18n="glare" value="@{glare}">Glare</option>
|
||
<option data-i18n="mist" value="@{mist}">Mist</option>
|
||
<option data-i18n="light-smoke-rain" value="@{lightsmoke}">Light Smoke/Rain</option>
|
||
<option data-i18n="heavy-smoke-rain" value="@{fullsmoke}">Heavy Smoke/Rain</option>
|
||
<option data-i18n="thermal-smoke" value="@{thermalsmoke}">Thermal Smoke</option>
|
||
</select> </div>
|
||
<div class="table-item"><select name="attr_visionenhancement" class="mediumselect2">
|
||
<option value="None" data-i18n="none">None</option>
|
||
<option value="LowLight" SELECTED data-i18n="low-light">LowLight</option>
|
||
<option value="Thermal" data-i18n="thermal">Thermal</option>
|
||
</select></div>
|
||
<input type='hidden' name='attr_gunnermount' value=0" />
|
||
<div class="table-item"><select name="attr_gunnerytargettype" class="mediumselect2" title="Target type/size">
|
||
<option data-i18n="metahuman-sized" value=0 selected>Metahuman sized</option>
|
||
<option data-i18n="small-critter" value=1>Small critter</option>
|
||
<option data-i18n="large-critter" value=-1>Large critter</option>
|
||
<option data-i18n="small-drone" value=1>Small drone</option>
|
||
<option data-i18n="motorcycle" value=0>Motorcyle</option>
|
||
<option data-i18n="automobile" value=-1>Automobile</option>
|
||
<option data-i18n="limo-light-truck" value=-1>Limo/Light Truck</option>
|
||
<option data-i18n="heavy-truck-trailer" value=-3>Heavy Truck/Trailer</option>
|
||
<option data-i18n="boat" value=-1>Boat</option>
|
||
<option data-i18n="yacht" value=-3>Yacht</option>
|
||
<option data-i18n="freighter-tanker" value=-8>Freighter/Tanker</option>
|
||
<option data-i18n="ultralight-glider" value=0>Ultralight glider</option>
|
||
<option data-i18n="fixed-wing" value=-2>Fixed Wing</option>
|
||
<option data-i18n="commercial-airliner" value=-6>Commerical Airliner</option>
|
||
<option data-i18n="helicopter" value=-2>Helicopter</option>
|
||
<option data-i18n="zepplin-blimp" value=-6>Zepplin/Blimp</option>
|
||
<option data-i18n="lighter-than-air-aircraft-abbreviated" value=-3>LAV</option>
|
||
<option data-i18n="military-ground-vehicle" value=-3>Military Ground Vehicle</option>
|
||
</select></div>
|
||
<div class="table-item"><span class="text-mid" name="attr_rangedTN"></div>
|
||
<div class="table-item"><span class="text-mid" name="attr_sensor-gunnery-tn"></div>
|
||
<div class="table-item"><span class="text-mid" name="attr_recoilpen"></div>
|
||
</div>
|
||
|
||
|
||
<div class="SRH3" data-i18n="vehicle-weapons">Vehicle Weapons</div>
|
||
<div class="vehicles-weapons">
|
||
<div class="ranged-table-headers">
|
||
<div class="table-top-left" data-i18n="equip">Equip</div>
|
||
<div class="table-top-mid" data-i18n="general">General</div>
|
||
<div class="table-top-mid" data-i18n="range">Range</div>
|
||
<div class="table-top-mid" data-i18n="fire-mode">Fire Mode</div>
|
||
<div class="table-top-mid" data-i18n="damage">Damage</div>
|
||
<div class="table-top-mid" data-i18n="ammunition">Ammunition</div>
|
||
<div class="table-top-right" data-i18n="show">Show</div>
|
||
</div>
|
||
<div class="ranged-table-items">
|
||
<div class="table-item-left" title="Primary Hand"></div>
|
||
<div class="table-item" title="Off Hand"></div>
|
||
<div class="table-item" data-i18n="name">Name</div>
|
||
<div class="table-item" data-i18n="type">Type</div>
|
||
<div class="table-item" data-i18n="mount">Mount</div>
|
||
<div class="table-item" data-i18n="minimum-abbreviation">Min</div>
|
||
<div class="table-item" data-i18n="short-abbreviation">S</div>
|
||
<div class="table-item" data-i18n="medium-abbreviation">M</div>
|
||
<div class="table-item" data-i18n="long-abbreviation">L</div>
|
||
<div class="table-item" data-i18n="extreme-abbreviation">Ex</div>
|
||
<div class="table-item" data-i18n="single-shot-abbreviation">SS</div>
|
||
<div class="table-item" data-i18n="semi-automatic-abbreviation">SA</div>
|
||
<div class="table-item" data-i18n="burst-fire-abbreviation">BF</div>
|
||
<div class="table-item" data-i18n="full-automatic-abbreviation">FA</div>
|
||
<div class="table-item" data-i18n="power">Power</div>
|
||
<div class="table-item" data-i18n="damage">Damage</div>
|
||
<div class="table-item" data-i18n="maximum-abbreviation">Max</div>
|
||
<div class="table-item" data-i18n="remain">Remain</div>
|
||
<div class="table-item" data-i18n="manual">Manual</div>
|
||
<div class="table-item" data-i18n="sensor">Sensor</div>
|
||
<div class="table-item" data-i18n="more">More</div>
|
||
</div>
|
||
<fieldset class="repeating_rangedweapons">
|
||
<div class="ranged-table-row-bg">
|
||
<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">
|
||
<input type="hidden" name="attr_firemode" value="sa">
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="ss"></div>
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="sa"></div>
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="bf"></div>
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="fa"></div>
|
||
<input type="number" name="attr_power" value=1>
|
||
<select name="attr_damage" class="mediumselect2">
|
||
<option data-i18n="light-damage-abbreviation" title="Light Damage" value="L" SELECTED>L</option>
|
||
<option data-i18n="moderate-damage-abbreviation" title="Moderate Damage" value="M">M</option>
|
||
<option data-i18n="serious-damage-abbreviation" title="Serious Damage" value="S">S</option>
|
||
<option data-i18n="deadly-damage-abbreviation" title="Deadly Damage" value="D">D</option>
|
||
<option data-i18n="light-stun-abbreviation" title="Light Stun" value="L(stun)">L(s)</option>
|
||
<option data-i18n="moderate-stun-abbreviation" title="Moderate Stun" value="M(stun)">M(s)</option>
|
||
<option data-i18n="serious-stun-abbreviation" title="Serious Stun" value="S(stun)">S(s)</option>
|
||
<option data-i18n="deadly-stun-abbreviation" 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="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="vranged-mods">
|
||
<div class="text-mid" data-i18n="skill" 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" data-i18n="plus-dice-abbreviation"
|
||
title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">
|
||
+Dice</div>
|
||
<div class="text-mid" data-i18n="plus-target-number-abberviation"
|
||
title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">
|
||
+TN</div>
|
||
<div class="text-mid" title="Gas vents and other recoil accesories"
|
||
data-i18n="recoil-compensation-abbreviation">Recoil Comp</div>
|
||
<div class="text-mid" data-i18n="gyro-stabalization">Gyro Stabalization</div>
|
||
<div class="text-mid" title="accesories that improve to hit number for ranged combat"
|
||
data-i18n="none">Targeting Assistance </div>
|
||
<div class="text-mid" title="Clip, Belt, Cylinder, Magazine or Action Break"
|
||
data-i18n="reload-type">Reload Type </div>
|
||
<div class="text-mid" title="number or clips, belts or individual rounds" data-i18n="reloads">
|
||
Reloads</div>
|
||
<div class="text-mid" data-i18n="ammo-type">Ammo Type</div>
|
||
<div class="text-mid" data-i18n="weight">Weight:</div>
|
||
<div class="text-mid" data-i18n="notes">Notes:</div>
|
||
<select name="attr_skill" class="mediumselect2"
|
||
title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box">
|
||
<option SELECTED value="@{gunnery}" data-i18n="gunnery">Gunnery</option>
|
||
</select>
|
||
<div><input type="number" name="attr_specialized" value=0></div>
|
||
<div><input type="number" name="attr_tnmods" value=0></div>
|
||
<div><input type="number" name="attr_recoilcomp" title="Gas vents and other recoil accesories"
|
||
value=0></div>
|
||
<select class="mediumselect2" name="attr_gyro">
|
||
<option data-i18n="none" value="0" SELECTED>None</option>
|
||
<option data-i18n="regular" value="5">Regular</option>
|
||
<option data-i18n="deluxe" value="6">Deluxe</option>
|
||
</select>
|
||
<select class="mediumselect2" name="attr_targeting">
|
||
<option data-i18n="none" value="0" SELECTED>None</option>
|
||
<option data-i18n="smartlink" value="-2">Smartlink</option>
|
||
<option data-i18n="laser-sight" value="-1">LaserSight</option>
|
||
<option data-i18n="smart-goggles" value="-1">Smart Goggles</option>
|
||
</select>
|
||
<select name="attr_reloadmethod" class="mediumselect2">
|
||
<option data-i18n="clip" value="clip">clip</option>
|
||
<option data-i18n="break" value="break">break</option>
|
||
<option data-i18n="magazine" value="magazine">magazine</option>
|
||
<option data-i18n="speed-loader" value="speed loader">speed loader</option>
|
||
<option data-i18n="cylinder" value="cylinder">cylinder</option>
|
||
<option data-i18n="belt" value="belt">belt</option>
|
||
</select>
|
||
<div><input type="number" name="attr_reloads" value=0></div>
|
||
<select name="attr_ammotype" class="mediumselect2 ammotype">
|
||
<option data-i18n="regular" value="regular">Regular</option>
|
||
<option data-i18n="explosive" value="explosive">Explosive</option>
|
||
<option data-i18n="explosive-ex" value="explosive2">Explosive EX</option>
|
||
<option data-i18n="hammerheads" value="hammerheads">Hammerheads</option>
|
||
<option value="screamer">Screamer</option>
|
||
<option value="gyrojetplus">GyroJet Plus</option>
|
||
<option value="gyrojetplusseeker">GyroJet Plus Seeker</option>
|
||
<option value="gyrojetseeker">GyroJet Seeker</option>
|
||
<option value="largenet">Large Net</option>
|
||
<option data-i18n="adps" value="adps">ADPS</option>
|
||
<option data-i18n="flechette" value="flechette">Flechette</option>
|
||
<option data-i18n="gel" value="gel">Gel</option>
|
||
<option data-i18n="tracer" value="tracer">Tracer</option>
|
||
<option data-i18n="anti-vehicle" value="av">Anti-Vehicl</option>
|
||
<option data-i18n="capsule" value="capsule">Capsule</option>
|
||
<option data-i18n="glazer" value="glazer">Glazer</option>
|
||
<option data-i18n="Hi-C" value="hic">Hi-C</option>
|
||
<option data-i18n="hollow-point" value="hpoint">Hollow Point</option>
|
||
<option data-i18n="incendiary" value="incendiary">Incendiary</option>
|
||
<option data-i18n="mercury" value="mercury">Mercury</option>
|
||
<option data-i18n="tracker" value="tracker">Tracker</option>
|
||
<option value="bigd">Big D's Temper</option>
|
||
<option data-i18n="bola" value="bola">Bola</option>
|
||
<option data-i18n="flare" value="flare">Flare</option>
|
||
<option value="shocklock">Shock Lock</option>
|
||
<option data-i18n="stun-shell" value="stunshell">Stun Shell</option>
|
||
</select>
|
||
<div><input type="number" name="attr_weight" value=0 step='0.01'></div>
|
||
<textarea name="attr_notes" style='width:190px;height:22px;'></textarea>
|
||
</div>
|
||
</span>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
<div class="SRH3">Missles/Rockets</div>
|
||
<div class="explosives-table-header">
|
||
<div class="table-top-left" data-i18n="name">Name</div>
|
||
<div class="table-top-mid" data-i18n="type">Type</div>
|
||
<div class="table-top-mid" data-i18n="mount">Mount</div>
|
||
<div class="table-top-mid" data-i18n="minimum-abbreviation">Min</div>
|
||
<div class="table-top-mid" data-i18n="short-abbreviation">S</div>
|
||
<div class="table-top-mid" data-i18n="medium-abbreviation">M</div>
|
||
<div class="table-top-mid" data-i18n="long-abbreviation">L</div>
|
||
<div class="table-top-mid" data-i18n="extreme-abbreviation">Ex</div>
|
||
<div class="table-top-mid" data-i18n="power">Power</div>
|
||
<div class="table-top-mid" data-i18n="damage">Damage</div>
|
||
<div class="table-top-mid" data-i18n="intelligence-abbreviation">Intel.</div>
|
||
<div class="table-top-mid" data-i18n="blast">Blast</div>
|
||
<div class="table-top-mid" data-i18n="scatter">Scatter</div>
|
||
<div class="table-top-mid" data-i18n="quantity-abbreviation">Qty.</div>
|
||
<div class="table-top-mid" data-i18n="manual">Manual</div>
|
||
<div class="table-top-mid" data-i18n="sensor">Sensor</div>
|
||
<div class="table-top-right" data-i18n="more">More</div>
|
||
</div>
|
||
<fieldset class="repeating_explosives">
|
||
<div class="explosives-table-row-bg">
|
||
<input type="text" name="attr_name" class="myweapontxt">
|
||
<select name="attr_exptype" class="mediumselect2">
|
||
<option data-i18n="launcher-offensive" value="Launcher:O">L/O (Launcher Offensive)</option>
|
||
<option data-i18n="launcher-defensive" value="Launcher:D">L/D (Launcher Defensive)</option>
|
||
<option data-i18n="launcher-concussion" value="Launcher:C">L/C (Launcher Concussion)</option>
|
||
<option data-i18n="other" selected value="Other:Other">Other</option>
|
||
</select>
|
||
<select name="attr_weaponmont" class="mediumselect2">
|
||
<option data-i18n="hardpoint" value="Hardpoint" SELECTED">Hardpoint</option>
|
||
<option data-i18n="firmpoint" value="Firmpoint">Firmpoint</option>
|
||
<option data-i18n="turret" value="Turret">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" value=1>
|
||
<div>
|
||
<select name="attr_damage" class="mediumselect2">
|
||
<option data-i18n="light-damage-abbreviation" title="Light Damage" value="L" SELECTED>L</option>
|
||
<option data-i18n="moderate-damage-abbreviation" title="Moderate Damage" value="M">M</option>
|
||
<option data-i18n="serious-damage-abbreviation" title="Serious Damage" value="S">S</option>
|
||
<option data-i18n="deadly-damage-abbreviation" title="Deadly Damage" value="D">D</option>
|
||
<option data-i18n="light-stun-abbreviation" title="Light Stun" value="L(stun)">L(s)</option>
|
||
<option data-i18n="moderate-stun-abbreviation" title="Moderate Stun" value="M(stun)">M(s)
|
||
</option>
|
||
<option data-i18n="serious-stun-abbreviation" title="Serious Stun" value="S(stun)">S(s)</option>
|
||
<option data-i18n="deadly-stun-abbreviation" title="Deadly Stun" value="D(stun)">D(s)</option>
|
||
</select>
|
||
</div>
|
||
<input type="number" name="attr_missleint" value=0>
|
||
<input type="number" name="attr_blast" value=0 step=0.05>
|
||
<input type="number" name="attr_scatter" value=1>
|
||
<input type="number" name="attr_ammoremain" value=0>
|
||
<div><button class="explosive-dice" type="action" name="act_rangedattack" id="vehicle-explosive"
|
||
title="Explosives Attack"></button></div>
|
||
<div><button type="action" name="act_rangedattack" id="vehicle-sensorexp" title="Sensor Assisted Attack"
|
||
class="pictos-button">f</button></div>
|
||
<div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
|
||
</div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<input type="hidden" name="attr_scatterredux">
|
||
<div class="explosive-mods-switch">
|
||
<div data-i18n="skill">Skill</div>
|
||
<div data-i18n="plus-dice-abbreviation"
|
||
title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">
|
||
+Dice</div>
|
||
<div data-i18n="plus-target-number-abberviation"
|
||
title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">
|
||
+TN</div>
|
||
<div data-i18n="recoil-compensation-abbreviation">Recoil Comp</div>
|
||
<div data-i18n="gyro-stabalization">Gyro Stabalization</div>
|
||
<div data-i18n="target-assistance">Targeting Assistance</div>
|
||
<div data-i18n="range-finder">Range Finder</div>
|
||
<div data-i18n="weight">Weight:</div>
|
||
<div></div>
|
||
<div></div>
|
||
<div data-i18n="notes">Notes:</div>
|
||
<select name="attr_skill" class="mediumselect2">
|
||
<option data-i18n="launcher" selected value="@{launchers}">Launcher</option>
|
||
<option data-i18n="demolition" value="@{demolitions}">Demolition</option>
|
||
</select>
|
||
<div><input type="number" name="attr_specialized" value=0></div>
|
||
<div><input type="number" name="attr_tnmods" value=0></div>
|
||
<div><input type="number" name="attr_recoilcomp" value=0></div>
|
||
<select class="mediumselect2" name="attr_gyro">
|
||
<option data-i18n="none" value="0" SELECTED>None</option>
|
||
<option data-i18n="regular" value="5">Regular</option>
|
||
<option data-i18n="deluxe" value="6">Deluxe</option>
|
||
</select>
|
||
<select class="mediumselect2" name="attr_targeting">
|
||
<option data-i18n="none" value="0" SELECTED>None</option>
|
||
<option data-i18n="smartlink" value="-2">Smartlink</option>
|
||
<option data-i18n="laser-sight" value="-1">LaserSight</option>
|
||
<option data-i18n="smart-goggles" value="-1">Smart Goggles</option>
|
||
</select>
|
||
<div><input name="attr_rangefinder" type="number"></div>
|
||
<div><input type="number" name="attr_weight" value=0 step='0.01'></div>
|
||
<div class="text-mid"></div>
|
||
<div class="text-mid"></div>
|
||
<textarea name="attr_notes" style='width:80px;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" data-i18n="cyberware-bioware-nanoware">Cyberware, Bioware and Nanoware</div>
|
||
<input type="hidden" class="ware-tabs-switch" name="attr_waretab" value="cyber">
|
||
<div class="ware-tabs">
|
||
<input type="hidden" class="ware-tabs-switch" name="attr_waretab" value="cyber">
|
||
<button class="ware-tabs-cyber" type="action" name="act_cyber-tab" data-i8n="cyberware-uppercase" >CYBERWARE</button>
|
||
<button class="ware-tabs-bio" type="action" name="act_bio-tab" data-i8n="bioware-uppercase" >BIOWARE</button>
|
||
<button class="ware-tabs-nano" type="action" name="act_nano-tab" data-i8n="nanoware-uppercase" >NANOWARE</button>
|
||
<div class="tabs-empty"></div>
|
||
</div>
|
||
<div class="cyberware">
|
||
<div class="cyberware-list">
|
||
<header class="table-top-left-nc" data-i18n="name">Name</header>
|
||
<header class="table-top-mid-nc" data-i18n="rating">Rating</header>
|
||
<header class="table-top-mid-nc" data-i18n="essence">Essence</header>
|
||
<header class="table-top-right-nc" data-i18n="description">Description</header>
|
||
</div>
|
||
<fieldset class="repeating_cyberware">
|
||
<div class="cyberware-list">
|
||
<div class="table-item-left-nc"><input type="text" name="attr_cyberware-name"></div>
|
||
<div class="table-item-nc"><input type="number" name="attr_cyberware-rating"></div>
|
||
<div class="table-item-nc"><input type='number' name='attr_cyberware-essence' step='0.01' value=0></div>
|
||
<div class="table-item-nc"><input type="text" name="attr_cyberware-notes"></div>
|
||
</fieldset>
|
||
</div>
|
||
<div class="bioware">
|
||
<div class="cyberware-list">
|
||
<header class="table-top-left-nc" data-i18n="name">Name</header>
|
||
<header class="table-top-mid-nc" data-i18n="rating">Rating</header>
|
||
<header class="table-top-mid-nc" data-i18n="bio-index">Bio Index</header>
|
||
<header class="table-top-right-nc" data-i18n="description">Description</header>
|
||
</div>
|
||
<fieldset class="repeating_bioware">
|
||
<div class="cyberware-list">
|
||
<div class="table-item-left-nc"><input type="text" name="attr_bioware-name"></div>
|
||
<div class="table-item-nc"><input type="number" name="attr_bioware-rating"></div>
|
||
<div class="table-item-nc"><input type='number' name='attr_bioware-index' step='0.01' value=0></div>
|
||
<div class="table-item-nc"><input type="text" name="attr_bioware-notes"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div class="nanoware">
|
||
<div class="cyberware-list">
|
||
<header class="table-top-left-nc" data-i18n="name">Name</header>
|
||
<header class="table-top-mid-nc" data-i18n="rating">Rating</header>
|
||
<header class="table-top-mid-nc" data-i18n="essence">Essence</header>
|
||
<header class="table-top-right-nc" data-i18n="description">Description</header>
|
||
</div>
|
||
<fieldset class="repeating_nanotech">
|
||
<div class="cyberware-list">
|
||
<div class="table-item-left"><input type="text" name="attr_nanotech-name"></div>
|
||
<div class="table-item"><input type="number" name="attr_nanotech-rating"></div>
|
||
<div class="table-item"><input type='number' name='attr_nanotech-essence' step='0.01' value=0></div>
|
||
<div class="table-item"><input type="text" name="attr_nanotech-notes"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sheet-contacts">
|
||
<div class="SRH2" data-i18n="lifestyle">Lifestyle</div>
|
||
|
||
<div>
|
||
<div>
|
||
<div class="SRH3" data-i18n="contacts">Contacts</div>
|
||
<div class="contacts">
|
||
<header class="table-top-left" data-i18n="contact-type">Name</header>
|
||
<header class="table-top-mid" data-i18n="contact-type">Contact Type</header>
|
||
<header class="table-top-right" data-i18n="notes">Notes</header>
|
||
</div>
|
||
<fieldset class="repeating_contacts">
|
||
<div class="contacts">
|
||
<input type="text" name="attr_name">
|
||
<select name="attr_contacttype" class="mediumselect2">
|
||
<option SELECTED data-i18n="contact">Contact</option>
|
||
<option value="Buddy" data-i18n="buddy">Buddy</option>
|
||
<option value="Friend for Life" data-i18n="friend-for-life">Friend for Life</option>
|
||
<option value="Followers" data-i18n="followers">Followers</option>
|
||
</select>
|
||
<input name="attr_contactdetail" type="text" value="Name Occupation Upkeep">
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div class="SRH3" data-i18n="lifesytle-class-gear-at-home">Lifestyle Class/Gear at Home</div>
|
||
<div class="lifestyles">
|
||
<header class="table-top-left" data-i18n="lifestyle">Lifestyle</header>
|
||
<header class="table-top-mid" data-i18n="cost">Cost</header>
|
||
<header class="table-top-mid" data-i18n="months-paid">Months Paid</header>
|
||
<header class="table-top-mid" data-i18n="address">Address</header>
|
||
<header class="table-top-mid" data-i18n="description">Description</header>
|
||
<header class="table-top-mid" data-i18n="edges-flaws">Edges/Flaws</header>
|
||
</div>
|
||
<fieldset class="repeating_lifestyles">
|
||
<div class="lifestyles">
|
||
<input type="text" name="attr_lifestyle">
|
||
<input type="number" name="attr_cost">
|
||
<input type="number" name="attr_monthspaid">
|
||
<input type="text" name="attr_address">
|
||
<input type="text" name="attr_description">
|
||
<input type="text" name="attr_edgesflaws">
|
||
</div>
|
||
</fieldset>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="sheet-spirit">
|
||
</div>
|
||
|
||
<div class="sheet-critter-powers">
|
||
<div class="critter-powers">
|
||
<div>
|
||
<div class="SRH4" data-i18n="powers">Powers</div>
|
||
<div class="critter-powers-table-header">
|
||
<div class="table-top-left"><b data-i18n="power">Power</div>
|
||
<div class="table-top-right"><b data-i18n="description">Description</div>
|
||
</div>
|
||
<fieldset class='repeating_critter-powers'>
|
||
<div class="critter-powers-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name" /></div>
|
||
<div class="table-item"><input type="text" name="attr_description" /></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div>
|
||
<div class="SRH4" data-i18n="weakness">Weakness</div>
|
||
<div class="critter-powers-table">
|
||
<div class="table-top-left"><b data-i18n="weakness">Weakness</div>
|
||
<div class="table-top-right"><b data-i18n="description">Description</div>
|
||
</div>
|
||
<fieldset class='repeating_critter-weaknesses'>
|
||
<div class="critter-powers-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name" /></div>
|
||
<div class="table-item"><input type="text" name="attr_description" /></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="popup1" class="overlay">
|
||
<div class="popup">
|
||
<h2 data-i18n="json-import">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="#" data-i18n="json-import">JSON Import</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="popup2" class="overlay">
|
||
<div class="popup">
|
||
<h2 data-i18n="json-export">JSON Export</h2>
|
||
<a class="close" href="#">×</a>
|
||
<div class="content">
|
||
<textarea name="attr_jsonout" style='width:500px;height:400px;resize:none; overlfow-y: scroll;'></textarea>
|
||
<button type="action" name="act_jsonexport-char" href="#" data-i18n="json-export">JSON Export</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<script type="text/worker">
|
||
const buttonlist = ["character","skills","magic","decks","gear","combat","rigger", "contacts", "critter-powers", "karma", "cyberware","vehicle-attr-tab", "vehicle-combat-tab", "vehicle-notes-tab", "vehicle-ecm-tab"];
|
||
buttonlist.forEach(button => {
|
||
console.log(button)
|
||
on(`clicked:${button}`, function() {
|
||
setAttrs({ sheetTab: button });
|
||
});
|
||
});
|
||
|
||
const geartabs = ["gear", "credsticks", "vehiclelist"];
|
||
geartabs.forEach(tab => {
|
||
button=tab + "-tab";
|
||
console.log(button)
|
||
on(`clicked:${button}`, function() {
|
||
setAttrs({ geartab: tab });
|
||
});
|
||
});
|
||
|
||
const magictabs = ["astral", "sorcery", "adept", "conjuring", "geas", "totem", "initiate", "foci", "spells"];
|
||
magictabs.forEach(magic => {
|
||
button=magic + "-tab";
|
||
console.log(button)
|
||
on(`clicked:${button}`, function() {
|
||
setAttrs({ magictab: magic });
|
||
});
|
||
});
|
||
|
||
const combattabs = ["combat", "ranged", "melee", "explosives", "armor", "ammo"];
|
||
combattabs.forEach(tab => {
|
||
button=tab + "-tab";
|
||
console.log(button)
|
||
on(`clicked:${button}`, function() {
|
||
setAttrs({ combattab: tab });
|
||
});
|
||
});
|
||
|
||
const riggertabs = ["rcdeck", "subscriber", "rigger"];
|
||
riggertabs.forEach(tab => {
|
||
button=tab + "-tab";
|
||
console.log(button)
|
||
on(`clicked:${button}`, function() {
|
||
setAttrs({ riggertab: tab });
|
||
});
|
||
});
|
||
|
||
const waretabs = ["cyber", "bio", "nano"];
|
||
waretabs.forEach(tab => {
|
||
button=tab + "-tab";
|
||
console.log(button)
|
||
on(`clicked:${button}`, function() {
|
||
setAttrs({ waretab: tab });
|
||
});
|
||
});
|
||
|
||
const deckingtabs = ["decking", "frame", "cyberdeck", "utilities"];
|
||
deckingtabs.forEach(tab => {
|
||
button=tab + "-tab";
|
||
console.log(button)
|
||
on(`clicked:${button}`, function() {
|
||
setAttrs({ deckingtab: tab });
|
||
});
|
||
});
|
||
|
||
</script>
|
||
|
||
<script type="text/worker">
|
||
var lang={}
|
||
|
||
on("sheet:opened", function() {
|
||
geti18n();
|
||
});
|
||
|
||
const geti18n = function() {
|
||
console.log('calling i18n for roll query');
|
||
lang["blackic"] = getTranslationByKey("black-ic");
|
||
lang["blackiclethal"] = getTranslationByKey("black-ic-lethal");
|
||
lang["blackicnonlethal"] = getTranslationByKey("black-ic-non-lethal");
|
||
lang["cerebropathic"] = getTranslationByKey("cerebropathic");
|
||
lang["psychotropic"] = getTranslationByKey("psychotropic");
|
||
lang["use-reach-modifier"] = getTranslationByKey("use-reach-modifier");
|
||
lang["L"] = getTranslationByKey("light-damage-abbreviation");
|
||
lang["M"] = getTranslationByKey("moderate-damage-abbreviation");
|
||
lang["S"] = getTranslationByKey("serious-damage-abbreviation");
|
||
lang["D"] = getTranslationByKey("deadly-damage-abbreviation");
|
||
lang["L(stun)"] = getTranslationByKey("light-stun-abbreviation");
|
||
lang["M(stun)"] = getTranslationByKey("moderate-stun-abbreviation");
|
||
lang["S(stun)"] = getTranslationByKey("serious-stun-abbreviation");
|
||
lang["D(stun)"] = getTranslationByKey("deadly-stun-abbreviation");
|
||
lang["decker"] = getTranslationByKey("decker");
|
||
lang["evasion"] = getTranslationByKey("evasion");
|
||
lang["sensors"] = getTranslationByKey("sensors");
|
||
lang["masking"] = getTranslationByKey("masking");
|
||
lang["bod"] = getTranslationByKey("bod");
|
||
lang["none"] = getTranslationByKey("none");
|
||
lang["attack"] = getTranslationByKey("attack");
|
||
lang["probe"] = getTranslationByKey("probe");
|
||
lang["compare"] = getTranslationByKey("compare");
|
||
lang["swap-memory"] = getTranslationByKey("swap-memory");
|
||
lang["damage-resistance-test"] = getTranslationByKey("damage-resistance-test");
|
||
lang["maneuver-score"] = getTranslationByKey("maneuver-score");
|
||
lang["accelerate"] = getTranslationByKey("accelerate");
|
||
lang["position"] = getTranslationByKey("position");
|
||
lang["crash"] = getTranslationByKey("crash");
|
||
lang["driving"] = getTranslationByKey("driving");
|
||
lang["drain-damage"] = getTranslationByKey("drain-damage");
|
||
lang["drain-modifiers"] = getTranslationByKey("drain-modifiers");
|
||
lang["cover-modifiers"] = getTranslationByKey("cover-modifiers");
|
||
lang["spirit-focus-dice"] = getTranslationByKey("spirit-focus-dice");
|
||
lang["are-you-the-summoner"] = getTranslationByKey("are-you-the-summoner");
|
||
lang["additional-modifiers"] = getTranslationByKey("additional-modifiers");
|
||
lang["successes-from-hiding-test"] = getTranslationByKey("successes-from-hiding-test");
|
||
lang["urban-setting"] = getTranslationByKey("urban-setting");
|
||
lang["icon"] = getTranslationByKey("icon");
|
||
lang["range"] = getTranslationByKey("range");
|
||
lang["ic-rating"] = getTranslationByKey("ic-rating");
|
||
lang["light-stun"] = getTranslationByKey("light-stun");
|
||
lang["light"] = getTranslationByKey("light");
|
||
lang["moderate"] = getTranslationByKey("moderate");
|
||
lang["moderate-stun"] = getTranslationByKey("moderate-stun");
|
||
lang["serious"] = getTranslationByKey("serious");
|
||
lang["serious-stun"] = getTranslationByKey("serious-stun");
|
||
lang["deadly"] = getTranslationByKey("deadly");
|
||
lang["deadly-stun"] = getTranslationByKey("deadly-stun");
|
||
lang["damage"] = getTranslationByKey("damage");
|
||
lang["wound-level"] = getTranslationByKey("wound-level");
|
||
lang["system-operation-with"] = getTranslationByKey("system-operation-with");
|
||
lang["utility"] = getTranslationByKey("utility");
|
||
lang["utility-test"] = getTranslationByKey("utility-test");
|
||
lang["utility-rating"] = getTranslationByKey("utility-rating");
|
||
lang["yes"] = getTranslationByKey("yes");
|
||
lang["no"] = getTranslationByKey("no");
|
||
lang["miscellaneous-modifiers"] = getTranslationByKey("miscellaneous-modifiers");
|
||
lang["out-of-ammo"] = getTranslationByKey("out-of-ammo");
|
||
lang["simple"] = getTranslationByKey("simple");
|
||
lang["complex"] = getTranslationByKey("complex");
|
||
lang["rounds-already-fired-in-combat-phase"] = getTranslationByKey("rounds-already-fired-in-combat-phase");
|
||
lang["rounds"] = getTranslationByKey("rounds");
|
||
lang["spell-defense"] = getTranslationByKey("spell-defense");
|
||
lang["ally"] = getTranslationByKey("ally");
|
||
lang["resist-spell"] = getTranslationByKey("resist-spell");
|
||
lang["resist-banish"] = getTranslationByKey("resist-banish");
|
||
lang["result"] = getTranslationByKey("result");
|
||
lang["force"] = getTranslationByKey("force");
|
||
lang["dispell"] = getTranslationByKey("dispell");
|
||
lang["force-of-spell"] = getTranslationByKey("force-of-spell");
|
||
lang["modifiers"] = getTranslationByKey("modifiers");
|
||
lang["astral"] = getTranslationByKey("astral");
|
||
lang["attack"] = getTranslationByKey("attack");
|
||
lang["combat"] = getTranslationByKey("combat");
|
||
lang["task-pool"] = getTranslationByKey("task-pool");
|
||
lang["task-pool-dice"] = getTranslationByKey("task-pool-dice");
|
||
lang["modifiers"] = getTranslationByKey("modifiers");
|
||
lang["attacks-msg"] = getTranslationByKey("attacks-msg");
|
||
lang["astral-pool"] = getTranslationByKey("astral-pool");
|
||
lang["astral-pool-dice"] = getTranslationByKey("astral-pool-dice");
|
||
lang["spell-pool"] = getTranslationByKey("spell-pool");
|
||
lang["spell-pool-dice"] = getTranslationByKey("spell-pool-dice");
|
||
lang["spell-pool-dice-for-drain"] = getTranslationByKey("spell-pool-dice-for-drain");
|
||
lang["conjuring-dice-for-drain"] = getTranslationByKey("conjuring-dice-for-drain");
|
||
lang["sorcery-dice"] = getTranslationByKey("sorcery-dice");
|
||
lang["sorcery-dice-for-drain"] = getTranslationByKey("sorcery-dice-for-drain");
|
||
lang["control-pool"] = getTranslationByKey("control-pool");
|
||
lang["control-pool-dice"] = getTranslationByKey("control-pool-dice");
|
||
lang["hacking-pool"] = getTranslationByKey("hacking-pool");
|
||
lang["hacking-pool-dice"] = getTranslationByKey("hacking-pool-dice");
|
||
lang["combat-pool"] = getTranslationByKey("combat-pool");
|
||
lang["combat-pool-dice"] = getTranslationByKey("combat-pool-dice");
|
||
lang["attack-power"] = getTranslationByKey("attack-power");
|
||
lang["attack-type"] = getTranslationByKey("attack-type");
|
||
lang["distance-from-explosive-in-meters"] = getTranslationByKey("distance-from-explosive-in-meters");
|
||
lang["how-many-additional-enemy-vehicles"] = getTranslationByKey("how-many-additional-enemy-vehicles");
|
||
lang["normal"] = getTranslationByKey("normal");
|
||
lang["elemental"] = getTranslationByKey("elemental");
|
||
lang["adps"] = getTranslationByKey("adps");
|
||
lang["half"] = getTranslationByKey("half");
|
||
lang["double"] = getTranslationByKey("double");
|
||
lang["dodge"] = getTranslationByKey("dodge");
|
||
lang["target-number"] = getTranslationByKey("target-number");
|
||
lang["target"] = getTranslationByKey("target");
|
||
lang["spellbocked-msg"] = getTranslationByKey("spellblocked-msg");
|
||
lang["missed-msg"] = getTranslationByKey("missed-msg");
|
||
lang["verification-system-rating"] = getTranslationByKey("verification-system-rating");
|
||
lang["operator"] = getTranslationByKey("operator");
|
||
lang["short"] = getTranslationByKey("short");
|
||
lang["medium"] = getTranslationByKey("medium");
|
||
lang["long"] = getTranslationByKey("long");
|
||
lang["extreme"] = getTranslationByKey("extreme");
|
||
lang["rigger"] = getTranslationByKey("rigger");
|
||
lang["spell-resistance-test"] = getTranslationByKey("spell-resistance-test");
|
||
lang["set-vehicle-operator"] = getTranslationByKey("set-vehicle-operator");
|
||
lang["update-gunnery-and-control-pool"] = getTranslationByKey("update-gunnery-and-control-pool");
|
||
lang["set-decker-for-security-tally"] = getTranslationByKey("set-decker-for-security-tally");
|
||
console.log(lang);
|
||
};
|
||
|
||
console.log('loading rangedweapons stats');
|
||
const rangedstats = {
|
||
"Hold-out Pistol": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{pistols}", wfamily: "Firearms"},
|
||
"Bracer": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{bracer}", wfamily: "Special"},
|
||
"Gun Cane": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{guncane}", wfamily: "Special"},
|
||
"Light Pistol": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{pistols}", wfamily: "Firearms"},
|
||
"Machine Pistol": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{pistols}", wfamily: "Firearms"},
|
||
"Heavy Pistol": { short: 5, medium: 20, long: 40, extreme: 60, skill: "@{pistols}", wfamily: "Firearms"},
|
||
"Laser Pistol": { short: 5, medium: 20, long: 40, extreme: 60, skill: "@{lasers}", wfamily: "Laser"},
|
||
"SMG": { short: 10, medium: 40, long: 80, extreme: 150, skill: "@{smgs}", wfamily: "Firearms"},
|
||
"Speargun": { short: 10, medium: 40, long: 80, extreme: 150, skill: "@{smgs}", wfamily: "Special" },
|
||
"Taser": { short: 5, medium: 10, long: 12, extreme: 15, skill: "@{pistols}", wfamily: "Special"},
|
||
"Shotgun": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{shotguns}", wfamily: "Firearms"},
|
||
"Net Gun": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{shotguns}", wfamily: "Special"},
|
||
"Sporting Rifle": { short: 100, medium: 250, long: 500, extreme: 750, skill: "@{rifles}", wfamily: "Firearms"},
|
||
"Laser Rifle": { short: 100, medium: 250, long: 500, extreme: 750, skill: "@{lasers}", wfamily: "Laser"},
|
||
"Sniper Rifle": { short: 150, medium: 300, long: 700, extreme: 1000, skill: "@{rifles}", wfamily: "Firearms"},
|
||
"Laser Sniper": { short: 150, medium: 300, long: 700, extreme: 1000, skill: "@{lasers}", wfamily: "Laser"},
|
||
"Assault Rifle": { short: 50, medium: 150, long: 350, extreme: 550, skill: "@{assaultrifles}", wfamily: "Firearms"},
|
||
"Light Machine Gun": { short: 75, medium: 200, long: 400, extreme: 800, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Medium Machine Gun": { short: 80, medium: 250, long: 750, extreme: 1200, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Heavy Machine Gun": { short: 80, medium: 250, long: 800, extreme: 1500, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Assault Cannon": { short: 100, medium: 300, long: 900, extreme: 2400, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Minigun": { short: 75, medium: 200, long: 400, extreme: 800, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Sling Shot": { short: "mystr", medium: "mystr * 2", long:"mystr * 5", extreme: "mystr * 7", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Sling Launcher": { short: "mystr * 3", medium: "mystr * 5", long:"mystr * 20", extreme: "mystr * 30", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Bow": { short: "mystr", medium: "mystr * 10", long:"mystr * 30", extreme: "mystr * 60", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Light Crossbow": { short: "mystr * 2", medium: "mystr * 8", long: "mystr * 20", extreme: "mystr * 40", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Medium Crossbow": { short: "mystr * 3", medium: "mystr * 12" , long: "mystr * 30", extreme: "mystr * 50", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Heavy Crossbow": { short: "mystr * 5", medium: "mystr * 15", long: "mystr * 40", extreme: "mystr * 60", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Thrown Knife": { short: "mystr", medium: "mystr * 3", long: "mystr * 5", extreme: "mystr * 7", skill: "@{throwing}", wfamily: "Throwing" },
|
||
"Shuriken": { short: "mystr", medium: "mystr * 2", long: "mystr * 5", extreme: "mystr * 7", skill: "@{throwing}", wfamily: "Throwing" },
|
||
"Caltrops": { short: "mystr * 3", medium: "mystr * 5", long: "mystr * 10", extreme: "mystr * 20", skill: "@{throwing}", wfamily: "Throwing" },
|
||
"Nets": { short: 2, medium: 4, long: 6, extreme: 10, skill: "@{throwing}", wfamily: "Throwing" },
|
||
|
||
"Gyrojet (land)": { short: 5, medium: 20, long: 40, extreme: 60, skill: "@{gyrojet}", wfamily: "Special" },
|
||
"Gyrojet (water)": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{gyrojet}", wfamily: "Special" },
|
||
"Blowgun": { short: 3, medium: 8, long: 12, extreme: 15, skill: "@{blowgun}", wfamily: "Special" },
|
||
"Flamethrower": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{spray}", wfamily: "Special" },
|
||
"Other": { short: 0, medium: 0, long: 0, extreme: 0, skill: 0, wfamily: "Other" }
|
||
}
|
||
|
||
const rollEscape = {
|
||
chars: {
|
||
'"': '%quot;',
|
||
',': '%comma;',
|
||
':': '%colon;',
|
||
'}': '%rcub;',
|
||
'{': '%lcub;',
|
||
},
|
||
escape(str) {
|
||
str = (typeof(str) === 'object') ? JSON.stringify(str) : (typeof(str) === 'string') ? str : null;
|
||
return (str) ? `${str}`.replace(new RegExp(`[${Object.keys(this.chars)}]`, 'g'), (r) => this.chars[r]) : null;
|
||
},
|
||
unescape(str) {
|
||
str = `${str}`.replace(new RegExp(`(${Object.values(this.chars).join('|')})`, 'g'), (r) => Object.entries(this.chars).find(e=>e[1]===r)[0]);
|
||
return JSON.parse(str);
|
||
}
|
||
};
|
||
|
||
on('clicked:jackin', function(info) {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
getAttrs(["matrix-status"], function(myval) {
|
||
var sets={};
|
||
const mstatus=myval["matrix-status"];
|
||
var myroll="/w gm &{template:info}{{character=@{character_name}}}";
|
||
myroll+= (mstatus == "out")? "{{type=Jack In}}": "{{type=Jack Out}}";
|
||
myroll += "{{action=" + lang["complex"] + "}}";
|
||
sets["matrix-status"]= (mstatus == "out")? "in" : "out";
|
||
startRoll(myroll, (results) => {
|
||
setAttrs(sets);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
});
|
||
on("change:repeating_ammunition:ammotype change:repeating_ammunition:ammoload change:repeating_ammunition:ammocount", function() {
|
||
getAttrs(["repeating_ammunition_ammotype", "repeating_ammunition_ammocount", "repeating_ammunition_ammoload"], function(myval) {
|
||
const type=myval["repeating_ammunition_ammotype"];
|
||
const qty=parseInt(myval["repeating_ammunition_ammocount"]);
|
||
const load=parseInt(myval["repeating_ammunition_ammoload"]);
|
||
const aweight=(type in ammomods)? ammomods[type]["weight"] : .05;
|
||
const atts={};
|
||
atts["repeating_ammunition_ammoweight"]=Number((qty * aweight).toFixed(2));
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
});
|
||
|
||
on("change:ammunition-weight change:armor-weight change:weaponfocus-weight change:meleeweapons-weight change:explosives-weight change:rangedweapons-weight change:gear-weight change:weaponfocus-load", function() {
|
||
getAttrs(["ammunition-weight", "armor-weight", "weaponfocus-weight", "weaponfocus-load", "meleeweapons-weight", "explosives-weight", "rangedweapons-weight", "gear-weight"], function(myval) {
|
||
console.log(myval);
|
||
var sets={};
|
||
let ammo=parseFloat(myval["ammunition-weight"]);
|
||
let armor=parseFloat(myval["armor-weight"]);
|
||
let focus=parseFloat(myval["weaponfocus-weight"]) * parseInt(myval["weaponfocus-load"]);
|
||
let melee=parseFloat(myval["meleeweapons-weight"]);
|
||
let ranged=parseFloat(myval["rangedweapons-weight"]);
|
||
let exp=parseFloat(myval["explosives-weight"]);
|
||
let gear=parseFloat(myval["gear-weight"]);
|
||
console.log( ammo + ":" + armor + ":" + focus +":"+melee+":"+ranged+":"+exp+":"+gear);
|
||
sets["carrying-weight"]=ammo + armor + focus + melee + ranged + exp + gear;
|
||
sets["melee-weight-final"]=melee + focus;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
|
||
});
|
||
|
||
on("change:repeating_rangedweapons:type", function() {
|
||
console.log('updating range based on weapon type');
|
||
getAttrs(["repeating_rangedweapons_type", "strength_max"], function(myval) {
|
||
var myatts={};
|
||
const mytype=myval["repeating_rangedweapons_type"];
|
||
const mystr=parseInt(myval.strength_max)
|
||
console.log('type: ' + mytype);
|
||
myatts["repeating_rangedweapons_short"]=eval(rangedstats[mytype]["short"]);
|
||
myatts["repeating_rangedweapons_medium"]=eval(rangedstats[mytype]["medium"]);
|
||
myatts["repeating_rangedweapons_long"]=eval(rangedstats[mytype]["long"]);
|
||
myatts["repeating_rangedweapons_extreme"]=eval(rangedstats[mytype]["extreme"]);
|
||
myatts["repeating_rangedweapons_wfamily"]=rangedstats[mytype]["wfamily"];
|
||
myatts["repeating_rangedweapons_skill"]=rangedstats[mytype]["skill"];
|
||
console.log(myatts);
|
||
setAttrs(myatts);
|
||
});
|
||
});
|
||
|
||
const matrixtn={BLUE: {Intruder: 6, Legitimate: 3, secrating: 1, wdmg: 2}, GREEN: {Intruder: 5, Legitimate: 4, secrating: 2, wdmg: 2}, ORANGE: {Intruder: 4, Legitimate: 5, secrating: 3, wdmg: 3}, RED: {Intruder: 3, Legitimate: 6, secrating: 4, wdmg: 3}};
|
||
const matrixsecnumber={1: "BLUE", 2: "GREEN", 3: "ORANGE",4: "RED"};
|
||
const attributes=[ "body", "quickness", "strength", "charisma", "willpower", "intelligence", "force" ];
|
||
const quicknesslinked=["@{blowgun}", "@{bracer}", "@{guncane}", "@{gyrojet}", "@{eyegun}", "@{oralgun}", "@{oralstrike}", "@{pistols}", "@{smgs}", "@{rifles}", "@{assaultrifles}", "@{lasers}", "@{whips}", "@{stealth}", "@{shotguns}"]
|
||
const damagetable = {
|
||
"None": 0,
|
||
"L": 1,
|
||
"M": 2,
|
||
"S": 3,
|
||
"D": 4,
|
||
0: "None",
|
||
9: "None",
|
||
1: "L",
|
||
2: "M",
|
||
3: "S",
|
||
4: "D",
|
||
"L(stun)": 10,
|
||
"M(stun)": 11,
|
||
"S(stun)": 12,
|
||
"D(stun)": 13,
|
||
10: "L(stun)",
|
||
11: "M(stun)",
|
||
12: "S(stun)",
|
||
13: "D(stun)"
|
||
}
|
||
var getRandomInt = function(min, max) {
|
||
min = Math.ceil(min);
|
||
max = Math.floor(max);
|
||
return Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive
|
||
}
|
||
|
||
on("change:weaponfocus-force", function() {
|
||
atts=[];
|
||
getAttrs(["weaponfocus-force"], function (myval) {
|
||
atts["weaponfocus-show"]="false";
|
||
if ( myval["weaponfocus-force"] > 0 ) atts["weaponfocus-show"]="true";
|
||
setAttrs(atts);
|
||
});
|
||
|
||
});
|
||
|
||
on('clicked:missed', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
payload=rollEscape.unescape(info["originalRollId"]);
|
||
myroll="/w gm &{template:info}{{character=" + payload["target"] +"}}{{action=" + lang["missed-msg"]+"}}";
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
on('clicked:spellblocked', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
payload=rollEscape.unescape(info["originalRollId"]);
|
||
myroll="/w gm &{template:info}{{character=" + payload["target"] +"}}{{action=" + lang["spellblocked-msg"] +"}}";
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
on('clicked:repeating_gear:usegear', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
var atts=[];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
atts.push(myrepeat.concat("rating"));
|
||
atts.push(myrepeat.concat("quantity"));
|
||
atts.push(myrepeat.concat("type"));
|
||
atts.push(myrepeat.concat("pool"));
|
||
atts.push(myrepeat.concat("name"));
|
||
getAttrs(atts, function(myval) {
|
||
var sets={};
|
||
let rating=parseInt(myval[myrepeat.concat("rating")]);
|
||
let qty=parseInt(myval[myrepeat.concat("quantity")]);
|
||
let mypool=myval[myrepeat.concat("pool")];
|
||
const poolname = mypool.charAt(0).toUpperCase() + mypool.slice(1);
|
||
const pool=mypool + "pool";
|
||
let myname=myval[myrepeat.concat("name")];
|
||
let mytype=myval[myrepeat.concat("type")];
|
||
calcDice=rating;
|
||
if ( mypool != "none" ) calcDice += " + ?{" + lang[mypool + "-pool-dice"] + "?}";
|
||
var myroll="&{template:item} {{item=" + myname +"}}{{myname=@{character_name}}}";
|
||
myroll += "{{targetnumber=[[?{" + lang["target-number"] +"?|4}]]}}";
|
||
if ( mypool != "none" ) myroll += "{{poolname=" + lang[mypool + "-pool"] + "}}{{pooldice=[[?{" + lang[mypool + "-pool-dice"] + "?|0}]]}}";
|
||
myroll += "{{rolldice=[[" + calcDice + " ]]}}";
|
||
myroll += "{{result=[[ [[ " + calcDice + " ]]d6>[[?{" + lang["target-number"] +"?}]]!! ]]}}";
|
||
if ( ( mytype == "onetime" ) && ( qty < 1 ) ) myroll="/w gm &{template:info}{{character=@{character_name}}}{{action=You are out of " + myname + "}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
if ( mypool != "none" ) updatepoolused("taskpool", results.results.pooldice.result);
|
||
if (( mytype == "onetime" ) && ( qty > 0 )) {
|
||
sets[myrepeat.concat("quantity")] = qty -1;
|
||
setAttrs(sets);
|
||
}
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
});
|
||
on('clicked:repeating_credsticks:checkcredstick', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
var atts=[];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
atts.push(myrepeat.concat("rating"));
|
||
atts.push(myrepeat.concat("id"));
|
||
getAttrs(atts, function(myval) {
|
||
let rating=parseInt(myval[myrepeat.concat("rating")]);
|
||
let myid=myval[myrepeat.concat("id")];
|
||
var myroll="&{template:item} {{item=" + myid + " credstick}}{{myname=@{character_name}}}{{poolname=" + lang["task-pool"] +"}}{{targetnumber=[[?{" + lang["verification-system-rating"] + "?|4}]]}}";
|
||
myroll += "{{pooldice=[[?{" + lang["task-pool-dice"] +"?|0}]]}}{{rolldice=[[" + rating + " + ?{" + lang["task-pool-dice"] +"?} ]]}}";
|
||
myroll += "{{result=[[ [[ " + rating + " + ?{" + lang["task-pool-dice"] +"?} ]]d6>[[?{" + lang["verification-system-rating"] + "?}]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("taskpool", results.results.pooldice.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
});
|
||
|
||
on('clicked:repeating_skills:skills', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
const attrlist=["skillname", "skillrating", "pool"];
|
||
var atts=["character_name"];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
attrlist.forEach(myatt=>{
|
||
atts.push(myrepeat.concat(myatt));
|
||
});
|
||
getAttrs(atts, function(myval) {
|
||
const skill=myval[myrepeat.concat("skillname")];
|
||
const rating=parseInt(myval[myrepeat.concat("skillrating")]);
|
||
const mypool=myval[myrepeat.concat("pool")];
|
||
const poolname = mypool.charAt(0).toUpperCase() + mypool.slice(1);
|
||
const pool=mypool + "pool";
|
||
console.log('start roll for ' + skill);
|
||
var calcDice= rating;
|
||
if ( mypool != "none" ) calcDice += " + ?{" + lang[mypool + "-pool-dice"] + "?}";
|
||
const calcTN="?{" + lang["target-number"] +"?|4} + @{stun_pen} + @{wound_pen}";
|
||
var myroll="&{template:skill} {{skill=" + skill + "}}{{myname=" + myval["character_name"] + "}}";
|
||
if ( mypool != "none" ) myroll += "{{pooldice=[[?{" + lang[mypool + "-pool-dice"] + "?|0}]]}}{{poolname=" + lang[mypool + "-pool"] + "}}";
|
||
myroll +="{{targetnumber=[[ " + calcTN + " ]]}}{{rolldice=[[ " + calcDice + " ]]}}";
|
||
myroll += "{{result=[[ [[ " + calcDice + " ]]d6>[[{2,( " + calcTN + " )}kh1]]!!} ]]}}";
|
||
startRoll(myroll, (results) => {
|
||
console.log('R: ' + results);
|
||
if ( mypool != "none" ) updatepoolused(pool, results.results.pooldice.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
});
|
||
on('clicked:skilltest', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
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 + "} + ?{" + lang[mypool + "-pool-dice"] + "?}";
|
||
const calcTN="?{" + lang["target-number"] +"?|4} + @{stun_pen} + @{wound_pen}";
|
||
var myroll="&{template:skill} {{myname=@{character_name}}}{{skill=" + skill + "}}{{poolname=" + lang[mypool + "-pool"] + "}}{{pooldice=[[?{" + lang[mypool + "-pool-dice"] +"?|0}]]}}"
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{result= [[ [[" + calcDice + "]]d6>[[{2,(" + calcTN +")}kh1]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused(mypool.concat("pool"), results.results.pooldice.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
const updatepoolused = function(pool, used) {
|
||
poolused=pool.concat("-used");
|
||
sets={}
|
||
getAttrs([poolused], function (myval) {
|
||
sets[poolused]=used + parseInt(myval[poolused]);
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
}
|
||
|
||
|
||
on('clicked:repeating_defensiveutils:matrixrepeatingtest clicked:repeating_offensiveutils:matrixrepeatingtest clicked:repeating_deck-utilities:matrixrepeatingtest', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
var atts=[];
|
||
var source=info['sourceAttribute'].split('_');
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
var action;
|
||
var target;
|
||
var calcTN;
|
||
var calcDice;
|
||
var utiltarget;
|
||
const myutil=myrepeat.concat("utility");
|
||
const myrating=myrepeat.concat("rating-final");
|
||
atts.push(myutil, myrating);
|
||
if ( myid == "matrixrepeatingexec" ) utiltarget=myrepeat.concat("target");
|
||
atts.push(utiltarget);
|
||
if ( myid == "matrixrepeatingexec" ) console.log('utiltarget: ' + utiltarget);
|
||
console.log(atts);
|
||
getAttrs(atts, function(myval) {
|
||
console.log(myval);
|
||
const myutilvalue=myval[myutil];
|
||
const myratingvalue=myval[myrating];
|
||
const myutiltarget=myval[utiltarget];
|
||
if ( myid == "matrixrepeatingattack" ) {
|
||
action = "{{action=" + myutilvalue + " Attack}}";
|
||
target = "{{target=@{target|" + lang["target"] +"|token_name}}}";
|
||
calcTN="@{deck-tn} + @{wound_pen} + @{stun_pen} +@{matrix-penalty} +?{" + lang["miscellaneous-modifiers"] + "|0}";
|
||
calcDice="@{decking} + ?{" + lang["hacking-pool-dice"] + "}";
|
||
} else if ( myid == "matrixrepeatingexec" ) {
|
||
console.log('utiltarget ' + myutiltarget);
|
||
action="{{action=" + lang["system-operation-with"] + " " + myutilvalue + " }}";
|
||
target = "{{target=@{target|" + lang["target"] +"|token_name}}}";
|
||
calcTN= myutiltarget + " + floor(@{target|" + lang["target"] +"|matrixalert}/2) + @{wound_pen} + @{stun_pen} +@{matrix-penalty} - " + myratingvalue;
|
||
calcDice="@{decking} + ?{" + lang["hacking-pool-dice"] + "}";
|
||
} else {
|
||
action="{{action=" + myutilvalue + " Test}}";
|
||
target ="{{target=?{" + lang["target-number"] +"?|4}}}";
|
||
calcTN="?{" + lang["target-number"] +"?} + @{wound_pen} + @{stun_pen} + @{matrix-penalty}";
|
||
calcDice=myratingvalue + " + ?{" + lang["hacking-pool-dice"] + "}";
|
||
}
|
||
var myroll="&{template:matrix}{{myname=@{character_name}}}{{hackingpool=[[?{" + lang["hacking-pool-dice"] + "|0}]]}}";
|
||
myroll+= target + action;
|
||
myroll+="{{utilitylevel=" + myratingvalue + "}}"
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!!]] }}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
|
||
});
|
||
on("clicked:setrigger", function(info) {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var myroll="/w gm &{template:info}{{character=@{character_name}}}";
|
||
var designator;
|
||
var sets={};
|
||
getAttrs(["sheettype", "rigger"], function(myval) {
|
||
console.log(myval);
|
||
if ((myid == "refresh-rigger") && (myval["rigger"])) {
|
||
myroll+="{{action=" + lang["update-gunnery-and-control-pool"] + "}}";
|
||
designator="@{" + myval["rigger"];
|
||
} else if (myval["sheettype"] == "Drone") {
|
||
myroll+="{{action=Set " + lang["rigger"] + "}}";
|
||
designator="@{target|" + lang["rigger"];
|
||
} else {
|
||
myroll+="{{action=" + lang["set-vehicle-operator"] + "}}";
|
||
designator="@{target|" + lang["operator"];
|
||
}
|
||
myroll+="{{name=[[0[" + designator + "|character_name}]]]}}";
|
||
myroll+="{{gunnery=[[" + designator + "|gunnery}]]}}";
|
||
myroll+="{{controlpool=[[" + designator + "|controlpool}]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
sets["rigger"]=results.results.name.expression.match(/\[(.*)\]/)[1];
|
||
sets["controlpool"]=results.results.controlpool.result;
|
||
sets["gunnery"]=results.results.gunnery.result;
|
||
console.log(sets);
|
||
finishRoll( results.rollId);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
});
|
||
|
||
on("clicked:repeating_intruders:settokenname", function(info) {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
const source=info['sourceAttribute'].split('_');
|
||
const sourceattr=source.pop();
|
||
const myrepeat=source.join('_').concat('_');
|
||
const intrudername=myrepeat + "intrudername";
|
||
var sets={};
|
||
const myroll="/w gm &{template:info}{{character=@{character_name}}}{{action=" + lang["set-decker-for-security-tally"] +"}}{{target=[[0[@{target|" + lang["icon"] + "|token_name}]]]}}";
|
||
|
||
startRoll(myroll, (results) => {
|
||
sets[intrudername]=results.results.target.expression.match(/\[(.*)\]/)[1];
|
||
console.log(sets);
|
||
finishRoll( results.rollId);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
on("change:repeating_intruders:intrudername", function(){
|
||
getAttrs(["repeating_intruders_intrudername"], function (myval) {
|
||
var mydecker="@{";
|
||
mydecker=mydecker.concat(myval["repeating_intruders_intrudername"]);
|
||
mydecker=mydecker.concat("|");
|
||
setAttrs({"repeating_intruders_detecttarget": mydecker});
|
||
});
|
||
});
|
||
|
||
on('clicked:matrixdetect', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
sets={};
|
||
console.log(info);
|
||
const myid=info["htmlAttributes"]["id"];
|
||
const mytitle=info["htmlAttributes"]["title"];
|
||
getAttrs(["matrixsecuritytally"], function (myval) {
|
||
var mytally=parseInt(myval["matrixsecuritytally"]);
|
||
if ( myid == "systemdetect" ) {
|
||
var myroll="/w gm &{template:matrix}{{target=@{target|" + lang["target"] +"|token_name}}}{{myname=@{character_name}}}{{action=Detection Roll}}" ;
|
||
myroll+="{{targetnumber=@{target|" + lang["target"] +"|deck-detection-final}}}";
|
||
myroll+="{{rolldice=[[@{matrixsecurityrating}]]}}";
|
||
myroll+="{{roll=[[@{matrixsecurityrating}d6>[[{2,(@{target|" + lang["target"] +"|deck-detection-final})}kh1]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
mytally += results.results.roll.result;
|
||
sets["matrixsecuritytally"]=mytally;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
finishRoll( results.rollId);
|
||
});
|
||
} else {
|
||
sets["matrixsecuritytally"]=0;
|
||
setAttrs(sets);
|
||
}
|
||
});
|
||
});
|
||
|
||
on('clicked:repeating_intruders:detect', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
sets={};
|
||
console.log(info);
|
||
const myid=info["htmlAttributes"]["id"];
|
||
const mytitle=info["htmlAttributes"]["title"];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
const intruder = myrepeat + "detecttarget"
|
||
const sectally = myrepeat + "securitytally";
|
||
getAttrs([intruder, sectally], function (myval) {
|
||
const mytarget=myval[intruder];
|
||
var mytally=parseInt(myval[sectally]);
|
||
if ( myid == "systemdetect" ) {
|
||
var myroll="/w gm &{template:matrix}{{target=@{" + intruder + "}character_name}}}{{myname=@{character_name}}}{{action=Detection Roll}}" ;
|
||
myroll+="{{targetnumber=@{" + intruder + "}deck-detection-final}}}";
|
||
myroll+="{{rolldice=[[@{matrixsecurityrating}]]}}";
|
||
myroll+="{{roll=[[@{matrixsecurityrating}d6>[[{2,(@{" + intruder + "}deck-detection-final})}kh1]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
mytally += results.results.roll.result;
|
||
sets[sectally]=mytally;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
finishRoll( results.rollId);
|
||
});
|
||
} else {
|
||
sets[sectally]=0;
|
||
setAttrs(sets);
|
||
}
|
||
});
|
||
});
|
||
|
||
on('clicked:matrixresist clicked:repeating_ic:matrixresist', (info) => {
|
||
if (info['sourceAttribute']) {
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_') + "ic-penalty";
|
||
atts.push(myrepeat);
|
||
}
|
||
if (!("yes" in lang)) geti18n();
|
||
var payload, myid, attacktest, wdmg;
|
||
if ( info["htmlAttributes"]["id"] != undefined) {
|
||
myid=info["htmlAttributes"]["id"];
|
||
} else if ( info["originalRollId"] != undefined ) {
|
||
payload=rollEscape.unescape(info["originalRollId"]);
|
||
}
|
||
var calcTN;
|
||
var calcDice;
|
||
var myroll="&{template:matrix}";
|
||
console.log(info);
|
||
if ( payload ) {
|
||
console.log(payload);
|
||
power=payload["power"];
|
||
wdmg=payload["wdmg"];
|
||
basetn=payload["basetn"];
|
||
attribute=payload["attribute"];
|
||
const myattr=attribute.split("-")[1];
|
||
attacktype=payload["attacktype"];
|
||
attacktest=payload["attacktest"];
|
||
attacker=payload["attacker"];
|
||
calcDice="@{deck-bod-final} + ?{" + lang["hacking-pool-dice"] + "|0}";
|
||
calcTN= "?{" + lang["attack-power"] +"?|" + power + "}";
|
||
myroll+="{{finaldamage=[[0]]}}{{attackdmg=[[0]]}}{{payload=[[0]]}}";
|
||
if (iclist["attack"].includes(attacktype)) calcTN += " - @{deckarmor-rating-final}";
|
||
if (iclist["blackic"].includes(attacktype)) {
|
||
myroll+="{{blackic=" + lang[attacktype] + "}}";
|
||
payload["ammotype"]=attacktype;
|
||
payload["wdmg"]=damagetable[wdmg];
|
||
payload["dodge"]=0;
|
||
payload["range"]="touch";
|
||
}
|
||
myroll+="{{target=" + attacker + "}}";
|
||
console.log('tst myattr: ' + myattr + ' lang: ' + lang[myattr]);
|
||
myroll+= (iclist["debuff"].includes(attacktype))? "{{debuff=" + lang[myattr] +"}}": "{{resist=yes}}";
|
||
} else {
|
||
console.log('no payload');
|
||
calcTN="?{" + lang["attack-power"] +"?|0} - @{deckarmor-rating-final}";
|
||
calcDice="@{deck-bod-final} + ?{" + lang["hacking-pool-dice"] + "|0}";
|
||
myroll+="{{target=?{" + lang["attack-power"] +"?|0}}}";
|
||
}
|
||
myroll+="{{action=" + lang["damage-resistance-test"] + "}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{utilitylevel=Armor Rating @{deckarmor-rating-final}}}";
|
||
myroll+="{{myname=@{selected|token_name}}}{{hackingpool=[[?{" + lang["hacking-pool-dice"] + "|0}]]}}";
|
||
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
if ( payload ) {
|
||
const resistroll=results.results.roll.result;
|
||
const delta=attacktest - resistroll;
|
||
console.log('delta: ' + delta);
|
||
console.log('wdmg: ' + wdmg);
|
||
const finaldmg=(iclist["debuff"].includes(attacktype))? calcFinalDebuff(delta) : calcFinalDmg(wdmg, delta);
|
||
console.log('final dmg: ' + finaldmg);
|
||
finishRoll( results.rollId,
|
||
{
|
||
finaldamage: finaldmg,
|
||
payload: rollEscape.escape(payload),
|
||
|
||
});
|
||
|
||
}
|
||
else finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
const iclist = {
|
||
blackic: ["blackiclethal", "cerebropathic", "psychotropic", "blackicnonlethal", "deckblackhammer", "deckkilljoy"],
|
||
debuff: ["Crippler", "Ripper"],
|
||
attack: ["Killer", "Blaster", "Sparky", "blackiclethal", "cerebropathic", "psychotropic", "blackicnonlethal", "deckblackhammer", "deckkilljoy"],
|
||
proactive: ["Crippler", "Ripper", "Killer", "Blaster", "Sparky", "Scout", "blackiclethal", "cerebropathic", "psychotropic", "blackicnonlethal", "Trace"],
|
||
reactive: ["Probe", "Scramble", "Tar Baby", "Tar pit", "Data Bomb", "Pavlov"]
|
||
};
|
||
|
||
on('clicked:matrixattack', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
const myid=info["htmlAttributes"]["id"]
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
console.log(info);
|
||
getAttrs(["deck-systemrating", "character_name", "deckattacklevel"], function (myval) {
|
||
const myammo=(myid=="deckattack")? myval["deckattacklevel"] : myid;
|
||
var calcTN="0 + @{wound_pen} + @{stun_pen} + @{matrix-penalty} + ?{" + lang["miscellaneous-modifiers"] + "|0}";
|
||
const systemrating=myval["deck-systemrating"].toUpperCase();
|
||
var calcDice="@{decking} + ?{" + lang["hacking-pool-dice"] + "|0}"
|
||
var myaction="{{action=" + mytitle + "}}";
|
||
if (myid == "deckattack") myaction="{{action=Attack @{deckattacklevel}}}"
|
||
var myroll="&{template:matrix}"
|
||
myroll+="{{roll=[[[[" + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1]]!!]]}}";
|
||
myroll+= myaction;
|
||
myroll+="{{senddata=[[0]]}}";
|
||
myroll+="{{wdmg=[[0]]}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}"
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
if ( systemrating == "UNKNOWN" ) myroll+="{{systemrating=[[@{target|Host|matrixsecuritynumber}]]}}";
|
||
else myroll+="{{systemrating=[[" + matrixtn[systemrating]["secrating"] + "]]}}";
|
||
myroll+="{{iconstatus=[[@{target|" + lang["target"] +"|iconstatuscode}]]}}";
|
||
myroll+="{{mytoken=[[0[@{selected|token_name}]]]}}{{target=@{target|" + lang["target"] +"|token_name}}}{{hackingpool=[[?{" + lang["hacking-pool-dice"] + "|0}]]}}";
|
||
myroll+="{{utilitylevel=@{deckattack-rating-final}}}";
|
||
myroll+="{{utilitylevel=[[@{" + myid + "-rating-final}]]}}"
|
||
myroll+="{{hackingpool=[[?{" + lang["hacking-pool-dice"] + "}]]}}"
|
||
myroll+="{{myname=@{selected|token_name}}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
const mytoken=results.results.mytoken.expression.match(/\[(.*)\]/)[1];
|
||
if ( results.results.iconstatus.result == 0) myicon="Legitimate";
|
||
else myicon="Intruder";
|
||
var finaltn=results.results.targetnumber.result
|
||
const mysystem=matrixsecnumber[results.results.systemrating.result];
|
||
const myhosttn=matrixtn[mysystem][myicon];
|
||
finaltn += myhosttn;
|
||
console.log('final tn: ' + finaltn);
|
||
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
|
||
console.log('dice : ' + results.results.roll.dice);
|
||
console.log('finaldice : ' + finaldice);
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
const mydamage=(myid=="deckattack")? damagetable[myval["deckattacklevel"]] : matrixtn[mysystem]["wdmg"];
|
||
let payload= {
|
||
ammotype: myammo,
|
||
wdmg: mydamage,
|
||
attacker: mytoken,
|
||
attacktest: finaldice,
|
||
power: results.results.utilitylevel.result,
|
||
attacktype: myammo,
|
||
attribute: "deck-bod-final"
|
||
}
|
||
finishRoll( results.rollId,
|
||
{
|
||
wdmg: damagetable[mydamage],
|
||
senddata: rollEscape.escape(payload),
|
||
targetnumber: finaltn,
|
||
roll: finaldice,
|
||
finalroll: finaldice,
|
||
});
|
||
});
|
||
});
|
||
});
|
||
on('clicked:matrixmedic', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
const myid=info["htmlAttributes"]["id"]
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
getAttrs(["matrix-damage", "matrix-penalty", "deckmedic-rating-final"], function(myval) {
|
||
const pentn=parseInt(myval["matrix-penalty"]) + 3;
|
||
const dmg=myval["matrix-damage"];
|
||
var medicrating=parseInt(myval["deckmedic-rating-final"]);
|
||
var calcTN=pentn;
|
||
var calcDice=medicrating + " + ?{" + lang["hacking-pool-dice"] + "|0}"
|
||
var myroll="&{template:matrix}"
|
||
myroll+="{{action=Medic Utility}}"
|
||
myroll+="{{matrixdmg=[[" + dmg + "]]}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}"
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{myname=@{selected|token_name}}}{{target=" + pentn +"}}";
|
||
myroll+="{{utilitylevel=@{deckmedic-rating-final}}}"
|
||
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}"
|
||
myroll+="{{hackingpool=[[?{" + lang["hacking-pool-dice"] + "}]]}}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
sets={};
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
medicrating -= 1;
|
||
var finaldmg = dmg - results.results.roll.result;
|
||
finaldmg = (finaldmg < 1 )? 0: finaldmg;
|
||
sets["matrix-damage"]=finaldmg;
|
||
sets["deckmedic-rating-final"]=medicrating;
|
||
setAttrs(sets);
|
||
finishRoll( results.rollId,
|
||
{
|
||
matrixdmg: finaldmg,
|
||
});
|
||
});
|
||
});
|
||
});
|
||
|
||
on('clicked:swapmemory clicked:repeating_defensiveutils:swapmemory clicked:repeating_offensiveutils:swapmemory clicked:repeating_deck-utilities:swapmemory', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
var sets={};
|
||
var atts=[];
|
||
var myatt;
|
||
var myutil;
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
if ( info['sourceAttribute'] ) {
|
||
source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
myatt=myrepeat + "rating";
|
||
|
||
atts.push(myrepeat + "utility");
|
||
} else {
|
||
myutil=myid.split("-")[0];
|
||
myutil=myutil.slice(4);
|
||
myatt=myid;
|
||
}
|
||
atts.push(myatt);
|
||
const myfinal=myatt + "-final";
|
||
console.log(atts);
|
||
getAttrs(atts, function (myval) {
|
||
console.log('myval');
|
||
console.log(myval);
|
||
sets[myfinal]=parseInt(myval[myatt]);
|
||
if ( myutil == null ) myutil=myval[myrepeat + "utility"];
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
myroll="&{template:info}{{character=@{character_name}}}{{action=" + lang["swap-memory"] + "}}{{type=" + lang["simple"] + "}}{{info1=Reloading Utility " + myutil + " into Memory}}";
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
});
|
||
|
||
on('clicked:matrixtest clicked:repeating_ic:matrixtest', (info) => {
|
||
console.log(info);
|
||
if (!("yes" in lang)) geti18n();
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var atts=["stun_pen", "wound_pen", "matrix-penalty"];
|
||
atts.push(myid);
|
||
if (info['sourceAttribute']) {
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_') + "ic-penalty";
|
||
atts.push(myrepeat);
|
||
}
|
||
getAttrs(atts, function(myval) {
|
||
const wpmatrix=(info['sourceAttribute'])? parseInt(myval[myrepeat]) : parseInt(myval["matrix-penalty"]) + parseInt(myval["stun_pen"]) + parseInt(myval["wound_pen"]);
|
||
var calcTN="?{" + lang["target-number"] + "?} + " + wpmatrix;
|
||
var calcDice= parseInt(myval[myid]) + " + ?{" + lang["hacking-pool-dice"] + "}";
|
||
var myroll="&{template:matrix}{{target=?{" + lang["target-number"] +"?|4}}}{{hackingpool=[[?{" + lang["hacking-pool-dice"] + "|0}]]}}"
|
||
myroll+="{{myname=@{selected|token_name}}}";
|
||
myroll+= "{{action=" + mytitle + "}}{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+= "{{roll= [[ [[ " + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!!]] }}"
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
});
|
||
|
||
on('clicked:matrixmaneuvers clicked:repeating_ic:matrixmaneuvers', (info) => {
|
||
atts=["character_name", "deck-evasion-final", "deck-sensors-final", "decklockon-rating-final", "deckcloak-rating-final", "stun_pen", "wound_pen", "matrix-penalty", "decking"];
|
||
if (info['sourceAttribute']) {
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_') + "ic-penalty";
|
||
atts.push(myrepeat);
|
||
}
|
||
if (!("yes" in lang)) geti18n();
|
||
getAttrs(atts, function(myval) {
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var mytitle=info["htmlAttributes"]["title"]
|
||
const evasion=myval["deck-evasion-final"];
|
||
const sensors=myval["deck-sensors-final"];
|
||
const cloak=myval["deckcloak-rating-final"];
|
||
const lockon=myval["decklockon-rating-final"];
|
||
const wpmatrix=(info['sourceAttribute'])? parseInt(myval[myrepeat]) : parseInt(myval["matrix-penalty"]) + parseInt(myval["stun_pen"]) + parseInt(myval["wound_pen"]);
|
||
const decking=myval["decking"];
|
||
if ( info["originalRollId"] != undefined ) var payload=rollEscape.unescape(info["originalRollId"]);
|
||
var calcDice=evasion + " + ?{" + lang["hacking-pool-dice"] + "}";
|
||
var calcTN="@{target|" + lang["target"] +"|deck-sensors-final} + " + wpmatrix + " +?{" + lang["miscellaneous-modifiers"] + "|0} - " + cloak;
|
||
if (payload != null ) {
|
||
console.log('payload');
|
||
console.log(payload);
|
||
mytitle=payload["attacktype"];
|
||
calcDice=sensors + " + ?{" + lang["hacking-pool-dice"] + "}";
|
||
calcTN="@{target|" + lang["target"] +"|deck-evasion-final} + " + wpmatrix + " +?{" + lang["miscellaneous-modifiers"] + "|0} - " + lockon;
|
||
}
|
||
var myroll="&{template:matrix}";
|
||
if (payload == null) myroll+="{{senddata2=[[0]]}}";
|
||
else myroll+="{{testresult=[[0]]}}{{winner=[[0]]}}";
|
||
myroll+="{{mytoken=[[0[@{selected|token_name}]]]}}";
|
||
myroll+="{{myname=@{selected|token_name}}}";
|
||
myroll+="{{target=@{target|" + lang["target"] +"|token_name}}}{{hackingpool=[[?{" + lang["hacking-pool-dice"] + "|0}]]}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{action=" + mytitle + "}}";
|
||
myroll+="{{targetname=@{target|" + lang["target"] + "|character_name}}}";
|
||
myroll+="{{roll= [[ [[" + calcDice + "]]d6>[[ {2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
const mytoken=results.results.mytoken.expression.match(/\[(.*)\]/)[1];
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
if ( payload == null) {
|
||
payload={
|
||
successes: results.results.roll.result,
|
||
attacker: mytoken,
|
||
attacktype: mytitle + " Oppose"
|
||
};
|
||
finishRoll( results.rollId,
|
||
{
|
||
senddata2: rollEscape.escape(payload),
|
||
});
|
||
} else {
|
||
console.log('payload success is ' + payload["successes"]);
|
||
var delta = payload["successes"] - results.results.roll.result;
|
||
console.log('delta is ' + delta);
|
||
const mywinner=(delta > 0)? payload["attacker"]: (delta < 0)? mytoken : "none";
|
||
console.log('winner is ' + mywinner);
|
||
delta=(delta < 0)? (delta * -1) : delta;
|
||
console.log('delta is ' + delta);
|
||
finishRoll( results.rollId,
|
||
{
|
||
testresult: delta,
|
||
winner: mywinner,
|
||
});
|
||
}
|
||
});
|
||
});
|
||
});
|
||
on('clicked:adeptpower', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
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}";
|
||
var calcTN="ceil(@{" + myid + "}/2 )";
|
||
var calcDrainTN="ceil((@{" + myid + "} + @{adept" + myid + "boost} ) /2 )";
|
||
var calcDrainDice="@{willpower|max}";
|
||
|
||
var myroll="&{template:adept}";
|
||
myroll+="{{myname=@{selected|token_name}}}";
|
||
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,
|
||
});
|
||
});
|
||
});
|
||
|
||
});
|
||
const refreshphase = function() {
|
||
atts=[];
|
||
atts["rounds-phase"]=0;
|
||
atts["sorcery-used"]=0;
|
||
setAttrs(atts);
|
||
};
|
||
|
||
const refreshpools = function () {
|
||
atts=[];
|
||
atts["rounds-phase"]=0;
|
||
atts["controlpool-used"]=0;
|
||
atts["hackingpool-used"]=0;
|
||
atts["astralpool-used"]=0;
|
||
atts["combatpool-used"]=0;
|
||
atts["spellpool-used"]=0;
|
||
atts["sorcery-used"]=0;
|
||
atts["spelldefensedice-used"]=0;
|
||
atts["taskpool-used"]=0;
|
||
setAttrs(atts);
|
||
};
|
||
|
||
on('clicked:repeating_spells:cast', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
var atts=["character_name", "magic", "spellpool-used", "sorcery-used", "astralstate"];
|
||
var source=info['sourceAttribute'].split('_');
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
const attlist=["target", "force", "drain", "drainlvl", "name", "description", "damage", "range", "spellcategory", "specialized"];
|
||
attlist.forEach(attr=>{
|
||
let myname=myrepeat + attr;
|
||
atts.push(myname);
|
||
});
|
||
console.log(atts);
|
||
getAttrs(atts, function(myval) {
|
||
console.log('vals');
|
||
console.log(myval);
|
||
const specdice=parseInt(myval["specialized"]);
|
||
const magic=myval["magic"];
|
||
const myname=myval["character_name"];
|
||
const plane=(myval["astralstate"]=="astral-projection")? "astral" : "physical";
|
||
const range=myval[myrepeat + "range"];
|
||
const spellcat=myval[myrepeat + "spellcategory"];
|
||
const force=myval[myrepeat + "force"];
|
||
const target=myval[myrepeat + "target"];
|
||
const drain=myval[myrepeat + "drain"];
|
||
const spused=parseInt(myval["spellpool-used"]);
|
||
const sorceryused=parseInt(myval["sorcery-used"]);
|
||
var drainlvl=myval[myrepeat + "drainlvl"];
|
||
const name=myval[myrepeat + "name"];
|
||
const description=myval[myrepeat + "description"];
|
||
const damage=myval[myrepeat + "damage"];
|
||
var resistattr, resisttype;
|
||
var targetofspell=target;
|
||
if (target.includes("@{target")) {
|
||
targetofspell="@{target|" + lang["target"] +"|token_name}";
|
||
resistattr=target.split("|")[2];
|
||
}
|
||
var myroll="&{template:spell}";
|
||
var calcDice="?{" + lang["sorcery-dice"] +"?} + ?{"+ lang["spell-pool-dice"] +"?} + " + specdice;
|
||
var calcDrainTN="floor(?{" + lang["force"] + "?}/2) + " + drain + " + ( 2 * @{spellsus} )";
|
||
/* var calcDrainDice="@{willpower|max} + ?{" + lang["sorcery-dice-for-drain"] + "?} + ?{"+ lang["spell-pool-dice-for-drain"] +"?}"; */
|
||
var calcDrainDice="@{willpower|max}d6!![willpower] + ?{" + lang["sorcery-dice-for-drain"] + "?}d6!![sorcery dice] + ?{"+ lang["spell-pool-dice-for-drain"] +"?}d6!![spell pool]";
|
||
var caldDrainDiceTotal="@{willpower|max}[willpower] + ?{" + lang["sorcery-dice-for-drain"] + "?}[sorcery dice] + ?{"+ lang["spell-pool-dice-for-drain"] +"?}[spell pool]";
|
||
myroll+="{{senddata=[[0]]}}";
|
||
myroll+="{{draindamage=[[0]]}}{{finaldrain=[[0]]}}";
|
||
myroll+="{{cast=[[0]]}}{{draintnfinal=[[0]]}}";
|
||
myroll+="{{sorcerydice=[[?{"+ lang["sorcery-dice"] +"?|@{spellcasting}} + ?{" + lang["sorcery-dice-for-drain"] + "?|0}]]}}";
|
||
myroll+="{{spellpool=[[?{"+ lang["spell-pool-dice"] +"?|0} + ?{"+ lang["spell-pool-dice-for-drain"] +"?|0}]]}}";
|
||
myroll+="{{spelldamage=[[" + damage + "]]}}"
|
||
myroll+="{{castforce=[[?{" + lang["force"] + "?|" + force + "}]]}}";
|
||
/* myroll+="{{draintest=[[[[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1]]!!]]}}"; */
|
||
myroll+="{{draintest=[[" + calcDrainDice + "]]}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{draindice=[[" + caldDrainDiceTotal + "]]}}";
|
||
if ( range == "AoE" ) {
|
||
targetofspell="AoE";
|
||
if ( spellcat == "Elemental" ) {
|
||
calcTN = "4 + @{rangedTN} + (2*(@{spellstack}+@{spellsus})) +@{spellmisc}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]] + Cover & Target Movement}}";
|
||
resisttype="resistroll";
|
||
} else {
|
||
if ( resistattr != null ) {
|
||
calcTN= " (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen} + @{rangedvizTN}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]] + Cover & " + resistattr + "}}";
|
||
} else {
|
||
calcTN= target + " + (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen} + @{rangedvizTN}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]] + Cover}}";
|
||
}
|
||
resisttype="resistspell";
|
||
}
|
||
myroll+="{{roll=[[ [[" + calcDice + "]]d6>[[" + calcTN + "]]!! ]] }}";
|
||
} else {
|
||
if ( spellcat == "Elemental" ) {
|
||
calcTN = target + " + 4 + @{rangedTN} + (2*(@{spellstack}+@{spellsus})) +@{spellmisc}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}{{dodge=yes}}";
|
||
resisttype="resistroll";
|
||
} else {
|
||
calcTN= target + " + (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen} + @{rangedvizTN} + @{cover}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
resisttype="resistspell";
|
||
}
|
||
myroll+="{{targetname=[[0[@{target|" + lang["target"] +"|token_name}]]]}}";
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
}
|
||
myroll+="{{resisttype2=" + resisttype + "}}";
|
||
myroll+="{{targetofspell=" + targetofspell + "}}";
|
||
myroll+="{{draintn=[[ " + calcDrainTN + "]]}}";
|
||
myroll+="{{spellname=" + name + "}}";
|
||
myroll+="{{description=" + description +"}}";
|
||
myroll+="{{myname=@{character_name}}}";
|
||
if (target.includes("@{target")) {
|
||
console.log('attr split: ' + resistattr);
|
||
if ( range != "AoE" ) {
|
||
myroll += "{{spelldefense=[" + lang["spell-defense"] + "](~selected|spelldefense)}}";
|
||
if (spellcat == "Elemental" ) myroll += "{{resistspell=[" + lang["resist-spell"] + "](~@{target|" + lang["target"] +"|character_name}|resist-impact-half)}}";
|
||
else if ( resistattr == "force" ) myroll += "{{resistspell=[" + lang["resist-spell"] + "](~@{target|" + lang["target"] +"|character_name}|attrib-force)}}";
|
||
else myroll += "{{resistspell=[" + lang["resist-spell"] + "](~@{target|" + lang["target"] +"|character_name}|attrib-" + resistattr +"-max)}}";
|
||
|
||
} else {
|
||
if ( spellcat == "Elemental" ) myroll += "{{resistspell=[" + lang["resist-spell"] + " ](~selected|resist-impact-half)}}"
|
||
else if ( resistattr == "force" ) myroll += "{{resistspell=[" + lang["resist-spell"] + "](~selected|attrib-force)}}"
|
||
else myroll += "{{resistspell=[" + lang["resist-spell"] + "](~selected|resistspell||}}"
|
||
|
||
}
|
||
}
|
||
console.log(myroll);
|
||
payload={
|
||
wdmg: damage,
|
||
rounds: 1,
|
||
ammotype: spellcat.toLowerCase(),
|
||
dodge: 0,
|
||
armortype: "impact",
|
||
plane: plane,
|
||
attacker: myname,
|
||
range: range,
|
||
attribute: resistattr,
|
||
weapon: name
|
||
}
|
||
startRoll(myroll, (results) => {
|
||
atts=[];
|
||
console.log(results.results.spelldamage.result);
|
||
const finaldmg=payload["wdmg"]=damagetable[results.results.spelldamage.result];
|
||
payload["targetnumber"]=results.results.targetnumber.result;
|
||
var draindmg, finalcast;
|
||
var draintn=results.results.draintn.result;
|
||
console.log('draintn before: ' + draintn);
|
||
if (drainlvl.includes("dmglvl")) {
|
||
var dmglvl=parseInt(results.results.spelldamage.result);
|
||
dmglvl=(dmglvl > 4)? dmglvl - 9 : dmglvl;
|
||
draindmg=eval(drainlvl);
|
||
draindmg = ( draindmg < 1 )? 1 : draindmg;
|
||
draintn += ( draindmg > 4 )? 2*(draindmg - 4) : 0;
|
||
console.log('drdmg calc: ' + draindmg);
|
||
|
||
} else {
|
||
console.log('drain straight');
|
||
draindmg = parseInt(drainlvl);
|
||
console.log('drdmg stright: ' + damagetable[draindmg]);
|
||
}
|
||
draintn = (draintn <= 2)? 2 : draintn;
|
||
console.log('draintn after: ' + draintn);
|
||
console.log('drain damage base ' + draindmg);
|
||
var dmgmax=4;
|
||
var dmgmin=0;
|
||
if (draindmg > dmgmax) draindmg=dmgmax;
|
||
if (draindmg < dmgmin) draindmg=dmgmin;
|
||
console.log('dmgmin ' + dmgmin + ' dmgmax ' + dmgmax);
|
||
/* set drain damage to stun damage if force of spell is less than magic rating*/
|
||
const finalforce = payload["power"] = results.results.castforce.result
|
||
if ( (draindmg < 10 ) && ( finalforce <= magic )) {
|
||
draindmg = draindmg + 9;
|
||
dmgmax=13;
|
||
dmgmin=9;
|
||
}
|
||
/* set drain damage to physical damage if force of spell is greater than magic rating*/
|
||
if ( (draindmg >= 10 ) && ( finalforce > magic )) {
|
||
draindmg = draindmg - 9;
|
||
dmgmax=4;
|
||
dmgmin=0;
|
||
}
|
||
const draintest=results.results.draintest.dice;
|
||
const finaldraintest = (results.results.draintest.dice.filter(mydice=> mydice >= draintn )).length;
|
||
var drainstaged=draindmg - Math.floor(finaldraintest/2);
|
||
console.log(' drain staged ' + drainstaged);
|
||
drainstaged=(drainstaged < dmgmin)? dmgmin :(drainstaged > dmgmax)? dmgmax : drainstaged;
|
||
console.log(' drain staged check min/max ' + drainstaged);
|
||
myfinaldrain=damagetable[drainstaged];
|
||
draindmg=damagetable[draindmg];
|
||
console.log('drdmg : ' + draindmg);
|
||
console.log('finaldrain : ' + myfinaldrain);
|
||
console.log('finaldrain test : ' + finaldraintest);
|
||
atts["sorcery-used"]= sorceryused + parseInt(results.results.sorcerydice.result);
|
||
atts["spellpool-used"]= spused + parseInt(results.results.spellpool.result);
|
||
if ( range == "AoE" ) {
|
||
finalcast=payload["attackdice"]=results.results.roll.dice;
|
||
console.log('finalcast ' + finalcast);
|
||
payload["attacktest"]=0;
|
||
finishRoll( results.rollId,
|
||
{
|
||
draintest: finaldraintest,
|
||
spelldamage: finaldmg,
|
||
draindamage: draindmg,
|
||
finaldrain: myfinaldrain,
|
||
cast: finalcast,
|
||
draintnfinal: draintn,
|
||
senddata: rollEscape.escape(payload),
|
||
});
|
||
} else {
|
||
payload["target"]=results.results.targetname.expression.match(/\[(.*)\]/)[1];
|
||
payload["attacktest"]=results.results.casttest.result;
|
||
payload["attackdice"]=results.results.casttest.dice;
|
||
finishRoll( results.rollId, {
|
||
senddata: rollEscape.escape(payload),
|
||
draintest: finaldraintest,
|
||
spelldamage: finaldmg,
|
||
finaldrain: myfinaldrain,
|
||
draindamage: draindmg,
|
||
draintnfinal: draintn,
|
||
});
|
||
|
||
}
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
});
|
||
});
|
||
|
||
const calcFinalDebuff = function(delta) {
|
||
delta=floor(delta/2);
|
||
return debuff=(delta <= 0)? 0 : delta;
|
||
};
|
||
|
||
const calcFinalDmg = function(dmgstart, resist) {
|
||
const dmgmax=(dmgstart >= 10)? 13 : 4;
|
||
const dmgmin=(dmgstart >= 10)? 9 : 0;
|
||
var dmgstaged=dmgstart + floor(resist/2);
|
||
console.log('dmgstaged: ' + dmgstaged);
|
||
dmgstaged = (dmgstaged > dmgmax)? dmgmax : (dmgstaged < dmgmin)? dmgmin : dmgstaged;
|
||
return(damagetable[dmgstaged]);
|
||
};
|
||
|
||
var initiative = function (init, reaction, dmgpen, mytitle, character) {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log('init ' + init + ' reaction ' + reaction + ' dmgpen ' + dmgpen + ' mytitle ' + mytitle + ' character ' + character );
|
||
penatts=["stun_pen", "wound_pen", "matrix-penalty", "vehicle-penalty", "rccommand-penalty", "rcsimsense-penalty", "rcsystem-penalty"];
|
||
getAttrs(penatts, function (myval) {
|
||
console.log(init, reaction)
|
||
var myroll="&{template:init} {{character=" + character + "}}{{type=" + mytitle + "}}"
|
||
myroll += "{{roll=[[" + init + "d6+" + reaction + dmgpen + " &{tracker}]]}}"
|
||
if (myval["matrix-penalty"] >= 10) {
|
||
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name}'s icon has crashed}}";
|
||
}
|
||
if (myval["vehicle-penalty"] >= 10) {
|
||
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name} is destroyed }}";
|
||
}
|
||
if ( (myval["rccommand-penalty"] >= 10) || (myval["rcsimsense-penalty"] >= 10) || (myval["rcsystem-penalty"] >= 10) ) {
|
||
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name} is disengaged }}";
|
||
}
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
};
|
||
on('clicked:init-aug', (info) => {
|
||
const myid=info["htmlAttributes"]["id"]
|
||
let init="@{initiative|max}";
|
||
let reaction="@{reaction|max}";
|
||
let dmgpen=" -@{wp-char}";
|
||
let character="@{character_name}";
|
||
let mytitle="Augmented Initiative Roll";
|
||
initiative(init, reaction, dmgpen, mytitle, character);
|
||
|
||
});
|
||
|
||
|
||
|
||
on('clicked:repeating_ic:init', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
gets=[];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
gets.push(myrepeat.concat("icrating"));
|
||
gets.push(myrepeat.concat("icname"));
|
||
gets.push(myrepeat.concat("ic-penalty"));
|
||
getAttrs(gets, function (myval) {
|
||
var penalty;
|
||
console.log(myval);
|
||
const init = "@{matrixsecuritynumber}";
|
||
const reaction = parseInt(myval[myrepeat.concat("icrating")]);
|
||
const character = myval[myrepeat.concat("icname")];
|
||
var penalty = -1 * parseInt(myval[myrepeat.concat("ic-penalty")]);
|
||
if ( penalty == 0 ) penalty = " + 0 ";
|
||
initiative(init, reaction, penalty, mytitle, character);
|
||
});
|
||
|
||
});
|
||
|
||
on('clicked:init', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var dmgpen=" -@{wp-char}";
|
||
character="@{character_name}";
|
||
if ( myid == "augmentedinit" ) {
|
||
init="@{initiative|max}";
|
||
reaction="@{reaction|max}";
|
||
} else if ( myid == "astralinit" ) {
|
||
init=1;
|
||
reaction="@{astralreaction}";
|
||
} else if ( myid == "spiritinit" ) {
|
||
init="@{initiative}";
|
||
reaction="@{spirit-initp}";
|
||
} else if ( myid == "matrixinit" ) {
|
||
init="@{deck-initiative}";
|
||
reaction="@{deck-reaction-final}";
|
||
var dmgpen=" - ( @{wp-char} + @{matrix-penalty})";
|
||
} else if ( myid == "vehicleinit" ) {
|
||
init="(@{vehicle-driver}initiative} + @{vehicle-initbonus})";
|
||
reaction="@{vehicle-driver}reaction} + @{vehicle-reactbonus}";
|
||
var dmgpen=" - (@{vehicle-driver}stun_pen}-@{vehicle-driver}wound_pen} - @{wp-vehicle})";
|
||
} else if ( myid == "iceinit" ) {
|
||
init="@{deck-initiative}";
|
||
reaction="@{deck-reaction-final}";
|
||
var dmgpen=" - ( @{wp-char} + @{wp-matrix})";
|
||
} else {
|
||
init="@{initiative}";
|
||
reaction="@{reaction}";
|
||
}
|
||
initiative(init, reaction, dmgpen, mytitle, character);
|
||
refreshpools();
|
||
});
|
||
const getTokenName = async () => {
|
||
const rxGrab = /^0\[(.*)\]\s*$/;
|
||
let myroll = "! {{mytoken=[[0[@{selected|token_name}]]]}}";
|
||
rollresult = await startRoll(myroll),
|
||
tokenname = (rollresult.results.mytoken.expression.match(rxGrab) || [])[1];
|
||
finishRoll(rollresult.rollId);
|
||
console.log('debug getTokenName ' + tokenname );
|
||
return tokenname;
|
||
};
|
||
|
||
const endTurn = async() => {
|
||
const tokenname = await getTokenName();
|
||
console.log('token name ' + tokenname);
|
||
if (!("yes" in lang)) geti18n();
|
||
var myroll="&{template:init} {{character=" + tokenname + "}}{{type=[[0]]}}"
|
||
var endtypemsg="End Combat Pass";
|
||
myroll += "{{setinit=[[10 &{tracker:-}]]}}{{initval=[[@{tracker|" + tokenname + "}]]}}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
const initval=results.results.initval.result;
|
||
if ( initval <= 10 ) refreshpools();
|
||
else {
|
||
refreshphase();
|
||
endtypemsg="End Combat Turn";
|
||
}
|
||
console.log(results.results);
|
||
finishRoll( results.rollId);
|
||
});
|
||
};
|
||
|
||
on('clicked:endturn', (info) => {
|
||
endTurn(info);
|
||
});
|
||
|
||
on('clicked:resistbanish', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var calcDice= "@{force}";
|
||
calcTN="@{target|" + lang["target"] +"|magic}";
|
||
var myroll="&{template:conjure}{{myname=@{character_name}}}";
|
||
myroll+="{{targetofspell=@{target|" + lang["target"] +"|character_name}}}";
|
||
myroll+="{{spellname=" + lang["resist-banish"] + "}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
const floor = function(v) {
|
||
return (v >= 0 || -1) * Math.floor(Math.abs(v));
|
||
}
|
||
|
||
const ammomods = {
|
||
deckblackhammer: { armorname: "'hardening'", armor: "hardening", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
deckkilljoy: { armorname: "'hardening'", armor: "hardening", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:9, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
blackiclethal: { armorname: "'hardening'", armor: "hardening", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
blackicnonlethal: { armorname: "'hardening'", armor: "hardening", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:9, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
cerebropathic: { armorname: "'hardening'", armor: "hardening", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
psychotropic: { armorname: "'hardening'", armor: "hardening", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
d: { armorname: "'impact'", armor: "impact", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
c: { armorname: "'impact'", armor: "impact", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
o: { armorname: "'impact'", armor: "impact", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
elemental: { armorname: "'half impact'", armor: "Math.floor(impact/2)", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
melee: { armorname: "'impact'", armor: "impact", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 0, barrier: 0, knockdown: 0 , amsg: "", weight: 0},
|
||
assualtcannon: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: .125},
|
||
bigd: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 2, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "Choke Rules not Applied", weight: .1},
|
||
bola: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 1, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 2 , amsg: "", weight: .1},
|
||
arrows: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: 0.01},
|
||
arrowsexp: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: 0.01},
|
||
arrowsexpex: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: 0.01},
|
||
regular: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: 0.05},
|
||
net: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: .5},
|
||
largenet: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: .7},
|
||
shocklock: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 1, rpower:0, dmg: 0, rdmg:0, recoil: 1, barrier: 2, knockdown: 1, amsg: "" , weight: .075},
|
||
flare: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: .1},
|
||
adps: { armorname: "'half Ballistic'", armor: "Math.floor(ballistic * 0.5)", av: 0, power: 0, rpower:0, dmg: 0, rdmg:0, recoil: 1, barrier: 0.5, knockdown: 1, amsg: "" , weight: .025},
|
||
gyrojetplus: { armorname: "'half Ballistic'", armor: "Math.floor(ballistic * 0.5)", av: 1, power: 0, rpower:0, dmg: 0, rdmg:0, recoil: 1, barrier: 0.5, knockdown: 1, amsg: "" , weight: .2},
|
||
gyrojetplusseeker: { armorname: "'half Ballistic'", armor: "Math.floor(ballistic * 0.5)", av: 1, power: 0, rpower:0, dmg: 0, rdmg:0, recoil: 1, barrier: 0.5, knockdown: 1, amsg: "" , weight: .225},
|
||
gyrojetseeker: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: .2},
|
||
gyrojet: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1 , amsg: "", weight: .175},
|
||
explosive: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 1, rpower:0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1, amsg: "" , weight: .075},
|
||
explosive2: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 2, rpower:0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1, amsg: "" , weight: .075},
|
||
flechette: { armorname: "(ballistic >(2*impact))? 'ballistic' : 'impact';", armor: "(Math.max(ballistic, (impact * 2)))", av: -0.5, power: 0, rpower:0, dmg:0, rdmg: "(armoron == 0)? 1 : 0;", recoil: 1, barrier: 2, knockdown: 1, amsg: "Final Damage Level depends on Armor" , weight: .05},
|
||
gel: { armorname: "'impact'", armor: "impact * 2", av: 0, power: -2, rpower:0, dmg: 9, rdmg:0, recoil: 1, barrier: 1, knockdown: 2, amsg: "" , weight: .025},
|
||
hammerheads: { armorname: "'impact'", armor: "impact * 2", av: 0, power: -2, rpower:0, dmg: 9, rdmg:0, recoil: 1, barrier: 1, knockdown: 2, amsg: "" , weight: .01},
|
||
screamer: { armorname: "'impact'", armor: "impact", av: 0, power: "-1 * (Math.ceil(wpower / 2))", rpower:0, dmg: 9, rdmg:0, recoil: 1, barrier: 1, knockdown: 2, amsg: "" , weight: .01},
|
||
stunshell: { armorname: "'impact'", armor: "impact", av: 0, power: 0, rpower:0, dmg: 9, rdmg:0, recoil: 1, barrier: 1, knockdown: 2, amsg: "" , weight: .05},
|
||
tracer: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower:0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1, amsg: "" , weight: .05},
|
||
av: { armorname: "'half Ballistic'", armor: "Math.floor(ballistic * 0.5)", av: 1, power: 0, rpower:0, dmg: 0, rdmg:0, recoil: 1, barrier: 0.5, knockdown: 1, amsg: "" , weight: .1},
|
||
capsule: { armorname: "'impact'", armor: "impact", av: 0, power: -2, rpower:0, dmg: 9, rdmg:0, recoil: 1, barrier: 1, knockdown: 1, amsg: "" , weight: .025},
|
||
glazer: { armorname: "(ballistic > impact)? 'ballistic' : 'impact';", armor: "Math.max((ballistic * 2), (impact * 2))", av: -0.5, power: 2, rpower:0, dmg:0, rdmg: "( armoron == 0)? 1 : 0;", recoil: 1, barrier: 2, knockdown: 1, amsg: "Final Damage Level depends on Armor" , weight: .05},
|
||
hic: { armorname: "(ballistic > impact)? 'ballistic' : 'impact';", armor: "Math.max(ballistic,impact)", av: 0, power: "(range==6)? -1 : (range==9)? -1", rpower:0, dmg: 0, rdmg:0, recoil: 2, barrier: 1, knockdown: 1, amsg: "" , weight: .025},
|
||
hpoint: { armorname: "'ballistic + Impact'", armor: "ballistic + impact", av: 0, power:0, rpower: "(armoron == 0)? 3 : 1", dmg: 0, rdmg:0, recoil: 2, barrier: 1, knockdown: 1, amsg: "Final Power Rating depends on Armor" , weight: .05},
|
||
incendiary: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg:0, recoil: 1, barrier: 1, knockdown: 1, amsg: "" , weight: .075},
|
||
mercury: { armorname: "(ballistic > impact)? 'ballistic' : 'impact';", armor: "Math.max((ballistic * 2), (impact * 2))", av: -0.5, power: 0, rpower: 0, dmg: 0, rdmg: "( armoron == 0)? 1 : 0;", recoil: 1, barrier: 2, knockdown: 1, amsg: "Final Damage Level depends on Armor", weight: .075},
|
||
tracker: { armorname: "'ballistic'", armor: "ballistic", av: 0, power: 0, rpower: 0, dmg: 0, rdmg: 0, recoil: 1, barrier: 1, knockdown: 1, amsg: "", weight: .05}
|
||
}
|
||
|
||
const resistdmg = function (myid, mods) {
|
||
if (!("yes" in lang)) geti18n();
|
||
atts=["ballistic", "impact", "armor-on", "deck-hardening", "body_max", "willpower_max"];
|
||
getAttrs(atts, function (myval) {
|
||
console.log('myval');
|
||
console.log(myval);
|
||
const ballistic=myval["ballistic"];
|
||
const impact=myval["impact"];
|
||
const armoron=myval["armor-on"];
|
||
const hardening=myval["deck-hardening"];
|
||
const body = parseInt(myval["body_max"]);
|
||
const willpower = parseInt(myval["willpower_max"]);
|
||
var resistattr=body;
|
||
var armorname;
|
||
var wdmg;
|
||
var dmgcode=0;
|
||
var weapondmg="none";
|
||
var dodge=0;
|
||
if ( mods=="regular" ) mods=1;
|
||
if ( mods=="normal" ) mods=1;
|
||
if ( mods=="double" ) mods=2;
|
||
if ( mods=="half" ) mods=0.5;
|
||
if ( typeof mods === 'object' && mods !== null ) {
|
||
myroll="&{template:resistadv}";
|
||
const ammo=mods["ammotype"].toLowerCase();
|
||
weapondmg = mods["wdmg"];
|
||
dodge = mods["dodge"];
|
||
const range = mods["range"];
|
||
const armorval = eval(ammomods[ammo]["armor"]);
|
||
const powermod = eval(ammomods[ammo]["rpower"]);
|
||
const dmgmod = eval(ammomods[ammo]["rdmg"]);
|
||
dmgcode = damagetable[weapondmg] + dmgmod;
|
||
myroll +="{{Power=?{" + lang["attack-power"] + "|" + mods.power + "}}}";
|
||
myroll+="{{wpndmg=" + weapondmg + "}}";
|
||
myroll +="{{attacktest=[[" + mods["attacktest"] + "]]}}";
|
||
myroll+="{{dodge=[[" + mods["dodge"] + "]]}}";
|
||
myroll +="{{AttackType=" + ammo + "}}";
|
||
if (ammo=="deckkilljoy") resistattr = willpower;
|
||
calcTN="?{" + lang["attack-power"] + "} + " + powermod + " - " + armorval;
|
||
if ( mods["blast"] ) {
|
||
myroll+="{{distance=[[?{" + lang["distance-from-explosive-in-meters"] +"|0}]]}}"
|
||
myroll+="{{blastredux=[[?{" + lang["distance-from-explosive-in-meters"] +"|0} / " + mods["blast"] + "]]}}"
|
||
calcTN+=" - ( ?{" + lang["distance-from-explosive-in-meters"] +"} / " + mods["blast"] + ")";
|
||
}
|
||
myid=eval(ammomods[ammo]["armorname"]);
|
||
console.log('test 1 ' + myid);
|
||
myroll += "{{armorvalue=" + armorval + "}}";
|
||
} else {
|
||
myroll="&{template:resist}";
|
||
myroll +="{{Power=?{" + lang["attack-power"] + "|4}}}";
|
||
myroll +="{{attacktest=[[0}]]}}";
|
||
myroll+="{{dodge=[[0]]}}";
|
||
myroll +="{{AttackType=" + mods + "}}";
|
||
calcTN="?{" + lang["attack-power"] + "} - (floor(@{" + myid + "} * " + mods + "))";
|
||
myroll += "{{armorvalue=@{" + myid + "}}}"
|
||
}
|
||
let actionname = myid.charAt(0).toUpperCase() + myid.slice(1);
|
||
|
||
var calcDice= resistattr + " + ?{" + lang["combat-pool-dice"] + "}";
|
||
myroll +="{{finaldmg=[[0]]}}{{netresult=[[0]]}}";
|
||
myroll +="{{name=" + actionname + " Armor}}{{character=@{character_name}}}{{combatpool=[[?{" + lang["combat-pool-dice"] + "|0}]]}}";
|
||
myroll +="{{action=" + lang["damage-resistance-test"] + "}}";
|
||
myroll +="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
|
||
console.log(myroll);
|
||
console.log(' unmod weapons code ' + dmgcode);
|
||
startRoll(myroll, (results) => {
|
||
const netresult=results.results.attacktest.result - ( results.results.roll.result + dodge );
|
||
console.log('debug netresult ' + netresult);
|
||
const stage=floor(netresult/2);
|
||
var finaldmg=dmgcode + stage;
|
||
var dmgmax=4;
|
||
var dmgmin=0;
|
||
if (dmgcode >= 10) dmgmax=13;
|
||
if (dmgcode >= 10) dmgmin=9;
|
||
if (finaldmg > dmgmax) finaldmg=dmgmax;
|
||
if (finaldmg < dmgmin) finaldmg=dmgmin;
|
||
updatepoolused("combatpool", results.results.combatpool.result);
|
||
if (weapondmg != "none") {
|
||
finishRoll( results.rollId, {
|
||
finaldmg: damagetable[finaldmg],
|
||
netresult: netresult,
|
||
});
|
||
} else { finishRoll( results.rollId); }
|
||
});
|
||
});
|
||
};
|
||
|
||
on('clicked:resistdmg', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
mods="?{" + lang["attack-type"] + "|" + lang["normal"] + ",1|" + lang["elemental"] + ",0.5|" + lang["adps"] + ",0.5|" + lang["half"] + ",0.5|" + lang["double"] + ",2}";
|
||
resistdmg(myid, mods);
|
||
});
|
||
|
||
on('clicked:checkaoe', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
const payload=rollEscape.unescape(info.originalRollId);
|
||
const attacktype=payload["ammotype"].toLowerCase();
|
||
const basetn=payload["targetnumber"];
|
||
const attacktest=payload["attacktest"];
|
||
const attackdice=payload["attackdice"];
|
||
const attribute=payload["attribute"] + "_max";
|
||
console.log(payload);
|
||
var myresisttype;
|
||
myroll="&{template:aoe}{{senddata=[[0]]}}{{resisttype=[[0]]}}";
|
||
getAttrs(["character_name", "targetMove", "body_max", "willpower_max", "intelligence_max", "force"], function(myval) {
|
||
payload["target"]=myval["character_name"];
|
||
if ( attacktype == "elemental") {
|
||
myroll+="{{dodge=yes}}";
|
||
calcTN=basetn + " + " + myval["targetMove"] + " + ?{" + lang["cover-modifiers"] + "|0}";
|
||
myresisttype="resistroll";
|
||
|
||
} else {
|
||
calcTN=basetn + " + " + myval[attribute] + " + ?{" + lang["cover-modifiers"] + "|0}";
|
||
myresisttype="resistspell";
|
||
}
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}{{dice=" + attackdice + "}}";
|
||
myroll+="{{attacktest=[[0]]}}{{character=" + myval["character_name"] + "}}{{weapon=" + payload["weapon"] + "}}";
|
||
console.log('calcTN: ' + calcTN);
|
||
var attackresult;
|
||
startRoll(myroll, (results) => {
|
||
finaltn=results.results.targetnumber.result;
|
||
attackresult=payload["attacktest"]= (attackdice.filter(mydice=> mydice >= finaltn )).length;
|
||
if (attackresult < 1 ) {
|
||
attackresult="MISSED";
|
||
myresisttype="missed";
|
||
}
|
||
console.log('finaltn: ' + finaltn);
|
||
console.log('attackresult: ' + attackresult);
|
||
console.log('myresisttype: ' + myresisttype);
|
||
finishRoll( results.rollId,
|
||
{
|
||
resisttype: myresisttype,
|
||
attacktest: attackresult,
|
||
senddata: rollEscape.escape(payload),
|
||
});
|
||
});
|
||
});
|
||
});
|
||
|
||
on('clicked:resistspell', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
const payload=rollEscape.unescape(info.originalRollId);
|
||
console.log(payload);
|
||
const attribute=payload["attribute"] + "_max";
|
||
var wdmg=payload["wdmg"];
|
||
var dmgnumber= damagetable[wdmg];
|
||
var dmgmax=4; dmgmin=0;
|
||
if (dmgnumber >= 10) dmgmax=13, dmgmin=9;
|
||
const attacktest=payload["attacktest"] + "_max";
|
||
if (payload["attacktest"] < 1) missedattack(info);
|
||
else {
|
||
getAttrs(["character_name", "body_max", "willpower_max", "intelligence_max", "force"], function(myval) {
|
||
myroll="&{template:resistadv}{{character=" + myval["character_name"] + "}}{{target=" + payload["attacker"] + "}}";
|
||
myroll+="{{Power=" + payload["power"] + "}}{{wpndmg=" + payload["wdmg"] + "}}{{name=" + payload["attribute"] + "}}";
|
||
myroll+="{{armorvalue=" + myval[attribute] + "}}";
|
||
myroll +="{{attacktest=[[" + payload["attacktest"] + "]]}}";
|
||
calcDice=parseInt(myval[attribute])
|
||
calcTN=payload["power"];
|
||
myroll +="{{action=" + lang["spell-resistance-test"] + "}}";
|
||
myroll +="{{spelldmg=[[0]]}}{{netresult=[[0]]}}";
|
||
myroll +="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
const mynet=payload["attacktest"]-results.results.roll.result;
|
||
var delta = dmgnumber + floor(mynet/2);
|
||
delta = (delta > dmgmax)? dmgmax : delta;
|
||
delta = (delta < dmgmin)? dmgmin : delta;
|
||
finaldmg=damagetable[delta];
|
||
console.log('finaldmg ' + finaldmg);
|
||
finishRoll( results.rollId, {
|
||
netresult: mynet,
|
||
spelldmg: finaldmg,
|
||
});
|
||
});
|
||
|
||
});
|
||
}
|
||
});
|
||
|
||
on('clicked:resistroll', (info) => {
|
||
const payload=rollEscape.unescape(info.originalRollId);
|
||
console.log(payload);
|
||
resistdmg(payload["armortype"], payload);
|
||
});
|
||
|
||
const resistmods=["half", "normal", "double"];
|
||
resistmods.forEach(mod => {
|
||
var myball="resist-ballistic-" + mod;
|
||
var myimpact="resist-impact-" + mod;
|
||
on(`clicked:${myball}`, (info) => {
|
||
|
||
console.log(rollEscape.unescape(info.originalRollId));
|
||
resistdmg("ballistic", mod);
|
||
});
|
||
|
||
on(`clicked:${myimpact}`, (info) => {
|
||
console.log(rollEscape.unescape(info.originalRollId));
|
||
resistdmg("impact", mod);
|
||
});
|
||
});
|
||
|
||
on('clicked:resistvehicledmg', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var calcDice= "@{body|max} + ?{" + lang["control-pool-dice"] + "}";
|
||
calcTN="?{" + lang["attack-power"] + "}";
|
||
myroll="&{template:resist}";
|
||
myroll +="{{name=" + lang["damage-resistance-test"] + "}}{{character=@{character_name}}}{{armorvalue=@{armor}}}{{controlpool=[[?{" + lang["control-pool-dice"] + "|0}]]}}";
|
||
myroll +="{{action=" + lang["damage-resistance-test"] + "}}";
|
||
myroll +="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
|
||
const dodge = function (mods) {
|
||
if (!("yes" in lang)) geti18n();
|
||
myroll="&{template:resistadv}";
|
||
console.log('debug ' + mods);
|
||
if ( typeof mods === 'object' && mods !== null ) {
|
||
payload=mods;
|
||
console.log(payload);
|
||
mods=(payload["rounds"])? "?{" + lang["modifiers"] + "?|" + Math.floor(payload["rounds"] / 3 ) + "}" : parseInt(payload["meleetn"] - 4);
|
||
myroll +="{{senddata=[[0]]}}";
|
||
} else payload={rounds: mods};
|
||
console.log('mods: ' + mods);
|
||
var calcDice= "?{" + lang["combat-pool-dice"] + "}";
|
||
calcTN="4 + " + mods;
|
||
calcTN +=(payload["rounds"])? " + @{wp-char}" : "";
|
||
myroll +="{{name=" + lang["dodge"] + "}}{{character=@{character_name}}}"
|
||
myroll +="{{combatpool=[[?{" + lang["combat-pool-dice"] + "|0}]]}}";
|
||
myroll +="{{action=" + lang["dodge"] + "}}";
|
||
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll +="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("combatpool", results.results.combatpool.result);
|
||
console.log(payload);
|
||
if ( payload ) {
|
||
payload["dodge"]=results.results.roll.result;
|
||
finishRoll( results.rollId, { senddata: rollEscape.escape(payload), });
|
||
} else {
|
||
finishRoll( results.rollId);
|
||
}
|
||
});
|
||
|
||
};
|
||
|
||
on('clicked:dodge', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
if ( info["htmlAttributes"]["id"] != undefined) {
|
||
mods="?{" + lang["modifiers"] + "?|0}";
|
||
}
|
||
else if ( info["originalRollId"] != undefined ) {
|
||
mods=rollEscape.unescape(info["originalRollId"]);
|
||
}
|
||
dodge(mods);
|
||
});
|
||
|
||
const conjuring = function (myid, spirittype="spirit", force="ask", name="none") {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log('spirittype: ' + spirittype);
|
||
const atts=["charisma_max", "magic-type", "magic", "summoning", "banishing", "spiritcontrol", "character_name"]
|
||
getAttrs(atts, function(myval) {
|
||
if ( name == "none" ) {
|
||
name = (spirittype)? spirittype : "spirit";
|
||
}
|
||
const mycharisma=myval["charisma_max"];
|
||
const actionname = myid.charAt(0).toUpperCase() + myid.slice(1);
|
||
const calcDrainDice=mycharisma + " + ?{" + lang["conjuring-dice-for-drain"] + "?|0} + ?{" + lang["spirit-focus-dice"] +"}";
|
||
const myskill = parseInt(myval[myid]);
|
||
var calcDrainTN = (force=="ask")? "?{" + lang["force"] + "?}" : force;
|
||
var calcDice= myskill + " + ?{" + lang["spirit-focus-dice"] +"} + ?{" + lang["are-you-the-summoner"] +"?|" + lang["yes"] + "," + mycharisma + "|" + lang["no"] + ",0}"
|
||
var calcTN;
|
||
if (myid == "summoning" ) {
|
||
calcDice= myskill + " - ?{" + lang["conjuring-dice-for-drain"] + "?} + ?{" + lang["spirit-focus-dice"] +"}";
|
||
calcTN = (force=="ask")? "?{" + lang["force"] + "?}" : force;
|
||
} else {
|
||
calcTN="@{target|" + lang["target"] +"|force}";
|
||
}
|
||
var myroll="&{template:conjure}{{myname=" + myval["character_name"] + "}}";
|
||
myroll+="{{draindamage=[[0]]}}{{finaldrain=[[0]]}}";
|
||
if (myid == "summoning" ) {
|
||
if (force=="ask") myroll+="{{spiritforce=[[?{" + lang["force"] + "?|1}]]}}"
|
||
else myroll+="{{spiritforce=[[" + force + "]]}}";
|
||
myroll+="{{spirittype=" + spirittype + "}}";
|
||
myroll+="{{spiritname=" + name + "}}";
|
||
}
|
||
else {
|
||
myroll+="{{spiritforce=[[ @{target|" + lang["target"] +"|force} ]]}}"
|
||
myroll+="{{spirittype=Spirit}}";
|
||
}
|
||
myroll+="{{spellname=" + actionname + "}}{{skill=[[" + myskill + "]]}}";
|
||
myroll+="{{spiritdice=[[?{" + lang["spirit-focus-dice"] +"|0}]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
if (myid == "summoning" ) {
|
||
myroll+="{{draintn=[[" + calcDrainTN + "]]}}";
|
||
myroll+="{{draindice=[[" + calcDrainDice + "]]}}";
|
||
myroll+="{{conjuredicedrain=[[?{" + lang["conjuring-dice-for-drain"] + "?}]]}}";
|
||
myroll+="{{conjuredice=[[" + myskill + " - ?{" + lang["conjuring-dice-for-drain"] + "?}]]}}";
|
||
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
|
||
}
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
if (myid == "banishing" ) myroll += "{{resist=[" + lang["resist-banish"] + "](~@{target|" + lang["target"] +"|character_name}|resistbanish)}}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
if (myid == "summoning") {
|
||
var dmgmin=0, dmgmax=4;
|
||
const spiritforce=results.results.spiritforce.result;
|
||
var basedrain;
|
||
if ( spiritforce <= (mycharisma/2)) basedrain="L";
|
||
else if ( spiritforce <= mycharisma ) basedrain="M";
|
||
else if ( spiritforce >= ( mycharisma * 1.5 ) ) basedrain="D";
|
||
else basedrain="S";
|
||
if ( spiritforce <= myval["magic"] ) {
|
||
console.log('set to stun');
|
||
basedrain=basedrain.concat("(stun)");
|
||
dmgmin=9;
|
||
dmgmax=13;
|
||
}
|
||
console.log('debug base drain ' + basedrain);
|
||
var dmgnumber = damagetable[basedrain];
|
||
console.log('dmgnumber: ' + dmgnumber);
|
||
const staging = Math.floor(results.results.draintest.result / 2)
|
||
console.log('staging: ' + staging);
|
||
const conjuredicefinal=results.results.skill.result - results.results.conjuredicedrain.result;
|
||
dmgnumber -= staging;
|
||
console.log('debug dmgnumber unmodified: ' + dmgnumber + " dmgmax " + dmgmax + " dmgmin " + dmgmin);
|
||
dmgnumber = (dmgnumber > dmgmax)? dmgmax : (dmgnumber < dmgmin)? dmgmin : dmgnumber;
|
||
console.log('debug dmgnumber conjure: ' + dmgnumber);
|
||
const stageddrain=damagetable[dmgnumber];
|
||
console.log('debug finaldrain ' + stageddrain);
|
||
finishRoll( results.rollId, {
|
||
draindamage: basedrain,
|
||
finaldrain: stageddrain,
|
||
});
|
||
} else {
|
||
finishRoll( results.rollId, {});
|
||
}
|
||
});
|
||
});
|
||
|
||
};
|
||
const conjurelist = ["spiritcontrol","summoning","banishing"];
|
||
conjurelist.forEach(action => {
|
||
console.log(action)
|
||
on(`clicked:${action}`, conjuring(action) );
|
||
});
|
||
|
||
on('clicked:repeating_conjuring:conjure-spirit', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
var atts=[];
|
||
console.log(info);
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
const myrepeat=source.join('_').concat('_');
|
||
const attributes=["name", "force", "type"];
|
||
attributes.forEach( attr=> {
|
||
atts.push(myrepeat + attr);
|
||
});
|
||
console.log(atts);
|
||
getAttrs(atts, function(myval) {
|
||
console.log(myval);
|
||
var name=myval[myrepeat + "name"];
|
||
if (!name) name="none";
|
||
const force=parseInt(myval[myrepeat + "force"]);
|
||
const spirittype=myval[myrepeat + "type"];
|
||
console.log('spirit-type: ' + spirittype);
|
||
conjuring("summoning", spirittype, force, name);
|
||
});
|
||
});
|
||
|
||
on('clicked:conjure', (info) => {
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
console.log("clicked conjure: " + myid);
|
||
conjuring(myid);
|
||
});
|
||
|
||
on('clicked:dispell', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log("clicked dispell");
|
||
var calcDice="?{" + lang["sorcery-dice"] +"?} + ?{"+ lang["spell-pool-dice"] +"?}";
|
||
var calcTN="?{" + lang["force-of-spell"] + "?}";
|
||
var calcDrainTN="floor( ?{" + lang["force-of-spell"] + "?|0}/2) + ( 2 * @{spellsus} + ?{" + lang["drain-modifiers"] + "?|0})";
|
||
var calcDrainDice="@{willpower|max} + ?{" + lang["sorcery-dice-for-drain"] + "?} + ?{"+ lang["spell-pool-dice-for-drain"] +"?}";
|
||
var myroll="&{template:spell}";
|
||
myroll+="{{finaldrain=[[0]]}}{{draintnfinal=[[" + calcDrainTN + "]]}}";
|
||
myroll+="{{sorcerydice=[[?{"+ lang["sorcery-dice"] +"?|@{spellcasting}} + ?{" + lang["sorcery-dice-for-drain"] + "?|0}]]}}";
|
||
myroll+="{{draindamage=[[?{" + lang["drain-damage"] + "?|" + lang["light"] + ",1|" + lang["moderate"] + ",2|" + lang["serious"] + ",3|" + lang["deadly"] + ",4|";
|
||
myroll+= lang["light-stun"] + ",10|" + lang["moderate-stun"] + ",11|" + lang["serious-stun"] + ",12|" + lang["deadly-stun"] + ",13|" + lang["none"] + ",0}]]}}";
|
||
myroll+="{{spellpool=[[?{"+ lang["spell-pool-dice"] +"?|0} + ?{"+ lang["spell-pool-dice-for-drain"] +"?|0}]]}}";
|
||
myroll+="{{castforce=[[?{" + lang["force-of-spell"] + "?}]]}}";
|
||
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
|
||
myroll+="{{spellname=" + lang["dispell"] + "}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
myroll+="{{draindice=[[" + calcDrainDice +"]]}}";
|
||
myroll+="{{myname=@{character_name}}}"
|
||
myroll+="{{dispell=yes}}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("sorcery", results.results.sorcerydice.result);
|
||
updatepoolused("spellpool", results.results.spellpool.result);
|
||
const drainbase = damagetable[results.results.draindamage.result];
|
||
const finaldraintxt=calcFinalDmg(results.results.draindamage.result, (-1 * results.results.draintest.result));
|
||
finishRoll( results.rollId, {
|
||
draindamage: drainbase,
|
||
finaldrain: finaldraintxt,
|
||
});
|
||
});
|
||
});
|
||
|
||
on('clicked:spelldefense', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log("clicked spelldefense");
|
||
const payload=( info["originalRollId"] != undefined )? rollEscape.unescape(info["originalRollId"]) : "none";
|
||
var myforce=0;
|
||
var mytarget="@{target|" + lang["ally"] + "|token_name}";
|
||
var myroll="&{template:spell}{{myname=@{character_name}}}{{resisttype=[[0]]}}";
|
||
if (payload != "none" ) {
|
||
console.log(payload);
|
||
myforce=(payload["power"])? payload["power"] : 0;
|
||
mytarget=payload["target"];
|
||
if ( payload["ammotype"].toLowerCase()=="elemental" ) myroll+="{{dodge=yes}}";
|
||
myroll+="{{defensetest=[[0]]}}";
|
||
myroll+="{{senddata=[[0]]}}";
|
||
myroll+="{{attacks=[[" + payload["attacktest"] + "]]}}";
|
||
myresist = (payload["ammotype"].toLowerCase() == "elemental")? "resistroll" : "resistspell";
|
||
}
|
||
var calcDice="?{"+ lang["sorcery-dice"] +"?} + ?{"+ lang["spell-pool-dice"] +"?}";
|
||
var calcTN="?{" + lang["force-of-spell"] + "?}";
|
||
myroll+="{{sorcerydice=[[?{" + lang["sorcery-dice"] +"?|@{sorcery-defense}}]]}}";
|
||
myroll+="{{castforce=[[?{" + lang["force-of-spell"] + "?|" + myforce + "}]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{spellpool=[[?{"+ lang["spell-pool-dice"] +"?|@{spellpool-defense}}]]}}";
|
||
myroll+="{{spellname=" + lang["spell-defense"] + "}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetofspell=" + mytarget + "}}";
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
console.log(myroll);
|
||
if (payload != "none" ) {
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("sorcery", results.results.sorcerydice.result);
|
||
updatepoolused("spellpool", results.results.spellpool.result);
|
||
updatepoolused("spelldefensedice", results.results.sorcerydice.result + results.results.spellpool.result);
|
||
const delta=parseInt(payload["attacktest"]) - results.results.casttest.result;
|
||
console.log(' delta ' + delta);
|
||
var finalattack=delta;
|
||
if (delta < 1) {
|
||
finalattack="SPELL BLOCKED";
|
||
myresist="spellblocked"
|
||
payload["attacktest"]=0;
|
||
} else {
|
||
payload["attacktest"]=finalattack;
|
||
}
|
||
console.log(' result ' + finalattack);
|
||
finishRoll( results.rollId, {
|
||
resisttype: myresist,
|
||
defensetest: finalattack,
|
||
senddata: rollEscape.escape(payload),
|
||
})
|
||
});
|
||
} else {
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("spellpool", results.results.spellpool.result);
|
||
updatepoolused("spelldefensedice", results.results.sorcerydice.result);
|
||
finishRoll( results.rollId, { })
|
||
});
|
||
}
|
||
});
|
||
|
||
|
||
on('clicked:vehicledriving', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
calcTN="@{handling} + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} +@{wp-vehicle} - @{driving-test-interface} +@{driving-test-weather} +@{driving-test-terrain} +@{driving-test-size} +?{" + lang["miscellaneous-modifiers"] + "|0}";
|
||
calcDice="[[@{vehicle-skill-final} + @{driving-test-autonav} + ?{" + lang["control-pool-dice"] + "?}]]"
|
||
var myroll="&{template:vehicle}{{type=" + lang["driving"] + "}}{{controlpool=[[?{" + lang["control-pool-dice"] + "?|0}]]}}{{character=@{character_name}}}"
|
||
myroll += "{{targetnumber=[[" + calcTN + "]]}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}"
|
||
console.log(myroll);
|
||
var atts=[];
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId, { })
|
||
});
|
||
});
|
||
|
||
on('clicked:vehiclesensor', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
calcTN="[[{2,(@{target|" + lang["target"] +"|signature} +@{wp-vehicle} +@{sensor-test-los} +@{sensor-test-weather} +@{sensor-test-terrain} +@{vehicle-urban} +?{" + lang["miscellaneous-modifiers"] + "|0})}kh1]]";
|
||
calcDice="[[@{sensors-rating}]]";
|
||
calcDiceECD="[[@{ecd-rating} * @{ecd-enabled} ]]";
|
||
var myroll="&{template:vehicle}{{type=Sensor Test}}{{character=@{character_name}}}";
|
||
myroll += "{{targetnumber=" + calcTN + "}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
|
||
myroll += "{{ecd=[[ " + calcDiceECD + "d6>" + calcTN + "!! ]] }}"
|
||
console.log(myroll);
|
||
var atts=[];
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId, { })
|
||
});
|
||
});
|
||
|
||
on('clicked:vehicleposition', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
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} + ?{" + lang["control-pool-dice"] + "?}]]"
|
||
var myroll="&{template:vehicle}{{type=" + lang["position"] + "}}{{controlpool=[[?{" + lang["control-pool-dice"] + "?|0}]]}}{{character=@{character_name}}}"
|
||
myroll += "{{targetnumber=" + calcTN + "}}{{position=[[0]]}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
|
||
console.log(myroll);
|
||
var atts=[];
|
||
getAttrs(["maneuver-score"], function(myval) {
|
||
startRoll(myroll, (results) => {
|
||
const newscore = parseInt(myval["maneuver-score"]) + results.results.roll.result ;
|
||
atts["maneuver-score"] = newscore;
|
||
console.log('new man score: ' + atts["maneuver-score"]);
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId, {
|
||
position: newscore,
|
||
})
|
||
setAttrs(atts);
|
||
});
|
||
});
|
||
});
|
||
on('clicked:vehiclecrash', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
calcTN="[[{2,(@{handling} + @{driving-crash-terrain} + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} +@{wp-vehicle} )}kh1]]"
|
||
calcDice="[[@{vehicle-skill-final} + ?{" + lang["control-pool-dice"] + "?} + (@{vehicle-autonav} * @{autonav})]]"
|
||
var myroll="&{template:vehicle}{{type=" + lang["crash"] + "}}{{controlpool=[[?{" + lang["control-pool-dice"] + "?|0}]]}}{{character=@{character_name}}}"
|
||
myroll += "{{targetnumber=" + calcTN + "}}{{speed=[[@{speed-current}]]}}{{reaction=[[@{vehicle-driver}reaction|max}]]}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
|
||
console.log(myroll);
|
||
var atts=[];
|
||
startRoll(myroll, (results) => {
|
||
const speed = results.results.speed.result
|
||
const reaction = results.results.reaction.result
|
||
console.log('speed: ' + speed);
|
||
console.log('reaction: ' + reaction);
|
||
var speedmod=0;
|
||
if ( speed <= ( reaction * 20 )) speedmod=0;
|
||
else if ( speed <= ( reaction * 30 )) speedmod=1;
|
||
else if ( speed <= ( reaction * 40 )) speedmod=2;
|
||
else speedmod=4;
|
||
console.log('final: ' + speedmod );
|
||
var finaltn = results.results.targetnumber.result + speedmod;
|
||
if ( finaltn < 2 ) finaltn = 2;
|
||
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId,
|
||
{
|
||
targetnumber: finaltn,
|
||
roll: finaldice,
|
||
});
|
||
});
|
||
});
|
||
on('clicked:vehicleaction', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
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="?{" + lang["how-many-additional-enemy-vehicles"] + "?";
|
||
var speeding=1;
|
||
var vmbelow10=4;
|
||
var vmbelow00=2;
|
||
var baseTN="@{handling}";
|
||
var calcDice="[[@{vehicle-skill-final} + ?{" + lang["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="?{" + lang["successes-from-hiding-test"] + "?";
|
||
speeding=2;
|
||
vcr=0;
|
||
autonav="( @{autonav} * -1)";
|
||
calcDice="[[@{sensors-rating} + ?{" + lang["control-pool-dice"] + "?}]]";
|
||
baseTN="@{target|" + lang["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=" + lang["accelerate"] + "}}{{controlpool=[[?{" + lang["control-pool-dice"] + "?|0}]]}} {{character=@{character_name}}} {{miscmods=" + miscmods + "|0}}}"
|
||
myroll += "{{rolldice=" + calcDice + "}}"
|
||
myroll += "{{target=vs. @{target|" + lang["target"] +"|token_name}}}{{type=" + myaction + "}}"
|
||
myroll += "{{targetnumber=" + calcTN + "}}"
|
||
myroll += "{{delta=[[@{maneuver-score} - @{target|" + lang["target"] +"|maneuver-score} ]]}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
console.log(results);
|
||
console.log(results.results.roll.dice);
|
||
if ( results.results.delta.result >= 11 ) vmsmod=-4;
|
||
else if ( results.results.delta.result > 1 ) vmsmod=-2;
|
||
else if ( results.results.delta.result == 0 ) vmsmod=0;
|
||
else if ( results.results.delta.result >= -10 ) vmsmod=vmbelow00;
|
||
else if ( results.results.delta.result < -10 ) vmsmod=vmbelow10;
|
||
else vmsmod=0;
|
||
console.log(vmsmod);
|
||
var finaltn = results.results.targetnumber.result + vmsmod;
|
||
if (finaltn < 2) finaltn=2;
|
||
console.log(results.results.roll.dice);
|
||
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId,
|
||
{
|
||
targetnumber: finaltn,
|
||
roll: finaldice,
|
||
});
|
||
});
|
||
});
|
||
|
||
|
||
const rollattribute = function (attrib) {
|
||
if (!("yes" in lang)) geti18n();
|
||
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=[[?{" + lang["target-number"] +"?|4}]]}}{{combatpool= [[?{" + lang["combat-pool-dice"] + "?|0}]]}}{{result= [[ [[@{" + attrib +"} + ?{" + lang["combat-pool-dice"] + "?}]]d6>[[{2,(?{" + lang["target-number"] +"?} + @{stun_pen} + @{wound_pen})}kh1]]!! ]] }}"
|
||
startRoll(attroll, (results) => {
|
||
console.log(results.results.combatpool.result)
|
||
finishRoll( results.rollId);
|
||
});
|
||
};
|
||
|
||
attributes.forEach(myatt => {
|
||
var myevent="attrib-" + myatt;
|
||
var myeventmax="attrib-" + myatt + "-max";
|
||
var myattmax = myatt + "|max";
|
||
on(`clicked:${myevent}`, (info) => {
|
||
console.log('running ' + myatt );
|
||
rollattribute(myatt);
|
||
});
|
||
|
||
on(`clicked:${myeventmax}`, (info) => {
|
||
console.log('running ' + myattmax );
|
||
rollattribute(myattmax);
|
||
});
|
||
});
|
||
|
||
|
||
on('clicked:attrib', (info) => {
|
||
console.log(info);
|
||
var attrib=info["htmlAttributes"]["id"];
|
||
rollattribute(attrib);
|
||
});
|
||
|
||
on('clicked:ewarfare', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
var mytype=info["htmlAttributes"]["id"]
|
||
var mytitle=info["htmlAttributes"]["title"]
|
||
const mymap={
|
||
sonar: {dice: "sonar-rating", target: "signature", notes: ""},
|
||
ecmjamming: {dice: "ecm-fluxmod", target: "sensors-rating", notes: "Roll Oposition test for @{target|" + lang["target"] +"|token_name}"},
|
||
ecmopposition: {dice: "sensors-fluxmod", target: "ecm-rating", notes: "Compare net successes with @{target|" + lang["target"] +"|token_name}"},
|
||
eccmcounter: {dice: "eccm-fluxmod", target: "ecm-rating", notes: "Roll Oposition test for @{target|" + lang["target"] +"|token_name}"},
|
||
eccmopposition: {dice: "ecm-fluxmod", target: "eccm-rating", notes: "Compare net successes with @{target|" + lang["target"] +"|token_name}"}
|
||
};
|
||
var calcDice="@{" + mymap[mytype]["dice"] + "}";
|
||
calcTN="@{target|" + lang["target"] +"|" + mymap[mytype]["target"] + "}";
|
||
if (mytype=="sonar" ) calcTN+=" +@{wp-vehicle} +@{sensor-test-los} +@{sensor-test-weather} +@{sensor-test-terrain} +@{vehicle-urban}";
|
||
calcTN += "+?{" + lang["miscellaneous-modifiers"] + "|0}";
|
||
myroll="&{template:vehicle}{{type=" + mytitle + "}}{{character=@{character_name}}}{{target=@{target|" + lang["target"] +"|token_name}}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{roll=[[ [[ " + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!!]]}}";
|
||
myroll+="{{notes=" + mymap[mytype]["notes"] + "}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
|
||
});
|
||
|
||
on('clicked:maneuever', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
var mytype=info["htmlAttributes"]["id"]
|
||
if ( mytype == "generate") {
|
||
var manroll="&{template:vehicle} {{type=" + lang["maneuver-score"] + "}} {{character=@{character_name}}}{{controlpool=[[?{" + lang["control-pool-dice"] + "?|0}]]}} {{roll=[[ [[@{vehicle-skill-final} + ?{" + lang["control-pool-dice"] + "?}]]d6KH1 + @{terrain-points} + @{speed-points} + @{vehicle-points} ]] }}"
|
||
startRoll(manroll, (results) => {
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
console.log('results: ' + results.results.roll.result)
|
||
finishRoll( results.rollId);
|
||
setAttrs({"maneuver-score": results.results.roll.result});
|
||
});
|
||
} else {
|
||
var manroll="&{template:vehicle} {{type=" + lang["compare"] + " " + lang["maneuver-score"] + "}} {{character=@{character_name}}} {{target=@{target|" + lang["target"] +"|character_name}}} {{charscore=[[@{maneuver-score}]]}} {{targetscore=[[@{target|" + lang["target"] +"|maneuver-score}]]}} {{roll=[[@{maneuver-score} - @{target|" + lang["target"] +"|maneuver-score} ]]}} "
|
||
startRoll(manroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
}
|
||
|
||
});
|
||
on('clicked:repeating_rangedweapons:reload', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
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) {
|
||
console.log('myval');
|
||
console.log(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 ) {
|
||
console.log('loading max' );
|
||
ammoused = maxload;
|
||
} else {
|
||
console.log('too many');
|
||
ammoused = quick;
|
||
}
|
||
if ( ammoused > myreloads ) ammoused = myreloads;
|
||
rounds = ammoused + remain;
|
||
reloadtxt=ammoused + " rounds into " + myreload;
|
||
}
|
||
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=" + lang[acttype] +"}}{{info1=" + lang["out-of-ammo"] + " }}";
|
||
} else {
|
||
console.log('ammo okay');
|
||
myroll="/w gm &{template:info}{{character=@{character_name}}}{{action=Reload: " + myweapon + "}}{{type=" + lang[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}}";
|
||
}
|
||
}
|
||
console.log(myroll);
|
||
setatts[myrepeat.concat("ammoremain")]=rounds;
|
||
setatts[myrepeat.concat("reloads")]=reloadsleft;
|
||
setAttrs(setatts);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
});
|
||
on('clicked:repeating_rangedweapons:shownotes', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
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:showmore clicked:repeating_explosives:showmore', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
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) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
var setatts={};
|
||
var atts=["sensors-rating", "combatpool-used", "controlpool-used", "gyro-on", "armor-quickness-pen", "rounds-phase", "character_name", "move"];
|
||
var recoilx=1;
|
||
var rounds=1;
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
var mymode=info["htmlAttributes"]["id"]
|
||
const weaponattrs=["damage", "power", "name", "skill", "wfamily", "specialized", "targeting", "recoilcomp", "gyro", "ammotype", "ammoremain", "sa", "ss","bf", "fa", "tnmods", "firemode"] ;
|
||
weaponattrs.forEach(myatt=>{
|
||
atts.push(myrepeat.concat(myatt));
|
||
});
|
||
getAttrs(atts, function(myval) {
|
||
if ( (myval[myrepeat.concat("wfamily")] == "Heavy" ) && ( ( mymode != "vehiclesensor" ) || ( mymode != "vehicleranged" )) ) recoilx=2;
|
||
var vehiclesensors=0, armorpen=0, armorpenroll="", pool, mypool, poolname, dmgmin=0, dmgmax=4, finalrounds;
|
||
if ( myval["sensors-rating"] ) vehiclesensors=myval["sensors-rating"] ;
|
||
const move=parseInt(myval["move"]);
|
||
const tnmods= myval[myrepeat.concat("tnmods")];
|
||
const myname= myval["character_name"];
|
||
const myweapon= myval[myrepeat.concat("name")];
|
||
const combatused=parseInt(myval["combatpool-used"]);
|
||
const controlused=parseInt(myval["controlpool-used"]);
|
||
var wdmg= myval[myrepeat.concat("damage")];
|
||
const ammoremain= myval[myrepeat.concat("ammoremain")];
|
||
const ammotype= myval[myrepeat.concat("ammotype")].toLowerCase();
|
||
const targetaim= parseInt(myval[myrepeat.concat("targeting")]);
|
||
const myskill=myval[myrepeat.concat("skill")];
|
||
var gyro= myval[myrepeat.concat("gyro")];
|
||
if ( myval["gyro-on"] == 0 ) gyro=0;
|
||
const firemode= myval[myrepeat.concat("firemode")];
|
||
console.log('original wdmg is ' + damagetable[wdmg]);
|
||
console.log('ammo modifier for wdmg is ' + ammomods[ammotype]["dmg"]);
|
||
var dmgnumber=(ammotype in ammomods)? damagetable[wdmg] + ammomods[ammotype]["dmg"]: damagetable[wdmg];
|
||
console.log('final wdmg is ' + dmgnumber)
|
||
if (dmgnumber >= 10) dmgmax=13, dmgmin=9;
|
||
var wpower= myval[myrepeat.concat("power")];
|
||
var ammoleft=myval[myrepeat.concat("ammoremain")];
|
||
const prevrounds=myval["rounds-phase"];
|
||
var recoilcomp= myval[myrepeat.concat("recoilcomp")];
|
||
if (( firemode == "bf") && ( ammoleft <= 3)) rounds ="?{" + lang["rounds"] + "|" + ammoleft + "}";
|
||
else if (( firemode == "bf") && ( ammoleft > 3)) rounds ="?{" + lang["rounds"] + "|3}";
|
||
else if (( firemode == "fa") && ( ammoleft <= 10)) rounds ="?{" + lang["rounds"] + "|" + ammoleft + "}";
|
||
else if (( firemode == "fa") && ( ammoleft > 10)) rounds ="?{" + lang["rounds"] + "|" + ( 10 - prevrounds ) +"}";
|
||
var recoil="";
|
||
if (( firemode == "bf") || (firemode == "fa")) {
|
||
recoil="{0,(" + recoilx + " * (( ?{" + lang["rounds-already-fired-in-combat-phase"] + "|" + prevrounds + "} + ?{" + lang["rounds"] + "} ) - (" + recoilcomp + " + " + gyro + ")))}kh1";
|
||
} else if (firemode == "sa" ) {
|
||
recoil="{0,(" + recoilx + " * ( ?{" + lang["rounds-already-fired-in-combat-phase"] + "|" + prevrounds + "} - (" + recoilcomp + " + " + gyro + ")))}kh1";
|
||
} else {
|
||
recoil=0;
|
||
}
|
||
if (ammoleft <= 0 ) {
|
||
roll="&{template:info}{{character=@{character_name}}}{{action=" + lang["attack"] + ": " + myweapon + "}}{{type=" + lang["simple"] + "}}{{info1=" + lang["out-of-ammo"] + " }}";
|
||
startRoll(roll, (results) => {
|
||
finishRoll( results.rollId,{});
|
||
});
|
||
} else {
|
||
specialized=myval[myrepeat.concat("specialized")] || 0
|
||
if ( quicknesslinked.includes(myskill) ) {
|
||
armorpen=myval["armor-quickness-pen"];
|
||
armorpenroll= "{{armorpen=@{armor-quickness-pen}}}";
|
||
}
|
||
var calcTN = "[[ "
|
||
if ( mymode == "vehiclesensor" ) {
|
||
calcTN += "@{sensor-gunnery-tn} + @{vehicle-driver}wp-char} + @{wp-vehicle}"
|
||
poolname="Control";
|
||
pool="controlpool";
|
||
mypool="control"
|
||
|
||
} else if ( mymode == "vehicleranged" ) {
|
||
const gyrobonus=((move - myval[myrepeat.concat("gyro")]) < 0 )? move: myval[myrepeat.concat("gyro")];
|
||
console.log('vehicle ranged')
|
||
console.log('move ' + move + ' gyro ' + myval[myrepeat.concat("gyro")] + ' gyrobonus ' + gyrobonus)
|
||
calcTN += " ?{" + lang["range"] + "} + @{rangedTN} + @{target|" + lang["target"] +"|targetMove} + " + targetaim + " + @{wp-vehicle} - " + gyrobonus;
|
||
poolname="Control";
|
||
pool="controlpool";
|
||
mypool="control"
|
||
} else {
|
||
calcTN += " ?{" + lang["range"] + "} + @{rangedTN} + @{target|" + lang["target"] +"|targetMove} + " + targetaim + " + " + armorpen;
|
||
poolname="Combat";
|
||
pool="combatpool";
|
||
mypool="combat"
|
||
}
|
||
|
||
calcTN += " + ?{" + lang["miscellaneous-modifiers"] + "|" + tnmods + "} + " + recoil;
|
||
calcTN += " ]]"
|
||
|
||
var calcDice = "[[ " + myskill + " + " + specialized + " + ?{" + lang[mypool + "-pool-dice"]+"|0}"
|
||
if ( mymode == "vehiclesensor" ) calcDice += " + " + Math.floor(vehiclesensors / 2 )
|
||
calcDice += " ]]"
|
||
|
||
|
||
var roll="&{template:attack}{{myname=@{character_name}}}{{target=@{target|" + lang["target"] +"|token_name}}}";
|
||
roll += "{{rounds=[[" + rounds + "]]}}{{range=[[?{" + lang["range"] + "|" + lang["short"] + ",4|" + lang["medium"] + ",5|" + lang["long"] + ",6|" + lang["extreme"] + ",9}]]}}";
|
||
|
||
roll += "{{targetnumber=" + calcTN + " }}{{rolldice=" + calcDice + "}}";
|
||
roll += "{{weaponname=" + myweapon + "}}{{weapondamage=[[" + dmgnumber + "]]}}{{weaponpower=[[" + wpower + "]]}}";
|
||
roll += "{{" + pool + "=[[?{" + lang[mypool + "-pool-dice"] +"}]]}}{{weaponname=" + myweapon + "}}{{ammotype=" + ammotype + "}}";
|
||
roll += "{{attacktest=[[ " + calcDice + "d6>[[ {2, " + calcTN + "}kh1 ]]!! ]] }}";
|
||
if ( mymode == "rangedattack" ) {
|
||
roll += "{{dodge=[Dodge](~@{target|" + lang["target"] +"|token_name}|dodge)}}";
|
||
roll += "{{senddata=[[0]]}}"
|
||
}
|
||
roll += armorpenroll;
|
||
roll += "{{rangedmods=@{rangedTN}}}";
|
||
roll += "{{movemods=[[{0,( @{move} - " + gyro + ") }kh1]]}}";
|
||
roll += "{{targetmods=" + targetaim + "}}";
|
||
if ( ammomods[ammotype]["amsg"] != null ) roll += "{{info=" + ammomods[ammotype]["amsg"] + "}}";
|
||
console.log(roll);
|
||
startRoll(roll, (results) => {
|
||
var poolresults;
|
||
var finaldamage;
|
||
setatts["rounds-phase"]=results.results.rounds.result + prevrounds;
|
||
const myrounds=results.results.rounds.result;
|
||
if ( mymode == "rangedattack" ) poolresults=results.results.combatpool.result + combatused;
|
||
else poolresults=results.results.controlpool.result + controlused;
|
||
finalrounds=myrounds;
|
||
if ( myrounds > ammoleft ) finalrounds=parseInt(ammoleft);
|
||
if ( finalrounds > 1 ) {
|
||
mythird=Math.floor(finalrounds/3);
|
||
wpower=(ammotype=="tracer")? parseInt(wpower) + (finalrounds - mythird) : parseInt(wpower) + finalrounds;
|
||
dmgnumber=dmgnumber + mythird;
|
||
}
|
||
wpower=parseInt(wpower) + eval(ammomods[ammotype]["power"]);
|
||
/* dmgnumber=dmgnumber + ammomods[ammotype]["dmg"]; */
|
||
if (dmgnumber > dmgmax) dmgnumber=dmgmax;
|
||
if (dmgnumber < dmgmin) dmgnumber=dmgmin;
|
||
console.log('dmgnumber' + dmgnumber);
|
||
console.log('finaldamage' + finaldamage);
|
||
finaldamage=damagetable[dmgnumber];
|
||
let payload= {
|
||
attacker: myname,
|
||
weapon: myweapon,
|
||
armortype: "ballistic",
|
||
range: results.results.range.result,
|
||
wdmg: finaldamage,
|
||
rounds: results.results.rounds.result,
|
||
dodge: 0,
|
||
attacktest: results.results.attacktest.result,
|
||
power: wpower,
|
||
ammotype: ammotype.toLowerCase(),
|
||
}
|
||
finishRoll( results.rollId,
|
||
{
|
||
weapondamage: finaldamage,
|
||
weaponpower: wpower,
|
||
rounds: finalrounds,
|
||
senddata: rollEscape.escape(payload),
|
||
|
||
})
|
||
setatts[myrepeat.concat("ammoremain")]=ammoremain - finalrounds;
|
||
setatts[pool.concat("-used")]=poolresults;
|
||
setAttrs(setatts);
|
||
});
|
||
}
|
||
});
|
||
});
|
||
|
||
const meleecombat = function (mymode, payload) {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(payload);
|
||
var plane=(payload["plane"])? payload["plane"] : "physical";
|
||
const askreach=(payload["reachmode"])? payload["reachmode"] : 0;
|
||
var atts=[];
|
||
console.log(mymode);
|
||
var myfocus = 0;
|
||
var focus="";
|
||
var force="";
|
||
var mydamage, myskill, myweapon, mypower, defroll;
|
||
var pool="combatpool";
|
||
var defaultmsg=" ";
|
||
var defaultpen=0;
|
||
var myspec=0;
|
||
const repeatatts=["damage", "power", "name", "skill", "reach", "specialized", "notes", "tnmods"] ;
|
||
var meleeattrs=["sheettype", "character_name","strength_max", "martialarts", "attackdamage", "attackpower", "reaction_max", "charisma_max", "unarmed", "unarmed-specialized", "cyberimplant", "weaponfocus-equipped", "weaponfocus-damage", "gyro-on", "armor-quickness-pen", "unarmed-miscmods", "weaponfocus-specialized", "metatype", "meleeselected"];
|
||
if ( mymode.includes("repeating" )) {
|
||
console.log('using repeating');
|
||
repeatatts.forEach(myatt=>{
|
||
meleeattrs.push(mymode.concat(myatt));
|
||
});
|
||
};
|
||
console.log('ask reach ' + askreach);
|
||
getAttrs(meleeattrs, function(myval) {
|
||
const strmax=parseInt(myval["strength_max"]);
|
||
const attackdamage=myval["attackdamage"];
|
||
const attackpower=parseInt(myval["attackpower"]);
|
||
const myname=myval["character_name"];
|
||
const sheettype=myval["sheettype"];
|
||
var mynotes="";
|
||
var myspec=0;
|
||
var mytnmod=0;
|
||
var myreach="@{meleereach|max}";
|
||
var gyropenroll="";
|
||
var gyropen=0;
|
||
if (( myval["gyro-on"] == 1 ) && ( mymode != "astralattack" )) {
|
||
gyropen=4;
|
||
gyropenroll = "{{gyropen=" + gyropen + "}}";
|
||
} if (( mymode == "astralattack" ) || (plane=="astral")) {;
|
||
pool="astralpool";
|
||
plane="astral";
|
||
myweapon="Astral Attack";
|
||
var myskill="@{astralcombat}";
|
||
var mydamage="M"
|
||
if ( myval["weaponfocus-equipped"]=="on" ) {
|
||
myskill = "( " + myskill + " + @{weaponfocus-force} )"
|
||
myspec=myval["weaponfocus-specialized"];
|
||
mydamage=myval["weaponfocus-damage"];
|
||
}
|
||
mypower=parseInt(myval["charisma_max"]);
|
||
focus="{{weaponfocus=@{weaponfocus-name}}}"
|
||
force="{{focusforce=@{weaponfocus-force}}}"
|
||
}
|
||
else if (mymode.includes("repeating")) {
|
||
myrepeat=mymode;
|
||
console.log('repeating melee');
|
||
mynotes=myval[myrepeat.concat("mynotes")];
|
||
myweapon=myval[myrepeat.concat("name")];
|
||
mydamage=myval[myrepeat.concat("damage")];
|
||
mypower=parseInt(myval[myrepeat.concat("power")]);
|
||
myskill=myval[myrepeat.concat("skill")];
|
||
myspec=myval[myrepeat.concat("specialized")];
|
||
mytnmod=myval[myrepeat.concat("tnmods")];
|
||
if ( myval["metatype"] == "Troll" ) myreach=myval[myrepeat.concat("reach")] + 1;
|
||
else myreach=myval[myrepeat.concat("reach")];
|
||
} else if (( sheettype == "Critter" ) || (sheettype=="Spirit")) {
|
||
myskill=myval["reaction_max"];
|
||
mydamage=myval["attackdamage"];
|
||
mypower=parseInt(myval["attackpower"]);
|
||
myweapon=sheettype + " Attack";
|
||
} else {
|
||
console.log('unarmed melee');
|
||
mydamage=attackdamage;
|
||
myskill=myval["unarmed"];
|
||
myspec=myval["unarmed-specialized"];
|
||
mytnmod=myval["unarmed-miscmods"];
|
||
myweapon=myval["martialarts"];
|
||
mypower=strmax;
|
||
if ( myval["unarmed"] == 0 ) {
|
||
console.log('unarmed is 0');
|
||
if (myval["cyberimplant"] == 0) {
|
||
myskill=strmax;
|
||
defaultpen=4;
|
||
pool="false";
|
||
var defaultmsg="{{default=Skill Defaulted to Strength Attribute with +" + defaultpen + " to hit}}";
|
||
} else {
|
||
myskill=myval["cyberimplant"];
|
||
defaultpen=2;
|
||
var defaultmsg="{{default=Skill Defaulted to Cyber Implant skill with +" + defaultpen + " to hit}}";
|
||
}
|
||
}
|
||
}
|
||
var calcTN="4 + @{meleeTN} + " + mytnmod + " + " + defaultpen + " + " + gyropen;
|
||
if (askreach==0) calcTN += " + ( ( @{target|" + lang["target"] +"|meleereach|max} - " + myreach + " ) * ?{" + lang["use-reach-modifier"] +"?} )";
|
||
var calcDice=myskill + " + " + myspec ;
|
||
var myroll="&{template:melee}{{myname=" + myname + "}}{{target=@{target|" + lang["target"] +"|token_name}}}{{weapondamage=[[0]]}}{{finalwinner=[[0]]}}{{weaponpower=[[" + mypower + "]]}}"
|
||
if ( quicknesslinked.includes(myskill) ) {
|
||
console.log('quick pen');
|
||
armorpen=myval["armor-quickness-pen"];
|
||
console.log(armorpen);
|
||
myroll+= "{{armorpen=@{armor-quickness-pen}}}";
|
||
}
|
||
console.log('pool name is ' + pool);
|
||
if ( pool == "combatpool" ) {
|
||
calcDice += " + ?{" + lang["combat-pool-dice"] + "}"
|
||
myroll += "{{pooldice=[[?{" + lang["combat-pool-dice"] + "|0}]]}}"
|
||
myroll += "{{pooltype=" + lang["combat"] +"}}";
|
||
} else if ( pool == "astralpool" ) {
|
||
calcDice += " + ?{" + lang["astral-pool-dice"] +"}"
|
||
myroll += "{{pooldice=[[?{" + lang["astral-pool-dice"] +"|0}]]}}"
|
||
myroll += "{{pooltype=" + lang["astral"] +"}}";
|
||
} else {
|
||
myroll += "{{pooldice=[[0]]}}"
|
||
}
|
||
myroll+="{{senddata=[[0]]}}";
|
||
myroll+= "{{charreach=[[" + myreach + "]]}}{{targetreach=[[@{target|" + lang["target"] +"|meleereach|max}]]}}"
|
||
myroll+="{{weaponname=" + myweapon + "}}"
|
||
myroll+= (askreach==0)? "{{reachmod=[[?{" + lang["use-reach-modifier"] +"?|" + lang["yes"] + ",1|" + lang["no"] + ",0}]]}}{{reachbonus=[[(@{target|" + lang["target"] +"|meleereach|max} - @{meleereach|max} ) * ?{" + lang["use-reach-modifier"] +"?}]]}}" : "{{reachmod=[[0]]}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}"
|
||
if ( payload == "none" ) {
|
||
myroll+="{{attacktest=[[ [[" + calcDice + "]]d6>[[ {2,[[ " + calcTN + "]]}kh1]]!! ]] }}"
|
||
myroll += "{{attackmode=Attack}}{{defend=yes}}";
|
||
payload={
|
||
dodge: 0,
|
||
weapon: myweapon,
|
||
armortype: "impact",
|
||
attacker: myname,
|
||
strength: strmax,
|
||
power: mypower,
|
||
wdmg: mydamage,
|
||
plane: plane,
|
||
maxd: 4 - damagetable[mydamage]
|
||
};
|
||
} else {
|
||
myroll += "{{attacknumber=[[" + payload["attacktest"] + "]]}}{{win=[[1]]}}{{attacker=" + payload["attacker"] + "}}{{defender=" + myname + "}}";
|
||
myroll += "{{defensetest=[[ [[" + calcDice + "]]d6>[[ {2,[[ " + calcTN + "]]}kh1]]!! ]] }}";
|
||
myroll += (payload["defmode"]=="regular")? "{{attackmode=Defend}}" : "{{attackmode=Full Defense}}{{dodge=yes}}";
|
||
payload["dmaxd"]= 4 - damagetable[mydamage];
|
||
}
|
||
myroll+=defaultmsg;
|
||
myroll+=gyropenroll;
|
||
console.log('wdmg ' + mydamage);
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
var delta, finalpower, finaldmg, mywinner, mylooser;
|
||
var reachmodtxt="Reach Bonus Applied" ;
|
||
if ( results.results.reachmod.result == 0 ) reachmodtxt="Reach Bonus Not Applied";
|
||
payload["reachmode"]=results.results.reachmod.result;
|
||
if (payload["attacktest"]) {
|
||
console.log('defense run');
|
||
defroll=results.results.defensetest.result;
|
||
payload["ammotype"]="melee";
|
||
payload["range"]="melee";
|
||
payload["meleetn"]=results.results.targetnumber.result;
|
||
if (payload["attacktest"] >= defroll ) {
|
||
mywinner=payload["attacker"];
|
||
mylooser=myname;
|
||
delta=Math.floor((payload["attacktest"] - defroll)/2);
|
||
payload["wdmg"]=finaldmg=damagetable[(delta >= payload["maxd"])? 4 : damagetable[payload["wdmg"]] + delta];
|
||
payload["power"]=finalpower=(delta >= payload["maxd"])? payload["power"] + (delta - payload["maxd"]) : payload["power"];
|
||
console.log('attacker wins');
|
||
} else {
|
||
console.log('defender wins');
|
||
mywinner=myname;
|
||
mylooser=payload["attacker"];
|
||
delta=Math.floor((defroll - payload["attacktest"])/2);
|
||
payload["weapon"]=myweapon;
|
||
if ( payload["defmode"] == "regular" ) {
|
||
payload["wdmg"]=finaldmg=damagetable[(delta >= payload["dmaxd"])? 4 : damagetable[mydamage] + delta];
|
||
payload["power"]=finalpower=(delta >= payload["dmaxd"])? mypower + (delta - payload["dmaxd"]) : mypower;
|
||
payload["strength"]=strmax;
|
||
} else {
|
||
console.log('full defense mode');
|
||
payload["wdmg"]="Attack";
|
||
payload["power"]="Parried";
|
||
}
|
||
}
|
||
payload["attacktest"]=0;
|
||
} else {
|
||
console.log('attack run');
|
||
payload["attacktest"]=results.results.attacktest.result;
|
||
}
|
||
console.log(payload);
|
||
if (defroll != null) {
|
||
console.log('finish dmg ' + finaldmg + ' power ' + finalpower + ' winner: ' + typeof mywinner + ' looser: ' + mylooser);
|
||
let testmsg='brad';
|
||
finishRoll( results.rollId, {
|
||
finalwinner: mylooser,
|
||
reachmod: reachmodtxt,
|
||
weapondamage: mydamage,
|
||
weapondamage: finaldmg,
|
||
weaponpower: finalpower,
|
||
senddata: rollEscape.escape(payload),
|
||
});
|
||
} else {
|
||
finishRoll( results.rollId, {
|
||
reachmod: reachmodtxt,
|
||
weapondamage: mydamage,
|
||
senddata: rollEscape.escape(payload),
|
||
});
|
||
|
||
}
|
||
if ( pool != "none" ) updatepoolused(pool, results.results.pooldice.result );
|
||
|
||
});
|
||
});
|
||
};
|
||
on('clicked:meleedefend', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
payload=rollEscape.unescape(info["originalRollId"]);
|
||
getAttrs(["meleeselected"], function(myval) {
|
||
payload["defmode"]="regular";
|
||
const mselect=myval["meleeselected"];
|
||
mymode = (mselect == "unarmed-equipped")? "unarmedattack" : mselect.slice(0, -12);
|
||
meleecombat(mymode, payload);
|
||
});
|
||
});
|
||
on('clicked:meleedefendfull', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(info);
|
||
payload=rollEscape.unescape(info["originalRollId"]);
|
||
getAttrs(["meleeselected"], function(myval) {
|
||
payload["defmode"]="full";
|
||
const mselect=myval["meleeselected"];
|
||
mymode = (mselect == "unarmed-equipped")? "unarmedattack" : mselect.slice(0, -12);
|
||
meleecombat(mymode, payload);
|
||
});
|
||
});
|
||
|
||
on('clicked:repeating_meleeweapons:attack', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
payload="none";
|
||
meleecombat(myrepeat, payload);
|
||
});
|
||
on('clicked:melee', (info) => {
|
||
payload="none";
|
||
const mymode=info["htmlAttributes"]["id"];
|
||
meleecombat(mymode, payload);
|
||
});
|
||
|
||
on('clicked:repeating_explosives:rangedattack', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
var setatts={};
|
||
var scatter="";
|
||
var atts=["combatpool-used", "controlpool-used", "character_name"];
|
||
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", "exptype", "ammoremain", "skill", "wfamily", "specialized", "targeting", "recoilcomp", "gyro", "ammo", "scatter", "blast","scatterredux", "missleint", "tnmods"] ;
|
||
weaponattrs.forEach(myatt=>{
|
||
atts.push(myrepeat.concat(myatt));
|
||
});
|
||
getAttrs(atts, function(myval) {
|
||
const combatused= parseInt(myval["combatpool-used"]);
|
||
const controlused= parseInt(myval["controlpool-used"]);
|
||
const myname= myval["character_name"];
|
||
const myweapon= myval[myrepeat.concat("name")];
|
||
const wdmg= myval[myrepeat.concat("damage")];
|
||
const [grenadeshape,grenadetype]= myval[myrepeat.concat("exptype")].split(":");
|
||
const wpower= myval[myrepeat.concat("power")];
|
||
const ammoremain= myval[myrepeat.concat("ammoremain")];
|
||
const gyro= myval[myrepeat.concat("gyro")];
|
||
const targetaim= parseInt(myval[myrepeat.concat("targeting")]);
|
||
const tnmods= myval[myrepeat.concat("tnmods")];
|
||
var dmgnumber= damagetable[wdmg];
|
||
var range="{{range=[[?{" + lang["range"] + "|" + lang["short"] + ",4|" + lang["medium"] + ",5|" + lang["long"] + ",6|" + lang["extreme"] + ",9}]]}}";
|
||
var missleintel=0;
|
||
var calcTN;
|
||
if ( mymode=="sensorexp") {
|
||
range="";
|
||
missleintel=myval[myrepeat.concat("missleint")] || 0;
|
||
expint="{{expint=[[" + missleintel + "]]}}"
|
||
calcTN="[[ @{target|" + lang["target"] +"|signature} + ?{" + lang["urban-setting"] + "?|" + lang["yes"] + ",2|" + lang["no"] + ",0} + @{wp-char}";
|
||
poolname="Combat";
|
||
pool="combatpool";
|
||
mypool="combat";
|
||
} else if ( mymode=="vehicle-sensorexp" ) {
|
||
range="";
|
||
missleintel=myval[myrepeat.concat("missleint")] || 0;
|
||
expint="{{expint=[[" + missleintel + "]]}}"
|
||
calcTN="[[ @{target|" + lang["target"] +"|signature} + ?{" + lang["urban-setting"] + "?|" + lang["yes"] + ",2|" + lang["no"] + ",0} + @{wp-vehicle} + @{gunnery-test-los}";
|
||
poolname="Control";
|
||
pool="controlpool";
|
||
mypool="control";
|
||
} else if ( mymode=="vehicle-explosive" ) {
|
||
calcTN = "[[ ?{" + lang["range"] + "} + @{rangedTN} + @{target|" + lang["target"] +"|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + @{wp-vehicle}";
|
||
poolname="Control";
|
||
pool="controlpool";
|
||
mypool="control";
|
||
} else {
|
||
poolname="Combat";
|
||
pool="combatpool";
|
||
mypool="combat";
|
||
calcTN = "[[ ?{" + lang["range"] + "} + @{rangedTN} + @{target|" + lang["target"] +"|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + @{wp-char}";
|
||
}
|
||
let direction=getRandomInt(1, 7);
|
||
const myskill=myval[myrepeat.concat("skill")];
|
||
const myscat=myval[myrepeat.concat("scatter")];
|
||
const myblast=myval[myrepeat.concat("blast")];
|
||
const myredux=myval[myrepeat.concat("scatterredux")];
|
||
const specialized=myval[myrepeat.concat("specialized")] || 0;
|
||
if (ammoremain <= 0 ) {
|
||
roll="&{template:info}{{character=@{character_name}}}{{action=Attack: " + myweapon + "}}{{type=" + lang["simple"] + "}}{{info1=Out of Explosives }}";
|
||
startRoll(roll, (results) => {
|
||
finishRoll( results.rollId,{});
|
||
});
|
||
} else {
|
||
var calcDice = "[[ " + myskill + " + " + specialized + " + ?{" + lang[mypool + "-pool-dice"] + "|0} + " + missleintel + " ]]"
|
||
calcTN += " + ?{" + lang["miscellaneous-modifiers"] + "|" + tnmods + "} ]]"
|
||
var roll="&{template:explosive}{{mytoken=@{selected|token_id}}}{{myname=@{character_name}}}{{target=@{target|" + lang["target"] +"|token_name}}}{{targettoken=@{target|" + lang["target"] +"|token_id}}}" + range
|
||
roll += "{{rolldice=" + calcDice + "}}{{targetnumber=[[{2,( " + calcTN + ")}kh1]]}}";
|
||
roll += "{{weapondamage=" + wdmg + "}}{{senddata=[[0]]}}";
|
||
roll += "{{weaponpower=" + wpower + "}}" + expint;
|
||
if ( ( mymode=="vehicle-explosive" ) || ( mymode=="vehicle-sensorexp") ) roll += "{{controlpool=[[?{" + lang["control-pool-dice"] + "|0}]]}}";
|
||
else roll += "{{combatpool=[[?{" + lang["combat-pool-dice"] + "|0}]]}}";
|
||
roll += "{{weaponname=" + myval[myrepeat.concat("name")] + "}}";
|
||
roll += "{{attacktest=[[ " + calcDice + "d6>[[ {2, ( " + calcTN + ")}kh1 ]]!! ]] }}";
|
||
roll += "{{scatdir=[[1d6]]}}{{scatter=[[" + myscat + "d6]]}}{{blastradius=" + myblast ;
|
||
roll += "}}{{scatterredux=" + myredux + "}}{{scatdirnumber=[[" + direction ;
|
||
roll += "]]}}{{scatdir=" + scatimg + direction + ".png}}";
|
||
roll += "{{expresist=yes}}";
|
||
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;
|
||
console.log('myscatter ' + myscatter);
|
||
if ( myscatter < 0 ) myscatter=0;
|
||
let payload= {
|
||
attacker: myname,
|
||
weapon: myweapon,
|
||
armortype: "impact",
|
||
wdmg: wdmg,
|
||
rounds: 1,
|
||
dodge: 0,
|
||
attacktest: results.results.attacktest.result,
|
||
power: wpower,
|
||
scatter: myscat,
|
||
blast: myblast,
|
||
ammotype: grenadetype.toLowerCase(),
|
||
}
|
||
if (( mymode=="sensorexp") || ( mymode=="vehicle-sensorexp")) payload["range"]="sensor";
|
||
else payload["range"]=results.results.range.result;
|
||
finishRoll( results.rollId,
|
||
{
|
||
scatter: myscatter,
|
||
senddata: rollEscape.escape(payload),
|
||
}
|
||
);
|
||
if (( mymode=="vehicle-explosive" ) || ( mymode=="vehicle-sensorexp")) setatts["controlpool-used"] = results.results.controlpool.result + controlused;
|
||
else setatts["combatpool-used"] = results.results.combatpool.result + combatused;
|
||
setatts[myrepeat.concat("ammoremain")]=ammoremain - 1;
|
||
setAttrs(setatts);
|
||
});
|
||
}
|
||
});
|
||
});
|
||
|
||
|
||
const matrixattrs={ props: ["security", "access", "control", "index", "files", "slave"],
|
||
attadd: "matrix", attappend: "rating"}
|
||
|
||
const otherattrs=["sheettype", "vcr", "initiategrade", "totem", "totemenv", "totemadv", "totemdisadv"];
|
||
const weaponfocus={
|
||
props: ["name", "reach", "conceal", "skill", "force", "power", "damage", "specialized", "tnmods", "notes"],
|
||
attadd: "weaponfocus-"
|
||
};
|
||
const adeptpowers={ attadd: "adept", props: ["cost", "notes", ""], list: ["improvedreflexes", "bodyboost", "strengthboost", "quicknessboost", "painres" ] };
|
||
const deckutils={
|
||
list: ["specialutils", "defensiveutils", "offensiveutils"],
|
||
specialutils: ["sleaze" , "track"], defensiveutils: ["armor", "cloak", "lockon", "medic"], offensiveutils: [ "attack", "blackhammer", "killjoy", "slow"],
|
||
props: ["-rating", "-notes", ""], attadd: "deck"
|
||
};
|
||
|
||
const otherskills=["computers"];
|
||
const loadattributes=[ "body", "quickness", "strength", "charisma", "willpower", "intelligence", "perception", "reaction", "initiative"];
|
||
const critteratts=[ "perception", "attacks", "force", "reach"];
|
||
const weaponskills=[ "clubs", "assaultrifles", "cyberimplant", "edged", "gunnery", "heavyweapons", "lasers", "launchers", "pistols", "poles", "projectiles", "rifles", "shotguns", "smgs", "whips", "throwing", "demolitions", "underwatercombat", "unarmed" ]
|
||
const magicskills=["sorcery", "spellcasting", "spelldefense","dispelling","astralcombat", "ritualsorcery", "conjuring", "summoning", "banishing", "spiritcontrol","aurareading", "areadauras", "areadsignatures","areadsorcery"]
|
||
const sorceryspec=["spellcasting", "spelldefense","dispelling","astralcombat", "ritualsorcery"];
|
||
const conjuringspec=["summoning", "banishing", "spiritcontrol"];
|
||
const auraspec=["aurareading", "areadauras", "areadsignatures","areadsorcery"];
|
||
const deckspec=["hardware", "decking", "programming"];
|
||
const vehiclespec={
|
||
props: ["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"],
|
||
attmap: {"vehicle-type": "type", "vehicle-size": "size", "handling-street": "street", "handling-offroad": "offroad", "speed-rating": "speed"}
|
||
};
|
||
const decklist=["mpcp", "bod", "evasion", "masking", "sensors"];
|
||
const deckopts=["name", "hardening", "activemem", "storagemem", "response", "iccm", "offlinestorage"];
|
||
const poollist=["combatpool-mods","spellpool-mods","spellpool-mods","hackingpool-mods","controlpool-mods","astralpool-mods","taskpool"];
|
||
const rcdeck={
|
||
props: ["ewarfare", "rcdeck-rating", "eccm-rating", "rcdeck-decryption-rating", "rcdeck-encryption-rating", "rcdeck-pem-rating"],
|
||
attmap: {'rcdeck-rating': "rating", 'eccm-rating': "eccm", 'rcdeck-decryption-rating': "decryption", 'rcdeck-encryption-rating': "encryption", 'rcdeck-pem-rating': "pem"}
|
||
};
|
||
const repeatprops={
|
||
armor: {
|
||
props: ["armorname", "ballistic", "impact", "slot", "weight", "load"],
|
||
attmap: {armorname: "name"}
|
||
},
|
||
skills: {
|
||
props: ["skillname", "skillrating", "pool" ],
|
||
attmap: {skillname: "name", skillrating: "rating"}
|
||
},
|
||
edges: {
|
||
props: ["name", "rating"]
|
||
},
|
||
flaws: {
|
||
props: ["name", "rating"]
|
||
},
|
||
adeptpowers: {
|
||
props: ["adeptpower", "powerrating", "powernotes", "powercost"],
|
||
attmap: {adeptpower: "name", powerrating: "rating", powercost: "cost", powernotes: "notes"}
|
||
},
|
||
spells: {
|
||
props: ["name", "spellcategory", "specialized", "force", "foci", "range", "target", "damage", "duration", "drain", "drainlvl", "description"]
|
||
},
|
||
geas: {
|
||
props: ["type", "notes"],
|
||
attadd: "geas"
|
||
},
|
||
conjuring: {
|
||
props: ["name", "type", "force", "fetish", "expendable"]
|
||
},
|
||
foci: {
|
||
props: ["type", "category", "force", "qty"]
|
||
},
|
||
metamagic: {
|
||
props: ["name", "notes"],
|
||
attadd: "metamagic"
|
||
},
|
||
cyberware: {
|
||
props: ["name", "rating", "essence", "notes"],
|
||
attadd: "cyberware-"
|
||
},
|
||
nanotech: {
|
||
props: ["name", "rating", "essence", "notes"],
|
||
attadd: "nanotech-"
|
||
},
|
||
bioware: {
|
||
props: ["name", "rating", "index", "notes"],
|
||
attadd: "bioware-"
|
||
},
|
||
rangedweapons: {
|
||
props: ["name", "type", "conceal", "power", "ammo", "damage", "specialized", "tnmods", "recoilcomp", "gyro", "targeting", "reloadmethod", "notes", "weight", "load", "ammoweight"]
|
||
},
|
||
meleeweapons: {
|
||
props: ["name", "skill", "conceal", "reach", "power", "damage", "specialized", "tnmods", "notes", "weight", "load"]
|
||
},
|
||
explosives: {
|
||
props: ["name", "type", "conceal", "power", "damage", "missleint", "specialized", "tnmods", "recoilcomp", "gyro", "targeting", "rangefinder", "notes", "weight", "load", "ammoremain"],
|
||
attmap: {exptype: "type"}
|
||
},
|
||
ammunition: {
|
||
props: ["type", "count", "weight", "notes", "load"],
|
||
attadd: "ammo"
|
||
},
|
||
security: {
|
||
props: ["step", "event"]
|
||
},
|
||
ic: {
|
||
props: ["name", "rating", "type", "targettest", "notes"],
|
||
attadd: "ic"
|
||
},
|
||
contacts: {
|
||
props: ["name", "contacttype", "contactdetail"],
|
||
attmap: {contacttype: "type", contactdetail: "detail"}
|
||
},
|
||
lifestyles: {
|
||
props: ["lifestyle", "cost", "months-paid", "address", "description", "edgesflaws"],
|
||
},
|
||
'critter-powers': {
|
||
props: ["name", "description"]
|
||
},
|
||
'critter-weaknesses': {
|
||
props: ["name", "description"]
|
||
},
|
||
karma: {
|
||
props: ["purchase", "cost", "date", "notes"]
|
||
},
|
||
gear: {
|
||
props: ["name", "rating", "weight", "conceal", "type", "quantity", "pool", "load"]
|
||
},
|
||
credsticks: {
|
||
props: ["type", "id", "rating", "balance", "notes"]
|
||
},
|
||
drones: {
|
||
props: ["name", "model", "type", "cost", "notes"]
|
||
},
|
||
vehicles: {
|
||
props: ["name", "model", "cost", "notes"]
|
||
},
|
||
offensiveutils: {
|
||
props: ["utility", "rating", "multiplier", "size", "utilitynotes"],
|
||
attmap: {utilitynotes: "notes"}
|
||
},
|
||
defensiveutils: {
|
||
props: ["utility", "rating", "multiplier", "size", "utilitynotes"],
|
||
attmap: {utilitynotes: "notes"}
|
||
},
|
||
'deck-utilities': {
|
||
props: ["utility", "rating", "target", "multiplier", "size", "notes"]
|
||
}
|
||
};
|
||
|
||
|
||
for ( const [key,val] of Object.entries(repeatprops)) {
|
||
var onevent ="sheet:opened remove:repeating_" + key + " ";
|
||
repeatprops[key]["props"].forEach( prop=>{
|
||
if ("attadd" in repeatprops[key]) prop=repeatprops[key]["attadd"] + prop;
|
||
onevent +="change:repeating_" + key + ":" + prop + " ";
|
||
});
|
||
onevent = onevent.substring(0, onevent.length - 1);
|
||
on(onevent, function() {
|
||
const jsonatt=key + "-json";
|
||
exportRepeat(key);
|
||
});
|
||
}
|
||
|
||
const exportRepeat = function(key) {
|
||
const calcweight=["gear", "rangedweapons", "meleeweapons", "armor"];
|
||
const jsonatt=key + "-json";
|
||
var sets={}
|
||
var mylist=[];
|
||
getSectionIDs(key, function(idarray) {
|
||
var gets=[];
|
||
idarray.forEach((m, id) => {
|
||
repeatprops[key]["props"].forEach( prop=>{
|
||
prop=("attadd" in repeatprops[key])? repeatprops[key]["attadd"] + prop : prop;
|
||
gets.push("repeating_" + key + "_" + m + "_" + prop)
|
||
});
|
||
});
|
||
getAttrs(gets, function(myval) {
|
||
var weight=0;
|
||
var nuyen=0;
|
||
console.log('debug ' + key );
|
||
console.log(myval);
|
||
idarray.forEach((m, id) => {
|
||
myobj={};
|
||
repeatprops[key]["props"].forEach( prop=>{
|
||
myprop=("attadd" in repeatprops[key])? repeatprops[key]["attadd"] + prop : prop;
|
||
if ("attmap" in repeatprops[key]) {
|
||
prop=(prop in repeatprops[key]["attmap"])? repeatprops[key]["attmap"][prop] : prop;
|
||
}
|
||
myobj[prop]=myval["repeating_" + key + "_" + m + "_" + myprop];
|
||
});
|
||
if ( calcweight.includes(key)) weight+= parseFloat(myval["repeating_" + key + "_" + m + "_weight"]) * parseInt(myval["repeating_" + key + "_" + m + "_load"]);
|
||
if (key == "ammunition") weight+= parseFloat(myval["repeating_" + key + "_" + m + "_ammoweight"]) * parseInt(myval["repeating_" + key + "_" + m + "_ammoload"]);
|
||
if (key == "rangedweapons" ) weight+=parseFloat(myval["repeating_" + key + "_" + m + "_ammoweight"]);
|
||
if (key == "explosives" ) {
|
||
console.log('explosives weight');
|
||
weight+=(parseFloat(myval["repeating_" + key + "_" + m + "_weight"]) * parseInt(myval["repeating_" + key + "_" + m + "_ammoremain"]) * parseInt(myval["repeating_" + key + "_" + m + "_load"]) );
|
||
};
|
||
if (key == "credsticks") nuyen += parseFloat(myval["repeating_" + key + "_" + m + "_balance"]);
|
||
mylist.push(myobj);
|
||
});
|
||
const myout=JSON.stringify(mylist);
|
||
sets[jsonatt]=myout;
|
||
let wkey=key + "-weight";
|
||
weight=Number((weight).toFixed(2));
|
||
nuyen=Number((nuyen).toFixed(2));
|
||
if (( calcweight.includes(key)) || (key == "explosives") || (key == "ammunition")) sets[wkey]=weight;
|
||
if (( calcweight.includes(key)) || (key=="explosives") || (key == "ammunition")) console.log('calc weight ' + key);
|
||
if (key == "credsticks") sets["nuyen"]=nuyen;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
}
|
||
|
||
on("clicked:jsonimport-char", function(){
|
||
getAttrs(["jsonnpc"], function(myval) {
|
||
npc=JSON.parse(myval["jsonnpc"]);
|
||
console.log(npc);
|
||
loadCharacter(npc);
|
||
});
|
||
});
|
||
on("clicked:jsonexport-char", function(){
|
||
getAttrs(["sheettype"], function(myval) {
|
||
exportCharacter(myval["sheettype"]);
|
||
});
|
||
});
|
||
|
||
const exportCharacter = function(sheet) {
|
||
var cyberdeck=[];
|
||
var adeptlist=[];
|
||
var utillist=[];
|
||
var longlist=[];
|
||
var atts=[];
|
||
var matrixlist=[];
|
||
if (sheet == "Matrix") {
|
||
atts.push("matrixcode", "matrixobject", "parentgrid", "sheettype");
|
||
matrixattrs.props.forEach(myatt=>{
|
||
matrixlist.push(matrixattrs.attadd + myatt + matrixattrs.attappend);
|
||
atts.push(matrixattrs.attadd + myatt + matrixattrs.attappend);
|
||
});
|
||
} else {
|
||
longlist=longlist.concat(loadattributes);
|
||
longlist=longlist.concat(poollist);
|
||
longlist=longlist.concat(otherattrs);
|
||
longlist=longlist.concat(vehiclespec.props);
|
||
longlist=longlist.concat(rcdeck.props);
|
||
longlist.forEach(myatt=>{
|
||
atts.push(myatt);
|
||
atts.push(myatt + "-mods");
|
||
});
|
||
atts=atts.concat(critteratts);
|
||
atts=atts.concat(magicskills);
|
||
atts=atts.concat(weaponskills);
|
||
atts=atts.concat(deckspec);
|
||
decklist.forEach(myatt=>{
|
||
atts.push("deck-" + myatt + "-max");
|
||
cyberdeck.push("deck-" + myatt + "-max");
|
||
});
|
||
deckopts.forEach(opt=>{
|
||
atts.push("deck-" + opt);
|
||
cyberdeck.push("deck-" + opt);
|
||
});
|
||
weaponfocus.props.forEach(prop =>{
|
||
atts.push(weaponfocus.attadd + prop);
|
||
});
|
||
adeptpowers["list"].forEach(power =>{
|
||
adeptpowers["props"].forEach(prop =>{
|
||
atts.push(adeptpowers.attadd + power + prop);
|
||
adeptlist.push(adeptpowers.attadd + power + prop);
|
||
});
|
||
});
|
||
deckutils["list"].forEach( util => {
|
||
deckutils[util].forEach(u=> {
|
||
deckutils["props"].forEach(p=> {
|
||
let myatt=deckutils.attadd + u + p;
|
||
atts.push(myatt);
|
||
utillist.push(myatt);
|
||
});
|
||
});
|
||
});
|
||
}
|
||
getAttrs(atts, function(myval) {
|
||
var skillsother=[];
|
||
var adeptother=[];
|
||
var offensiveother=[];
|
||
var defensiveother=[];
|
||
const jsonout={
|
||
vehicle: {},
|
||
rcdeck: {},
|
||
cyberdeck: {},
|
||
weaponfocus: {},
|
||
skills: [],
|
||
securitysheaf: [],
|
||
adeptpowers: [],
|
||
offensiveutils: [],
|
||
defensiveutils: [],
|
||
specialutils: []
|
||
};
|
||
console.log(myval);
|
||
for ( const [key,val] of Object.entries(myval)) {
|
||
var obj={};
|
||
if ((magicskills.includes(key)) || (otherskills.includes(key)) || (weaponskills.includes(key)) || (deckspec.includes(key))){
|
||
obj["name"]=key;
|
||
obj["rating"]=val;
|
||
if (val != 0 ) skillsother.push(obj);
|
||
} else if (adeptlist.includes(key)) {
|
||
continue;
|
||
} else if (utillist.includes(key)) {
|
||
continue;
|
||
} else if (cyberdeck.includes(key)) {
|
||
if ( val != 0 ) jsonout["cyberdeck"][key]=val;
|
||
} else if ( key.startsWith(weaponfocus.attadd )) {
|
||
if ( myval["weaponfocus-force"] !=0 ) jsonout["weaponfocus"][key.replace(weaponfocus.attadd, "")]=val;
|
||
} else if (otherattrs.includes(key)) {
|
||
if ( val != 0 ) jsonout[key]=val;
|
||
} else if (vehiclespec.props.includes(key)) {
|
||
if (( myval["sheettype"] == "Drone" || myval["sheettype"]=="Vehicle")) {
|
||
let mykey=(key in vehiclespec.attmap)? vehiclespec.attmap[key] : key;
|
||
jsonout["vehicle"][mykey]=val;
|
||
}
|
||
} else if (rcdeck.props.includes(key)) {
|
||
if ( val != 0 ) {
|
||
let mykey=(key in rcdeck.attmap)? rcdeck.attmap[key] : key;
|
||
jsonout["rcdeck"][mykey]=val;
|
||
};
|
||
} else if ( key=="matrixcode" ) jsonout["code"]=val;
|
||
else if ( matrixlist.includes(key)) jsonout[(key.replace(matrixattrs.attadd, "")).replace(matrixattrs.attappend, "")]=val;
|
||
else if ( val !=0 ) jsonout[key]=val;
|
||
|
||
};
|
||
jsonatts=[]
|
||
for ( const [key,val] of Object.entries(repeatprops)) {
|
||
jsonatts.push(key + "-json");
|
||
};
|
||
getAttrs(jsonatts, function(v) {
|
||
console.log('v');
|
||
console.log(v);
|
||
for ( const [key,val] of Object.entries(repeatprops)) {
|
||
const jv=key + "-json";
|
||
console.log(jv);
|
||
const okey=(key=="security")? "securitysheaf" : key;
|
||
if ( jv in v ) jsonout[okey]=JSON.parse(v[key + "-json"]);
|
||
}
|
||
if ( "skills" in jsonout) jsonout["skills"] = jsonout["skills"].concat(skillsother);
|
||
else jsonout["skills"] = skillsother;
|
||
|
||
if ( "adeptpowers" in jsonout) {
|
||
jsonout["adeptpowers"] = jsonout["adeptpowers"].concat(adeptother);
|
||
}
|
||
console.log('starting adept out')
|
||
adeptpowers["list"].forEach(power =>{
|
||
const obj={};
|
||
obj["name"]=power;
|
||
console.log(adeptpowers.attadd + power);
|
||
console.log(myval[adeptpowers.attadd + power]);
|
||
obj["rating"]=myval[adeptpowers.attadd + power];
|
||
obj["cost"]=myval[adeptpowers.attadd + power + "-cost"];
|
||
obj["notes"]=myval[adeptpowers.attadd + power + "-notes"];
|
||
if (myval[adeptpowers.attadd + power] > 0 ) jsonout["adeptpowers"].push(obj);
|
||
});
|
||
console.log('starting deck util out')
|
||
deckutils["list"].forEach( util => {
|
||
deckutils[util].forEach(u=> {
|
||
const obj={};
|
||
let rating=deckutils.attadd + u + "-rating";
|
||
let notes=deckutils.attadd + u + "-notes";
|
||
obj["utility"]=u;
|
||
obj["rating"]=myval[rating];
|
||
obj["notes"]=myval[notes];
|
||
if ( myval[rating] > 0 ) jsonout[util].push(obj);
|
||
});
|
||
});
|
||
for ( const [key,val] of Object.entries(repeatprops)) {
|
||
if (key == "security") {
|
||
if (jsonout["securitysheaf"].length === 0 ) delete jsonout["securitysheaf"]
|
||
} else {
|
||
if (jsonout[key].length === 0 ) delete jsonout[key]
|
||
}
|
||
};
|
||
if ( jsonout.specialutils.length === 0 ) delete jsonout.specialutils;
|
||
if ( Object.keys(jsonout.cyberdeck).length === 0 ) delete jsonout.cyberdeck;
|
||
if ( Object.keys(jsonout.weaponfocus).length === 0 ) delete jsonout.weaponfocus;
|
||
if ( Object.keys(jsonout.vehicle).length === 0 ) delete jsonout.vehicle;
|
||
if ( Object.keys(jsonout.rcdeck).length === 0 ) delete jsonout.rcdeck;
|
||
console.log(jsonout);
|
||
myout=JSON.stringify(jsonout);
|
||
setAttrs({jsonout: myout});
|
||
});
|
||
});
|
||
|
||
|
||
};
|
||
|
||
const loadCharacter = function (npc) {
|
||
getAttrs(["jsonnpc"], function(myval) {
|
||
var atts={};
|
||
repeatskills=[];
|
||
npc=JSON.parse(myval["jsonnpc"]);
|
||
console.log(npc);
|
||
const skills = ( "skills" in npc )? npc["skills"] : [];
|
||
const pools = ( "pools" in npc )? npc["pools"] : [];
|
||
atts["essense"] = ("essense" in npc)? npc["essense"] : 6;
|
||
atts["metatype"] = ( "metatype" in npc )? npc["metatype"] : "Human";
|
||
if ( "character_name" in npc ) atts["character_name"]=npc["character_name"] ;
|
||
if ( "type" in npc ) atts["sheettype"]=npc["type"];
|
||
if ( "vcr" in npc ) atts["vcr"]=npc["vcr"];
|
||
if ( "magic" in npc ) atts["magic"]=npc["magic"];
|
||
const sheettype=("sheettype" in npc)? npc.sheettype : "Character";
|
||
if ( sheettype=="Matrix") {
|
||
console.log('loading matrix');
|
||
atts["sheettype"]=sheettype;
|
||
atts["matrixobject"]=("matrixobject" in npc)? npc["matrixobject"] : "Host";
|
||
atts["matrixcode"]=("code" in npc)? npc["code"] : "GREEN";
|
||
if ( "ic" in npc ) {
|
||
npc.ic.forEach( repeat => {
|
||
var newrowid = generateRowID();
|
||
repeatprops.ic.props.forEach( prop => {
|
||
myprop=prop;
|
||
prop=repeatprops.ic.attadd + prop;
|
||
atts["repeating_ic_" + newrowid + "_" + prop]=repeat[myprop];
|
||
});
|
||
});
|
||
}
|
||
if ( "securitysheaf" in npc ) {
|
||
npc.securitysheaf.forEach( repeat => {
|
||
var newrowid = generateRowID();
|
||
repeatprops.security.props.forEach( prop => {
|
||
myprop=prop;
|
||
atts["repeating_security_" + newrowid + "_" + prop]=repeat[myprop];
|
||
});
|
||
});
|
||
}
|
||
matrixattrs.props.forEach(attr=>{
|
||
if ( attr in npc ) atts[matrixattrs.attadd + attr + matrixattrs.attappend]=npc[attr];
|
||
});
|
||
|
||
} else {
|
||
console.log('loading attributes');
|
||
loadattributes.forEach(myatt=>{
|
||
let max=myatt.concat("_max");
|
||
let mod=myatt.concat("-mods");
|
||
if(npc[myatt]) atts[myatt]=npc[myatt];
|
||
if(npc[mod]) atts[mod]=npc[mod];
|
||
if(npc[max]) atts[mod]=npc[max] - npc[myatt];
|
||
if(npc[max] == 'initiative_max') console.log('initme' + npc[max]);
|
||
});
|
||
console.log('loading pools');
|
||
poollist.forEach(myatt=>{
|
||
if (npc[myatt]) atts[myatt]=npc[myatt];
|
||
});
|
||
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 misc attributes');
|
||
otherattrs.forEach(miscatt=>{
|
||
if ( miscatt in npc) atts[miscatt]=npc[miscatt];
|
||
});
|
||
console.log('loading adept powers');
|
||
if ( "adeptpowers" in npc ) {
|
||
for (i = npc["adeptpowers"].length - 1; i >= 0; i -= 1) {
|
||
if ( adeptpowers["list"].includes(npc["adeptpowers"][i]["name"])) {
|
||
console.log('found non repeating power ' + npc["adeptpowers"][i]["name"]);
|
||
atts[adeptpowers.attadd + npc["adeptpowers"][i]["name"]]=npc["adeptpowers"][i]["rating"];
|
||
npc["adeptpowers"].splice(i, 1);
|
||
};
|
||
};
|
||
};
|
||
|
||
console.log('loading rcdeck');
|
||
if ( "rcdeck" in npc ) {
|
||
rcdeck.props.forEach(prop=>{
|
||
let mykey=(prop in rcdeck.attmap)? rcdeck.attmap[prop] : prop;
|
||
if (mykey in npc["rcdeck"]) atts[prop]=npc["rcdeck"][mykey];
|
||
})};
|
||
console.log('loading vehicle');
|
||
if ( "vehicle" in npc ) {
|
||
vehiclespec.props.forEach(prop=>{
|
||
let mykey=(prop in vehiclespec.attmap)? vehiclespec.attmap[prop] : prop;
|
||
if (mykey in npc["vehicle"]) atts[prop]=npc["vehicle"][mykey];
|
||
})};
|
||
console.log('loading cyberdeck');
|
||
if ( "cyberdeck" in npc ) {
|
||
for ( const [key,val] of Object.entries(npc.cyberdeck)) {
|
||
atts[key]=val;
|
||
}
|
||
};
|
||
console.log('loading weaponfocus');
|
||
if ( "weaponfocus" in npc ) {
|
||
for ( const [key,val] of Object.entries(npc.weaponfocus)) {
|
||
atts[key]=val;
|
||
}
|
||
};
|
||
deckutils["list"].forEach( util => {
|
||
console.log('loading deck utils ' + util);
|
||
if (npc[util]) {
|
||
for (i = npc[util].length - 1; i >= 0; i -= 1) {
|
||
console.log('u ' + npc[util][i]["utility"]);
|
||
if ( deckutils[util].includes(npc[util][i]["utility"])) {;
|
||
console.log('found non repeating utility ' + npc[util][i]["utility"]);
|
||
atts[deckutils.attadd + npc[util][i]["utility"]] = npc[util][i]["rating"];
|
||
npc[util].splice(i, 1);
|
||
}
|
||
};
|
||
}
|
||
});
|
||
console.log('loading repeat skills');
|
||
npc["skills"]=repeatskills;
|
||
for ( const [key,val] of Object.entries(repeatprops)) {
|
||
if ( key in npc ) {
|
||
console.log('loading ' + key);
|
||
npc[key].forEach( repeat => {
|
||
var newrowid = generateRowID();
|
||
repeatprops[key]["props"].forEach( prop => {
|
||
myprop=prop;
|
||
prop=("attadd" in repeatprops[key])? repeatprops[key]["attadd"] + prop : prop;
|
||
if ("attmap" in repeatprops[key]) {
|
||
myprop=(prop in repeatprops[key]["attmap"])? repeatprops[key]["attmap"][prop] : prop;
|
||
}
|
||
atts["repeating_" + key + "_" + newrowid + "_" + prop]=repeat[myprop];
|
||
});
|
||
});
|
||
}
|
||
|
||
};
|
||
}
|
||
console.log('before atts');
|
||
console.log(atts);
|
||
Object.keys(atts).forEach(key => atts[key] === undefined && delete atts[key])
|
||
console.log('final atts');
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
|
||
};
|
||
|
||
|
||
const switchbuttons1 = ["securitysheaf", "astralattributes", "sorceryskills", "spells", "adeptpowers", "magicinitiate", "foci", "geas", "totem", "combatskills", "cyberware", "deckingskills", "bioware", "gear", "contacts"];
|
||
const switchbuttons2 = ["gunnery","deck-utilities-","deck-skills-", "deck-cyberdeck-", "drones-skills-", "drones-models-", "vehicle-skills-", "drone-list-", "ic-", "rc-deck-" ];
|
||
const switchbuttons = switchbuttons1.concat(switchbuttons2)
|
||
switchbuttons.forEach(button => {
|
||
let mybutton=button.concat('switch');
|
||
on(`clicked:${mybutton}`, function() {
|
||
console.log(mybutton)
|
||
getAttrs([mybutton], function(myval){
|
||
if (myval[mybutton] == "show") {
|
||
setAttrs({[mybutton]: "hide"});
|
||
} else {
|
||
setAttrs({[mybutton]: "show"});
|
||
}
|
||
});
|
||
|
||
});
|
||
});
|
||
|
||
on("clicked:show-hide", (info) => {
|
||
const myid=info["htmlAttributes"]["id"]
|
||
console.log('clicked ' + myid);
|
||
getAttrs([myid], function(myval) {
|
||
if (myval[myid] == "show") setAttrs({[myid]: "hide"});
|
||
else setAttrs({[myid]: "show"});
|
||
});
|
||
});
|
||
|
||
const vehicleskills=["bike","car","hovercraft", "motorboat", "sailboat", "submarine", "wingedaircraft", "tracks", "semiballistic", "lta", "rotor", "ship", "vectoredthrust", "mecharm", "suborbital", "walkers"];
|
||
let vchangelist="";
|
||
let vonprefix=" change:";
|
||
let vonsuffix="-specialize";
|
||
let vattrs=[];
|
||
vehicleskills.forEach(skill => {
|
||
let myvonchange = vonprefix.concat(skill.concat(vonsuffix));
|
||
vchangelist += myvonchange;
|
||
});
|
||
on(vchangelist, function(eventinfo) {
|
||
var mybase=eventinfo["sourceAttribute"].split("-")[0]
|
||
var myspec=eventinfo["sourceAttribute"];
|
||
var myremote=mybase.concat("-remote")
|
||
vattrs.push(mybase);
|
||
vattrs.push(myspec);
|
||
console.log(vattrs);
|
||
getAttrs(vattrs, function(myval) {
|
||
if (myval[myspec] == 0) {
|
||
console.log('setting ' + myremote + ' to ' + myval[mybase]);
|
||
setAttrs({[myremote]: myval[mybase]});
|
||
}
|
||
});
|
||
});
|
||
|
||
const deckutilrepeat=["deck-utilities", "offensiveutils", "defensiveutils"]
|
||
const utilitylist=["decksleaze", "decktrack", "deckarmor", "deckcloak", "deckmedic", "decklockon", "deckattack", "deckblackhammer", "deckkilljoy", "deckslow"];
|
||
let changelist="change:deckattack-multiplier";
|
||
let onprefix=" change:";
|
||
let onsuffix="-rating";
|
||
utilitylist.forEach(util => {
|
||
let myonchange = onprefix.concat(util);
|
||
myonchange = myonchange.concat("-rating");
|
||
changelist += myonchange;
|
||
});
|
||
console.log('changelist');
|
||
console.log(changelist);
|
||
on(changelist, function(eventinfo) {
|
||
let myutil=eventinfo["sourceAttribute"].split("-")[0];
|
||
var myrating=myutil.concat("-rating");
|
||
var mymulti=myutil.concat("-multiplier");
|
||
var mysize=myutil.concat("-size");
|
||
getAttrs([myrating, mymulti], function(myval) {
|
||
let r = parseInt(myval[myrating]);
|
||
let m = parseInt(myval[mymulti]);
|
||
let s = (r * r) * m;
|
||
setAttrs({[mysize]: s});
|
||
});
|
||
});
|
||
|
||
const personalist=["deck-mpcp", "deck-bod", "deck-evasion", "deck-sensors", "deck-masking", "deck-detection"];
|
||
let pchangelist="sheet:opened change:deck-realityfilter change:deck-icsuppresspool change:deck-icsuppressed";
|
||
let ponprefix=" change:";
|
||
var pgetatts=["deck-realityfilter","deck-icsuppressed","deck-icsuppresspool", "hackingpool-used"];
|
||
personalist.forEach(p => {
|
||
pchangelist += ponprefix.concat(p.concat("-max"));
|
||
pchangelist += ponprefix.concat(p.concat("-mods"));
|
||
pgetatts.push(p.concat("-max"));
|
||
pgetatts.push(p.concat("-mods"));
|
||
});
|
||
on(pchangelist, function() {
|
||
console.log('deck-mpcp change');
|
||
getAttrs(pgetatts, function(myval) {
|
||
sets={};
|
||
console.log(myval);
|
||
console.log(myval["deck-realityfilter"]);
|
||
var hp = parseInt(myval["hackingpool"]);
|
||
var hackpool= hp || 0;
|
||
var mysuppress=parseInt(myval["deck-icsuppressed"]);
|
||
sets["deck-mpcp-final"] = parseInt(myval["deck-mpcp-max"]) + parseInt(myval["deck-mpcp-mods"]) - parseInt(myval["deck-realityfilter"]);
|
||
sets["deck-bod-final"] = parseInt(myval["deck-bod-max"]) + parseInt(myval["deck-bod-mods"]);
|
||
sets["deck-sensors-final"] = parseInt(myval["deck-sensors-max"]) + parseInt(myval["deck-sensors-mods"]);
|
||
sets["deck-evasion-final"] = parseInt(myval["deck-evasion-max"]) + parseInt(myval["deck-evasion-mods"]);
|
||
sets["deck-masking-final"] = parseInt(myval["deck-masking-max"]) + parseInt(myval["deck-masking-mods"]);
|
||
if ( myval["deck-icsuppresspool"] == 1) {
|
||
sets["hackingpool-icsuppress"] = mysuppress;
|
||
sets["deck-detection-final"] = parseInt(myval["deck-detection-max"]) + parseInt(myval["deck-detection-mods"]);
|
||
} else {
|
||
sets["deck-detection-final"] = parseInt(myval["deck-detection-max"]) + parseInt(myval["deck-detection-mods"]) - mysuppress;
|
||
}
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
|
||
|
||
|
||
});
|
||
|
||
on("change:frame-initiative change:frame-core", function () {
|
||
getAttrs(["frame-initiative", "frame-core"], function(myval) {
|
||
|
||
var mycore = parseInt(myval["frame-core"]);
|
||
var myinit = parseInt(myval["frame-initiative"] + 1 );
|
||
setAttrs({"deck-mpcp-max": mycore, "deck-reaction-final": mycore, "deck-initiative": myinit });
|
||
});
|
||
|
||
});
|
||
var utilsizechange;
|
||
const cprefix=" change:repeating_";
|
||
deckutilrepeat.forEach(p => {
|
||
utilsizechange += cprefix.concat(p.concat(":multiplier"));
|
||
utilsizechange += cprefix.concat(p.concat(":size"));
|
||
utilsizechange += cprefix.concat(p.concat(":rating"));
|
||
});
|
||
on(utilsizechange, function(info) {
|
||
console.log(info);
|
||
getAttrs(["repeating_deck-utilities_rating", "repeating_deck-utilities_multiplier"], function(myval) {
|
||
let r = parseInt(myval["repeating_deck-utilities_rating"]);
|
||
let m = parseInt(myval["repeating_deck-utilities_multiplier"]);
|
||
let s = (r * r) * m;
|
||
let myattr = "repeating_deck-utilities_size";
|
||
setAttrs({[myattr]: s});
|
||
});
|
||
});
|
||
|
||
|
||
on("change:matrixsecurityrating", function() {
|
||
console.log('change of sec rating');
|
||
const atlist=["deck-bod-max", "deck-evasion-max", "deck-masking-max", "deck-sensors-max", "deck-mpcp-max", "deck-detection-max", "decking"];
|
||
getAttrs(["matrixsecurityrating"], function(myval) {
|
||
sets={};
|
||
let sr = parseInt(myval["matrixsecurityrating"]);
|
||
atlist.forEach(at=> {
|
||
sets[at]=sr;
|
||
});
|
||
sets["matrix-iconstatus"]=(sr > 0 )? "Legitimate" : "Intruder";
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
var deckchangelist;
|
||
utilitylist.forEach(p => {
|
||
deckchangelist += ponprefix.concat(p.concat("-loaded"));
|
||
deckchangelist += ponprefix.concat(p.concat("-size"));
|
||
deckchangelist += ponprefix.concat(p.concat("-rating"));
|
||
});
|
||
deckutilrepeat.forEach(p => {
|
||
const utilatts=["loaded", "size", "rating"];
|
||
deckchangelist += " change:repeating_" + p + ":loaded";
|
||
deckchangelist += " change:repeating_" + p + ":size";
|
||
deckchangelist += " change:repeating_" + p + ":rating";
|
||
|
||
});
|
||
on(deckchangelist, function(info) {
|
||
var myatts=["deck-utilitypayload", "deck-activemem", "deck-util-size-loaded", "deck-util-rating-loaded"];
|
||
console.log(info);
|
||
myold=info["previousValue"];
|
||
mynew=info["newValue"];
|
||
var myattrib;
|
||
var myrepeat;
|
||
var mybase;
|
||
var mysizeattr;
|
||
var myloadattr;
|
||
var myratingattr;
|
||
if (info["sourceAttribute"].includes("repeating_")) {
|
||
mybase=info["sourceAttribute"].split("_");
|
||
myattrib=mybase.pop();
|
||
myrepeat=mybase.join('_');
|
||
mysizeattr=myrepeat.concat("_size");
|
||
myloadattr=myrepeat.concat("_loaded");
|
||
myratingattr=myrepeat.concat("_rating");
|
||
myratingfinal=myrepeat.concat("_rating-final");
|
||
} else {
|
||
mybase=info["sourceAttribute"].split("-");
|
||
myattrib=mybase.pop();
|
||
myrepeat=mybase;
|
||
mysizeattr=myrepeat +"-size";
|
||
myloadattr=myrepeat + "-loaded";
|
||
myratingattr=myrepeat + "-rating";
|
||
myratingfinal=myrepeat + "-rating-final";
|
||
}
|
||
myatts.push(mysizeattr, myloadattr, myratingattr, );
|
||
console.log('myatt: ' + myattrib);
|
||
console.log('myrepeat: ' + myrepeat);
|
||
console.log(myatts);
|
||
|
||
if (myattrib.includes("loaded")) console.log('change load');
|
||
if (myattrib.includes("rating")) console.log('change rating');
|
||
if (myattrib.includes("size")) console.log('change size');
|
||
getAttrs(myatts, function(myval){
|
||
var newsize;
|
||
var newratings;
|
||
setatts=[];
|
||
const currentsize=parseInt(myval["deck-util-size-loaded"]);
|
||
const currentrat=parseInt(myval["deck-util-rating-loaded"]);
|
||
if ( myattrib == "loaded" ) {
|
||
if ( myval[myloadattr] == 1 ) {
|
||
console.log('loading utility ' + myrepeat);
|
||
newsize=currentsize + parseInt(myval[mysizeattr]);
|
||
newratings=currentrat + parseInt(myval[myratingattr]);
|
||
setatts[myratingfinal]=parseInt(myval[myratingattr]);
|
||
} else {
|
||
console.log('un-loading utility ' + myrepeat);
|
||
newsize=currentsize - parseInt(myval[mysizeattr]);
|
||
newratings=currentrat - parseInt(myval[myratingattr]);
|
||
setatts[myratingfinal]=0;
|
||
}
|
||
} else if ( myattrib == "size" ) {
|
||
if ( myval[myloadattr] == 1 ) {
|
||
newsize = currentsize + ( parseInt(myval[mysizeattr]) - parseInt(myold));
|
||
console.log('change of size ' + myrepeat + ' from: ' + myold + ' to: ' + myval[mysizeattr]);
|
||
}
|
||
} else if ( myattrib == "rating") {
|
||
if ( myval[myloadattr] == 1 ) {
|
||
newratings = currentrat + ( parseInt(myval[myratingattr]) - parseInt(myold));
|
||
console.log('change of rating ' + myrepeat + ' from: ' + myold + ' to: ' + myval[myratingattr]);
|
||
}
|
||
} else {
|
||
console.log('invalid event');
|
||
}
|
||
console.log('debug size' + newsize);
|
||
console.log('debug rating' + newratings);
|
||
if (newsize != null) setatts["deck-util-size-loaded"]=newsize;
|
||
if (newratings != null) setatts["deck-util-rating-loaded"]=newratings;
|
||
|
||
console.log('setatts');
|
||
console.log(setatts);
|
||
setAttrs(setatts);
|
||
});
|
||
|
||
});
|
||
|
||
on("change:deck-systemrating change:matrix-iconstatus change:deck-activemem change:deck-utilitypayload change:deck-util-size-loaded change:deck-util-rating-loaded", function() {
|
||
getatts=["deck-systemrating", "matrix-iconstatus", "deck-activemem", "deck-utilitypayload", "deck-util-size-loaded", "deck-util-rating-loaded"];
|
||
getAttrs(getatts, function(myval) {
|
||
let myoverloaded = 0;
|
||
let myratingoload = 0;
|
||
if ( parseInt(myval["deck-util-size-loaded"]) > parseInt(myval["deck-activemem"]) ) {
|
||
myoverloaded=1;
|
||
}
|
||
if ( parseInt(myval["deck-util-rating-loaded"]) > parseInt(myval["deck-utilitypayload"]) ) {
|
||
myratingoload=1;
|
||
}
|
||
console.log('load:' + myoverloaded);
|
||
setAttrs({"deck-mem-overloaded": myoverloaded, "deck-util-overloaded": myratingoload});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:deck-systemrating change:matrix-iconstatus change:matrixsecurityrating", function() {
|
||
getAttrs(["deck-systemrating","matrix-iconstatus", "matrixsecurityrating"], function(myval) {
|
||
sets={};
|
||
var mytn=0;
|
||
const rating=myval["deck-systemrating"].toUpperCase();
|
||
const icon=myval["matrix-iconstatus"];
|
||
const secrat=myval["matrixsecurityrating"];
|
||
if ( rating != "UNKNOWN") sets["deck-tn"]=matrixtn[rating][icon];
|
||
console.log('debug sec rat ' + secrat);
|
||
sets["iconstatuscode"]=(icon == "Legitimate")? 0 : (secrat > 0)? 0 : 1 ;
|
||
console.log(sets)
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
on("change:matrixcode", function() {
|
||
console.log('matrixsecuritynumber')
|
||
getAttrs(["matrixcode"], function (myvar) {
|
||
const rating=myvar["matrixcode"].toUpperCase();
|
||
sets={};
|
||
sets["matrixsecuritynumber"]=matrixtn[rating]["secrating"];
|
||
console.log(sets)
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
|
||
on("change:deckattacklevel", function() {
|
||
const multipliers={L:2, M:3, S:4, D:5};
|
||
getAttrs(["deckattacklevel"], function(myval) {
|
||
const mylevel=myval["deckattacklevel"];
|
||
console.log('test level: ' + multipliers[mylevel]);
|
||
setAttrs({"deckattack-multiplier": multipliers[mylevel]});
|
||
});
|
||
});
|
||
|
||
on('clicked:repeating_ic:combat', (info) => {
|
||
if (!("yes" in lang)) geti18n();
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
gets=["matrixcode"];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
gets.push(myrepeat.concat("icrating"));
|
||
gets.push(myrepeat.concat("ictargettest"));
|
||
gets.push(myrepeat.concat("icname"));
|
||
gets.push(myrepeat.concat("ictype"));
|
||
gets.push(myrepeat.concat("ic-penalty"));
|
||
gets.push(myrepeat.concat("matrix-iconstatus"));
|
||
getAttrs(gets, function (myval) {
|
||
var myroll;
|
||
var myatt="@{target|" + lang["target"] +"|deck-evasion-final}";
|
||
const name=myval[myrepeat.concat("icname")];
|
||
const ictype=myval[myrepeat.concat("ictype")];
|
||
const penalty=parseInt(myval[myrepeat.concat("ic-penalty")]);
|
||
const targeticon=myval[myrepeat.concat("matrix-iconstatus")];
|
||
var icmode = "proactive";
|
||
if ( iclist["reactive"].includes(ictype)) icmode="reactive";
|
||
const code=myval["matrixcode"].toUpperCase();
|
||
const rating=parseInt(myval[myrepeat.concat("icrating")]);
|
||
var ictest=myval[myrepeat.concat("ictargettest")];
|
||
var targetatt="bod";
|
||
if ( (icmode=="proactive") && (ictest.includes("target")) ) targetatt=ictest.split("-")[1];
|
||
const attacktn =matrixtn[code][targeticon];
|
||
var senddata="{{senddata=[[0]]}}";
|
||
var action=lang["attack"];
|
||
if ( icmode=="proactive" ) {
|
||
myroll="&{template:matrix}{{myname=" + name + "}}";
|
||
myroll+="{{iconstatus=[[@{target|" + lang["decker"] +"|iconstatuscode}]]}}";
|
||
myroll +="{{attack=yes}}";
|
||
ictest=0;
|
||
} else {
|
||
myroll="/w gm &{template:matrix}{{myname=" + name + "}}";
|
||
myroll +="{{basic=yes}}";
|
||
myroll += "{{sensor=[[[[@{target|" + lang["decker"] + "|deck-sensors-final}]]d6>[[" + rating + " + @{target|" + lang["decker"] + "|matrix-penalty} ]]!!]]}}";
|
||
ictest="?{" + lang["utility-rating"] + "?|6}";
|
||
}
|
||
const payload = {
|
||
wdmg: matrixtn[code]["wdmg"],
|
||
attacker: name,
|
||
power: rating,
|
||
attribute: "deck-" + targetatt + "-final",
|
||
attacktype: ictype
|
||
};
|
||
var target="{{target=@{target|" + lang["target"] +"|token_name}}}";
|
||
if ( mytitle == "Evade Detection" ) myatt = "@{target|" + lang["target"] +"|deck-sensors-final}";
|
||
if ( mytitle == "IC Resist" ) myatt = "?{" + lang["attack-power"] +"?|2}";
|
||
if ( mytitle == "IC Resist" ) target = "{{target=" + name + "}}";
|
||
if ( mytitle == "IC Execute" ) {
|
||
myatt = ictest;
|
||
target="{{target=@{target|" + lang["decker"] + "|token_name}}}";
|
||
}
|
||
var calcTN= myatt + " +?{" + lang["miscellaneous-modifiers"] + "|0} + " + penalty;
|
||
var calcDice="@{matrixsecurityrating}"
|
||
if (( ictype == "Probe") || (ictype == "Scramble")) calcDice=rating;
|
||
myroll+=target;
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{basetn=[[" + myatt + "]]}}";
|
||
myroll+="{{action=" + action + "}}"
|
||
myroll+="{{roll= [[ [[" + calcDice + "]]d6>[[ {2,(" + calcTN + ")}kh1]]!! ]] }}"
|
||
if ( icmode=="proactive" ) {
|
||
myroll+="{{wdmg=[[" + matrixtn[code]["wdmg"] + "]]}}";
|
||
myroll+=senddata;
|
||
}
|
||
if ( ictype == "Probe") {
|
||
myroll += "{{target=@{target|" + lang["decker"] + "|token_name}}}";
|
||
myroll += "{{targetnumber=[[@{target|" + lang["decker"] + "|deck-detection-final}]]}}";
|
||
myroll += "{{action=" + lang["probe"] + "}}";
|
||
myroll += "{{basetn=[[0]]}}";
|
||
myroll += "{{rolldice=[[ " + rating + "]]}}";
|
||
myroll += "{{roll=[[[[" + rating +" ]]d6>[[ @{target|" + lang["decker"] + "|deck-detection-final} + " + penalty +"]]!!]]}}";
|
||
}
|
||
if (( ictype == "Tar Baby") || (ictype == "Tar pit")) {
|
||
myroll += "{{target=@{target|" + lang["decker"] + "|token_name}}}";
|
||
myroll += "{{targetnumber=[[?{" + lang["utility-rating"] + "?|4}]]}}";
|
||
myroll += "{{action=" + name + " Test}}";
|
||
myroll += "{{basetn=[[0]]}}";
|
||
myroll += "{{rolldice=[[ " + rating + "]]}}";
|
||
myroll += "{{roll=[[[[" + rating +" ]]d6>[[?{" + lang["utility-rating"] + "?} + " + penalty +"]]!!]]}}";
|
||
myroll += "{{oppose=[[[[?{" + lang["utility-rating"] + "?}]]d6>[[" + rating + " @{target|" + lang["decker"] + "|matrix-penalty}]]!!]]}}";
|
||
}
|
||
console.log(myroll);
|
||
const finalwdmg=(iclist["attack"].includes(ictype))? damagetable[matrixtn[code]["wdmg"]] : "";
|
||
console.log('finalwdmg: ' + finalwdmg);
|
||
startRoll(myroll, (results) => {
|
||
if ( icmode=="proactive" ) {
|
||
let iconstat=results.results.iconstatus.result;
|
||
const iconstatus =( results.results.iconstatus.result == 0 )? "Legitimate" : "Intruder";
|
||
const finaltn = results.results.targetnumber.result + matrixtn[code][iconstatus];
|
||
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
|
||
console.log('final tn ' + finaltn);
|
||
console.log('dice : ' + results.results.roll.dice);
|
||
console.log('finaldice : ' + finaldice);
|
||
payload["basetn"]=finaltn;
|
||
payload["attacktest"]=finaldice;
|
||
finishRoll( results.rollId,
|
||
{
|
||
wdmg: finalwdmg,
|
||
targetnumber: finaltn,
|
||
roll: finaldice,
|
||
senddata: rollEscape.escape(payload),
|
||
});
|
||
} else {
|
||
payload["basetn"]=results.results.basetn.result;
|
||
payload["attacktest"]=results.results.roll.result;
|
||
finishRoll( results.rollId,
|
||
{
|
||
wdmg: finalwdmg,
|
||
senddata: rollEscape.escape(payload),
|
||
});
|
||
}
|
||
});
|
||
});
|
||
|
||
});
|
||
|
||
on("clicked:deck-utilities-unloadall", function() {
|
||
utilatts=[];
|
||
utilrepeatatts=[];
|
||
offenserepeatatts=[];
|
||
defenserepeatatts=[];
|
||
utilitylist.forEach(util=>{
|
||
let myattr=util.concat("-loaded");
|
||
utilatts[myattr]=0;
|
||
});
|
||
console.log('utilatts');
|
||
console.log(utilatts);
|
||
setAttrs(utilatts);
|
||
/* setAttrs(utilatts); */
|
||
deckutilrepeat.forEach(rsection=>{
|
||
getSectionIDs(rsection, function(idarray) {
|
||
console.log(rsection);
|
||
var myatts=[];
|
||
idarray.forEach((m, id) => {
|
||
let myrepeat="repeating_" + rsection +"_" + m + "_loaded";;
|
||
myatts[myrepeat]=0;
|
||
});
|
||
console.log(rsection);
|
||
console.log(myatts);
|
||
setAttrs(myatts);
|
||
});
|
||
});
|
||
var finalatts=[];
|
||
finalatts["deck-util-size-loaded"]=0;
|
||
finalatts["deck-util-rating-loaded"]=0;
|
||
setAttrs(finalatts);
|
||
|
||
});
|
||
|
||
|
||
on("sheet:opened change:eccm-fluxmod change:rcdeck-fluxmod", function() {
|
||
getAttrs(["eccm-fluxmod", "rcdeck-fluxmod"], function (myval) {
|
||
const mysystems = ["eccm", "rcdeck"];
|
||
myset={};
|
||
var myrange=0;
|
||
mysystems.forEach(mysys => {
|
||
let mod = mysys.concat("-fluxmod");
|
||
let range = mysys.concat("-range");
|
||
let myflux = (myval[mod])
|
||
if ( myflux == 0 ) myrange=.25;
|
||
if ( myflux == 1 ) myrange=1;
|
||
if ( myflux == 2 ) myrange=2;
|
||
if ( myflux == 3 ) myrange=4;
|
||
if ( myflux == 4 ) myrange=6;
|
||
if ( myflux == 5 ) myrange=9;
|
||
if ( myflux == 6 ) myrange=12;
|
||
if ( myflux == 7 ) myrange=16;
|
||
if ( myflux == 8 ) myrange=20;
|
||
if ( myflux == 9 ) myrange=25;
|
||
if ( myflux >= 10 ) myrange= ( 2 * myflux ) + 10;
|
||
myset[range] = myrange;
|
||
});
|
||
setAttrs(myset);
|
||
|
||
});
|
||
});
|
||
|
||
on("change:sensors-rating change:body change:sonar-rating change:ecm-rating change:eccm-rating change:ed-rating change:ecd-rating", function(){
|
||
getAttrs(["sensors-rating", "body", "sonar-rating", "ecm-rating", "eccm-rating", "ed-rating", "ecd-rating"], function (myval) {
|
||
var sensorflux = Math.ceil(parseInt(myval["sensors-rating"]) *1.5);
|
||
var sensormax = sensorflux + Math.floor(parseInt(myval["body"])/2);
|
||
var sonarflux = Math.ceil(parseInt(myval["sonar-rating"]) *1.5);
|
||
var sonarmax = sonarflux + Math.floor(parseInt(myval["body"])/2);
|
||
var ecmflux = Math.ceil(parseInt(myval["ecm-rating"]) *1.5);
|
||
var ecmmax = ecmflux + Math.floor(parseInt(myval["body"])/2);
|
||
var eccmflux = Math.ceil(parseInt(myval["eccm-rating"]) *1.5);
|
||
var eccmmax = eccmflux + Math.floor(parseInt(myval["body"])/2);
|
||
var edflux = Math.ceil(parseInt(myval["ed-rating"]) *1.5);
|
||
var edmax = edflux + Math.floor(parseInt(myval["body"])/2);
|
||
var ecdflux = Math.ceil(parseInt(myval["ecd-rating"]) *1.5);
|
||
var ecdmax = ecdflux + Math.floor(parseInt(myval["body"])/2);
|
||
setAttrs({"sensors-flux": sensorflux, "sensors-fluxmax": sensormax, "ecm-flux": ecmflux, "ecm-fluxmax": ecmmax, "eccm-flux": eccmflux, "eccm-fluxmax": eccmmax, "ed-flux": edflux, "ed-fluxmax": edmax, "ecd-flux": ecdflux, "ecd-fluxmax": ecdmax, "sonar-flux": sonarflux, "sonar-fluxmax": sonarmax, "sensors-fluxmod": sensorflux, "sonar-fluxmod": sonarflux, "ecm-fluxmod": ecmflux, "eccm-fluxmod": eccmflux, "ed-fluxmod": edflux, "ecd-fluxmod": ecdflux});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:sensors-fluxmod change:sonar-fluxmod change:ecm-fluxmod change:eccm-fluxmod change:ed-fluxmod change:ecd-fluxmod change:body change:ecd-enabled", function () {
|
||
getAttrs(["sensors-fluxmod", "sonar-fluxmod", "ecm-fluxmod", "eccm-fluxmod", "ed-fluxmod", "ecd-fluxmod", "sensors-flux", "sonar-flux", "ecm-flux", "eccm-flux", "ed-flux", "ecd-flux", "body", "ecd-enabled"], function (myval) {
|
||
var overload=0;
|
||
var sensor=Math.max(0,myval["sensors-fluxmod"] - myval["sensors-flux"] );
|
||
var sonar=Math.max(0,myval["sonar-fluxmod"] - myval["sonar-flux"] );
|
||
var ecm=Math.max(0,myval["ecm-fluxmod"] - myval["ecm-flux"] );
|
||
var eccm=Math.max(0,myval["eccm-fluxmod"] - myval["eccm-flux"] );
|
||
var ed=Math.max(0,myval["ed-fluxmod"] - myval["ed-flux"] );
|
||
var ecd=Math.max(0,myval["ecd-fluxmod"] - myval["ecd-flux"] );
|
||
var total=sensor + sonar + ecm + eccm + ed + ecd;
|
||
var maxflux = parseInt(myval["body"]) - parseInt(myval["ecd-enabled"]);
|
||
if ( total > maxflux ) overload=1;
|
||
setAttrs({"vehicle-fluxtotal": total, "vehicle-flux-max": maxflux, "vehicle-flux-overload": overload});
|
||
});
|
||
});
|
||
|
||
on("change:vehicle-autonav change:autonav", function(){
|
||
getAttrs(["vehicle-autonav", "autonav"], function (myval) {
|
||
var autonav=0;
|
||
if (myval["vehicle-autonav"] == "0") autonav=0;
|
||
if (myval["vehicle-autonav"] == "1") autonav=myval["autonav"];
|
||
setAttrs({"driving-test-autonav": autonav});
|
||
});
|
||
});
|
||
on("change:vehicle-offroad change:handling-street change:handling-offroad", function(){
|
||
getAttrs(["vehicle-offroad", "handling-street", "handling-offroad"], function (myval) {
|
||
var handling=0;
|
||
if (myval["vehicle-offroad"] == "0") handling=myval["handling-street"];
|
||
if (myval["vehicle-offroad"] == "1") handling=myval["handling-offroad"];
|
||
console.log('handling set to ' + handling);
|
||
setAttrs({"handling": handling});
|
||
});
|
||
});
|
||
|
||
on("change:vehicle-size", function(){
|
||
getAttrs(["vehicle-size"], function (myval) {
|
||
var size=0;
|
||
if (myval["vehicle-size"] == "Large") size=2;
|
||
if (myval["vehicle-size"] == "Extra-Large") size=3;
|
||
setAttrs({"driving-test-size": size});
|
||
});
|
||
});
|
||
|
||
on("change:rigger", function(){
|
||
getAttrs(["rigger"], function (myval) {
|
||
var mydriver="@{";
|
||
mydriver=mydriver.concat(myval["rigger"]);
|
||
mydriver=mydriver.concat("|");
|
||
setAttrs({"vehicle-driver": mydriver});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:vehicle-urban change:gunnery-test-los", function () {
|
||
getAttrs(["vehicle-urban", "gunnery-test-los"], function(myval) {
|
||
var sensorgun=(myval["vehicle-urban"] * 2 ) + myval["gunnery-test-los"];
|
||
console.log('sensor gunnery tn mods' + sensorgun);
|
||
setAttrs({"sensor-gunnery-tn": sensorgun });
|
||
});
|
||
});
|
||
|
||
on("change:speed-current change:speed-rating change:vehicle-penalty", function() {
|
||
getAttrs(["speed-current", "speed-rating", "vehicle-penalty"], function(myval) {
|
||
let speed=parseInt(myval["speed-current"]);
|
||
let speedrating=parseInt(myval["speed-rating"]);
|
||
var kph = Math.ceil(speedrating * 1.2);
|
||
var sp = Math.floor(speed / 10);
|
||
var exceed=0;
|
||
if (myval["vehicle-penalty"] == "2") speedrating=Math.ceil(speedrating*0.75);
|
||
if (myval["vehicle-penalty"] == "3") speedrating=Math.ceil(speedrating*0.50);
|
||
if (speed > speedrating ) {
|
||
exceed=1;
|
||
} else {
|
||
exceed=0;
|
||
}
|
||
let maxspeed=speedrating*1.5;
|
||
setAttrs({"speed-points": sp, "speed-kph": kph, "speed-exceeding": exceed, "speed-max": maxspeed});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:vehicle-skill change:gunnery change:drone_mode change:pilot", function() {
|
||
getAttrs(["gunnery", "pilot", "drone_mode", "vehicle-skill"], function(myval) {
|
||
var mygunnery=myval["gunnery"];
|
||
var myskill=myval["vehicle-skill"];
|
||
if ( myval["drone_mode"] == "secondary" ) {
|
||
mygunnery=myval["pilot"];
|
||
myskill=myval["pilot"];
|
||
}
|
||
console.log('setting weapon skill to gunnery');
|
||
setAttrs({"weaponskill": mygunnery, "vehicle-skill-final": myskill});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:rcdeck-intrusion-mods change:ewarfare", function () {
|
||
getAttrs(["rcdeck-intrusion-mods", "ewarfare"], function (myval) {
|
||
let myfinal=parseInt(myval["rcdeck-intrusion-mods"]) + parseInt(myval["ewarfare"]);
|
||
setAttrs({"rcdeck-intrusion-factor": myfinal});
|
||
});
|
||
});
|
||
|
||
on("change:sensor-los", function(){
|
||
const sensorlosmods={
|
||
direct: {sensor: -1, gunnery: -3 },
|
||
interupted: {sensor: 0, gunnery: 0}
|
||
};
|
||
getAttrs(["sensor-los"], function (myval) {
|
||
var sets={};
|
||
const los=myval["sensor-los"].toLowerCase();
|
||
console.log('los is: ' + los);
|
||
sets["sensor-test-los"]=sensorlosmods[los]["sensor"];
|
||
sets["gunnery-test-los"]=sensorlosmods[los]["gunnery"];
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
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) {
|
||
const vi=myval["vehicle-interface"];
|
||
var sets={};
|
||
const interfaces={
|
||
none: { react: 0, init: 0, action: 0, driving: 0},
|
||
datajack: { react: 1, init: 0, action: 0, driving: 1 },
|
||
vcr: { react: "(@{vehicle-driver}vcr} * 2)", init: "@{vehicle-driver}vcr}", action: "(@{vehicle-driver}vcr} * 2)", driving: "@{vehicle-driver}vcr}" }
|
||
};
|
||
console.log('interfaces test: ' + interfaces[vi]["react"]);
|
||
sets["vehicle-reactbonus"]=interfaces[vi]["react"]
|
||
sets["vehicle-initbonus"]=interfaces[vi]["init"];
|
||
sets["vehicle-actionbonus"]=interfaces[vi]["action"];
|
||
sets["driving-test-interface"]=interfaces[vi]["driving"];
|
||
console.log(sets);
|
||
setAttrs(sets)
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:weather", function(){
|
||
getAttrs(["weather"], function (myval) {
|
||
var sets={};
|
||
const weather=myval["weather"].toLowerCase();
|
||
const weathermod={
|
||
normal: { driving:0, sensor:0},
|
||
bad: { driving:2, sensor:1},
|
||
terrible: { driving:4, sensor:1},
|
||
windy: { driving:2, sensor:0},
|
||
snow: { driving:2, sensor:1},
|
||
rain: { driving:2, sensor:1},
|
||
fog: { driving:2, sensor:1},
|
||
smog: { driving:2, sensor:1},
|
||
"heavy wind": { driving:4, sensor:0},
|
||
"thunderstorm": { driving:4, sensor:1}
|
||
};
|
||
sets["driving-test-weather"]=weathermod[weather]["driving"];
|
||
sets["sensor-test-weather"]=weathermod[weather]["sensor"];
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
on("change:terrain", function(){
|
||
sets={};
|
||
const terrainmods={
|
||
open: { driving: -1, sensor: 0, terrainpoints: 0, accelerate: -1, position: -1, ram: -1, hide: 4, relocate: -3, crash: -1, gunnery: 0},
|
||
normal: { driving: 0, sensor: 0, terrainpoints: -2, accelerate: 0, position: 0, ram: 0, hide: 2, relocate: -1, crash: 0, gunnery: 0},
|
||
restricted: { driving: 1, sensor: 0, terrainpoints: -4, accelerate: 1, position: 1, ram: 1, hide: 0, relocate: 0, crash: 2, gunnery: 2},
|
||
tight: { driving: 3, sensor: 1, terrainpoints: -10, accelerate: 3, position: 3, ram: 2, hide: -2, relocate: 3, crash: 4, gunnery: 3}
|
||
};
|
||
getAttrs(["terrain"], function (myval) {
|
||
const terrain=myval["terrain"].toLowerCase();
|
||
sets["driving-test-terrain"]=terrainmods[terrain]["driving"];
|
||
sets["sensor-test-terrain"]=terrainmods[terrain]["sensor"];
|
||
sets["driving-ab-terrain"]=terrainmods[terrain]["accelerate"];
|
||
sets["driving-position-terrain"]=terrainmods[terrain]["position"];
|
||
sets["driving-ram-terrain"]=terrainmods[terrain]["ram"];
|
||
sets["driving-hide-terrain"]=terrainmods[terrain]["hide"];
|
||
sets["driving-relocate-terrain"]=terrainmods[terrain]["relocate"];
|
||
sets["driving-crash-terrain"]=terrainmods[terrain]["crash"];
|
||
sets["terrain-points"]=terrainmods[terrain]["terrainpoints"];
|
||
sets["terrain-manual-gunnery"]=terrainmods[terrain]["gunnery"];
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
on("clicked:vehicleset", function(){
|
||
getAttrs(["vehicle-rapid-attributes"], function (myval) {
|
||
const [hand, speed, accel, body, armor, sig, auto, pilot, sensor, cargo, load] = myval["vehicle-rapid-attributes"].split(" ")
|
||
var [on, off] = hand.split("/");
|
||
if (off == null ) off =on;
|
||
setAttrs({"handling-street": on, "handling-offroad": off, "speed-rating": speed, "acceleration": accel, "body": body, "armor": armor, "signature": sig, "autonav": auto, "pilot": pilot, "sensors-rating": sensor, "cargo": cargo, "load": load });
|
||
console.log('on is ' + on + ' off is ' + off)
|
||
});
|
||
|
||
});
|
||
|
||
|
||
on("clicked:matrixsystemset", function(){
|
||
getAttrs(["matrixsystemset"], function (myval) {
|
||
setmatrixsystem(myval["matrixsystemset"]);
|
||
});
|
||
});
|
||
|
||
var setmatrixsystem = function (rating) {
|
||
console.log(rating);
|
||
atts=[];
|
||
const [mycode, myrating] = rating.split("-")
|
||
console.log('mycode:' + mycode + ' myrating ' + myrating);
|
||
let finalcode = mycode.toUpperCase()
|
||
const [system, access, control, index, files, slave ] = myrating.split("/")
|
||
atts["character_name"]=rating;
|
||
atts["matrixcode"]=finalcode;
|
||
atts["matrixsecurityrating"]=system;
|
||
atts["matrixcontrolrating"]=control;
|
||
atts["matrixaccessrating"]=access;
|
||
atts["matrixindexrating"]=index;
|
||
atts["matrixfilesrating"]=files;
|
||
atts["matrixslaverating"]=slave;
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
};
|
||
|
||
on("sheet:opened changed:api-newsheet", function(){
|
||
getAttrs(["first_time"], function(myval){
|
||
if (myval.first_time != "false") {
|
||
console.log('running firstime');
|
||
updateWoundPenalty();
|
||
updateStunPenalty();
|
||
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)});
|
||
}
|
||
});
|
||
});
|
||
|
||
const visionmods = {
|
||
elf: {normal: 0, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4},
|
||
dryad: {normal: 0, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4},
|
||
nightone: {normal: 0, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4},
|
||
wakyambi: {normal: 0, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4},
|
||
ork: {normal: 0, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4},
|
||
satyr: {normal: 0, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4},
|
||
oni: {normal: 0, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4},
|
||
hobgoblin: {normal: 0, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4},
|
||
troll: {normal: 0, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6},
|
||
minotaur: {normal: 0, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6},
|
||
giant: {normal: 0, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6},
|
||
fomori: {normal: 0, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6},
|
||
dwarf: {normal: 0, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6},
|
||
gnome: {normal: 0, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6},
|
||
menehune: {normal: 0, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6},
|
||
human: {normal: 0, fulldark: 8, minlight: 6, partiallight: 2, glare: 2, mist: 2, lightsmoke: 4, fullsmoke: 6, thermalsmoke: 4},
|
||
ogre: {normal: 0, fulldark: 8, minlight: 6, partiallight: 2, glare: 2, mist: 2, lightsmoke: 4, fullsmoke: 6, thermalsmoke: 4},
|
||
cyclops: {normal: 0, fulldark: 8, minlight: 6, partiallight: 2, glare: 2, mist: 2, lightsmoke: 4, fullsmoke: 6, thermalsmoke: 4},
|
||
koborokuru: {normal: 0, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6},
|
||
lowlight: {normal: 0, fulldark: 8, minlight: 4, partiallight: 1, glare: 4, mist: 2, lightsmoke: 4, fullsmoke: 6, thermalsmoke: 4},
|
||
thermal: {normal: 0, fulldark: 4, minlight: 4, partiallight: 2, glare: 4, mist: 0, lightsmoke: 0, fullsmoke: 1, thermalsmoke: 8},
|
||
cybernetic: {normal: 0, fulldark: 8, minlight: 6, partiallight: 2, glare: 2, mist: 2, lightsmoke: 4, fullsmoke: 6, thermalsmoke: 4},
|
||
ultrasound: {normal: 0, fulldark: 4, minlight: 3, partiallight: 1, glare: 1, mist: 1, lightsmoke: 2, fullsmoke: 3, thermalsmoke: 2}
|
||
};
|
||
|
||
on("change:metatype change:visionenhancement change:visibility", function() {
|
||
getAttrs(["metatype", "visionenhancement", "visibility"], function(myval){
|
||
sets={};
|
||
const metatype=myval["metatype"].toLowerCase();
|
||
const vision=myval["visionenhancement"].toLowerCase();
|
||
const visattr=myval["visibility"];
|
||
const visibility = (visattr == 0)? "normal" : visattr.match(/{(.*)}/)[1];
|
||
const rangedvizmods=(vision != "none")? visionmods[vision][visibility] : visionmods[metatype][visibility];
|
||
const meleevizmods=(rangedvizmods !=8 )? Math.floor(rangedvizmods/2) : 8;
|
||
sets["rangedvizTN"]=rangedvizmods;
|
||
sets["meleevizTN"]=meleevizmods;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
on("change:metatype", function(){
|
||
getAttrs(["metatype"], function(myval){
|
||
console.log(myval.metatype)
|
||
setattributelimits(myval.metatype);
|
||
});
|
||
});
|
||
|
||
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:reloadmethod change:repeating_rangedweapons:reloads change:repeating_rangedweapons:ammotype change:repeating_rangedweapons:ammoremain change:repeating_rangedweapons:ammo change:repeating_rangedweapons:type change:repeating_rangedweapons:weight change:repeating_rangedweapons:load", function(eventinfo){
|
||
getAttrs(["repeating_rangedweapons_reloadmethod", "repeating_rangedweapons_reloads", "repeating_rangedweapons_ammotype", "repeating_rangedweapons_ammoremain", "repeating_rangedweapons_ammo", "repeating_rangedweapons_type", "repeating_rangedweapons_weight", "repeating_rangedweapons_load"], function(myval) {
|
||
console.log(myval);
|
||
const sets={};
|
||
const wtype=myval["repeating_rangedweapons_type"];
|
||
const myload=myval["repeating_rangedweapons_load"];
|
||
const single=["break", "magazine", "cylinder"];
|
||
const multi=["clip", "belt", "speed-loader"];
|
||
const arrows=["Bow", "Heavy Crossbow", "Light Crossbow", "Medium Crossbow"];
|
||
const individual=["Nets", "Shuriken", "Thrown Knife", "Caltrops"];
|
||
const method=myval["repeating_rangedweapons_reloadmethod"];
|
||
const reloads=parseInt(myval["repeating_rangedweapons_reloads"]);
|
||
const type=myval["repeating_rangedweapons_ammotype"];
|
||
const remaining=parseInt(myval["repeating_rangedweapons_ammoremain"]);
|
||
const baseweight=parseFloat(myval["repeating_rangedweapons_weight"]);
|
||
const max=parseInt(myval["repeating_rangedweapons_ammo"]);
|
||
let reloadtotal = (single.includes(method))? reloads : reloads * max;
|
||
var aweight = (arrows.includes(wtype))? .01 : (wtype=="Assault Cannon")? .125 : (wtype=="Speargun")? 1 : ( type in ammomods )? ammomods[type]["weight"] : .1;
|
||
if (wtype == "Net Gun") {
|
||
aweight = ( type=="regular")? 5 : ( type in ammomods )? ammomods[type]["weight"] : 5;
|
||
}
|
||
if ((wtype=="Gyrojet (land)") || (wtype=="Gyrojet (water)")) {
|
||
aweight = ( type=="regular")? .175 : ( type in ammomods )? ammomods[type]["weight"] : .175;
|
||
}
|
||
|
||
console.log('aweight ' + aweight);
|
||
var finalweight = (individual.includes(wtype))? remaining * baseweight : Number(((aweight * (remaining + reloadtotal))).toFixed(2));
|
||
sets["repeating_rangedweapons_ammoweight"]=(individual.includes(wtype))? myload * remaining * baseweight : Number((myload * aweight * (remaining + reloadtotal)).toFixed(2));
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
on("change:repeating_rangedweapons:firemode", function(eventinfo){
|
||
getAttrs(["repeating_rangedweapons_firemode", "repeating_rangedweapons_name", "repeating_rangedweapons_targeting"], function(myval) {
|
||
const firemode=myval["repeating_rangedweapons_firemode"];
|
||
const weapon=myval["repeating_rangedweapons_name"];
|
||
const targeting=myval["repeating_rangedweapons_targeting"];
|
||
var myroll="/w gm &{template:info}{{character=@{character_name}}}{{type=Switched Weapon " + weapon + " to " + firemode + " firing mode }}";
|
||
if ( targeting == -2 ) myroll += "{{action=Free}}";
|
||
else myroll += "{{action=" + lang["simple"] + "}}";
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
});
|
||
on("change:repeating_rangedweapons:primary-ranged-equipped change:repeating_rangedweapons:secondary-ranged-equipped", function(eventinfo){
|
||
const myweapon=eventinfo.sourceAttribute
|
||
console.log(myweapon);
|
||
setatts=[];
|
||
var mybase=myweapon.split("_");
|
||
var myattr=mybase.pop();
|
||
const myrepeat=mybase.join('_');
|
||
const r1equipped=myrepeat.concat("_primary-ranged-equipped");
|
||
const r2equipped=myrepeat.concat("_secondary-ranged-equipped");
|
||
getatts=[myweapon, r1equipped, r2equipped, "rangedselected", "ranged2selected"]
|
||
getAttrs(getatts, function(myval) {
|
||
console.log('myatt ' + myattr);
|
||
console.log('values');
|
||
console.log(myval);
|
||
const lastused=myval["rangedselected"];
|
||
const lastused2=myval["ranged2selected"];
|
||
if (myval[myweapon] == "on") {
|
||
if ( myattr == "primary-ranged-equipped" ) {
|
||
console.log('in ranged1');
|
||
if ( myval[r2equipped] == "on" ) {
|
||
console.log('equipeed as secondary');
|
||
setatts[r2equipped]=0;
|
||
}
|
||
setatts["rangedselected"]=myweapon;
|
||
setatts[lastused]=0;
|
||
} else if ( myattr == "secondary-ranged-equipped" ) {
|
||
console.log('in ranged2');
|
||
if ( myval[r1equipped] == "on" ) {
|
||
console.log('equipeed as primary');
|
||
setatts[r1equipped]=0;
|
||
}
|
||
setatts["ranged2selected"]=myweapon;
|
||
setatts[lastused2]=0;
|
||
setatts["dualwield"]=2;
|
||
} else {
|
||
console.log('wrong event for ' + myattr);
|
||
}
|
||
console.log(setatts);
|
||
} else if ( myval[myweapon] == 0 ) {
|
||
console.log(' weapon unselected');
|
||
if (( myattr == "primary-ranged-equipped" ) && ( lastused == myweapon )) {
|
||
setatts["rangedselected"]="None";
|
||
} else if ( ( myattr == "secondary-ranged-equipped" ) && ( lastused2 == myweapon )) {
|
||
setatts["ranged2selected"]="None";
|
||
setatts["dualwield"]=0;
|
||
}
|
||
}
|
||
setAttrs(setatts);
|
||
});
|
||
});
|
||
|
||
on("change:repeating_meleeweapons:meleeequiped change:repeating_meleeweapons:2ndmeleeequiped change:unarmed-equipped change:weaponfocus-equipped", function(eventinfo){
|
||
const myweapon=eventinfo.sourceAttribute
|
||
console.log(myweapon);
|
||
setatts=[];
|
||
var getatts=["meleeselected"]
|
||
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"];
|
||
if ( ue == "on" ) {
|
||
if ( m1 != "unarmed-equipped" ) setatts[m1]=0;
|
||
setatts["meleeselected"]="unarmed-equipped";
|
||
setatts["meleereach"]=0;
|
||
setAttrs(setatts);
|
||
}
|
||
});
|
||
} else if ( myweapon == "weaponfocus-equipped" ) {
|
||
console.log('weaponfocus' );
|
||
getatts.push("weaponfocus-equipped");
|
||
getatts.push("weaponfocus-reach");
|
||
getAttrs(getatts, function(myval) {
|
||
const ue = myval["weaponfocus-equipped"];
|
||
console.log('ue: ' + ue);
|
||
const m1 = myval["meleeselected"];
|
||
if ( ue == "on" ) {
|
||
if ( m1 != "weaponfocus-equipped" ) setatts[m1]=0;
|
||
setatts["meleeselected"]="weaponfocus-equipped";
|
||
setatts["meleereach"]=myval["weaponfocus-reach"];
|
||
setAttrs(setatts);
|
||
}
|
||
});
|
||
|
||
} else {
|
||
var mybase=myweapon.split("_");
|
||
var myattr=mybase.pop();
|
||
const myrepeat=mybase.join('_');
|
||
const reach=myrepeat.concat("_reach");
|
||
const m1equipped=myrepeat.concat("_meleeequiped");
|
||
getatts.push(myweapon, reach, m1equipped);
|
||
getAttrs(getatts, function(myval) {
|
||
console.log('myatt ' + myattr);
|
||
console.log('values');
|
||
console.log(myval);
|
||
const lastused=myval["meleeselected"];
|
||
if (myval[myweapon] == "on") {
|
||
if ( myattr == "meleeequiped" ) {
|
||
console.log('in melee1');
|
||
setatts["meleeselected"]=myweapon;
|
||
setatts[lastused]=0;
|
||
setatts["meleereach"]=myval[reach];
|
||
} 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"]="unarmed-equipped";
|
||
setatts["unarmed-equipped"]="on";
|
||
}
|
||
}
|
||
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:dermal-armor change:repeating_armor:equipped change:repeating_armor:ballistic change:repeating_armor:impact", function(eventinfo){
|
||
var sets={};
|
||
var ballistic=0;
|
||
var impact=0;
|
||
var armorval={"body-bal": [0,0], "body-im": [0,0], "helmet-bal": [0], "helmet-im": [0], "shield-bal": [0], "shield-im": [0], "ware-bal": [0], "ware-im": [0], "gyro-bal": [0], "gyro-im": [0], "magic-bal": [0], "magic-im": [0]};
|
||
fields=["equipped", "ballistic", "impact", "slot"];
|
||
getSectionIDs("repeating_armor", idArray => {
|
||
var attrArray = idArray.reduce((m, id) => [ ...m, ...(fields.map(field => `repeating_armor_${id}_${field}`))], []);
|
||
attrArray.push("quickness_max","dermal-armor");
|
||
getAttrs(attrArray, function(myval) {
|
||
console.log('myval');
|
||
console.log(myval);
|
||
console.log(idArray);
|
||
const myquick=parseInt(myval["quickness_max"]);
|
||
const mydermal=parseInt(myval["dermal-armor"]);
|
||
idArray.forEach(m => {
|
||
if (myval["repeating_armor_" + m + "_equipped"] == "on" ) {
|
||
let bal=myval["repeating_armor_" + m + "_slot"] + "-bal";
|
||
let imp=myval["repeating_armor_" + m + "_slot"] + "-im";
|
||
armorval[bal].push(parseInt(myval["repeating_armor_" + m + "_ballistic"]));
|
||
armorval[imp].push(parseInt(myval["repeating_armor_" + m + "_impact"]));
|
||
}
|
||
});
|
||
console.log(armorval);
|
||
let shield_bal=Math.max(...armorval["shield-bal"]);
|
||
let shield_im=Math.max(...armorval["shield-im"]);
|
||
let gyro_bal=Math.max(...armorval["gyro-bal"]);
|
||
let gyro_im=Math.max(...armorval["gyro-im"]);
|
||
let helmet_bal=Math.max(...armorval["helmet-bal"]);
|
||
let helmet_im=Math.max(...armorval["helmet-im"]);
|
||
let ware_bal= armorval["ware-bal"].reduce((a, b) => a + b, 0);
|
||
let ware_im= armorval["ware-im"].reduce((a, b) => a + b, 0);
|
||
let magic_bal=Math.max(...armorval["magic-bal"]);
|
||
let magic_im=Math.max(...armorval["magic-im"]);
|
||
armorval["body-bal"].sort();
|
||
armorval["body-im"].sort();
|
||
let body_bal = armorval["body-bal"].pop() + Math.floor( armorval["body-bal"].pop() / 2 );
|
||
let body_im = armorval["body-im"].pop() + Math.floor( armorval["body-im"].pop() / 2 );
|
||
ballistic= body_bal + shield_bal + helmet_bal;
|
||
impact= body_im + shield_im + helmet_im;
|
||
let ballover = ballistic - myquick;
|
||
let impactover = impact - myquick;
|
||
if ( ballover < 0 ) ballover=0;
|
||
if ( impactover < 0 ) impactover=0;
|
||
let combatpen= -1 * (Math.floor((ballover + impactover) / 2 ));
|
||
if ( gyro_bal > 0 ) sets["gyro-on"]=1;
|
||
else sets["gyro-on"]=0;
|
||
if (((ballistic + impact) >= 1 ) || (mydermal == 1)) sets["armor-on"]=1;
|
||
else sets["armor-on"]=0;
|
||
sets["ballistic"]=ballistic + ware_bal + gyro_bal + magic_bal;
|
||
sets["impact"]=impact + ware_im + gyro_im + magic_im;;
|
||
sets["armor-quickness-pen"]=ballover;
|
||
sets["armor-combatpool-pen"]=combatpen;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
|
||
});
|
||
});
|
||
});
|
||
|
||
|
||
on("sheet:opened change:rangedvizTN change:meleevizTN 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 change:rangedselected change:gryo-on", function() {
|
||
updateRangeTNs();
|
||
updateMeleeTNs();
|
||
});
|
||
|
||
on("change:gunnerymotion change:gunneryspeed change:gunnerymaneuver change:gunneryvehicledmg change:gunnerymount change:gunneryterrain change:gunnerytargettype", function() {
|
||
updateManualGunneryTNs();
|
||
});
|
||
|
||
on("sheet:opened change:perception change:strength change:magic change:deck-mpcp-final change:willpower change:intelligence change:quickness change:charisma change:body change:frametype change:reaction change:vcr", function() {
|
||
updatepools();
|
||
});
|
||
|
||
on("change:stun change:adeptpainres", function() {
|
||
updateStunPenalty();
|
||
});
|
||
|
||
on("change:wounds change:adeptpainres", function() {
|
||
updateWoundPenalty();
|
||
});
|
||
|
||
on("change:repeating_ic:ictype", function(eventinfo) {
|
||
if (!("yes" in lang)) geti18n();
|
||
console.log(eventinfo);
|
||
var mybase=eventinfo["sourceAttribute"].split("_");
|
||
var myattr=mybase.pop();
|
||
const myrepeat=mybase.join('_');
|
||
sets={};
|
||
const ictype=myrepeat + "_ictype"
|
||
const ictarget=myrepeat + "_ictargettest"
|
||
gets=[ictype];
|
||
console.log(gets);
|
||
attackic=["Killer", "Blaster", "Sparky", "blackiclethal", "Scout", "cerebropathic", "psychotropic", "blackicnonlethal"]
|
||
getAttrs(gets, function(myval) {
|
||
console.log(gets);
|
||
const mytype=myval[ictype];
|
||
console.log(mytype);
|
||
if (mytype=="Probe") sets[ictarget]="@{target|" + lang["decker"] + "|deck-detection-final}";
|
||
else if (attackic.includes(mytype)) sets[ictarget]="Attack";
|
||
else if ((mytype=="Tar Baby") || (mytype=="Tar pit")) sets[ictarget]="?{" + lang["utility-rating"] + "?|4}";
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
on("change:matrix-damage change:rccommand-damage change:rcsimsense-damage change:rcsystem-damage change:vehicle-damage change:repeating_ic:ic-damage", function(eventinfo) {
|
||
let myattribute=""
|
||
console.log(eventinfo);
|
||
if ( eventinfo["sourceAttribute"].startsWith("repeating") ) {
|
||
console.log("found");
|
||
myattribute=eventinfo["sourceAttribute"].split("-").slice(0, -1).join('-');
|
||
} else {
|
||
console.log("not");
|
||
myattribute=eventinfo["sourceAttribute"].split("-")[0];
|
||
}
|
||
updatePenalty(myattribute);
|
||
|
||
});
|
||
|
||
on("change:sheettype", function(){
|
||
getAttrs(["sheettype"], function (myval) {
|
||
var myatts={};
|
||
const mysheet=myval["sheettype"];
|
||
if ((mysheet == "Vehicle") || (mysheet == "Drone")) {
|
||
myatts["sheettab"]="vehicle-attr-tab";
|
||
} else {
|
||
myatts["sheettab"]="character";
|
||
}
|
||
if ((mysheet == "Critter") || (mysheet == "Spirit")) myatts["gunneryswitch"]="hide";
|
||
if (mysheet == "Matrix") {
|
||
myatts["iconstatuscode"]=0;
|
||
myatts["matrix-iconstatus"]="Legitimate";
|
||
}
|
||
|
||
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) {
|
||
const atts={};
|
||
const vehicles=["Vehicle", "Drone"];
|
||
const metatype=myval["metatype"];
|
||
const sheettype=myval["sheettype"];
|
||
console.log('sheet type is: ' + myval["sheettype"]);
|
||
atts["walk"]=mywalk=(vehicles.includes(sheettype))? myval["acceleration"] : parseInt(myval["quickness_max"]);
|
||
atts["run"]=(vehicles.includes(sheettype))? Math.floor( parseInt(myval["speed"]) / parseInt(myval["handling-street"])) : mywalk * racemaximum[metatype]["run"];
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
});
|
||
|
||
|
||
on("change:deck-dni change:intelligence_max change:reaction change:deck-asist change:deck-response change:deck-realityfilter", function() {
|
||
getAttrs(["deck-dni", "intelligence_max", "reaction", "deck-response", "deck-asist", "deck-realityfilter"], function (myval) {
|
||
var dnibonus=0;
|
||
var response=0;
|
||
var initiative=1;
|
||
if ((myval["deck-dni"] == "1") && (myval["deck-asist"]== "1")) {
|
||
dnibonus= myval["intelligence_max"] + 2;
|
||
} else if ((myval["deck-dni"] == "1") && (myval["deck-asist"]== "0")) {
|
||
dnibonus= myval["intelligence_max"];
|
||
} else {
|
||
dnibonus= myval["reaction"];
|
||
}
|
||
if (myval["deck-asist"] == "1" ) {
|
||
response=( dnibonus + (parseInt(myval["deck-response"]) *2 ) + ( parseInt(myval["deck-realityfilter"]) *2 ));
|
||
initiative +=(parseInt(myval["deck-response"]) + parseInt(myval["deck-realityfilter"]));
|
||
} else {
|
||
response=dnibonus;
|
||
}
|
||
|
||
console.log('reaction:' + response);
|
||
console.log('initiative:' + initiative);
|
||
setAttrs({"deck-reaction-final": response, "deck-initiative": initiative});
|
||
});
|
||
});
|
||
|
||
on("change:spelldefense", function() {
|
||
getAttrs(["sorcery", "spelldefense"], function (myval) {
|
||
spd=parseInt(myval["spelldefense"]) - parseInt(myval["sorcery"]);
|
||
if ( spd < 0 ) spd=0;
|
||
setAttrs({spelldefmin: spd});
|
||
});
|
||
});
|
||
|
||
on("change:sorcery-defense change:spellpool-defense change:sorcery-used change:spellpool-used change:spelldefmin", function() {
|
||
getAttrs(["sorcery-defense", "spellpool", "sorcery", "spellpool-defense", "spellpool-used", "sorcery-used", "spelldefmin"], function (myval) {
|
||
atts=[];
|
||
console.log('updating defense dice');
|
||
var poolover=0;
|
||
var sorceryover=0;
|
||
let sorcery=parseInt(myval["sorcery"]);
|
||
let pool=parseInt(myval["spellpool"]);
|
||
let spd=parseInt(myval["spelldefmin"]);
|
||
let md=parseInt(myval["spellpool-defense"]);
|
||
let sd=parseInt(myval["sorcery-defense"]);
|
||
let mpu=parseInt(myval["spellpool-used"]);
|
||
let su=parseInt(myval["sorcery-used"]);
|
||
let sorcerytotal= sd + su;
|
||
let pooltotal= md + mpu;
|
||
if ( sorcerytotal > sorcery ) sorceryover=1;
|
||
if ( pooltotal > pool ) poolover=1;
|
||
atts["sorcery-over"]=sorceryover;
|
||
atts["spellpool-over"]=poolover;
|
||
atts["spelldefensedice"]=spd + md + sd;
|
||
atts["sorcery-used-total"]=sd + su;
|
||
atts["spellpool-used-total"]=md + mpu;
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
|
||
});
|
||
|
||
on("sheet:opened change:deck-masking-final change:decksleaze-rating-final", function() {
|
||
getAttrs(["deck-masking-final", "decksleaze-rating-final"], function (myval) {
|
||
console.log(myval["deck-masking-final"]);
|
||
let mymask=parseInt(myval["deck-masking-final"]) || 0;
|
||
let mysleaze=parseInt(myval["decksleaze-rating-final"]) || 0;
|
||
let mydf = Math.ceil((mymask + mysleaze ) / 2);
|
||
setAttrs({"deck-detection-max": mydf});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:reaction change:reaction-mods change:initiative-mods", function () {
|
||
getAttrs(["reaction", "reaction-mods", "initiative-mods", "initiative"], function (myval) {
|
||
myatts={};
|
||
myatts["reaction_max"]=parseInt(myval["reaction-mods"]) + parseInt(myval["reaction"]);
|
||
myatts["initiative_max"]=parseInt(myval["initiative-mods"]) + parseInt(myval["initiative"]);
|
||
setAttrs(myatts);
|
||
console.log(myatts);
|
||
});
|
||
});
|
||
|
||
console.log('loading explosive ranges');
|
||
const explosiveranges={
|
||
"Regular": { min: 0, short: "mystr * 3", "medium": "mystr * 5", long: "mystr * 10", extreme: "mystr * 20", scatter: 1, scatterredux: 2, skill: "@{throwing}" },
|
||
"Aerodynamic": { min:0, short: "mystr * 3", "medium": "mystr * 5", long: "mystr * 20", extreme: "mystr * 30", scatter: 2, scatterredux: 4, skill: "@{throwing}" },
|
||
"Launcher": { min: 5, short: 50, medium: 100, long: 150, extreme: 300, scatter: 3, scatterredux: 4, skill: "@{launchers}" },
|
||
"Other": { min:0, short: 0, medium: 0, long: 0, extreme: 0, scatter: 0, scatterredux: 0, skill: "@{throwing}" },
|
||
"O": { power: 10, damage: "S", blast: 1 },
|
||
"D": { power: 10, damage: "S", blast: 0.5 },
|
||
"C": { power: 12, damage: "M(stun)", blast: 1 }
|
||
|
||
};
|
||
|
||
on("change:strength_max", function() {
|
||
getSectionIDs("explosives", function(idarray) {
|
||
idarray.forEach((m, id) => {
|
||
var myrepeat="repeating_explosives_" + m;
|
||
console.log('myrepeat: ' + myrepeat);
|
||
updaeteexplosives(myrepeat);
|
||
});
|
||
});
|
||
|
||
|
||
});
|
||
|
||
on("change:hackingpool-icsuppress change:hackingpool-used change:hackingpool change:controlpool change:controlpool-used change:combatpool change:combatpool-used change:taskpool change:taskpool-used change:astralpool change:astralpool-used", function() {
|
||
getAttrs(["hackingpool-used", "hackingpool-icsuppress", "hackingpool", "controlpool", "controlpool-used", "combatpool", "combatpool-used", "taskpool", "taskpool-used", "astralpool", "astralpool-used"], function(myval) {
|
||
sets={"hackingpool-over": 0, "controlpool-over": 0, "combatpool-over": 0, "astralpool-over": 0, "taskpool-over": 0};
|
||
hackusedic=parseInt(myval["hackingpool-icsuppress"]);
|
||
hackused=parseInt(myval["hackingpool-used"]);
|
||
hackpool=parseInt(myval["hackingpool"]);
|
||
hackpoolfinal=hackused + hackusedic;
|
||
sets["hackingpool-used-total"]=hackpoolfinal;
|
||
controlused=parseInt(myval["controlpool-used"]);
|
||
controlpool=parseInt(myval["controlpool"]);
|
||
combatused=parseInt(myval["combatpool-used"]);
|
||
combatpool=parseInt(myval["combatpool"]);
|
||
taskused=parseInt(myval["taskpool-used"]);
|
||
taskpool=parseInt(myval["taskpool"]);
|
||
astralused=parseInt(myval["astralpool-used"]);
|
||
astralpool=parseInt(myval["astralpool"]);
|
||
console.log(myval);
|
||
console.log('cu: ' + combatused);
|
||
console.log('cp: ' + combatpool);
|
||
if ( taskused > taskpool ) sets["taskpool-over"]=1;
|
||
if ( astralused > astralpool ) sets["astralpool-over"]=1;
|
||
if ( combatused > combatpool ) sets["combatpool-over"]=1;
|
||
if ( controlused > controlpool ) sets["controlpool-over"]=1;
|
||
if ( hackpoolfinal > hackpool ) sets["hackingpool-over"]=1;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
|
||
on("change:repeating_explosives:exptype", function(eventinfo){
|
||
console.log(eventinfo)
|
||
var mybase=eventinfo["sourceAttribute"].split("_");
|
||
var myattr=mybase.pop();
|
||
const myrepeat=mybase.join('_');
|
||
console.log('mybase: ' + mybase + ' repeat: ' + myrepeat) ;
|
||
updaeteexplosives(myrepeat);
|
||
})
|
||
var updaeteexplosives = function(repeatingattr) {
|
||
const exptype=repeatingattr.concat("_exptype");
|
||
var mygetatts=[exptype]
|
||
mygetatts.push("strength_max");
|
||
getAttrs(mygetatts, function(myval) {
|
||
console.log(myval);
|
||
console.log(exptype);
|
||
console.log(repeatingattr);
|
||
const mystr=parseInt(myval.strength_max)
|
||
const etype=myval[exptype].split(":")
|
||
console.log(etype)
|
||
var atts={};
|
||
/* strenght based calcs */
|
||
console.log('strenght is ' + mystr);
|
||
atts[repeatingattr.concat("_min")]=explosiveranges[etype[0]]["min"];
|
||
atts[repeatingattr.concat("_skill")]=explosiveranges[etype[0]]["skill"];
|
||
atts[repeatingattr.concat("_short")]=eval(explosiveranges[etype[0]]["short"]);
|
||
atts[repeatingattr.concat("_medium")]=eval(explosiveranges[etype[0]]["medium"]);
|
||
atts[repeatingattr.concat("_long")]=eval(explosiveranges[etype[0]]["long"]);
|
||
atts[repeatingattr.concat("_extreme")]=eval(explosiveranges[etype[0]]["extreme"]);
|
||
atts[repeatingattr.concat("_scatter")]=explosiveranges[etype[0]]["scatter"];
|
||
atts[repeatingattr.concat("_scatterredux")]=explosiveranges[etype[0]]["scatterredux"];
|
||
atts[repeatingattr.concat("_power")]=explosiveranges[etype[1]]["power"];
|
||
atts[repeatingattr.concat("_damage")]=explosiveranges[etype[1]]["damage"];
|
||
atts[repeatingattr.concat("_blast")]=explosiveranges[etype[1]]["blast"];
|
||
console.log('setting repeating explosive atts: ');
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
};
|
||
|
||
on("sheet:opened change:combatpool-mods change:armor-combatpool-pen change:combatpool-base change:spellpool-mods change:spellpool-base change:hackingpool-mods change:hackingpool-base change:controlpool-mods change:controlpool-base change:astralpool-mods change:astralpool-base change:gyro-on", function () {
|
||
sets={};
|
||
atts=["combatpool-mods", "combatpool-base", "armor-combatpool-pen","spellpool-mods", "spellpool-base", "hackingpool-mods", "hackingpool-base", "controlpool-mods", "controlpool-base", "astralpool-mods", "astralpool-base", "gyro-on"]
|
||
getAttrs(atts, function (myval) {
|
||
console.log('pool setup atts');
|
||
console.log(myval);
|
||
if ( myval["gyro-on"] == 1 ) sets["combatpool"] = Math.floor(( parseInt(myval["combatpool-mods"]) + parseInt(myval["combatpool-base"]) + parseInt(myval["armor-combatpool-pen"]) ) / 2);
|
||
else sets["combatpool"] = parseInt(myval["combatpool-mods"]) + parseInt(myval["combatpool-base"]) + parseInt(myval["armor-combatpool-pen"]);
|
||
sets["spellpool"] = parseInt(myval["spellpool-mods"]) + parseInt(myval["spellpool-base"]);
|
||
sets["hackingpool"] = parseInt(myval["hackingpool-mods"]) + parseInt(myval["hackingpool-base"]);
|
||
sets["controlpool"] = parseInt(myval["controlpool-mods"]) + parseInt(myval["controlpool-base"]);
|
||
sets["hackingpool"] = parseInt(myval["hackingpool-mods"]) + parseInt(myval["hackingpool-base"]);
|
||
sets["astralpool"] = parseInt(myval["astralpool-mods"]) + parseInt(myval["astralpool-base"]);
|
||
setAttrs(sets);
|
||
console.log(sets);
|
||
});
|
||
});
|
||
|
||
|
||
var updatepools = function() {
|
||
getAttrs(["strength_max","magic","deck-mpcp-final","perception", "willpower_max","intelligence_max", "quickness_max", "charisma_max", "body_max", "frametype", "reaction", "vcr", "sheettype"], function(myval) {
|
||
var myatts={}
|
||
var myvcr = parseInt(myval.vcr);
|
||
var myperception = parseInt(myval.perception) || 0;
|
||
var myreact = parseInt(myval.reaction);
|
||
var mymagic = parseInt(myval.magic);
|
||
var mympcp = parseInt(myval["deck-mpcp-final"]);
|
||
var myagil = parseInt(myval.quickness_max);
|
||
var mystr = parseInt(myval.strength_max);
|
||
var mywill = parseInt(myval.willpower_max);
|
||
var myint = parseInt(myval.intelligence_max);
|
||
var mychar = parseInt(myval.charisma_max);
|
||
var mybody = parseInt(myval.body_max);
|
||
console.log('combat pool agil ' + myagil + ' int ' + Math.max(myint,myperception) + ' will ' + mywill);
|
||
myatts["combatpool-base"]= Math.floor((myagil + Math.max(myint,myperception) + mywill)/2);
|
||
|
||
if (myval.sheettype != "Spirit" ) myatts["reaction"] = Math.floor((myagil + myint)/2);
|
||
if (mymagic > 0 ) {
|
||
console.log("magic is not 0");
|
||
myatts["spellpool-base"] = Math.floor((mymagic + myint + mywill)/3);
|
||
myatts["astralpool-base"] = Math.floor( (mychar + mywill + myint) /2 );
|
||
myatts["astralreaction"]= ( 20 + myval.intelligence_max);
|
||
} else if (myval.sheettype == "Spirit" ) {
|
||
myatts["spellpool-base"] = 0;
|
||
myatts["astralpool-base"] = 0;
|
||
} else {
|
||
myatts["spellpool-base"] = 0;
|
||
myatts["astralpool-base"] = 0;
|
||
myatts["astralreaction"] = 0;
|
||
}
|
||
if ( mympcp > 0 ) {
|
||
myatts["hackingpool-base"] = Math.floor( (mympcp + myint) /3 );
|
||
} else {
|
||
myatts["hackingpool-base"] = 0;
|
||
}
|
||
if (myval.frametype == "Smart Frame") {
|
||
myatts["hackingpool-base"] = 0;
|
||
}
|
||
if (myvcr > 0) {
|
||
myatts["controlpool-base"] = myreact + ( 2 * myvcr);
|
||
} else {
|
||
myatts["controlpool-base"] = 0;
|
||
}
|
||
console.log('setting update pool');
|
||
console.log(myatts);
|
||
setAttrs(myatts);
|
||
});
|
||
};
|
||
|
||
var setupdefaults = function() {
|
||
setAttrs({ targetMove: -1, charisma_max: 1, strength_max: 1, willpower_max: 1, body_max: 1, quickness_max: 1, intelligence_max: 1, attr_rangedTN: 0, attr_meleeTN: 0, attr_misccombatmods: 0, signature: 4 })
|
||
};
|
||
|
||
var updatePenalty = function(attribute) {
|
||
console.log('calculating penalty for ' + attribute)
|
||
let myatt = attribute.concat("-damage");
|
||
let mypen = attribute.concat("-penalty");
|
||
getAttrs([myatt], function(myval) {
|
||
sets={};
|
||
console.log('dmg ' + myval[myatt]);
|
||
console.log('pen ' + mypen);
|
||
var penalty = 0;
|
||
var dmg = parseInt(myval[myatt]);
|
||
if ( dmg > 10) penalty = 4;
|
||
else if (dmg > 5) penalty = 3;
|
||
else if (dmg > 2) penalty = 2;
|
||
else if (dmg > 0) penalty = 1;
|
||
sets[mypen]=penalty;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
};
|
||
|
||
var updateWoundPenalty = function () {
|
||
getAttrs(["wounds","adeptpainres"], function(v) {
|
||
var penalty = 0;
|
||
var wounds = parseInt(v.wounds);
|
||
var res = parseInt(v.adeptpainres);
|
||
if (wounds > res) {
|
||
if ( wounds > 10) penalty = 4;
|
||
else if (wounds > 5) penalty = 3;
|
||
else if (wounds > 2) penalty = 2;
|
||
else if (wounds > 0) penalty = 1;
|
||
}
|
||
setAttrs({"wound_pen": penalty});
|
||
});
|
||
};
|
||
|
||
var updateStunPenalty = function () {
|
||
getAttrs(["stun","adeptpainres"], function(v) {
|
||
var penalty = 0;
|
||
var stun = parseInt(v.stun);
|
||
var res = parseInt(v.adeptpainres);
|
||
if (stun > res) {
|
||
if (stun > 10 ) penalty = 100;
|
||
else if (stun > 5) penalty = 3;
|
||
else if (stun > 2) penalty = 2;
|
||
else if (stun > 0) penalty = 1;
|
||
}
|
||
setAttrs({"stun_pen": penalty});
|
||
});
|
||
};
|
||
console.log('loading racial maxes');
|
||
const racemaximum={
|
||
"Human": {B: 6, Q: 6, S: 6, C: 6, I: 6, W: 6, Bm: 9, Qm: 9, Sm: 9, Cm: 9, Im: 9, Wm: 9, run: 3 },
|
||
"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, run: 3 },
|
||
"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, run: 2 },
|
||
"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, run: 3 },
|
||
"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, run: 3 },
|
||
"Cyclops": {B: 11, Q: 5, S: 12, C: 4, I: 4, W: 6, Bm: 17, Qm: 8, Sm: 18, Cm: 6, Im: 6, Wm: 9, run: 3 },
|
||
"Fomori": {B: 10, Q: 5, S: 9, C: 6, I: 4, W: 6, Bm: 15, Qm: 8, Sm: 14, Cm: 9, Im: 6, Wm: 9, run: 3 },
|
||
"Giant": {B: 11, Q: 5, S: 11, C: 4, I: 4, W: 6, Bm: 17, Qm: 8, Sm: 17, Cm: 6, Im: 6, Wm: 9, run: 3 },
|
||
"Minotaur": {B: 10, Q: 5, S: 9, C: 5, I: 5, W: 6, Bm: 15, Qm: 8, Sm: 14, Cm: 8, Im: 8, Wm: 9, run: 3 },
|
||
"Hobgoblin": {B: 8, Q: 6, S: 8, C: 5, I: 6, W: 6, Bm: 12, Qm: 9, Sm: 12, Cm: 8, Im: 9, Wm: 9, run: 3 },
|
||
"Oni": {B: 8, Q: 6, S: 8, C: 5, I: 5, W: 7, Bm: 12, Qm: 9, Sm: 12, Cm: 8, Im: 8, Wm: 11, run: 3 },
|
||
"Ogre": {B: 9, Q: 6, S: 8, C: 6, I: 5, W: 6, Bm: 14, Qm: 9, Sm: 12, Cm: 9, Im: 8, Wm: 9, run: 3 },
|
||
"Satyr": {B: 9, Q: 5, S: 8, C: 5, I: 5, W: 7, Bm: 14, Qm: 8, Sm: 12, Cm: 8, Im: 8, Wm: 11, run: 4 },
|
||
"Menehune": {B: 8, Q: 6, S: 7, C: 6, I: 6, W: 7, Bm: 12, Qm: 9, Sm: 11, Cm: 9, Im: 9, Wm: 11, run: 2 },
|
||
"Koborokuru": {B: 7, Q: 6, S: 8, C: 6, I: 6, W: 7, Bm: 11, Qm: 9, Sm: 12, Cm: 9, Im: 9, Wm: 11, run: 3 },
|
||
"Gnome": {B: 7, Q: 6, S: 7, C: 6, I: 6, W: 8, Bm: 11, Qm: 9, Sm: 11, Cm: 9, Im: 9, Wm: 12, run: 2 },
|
||
"Wakyambi": {B: 6, Q: 6, S: 6, C: 8, I: 6, W: 7, Bm: 9, Qm: 9, Sm: 9, Cm: 12, Im: 9, Wm: 11, run: 3 },
|
||
"Nightone": {B: 6, Q: 8, S: 6, C: 8, I: 6, W: 6, Bm: 9, Qm: 12, Sm: 9, Cm: 12, Im: 9, Wm: 9, run: 3 },
|
||
"Dryad": {B: 5, Q: 7, S: 5, C: 9, I: 6, W: 6, Bm: 8, Qm: 11, Sm: 8, Cm: 14, Im: 9, Wm: 9, run: 3 }
|
||
};
|
||
|
||
var setattributelimits = function(metatype) {
|
||
console.log ("setting racial limits based on metatype: " + 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"];
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
};
|
||
|
||
var updateMeleeTNs = function() {
|
||
getAttrs(["meleevizTN", "cover", "move", "dualwield", "calledshot", "aim", "enemies", "friends", "meleetargets", "position", "misccombatmods", "stun_pen","wound_pen"], function(myval) {
|
||
console.log("updateMeleeTN")
|
||
console.log(myval);
|
||
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('meleeTN ' + targetNumberMelee)
|
||
setAttrs({meleeTN: targetNumberMelee});
|
||
});
|
||
};
|
||
|
||
var updateRangeTNs = function() {
|
||
getAttrs(["rangedvizTN", "cover", "move", "dualwield", "calledshot", "aim", "enemies", "friends", "meleetargets", "position", "misccombatmods", "stun_pen","wound_pen", "manualgunneryTN", "rangedselected", "gyro-on", "sheettype" ], function(myval) {
|
||
console.log(myval);
|
||
moreatts=["rangedselected"];
|
||
const gyroon=parseInt(myval["gyro-on"]);
|
||
const sheettype=myval["sheettype"];
|
||
var rselect="None";
|
||
if (( myval["rangedselected"] != "None") && ( myval["gyro-on"] == 1 )) {
|
||
let mybase= myval["rangedselected"].split("_");
|
||
const myattr=mybase.pop();
|
||
const myrepeat=mybase.join('_');
|
||
rselect=myrepeat + "_gyro";
|
||
moreatts.push(rselect);
|
||
}
|
||
getAttrs(moreatts, function(mygyro) {
|
||
const gyro=(rselect == "None")? 0 : parseInt(mygyro[rselect]) * gyroon ;
|
||
console.log('gyro val ' + gyro);
|
||
var sets={};
|
||
console.log('updating ranged tn');
|
||
const move=parseInt(myval.move);
|
||
const called=parseInt(myval.calledshot);
|
||
const viz=parseInt(myval.rangedvizTN);
|
||
const cover=parseInt(myval.cover);
|
||
const dual=parseInt(myval.dualwield);
|
||
const enemies=parseInt(myval.enemies);
|
||
const aim=parseInt(myval.aim);
|
||
const misc=parseInt(myval.misccombatmods);
|
||
const stun=parseInt(myval.stun_pen);
|
||
const wound=parseInt(myval.wound_pen);
|
||
const gunnery=parseInt(myval.manualgunneryTN);
|
||
const movepen=((move - gyro) < 0 )? 0: move - gyro;
|
||
console.log('movepen ' + movepen);
|
||
targetNumberRange = called + viz + cover + dual + (2 * enemies) - aim + misc + stun + wound + gunnery + movepen;
|
||
mytargetMove = (move == 0)? -1 : (move ==4)? 2: (move ==6)? 2: 0;
|
||
sets["rangedTN"]=targetNumberRange;
|
||
sets["targetMove"]=mytargetMove;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
|
||
});
|
||
};
|
||
|
||
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});
|
||
|
||
});
|
||
};
|
||
|
||
on("change:repeating_spells:range change:repeating_spells:spellcategory", function(myval) {
|
||
if (!("yes" in lang)) geti18n();
|
||
getAttrs(["repeating_spells_spellcategory", "repeating_spells_range"], function(myval) {
|
||
const spellcategory=myval["repeating_spells_spellcategory"];
|
||
const range=myval["repeating_spells_range"];
|
||
console.log(spellcategory)
|
||
console.log(range)
|
||
atts=[];
|
||
if ( spellcategory == "Elemental" ) {
|
||
atts["repeating_spells_target"]="@{target|" + lang["target"] +"|targetMove}";
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
}
|
||
});
|
||
});
|
||
|
||
|
||
</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"]},
|
||
"airelemental":
|
||
{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)"] },
|
||
"earthelemental":
|
||
{ 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)"] },
|
||
"fireelemental":
|
||
{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)"] },
|
||
"waterelemental":
|
||
{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)"] },
|
||
"cityspirit": {
|
||
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"]
|
||
},
|
||
"fieldspirit": {
|
||
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"]
|
||
},
|
||
"hearthspirit": {
|
||
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" ]
|
||
},
|
||
|
||
"desertspirit": {
|
||
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" ]
|
||
},
|
||
"forestspirit": {
|
||
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" ]
|
||
},
|
||
"mountainspirit": {
|
||
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"]
|
||
},
|
||
"prairiespirit": {
|
||
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"]
|
||
},
|
||
"mistspirit": {
|
||
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" ]
|
||
},
|
||
"stormspirit": {
|
||
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)"]
|
||
},
|
||
"windspirit": {
|
||
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"]
|
||
},
|
||
"lakespirit": {
|
||
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"]
|
||
},
|
||
"riverspirit": {
|
||
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"]
|
||
},
|
||
"seaspirit": {
|
||
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)"]
|
||
},
|
||
"sylph": {
|
||
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"];
|
||
atts["ballistic"]=F * 2;
|
||
atts["impact"]=F * 2;
|
||
|
||
const powers=spirits[spirittype]["powers"];
|
||
console.log(atts);
|
||
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('setting atts ');
|
||
console.log(JSON.stringify(atts));
|
||
setAttrs(atts);
|
||
|
||
}
|
||
|
||
});
|
||
})
|
||
|
||
on("remove:repeating_foci change:repeating_foci", function(eventinfo) {
|
||
const attribs=["category", "force", "type"];
|
||
console.log(eventinfo);
|
||
mytrigger=eventinfo["triggerName"];
|
||
console.log('mytrigger ' + mytrigger);
|
||
atts=[];
|
||
|
||
if (mytrigger == "remove:repeating_foci" ) {
|
||
myrepeat=eventinfo["sourceAttribute"];
|
||
myattrib="remove";
|
||
} else {
|
||
mybase=eventinfo["sourceAttribute"].split("_");
|
||
myattrib=mybase.pop();
|
||
myrepeat=mybase.join('_');
|
||
}
|
||
if (myattrib == "remove" ) {
|
||
let cat = eventinfo["removedInfo"][myrepeat.concat("_category")];
|
||
let type = eventinfo["removedInfo"][myrepeat.concat("_type")];
|
||
if ( type == "power" ) atts["power-focus"]=0;
|
||
else if ( type == "spirit") atts[cat]=0;
|
||
else if ( type == "expendable" ) atts["exp-" + cat]=0;
|
||
else if ( type == "reusable" ) atts["reusable-" + cat]=0;
|
||
else return;
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
} else if (myattrib != "qty" ) {
|
||
gets=[];
|
||
gets.push(myrepeat.concat("_category"));
|
||
gets.push(myrepeat.concat("_force"));
|
||
gets.push(myrepeat.concat("_type"));
|
||
getAttrs(gets, function(myval) {
|
||
let cat=myval[myrepeat.concat("_category")];
|
||
let force=myval[myrepeat.concat("_force")];
|
||
let type=myval[myrepeat.concat("_type")];
|
||
if (type == "Power Focus") {
|
||
atts["power-focus"]=force
|
||
} else if ( type == "Spirit Focus" ) {
|
||
atts[cat]=force;
|
||
} else if ( type == "Expendable" ) {
|
||
if ( cat == "none" ) return;
|
||
var myatt="exp-" + cat;
|
||
atts[myatt]=force;
|
||
|
||
} else if ( type == "Reusable" ) {
|
||
if ( cat == "none" ) return;
|
||
var myatt="reusable-" + cat;
|
||
atts[myatt]=force;
|
||
} else {
|
||
console.log('skipping');
|
||
}
|
||
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
|
||
|
||
|
||
}
|
||
|
||
});
|
||
|
||
|
||
</script>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-conjure">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{myname}}: {{spellname}} {{spiritforce}} {{spirittype}}</div>
|
||
<div class="sheet-rtrow">Rolling: {{rolldice}}d6 <span data=i18n="versus">vs.</span> {{targetnumber}} = {{casttest}}</div>
|
||
{{#conjuredice}}
|
||
<div class="sheet-conjure-resist-table">
|
||
<div data=i18n="total">Total</div>
|
||
<div></div>
|
||
<div data=i18n="summon">Summon</div>
|
||
<div></div>
|
||
<div data=i18n="drain">Drain</div>
|
||
<div>{{skill}}</div>
|
||
<div></div>
|
||
<div>{{conjuredice}}</div>
|
||
<div></div>
|
||
<div>{{conjuredicedrain}}</div>
|
||
</div>{{/conjuredice}}
|
||
{{#roll}}<div class="sheet-rtrow">Casting Test: {{computed::cast}} {{computed::roll}}</div>{{/roll}}
|
||
{{#draintest}}
|
||
<div class="sheet-conjure-resist-table">
|
||
<div data=i18n="drain">Drain</div>
|
||
<div></div>
|
||
<div data=i18n="resist-test">Resist Test</div>
|
||
<div></div>
|
||
<div data=i18n="final">Final</div>
|
||
<div>{{computed::draindamage}}</div>
|
||
<div></div>
|
||
<div>{{draintest}}</div>
|
||
<div></div>
|
||
<div>{{computed::finaldrain}}</div>
|
||
</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}}
|
||
</div>
|
||
</rolltemplate>
|
||
<rolltemplate class="sheet-rolltemplate-spell">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{myname}}: {{spellname}} <span data=i18n="versus">vs.</span> {{targetofspell}}</div>
|
||
<div class="sheet-rtrow"><span data-i18n="rolling">Rolling</span>: {{rolldice}}d6 <span data=i18n="versus">vs.</span> {{targetnumber}} = {{casttest}}</div>
|
||
{{#spelldamage}}<div class="sheet-rtrow"><span data-i18n="force">Force</span>: {{castforce}} <span data-i18n="damage">Damage</span>: {{computed::spelldamage}} </div> {{/spelldamage}}
|
||
{{#sorcerydice}}<div class="sheet-rtrow"><span data-i18n="sorcery-dice">Sorcery Dice</span>: {{sorcerydice}} </div>{{/sorcerydice}}
|
||
{{#spellpool}}<div class="sheet-rtrow"><span data-i18n="spell-pool">Spell Pool</span>: {{spellpool}} </div>{{/spellpool}}
|
||
{{#roll}}<div class="sheet-rtrow"><span data-i18n="casting-test">Casting Test</span>: {{computed::cast}} {{computed::roll}}</div>{{/roll}}
|
||
{{#draintest}}
|
||
{{#cast}}<div><span data-i18n="drain"></span>{{draindice}}d6 vs {{computed::draintnfinal}} = {{computed::draintest}}</div>{{/cast}}
|
||
{{#dispell}}<div><span data-i18n="drain"></span>{{draindice}}d6 vs {{computed::draintnfinal}} = {{draintest}}</div>{{/dispell}}
|
||
<div class="sheet-spell-resist-table">
|
||
<div data-i18n="drain">Drain</div>
|
||
<div></div>
|
||
<div data-i18n="resist-test">Resist Test</div>
|
||
<div></div>
|
||
<div data-i18n="final">Final</div>
|
||
<div>{{computed::draindamage}}</div>
|
||
<div></div>
|
||
{{#cast}}<div>{{computed::draintest}}</div>{{/cast}}
|
||
{{#dispell}}<div>{{draintest}}</div>{{/dispell}}
|
||
<div></div>
|
||
<div>{{computed::finaldrain}}</div>
|
||
</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">{{targetofspell}}: {{resist}}</div>{{/resist}}
|
||
{{#defensetest}}<div class="sheet-spell-resist-table">
|
||
<div data-i18n="attack">Attack</div>
|
||
<div></div>
|
||
<div data-i18n="defense">Defense</div>
|
||
<div></div>
|
||
<div data-i18n="result">Result</div>
|
||
<div>{{attacks}}</div>
|
||
<div>-</div>
|
||
<div>{{casttest}}</div>
|
||
<div>=</div>
|
||
<div>{{computed::defensetest}}</div>
|
||
</div>{{/defensetest}}
|
||
<div class="sheet-rtrow">{{#spelldefense}}[<span data-i18n="spell-defense">Spell Defense</span>](~selected|spelldefense||{{computed::senddata}}){{/spelldefense}}
|
||
{{#casttest}}{{targetofspell}}:
|
||
{{#dodge}}[Dodge](~{{targetofspell}}|dodge||{{computed::senddata}}){{/dodge}}
|
||
{{#resisttype}}[<span data-i18n="resist">Resist</span>](~{{targetofspell}}|{{computed::resisttype}}||{{computed::senddata}}){{/resisttype}}
|
||
{{#resisttype2}}[<span data-i18n="resist">Resist</span>](~{{targetofspell}}|{{resisttype2}}||{{computed::senddata}}){{/resisttype2}}
|
||
</div>{{/casttest}}
|
||
{{#roll}}<div class="sheet-rtrow">{{targetofspell}}: [<span data-i18n="area-of-effect-acronym">AOE</span>](~selected|checkaoe||{{computed::senddata}})</div>
|
||
{{/roll}}
|
||
</div>
|
||
</rolltemplate>
|
||
<rolltemplate class="sheet-rolltemplate-adept">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{myname}}: {{spellname}} {{powerlevel}} <span data=i18n="versus">vs.</span> {{targetofspell}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="rolling">Rolling</b>: {{rolldice}}d6 <span data=i18n="versus">vs.</span> {{targetnumber}} </div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
<div class="sheet-rtrow"><span data-i18n="spell-pool-used">Spell Pool Used</span>: {{spellpool}}</div>
|
||
<div class="sheet-rtrow"><span data-i18n="casting-test">Casting Test</span>: {{casttest}}</div>
|
||
<div class="sheet-rtrow"><span data-i18n="drain-test">Drain Test</span>: {{draintest}} <span data=i18n="versus">vs.</span> {{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-melee">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader"><b>{{myname}}:</b> {{weaponname}} <span data=i18n="versus">vs.</span> {{target}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="mode">Mode</b>: {{attackmode}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="rolling">Rolling:</b> {{rolldice}}d6 <span data=i18n="versus">vs.</span> {{targetnumber}} </div>
|
||
{{#attacktest}}<div class="sheet-rtrow"><b>Attack Test:</b> {{attacktest}}</div>{{/attacktest}}
|
||
{{#defensetest}}<div class="sheet-rtrow"><b>{{attacker}}:</b> {{attacknumber}} <span data=i18n="versus">vs.</span>
|
||
<b>{{defender}}</b>:{{defensetest}}</div>{{/defensetest}}
|
||
<div class="sheet-rtrow"><b data-i18n="weapon-damage">Weapon Damage:</b> {{computed::weaponpower}} <b>{{computed::weapondamage}}</div>
|
||
{{#combatpool}}<div class="sheet-rtrow"><b data-i18n="combat-pool">Combat Pool Used:</b> {{combatpool}} </div>{{/combatpool}}
|
||
{{#pooldice}}<div class="sheet-rtrow"><b data-i18n="pool-used">{{pooltype}} Pool Used:</b> {{pooldice}}</div>{{/pooldice}}
|
||
{{#weaponfocus}}<div class="sheet-rtrow"><b data-i18n="weapon-focus">Weapon Focus:</b> {{weaponfocus}} {{focusforce}}</div>
|
||
{{/weaponfocus}}
|
||
{{#attacktest}}<div class="sheet-rtrow"><b>{{target}}:</b> [<span data-i18n="defend">Defend</span>](~{{target}}|meleedefend||{{computed::senddata}})
|
||
[<span data-i18n="full-defense">Full Defense</span>](~selected|meleedefendfull||{{computed::senddata}})</div>{{/attacktest}}
|
||
{{#defensetest}}<div class="sheet-rtrow"><b>Loser:</b> {{computed::finalwinner}}
|
||
{{#dodge}}[<span data-i18n="dodge">Dodge</span>](~{{computed::finalwinner}}|dodge||{{computed::senddata}}){{/dodge}}
|
||
[<span data-i18n="resist">Resist</span>](~{{computed::finalwinner}}|resistroll||{{computed::senddata}})</div>{{/defensetest}}
|
||
<div class="sheet-rtrow"><b data-i18n="reach">Reach: </b>{{myname}}: {{charreach}} <span data=i18n="versus">vs.</span> {{target}}: {{targetreach}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="mods">Mods:</b>
|
||
{{#reachmod}} <span data-i18n="reach">Reach</span>:{{computed::reachmod}}{{/reachmod}}
|
||
{{#meleemods}} <span data-i18n="reach">Melee</span>:{{meleemods}}{{/meleemods}}
|
||
{{#armorpen}} <span data-i18n="reach">Armor Penalty</span>:{{armorpen}}{{/armorpen}}
|
||
{{#gyropen}} <span data-i18n="reach">Gyro Penalty</span>:{{gyropen}}{{/gyropen}}
|
||
{{#movemods}} <span data-i18n="move-penalty">Move Penalty</span>:{{movemods}}{{/movemods}}</div>
|
||
{{#default}}<div class="sheet-rtrow">{{default}}</div>{{/default}}
|
||
{{#info}}<div class="sheet-rtrow">{{info}}</div>{{/info}}
|
||
</div>
|
||
</rolltemplate>
|
||
<rolltemplate class="sheet-rolltemplate-attack">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader"><b>{{myname}}</b>: {{weaponname}} <span data=i18n="versus">vs.</span> {{target}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="rolling">Rolling</b>: {{rolldice}}d6 <span data=i18n="versus">vs.</span> {{targetnumber}} </div>
|
||
<div class="sheet-rtrow"><b data-i18n="attack-test">Attack Test</b>: {{attacktest}}</div>
|
||
{{#combatpool}}<div class="sheet-rtrow"><b data-i18n="combat-pool-used">Combat Pool Used</b>: {{combatpool}} </div>{{/combatpool}}
|
||
{{#controlpool}}<div class="sheet-rtrow"><b data-i18n="control-pool-used">Control Pool Used</b>: {{controlpool}} </div>{{/controlpool}}
|
||
<div class="sheet-rtrow"><b data-i18n="weapon-damage">Weapon Damage</b>: {{computed::weaponpower}} <b>{{computed::weapondamage}}</div>
|
||
{{#rounds}}<div class="sheet-rtrow">{{ammotype}} <b data-i18n="rounds">Rounds</b>: {{computed::rounds}}</div>{{/rounds}}
|
||
{{#weaponfocus}}<div class="sheet-rtrow"><b data-i18n="weapon-focus">Weapon Focus</b>: {{weaponfocus}} {{focusforce}}</div>
|
||
{{/weaponfocus}}
|
||
{{#charreach}}<div class="sheet-rtrow"><b>{{myname}} <span data-i18n="reach">Reach</span></b>: {{charreach}}</div>{{/charreach}}
|
||
{{#targetreach}}<div class="sheet-rtrow"><b>{{target}} <span data-i18n="reach">Reach</span></b>: {{targetreach}}</div>{{/targetreach}}
|
||
{{#default}}<div class="sheet-rtrow">{{default}}</div>{{/default}}
|
||
{{#senddata}}<div class="sheet-rtrow"><b>{{target}}:</b> [<span data-i18n="dodge">dodge</span>](~selected|dodge||{{computed::senddata}})
|
||
[<span data-i18n="resist">Resist</span>](~selected|resistroll||{{computed::senddata}})</div>{{/senddata}}
|
||
<div class="sheet-rtrow"><b data-i18n="mods">Mods:</b>{{#rangedmods}}Ranged: {{rangedmods}} {{/rangedmods}}
|
||
{{#meleemods}} <span data-i18n="reach">Melee</span>:{{meleemods}}{{/meleemods}}
|
||
{{#armorpen}} <span data-i18n="reach">Armor Penalty</span>:{{armorpen}}{{/armorpen}}
|
||
{{#gyropen}} <span data-i18n="reach">Gyro Penalty</span>:{{gyropen}}{{/gyropen}}
|
||
{{#movemods}} <span data-i18n="move-penalty">Move Penalty</span>:{{movemods}}{{/movemods}}</div>
|
||
{{#targetmods}} <span data-i18n="aim-assist">aim assit</span> {{targetmods}}{{/targetmods}}
|
||
</div>
|
||
{{#info}}<div class="sheet-rtrow">{{info}}</div>{{/info}}
|
||
</div>
|
||
</rolltemplate>
|
||
<rolltemplate class="sheet-rolltemplate-explosive">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader"><b>{{myname}}:</b> {{weaponname}} <span data=i18n="versus">vs.</span> {{target}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="rolling">Rolling</b>: {{rolldice}}d6 <span data=i18n="versus">vs.</span> {{targetnumber}} </div>
|
||
<div class="sheet-rtrow"><b data-i18n="attack-test">Attack Test</b>: {{attacktest}}</div>
|
||
{{#combatpool}}<div class="sheet-rtrow"><b data-i18n="combat-pool-used">Combat Pool Used</b>: {{combatpool}} </div>{{/combatpool}}
|
||
{{#controlpool}}<div class="sheet-rtrow"><b data-i18n="control-pool-used">Control Pool Used</b>: {{controlpool}} </div>{{/controlpool}}
|
||
<div class="sheet-rtrow"><b data-i18n="weapon-damage">Weapon Damage</b>: {{weaponpower}}{{weapondamage}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="scatter">Scatter</b>: {{computed::scatter}}m in {{scatdirnumber}} <span data-i18n="direction">Direction</span></div>
|
||
{{#scatdir}}[img]({{scatdir}}){{/scatdir}}
|
||
<div class="sheet-rtrow"><span data-i18n="power-reduced-by-1-each">Power reduces by 1 each</span> {{blastradius}}<span data-i18n="meters-away">m away</span></div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
{{#senddata}}<div class="sheet-rtrow"><b>{{target}}:</b> [<span data-i18n="resist-explosive">Resist Explosive</span>](~selected|resistroll||{{computed::senddata}})</div>{{/senddata}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-item">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{myname}} <span data-i18n="uses">uses</span> {{item}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="rolling">Rolling:</b> {{rolldice}}d6 <span data=i18n="versus">vs.</span> {{targetnumber}} </div>
|
||
<div class="sheet-rtrow"><span data-i18n="item-test">Item Test</span>: {{result}}</div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
{{#poolname}}<div class="sheet-rtrow">{{poolname}}: {{pooldice}}</div>{{/poolname}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#dicepool}}<div class="sheet-rtrow"><span data-i18n="dice-pool-used">Dice Pool Used</span>: {{dicepool}}</div>{{/dicepool}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-skill">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{myname}}: {{skill}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="rolling">Rolling:</b> {{rolldice}}d6 <span data=i18n="versus">vs.</span> {{targetnumber}} </div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
<div class="sheet-rtrow"><span data-i18n="skill-test">Skill Test</span>: {{result}}</div>
|
||
{{#poolname}}<div class="sheet-rtrow">{{poolname}}: {{pooldice}}</div>{{/poolname}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#dicepool}}<div class="sheet-rtrow"><span data-i18n="dice-pool-used">Dice Pool Used</span>: {{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 data-i18n="success-test">Success Test</span>: {{result}}</div>
|
||
<div class="sheet-rtrow"><span data-i18n="target-number">Target Number</span>: {{targetnumber}}</div>
|
||
<div class="sheet-rtrow"><span data-i18n="combat-pool">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 data-i18n="roll">Roll</b>: {{roll}}</div>{{/roll}}
|
||
<div class="rtrow" data-i18n="all-pools-refreshed">All pools refreshed</div>
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
{{#rollGreater() roll 10}}<div></div> {{character}} <span data-i18n="multi-combat-phase-message">has qualified for multiple combat phases!</span>
|
||
</div> {{/rollGreater() roll 10}}
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-aoe">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{character}} <span data=i18n="versus">vs.</span> {{weapon}} </div>
|
||
<div class="sheet-rtrow"><b data-i18n="target-number">Target Number:</b> {{targetnumber}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="dice">Dice</b>: {{dice}}</div>
|
||
<div class="sheet-rtrow"><b data-i18n="result">Result</b>: {{computed::attacktest}} </div>
|
||
{{#senddata}}<div class="sheet-rtrow"><b>{{character}}:</b>
|
||
[<span data-i18n="spell-defense">Spell Defense</span>](~selected|spelldefense||{{computed::senddata}})
|
||
{{#dodge}} [<span data-i18n="dodge">Dodge</span>](~{{character}}|dodge||{{computed::senddata}}){{/dodge}}
|
||
[<span data-i18n="resist">Resist</span>](~{{character}}|{{computed::resisttype}}||{{computed::senddata}})
|
||
</div>{{/senddata}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-resist">
|
||
<div class="sheet-rtheader">{{character}}: {{Power}}{{wpndmg}} <span data=i18n="versus">vs</span> {{name}} {{armorvalue}}</div>
|
||
<div class="sheet-rtrow"><span data-i18n="rolling">Rolling</span>: {{rolldice}}d6 vs. {{targetnumber}} = {{roll}}</div>
|
||
<div class="sheet-rtrow">Combat Pool Used: {{combatpool}}</div>
|
||
</rolltemplate>
|
||
|
||
|
||
<rolltemplate class="sheet-rolltemplate-resistadv">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{character}}: {{Power}}{{wpndmg}} <span data=i18n="versus">vs</span> {{name}} {{armorvalue}}</div>
|
||
<div class="sheet-rtrow"><span data-i18n="rolling">Rolling</span>: {{rolldice}}d6 vs. {{targetnumber}} = {{roll}}</div>
|
||
{{#distance}}<div class="rtrow"><span data-i18n="distance-from-explosion">Distance from Explosion</span>: {{distance}}<span data-i18n="meters-power-reduced-by">meter(s) Power Reduced by</span> {{blastredux}}
|
||
</div>{{/distance}}
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
{{#finaldmg}}
|
||
<div class="sheet-resist-table">
|
||
<div data-i18n="attack">Attack</div>
|
||
<div></div>
|
||
<div data-i18n="resist">Resist</div>
|
||
<div></div>
|
||
<div data-i18n="dodge">Dodge</div>
|
||
<div></div>
|
||
<div data-i18n="result">Result</div>
|
||
<div>{{attacktest}}</div>
|
||
<div>-</div>
|
||
<div>({{roll}}</div>
|
||
<div>+</div>
|
||
<div>{{dodge}})</div>
|
||
<div>=</div>
|
||
<div>{{computed::netresult}}</div>
|
||
</div>
|
||
<div class="rtrow"><span data-i18n="final-damage-staged-to">Final Damage: staged to</span> {{computed::finaldmg}}</div>{{/finaldmg}}
|
||
{{#spelldmg}}
|
||
<div class="sheet-spell-resist-table">
|
||
<div data-i18n="attack">Attack</div>
|
||
<div></div>
|
||
<div data-i18n="resist">Resist</div>
|
||
<div></div>
|
||
<div data-i18n="result">Result</div>
|
||
<div>{{attacktest}}</div>
|
||
<div>-</div>
|
||
<div>{{roll}}</div>
|
||
<div>=</div>
|
||
<div>{{computed::netresult}}</div>
|
||
</div>
|
||
<div class="rtrow"><span data-i18n="final-damage-staged-to">Final Damage: staged to </span>{{computed::spelldmg}}</div>{{/spelldmg}}
|
||
<div class="sheet-rtrow">Combat Pool Used: {{combatpool}}</div>
|
||
{{#senddata}}<div class="sheet-rtrow">{{character}}: [Resist](~selected|resistroll||{{computed::senddata}})
|
||
</div>{{/senddata}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-matrix">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader"><b>{{myname}} vs. {{target}}</b></div>
|
||
<div class="sheet-rtrow"><b data-i18n="rolling">Rolling</b>: {{rolldice}}d6 vs. {{computed::targetnumber}} </div>
|
||
{{#hackingpool}}<div class="rtrow"><b data-i18n="hacking-pool-dice">Hacking Pool Dice:</b> {{hackingpool}}</div>{{/hackingpool}}
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
<div class="sheet-rtrow"><b>{{action}} {{utilitylevel}}:</b> {{computed::roll}} {{computed::wdmg}}</div>
|
||
{{#resist}}<div class="sheet-rtrow"><b data-i18n="final-damage-staged-to">Final Damage staged to</b> {{computed::finaldamage}}</div>{{/resist}}
|
||
{{#debuff}}<div class="sheet-rtrow"><b>{{debuff}}</b> <span data-i18n="reduce-by">Reduce by</span> {{computed::finaldamage}}</div>{{/debuff}}
|
||
{{#senddata}}<div class="sheet-rtrow"><b>{{target}}:</b> [<span data-i18n="resist">Resist</span>](~selected|matrixresist||{{computed::senddata}})</div>{{/senddata}}
|
||
{{#senddata2}}<div class="sheet-rtrow"><b>{{target}}:</b> [<span data-i18n="oppose">Oppose</span>](~{{targetname}}|matrixmaneuvers||{{computed::senddata2}})</div>{{/senddata2}}
|
||
{{#oppose}}<div class="sheet-rtrow"><b data-i18n="utility-test">Utility Test</b> {{oppose}}</div>{{/oppose}}
|
||
{{#sensor}}<div class="sheet-rtrow"><b data-i18n="sensor-test">Sensor Test</b> {{sensor}}</div>{{/sensor}}
|
||
{{#blackic}}<div class="sheet-rtrow">[{{blackic}} <span data-i18n="resist">Resist</span>](~selected|resistroll||{{computed::payload}})</div>{{/blackic}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#winner}}<div class="sheet-rtrow"><b data-i18n="winner">Winner</b> {{computed::winner}} : {{computed::testresult}} </div>{{/winner}}
|
||
{{#detect}}<div class="sheet-rtrow"><b>{{target}}:</b> {{detect}}</div>{{/detect}}
|
||
{{#clickme}}<div class="sheet-rtrow">{{clickme}}</div>{{/clickme}}
|
||
{{#matrixdmg}}<div class="sheet-rtrow">{{matrixdmg}} <span data-i18n="damage-reduced-by"></span>{{computed::roll}}{{/matrixdmg}}
|
||
{{#matrixdmg}}<div class="sheet-rtrow"><b>{{utilitylevel}}</b> <span data-i18n="utility-rating-reduced-by"></span><b> 1</b></div>{{/matrixdmg}}
|
||
</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 data-i18n="control-pool-dice-used">Control Pool Dice Used:</b> {{controlpool}}</div>{{/controlpool}}
|
||
{{#targetnumber}}<div class="sheet-rtrow"><b data-i18n="target-number">Target Number</b> {{computed::targetnumber}}</div>{{/targetnumber}}
|
||
{{#description}}<div class="sheet-rtrow">{{description}}</div>{{/description}}
|
||
{{#charscore}}<div class="sheet-rtrow"><b>{{character}} <span data-i18n="score">score:</b> {{charscore}}</div>{{/charscore}}
|
||
{{#targetscore}}<div class="sheet-rtrow"><b>{{target}} <span data-i18n="score">score:</b> {{targetscore}}</div>{{/targetscore}}
|
||
{{#delta}}<div class="sheet-rtrow"><b data-i18n="maneuever-score-difference">Maneuever Score Difference</b>: {{delta}}</div>{{/delta}}
|
||
{{#ecd}}<div class="sheet-rtrow"><span data-i18n="ecd-test">ECD Test</span>: {{ecd}}</div>{{/ecd}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#position}}<div class="sheet-rtrow"><b data-i18n="new-position-score">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"><span data-i18n="action">Action</span>: {{action}}</div>
|
||
{{#type}}<div class="sheet-rtrow">Type: {{type}}</div>{{/type}}
|
||
{{#info1}}<div class="sheet-rtrow">{{info1}}</div>{{/info1}}
|
||
{{#info2}}<div class="sheet-rtrow">{{info2}}</div>{{/info2}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
|
||
|
||
|