mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
8574 lines
434 KiB
HTML
8574 lines
434 KiB
HTML
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' />
|
||
<div class="geninfo">
|
||
<div>
|
||
<div class="SRH2W">General Information</div>
|
||
<div class="geninfo-item">
|
||
<div class="SRH5">Name:</div>
|
||
<input class="text-mid" type="text" name="attr_character_name" disabled="true">
|
||
<div></div>
|
||
<div></div>
|
||
<div class="SRH5">Sheet Type:</div>
|
||
<select name="attr_sheettype" class="largeselect">
|
||
<option selected>Character</option>
|
||
<option>NPC</option>
|
||
<option>Critter</option>
|
||
<option>Spirit</option>
|
||
<option>Drone</option>
|
||
<option>Vehicle</option>
|
||
<option>Matrix</option>
|
||
<option>Frame</option>
|
||
</select>
|
||
<div></div>
|
||
<div class="box text-mid"><a class="button" href="#popup1">Import</a></div>
|
||
</div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character" />
|
||
<div class="metatype-info">
|
||
<div class="SRH5">MetaType:</div><select name="attr_metatype" class="largeselect">
|
||
<option selected>Human</option>
|
||
<option>Dwarf</option>
|
||
<option>Elf</option>
|
||
<option>Ork</option>
|
||
<option>Troll</option>
|
||
</select>
|
||
<div class="SRH5">Age:</div> <input type="number" name="attr_age">
|
||
<div class="SRH5">Height:</div> <input type='number' name="attr_height">
|
||
<div class="SRH5">Weight:</div> <input type='number' name="attr_weight" step='0.01'>
|
||
</div>
|
||
<div class="spirittype-info">
|
||
<div class="SRH5">Spirit Type: </div>
|
||
<select id="spirit-type" name="attr_spirit-type" style="largeselect">
|
||
<option>Watcher</option>
|
||
<optgroup label="Elementals">
|
||
<option>Air Elemental</option>
|
||
<option>Water Elemental</option>
|
||
<option>Earth Elemental</option>
|
||
<option>Fire Elemental</option>
|
||
</optgroup>
|
||
<optgroup label="Spirits of Man">
|
||
<option>City Spirit</option>
|
||
<option>Field Spirit</option>
|
||
<option>Hearth Spirit</option>
|
||
</optgroup>
|
||
<optgroup label="Spirits of the Land">
|
||
<option>Desert Spirit</option>
|
||
<option>Forest Spirit</option>
|
||
<option>Mountain Spirit</option>
|
||
<option>Prairie Spirit</option>
|
||
</optgroup>
|
||
<optgroup label="Spirits of the Sky">
|
||
<option>Mist Spirit</option>
|
||
<option>Storm Spirit</option>
|
||
<option>Wind Spirit</option>
|
||
</optgroup>
|
||
<optgroup label="Spirits of the Waters">
|
||
<option>Lake Spirit</option>
|
||
<option>River Spirit</option>
|
||
<option>Sea Spirit</option>
|
||
</optgroup>
|
||
<optgroup label="Spirits of the Elements">
|
||
<option>Gnome</option>
|
||
<option>Manitous</option>
|
||
<option>Salamander</option>
|
||
<option>Sylphs</option>
|
||
<option>Ancestor</option>
|
||
</optgroup>
|
||
</select>
|
||
<div class="SRH5">Force:</div>
|
||
<input type="number" name="attr_force">
|
||
</div>
|
||
</div>
|
||
<div><img src="https://raw.githubusercontent.com/bahornbeck/img/master/images/srlogo.png"
|
||
alt="Shadowrun Third Edition"></div>
|
||
|
||
</div>
|
||
|
||
|
||
<div class="hidden-constants">
|
||
<input type="hidden" name="attr_iconstatuscode" value=0>
|
||
<input type='hidden' name='attr_gyro-on' value=0 />
|
||
<input type='hidden' name='attr_wp-char' value="(@{stun_pen} + @{wound_pen})" />
|
||
<input type='hidden' name='attr_wp-matrix' value="(@{stun_pen} + @{wound_pen} + @{matrix-penalty})" />
|
||
<input type='hidden' name='attr_wp-vehicle'
|
||
value="(@{vehicle-penalty} +@{rccommand-penalty} + @{rcsimsense-penalty} +@{rcsystem-penalty})" />
|
||
<input type='hidden' name='attr_ask-range' value="?{Range|Short,4|Medium,5|Long,6|Extreme,9}" />
|
||
<button type="action" name="act_init-aug" class="d6-button" title="Augmented Initiative">L</button>
|
||
<button type="action" name="act_endturn" class="d6-button" title="End Combat Turn">L</button>
|
||
<button type="action" name="act_resistroll" class="d6-button" title="Resist Roll">L</button>
|
||
<button type="action" name="act_resist-ballistic-normal" class="d6-button"
|
||
title="Resist with Ballistic Armor">L</button>
|
||
<button type="action" name="act_resist-ballistic-half" class="d6-button"
|
||
title="Resist with 1/2 Ballistic Armor">L</button>
|
||
<button type="action" name="act_resist-ballistic-double" class="d6-button"
|
||
title="Resist with double Ballistic Armor">L</button>
|
||
<button type="action" name="act_resist-impact-normal" class="d6-button" title="Resist with Impact Armor">L</button>
|
||
<button type="action" name="act_resist-impact-half" class="d6-button"
|
||
title="Resist with 1/2 Impact Armor">L</button>
|
||
<button type="action" name="act_resist-impact-double" class="d6-button"
|
||
title="Resist with double Impact Armor">L</button>
|
||
<button type="action" name="act_rangedattack-primary" class="d6-button"
|
||
title="Attack with primary equipped ranged weapons">L</button>
|
||
<button type="action" name="act_meleeattack-primary" class="d6-button"
|
||
title="Attack with primary equipped melee weapons">L</button>
|
||
<button type="action" name="act_spiritcontrol" class="d6-button" title="spirit control test">L</button>
|
||
<button type="action" name="act_banishing" class="d6-button" title="banishing test">L</button>
|
||
<button type="action" name="act_summoning" class="d6-button" title="summoning test">L</button>
|
||
<button type="action" name="act_attrib-body" class="d6-button" title="body test">L</button>
|
||
<button type="action" name="act_attrib-willpower" class="d6-button" title="willpower test">L</button>
|
||
<button type="action" name="act_attrib-intelligence" class="d6-button" title="intelligence test">L</button>
|
||
<button type="action" name="act_attrib-force" class="d6-button" title="force test">L</button>
|
||
<button type="action" name="act_attrib-body-max" class="d6-button" title="body max test">L</button>
|
||
<button type="action" name="act_attrib-willpower-max" class="d6-button" title="willpower max test">L</button>
|
||
<button type="action" name="act_attrib-intelligence-max" class="d6-button" title="intelligence max test">L</button>
|
||
|
||
</div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character" />
|
||
<div class="characters-npcs">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="alwaysdisplayed-buttons">
|
||
<input type='hidden' class='magictype' name='attr_magic-type' value="mage" />
|
||
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value="character" />
|
||
<button class="charbutton" type="action" name="act_character" title="Character Attributes and Karma">Attributes</button>
|
||
<button class="skillsbutton" type="action" name="act_skills" title="Active and Knowledge Skills">Skills</button>
|
||
<button class="magicbutton" type="action" name="act_magic" title="Magic Skills, Spells, Fetishes, Initiation and Adept Powers">Magic</button>
|
||
<button class="adeptbutton" type="action" name="act_magic" title="Magic Skills, Spells, Fetishes, Initiation and Adept Powers">Adept</button>
|
||
<button class="decksbutton" type="action" name="act_decks" title="Computer Skills, Cyberdeck configuration and Utilities">Decking</button>
|
||
<button class="gearbutton" type="action" name="act_gear" title="Gear, Vehicles and Nuyen">Gear</button>
|
||
<button class="riggerbutton" type="action" name="act_rigger" title="VCR, Remote Control Deck and Electronic Warfare">Rigger</button>
|
||
<button class="combatbutton" type="action" name="act_combat" title="Combat Skills and Weapons for Ranged and Melee">Combat</button>
|
||
<button class="cyberwarebutton" type="action" name="act_cyberware" title="Cyberware, Bioware and Nanotech">Cyberware</button>
|
||
<button class="contactsbutton" type="action" name="act_contacts" title="Contacts and Lifestyle Notes">Contacts/Lifestyle</button>
|
||
<button class="karmabutton" type="action" name="act_karma" title="Karma and Karam expenditures">Karma</button>
|
||
</div>
|
||
<div class="critters-only critters-buttons">
|
||
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value="character" />
|
||
<button class="charbutton" type="action" name="act_character"
|
||
title="Character Attributes and Karma">Attributes</button>
|
||
<button class="combatbutton" type="action" name="act_combat"
|
||
title="Combat Skills and Weapons for Ranged and Melee">Combat</button>
|
||
<button class="critters-powers-button" type="action" name="act_critter-powers"
|
||
title="Critter Powers and Weaknesses">Powers</button>
|
||
<button class="magicbutton" type="action" name="act_magic" title="Critter Magic">Magic</button>
|
||
</div>
|
||
<div class="spirits-only spirits-buttons">
|
||
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value="character" />
|
||
<button class="charbutton" type="action" name="act_character" title="Spirit Attributes">Attributes</button>
|
||
<button class="critters-powers-button" type="action" name="act_critter-powers"
|
||
title="Spirit Powers and Weaknesses">Powers</button>
|
||
<button class="magicbutton" type="action" name="act_magic" title="Spirit Magic">Magic</button>
|
||
</div>
|
||
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value='character' />
|
||
|
||
<div class="alwaysdisplayed">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character" />
|
||
<div class="organism-condition">
|
||
<div class="SRH3">Condition Monitor</div>
|
||
<br>
|
||
<div class="conditionstatus">
|
||
<div></div>
|
||
<div>Uninjured</div>
|
||
<div>Light Stun</div>
|
||
<div>Moderate Stun</div>
|
||
<div>Serious Stun</div>
|
||
<div>Unconscious</div>
|
||
<div>Stun</div>
|
||
<div>
|
||
<input type="radio" name="attr_stun" value=0 CHECKED>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_stun" value=1>
|
||
<input type="radio" name="attr_stun" value=2>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_stun" value=3>
|
||
<input type="radio" name="attr_stun" value=4>
|
||
<input type="radio" name="attr_stun" value=5>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_stun" value=6>
|
||
<input type="radio" name="attr_stun" value=7>
|
||
<input type="radio" name="attr_stun" value=8>
|
||
<input type="radio" name="attr_stun" value=9>
|
||
</div>
|
||
<div><input type="radio" name="attr_stun" value=100></div>
|
||
<div>Physical</div>
|
||
<div>
|
||
<input type="radio" name="attr_wounds" value=0 CHECKED>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_wounds" value=1>
|
||
<input type="radio" name="attr_wounds" value=2>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_wounds" value=3>
|
||
<input type="radio" name="attr_wounds" value=4>
|
||
<input type="radio" name="attr_wounds" value=5>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_wounds" value=6>
|
||
<input type="radio" name="attr_wounds" value=7>
|
||
<input type="radio" name="attr_wounds" value=8>
|
||
<input type="radio" name="attr_wounds" value=9>
|
||
</div>
|
||
<div><input type="radio" name="attr_wounds" value=100></div>
|
||
<div></div>
|
||
<div>Uninjured</div>
|
||
<div>Light Wound</div>
|
||
<div>Moderate Wound</div>
|
||
<div>Serious Wound</div>
|
||
<div>Unconscious/Dead</div>
|
||
<div></div>
|
||
|
||
</div>
|
||
<div><br></div>
|
||
</div>
|
||
<div class="dicepool">
|
||
<input type="hidden" name="attr_combatpool-used" value=0 />
|
||
<input type="hidden" name="attr_spellpool-used" value=0 />
|
||
<input type='hidden' name='attr_spellpool-used-total' value=0 />
|
||
<input type="hidden" name="attr_hackingpool-used" value=0 />
|
||
<input type="hidden" name="attr_hackingpool-used-total" value=0 />
|
||
<input type="hidden" name="attr_controlpool-used" value=0 />
|
||
<input type="hidden" name="attr_astralpool-used" value=0 />
|
||
<input type="hidden" name="attr_taskpool-used" value=0 />
|
||
<div class="SRH3">Dice Pools</div>
|
||
<div>Max</div>
|
||
<div>Used</div>
|
||
<div> Combat Pool:</div>
|
||
<div><span name="attr_combatpool"></span></div>
|
||
<div><input type='hidden' class='combatpool-over' name='attr_combatpool-over' /><span class="combatpool-over" name="attr_combatpool-used"></span></div>
|
||
<div> Spell Pool:</div>
|
||
<div><span type="number" name="attr_spellpool"></span> </div>
|
||
<div><input type='hidden' class='spellpool-over' name='attr_spellpool-over' /><span class="spellpool-over" name="attr_spellpool-used-total"></span></div>
|
||
<div> Hacking Pool:</div>
|
||
<div><span type="number" name="attr_hackingpool"></span> </div>
|
||
<div><input type='hidden' class='hackingpool-over' name='attr_hackingpool-over' /><span class="hackingpool-over" name="attr_hackingpool-used-total"></span></div>
|
||
<div> Control Pool:</div>
|
||
<div><span type="number" name="attr_controlpool"></span> </div>
|
||
<div><input type='hidden' class='controlpool-over' name='attr_controlpool-over' /><span class="controlpool-over" name="attr_controlpool-used"></span></div>
|
||
<div> Astral Pool:</div>
|
||
<div><span type="number" name="attr_astralpool"></span> </div>
|
||
<div><input type='hidden' class='astralpool-over' name='attr_astralpool-over' /><span class="astralpool-over" name="attr_astralpool-used"></span></div>
|
||
<div> Task Pool:</div>
|
||
<div><span type="number" name="attr_taskpool"></span> </div>
|
||
<div><input type='hidden' class='taskpool-over' name='attr_taskpool-over' /><span class="taskpool-over" name="attr_taskpool-used"></span></div>
|
||
</div>
|
||
</div>
|
||
<div class="conditionstatus2">
|
||
<div>Physical Damage Overflow:</div>
|
||
<div><input type="number" name="attr_overflow" value=0 min=0 /></div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' value="Character" />
|
||
<div></div>
|
||
<div class="normal-init text-mid">Init Nat.</div>
|
||
<div class="normal-init"><button type="action" name="act_init" class="d6-button" title="Unaugmented Initiative"
|
||
id="natrualinit">L</button></div>
|
||
<div class="normal-init text-mid">Init. Aug.</div>
|
||
<div class="normal-init"><button type="action" name="act_init" class="d6-button" title="Augmented Initiative"
|
||
id="augmentedinit">L</button></div>
|
||
<div class="spirits-only text-mid">Init. Phy.</div>
|
||
<div class="spirits-only"><button type="action" name="act_init" class="d6-button" title="Physical Initiative"
|
||
id="spiritinit">L</button></div>
|
||
<div class="spirits-only text-mid">Init. Astr. </div>
|
||
<div class="spirits-only"><button type="action" name="act_init" class="d6-button" title="Astral Initiative"
|
||
id="astralinit">L</button></div>
|
||
<div class="text-mid">End Turn</div>
|
||
<div><button type="action" name="act_endturn" class="d6-button" title="End Combat Turn" id="endturn">L</button>
|
||
</div>
|
||
<div class="conditionstatus2-attrs">
|
||
<div class="text-mid">B: <span name="attr_body_max"></span></div>
|
||
<div class="text-mid">Q: <span name="attr_quickness_max"></span></div>
|
||
<div class="text-mid">S: <span name="attr_strength_max"></span></div>
|
||
<div class="text-mid">C: <span name="attr_charisma_max"></span></div>
|
||
<div class="text-mid">I: <span name="attr_intelligence_max"></span></div>
|
||
<div class="text-mid">W: <span name="attr_willpower_max"></span></div>
|
||
<div class="text-mid">R: <span name="attr_reaction_max"></span></div>
|
||
</div>
|
||
</div>
|
||
<div class="combat-always-visible">
|
||
<div class="SRH3">Combat conditions</div>
|
||
<div class="combat-modifiers-total">
|
||
<div class="text-mid">Ranged Modifiers: <span name="attr_rangedTN"></span></div>
|
||
<div class="text-mid">Melee Modifiers: <span name="attr_meleeTN"></span></div>
|
||
<div class="text-mid">Rounds Fired: <span name="attr_rounds-phase" value=0></span></div>
|
||
<div>Dodge<button type="action" name="act_dodge" class="d6-button" title="Dodge Attack"
|
||
id="dodge">L</button></div>
|
||
<div>Ballistic: <span name="attr_ballistic" value=0></span><button type="action" name="act_resistdmg" class="d6-button" title="Resist Damage with Ballistic Armor" id="ballistic">L</button> </div>
|
||
<div>Impact: <span name="attr_impact" value=0></span><button type="action" name="act_resistdmg" class="d6-button" title="Resist Damage with Impact Armor" id="impact">L</button> </div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="manual-gunnery">
|
||
<input type='hidden' class='gunnery-switch' name='attr_gunneryswitch' value="show" />
|
||
|
||
<div class="manual-gunnery-show">
|
||
<input type="hidden" class="manual-gunnery-tn" name="attr_manualgunneryTN" value=0>
|
||
<button class="gunneryswitch" type="action" name="act_gunneryswitch">Show Manual
|
||
Gunnery</button><span name="attr_manualgunneryTN"></span>
|
||
</div>
|
||
<div class="manual-gunnery-hide">
|
||
<input type="hidden" class="manual-gunnery-tn" name="attr_manualgunneryTN" value=0>
|
||
<button class="gunneryswitch" type="action" name="act_gunneryswitch">Hide Manual
|
||
Gunnery</button><span name="attr_manualgunneryTN"></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="combat-conditions">
|
||
<div class="text-mid">Visibility</div>
|
||
<div class="text-mid">Vision Enhacement</div>
|
||
<div class="text-mid">Target Cover</div>
|
||
<div class="text-mid">Movement</div>
|
||
<div>Dual Wield</div>
|
||
<div>Called Shot</div>
|
||
<div>Aim Actions</div>
|
||
<div>Melee Foes</div>
|
||
<div>Melee Friends</div>
|
||
<div class="text-mid">Targets</div>
|
||
<div class="text-mid">Position</div>
|
||
<div>Misc Modifiers</div>
|
||
<div class="center-checkbox"><select name="attr_visibility" class="mediumselect2">
|
||
<option value=0 selected>Normal</option>
|
||
<option value="@{fulldark}">Full Dark</option>
|
||
<option value="@{partiallight}">Partail Light</option>
|
||
<option value="@{minlight}">Minimal Light</option>
|
||
<option value="@{glare}">Glare</option>
|
||
<option value="@{mist}">Mist</option>
|
||
<option value="@{lightsmoke}">Light Smoke/Rain</option>
|
||
<option value="@{fullsmoke}">Heavy Smoke/Rain</option>
|
||
<option value="@{thermalsmoke}">Thermal Smoke</option>
|
||
</select>
|
||
</div>
|
||
<div><select name="attr_visionenhancement" class="mediumselect2">
|
||
<option selected>None</option>
|
||
<option>LowLight</option>
|
||
<option>Thermal</option>
|
||
</select></div>
|
||
<div><select name="attr_cover" class="mediumselect2">
|
||
<optgroup label="Standard">
|
||
<option value=0 SELECTED>None</option>
|
||
<option value=4>Partial</option>
|
||
<option value=8>Blind Fire</option>
|
||
<optgroup label="GM's Choice">
|
||
<option value=1>+1</option>
|
||
<option value=2>+2</option>
|
||
<option value=3>+3</option>
|
||
<option value=4>+4</option>
|
||
<option value=5>+5</option>
|
||
<option value=6>+6</option>
|
||
</select></div>
|
||
<div><select name="attr_move" title="Movement actions taken" class="mediumselect2">
|
||
<option selected value=0 selected>not moving</option>
|
||
<option value=1>walk</option>
|
||
<option value=2>walk (difficult ground)</option>
|
||
<option value=4>run</option>
|
||
<option value=6>run (difficult ground)</option>s
|
||
</select></div>
|
||
|
||
<div class="center-checkbox"><input type='checkbox' name="attr_dualwield" value='2' title="2 Guns Equipped">
|
||
</div>
|
||
<div class="center-checkbox"><input type='checkbox' name="attr_calledshot" value='4' title="Called Shot">
|
||
</div>
|
||
<div class="center-checkbox"><input type='number' name="attr_aim" value="0" min="0"
|
||
title="Aim Actions Taken"></div>
|
||
<div><input type='number' name="attr_enemies" max="4" min="0" value="0" title="Enemies in Melee with you">
|
||
</div>
|
||
<div><input type='number' name="attr_friends" max="4" min="0" value="0" title="Friends in Melee with you">
|
||
</div>
|
||
<div><input type='number' name="attr_meleetargets" value="0" min="0"
|
||
title="How many targets are you attacking at one time"></div>
|
||
<div><select name="attr_position" title="Position of you vs. target in Melee" class="mediumselect2">
|
||
<option value=0 selected>None</option>
|
||
<option value=1>Superior Position</option>
|
||
<option value=2>Target Prone</option>
|
||
</select></div>
|
||
<div><input type='number' name="attr_misccombatmods" value="0" title="Any other modifiers for combat?">
|
||
</div>
|
||
</div>
|
||
<input type='hidden' class='gunnery-switch' name='attr_gunneryswitch' value="show" />
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="manual-gunnery-mods">
|
||
<div>Relative Motion</div>
|
||
<div>Relative Speed</div>
|
||
<div>Maneuver Score</div>
|
||
<div>Vehicle Damage</div>
|
||
<div>Weapon Mount</div>
|
||
<div>Terrain</div>
|
||
<div>Target Type</div>
|
||
<div><select name="attr_gunnerymotion" title="motion relative to target" class="mediumselect2">
|
||
<option value=0 selected>None</option>
|
||
<option value=-1>Towards</option>
|
||
<option value=1>Away</option>
|
||
</select></div>
|
||
<div><select name="attr_gunneryspeed" title="speed relative to target" class="mediumselect2">
|
||
<option value=0 selected>About Equal</option>
|
||
<option value=2>Up to 2X</option>
|
||
<option value=4>Up to 3X</option>
|
||
<option value=6>More than 3X</option>
|
||
</select></div>
|
||
<div><select name="attr_gunnerymaneuver" title="Maneuver score difference" class="mediumselect2">
|
||
<option value=0 selected>None</option>
|
||
<option value=-1>Attacker Greaty by 10</option>
|
||
<option value=1>Target Greater by 10</option>
|
||
</select></div>
|
||
<div><select name="attr_gunneryvehicledmg" title="Vehicle Damaged Modifiers" class="mediumselect2">
|
||
<option value=0 selected>None</option>
|
||
<option value=1>L</option>
|
||
<option value=2>M</option>
|
||
<option value=3>S</option>
|
||
</select></div>
|
||
<div><select name="attr_gunnerymount" title="Is weapon mounted?" class="mediumselect2">
|
||
<option value=2>Unmounted</option>
|
||
<option value=0 selected>mounted</option>
|
||
</select></div>
|
||
<div><select name="attr_gunneryterrain" title="Moving through terrain" class="mediumselect2">
|
||
<option value=0 selected>Normal</option>
|
||
<option value=2>Restricted</option>
|
||
<option value=4>Tight</option>
|
||
<option value=2>Combat Zone</option>
|
||
</select></div>
|
||
<div><select name="attr_gunnerytargettype" title="Target type/size" class="mediumselect2">
|
||
<option value=0 selected>Metahuman sized</option>
|
||
<option value=1>Small critter</option>
|
||
<option value=-1>Large critter</option>
|
||
<option value=1>Small drone</option>
|
||
<option value=0>Motorcyle</option>
|
||
<option value=-1>Automobile</option>
|
||
<option value=-1>Limo/Light Truck</option>
|
||
<option value=-3>Heavy Truck/Trailer</option>
|
||
<option value=-1>Boat</option>
|
||
<option value=-3>Yacht</option>
|
||
<option value=-8>Freighter/Tanker</option>
|
||
<option value=0>Ultralight glider</option>
|
||
<option value=-2>Fixed Wing</option>
|
||
<option value=-6>Commerical Airliner</option>
|
||
<option value=-2>Helicopter</option>
|
||
<option value=-6>Zepplin/Blimp</option>
|
||
<option value=-3>LAV</option>
|
||
<option value=-3>Military Ground Vehicle</option>
|
||
</select></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' value='character' />
|
||
<div class='sheet-character'>
|
||
<div class="attributes-init">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div>
|
||
<div class="SRH3">Attributes</div>
|
||
<div class="char-attributes">
|
||
<header class="table-top-left">Attribute</header>
|
||
<header class="table-top-mid">Base</header>
|
||
<header class="table-top-mid">Mods</header>
|
||
<header class="table-top-right">Final</header>
|
||
<header class="table-item-left">Body</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_body" value=1 min=1 style='width:39px;' />
|
||
<div><button title="Body Test without augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="body">L</button></div>
|
||
</div>
|
||
<div class="table-item">+<input type="number" name="attr_body-mods" value=0 style='width:39px;' />=
|
||
</div>
|
||
<div class="table-item">
|
||
<span name="attr_body_max"></span>
|
||
<div><button title="Body Test with augmentation" class="d6-button" type="action" name="act_attrib"
|
||
id="body|max">L</button></div>
|
||
</div>
|
||
<header class="table-item-left">Quickness</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_quickness" value=1 min=1 style='width:39px;' />
|
||
<div><button title="Quickness Test without augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="quickness">L</button></div>
|
||
</div>
|
||
<div class="table-item">+<input type="number" name="attr_quickness-mods" value=0 style='width:39px;' />=
|
||
</div>
|
||
<div class="table-item">
|
||
<span name="attr_quickness_max"></span>
|
||
<div><button title="Quickness Test witht augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="quickness|max">L</button></div>
|
||
</div>
|
||
<header class="table-item-left">Strength</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_strength" value=1 min=1 style='width:39px;' />
|
||
<div><button title="Strength Test without augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="strength">L</button></div>
|
||
</div>
|
||
<div class="table-item">+<input type="number" name="attr_strength-mods" value=0 style='width:39px;' />=
|
||
</div>
|
||
<div class="table-item">
|
||
<span name="attr_strength_max"></span>
|
||
<div><button title="Strength Test with augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="strength|max">L</button></div>
|
||
</div>
|
||
<header class="table-item-left">Charisma</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_Charisma" value=1 min=1 style='width:39px;' />
|
||
<div><button title="Charisma Test without augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="charisma">L</button></div>
|
||
</div>
|
||
<div class="table-item">+<input type="number" name="attr_charisma-mods" value=0 style='width:39px;' />=
|
||
</div>
|
||
<div class="table-item">
|
||
<span name="attr_charisma_max" value=1></span>
|
||
<div><button title="Charisma Test with augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="charisma|max">L</button></div>
|
||
</div>
|
||
<header class="table-item-left">Intelligence</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_intelligence" value=1 min=1 style='width:39px;' />
|
||
<div><button title="Intelligence Test without augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="intelligence">L</button></div>
|
||
</div>
|
||
<div class="table-item">+<input type="number" name="attr_intelligence-mods" value=0
|
||
style='width:39px;' />=</div>
|
||
<div class="table-item">
|
||
<span name="attr_intelligence_max" value=1></span>
|
||
<div><button title="Intelligence Test with augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="intelligence|max">L</button></div>
|
||
</div>
|
||
<header class="table-item-left">Willpower</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_willpower" value=1 min=1 style='width:39px;' />
|
||
<div><button title="Willpower Test without augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="willpower">L</button></div>
|
||
</div>
|
||
<div class="table-item">+<input type="number" name="attr_willpower-mods" value=0 style='width:39px;' />=
|
||
</div>
|
||
<div class="table-item">
|
||
<span name="attr_willpower_max" value=1></span>
|
||
<div><button title="Willpower Test with augmentation" class="d6-button" type="action"
|
||
name="act_attrib" id="willpower|max">L</button></div>
|
||
</div>
|
||
<header class="table-item-left">Essence</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_essence" value=6 step='0.01' min='0.00' style='width:39px' />
|
||
<div><button title="Essence Test" class="d6-button" type="action" name="act_attrib"
|
||
id="essence">L</button></div>
|
||
</div>
|
||
<div></div>
|
||
<div></div>
|
||
<header class="table-item-left">Magic</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_magic" value=0 style='width:39px;' />
|
||
<div><button title="Essence Test" class="d6-button" type="action" name="act_attrib"
|
||
id="magic">L</button></div>
|
||
</div>
|
||
<input type="number" name="attr_signature" value=4 hidden="true">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="critters-only spirits-only">
|
||
<div class="SRH3">Attributes</div>
|
||
<div class="critter-attributes">
|
||
<div class="table-top-left"><b>Attribute</div>
|
||
<div class="table-top-right"><b>Level</div>
|
||
<div class="table-item-left"><b>Perception</div>
|
||
<div class="table-item">
|
||
<div class="sidebyside"><input type="number" name="attr_perception" value=0 min=0 />
|
||
<button type="action" name="act_attrib" class="d6-button" title="Perception Test"
|
||
id="perception">L</button>
|
||
</div>
|
||
</div>
|
||
<div class="table-item-left"><b>Reach</div>
|
||
<div class="table-item">
|
||
<div class="sidebyside"><input type="number" name="attr_meleereach" value=0 />
|
||
<div></div>
|
||
</div>
|
||
</div>
|
||
<div class="table-item-left"><b>Force</div>
|
||
<div class="table-item">
|
||
<div class="sidebyside"><input type="number" name="attr_force" value=0 min=0 />
|
||
<div></div>
|
||
</div>
|
||
</div>
|
||
<div class="table-item-left"><b>Attacks</div>
|
||
<div class="table-item">
|
||
<div class="critter-attack">
|
||
<input type="number" name="attr_attackpower" value=0 min=0 />
|
||
<select name="attr_attackdamage" class="mediumselect2">
|
||
<option>L</option>
|
||
<option SELECTED>M</option>
|
||
<option>S</option>
|
||
<option>D</option>
|
||
<option>L(stun)</option>
|
||
<option>M(stun)</option>
|
||
<option>S(stun)</option>
|
||
<option>D(stun)</option>
|
||
<option></option>
|
||
</select>
|
||
<button type="action" name="act_melee" id="critterattack" class="d6-button"
|
||
title="Attack Offensive">L</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH3">Reaction, Init & Speed</div>
|
||
<div class="reaction">
|
||
<div class="table-top-left"></div>
|
||
<div class="table-top-mid">Natural</div>
|
||
<div class="table-top-mid">Mods</div>
|
||
<div class="table-top-right">Final</div>
|
||
<header class="table-item-left">Reaction:</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_reaction" value="1" min="1">
|
||
<button type="action" name="act_attrib" class="d6-button" title="Un-augmented Reaction Test"
|
||
id="reaction">L</button>
|
||
</div>
|
||
<div class="table-item">+<input type="number" name="attr_reaction-mods" value=0 min=0></div>
|
||
<div class="table-item"> <span name="attr_reaction_max"></span>
|
||
<button type="action" name="act_attrib" class="d6-button" title="Augmented Reaction Test"
|
||
id="reaction|max">L</button>
|
||
</div>
|
||
<header class="table-item-left">Initiative:</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_initiative" value="1" min="1">d6
|
||
<button type="action" name="act_init" class="d6-button" title="Unaugmented Initiative"
|
||
id="natrualinit">L</button>
|
||
</div>
|
||
<div class="table-item">+<input type="number" name="attr_initiative-mods" value=0 min=0></div>
|
||
<div class="table-item"><span name="attr_initiative_max"></span>d6<button type="action" name="act_init"
|
||
class="d6-button" title="Augmented Initiative" id="augmentedinit">L</button>
|
||
</div>
|
||
<div clsss="table-item"></div>
|
||
<div clsss="table-item"></div>
|
||
<div clsss="table-item"></div>
|
||
</div>
|
||
<div class="reaction-spirit">
|
||
<div class="table-top-left"></div>
|
||
<div class="table-top-mid">Physical</div>
|
||
<div class="table-top-right">Astral</div>
|
||
<header class="table-item-left">Reaction:</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_reaction" value="1" min="1">
|
||
<button type="action" name="act_attrib" class="d6-button" title="Reaction Test"
|
||
id="reaction">L</button>
|
||
</div>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_astralreaction" value="1" min="1">
|
||
<button type="action" name="act_attrib" class="d6-button" title="Astral Reaction Test"
|
||
id="astralreaction">L</button>
|
||
</div>
|
||
<header class="table-item-left">Initiative:</header>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_initiative" value="1" min="1">d6+<span
|
||
name="attr_spirit-initp"></span>
|
||
<button title="Physical Initiative" class="d6-button" type="action" name="act_init"
|
||
id="spiritinit">L</button>
|
||
</div>
|
||
<div class="table-item">
|
||
<input type="number" name="attr_initiative_max" value="1" min="1">d6+<span
|
||
name="attr_astralreaction"></span>
|
||
<button title="Astral Initiative" class="d6-button" type="action" name="act_init"
|
||
id="astralinit">L</button>
|
||
</div>
|
||
</div>
|
||
<div class="walk-run">
|
||
<input type="hidden" name="attr_run" value=0 />
|
||
<input type="hidden" name="attr_walk" value=0 />
|
||
<header class="table-item-left">Walking Rate:</header>
|
||
<div class="table-item"><span class="numberspan" name="attr_walk"></span></div>
|
||
<div class="table-item">meters per combat turn</div>
|
||
<header class="table-item-left">Running Rate:</header>
|
||
<div class="table-item"><span class="numberspan" name="attr_run"></span></div>
|
||
<div class="table-item">meters per combat turn</div>
|
||
</div>
|
||
|
||
|
||
<div class="SRH3">Dice Pools</div>
|
||
<div class="dice-pools">
|
||
<header class="table-top-left">Pool</header>
|
||
<header class="table-top-mid">Calculated</header>
|
||
<header class="table-top-mid">Mods</header>
|
||
<header class="table-top-right">Final</header>
|
||
<div class="table-item-left">Combat</div>
|
||
<div class="table-item"><span name="attr_combatpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_combatpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_combatpool"></span></div>
|
||
<div class="table-item-left">Spell</div>
|
||
<div class="table-item"><span name="attr_spellpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_spellpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_spellpool"></span></div>
|
||
<div class="table-item-left">Hacking</div>
|
||
<div class="table-item"><span name="attr_hackingpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_hackingpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_hackingpool"></span></div>
|
||
<div class="table-item-left">Control</div>
|
||
<div class="table-item"><span name="attr_controlpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_controlpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_controlpool"></span></div>
|
||
<div class="table-item-left">Astral</div>
|
||
<div class="table-item"><span name="attr_astralpool-base"></span></div>
|
||
<div class="table-item"><input type="number" name="attr_astralpool-mods" value=0></div>
|
||
<div class="table-item"><span name="attr_astralpool"></span></div>
|
||
<div class="table-item-left">Task</div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"><input type="number" name="attr_taskpool" value=0></div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="npc-chars-only">
|
||
<div class="SRH3">Karma</div>
|
||
<div class="karma-pool">
|
||
<header class="table-top-left">Karma Pool:</header>
|
||
<div class="table-top-right karma-max">
|
||
<input type="number" name="attr_karma-pool" value=0>
|
||
/
|
||
<input type="number" name="attr_karma-pool-used" value=0>
|
||
</div>
|
||
<header class="table-item-left">Good Karma:</header>
|
||
<div class="table-item"><input type="number" name="attr_karma-good" value=0 /></div>
|
||
<header class="table-item-left">Professional Rating:</header>
|
||
<div class="table-item"><input type="number" name="attr_prorating" /></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sheet-skills">
|
||
<!-- Skills Tab -->
|
||
|
||
<div class="SRH2">Skills/Edges/Flaws</div>
|
||
<div class="skills-edges">
|
||
<div class="text-center">
|
||
<div class="SRH4">Skills</div>
|
||
<div class="skills-table">
|
||
<header class="table-top-left">Name</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Pool</header>
|
||
<header class="table-top-right">Roll</header>
|
||
</div>
|
||
<fieldset class="repeating_skills">
|
||
<div class="skills-table">
|
||
<div class="table-item-left"><input type="text" name="attr_skillname" class="myweapontxt"></div>
|
||
<div class="table-item"><input type="number" name="attr_skillrating" min=1 value=1></div>
|
||
<div class="table-item"><select name="attr_pool" class="mediumselect2">
|
||
<option SELECTED value="none">None</option>
|
||
<option value="combat">Combat</option>
|
||
<option value="task">Task</option>
|
||
<option value="hacking">Hacking</option>
|
||
<option value="control">Control</option>
|
||
<option value="spell">Spell</option>
|
||
<option value="astral">Astral</option>
|
||
</select></div>
|
||
<div class="table-item"><button class="d6-button" type="action" name="act_skills">L</button></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div class="text-center">
|
||
<div class="SRH4">Edges</div>
|
||
<div class="edges-table">
|
||
<header class="table-top-left">Type</header>
|
||
<header class="table-top-right">Rating</header>
|
||
</div>
|
||
<fieldset class='repeating_edges'>
|
||
<div class="edges-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name"></div>
|
||
<div class="table-item"><input type="number" name="attr_rating"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div class="text-center">
|
||
<div class="SRH4">Flaws</div>
|
||
<div class="edges-table">
|
||
<header class="table-top-left">Type</header>
|
||
<header class="table-top-right">Rating</header>
|
||
</div>
|
||
<fieldset class='repeating_flaws'>
|
||
<div class="edges-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name"></div>
|
||
<div class="table-item"><input type="number" name="attr_rating"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class='sheet-magic'>
|
||
<!-- Magic Tab -->
|
||
<input type='hidden' class='magictype' name='attr_magic-type' />
|
||
<input type='hidden' name='attr_sorcery-used' value=0 />
|
||
<input type='hidden' name='attr_sorcery-used-total' value=0 />
|
||
<input type='hidden' name='attr_conjuring-used' value=0 />
|
||
<input type='hidden' name='attr_conjuring-used' value=0 />
|
||
<input type='hidden' name='attr_spelldefensedice-used' value=0 />
|
||
<input type='hidden' class='astralattributes-switch' name='attr_astralattributesswitch' value="show" />
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="spells-status">
|
||
<div class="spells-status-tracking">
|
||
<div></div>
|
||
<div>Stacked</div>
|
||
<div>Sustained</div>
|
||
|
||
<div></div>
|
||
<div>Max</div>
|
||
<div>Used</div>
|
||
|
||
<div></div>
|
||
<div>Max</div>
|
||
<div>Defense</div>
|
||
<div>Used</div>
|
||
<div></div>
|
||
<div>Max</div>
|
||
<div>Defense</div>
|
||
<div>Used</div>
|
||
|
||
<div></div>
|
||
<div>Max</div>
|
||
<div>Used</div>
|
||
|
||
<div>Spells</div>
|
||
<div><input type="number" name='attr_spellstack' class="smallnumber" min=0 value=0></div>
|
||
<div><input type="number" name='attr_spellsus' min=0 value=0></div>
|
||
<div>Spell Defense</div>
|
||
<div><input type="number" name='attr_spelldefensedice' min=0 value=0></div>
|
||
<div><span name="attr_spelldefensedice-used"></span></div>
|
||
<div>Sorcery</div>
|
||
<div><span class="sorcery-over" name="attr_sorcery"></span></div>
|
||
<div><input type="number" name="attr_sorcery-defense" min=0 value=0></input></div>
|
||
<div>
|
||
<input type='hidden' class='sorcery-over' name='attr_sorcery-over' />
|
||
<span class="sorcery-over" name="attr_sorcery-used-total"></span>
|
||
</div>
|
||
<div>Spell Pool</div>
|
||
<div><span name="attr_spellpool"></span></div>
|
||
<div><input type="number" name="attr_spellpool-defense" min=0 value=0></input></div>
|
||
<div>
|
||
<input type='hidden' class='spellpool-over' name='attr_spellpool-over' />
|
||
<span class="spellpool-over" name="attr_spellpool-used-total"></span>
|
||
</div>
|
||
<div>Conjuring</div>
|
||
<div><span name="attr_conjuring"></span></div>
|
||
<div><span name="attr_conjuring-used"></span></div>
|
||
|
||
</div>
|
||
<div class="spells-status-buttons">
|
||
<div title="Miscelaneous Modifiers for Spell Casting and Conjuring">Misc. Modifiers: <input type="number"
|
||
name='attr_spellmisc' min=0 value=0></div>
|
||
<div>Defend: </div><button title="Spell Defense" type="action" class="d6-button" name='act_spelldefense'
|
||
id="spelldefense">L</button>
|
||
<div>Dispell: </div><button title="Cancel an existing spell" type="action" class="d6-button"
|
||
name='act_dispell' id="dispelling">L</button>
|
||
<div>Summon: </div><button title="Summon a Spirit or Element" type="action" class="d6-button"
|
||
name='act_conjure' id="summoning">L</button>
|
||
<div>Banish: </div><button title="Banish a Spirit or Element" type="action" class="d6-button"
|
||
name='act_conjure' id="banishing">L</button>
|
||
<div>Control: </div><button title="Take Control of a Spirit or Element" type="action" class="d6-button"
|
||
name='act_conjure' id="spiritcontrol">L</button>
|
||
</div>
|
||
</div>
|
||
<div class="spells-spirit-status">
|
||
<div>Spells Stacked: <input type="number" name='attr_spellstack' class="smallnumber" min=0 value=0></div>
|
||
<div>Spells Sustained: <input type="number" name='attr_spellsus' min=0 value=0></div>
|
||
<div title="Miscelaneous Modifiers for Spell Casting and Conjuring">Misc. Modifiers: <input type="number"
|
||
name='attr_spellmisc' min=0 value=0></div>
|
||
<div>Dispell: </div><button title="Cancel an existing spell" type="action" class="d6-button" name='act_dispell'
|
||
id="dispelling">L</button>
|
||
<div>Resist Banish: </div><button title="Resist a Banishing action by a Mage/Shaman " type="action"
|
||
class="d6-button" name='act_resistbanish' id="resistbanish">L</button>
|
||
</div>
|
||
<div class="astralattributes-show">
|
||
<div class="SRH3">Astral Space
|
||
<button class="switch-button-show" type="action" name="act_astralattributesswitch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="astralattributes-hide">
|
||
<div class="SRH3">Astral Space
|
||
<button class="switch-button-hide" type="action" name="act_astralattributesswitch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<input type="hidden" name="attr_astralreaction" value=0>
|
||
<div class="astralattributes">
|
||
<div class="astralspace">
|
||
<div><b>Astral State: <select name="attr_astralstate">
|
||
<option selected>Physical</option>
|
||
<option>Astral Perception</option>
|
||
<option>Astral Projection</option>
|
||
</select>
|
||
</div>
|
||
<div class="text-mid"><b>Astral Reaction:</div>
|
||
<div class="text-mid"><span class="numberspan" name="attr_astralreaction" /></div>
|
||
<div class="text-mid"><button type="action" name="act_attrib" class="d6-button" title="Astral Reaction Test"
|
||
id="astralreaction">L</button></div>
|
||
<div class="text-mid"><b>Astral Initiative:</div>
|
||
<div class="text-mid">1d6+<span class="numberspan" name="attr_astralreaction" /></div>
|
||
<div class="text-mid">
|
||
<button title="Astral Initiative" class="d6-button" type="action" name="act_init"
|
||
id="astralinit">L</button>
|
||
</div>
|
||
<div></div>
|
||
</div>
|
||
<div class="astralcombat">
|
||
<div><b>Astral Combat:</div>
|
||
<div class="text-mid"><button class="attack-dice" id="astralattack" type="action" name="act_melee"
|
||
title="Astral Combat"></button></div>
|
||
<div>Weapon Focus: <span name="attr_weaponfocus-name"></span></div>
|
||
<div>Enabled <input type="checkbox" name="attr_weaponfocus-equipped" checked></div>
|
||
<div>Force:<span name="attr_weaponfocus-force"></span></div>
|
||
</div>
|
||
<br>
|
||
</div>
|
||
<input type='hidden' class='sorceryskills-switch' name='attr_sorceryskillsswitch' value="show" />
|
||
<div class="sorceryskills-show">
|
||
<div class="SRH3">Magic Skills and Configuration
|
||
<button class="switch-button-show" type="action" name="act_sorceryskillsswitch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="sorceryskills-hide">
|
||
<div class="SRH3">Magic Skills and Configuration
|
||
<button class="switch-button-hide" type="action" name="act_sorceryskillsswitch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<div class="sorcery-skills">
|
||
<div class="sorcery-config">
|
||
<div></div>
|
||
<div><b>Adept<input type="radio" name="attr_magic-type" value="adept"></div>
|
||
<div><b>Mage<input type="radio" name="attr_magic-type" value="mage" selected></div>
|
||
<div><b>Shaman<input type="radio" name="attr_magic-type" value="shaman"></div>
|
||
<div><b>Aspected Mage<input type="radio" name="attr_magic-type" value="aspect"></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="sorcery-table">
|
||
<div>
|
||
<input type="checkbox" name="attr_sorcery-spec-switch" class="sorcery-spec-switch hidden-checkbox"
|
||
value=1 />
|
||
<div class="sorcery-row table-top">
|
||
<header>Sorcery:</header>
|
||
<input type="number" name="attr_sorcery" value=0>
|
||
<button class="d6-button" type="action" name="act_skilltest" id="sorcery spell" title="Spell Casting Test">L</button>
|
||
<div class="skillspec">Specialize</div>
|
||
<input type="checkbox" name="attr_sorcery-spec-switch" class="sorcery-spec-switch" value=1 />
|
||
|
||
</div>
|
||
<div class="sorcery-spec-off table-row">
|
||
<div class="magic-skills-table">
|
||
<div class="table-item-left">Spellcasting:</div>
|
||
<div class="table-item"><span name="attr_spellcasting"></span></div>
|
||
<div class="table-item-left">Spell Defense:</div>
|
||
<div class="table-item"><span name="attr_spelldefense"></span></div>
|
||
<div class="table-item-left">Dispelling:</div>
|
||
<div class="table-item"><span name="attr_dispelling"></span></div>
|
||
<div class="table-item-left">Astral Combat:</div>
|
||
<div class="table-item"><span name="attr_astralcombat"></span></div>
|
||
<div class="table-item-left">Ritual Magic:</div>
|
||
<div class="table-item"><span name="attr_ritualsorcery"></span></div>
|
||
</div>
|
||
</div>
|
||
<div class="sorcery-spec-on">
|
||
<div class="magic-skills-table table-row">
|
||
<header class="table-item-left">Spellcasting:</header>
|
||
<div class="table-item"><input type="number" name="attr_spellcasting">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="spellcasting spell"
|
||
title="Spell Casting Test">L</button>
|
||
</div>
|
||
<header class="table-item-left">Spell Defense:</header>
|
||
<div class="table-item"><input type="number" name="attr_spelldefense">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="spelldefense spell"
|
||
title="Spell Defense Test">L</button>
|
||
</div>
|
||
<header class="table-item-left">Dispelling:</header>
|
||
<div class="table-item"><input type="number" name="attr_dispelling">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="dispelling spell"
|
||
title="Dispelling Test">L</button>
|
||
</div>
|
||
<header class="table-item-left">Astral Combat:</header>
|
||
<div class="table-item"><input type="number" name="attr_astralcombat">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="astralcombat astral"
|
||
title="Ritual Magic Test">L</button>
|
||
</div>
|
||
<header class="table-item-left">Ritual Magic:</header>
|
||
<div class="table-item"><input type="number" name="attr_ritualsorcery">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="ritualsorcery spell"
|
||
title="Ritual Magic Test">L</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" style="opacity:0;" class="conjuring-spec-switch hidden-checkbox"
|
||
name="attr_conjuring-spec-switch" value="1" />
|
||
<div class="sorcery-row table-top">
|
||
<header>Conjuring:</header>
|
||
<div><input type="number" name="attr_conjuring" value=0 /></div>
|
||
<div><button class="d6-button" type="action" name="act_skilltest" id="conjuring spell"
|
||
title="Spirit Conjuring/Control/Banishing Test">L</button></div>
|
||
<div class="skillspec">Specialize</div>
|
||
<div class="text-center"><input type="checkbox" class="conjuring-spec-switch"
|
||
name="attr_conjuring-spec-switch" value="1" /></div>
|
||
</div>
|
||
<div class="conjuring-spec-off">
|
||
<div class="magic-skills-table">
|
||
<div class="table-item-left">Summoning:</div>
|
||
<div class="table-item"><span name="attr_summoning">
|
||
</div>
|
||
<div class="table-item-left">Banishing:</div>
|
||
<div class="table-item"><span name="attr_banishing">
|
||
</div>
|
||
<div class="table-item-left">Controlling:</div>
|
||
<div class="table-item"><span name="attr_spiritcontrol"></div>
|
||
</div>
|
||
</div>
|
||
<div class="conjuring-spec-on">
|
||
<div class="magic-skills-table">
|
||
<header class="table-item-left">Summoning:</header>
|
||
<div class="table-item"><input type="number" name="attr_summoning">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="summoning spell"
|
||
title="Spirit Summoning Test">L</button>
|
||
</div>
|
||
<header class="table-item-left">Banishing:</header>
|
||
<div class="table-item"><input type="number" name="attr_banishing">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="banishing spell"
|
||
title="Spirit Banishing Test">L</button>
|
||
</div>
|
||
<header class="table-item-left">Controlling:</header>
|
||
<div class="table-item"><input type="number" name="attr_spiritcontrol">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="spiritcontrol spell"
|
||
title="Spirit Controlling Test">L</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<input type="checkbox" style="opacity:0;" class="auraread-spec-switch hidden-checkbox"
|
||
name="attr_auraread-spec-switch" value="1" />
|
||
<div class="sorcery-row table-top">
|
||
<header>Aura Reading:</header>
|
||
<div><input type="number" name="attr_aurareading" value=0></div>
|
||
<div><button class="d6-button" type="action" name="act_skilltest" id="aurareading spell"
|
||
title="Aura Reading Test">L</button></div>
|
||
<div class="skillspec">Specialize</div>
|
||
<div class="text-center"><input type="checkbox" class="auraread-spec-switch"
|
||
name="attr_auraread-spec-switch" value="1" /></div>
|
||
</div>
|
||
<div class="auraread-spec-off">
|
||
<div class="magic-skills-table">
|
||
<div class="table-item-left">Auras:</div>
|
||
<div class="table-item"><span name="attr_areadauras">
|
||
</div>
|
||
<div class="table-item-left">Signatures:</div>
|
||
<div class="table-item"><span name="attr_areadsignatures">
|
||
</div>
|
||
<div class="table-item-left">Sorcery:</div>
|
||
<div class="table-item"><span name="attr_areadsorcery">
|
||
</div>
|
||
<div class="table-item-left">Conjuring:</div>
|
||
<div class="table-item"><span name="attr_areadconjuring">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="auraread-spec-on">
|
||
<div class="magic-skills-table">
|
||
<header class="table-item-left">Auras:</header>
|
||
<div class="table-item"><input type="number" name="attr_areadauras" value=0>
|
||
<button class="d6-button" type="action" name="act_skilltest" id="areadauras spell"
|
||
title="Aura Reading Test">L</button>
|
||
</div>
|
||
<header class="table-item-left">Signatures:</header>
|
||
<div class="table-item"><input type="number" name="attr_areadsignatures">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="areadsignatures spell"
|
||
title="Aura Signature Reading Test">L</button>
|
||
</div>
|
||
<header class="table-item-left">Sorcery:</header>
|
||
<div class="table-item"><input type="number" name="attr_areadsorcery">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="areadsorcery spell"
|
||
title="Aura Sorcery Reading Test">L</button>
|
||
</div>
|
||
<header class="table-item-left">Conjuring:</header>
|
||
<div class="table-item"><input type="number" name="attr_areadconjuring">
|
||
<button class="d6-button" type="action" name="act_skilltest" id="areadconjuring spell"
|
||
title="Aura Conjuring Reading Test">L</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div class="magic-skills-table table-top">
|
||
<header class="text-mid">Magic:</header>
|
||
<div class="sidebyside"><span name="attr_magic"></span><button class="d6-button" type="action"
|
||
name="act_skilltest" id="magic spell" title="Magic Test">L</button></div>
|
||
<header class="text-mid">Drain:</header>
|
||
<div class="sidebyside"><span name="attr_willpower_max"></span><button class="d6-button"
|
||
type="action" name="act_skilltest" id="willpower|max spell" title="Drain Test">L</button>
|
||
</div>
|
||
<header class="text-mid">Enchanting:</header>
|
||
<div class="sidebyside"><input type="number" name="attr_enchanting" value=0>
|
||
<button class="d6-button" type="action" name="act_skilltest" id="enchanting spell"
|
||
title="Enchanting Test">L</button>
|
||
</div>
|
||
<header class="text-mid">Divining:</header>
|
||
<div class="sidebyside"><input type="number" name="attr_divining" value=0>
|
||
<button class="d6-button" type="action" name="act_skilltest" id="divining spell"
|
||
title="Divining Test">L</button>
|
||
</div>
|
||
<header class="text-mid">Centering:</header>
|
||
<div class="sidebyside"><input type="number" name="attr_centering" value=0>
|
||
<button class="d6-button" type="action" name="act_skilltest" id="centering spell"
|
||
title="Centering Test">L</button>
|
||
</div>
|
||
<header class="text-mid">Creative Skill:</header>
|
||
<input type="text" name="attr_centeringskillname">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
</div>
|
||
<div class="adept-only">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="hide-spirit-critter">
|
||
<input type='hidden' class='adeptpowers-switch' name='attr_adeptpowersswitch' value="show" />
|
||
<div class="adeptpowers-show">
|
||
<div class="SRH3">Adept Powers
|
||
<button class="switch-button-show" type="action" name="act_adeptpowersswitch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="adeptpowers-hide">
|
||
<div class="SRH3">Adept Powers
|
||
<button class="switch-button-hide" type="action" name="act_adeptpowersswitch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<div class="adept-powers">
|
||
<div class="adept-skills-table">
|
||
<header class="table-top-left">Power</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Cost</header>
|
||
<header class="table-top-mid">Activate</header>
|
||
<header class="table-top-right">Notes</header>
|
||
</div>
|
||
<div class="adept-skills-table">
|
||
<header class="table-item-left">Improved Reflexes: </header>
|
||
<div class="table-item"><input type="number" name="attr_adeptimprovedreflexes" value=0 /></div>
|
||
<div class="table-item"><input type="number" name="attr_adeptimprovedreflexescost" value=0 /></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_adeptimprovedreflexesactive"></div>
|
||
<div class="table-item"><input type="text" name="attr_adeptimprovedreflexesnotes"></div>
|
||
</div>
|
||
<div class="adept-skills-table">
|
||
<header class="table-item-left">Body Boost: </header>
|
||
<div class="table-item"><input type="number" name="attr_adeptbodyboost" value=0 /></div>
|
||
<div class="table-item"><input type="number" name="attr_adeptbodyboostcost" value=0></div>
|
||
<div class="table-item"><button class="d6-button" type="action" name="act_adeptpower" id="body"
|
||
title="Boost Body">L</button></div>
|
||
<div class="table-item"><input type="text" name="attr_aadeptstrengthboostnotes"></div>
|
||
</div>
|
||
<div class="adept-skills-table">
|
||
<header class="table-item-left">Strength Boost: </header>
|
||
<div class="table-item"><input type="number" name="attr_adeptstrboost" value=0 /></div>
|
||
<div class="table-item"><input type="number" name="attr_adeptstrboostcost" value=0></div>
|
||
<div class="table-item"><button class="d6-button" type="action" name="act_adeptpower" id="strength"
|
||
title="Boost Strength">L</button></div>
|
||
<div class="table-item"><input type="text" name="attr_adeptstrboostnotes"></div>
|
||
</div>
|
||
<div class="adept-skills-table">
|
||
<header class="table-item-left">Agility Boost: </header>
|
||
<div class="table-item"><input type="number" name="attr_adeptquicknessboost" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_adeptagilityboostcost" value=0></div>
|
||
<div class="table-item"><button class="d6-button" type="action" name="act_adeptpower" id="quickness"
|
||
title="Boost Quickness">L</button></div>
|
||
<div class="table-item"><input type="text" name="attr_aadeptagilityboostnotes"></div>
|
||
</div>
|
||
<div class="adept-skills-table">
|
||
<header class="table-item-left">Pain Resistance: </header>
|
||
<div class="table-item"><input type="number" name="attr_adeptpainres" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_adeptpainrescost" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_adeptpainresactive"></div>
|
||
<div class="table-item"><input type="text" name="attr_adeptpainresnotes"></div>
|
||
</div>
|
||
<fieldset class="repeating_adeptpowers">
|
||
<div class="adept-skills-table">
|
||
<div class="table-item-left"><input type="text" name="attr_adeptpower" style="width:150px;">
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_powerrating" min=1 "></div>
|
||
<div class=" table-item"><input type="number" name="attr_powercost" step=0.25 min=0.25"></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_poweractivated"></div>
|
||
<div class="table-item"><input type="text" name="attr_powernotes"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<input type='hidden' class='spells-switch' name='attr_spellsswitch' value="show" />
|
||
<div class="spells-show">
|
||
<div class="SRH3">Spells
|
||
<button class="switch-button-show" type="action" name="act_spellsswitch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="spells-hide">
|
||
<div class="SRH3">Spells
|
||
<button class="switch-button-hide" type="action" name="act_spellsswitch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<div class="spells-section">
|
||
<div class="spells-table">
|
||
<div class="magic-spells-table">
|
||
<div class="table-top-left header">Name</div>
|
||
<div class="table-top-mid header" title="Spell Category">Category</div>
|
||
<div class="table-top-mid header" title="Specialization">Spec.</div>
|
||
<div class="table-top-mid header" title="Force of spell">Force</div>
|
||
<div class="table-top-mid header" title="Mana or Physical Spell">Type</div>
|
||
<div class="table-top-mid header" title="Line of Sight, Touch or AOE">Range</div>
|
||
<div class="table-top-mid header" title="attribute to target">Target</div>
|
||
<div class="table-top-mid header" title="Spell Damage">Dmg.</div>
|
||
<div class="table-top-mid header" title="Spell Durration">Dur.</div>
|
||
<div class="table-top-mid header" title="+/- modifier for Force/2 drain">Drain</div>
|
||
<div class="table-top-mid header">Drain Damage</div>
|
||
<div class="table-top-mid header">Roll</div>
|
||
<div class="table-top-right header">Description</div>
|
||
</div>
|
||
<fieldset class="repeating_spells">
|
||
<div class="magic-spells-row">
|
||
<input class="myweapontxt" type="text" name="attr_name">
|
||
<select class="mediumselect2" name="attr_spellcategory">
|
||
<option SELECTED>Combat</option>
|
||
<option>Health</option>
|
||
<option>Detection</option>
|
||
<option>Illusion</option>
|
||
<option>Elemental</option>
|
||
<option>Control</option>
|
||
<option>Telekinetic</option>
|
||
<option>Transformation</option>
|
||
</select>
|
||
<input type="number" name="attr_specialized" value=0>
|
||
<input type="number" name="attr_force" min="1" value=1>
|
||
<select name="attr_spelltype" class="mediumselect2">
|
||
<option value=0>Mana</option>
|
||
<option value=0>Physical</option>
|
||
</select>
|
||
<select class="mediumselect2" type="text" name="attr_range">
|
||
<option SELECTED title="Line of Sight Spell">LoS</option>
|
||
<option title="Area of Effect Spell">AoE</option>
|
||
<option title="Must Touch Target">Touch</option>
|
||
</select>
|
||
<select name="attr_target" class="mediumselect2">
|
||
<option value="@{target|Target|body|max}">Body</option>
|
||
<option value="@{target|Target|willpower|max}">Willpower</option>
|
||
<option value="@{target|Target|intelligence|max}">Intelligence</option>
|
||
<option value="@{target|Target|targetMove}">Elemental</option>
|
||
<option value="?{Target Number|4}">Target Number</option>
|
||
<option value="@{target|Target|force}">Force</option>
|
||
<option value="2">2</option>
|
||
<option value="3">3</option>
|
||
<option value="4">4</option>
|
||
<option value="5">5</option>
|
||
<option value="6">6</option>
|
||
</select>
|
||
<select name="attr_damage" class="mediumselect2">
|
||
<option value=0 SELECTED title="Choose for non combat spell">N/A</option>
|
||
<option value="?{Damage Level|M,2|S,3|L,1|D,4}"
|
||
title="Choose Damage at time of roll, default for combat spells">Choose</option>
|
||
<option value=1>Light</option>
|
||
<option value=2>Medium</option>
|
||
<option value=3>Serious</option>
|
||
<option value=4>Deadly</option>
|
||
<option value=10>Light(s)</option>
|
||
<option value=11>Medium(s)</option>
|
||
<option value=12>Serious(s)</option>
|
||
<option value=13>Deadly(s)</option>
|
||
</select>
|
||
<select name="attr_duration" class="mediumselect2">
|
||
<option SELECTED>I</option>
|
||
<option>S</option>
|
||
<option>P</option>
|
||
</select>
|
||
<input type="number" title="modifier to force/2 for drain resistance test" name="attr_drain"
|
||
value=0>
|
||
<select name="attr_drainlvl" class="mediumselect2">
|
||
<option value=1>Light</option>
|
||
<option value="dmglvl" SELECTED>Damage Lvl</option>
|
||
<option value=2>Medium</option>
|
||
<option value=3>Serious</option>
|
||
<option value=4>Deadly</option>
|
||
<option title="stages drain damage up 1 level from damage level of spell" value="dmglvl + 1">
|
||
Damage +1</option>
|
||
<option title="stages drain damage up 2levels from damage level of spell" value="dmglvl + 2">
|
||
Damage +2</option>
|
||
<option title="stages drain damage down 1 level from damage level of spell" value="dmglvl - 1">
|
||
Damage -1</option>
|
||
<option title="stages drain damage down 2 levels from damage level of spell" value="dmglvl - 2">
|
||
Damage -2</option>
|
||
</select>
|
||
<button class="d6-button" type="action" name="act_cast" id="spell" title="Cast Spell">L</button>
|
||
<input type="text" name="attr_description" class="myweapontxt2">
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<br>
|
||
</div>
|
||
<input type='hidden' class='foci-switch' name='attr_fociswitch' value="show" />
|
||
<div class="foci-show">
|
||
<div class="SRH3">Fetishes and Foci
|
||
<button class="switch-button-show" type="action" name="act_fociswitch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="foci-hide">
|
||
<div class="SRH3">Fetishes and Foci
|
||
<button class="switch-button-hide" type="action" name="act_fociswitch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<div class="fetish-foci">
|
||
<div class="foci-table">
|
||
<header class="table-top-left">Type</header>
|
||
<header class="table-top-mid">Category</header>
|
||
<header class="table-top-mid">Force</header>
|
||
<header class="table-top-right">Quantity</header>
|
||
</div>
|
||
<fieldset class="repeating_foci">
|
||
<div class="foci-table">
|
||
<select name="attr_type" class="mediumselect2">
|
||
<option value="none"></option>
|
||
<option>Expendable</option>
|
||
<option>Reusable</option>
|
||
<option>Power Focus</option>
|
||
<option>Spirit Focus</option>
|
||
</select>
|
||
<input type='hidden' class='focitype' name='attr_type' />
|
||
<div class="powerfocus">
|
||
<input name="attr_category" disabled value="power" />
|
||
</div>
|
||
<div class="reusable">
|
||
<select name="attr_category" class="mediumselect2">
|
||
<option value="none"></option>
|
||
<option value="combat">Combat</option>
|
||
<option value="health">Health</option>
|
||
<option value="detection">Detection</option>
|
||
<option value="illusion">Illusion</option>
|
||
<option value="elemental">Elemental</option>
|
||
<option value="control">Control</option>
|
||
<option value="telekinetic">Telekinetic</option>
|
||
<option value="transformation">Transformation</option>
|
||
</select>
|
||
</div>
|
||
<div class="spiritfocus">
|
||
<input type='hidden' class='magictype' name='attr_magic-type' />
|
||
<div class="mage-foci"><select name="attr_category" class="mage-foci mediumselect2">
|
||
<option value="none"></option>
|
||
<option value="fire-elem-focus">Fire</option>
|
||
<option value="water-elem-focus">Water</option>
|
||
<option value="earth-elem-focus">Earth</option>
|
||
<option value="air-elem-focus">Air</option>
|
||
<option value="city-spirit-focus">City Spirit</option>
|
||
<option value="field-spirit-focus">Field Spirit</option>
|
||
<option value="hearth-spirit-focus">Hearth Spirit</option>
|
||
<option value="desert-spirit-focus">Desert Spirit</option>
|
||
<option value="forest-spirit-focus">Forest Spirit</option>
|
||
<option value="mountain-spirit-focus">Mountain Spirit</option>
|
||
<option value="prairie-spirit-focus">Prairie Spirit</option>
|
||
<option value="mist-spirit-focus">Mist Spirit</option>
|
||
<option value="storm-spirit-focus">Storm Spirit</option>
|
||
<option value="wind-spirit-focus">Wind Spirit</option>
|
||
<option value="lake-spirit-focus">Lake Spirit</option>
|
||
<option value="river-spirit-focus">River Spirit</option>
|
||
<option value="sea-spirit-focus">Sea Spirit</option>
|
||
<option value="gnome-spirit-focus">Gnome</option>
|
||
<option value="manitous-spirit-focus">Manitous</option>
|
||
<option value="salamander-spirit-focus">Salamander</option>
|
||
<option value="sylphs-spirit-focus">Sylphs</option>
|
||
<option value="ancestor-spirit-focus">Ancestor</option>
|
||
</select></div>
|
||
</div>
|
||
<input type="number" name="attr_force" value=0 min=0 />
|
||
<div class="expendable-foci">
|
||
<input type="number" name="attr_qty" value=0 min=0 />
|
||
</div>
|
||
<div class="reusable-foci">
|
||
<input type="number" name="attr_qty" value=1 disabled />
|
||
</div>
|
||
<input type='hidden' name='attr_fociresource' />
|
||
</div>
|
||
</fieldset>
|
||
<br>
|
||
<input type='hidden' class='weaponfocus-show' name='attr_weaponfocus-show' value="false" />
|
||
<div class="weaponfocus-header">
|
||
<div class="table-top-left">Equip</div>
|
||
<div class="table-top-mid">Name</div>
|
||
<div class="table-top-mid">Reach</div>
|
||
<div class="table-top-mid">Skill</div>
|
||
<div class="table-top-mid">Conceal</div>
|
||
<div class="table-top-mid">Force</div>
|
||
<div class="table-top-mid">Power</div>
|
||
<div class="table-top-mid">Damage</div>
|
||
<div class="table-top-mid">Specialize</div>
|
||
<div class="table-top-mid">Attack</div>
|
||
<div class="table-top-right">Notes</div>
|
||
</div>
|
||
<div class="weaponfocus-attributes">
|
||
<div class="text-mid"><input type="checkbox" name="attr_weaponfocus-equipped" checked></div>
|
||
<input class="myweapontxt" type="text" name="attr_weaponfocus-name" value="Weapon Focus">
|
||
<input type="number" name="attr_weaponfocus-reach" value=0>
|
||
<select class="mediumselect2" name="attr_weaponfocus skill">
|
||
<option value="@{edged}" SELECTED>Edged</option>
|
||
<option value="@{clubs}">Club</option>
|
||
<option value="@{poles}">Pole Arm</option>
|
||
<option value="@{whips}">Whip</option>
|
||
</select>
|
||
<input type="number" name="attr_weaponfocus-conceal" value=0>
|
||
<input type="number" name="attr_weaponfocus-force" value=0>
|
||
<input type="number" name="attr_weaponfocus-pawer" value=0>
|
||
<select name="attr_weaponfocus-damage" class="mediumselect2">
|
||
<option>L</option>
|
||
<option SELECTED>M</option>
|
||
<option>S</option>
|
||
<option>D</option>
|
||
</select>
|
||
<input type="number" name="attr_weaponfocus-specialized" value=0 \>
|
||
<div><button class="attack-dice" id="weaponfocus" type="action" name="act_melee"
|
||
title="Melee Attack"></button></div>
|
||
<input class="myweapontxt" type="text" name="attr_weaponfocus-notes">
|
||
<br>
|
||
</div>
|
||
<input type='hidden' class='magicinitiate-switch' name='attr_magicinitiateswitch' value="show" />
|
||
<div class="magicinitiate-show">
|
||
<div class="SRH3">Initiation and Metamagic
|
||
<button class="switch-button-show" type="action" name="act_magicinitiateswitch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="magicinitiate-hide">
|
||
<div class="SRH3">Initiation and Metamagic
|
||
<button class="switch-button-hide" type="action" name="act_magicinitiateswitch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<div class="magicinitiate">
|
||
<div class="SRH4">Initiate Grade:<input type="number" name="attr_initiategrade" value=0></div>
|
||
<div class="metamagic-table">
|
||
<header class="table-top-left">Metamagic</header>
|
||
<header class="table-top-right">Notes</header>
|
||
</div>
|
||
<fieldset class="repeating_metamagic">
|
||
<div class="metamagic-table">
|
||
<div class="table-item-left"><input type="text" name="attr_metamagicname" /></div>
|
||
<div class="table-item"><input type="text" name="attr_metamagicnotes" /></div>
|
||
</div>
|
||
</fieldset>
|
||
<br>
|
||
</div>
|
||
<input type='hidden' class='geas-switch' name='attr_geasswitch' value="show" />
|
||
<div class="geas-show">
|
||
<div class="SRH3">Geas
|
||
<button class="switch-button-show" type="action" name="act_geasswitch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="geas-hide">
|
||
<div class="SRH3">Geas
|
||
<button class="switch-button-hide" type="action" name="act_geasswitch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<div class="geas">
|
||
<div class="geas-table">
|
||
<header class="table-top-left">Geas Type</header>
|
||
<header class="table-top-right">Geas Notes</header>
|
||
</div>
|
||
<fieldset class='repeating_geas'>
|
||
<div class="geas-table">
|
||
<div class="table-item-left"><input type="text" name="attr_geastype"></div>
|
||
<div class="table-item"><input type="text" name="attr_geasnotes"></div>
|
||
</div>
|
||
</fieldset>
|
||
<br>
|
||
</div>
|
||
<input type='hidden' class='totem-switch' name='attr_totemswitch' value="show" />
|
||
<div class="totem-show">
|
||
<div class="SRH3">Totem/Abilities
|
||
<button class="switch-button-show" type="action" name="act_totemswitch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="totem-hide">
|
||
<div class="SRH3">Totem/Abilities
|
||
<button class="switch-button-hide" type="action" name="act_totemswitch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<div class="totem">
|
||
<div class="totem-table">
|
||
<header class="table-top-left">Totem</header>
|
||
<header class="table-top-mid">Environment</header>
|
||
<header class="table-top-mid">Advantages</header>
|
||
<header class="table-top-right">Disadvantages</header>
|
||
<div class="table-item-left"><input type='text' name="attr_totem" class="myweapontxt2"></div>
|
||
<div class="table-item"><input type='text' name="attr_totemenv" class="myweapontxt2"></div>
|
||
<div class="table-item"><input type="text" name="attr_totemadv" class="myweapontxt2"></div>
|
||
<div class="table-item"><input type="text" name="attr_totemdisadv" class="myweapontxt2"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class='sheet-decks'>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<!--Decks Tab -->
|
||
<div class="matrix-show-deck">
|
||
<div class="SRH2">Cyberdecks and Utilities</div>
|
||
</div>
|
||
<div class="matrix-show-frame">
|
||
<div class="SRH2">Smart Frames and Agents</div>
|
||
</div>
|
||
<div class="deck-combat">
|
||
<div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH3">Cyber Combat</div>
|
||
<div></div>
|
||
<div class="matrix-combat-condition">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="matrix-show-deck">
|
||
<div class="SRH4">Persona</div>
|
||
</div>
|
||
<div class="matrix-show-frame">
|
||
<div class="SRH4">Core</div>
|
||
</div>
|
||
<div>Undamaged</div>
|
||
<div>Light Damage</div>
|
||
<div>Moderate Damage</div>
|
||
<div>Serious Damage</div>
|
||
<div>Crashed</div>
|
||
<div class="SRH4">Condition</div>
|
||
<div>
|
||
<input type="radio" name="attr_matrix-damage" value=0 CHECKED>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_matrix-damage" value=1>
|
||
<input type="radio" name="attr_matrix-damage" value=2>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_matrix-damage" value=3>
|
||
<input type="radio" name="attr_matrix-damage" value=4>
|
||
<input type="radio" name="attr_matrix-damage" value=5>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_matrix-damage" value=6>
|
||
<input type="radio" name="attr_matrix-damage" value=7>
|
||
<input type="radio" name="attr_matrix-damage" value=8>
|
||
<input type="radio" name="attr_matrix-damage" value=9>
|
||
</div>
|
||
<div><input type="radio" name="attr_matrix-damage" value=100></div>
|
||
</div>
|
||
<div><input type="hidden" name="attr_hackingpool-icsuppress" value=0></div>
|
||
<div class="matrix-show-deck">
|
||
<div class="deck-summary">
|
||
<div class="text-mid">DNI</div>
|
||
<div>Hot ASIST</div>
|
||
<div>Reality Filter</div>
|
||
<div>IC Suppressed</div>
|
||
<div class="text-mid">Icon Status</div>
|
||
<div class="text-mid">Host/Grid Rating</div>
|
||
<div><input checked="checked" type="checkbox" name="attr_deck-dni" value=1></div>
|
||
<div><input type="checkbox" name="attr_deck-asist" value=1> </div>
|
||
<div><input type="checkbox" name="attr_deck-realityfilter" value=1></div>
|
||
<div><input type="number" name="attr_deck-icsuppressed" value=0></div>
|
||
<select name="attr_matrix-iconstatus" class="mediumselect2">
|
||
<option SELECTED>Intruder</option>
|
||
<option>Legitimate</option>
|
||
</select>
|
||
<select name="attr_deck-systemrating" class= "mediumselect2">
|
||
<option SELECTED>Unknown</option>
|
||
<option>Blue</option>
|
||
<option>Green</option>
|
||
<option>Orange</option>
|
||
<option>Red</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="matrix-show-frame">
|
||
<div class="frame-summary">
|
||
<div>Pilot Rating</div>
|
||
<div>Utility Payload</div>
|
||
<div>IC Suppressed</div>
|
||
<div class="text-mid">Icon Status</div>
|
||
<div class="text-mid">Host/Grid Rating</div>
|
||
<div><input type="number" name="attr_decking" min=0 value=0> </div>
|
||
<div><input type="number" name="attr_deck-utilitypayload" min=0 value=0></div>
|
||
<div><input type="number" name="attr_deck-icsuppressed" min=0 value=0></div>
|
||
<select name="attr_matrix-iconstatus" style="width: 85px;">
|
||
<option SELECTED>Intruder</option>
|
||
<option>Legitimate</option>
|
||
</select>
|
||
<select name="attr_deck-systemrating" class= "mediumselect2">
|
||
<option SELECTED>Unknown</option>
|
||
<option>Blue</option>
|
||
<option>Green</option>
|
||
<option>Orange</option>
|
||
<option>Red</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
|
||
<input type='hidden' name='attr_deck-tn' value=0 />
|
||
<input type='hidden' name='attr_deck-util-size-loaded' value=0 />
|
||
<input type='hidden' name='attr_deck-util-rating-loaded' value=0 />
|
||
<input type='hidden' name='attr_deck-tn' value=0 />
|
||
<div class="deck-combat-system">
|
||
<div>Initiative <span name=attr_deck-initiative></span>d6 + <span name=attr_deck-reaction-final></span>
|
||
<input type='hidden' name='attr_deck-initiative' value=0 />
|
||
<button type="action" name="act_init" class="d6-button" title="Matrix Initiative"
|
||
id="matrixinit">L</button>
|
||
</div>
|
||
End Turn<button type="action" name="act_endturn" class="d6-button" title="End Combat Turn" id="endturn">L</button>
|
||
<div></div>
|
||
Sensor<button type="action" name="act_matrixmaneuvers" class="d6-button" title="Sensor Test"
|
||
id="matrixsensor">L</button>
|
||
<div></div>
|
||
Evade<button type="action" name="act_matrixmaneuvers" class="d6-button" title="Evade Detection"
|
||
id="matrixevade">L</button>
|
||
<div></div>
|
||
Parry<button type="action" name="act_matrixmaneuvers" class="d6-button" title="Parry Attack"
|
||
id="matrixparry">L</button>
|
||
<div></div>
|
||
Posistion<button type="action" name="act_matrixmaneuvers" class="d6-button" title="Position Attack"
|
||
id="matrixposition">L</button>
|
||
<div class="numberspan">Combat TN<span name="attr_deck-tn"></span></div>
|
||
Resist<button type="action" name="act_matrixresist" class="d6-button" title="Damage Resistance Test"
|
||
id="matrixresist">L</button>
|
||
<div></div>
|
||
Medic<button type="action" name="act_matrixmedic" class="d6-button" title="Medic Utility"
|
||
id="matrixmedic">L</button>
|
||
<div></div>
|
||
Decking<button type="action" name="act_matrixtest" class="d6-button" title="General Decking Test"
|
||
id="decking">L</button>
|
||
</div>
|
||
<br>
|
||
<div>Use Hacking Pool for IC supression<input type="checkbox" name="attr_deck-icsuppresspool" value=1
|
||
checked="checked"></div>
|
||
</div>
|
||
<div>
|
||
<div class="deck-summary-attributes">
|
||
<div></div>
|
||
<div></div>
|
||
<div>Full</div>
|
||
<div>Mods</div>
|
||
<div>Final</div>
|
||
<div class="mpcp-frame-toggle"><input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="matrix-show-deck">MPCP</div>
|
||
<div class="matrix-show-frame">Core</div>
|
||
</div>
|
||
<div><button type="action" name="act_matrixtest" class="d6-button" title="MPCP Test"
|
||
id="deck-mpcp-final">L</button></div>
|
||
<div><span name="attr_deck-mpcp-max"></span></div>
|
||
<div><input type="number" name="attr_deck-mpcp-mods" value=0></div>
|
||
<div><span name="attr_deck-mpcp-final"></span></div>
|
||
<div>Bod</div>
|
||
<div><button type="action" name="act_matrixtest" class="d6-button" title="Bod Test"
|
||
id="deck-bod-final">L</button></div>
|
||
<div> <span name="attr_deck-bod-max"></span></div>
|
||
<div><input type="number" name="attr_deck-bod-mods" value=0></div>
|
||
<div><span name="attr_deck-bod-final"></span></div>
|
||
<div>Evasion</div>
|
||
<div><button type="action" name="act_matrixtest" class="d6-button" title="Evasion Test"
|
||
id="deck-evasion-final">L</button></div>
|
||
<div> <span name="attr_deck-evasion-max"></span></div>
|
||
<div><input type="number" name="attr_deck-evasion-mods" value=0></div>
|
||
<div><span name="attr_deck-evasion-final"></span></div>
|
||
<div>Masking</div>
|
||
<div><button type="action" name="act_matrixtest" class="d6-button" title="Masking Test"
|
||
id="deck-masking-final">L</button></div>
|
||
<div> <span name="attr_deck-masking-max"></span></div>
|
||
<div><input type="number" name="attr_deck-masking-mods" value=0></div>
|
||
<div><span name="attr_deck-masking-final"></span></div>
|
||
<div>Sensors</div>
|
||
<div><button type="action" name="act_matrixtest" class="d6-button" title="Sensors Test"
|
||
id="deck-sensors-final">L</button></div>
|
||
<div> <span name="attr_deck-sensors-max"></span></div>
|
||
<div><input type="number" name="attr_deck-sensors-mods" value=0></div>
|
||
<div><span name="attr_deck-sensors-final"></span></div>
|
||
<div title="Detection Factor">Detect.F</div>
|
||
<div></div>
|
||
<div title="Detection Factor Maximum"> <span name="attr_deck-detection-max"></span></div>
|
||
<div><input type="number" name="attr_deck-detection-mods" value=0></div>
|
||
<div title="Detection Factor Final Modified Number"><span name="attr_deck-detection-final"></span></div>
|
||
</div>
|
||
<div class="deck-combat-modifiers">
|
||
<input type='hidden' name='attr_matrix-penalty' value=0 />
|
||
<div>Penalties: <span class="matrix-pens" name="attr_matrix-penalty"></span></div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="matrix-show-deck">
|
||
<div class='deck-memory-used'>
|
||
<div class="SRH4">Memory In Use:</div>
|
||
<div><input type='hidden' class='deck-mem-full' name='attr_deck-mem-overloaded' value=0 />
|
||
<span class="deck-overload" name="attr_deck-util-size-loaded"></span>
|
||
</div>
|
||
<div><button class="switch-button-hide" title="unload all utilities" type="action"
|
||
name="act_deck-utilities-unloadall">Reset</button></div>
|
||
<div>Hacking Pool: <span name="attr_hackingpool"></span></div>
|
||
<div>Hacking Pool Used:<input type='hidden' class='hackingpool-over' name='attr_hackingpool-over' /> <span class="hackingpool-over" name="attr_hackingpool-used"></span></div>
|
||
<input type='hidden' name='attr_matrix-penalty' value=0 />
|
||
<div>Penalties: <span class="matrix-pens" name="attr_matrix-penalty"></span></div>
|
||
</div>
|
||
</div>
|
||
<div class="matrix-show-deck">
|
||
<input type='hidden' class='deck-skills-switch' name='attr_deck-skills-switch' value="show" />
|
||
<div class="deck-skills-show">
|
||
<div class="SRH3">Computer skills
|
||
<button class="switch-button-show" type="action" name="act_deck-skills-switch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="deck-skills-hide">
|
||
<div class="SRH3">Computer skills
|
||
<button class="switch-button-hide" type="action" name="act_deck-skills-switch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<div class="deck-skills">
|
||
<input type="checkbox" style="opacity:0;" class="deck-spec-switch" name="attr_deck-spec-switch" value=1>
|
||
<div class="deck-skills-row table-top">
|
||
<header>Computer</header>
|
||
<input type="number" name="attr_computer" value=0>
|
||
<button class="d6-dice" type="action" name="act_skilltest" id="computer hacking"></button>
|
||
<div>specialize</div>
|
||
<input type="checkbox" class="deck-spec-switch" name="attr_deck-spec-switch" value=1>
|
||
</div>
|
||
<div class="deck-spec-off">
|
||
<div class="table-item-left">Hardware</div>
|
||
<div class="table-item"><span name="attr_computer"></div>
|
||
<div class="table-item-left">Decking</div>
|
||
<div class="table-item"><span name="attr_computer"></div>
|
||
<div class="table-item-left">Programming</div>
|
||
<div class="table-item"><span name="attr_computer"></div>
|
||
</div>
|
||
<div class="deck-spec-on">
|
||
<div class="table-item-left">Hardware</div>
|
||
<div class="table-item"><input type="number" name="attr_hardware">
|
||
<button class="d6-dice" type="action" name="act_skilltest" id="hardware hacking"></button>
|
||
</div>
|
||
<div class="table-item-left">Decking</div>
|
||
<div class="table-item"><input type="number" name="attr_decking">
|
||
<button class="d6-dice" type="action" name="act_skilltest" id="decking hacking"></button>
|
||
</div>
|
||
<div class="table-item-left">Programming</div>
|
||
<div class="table-item"><input type="number" name="attr_programming">
|
||
<button class="d6-dice" type="action" name="act_skilltest" id="programming hacking"></button>
|
||
</div>
|
||
</div><br>
|
||
</div>
|
||
</div>
|
||
<div class="matrix-show-deck">
|
||
<input type='hidden' class='deck-cyberdeck-switch' name='attr_deck-cyberdeck-switch' value="show" />
|
||
<div class="deck-cyberdeck-show">
|
||
<div class="SRH3">Cyberdeck
|
||
<button class="switch-button-show" type="action" name="act_deck-cyberdeck-switch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="deck-cyberdeck-hide">
|
||
<div class="SRH3">Cyberdeck
|
||
<button class="switch-button-hide" type="action" name="act_deck-cyberdeck-switch">Hide</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="matrix-show-frame">
|
||
<input type='hidden' class='deck-cyberdeck-switch' name='attr_deck-cyberdeck-switch' value="show" />
|
||
<div class="deck-cyberdeck-show">
|
||
<div class="SRH3">Frame Core
|
||
<button class="switch-button-show" type="action" name="act_deck-cyberdeck-switch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="deck-cyberdeck-hide">
|
||
<div class="SRH3">Frame Core
|
||
<button class="switch-button-hide" type="action" name="act_deck-cyberdeck-switch">Hide</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<input type='hidden' class='deck-cyberdeck-switch' name='attr_deck-cyberdeck-switch' value="show" />
|
||
<div class="deck-cyberdeck">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="matrix-show-deck">
|
||
<div class="deck-attributes">
|
||
<div class="deck-name"><div>Deck Name</div><input type=text name="attr_deck-name"></div>
|
||
<div class="deck-persona">
|
||
<div>MPCP</div>
|
||
<input type="number" name="attr_deck-mpcp-max" value=0 min=0>
|
||
<input type="hidden" name="attr_deck-maxpersona" value=0>
|
||
<div>Bod</div>
|
||
<input type="number" name="attr_deck-bod-max" value=0 min=0>
|
||
<div>Evasion</div>
|
||
<input type="number" name="attr_deck-evasion-max" value=0 min=0>
|
||
<div>Masking</div>
|
||
<input type="number" name="attr_deck-masking-max" value=0 min=0>
|
||
<div>Sensors</div>
|
||
<input type="number" name="attr_deck-sensors-max" value=0 min=0>
|
||
</div>
|
||
<div class="deck-cyberdeck-specs">
|
||
<div>Hardening</div>
|
||
<input type="number" name="attr_deck-hardening" value=0 min=0>
|
||
<div>Active Memory</div>
|
||
<input type="number" name="attr_deck-activemem" value=0 min=0>
|
||
<div>Storage Memory</div>
|
||
<input type="number" name="attr_deck-storagemem" value=0 min=0>
|
||
<div>I/O Speed</div>
|
||
<input type="number" name="attr_deck-iospeed" value=0 min=0>
|
||
<div>Response Increase</div>
|
||
<input type="number" name="attr_deck-response" value=0 min=0>
|
||
<div>ICCM</div>
|
||
<input type="number" name="attr_deck-iccm" value=0 min=0>
|
||
<div>Offline Storage</div>
|
||
<input type="number" name="attr_deck-offlinestorage" value=0 min=0>
|
||
</div>
|
||
<div class="deck-extras"> </div>
|
||
</div>
|
||
</div>
|
||
<div class="matrix-show-frame">
|
||
<div class="deck-attributes">
|
||
<div class="frame-core">
|
||
<div>Type</div>
|
||
<div><select name="attr_frametype" style="width: 115px;">
|
||
<option>Smart Frame</option>
|
||
<option selected>Agent</option>
|
||
</select>
|
||
</div>
|
||
<div>Core Rating</div>
|
||
<div><input type="number" name="attr_frame-core" value=0 min=0></div>
|
||
<input type="hidden" name="attr_deck-maxpersona" value=0>
|
||
<div>Utility Payload</div>
|
||
<div><input type="number" name="attr_deck-utilitypayload" value=0 min=0></div>
|
||
<div>Pilot</div>
|
||
<div><input type="number" name="attr_decking" value=0 min=0></div>
|
||
<div>Initiative</div>
|
||
<div><input type="number" name="attr_frame-initiative" value=0 min=0></div>
|
||
</div>
|
||
<div class="frame-attributes">
|
||
<div>Bod</div>
|
||
<input type="number" name="attr_deck-bod-max" value=0 min=0>
|
||
<div>Evasion</div>
|
||
<input type="number" name="attr_deck-evasion-max" value=0 min=0>
|
||
<div>Masking</div>
|
||
<input type="number" name="attr_deck-masking-max" value=0 min=0>
|
||
<div>Sensors</div>
|
||
<input type="number" name="attr_deck-sensors-max" value=0 min=0>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<input type='hidden' class='deck-utilities-switch' name='attr_deck-utilities-switch' value="show" />
|
||
<div class="deck-utilities-show">
|
||
<div class="SRH3">Utilities
|
||
<button class="switch-button-show" type="action" name="act_deck-utilities-switch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="deck-utilities-hide">
|
||
<div class="SRH3">Utilities
|
||
<button class="switch-button-hide" type="action" name="act_deck-utilities-switch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
|
||
<div class="deck-utilities">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="matrix-show-frame">
|
||
<div class='frame-util-used'>
|
||
<label>Utility Rating Sum</label>
|
||
<div><input type='hidden' class='frame-utility-full' name='attr_deck-util-overloaded' value=0 />
|
||
<span class="frame-overload" name="attr_deck-util-rating-loaded"></span>
|
||
</div>
|
||
<button class="switch-button-hide" type="action" name="act_deck-utilities-unloadall">Reset</button>
|
||
</div>
|
||
<div></div>
|
||
</div>
|
||
<div>
|
||
<div>
|
||
<div class="SRH4">Special Utilities</div>
|
||
<div class="deck-utilities-special">
|
||
<header class="table-top-left">Utility</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Multiplier</header>
|
||
<header class="table-top-mid">Size</header>
|
||
<header class="table-top-mid">Loaded</header>
|
||
<header class="table-top-mid">Effective Rating</header>
|
||
<header class="table-top-mid">Test</header>
|
||
<header class="table-top-mid">Swap Memory</header>
|
||
<header class="table-top-right">Notes</header>
|
||
<div class="table-item-left">Sleaze</div>
|
||
<div class="table-item"><input type="number" name="attr_decksleaze-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_decksleaze-multiplier" value=3></div>
|
||
<div class="table-item"><input type="number" name="attr_decksleaze-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_decksleaze-loaded" class="text-mid" value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_decksleaze-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Sleaze Utility Test" id="decksleaze-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Sleaze Utility from Disk" id="decksleaze-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_decksleaze-notes"></div>
|
||
<div class="table-item-left">Track</div>
|
||
<div class="table-item"><input type="number" name="attr_decktrack-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_decktrack-multiplier" value=8></div>
|
||
<div class="table-item"><input type="number" name="attr_decktrack-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_decktrack-loaded" class="text-mid" value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_decktrack-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Tracking Utility Test" id="decktrack-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Tracking Utility from Disk" id="decktrack-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_decktrack-notes"></div>
|
||
|
||
</div>
|
||
|
||
<div class="SRH4">Defensive Utilities</div>
|
||
<div class="deck-utilities-defensive">
|
||
<header class="table-top-left">Utility</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Multiplier</header>
|
||
<header class="table-top-mid">size</header>
|
||
<header class="table-top-mid">loaded</header>
|
||
<header class="table-top-mid">Effective Rating</header>
|
||
<header class="table-top-mid">Test</header>
|
||
<header class="table-top-mid">Swap Memory</header>
|
||
<header class="table-top-right">Notes</header>
|
||
<div class="table-item-left">Armor</div>
|
||
<div class="table-item"><input type="number" name="attr_deckarmor-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckarmor-multiplier" value=3></div>
|
||
<div class="table-item"><input type="number" name="attr_deckarmor-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckarmor-loaded" class="text-mid" value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_deckarmor-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Armor Utility Test" id="deckarmor-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Armor Utility from Disk" id="deckarmor-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckarmor-notes"></div>
|
||
<div class="table-item-left">Cloak</div>
|
||
<div class="table-item"><input type="number" name="attr_deckcloak-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckcloak-multiplier" value=3></div>
|
||
<div class="table-item"><input type="number" name="attr_deckcloak-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckcloak-loaded" class="text-mid" value=1> </div>
|
||
<div class="table-item"><input type="number" name="attr_deckcloak-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Cloak Utility Test" id="deckcloak-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Cloak Utility from Disk" id="deckcloak-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckcloak-notes"></div>
|
||
<div class="table-item-left">Lock-On</div>
|
||
<div class="table-item"><input type="number" name="attr_decklockon-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_decklockon-multiplier" value=3></div>
|
||
<div class="table-item"><input type="number" name="attr_decklockon-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_decklockon-loaded" class="text-mid" value=1> </div>
|
||
<div class="table-item"><input type="number" name="attr_decklockon-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Lock-On Utility Test" id="decklockon-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Lock-On Utility from Disk" id="decklockon-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_decklockon-notes"></div>
|
||
<div class="table-item-left">Medic</div>
|
||
<div class="table-item"><input type="number" name="attr_deckmedic-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckmedic-multiplier" value=4></div>
|
||
<div class="table-item"><input type="number" name="attr_deckmedic-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckmedic-loaded" class="text-mid" value=1> </div>
|
||
<div class="table-item"><input type="number" name="attr_deckmedic-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Medic Utility Test" id="deckmedic-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Medic Utility from Disk" id="deckmedic-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckmedic-notes"></div>
|
||
</div>
|
||
<fieldset class="repeating_defensiveutils">
|
||
<div class="deck-utilities-defensive">
|
||
<div class="table-item-left"><input type="text" name="attr_utility"></div>
|
||
<div class="table-item"><input type="number" name="attr_rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_multiplier" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_size" value=0></div>
|
||
<div class="table-item "><input class="text-mid" type="checkbox" name="attr_loaded" value=1> </div>
|
||
<div class="table-item"><input type="number" name="attr_rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="Utility Test" id="repeating">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Utility from Disk" id="repeating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_utilitynotes"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div>
|
||
<div class="SRH4">Offensive Utilities</div>
|
||
<div class="deck-utilities-offensive">
|
||
<header class="table-top-left">Utility</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Multiplier</header>
|
||
<header class="table-top-mid">size</header>
|
||
<header class="table-top-mid">loaded</header>
|
||
<header class="table-top-mid">Effective Rating</header>
|
||
<header class="table-top-mid">Execute</header>
|
||
<header class="table-top-mid">Test</header>
|
||
<header class="table-top-mid">Swap Memory</header>
|
||
<header class="table-top-right">Notes</header>
|
||
<div class="table-item-left"><select name="attr_deckattacklevel" class="mediumselect2">
|
||
<option value="L">Attack (L)</option>
|
||
<option value="M" selected>Attack (M)</option>
|
||
<option value="S">Attack (S)</option>
|
||
<option value="D">Attack (D)</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_deckattack-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckattack-multiplier" value=4></div>
|
||
<div class="table-item"><input type="number" name="attr_deckattack-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckattack-loaded" class="text-mid" value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_deckattack-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixattack" class="d6-button" title="Execute Attack vs. System Code or Icon" id="deckattack">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Attack Utility Test" id="deckattack-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Attack Utility from Disk" id="deckattack-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckattack-notes"></div>
|
||
<div class="table-item-left">Black Hammer</div>
|
||
<div class="table-item"><input type="number" name="attr_deckblackhammer-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckblackhammer-multiplier" value=20></div>
|
||
<div class="table-item"><input type="number" name="attr_deckblackhammer-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckblackhammer-loaded" class="text-mid" value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_deckblackhammer-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixattack" class="d6-button" title="Blackhammer Utility Attack" id="deckblackhammer">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Blackhammer Utility Test" id="deckblackhammer-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Blackhammer Utility from Disk" id="deckblackhammer-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckblackhammer-notes"></div>
|
||
<div class="table-item-left">Killjoy</div>
|
||
<div class="table-item"><input type="number" name="attr_deckkilljoy-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckkilljoy-multiplier" value=10></div>
|
||
<div class="table-item"><input type="number" name="attr_deckkilljoy-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckkilljoy-loaded" class="text-mid" value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_deckkilljoy-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixattack" class="d6-button" title="KillJoy Utility Attack" id="deckkilljoy">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="KillJoy Utility Test" id="deckkilljoy-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload KillJoy Utility from Disk" id="deckkilljoy-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckkilljoy-notes"></div>
|
||
<div class="table-item-left">Slow</div>
|
||
<div class="table-item"><input type="number" name="attr_deckslow-rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_deckslow-multiplier" value=4></div>
|
||
<div class="table-item"><input type="number" name="attr_deckslow-size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_deckslow-loaded" class="text-mid" value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_deckslow-rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixattack" class="d6-button" title="Slow Utility Attack" id="deckslow">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixtest" class="d6-button" title="Slow Utility Test" id="deckslow-rating-final">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Slow Utility from Disk" id="deckslow-rating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_deckslow-notes"></div>
|
||
|
||
</div>
|
||
<fieldset class="repeating_offensiveutils">
|
||
<div class="deck-utilities-offensive">
|
||
<div class="table-item-left"><input type="text" name="attr_utility"></div>
|
||
<div class="table-item"><input type="number" name="attr_rating" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_multiplier" value=0></div>
|
||
<div class="table-item"><input type="number" name="attr_size" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_loaded" class="text-mid" value=1> </div>
|
||
<div class="table-item"><input type="number" name="attr_rating-final" value=0></div>
|
||
<div class="table-item"><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="Utility Attack" id="matrixrepeatingattack">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="Utility Test" id="matrixrepeatingtest">L</button></div>
|
||
<div class="table-item"><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Utility from Disk" id="repeating">0</button></div>
|
||
<div class="table-item"><input type="text" name="attr_utilitynotes"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div class="deck-util-background">
|
||
<div class="SRH4">Additional Utilities</div>
|
||
<div class="deck-utilities-additional">
|
||
<header class="table-top-left">Utility</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Target</header>
|
||
<header class="table-top-mid">Multiplier</header>
|
||
<header class="table-top-mid">Size</header>
|
||
<header class="table-top-mid">Loaded</header>
|
||
<header class="table-top-mid">Effective Rating</header>
|
||
<header class="table-top-mid">Execute</header>
|
||
<header class="table-top-mid">Test</header>
|
||
<header class="table-top-mid">Swap Memory</header>
|
||
<header class="table-top-right">Notes</header>
|
||
</div>
|
||
<fieldset class="repeating_deck-utilities">
|
||
<div class="deck-utilities-addrow">
|
||
<input type="text" name="attr_utility" class="myweapontxt">
|
||
<input type="number" name="attr_rating" value=0>
|
||
<select name="attr_target" class="mediumselect2">
|
||
<option value="@{target|Target|matrixaccessrating}">control</option>
|
||
<option value="@{target|Target|matrixcontrolrating}">access</option>
|
||
<option value="@{target|Target|matrixindexrating}">index</option>
|
||
<option value="@{target|Target|matrixfilesrating}">files</option>
|
||
<option value="@{target|Target|matrixslaverating}">slave</option>
|
||
</select>
|
||
<input type="number" name="attr_multiplier" value=0>
|
||
<input type="number" name="attr_size" value=0>
|
||
<div class="text-mid"><input type="checkbox" name="attr_loaded" value=1></div>
|
||
<input type="number" name="attr_rating-final" value=0>
|
||
<div><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="System Operation with Utility" id="matrixrepeatingexec">L</button></div>
|
||
<div><button type="action" name="act_matrixrepeatingtest" class="d6-button" title="Utility Test - use vs. Tar programs" id="matrixrepeatingtest">L</button></div>
|
||
<div><button type="action" name="act_swapmemory" class="pictos-button" title="Reload Utility from Disk" id="repeating">0</button></div>
|
||
<input type="text" name="attr_notes" class="myweapontxt">
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class='sheet-karma'>
|
||
<div class="SRH3">Karma</div>
|
||
<div class="karma-summary">
|
||
<div class="table-top-left"><b>Karma Pool:</b></div>
|
||
<div class="table-top-mid"><b>Good Karma:</b></div>
|
||
<div class="table-top-right"><b>Karma Total:</b></div>
|
||
<input type="number" name="attr_karma-pool" value=0>
|
||
<input type="number" name="attr_karma-good" value=0>
|
||
<input type="number" name="attr_karma-total" value=0>
|
||
</div>
|
||
<br>
|
||
<div class="karma-history">
|
||
<header class="table-top-left">Attribute/Skill/Spell/etc.</header>
|
||
<header class="table-top-mid">Ammount of Karma</header>
|
||
<header class="table-top-mid">Date</header>
|
||
<header class="table-top-right">Notes</header>
|
||
</div>
|
||
<fieldset class="repeating_karma">
|
||
<div class="karma-history">
|
||
<div class="table-item-left"><input type="text" class="myweapontxt" name="attr_purchase"></div>
|
||
<div class="table-item"><input type="number" name="attr_cost" value=0 min=0></div>
|
||
<div class="table-item"><input type="date" name="attr_date" value=0 min=0></div>
|
||
<div class="table-item"><input type="text" class="myweapontxt" name="attr_notes"></div>
|
||
</div>
|
||
</fieldset>
|
||
<br>
|
||
<div class="SRH3">Notes</div>
|
||
<div class="character-notes">
|
||
<textarea name="attr_character-notes"></textarea>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
<div class='sheet-gear'>
|
||
<div class="SRH3">Nuyen:<input type="number" style="width:200px;" name="attr_nuyen" value=0></div>
|
||
<div class="gear">
|
||
<div class="SRH3">Gear</div>
|
||
<div class="gear-table">
|
||
<header class="table-top-left">Name</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Weight</header>
|
||
<header class="table-top-mid">Conceal</header>
|
||
<header class="table-top-mid">Type</header>
|
||
<header class="table-top-mid">Quantity</header>
|
||
<header class="table-top-mid">Pool</header>
|
||
<header class="table-top-mid">Roll</header>
|
||
<header class="table-top-right">Description</header>
|
||
</div>
|
||
<fieldset class="repeating_gear">
|
||
<div class="gear-table">
|
||
<div class="table-item-left"><input type="text" class="myweapontxt" name="attr_name"></div>
|
||
<div class="table-item"><input type="number" name="attr_rating" value=0 min=0></div>
|
||
<div class="table-item"><input type="number" name="attr_weight" value=0 step='0.01' min='0.00'></div>
|
||
<div class="table-item"><input type="number" name="attr_conceal" value=0 ></div>
|
||
<div class="table-item"><select name="attr_type" class="mediumselect2">
|
||
<option value='reuse'>Reusable</option>
|
||
<option value='onetime'>Consumeable</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_quantity" value=0 min=0></div>
|
||
<div class="table-item"><select name="attr_pool" class="mediumselect2">
|
||
<option SELECTED value="none">None</option>
|
||
<option value="combat">Combat</option>
|
||
<option value="task">Task</option>
|
||
<option value="hacking">Hacking</option>
|
||
<option value="control">Control</option>
|
||
<option value="spell">Spell</option>
|
||
<option value="astral">Astral</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item"><button type="action" class="d6-button" name="act_usegear" title="Use Item">L</button></div>
|
||
<div class="table-item"><input type="text" name="attr_description"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<br>
|
||
<div class="SRH3">Credsticks ¥</div>
|
||
<div class="credsticks">
|
||
<header class="table-top-left">Type</header>
|
||
<header class="table-top-mid">ID</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Balance ¥</header>
|
||
<header class="table-top-mid">Roll</header>
|
||
<header class="table-top-right">Permits</header>
|
||
</div>
|
||
<fieldset class="repeating_credsticks">
|
||
<div class="credsticks">
|
||
<div class="table-item-left">
|
||
<select name="attr_type" class="mediumselect2">
|
||
<option SELECTED>Certified</option>
|
||
<option SELECTED>Standard</option>
|
||
<option SELECTED>Silver</option>
|
||
<option SELECTED>Gold</option>
|
||
<option SELECTED>Platinum</option>
|
||
<option SELECTED>Ebony</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item">
|
||
<select name="attr_id" class="mediumselect2">
|
||
<option SELECTED>Legitmate</option>
|
||
<option SELECTED>Forged</option>
|
||
</select>
|
||
</div>
|
||
<div class="table-item"><input type="number" name="attr_rating" value=1></div>
|
||
<div class="table-item"><input type="number" name="attr_balance" value=1><span>¥</span></div>
|
||
<div class="table-item"><button type="action" name="act_checkcredstick" class="d6-button">L</button></div>
|
||
<div class="table-item"><input type="text" class="myweapontxt" name="attr_notes"></div>
|
||
</div>
|
||
</fieldset>
|
||
<br>
|
||
<div class="vehicles-list">
|
||
<div class="SRH3">Vehicles List</div>
|
||
<div class="table-top">Vehicle Details and Skill rating go on sepperate Vehicle Character Sheet</div>
|
||
<div class="vehicles-table">
|
||
<header class="table-item-left">Name</header>
|
||
<header class="table-item">Model</header>
|
||
<header class="table-item">Cost ¥</header>
|
||
<header class="table-item">Notes</header>
|
||
</div>
|
||
<fieldset class="repeating_vehicles">
|
||
<div class="vehicles-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name" class="myweapontxt" ></div>
|
||
<div class="table-item"><input type="text" name="attr_model" class="myweapontxt" ></div>
|
||
<div class="table-item"><input type="number" name="attr_cost" value=0 ><span>¥</span></div>
|
||
<div class="table-item"><input type="text" name="attr_notes" class="myweapontxt" ></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="sheet-rigger">
|
||
<div class="vcr-attributes">
|
||
<div class="text-mid">VCR Rating:</div>
|
||
<div><input type="number" name="attr_vcr" value=0></div>
|
||
<div class="text-mid">Vehicle Reaction:</div>
|
||
<div class="text-mid"><span class="numberspan" name="attr_vcr-reaction" \></div>
|
||
<div class="text-mid">Vehicle Initiative:</div>
|
||
<div class="text-mid"><span class="numberspan" name="attr_vcr-initiative" \></div>
|
||
<div class="text-mid">IVIS Master Unit:</div><input class="text-mid" type="checkbox"
|
||
name="attr_rcdeck-ivis-master" \>
|
||
<div class="text-mid">FDDM Master Unit:</div>
|
||
<div class="text-mid"><input type="checkbox" name="attr_rcdeck-fddm-master" \></div>
|
||
</div>
|
||
|
||
<input type='hidden' class='rc-deck-switch' name='attr_rc-deck-switch' value="show" />
|
||
<div class="rc-deck-show">
|
||
<div class="SRH3">Remote Control Deck
|
||
<button class="switch-button-show" type="action" name="act_rc-deck-switch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="rc-deck-hide">
|
||
<div class="SRH3">Remote Control Deck
|
||
<button class="switch-button-hide" type="action" name="act_rc-deck-switch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="rcdeck-ew-border">
|
||
<div class="rcdeck-ew">
|
||
<div class="text-mid">Intrusion Factor Base:</div>
|
||
<span name="attr_ewarfare" class="spn-nc" />
|
||
<div class="text-mid">Intrusion Factor Mods:</div>
|
||
<input type="number" name="attr_rcdeck-intrusion-mods" />
|
||
<div class="text-mid">Intrusion Factor:</div>
|
||
<span name="attr_rcdeck-intrusion-factor" class="spn-nc"></span>
|
||
</div>
|
||
</div>
|
||
<div class="rc-deck">
|
||
<input type="hidden" name="attr_rcdeck-flux" value=2 />
|
||
<div class="rcdeck-flux">
|
||
<div class="table-top-left"></div>
|
||
<div class="table-top-mid"><b>Rating</div>
|
||
<div class="table-top-mid"><b>Roll</div>
|
||
<div class="table-top-mid"><b>Flux Rating</div>
|
||
<div class="table-top-mid"><b>Modified Flux</div>
|
||
<div class="table-top-right"><b>Range</div>
|
||
<div class="table-item-left">Deck:</div>
|
||
<div class="table-item"><input type="number" name="attr_rcdeck-rating" min=0 value=0></div>
|
||
<div class="table-item"><button class="d6-button" type="action" name="act_skilltest"
|
||
id="rcdeck-rating control" title="Intrusion Detect Test">L</button></div>
|
||
<div class="table-item"><span name="attr_rcdeck-flux"></div>
|
||
<div class="table-item"><input type="number" name="attr_rcdeck-fluxmod" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_rcdeck-range"></div>
|
||
<div class="table-item-left">ECCM:</div>
|
||
<div class="table-item"><input type="number" name="attr_eccm-rating" min=0 value=0></div>
|
||
<div class="table-item"><button class="d6-button" type="action" name="act_skilltest"
|
||
id="eccm-rating control" title="ECCM Test">L</button></div>
|
||
<div class="table-item"><span name="attr_eccm-flux"></div>
|
||
<div class="table-item"><input type="number" name="attr_eccm-fluxmod" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_eccm-range"></div>
|
||
<div class="table-item-left">Electrons Warfare:</div>
|
||
<div class="table-item"><input type="number" name="attr_ewarfare" value=0 /></div>
|
||
<div class="table-item"><button class="d6-button" type="action" name="act_skilltest" id="ewarfare control"
|
||
title="Electronic Warfare or Signal Intercept Test">L</button></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item-left">Encryption Module:</div>
|
||
<div class="table-item"><input type="number" name="attr_rcdeck-encryption-rating" value=0 /></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item-left">Decryption Module:</div>
|
||
<div class="table-item"><input type="number" name="attr_rcdeck-decryption-rating" value=0 /></div>
|
||
<div class="table-item"><button class="d6-button" type="action" name="act_skilltest"
|
||
id="rcdeck-decryption-rating control" title="Decryption Test">L</button></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item-left">Protocol Emulation Module:</div>
|
||
<div class="table-item"><input type="number" name="attr_rcdeck-pem-rating" value=0 /></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item"></div>
|
||
</div>
|
||
<input type='hidden' class='drone-list-switch' name='attr_drone-list-switch' value="show" />
|
||
<div class="drone-list-show">
|
||
<div class="SRH3">Drone Subscriber List
|
||
<button class="switch-button-show" type="action" name="act_drone-list-switch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="drone-list-hide">
|
||
<div class="SRH3">Drone Subscriber List
|
||
<button class="switch-button-hide" type="action" name="act_drone-list-switch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="drones-list">
|
||
<div class="drones-table">
|
||
<div class="table-top-left"><b>Name</div>
|
||
<div class="table-top-mid"><b>Type</div>
|
||
<div class="table-top-mid"><b>Model</div>
|
||
<div class="table-top-mid"><b>Cost</div>
|
||
<div class="table-top-right"><b>Notes</div>
|
||
</div>
|
||
<fieldset class="repeating_drones">
|
||
<div class="drones-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name"></div>
|
||
<div class="table-item"><input type="text" name="attr_type"></div>
|
||
<div class="table-item"><input type="text" name="attr_model"></div>
|
||
<div class="table-item"><input type="number" name="attr_cost"></div>
|
||
<div class="table-item"><input type="text" name="attr_notes"></input>
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<input type='hidden' class='vehicle-skills-switch' name='attr_vehicle-skills-switch' value="show" />
|
||
<div class="vehicle-skills-show">
|
||
<div class="SRH3">Vehicle Skills
|
||
<button class="switch-button-show" type="action" name="act_vehicle-skills-switch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-skills-hide">
|
||
<div class="SRH3">Vehicle Skills
|
||
<button class="switch-button-hide" type="action" name="act_vehicle-skills-switch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="vehicle-skills">
|
||
<div class="SRH5">Update Vehicle Skill Here</div>
|
||
<div class="SRH5">If specializing in a specif vehicle, add modifiers to the vehicle/drone itself</div><br>
|
||
<div class="vehicle-skills-table">
|
||
<div class="table-top-left"><b>Skill</div>
|
||
<div class="table-top-mid"><b>Level</div>
|
||
<div class="table-top-mid"><b>Specialize</div>
|
||
<div class="table-top-right"><b>Remote Operation</div>
|
||
<div></div>
|
||
<div class="table-top-left"><b>Skill</div>
|
||
<div class="table-top-mid"><b>Level</div>
|
||
<div class="table-top-mid"><b>Specialize</div>
|
||
<div class="table-top-right"><b>Remote Operation</div>
|
||
<div></div>
|
||
<div class="table-item-left">Bike:</div>
|
||
<div class="table-item"><input type="number" name="attr_bike" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_bike-specialize" class="bike-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_bike-specialize" class="bike-spec-switch hidden">
|
||
<div class="bike-spec-on"><input type="number" name="attr_bike-remote" value=0></div>
|
||
<div class="bike-spec-off"><span name="attr_bike"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Car:</div>
|
||
<div class="table-item-left"><input type="number" name="attr_car" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_car-specialize" class="car-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_car-specialize" class="car-spec-switch hidden">
|
||
<div class="car-spec-on"><input type="number" name="attr_car-remote" value=0></div>
|
||
<div class="car-spec-off"><span name="attr_car-remote"></span></div>
|
||
</div>
|
||
|
||
<div></div>
|
||
<div class="table-item-left">Hovercraft:</div>
|
||
<div class="table-item-left"><input type="number" name="attr_hovercraft" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_hovercraft-specialize" class="hovercraft-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_hovercraft-specialize" class="hovercraft-spec-switch hidden">
|
||
<div class="hovercraft-spec-on"><input type="number" name="attr_hovercraft-remote" value=0></div>
|
||
<div class="hovercraft-spec-off"><span name="attr_hovercraft-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
|
||
<div class="table-item-left">LTA Aircraft:</div>
|
||
<div class="table-item-left"><input type="number" name="attr_lta" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_lta-specialize" class="lta-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_lta-specialize" class="lta-spec-switch hidden">
|
||
<div class="lta-spec-on"><input type="number" name="attr_lta-remote" value=0></div>
|
||
<div class="lta-spec-off"><span name="attr_lta-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
|
||
<div class="table-item-left">Motorboat:</div>
|
||
<div class="table-item-left"><input type="number" name="attr_motorboat" value=0> </div>
|
||
<div class="table-item"><input type="checkbox" name="attr_motorboat-specialize"
|
||
class="motorboat-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_motorboat-specialize" class="motorboat-spec-switch hidden">
|
||
<div class="motorboat-spec-on"><input type="number" name="attr_motorboat-remote" value=0></div>
|
||
<div class="motorboat-spec-off"><span name="attr_motorboat-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
|
||
<div class="table-item-left">Rotor Aircraft:</div>
|
||
<div class="table-item-left"><input type="number" name="attr_rotor" value=0> </div>
|
||
<div class="table-item"><input type="checkbox" name="attr_rotor-specialize" class="rotor-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_rotor-specialize" class="rotor-spec-switch hidden">
|
||
<div class="rotor-spec-on"><input type="number" name="attr_rotor-remote" value=0></div>
|
||
<div class="rotor-spec-off"><span name="attr_rotor-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Sailboat:</div>
|
||
<div class="table-item"><input type="number" name="attr_sailboat" value=0> </div>
|
||
<div class="table-item"><input type="checkbox" name="attr_sailboat-specialize"
|
||
class="sailboat-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_sailboat-specialize" class="sailboat-spec-switch hidden">
|
||
<div class="sailboat-spec-on"><input type="number" name="attr_sailboat-remote" value=0></div>
|
||
<div class="sailboat-spec-off"><span name="attr_sailboat-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Ship:</div>
|
||
<div class="table-item"><input type="number" name="attr_ship" value=0> </div>
|
||
<div class="table-item"><input type="checkbox" name="attr_ship-specialize" class="ship-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_ship-specialize" class="ship-spec-switch hidden">
|
||
<div class="ship-spec-on"><input type="number" name="attr_ship-remote" value=0></div>
|
||
<div class="ship-spec-off"><span name="attr_ship-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Submarine:</div>
|
||
<div class="table-item"><input type="number" name="attr_submarine" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_submarine-specialize"
|
||
class="submarine-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_submarine-specialize" class="submarine-spec-switch hidden">
|
||
<div class="submarine-spec-on"><input type="number" name="attr_submarine-remote" value=0></div>
|
||
<div class="submarine-spec-off"><span name="attr_submarine-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Vectored Thrust:</div>
|
||
<div class="table-item"><input type="number" name="attr_vectoredthrust" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_vectoredthrust-specialize"
|
||
class="vectoredthrust-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_vectoredthrust-specialize"
|
||
class="vectoredthrust-spec-switch hidden">
|
||
<div class="vectoredthrust-spec-on"><input type="number" name="attr_vectoredthrust-remote" value=0>
|
||
</div>
|
||
<div class="vectoredthrust-spec-off"><span name="attr_vectoredthrust-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Winged Aircraft:</div>
|
||
<div class="table-item"><input type="number" name="attr_wingedaircraft" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_wingedaircraft-specialize"
|
||
class="wingedaircraft-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_wingedaircraft-specialize"
|
||
class="wingedaircraft-spec-switch hidden">
|
||
<div class="wingedaircraft-spec-on"><input type="number" name="attr_wingedaircraft-remote" value=0>
|
||
</div>
|
||
<div class="wingedaircraft-spec-off"><span name="attr_wingedaircraft-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Mechanical Arm:</div>
|
||
<div class="table-item"><input type="number" name="attr_mecharm" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_mecharm-specialize"
|
||
class="mecharm-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_mecharm-specialize" class="mecharm-spec-switch hidden">
|
||
<div class="mecharm-spec-on"><input type="number" name="attr_mecharm-remote" value=0></div>
|
||
<div class="mecharm-spec-off"><span name="attr_mecharm-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Semiballistic:</div>
|
||
<div class="table-item"><input type="number" name="attr_semiballistic" value=0> </div>
|
||
<div class="table-item"><input type="checkbox" name="attr_semiballistic-specialize"
|
||
class="semiballistic-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_semiballistic-specialize"
|
||
class="semiballistic-spec-switch hidden">
|
||
<div class="semiballistic-spec-on"><input type="number" name="attr_semiballistic-remote" value=0>
|
||
</div>
|
||
<div class="semiballistic-spec-off"><span name="attr_semiballistic-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Suborbital:</div>
|
||
<div class="table-item"><input type="number" name="attr_suborbital" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_suborbital-specialize"
|
||
class="suborbital-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_suborbital-specialize" class="suborbital-spec-switch hidden">
|
||
<div class="suborbital-spec-on"><input type="number" name="attr_suborbital-remote" value=0></div>
|
||
<div class="suborbital-spec-off"><span name="attr_suborbital-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Tracks:</div>
|
||
<div class="table-item"><input type="number" name="attr_tracks" value=0></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_tracks-specialize" class="tracks-spec-switch text-mid">
|
||
</div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_tracks-specialize" class="tracks-spec-switch hidden">
|
||
<div class="tracks-spec-on"><input type="number" name="attr_tracks-remote" value=0></div>
|
||
<div class="tracks-spec-off"><span name="attr_tracks-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
<div class="table-item-left">Walkers:</div>
|
||
<div class="table-item"><input type="number" name="attr_walkers" value=0> </div>
|
||
<div class="table-item"><input type="checkbox" name="attr_walkers-specialize"
|
||
class="walkers-spec-switch text-mid"></div>
|
||
<div class="table-item">
|
||
<input type="checkbox" name="attr_walkers-specialize" class="walkers-spec-switch hidden">
|
||
<div class="walkers-spec-on"><input type="number" name="attr_walkers-remote" value=0></div>
|
||
<div class="walkers-spec-off"><span name="attr_walkers-remote"></span></div>
|
||
</div>
|
||
<div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class='sheet-combat'>
|
||
<!-- Combat Tab -->
|
||
<div>
|
||
<div class="SRH2">Combat</div>
|
||
<input type="text" name="attr_updateviztns" hidden=true>
|
||
<input type="text" name="attr_visionprofile" hidden=true>
|
||
<input type="text" name="attr_fulldark" hidden=true>
|
||
<input type="text" name="attr_minlight" hidden=true>
|
||
<input type="text" name="attr_partiallight" hidden=true>
|
||
<input type="text" name="attr_glare" hidden=true>
|
||
<input type="text" name="attr_mist" hidden=true>
|
||
<input type="text" name="attr_lightsmoke" hidden=true>
|
||
<input type="text" name="attr_fullsmoke" hidden=true>
|
||
<input type="text" name="attr_thermalsmoke" hidden=true>
|
||
|
||
<input type='hidden' class='combatskills-switch' name='attr_combatskillsswitch' value="show" />
|
||
<div class="combatskills-show">
|
||
<div class="SRH3">Combat Skills <button class="switch-button-show" type="action" name="act_combatskillsswitch">Show</button> </div>
|
||
</div>
|
||
<div class="combatskills-hide">
|
||
<div class="SRH3">Combat Skills <button class="switch-button-hide" type="action" name="act_combatskillsswitch">Hide</button> </div>
|
||
</div>
|
||
<br>
|
||
<div class="combat-skills">
|
||
<br>
|
||
<div class="SRH5">Update Combat Skill Here</div>
|
||
<div class="SRH5">If specializing in a weapon, add modifiers to the weapon itself</div><br>
|
||
<div class="combat-skills-table">
|
||
<div class="combat-skills-items">Assualt Rifle:</b><input type="number" name="attr_assaultrifles"
|
||
value=0 /></div>
|
||
<div class="combat-skills-items">Pistols:</b><input type="number" name="attr_pistols" value=0> </div>
|
||
<div class="combat-skills-items">Rifles:</b><input type="number" name="attr_rifles" value=0> </div>
|
||
<div class="combat-skills-items">Shotguns:</b><input type="number" name="attr_shotguns" value=0> </div>
|
||
<div class="combat-skills-items">SMGs:</b><input type="number" name="attr_smgs" value=0></div>
|
||
<div class="combat-skills-items">Throwing:</b><input type="number" name="attr_throwing" value=0> </div>
|
||
<div class="combat-skills-items">Edged:</b><input type="number" name="attr_edged" value=0></div>
|
||
<div class="combat-skills-items">Clubs:</b><input type="number" name="attr_clubs" value=0 /></div>
|
||
<div class="combat-skills-items">Cyper Implant:</b><input type="number" name="attr_cyberimplant"
|
||
value=0 /></div>
|
||
<div class="combat-skills-items">Whips:</b><input type="number" name="attr_whips" value=0></div>
|
||
<div class="combat-skills-items">Pole Arms:</b><input type="number" name="attr_poles" value=0> </div>
|
||
<div class="combat-skills-items">Gunnery:</b><input type="number" name="attr_gunnery" value=0> </div>
|
||
<div class="combat-skills-items">Heavy Weapons:</b><input type="number" name="attr_heavyweapons"
|
||
value=0> </div>
|
||
<div class="combat-skills-items">Lasers:</b><input type="number" name="attr_lasers" value=0> </div>
|
||
<div class="combat-skills-items">Launchers:</b><input type="number" name="attr_launchers" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">Spray:</b><input type="number" name="attr_spray" value=0> </div>
|
||
<div class="combat-skills-items">Gyrojet:</b><input type="number" name="attr_gyrojet" value=0> </div>
|
||
<div class="combat-skills-items">Projectile:</b><input type="number" name="attr_projectiles" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">Demolitions:</b><input type="number" name="attr_demolitions" value=0>
|
||
</div>
|
||
<div class="combat-skills-items">Under Water:</b><input type="number" name="attr_underwatercombat"
|
||
value=0></div>
|
||
<div class="combat-skills-items">Blowgun:</b><input type="number" name="attr_blowgun" value=0> </div>
|
||
<div class="combat-skills-items">Bracer:</b><input type="number" name="attr_bracer" value=0> </div>
|
||
<div class="combat-skills-items">Gun Cane:</b><input type="number" name="attr_guncane" value=0> </div>
|
||
<div class="combat-skills-items">Oral Gun:</b><input type="number" name="attr_oralgun" value=0> </div>
|
||
<div class="combat-skills-items">Oral Strike:</b><input type="number" name="attr_oralstrike" value=0></div>
|
||
<div class="combat-skills-items">Eye Gun:</b><input type="number" name="attr_eyegun" value=0> </div>
|
||
</div>
|
||
<div></div>
|
||
<div class="combat-unarmed">
|
||
<div class="combat-skills-items">Unarmed:<input type="number" name="attr_unarmed" value=0></div>
|
||
<div class="combat-skills-items">Martial Arts:</div>
|
||
<div><input type="text" list="martialarts" value="Unarmed" style="width=80px;" name="attr_martialarts">
|
||
<datalist class="mediumselect3" id="martialarts">
|
||
<option selected>Unarmed</option>
|
||
<option>Brawling</option>
|
||
<option>MMA</option>
|
||
<option>Karate</option>
|
||
<option>Arnis</option>
|
||
<option>Muy Thai</option>
|
||
<option>Tae Kwon Do</option>
|
||
<option>Wild Cat</option>
|
||
</datalist>
|
||
</div>
|
||
<div>Notes:</div>
|
||
<textarea name="attr_martialartsnotes" style='width:300px;height:50%;margin-bottom:unset;'></textarea>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div>
|
||
<input type='hidden' class='rangedweapons-switch' name='attr_rangedweaponsswitch' value="show" />
|
||
<div class="rangedweapons-hide">
|
||
<div class="SRH3">Ranged Weapons<button class="switch-button-show" type="action" id="rangedweaponsswitch" name="act_show-hide">Show</button> </div>
|
||
</div>
|
||
<div class="rangedweapons-show">
|
||
<div class="SRH3">Ranged Weapons<button class="switch-button-hide" type="action" id="rangedweaponsswitch" name="act_show-hide">Hide</button> </div>
|
||
</div>
|
||
<br>
|
||
<div class="rangedweapons-show">
|
||
<div class="ranged-table-headers">
|
||
<div class="table-top-left">Equip</div>
|
||
<div class="table-top-mid">General</div>
|
||
<div class="table-top-mid">Range</div>
|
||
<div class="table-top-mid">Fire Mode</div>
|
||
<div class="table-top-mid">Damage</div>
|
||
<div class="table-top-mid">Ammunition</div>
|
||
<div class="table-top-right">Show</div>
|
||
</div>
|
||
<div class="ranged-table-items">
|
||
<div class="table-item-left" title="Primary Hand">Pri</div>
|
||
<div class="table-item" title="Off Hand">Sec</div>
|
||
<div class="table-item">Name</div>
|
||
<div class="table-item">Type</div>
|
||
<div class="table-item">Conceal</div>
|
||
<div class="table-item">Min</div>
|
||
<div class="table-item">S</div>
|
||
<div class="table-item">M</div>
|
||
<div class="table-item">L</div>
|
||
<div class="table-item">Ex</div>
|
||
<div class="table-item">SS</div>
|
||
<div class="table-item">SA</div>
|
||
<div class="table-item">BF</div>
|
||
<div class="table-item">FA</div>
|
||
<div class="table-item">Power</div>
|
||
<div class="table-item">Dmg</div>
|
||
<div class="table-item">Max</div>
|
||
<div class="table-item">Remain</div>
|
||
<div class="table-item">Reload</div>
|
||
<div class="table-item">Fire</div>
|
||
<div class="table-item">More</div>
|
||
</div>
|
||
<fieldset class="repeating_rangedweapons">
|
||
<div class="ranged-table-row">
|
||
<div class="text-mid"><input title="Equipped in Primary Hand" type="checkbox"
|
||
name="attr_primary-ranged-equipped"></div>
|
||
<div class="text-mid"><input title="Equipped in Off Hand" type="checkbox"
|
||
name="attr_secondary-ranged-equipped"></div>
|
||
<input type="text" name="attr_name" class="myweapontxt">
|
||
<select name="attr_type" class="mediumselect2">
|
||
<option SELECTED>Other</option>
|
||
<option>Hold-out Pistol</option>
|
||
<option>Light Pistol</option>
|
||
<option>Machine Pistol</option>
|
||
<option>Heavy Pistol</option>
|
||
<option>SMG</option>
|
||
<option>Taser</option>
|
||
<option>Shotgun</option>
|
||
<option>Sporting Rifle</option>
|
||
<option>Sniper Rifle</option>
|
||
<option>Assault Rifle</option>
|
||
<option value="Light Machine Gun">LMG</option>
|
||
<option value="Medium Machine Gun">MMG</option>
|
||
<option value="Heavy Machine Gun">HMG</option>
|
||
<option>Assault Cannon</option>
|
||
<option>Minigun</option>
|
||
<option>Bow</option>
|
||
<option>Light Crossbow</option>
|
||
<option>Medium Crossbow</option>
|
||
<option>Heavy Crossbow</option>
|
||
<option>Sling Shot</option>
|
||
<option>Sling Launcher</option>
|
||
<option>Thrown Knife</option>
|
||
<option>Shuriken</option>
|
||
<option>Caltrops</option>
|
||
<option>Nets</option>
|
||
<option>Bracer</option>
|
||
<option>Gun Cane</option>
|
||
<option>Speargun</option>
|
||
<option>Net Gun</option>
|
||
<option>Laser Pistol</option>
|
||
<option>Laser Rifle</option>
|
||
<option>Laser Sniper</option>
|
||
<option>"Gyrojet (land)</option>
|
||
<option>"Gyrojet (water)</option>
|
||
<option>Flamethrower</option>
|
||
<option>Blowgun</option>
|
||
</select>
|
||
<input type="number" name="attr_conceal">
|
||
<input type="number" name="attr_min">
|
||
<input type="number" name="attr_short">
|
||
<input type="number" name="attr_medium">
|
||
<input type="number" name="attr_long">
|
||
<input type="number" name="attr_extreme">
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="ss" /></div>
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="sa" /></div>
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="bf" /></div>
|
||
<div class="text-mid"><input type="radio" name="attr_firemode" value="fa" /></div>
|
||
<input type="number" name="attr_power">
|
||
<select name="attr_damage" title="Weapon Damage" class="mediumselect2">
|
||
<option title="Light Damage" SELECTED>L</option>
|
||
<option title="Light Damage">M</option>
|
||
<option title="Light Damage">S</option>
|
||
<option title="Light Damage">D</option>
|
||
<option title="Light Stun" value="L(stun)">L(s)</option>
|
||
<option title="Moderate Stun" value="M(stun)">M(s)</option>
|
||
<option title="Serious Stun" value="S(stun)">S(s)</option>
|
||
<option title="Deadly Stun" value="D(stun)">D(s)</option>
|
||
</select>
|
||
<input type="number" name="attr_ammo" value=0>
|
||
<input type="number" name="attr_ammoremain" value=0>
|
||
<div><button class="pictos-button" id="reloadbutton" type="action" name="act_reload"
|
||
title="Reload Weapon">0</button></div>
|
||
<div><button class="attack-dice" type="action" id="rangedattack" name="act_rangedattack" title="Fire Weapon"></button>
|
||
</div>
|
||
<div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
|
||
</div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<span class="show-weaponmods">
|
||
<div class="text-mid"
|
||
title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box">
|
||
<b>Skill</div>
|
||
<div class="text-mid" title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
|
||
<div class="text-mid" title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
|
||
<div class="text-mid" title="Gas vents and other recoil accesories"><b>Recoil Comp</div>
|
||
<div><b>Gyro Stabalization</div>
|
||
<div title="accesories that improve to hit number for ranged combat"><b>Targeting Assistance</div>
|
||
<div class="text-mid" title="Clip, Belt, Cylinder, Magazine or Action Break"><b>Reload Type</div>
|
||
<div class="text-mid" title="number or clips, belts or individual rounds"><b>Reloads</div>
|
||
<div class="text-mid"><b>Ammo Type</div>
|
||
<div class="text-mid"><b>Notes:</div>
|
||
<select name="attr_skill" class="mediumselect2"
|
||
title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box">
|
||
<option SELECTED value="@{pistols}">Pistol</option>
|
||
<option value="@{assaultrifles}">Assualt Rifle</option>
|
||
<option value="@{heavyweapons}">Heavy Weapon</option>
|
||
<option value="@{lasers}">Laser</option>
|
||
<option value="@{projectiles}">Projectile</option>
|
||
<option value="@{rifles}">Rifle</option>
|
||
<option value="@{shotguns}">Shotgun</option>
|
||
<option value="@{smgs}">SMG</option>
|
||
<option value="@{throwing}">Thrown</option>
|
||
<option value="@{blowgun}">Blowgun</option>
|
||
<option value="@{bracer}">Bracer</option>
|
||
<option value="@{guncane}">Gun Cane</option>
|
||
<option value="@{oralgun}">Oral Gun</option>
|
||
<option value="@{oralstrike}">Oral Strike</option>
|
||
<option value="@{eyegun}">Eye Gun</option>
|
||
<option value=0>Other</option>
|
||
</select>
|
||
<div><input type="number" name="attr_specialized" value=0></div>
|
||
<div><input type="number" name="attr_tnmods" value=0></div>
|
||
<div><input type="number" name="attr_recoilcomp" title="Gas vents and other recoil accesories"
|
||
value=0></div>
|
||
<select class="mediumselect2" name="attr_gyro">
|
||
<option value="0" SELECTED>None</option>
|
||
<option value="5">Regular</option>
|
||
<option value="6">Deluxe</option>
|
||
</select>
|
||
<select class="mediumselect2" name="attr_targeting">
|
||
<option value="0" SELECTED>None</option>
|
||
<option value="-2">Smartlink</option>
|
||
<option value="-1">LaserSight</option>
|
||
<option value="-1">Smart Goggles</option>
|
||
</select>
|
||
<select name="attr_reloadmethod" class="mediumselect2">
|
||
<option>clip</option>
|
||
<option>break</option>
|
||
<option>magazine</option>
|
||
<option>speed loader</option>
|
||
<option>cylinder</option>
|
||
<option>belt</option>
|
||
</select>
|
||
<div><input type="number" name="attr_reloads" value=0></div>
|
||
<select name="attr_ammotype" class="mediumselect2">
|
||
<option value="regular">Regular</option>
|
||
<option value="adps">ADPS</option>
|
||
<option value="explosive">Explosive</option>
|
||
<option value="explosive2">Explosive EX</option>
|
||
<option value="flechette">Flechette</option>
|
||
<option value="gel">Gel</option>
|
||
<option value="tracer">Tracer</option>
|
||
<option value="av">Anti-Vehicl</option>
|
||
<option value="capsule">Capsule</option>
|
||
<option value="glazer">Glazer</option>
|
||
<option value="hic">Hi-C</option>
|
||
<option value="hpoint">Hollow Point</option>
|
||
<option value="incendiary">Incendiary</option>
|
||
<option value="mercury">Mercury</option>
|
||
<option value="tracker">Tracker</option>
|
||
</select>
|
||
<textarea name="attr_notes" style='width:150px;height:22px;'></textarea>
|
||
</span>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
</div>
|
||
<input type='hidden' class='meleeweapons-switch' name='attr_meleeweaponsswitch' value="show" />
|
||
<div class="meleeweapons-hide">
|
||
<div class="SRH3">Melee Weapons<button class="switch-button-show" type="action" id="meleeweaponsswitch" name="act_show-hide">Show</button> </div>
|
||
</div>
|
||
<div class="meleeweapons-show">
|
||
<div class="SRH3">Melee Weapons<button class="switch-button-hide" type="action" id="meleeweaponsswitch" name="act_show-hide">Hide</button> </div>
|
||
</div>
|
||
<br>
|
||
<div class="meleeweapons-show">
|
||
<input name="attr_meleeselected" type="hidden" \>
|
||
<input name="attr_armorselected" type="hidden" \>
|
||
<input name="attr_impact" type="hidden" value=0 \>
|
||
<input name="attr_ballistic" type="hidden" value=0 \>
|
||
<input name="attr_meleereach" value=0 type="hidden" \>
|
||
<input name="attr_meleereach_max" value=0 type="hidden" \>
|
||
<input name="attr_meleeselected" value=0 type="hidden" \>
|
||
<div class="melee-table-header">
|
||
<div class="table-top-left">Equip</div>
|
||
<div class="table-top-mid">Name</div>
|
||
<div class="table-top-mid">Skill</div>
|
||
<div class="table-top-mid">Conceal</div>
|
||
<div class="table-top-mid">Reach</div>
|
||
<div class="table-top-mid">Power</div>
|
||
<div class="table-top-mid">Damage</div>
|
||
<div class="table-top-mid"title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
|
||
<div class="table-top-mid"title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
|
||
<div class="table-top-mid">Attack</div>
|
||
<div class="table-top-right">Notes</div>
|
||
</div>
|
||
<div class="melee-table-row">
|
||
<div class="text-mid"><input type="checkbox" name="attr_unarmed-equipped" checked></div>
|
||
<input class="myweapontxt" type="text" name="attr_unarmed-name" value="Unarmed Combat" disabled>
|
||
<select class="mediumselect2" name="attr_unarmedskill">
|
||
<option value="@{unarmed}" selected>Unarmed</option>
|
||
</select>
|
||
<input type="number" name="attr_unarmed-conceal" value=0>
|
||
<input type="number" name="attr_unarmed-reach" value=0>
|
||
<div class="meleespan"><span name="attr_strength_max"></span></div>
|
||
<select name="attr_attackdamage" class="mediumselect2">
|
||
<option SELECTED>M</option>
|
||
</select>
|
||
<input type="number" name="attr_unarmed-specialized" value=0 \>
|
||
<input type="number" name="attr_unarmed-miscmods" value=0 \>
|
||
<div><button class="attack-dice" id="unarmedattack" type="action" name="act_melee"
|
||
title="Melee Attack"></button></div>
|
||
<input name="attr_notes" type="text"></input>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
<fieldset class="repeating_meleeweapons">
|
||
<div class="melee-table-row">
|
||
<div class="text-mid"><input type="checkbox" name="attr_meleeequiped"></div>
|
||
<input type="text" name="attr_name">
|
||
<select name="attr_skill" class="mediumselect2">
|
||
<option value="@{clubs}">Club</option>
|
||
<option value="@{cyberimplant}">Cyber Implant</option>
|
||
<option value="@{edged}">Edged</option>
|
||
<option value="@{poles}">Pole Arm</option>
|
||
<option value="@{whips}">Whip</option>
|
||
<option value="@{unarmed}" selected>Unarmed</option>
|
||
</select>
|
||
<input type="number" name="attr_conceal" value=0 \>
|
||
<input type="number" name="attr_reach" value=0 \>
|
||
<input type="number" name="attr_power" value=0>
|
||
<select name="attr_damage" class="mediumselect2">
|
||
<option SELECTED>L</option>
|
||
<option>M</option>
|
||
<option>S</option>
|
||
<option>D</option>
|
||
<option>L(stun)</option>
|
||
<option>M(stun)</option>
|
||
<option>S(stun)</option>
|
||
<option>D(stun)</option>
|
||
</select>
|
||
<input type="number" name="attr_specialized" value=0 \>
|
||
<input type="number" name="attr_tnmods" value=0 \>
|
||
<input name="attr_miscnotes" type="text" hidden=true value="Reach Bonus: ">
|
||
<div><button class="attack-dice" type="action" name="act_attack" title="Melee Attack"></button></div>
|
||
<div><input name="attr_notes" type="text"></input></div>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
<input type='hidden' class='weaponfocus-show' name='attr_weaponfocus-show' value="false" />
|
||
<div class="weaponfocus">
|
||
<div class="SRH4">Weapon Focus </div>
|
||
<div class="weaponfocus-header">
|
||
<div class="table-top-left">Equip</div>
|
||
<div class="table-top-mid">Name</div>
|
||
<div class="table-top-mid">Reach</div>
|
||
<div class="table-top-mid">Skill</div>
|
||
<div class="table-top-mid">Conceal</div>
|
||
<div class="table-top-mid">Force</div>
|
||
<div class="table-top-mid">Power</div>
|
||
<div class="table-top-mid">Damage</div>
|
||
<div class="table-top-mid">Specialize</div>
|
||
<div class="table-top-mid">Attack</div>
|
||
<div class="table-top-right">Notes</div>
|
||
</div>
|
||
<div class="weaponfocus-attributes">
|
||
<div class="text-mid"><input type="checkbox" name="attr_weaponfocus-equipped" checked></div>
|
||
<input class="myweapontxt" type="text" name="attr_weaponfocus-name" value="Weapon Focus">
|
||
<input type="number" name="attr_weaponfocus-reach" value=0>
|
||
<select class="mediumselect2" name="attr_weaponfocus skill">
|
||
<option value="@{edged}" SELECTED>Edged</option>
|
||
<option value="@{clubs}">Club</option>
|
||
<option value="@{poles}">Pole Arm</option>
|
||
<option value="@{whips}">Whip</option>
|
||
</select>
|
||
<input type="number" name="attr_weaponfocus-conceal" value=0>
|
||
<input type="number" name="attr_weaponfocus-force" value=0>
|
||
<input type="number" name="attr_weaponfocus-pawer" value=0>
|
||
<select name="attr_weaponfocus-damage" class="mediumselect2">
|
||
<option>L</option>
|
||
<option SELECTED>M</option>
|
||
<option>S</option>
|
||
<option>D</option>
|
||
</select>
|
||
<input type="number" name="attr_weaponfocus-specialized" value=0 \>
|
||
<div><button class="attack-dice" id="weaponfocus" type="action" name="act_melee"
|
||
title="Melee Attack"></button></div>
|
||
<input class="myweapontxt" type="text" name="attr_weaponfocus-notes">
|
||
<br>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<input type='hidden' class='explosives-switch' name='attr_explosivesswitch' value="show" />
|
||
<div class="explosives-hide">
|
||
<div class="SRH3">Explosives<button class="switch-button-show" type="action" id="explosivesswitch" name="act_show-hide">Show</button> </div>
|
||
</div>
|
||
<div class="explosives-show">
|
||
<div class="SRH3">Explosives<button class="switch-button-hide" type="action" id="explosivesswitch" name="act_show-hide">Hide</button> </div>
|
||
</div>
|
||
<br>
|
||
<div class="explosives-show">
|
||
<div class="explosives-table-header">
|
||
<div class="table-top-left">Name</div>
|
||
<div class="table-top-mid">Type</div>
|
||
<div class="table-top-mid">Conceal</div>
|
||
<div class="table-top-mid">Min</div>
|
||
<div class="table-top-mid">S</div>
|
||
<div class="table-top-mid">M</div>
|
||
<div class="table-top-mid">L</div>
|
||
<div class="table-top-mid">Ex</div>
|
||
<div class="table-top-mid">Power</div>
|
||
<div class="table-top-mid">Damage</div>
|
||
<div class="table-top-mid">Intel.</div>
|
||
<div class="table-top-mid">Blast</div>
|
||
<div class="table-top-mid">Scatter</div>
|
||
<div class="table-top-mid">Qty.</div>
|
||
<div class="table-top-mid">Manual</div>
|
||
<div class="table-top-mid">Sensor</div>
|
||
<div class="table-top-right">More</div>
|
||
</div>
|
||
<fieldset class="repeating_explosives">
|
||
<div class="explosives-table-row">
|
||
<input type="text" name="attr_name" class="myweapontxt">
|
||
<select name="attr_exptype" class="mediumselect2">
|
||
<option value="Regular:O">R/O (Regular Offensive)</option>
|
||
<option value="Regular:D">R/D (Regular Defensive)</option>
|
||
<option value="Regular:C">R/C (Regular Concussion)</option>
|
||
<option value="Aerodynamic:O">A/O (Aerodynamic Offensive)</option>
|
||
<option value="Aerodynamic:D">A/D (Aerodynamic Defensive)</option>
|
||
<option value="Aerodynamic:C">A/C (Aerodynamic Concussion)</option>
|
||
<option value="Launcher:O">L/O (Launcher Offensive)</option>
|
||
<option value="Launcher:D">L/D (Launcher Defensive)</option>
|
||
<option value="Launcher:C">L/C (Launcher Concussion)</option>
|
||
<option selected value="Other:Other">Other</option>
|
||
</select>
|
||
<input type="number" name="attr_conceal" value=0>
|
||
<input type="number" name="attr_min" value=0>
|
||
<input type="number" name="attr_short" value=0>
|
||
<input type="number" name="attr_medium" value=0>
|
||
<input type="number" name="attr_long" value=0>
|
||
<input type="number" name="attr_extreme" value=0>
|
||
<input type="number" name="attr_power">
|
||
<div>
|
||
<select name="attr_damage" class="mediumselect2">
|
||
<option SELECTED>L</option>
|
||
<option>M</option>
|
||
<option>S</option>
|
||
<option>D</option>
|
||
<option>M(stun)</option>
|
||
<option>S(stun)</option>
|
||
<option>D(stun)</option>
|
||
</select>
|
||
</div>
|
||
<input type="number" name="attr_missleint" value=0>
|
||
<input type="number" name="attr_blast" value=0 step=0.05>
|
||
<input type="number" name="attr_scatter" value=1>
|
||
<input type="number" name="attr_ammoremain" value=0>
|
||
<div><button class="explosive-dice" type="action" name="act_rangedattack" id="explosive"
|
||
title="Explosives Attack"></button></div>
|
||
<div><button type="action" name="act_rangedattack" id="sensorexp" title="Sensor Assisted Attack">f</button>
|
||
</div>
|
||
<div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
|
||
</div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
</div>
|
||
<input type="hidden" name="attr_scatterredux">
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<div class="explosive-mods-switch">
|
||
<div>Skill</div>
|
||
<div title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
|
||
<div title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
|
||
<div>Recoil Comp</div>
|
||
<div>Gyro Stabalization</div>
|
||
<div>Targeting Assistance</div>
|
||
<div>Range Finder</div>
|
||
<div>Notes:</div>
|
||
<select name="attr_skill" class="mediumselect2">
|
||
<option selected value="@{throwing}">Throw</option>
|
||
<option value="@{launchers}">Launcher</option>
|
||
<option value="@{demolitions}">Demolition</option>
|
||
</select>
|
||
<div><input type="number" name="attr_specialized" value=0></div>
|
||
<div><input type="number" name="attr_tnmods" value=0></div>
|
||
<div><input type="number" name="attr_recoilcomp" value=0></div>
|
||
<select class="mediumselect2" name="attr_gyro">
|
||
<option value="0" SELECTED>None</option>
|
||
<option value="5">Regular</option>
|
||
<option value="6">Deluxe</option>
|
||
</select>
|
||
<select class="mediumselect2" name="attr_targeting">
|
||
<option value="0" SELECTED>None</option>
|
||
<option value="-2">Smartlink</option>
|
||
<option value="-1">LaserSight</option>
|
||
<option value="-1">Smart Goggles</option>
|
||
</select>
|
||
<div><input name="attr_rangefinder" type="number"></div>
|
||
<input name="attr_notes" type="text"></input>
|
||
</div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<input type='hidden' class='armor-switch' name='attr_armorswitch' value="show" />
|
||
<div class="armor-hide">
|
||
<div class="SRH3">Armor<button class="switch-button-show" type="action" id="armorswitch" name="act_show-hide">Show</button> </div>
|
||
</div>
|
||
<div class="armor-show">
|
||
<div class="SRH3">Armor<button class="switch-button-hide" type="action" id="armorswitch" name="act_show-hide">Hide</button> </div>
|
||
</div>
|
||
<br>
|
||
<div class="armor-show">
|
||
<input type="hidden" name="attr_armor-combatpool-pen" value=0>
|
||
<input type="hidden" name="attr_armor-quickness-pen" value=0>
|
||
<div class="armor">
|
||
<header>Pain Resistance: </header><input type='number' name='attr_adeptpainres' value="0" min="0">
|
||
<header>Ballistic: </header><input type='number' name='attr_ballistic' value="0" min="0">
|
||
<header>Impact: </header><input type='number' name='attr_impact' value="0" min="0" >
|
||
<header>Quickness Penalty: <span name="attr_armor-quickness-pen" value=0></span></header>
|
||
<header>Combat Pool Penalty: <span name="attr_armor-combatpool-pen" value=0></span></header>
|
||
</div>
|
||
<div class="armorsets-table-header">
|
||
<div class="table-top-left">Equip</div>
|
||
<div class="table-top-mid">Name</div>
|
||
<div class="table-top-mid">Slot</div>
|
||
<div class="table-top-mid">Ballistic Rating</div>
|
||
<div class="table-top-mid">Impact Rating</div>
|
||
<div class="table-top-right">Notes</div>
|
||
</div>
|
||
<fieldset class="repeating_armor">
|
||
<div class="armorsets-table-row">
|
||
<div class="text-mid" ><input type="checkbox" name="attr_equipped">
|
||
</div>
|
||
<input type=text name="attr_armorname" class="myweapontxt">
|
||
<div><select name="attr_slot" class="mediumselect2">
|
||
<option SELECTED>body</option>
|
||
<option >helmet</option>
|
||
<option>shield</option>
|
||
<option value="ware">cyberware</option>
|
||
<option value="ware">bioware</option>
|
||
<option value="ware">nanoware</option>
|
||
<option value="gyro">gyro harness</option>
|
||
</select>
|
||
</div>
|
||
<input type="number" value=0 name="attr_ballistic">
|
||
<input type="number" value=0 name="attr_impact">
|
||
<input name="attr_armornotes" type="text"></input>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
</div>
|
||
<input type='hidden' class='ammo-switch' name='attr_ammoswitch' value="show" />
|
||
<div class="ammo-hide">
|
||
<div class="SRH3">Ammunition<button class="switch-button-show" type="action" id="ammoswitch" name="act_show-hide">Show</button> </div>
|
||
</div>
|
||
<div class="ammo-show">
|
||
<div class="SRH3">Ammunition<button class="switch-button-hide" type="action" id="ammoswitch" name="act_show-hide">Hide</button> </div>
|
||
</div>
|
||
<div class="ammo-show">
|
||
<br>
|
||
<div class="ammunition-list">
|
||
<div class="ammo-table-header">
|
||
<div class="table-top-left">Ammo Type</div>
|
||
<div class="table-top-mid">Ammount</div>
|
||
<div class="table-top-mid">Weight</div>
|
||
<div class="table-top-right">Damage Modifier</div>
|
||
</div>
|
||
<fieldset class="repeating_ammunition">
|
||
<div class="ammo-table-row">
|
||
<div><input type="text" name="attr_ammotype"></div>
|
||
<div><input type="number" name="attr_ammocount"></div>
|
||
<div><input type="number" name="attr_ammoweight"></div>
|
||
<input name="attr_ammonotes" type="text"></input>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="matrix">
|
||
<input class="matrixalert-format" type='hidden' name="attr_matrixalert" hidden=true value='None'>
|
||
<input type="number" name="attr_matrixsecuritynumber" hidden="true">
|
||
<div class="matrix-always-displayed">
|
||
<div class="matrix-attributes">
|
||
<div>Type</div>
|
||
<div>Grid</div>
|
||
<div class="matrix-rating">
|
||
<div class="header">Security Code</div>
|
||
<div>-</div>
|
||
<div class="header"> Security Value</div>
|
||
<div>/</div>
|
||
<div class="header"> Acesss</div>
|
||
<div>/</div>
|
||
<div class="header"> Control</div>
|
||
<div>/</div>
|
||
<div class="header"> Index</div>
|
||
<div>/</div>
|
||
<div class="header"> Files</div>
|
||
<div>/</div>
|
||
<div class="header"> Slave</div>
|
||
</div>
|
||
<div><select name="attr_matrixobject" class="mediumselect2">
|
||
<option>Grid</option>
|
||
<option>Host</option>
|
||
<option>VM</option>
|
||
</select></div>
|
||
<input type="text" name="attr_parentgrid">
|
||
<div class="matrix-rating">
|
||
<div><select name="attr_matrixcode" class="mediumselect2">
|
||
<option SELECTED>BLUE</option>
|
||
<option>GREEN</option>
|
||
<option>ORANGE</option>
|
||
<option>RED</option>
|
||
</select></div>
|
||
<div>-</div>
|
||
<div><input type="number" name="attr_matrixsecurityrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixaccessrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixcontrolrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixindexrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixfilesrating"></div>
|
||
<div>/</div>
|
||
<div><input type="number" name="attr_matrixslaverating"></div>
|
||
</div>
|
||
</div>
|
||
<div class="matrix-status">
|
||
<div></div>
|
||
<div class="matrix-systemrating">
|
||
<div><span name="attr_matrixcode"></span> -
|
||
<span name="attr_matrixsecurityrating"></span> /
|
||
<span name="attr_matrixaccessrating"></span> /
|
||
<span name="attr_matrixcontrolrating"></span> /
|
||
<span name="attr_matrixindexrating"></span> /
|
||
<span name="attr_matrixfilesrating"></span> /
|
||
<span name="attr_matrixslaverating"></span>
|
||
</div>
|
||
</div>
|
||
<div></div>
|
||
<div>Detection Roll</div><div><button type="action" class="d6-button" name="act_matrixdetect" title="Detection Roll" id="systemdetect">L</button></div>
|
||
<div>Security Tally</div><input title="Security Tally for all intruding icons in the system"type="number" name="attr_matrixsecuritytally">
|
||
<div></div>
|
||
<div title="Reset Security Tally for all icons in the system">Reset Tally</div><div><button type="action" class="pictos-button" name="act_matrixdetect" title="Detection Roll" id="resettally">0</button></div>
|
||
<div>Alert Status</div>
|
||
<select name="attr_matrixalert" class="mediumselect2">
|
||
<option value=0>None</option>
|
||
<option value=4>Passive</option>
|
||
<option value=5>Active</option>
|
||
</select>
|
||
<input type="number" name="attr_matrixalertTN" hidden=true>
|
||
</div>
|
||
</div>
|
||
<div class="matrixhost">
|
||
<input type='hidden' class='securitysheaf-switch' name='attr_securitysheafswitch' value="show" />
|
||
<div class="securitysheaf-show">
|
||
<div class="SRH3">Security Sheaf
|
||
<button class="switch-button-show" type="action" name="act_securitysheafswitch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="securitysheaf-hide">
|
||
<div class="SRH3">Security Sheaf
|
||
<button class="switch-button-hide" type="action" name="act_securitysheafswitch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="securitysheaf">
|
||
<div class="securitytally">
|
||
<header class="table-top-left">Trigger Step</header>
|
||
<header class="table-top-right">Event</header>
|
||
</div>
|
||
<fieldset class="repeating_security">
|
||
<div class="securitytally">
|
||
<div class="table-item-left"><input type="number" name="attr_step"></div>
|
||
<div class="table-item"><input type="text" name="attr_event"></div>
|
||
</div>
|
||
</fieldset>
|
||
<br>
|
||
<div class="matrix-intruder-tally">
|
||
<header class="table-top-left">Intruder</header>
|
||
<header class="table-top-mid">Detection</header>
|
||
<header class="table-top-mid">Security Tally</header>
|
||
<header class="table-top-right">Reset Tally</header>
|
||
</div>
|
||
<fieldset class="repeating_intruders">
|
||
<div class="matrix-intruder-tally">
|
||
<div class="table-item-left"><input type="text" name="attr_intrudername"></div>
|
||
<div class="table-item"><button type="action" class="d6-button" name="act_detect" id="systemdetect" title="Detection Roll for intruding icon">L</button></div>
|
||
<div class="table-item"><input type="number" name="attr_securitytally" value=0></div>
|
||
<div class="table-item"><button type="action" class="pictos-button" name="act_detect" id="resetsecuritytally" title="Reset Security Tally">0</button></div>
|
||
</div>
|
||
</fieldset>
|
||
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<input type='hidden' class='ic-switch' name='attr_ic-switch' value="show" />
|
||
<div class="ic-show">
|
||
<div class="SRH3">Intrusion Countermeasures
|
||
<button class="switch-button-show" type="action" name="act_ic-switch">Show</button>
|
||
</div>
|
||
</div>
|
||
<div class="ic-hide">
|
||
<div class="SRH3">Intrusion Countermeasures
|
||
<button class="switch-button-hide" type="action" name="act_ic-switch">Hide</button>
|
||
</div>
|
||
</div>
|
||
<div class="ic">
|
||
<input type='hidden' name='attr_deck-tn' value=0 />
|
||
<div class="ic-attributes">
|
||
<header class="table-top-left">Name</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Initiative</header>
|
||
<header class="table-top-mid">Damage</header>
|
||
<header class="table-top-mid">Type</header>
|
||
<header class="table-top-mid">Icon Status</header>
|
||
<header class="table-top-mid">Test Target</header>
|
||
<header class="table-top-mid">Sensor</header>
|
||
<header class="table-top-mid">Evade</header>
|
||
<header class="table-top-mid">Parry</header>
|
||
<header class="table-top-mid">Position</header>
|
||
<header class="table-top-mid">Execute</header>
|
||
<header class="table-top-right">Resist</header>
|
||
</div>
|
||
<fieldset class="repeating_ic">
|
||
<input type="hidden" name="attr_ic-penalty" value=0>
|
||
<div class="ic-attributes-table">
|
||
<div><input type="text" name="attr_icname"></div>
|
||
<div><input type="number" name="attr_icrating"></div>
|
||
<div><span name="attr_matrixsecuritynumber"></span>d6 +<span name="attr_icrating"></span><button type="action" name="act_init" class="d6-button" title="IC Initiative Roll">L</button></div>
|
||
<div><input type="number" name="attr_ic-damage" value=0 min=0 max=10></div>
|
||
<div><select name="attr_ictype" class="mediumselect2">
|
||
<option>Crippler</option>
|
||
<option>Killer</option>
|
||
<option>Probe</option>
|
||
<option>Scramble</option>
|
||
<option>Tar Baby</option>
|
||
<option>Blaster</option>
|
||
<option>Ripper</option>
|
||
<option>Sparky</option>
|
||
<option>Tar pit</option>
|
||
<option>Black Ic</option>
|
||
<option>Data Bomb</option>
|
||
<option>Pavlov</option>
|
||
<option>Scout</option>
|
||
<option>Trace</option>
|
||
<option>Cerebropathic</option>
|
||
<option>Psychotropic</option>
|
||
</select></div>
|
||
<div><select name="attr_matrix-iconstatus" class="mediumselect2">
|
||
<option SELECTED>Intruder</option>
|
||
<option>Legitimate</option>
|
||
</select></div>
|
||
<div><select name="attr_ictargettest" class="mediumselect2">
|
||
<option value="@{target|decker|deck-bod-final}">Bod</option>
|
||
<option value="@{target|decker|deck-evasion-final}">Evasion</option>
|
||
<option value="@{target|decker|deck-sensors-final}">Sensor</option>
|
||
<option value="@{target|decker|deck-masking-final}">Masking</option>
|
||
<option value="@{target|decker|deck-detection-final}">DetectionFactor</option>
|
||
<option>Attack</option>
|
||
<option value="@{target|decker|computer}">Computer Skill</option>
|
||
<option value="?{Utility Rating?|4}">Utility TN</option>
|
||
<option value="@{target|decker|deck-mpcp-final}">MPCP</option>
|
||
</select></div>
|
||
<div><button type="action" class="d6-button" name="act_combat" title="Sensor Test" id="icsensortest">L</button></div>
|
||
<div><button type="action" class="d6-button" name="act_combat" title="Evade Detection" id="icevade">L</button></div>
|
||
<div><button type="action" class="d6-button" name="act_combat" title="Parry Attack" id="icparry">L</button></div>
|
||
<div><button type="action" class="d6-button" name="act_combat" title="Position Attack" id="icposition">L</button></div>
|
||
<div><button type="action" class="d6-button" name="act_combat" title="IC Execute" id="icattack">L</button></div>
|
||
<div><button type="action" class="pictos3-button" name="act_combat" title="IC Resist" id="icresist">b</button></div>
|
||
<div><textarea name="attr_icnotes" style='width:275px;height:25px;'></textarea>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<br>
|
||
|
||
|
||
|
||
<div class="matrixrapid">
|
||
Rapid Settings System Rating<input type="text" name="attr_matrixsystemset"><button class="quicksettings"
|
||
type="action" name="act_matrixsystemset">Apply</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="vehicles">
|
||
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab'>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="vehicle-only">
|
||
<div class="vehicle-buttons">
|
||
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' />
|
||
<button class="vehicle-attr-button" type="action" name="act_vehicle-attr-tab">Vehicle
|
||
Attributes</button>
|
||
<button class="vehicle-combat-button" type="action" name="act_vehicle-combat-tab">Vehicle
|
||
Combat</button>
|
||
<button class="vehicle-notes-button" type="action" name="act_vehicle-notes-tab">Vehicle Notes</button>
|
||
<button class="vehicle-ecm-button" type="action" name="act_vehicle-ecm-tab">ECM/FLUX</button>
|
||
</div>
|
||
</div>
|
||
<div class="drone-only">
|
||
<div class="vehicle-buttons">
|
||
<input type='hidden' class='sheet-tabstoggle' name='attr_sheetTab' />
|
||
<button class="vehicle-attr-button" type="action" name="act_vehicle-attr-tab">Drone Attributes</button>
|
||
<button class="vehicle-combat-button" type="action" name="act_vehicle-combat-tab">Drone Combat</button>
|
||
<button class="vehicle-notes-button" type="action" name="act_vehicle-notes-tab">Drone Notes</button>
|
||
<button class="vehicle-ecm-button" type="action" name="act_vehicle-ecm-tab">ECM/FLUX</button>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-always-displayed">
|
||
<div>
|
||
<div class="vehicle-combat-modifiers">
|
||
<div class="vehicle-interface">
|
||
<header class="table-close-nc">Interface</header>
|
||
<div>
|
||
<div class="vehicle-interface-details">
|
||
<div>None</div>
|
||
<div> <input type="radio" name="attr_vehicle-interface" value="none" checked="checked">
|
||
</div>
|
||
<div>Datajack</div>
|
||
<div><input type="radio" name="attr_vehicle-interface" value="datajack"></div>
|
||
<div>VCR</div>
|
||
<div><input type="radio" name="attr_vehicle-interface" value="vcr"></div>
|
||
<div>Autonav</div>
|
||
<div><input type="checkbox" name="attr_vehicle-autonav" value=1></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-speed">
|
||
<header class="table-close-nc">Speed</header>
|
||
<div>
|
||
<div class="vehicle-speed-details">
|
||
<div>Current</div>
|
||
<div>Maximum</div>
|
||
<div><input type="number" name="attr_speed-current" value=0 min=0></div>
|
||
<div><span name="attr_speed-max"></span></div>
|
||
</div>
|
||
<br>
|
||
<br>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-maneuever">
|
||
<header class="table-close-nc">Maneuever</header>
|
||
<div>
|
||
<div class="vehicle-maneuever-details">
|
||
<div>Score</div>
|
||
<div><input type="number" name="attr_maneuver-score" value=0 min=0></div>
|
||
<div><button class="small-rollbutton" id="generate" title="Generate Maneuver Score"
|
||
type="action" name="act_maneuever">Generate</button></div>
|
||
<div><button class="small-rollbutton" id="compare"
|
||
title="Compare Maneuver Score between two vehicles" type="action"
|
||
name="act_maneuever">Compare</button></div>
|
||
</div>
|
||
<br>
|
||
<br>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-env">
|
||
<header class="table-close-nc">Terrain</header>
|
||
<div>
|
||
<div class="vehicle-env-details">
|
||
<div>Off Road:</div>
|
||
<div><input type="checkbox" name="attr_vehicle-offroad" value=1></div>
|
||
</div>
|
||
<div>
|
||
<div>Terrain</div>
|
||
<select name="attr_terrain" class="mediumselect2">
|
||
<option SELECTED>Normal</option>
|
||
<option>Open</option>
|
||
<option>Restricted</option>
|
||
<option>Tight</option>
|
||
</select>
|
||
</div>
|
||
<br>
|
||
<br>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-env">
|
||
<header class="table-close-nc"->Environment</header>
|
||
<div>
|
||
<div class="vehicle-env-details table-close-nc">
|
||
<div>Urban Setting:</div>
|
||
<div><input type="checkbox" name="attr_vehicle-urban" value=1></div>
|
||
<div>Combat Zone:</div>
|
||
<div><input type="checkbox" name="attr_vehicle-combatzone" value=1></div>
|
||
</div>
|
||
<div class="vehicle-env-details2">
|
||
<div>Weather</div>
|
||
<select name="attr_weather" class="mediumselect2">
|
||
<option SELECTED>Normal</option>
|
||
<option>Bad</option>
|
||
<option>Terrible</option>
|
||
<option>Fog</option>
|
||
<option>Smog</option>
|
||
<option>Rain</option>
|
||
<option>Snow</option>
|
||
<option>ThunderStorm</option>
|
||
<option>Windy</option>
|
||
<option>Heavy Wind</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-sensor">
|
||
<header class="table-close-nc">Sensor LOS</header>
|
||
<div class="vehicle-sensor-details table-close-nc">
|
||
<div>Direct</div>
|
||
<div><input type="radio" name="attr_sensor-los" value="direct" checked="checked"></div>
|
||
<div>Interupted</div>
|
||
<div><input type="radio" name="attr_sensor-los" value="interupted"></div>
|
||
</div>
|
||
<div class="table-close-nc">Sensor Test</div>
|
||
<div><button type="action" class="pictos-button" title="Sensor Test" name="act_vehiclesensor" id="vehiclesensor">f</button></div>
|
||
</div>
|
||
</div>
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="vehicle-combat-condition">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH4 vehicle-only">Vehicle</div>
|
||
<div class="SRH4 drone-only">Drone</div>
|
||
<div>Undamaged</div>
|
||
<div>Light Damage</div>
|
||
<div>Moderate Damage</div>
|
||
<div>Serious Damage</div>
|
||
<div>Destroyed</div>
|
||
<div>Condition</div>
|
||
<div>
|
||
<input type="radio" name="attr_vehicle-damage" value=0 CHECKED>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_vehicle-damage" value=1>
|
||
<input type="radio" name="attr_vehicle-damage" value=2>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_vehicle-damage" value=3>
|
||
<input type="radio" name="attr_vehicle-damage" value=4>
|
||
<input type="radio" name="attr_vehicle-damage" value=5>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_vehicle-damage" value=6>
|
||
<input type="radio" name="attr_vehicle-damage" value=7>
|
||
<input type="radio" name="attr_vehicle-damage" value=8>
|
||
<input type="radio" name="attr_vehicle-damage" value=9>
|
||
</div>
|
||
<div><input type="radio" name="attr_vehicle-damage" value=100></div>
|
||
</div>
|
||
|
||
<div class="rc-condition">
|
||
<div class="rc-combat-condition">
|
||
<div class="SRH4">RC Signal</div>
|
||
<div>Full Strength</div>
|
||
<div>Light Degredation</div>
|
||
<div>Moderate Degredation</div>
|
||
<div>Serious Degredation</div>
|
||
<div>Disengaged</div>
|
||
<div class="text-mid-right">Command Channel</div>
|
||
<div>
|
||
<input type="radio" name="attr_rccommand-damage" value=0 CHECKED>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rccommand-damage" value=1>
|
||
<input type="radio" name="attr_rccommand-damage" value=2>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rccommand-damage" value=3>
|
||
<input type="radio" name="attr_rccommand-damage" value=4>
|
||
<input type="radio" name="attr_rccommand-damage" value=5>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rccommand-damage" value=6>
|
||
<input type="radio" name="attr_rccommand-damage" value=7>
|
||
<input type="radio" name="attr_rccommand-damage" value=8>
|
||
<input type="radio" name="attr_rccommand-damage" value=9>
|
||
</div>
|
||
<div><input type="radio" name="attr_rccommand-damage" value=100></div>
|
||
|
||
<div class="text-mid-right">Simsense Channel</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=0 CHECKED>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=1>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=2>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=3>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=4>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=5>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=6>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=7>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=8>
|
||
<input type="radio" name="attr_rcsimsense-damage" value=9>
|
||
</div>
|
||
<div><input type="radio" name="attr_rcsimsense-damage" value=100></div>
|
||
|
||
<div class="text-mid-right">System Channel</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsystem-damage" value=0 CHECKED>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsystem-damage" value=1>
|
||
<input type="radio" name="attr_rcsystem-damage" value=2>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsystem-damage" value=3>
|
||
<input type="radio" name="attr_rcsystem-damage" value=4>
|
||
<input type="radio" name="attr_rcsystem-damage" value=5>
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_rcsystem-damage" value=6>
|
||
<input type="radio" name="attr_rcsystem-damage" value=7>
|
||
<input type="radio" name="attr_rcsystem-damage" value=8>
|
||
<input type="radio" name="attr_rcsystem-damage" value=9>
|
||
</div>
|
||
<div><input type="radio" name="attr_rcsystem-damage" value=100></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-quickstats-border">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="vehicle-driver">
|
||
<header>Driver: </header>
|
||
<input type="text" name="attr_rigger" class="myweapontxt" />
|
||
</div>
|
||
<div class="vehicle-quickstats">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div></div>
|
||
<div>Max</div>
|
||
<div>Used</div>
|
||
<div>Control Pool:</div>
|
||
<input type="number" name="attr_control-pool" min=0 value=0>
|
||
<div><input type='hidden' class='controlpool-over' name='attr_controlpool-over' /><span class="controlpool-over" name="attr_controlpool-used"></span></div>
|
||
</div>
|
||
<br>
|
||
<div class="table-top-nc"><b>Skills</div>
|
||
<div class="vehicle-quickstats">
|
||
<div>Vehicle:</div>
|
||
<input type="number" name="attr_vehicle-skill" min=0 value=0>
|
||
<div></div>
|
||
<div>Gunnery:</div>
|
||
<input type="number" name="attr_gunnery" min=0 value=0>
|
||
<div></div>
|
||
<div class="drone-only">Pilot Rating:</div>
|
||
<div class="drone-only"><span name="attr_pilot" /></div>
|
||
<div></div>
|
||
</div>
|
||
<br>
|
||
<div class="table-top-nc drone-only"><b>Operative Mode:</div>
|
||
<div class="vehicle-quickstats">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="drone-only">Primary:</div>
|
||
<div class="drone-only"></div>
|
||
<div class="drone-only"><input type="radio" name="attr_drone_mode" value="primary"></div>
|
||
<div class="drone-only">Secondary:</div>
|
||
<div class="drone-only"></div>
|
||
<div class="drone-only"><input type="radio" name="attr_drone_mode" value="secondary"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="vehicle-attr-tab">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH4 vehicle-only">Vehicle Configuration</div>
|
||
<div class="SRH4 drone-only">Drone Configuration</div>
|
||
<div class="vehicle-info">
|
||
<div class="text-mid-left">Name</div>
|
||
<div>Manual Control</div>
|
||
<div>Datajack Port</div>
|
||
<div>Rigger Adaption</div>
|
||
<div>Remote Control</div>
|
||
<div class="text-mid">Vehicle Type </div>
|
||
<div class="text-mid">Vehicle Size </div>
|
||
<input type="text" name="attr_character_name">
|
||
<div><input type="checkbox" name="attr_vehicle-control" value=0></div>
|
||
<div><input type="checkbox" name="attr_vehicle-datajack" value=0></div>
|
||
<div><input type="checkbox" name="attr_vehicle-riggeradapted" value=0></div>
|
||
<div><input type="checkbox" name="attr_vehicle-rc" value=0></div>
|
||
<select name="attr_vehicle-type" class="mediumselect2">
|
||
<option SELECTED>Car/Pickup Truck</option>
|
||
<option>Fighter Jet</option>
|
||
<option>Heavy Truck</option>
|
||
<option>Helicopter</option>
|
||
<option>Hovercraft</option>
|
||
<option>HSCT/Suborbital</option>
|
||
<option>Large Airplane</option>
|
||
<option>LAV/T-bird</option>
|
||
<option>Limousine/Light Truck/Van</option>
|
||
<option>LTA/Zeppelin</option>
|
||
<option>Motorcycle</option>
|
||
<option>Racing Boat</option>
|
||
<option>Semiballistic</option>
|
||
<option>Small Airplane</option>
|
||
<option>Small Motorboat</option>
|
||
<option>Sports Car</option>
|
||
<option>Tracked Vehicle</option>
|
||
<option>Tractor Trailer</option>
|
||
<option>Train/Monorail</option>
|
||
<option>Ultra-light Aircraft</option>
|
||
<option>Yacht</option>
|
||
</select>
|
||
<select name="attr_vehicle-size" class="mediumselect2">
|
||
<option SELECTED>Normal</option>
|
||
<option>Large</option>
|
||
<option>Extra-Large</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="vehicle-stats">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH4 vehicle-only">Vehicle Attributes</div>
|
||
<div class="SRH4 drone-only">Drone Attributes</div>
|
||
<div class="vehicle-stats-regular">
|
||
<div class="vehicle-attributes">
|
||
<div>Handling:</div>
|
||
<div class="vehicle-offroad"><input type="number" name="attr_handling-street" min=0 value=0 />
|
||
<input type="number" name="attr_handling-offroad" min=0 value=0 />
|
||
</div>
|
||
<div>Speed:</div>
|
||
<div class="vehicle-offroad">
|
||
<input type="number" name="attr_speed-rating" min=0 value=0>
|
||
<span name="attr_speed-max"></span>
|
||
</div>
|
||
<div>Acceleration:</div>
|
||
<input type="number" name="attr_acceleration" min=0 value=0>
|
||
<div>Body:</div>
|
||
<input type="number" name="attr_body" min=0 value=0>
|
||
<div>Armor:</div>
|
||
<input type="number" name="attr_armor" min=0 value=0>
|
||
<div>Signature:</div>
|
||
<input type="number" name="attr_signature" min=0 value=0>
|
||
<div>Autonav:</div>
|
||
<input type="number" name="attr_autonav" min=0 value=0>
|
||
<div>Pilot:</div>
|
||
<input type="number" name="attr_pilot" min=0 value=0>
|
||
</div>
|
||
<div class="vehicle-config">
|
||
<div>Firmpoints:</div>
|
||
<input type="number" name="attr_firmpoints" min=0 value=0>
|
||
<div>Hardpoints:</div>
|
||
<input type="number" name="attr_hardpoints" min=0 value=0>
|
||
<div>Seating:</div>
|
||
<div><input type="text" name="attr_seating"></div>
|
||
<div>Entry Points:</div>
|
||
<div><input type="text" name="attr_entry"></div>
|
||
<div>Fuel:</div>
|
||
<input type="text" name="attr_fuel">
|
||
<div>Economy:</div>
|
||
<input type="text" name="attr_economy">
|
||
<div>Cargo:</div>
|
||
<input type="number" name="attr_cargo" min=0 value=0>
|
||
<div>Load:</div>
|
||
<input type="number" name="attr_load" min=0 value=0>
|
||
</div>
|
||
<div class="vehicle-misc">
|
||
<div>Vehicle Skill:</div>
|
||
<input type="number" name="attr_vehicle-skill" min=0 value=0>
|
||
<div>Gunnery:</div>
|
||
<input type="number" name="attr_gunnery" min=0 value=0>
|
||
<div>Walk:</div>
|
||
<div><span name="attr_walk"></span></div>
|
||
<div>Run:</div>
|
||
<div><span name="attr_run"></span></div>
|
||
<div>IVIS Pool;</div>
|
||
<input type="number" name="attr_ivis-pool" min=0 value=0>
|
||
<div>Stress:</div>
|
||
<input type="number" name="attr_stress" min=0 value=0>
|
||
<div>Setup/Breakdown:</div>
|
||
<input type="number" name="attr_setup" min=0 value=0>
|
||
<div>Total Cost:</div>
|
||
<input type="number" name="attr_totalcost" min=0 value=0>
|
||
</div>
|
||
</div>
|
||
<div class="SRH4">Rapid Attribute Set: <input type="text" name="attr_vehicle-rapid-attributes"><button class="quicksettings" type="action" name="act_vehicleset">Apply</button></div>
|
||
</div>
|
||
</div>
|
||
<div class="vehicle-notes-tab">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH3 vehicle-only">Vehicle Notes</div>
|
||
<div class="SRH3 drone-only">Drone Notes</div>
|
||
<textarea name="attr_vehicle-notes" style='width:500px;height:200px'>Modification Notes</textarea>
|
||
</div>
|
||
|
||
<div class="vehicle-ecm-tab">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH3 vehicle-only">Vehicle Electornics and ECM/ECCM</div>
|
||
<div class="SRH3 drone-only">Drone Electornics and ECM/ECCM</div>
|
||
<div class="vehicle-flux">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
|
||
|
||
<div class="SRH4 vehicle-only">Vehicle Flux Rating</div>
|
||
<div class="SRH4 drone-only">Drone Flux Rating</div>
|
||
<span name="attr_vehicle-flux-max"></span>
|
||
<div class="SRH4 vehicle-only">Vehicle Flux Used</div>
|
||
<div class="SRH4 drone-only">Drone Flux Used</div>
|
||
<div><input type='hidden' class='vehicle-flux-overload' name='attr_vehicle-flux-overload' value=0 />
|
||
<span class="flux-overload" name="attr_vehicle-fluxtotal"></span>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="vehicle-electronics">
|
||
<div class="table-top-left"></div>
|
||
<div class="table-top-mid"><b>Rating</div>
|
||
<div class="table-top-mid"><b>Flux Rating</div>
|
||
<div class="table-top-mid"><b>Modified Flux</div>
|
||
<div class="table-top-mid"><b>Max Flux</div>
|
||
<div class="table-top-mid"><b>Roll Test</div>
|
||
<div class="table-top-right"><b>Opposition Test</div>
|
||
<div class="table-item-left">Sensors:</div>
|
||
<div class="table-item"><input type="number" name="attr_sensors-rating" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_sensors-flux"></div>
|
||
<div class="table-item"><input type="number" name="attr_sensors-fluxmod" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_sensors-fluxmax"></div>
|
||
<div class="table-item"><button type="action" class="pictos-button" title="Sensor Test" name="act_vehiclesensor" id="vehiclesensor">f</button></div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item-left">Sonar:</div>
|
||
<div class="table-item"><input type="number" name="attr_sonar-rating" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_sonar-flux"></div>
|
||
<div class="table-item"><input type="number" name="attr_sonar-fluxmod" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_sonar-fluxmax"></div>
|
||
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="Sonar Test"
|
||
value="&{template:vehicle} {{type=Sonar Test}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{sonar-rating}]]d6>[[{2,( @{target|Target|signature} +@{wp-vehicle} +@{sensor-test-los} +@{sensor-test-weather} +@{sensor-test-terrain} +@{vehicle-urban} +?{Additional Modifiers|0})}kh1]]!!]] }}"></button>
|
||
</div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item-left">ECM:</div>
|
||
<div class="table-item"><input type="number" name="attr_ecm-rating" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_ecm-flux"></div>
|
||
<div class="table-item"><input type="number" name="attr_ecm-fluxmod" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_ecm-fluxmax"></div>
|
||
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="ECM Jamming"
|
||
value="&{template:vehicle} {{type=ECM Jamming}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{ecm-fluxmod}]]d6>[[{2,(@{target|Target|sensors-rating} +?{Additional Modifiers|0})}kh1]]!!]] }} {{notes=Roll Oposition test for @{target|Target|token_name}}}"></button>
|
||
</div>
|
||
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="ECM Opposition Test"
|
||
value="&{template:vehicle} {{type=ECM Opposition Test}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{sensors-fluxmod}]]d6>[[{2,(@{target|Target|ecm-rating} +?{Additional Modifiers|0})}kh1]]!!]] }} {{notes= Compare net successes with @{target|Target|token_name}}}"></button>
|
||
</div>
|
||
<div class="table-item-left">ECCM:</div>
|
||
<div class="table-item"><input type="number" name="attr_eccm-rating" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_eccm-flux"></div>
|
||
<div class="table-item"><input type="number" name="attr_eccm-fluxmod" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_eccm-fluxmax"></div>
|
||
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="ECCM Counter-Jamming"
|
||
value="&{template:vehicle} {{type=ECCM Counter-Jamming}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{eccm-fluxmod}]]d6>[[{2,(@{target|Target|ecm-rating} +?{Additional Modifiers|0})}kh1]]!!]] }} {{notes=Roll Oposition test for @{target|Target|token_name}}}"></button>
|
||
</div>
|
||
<div class="table-item"><button type="roll" class="d6-dice" name="roll_skill" title="ECCM Opposition Test"
|
||
value="&{template:vehicle} {{type=ECCM Opposition Test}} {{character=@{character_name}}} {{target=@{target|Target|token_name}}} {{roll=[[ [[@{ecm-fluxmod}]]d6>[[{2,(@{target|Target|eccm-rating} +?{Additional Modifiers|0})}kh1]]!!]] }} {{notes= Compare net successes with @{target|Target|token_name}}}"></button>
|
||
</div>
|
||
<div class="table-item-left">ED:</div>
|
||
<div class="table-item"><input type="number" name="attr_ed-rating" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_ed-flux"></div>
|
||
<div class="table-item"><input type="number" name="attr_ed-fluxmod" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_ed-fluxmax"></div>
|
||
<div class="table-item"><b>Activate</div>
|
||
<div class="table-item"></div>
|
||
<div class="table-item-left">ECD:</div>
|
||
<div class="table-item"><input type="number" name="attr_ecd-rating" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_ecd-flux"></div>
|
||
<div class="table-item"><input type="number" name="attr_ecd-fluxmod" min=0 value=0></div>
|
||
<div class="table-item"><span name="attr_ecd-fluxmax"></div>
|
||
<div class="table-item"><input type="checkbox" name="attr_ecd-enabled" value=1></div>
|
||
<div class="table-item"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="vehicle-combat-tab">
|
||
<div class="vehicle-stats-mini">
|
||
<div class="text-mid">Initiative:</div>
|
||
<div class="center-checkbox"><button type="action" name="act_init" class="d6-button" title="Vehicle Initiative" id="vehicleinit">L</button></div>
|
||
<div class="text-mid">End Turn:</div>
|
||
<div class="center-checkbox"><button type="action" name="act_endturn" class="d6-button" title="End Combat Turn" id="endturn">L</button></div>
|
||
<div class="text-mid">Hand</div>
|
||
<div class="text-mid"><span name="attr_handling"></span><button type="action" class="d6-button" title="Driving Test" name="act_vehicledriving" id="driving">L</button></div>
|
||
<div class="text-mid">Accel:</div>
|
||
<div class="text-mid"><span name="attr_acceleration"></span>
|
||
<button type="action" class="d6-button" title="Vehicle Acceleration Test" name="act_vehicleaction" id="accelerating">L</button></div>
|
||
<div class="text-mid">Body:</div>
|
||
<div class="text-mid"><span name="attr_body"></span><button type="action" class="d6-button" title="Resist Damage" name="act_resistvehicledmg" id="resistvehicledmg">L</button></div>
|
||
<div class="text-mid">Armor:</div>
|
||
<div class="text-mid"><span name="attr_armor"></span></div>
|
||
<div class="text-mid">Sig:</div>
|
||
<div class="text-mid"><span name="attr_signature"></span></div>
|
||
<div class="text-mid">Auto:</div>
|
||
<div class="text-mid"><span name="attr_autonav"></span></div>
|
||
<div class="text-mid">Sensor:</div>
|
||
<div class="text-mid"><span name="attr_sensors-rating"></span><button type="action" class="pictos-button" title="Sensor Test" name="act_vehiclesensor" id="vehiclesensor">f</button></div>
|
||
</div>
|
||
|
||
<div class="vehicle-actions">
|
||
<input type='hidden' class='buttontoggle' name='attr_sheettype' />
|
||
<div class="SRH3 vehicle-only">Vehicle Actions</div>
|
||
<div class="SRH3 drone-only">Drone Actions</div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Acceleration Test" name="act_vehicleaction" id="accelerating">Accelerate</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Breaking Test" name="act_vehicleaction"
|
||
id="breaking">Brake</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Positioning Test"
|
||
name="act_vehicleposition" id="breaking">Position</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Ramming Test" name="act_vehicleaction"
|
||
id="ram">Ram</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Hiding Test" name="act_vehicleaction"
|
||
id="hide">Hide</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Relocate Test" name="act_vehicleaction"
|
||
id="relocate">Relocate</button></div>
|
||
<div><button type="action" class="basic-button" title="Vehicle Crash Test" name="act_vehiclecrash"
|
||
id="crash">Crash</button></div>
|
||
</div>
|
||
|
||
|
||
<input type='hidden' class='gunnery-switch' name='attr_gunneryswitch' value="show" />
|
||
<div class="vehicle-manual-gunnery">
|
||
<div class="table-top-left">Relative Motion</div>
|
||
<div class="table-top-mid">Movement</div>
|
||
<div class="table-top-mid">Maneuver Score</div>
|
||
<div class="table-top-mid">Visibility</div>
|
||
<div class="table-top-mid">Sensor Mode</div>
|
||
<div class="table-top-mid">Target Type</div>
|
||
<div class="table-top-mid">Manual TN</div>
|
||
<div class="table-top-mid">Sensor TN</div>
|
||
<div class="table-top-right">Recoil</div>
|
||
<div class="table-item-left"><select name="attr_gunnerymotion" class="mediumselect2" title="motion relative to target">
|
||
<option value=0 selected>None</option>
|
||
<option value=-1>Towards</option>
|
||
<option value=1>Away</option>
|
||
</select></div>
|
||
<div class="table-item"><select name="attr_move" class="mediumselect2" title="relative movement target">
|
||
<option value=0 selected>About Equal</option>
|
||
<option value=2>Up to 2X</option>
|
||
<option value=4>Up to 3X</option>
|
||
<option value=6>More than 3X</option>
|
||
<option value=0>Not Moving</option>
|
||
<option value=1>walk</option>
|
||
<option value=2>walk (difficult ground)</option>
|
||
<option value=4>run</option>
|
||
<option value=6>run (difficult ground)</option>s
|
||
</select></div>
|
||
<div class="table-item"><select name="attr_gunnerymaneuver" class="mediumselect2" title="Maneuver score difference">
|
||
<option value=0 selected>None</option>
|
||
<option value=-1>Attacker Greaty by 10</option>
|
||
<option value=1>Target Greater by 10</option>
|
||
</select></div>
|
||
<div class="table-item"><select name="attr_visibility" class="mediumselect2">
|
||
<option value=0 selected>Normal</option>
|
||
<option value="@{fulldark}">Full Dark</option>
|
||
<option value="@{partiallight}">Partail Light</option>
|
||
<option value="@{minlight}">Minimal Light</option>
|
||
<option value="@{glare}">Glare</option>
|
||
<option value="@{mist}">Mist</option>
|
||
<option value="@{lightsmoke}">Light Smoke/Rain</option>
|
||
<option value="@{fullsmoke}">Heavy Smoke/Rain</option>
|
||
<option value="@{thermalsmoke}">Thermal Smoke</option>
|
||
</select> </div>
|
||
<div class="table-item"><select name="attr_visionenhancement" class="mediumselect2">
|
||
<option>None</option>
|
||
<option selected>LowLight</option>
|
||
<option>Thermal</option>
|
||
</select></div>
|
||
<input type='hidden' name='attr_gunnermount' value=0" />
|
||
<div class="table-item"><select name="attr_gunnerytargettype" class="mediumselect2" title="Target type/size">
|
||
<option value=0 selected>Metahuman sized</option>
|
||
<option value=1>Small critter</option>
|
||
<option value=-1>Large critter</option>
|
||
<option value=1>Small drone</option>
|
||
<option value=0>Motorcyle</option>
|
||
<option value=-1>Automobile</option>
|
||
<option value=-1>Limo/Light Truck</option>
|
||
<option value=-3>Heavy Truck/Trailer</option>
|
||
<option value=-1>Boat</option>
|
||
<option value=-3>Yacht</option>
|
||
<option value=-8>Freighter/Tanker</option>
|
||
<option value=0>Ultralight glider</option>
|
||
<option value=-2>Fixed Wing</option>
|
||
<option value=-6>Commerical Airliner</option>
|
||
<option value=-2>Helicopter</option>
|
||
<option value=-6>Zepplin/Blimp</option>
|
||
<option value=-3>LAV</option>
|
||
<option value=-3>Military Ground Vehicle</option>
|
||
</select></div>
|
||
<div class="table-item"><span class="text-mid" name="attr_rangedTN"></div>
|
||
<div class="table-item"><span class="text-mid" name="attr_sensor-gunnery-tn"></div>
|
||
<div class="table-item"><span class="text-mid" name="attr_recoilpen"></div>
|
||
</div>
|
||
|
||
|
||
<div class="SRH3">Vehicle Weapons</div>
|
||
<div class="vehicles-weapons">
|
||
<div class="ranged-table-headers">
|
||
<div class="table-top-left">Equip</div>
|
||
<div class="table-top-mid">General</div>
|
||
<div class="table-top-mid">Range</div>
|
||
<div class="table-top-mid">Fire Mode</div>
|
||
<div class="table-top-mid">Damage</div>
|
||
<div class="table-top-mid">Ammunition</div>
|
||
<div class="table-top-right">Show</div>
|
||
</div>
|
||
<div class="ranged-table-items">
|
||
<div class="table-item-left" title="Primary Hand">Pri</div>
|
||
<div class="table-item" title="Off Hand">Sec</div>
|
||
<div class="table-item">Name</div>
|
||
<div class="table-item">Type</div>
|
||
<div class="table-item">Mount</div>
|
||
<div class="table-item">Min</div>
|
||
<div class="table-item">S</div>
|
||
<div class="table-item">M</div>
|
||
<div class="table-item">L</div>
|
||
<div class="table-item">Ex</div>
|
||
<div class="table-item">SS</div>
|
||
<div class="table-item">SA</div>
|
||
<div class="table-item">BF</div>
|
||
<div class="table-item">FA</div>
|
||
<div class="table-item">Power</div>
|
||
<div class="table-item">Damage</div>
|
||
<div class="table-item">Max</div>
|
||
<div class="table-item">Remain</div>
|
||
<div class="table-item">Manual</div>
|
||
<div class="table-item">Sensor</div>
|
||
<div class="table-item">More</div>
|
||
</div>
|
||
<fieldset class="repeating_rangedweapons">
|
||
<div class="ranged-table-row">
|
||
<div></div>
|
||
<div></div>
|
||
<input type="text" name="attr_name" class="myweapontxt">
|
||
<select name="attr_type" class="mediumselect2">
|
||
<option SELECTED>Other</option>
|
||
<option>Hold-out Pistol</option>
|
||
<option>Light Pistol</option>
|
||
<option>Machine Pistol</option>
|
||
<option>Heavy Pistol</option>
|
||
<option>SMG</option>
|
||
<option>Taser</option>
|
||
<option>Shotgun</option>
|
||
<option>Sporting Rifle</option>
|
||
<option>Sniper Rifle</option>
|
||
<option>Assault Rifle</option>
|
||
<option>Light Machine Gun</option>
|
||
<option>Medium Machine Gun</option>
|
||
<option>Heavy Machine Gun</option>
|
||
<option>Assault Cannon</option>
|
||
<option>Minigun</option>
|
||
<option>Bow</option>
|
||
<option>Light Crossbow</option>
|
||
<option>Medium Crossbow</option>
|
||
<option>Heavy Crossbow</option>
|
||
<option>Sling Shot</option>
|
||
<option>Sling Launcher</option>
|
||
<option>Thrown Knife</option>
|
||
<option>Shuriken</option>
|
||
<option>Caltrops</option>
|
||
<option>Nets</option>
|
||
<option>Bracer</option>
|
||
<option>Gun Cane</option>
|
||
<option>Speargun</option>
|
||
<option>Net Gun</option>
|
||
<option>Laser Pistol</option>
|
||
<option>Laser Rifle</option>
|
||
<option>Laser Sniper</option>
|
||
<option>"Gyrojet (land)</option>
|
||
<option>"Gyrojet (water)</option>
|
||
<option>Flamethrower</option>
|
||
<option>Blowgun</option>
|
||
</select>
|
||
<select name="attr_weaponmont" class="mediumselect2">
|
||
<option SELECTED">Hard</option>
|
||
<option>Firm</option>
|
||
<option>Hard</option>
|
||
<option>Turret</option>
|
||
</select>
|
||
<input type="number" name="attr_min">
|
||
<input type="number" name="attr_short">
|
||
<input type="number" name="attr_medium">
|
||
<input type="number" name="attr_long">
|
||
<input type="number" name="attr_extreme">
|
||
<div class="text-mid"><input type="checkbox" name="attr_firemode" value="ss"/></div>
|
||
<div class="text-mid"><input type="checkbox" name="attr_firemode" value="sa"1 /></div>
|
||
<div class="text-mid"><input type="checkbox" name="attr_firemode" value="bf"/></div>
|
||
<div class="text-mid"><input type="checkbox" name="attr_firemode" value="fa"/></div>
|
||
<input type="number" name="attr_power">
|
||
<select name="attr_damage" class="mediumselect2">
|
||
<option SELECTED>L</option>
|
||
<option>M</option>
|
||
<option>S</option>
|
||
<option>D</option>
|
||
<option>L(stun)</option>
|
||
<option>M(stun)</option>
|
||
<option>S(stun)</option>
|
||
<option>D(stun)</option>
|
||
</select>
|
||
<input type="number" name="attr_ammo" value=0>
|
||
<input type="number" name="attr_ammoremain" value=0>
|
||
<div><button class="attack-dice" type="action" id="vehicleranged" name="act_rangedattack"
|
||
title="Manual Gunnery"></button></div>
|
||
<div><button type="action" id="vehiclesensor" name="act_rangedattack"
|
||
title="Sensor Enhanced Gunnery">f</button></div>
|
||
<div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
|
||
</div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<span class="show-weaponmods">
|
||
<div class="text-mid" title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box"> <b>Skill</div>
|
||
<div class="text-mid" title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
|
||
<div class="text-mid" title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
|
||
<div class="text-mid" title="Gas vents and other recoil accesories"><b>Recoil Comp</div>
|
||
<div><b>Gyro Stabalization</div>
|
||
<div title="accesories that improve to hit number for ranged combat"><b>Targeting Assistance
|
||
</div>
|
||
<div class="text-mid" title="Clip, Belt, Cylinder, Magazine or Action Break"><b>Reload Type
|
||
</div>
|
||
<div class="text-mid" title="number or clips, belts or individual rounds"><b>Reloads</div>
|
||
<div class="text-mid"><b>Ammo Type</div>
|
||
<div class="text-mid"><b>Notes:</div>
|
||
<select name="attr_skill" class="mediumselect3"
|
||
title="choose weapon active skill, use Other if there is no match and put skill level in Specialized box">
|
||
<option SELECTED value="@{gunnery}">Gunnery</option>
|
||
</select>
|
||
<div><input type="number" name="attr_specialized" value=0></div>
|
||
<div><input type="number" name="attr_tnmods" value=0></div>
|
||
<div><input type="number" name="attr_recoilcomp" title="Gas vents and other recoil accesories"
|
||
value=0></div>
|
||
<select class="mediumselect3" name="attr_gyro">
|
||
<option value="0" SELECTED>None</option>
|
||
<option value="5">Regular</option>
|
||
<option value="6">Deluxe</option>
|
||
</select>
|
||
<select class="mediumselect3" name="attr_targeting">
|
||
<option value="0" SELECTED>None</option>
|
||
<option value="-2">Smartlink</option>
|
||
<option value="-1">LaserSight</option>
|
||
<option value="-1">Smart Goggles</option>
|
||
</select>
|
||
<select name="attr_reloadmethod" class="mediumselect3">
|
||
<option>clip</option>
|
||
<option>break</option>
|
||
<option>magazine</option>
|
||
<option>speed loader</option>
|
||
<option>cylinder</option>
|
||
<option>belt</option>
|
||
</select>
|
||
<div><input type="number" name="attr_reloads" value=0></div>
|
||
<select name="attr_ammotype" class="mediumselect3">
|
||
<option value="regular">Regular</option>
|
||
<option value="adps">ADPS</option>
|
||
<option value="explosive">Explosive</option>
|
||
<option value="explosive2">Explosive EX</option>
|
||
<option value="flechette">Flechette</option>
|
||
<option value="gel">Gel</option>
|
||
<option value="tracer">Tracer</option>
|
||
<option value="av">Anti-Vehicl</option>
|
||
<option value="capsule">Capsule</option>
|
||
<option value="glazer">Glazer</option>
|
||
<option value="hic">Hi-C<option>
|
||
<option value="hpoint">Hollow Point</option>
|
||
<option value="incendiary">Incendiary</option>
|
||
<option value="mercury">Mercury</option>
|
||
<option value="tracker">Tracker</option>
|
||
</select>
|
||
textarea name="attr_notes" style='width:150px;height:22px;'></textarea>
|
||
</span>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
<div class="SRH3">Missles/Rockets</div>
|
||
<div class="explosives-table-header">
|
||
<div class="table-top-left">Name</div>
|
||
<div class="table-top-mid">Type</div>
|
||
<div class="table-top-mid">Mount</div>
|
||
<div class="table-top-mid">Min</div>
|
||
<div class="table-top-mid">S</div>
|
||
<div class="table-top-mid">M</div>
|
||
<div class="table-top-mid">L</div>
|
||
<div class="table-top-mid">Ex</div>
|
||
<div class="table-top-mid">Power</div>
|
||
<div class="table-top-mid">Damage</div>
|
||
<div class="table-top-mid">Intel.</div>
|
||
<div class="table-top-mid">Blast</div>
|
||
<div class="table-top-mid">Scatter</div>
|
||
<div class="table-top-mid">Qty.</div>
|
||
<div class="table-top-mid">Manual</div>
|
||
<div class="table-top-mid">Sensor</div>
|
||
<div class="table-top-right">More</div>
|
||
</div>
|
||
<fieldset class="repeating_explosives">
|
||
<div class="explosives-table-row">
|
||
<input type="text" name="attr_name" class="myweapontxt">
|
||
<select name="attr_exptype" class="mediumselect2">
|
||
<option value="Launcher:O">L/O (Launcher Offensive)</option>
|
||
<option value="Launcher:D">L/D (Launcher Defensive)</option>
|
||
<option value="Launcher:C">L/C (Launcher Concussion)</option>
|
||
<option selected value="Other:Other">Other</option>
|
||
</select>
|
||
<select name="attr_weaponmont" class="mediumselect2">
|
||
<option SELECTED">Hardpoint</option>
|
||
<option>Firmpoint</option>
|
||
<option>Turret</option>
|
||
</select>
|
||
<div class="weaponronum"><span name="attr_min" value=0></span></div>
|
||
<div class="weaponronum"><span name="attr_short" value=0></span></div>
|
||
<div class="weaponronum"><span name="attr_medium" value=0></span></div>
|
||
<div class="weaponronum"><span name="attr_long" value=0></span></div>
|
||
<div class="weaponronum"><span name="attr_extreme" value=0></span></div>
|
||
<input type="number" name="attr_power">
|
||
<div>
|
||
<select name="attr_damage" class="mediumselect2">
|
||
<option SELECTED>L</option>
|
||
<option>M</option>
|
||
<option>S</option>
|
||
<option>D</option>
|
||
<option>L(stun)</option>
|
||
<option>M(stun)</option>
|
||
<option>S(stun)</option>
|
||
<option>D(stun)</option>
|
||
</select>
|
||
</div>
|
||
<input type="number" name="attr_missleint" value=0>
|
||
<input type="number" name="attr_blast" value=0 step=0.05>
|
||
<input type="number" name="attr_scatter" value=1>
|
||
<input type="number" name="attr_ammoremain" value=0>
|
||
<div><button class="explosive-dice" type="action" name="act_rangedattack" id="vehicle-explosive"
|
||
title="Explosives Attack"></button></div>
|
||
<div><button type="action" name="act_rangedattack" id="vehicle-sensorexp"
|
||
title="Sensor Assisted Attack" class="pictos-button">f</button></div>
|
||
<div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<button class="pictos-button" type="action" name="act_showmore" title="Show More">y</button>
|
||
</div>
|
||
<input type="hidden" class="show-weaponmods" name="attr_showmore" value="show">
|
||
<input type="hidden" name="attr_scatterredux">
|
||
<div class="explosive-mods-switch">
|
||
<div>Skill</div>
|
||
<div title="add or remove dice from skill rating. Used for defaulting (minus) or specializing (plus)">+Dice</div>
|
||
<div title="add persistant target number modifiers. Used for defaulting or offseting modifiers based on perks">+TN</div>
|
||
<div>Recoil Comp</div>
|
||
<div>Gyro Stabalization</div>
|
||
<div>Targeting Assistance</div>
|
||
<div>Range Finder</div>
|
||
<div>Notes:</div>
|
||
<select name="attr_skill" class="mediumselect3">
|
||
<option selected value="@{launchers}">Launcher</option>
|
||
<option value="@{demolitions}">Demolition</option>
|
||
</select>
|
||
<div><input type="number" name="attr_specialized" value=0></div>
|
||
<div><input type="number" name="attr_tnmods" value=0></div>
|
||
<div><input type="number" name="attr_recoilcomp" value=0></div>
|
||
<select class="mediumselect3" name="attr_gyro">
|
||
<option value="0" SELECTED>None</option>
|
||
<option value="5">Regular</option>
|
||
<option value="6">Deluxe</option>
|
||
</select>
|
||
<select class="mediumselect3" name="attr_targeting">
|
||
<option value="0" SELECTED>None</option>
|
||
<option value="-2">Smartlink</option>
|
||
<option value="-1">LaserSight</option>
|
||
<option value="-1">Smart Goggles</option>
|
||
</select>
|
||
<div><input name="attr_rangefinder" type="number"></div>
|
||
<textarea name="attr_notes" style='width:210px;height:20px'></textarea>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="table-bottom" />
|
||
</fieldset>
|
||
<br>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="sheet-cyberware">
|
||
<div class="cyberware-lists">
|
||
<div class="SRH2">Cyberware</div>
|
||
<div class="cyberware-list">
|
||
<header class="table-top-left">Name</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Essence</header>
|
||
<header class="table-top-right">Description</header>
|
||
</div>
|
||
<fieldset class="repeating_cyberware">
|
||
<div class="cyberware-list">
|
||
<div class="table-item-left"><input type="text" name="attr_cyberware-name"></div>
|
||
<div class="table-item"><input type="number" name="attr_cyberware-rating"></div>
|
||
<div class="table-item"><input type='number' name='attr_cyberware-essence' step='0.01' value=0></div>
|
||
<div class="table-item"><input type="text" name="attr_cyberware-notes"></div>
|
||
</fieldset>
|
||
<div class="SRH2">Bioware</div>
|
||
<div class="cyberware-list">
|
||
<header class="table-top-left">Name</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Bio Index</header>
|
||
<header class="table-top-right">Description</header>
|
||
</div>
|
||
<fieldset class="repeating_bioware">
|
||
<div class="cyberware-list">
|
||
<div class="table-item-left"><input type="text" name="attr_bioware-name"></div>
|
||
<div class="table-item"><input type="number" name="attr_bioware-rating"></div>
|
||
<div class="table-item"><input type='number' name='attr_bioware-index' step='0.01' value=0></div>
|
||
<div class="table-item"><input type="text" name="attr_bioware-notes"></div>
|
||
</div>
|
||
</fieldset>
|
||
<div class="SRH2">Nanotech</div>
|
||
<div class="cyberware-list">
|
||
<header class="table-top-left">Name</header>
|
||
<header class="table-top-mid">Rating</header>
|
||
<header class="table-top-mid">Essence</header>
|
||
<header class="table-top-right">Description</header>
|
||
</div>
|
||
<fieldset class="repeating_nanotech">
|
||
<div class="cyberware-list">
|
||
<div class="table-item-left"><input type="text" name="attr_nanotech-name"></div>
|
||
<div class="table-item"><input type="number" name="attr_nanotech-rating"></div>
|
||
<div class="table-item"><input type='number' name='attr_nanotech-essence' step='0.01' value=0></div>
|
||
<div class="table-item"><input type="text" name="attr_nanotech-notes"></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sheet-contacts">
|
||
<div class="SRH2">Lifestyle</div>
|
||
|
||
<div>
|
||
<div>
|
||
<div class="SRH3">Contacts</div>
|
||
<div class="contacts">
|
||
<header class="table-top-left">Name</header>
|
||
<header class="table-top-mid">Contact Type</header>
|
||
<header class="table-top-right">Notes Type</header>
|
||
</div>
|
||
<fieldset class="repeating_contacts">
|
||
<div class="contacts">
|
||
<input type="text" name="attr_name">
|
||
<select name="attr_contacttype" class="mediumselect2">
|
||
<option SELECTED>Contact</option>
|
||
<option>Buddy</option>
|
||
<option>Friend for Life</option>
|
||
<option>Followers</option>
|
||
</select>
|
||
<input name="attr_contactdetail" type="text" value="Name Occupation Upkeep">
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div class="SRH3">Lifestyle Class/Gear at Home</div>
|
||
<div class="lifestyles">
|
||
<header class="table-top-left">Lifestyle</header>
|
||
<header class="table-top-mid">Cost</header>
|
||
<header class="table-top-mid">Months Paid</header>
|
||
<header class="table-top-mid">Address</header>
|
||
<header class="table-top-mid">Description</header>
|
||
<header class="table-top-mid">Edges/Flaws</header>
|
||
</div>
|
||
<fieldset class="repeating_lifestyles">
|
||
<div class="lifestyles">
|
||
<input type="text" name="attr_lifestyle">
|
||
<input type="number" name="attr_cost">
|
||
<input type="number" name="attr_monthspaid">
|
||
<input type="text" name="attr_address">
|
||
<input type="text" name="attr_description">
|
||
<input type="text" name="attr_edgesflaws">
|
||
</div>
|
||
</fieldset>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="sheet-spirit">
|
||
</div>
|
||
|
||
<div class="sheet-critter-powers">
|
||
<div class="critter-powers">
|
||
<div>
|
||
<div class="SRH4">Powers</div>
|
||
<div class="critter-powers-table">
|
||
<div class="table-top-left"><b>Power</div>
|
||
<div class="table-top-right"><b>Description</div>
|
||
</div>
|
||
<fieldset class='repeating_critter-powers'>
|
||
<div class="critter-powers-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name" /></div>
|
||
<div class="table-item"><input type="text" name="attr_description" /></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
<div>
|
||
<div class="SRH4">Weakness</div>
|
||
<div class="critter-powers-table">
|
||
<div class="table-top-left"><b>Weakness</div>
|
||
<div class="table-top-right"><b>Description</div>
|
||
</div>
|
||
<fieldset class='repeating_critter-weaknesses'>
|
||
<div class="critter-powers-table">
|
||
<div class="table-item-left"><input type="text" name="attr_name" /></div>
|
||
<div class="table-item"><input type="text" name="attr_description" /></div>
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="popup1" class="overlay">
|
||
<div class="popup">
|
||
<h2>JSON Import</h2>
|
||
<a class="close" href="#">×</a>
|
||
<div class="content">
|
||
<textarea name="attr_jsonnpc" style='width:500px;height:400px;resize:none; overlfow-y: scroll;'></textarea>
|
||
<button type="action" name="act_jsonimport-char" href="#">JSON Import</button>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<script type="text/worker">
|
||
const buttonlist = ["character","skills","magic","decks","gear","combat","rigger", "contacts", "critter-powers", "karma", "cyberware","vehicle-attr-tab", "vehicle-combat-tab", "vehicle-notes-tab", "vehicle-ecm-tab"];
|
||
buttonlist.forEach(button => {
|
||
console.log(button)
|
||
on(`clicked:${button}`, function() {
|
||
setAttrs({ sheetTab: button });
|
||
});
|
||
});
|
||
|
||
</script>
|
||
|
||
<script type="text/worker">
|
||
console.log('loading rangedweapons stats');
|
||
const rangedstats = {
|
||
"Hold-out Pistol": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{pistols}", wfamily: "Firearms"},
|
||
"Bracer": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{bracer}", wfamily: "Special"},
|
||
"Gun Cane": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{guncane}", wfamily: "Special"},
|
||
"Light Pistol": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{pistols}", wfamily: "Firearms"},
|
||
"Machine Pistol": { short: 5, medium: 15, long: 30, extreme: 50, skill: "@{pistols}", wfamily: "Firearms"},
|
||
"Heavy Pistol": { short: 5, medium: 20, long: 40, extreme: 60, skill: "@{pistols}", wfamily: "Firearms"},
|
||
"Laser Pistol": { short: 5, medium: 20, long: 40, extreme: 60, skill: "@{lasers}", wfamily: "Laser"},
|
||
"SMG": { short: 10, medium: 40, long: 80, extreme: 150, skill: "@{smgs}", wfamily: "Firearms"},
|
||
"Speargun": { short: 10, medium: 40, long: 80, extreme: 150, skill: "@{smgs}", wfamily: "Special" },
|
||
"Taser": { short: 5, medium: 10, long: 12, extreme: 15, skill: "@{pistols}", wfamily: "Special"},
|
||
"Shotgun": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{shotguns}", wfamily: "Firearms"},
|
||
"Net Gun": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{shotguns}", wfamily: "Special"},
|
||
"Sporting Rifle": { short: 100, medium: 250, long: 500, extreme: 750, skill: "@{rifles}", wfamily: "Firearms"},
|
||
"Laser Rifle": { short: 100, medium: 250, long: 500, extreme: 750, skill: "@{lasers}", wfamily: "Laser"},
|
||
"Sniper Rifle": { short: 150, medium: 300, long: 700, extreme: 1000, skill: "@{rifles}", wfamily: "Firearms"},
|
||
"Laser Sniper": { short: 150, medium: 300, long: 700, extreme: 1000, skill: "@{lasers}", wfamily: "Laser"},
|
||
"Assault Rifle": { short: 50, medium: 150, long: 350, extreme: 550, skill: "@{assaultrifles}", wfamily: "Firearms"},
|
||
"Light Machine Gun": { short: 75, medium: 200, long: 400, extreme: 800, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Medium Machine Gun": { short: 80, medium: 250, long: 750, extreme: 1200, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Heavy Machine Gun": { short: 80, medium: 250, long: 800, extreme: 1500, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Assault Cannon": { short: 100, medium: 300, long: 900, extreme: 2400, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Minigun": { short: 75, medium: 200, long: 400, extreme: 800, skill: "@{heavyweapons}", wfamily: "Heavy" },
|
||
"Sling Shot": { short: "mystr", medium: "mystr * 2", long:"mystr * 5", extreme: "mystr * 7", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Sling Launcher": { short: "mystr * 3", medium: "mystr * 5", long:"mystr * 20", extreme: "mystr * 30", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Bow": { short: "mystr", medium: "mystr * 10", long:"mystr * 30", extreme: "mystr * 60", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Light Crossbow": { short: "mystr * 2", medium: "mystr * 8", long: "mystr * 20", extreme: "mystr * 40", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Medium Crossbow": { short: "mystr * 3", medium: "mystr * 12" , long: "mystr * 30", extreme: "mystr * 50", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Heavy Crossbow": { short: "mystr * 5", medium: "mystr * 15", long: "mystr * 40", extreme: "mystr * 60", skill: "@{projectiles}", wfamily: "Projectile" },
|
||
"Thrown Knife": { short: "mystr", medium: "mystr * 3", long: "mystr * 5", extreme: "mystr * 7", skill: "@{throwing}", wfamily: "Throwing" },
|
||
"Shuriken": { short: "mystr", medium: "mystr * 2", long: "mystr * 5", extreme: "mystr * 7", skill: "@{throwing}", wfamily: "Throwing" },
|
||
"Caltrops": { short: "mystr * 3", medium: "mystr * 5", long: "mystr * 10", extreme: "mystr * 20", skill: "@{throwing}", wfamily: "Throwing" },
|
||
"Nets": { short: 2, medium: 4, long: 6, extreme: 10, skill: "@{throwing}", wfamily: "Throwing" },
|
||
|
||
"Gyrojet (land)": { short: 5, medium: 20, long: 40, extreme: 60, skill: "@{gyrojet}", wfamily: "Special" },
|
||
"Gyrojet (water)": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{gyrojet}", wfamily: "Special" },
|
||
"Blowgun": { short: 3, medium: 8, long: 12, extreme: 15, skill: "@{blowgun}", wfamily: "Special" },
|
||
"Flamethrower": { short: 10, medium: 20, long: 50, extreme: 100, skill: "@{spray}", wfamily: "Special" },
|
||
"Other": { short: 0, medium: 0, long: 0, extreme: 0, skill: 0, wfamily: "Other" }
|
||
}
|
||
|
||
const rollEscape = {
|
||
chars: {
|
||
'"': '%quot;',
|
||
',': '%comma;',
|
||
':': '%colon;',
|
||
'}': '%rcub;',
|
||
'{': '%lcub;',
|
||
},
|
||
escape(str) {
|
||
str = (typeof(str) === 'object') ? JSON.stringify(str) : (typeof(str) === 'string') ? str : null;
|
||
return (str) ? `${str}`.replace(new RegExp(`[${Object.keys(this.chars)}]`, 'g'), (r) => this.chars[r]) : null;
|
||
},
|
||
unescape(str) {
|
||
str = `${str}`.replace(new RegExp(`(${Object.values(this.chars).join('|')})`, 'g'), (r) => Object.entries(this.chars).find(e=>e[1]===r)[0]);
|
||
return JSON.parse(str);
|
||
}
|
||
};
|
||
|
||
|
||
on("change:repeating_rangedweapons:type", function() {
|
||
console.log('updating range based on weapon type');
|
||
getAttrs(["repeating_rangedweapons_type", "strength_max"], function(myval) {
|
||
var myatts={};
|
||
const mytype=myval["repeating_rangedweapons_type"];
|
||
const mystr=parseInt(myval.strength_max)
|
||
console.log('type: ' + mytype);
|
||
myatts["repeating_rangedweapons_short"]=eval(rangedstats[mytype]["short"]);
|
||
myatts["repeating_rangedweapons_medium"]=eval(rangedstats[mytype]["medium"]);
|
||
myatts["repeating_rangedweapons_long"]=eval(rangedstats[mytype]["long"]);
|
||
myatts["repeating_rangedweapons_extreme"]=eval(rangedstats[mytype]["extreme"]);
|
||
myatts["repeating_rangedweapons_wfamily"]=rangedstats[mytype]["wfamily"];
|
||
myatts["repeating_rangedweapons_skill"]=rangedstats[mytype]["skill"];
|
||
console.log(myatts);
|
||
setAttrs(myatts);
|
||
});
|
||
});
|
||
|
||
const matrixtn={BLUE: {Intruder: 3, Legitimate: 6, secrating: 1}, GREEN: {Intruder: 4, Legitimate: 5, secrating: 2}, ORANGE: {Intruder: 5, Legitimate: 4, secrating: 3}, RED: {Intruder: 6, Legitimate: 3, secrating: 4}};
|
||
const matrixsecnumber={1: "BLUE", 2: "GREEN", 3: "ORANGE",4: "RED"};
|
||
const attributes=[ "body", "quickness", "strength", "charisma", "willpower", "intelligence", "force" ];
|
||
const quicknesslinked=["@{blowgun}", "@{bracer}", "@{guncane}", "@{gyrojet}", "@{eyegun}", "@{oralgun}", "@{oralstrike}", "@{pistols}", "@{smgs}", "@{rifles}", "@{assaultrifles}", "@{lasers}", "@{whips}", "@{stealth}", "@{shotguns}"]
|
||
const damagetable = {
|
||
"N/A": 0,
|
||
"L": 1,
|
||
"M": 2,
|
||
"S": 3,
|
||
"D": 4,
|
||
0: "N/A",
|
||
1: "L",
|
||
2: "M",
|
||
3: "S",
|
||
4: "D",
|
||
"L(stun)": 10,
|
||
"M(stun)": 11,
|
||
"S(stun)": 12,
|
||
"D(stun)": 13,
|
||
10: "L(stun)",
|
||
11: "M(stun)",
|
||
12: "S(stun)",
|
||
13: "D(stun)"
|
||
}
|
||
var getRandomInt = function(min, max) {
|
||
min = Math.ceil(min);
|
||
max = Math.floor(max);
|
||
return Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive
|
||
}
|
||
|
||
on("change:weaponfocus-force", function() {
|
||
atts=[];
|
||
getAttrs(["weaponfocus-force"], function (myval) {
|
||
atts["weaponfocus-show"]="false";
|
||
if ( myval["weaponfocus-force"] > 0 ) atts["weaponfocus-show"]="true";
|
||
setAttrs(atts);
|
||
});
|
||
|
||
});
|
||
|
||
on('clicked:repeating_gear:usegear', (info) => {
|
||
var atts=[];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
atts.push(myrepeat.concat("rating"));
|
||
atts.push(myrepeat.concat("quantity"));
|
||
atts.push(myrepeat.concat("type"));
|
||
atts.push(myrepeat.concat("pool"));
|
||
atts.push(myrepeat.concat("name"));
|
||
getAttrs(atts, function(myval) {
|
||
var sets={};
|
||
let rating=parseInt(myval[myrepeat.concat("rating")]);
|
||
let qty=parseInt(myval[myrepeat.concat("quantity")]);
|
||
let mypool=myval[myrepeat.concat("pool")];
|
||
const poolname = mypool.charAt(0).toUpperCase() + mypool.slice(1);
|
||
const pool=mypool + "pool";
|
||
let myname=myval[myrepeat.concat("name")];
|
||
let mytype=myval[myrepeat.concat("type")];
|
||
calcDice=rating;
|
||
if ( mypool != "none" ) calcDice += " + ?{" + poolname + " Pool Dice?}";
|
||
var myroll="&{template:item} {{item=" + myname +"}}{{myname=@{character_name}}}";
|
||
myroll += "{{targetnumber=[[?{Target Number?|4}]]}}";
|
||
if ( mypool != "none" ) myroll += "{{poolname=" + poolname + " Pool}}{{pooldice=[[?{" + poolname + " Pool Dice?|0}]]}}";
|
||
myroll += "{{rolldice=[[" + calcDice + " ]]}}";
|
||
myroll += "{{result=[[ [[ " + calcDice + " ]]d6>[[?{Target Number?}]]!! ]]}}";
|
||
if ( ( mytype == "onetime" ) && ( qty < 1 ) ) myroll="/w gm &{template:info}{{character=@{character_name}}}{{action=You are out of " + myname + "}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
if ( mypool != "none" ) updatepoolused("taskpool", results.results.pooldice.result);
|
||
if (( mytype == "onetime" ) && ( qty > 0 )) {
|
||
sets[myrepeat.concat("quantity")] = qty -1;
|
||
setAttrs(sets);
|
||
}
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
});
|
||
on('clicked:repeating_credsticks:checkcredstick', (info) => {
|
||
var atts=[];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
atts.push(myrepeat.concat("rating"));
|
||
atts.push(myrepeat.concat("id"));
|
||
getAttrs(atts, function(myval) {
|
||
let rating=parseInt(myval[myrepeat.concat("rating")]);
|
||
let myid=myval[myrepeat.concat("id")];
|
||
var myroll="&{template:item} {{item=" + myid + " credstick}}{{myname=@{character_name}}}{{poolname=Task Pool}}{{targetnumber=[[?{Verification System Rating?|4}]]}}";
|
||
myroll += "{{pooldice=[[?{Task Pool Dice?|0}]]}}{{rolldice=[[" + rating + " + ?{Task Pool Dice?} ]]}}";
|
||
myroll += "{{result=[[ [[ " + rating + " + ?{Task Pool Dice?} ]]d6>[[?{Verification System Rating?}]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("taskpool", results.results.pooldice.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
});
|
||
|
||
on('clicked:repeating_skills:skills', (info) => {
|
||
const attrlist=["skillname", "skillrating", "pool"];
|
||
var atts=["character_name"];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
attrlist.forEach(myatt=>{
|
||
atts.push(myrepeat.concat(myatt));
|
||
});
|
||
getAttrs(atts, function(myval) {
|
||
const skill=myval[myrepeat.concat("skillname")];
|
||
const rating=parseInt(myval[myrepeat.concat("skillrating")]);
|
||
const mypool=myval[myrepeat.concat("pool")];
|
||
const poolname = mypool.charAt(0).toUpperCase() + mypool.slice(1);
|
||
const pool=mypool + "pool";
|
||
console.log('start roll for ' + skill);
|
||
var calcDice= rating;
|
||
if ( mypool != "none" ) calcDice += " + ?{" + poolname + " Pool Dice?}";
|
||
const calcTN="?{What is the Target Number?|4} + @{stun_pen} + @{wound_pen}";
|
||
var myroll="&{template:skill} {{skill=" + skill + "}}{{myname=" + myval["character_name"] + "}}";
|
||
if ( mypool != "none" ) myroll += "{{pooldice=[[?{" + poolname + " Pool Dice?|0}]]}}{{poolname=" + poolname + " Pool}}";
|
||
myroll +="{{targetnumber=[[ " + calcTN + " ]]}}{{rolldice=[[ " + calcDice + " ]]}}";
|
||
myroll += "{{result=[[ [[ " + calcDice + " ]]d6>[[{2,( " + calcTN + " )}kh1]]!!} ]]}}";
|
||
startRoll(myroll, (results) => {
|
||
console.log('R: ' + results);
|
||
if ( mypool != "none" ) updatepoolused(pool, results.results.pooldice.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
});
|
||
on('clicked:skilltest', (info) => {
|
||
var [myskill,mypool]=info["htmlAttributes"]["id"].split(" ");
|
||
var skill = myskill.charAt(0).toUpperCase() + myskill.slice(1);
|
||
var pool = mypool.charAt(0).toUpperCase() + mypool.slice(1);
|
||
console.log('skill: ' + myskill + ' pool: ' + mypool);
|
||
const calcDice="@{" + myskill + "} + ?{" + pool + " Pool Dice?}";
|
||
const calcTN="?{Target Number?|4} + @{stun_pen} + @{wound_pen}";
|
||
var myroll="&{template:skill} {{myname=@{character_name}}}{{skill=" + skill + "}}{{poolname=" + pool + " Pool}}{{pooldice=[[?{" + pool + " Pool Dice?|0}]]}}"
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{result= [[ [[" + calcDice + "]]d6>[[{2,(" + calcTN +")}kh1]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused(mypool.concat("pool"), results.results.pooldice.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
var updatepoolused = function(pool, used) {
|
||
poolused=pool.concat("-used");
|
||
sets={}
|
||
getAttrs([poolused], function (myval) {
|
||
sets[poolused]=used + parseInt(myval[poolused]);
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
}
|
||
|
||
|
||
on('clicked:repeating_defensiveutils:matrixrepeatingtest clicked:repeating_offensiveutils:matrixrepeatingtest clicked:repeating_deck-utilities:matrixrepeatingtest', (info) => {
|
||
var atts=[];
|
||
var source=info['sourceAttribute'].split('_');
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
var action;
|
||
var target;
|
||
var calcTN;
|
||
var calcDice;
|
||
var utiltarget;
|
||
const myutil=myrepeat.concat("utility");
|
||
const myrating=myrepeat.concat("rating-final");
|
||
atts.push(myutil, myrating);
|
||
if ( myid == "matrixrepeatingexec" ) utiltarget=myrepeat.concat("target");
|
||
atts.push(utiltarget);
|
||
if ( myid == "matrixrepeatingexec" ) console.log('utiltarget: ' + utiltarget);
|
||
console.log(atts);
|
||
getAttrs(atts, function(myval) {
|
||
console.log(myval);
|
||
const myutilvalue=myval[myutil];
|
||
const myratingvalue=myval[myrating];
|
||
const myutiltarget=myval[utiltarget];
|
||
if ( myid == "matrixrepeatingattack" ) {
|
||
action = "{{action=" + myutilvalue + " Attack}}";
|
||
target = "{{target=@{target|Target|token_name}}}";
|
||
calcTN="@{deck-tn} + @{wound_pen} + @{stun_pen} +@{matrix-penalty} +?{Miscellaneous Modifiers|0}";
|
||
calcDice="@{decking} + ?{Hacking Pool Dice}";
|
||
} else if ( myid == "matrixrepeatingexec" ) {
|
||
console.log('utiltarget ' + myutiltarget);
|
||
action="{{action=System Operation with " + myutilvalue + " Utility}}";
|
||
target = "{{target=@{target|Target|token_name}}}";
|
||
calcTN= myutiltarget + " + floor(@{target|Target|matrixalert}/2) + @{wound_pen} + @{stun_pen} +@{matrix-penalty} - " + myratingvalue;
|
||
calcDice="@{decking} + ?{Hacking Pool Dice}";
|
||
} else {
|
||
action="{{action=" + myutilvalue + " Test}}";
|
||
target ="{{target=?{Target Number?|4}}}";
|
||
calcTN="?{Target Number?} + @{wound_pen} + @{stun_pen} + @{wp-matrix}";
|
||
calcDice=myratingvalue + " + ?{Hacking Pool Dice}";
|
||
}
|
||
var myroll="&{template:matrix}{{myname=@{character_name}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}";
|
||
myroll+= target + action;
|
||
myroll+="{{utilitylevel=" + myratingvalue + "}}"
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!!]] }}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
|
||
});
|
||
on('clicked:taric', (info) => {
|
||
console.log(info);
|
||
console.log('sup dude');
|
||
});
|
||
|
||
|
||
|
||
on('clicked:mytst1', (info) => {
|
||
console.log(info);
|
||
mytstfunc('sup mo fo');
|
||
});
|
||
|
||
var mytstfunc = function (info) {
|
||
console.log(info);
|
||
|
||
};
|
||
on("change:repeating_intruders:intrudername", function(){
|
||
getAttrs(["repeating_intruders_intrudername"], function (myval) {
|
||
var mydecker="@{";
|
||
mydecker=mydecker.concat(myval["repeating_intruders_intrudername"]);
|
||
mydecker=mydecker.concat("|");
|
||
setAttrs({"repeating_intruders_detecttarget": mydecker});
|
||
});
|
||
});
|
||
|
||
on('clicked:matrixdetect', (info) => {
|
||
sets={};
|
||
console.log(info);
|
||
const myid=info["htmlAttributes"]["id"];
|
||
const mytitle=info["htmlAttributes"]["title"];
|
||
getAttrs(["matrixsecuritytally"], function (myval) {
|
||
var mytally=parseInt(myval["matrixsecuritytally"]);
|
||
if ( myid == "systemdetect" ) {
|
||
var myroll="&{template:matrix}{{target=@{target|Target|token_name}}}{{myname=@{character_name}}}{{action=Detection Roll}}" ;
|
||
myroll+="{{targetnumber=@{target|Target|deck-detection-final}}}";
|
||
myroll+="{{rolldice=[[@{matrixsecurityrating}]]}}";
|
||
myroll+="{{roll=[[@{matrixsecurityrating}d6>[[{2,(@{target|Target|deck-detection-final})}kh1]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
mytally += results.results.roll.result;
|
||
sets["matrixsecuritytally"]=mytally;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
finishRoll( results.rollId);
|
||
});
|
||
} else {
|
||
sets["matrixsecuritytally"]=0;
|
||
setAttrs(sets);
|
||
}
|
||
});
|
||
});
|
||
|
||
on('clicked:repeating_intruders:detect', (info) => {
|
||
sets={};
|
||
console.log(info);
|
||
const myid=info["htmlAttributes"]["id"];
|
||
const mytitle=info["htmlAttributes"]["title"];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
const intruder = myrepeat + "detecttarget"
|
||
const sectally = myrepeat + "securitytally";
|
||
getAttrs([intruder, sectally], function (myval) {
|
||
const mytarget=myval[intruder];
|
||
var mytally=parseInt(myval[sectally]);
|
||
if ( myid == "systemdetect" ) {
|
||
var myroll="&{template:matrix}{{target=@{" + intruder + "}character_name}}}{{myname=@{character_name}}}{{action=Detection Roll}}" ;
|
||
myroll+="{{targetnumber=@{" + intruder + "}deck-detection-final}}}";
|
||
myroll+="{{rolldice=[[@{matrixsecurityrating}]]}}";
|
||
myroll+="{{roll=[[@{matrixsecurityrating}d6>[[{2,(@{" + intruder + "}deck-detection-final})}kh1]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
mytally += results.results.roll.result;
|
||
sets[sectally]=mytally;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
finishRoll( results.rollId);
|
||
});
|
||
} else {
|
||
sets[sectally]=0;
|
||
setAttrs(sets);
|
||
}
|
||
});
|
||
});
|
||
|
||
on('clicked:matrixresist', (info) => {
|
||
var payload, myid;
|
||
if ( info["htmlAttributes"]["id"] != undefined) {
|
||
myid=info["htmlAttributes"]["id"];
|
||
} else if ( info["originalRollId"] != undefined ) {
|
||
payload=rollEscape.unescape(info["originalRollId"]);
|
||
}
|
||
var calcTN;
|
||
var calcDice;
|
||
var myroll="&{template:matrix}";
|
||
console.log(info);
|
||
if ( payload ) {
|
||
console.log(payload);
|
||
power=payload["power"];
|
||
attribute=payload["attribute"];
|
||
attacktype=payload["attacktype"];
|
||
console.log ('power ' + power + ' att ' + attribute + ' attacktype ' + attacktype);
|
||
calcDice="@{" + attribute + "} + ?{Hacking Pool Dice|0}";
|
||
calcTN="?{Power of Attack?|" + power + "}";
|
||
if ( attacktype == "cybercombat" ) calcTN+= " - @{deckarmor-rating-final}";
|
||
} else {
|
||
calcTN="?{Power of Attack?|0} - @{deckarmor-rating-final}";
|
||
calcDice="@{deck-bod-final} + ?{Hacking Pool Dice|0}";
|
||
}
|
||
myroll+="{{action=Damage Resistance Test}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{utilitylevel=Armor Rating @{deckarmor-rating-final}}}";
|
||
myroll+="{{myname=@{character_name}}}{{target=?{Power of Attack?}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}";
|
||
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
const iclist = {
|
||
proactive: ["Crippler", "Ripper", "Killer", "Blaster", "Sparky", "Scout", "Black Ic", "Cerebropathic", "Psychotropic", "Trace"],
|
||
reactive: ["Probe", "Scramble", "Tar Baby", "Tar pit", "Data Bomb", "Pavlov"]
|
||
};
|
||
|
||
on('clicked:matrixattack', (info) => {
|
||
const myid=info["htmlAttributes"]["id"]
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
console.log(info);
|
||
getAttrs(["deck-systemrating"], function (myval) {
|
||
var calcTN="0 + @{wound_pen} + @{stun_pen} + @{matrix-penalty} + ?{Miscellaneous Modifiers|0}";
|
||
const systemrating=myval["deck-systemrating"].toUpperCase();
|
||
var calcDice="@{decking} + ?{Hacking Pool Dice|0}"
|
||
var myaction="{{action=" + mytitle + "}}";
|
||
if (myid == "deckattack") myaction="{{action=Attack @{deckattacklevel}}}"
|
||
var myroll="&{template:matrix}"
|
||
myroll+= myaction;
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}"
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{utilitylevel=[[@{" + myid + "-rating-final}]]}}"
|
||
myroll+="{{senddata=[[0]]}}";
|
||
myroll+="{{iconstatus=[[@{target|Target|iconstatuscode}]]}}";
|
||
if ( systemrating == "UNKNOWN" ) myroll+="{{systemrating=[[@{target|Host|matrixsecuritynumber}]]}}";
|
||
else myroll+="{{systemrating=[[" + matrixtn[systemrating]["secrating"] + "]]}}";
|
||
myroll+="{{myname=@{character_name}}} {{target=@{target|Target|token_name}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}";
|
||
myroll+="{{utilitylevel=@{deckattack-rating-final}}}";
|
||
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
if ( results.results.iconstatus.result == 0) myicon="Legitimate";
|
||
else myicon="Intruder";
|
||
var finaltn=results.results.targetnumber.result
|
||
const mysystem=matrixsecnumber[results.results.systemrating.result];
|
||
const myhosttn=matrixtn[mysystem][myicon];
|
||
finaltn += myhosttn;
|
||
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
let payload= {
|
||
power: results.results.utilitylevel.result,
|
||
attacktype: "cybercombat",
|
||
attribute: "deck-bod-final"
|
||
}
|
||
finishRoll( results.rollId,
|
||
{
|
||
senddata: rollEscape.escape(payload),
|
||
targetnumber: finaltn,
|
||
roll: finaldice,
|
||
});
|
||
});
|
||
});
|
||
});
|
||
on('clicked:matrixmedic', (info) => {
|
||
console.log(info);
|
||
const myid=info["htmlAttributes"]["id"]
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
var calcTN="?{Wound Level?|Light,4|Moderate,5|Serious,6}";
|
||
var calcDice="@{deckmedic-rating-final}"
|
||
var myroll="&{template:matrix}"
|
||
myroll+="{{action=Medic Utility}}"
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}"
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{myname=@{character_name}}}{{target=?{Wound Level?} Damage}}{{hackingpool=Not Available}}"
|
||
myroll+="{{utilitylevel=@{deckmedic-rating-final}}}"
|
||
myroll+="{{roll= [[ [[ " + calcDice + "]]d6>[[ {2,( " + calcTN + ")}kh1 ]]!! ]] }}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
on('clicked:swapmemory clicked:repeating_defensiveutils:swapmemory clicked:repeating_offensiveutils:swapmemory clicked:repeating_deck-utilities:swapmemory', (info) => {
|
||
console.log(info);
|
||
var sets={};
|
||
var atts=[];
|
||
var myatt;
|
||
var myutil;
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
if ( info['sourceAttribute'] ) {
|
||
source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
myatt=myrepeat + "rating";
|
||
|
||
atts.push(myrepeat + "utility");
|
||
} else {
|
||
myutil=myid.split("-")[0];
|
||
myutil=myutil.slice(4);
|
||
myatt=myid;
|
||
}
|
||
atts.push(myatt);
|
||
const myfinal=myatt + "-final";
|
||
console.log(atts);
|
||
getAttrs(atts, function (myval) {
|
||
console.log('myval');
|
||
console.log(myval);
|
||
sets[myfinal]=parseInt(myval[myatt]);
|
||
if ( myutil == null ) myutil=myval[myrepeat + "utility"];
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
myroll="&{template:info}{{character=@{character_name}}}{{action=Swap Memory}}{{type=Simple}}{{info1=Reloading Utility " + myutil + " into Memory}}";
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
});
|
||
|
||
on('clicked:matrixtest', (info) => {
|
||
var atts=[];
|
||
if ( info['sourceAttribute'] ) console.log(' got ' + info['sourceAttribute'] );
|
||
/* var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_'); */
|
||
console.log(info);
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var calcTN="?{Target Number?} + @{wp-matrix}";
|
||
var calcDice="@{" + myid + "} + ?{Hacking Pool Dice}"
|
||
var myroll="&{template:matrix}{{myname=@{character_name}}}{{target=?{Target Number?|4}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}"
|
||
myroll+= "{{action=" + mytitle + "}}{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+= "{{roll= [[ [[ " + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!!]] }}"
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
|
||
});
|
||
|
||
on('clicked:matrixmaneuvers', (info) => {
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var myutil="@{deckcloak-rating-final}";
|
||
var myatt="deck-evasion-final";
|
||
if ( mytitle == "Evade Detection" ) myatt = "deck-sensors-final";
|
||
if ( mytitle == "Parry Attack" ) myutil = "@{decklockon-rating-final}";
|
||
if ( mytitle == "Sensor Test" ) myutil = "@{decklockon-rating-final}";
|
||
var calcTN="@{target|Target|" + myatt + "} + @{wp-matrix} +?{Miscellaneous Modifiers|0} - " + myutil;
|
||
var calcDice="@{decking} + ?{Hacking Pool Dice}"
|
||
var myroll="&{template:matrix}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}{{hackingpool=[[?{Hacking Pool Dice|0}]]}}"
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{action=" + mytitle + "}}"
|
||
myroll+="{{roll= [[ [[" + calcDice + "]]d6>[[ {2,(" + calcTN + ")}kh1]]!! ]] }}"
|
||
myroll+="{{detect=[Detect](~@{target|Target|token_name}|detection)}}"
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("hackingpool", results.results.hackingpool.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
on('clicked:adeptpower', (info) => {
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
const uppermyid=myid.charAt(0).toUpperCase() + myid.slice(1);
|
||
atts=["rbodymod", "rbodymax", "rquickmod", "rquickmax", "rstrmod", "rstrmax", "body", "strength", "quickness", "adeptbodyboost", "adeptquicknessbost", "adeptstrengthboost"];
|
||
getAttrs(atts, function(myval) {
|
||
var drainlvl;
|
||
const myboost=parseInt(myval["adept" + myid + "boost"]) + parseInt(myval[myid]);
|
||
const mymod=myval["r" + myid + "mod"];
|
||
const mymax=myval["r" + myid + "max"];
|
||
const my2x=mymax * 2;
|
||
if (myboost <= mymod) drainlvl="L";
|
||
else if (myboost <= mymax) drainlvl="M";
|
||
else drainlvl="S";
|
||
console.log('boost: ' + myboost);
|
||
console.log('mod: ' + mymod);
|
||
console.log('max: ' + mymax);
|
||
console.log('2x: ' + my2x);
|
||
console.log('Drain: ' + drainlvl);
|
||
|
||
var calcDice="@{magic} + ?{Spell Pool Dice}";
|
||
var calcTN="ceil(@{" + myid + "}/2 )";
|
||
var calcDrainTN="ceil((@{" + myid + "} + @{adept" + myid + "boost} ) /2 )";
|
||
var calcDrainDice="@{willpower|max} + ?{Drain Pool Dice}";
|
||
|
||
var myroll="&{template:adept}{{myname=@{character_name}}}";
|
||
myroll+="{{spellpool=[[?{Spell Pool Dice|0} + ?{Drain Pool Dice|0}]]}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{targetofspell=@{" + uppermyid + "}}}";
|
||
myroll+="{{spellname=" + uppermyid + " Boost}}";
|
||
myroll+="{{draindamage=[[0]]}}{{powerlevel=@{adept" + myid + "boost}}}";
|
||
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[" + calcTN + "]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId,
|
||
{
|
||
draindamage: drainlvl,
|
||
});
|
||
});
|
||
});
|
||
|
||
});
|
||
|
||
var refreshpools = function () {
|
||
atts=[];
|
||
atts["rounds-phase"]=0;
|
||
atts["controlpool-used"]=0;
|
||
atts["hackingpool-used"]=0;
|
||
atts["astralpool-used"]=0;
|
||
atts["combatpool-used"]=0;
|
||
atts["spellpool-used"]=0;
|
||
atts["sorcery-used"]=0;
|
||
atts["spelldefense-used"]=0;
|
||
atts["taskpool-used"]=0;
|
||
setAttrs(atts);
|
||
};
|
||
|
||
on('clicked:repeating_spells:cast', (info) => {
|
||
var atts=["magic", "spellpool-used", "sorcery-used"];
|
||
var source=info['sourceAttribute'].split('_');
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
const attlist=["target", "force", "drain", "drainlvl", "name", "description", "damage", "range", "spellcategory"];
|
||
attlist.forEach(attr=>{
|
||
let myname=myrepeat + attr;
|
||
atts.push(myname);
|
||
});
|
||
console.log(atts);
|
||
getAttrs(atts, function(myval) {
|
||
console.log('vals');
|
||
console.log(myval);
|
||
const magic=myval["magic"];
|
||
const range=myval[myrepeat + "range"];
|
||
const spellcat=myval[myrepeat + "spellcategory"];
|
||
const force=myval[myrepeat + "force"];
|
||
const target=myval[myrepeat + "target"];
|
||
const drain=myval[myrepeat + "drain"];
|
||
const spused=parseInt(myval["spellpool-used"]);
|
||
const sorceryused=parseInt(myval["sorcery-used"]);
|
||
var drainlvl=myval[myrepeat + "drainlvl"];
|
||
const name=myval[myrepeat + "name"];
|
||
const description=myval[myrepeat + "description"];
|
||
const damage=myval[myrepeat + "damage"];
|
||
var resistattr;
|
||
var targetofspell=target;
|
||
if (target.includes("@{target")) {
|
||
targetofspell="@{target|Target|token_name}";
|
||
resistattr=target.split("|")[2];
|
||
}
|
||
var myroll="&{template:spell}{{myname=@{character_name}}}";
|
||
if ( range == "AoE" ) {
|
||
targetofspell="AoE";
|
||
if ( spellcat == "Elemental" ) {
|
||
calcTN = "4 + @{rangedTN} + (2*(@{spellstack}+@{spellsus})) +@{spellmisc} + @{move}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]] + Cover & Target Movement}}";
|
||
} else {
|
||
if ( resistattr != null ) {
|
||
calcTN= " (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen} + @{rangedvizTN}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]] + Cover & " + resistattr + "}}";
|
||
} else {
|
||
calcTN= target + " + (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen} + @{rangedvizTN}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]] + Cover}}";
|
||
}
|
||
}
|
||
|
||
} else {
|
||
if ( spellcat == "Elemental" ) {
|
||
calcTN = target + " + 4 + @{rangedTN} + (2*(@{spellstack}+@{spellsus})) +@{spellmisc} + @{move}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
} else {
|
||
calcTN= target + " + (2*(@{spellstack}+@{spellsus})) + @{spellmisc} + @{stun_pen} + @{wound_pen} + @{rangedvizTN} + @{cover}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
}
|
||
|
||
}
|
||
var calcDice="?{Sorcery Dice?} + ?{Spell Pool Dice?}";
|
||
var calcDrainTN="floor(?{Force?}/2) + " + drain + " + ( 2 * @{spellsus} )";
|
||
var calcDrainDice="@{willpower|max} + ?{Sorcery Dice for Drain?} + ?{Spell Pool Dice for Drain?}";
|
||
myroll+="{{draindamage=[[0]]}}";
|
||
myroll+="{{sorcerydice=[[?{Sorcery Dice?|@{spellcasting}} + ?{Sorcery Dice for Drain?|0}]]}}";
|
||
myroll+="{{spellpool=[[?{Spell Pool Dice?|0} + ?{Spell Pool Dice for Drain?|0}]]}}";
|
||
myroll+="{{spellname=" + name + "}}";
|
||
myroll+="{{description=" + description +"}}";
|
||
myroll+="{{spelldamage=[[" + damage + "]]}}"
|
||
myroll+="{{castforce=?{Force?|" + force + "}}}";
|
||
myroll+="{{targetofspell=" + targetofspell + "}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
|
||
if ( range == "AoE" ) {
|
||
myroll+="{{cast=[[0]]}}";
|
||
myroll+="{{roll=[[ [[" + calcDice + "]]d6>[[" + calcTN + "]]!! ]] }}";
|
||
} else {
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
}
|
||
if (target.includes("@{target")) {
|
||
console.log('attr split: ' + resistattr);
|
||
myroll += "{{spelldefense=[Spell Defense](~selected|spelldefense)}}";
|
||
if ( range != "AoE" ) {
|
||
if (spellcat == "Elemental" ) myroll += "{{resistspell=[Resist Spell with 1/2 Impact ](~@{target|Target|character_name}|resist-impact-half)}}";
|
||
else if ( resistattr == "force" ) myroll += "{{resistspell=[Resist Spell with force](~@{target|Target|character_name}|attrib-force)}}";
|
||
else myroll += "{{resistspell=[Resist Spell](~@{target|Target|character_name}|attrib-" + resistattr +"-max)}}";
|
||
|
||
} else {
|
||
if ( spellcat == "Elemental" ) myroll += "{{resistspell=[Resist Spell with 1/2 Impact ](~selected|resist-impact-half)}}"
|
||
else if ( resistattr == "force" ) myroll += "{{resistspell=[Resist Spell with force](~selected|attrib-force)}}"
|
||
else myroll += "{{resistspell=[Resist Spell](~selected|attrib-" + resistattr +"-max)}}"
|
||
|
||
}
|
||
}
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
atts=[];
|
||
console.log(results.results.spelldamage.result);
|
||
const finaldmg=damagetable[results.results.spelldamage.result];
|
||
var draindmg;
|
||
var finalcast;
|
||
if (drainlvl.includes("dmglvl")) {
|
||
let dmglvl=parseInt(results.results.spelldamage.result);
|
||
draindmg=eval(drainlvl);
|
||
console.log('drdmg calc: ' + draindmg);
|
||
var dmgmax=4;
|
||
var dmgmin=1;
|
||
if (draindmg >= 10) dmgmax=13;
|
||
if (draindmg >= 10) dmgmin=10;
|
||
if (draindmg > dmgmax) draindmg=dmgmax;
|
||
if (draindmg < dmgmin) draindmg=dmgmin;
|
||
|
||
} else {
|
||
draindmg = parseInt(drainlvl);
|
||
console.log('drdmg stright: ' + damagetable[draindmg]);
|
||
}
|
||
/* set drain damage to stun damage if force of spell is less than magic rating*/
|
||
if ( (draindmg < 10 ) && ( force <= magic )) draindmg = draindmg + 9;
|
||
/* set drain damage to physical damage if force of spell is greater than magic rating*/
|
||
if ( (draindmg >= 10 ) && ( force > magic )) draindmg = draindmg - 9;
|
||
draindmg=damagetable[draindmg];
|
||
console.log('drdmg : ' + draindmg);
|
||
atts["sorcery-used"]= sorceryused + parseInt(results.results.sorcerydice.result);
|
||
atts["spellpool-used"]= spused + parseInt(results.results.spellpool.result);
|
||
console.log('finalcast: ' + finalcast);
|
||
if ( range == "AoE" ) {
|
||
finalcast=results.results.roll.dice;
|
||
finishRoll( results.rollId,
|
||
{
|
||
spelldamage: finaldmg,
|
||
draindamage: draindmg,
|
||
cast: finalcast,
|
||
});
|
||
} else {
|
||
finishRoll( results.rollId,
|
||
{
|
||
spelldamage: finaldmg,
|
||
draindamage: draindmg,
|
||
});
|
||
|
||
}
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
});
|
||
});
|
||
|
||
var initiative = function (init, reaction, dmgpen, mytitle, character) {
|
||
console.log('init ' + init + ' reaction ' + reaction + ' dmgpen ' + dmgpen + ' mytitle ' + mytitle + ' character ' + character );
|
||
penatts=["stun_pen", "wound_pen", "matrix-penalty", "vehicle-penalty", "rccommand-penalty", "rcsimsense-penalty", "rcsystem-penalty"];
|
||
getAttrs(penatts, function (myval) {
|
||
console.log(init, reaction)
|
||
var myroll="&{template:init} {{character=" + character + "}}{{type=" + mytitle + "}}"
|
||
myroll += "{{roll=[[" + init + "d6+" + reaction + dmgpen + " &{tracker}]]}}"
|
||
if (myval["matrix-penalty"] >= 10) {
|
||
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name}'s icon has crashed}}";
|
||
}
|
||
if (myval["vehicle-penalty"] >= 10) {
|
||
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name} is destroyed }}";
|
||
}
|
||
if ( (myval["rccommand-penalty"] >= 10) || (myval["rcsimsense-penalty"] >= 10) || (myval["rcsystem-penalty"] >= 10) ) {
|
||
myroll="&{template:info}{{character=@{character_name}}}{{action=Initiative}}{{type=" + mytitle + " }}{{info1=@{character_name} is disengaged }}";
|
||
}
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
};
|
||
on('clicked:init-aug', (info) => {
|
||
const myid=info["htmlAttributes"]["id"]
|
||
let init="@{initiative|max}";
|
||
let reaction="@{reaction|max}";
|
||
let dmgpen=" -@{wp-char}";
|
||
let character="@{character_name}";
|
||
let mytitle="Augmented Initiative Roll";
|
||
initiative(init, reaction, dmgpen, mytitle, character);
|
||
|
||
});
|
||
|
||
|
||
|
||
on('clicked:repeating_ic:init', (info) => {
|
||
gets=[];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
gets.push(myrepeat.concat("icrating"));
|
||
gets.push(myrepeat.concat("icname"));
|
||
gets.push(myrepeat.concat("ic-penalty"));
|
||
getAttrs(gets, function (myval) {
|
||
var penalty;
|
||
console.log(myval);
|
||
const init = "@{matrixsecuritynumber}";
|
||
const reaction = parseInt(myval[myrepeat.concat("icrating")]);
|
||
const character = myval[myrepeat.concat("icname")];
|
||
var penalty = -1 * parseInt(myval[myrepeat.concat("ic-penalty")]);
|
||
if ( penalty == 0 ) penalty = " + 0 ";
|
||
initiative(init, reaction, penalty, mytitle, character);
|
||
});
|
||
|
||
});
|
||
|
||
on('clicked:init', (info) => {
|
||
console.log(info);
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var dmgpen=" -@{wp-char}";
|
||
character="@{character_name}";
|
||
if ( myid == "augmentedinit" ) {
|
||
init="@{initiative|max}";
|
||
reaction="@{reaction|max}";
|
||
} else if ( myid == "astralinit" ) {
|
||
init=1;
|
||
reaction="@{astralreaction}";
|
||
} else if ( myid == "spiritinit" ) {
|
||
init="@{initiative}";
|
||
reaction="@{spirit-initp}";
|
||
} else if ( myid == "matrixinit" ) {
|
||
init="@{deck-initiative}";
|
||
reaction="@{deck-reaction-final}";
|
||
var dmgpen=" - ( @{wp-char} + @{wp-matrix})";
|
||
} else if ( myid == "vehicleinit" ) {
|
||
init="(@{vehicle-driver}initiative} + @{vehicle-initbonus})";
|
||
reaction="@{vehicle-driver}reaction} + @{vehicle-reactbonus}";
|
||
var dmgpen=" - (@{vehicle-driver}stun_pen}-@{vehicle-driver}wound_pen} - @{wp-vehicle})";
|
||
} else if ( myid == "iceinit" ) {
|
||
init="@{deck-initiative}";
|
||
reaction="@{deck-reaction-final}";
|
||
var dmgpen=" - ( @{wp-char} + @{wp-matrix})";
|
||
} else {
|
||
init="@{initiative}";
|
||
reaction="@{reaction}";
|
||
}
|
||
initiative(init, reaction, dmgpen, mytitle, character);
|
||
refreshpools();
|
||
});
|
||
|
||
on('clicked:endturn', (info) => {
|
||
var myroll="&{template:init} {{character=@{character_name}}}{{type=End Combat Pass}}"
|
||
myroll += "{{setinit=[[10 &{tracker:-}]]}}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
refreshpools();
|
||
});
|
||
});
|
||
|
||
on('clicked:resistbanish', (info) => {
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var calcDice= "@{force}";
|
||
calcTN="@{target|Target|magic}";
|
||
var myroll="&{template:spell}{{myname=@{character_name}}}";
|
||
myroll+="{{targetofspell=@{target|Target|character_name}}}";
|
||
myroll+="{{spellname=Resist Banish}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
const floor = function(v) {
|
||
return (v >= 0 || -1) * Math.floor(Math.abs(v));
|
||
}
|
||
|
||
const ammomods = {
|
||
regular: { armor: "ballistic", av: 0, power: 0, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
|
||
adps: { armor: "Math.floor(ballistic * 0.5)", av: 0, power: 0, dmg: 0, recoil: 1, barrier: 0.5, knockdown: 1 },
|
||
explosive: { armor: "ballistic", av: 0, power: 1, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
|
||
explosive2: { armor: "ballistic", av: 0, power: 2, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
|
||
flechette: { armor: "(Math.max(ballistic, (impact * 2)))", av: -0.5, power: 0, dmg: "((ballistic + impact) ==0)? 1 : 0;", recoil: 1, barrier: 2, knockdown: 1 },
|
||
gel: { armor: "impact", av: 0, power: -2, dmg: 0, recoil: 1, barrier: 1, knockdown: 2 },
|
||
tracer: { armor: "ballistic", av: 0, power: "-(Math.floor(rounds/3))", dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
|
||
av: { armor: "Math.floor(ballistic * 0.5)", av: 1, power: 0, dmg: 0, recoil: 1, barrier: 0.5, knockdown: 1 },
|
||
capsule: { armor: "impact", av: 0, power: -2, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
|
||
glazer: { armor: "Math.max((ballistic * 2), (impact * 2))", av: -0.5, power: 2, dmg: "((ballistic + impact) ==0)? 1 : 0;", recoil: 1, barrier: 2, knockdown: 1 },
|
||
hic: { armor: "Math.max(ballistic,impact)", av: 0, power: "(range==6)? -1 : (range==9)? -1", dmg: 0, recoil: 2, barrier: 1, knockdown: 1 },
|
||
hpoint: { armor: "ballistic + impact", av: 0, power: "((ballistic + impact ==0)? 3 : 1", dmg: 0, recoil: 2, barrier: 1, knockdown: 1 },
|
||
incendiary: { armor: "ballistic", av: 0, power: 0, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 },
|
||
mercury: { armor: "Math.max((ballistic * 2), (impact * 2))", av: -0.5, power: 0, dmg: "((ballistic + impact) ==0)? 1 : 0;", recoil: 1, barrier: 2, knockdown: 1 },
|
||
tracker: { armor: "ballistic", av: 0, power: 0, dmg: 0, recoil: 1, barrier: 1, knockdown: 1 }
|
||
}
|
||
|
||
const resistdmg = function (myid, mods) {
|
||
atts=["ballistic", "impact", "dermal-armor"];
|
||
getAttrs(atts, function (myval) {
|
||
const ballistic=myval["ballistic"];
|
||
const impact=myval["impact"];
|
||
const dermalarmor=myval["dermal-armor"];
|
||
var wdmg;
|
||
var dmgcode=0;
|
||
var weapondmg="none";
|
||
var dodge=0;
|
||
myroll="&{template:resistance}";
|
||
if ( mods=="regular" ) mods=1;
|
||
if ( mods=="normal" ) mods=1;
|
||
if ( mods=="double" ) mods=2;
|
||
if ( mods=="half" ) mods=0.5;
|
||
if ( typeof mods === 'object' && mods !== null ) {
|
||
const ammo=mods["ammotype"].toLowerCase();
|
||
weapondmg = mods["wdmg"];
|
||
dodge = mods["dodge"];
|
||
const range = mods["range"];
|
||
const armorval = eval(ammomods[ammo]["armor"]);
|
||
const powermod = eval(ammomods[ammo]["power"]);
|
||
const dmgmod = eval(ammomods[ammo]["dmg"]);
|
||
dmgcode = damagetable[weapondmg] + dmgmod;
|
||
console.log ('armorval ' + armorval + ' powermod ' + powermod + ' dmgmod ' + dmgmod + ' range ' + range);
|
||
myroll +="{{Power=?{Attack Power|" + mods.power + "}}}";
|
||
myroll+="{{wpndmg=" + weapondmg + "}}";
|
||
myroll +="{{attacktest=[[" + mods["attacktest"] + "]]}}";
|
||
myroll+="{{dodge=[[" + mods["dodge"] + "]]}}";
|
||
myroll +="{{AttackType=" + ammo + "}}";
|
||
calcTN="?{Attack Power} + " + powermod + " - " + armorval;
|
||
} else {
|
||
myroll +="{{Power=?{Attack Power|4}}}";
|
||
myroll +="{{AttackType=" + mods + "}}";
|
||
calcTN="?{Attack Power} - (floor(@{" + myid + "} * " + mods + "))";
|
||
}
|
||
let actionname = myid.charAt(0).toUpperCase() + myid.slice(1);
|
||
var calcDice= "@{body|max} + ?{Combat Pool Dice}";
|
||
myroll +="{{name=" + actionname + " Armor}}{{character=@{character_name}}}{{armorvalue=@{" + myid + "}}}{{combatpool=[[?{Combat Pool Dice|0}]]}}";
|
||
myroll +="{{action=Resistance Test}}";
|
||
myroll +="{{finaldmg=[[0]]}}{{netresult=[[0]]}}";
|
||
myroll +="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
|
||
console.log(myroll);
|
||
console.log(' unmod weapons code ' + dmgcode);
|
||
startRoll(myroll, (results) => {
|
||
console.log('dmgcode ' + dmgcode);
|
||
const netresult=results.results.attacktest.result - ( results.results.roll.result + dodge );
|
||
console.log('netresult ' + netresult);
|
||
const stage=floor(netresult/2);
|
||
var finaldmg=dmgcode + stage;
|
||
console.log('finaldmg ' + finaldmg);
|
||
var dmgmax=4;
|
||
var dmgmin=1;
|
||
if (dmgcode >= 10) dmgmax=13;
|
||
if (dmgcode >= 10) dmgmin=10;
|
||
if (finaldmg > dmgmax) finaldmg=dmgmax;
|
||
if (finaldmg < dmgmin) finaldmg=dmgmin;
|
||
updatepoolused("combatpool", results.results.combatpool.result);
|
||
if (weapondmg != "none") {
|
||
finishRoll( results.rollId, {
|
||
finaldmg: damagetable[finaldmg],
|
||
netresult: netresult,
|
||
});
|
||
} else { finishRoll( results.rollId); }
|
||
});
|
||
});
|
||
};
|
||
|
||
on('clicked:resistdmg', (info) => {
|
||
console.log(info);
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
mods="?{Attack Type|Normal,1|Elemental,0.5|ADPS,0.5|Half,0.5|Double,2}";
|
||
resistdmg(myid, mods);
|
||
});
|
||
|
||
on('clicked:resistroll', (info) => {
|
||
const payload=rollEscape.unescape(info.originalRollId);
|
||
console.log(payload);
|
||
resistdmg(payload["armortype"], payload);
|
||
});
|
||
|
||
const resistmods=["half", "normal", "double"];
|
||
resistmods.forEach(mod => {
|
||
var myball="resist-ballistic-" + mod;
|
||
var myimpact="resist-impact-" + mod;
|
||
on(`clicked:${myball}`, (info) => {
|
||
|
||
console.log(rollEscape.unescape(info.originalRollId));
|
||
resistdmg("ballistic", mod);
|
||
});
|
||
|
||
on(`clicked:${myimpact}`, (info) => {
|
||
console.log(rollEscape.unescape(info.originalRollId));
|
||
resistdmg("impact", mod);
|
||
});
|
||
});
|
||
|
||
on('clicked:resistvehicledmg', (info) => {
|
||
console.log(info);
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
var calcDice= "@{body|max} + ?{Control Pool Dice}";
|
||
calcTN="?{Adjuted Attack Power}";
|
||
myroll="&{template:resistance}";
|
||
myroll +="{{name=Vehicle Damage Test}}{{character=@{character_name}}}{{armorvalue=@{armor}}}{{controlpool=[[?{Control Pool Dice|0}]]}}";
|
||
myroll +="{{action=Resistance Test}}";
|
||
myroll +="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
|
||
var dodge = function (mods) {
|
||
myroll="&{template:resistance}";
|
||
if ( typeof mods === 'object' && mods !== null ) {
|
||
payload=mods;
|
||
console.log(payload);
|
||
mods="?{Modifiers?|" + Math.floor(payload["rounds"] / 3 ) + "}";
|
||
myroll +="{{senddata=[[0]]}}";
|
||
}
|
||
console.log('mods: ' + mods);
|
||
var calcDice= "?{Combat Pool Dice}";
|
||
calcTN="4 + " + mods;
|
||
myroll +="{{name=Dodge}}{{character=@{character_name}}}"
|
||
myroll +="{{combatpool=[[?{Combat Pool Dice|0}]]}}";
|
||
myroll +="{{action=Dodge Test}}";
|
||
myroll +="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll +="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll +="{{roll= [[ [[" + calcDice + " ]]d6>[[ {2,(" + calcTN + ")}kh1 ]]!! ]]}}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("combatpool", results.results.combatpool.result);
|
||
console.log(payload);
|
||
if ( payload ) {
|
||
payload["dodge"]=results.results.roll.result;
|
||
finishRoll( results.rollId, { senddata: rollEscape.escape(payload), });
|
||
} else {
|
||
finishRoll( results.rollId);
|
||
}
|
||
});
|
||
|
||
};
|
||
|
||
on('clicked:dodge', (info) => {
|
||
console.log(info);
|
||
if ( info["htmlAttributes"]["id"] != undefined) {
|
||
mods="?{Modifiers?|0}";
|
||
}
|
||
else if ( info["originalRollId"] != undefined ) {
|
||
mods=rollEscape.unescape(info["originalRollId"]);
|
||
}
|
||
dodge(mods);
|
||
});
|
||
|
||
var conjuring = function (myid) {
|
||
const atts=["charisma_max", "magic-type", "magic", "summoning", "banishing", "spiritcontrol", "character_name"]
|
||
getAttrs(atts, function(myval) {
|
||
const mycharisma=myval["charisma_max"];
|
||
var calcTN;
|
||
var calcDrainTN;
|
||
var calcDice= parseInt(myval[myid]) + " + ?{Spell Pool Dice} + ?{Spirit Focus Dice}";
|
||
if (myid != "summoning") calcDice+= " + ?{Are you the summoner of the spirit?|Yes," + mycharisma + "|No,0}"
|
||
var action;
|
||
if (myid == "summoning" ) {
|
||
calcTN="?{Force?}";
|
||
var calcDice="?{Conjuring Dice?|" + parseInt(myval[myid]) + "} + ?{Spirit Focus Dice}";
|
||
calcDrainTN="?{Force?}";
|
||
action="Conjure Force ?{Force?} Spirit";
|
||
|
||
} else {
|
||
calcTN="@{target|Target|force}";
|
||
let actionname = myid.charAt(0).toUpperCase() + myid.slice(1);
|
||
action= actionname + " Force @{target|Target|force} Spirit";
|
||
}
|
||
var calcDrainDice=mycharisma + " + ?{Conjuring Dice for Drain?|0} + ?{Spirit Focus Dice}";
|
||
var myroll="&{template:spell}{{myname=" + myval["character_name"] + "}}";
|
||
myroll+="{{draindamage=[[0]]}}"
|
||
if (myid == "summoning" ) myroll+="{{spiritforce=[[?{Force?|1}]]}}"
|
||
else myroll+="{{spiritforce=[[ @{target|Target|force} ]]}}"
|
||
myroll+="{{spellpool=[[?{Spell Pool Dice|0} + ?{Drain Pool Dice|0}]]}}";
|
||
myroll+="{{spellname=" + action + "}}";
|
||
myroll+="{{spiritdice=[[?{Spirit Focus Dice|0}]]}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
if (myid == "summoning" ) {
|
||
myroll+="{{draintn=[[" + calcDrainTN + "]]}}";
|
||
myroll+="{{draindice=[[" + calcDrainDice + "]]}}";
|
||
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
|
||
}
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
if (myid == "banishing" ) myroll += "{{resist=[Resist Banish](~@{target|Target|character_name}|resistbanish)}}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
const spiritforce=results.results.spiritforce.result;
|
||
var finaldrain;
|
||
if ( spiritforce <= (mycharisma/2)) finaldrain="L";
|
||
else if ( spiritforce <= mycharisma ) finaldrain="M";
|
||
else if ( spiritforce >= ( mycharisma * 1.5 ) ) finaldrain="D";
|
||
else finaldrain="S";
|
||
if ( spiritforce <= myval["magic"] ) finaldrain.concat("(s)");
|
||
console.log('roll')
|
||
console.log(results.results.rolldice.result);
|
||
console.log('tn')
|
||
console.log(results.results.targetnumber.result);
|
||
finishRoll( results.rollId, {
|
||
draindamage: finaldrain,
|
||
});
|
||
});
|
||
});
|
||
|
||
};
|
||
const conjurelist = ["spiritcontrol","summoning","banishing"];
|
||
conjurelist.forEach(action => {
|
||
console.log(action)
|
||
on(`clicked:${action}`, conjuring(action) );
|
||
});
|
||
|
||
on('clicked:conjure', (info) => {
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
console.log("clicked conjure: " + myid);
|
||
conjuring(myid);
|
||
});
|
||
|
||
on('clicked:dispell', (info) => {
|
||
console.log("clicked dispell");
|
||
var calcDice="?{Sorcery Dice?} + ?{Spell Pool Dice?}";
|
||
var calcTN="?{Force of Spell?}";
|
||
var calcDrainTN="floor( ?{Force of Spell?}/2) + ( 2 * @{spellsus} )";
|
||
var calcDrainDice="@{willpower|max} + ?{Sorcery Dice for Drain?} + ?{Spell Pool Dice for Drain?} +?{Drain Modifier?|0}";
|
||
var myroll="&{template:spell}{{myname=@{character_name}}}";
|
||
myroll+="{{sorcerydice=[[?{Sorcery Dice?|@{spellcasting}} + ?{Sorcery Dice for Drain?|0}]]}}";
|
||
myroll+="{{spellpool=[[?{Spell Pool Dice?|0} + ?{Spell Pool Dice for Drain?|0}]]}}";
|
||
myroll+="{{spellname=DISPELL}}";
|
||
myroll+="{{castforce=[[?{Force of Spell?|0}]]}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{draintest= [[ [[" + calcDrainDice + "]]d6>[[ {2, ( " + calcDrainTN + ")}kh1 ]]!! ]] }}";
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
on('clicked:spelldefense', (info) => {
|
||
console.log("clicked spelldefense");
|
||
var calcDice="?{Sorcery Dice?} + ?{Spell Pool Dice?}";
|
||
var calcTN="?{Force of Spell?}";
|
||
var myroll="&{template:spell}{{myname=@{character_name}}}";
|
||
myroll+="{{sorcerydice=[[?{Sorcery Dice?|@{spelldefense}}]]}}";
|
||
myroll+="{{castforce=[[?{Force of Spell?|0}]]}}";
|
||
myroll+="{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{spellpool=[[?{Spell Pool Dice?|0}]]}}";
|
||
myroll+="{{spellname=SPELL DEFENSE}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}";
|
||
myroll+="{{targetofspell=@{target|Ally|token_name}}}";
|
||
myroll+="{{casttest=[[ [[" + calcDice + "]]d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}";
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
|
||
|
||
on('clicked:vehicledriving', (info) => {
|
||
calcTN="@{handling} + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} +@{wp-vehicle} - @{driving-test-interface} +@{driving-test-weather} +@{driving-test-terrain} +@{driving-test-size} +?{Additional Modifiers|0}";
|
||
calcDice="[[@{vehicle-skill-final} + @{driving-test-autonav} + ?{Control Pool Dice?}]]"
|
||
var myroll="&{template:vehicle}{{type=Driving Test}}{{controlpool=[[?{Control Pool Dice?|0}]]}}{{character=@{character_name}}}"
|
||
myroll += "{{targetnumber=[[" + calcTN + "]]}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>[[{2,(" + calcTN + ")}kh1]]!! ]] }}"
|
||
console.log(myroll);
|
||
var atts=[];
|
||
startRoll(myroll, (results) => {
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId, { })
|
||
});
|
||
});
|
||
|
||
on('clicked:vehiclesensor', (info) => {
|
||
calcTN="[[{2,(@{target|Target|signature} +@{wp-vehicle} +@{sensor-test-los} +@{sensor-test-weather} +@{sensor-test-terrain} +@{vehicle-urban} +?{Additional Modifiers|0})}kh1]]";
|
||
calcDice="[[@{sensors-rating}]]";
|
||
calcDiceECD="[[@{ecd-rating} * @{ecd-enabled} ]]";
|
||
var myroll="&{template:vehicle}{{type=Sensor Test}}{{character=@{character_name}}}";
|
||
myroll += "{{targetnumber=" + calcTN + "}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
|
||
myroll += "{{ecd=[[ " + calcDiceECD + "d6>" + calcTN + "!! ]] }}"
|
||
console.log(myroll);
|
||
var atts=[];
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId, { })
|
||
});
|
||
});
|
||
|
||
on('clicked:vehicleposition', (info) => {
|
||
calcTN="[[{2,(@{handling} + @{speed-exceeding} + @{driving-position-terrain} - @{vehicle-actionbonus} + (@{vehicle-autonav} * @{autonav}) + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} + @{wp-vehicle} )}kh1]]";
|
||
calcDice="[[@{vehicle-skill-final} + ?{Control Pool Dice?}]]"
|
||
var myroll="&{template:vehicle}{{type=Position Maneuever}}{{controlpool=[[?{Control Pool Dice?|0}]]}}{{character=@{character_name}}}"
|
||
myroll += "{{targetnumber=" + calcTN + "}}{{position=[[0]]}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
|
||
console.log(myroll);
|
||
var atts=[];
|
||
getAttrs(["maneuver-score"], function(myval) {
|
||
startRoll(myroll, (results) => {
|
||
const newscore = parseInt(myval["maneuver-score"]) + results.results.roll.result ;
|
||
atts["maneuver-score"] = newscore;
|
||
console.log('new man score: ' + atts["maneuver-score"]);
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId, {
|
||
position: newscore,
|
||
})
|
||
setAttrs(atts);
|
||
});
|
||
});
|
||
});
|
||
on('clicked:vehiclecrash', (info) => {
|
||
calcTN="[[{2,(@{handling} + @{driving-crash-terrain} + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} +@{wp-vehicle} )}kh1]]"
|
||
calcDice="[[@{vehicle-skill-final} + ?{Control Pool Dice?} + (@{vehicle-autonav} * @{autonav})]]"
|
||
var myroll="&{template:vehicle}{{type=Crash Test}}{{controlpool=[[?{Control Pool Dice?|0}]]}}{{character=@{character_name}}}"
|
||
myroll += "{{targetnumber=" + calcTN + "}}{{speed=[[@{speed-current}]]}}{{reaction=[[@{vehicle-driver}reaction|max}]]}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
|
||
console.log(myroll);
|
||
var atts=[];
|
||
startRoll(myroll, (results) => {
|
||
const speed = results.results.speed.result
|
||
const reaction = results.results.reaction.result
|
||
console.log('speed: ' + speed);
|
||
console.log('reaction: ' + reaction);
|
||
var speedmod=0;
|
||
if ( speed <= ( reaction * 20 )) speedmod=0;
|
||
else if ( speed <= ( reaction * 30 )) speedmod=1;
|
||
else if ( speed <= ( reaction * 40 )) speedmod=2;
|
||
else speedmod=4;
|
||
console.log('final: ' + speedmod );
|
||
var finaltn = results.results.targetnumber.result + speedmod;
|
||
if ( finaltn < 2 ) finaltn = 2;
|
||
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId,
|
||
{
|
||
targetnumber: finaltn,
|
||
roll: finaldice,
|
||
});
|
||
});
|
||
});
|
||
on('clicked:vehicleaction', (info) => {
|
||
var myaction=info["htmlAttributes"]["id"];
|
||
var myterrain="driving-ab-terrain";
|
||
var myaction = myaction.charAt(0).toUpperCase() + myaction.slice(1);
|
||
var autonav="@{autonav}";
|
||
var vcr = "@{vehicle-actionbonus}";
|
||
var miscmods="?{How many additional enemy vehicles?";
|
||
var speeding=1;
|
||
var vmbelow10=4;
|
||
var vmbelow00=2;
|
||
var baseTN="@{handling}";
|
||
var calcDice="[[@{vehicle-skill-final} + ?{Control Pool Dice?}]]";
|
||
if ( myaction =="Ram" ) {
|
||
myterrain="driving-ram-terrain";
|
||
autonav="(@{autonav} + 2)";
|
||
enemies=0;
|
||
}
|
||
else if ( myaction =="Hide" ) {
|
||
myterrain="driving-hide-terrain";
|
||
vmbelow10=6;
|
||
vmbelow00=3;
|
||
speeding=2;
|
||
}
|
||
else if ( myaction =="Relocate" ) {
|
||
myterrain="driving-relocate-terrain";
|
||
miscmods="?{Successes from Hiding Test?";
|
||
speeding=2;
|
||
vcr=0;
|
||
autonav="( @{autonav} * -1)";
|
||
calcDice="[[@{sensors-rating} + ?{Control Pool Dice?}]]";
|
||
baseTN="@{target|Target|signature}";
|
||
}
|
||
var vmsmod=0;
|
||
var calcTN="[[{2,(" + baseTN + " + " + miscmods + "} + ( @{speed-exceeding} * " + speeding + ") + @{" + myterrain + "} - " + vcr + " + (@{vehicle-autonav} * "
|
||
calcTN += autonav + ") + @{vehicle-driver}stun_pen} +@{vehicle-driver}wound_pen} +@{wp-vehicle} )}kh1]]"
|
||
var myroll="&{template:vehicle} {{type=Accelerating Action}}{{controlpool=[[?{Control Pool Dice?|0}]]}} {{character=@{character_name}}} {{miscmods=" + miscmods + "|0}}}"
|
||
myroll += "{{rolldice=" + calcDice + "}}"
|
||
myroll += "{{target=vs. @{target|Target|token_name}}}{{type=" + myaction + "}}"
|
||
myroll += "{{targetnumber=" + calcTN + "}}"
|
||
myroll += "{{delta=[[@{maneuver-score} - @{target|Target|maneuver-score} ]]}}"
|
||
myroll += "{{roll=[[ " + calcDice + "d6>" + calcTN + "!! ]] }}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
console.log(results);
|
||
console.log(results.results.roll.dice);
|
||
if ( results.results.delta.result >= 11 ) vmsmod=-4;
|
||
else if ( results.results.delta.result > 1 ) vmsmod=-2;
|
||
else if ( results.results.delta.result == 0 ) vmsmod=0;
|
||
else if ( results.results.delta.result >= -10 ) vmsmod=vmbelow00;
|
||
else if ( results.results.delta.result < -10 ) vmsmod=vmbelow10;
|
||
else vmsmod=0;
|
||
console.log(vmsmod);
|
||
var finaltn = results.results.targetnumber.result + vmsmod;
|
||
if (finaltn < 2) finaltn=2;
|
||
console.log(results.results.roll.dice);
|
||
const finaldice = (results.results.roll.dice.filter(mydice=> mydice >= finaltn )).length;
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
finishRoll( results.rollId,
|
||
{
|
||
targetnumber: finaltn,
|
||
roll: finaldice,
|
||
});
|
||
});
|
||
});
|
||
|
||
|
||
var rollattribute = function (attrib) {
|
||
console.log(attrib);
|
||
var mymode="";
|
||
var mybase=attrib.toUpperCase();
|
||
if (attrib.includes("max")) {
|
||
mymode="Augmented";
|
||
mybase=attrib.split("|")[0].toUpperCase();
|
||
}
|
||
console.log(attrib);
|
||
const attroll="&{template:attribute} {{character=@{character_name}}}{{Attribute=" + mybase + " " + mymode + "}} {{targetnumber=[[?{Target Number?|4}]]}}{{combatpool= [[?{Combat Dice Pool?|0}]]}}{{result= [[ [[@{" + attrib +"} + ?{Combat Dice Pool?}]]d6>[[{2,(?{Target Number?} + @{stun_pen} + @{wound_pen})}kh1]]!! ]] }}"
|
||
startRoll(attroll, (results) => {
|
||
console.log(results.results.combatpool.result)
|
||
finishRoll( results.rollId);
|
||
});
|
||
};
|
||
attributes.forEach(myatt => {
|
||
var myevent="attrib-" + myatt;
|
||
var myeventmax="attrib-" + myatt + "-max";
|
||
var myattmax = myatt + "|max";
|
||
on(`clicked:${myevent}`, (info) => {
|
||
console.log('running ' + myatt );
|
||
rollattribute(myatt);
|
||
});
|
||
|
||
on(`clicked:${myeventmax}`, (info) => {
|
||
console.log('running ' + myattmax );
|
||
rollattribute(myattmax);
|
||
});
|
||
});
|
||
|
||
|
||
on('clicked:attrib', (info) => {
|
||
console.log(info);
|
||
var attrib=info["htmlAttributes"]["id"];
|
||
rollattribute(attrib);
|
||
});
|
||
|
||
|
||
on('clicked:maneuever', (info) => {
|
||
var mytype=info["htmlAttributes"]["id"]
|
||
if ( mytype == "generate") {
|
||
var manroll="&{template:vehicle} {{type=Maneuver Score}} {{character=@{character_name}}}{{controlpool=[[?{Control Pool Dice?|0}]]}} {{roll=[[ [[@{vehicle-skill-final} + ?{Control Pool Dice?}]]d6KH1 + @{terrain-points} + @{speed-points} + @{vehicle-points} ]] }}"
|
||
} else {
|
||
var manroll="&{template:vehicle} {{type=Compare Maneuver Score}} {{character=@{character_name}}} {{target=@{target|Target|character_name}}} {{charscore=[[@{maneuver-score}]]}} {{targetscore=[[@{target|Target|maneuver-score}]]}} {{roll=[[@{maneuver-score} - @{target|Target|maneuver-score} ]]}} "
|
||
}
|
||
startRoll(manroll, (results) => {
|
||
updatepoolused("controlpool", results.results.controlpool.result);
|
||
console.log('results: ' + results.results.roll.result)
|
||
finishRoll( results.rollId);
|
||
setAttrs({"maneuver-score": results.results.roll.result});
|
||
});
|
||
|
||
});
|
||
on('clicked:repeating_rangedweapons:reload', (info) => {
|
||
console.log("reloading");
|
||
var setatts={};
|
||
var atts=[];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
var acttype="complex";
|
||
var myroll;
|
||
atts.push(myrepeat.concat("ammo"));
|
||
atts.push(myrepeat.concat("reloadmethod"));
|
||
atts.push(myrepeat.concat("ammoremain"));
|
||
atts.push(myrepeat.concat("name"));
|
||
atts.push(myrepeat.concat("reloads"));
|
||
atts.push("quickness_max");
|
||
console.log(atts);
|
||
getAttrs(atts, function(myval) {
|
||
const max=parseInt(myval[myrepeat.concat("ammo")]);
|
||
const myweapon=myval[myrepeat.concat("name")];
|
||
const myreload=myval[myrepeat.concat("reloadmethod")];
|
||
const remain=parseInt(myval[myrepeat.concat("ammoremain")]);
|
||
const maxload = max - remain
|
||
const quick=parseInt(myval["quickness_max"]);
|
||
var myreloads=myval[myrepeat.concat("reloads")];
|
||
var rounds=max;
|
||
var reloadaction="Complex";
|
||
var ammoused=1;
|
||
var reloadtxt=rounds + " rounds with a " + myreload;
|
||
if (myreload=="clip") acttype="simple";
|
||
if ( ( myreload == "cylinder" ) || ( myreload == "magazine" ) || ( myreload=="break" ) ) {
|
||
if ( quick > maxload ) {
|
||
ammoused = maxload;
|
||
} else {
|
||
ammoused = quick;
|
||
}
|
||
if ( ammoused > myreloads ) ammoused = myreloads;
|
||
rounds = ammoused + remain;
|
||
}
|
||
const reloadsleft=myreloads - ammoused;
|
||
if (myreloads < 1) {
|
||
console.log('out of ammo');
|
||
ammoused=0;
|
||
myroll="/w gm &{template:info}{{character=@{character_name}}}{{action=Reload: " + myweapon + "}}{{type=" + acttype +"}}{{info1=Out of Ammo }}";
|
||
} else {
|
||
console.log('ammo okay');
|
||
myroll="/w gm &{template:info}{{character=@{character_name}}}{{action=Reload: " + myweapon + "}}{{type=" + acttype + "}}{{info1=Loaded " + reloadtxt + "}}";
|
||
if ( ( myreload == "cylinder" ) || ( myreload == "magazine" ) || ( myreload=="break" ) ) {
|
||
myroll += "{{info2=" + reloadsleft + " Spare Rounds Remaining}}";
|
||
} else {
|
||
myroll += "{{info2=" + reloadsleft +" Spare " + myreload + "s Remaining}}";
|
||
}
|
||
}
|
||
setatts[myrepeat.concat("ammoremain")]=rounds;
|
||
setatts[myrepeat.concat("reloads")]=reloadsleft;
|
||
setAttrs(setatts);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
});
|
||
on('clicked:repeating_rangedweapons:showmore clicked:repeating_explosives:showmore', (info) => {
|
||
var source=info['sourceAttribute'];
|
||
console.log('attribute is ' + source);
|
||
getAttrs([source], function(myval){
|
||
console.log('attribute value is ' + myval[source]);
|
||
if (myval[source] == "show") {
|
||
setAttrs({[source]: "hide"});
|
||
} else {
|
||
setAttrs({[source]: "show"});
|
||
}
|
||
});
|
||
});
|
||
on('clicked:repeating_rangedweapons:rangedattack', (info) => {
|
||
var setatts={};
|
||
var atts=["sensors-rating", "combatpool-used", "controlpool-used", "gyro-on", "armor-quickness-pen", "rounds-phase", "character_name"];
|
||
var recoilx=1;
|
||
var rounds=1;
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
var mymode=info["htmlAttributes"]["id"]
|
||
const weaponattrs=["damage", "power", "name", "skill", "wfamily", "specialized", "targeting", "recoilcomp", "gyro", "ammotype", "ammoremain", "sa", "ss","bf", "fa", "tnmods", "firemode"] ;
|
||
weaponattrs.forEach(myatt=>{
|
||
atts.push(myrepeat.concat(myatt));
|
||
});
|
||
getAttrs(atts, function(myval) {
|
||
if ( (myval[myrepeat.concat("wfamily")] == "Heavy" ) && ( ( mymode != "vehiclesensor" ) || ( mymode != "vehicleranged" )) ) recoilx=2;
|
||
var vehiclesensors=0, armorpen=0, armorpenroll="", pool, poolname, dmgmax=4, finalrounds;
|
||
if ( myval["sensors-rating"] ) vehiclesensors=myval["sensors-rating"] ;
|
||
const tnmods= myval[myrepeat.concat("tnmods")];
|
||
const myname= myval["character_name"];
|
||
const myweapon= myval[myrepeat.concat("name")];
|
||
const combatused=parseInt(myval["combatpool-used"]);
|
||
const controlused=parseInt(myval["controlpool-used"]);
|
||
var wdmg= myval[myrepeat.concat("damage")];
|
||
const ammoremain= myval[myrepeat.concat("ammoremain")];
|
||
const ammotype= myval[myrepeat.concat("ammotype")];
|
||
const targetaim= myval[myrepeat.concat("targeting")];
|
||
const myskill=myval[myrepeat.concat("skill")];
|
||
var gyro= myval[myrepeat.concat("gyro")];
|
||
if ( myval["gyro-on"] == 0 ) gyro=0;
|
||
const firemode= myval[myrepeat.concat("firemode")];
|
||
var dmgnumber= damagetable[wdmg];
|
||
if (( ammotype == "gel" || ammotype == "capsule" ) && dmgnumber < 10 ) {
|
||
dmgnumber += 9;
|
||
wdmg=damagetable[dmgnumber];
|
||
}
|
||
if (dmgnumber >= 10) dmgmax=13;
|
||
var wpower= myval[myrepeat.concat("power")];
|
||
var ammoleft=myval[myrepeat.concat("ammoremain")];
|
||
const prevrounds=myval["rounds-phase"];
|
||
var recoilcomp= myval[myrepeat.concat("recoilcomp")];
|
||
if (( firemode == "bf") && ( ammoleft <= 3)) rounds ="?{Rounds|" + ammoleft + "}";
|
||
else if (( firemode == "bf") && ( ammoleft > 3)) rounds ="?{Rounds|3}";
|
||
else if (( firemode == "fa") && ( ammoleft <= 10)) rounds ="?{Rounds|" + ammoleft + "}";
|
||
else if (( firemode == "fa") && ( ammoleft > 10)) rounds ="?{Rounds|" + ( 10 - prevrounds ) +"}";
|
||
var recoil="";
|
||
if (( firemode == "bf") || (firemode == "fa")) {
|
||
recoil="{0,(" + recoilx + " * (( ?{Rounds Already Fired in Combat Phase|" + prevrounds + "} + ?{Rounds} ) - (" + recoilcomp + " + " + gyro + ")))}kh1";
|
||
} else if (firemode == "sa" ) {
|
||
recoil="{0,(" + recoilx + " * ( ?{Rounds Already Fired in Combat Phase|" + prevrounds + "} - (" + recoilcomp + " + " + gyro + ")))}kh1";
|
||
}
|
||
if (ammoleft <= 0 ) {
|
||
roll="&{template:info}{{character=@{character_name}}}{{action=Attack: " + myweapon + "}}{{type=Simple}}{{info1=Out of Ammo }}";
|
||
startRoll(roll, (results) => {
|
||
finishRoll( results.rollId,{});
|
||
});
|
||
} else {
|
||
specialized=myval[myrepeat.concat("specialized")] || 0
|
||
if ( quicknesslinked.includes(myskill) ) {
|
||
armorpen=myval["armor-quickness-pen"];
|
||
armorpenroll= "{{armorpen=@{armor-quickness-pen}}}";
|
||
}
|
||
var calcTN = "[[ "
|
||
if ( mymode == "vehiclesensor" ) {
|
||
calcTN += "@{sensor-gunnery-tn} + @{vehicle-driver}wp-char} + @{wp-vehicle}"
|
||
poolname="Control";
|
||
pool="controlpool";
|
||
|
||
} else if ( mymode == "vehicleranged" ) {
|
||
calcTN += " ?{Range} + @{rangedTN} + @{target|Target|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + @{wp-vehicle}";
|
||
poolname="Control";
|
||
pool="controlpool";
|
||
} else {
|
||
calcTN += " ?{Range} + @{rangedTN} + @{target|Target|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + " + armorpen;
|
||
poolname="Combat";
|
||
pool="combatpool";
|
||
}
|
||
|
||
calcTN += " + ?{Additional Modifiers|" + tnmods + "} + " + recoil;
|
||
calcTN += " ]]"
|
||
|
||
var calcDice = "[[ " + myskill + " + " + specialized + " + ?{" + poolname + " Pool Dice|0}"
|
||
if ( mymode == "vehiclesensor" ) calcDice += " + " + Math.floor(vehiclesensors / 2 )
|
||
calcDice += " ]]"
|
||
|
||
|
||
var roll="&{template:attack}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}";
|
||
roll += "{{rounds=[[" + rounds + "]]}}{{range=[[@{ask-range}]]}}";
|
||
roll += "{{targetnumber=" + calcTN + " }}{{rolldice=" + calcDice + "}}";
|
||
roll += "{{weaponname=" + myweapon + "}}{{weapondamage=" + wdmg + "}}{{weaponpower=[[" + wpower + "]]}}";
|
||
roll += "{{" + pool + "=[[?{" + poolname + " Pool Dice}]]}}{{weaponname=" + myweapon + "}}{{ammotype=" + ammotype + "}}";
|
||
roll += "{{attacktest=[[ " + calcDice + "d6>[[ {2, " + calcTN + "}kh1 ]]!! ]] }}";
|
||
if ( mymode == "rangedattack" ) {
|
||
roll += "{{dodge=[Dodge](~@{target|Target|token_name}|dodge)}}";
|
||
roll += "{{senddata=[[0]]}}"
|
||
}
|
||
roll += armorpenroll;
|
||
roll += "{{rangedmods=@{rangedTN}}}";
|
||
roll += "{{movemods=[[{0,( @{move} - " + gyro + ") }kh1]]}}";
|
||
roll += "{{targetmods=" + targetaim + "}}";
|
||
console.log(roll);
|
||
startRoll(roll, (results) => {
|
||
var poolresults;
|
||
setatts["rounds-phase"]=results.results.rounds.result + prevrounds;
|
||
const myrounds=results.results.rounds.result;
|
||
if ( mymode == "rangedattack" ) poolresults=results.results.combatpool.result + combatused;
|
||
else poolresults=results.results.controlpool.result + controlused;
|
||
finalrounds=myrounds;
|
||
if ( myrounds > ammoleft ) {
|
||
finalrounds=parseInt(ammoleft);
|
||
}
|
||
if ( finalrounds > 1 ) wpower=parseInt(wpower) + finalrounds;
|
||
let payload= {
|
||
attacker: myname,
|
||
armortype: "ballistic",
|
||
range: results.results.range.result,
|
||
wdmg: wdmg,
|
||
rounds: results.results.rounds.result,
|
||
dodge: 0,
|
||
attacktest: results.results.attacktest.result,
|
||
power: wpower,
|
||
ammotype: ammotype.toLowerCase(),
|
||
}
|
||
finishRoll( results.rollId,
|
||
{
|
||
weaponpower: wpower,
|
||
rounds: finalrounds,
|
||
senddata: rollEscape.escape(payload),
|
||
|
||
})
|
||
setatts[myrepeat.concat("ammoremain")]=ammoremain - finalrounds;
|
||
setatts[pool.concat("-used")]=poolresults;
|
||
setAttrs(setatts);
|
||
});
|
||
}
|
||
});
|
||
});
|
||
on('clicked:melee', (info) => {
|
||
console.log(info);
|
||
var atts=[];
|
||
const mymode=info["htmlAttributes"]["id"];
|
||
console.log(mymode);
|
||
var myfocus = 0;
|
||
var focus="";
|
||
var force="";
|
||
var mydamage;
|
||
var myskill;
|
||
var myweapon;
|
||
var mypower;
|
||
var pool="combatpool";
|
||
var defaultmsg="";
|
||
var defaultpen=0;
|
||
var myspec=0;
|
||
const meleeattrs=["unarmed", "unarmed-specialized", "cyberimplant", "weaponfocus-equipped", "weaponfocus-damage", "gyro-on"];
|
||
getAttrs(meleeattrs, function(myval) {
|
||
if ( mymode == "astralattack" ) {
|
||
pool="astralpool";
|
||
myweapon="Astral Attack";
|
||
var myskill="@{astralcombat}";
|
||
myskill="@{astralcombat} + @{weaponfocus-force}"
|
||
var mydamage="M"
|
||
if ( myval["weaponfocus-equipped"]=="on" ) {
|
||
myskill += "( " + myskill + " + @{weaponfocus-force} )"
|
||
mydamage=myval["weaponfocus-damage"];
|
||
}
|
||
mypower="@{charisma|max}";
|
||
focus="{{weaponfocus=@{weaponfocus-name}}}"
|
||
force="{{focusforce=@{weaponfocus-force}}}"
|
||
}
|
||
else if ( mymode == "unarmedattack" ) {
|
||
var gyropen=0;
|
||
var gyropenroll="";
|
||
if ( myval["gyro-on"] == 1 ) {
|
||
gyropen=4;
|
||
gyropenroll = "{{gyropen=" + gyropen + "}}";
|
||
}
|
||
mydamage=myval["@{attackdamage}"];
|
||
myskill=myval["unarmed"];
|
||
myspec=myval["unarmed-specialized"];
|
||
myweapon="@{martialarts}";
|
||
mypower="@{strength|max}";
|
||
if ( myval["unarmed"] == 0 ) {
|
||
console.log('unarmed is 0');
|
||
if (myval["cyberimplant"] == 0) {
|
||
myskill="@{strength|max}";
|
||
defaultpen=4;
|
||
pool="false";
|
||
var defaultmsg="{{default=Skill Defaulted to Strength Attribute with +" + defaultpen + " to hit}}";
|
||
} else {
|
||
myskill=myval["cyberimplant"];
|
||
defaultpen=2;
|
||
var defaultmsg="{{default=Skill Defaulted to Cyber Implant skill with +" + defaultpen + " to hit}}";
|
||
}
|
||
}
|
||
}
|
||
else if ( mymode == "critterattack" ) {
|
||
myskill="@{reaction|max}";
|
||
mydamage="@{attackdamage}";
|
||
mypower="@{attackpower}";
|
||
myweapon="Attack";
|
||
} else {
|
||
console.log(' id ' + mymode + ' does not match');
|
||
}
|
||
var calcTN="4 + @{meleeTN} + ( ( @{target|Target|meleereach|max} - @{meleereach|max} ) * ?{Use Reach Modifier?} ) + " + defaultpen + " + " + gyropen;
|
||
var calcDice=myskill + " + " + myspec ;
|
||
var myroll="&{template:attack}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}{{weapondamage="
|
||
console.log('pool name is ' + pool);
|
||
myroll+= mydamage + "}}{{weaponpower=[[" + mypower + "]]}}"
|
||
if ( pool == "combatpool" ) {
|
||
calcDice += " + ?{Combat Pool Dice}"
|
||
myroll += "{{pooldice=[[?{Combat Pool Dice|0}]]}}"
|
||
myroll += "{{pooltype=Combat}}";
|
||
} else if ( pool == "astralpool" ) {
|
||
calcDice += " + ?{Astral Pool Dice}"
|
||
myroll += "{{pooldice=[[?{Astral Pool Dice|0}]]}}"
|
||
myroll += "{{pooltype=Astral}}";
|
||
} else {
|
||
myroll += "{{pooldice=[[0]]}}"
|
||
}
|
||
myroll+= "{{charreach=[[@{meleereach|max}]]}}{{targetreach=[[@{target|Target|meleereach|max}]]}}"
|
||
myroll+="{{weaponname=" + myweapon + "}}{{reachmod=[[?{Use Reach Modifier?|Yes,1|No,0}]]}}"
|
||
myroll+="{{reachbonus=[[(@{target|Target|meleereach|max} - @{meleereach|max} ) * ?{Use Reach Modifier?}]]}}"
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}"
|
||
myroll+="{{attacktest=[[ [[" + calcDice + "]]d6>[[ {2,[[ " + calcTN + "]]}kh1]]!! ]] }}"
|
||
myroll+=defaultmsg;
|
||
myroll+=gyropenroll;
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
var reachmodtxt="Reach Bonus Applied" ;
|
||
if ( results.results.reachmod.result == 0 ) reachmodtxt="Reach Bonus Not Applied";
|
||
if ( pool != "none" ) updatepoolused(pool, results.results.pooldice.result );
|
||
finishRoll( results.rollId, {
|
||
reachmod: reachmodtxt,
|
||
});
|
||
|
||
});
|
||
});
|
||
|
||
});
|
||
on('clicked:repeating_meleeweapons:attack', (info) => {
|
||
console.log(info);
|
||
var atts=["combatpool-used", "gyro-on", "armor-quickness-pen"];
|
||
var rounds=1;
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
var mymode=info["htmlAttributes"]["id"];
|
||
const meleeattrs=["damage", "power", "name", "skill", "reach", "specialized", "notes"] ;
|
||
meleeattrs.forEach(myatt=>{
|
||
atts.push(myrepeat.concat(myatt));
|
||
});
|
||
getAttrs(atts, function(myval) {
|
||
var gyropenroll="";
|
||
var gyropen=0;
|
||
if ( myval["gyro-on"] == 1 ) {
|
||
gyropen=4;
|
||
gyropenroll = "{{gyropen=" + gyropen + "}}";
|
||
}
|
||
const combatused= parseInt(myval["combatpool-used"]);
|
||
const myweapon= myval[myrepeat.concat("name")];
|
||
const myreach= myval[myrepeat.concat("reach")];
|
||
const mydamage= myval[myrepeat.concat("damage")];
|
||
const mypower= myval[myrepeat.concat("power")];
|
||
const myskill= myval[myrepeat.concat("skill")];
|
||
const myspec= myval[myrepeat.concat("specialized")];
|
||
const mynotes= myval[myrepeat.concat("notes")];
|
||
var armorpen=0;
|
||
var myroll="&{template:attack}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}{{weapondamage=" + mydamage + "}}";
|
||
if ( quicknesslinked.includes(myskill) ) {
|
||
console.log('quick pen');
|
||
armorpen=myval["armor-quickness-pen"];
|
||
console.log(armorpen);
|
||
myroll+= "{{armorpen=@{armor-quickness-pen}}}";
|
||
}
|
||
calcDice="[[ " + myskill + " + " + myspec + " + ?{Combat Pool Dice}]]";
|
||
calcTN="[[ {2,(4 + @{meleeTN} + " + gyropen + " + ( ( @{target|Target|meleereach|max} - " + myreach + ") * ?{Use Reach Modifier?} ) + " + armorpen + ")}kh1 ]]";
|
||
myroll+= "{{weaponpower=[[" + mypower + "]]}}{{combatpool=[[?{Combat Pool Dice|0}]]}}"
|
||
myroll+= "{{charreach=[[@{meleereach|max}]]}}{{targetreach=[[@{target|Target|meleereach|max}]]}}"
|
||
myroll+="{{weaponname=" + myweapon + "}}{{reachmod=[[?{Use Reach Modifier?|Yes,1|No,0}]]}}"
|
||
myroll+="{{reachbonus=[[(@{target|Target|meleereach|max} - " + myreach + ") * ?{Use Reach Modifier?}]]}}"
|
||
myroll+="{{rolldice=" + calcDice + "}}{{targetnumber=" + calcTN + "}}"
|
||
myroll+="{{attacktest=[[" + calcDice + "d6>" + calcTN + "!! ]] }}"
|
||
myroll += "{{meleemods=@{meleeTN}}}";
|
||
myroll += gyropenroll;
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
var reachmodtxt="Reach Bonus Applied" ;
|
||
if ( results.results.reachmod.result == 0 ) reachmodtxt="Reach Bonus Not Applied";
|
||
finishRoll( results.rollId, {
|
||
reachmod: reachmodtxt,
|
||
});
|
||
atts["combatpool-used"] = results.results.combatpool.result + combatused;
|
||
setAttrs(atts);
|
||
});
|
||
});
|
||
});
|
||
|
||
on('clicked:repeating_explosives:rangedattack', (info) => {
|
||
var setatts={};
|
||
var scatter="";
|
||
var atts=["combatpool-used", "controlpool-used"];
|
||
var rounds=1;
|
||
var expint=0;
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
var mymode=info["htmlAttributes"]["id"]
|
||
const scatimg="https://raw.githubusercontent.com/bahornbeck/img/master/images/scatterdiagram";
|
||
const weaponattrs=["damage", "power", "name", "ammoremain", "skill", "wfamily", "specialized", "targeting", "recoilcomp", "gyro", "ammo", "scatter", "blast","scatterredux", "missleint", "tnmods"] ;
|
||
weaponattrs.forEach(myatt=>{
|
||
atts.push(myrepeat.concat(myatt));
|
||
});
|
||
getAttrs(atts, function(myval) {
|
||
const combatused= parseInt(myval["combatpool-used"]);
|
||
const controlused= parseInt(myval["controlpool-used"]);
|
||
const myweapon= myval[myrepeat.concat("name")];
|
||
const wdmg= myval[myrepeat.concat("damage")];
|
||
const ammoremain= myval[myrepeat.concat("ammoremain")];
|
||
const gyro= myval[myrepeat.concat("gyro")];
|
||
const targetaim= myval[myrepeat.concat("targeting")];
|
||
const tnmods= myval[myrepeat.concat("tnmods")];
|
||
var dmgnumber= damagetable[wdmg];
|
||
var range="{{range=?{Range|Short,4|Medium,5|Long,6|Extreme,9}}}";
|
||
var missleintel=0;
|
||
var calcTN;
|
||
if ( mymode=="sensorexp") {
|
||
range="";
|
||
missleintel=myval[myrepeat.concat("missleint")] || 0;
|
||
expint="{{expint=[[" + missleintel + "]]}}"
|
||
calcTN="[[ @{target|Target|signature} + ?{Urban Environment?|Yes,2|No,0} + @{wp-char}";
|
||
poolname="Combat";
|
||
pool="combatpool";
|
||
} else if ( mymode=="vehicle-sensorexp" ) {
|
||
range="";
|
||
missleintel=myval[myrepeat.concat("missleint")] || 0;
|
||
expint="{{expint=[[" + missleintel + "]]}}"
|
||
calcTN="[[ @{target|Target|signature} + ?{Urban Environment?|Yes,2|No,0} + @{wp-vehicle} + @{gunnery-test-los}";
|
||
poolname="Control";
|
||
pool="controlpool";
|
||
} else if ( mymode=="vehicle-explosive" ) {
|
||
calcTN = "[[ ?{Range} + @{rangedTN} + @{target|Target|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + @{wp-vehicle}";
|
||
poolname="Control";
|
||
pool="controlpool";
|
||
} else {
|
||
poolname="Combat";
|
||
pool="combatpool";
|
||
calcTN = "[[ ?{Range} + @{rangedTN} + @{target|Target|targetMove} + {0,( @{move} - " + gyro + ") }kh1 + " + targetaim + " + @{wp-char}";
|
||
}
|
||
let direction=getRandomInt(1, 7);
|
||
const myskill=myval[myrepeat.concat("skill")];
|
||
const myscat=myval[myrepeat.concat("scatter")];
|
||
const myblast=myval[myrepeat.concat("blast")];
|
||
const myredux=myval[myrepeat.concat("scatterredux")];
|
||
const specialized=myval[myrepeat.concat("specialized")] || 0;
|
||
if (ammoremain <= 0 ) {
|
||
roll="&{template:info}{{character=@{character_name}}}{{action=Attack: " + myweapon + "}}{{type=Simple}}{{info1=Out of Explosives }}";
|
||
startRoll(roll, (results) => {
|
||
finishRoll( results.rollId,{});
|
||
});
|
||
} else {
|
||
var calcDice = "[[ " + myskill + " + " + specialized + " + ?{" + poolname + " Pool Dice|0} + " + missleintel + " ]]"
|
||
calcTN += " + ?{Additional Modifiers|" + tnmods + "} ]]"
|
||
var roll="&{template:explosive}{{myname=@{character_name}}}{{target=@{target|Target|token_name}}}" + range
|
||
roll += "{{rolldice=" + calcDice + "}}{{targetnumber=[[{2,( " + calcTN + ")}kh1]]}}";
|
||
roll += "{{weapondamage=" + myval[myrepeat.concat("damage")] + "}}";
|
||
roll += "{{weaponpower=" + myval[myrepeat.concat("power")] + "}}" + expint;
|
||
if ( ( mymode=="vehicle-explosive" ) || ( mymode=="vehicle-sensorexp") ) roll += "{{controlpool=[[?{Control Pool Dice|0}]]}}";
|
||
else roll += "{{combatpool=[[?{Combat Pool Dice|0}]]}}";
|
||
roll += "{{weaponname=" + myval[myrepeat.concat("name")] + "}}";
|
||
roll += "{{attacktest=[[ " + calcDice + "d6>[[ {2, ( " + calcTN + ")}kh1 ]]!! ]] }}";
|
||
roll += "{{scatdir=[[1d6]]}}{{scatter=[[" + myscat + "d6]]}}{{blastradius=" + myblast ;
|
||
roll += "}}{{scatterredux=" + myredux + "}}{{scatdirnumber=[[" + direction ;
|
||
roll += "]]}}{{scatdir=" + scatimg + direction + ".png}}";
|
||
roll += "{{resist=[Resist Explosive](~selected|resist-impact-normal)}}";
|
||
console.log(roll);
|
||
startRoll(roll, (results) => {
|
||
var myscatter = results.results.scatter.result;
|
||
const mysuccess = results.results.attacktest.result;
|
||
console.log('start scatter: ' + myscatter);
|
||
console.log('successes: ' + mysuccess);
|
||
myscatter = myscatter - ( mysuccess * myredux) - missleintel;
|
||
if ( myscatter < 0 ) myscatter=0;
|
||
finishRoll( results.rollId,
|
||
{
|
||
scatter: myscatter,
|
||
}
|
||
);
|
||
if (( mymode=="vehicle-explosive" ) || ( mymode=="vehicle-sensorexp")) setatts["controlpool-used"] = results.results.controlpool.result + controlused;
|
||
else setatts["combatpool-used"] = results.results.combatpool.result + combatused;
|
||
setatts[myrepeat.concat("ammoremain")]=ammoremain - 1;
|
||
setAttrs(setatts);
|
||
});
|
||
}
|
||
});
|
||
});
|
||
|
||
|
||
const loadattributes=[ "body", "quickness", "strength", "charisma", "willpower", "intelligence", "perception", "reaction", "initiative"];
|
||
const critteratts=[ "perception", "attacks", "force", "reach"];
|
||
const weaponskills=[ "clubs", "assaultrifles", "cyberimplant", "edged", "gunnery", "heavyweapons", "lasers", "launchers", "pistols", "poles", "projectiles", "rifles", "shotguns", "smgs", "whips", "throwing", "demolitions", "underwatercombat", "unarmed" ]
|
||
const magicskills=["sorcery", "spellcasting", "spelldefense","dispelling","astralcombat", "ritualsorcery", "conjuring", "summoning", "banishing", "spiritcontrol","aurareading", "areadauras", "areadsignatures","areadsorcery"]
|
||
const sorceryspec=["spellcasting", "spelldefense","dispelling","astralcombat", "ritualsorcery"];
|
||
const conjuringspec=["summoning", "banishing", "spiritcontrol"];
|
||
const auraspec=["aurareading", "areadauras", "areadsignatures","areadsorcery"];
|
||
const deckspec=["hardware", "decking", "programming"];
|
||
const vehiclespec=["vehicle-type", "vehicle-size", "handling-street", "handling-offroad", "speed-rating", "acceleration", "body", "armor", "signature", "autonav", "pilot", "firmpoints", "hardpoints", "seating", "entry", "fuel", "economy", "cargo", "load", "vehicle-skill", "gunnery", "ivis-pool", "totalcost", "driver", "rigger"];
|
||
const vehiclespec2=[{"type": "vehicle-type"}, {"size": "vehicle-size"}, {"street": "handling-street"}, {"offroad": "vehicle-offroad"}, {"speed": "speed-rating"}, {"skill": "vehicle-skill"}];
|
||
const rangedatts=["name", "skill", "conceal", "short", "medium", "long", "extreme", "ammo", "power", "damage", "specialized", "modes", "recoilcomp", "gyro", "targeting", "notes"]
|
||
const meleeatts=["name", "skill", "conceal", "power", "damage", "specialized", "reach", "notes"]
|
||
const explosiveatts=["name", "skill", "conceal", "short", "medium", "long", "extreme", "ammo", "power", "damage", "specialized", "modes", "recoilcomp", "gyro", "targeting", "notes", "missleint", "blast", "scatter", "rangefinder"]
|
||
const gearatts=["name", "quantity", "weight", "rating", "description"];
|
||
const decklist=["mpcp", "bod", "evasion", "masking", "sensors"];
|
||
const deckopts=["hardening", "activemem", "storagemem", "response", "iccm", "offlinestorage"];
|
||
const utillist=["sleaze" , "track", "utility", "armor", "cloak", "lockon", "medic", "blackhammer", "killjoy", "slow"];
|
||
const spellatts=["name", "specialized", "force", "type", "range", "target", "damage", "drain", "drainlvl", "description"];
|
||
const cyberatts=["name", "rating", "essence", "notes"];
|
||
const bioatts=["name", "rating", "index", "notes"];
|
||
const critterpoweratts=["name", "description"];
|
||
|
||
on("clicked:jsonimport-char", function(){
|
||
getAttrs(["jsonnpc"], function(myval) {
|
||
npc=JSON.parse(myval["jsonnpc"]);
|
||
console.log(npc);
|
||
loadCharacter(npc);
|
||
});
|
||
});
|
||
|
||
var loadCharacter = function (npc) {
|
||
getAttrs(["jsonnpc"], function(myval) {
|
||
var atts={};
|
||
repeatskills=[];
|
||
npc=JSON.parse(myval["jsonnpc"]);
|
||
console.log(npc);
|
||
if ( npc["skills"] ) { var skills = npc["skills"]; } else { var skills = [];}
|
||
if ( npc["vehicles"] ) { var vehicles = npc["vehicles"]; } else { var vehicles = [];}
|
||
if ( npc["spells"] ) { var spells = npc["spells"]; } else { var spells = [];}
|
||
if ( npc["cyberware"] ) { var cyberware = npc["cyberware"]; } else { var cyberware = [];}
|
||
if ( npc["bioware"] ) { var bioware = npc["bioware"]; } else { var bioware = [];}
|
||
if ( npc["nanotech"] ) { var nanotech = npc["nanotech"]; } else { var nanotech = [];}
|
||
if ( npc["gear"] ) { var gear = npc["gear"]; } else { var gear = [];}
|
||
if ( npc["weaknesses"] ) { var weaknesses = npc["weaknesses"]; } else { var weaknesses = [];}
|
||
if ( npc["powers"] ) { var powers = npc["powers"]; } else { var powers = [];}
|
||
if ( npc["foci"] ) { var foci = npc["foci"]; } else { var foci = [];}
|
||
if ( npc["cyberdeck"] ) { var cyberdeck = npc["cyberdeck"]; } else { var cyberdeck = {};}
|
||
if ( npc["utilities"] ) { var utilities = npc["utilities"]; } else { var utilities = [];}
|
||
if ( npc["armor"] ) { var armorsets = npc["armor"]; } else { var armorsets = [];}
|
||
if ( npc["ranged"] ) { var ranged = npc["ranged"]; } else { var ranged = [];}
|
||
if ( npc["melee"] ) { var melee = npc["melee"]; } else { var melee = [];}
|
||
if ( npc["explosives"] ) { var explosives = npc["explosives"]; } else { var explosives = [];}
|
||
if ( npc["character_name"] ) atts["character_name"]=npc["character_name"] ;
|
||
if ( npc["metatype"] ) { atts["metatype"]=npc["metatype"] ; } else { atts["metatype"]="Human";}
|
||
if ( npc["vcr"] ) atts["vcr"]=npc["vcr"];
|
||
if ( npc["magic"] ) atts["magic"]=npc["magic"];
|
||
if ( npc["essense"] ) { atts["essense"]=npc["essense"]; } else { atts["essense"]=6;}
|
||
|
||
console.log('loading attributes');
|
||
loadattributes.forEach(myatt=>{
|
||
let max=myatt.concat("_max");
|
||
let mod=myatt.concat("-mods");
|
||
if(npc[myatt]) atts[myatt]=npc[myatt];
|
||
if(npc[mod]) atts[mod]=npc[mod];
|
||
if(npc[max]) atts[mod]=npc[max] - npc[myatt];
|
||
if(npc[max] == 'initiative_max') console.log('initme' + npc[max]);
|
||
});
|
||
console.log('loading critter attributes');
|
||
critteratts.forEach(myatt=>{
|
||
if (npc[myatt]) {
|
||
if (myatt == "attacks") {
|
||
myattack=npc[myatt].split('');
|
||
atts["attackdamage"]=myattack.pop();
|
||
atts["attackpower"]=parseInt(myattack.join(''));
|
||
} else if (myatt="reach"){
|
||
atts["meleereach"]=npc[myatt];
|
||
} else {
|
||
atts[myatt]=npc[myatt];
|
||
}
|
||
}
|
||
});
|
||
|
||
console.log('loading skills');
|
||
skills.forEach(skill=>{
|
||
let myskill = skill["name"].toLowerCase();
|
||
if ( weaponskills.includes(myskill) ) {
|
||
|
||
atts[myskill] = skill["rating"];
|
||
} else if (magicskills.includes(myskill)) {
|
||
if ( sorceryspec.includes(myskill)) atts["sorcery-spec-switch"]=1;
|
||
if ( conjuringspec.includes(myskill)) atts["conjuring-spec-switch"]=1;
|
||
if ( auraspec.includes(myskill)) atts["auraread-spec-switch"]=1;
|
||
atts[myskill] = skill["rating"];
|
||
} else if (atts[myskill]=="decking") {
|
||
atts[myskill] = skill["rating"];
|
||
} else if ( deckspec.includes(myskill)) {
|
||
atts["deck-spec-switch"]=1;
|
||
atts[myskill] = skill["rating"];
|
||
} else {
|
||
repeatskills.push(skill);
|
||
|
||
}
|
||
});
|
||
console.log('loading armor');
|
||
armorsets.forEach(armor=>{
|
||
console.log(armor);
|
||
var newrowid = generateRowID();
|
||
atts["repeating_armor_" + newrowid + "_armorname"] = armor["name"];
|
||
atts["repeating_armor_" + newrowid + "_ballistic"] = armor["ballistic"];
|
||
atts["repeating_armor_" + newrowid + "_impact"] = armor["impact"];
|
||
if ( armor["equipped"] == true ) atts["repeating_armor_" + newrowid + "_equipped"] = "on";
|
||
|
||
});
|
||
console.log('loading ranged');
|
||
ranged.forEach(weapon=>{
|
||
var newrowid = generateRowID();
|
||
let pre="@{";
|
||
let post="}";
|
||
let mycheck="check";
|
||
console.log('adding ranged weapon ' + weapon["name"]);
|
||
rangedatts.forEach(myatt=>{
|
||
if (weapon[myatt]) {
|
||
if ( myatt=="skill" ) {
|
||
atts["repeating_rangedweapons_" + newrowid + "_" + myatt ] = pre.concat(weapon[myatt].concat(post));
|
||
console.log('ranged skill' + pre.concat(weapon[myatt].concat(post)) );
|
||
} else if (myatt=="modes") {
|
||
console.log('adding ranged weapon modes');
|
||
weapon[myatt].forEach(firemode=>{
|
||
atts["repeating_rangedweapons_" + newrowid + "_" + firemode.concat(mycheck) ] = 1;
|
||
});
|
||
} else {
|
||
console.log('adding ranged weapon ' + weapon["name"] + ' attribute ' + myatt + ' value ' + weapon[myatt]);
|
||
atts["repeating_rangedweapons_" + newrowid + "_" + myatt ] = weapon[myatt];
|
||
}
|
||
}
|
||
});
|
||
atts["repeating_rangedweapons_" + newrowid + "_showweaponmod"] = 1;
|
||
});
|
||
console.log('loading explosives');
|
||
explosives.forEach(weapon=>{
|
||
var newrowid = generateRowID();
|
||
let pre="@{";
|
||
let post="}";
|
||
explosiveatts.forEach(myatt=>{
|
||
if (weapon[myatt]) {
|
||
if ( myatt=="skill" ) {
|
||
atts["repeating_explosives_" + newrowid + "_" + myatt ] = pre.concat(weapon[myatt].concat(post));
|
||
} else {
|
||
atts["repeating_explosives_" + newrowid + "_" + myatt ] = weapon[myatt];
|
||
}
|
||
}
|
||
});
|
||
});
|
||
console.log('loading melee weapons');
|
||
melee.forEach(weapon=>{
|
||
var newrowid = generateRowID();
|
||
let pre="@{";
|
||
let post="}";
|
||
meleeatts.forEach(myatt=>{
|
||
if (weapon[myatt]) {
|
||
if ( myatt=="skill" ) {
|
||
atts["repeating_melee_" + newrowid + "_" + myatt ] = pre.concat(weapon[myatt].concat(post));
|
||
} else {
|
||
atts["repeating_melee_" + newrowid + "_" + myatt ] = weapon[myatt];
|
||
}
|
||
}
|
||
});
|
||
});
|
||
console.log('loading skills ');
|
||
repeatskills.forEach(skill=>{
|
||
var newrowid = generateRowID();
|
||
atts["repeating_skills_" + newrowid + "_skillname"] = skill["name"];
|
||
atts["repeating_skills_" + newrowid + "_skillrating"] = skill["rating"];
|
||
});
|
||
|
||
console.log('loading spells ');
|
||
spells.forEach(spell=>{
|
||
var newrowid = generateRowID();
|
||
spellatts.forEach(myatt=>{
|
||
if (spell[myatt]) {
|
||
atts["repeating_spells_" + newrowid + "_" + myatt ] = spell[myatt];
|
||
}
|
||
});
|
||
|
||
});
|
||
console.log('loading foci ');
|
||
foci.forEach(myfoci=>{
|
||
var newrowid = generateRowID();
|
||
atts["repeating_foci_" + newrowid + "_fociname"] = myfoci["name"];
|
||
atts["repeating_foci_" + newrowid + "_type"] = myfoci["specialized"] || "E";
|
||
atts["repeating_foci_" + newrowid + "_qty"] = myfoci["qty"] ||0 ;
|
||
atts["repeating_foci_" + newrowid + "_power"] = myfoci["force"] || 0;
|
||
});
|
||
|
||
vehicles.forEach(car=>{
|
||
var newrowid = generateRowID();
|
||
atts["repeating_vehicles_" + newrowid + "_name"] = car["name"];
|
||
atts["repeating_vehicles_" + newrowid + "_cost"] = car["cost"] ||0 ;
|
||
if (car["model"]) atts["repeating_vehicles_" + newrowid + "_model"] = car["model"];
|
||
if (car["notes"]) atts["repeating_vehicles_" + newrowid + "notes"] = car["notes"];
|
||
});
|
||
|
||
cyberware.forEach(ware=>{
|
||
var newrowid = generateRowID();
|
||
cyberatts.forEach(myatt=>{
|
||
if (ware[myatt]) {
|
||
atts["repeating_cyberware_" + newrowid + "_cyberware-" + myatt] = ware[myatt];
|
||
}
|
||
});
|
||
});
|
||
nanotech.forEach(nano=>{
|
||
var newrowid = generateRowID();
|
||
cyberatts.forEach(myatt=>{
|
||
if (nano[myatt]) {
|
||
atts["repeating_nanotech_" + newrowid + "_nanotech-" + myatt ] = nano[myatt];
|
||
}
|
||
});
|
||
});
|
||
|
||
bioware.forEach(bio=>{
|
||
var newrowid = generateRowID();
|
||
bioatts.forEach(myatt=>{
|
||
if (bio[myatt]) {
|
||
atts["repeating_bioware_" + newrowid + "_bioware-" + myatt ] = bio[myatt];
|
||
}
|
||
});
|
||
});
|
||
|
||
gear.forEach(item=>{
|
||
var newrowid = generateRowID();
|
||
gearatts.forEach(myatt=>{
|
||
if (item[myatt]) {
|
||
atts["repeating_gear_" + newrowid + "_" + myatt ] = item[myatt];
|
||
}
|
||
});
|
||
});
|
||
powers.forEach(power=>{
|
||
var newrowid = generateRowID();
|
||
critterpoweratts.forEach(myatt=>{
|
||
if (power[myatt]) {
|
||
atts["repeating_critter-powers_" + newrowid + "_" + myatt ] = power[myatt];
|
||
}
|
||
});
|
||
});
|
||
weaknesses.forEach(weak=>{
|
||
console.log('weak:'+ weak);
|
||
var newrowid = generateRowID();
|
||
critterpoweratts.forEach(myatt=>{
|
||
if (weak[myatt]) {
|
||
atts["repeating_critter-weaknesses_" + newrowid + "_" + myatt ] = weak[myatt];
|
||
}
|
||
});
|
||
});
|
||
|
||
var deckp="deck-";
|
||
var decks="-max";
|
||
for (const [key, value] of Object.entries(cyberdeck)) {
|
||
console.log('key is ' + key);
|
||
if ( decklist.includes(key)) {
|
||
let atutil = deckp.concat(key.concat(decks));
|
||
atts[atutil]=value;
|
||
} else if ( deckopts.includes(key)) {
|
||
let atutil = deckp.concat(key);
|
||
atts[atutil]=value;
|
||
}
|
||
};
|
||
utilities.forEach(util=>{
|
||
let myutil = util["name"].toLowerCase();
|
||
if ( utillist.includes(myutil)) {
|
||
let pre="deck";
|
||
let rat="-rating";
|
||
let mul="-multiplier";
|
||
let size="-multiplier";
|
||
let myrat=pre.concat(myutil.concat(rat));
|
||
let mymul=pre.concat(myutil.concat(mul));
|
||
let mysize=pre.concat(myutil.concat(size));
|
||
|
||
if (util["rating"]) atts[myrat]=util["rating"];
|
||
if (util["multiplier"]) atts[mymul]=util["multiplier"];
|
||
if (util["size"]) atts[mysize]=util["size"];
|
||
}
|
||
else {
|
||
var newrowid = generateRowID();
|
||
atts["repeating_deck-utilities_" + newrowid + "_utility"] = util["name"];
|
||
atts["repeating_deck-utilities_" + newrowid + "_rating"] = util["rating"] || 0;
|
||
atts["repeating_deck-utilities_" + newrowid + "_target"] = util["target"] || "matrixaccess";
|
||
atts["repeating_deck-utilities_" + newrowid + "_multiplier"] = util["multiplier"] || 1;
|
||
atts["repeating_deck-utilities_" + newrowid + "_size"] = util["size"] || 0;
|
||
}
|
||
});
|
||
|
||
vehiclespec.forEach(myatt=>{
|
||
if ( npc[myatt]) atts[myatt]=npc[myatt];
|
||
});
|
||
for (const [key, value] of Object.entries(vehiclespec2)) {
|
||
if ( npc[key]) atts[value]=npc[key];
|
||
|
||
};
|
||
|
||
console.log(repeatskills);
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
|
||
};
|
||
|
||
|
||
const switchbuttons1 = ["securitysheaf", "astralattributes", "sorceryskills", "spells", "adeptpowers", "magicinitiate", "foci", "geas", "totem", "combatskills", "cyberware", "deckingskills", "bioware", "gear", "contacts"];
|
||
const switchbuttons2 = ["gunnery","deck-utilities-","deck-skills-", "deck-cyberdeck-", "drones-skills-", "drones-models-", "vehicle-skills-", "drone-list-", "ic-", "rc-deck-" ];
|
||
const switchbuttons = switchbuttons1.concat(switchbuttons2)
|
||
switchbuttons.forEach(button => {
|
||
let mybutton=button.concat('switch');
|
||
on(`clicked:${mybutton}`, function() {
|
||
console.log(mybutton)
|
||
getAttrs([mybutton], function(myval){
|
||
if (myval[mybutton] == "show") {
|
||
setAttrs({[mybutton]: "hide"});
|
||
} else {
|
||
setAttrs({[mybutton]: "show"});
|
||
}
|
||
});
|
||
|
||
});
|
||
});
|
||
|
||
on("clicked:show-hide", (info) => {
|
||
const myid=info["htmlAttributes"]["id"]
|
||
console.log('clicked ' + myid);
|
||
getAttrs([myid], function(myval) {
|
||
if (myval[myid] == "show") setAttrs({[myid]: "hide"});
|
||
else setAttrs({[myid]: "show"});
|
||
});
|
||
});
|
||
|
||
const vehicleskills=["bike","car","hovercraft", "motorboat", "sailboat", "submarine", "wingedaircraft", "tracks", "semiballistic", "lta", "rotor", "ship", "vectoredthrust", "mecharm", "suborbital", "walkers"];
|
||
let vchangelist="";
|
||
let vonprefix=" change:";
|
||
let vonsuffix="-specialize";
|
||
let vattrs=[];
|
||
vehicleskills.forEach(skill => {
|
||
let myvonchange = vonprefix.concat(skill.concat(vonsuffix));
|
||
vchangelist += myvonchange;
|
||
});
|
||
on(vchangelist, function(eventinfo) {
|
||
var mybase=eventinfo["sourceAttribute"].split("-")[0]
|
||
var myspec=eventinfo["sourceAttribute"];
|
||
var myremote=mybase.concat("-remote")
|
||
vattrs.push(mybase);
|
||
vattrs.push(myspec);
|
||
console.log(vattrs);
|
||
getAttrs(vattrs, function(myval) {
|
||
if (myval[myspec] == 0) {
|
||
console.log('setting ' + myremote + ' to ' + myval[mybase]);
|
||
setAttrs({[myremote]: myval[mybase]});
|
||
}
|
||
});
|
||
});
|
||
|
||
const deckutilrepeat=["deck-utilities", "offensiveutils", "defensiveutils"]
|
||
const utilitylist=["decksleaze", "decktrack", "deckarmor", "deckcloak", "deckmedic", "decklockon", "deckattack", "deckblackhammer", "deckkilljoy", "deckslow"];
|
||
let changelist="change:deckattack-multiplier";
|
||
let onprefix=" change:";
|
||
let onsuffix="-rating";
|
||
utilitylist.forEach(util => {
|
||
let myonchange = onprefix.concat(util);
|
||
myonchange = myonchange.concat("-rating");
|
||
changelist += myonchange;
|
||
});
|
||
on(changelist, function(eventinfo) {
|
||
let myutil=eventinfo["sourceAttribute"].split("-")[0];
|
||
var myrating=myutil.concat("-rating");
|
||
var mymulti=myutil.concat("-multiplier");
|
||
var mysize=myutil.concat("-size");
|
||
getAttrs([myrating, mymulti], function(myval) {
|
||
let r = parseInt(myval[myrating]);
|
||
let m = parseInt(myval[mymulti]);
|
||
let s = (r * r) * m;
|
||
setAttrs({[mysize]: s});
|
||
});
|
||
});
|
||
|
||
const personalist=["deck-mpcp", "deck-bod", "deck-evasion", "deck-sensors", "deck-masking", "deck-detection"];
|
||
let pchangelist="sheet:opened change:deck-realityfilter change:deck-icsuppresspool change:deck-icsuppressed";
|
||
let ponprefix=" change:";
|
||
var pgetatts=["deck-realityfilter","deck-icsuppressed","deck-icsuppresspool", "hackingpool-used"];
|
||
personalist.forEach(p => {
|
||
pchangelist += ponprefix.concat(p.concat("-max"));
|
||
pchangelist += ponprefix.concat(p.concat("-mods"));
|
||
pgetatts.push(p.concat("-max"));
|
||
pgetatts.push(p.concat("-mods"));
|
||
});
|
||
on(pchangelist, function() {
|
||
console.log('deck-mpcp change');
|
||
getAttrs(pgetatts, function(myval) {
|
||
sets={};
|
||
console.log(myval);
|
||
console.log(myval["deck-realityfilter"]);
|
||
var hp = parseInt(myval["hackingpool"]);
|
||
var hackpool= hp || 0;
|
||
var mysuppress=parseInt(myval["deck-icsuppressed"]);
|
||
sets["deck-mpcp-final"] = parseInt(myval["deck-mpcp-max"]) + parseInt(myval["deck-mpcp-mods"]) - parseInt(myval["deck-realityfilter"]);
|
||
sets["deck-bod-final"] = parseInt(myval["deck-bod-max"]) + parseInt(myval["deck-bod-mods"]);
|
||
sets["deck-sensors-final"] = parseInt(myval["deck-sensors-max"]) + parseInt(myval["deck-sensors-mods"]);
|
||
sets["deck-evasion-final"] = parseInt(myval["deck-evasion-max"]) + parseInt(myval["deck-evasion-mods"]);
|
||
sets["deck-masking-final"] = parseInt(myval["deck-masking-max"]) + parseInt(myval["deck-masking-mods"]);
|
||
if ( myval["deck-icsuppresspool"] == 1) {
|
||
sets["hackingpool-icsuppress"] = mysuppress;
|
||
sets["deck-detection-final"] = parseInt(myval["deck-detection-max"]) + parseInt(myval["deck-detection-mods"]);
|
||
} else {
|
||
sets["deck-detection-final"] = parseInt(myval["deck-detection-max"]) + parseInt(myval["deck-detection-mods"]) - mysuppress;
|
||
}
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
|
||
|
||
|
||
});
|
||
|
||
on("change:frame-initiative change:frame-core", function () {
|
||
getAttrs(["frame-initiative", "frame-core"], function(myval) {
|
||
|
||
var mycore = parseInt(myval["frame-core"]);
|
||
var myinit = parseInt(myval["frame-initiative"] + 1 );
|
||
setAttrs({"deck-mpcp-max": mycore, "deck-reaction-final": mycore, "deck-initiative": myinit });
|
||
});
|
||
|
||
});
|
||
var utilsizechange;
|
||
const cprefix=" change:repeating_";
|
||
deckutilrepeat.forEach(p => {
|
||
utilsizechange += cprefix.concat(p.concat(":multiplier"));
|
||
utilsizechange += cprefix.concat(p.concat(":size"));
|
||
utilsizechange += cprefix.concat(p.concat(":rating"));
|
||
});
|
||
on(utilsizechange, function(info) {
|
||
console.log(info);
|
||
getAttrs(["repeating_deck-utilities_rating", "repeating_deck-utilities_multiplier"], function(myval) {
|
||
let r = parseInt(myval["repeating_deck-utilities_rating"]);
|
||
let m = parseInt(myval["repeating_deck-utilities_multiplier"]);
|
||
let s = (r * r) * m;
|
||
let myattr = "repeating_deck-utilities_size";
|
||
setAttrs({[myattr]: s});
|
||
});
|
||
});
|
||
|
||
|
||
on("change:matrixsecurityrating", function() {
|
||
console.log('change of sec rating');
|
||
getAttrs(["matrixsecurityrating"], function(myval) {
|
||
let sr = parseInt(myval["matrixsecurityrating"]);
|
||
setAttrs({"deck-bod-max":sr, "deck-evasion-max":sr, "deck-masking-max":sr, "deck-sensors-max":sr, "deck-mpcp-max":sr, "deck-detection-max":sr});
|
||
});
|
||
});
|
||
|
||
var deckchangelist;
|
||
utilitylist.forEach(p => {
|
||
deckchangelist += ponprefix.concat(p.concat("-loaded"));
|
||
deckchangelist += ponprefix.concat(p.concat("-size"));
|
||
deckchangelist += ponprefix.concat(p.concat("-rating"));
|
||
});
|
||
deckutilrepeat.forEach(p => {
|
||
const utilatts=["loaded", "size", "rating"];
|
||
deckchangelist += " change:repeating_" + p + ":loaded";
|
||
deckchangelist += " change:repeating_" + p + ":size";
|
||
deckchangelist += " change:repeating_" + p + ":rating";
|
||
|
||
});
|
||
on(deckchangelist, function(info) {
|
||
var myatts=["deck-utilitypayload", "deck-activemem", "deck-util-size-loaded", "deck-util-rating-loaded"];
|
||
console.log(info);
|
||
myold=info["previousValue"];
|
||
mynew=info["newValue"];
|
||
var myattrib;
|
||
var myrepeat;
|
||
var mybase;
|
||
var mysizeattr;
|
||
var myloadattr;
|
||
var myratingattr;
|
||
if (info["sourceAttribute"].includes("repeating_")) {
|
||
mybase=info["sourceAttribute"].split("_");
|
||
myattrib=mybase.pop();
|
||
myrepeat=mybase.join('_');
|
||
mysizeattr=myrepeat.concat("_size");
|
||
myloadattr=myrepeat.concat("_loaded");
|
||
myratingattr=myrepeat.concat("_rating");
|
||
myratingfinal=myrepeat.concat("_rating-final");
|
||
} else {
|
||
mybase=info["sourceAttribute"].split("-");
|
||
myattrib=mybase.pop();
|
||
myrepeat=mybase;
|
||
mysizeattr=myrepeat +"-size";
|
||
myloadattr=myrepeat + "-loaded";
|
||
myratingattr=myrepeat + "-rating";
|
||
myratingfinal=myrepeat + "-rating-final";
|
||
}
|
||
myatts.push(mysizeattr, myloadattr, myratingattr, );
|
||
console.log('myatt: ' + myattrib);
|
||
console.log('myrepeat: ' + myrepeat);
|
||
console.log(myatts);
|
||
|
||
if (myattrib.includes("loaded")) console.log('change load');
|
||
if (myattrib.includes("rating")) console.log('change rating');
|
||
if (myattrib.includes("size")) console.log('change size');
|
||
getAttrs(myatts, function(myval){
|
||
var newsize;
|
||
var newratings;
|
||
setatts=[];
|
||
const currentsize=parseInt(myval["deck-util-size-loaded"]);
|
||
const currentrat=parseInt(myval["deck-util-rating-loaded"]);
|
||
if ( myattrib == "loaded" ) {
|
||
if ( myval[myloadattr] == 1 ) {
|
||
console.log('loading utility ' + myrepeat);
|
||
newsize=currentsize + parseInt(myval[mysizeattr]);
|
||
newratings=currentrat + parseInt(myval[myratingattr]);
|
||
setatts[myratingfinal]=parseInt(myval[myratingattr]);
|
||
} else {
|
||
console.log('un-loading utility ' + myrepeat);
|
||
newsize=currentsize - parseInt(myval[mysizeattr]);
|
||
newratings=currentrat - parseInt(myval[myratingattr]);
|
||
setatts[myratingfinal]=0;
|
||
}
|
||
} else if ( myattrib == "size" ) {
|
||
if ( myval[myloadattr] == 1 ) {
|
||
newsize = currentsize + ( parseInt(myval[mysizeattr]) - parseInt(myold));
|
||
console.log('change of size ' + myrepeat + ' from: ' + myold + ' to: ' + myval[mysizeattr]);
|
||
}
|
||
} else if ( myattrib == "rating") {
|
||
if ( myval[myloadattr] == 1 ) {
|
||
newratings = currentrat + ( parseInt(myval[myratingattr]) - parseInt(myold));
|
||
console.log('change of rating ' + myrepeat + ' from: ' + myold + ' to: ' + myval[myratingattr]);
|
||
}
|
||
} else {
|
||
console.log('invalid event');
|
||
}
|
||
console.log('debug size' + newsize);
|
||
console.log('debug rating' + newratings);
|
||
if (newsize != null) setatts["deck-util-size-loaded"]=newsize;
|
||
if (newratings != null) setatts["deck-util-rating-loaded"]=newratings;
|
||
|
||
console.log('setatts');
|
||
console.log(setatts);
|
||
setAttrs(setatts);
|
||
});
|
||
|
||
});
|
||
|
||
on("change:deck-systemrating change:matrix-iconstatus change:deck-activemem change:deck-utilitypayload change:deck-util-size-loaded change:deck-util-rating-loaded", function() {
|
||
getatts=["deck-systemrating", "matrix-iconstatus", "deck-activemem", "deck-utilitypayload", "deck-util-size-loaded", "deck-util-rating-loaded"];
|
||
getAttrs(getatts, function(myval) {
|
||
let myoverloaded = 0;
|
||
let myratingoload = 0;
|
||
if ( parseInt(myval["deck-util-size-loaded"]) > parseInt(myval["deck-activemem"]) ) {
|
||
myoverloaded=1;
|
||
}
|
||
if ( parseInt(myval["deck-util-rating-loaded"]) > parseInt(myval["deck-utilitypayload"]) ) {
|
||
myratingoload=1;
|
||
}
|
||
console.log('load:' + myoverloaded);
|
||
setAttrs({"deck-mem-overloaded": myoverloaded, "deck-util-overloaded": myratingoload});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:deck-systemrating change:matrix-iconstatus", function() {
|
||
getAttrs(["deck-systemrating","matrix-iconstatus"], function(myval) {
|
||
sets={};
|
||
var mytn=0;
|
||
const rating=myval["deck-systemrating"].toUpperCase();
|
||
const icon=myval["matrix-iconstatus"];
|
||
if ( rating != "UNKNOWN") sets["deck-tn"]=matrixtn[rating][icon];
|
||
if ( icon == "Legitimate") sets["iconstatuscode"]=0;
|
||
else sets["iconstatuscode"]=1;
|
||
console.log(sets)
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
on("change:matrixcode", function() {
|
||
console.log('matrixsecuritynumber')
|
||
getAttrs(["matrixcode"], function (myvar) {
|
||
const rating=myvar["matrixcode"].toUpperCase();
|
||
sets={};
|
||
sets["matrixsecuritynumber"]=matrixtn[rating]["secrating"];
|
||
console.log(sets)
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
|
||
on("change:deckattacklevel", function() {
|
||
const multipliers={L:2, M:3, S:4, D:5};
|
||
getAttrs(["deckattacklevel"], function(myval) {
|
||
const mylevel=myval["deckattacklevel"];
|
||
console.log('test level: ' + multipliers[mylevel]);
|
||
setAttrs({"deckattack-multiplier": multipliers[mylevel]});
|
||
});
|
||
});
|
||
|
||
on('clicked:repeating_ic:combat', (info) => {
|
||
const mytitle=info["htmlAttributes"]["title"]
|
||
const myid=info["htmlAttributes"]["id"]
|
||
gets=["matrixcode"];
|
||
var source=info['sourceAttribute'].split('_');
|
||
var sourceattr=source.pop();
|
||
var myrepeat=source.join('_').concat('_');
|
||
gets.push(myrepeat.concat("icrating"));
|
||
gets.push(myrepeat.concat("ictargettest"));
|
||
gets.push(myrepeat.concat("icname"));
|
||
gets.push(myrepeat.concat("ictype"));
|
||
gets.push(myrepeat.concat("ic-penalty"));
|
||
gets.push(myrepeat.concat("matrix-iconstatus"));
|
||
getAttrs(gets, function (myval) {
|
||
var myatt="@{target|Target|deck-evasion-final}";
|
||
const name=myval[myrepeat.concat("icname")];
|
||
const ictype=myval[myrepeat.concat("ictype")];
|
||
console.log('ictype ' + ictype);
|
||
const penalty=parseInt(myval[myrepeat.concat("ic-penalty")]);
|
||
const targeticon=myval[myrepeat.concat("matrix-iconstatus")];
|
||
var icmode="proactive";
|
||
if ( iclist["reactive"].includes(ictype)) {
|
||
icmode="reactive";
|
||
}
|
||
const code=myval["matrixcode"].toUpperCase();
|
||
const rating=parseInt(myval[myrepeat.concat("icrating")]);
|
||
var ictest=myval[myrepeat.concat("ictargettest")];
|
||
var targetatt="bod";
|
||
if ( (icmode="proactive") && (ictest.includes("target")) ) targetatt=ictest.split("-")[1];
|
||
const attacktn =matrixtn[code][targeticon];
|
||
if ( icmode=="proactive" ) ictest=attacktn;
|
||
if ( ictype == "Probe" ) {
|
||
console.log('probe!');
|
||
ictest="@{target|decker|deck-detection-final}";
|
||
}
|
||
const payload = {
|
||
power: rating,
|
||
attribute: "deck-" + targetatt + "-final",
|
||
attacktype: ictype
|
||
};
|
||
var target="{{target=@{target|Target|token_name}}}";
|
||
if ( mytitle == "Evade Detection" ) myatt = "@{target|Target|deck-sensors-final}";
|
||
if ( mytitle == "IC Resist" ) myatt = "?{Power of Attack?|2}";
|
||
if ( mytitle == "IC Resist" ) target = "{{target=" + name + "}}";
|
||
if ( mytitle == "IC Execute" ) {
|
||
myatt = ictest;
|
||
console.log('myatt ' + myatt);
|
||
target="{{target=@{target|decker|token_name}}}";
|
||
}
|
||
var calcTN= myatt + " +?{Miscellaneous Modifiers|0} + " + penalty;
|
||
var calcDice="@{matrixsecurityrating}"
|
||
if (( ictype == "Probe") || (ictype == "Scramble")) calcDice=rating;
|
||
if (( ictype == "Tar Baby") || (ictype == "Tar pit")) calcDice=rating;
|
||
var myroll="&{template:matrix}{{myname=" + name + "}}";
|
||
myroll+=target;
|
||
myroll+="{{senddata=[[0]]}}";
|
||
myroll+="{{rolldice=[[" + calcDice + "]]}}{{targetnumber=[[" + calcTN + "]]}}";
|
||
myroll+="{{action=" + mytitle + "}}"
|
||
myroll+="{{roll= [[ [[" + calcDice + "]]d6>[[ {2,(" + calcTN + ")}kh1]]!! ]] }}"
|
||
console.log(myroll);
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId,
|
||
{
|
||
senddata: rollEscape.escape(payload),
|
||
});
|
||
});
|
||
});
|
||
|
||
});
|
||
|
||
on("clicked:deck-utilities-unloadall", function() {
|
||
utilatts=[];
|
||
utilrepeatatts=[];
|
||
offenserepeatatts=[];
|
||
defenserepeatatts=[];
|
||
utilitylist.forEach(util=>{
|
||
let myattr=util.concat("-loaded");
|
||
utilatts[myattr]=0;
|
||
});
|
||
console.log('utilatts');
|
||
console.log(utilatts);
|
||
setAttrs(utilatts);
|
||
/* setAttrs(utilatts); */
|
||
deckutilrepeat.forEach(rsection=>{
|
||
getSectionIDs(rsection, function(idarray) {
|
||
console.log(rsection);
|
||
var myatts=[];
|
||
idarray.forEach((m, id) => {
|
||
let myrepeat="repeating_" + rsection +"_" + m + "_loaded";;
|
||
myatts[myrepeat]=0;
|
||
});
|
||
console.log(rsection);
|
||
console.log(myatts);
|
||
setAttrs(myatts);
|
||
});
|
||
});
|
||
var finalatts=[];
|
||
finalatts["deck-util-size-loaded"]=0;
|
||
finalatts["deck-util-rating-loaded"]=0;
|
||
setAttrs(finalatts);
|
||
|
||
});
|
||
|
||
|
||
on("sheet:opened change:eccm-fluxmod change:rcdeck-fluxmod", function() {
|
||
getAttrs(["eccm-fluxmod", "rcdeck-fluxmod"], function (myval) {
|
||
const mysystems = ["eccm", "rcdeck"];
|
||
myset={};
|
||
var myrange=0;
|
||
mysystems.forEach(mysys => {
|
||
let mod = mysys.concat("-fluxmod");
|
||
let range = mysys.concat("-range");
|
||
let myflux = (myval[mod])
|
||
if ( myflux == 0 ) myrange=.25;
|
||
if ( myflux == 1 ) myrange=1;
|
||
if ( myflux == 2 ) myrange=2;
|
||
if ( myflux == 3 ) myrange=4;
|
||
if ( myflux == 4 ) myrange=6;
|
||
if ( myflux == 5 ) myrange=9;
|
||
if ( myflux == 6 ) myrange=12;
|
||
if ( myflux == 7 ) myrange=16;
|
||
if ( myflux == 8 ) myrange=20;
|
||
if ( myflux == 9 ) myrange=25;
|
||
if ( myflux >= 10 ) myrange= ( 2 * myflux ) + 10;
|
||
myset[range] = myrange;
|
||
});
|
||
setAttrs(myset);
|
||
|
||
});
|
||
});
|
||
|
||
on("change:sensors-rating change:body change:sonar-rating change:ecm-rating change:eccm-rating change:ed-rating change:ecd-rating", function(){
|
||
getAttrs(["sensors-rating", "body", "sonar-rating", "ecm-rating", "eccm-rating", "ed-rating", "ecd-rating"], function (myval) {
|
||
var sensorflux = Math.ceil(parseInt(myval["sensors-rating"]) *1.5);
|
||
var sensormax = sensorflux + Math.floor(parseInt(myval["body"])/2);
|
||
var sonarflux = Math.ceil(parseInt(myval["sonar-rating"]) *1.5);
|
||
var sonarmax = sonarflux + Math.floor(parseInt(myval["body"])/2);
|
||
var ecmflux = Math.ceil(parseInt(myval["ecm-rating"]) *1.5);
|
||
var ecmmax = ecmflux + Math.floor(parseInt(myval["body"])/2);
|
||
var eccmflux = Math.ceil(parseInt(myval["eccm-rating"]) *1.5);
|
||
var eccmmax = eccmflux + Math.floor(parseInt(myval["body"])/2);
|
||
var edflux = Math.ceil(parseInt(myval["ed-rating"]) *1.5);
|
||
var edmax = edflux + Math.floor(parseInt(myval["body"])/2);
|
||
var ecdflux = Math.ceil(parseInt(myval["ecd-rating"]) *1.5);
|
||
var ecdmax = ecdflux + Math.floor(parseInt(myval["body"])/2);
|
||
setAttrs({"sensors-flux": sensorflux, "sensors-fluxmax": sensormax, "ecm-flux": ecmflux, "ecm-fluxmax": ecmmax, "eccm-flux": eccmflux, "eccm-fluxmax": eccmmax, "ed-flux": edflux, "ed-fluxmax": edmax, "ecd-flux": ecdflux, "ecd-fluxmax": ecdmax, "sonar-flux": sonarflux, "sonar-fluxmax": sonarmax, "sensors-fluxmod": sensorflux, "sonar-fluxmod": sonarflux, "ecm-fluxmod": ecmflux, "eccm-fluxmod": eccmflux, "ed-fluxmod": edflux, "ecd-fluxmod": ecdflux});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:sensors-fluxmod change:sonar-fluxmod change:ecm-fluxmod change:eccm-fluxmod change:ed-fluxmod change:ecd-fluxmod change:body change:ecd-enabled", function () {
|
||
getAttrs(["sensors-fluxmod", "sonar-fluxmod", "ecm-fluxmod", "eccm-fluxmod", "ed-fluxmod", "ecd-fluxmod", "sensors-flux", "sonar-flux", "ecm-flux", "eccm-flux", "ed-flux", "ecd-flux", "body", "ecd-enabled"], function (myval) {
|
||
var overload=0;
|
||
var sensor=Math.max(0,myval["sensors-fluxmod"] - myval["sensors-flux"] );
|
||
var sonar=Math.max(0,myval["sonar-fluxmod"] - myval["sonar-flux"] );
|
||
var ecm=Math.max(0,myval["ecm-fluxmod"] - myval["ecm-flux"] );
|
||
var eccm=Math.max(0,myval["eccm-fluxmod"] - myval["eccm-flux"] );
|
||
var ed=Math.max(0,myval["ed-fluxmod"] - myval["ed-flux"] );
|
||
var ecd=Math.max(0,myval["ecd-fluxmod"] - myval["ecd-flux"] );
|
||
var total=sensor + sonar + ecm + eccm + ed + ecd;
|
||
var maxflux = parseInt(myval["body"]) - parseInt(myval["ecd-enabled"]);
|
||
if ( total > maxflux ) overload=1;
|
||
setAttrs({"vehicle-fluxtotal": total, "vehicle-flux-max": maxflux, "vehicle-flux-overload": overload});
|
||
});
|
||
});
|
||
|
||
on("change:vehicle-autonav change:autonav", function(){
|
||
getAttrs(["vehicle-autonav", "autonav"], function (myval) {
|
||
var autonav=0;
|
||
if (myval["vehicle-autonav"] == "0") autonav=0;
|
||
if (myval["vehicle-autonav"] == "1") autonav=myval["autonav"];
|
||
setAttrs({"driving-test-autonav": autonav});
|
||
});
|
||
});
|
||
on("change:vehicle-offroad change:handling-street change:handling-offroad", function(){
|
||
getAttrs(["vehicle-offroad", "handling-street", "handling-offroad"], function (myval) {
|
||
var handling=0;
|
||
if (myval["vehicle-offroad"] == "0") handling=myval["handling-street"];
|
||
if (myval["vehicle-offroad"] == "1") handling=myval["handling-offroad"];
|
||
console.log('handling set to ' + handling);
|
||
setAttrs({"handling": handling});
|
||
});
|
||
});
|
||
|
||
on("change:vehicle-size", function(){
|
||
getAttrs(["vehicle-size"], function (myval) {
|
||
var size=0;
|
||
if (myval["vehicle-size"] == "Large") size=2;
|
||
if (myval["vehicle-size"] == "Extra-Large") size=3;
|
||
setAttrs({"driving-test-size": size});
|
||
});
|
||
});
|
||
|
||
on("change:rigger", function(){
|
||
getAttrs(["rigger"], function (myval) {
|
||
var mydriver="@{";
|
||
mydriver=mydriver.concat(myval["rigger"]);
|
||
mydriver=mydriver.concat("|");
|
||
setAttrs({"vehicle-driver": mydriver});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:vehicle-urban change:gunnery-test-los", function () {
|
||
getAttrs(["vehicle-urban", "gunnery-test-los"], function(myval) {
|
||
var sensorgun=(myval["vehicle-urban"] * 2 ) + myval["gunnery-test-los"];
|
||
console.log('sensor gunnery tn mods' + sensorgun);
|
||
setAttrs({"sensor-gunnery-tn": sensorgun });
|
||
});
|
||
});
|
||
|
||
on("change:speed-current change:speed-rating change:vehicle-penalty", function() {
|
||
getAttrs(["speed-current", "speed-rating", "vehicle-penalty"], function(myval) {
|
||
let speed=parseInt(myval["speed-current"]);
|
||
let speedrating=parseInt(myval["speed-rating"]);
|
||
var kph = Math.ceil(speedrating * 1.2);
|
||
var sp = Math.floor(speed / 10);
|
||
var exceed=0;
|
||
if (myval["vehicle-penalty"] == "2") speedrating=Math.ceil(speedrating*0.75);
|
||
if (myval["vehicle-penalty"] == "3") speedrating=Math.ceil(speedrating*0.50);
|
||
if (speed > speedrating ) {
|
||
exceed=1;
|
||
} else {
|
||
exceed=0;
|
||
}
|
||
let maxspeed=speedrating*1.5;
|
||
setAttrs({"speed-points": sp, "speed-kph": kph, "speed-exceeding": exceed, "speed-max": maxspeed});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:vehicle-skill change:gunnery change:drone_mode change:pilot", function() {
|
||
getAttrs(["gunnery", "pilot", "drone_mode", "vehicle-skill"], function(myval) {
|
||
var mygunnery=myval["gunnery"];
|
||
var myskill=myval["vehicle-skill"];
|
||
if ( myval["drone_mode"] == "secondary" ) {
|
||
mygunnery=myval["pilot"];
|
||
myskill=myval["pilot"];
|
||
}
|
||
console.log('setting weapon skill to gunnery');
|
||
setAttrs({"weaponskill": mygunnery, "vehicle-skill-final": myskill});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:rcdeck-intrusion-mods change:ewarfare", function () {
|
||
getAttrs(["rcdeck-intrusion-mods", "ewarfare"], function (myval) {
|
||
let myfinal=parseInt(myval["rcdeck-intrusion-mods"]) + parseInt(myval["ewarfare"]);
|
||
setAttrs({"rcdeck-intrusion-factor": myfinal});
|
||
});
|
||
});
|
||
|
||
on("change:sensor-los", function(){
|
||
getAttrs(["sensor-los"], function (myval) {
|
||
var st=0;
|
||
switch (myval["sensor-los"]) {
|
||
case "direct":
|
||
var st=-2;
|
||
var gt=-3;
|
||
break;
|
||
case "interupted":
|
||
var st=0;
|
||
var gt=0;
|
||
break;
|
||
}
|
||
setAttrs({"sensor-test-los": st, "gunnery-test-los": gt});
|
||
});
|
||
});
|
||
|
||
on("change:vehicle-type", function(){
|
||
getAttrs(["vehicle-type"], function (myval) {
|
||
var vp=0;
|
||
if ( myval["vehicle-type"] == "Car/Pickup Truck" ) vp=0 ;
|
||
if ( myval["vehicle-type"] == "Fighter Jet" ) vp=20 ;
|
||
if ( myval["vehicle-type"] == "Heavy Truck" ) vp=-5 ;
|
||
if ( myval["vehicle-type"] == "Helicopter" ) vp=5 ;
|
||
if ( myval["vehicle-type"] == "Hovercraft" ) vp=2 ;
|
||
if ( myval["vehicle-type"] == "HSCT/Suborbital" ) vp=-15 ;
|
||
if ( myval["vehicle-type"] == "Large Airplane" ) vp=-5 ;
|
||
if ( myval["vehicle-type"] == "LAV/T-bird" ) vp=10 ;
|
||
if ( myval["vehicle-type"] == "Limousine/Light Truck/Van" ) vp=-3 ;
|
||
if ( myval["vehicle-type"] == "LTA/Zeppelin" ) vp=-10 ;
|
||
if ( myval["vehicle-type"] == "Motorcycle" ) vp=5 ;
|
||
if ( myval["vehicle-type"] == "Racing Boat" ) vp=5 ;
|
||
if ( myval["vehicle-type"] == "Semiballistic" ) vp=-25 ;
|
||
if ( myval["vehicle-type"] == "Small Airplane" ) vp=0;
|
||
if ( myval["vehicle-type"] == "Small Motorboat" ) vp=0 ;
|
||
if ( myval["vehicle-type"] == "Sports Car" ) vp=3 ;
|
||
if ( myval["vehicle-type"] == "Tracked Vehicle" ) vp=-3 ;
|
||
if ( myval["vehicle-type"] == "Tractor Trailer" ) vp=-7 ;
|
||
if ( myval["vehicle-type"] == "Train/Monorail" ) vp=-10 ;
|
||
if ( myval["vehicle-type"] == "Ultra-light Aircraft" ) vp=10 ;
|
||
if ( myval["vehicle-type"] == "Yacht" ) vp=-10 ;
|
||
setAttrs({"vehicle-points": vp});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:vcr", function() {
|
||
getAttrs(["reaction", "vcr"], function(myval) {
|
||
let myr = parseInt(myval["reaction"]) + (2 * parseInt(myval["vcr"]));
|
||
let myi = 1 + parseInt(myval["vcr"]);
|
||
setAttrs({"vcr-reaction": myr, "vcr-initiative": myi});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:vehicle-interface", function(){
|
||
getAttrs(["vehicle-interface"], function (myval) {
|
||
var react=0;
|
||
var init=0;
|
||
var action=0;
|
||
var dt=0;
|
||
const vi=myval["vehicle-interface"];
|
||
console.log(vi);
|
||
const interfaces={
|
||
none: { react: 0, init: 0, action: 0, dt: 0},
|
||
datajack: { react: 1, init: 0, action: 0, dt: 1 },
|
||
vcr: { react: "(@{vehicle-driver}vcr} * 2)", init: "@{vehicle-driver}vcr}", action: "(@{vehicle-driver}vcr} * 2)", dt: "@{vehicle-driver}vcr}" }
|
||
};
|
||
console.log('interfaces test: ' + interfaces[vi]["react"]);
|
||
switch (myval["vehicle-interface"]) {
|
||
case "none":
|
||
var react=0;
|
||
var init=0;
|
||
var action=0;
|
||
var dt=0;
|
||
break;
|
||
case "datajack":
|
||
var react=1;
|
||
var init=0;
|
||
var dt=1;
|
||
break;
|
||
case "vcr":
|
||
var react="(@{vehicle-driver}vcr} * 2)";
|
||
var init="@{vehicle-driver}vcr}";
|
||
var action="(@{vehicle-driver}vcr} * 2)";
|
||
var dt="@{vehicle-driver}vcr}";
|
||
break;
|
||
}
|
||
setAttrs({"vehicle-reactbonus":react, "vehicle-initbonus":init, "vehicle-actionbonus":action, "driving-test-interface": dt});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:weather", function(){
|
||
getAttrs(["weather"], function (myval) {
|
||
var dt=0;
|
||
var st=0;
|
||
switch (myval["weather"]) {
|
||
case "Bad":
|
||
var dt=2;
|
||
var st=1;
|
||
break;
|
||
case "Terrible":
|
||
var dt=4;
|
||
var st=1;
|
||
break;
|
||
case "Windy":
|
||
var dt=2;
|
||
break;
|
||
case "Snow":
|
||
var dt=2;
|
||
var st=1;
|
||
break;
|
||
case "Rain":
|
||
var dt=2;
|
||
var st=1;
|
||
break;
|
||
case "Fog":
|
||
var dt=2;
|
||
var st=1;
|
||
break;
|
||
case "Smog":
|
||
var dt=2;
|
||
var st=1;
|
||
break;
|
||
case "Heavy Wind":
|
||
var dt=4;
|
||
break;
|
||
case "ThunderStorm":
|
||
var dt=4;
|
||
var st=1;
|
||
break;
|
||
}
|
||
setAttrs({"driving-test-weather": dt, "sensor-test-weather": st});
|
||
});
|
||
});
|
||
|
||
on("change:terrain", function(){
|
||
getAttrs(["terrain"], function (myval) {
|
||
var [dt, st, tp, ab, pos, ram, hide, relo, crash]=[0,0,0,0,0,0,0,0,0];
|
||
switch (myval["terrain"]) {
|
||
case "Open":
|
||
var dt=-1;
|
||
var tp=0;
|
||
var ab=-1;
|
||
var pos=-1;
|
||
var ram=-1;
|
||
var hide=4;
|
||
var relo=-3;
|
||
var crash=-1;
|
||
var mg=0;
|
||
break;
|
||
case "Normal":
|
||
var dt=0;
|
||
var tp=-2;
|
||
var ab=0;
|
||
var pos=0;
|
||
var ram=0;
|
||
var hide=2;
|
||
var relo=-1;
|
||
var crash=0;
|
||
var mg=0;
|
||
break;
|
||
case "Restricted":
|
||
var dt=1;
|
||
var tp=-4;
|
||
var ab=1;
|
||
var pos=1;
|
||
var ram=1;
|
||
var hide=0;
|
||
var relo=0;
|
||
var crash=2;
|
||
var mg=2;
|
||
break;
|
||
case "Tight":
|
||
var dt=3;
|
||
var st=1;
|
||
var tp=-10;
|
||
var ab=3;
|
||
var pos=3;
|
||
var ram=2;
|
||
var hide=-2;
|
||
var relo=3;
|
||
var crash=4;
|
||
var mg=3;
|
||
break;
|
||
}
|
||
setAttrs({"driving-test-terrain": dt, "sensor-test-terrain": st, "driving-ab-terrain": ab, "driving-position-terrain": pos, "driving-ram-terrain": ram, "driving-hide-terrain": hide, "driving-relocate-terrain": relo, "driving-crash-terrain": crash, "terrain-points": tp, "terrain-manual-gunnery": mg});
|
||
});
|
||
});
|
||
|
||
on("clicked:vehicleset", function(){
|
||
getAttrs(["vehicle-rapid-attributes"], function (myval) {
|
||
const [hand, speed, accel, body, armor, sig, auto, pilot, sensor, cargo, load] = myval["vehicle-rapid-attributes"].split(" ")
|
||
var [on, off] = hand.split("/");
|
||
if (off == null ) off =on;
|
||
setAttrs({"handling-street": on, "handling-offroad": off, "speed-rating": speed, "acceleration": accel, "body": body, "armor": armor, "signature": sig, "autonav": auto, "pilot": pilot, "sensors-rating": sensor, "cargo": cargo, "load": load });
|
||
console.log('on is ' + on + ' off is ' + off)
|
||
});
|
||
|
||
});
|
||
|
||
|
||
on("clicked:matrixsystemset", function(){
|
||
getAttrs(["matrixsystemset"], function (myval) {
|
||
setmatrixsystem(myval["matrixsystemset"]);
|
||
});
|
||
});
|
||
|
||
var setmatrixsystem = function (rating) {
|
||
console.log(rating);
|
||
atts=[];
|
||
const [mycode, myrating] = rating.split("-")
|
||
console.log('mycode:' + mycode + ' myrating ' + myrating);
|
||
let finalcode = mycode.toUpperCase()
|
||
const [system, access, control, index, files, slave ] = myrating.split("/")
|
||
atts["character_name"]=rating;
|
||
atts["matrixcode"]=finalcode;
|
||
atts["matrixsecurityrating"]=system;
|
||
atts["matrixcontrolrating"]=control;
|
||
atts["matrixindexrating"]=index;
|
||
atts["matrixfilesrating"]=files;
|
||
atts["matrixslaverating"]=slave;
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
};
|
||
|
||
on("sheet:opened", function(){
|
||
getAttrs(["first_time"], function(myval){
|
||
if (myval.first_time != "false") {
|
||
console.log('running firstime');
|
||
updatevisionmods("Human");
|
||
updateWoundPenalty();
|
||
updateStunPenalty();
|
||
updateVisionTNs();
|
||
updatepools();
|
||
updatePenalty("vehicle");
|
||
updatePenalty("rccommand");
|
||
updatePenalty("rcsystem");
|
||
updatePenalty("rcsimsense");
|
||
updatePenalty("matrix");
|
||
setupdefaults();
|
||
setattributelimits("Human")
|
||
setAttrs({first_time: "false"});
|
||
}
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:sorcery-spec-switch change:conjuring-spec-switch change:auraread-spec-switch change:sorcery change:conjuring change:aurareading", function()
|
||
{
|
||
getAttrs(["sorcery-spec-switch", "conjuring-spec-switch", "auraread-spec-switch", "sorcery", "conjuring", "aurareading"], function(myval) {
|
||
if ( parseInt(myval["sorcery-spec-switch"]) == 0 ) {
|
||
setAttrs({spellcasting: parseInt(myval.sorcery), spelldefense: parseInt(myval.sorcery),dispelling: parseInt(myval.sorcery),astralcombat: parseInt(myval.sorcery), ritualsorcery:parseInt(myval.sorcery)});
|
||
}
|
||
if ( parseInt(myval["conjuring-spec-switch"]) == 0 ) {
|
||
setAttrs({summoning: parseInt(myval.conjuring), banishing: parseInt(myval.conjuring),spiritcontrol: parseInt(myval.conjuring)});
|
||
}
|
||
if ( parseInt(myval["auraread-spec-switch"]) == 0 ) {
|
||
setAttrs({areadauras: parseInt(myval.aurareading),areadsignatures: parseInt(myval.aurareading),areadsorcery: parseInt(myval.aurareading),areadconjuring: parseInt(myval.aurareading)});
|
||
}
|
||
});
|
||
});
|
||
|
||
|
||
on("change:deck-spec-switch change:computer", function()
|
||
{
|
||
getAttrs(["deck-spec-switch", "computer"], function(myval) {
|
||
console.log(myval);
|
||
if ( parseInt(myval["deck-spec-switch"]) == 0 ) {
|
||
console.log('not specialized')
|
||
setAttrs({hardware: parseInt(myval.computer), decking: parseInt(myval.computer),programming: parseInt(myval.computer)});
|
||
}
|
||
});
|
||
});
|
||
|
||
|
||
on("change:metatype", function(){
|
||
getAttrs(["metatype"], function(myval){
|
||
console.log(myval.metatype)
|
||
updatevisionmods(myval.metatype);
|
||
setattributelimits(myval.metatype);
|
||
});
|
||
});
|
||
|
||
on("change:visionenhancement", function(){
|
||
getAttrs(["metatype", "visionenhancement"], function(myval){
|
||
console.log(myval.visionenhancement)
|
||
if (myval.visionenhancement == "None" ) {
|
||
var vision=(myval.metatype)
|
||
} else {
|
||
var vision=(myval.visionenhancement)
|
||
}
|
||
updatevisionmods(vision);
|
||
});
|
||
});
|
||
|
||
on("change:body change:body-mods", function(){
|
||
getAttrs([ "body","body-mods"], function(myval) {
|
||
let final_body = parseInt(myval.body) + parseInt(myval["body-mods"])
|
||
setAttrs({body_max: final_body, bodymax: final_body})
|
||
});
|
||
});
|
||
on("change:intelligence change:intelligence-mods", function(){
|
||
getAttrs([ "intelligence","intelligence-mods"], function(myval) {
|
||
let final_int = parseInt(myval.intelligence) + parseInt(myval["intelligence-mods"])
|
||
setAttrs({intelligence_max: final_int, intmax: final_int})
|
||
});
|
||
});
|
||
on("change:willpower change:willpower-mods", function(){
|
||
getAttrs([ "willpower","willpower-mods"], function(myval) {
|
||
let final_will = parseInt(myval.willpower) + parseInt(myval["willpower-mods"])
|
||
setAttrs({willpower_max: final_will, willmax: final_will})
|
||
});
|
||
});
|
||
on("change:charisma change:charisma-mods", function(){
|
||
getAttrs([ "charisma","charisma-mods"], function(myval) {
|
||
let final_char = parseInt(myval.charisma) + parseInt(myval["charisma-mods"])
|
||
setAttrs({charisma_max: final_char, charmax: final_char})
|
||
});
|
||
});
|
||
on("change:quickness change:quickness-mods", function(){
|
||
getAttrs([ "quickness","quickness-mods"], function(myval) {
|
||
let final_quickness = parseInt(myval.quickness) + parseInt(myval["quickness-mods"])
|
||
setAttrs({quickness_max: final_quickness, agilitymax: final_quickness})
|
||
});
|
||
});
|
||
on("change:strength change:strength-mods", function(){
|
||
getAttrs([ "strength","strength-mods"], function(myval) {
|
||
let final_str = parseInt(myval.strength) + parseInt(myval["strength-mods"])
|
||
setAttrs({strength_max: final_str, strmax: final_str})
|
||
});
|
||
});
|
||
|
||
on("change:meleereach change:metatype", function () {
|
||
getAttrs(["meleereach", "metatype"], function (myval) {
|
||
var meleemods=0;
|
||
if ( myval["metatype"] == "Troll" ) meleemods=1;
|
||
const meleemax=parseInt(myval["meleereach"]) + meleemods;
|
||
setAttrs({meleereach_max: meleemax});
|
||
});
|
||
});
|
||
|
||
on("change:repeating_rangedweapons:firemode", function(eventinfo){
|
||
getAttrs(["repeating_rangedweapons_firemode", "repeating_rangedweapons_name", "repeating_rangedweapons_targeting"], function(myval) {
|
||
const firemode=myval["repeating_rangedweapons_firemode"];
|
||
const weapon=myval["repeating_rangedweapons_name"];
|
||
const targeting=myval["repeating_rangedweapons_targeting"];
|
||
var myroll="/w gm &{template:info}{{character=@{character_name}}}{{type=Switched Weapon " + weapon + " to " + firemode + " firing mode }}";
|
||
if ( targeting == -2 ) myroll += "{{action=Free}}";
|
||
else myroll += "{{action=Simple}}";
|
||
startRoll(myroll, (results) => {
|
||
finishRoll( results.rollId);
|
||
});
|
||
});
|
||
});
|
||
on("change:repeating_rangedweapons:primary-ranged-equipped change:repeating_rangedweapons:secondary-ranged-equipped", function(eventinfo){
|
||
const myweapon=eventinfo.sourceAttribute
|
||
console.log(myweapon);
|
||
setatts=[];
|
||
var mybase=myweapon.split("_");
|
||
var myattr=mybase.pop();
|
||
const myrepeat=mybase.join('_');
|
||
const r1equipped=myrepeat.concat("_primary-ranged-equipped");
|
||
const r2equipped=myrepeat.concat("_secondary-ranged-equipped");
|
||
getatts=[myweapon, r1equipped, r2equipped, "rangedselected", "ranged2selected"]
|
||
getAttrs(getatts, function(myval) {
|
||
console.log('myatt ' + myattr);
|
||
console.log('values');
|
||
console.log(myval);
|
||
const lastused=myval["rangedselected"];
|
||
const lastused2=myval["ranged2selected"];
|
||
if (myval[myweapon] == "on") {
|
||
if ( myattr == "primary-ranged-equipped" ) {
|
||
console.log('in ranged1');
|
||
if ( myval[r2equipped] == "on" ) {
|
||
console.log('equipeed as secondary');
|
||
setatts[r2equipped]=0;
|
||
}
|
||
setatts["rangedselected"]=myweapon;
|
||
setatts[lastused]=0;
|
||
} else if ( myattr == "secondary-ranged-equipped" ) {
|
||
console.log('in ranged2');
|
||
if ( myval[r1equipped] == "on" ) {
|
||
console.log('equipeed as primary');
|
||
setatts[r1equipped]=0;
|
||
}
|
||
setatts["ranged2selected"]=myweapon;
|
||
setatts[lastused2]=0;
|
||
setatts["dualwield"]=2;
|
||
} else {
|
||
console.log('wrong event for ' + myattr);
|
||
}
|
||
console.log(setatts);
|
||
} else if ( myval[myweapon] == 0 ) {
|
||
console.log(' weapon unselected');
|
||
if (( myattr == "primary-ranged-equipped" ) && ( lastused == myweapon )) {
|
||
setatts["rangedselected"]="None";
|
||
} else if ( ( myattr == "secondary-ranged-equipped" ) && ( lastused2 == myweapon )) {
|
||
setatts["ranged2selected"]="None";
|
||
setatts["dualwield"]=0;
|
||
}
|
||
}
|
||
setAttrs(setatts);
|
||
});
|
||
});
|
||
|
||
on("change:repeating_meleeweapons:meleeequiped change:repeating_meleeweapons:2ndmeleeequiped change:unarmed-equipped change:weaponfocus-equipped", function(eventinfo){
|
||
const myweapon=eventinfo.sourceAttribute
|
||
console.log(myweapon);
|
||
setatts=[];
|
||
var getatts=["meleeselected", "melee2selected"]
|
||
if ( myweapon == "unarmed-equipped" ) {
|
||
console.log('defualt unarmed' );
|
||
getatts.push("unarmed-equipped");
|
||
getAttrs(getatts, function(myval) {
|
||
const ue = myval["unarmed-equipped"];
|
||
console.log('ue: ' + ue);
|
||
const m1 = myval["meleeselected"];
|
||
const m2 = myval["melee2selected"];
|
||
if ( ue == "on" ) {
|
||
if ( m1 != "unarmed-equipped" ) setatts[m1]=0;
|
||
if ( m2 != "unarmed-equipped" ) setatts[m2]=0;
|
||
setatts["meleeselected"]="unarmed-equipped";
|
||
setatts["melee2selected"]="unarmed-equipped";
|
||
setatts["meleereach"]=0;
|
||
setAttrs(setatts);
|
||
}
|
||
});
|
||
} else if ( myweapon == "weaponfocus-equipped" ) {
|
||
console.log('weaponfocus' );
|
||
getatts.push("weaponfocus-equipped");
|
||
getatts.push("weaponfocus-reach");
|
||
getAttrs(getatts, function(myval) {
|
||
const ue = myval["weaponfocus-equipped"];
|
||
console.log('ue: ' + ue);
|
||
const m1 = myval["meleeselected"];
|
||
const m2 = myval["melee2selected"];
|
||
if ( ue == "on" ) {
|
||
if ( m1 != "weaponfocus-equipped" ) setatts[m1]=0;
|
||
if ( m2 != "weaponfocus-equipped" ) setatts[m2]=0;
|
||
setatts["meleeselected"]="weaponfocus-equipped";
|
||
setatts["melee2selected"]="weaponfocus-equipped";
|
||
setatts["meleereach"]=myval["weaponfocus-reach"];
|
||
setAttrs(setatts);
|
||
}
|
||
});
|
||
|
||
} else {
|
||
var mybase=myweapon.split("_");
|
||
var myattr=mybase.pop();
|
||
const myrepeat=mybase.join('_');
|
||
const reach=myrepeat.concat("_reach");
|
||
const m1equipped=myrepeat.concat("_meleeequiped");
|
||
const m2equipped=myrepeat.concat("_2ndmeleeequiped");
|
||
getatts.push(myweapon, reach, m1equipped, m2equipped);
|
||
getAttrs(getatts, function(myval) {
|
||
console.log('myatt ' + myattr);
|
||
console.log('values');
|
||
console.log(myval);
|
||
const lastused=myval["meleeselected"];
|
||
const lastused2=myval["melee2selected"];
|
||
if (myval[myweapon] == "on") {
|
||
if ( myattr == "meleeequiped" ) {
|
||
console.log('in melee1');
|
||
if ( myval[m2equipped] == "on" ) {
|
||
console.log('equipeed as secondary');
|
||
setatts[m2equipped]=0;
|
||
}
|
||
setatts["meleeselected"]=myweapon;
|
||
setatts[lastused]=0;
|
||
setatts["meleereach"]=myval[reach];
|
||
} else if ( myattr == "2ndmeleeequiped" ) {
|
||
console.log('in melee2');
|
||
if ( myval[m1equipped] == "on" ) {
|
||
console.log('equipeed as primary');
|
||
setatts[m1equipped]=0;
|
||
}
|
||
setatts["melee2selected"]=myweapon;
|
||
setatts[lastused2]=0;
|
||
} else {
|
||
console.log('wrong event for ' + myattr);
|
||
}
|
||
console.log(setatts);
|
||
} else if ( myval[myweapon] == 0 ) {
|
||
console.log(' weapon unselected');
|
||
if (( myattr == "meleeequiped" ) && ( lastused == myweapon )) {
|
||
setatts["meleereach"]=0;
|
||
setatts["meleeselected"]="None";
|
||
} else if ( ( myattr == "2ndmeleeequiped" ) && ( lastused2 == myweapon )) {
|
||
setatts["melee2selected"]="None";
|
||
}
|
||
}
|
||
setAttrs(setatts);
|
||
});
|
||
}
|
||
});
|
||
|
||
on("change: change:repeating_meleeweapons:reach", function(eventinfo){
|
||
getAttrs(["repeating_meleeweapons_reach", "repeating_meleeweapons_meleeequiped"], function(myval) {
|
||
if ( myval.repeating_meleeweapons_meleeequiped == "on" ) {
|
||
setAttrs({meleereach: myval.repeating_meleeweapons_reach});
|
||
}
|
||
});
|
||
});
|
||
|
||
on("change:repeating_armor:equipped change:repeating_armor:ballistic change:repeating_armor:impact", function(eventinfo){
|
||
var sets={};
|
||
var ballistic=0;
|
||
var impact=0;
|
||
var armorval={"body-bal": [0], "body-im": [0], "helmet-bal": [0], "helmet-im": [0], "shield-bal": [0], "shield-im": [0], "ware-bal": [0], "ware-im": [0], "gyro-bal": [0], "gyro-im": [0]};
|
||
fields=["equipped", "ballistic", "impact", "slot"];
|
||
getSectionIDs("repeating_armor", idArray => {
|
||
var attrArray = idArray.reduce((m, id) => [ ...m, ...(fields.map(field => `repeating_armor_${id}_${field}`))], []);
|
||
attrArray.push("quickness_max");
|
||
getAttrs(attrArray, function(myval) {
|
||
console.log('myval');
|
||
console.log(myval);
|
||
console.log(idArray);
|
||
const myquick=parseInt(myval["quickness_max"]);
|
||
idArray.forEach(m => {
|
||
if (myval["repeating_armor_" + m + "_equipped"] == "on" ) {
|
||
let bal=myval["repeating_armor_" + m + "_slot"] + "-bal";
|
||
let imp=myval["repeating_armor_" + m + "_slot"] + "-im";
|
||
armorval[bal].push(parseInt(myval["repeating_armor_" + m + "_ballistic"]));
|
||
armorval[imp].push(parseInt(myval["repeating_armor_" + m + "_impact"]));
|
||
}
|
||
});
|
||
console.log(armorval);
|
||
let shield_bal=Math.max(...armorval["shield-bal"]);
|
||
let shield_im=Math.max(...armorval["shield-im"]);
|
||
let gyro_bal=Math.max(...armorval["gyro-bal"]);
|
||
let gyro_im=Math.max(...armorval["gyro-im"]);
|
||
let helmet_bal=Math.max(...armorval["helmet-bal"]);
|
||
let helmet_im=Math.max(...armorval["helmet-im"]);
|
||
let ware_bal= armorval["ware-bal"].reduce((a, b) => a + b, 0);
|
||
let ware_im= armorval["ware-im"].reduce((a, b) => a + b, 0);
|
||
armorval["body-bal"].sort();
|
||
armorval["body-im"].sort();
|
||
let body_bal = armorval["body-bal"].pop() + Math.floor( armorval["body-bal"].pop() / 2 );
|
||
let body_im = armorval["body-im"].pop() + Math.floor( armorval["body-im"].pop() / 2 );
|
||
ballistic= body_bal + shield_bal + helmet_bal;
|
||
impact= body_im + shield_im + helmet_im;
|
||
let ballover = ballistic - myquick;
|
||
let impactover = impact - myquick;
|
||
if ( ballover < 0 ) ballover=0;
|
||
if ( impactover < 0 ) impactover=0;
|
||
let combatpen= -1 * (Math.floor((ballover + impactover) / 2 ));
|
||
if ( gyro_bal > 0 ) sets["gyro-on"]=1;
|
||
else sets["gyro-on"]=0;
|
||
sets["ballistic"]=ballistic + ware_bal + gyro_bal;
|
||
sets["impact"]=impact + ware_im + gyro_bal;;
|
||
sets["armor-quickness-pen"]=ballover;
|
||
sets["armor-combatpool-pen"]=combatpen;
|
||
setAttrs(sets);
|
||
|
||
});
|
||
});
|
||
});
|
||
|
||
|
||
on("sheet:opened change:updateviztns change:cover change:move change:dualwield change:calledshot change:aim change:enemies change:friends change:meleetargets change:position change:misccombatmods change:stun_pen change:wound_pen change:manualgunneryTN", function() {
|
||
updateRangeTNs();
|
||
updateMeleeTNs();
|
||
});
|
||
|
||
on("change:gunnerymotion change:gunneryspeed change:gunnerymaneuver change:gunneryvehicledmg change:gunnerymount change:gunneryterrain change:gunnerytargettype", function() {
|
||
updateManualGunneryTNs();
|
||
});
|
||
|
||
on("sheet:opened change:perception change:strength change:magic change:deck-mpcp-final change:willpower change:intelligence change:quickness change:charisma change:body change:frametype change:reaction change:vcr", function() {
|
||
updatepools();
|
||
});
|
||
|
||
on("change:stun change:adeptpainres", function() {
|
||
updateStunPenalty();
|
||
});
|
||
|
||
on("change:wounds change:adeptpainres", function() {
|
||
updateWoundPenalty();
|
||
});
|
||
|
||
on("change:visionprofile change:visibility", function() {
|
||
updateVisionTNs();
|
||
});
|
||
|
||
on("change:matrix-damage change:rccommand-damage change:rcsimsense-damage change:rcsystem-damage change:vehicle-damage change:repeating_ic:ic-damage", function(eventinfo) {
|
||
let myattribute=""
|
||
console.log(eventinfo);
|
||
if ( eventinfo["sourceAttribute"].startsWith("repeating") ) {
|
||
console.log("found");
|
||
myattribute=eventinfo["sourceAttribute"].split("-").slice(0, -1).join('-');
|
||
} else {
|
||
console.log("not");
|
||
myattribute=eventinfo["sourceAttribute"].split("-")[0];
|
||
}
|
||
updatePenalty(myattribute);
|
||
|
||
});
|
||
|
||
on("change:sheettype", function(){
|
||
getAttrs(["sheettype"], function (myval) {
|
||
var myatts={};
|
||
const mysheet=myval["sheettype"];
|
||
if ((mysheet == "Vehicle") || (mysheet == "Drone")) {
|
||
myatts["sheettab"]="vehicle-attr-tab";
|
||
} else {
|
||
myatts["sheettab"]="character";
|
||
}
|
||
if ((mysheet == "Critter") || (mysheet == "Spirit")) myatts["gunneryswitch"]="hide";
|
||
if (mysheet == "Matrix") myatts["iconstatuscode"]=0;
|
||
|
||
setAttrs(myatts);
|
||
});
|
||
});
|
||
|
||
on("change:metatype change:quickness change:acceleration change:handling-street change:speed", function() {
|
||
console.log('setting running and walking rates');
|
||
getAttrs(["quickness_max", "metatype" ,"sheettype", "speed", "handling-street", "acceleration"], function (myval) {
|
||
console.log('sheet type is: ' + myval["sheettype"]);
|
||
if ( myval["sheettype"] == "Vehicle" ) {
|
||
console.log('sheet type again is: ' + myval["sheettype"]);
|
||
var mywalk = myval["acceleration"];
|
||
var myrun = Math.floor( parseInt(myval["speed"]) / parseInt(myval["handling-street"]));
|
||
} else {
|
||
var mywalk = parseInt(myval["quickness_max"])
|
||
if (myval["metatype"] == "Dwarf" ) {
|
||
var myrun = ( mywalk * 2 );
|
||
} else {
|
||
var myrun = ( mywalk * 3 );
|
||
}
|
||
}
|
||
setAttrs({walk: mywalk, run: myrun});
|
||
|
||
});
|
||
});
|
||
|
||
|
||
on("change:deck-dni change:intelligence_max change:reaction change:deck-asist change:deck-response change:deck-realityfilter", function() {
|
||
getAttrs(["deck-dni", "intelligence_max", "reaction", "deck-response", "deck-asist", "deck-realityfilter"], function (myval) {
|
||
var dnibonus=0;
|
||
var response=0;
|
||
var initiative=1;
|
||
if ((myval["deck-dni"] == "1") && (myval["deck-asist"]== "1")) {
|
||
dnibonus= myval["intelligence_max"] + 2;
|
||
} else if ((myval["deck-dni"] == "1") && (myval["deck-asist"]== "0")) {
|
||
dnibonus= myval["intelligence_max"];
|
||
} else {
|
||
dnibonus= myval["reaction"];
|
||
}
|
||
if (myval["deck-asist"] == "1" ) {
|
||
response=( dnibonus + (parseInt(myval["deck-response"]) *2 ) + ( parseInt(myval["deck-realityfilter"]) *2 ));
|
||
initiative +=(parseInt(myval["deck-response"]) + parseInt(myval["deck-realityfilter"]));
|
||
} else {
|
||
response=dnibonus;
|
||
}
|
||
|
||
console.log('reaction:' + response);
|
||
console.log('initiative:' + initiative);
|
||
setAttrs({"deck-reaction-final": response, "deck-initiative": initiative});
|
||
});
|
||
});
|
||
|
||
|
||
on("change:sorcery-defense change:spellpool-defense change:sorcery-used change:spellpool-used", function() {
|
||
getAttrs(["sorcery-defense", "spellpool", "sorcery", "spellpool-defense", "spellpool-used", "sorcery-used"], function (myval) {
|
||
atts=[];
|
||
console.log('updating defense dice');
|
||
var poolover=0;
|
||
var sorceryover=0;
|
||
let sorcery=parseInt(myval["sorcery"]);
|
||
let pool=parseInt(myval["spellpool"]);
|
||
let md=parseInt(myval["spellpool-defense"]);
|
||
let sd=parseInt(myval["sorcery-defense"]);
|
||
let mpu=parseInt(myval["spellpool-used"]);
|
||
let su=parseInt(myval["sorcery-used"]);
|
||
let sorcerytotal= sd + su;
|
||
let pooltotal= md + mpu;
|
||
if ( sorcerytotal > sorcery ) sorceryover=1;
|
||
if ( pooltotal > pool ) poolover=1;
|
||
atts["sorcery-over"]=sorceryover;
|
||
atts["spellpool-over"]=poolover;
|
||
atts["spelldefensedice"]=md + sd;
|
||
atts["sorcery-used-total"]=sd + su;
|
||
atts["spellpool-used-total"]=md + mpu;
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
|
||
});
|
||
|
||
on("sheet:opened change:deck-masking-final change:decksleaze-rating", function() {
|
||
getAttrs(["deck-masking-final", "decksleaze-rating"], function (myval) {
|
||
console.log(myval["deck-masking-final"]);
|
||
let mymask=parseInt(myval["deck-masking-final"]) || 0;
|
||
let mysleaze=parseInt(myval["decksleaze-rating"]) || 0;
|
||
let mydf = Math.ceil((mymask + mysleaze ) / 2);
|
||
setAttrs({"deck-detection-max": mydf});
|
||
});
|
||
});
|
||
|
||
on("sheet:opened change:reaction change:reaction-mods change:initiative-mods", function () {
|
||
getAttrs(["reaction", "reaction-mods", "initiative-mods", "initiative"], function (myval) {
|
||
myatts={};
|
||
myatts["reaction_max"]=parseInt(myval["reaction-mods"]) + parseInt(myval["reaction"]);
|
||
myatts["initiative_max"]=parseInt(myval["initiative-mods"]) + parseInt(myval["initiative"]);
|
||
setAttrs(myatts);
|
||
console.log(myatts);
|
||
});
|
||
});
|
||
|
||
console.log('loading explosive ranges');
|
||
const explosiveranges={
|
||
"Regular": { min: 0, short: "mystr * 3", "medium": "mystr * 5", long: "mystr * 10", extreme: "mystr * 20", scatter: 1, scatterredux: 2, skill: "@{throwing}" },
|
||
"Aerodynamic": { min:0, short: "mystr * 3", "medium": "mystr * 5", long: "mystr * 20", extreme: "mystr * 30", scatter: 2, scatterredux: 4, skill: "@{throwing}" },
|
||
"Launcher": { min: 5, short: 50, medium: 100, long: 150, extreme: 300, scatter: 3, scatterredux: 4, skill: "@{launchers}" },
|
||
"Other": { min:0, short: 0, medium: 0, long: 0, extreme: 0, scatter: 0, scatterredux: 0, skill: "@{throwing}" },
|
||
"O": { power: 10, damage: "S", blast: 1 },
|
||
"D": { power: 10, damage: "S", blast: 0.5 },
|
||
"C": { power: 12, damage: "M(stun)", blast: 1 }
|
||
|
||
};
|
||
|
||
on("change:strength_max", function() {
|
||
getSectionIDs("explosives", function(idarray) {
|
||
idarray.forEach((m, id) => {
|
||
var myrepeat="repeating_explosives_" + m;
|
||
console.log('myrepeat: ' + myrepeat);
|
||
updaeteexplosives(myrepeat);
|
||
});
|
||
});
|
||
|
||
|
||
});
|
||
|
||
on("change:hackingpool-icsuppress change:hackingpool-used change:hackingpool change:controlpool change:controlpool-used change:combatpool change:combatpool-used change:taskpool change:taskpool-used change:astralpool change:astralpool-used", function() {
|
||
getAttrs(["hackingpool-used", "hackingpool-icsuppress", "hackingpool", "controlpool", "controlpool-used", "combatpool", "combatpool-used", "taskpool", "taskpool-used", "astralpool", "astralpool-used"], function(myval) {
|
||
sets={"hackingpool-over": 0, "controlpool-over": 0, "combatpool-over": 0, "astralpool-over": 0, "taskpool-over": 0};
|
||
hackusedic=parseInt(myval["hackingpool-icsuppress"]);
|
||
hackused=parseInt(myval["hackingpool-used"]);
|
||
hackpool=parseInt(myval["hackingpool"]);
|
||
hackpoolfinal=hackused + hackusedic;
|
||
sets["hackingpool-used-total"]=hackpoolfinal;
|
||
controlused=parseInt(myval["controlpool-used"]);
|
||
controlpool=parseInt(myval["controlpool"]);
|
||
combatused=parseInt(myval["combatpool-used"]);
|
||
combatpool=parseInt(myval["combatpool"]);
|
||
taskused=parseInt(myval["taskpool-used"]);
|
||
taskpool=parseInt(myval["taskpool"]);
|
||
astralused=parseInt(myval["astralpool-used"]);
|
||
astralpool=parseInt(myval["astralpool"]);
|
||
console.log(myval);
|
||
console.log('cu: ' + combatused);
|
||
console.log('cp: ' + combatpool);
|
||
if ( taskused > taskpool ) sets["taskpool-over"]=1;
|
||
if ( astralused > astralpool ) sets["astralpool-over"]=1;
|
||
if ( combatused > combatpool ) sets["combatpool-over"]=1;
|
||
if ( controlused > controlpool ) sets["controlpool-over"]=1;
|
||
if ( hackpoolfinal > hackpool ) sets["hackingpool-over"]=1;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
});
|
||
|
||
|
||
on("change:repeating_explosives:exptype", function(eventinfo){
|
||
console.log(eventinfo)
|
||
var mybase=eventinfo["sourceAttribute"].split("_");
|
||
var myattr=mybase.pop();
|
||
const myrepeat=mybase.join('_');
|
||
console.log('mybase: ' + mybase + ' repeat: ' + myrepeat) ;
|
||
updaeteexplosives(myrepeat);
|
||
})
|
||
var updaeteexplosives = function(repeatingattr) {
|
||
const exptype=repeatingattr.concat("_exptype");
|
||
var mygetatts=[exptype]
|
||
mygetatts.push("strength_max");
|
||
getAttrs(mygetatts, function(myval) {
|
||
console.log(myval);
|
||
console.log(exptype);
|
||
console.log(repeatingattr);
|
||
const mystr=parseInt(myval.strength_max)
|
||
const etype=myval[exptype].split(":")
|
||
console.log(etype)
|
||
var atts={};
|
||
/* strenght based calcs */
|
||
console.log('strenght is ' + mystr);
|
||
atts[repeatingattr.concat("_min")]=explosiveranges[etype[0]]["min"];
|
||
atts[repeatingattr.concat("_skill")]=explosiveranges[etype[0]]["skill"];
|
||
atts[repeatingattr.concat("_short")]=eval(explosiveranges[etype[0]]["short"]);
|
||
atts[repeatingattr.concat("_medium")]=eval(explosiveranges[etype[0]]["medium"]);
|
||
atts[repeatingattr.concat("_long")]=eval(explosiveranges[etype[0]]["long"]);
|
||
atts[repeatingattr.concat("_extreme")]=eval(explosiveranges[etype[0]]["extreme"]);
|
||
atts[repeatingattr.concat("_scatter")]=explosiveranges[etype[0]]["scatter"];
|
||
atts[repeatingattr.concat("_scatterredux")]=explosiveranges[etype[0]]["scatterredux"];
|
||
atts[repeatingattr.concat("_power")]=explosiveranges[etype[1]]["power"];
|
||
atts[repeatingattr.concat("_damage")]=explosiveranges[etype[1]]["damage"];
|
||
atts[repeatingattr.concat("_blast")]=explosiveranges[etype[1]]["blast"];
|
||
console.log('setting repeating explosive atts: ');
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
};
|
||
|
||
on("change:combatpool-mods change:armor-combatpool-pen change:combatpool-base change:spellpool-mods change:spellpool-base change:hackingpool-mods change:hackingpool-base change:controlpool-mods change:controlpool-base change:astralpool-mods change:astralpool-base change:gyro-on", function () {
|
||
sets={};
|
||
atts=["combatpool-mods", "combatpool-base", "armor-combatpool-pen","spellpool-mods", "spellpool-base", "hackingpool-mods", "hackingpool-base", "controlpool-mods", "controlpool-base", "astralpool-mods", "astralpool-base", "gyro-on"]
|
||
getAttrs(atts, function (myval) {
|
||
if ( myval["gyro-on"] == 1 ) sets["combatpool"] = Math.floor(( parseInt(myval["combatpool-mods"]) + parseInt(myval["combatpool-base"]) + parseInt(myval["armor-combatpool-pen"]) ) / 2);
|
||
else sets["combatpool"] = parseInt(myval["combatpool-mods"]) + parseInt(myval["combatpool-base"]) + parseInt(myval["armor-combatpool-pen"]);
|
||
sets["spellpool"] = parseInt(myval["spellpool-mods"]) + parseInt(myval["spellpool-base"]);
|
||
sets["hackingpool"] = parseInt(myval["hackingpool-mods"]) + parseInt(myval["hackingpool-base"]);
|
||
sets["controlpool"] = parseInt(myval["controlpool-mods"]) + parseInt(myval["controlpool-base"]);
|
||
sets["hackingpool"] = parseInt(myval["hackingpool-mods"]) + parseInt(myval["hackingpool-base"]);
|
||
sets["astralpool"] = parseInt(myval["astralpool-mods"]) + parseInt(myval["astralpool-base"]);
|
||
setAttrs(sets);
|
||
console.log(sets);
|
||
});
|
||
});
|
||
|
||
|
||
var updatepools = function() {
|
||
getAttrs(["strength_max","magic","deck-mpcp-final","perception", "willpower_max","intelligence_max", "quickness_max", "charisma_max", "body_max", "frametype", "reaction", "vcr", "sheettype"], function(myval) {
|
||
var myatts={}
|
||
var myvcr = parseInt(myval.vcr);
|
||
var myperception = parseInt(myval.perception) || 0;
|
||
var myreact = parseInt(myval.reaction);
|
||
var mymagic = parseInt(myval.magic);
|
||
var mympcp = parseInt(myval["deck-mpcp-final"]);
|
||
var myagil = parseInt(myval.quickness_max);
|
||
var mystr = parseInt(myval.strength_max);
|
||
var mywill = parseInt(myval.willpower_max);
|
||
var myint = parseInt(myval.intelligence_max);
|
||
var mychar = parseInt(myval.charisma_max);
|
||
var mybody = parseInt(myval.body_max);
|
||
|
||
myatts["combatpool-base"]= Math.floor((myagil + Math.max(myint,myperception) + mywill)/2);
|
||
|
||
if (myval.sheettype != "Spirit" ) myatts["reaction"] = Math.floor((myagil + myint)/2);
|
||
if (mymagic > 0 ) {
|
||
console.log("magic is not 0");
|
||
myatts["spellpool-base"] = Math.floor((mymagic + myint + mywill)/3);
|
||
myatts["astralpool-base"] = Math.floor( (mychar + mywill + myint) /2 );
|
||
myatts["astralreaction"]= ( 20 + myval.intelligence_max);
|
||
} else if (myval.sheettype == "Spirit" ) {
|
||
myatts["spellpool-base"] = 0;
|
||
myatts["astralpool-base"] = 0;
|
||
} else {
|
||
myatts["spellpool-base"] = 0;
|
||
myatts["astralpool-base"] = 0;
|
||
myatts["astralreaction"] = 0;
|
||
}
|
||
if ( mympcp > 0 ) {
|
||
myatts["hackingpool-base"] = Math.floor( (mympcp + myint) /3 );
|
||
} else {
|
||
myatts["hackingpool-base"] = 0;
|
||
}
|
||
if (myval.frametype == "Smart Frame") {
|
||
myatts["hackingpool-base"] = 0;
|
||
}
|
||
if (myvcr > 0) {
|
||
myatts["controlpool-base"] = myreact + ( 2 * myvcr);
|
||
} else {
|
||
myatts["controlpool-base"] = 0;
|
||
}
|
||
|
||
setAttrs(myatts);
|
||
});
|
||
};
|
||
|
||
var setupdefaults = function() {
|
||
setAttrs({sheettype: "Character", targetMove: -1, charisma_max: 1, strength_max: 1, willpower_max: 1, body_max: 1, quickness_max: 1, intelligence_max: 1, attr_rangedTN: 0, attr_meleeTN: 0, attr_misccombatmods: 0, signature: 4 })
|
||
};
|
||
|
||
var updatePenalty = function(attribute) {
|
||
console.log('calculating penalty for ' + attribute)
|
||
let myatt = attribute.concat("-damage");
|
||
let mypen = attribute.concat("-penalty");
|
||
getAttrs([myatt], function(myval) {
|
||
sets={};
|
||
console.log('dmg ' + myval[myatt]);
|
||
console.log('pen ' + mypen);
|
||
var penalty = 0;
|
||
var dmg = parseInt(myval[myatt]);
|
||
if ( dmg > 10) penalty = 4;
|
||
else if (dmg > 5) penalty = 3;
|
||
else if (dmg > 2) penalty = 2;
|
||
else if (dmg > 0) penalty = 1;
|
||
sets[mypen]=penalty;
|
||
console.log(sets);
|
||
setAttrs(sets);
|
||
});
|
||
};
|
||
|
||
var updateWoundPenalty = function () {
|
||
getAttrs(["wounds","adeptpainres"], function(v) {
|
||
var penalty = 0;
|
||
var wounds = parseInt(v.wounds);
|
||
var res = parseInt(v.adeptpainres);
|
||
if (wounds > res) {
|
||
if ( wounds > 10) penalty = 4;
|
||
else if (wounds > 5) penalty = 3;
|
||
else if (wounds > 2) penalty = 2;
|
||
else if (wounds > 0) penalty = 1;
|
||
}
|
||
setAttrs({"wound_pen": penalty});
|
||
});
|
||
};
|
||
|
||
var updateStunPenalty = function () {
|
||
getAttrs(["stun","adeptpainres"], function(v) {
|
||
var penalty = 0;
|
||
var stun = parseInt(v.stun);
|
||
var res = parseInt(v.adeptpainres);
|
||
if (stun > res) {
|
||
if (stun > 10 ) penalty = 100;
|
||
else if (stun > 5) penalty = 3;
|
||
else if (stun > 2) penalty = 2;
|
||
else if (stun > 0) penalty = 1;
|
||
}
|
||
setAttrs({"stun_pen": penalty});
|
||
});
|
||
};
|
||
console.log('loading racial maxes');
|
||
const racemaximum={
|
||
"Human": {B: 6, Q: 6, S: 6, C: 6, I: 6, W: 6, Bm: 9, Qm: 9, Sm: 9, Cm: 9, Im: 9, Wm: 9 },
|
||
"Elf": {B: 6, Q: 7, S: 6, C: 8, I: 6, W: 6, Bm: 9, Qm: 11, Sm: 9, Cm: 12, Im: 9, Wm: 9 },
|
||
"Dwarf": {B: 7, Q: 6, S: 8, C: 6, I: 6, W: 7, Bm: 11, Qm: 9, Sm: 12, Cm: 9, Im: 9, Wm: 11 },
|
||
"Ork": {B: 9, Q: 6, S: 8, C: 5, I: 5, W: 6, Bm: 14, Qm: 9, Sm: 12, Cm: 8, Im: 8, Wm: 9 },
|
||
"Troll": {B: 11, Q: 5, S: 10, C: 4, I: 4, W: 6, Bm: 17, Qm: 8, Sm: 15, Cm: 6, Im: 6, Wm: 9 },
|
||
};
|
||
|
||
var setattributelimits = function(metatype) {
|
||
console.log ("setting racial limits based on metatype")
|
||
var atts={};
|
||
atts["rbodymod"]=racemaximum[metatype]["B"];
|
||
atts["rbodymax"]=racemaximum[metatype]["Bm"];
|
||
atts["rquickmod"]=racemaximum[metatype]["Q"];
|
||
atts["rquickmax"]=racemaximum[metatype]["Qm"];
|
||
atts["rstrmod"]=racemaximum[metatype]["S"];
|
||
atts["rstrmax"]=racemaximum[metatype]["Sm"];
|
||
atts["rchamod"]=racemaximum[metatype]["C"];
|
||
atts["rchamax"]=racemaximum[metatype]["Cm"];
|
||
atts["rintmod"]=racemaximum[metatype]["I"];
|
||
atts["rintmax"]=racemaximum[metatype]["Im"];
|
||
atts["rwillmod"]=racemaximum[metatype]["W"];
|
||
atts["rwillmax"]=racemaximum[metatype]["Wm"];
|
||
setAttrs(atts);
|
||
};
|
||
|
||
var updateVisionTNs = function() {
|
||
getAttrs(["visibility","fulldark", "minlight", "partiallight", "glare", "mist", "lightsmoke", "fullsmoke", "thermalsmoke", "updateviztns"], function(myval) {
|
||
switch (myval.visibility) {
|
||
case "0":
|
||
var myvisibilityRangeTn=0;
|
||
break;
|
||
case "@{fulldark}":
|
||
var myvisibilityRangeTn=parseInt(myval.fulldark);
|
||
break;
|
||
case "@{partiallight}":
|
||
var myvisibilityRangeTn=parseInt(myval.partiallight);
|
||
break;
|
||
case "@{minlight}":
|
||
var myvisibilityRangeTn=parseInt(myval.minlight);
|
||
break;
|
||
case "@{glare}":
|
||
var myvisibilityRangeTn=parseInt(myval.glare);
|
||
break;
|
||
case "@{mist}":
|
||
var myvisibilityRangeTn=parseInt(myval.mist);
|
||
break;
|
||
case "@{lightsmoke}":
|
||
var myvisibilityRangeTn=parseInt(myval.lightsmoke);
|
||
break;
|
||
case "@{fullsmoke}":
|
||
var myvisibilityRangeTn=parseInt(myval.fullsmoke);
|
||
break;
|
||
case "@{thermalsmoke}":
|
||
var myvisibilityRangeTn=parseInt(myval.thermalsmoke);
|
||
break;
|
||
}
|
||
if ( myvisibilityRangeTn == 8) {
|
||
var myvisibilityMeleeTn = 8
|
||
} else {
|
||
var myvisibilityMeleeTn = Math.floor(myvisibilityRangeTn / 2)
|
||
}
|
||
if ( myval.updateviztns == "flip" ) {
|
||
var updateflag = "flop"
|
||
} else {
|
||
var updateflag = "flip"
|
||
}
|
||
console.log(myvisibilityRangeTn)
|
||
console.log(myvisibilityMeleeTn)
|
||
setAttrs({updateviztns:updateflag, rangedvizTN: myvisibilityRangeTn, meleevizTN: myvisibilityMeleeTn});
|
||
});
|
||
};
|
||
|
||
var updatevisionmods = function(myval) {
|
||
console.log ('updating vision')
|
||
console.log(myval)
|
||
if ( (myval) == "Elf" ) {
|
||
console.log("Setting Elf")
|
||
setAttrs({visionprofile: myval, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4});
|
||
} else if ( (myval) == "Ork" ) {
|
||
console.log("Setting Ork")
|
||
setAttrs({visionprofile: myval, fulldark: 8, minlight: 2, partiallight: 0, glare: 2, mist: 0, lightsmoke: 2, fullsmoke: 4, thermalsmoke: 4});
|
||
} else if ( (myval) == "Dwarf" ) {
|
||
console.log("Setting Dwarf")
|
||
setAttrs({visionprofile: myval, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6});
|
||
} else if ( (myval) == "Troll" ) {
|
||
console.log("Setting Troll")
|
||
setAttrs({visionprofile: myval, fulldark: 2, minlight: 2, partiallight: 1, glare: 2, mist: 0, lightsmoke: 0, fullsmoke: 0, thermalsmoke: 6});
|
||
} else if ((myval) == "Human" ) {
|
||
console.log("Setting Human")
|
||
setAttrs({visionprofile: myval, fulldark: 8, minlight: 6, partiallight: 2, glare: 2, mist: 2, lightsmoke: 4, fullsmoke: 6, thermalsmoke: 4});
|
||
} else if ( (myval) == "LowLight" ) {
|
||
console.log("Setting LowLight")
|
||
setAttrs({visionprofile: myval, fulldark: 8, minlight: 4, partiallight: 1, glare: 4, mist: 2, lightsmoke: 4, fullsmoke: 6, thermalsmoke: 4});
|
||
} else if ( (myval) == "Thermal" ) {
|
||
console.log("Setting Thermal")
|
||
setAttrs({visionprofile: myval, fulldark: 4, minlight: 4, partiallight: 2, glare: 4, mist: 0, lightsmoke: 0, fullsmoke: 1, thermalsmoke: 8});
|
||
}
|
||
};
|
||
|
||
var updateMeleeTNs = function() {
|
||
getAttrs(["rangedvizTN", "meleevizTN", "cover", "move", "dualwield", "calledshot", "aim", "enemies", "friends", "meleetargets", "position", "misccombatmods", "stun_pen","wound_pen"], function(myval) {
|
||
console.log("updateMeleeTN")
|
||
targetNumberMelee = parseInt(myval.calledshot) + parseInt(myval.meleevizTN) + parseInt(myval.enemies) - parseInt(myval.friends) + parseInt(myval.misccombatmods) + ( 2 * parseInt(myval.meleetargets) ) - parseInt(myval.position) + parseInt(myval.stun_pen) + parseInt(myval.wound_pen);
|
||
console.log(targetNumberMelee)
|
||
setAttrs({meleeTN: targetNumberMelee});
|
||
});
|
||
};
|
||
|
||
|
||
var updateRangeTNs = function() {
|
||
getAttrs(["rangedvizTN", "meleevizTN", "cover", "move", "dualwield", "calledshot", "aim", "enemies", "friends", "meleetargets", "position", "misccombatmods", "stun_pen","wound_pen", "manualgunneryTN" ], function(myval) {
|
||
console.log("updateRangeTN")
|
||
targetNumberRange = parseInt(myval.calledshot) + parseInt(myval.rangedvizTN) + parseInt(myval.cover) + parseInt(myval.dualwield) + (2 * parseInt(myval.enemies)) - parseInt(myval.aim) + parseInt(myval.misccombatmods) + parseInt(myval.stun_pen) + parseInt(myval.wound_pen) + parseInt(myval.manualgunneryTN);
|
||
switch (parseInt(myval.move)) {
|
||
case 0:
|
||
var mytargetMove=-1;
|
||
break;
|
||
case 1:
|
||
var mytargetMove=0;
|
||
break;
|
||
case 2:
|
||
var mytargetMove=0;
|
||
break;
|
||
case 4:
|
||
var mytargetMove=2;
|
||
break;
|
||
case 6:
|
||
var mytargetMove=2;
|
||
break;
|
||
}
|
||
console.log(targetNumberRange)
|
||
setAttrs({rangedTN: targetNumberRange, targetMove:mytargetMove });
|
||
|
||
});
|
||
};
|
||
|
||
var updateManualGunneryTNs = function() {
|
||
getAttrs(["gunnerymotion", "gunneryspeed", "gunnerymaneuver", "gunneryvehicledmg", "gunnerymount", "gunneryterrain", "gunnerytargettype" ], function(myval) {
|
||
console.log("updateGunneryTN")
|
||
targetNumberGunnery = parseInt(myval.gunnerymotion) + parseInt(myval.gunneryspeed) + parseInt(myval.gunnerymaneuver) + parseInt(myval.gunneryvehicledmg) + parseInt(myval.gunnerymount) + parseInt(myval.gunneryterrain) + parseInt(myval.gunnerytargettype)
|
||
console.log(targetNumberGunnery)
|
||
setAttrs({manualgunneryTN: targetNumberGunnery});
|
||
|
||
});
|
||
};
|
||
|
||
|
||
</script>
|
||
|
||
<script type="text/worker">
|
||
const spirits= {
|
||
"Watcher":
|
||
{B: "(F)", Q: "(F)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F)",
|
||
astral_init: "(F + 20)", init: 0, attackpower: "(F)", attackdmg: "L(stun)", reach: 0,
|
||
powers: ["Air Cover", "Alarm", "Attack Dog", "Bug", "Courier", "Irritant"]},
|
||
"Air Elemental":
|
||
{B: "( F - 2 )", Q: "(( F + 3)*4)", S: "( F - 3)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
|
||
astral_init: "(F + 20)", init: "(F + 12)", attackpower: 0, attackdmg: "L", reach: 0,
|
||
powers: ["Engulf", "Materialization", "Movement", "Noxious Breath", "Psychokinesis" ],
|
||
weaknesses: ["airtight seals", "Vulnerability (Earth)"] },
|
||
"Earth Elemental":
|
||
{ B: "( F + 4 )", Q: "((F - 2) * 2)", S: "( F + 4)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F+4)", attackdmg: "S", reach: 0,
|
||
powers: ["Engulf", "Materialization", "Movement"],
|
||
weaknesses: ["Vulnerability (Air)"] },
|
||
"Fire Elemental":
|
||
{B: "( F + 1 )", Q: "((F + 2) * 3)", S: "( F - 2)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
|
||
astral_init: "(F + 20 )", init: "(F + 11 )", attackpower: "(F-2)", attackdmg: "M", reach: 1,
|
||
powers: [ "Engulf", "Flame Aura", "Guard", "Materialization", "Innate Spell (Flamethrower)"],
|
||
weaknesses: ["Vulnerability (Water)"] },
|
||
"Water Elemental":
|
||
{B: "( F + 2 )", Q: "(F * 2)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
|
||
astral_init: "(F + 20 )", init: "(F + 11 )", attackpower: "(F)", attackdmg: "S(stun)", reach: 0,
|
||
powers: [ "Engulf", "Materialization", "Movement" ],
|
||
weaknesses: ["Vulnerability (Fire)"] },
|
||
"City Spirit": {
|
||
B: "( F + 1 )", Q: "((F + 2) * 3)", S: "(F - 2 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
|
||
astral_init: "(F + 20 )" , init: "(F + 11 )", attackpower: "(F - 2)", attackdmg: "M", reach: 0,
|
||
powers: ["Accident", "Concealment", "Confusion", "Fear", "Guard", "Materialization", "Search"]
|
||
},
|
||
"Field Spirit": {
|
||
B: "( F + 1 )", Q: "((F + 2) * 3)", S: "(F - 2 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
|
||
astral_init: "(F + 20 )", init: "(F + 11 )", attackpower: "(F - 2)", attackdmg: "M", reach: 0,
|
||
powers: [ "Accident", "Concealment", "Guard", "Materialization", "Search"]
|
||
},
|
||
"Hearth Spirit": {
|
||
B: "( F + 1 )", Q: "((F + 2) * 3)", S: "(F - 2 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
|
||
astral_init: "(F + 20 )", init: "(F + 11 )", attackpower: "(F - 2)", attackdmg: "M", reach: 0,
|
||
powers: [ "Accident", "Concealment", "Confusion", "Guard" ]
|
||
},
|
||
|
||
"Desert Spirit": {
|
||
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 0,
|
||
powers: [ "Concealment", "Guard", "Materialization", "Movement", "Search" ]
|
||
},
|
||
"Forest Spirit": {
|
||
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 0,
|
||
powers: ["Accident", "Concealment", "Confusion", "Fear", "Guard", "Materialization" ]
|
||
},
|
||
"Mountain Spirit": {
|
||
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 0,
|
||
powers: ["Accident", "Concealment", "Guard", "Materialization", "Movement", "Search"]
|
||
},
|
||
"Prairie Spirit": {
|
||
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 0,
|
||
powers: ["Accident", "Concealment", "Guard", "Materialization", "Movement", "Search"]
|
||
},
|
||
"Mist Spirit": {
|
||
B: "( F - 2 )", Q: "((F + 3) * 4)", S: "(F - 3 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 12 )", attackpower: "(F - 3)", attackdmg: "M(stun)", reach: 0,
|
||
powers: [ "Accident", "Concealment", "Confusion", "Guard", "Materialization", "Movement" ]
|
||
},
|
||
"Storm Spirit": {
|
||
B: "( F - 2 )", Q: "((F + 3) * 4)", S: "(F - 3 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 12 )", attackpower: "(F - 3)", attackdmg: "M(stun)", reach: 0,
|
||
powers: [ "Concealment", "Confusion", "Fear", "Materialization", "Innate Spell (Lightning Bolt)"]
|
||
},
|
||
"Wind Spirit": {
|
||
B: "( F - 2 )", Q: "((F + 3) * 4)", S: "(F - 3 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 12 )", attackpower: 0, attackdmg: "L", reach: 0,
|
||
powers: [ "Accident", "Confusion", "Guard", "Materialization", "Movement", "Search"]
|
||
},
|
||
"Lake Spirit": {
|
||
B: "( F + 2 )", Q: "(F * 2)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 1)",
|
||
astral_init: "(F + 20 )", init: "(F + 9 )", attackpower: "(F)", attackdmg: "S(stun)", reach: 0,
|
||
powers: ["Accident", "Engulf", "Fear", "Guard", "Materialization", "Movement", "Search"]
|
||
},
|
||
"River Spirit": {
|
||
B: "( F + 2 )", Q: "(F * 2)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 1)",
|
||
astral_init: "(F + 20 )", init: "(F + 9 )", attackpower: "(F)", attackdmg: "S(stun)", reach: 0,
|
||
powers: ["Accident", "Concealment", "Engulf", "Fear", "Guard", "Materialization", "Movement", "Search"]
|
||
},
|
||
"Sea Spirit": {
|
||
B: "( F + 2 )", Q: "(F * 2)", S: "(F)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 1)",
|
||
astral_init: "(F + 20 )", init: "(F + 9 )", attackpower: "(F)", attackdmg: "S(stun)", reach: 0,
|
||
powers: ["Accident", "Concealment", "Confusion", "Engulf", "Fear", "Guard", "Materialization", "Movement", "Search"]
|
||
},
|
||
|
||
"Gnome": {
|
||
B: "( F + 4 )", Q: "((F - 2) * 2)", S: "(F + 4 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F - 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 8 )", attackpower: "(F + 4)", attackdmg: "S", reach: 1,
|
||
powers: ["Concealment", "Engulf", "Fear", "Guard", "Materialization", "Magical Guard"],
|
||
weaknesses: ["Vulnerability (Air)"]
|
||
},
|
||
"Manitous": {
|
||
B: "( F + 3 )", Q: "(F * 2)", S: "(F + 1 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F)",
|
||
astral_init: "(F + 20 )", init: "(F + 10 )", attackpower: "(F + 3)", attackdmg: "S", reach: 1,
|
||
powers: ["Accident", "Concealment", "Confusion", "Engulf", "Fear", "Guard", "Materialization", "Magical Guard"]
|
||
},
|
||
"Salamander": {
|
||
B: "( F + 1 )", Q: "(( F + 2) * 3)", S: "(F - 2 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 1)",
|
||
astral_init: "(F + 20 )", init: "(F + 10 )", attackpower: "(F - 2)", attackdmg: "M", reach: 0,
|
||
powers: [ "Engulf", "Flame Aura", "Immunity (Fire)", "Guard", "Materialization", "Innate Spell (Flamethrower)", "Magical Guard", "Psychokinesis"],
|
||
weaknesses: ["Vulnerability (Water)"]
|
||
},
|
||
"Sylphs": {
|
||
B: "( F - 2 )", Q: "(( F + 3) * 4)", S: "(F - 3 )", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F + 2)",
|
||
astral_init: "(F + 20 )", init: "(F + 12 )", attackpower: "(F - 3)", attackdmg: "M(stun)", reach: 0,
|
||
powers: ["Concealment", "Confusion", "Engulf", "Guard", "Materialization", "Magical Guard", "Movement", "Psychokinesis"],
|
||
weaknesses: ["Vulnerability (Earth)"]
|
||
},
|
||
"Ancestor": {
|
||
B: "( F + 2 )", Q: "(F * 3)", S: "(F + 1)", C: "(F)", I: "(F)", W: "(F)", E: "(F)", R: "(F)",
|
||
astral_init: "(F + 20 )" , init: "(F + 10 )", attackpower: "(F + 1)", attackdmg: "M(stun)", reach: 0,
|
||
powers: ["Accident", "Divination", "Guard", "Materialization", "Search"]
|
||
}
|
||
}
|
||
const spiritatts=[ "body", "quickness", "strength", "charisma", "willpower", "intelligence", "perception", "reaction", "initiative", "attacks", "force", "reach"];
|
||
|
||
on("change:spirit-type change:force", function() {
|
||
getAttrs(["spirit-type", "sheettype", "force"], function(myval) {
|
||
var atts=[];
|
||
const sheettype=myval["sheettype"];
|
||
const spirittype=myval["spirit-type"];
|
||
const F=parseInt(myval["force"]);
|
||
if (sheettype != "Spirit") {
|
||
console.log('not a spirit');
|
||
} else {
|
||
console.log('setting spirit attributes based on type and force');
|
||
if (spirittype == "Watcher") {
|
||
atts["initiative"]=0;
|
||
atts["initiative-mods"]=1;
|
||
} else {
|
||
atts["initiative"]=1;
|
||
atts["initiative-mods"]=0;
|
||
}
|
||
atts["body"]=eval(spirits[spirittype]["B"]);
|
||
atts["quickness"]=eval(spirits[spirittype]["Q"]);
|
||
atts["strength"]=eval(spirits[spirittype]["S"]);
|
||
atts["charisma"]=eval(spirits[spirittype]["C"]);
|
||
atts["intelligence"]=eval(spirits[spirittype]["I"]);
|
||
atts["perception"]=eval(spirits[spirittype]["I"]);
|
||
atts["willpower"]=eval(spirits[spirittype]["W"]);
|
||
atts["essence"]=eval(spirits[spirittype]["E"]);
|
||
atts["reaction"]=eval(spirits[spirittype]["R"]);
|
||
atts["spirit-initp"]=eval(spirits[spirittype]["init"]);
|
||
atts["astralreaction"]=eval(spirits[spirittype]["astral_init"]);
|
||
atts["attackpower"]=eval(spirits[spirittype]["attackpower"]);
|
||
atts["attackdamage"]=spirits[spirittype]["attackdmg"];
|
||
const powers=spirits[spirittype]["powers"];
|
||
getSectionIDs("critter-powers", function(idarray) {
|
||
idarray.forEach(id=>{
|
||
removeRepeatingRow("repeating_critter-powers_" + id);
|
||
});
|
||
});
|
||
getSectionIDs("critter-weaknesses", function(idarray) {
|
||
idarray.forEach(id=>{
|
||
removeRepeatingRow("repeating_critter-weaknesses_" + id);
|
||
});
|
||
});
|
||
if (spirits[spirittype]["weaknesses"]) {
|
||
const weaknesses=spirits[spirittype]["weaknesses"];
|
||
weaknesses.forEach(weak=>{
|
||
var newrowid = generateRowID();
|
||
atts["repeating_critter-weaknesses_" + newrowid + "_name" ] = weak;
|
||
});
|
||
};
|
||
if (spirits[spirittype]["powers"]) {
|
||
const powers=spirits[spirittype]["powers"];
|
||
powers.forEach(power=>{
|
||
var newrowid = generateRowID();
|
||
atts["repeating_critter-powers_" + newrowid + "_name" ] = power;
|
||
});
|
||
};
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
|
||
}
|
||
|
||
});
|
||
})
|
||
|
||
on("remove:repeating_foci change:repeating_foci", function(eventinfo) {
|
||
const attribs=["category", "force", "type"];
|
||
console.log(eventinfo);
|
||
mytrigger=eventinfo["triggerName"];
|
||
console.log('mytrigger ' + mytrigger);
|
||
atts=[];
|
||
|
||
if (mytrigger == "remove:repeating_foci" ) {
|
||
myrepeat=eventinfo["sourceAttribute"];
|
||
myattrib="remove";
|
||
} else {
|
||
mybase=eventinfo["sourceAttribute"].split("_");
|
||
myattrib=mybase.pop();
|
||
myrepeat=mybase.join('_');
|
||
}
|
||
if (myattrib == "remove" ) {
|
||
let cat = eventinfo["removedInfo"][myrepeat.concat("_category")];
|
||
let type = eventinfo["removedInfo"][myrepeat.concat("_type")];
|
||
if ( type == "Power Focus" ) atts["power-focus"]=0;
|
||
else if ( type == "Spirit Focus") atts[cat]=0;
|
||
else if ( type == "Expendable" ) atts["exp-" + cat]=0;
|
||
else if ( type == "Reusable" ) atts["reusable-" + cat]=0;
|
||
else return;
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
} else if (myattrib != "qty" ) {
|
||
gets=[];
|
||
gets.push(myrepeat.concat("_category"));
|
||
gets.push(myrepeat.concat("_force"));
|
||
gets.push(myrepeat.concat("_type"));
|
||
getAttrs(gets, function(myval) {
|
||
let cat=myval[myrepeat.concat("_category")];
|
||
let force=myval[myrepeat.concat("_force")];
|
||
let type=myval[myrepeat.concat("_type")];
|
||
if (type == "Power Focus") {
|
||
atts["power-focus"]=force
|
||
} else if ( type == "Spirit Focus" ) {
|
||
atts[cat]=force;
|
||
} else if ( type == "Expendable" ) {
|
||
if ( cat == "none" ) return;
|
||
var myatt="exp-" + cat;
|
||
atts[myatt]=force;
|
||
|
||
} else if ( type == "Reusable" ) {
|
||
if ( cat == "none" ) return;
|
||
var myatt="reusable-" + cat;
|
||
atts[myatt]=force;
|
||
} else {
|
||
console.log('skipping');
|
||
}
|
||
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
});
|
||
|
||
|
||
|
||
}
|
||
|
||
});
|
||
|
||
on("change:repeating_spells:range change:repeating_spells:spellcategory", function(myval) {
|
||
getAttrs(["repeating_spells_spellcategory", "repeating_spells_range"], function(myval) {
|
||
const spellcategory=myval["repeating_spells_spellcategory"];
|
||
const range=myval["repeating_spells_range"];
|
||
console.log(spellcategory)
|
||
console.log(range)
|
||
atts=[];
|
||
if ( spellcategory == "Elemental" ) {
|
||
atts["repeating_spells_target"]="@{target|Target|targetMove}";
|
||
console.log(atts);
|
||
setAttrs(atts);
|
||
}
|
||
});
|
||
});
|
||
|
||
|
||
|
||
|
||
</script>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-spell">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{myname}}: {{spellname}} {{castforce}} vs. {{targetofspell}}</div>
|
||
<div class="sheet-rtrow"><b>Rolling:</b> {{computed::rolldice}}d6 vs. {{targetnumber}} </div>
|
||
{{#spelldamage}}<div class="sheet-rtrow"><b>Damage:</b> {{computed::spelldamage}} </div>{{/spelldamage}}
|
||
{{#sorcerydice}}<div class="sheet-rtrow"><b>Sorcery Dice Used:</b> {{sorcerydice}}</div>{{/sorcerydice}}
|
||
{{#spellpool}}<div class="sheet-rtrow"><b>Spell Pool Used:</b> {{spellpool}}</div>{{/spellpool}}
|
||
{{#cast}}<div class="sheet-rtrow"><b>Casting Test:</b> {{computed::cast}}</div>{{/cast}}
|
||
{{#casttest}}<div class="sheet-rtrow"><b>Casting Test:</b> {{casttest}}</div>{{/casttest}}
|
||
{{#draintest}}<div class="sheet-rtrow"><b>Drain Test:</b> {{draintest}} vs. {{computed::draindamage}}</div>
|
||
{{/draintest}}
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
{{#resist}}<div class="sheet-rtrow"><b>{{targetofspell}}:</b> {{resist}}</div>{{/resist}}
|
||
{{#spelldefense}}<div class="sheet-rtrow">{{spelldefense}} Target of <b>{{castforce}}</b> </div>
|
||
{{/spelldefense}}
|
||
{{#resistspell}}<div class="sheet-rtrow">{{resistspell}} Target of {{castforce}}</div>{{/resistspell}}
|
||
</div>
|
||
</rolltemplate>
|
||
<rolltemplate class="sheet-rolltemplate-adept">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{myname}}: {{spellname}} {{powerlevel}} vs. {{targetofspell}}</div>
|
||
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
<div class="sheet-rtrow"><span>Spell Pool Used: </span>{{spellpool}}</div>
|
||
<div class="sheet-rtrow"><span>Casting Test: </span>{{casttest}}</div>
|
||
<div class="sheet-rtrow"><span>Drain Test: </span>{{draintest}} vs. {{computed::draindamage}}</div>
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
</div>
|
||
</rolltemplate>
|
||
<rolltemplate class="sheet-rolltemplate-attack">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader"><b>{{myname}}:</b> {{weaponname}} vs. {{target}}</div>
|
||
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
|
||
<div class="sheet-rtrow"><b>Attack Test:</b> {{attacktest}}</div>
|
||
{{#combatpool}}<div class="sheet-rtrow"><b>Combat Pool Used:</b> {{combatpool}} </div>{{/combatpool}}
|
||
{{#controlpool}}<div class="sheet-rtrow"><b>Control Pool Used:</b> {{controlpool}} </div>{{/controlpool}}
|
||
<div class="sheet-rtrow"><b>Weapon Damage:</b> {{computed::weaponpower}} <b>{{weapondamage}}</div>
|
||
{{#rounds}}<div class="sheet-rtrow">{{ammotype}} <b>Rounds:</b> {{computed::rounds}}</div>{{/rounds}}
|
||
{{#weaponfocus}}<div class="sheet-rtrow"><b>Weapon Focus:</b> {{weaponfocus}} {{focusforce}}</div>
|
||
{{/weaponfocus}}
|
||
{{#charreach}}<div class="sheet-rtrow"><b>{{myname}} Reach:</b> {{charreach}}</div>{{/charreach}}
|
||
{{#targetreach}}<div class="sheet-rtrow"><b>{{target}} Reach:</b> {{targetreach}}</div>{{/targetreach}}
|
||
{{#default}}<div class="sheet-rtrow">{{default}}</div>{{/default}}
|
||
{{#senddata}}<div class="sheet-rtrow"><b>{{target}}:</b> [Dodge](~selected|dodge||{{computed::senddata}}) [Resist](~selected|resistroll||{{computed::senddata}})</div>{{/senddata}}
|
||
<div class="sheet-rtrow"><b>Mods:</b>{{#rangedmods}}Ranged: {{rangedmods}}
|
||
{{/rangedmods}}{{#meleemods}} Melee: {{meleemods}}
|
||
{{/meleemods}}{{#armorpen}} Armor Penalty: {{armorpen}}{{/armorpen}}
|
||
{{#gyropen}} Gyro Penalty: {{gyropen}}
|
||
{{/gyropen}} {{#movemods}} Move Penalty: {{movemods}}{{/movemods}}
|
||
{{#targetmods}} aim assit {{targetmods}}{{/targetmods}}
|
||
{{#reachmod}}{{computed::reachmod}}{{/reachmod}}
|
||
</div>
|
||
</div>
|
||
</rolltemplate>
|
||
<rolltemplate class="sheet-rolltemplate-explosive">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader"><b>{{myname}}:</b> {{weaponname}} vs. {{target}}</div>
|
||
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
|
||
<div class="sheet-rtrow"><b>Attack Test:</b> {{attacktest}}</div>
|
||
{{#combatpool}}<div class="sheet-rtrow"><b>Combat Pool Used:</b> {{combatpool}} </div>{{/combatpool}}
|
||
{{#controlpool}}<div class="sheet-rtrow"><b>Control Pool Used:</b> {{controlpool}} </div>{{/controlpool}}
|
||
<div class="sheet-rtrow"><b>Weapon Damage:</b> {{weaponpower}}{{weapondamage}}</div>
|
||
<div class="sheet-rtrow"><b>Scatter:</b> {{computed::scatter}}m in {{scatdirnumber}} Direction</div>
|
||
{{#scatdir}}[img]({{scatdir}}){{/scatdir}}
|
||
<div class="sheet-rtrow">Power reduces by 1 each {{blastradius}}m away</div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
{{#resist}}<div class="sheet-rtrow"><b>{{target}}:</b> {{resist}}</div>{{/resist}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-item">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{myname}} uses {{item}}</div>
|
||
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
|
||
<div class="sheet-rtrow"><span>Item Test: </span>{{result}}</div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
{{#poolname}}<div class="sheet-rtrow">{{poolname}}: {{pooldice}}</div>{{/poolname}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#dicepool}}<div class="sheet-rtrow">Dice Pool Used: {{dicepool}}</div>{{/dicepool}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-skill">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{myname}}: {{skill}}</div>
|
||
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
<div class="sheet-rtrow"><span>Skill Test: </span>{{result}}</div>
|
||
{{#poolname}}<div class="sheet-rtrow">{{poolname}}: {{pooldice}}</div>{{/poolname}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#dicepool}}<div class="sheet-rtrow">Dice Pool Used: {{dicepool}}</div>{{/dicepool}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-attribute">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{character}}: {{Attribute}}</div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
<div class="sheet-rtrow"><span>Success Test: </span>{{result}}</div>
|
||
<div class="sheet-rtrow"><span>Target Number: </span>{{targetnumber}}</div>
|
||
<div class="sheet-rtrow"><span>Combat Pool: </span>{{combatpool}}</div>
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-init">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{character}} {{type}}</div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
{{#roll}}<div class="sheet-rtrow"><b>Roll:</b> {{roll}}</div>{{/roll}}
|
||
<div class="rtrow">All pools refreshed</div>
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
{{#rollGreater() roll 10}}<div></div> {{character}} has qualified for multiple combat phases!
|
||
</div> {{/rollGreater() roll 10}}
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-resistance">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{character}}: {{Power}}{{wpndmg}} vs {{name}} {{armorvalue}}</div>
|
||
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{targetnumber}} </div>
|
||
<div class="sheet-rtrow"><b>Result:</b> {{roll}} </div>
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
{{#finaldmg}}<div class="rtrow-small">Attack:{{attacktest}} - (resist:{{roll}} + dodge:{{dodge}})</div>
|
||
<div class="rtrow"><b>Final Damage:</b> staged to <b>{{computed::finaldmg}}</b></div>{{/finaldmg}}
|
||
<div class="sheet-rtrow">Combat Pool Used: {{combatpool}}</div>
|
||
{{#senddata}}<div class="sheet-rtrow"><b>{{character}}:</b> [Resist](~selected|resistroll||{{computed::senddata}})</div>{{/senddata}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-matrix">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader"><b>{{myname}} vs. {{target}}</b></div>
|
||
<div class="sheet-rtrow"><b>Rolling:</b> {{rolldice}}d6 vs. {{computed::targetnumber}} </div>
|
||
{{#hackingpool}}<div class="rtrow"><b>Hacking Pool Dice:</b> {{hackingpool}}</div>{{/hackingpool}}
|
||
{{#description}}<div class="rtrow">{{description}}</div>{{/description}}
|
||
<div class="sheet-rtrow"><b>{{action}}:</b> {{computed::roll}}</div>
|
||
{{#senddata}}<div class="sheet-rtrow"><b>{{target}}:</b> [Resist](~selected|matrixresist||{{computed::senddata}})</div>{{/senddata}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#notes2}}<div class="sheet-rtrow"> {{notes2}}</div>{{/notes2}}
|
||
{{#detect}}<div class="sheet-rtrow"><b>{{target}}:</b> {{detect}}</div>{{/detect}}
|
||
{{#clickme}}<div class="sheet-rtrow">{{clickme}}</div>{{/clickme}}
|
||
</div>
|
||
</rolltemplate>
|
||
<rolltemplate class="sheet-rolltemplate-silent">
|
||
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-vehicle">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader"><b>{{character}}</b>: {{target}}</div>
|
||
<div class="sheet-rtrow"><span><b>{{type}}:</b> </span>{{computed::roll}}</div>
|
||
{{#controlpool}}<div class="sheet-rtrow"><b>Control Pool Dice Used:</b> {{controlpool}}</div>{{/controlpool}}
|
||
{{#targetnumber}}<div class="sheet-rtrow"><b>Target Number</b> {{computed::targetnumber}}</div>{{/targetnumber}}
|
||
{{#description}}<div class="sheet-rtrow">{{description}}</div>{{/description}}
|
||
{{#charscore}}<div class="sheet-rtrow"><b>{{character}} score:</b> {{charscore}}</div>{{/charscore}}
|
||
{{#targetscore}}<div class="sheet-rtrow"><b>{{target}} score:</b> {{targetscore}}</div>{{/targetscore}}
|
||
{{#delta}}<div class="sheet-rtrow">Maneuever Score Difference: {{delta}}</div>{{/delta}}
|
||
{{#ecd}}<div class="sheet-rtrow">ECD Test: {{ecd}}</div>{{/ecd}}
|
||
{{#notes}}<div class="sheet-rtrow"> {{notes}}</div>{{/notes}}
|
||
{{#position}}<div class="sheet-rtrow"><b>New Position Score:</b> {{computed::position}}</div>{{/position}}
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-info">
|
||
<div class="sheet-rtcontainer">
|
||
<div class="sheet-rtheader">{{character}}: Info</div>
|
||
<div class="sheet-rtrow">Action: {{action}}</div>
|
||
{{#type}}<div class="sheet-rtrow">Type: {{type}}</div>{{/type}}
|
||
{{#info1}}<div class="sheet-rtrow">{{info1}}</div>{{/info1}}
|
||
{{#info2}}<div class="sheet-rtrow">{{info2}}</div>{{/info2}}
|
||
</div>
|
||
</rolltemplate>
|