Files
roll20-character-sheets-tester/Zafir/zafir.html
T
2020-06-05 20:01:19 -07:00

2261 lines
140 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<input type="hidden" class="tabstoggle" name="attr_sheetTypeToggle" value="charactersheet" />
<div class="charactersheet">
<input type="hidden" class="hideifone" name="attr_condensesheet" value="0"/>
<!-- Top Row: Logo, Character info, Class & Level info -->
<div class="main">
<div class="3colrow">
<div class="col">
<img src="https://raw.githubusercontent.com/RandyKnapp/roll20-character-sheets/master/Zafir/zafir-black-small.png" />
</div>
<div class="col">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_char_name" />
<label data-i18n="Pronouns:">Pronouns:</label><input type="text" spellcheck="false" name="attr_char_pronouns" />
<input type="hidden" class="hideifone" name="attr_largeorigin" value="0"/>
<div><label data-i18n="Origin:">Origin:</label><input type="text" spellcheck="false" name="attr_char_origin" /></div>
<input type="hidden" class="hideifzero" name="attr_largeorigin" value="0"/>
<div><label data-i18n="Origin:">Origin:</label><input type="text" style="visibility:hidden;" /></div>
</div>
<div class="col">
<label data-i18n="Class:">Class:</label><input type="text" spellcheck="false" name="attr_class" />
<label data-i18n="Level:">Level:</label><input type="number" name="attr_level" value="1" /><br/>
<label data-i18n="XP:">XP:</label><input type="number" name="attr_xp" value="0" />
</div>
</div>
<input type="hidden" class="hideifzero" name="attr_largeorigin" value="0"/>
<div style="margin-left:310px;margin-right:16px;">
<textarea spellcheck="false" name="attr_char_origin" style="margin-bottom:-26px;position:relative;top:-10px;min-height:34px;"></textarea>
</div>
<hr/>
<!-- Second Row: Base Attributes, Combat Attributes, Status -->
<div class="3colrow attributes">
<div class="attrcol1">
<h3 data-i18n="Base Attributes">Base Attributes</h3>
<label class="iconlabel"><span style="font-family:Pictos">k</span></label>
<label data-i18n="Toughness:">Toughness:</label><input type="number" name="attr_toughness" value="0" /><br/>
<img class="focusicon" src="https://raw.githubusercontent.com/RandyKnapp/roll20-character-sheets/master/Zafir/agilitysymbol.png" />
<label data-i18n="Agility:">Agility:</label><input type="number" name="attr_agility" value="0" /><br/>
<img class="focusicon" src="https://raw.githubusercontent.com/RandyKnapp/roll20-character-sheets/master/Zafir/accuracysymbol.png" />
<label data-i18n="Accuracy:">Accuracy:</label><input type="number" name="attr_accuracy" value="0" /><br/>
<img class="focusicon" src="https://raw.githubusercontent.com/RandyKnapp/roll20-character-sheets/master/Zafir/focussymbol.png" />
<label data-i18n="Discipline:">Discipline:</label><input type="number" name="attr_discipline" value="0" />
</div>
<div class="attrcol2 combatattr">
<h3 data-i18n="Combat Attributes">Combat Attributes</h3>
<label data-i18n="Max HP:">Max HP:</label><span class="labellike attrvalue attrtotal" name="attr_hp_max"></span>
<span class="labellike attrvalue">=</span>
<span class="labellike attrvalue tooltip">2<span class="tooltiptext" data-i18n="Base HP Tooltip">Base HP: 2</span></span>
<span class="labellike attrvalue">+</span>
<span class="tooltip"><span class="labellike attrvalue" name="attr_halflevel"></span><span class="tooltiptext" data-i18n="Half Level Tooltip">Half Level</span></span>
<span class="labellike attrvalue">+</span>
<span class="tooltip"><span class="labellike attrvalue" name="attr_toughness"></span><span class="tooltiptext" data-i18n="Toughness">Toughness</span></span>
<span class="labellike attrvalue">+</span>
<span class="tooltip"><span class="labellike attrvalue" name="attr_bahp"></span><span class="tooltiptext" data-i18n="Body Armor Tooltip">Body Armor: HP</span></span>
<span class="labellike attrvalue">+</span>
<span class="tooltip"><input type="number" name="attr_maxhpother" value="0" /><span class="tooltiptext" data-i18n="Other">Other</span></span>
<br/>
<label data-i18n="Speed:">Speed:</label><span class="labellike attrvalue attrtotal" name="attr_speed"></span>
<span class="labellike attrvalue">=</span>
<span class="labellike attrvalue tooltip">6<span class="tooltiptext" data-i18n="Base Speed Tooltip">Base Speed: 6</span></span>
<span class="labellike attrvalue">+</span>
<span class="tooltip"><span class="labellike attrvalue" name="attr_doubleagility"></span><span class="tooltiptext" data-i18n="Double Agility Tooltip">Agility × 2</span></span>
<span class="labellike attrvalue">+</span>
<span class="tooltip"><input type="number" name="attr_speedother" value="0" /><span class="tooltiptext" data-i18n="Other">Other</span></span>
<br/>
<label data-i18n="Aim:">Aim:</label><span class="labellike attrvalue attrtotal" name="attr_aim"></span>
<span class="labellike attrvalue">=</span>
<span class="tooltip"><span class="labellike attrvalue" name="attr_accuracy"></span><span class="tooltiptext" data-i18n="Accuracy">Accuracy</span></span>
<span class="labellike attrvalue">+</span>
<span class="tooltip"><input type="number" name="attr_aimother" value="0" /><span class="tooltiptext" data-i18n="Other">Other</span></span>
<br/>
<label data-i18n="Will:">Will:</label><span class="labellike attrvalue attrtotal" name="attr_will"></span>
<span class="labellike attrvalue">=</span>
<span class="tooltip"><span class="labellike attrvalue" name="attr_discipline"></span><span class="tooltiptext" data-i18n="Discipline">Discipline</span></span>
<span class="labellike attrvalue">+</span>
<span class="tooltip"><input type="number" name="attr_willother" value="0" /><span class="tooltiptext" data-i18n="Other">Other</span></span>
</div>
<div class="attrcol3 nowrap">
<h3 data-i18n="Status">Status</h3>
<span class="tooltip">
<label class="iconlabel"><span style="font-family:Pictos">k</span></label>
<label style="width:46px;"><span data-i18n="Hit Points:">HP:</span></label><input type="number" name="attr_hp" value="0" /><span class="labellike">&nbsp;/&nbsp;</span><span class="labellike" name="attr_hp_max"></span>
<span class="tooltiptext" data-i18n="Hit Points Tooltip">Hit Points</span>
</span><br />
<span class="tooltip">
<label class="iconlabel"><span style="font-family:'Pictos Three'">b</span></label>
<label style="width:46px;"><span data-i18n="Armor Points:">AP:</span></label><input type="number" name="attr_ap" value="0" />
<span class="tooltiptext" data-i18n="Armor Points Tooltip">Armor Points</span>
</span><br />
<span class="tooltip">
<img class="shieldicon" src="https://raw.githubusercontent.com/RandyKnapp/roll20-character-sheets/master/Zafir/shieldsymbol.png" />
<label style="width:46px;"><span data-i18n="Shield Points:">SP:</span></label><input type="number" name="attr_sp" value="0" />
<span class="tooltiptext" data-i18n="Shield Points Tooltip">Shield Points</span>
</span><br />
<input type="hidden" class="hideifzero" name="attr_showfocus" value="1"/>
<span class="tooltip">
<img class="focusicon" src="https://raw.githubusercontent.com/RandyKnapp/roll20-character-sheets/master/Zafir/focussymbol.png" />
<label style="width:46px;" data-i18n="Focus Points:">FP:</label><input type="number" name="attr_focus" value="0" /><span class="labellike">&nbsp;/&nbsp;</span><input type="number" name="attr_focus_max" value="0" />
<span class="tooltiptext" data-i18n="Focus Points Tooltip">Focus Points</span>
</span>
</div>
</div>
</div>
<input type="hidden" class="hideifzero" name="attr_condensesheet" value="0"/>
<div class="condensed main">
<div class="3colrow">
<div class="col" style="width:300px;">
<h2 class="name"><span name="attr_char_name"></span><span class="condensedpronouns"> (<span name="attr_char_pronouns"></span>)</span></h2>
<label style="width:auto;padding-right:0px;"><span data-i18n="Level">Level</span> <span name="attr_level"></span> <span name="attr_class"></span> - <span data-i18n="XP:">XP:</span></label>
<input type="number" name="attr_xp" />
</div>
<div class="col nowrap baseattr" style="width:130px;margin-right:15px;">
<label style="width:90px;" data-i18n="Toughness:">Toughness:</label><label class="attrvalue"><span name="attr_toughness"></span></label><br />
<label style="width:90px;" data-i18n="Agility:">Agility:</label><label class="attrvalue"><span name="attr_agility"></span></label><br />
<label style="width:90px;" data-i18n="Accuracy:">Accuracy:</label><label class="attrvalue"><span name="attr_accuracy"></span></label><br />
<label style="width:90px;" data-i18n="Discipline:">Discipline:</label><label class="attrvalue"><span name="attr_discipline"></span></label>
</div>
<div class="col nowrap combatattr" style="width:130px;margin-right:15px;">
<label style="width:90px;" data-i18n="Max HP:">Max HP:</label><label class="attrvalue"><span name="attr_hp_max"></span></label><br />
<label style="width:90px;" data-i18n="Speed:">Speed:</label><label class="attrvalue"><span name="attr_speed"></span></label><br />
<label style="width:90px;" data-i18n="Aim:">Aim:</label><label class="attrvalue"><span name="attr_aim"></span></label><br />
<label style="width:90px;" data-i18n="Will:">Will:</label><label class="attrvalue"><span name="attr_will"></span></label>
</div>
<div class="col status" style="width:140px;margin-right:15px;">
<label style="width:50px;"><span data-i18n="Hit Points">HP</span> <span style="font-family:Pictos;color:red;">k</span>:</label><input type="number" name="attr_hp" /><span class="labellike">&nbsp;/&nbsp;</span><span class="labellike" name="attr_hp_max"></span><br/>
<label style="width:50px;"><span data-i18n="Armor Points">AP</span> <span style="font-family:'Pictos Three';">b</span>:</label><input type="number" name="attr_ap" /><br/>
<label style="width:50px;"><span data-i18n="Shield Points">SP</span> <span style="font-family:Pictos;">L</span>:</label><input type="number" name="attr_sp" /><br/>
</div>
<input type="hidden" class="hideifzero" name="attr_showfocus" value="1"/>
<div class="col status" style="width:100px;">
<label data-i18n="Focus:">Focus:</label><br />
<input type="number" name="attr_focus" /><span class="labellike">&nbsp;/&nbsp;</span><span class="labellike" name="attr_focus_max"></span>
</div>
</div>
</div>
<!-- Main tab bar -->
<br />
<input type="hidden" class="tabstoggle" name="attr_sheetTab" value="atk" />
<div class="tabrow">
<button type="action" name="act_atk" class="atkbtn"><span data-i18n="Combat">Combat</span></button>
<button type="action" name="act_aab" class="aabbtn"><span data-i18n="Abilities">Abilities</span></button>
<button type="action" name="act_eqp" class="eqpbtn"><span data-i18n="Equipment">Equipment</span></button>
<button type="action" name="act_res" class="resbtn"><span data-i18n="Responsibilities">Responsibilities</span></button>
<button type="action" name="act_inv" class="invbtn"><span data-i18n="Inventory">Inventory</span></button>
<button type="action" name="act_oth" class="othbtn"><span data-i18n="Misc">Misc</span></button>
</div>
<br />
<!-- Combat -->
<div class="atk">
<div class="2colrow">
<div class="col1 nowrap">
<input type="hidden" class="tabstoggle" name="attr_sheetTabAttacks" value="cwp" />
<div class="tabrow">
<h2 data-i18n="Combat">Combat</h2>
<button type="action" name="act_cwp" class="cwpbtn"><span data-i18n="Attack">Attack</span></button>
<button type="action" name="act_cgn" class="cgnbtn"><span data-i18n="Area of Effect">Area of Effect</span></button>
<button type="action" name="act_cwl" class="cwlbtn"><span data-i18n="Will Attack">Will Attack</span></button>
</div>
<br />
<div class="cwp">
<h3 data-i18n="Attacks">Attacks</h3>
<label data-i18n="Target Cover:">Target Cover:</label><select name="attr_atkcover">
<option value="Full Cover" data-i18n="Full Cover Option">Full Cover (+0)</option>
<option value="Half Cover" data-i18n="Half Cover Option">Half Cover (+1 aim)</option>
<option value="No Cover" data-i18n="No Cover Option">No Cover (+2 aim/+2 crit)</option>
</select><br />
<label data-i18n="Elevation:">Elevation:</label><select name="attr_atkelevation">
<option value="None" data-i18n="No Elevation Option">None (+0)</option>
<option value="Elevation" data-i18n="Elevation Option">Elevation (+1 aim)</option>
</select><br />
<label data-i18n="Range:">Range:</label><select name="attr_atkrange">
<option value="Optimal Range" data-i18n="Optimal Range Option">Optimal Range (+0)</option>
<option value="Non-optimal" data-i18n="Out Of Range Option">Too Close/Too Far (-1 aim)</option>
</select><br />
<label data-i18n="Overwatch:">Overwatch:</label><select name="attr_atkoverwatch">
<option value="No" data-i18n="Normal Attack Option">Normal Attack (+0)</option>
<option value="Yes" data-i18n="Overwatch Attack Option">Overwatch Reaction Attack (-1 aim)</option>
</select><br />
<label data-i18n="Bonus Aim:">Bonus Aim:</label><input style="width:18%;position:relative;right:3px;margin-right:93px;" type="number" value="0" name="attr_atkotheraim" />
<label data-i18n="Bonus Crit:">Bonus Crit:</label><input style="width:18%;position:relative;right:3px;" type="number" value="0" name="attr_atkothercrit" />
<input type="hidden" name="attr_wptype" class="weaponhider">
<div class="weapon">
<input type="hidden" class="valuehider" name="attr_wpname" value="">
<div class="attack clearfix">
<input type="hidden" class="hideifzero" name="attr_wpammo" value="0"/>
<button type="action" name="act_useammo" class="btn tooltip" style="width:12px;padding-left:6px;padding-right:6px;">
<span style="font-family:'Pictos Custom'">[</span>
<span class="tooltiptext" style="left:2px;"><b>Use Ammo</b><hr />Decrement the ammo counter for this weapon</span></button>
<input type="hidden" class="hideifzero" name="attr_wpneedreload" value="0"/>
<button type="action" name="act_reloadprimary" class="btn"><span style="font-family:Pictos">1</span> <span data-i18n="Reload">Reload</span></button>
<input type="hidden" class="hideifone" name="attr_wpneedreload" value="0"/>
<button type="roll" name="roll_attackprimary" class="btn" value="&{template:zafir} {{name=@{wpname}}} {{aim=[[(@{wpattackaimdice})d6>5]]}} {{crit=[[(@{wpattackcritdice})d6>6]]}} {{damage=[[(@{wpattackdamage})]]}} {{critdmg=[[(@{wpattackdamage}) + (@{wpcritdmg})]]}} {{notes=@{wpnotes}}} {{player=@{char_name}}}"><span data-i18n="Attack">Attack</span></button>
<label style="width:110px"><span name="attr_wpname"></span></label>
<label>+<span name="attr_wpattackaimdice"></span> <span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;+<span name="attr_wpattackcritdice"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tooltip"><span name="attr_wpattackdamage"></span> (+<span name="attr_wpcritdmg"></span>)<span class="tooltiptext">Damage</span></span></label>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_wsname" value="">
<div class="attack clearfix">
<button type="roll" name="roll_attacksecondary" class="btn" value="&{template:zafir} {{name=@{wsname}}} {{aim=[[(@{wsattackaimdice})d6>5]]}} {{crit=[[(@{wsattackcritdice})d6>6]]}} {{damage=[[(@{wsattackdamage})]]}} {{critdmg=[[(@{wsattackdamage}) + (@{wscritdmg})]]}} {{notes=@{wsnotes}}} {{player=@{char_name}}}"><span data-i18n="Attack">Attack</span></button>
<label style="width:110px"><span name="attr_wsname"></span></label>
<label>+<span name="attr_wsattackaimdice"></span> <span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;+<span name="attr_wsattackcritdice"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tooltip"><span name="attr_wsattackdamage"></span> (+<span name="attr_wscritdmg"></span>)<span class="tooltiptext">Damage</span></span></label>
</div>
<div class="readonly">
<fieldset class="repeating_activeabilities">
<input type="hidden" name="attr_aablname" />
<input type="hidden" name="attr_aablcooldown" />
<input type="hidden" name="attr_aablcharges" />
<input type="hidden" name="attr_aablatkrollaimdice" />
<input type="hidden" name="attr_aablatkrollcritdice" />
<input type="hidden" name="attr_aablatkrolldamage" />
<input type="hidden" name="attr_aablatkrollcritdamage" />
<input type="hidden" class="tabstoggle" name="attr_aabltype" />
<div class="attack clearfix aablWeapon">
<input type="hidden" class="hideifzero" name="attr_aablnocharges" value="0" />
<span>
<label class="attacklabel" data-i18n="Out of Charges!">Out of Charges!</label>
</span>
<input type="hidden" class="hideifone" name="attr_aablnocharges" value="0" />
<span>
<input type="hidden" class="hideifzero" name="attr_aabloncooldown" value="0" />
<span>
<label class="attacklabel" data-i18n="Ability On Cooldown!">Ability On Cooldown!</label>
</span>
<input type="hidden" class="hideifone" name="attr_aabloncooldown" value="0" />
<span>
<input type="hidden" class="hideifzero" name="attr_aablneedreload" value="0"/>
<span>
<label class="attacklabel" data-i18n="Out of Ammo!">Out of Ammo!</label>
</span>
<input type="hidden" class="hideifone" name="attr_aablneedreload" value="0"/>
<span>
<input type="hidden" class="hideifzero" name="attr_aablcooldown" value="0"/>
<button type="action" name="act_setcooldown" class="btn tooltip" style="width:12px;padding-left:6px;padding-right:6px;">
<span style="font-family:Pictos">t</span>
<span class="tooltiptext" style="left:2px;" data-i18n="Cooldown Tooltip"><b>Set Cooldown</b><hr />Put this ability on cooldown</span></button>
<input type="hidden" class="hideifzero" name="attr_aablcharges" value="0"/>
<button type="action" name="act_usecharge" class="btn tooltip" style="width:12px;padding-left:6px;padding-right:6px;">
<span style="font-family:Pictos">}</span>
<span class="tooltiptext" style="left:2px;" data-i18n="Charges Tooltip"><b>Use Charge</b><hr />Expend one of this ability's charges</span></button>
<input type="hidden" class="hideifzero" name="attr_aablhasammo" value="0"/>
<button type="action" name="act_useammo" class="btn tooltip" style="width:12px;padding-left:6px;padding-right:6px;">
<span style="font-family:'Pictos Custom'">[</span>
<span class="tooltiptext" style="left:2px;" data-i18n="Ammo Tooltip"><b>Use Ammo</b><hr />Decrement the ammo counter for this weapon</span></button>
<input type="hidden" class="hideifone" name="attr_aablneedreload" value="0"/>
<button type="roll" name="roll_attackability" class="btn" value="&{template:zafir} {{name=@{aablname}}} {{aim=[[(@{aablatkrollaimdice})d6>5]]}} {{crit=[[(@{aablatkrollcritdice})d6>6]]}} {{damage=[[(@{aablatkrolldamage})]]}} {{critdmg=[[(@{aablatkrolldamage}) + (@{aablatkrollcritdamage})]]}} {{player=@{char_name}}}"><span data-i18n="Attack">Attack</span></button>
</span>
</span>
</span>
<label style="width:110px;"><span name="attr_aablname" ></span></label>
<label>+<span name="attr_aablatkrollaimdice"></span> <span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;+<span name="attr_aablatkrollcritdice"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tooltip"><span name="attr_aablatkrolldamage"></span> (+<span name="attr_aablatkrollcritdamage" value="0"></span>)<span class="tooltiptext">Damage</span></span></label>
</div>
</fieldset>
</div>
<div class="customattack attack clearfix">
<button type="roll" name="roll_attackcustom" class="btn" value="&{template:zafir} {{name=@{custattackname}}} {{aim=[[(@{custattackaimdice})d6>5]]}} {{crit=[[(@{custattackcritdice})d6>6]]}} {{damage=[[(@{custattackdamage})]]}} {{critdmg=[[(@{custattackdamage}) + (@{custcritdamage})]]}} {{player=@{char_name}}}"><span data-i18n="Attack">Attack</span></button>
<input type="text" name="attr_custattackname" spellcheck="false" placeholder="Custom Atk" style="width:110px;margin-right:10px;">
<label>+<span name="attr_custattackaimdice"></span> <span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;+<span name="attr_custattackcritdice"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tooltip"><input type="text" name="attr_custattackdamage" spellcheck="false" value="0"><span class="tooltiptext">Damage</span></span><span class="tooltip">(+<input type="number" name="attr_custcritdamage" value="0">)<span class="tooltiptext" data-i18n="Crit Damage">Crit Damage</span></span></label>
</div>
</div>
<div class="cgn">
<!-- Grenade Attack -->
<h3 data-i18n="Grenade Attack">Grenade Attack</h3>
<label data-i18n="Targets:">Targets:</label><input style="margin-right:8px;" type="number" name="attr_gtargets" value="1" min="1" max="5">
<label style="width:80px;" data-i18n="Effects:">Effects:</label><input style="width:279px;" type="text" name="attr_geffects" value="">
<div class="customattack attack clearfix">
<button type="roll" name="roll_gatk" class="btn"
value="&{template:zafirgrenade} {{name=@{gatkname}}} {{targets=@{gtargets}}} {{targetsroll=[[@{gtargets}]]}} {{crit1=[[(@{gatkcritdice})d6>6]]}} {{damage1=[[@{gatkdamage}]]}} {{critdmg1=[[@{gatkdamage} + @{gatkcritdamage}]]}} {{crit2=[[(@{gatkcritdice})d6>6]]}} {{damage2=[[@{gatkdamage}]]}} {{critdmg2=[[@{gatkdamage} + @{gatkcritdamage}]]}} {{crit3=[[(@{gatkcritdice})d6>6]]}} {{damage3=[[@{gatkdamage}]]}} {{critdmg3=[[@{gatkdamage} + @{gatkcritdamage}]]}} {{crit4=[[(@{gatkcritdice})d6>6]]}} {{damage4=[[@{gatkdamage}]]}} {{critdmg4=[[@{gatkdamage} + @{gatkcritdamage}]]}} {{crit5=[[(@{gatkcritdice})d6>6]]}} {{damage5=[[@{gatkdamage}]]}} {{critdmg5=[[@{gatkdamage} + @{gatkcritdamage}]]}} {{notes=@{geffects}}} {{player=@{char_name}}}"><span data-i18n="Grenade Attack">Grenade Attack</span></button>
<input type="text" name="attr_gatkname" spellcheck="false" placeholder="Grenade Type" style="width:110px;margin-right:10px;">
<label>&nbsp;<input type="number" name="attr_gatkcritdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gatkdamage" spellcheck="false" value="0">(+<input type="number" name="attr_gatkcritdamage" value="0">)</label>
</div>
<br />
<h3 data-i18n="Abilities">Abilities</h3>
<label data-i18n="Targets:">Targets:</label><input style="margin-right:8px;" type="number" name="attr_areaabltargets" value="1" min="1" max="5">
<div class="readonly">
<fieldset class="repeating_activeabilities">
<input type="hidden" name="attr_aablname" />
<input type="hidden" name="attr_aablcooldown" />
<input type="hidden" name="attr_aablcharges" />
<input type="hidden" name="attr_aablatkrollcritdice" />
<input type="hidden" name="attr_aablatkrolldamage" />
<input type="hidden" name="attr_aablatkrollcritdamage" />
<input type="hidden" name="attr_aablatkeffects" />
<input type="hidden" class="tabstoggle" name="attr_aabltype" />
<div class="attack clearfix aablArea">
<input type="hidden" class="hideifzero" name="attr_aablnocharges" value="0" />
<span>
<label class="attacklabel" data-i18n="Out of Charges!">Out of Charges!</label>
</span>
<input type="hidden" class="hideifone" name="attr_aablnocharges" value="0" />
<span>
<input type="hidden" class="hideifzero" name="attr_aabloncooldown" value="0" />
<span>
<label class="attacklabel" data-i18n="Ability On Cooldown!">Ability On Cooldown!</label>
</span>
<input type="hidden" class="hideifone" name="attr_aabloncooldown" value="0" />
<span>
<input type="hidden" class="hideifzero" name="attr_aablcooldown" value="0"/>
<button type="action" name="act_setcooldown" class="btn tooltip" style="width:12px;padding-left:6px;padding-right:6px;">
<span style="font-family:Pictos">t</span>
<span class="tooltiptext" style="left:2px;" data-i18n="Cooldown Tooltip"><b>Set Cooldown</b><hr />Put ability on cooldown</span></button>
<input type="hidden" class="hideifzero" name="attr_aablcharges" value="0"/>
<button type="action" name="act_usecharge" class="btn tooltip" style="width:12px;padding-left:6px;padding-right:6px;">
<span style="font-family:Pictos">}</span>
<span class="tooltiptext" style="left:2px;" data-i18n="Charges Tooltip"><b>Use Charge</b><hr />Expend ability charge</span></button>
<button type="roll" name="roll_gatk" class="btn"
value="&{template:zafirgrenade} {{name=@{aablname}}} {{targets=@{areaabltargets}}} {{targetsroll=[[@{areaabltargets}]]}} {{crit1=[[(@{aablatkrollcritdice})d6>6]]}} {{damage1=[[@{aablatkrolldamage}]]}} {{critdmg1=[[@{aablatkrolldamage} + @{aablatkrollcritdamage}]]}} {{crit2=[[(@{aablatkrollcritdice})d6>6]]}} {{damage2=[[@{aablatkrolldamage}]]}} {{critdmg2=[[@{aablatkrolldamage} + @{aablatkrollcritdamage}]]}} {{crit3=[[(@{aablatkrollcritdice})d6>6]]}} {{damage3=[[@{aablatkrolldamage}]]}} {{critdmg3=[[@{aablatkrolldamage} + @{aablatkrollcritdamage}]]}} {{crit4=[[(@{aablatkrollcritdice})d6>6]]}} {{damage4=[[@{aablatkrolldamage}]]}} {{critdmg4=[[@{aablatkrolldamage} + @{aablatkrollcritdamage}]]}} {{crit5=[[(@{aablatkrollcritdice})d6>6]]}} {{damage5=[[@{aablatkrolldamage}]]}} {{critdmg5=[[@{aablatkrolldamage} + @{aablatkrollcritdamage}]]}} {{notes=@{aablatkeffects}}} {{player=@{char_name}}}"><span data-i18n="Grenade Attack">Grenade Attack</span></button>
</span>
</span>
<label><span name="attr_aablname" ></span></label>
<label>&nbsp;<span name="attr_aablatkrollcritdice"></span>&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span name="attr_aablatkrolldamage"></span> (+<span name="attr_aablatkrollcritdamage"></span>)</label>
</div>
</fieldset>
</div>
</div>
<div class="cwl">
<h3 data-i18n="Will Attack">Will Attack</h3>
<label data-i18n="Wounded:">Wounded:</label><select name="attr_willatkwounded">
<option value="No" data-i18n="Full Health Option">Target at Full Health (+0)</option>
<option value="Yes" data-i18n="Wounded Option">Target Wounded (+1 will)</option>
</select><br />
<label data-i18n="Conditions:">Conditions:</label><select name="attr_willatkcondition">
<option value="No" data-i18n="No Conditions Option">None (+0)</option>
<option value="Yes" data-i18n="Some Conditions Option">Target has Negative Condition (+1 will)</option>
</select><br />
<label data-i18n="Isolated:">Isolated:</label><select name="attr_willatkisolated">
<option value="No" data-i18n="Not Isolated Option">No (+0)</option>
<option value="Yes" data-i18n="Isolated Option">Target is Isolated (no allies within 4 tiles) (+1 will)</option>
</select><br />
<label data-i18n="Panic:">Panic:</label><select name="attr_willatkpanic">
<option value="No" data-i18n="Not Panicked Option">No (+0)</option>
<option value="Ally" data-i18n="Ally Panicked Option">Target's Ally Panicked (+1 will)</option>
<option value="Target" data-i18n="Target Panicked Option">Target is Panicked (+1 will, +2 crit)</option>
</select><br />
<label data-i18n="Bonus Will:">Bonus Will:</label><input style="width:18%;position:relative;right:3px;margin-right:93px;" type="number" value="0" name="attr_bonuswill" />
<label data-i18n="Bonus Crit:">Bonus Crit:</label><input style="width:18%;position:relative;right:3px;" type="number" value="0" name="attr_bonuswillcrit" /><br />
<label data-i18n="Enemy Will:">Enemy Will:</label><input style="width:18%;position:relative;right:3px;" type="number" value="0" name="attr_enemywill" />
<div class="readonly">
<fieldset class="repeating_activeabilities">
<input type="hidden" name="attr_aablname" />
<input type="hidden" name="attr_aablcooldown" />
<input type="hidden" name="attr_aablcharges" />
<input type="hidden" name="attr_aablwillatkaimdice" />
<input type="hidden" name="attr_aablwillatkcritdice" />
<input type="hidden" name="attr_aablresist" />
<input type="hidden" class="tabstoggle" name="attr_aabltype" />
<div class="attack clearfix willattack aablWill">
<input type="hidden" class="hideifzero" name="attr_aablnocharges" value="0" />
<span>
<label class="attacklabel" data-i18n="Out of Charges!">Out of Charges!</label>
</span>
<input type="hidden" class="hideifone" name="attr_aablnocharges" value="0" />
<span>
<input type="hidden" class="hideifzero" name="attr_aabloncooldown" value="0" />
<span>
<label class="attacklabel" data-i18n="Ability On Cooldown!">Ability On Cooldown!</label>
</span>
<input type="hidden" class="hideifone" name="attr_aabloncooldown" value="0" />
<span>
<input type="hidden" class="hideifzero" name="attr_aablcooldown" value="0"/>
<button type="action" name="act_setcooldown" class="btn tooltip" style="width:12px;padding-left:6px;padding-right:6px;">
<span style="font-family:Pictos">t</span>
<span class="tooltiptext" style="left:2px;" data-i18n="Cooldown Tooltip"><b>Set Cooldown</b><hr />Put ability on cooldown</span></button>
<input type="hidden" class="hideifzero" name="attr_aablcharges" value="0"/>
<button type="action" name="act_usecharge" class="btn tooltip" style="width:12px;padding-left:6px;padding-right:6px;">
<span style="font-family:Pictos">}</span>
<span class="tooltiptext" style="left:2px;" data-i18n="Charges Tooltip"><b>Use Charge</b><hr />Expend ability charge</span></button>
<button type="roll" name="roll_willattack" class="btn" value="&{template:zafirwillattack} {{name=@{aablname}}} {{aim=[[(@{aablwillatkaimdice})d6>5 [Will Attack]]]}} {{crit=[[(@{aablwillatkcritdice})d6>6 [Crit Effect]]]}} {{resist=[[(@{aablresist})d6>6 [Resist]]]}} {{player=@{char_name}}}"><span data-i18n="Will Attack">Will Attack</span></button>
</span>
</span>
<label style="width:110px;"><span name="attr_aablname" ></span></label>
<label>+<span name="attr_aablwillatkaimdice"></span> <span data-i18n="will">will</span>&nbsp;&nbsp;&nbsp;+<span name="attr_aablwillatkcritdice"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;+<span name="attr_aablresist"></span> <span data-i18n="resist">resist</span</label>
</div>
</fieldset>
</div>
<div class="attack clearfix willattack">
<button type="roll" name="roll_willattack" class="btn" value="&{template:zafirwillattack} {{name=@{custwillattackname}}} {{aim=[[(@{willattackaimdice})d6>5 [Will Attack]]]}} {{crit=[[(@{willattackcritdice})d6>6 [Crit Effect]]]}} {{resist=[[(@{willattackresistdice})d6>6 [Resist]]]}} {{player=@{char_name}}}"><span data-i18n="Will Attack">Will Attack</span></button>
<input type="text" name="attr_custwillattackname" spellcheck="false" placeholder="Ability Name" style="width:110px;margin-right:10px;">
<label>+<span name="attr_willattackaimdice"></span> <span data-i18n="will">will</span>&nbsp;&nbsp;&nbsp;+<span name="attr_willattackcritdice"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;+<span name="attr_willattackresistdice"></span> <span data-i18n="resist">resist</span</label>
</div>
</div>
</div>
<div class="col2 nowrap">
<div class="clearfix">
<button type="action" name="act_roundstart" class="btn"><span data-i18n="Round Start">Round Start</span></button>
<button type="action" name="act_initcombat" class="btn"><span data-i18n="Mission Start">Mission Start</span></button>
</div>
<input type="hidden" class="hideifzero" name="attr_showammotracker" value="1"/>
<div>
<input type="hidden" class="valuehider" name="attr_wpname" value="">
<div>
<h3 data-i18n="Ammo Tracker">Ammo Tracker</h3>
<div class="paneltracker ammotrack clearfix">
<button type="action" name="act_reloadprimary" class="btn"><span data-i18n="Reload">Reload</span></button>
<label style="width:110px"><span name="attr_wpname"></span>:</label><input type="number" name="attr_wpammo" value="0" /><span class="labellike">&nbsp;/&nbsp;</span><span class="labellike" name="attr_wpammo_max"></span><br/>
</div>
</div>
</div>
<input type="hidden" class="hideifzero" name="attr_showconcealment" value="1"/>
<div>
<input type="hidden" class="valuehider" name="attr_wpname" value="">
<div>
<h3 data-i18n="Concealment Tracker">Concealment Tracker</h3>
<input type="hidden" class="hideifone" name="attr_concealed" value="0">
<div class="paneltracker revealed clearfix">
<button type="action" name="act_conceal" class="btn"><span data-i18n="Conceal">Conceal</span></button>
<label data-i18n="Revealed">Revealed</label>
</div>
<input type="hidden" class="hideifzero" name="attr_concealed" value="0">
<div class="paneltracker concealed clearfix">
<button type="action" name="act_reveal" class="btn"><span data-i18n="Reveal">Reveal</span></button>
<label data-i18n="Concealed">Concealed</label>
</div>
</div>
</div>
<input type="hidden" class="hideifzero" name="attr_showdodgeroller" value="1"/>
<div>
<h3 data-i18n="Dodge Roller">Dodge Roller</h3>
<div class="paneltracker dodgeroller clearfix">
<button type="roll" name="roll_dodge" class="btn" value="&{template:zafirdodge} {{dodge=[[(@{dodgedice})d6>6]]}} {{player=@{char_name}}}"><span data-i18n="Dodge">Dodge</span></button>
<label style="width:110px" data-i18n="Dodge Dice:">Dodge Dice:</label><input type="number" name="attr_dodgedice" value="0" />
</div>
</div>
<input type="hidden" class="hideifzero" name="attr_showconditiontracker" value="1"/>
<div>
<h3 data-i18n="Condition Tracker">Condition Tracker</h3>
<div class="inset nowrap tracker clearfix">
<fieldset class="repeating_conditiontracker">
<input type="text" spellcheck="false" name="attr_conditionname" />
<input type="number" name="attr_conditionvalue" />
</fieldset>
</div>
</div>
<input type="hidden" class="hideifzero" name="attr_showcooldowntracker" value="1"/>
<div>
<h3 data-i18n="Cooldown Tracker">Cooldown Tracker</h3>
<div class="inset nowrap tracker clearfix">
<fieldset class="repeating_cooldowntracker">
<input type="text" spellcheck="false" name="attr_cooldownname" />
<input type="number" name="attr_cooldownvalue" value="0"/>
</fieldset>
</div>
</div>
<input type="hidden" class="hideifzero" name="attr_showchargestracker" value="1"/>
<div>
<h3 data-i18n="Charges Tracker">Charges Tracker</h3>
<div class="inset nowrap tracker clearfix">
<fieldset class="repeating_chargetracker">
<input type="text" spellcheck="false" name="attr_chargename" />
<input type="number" name="attr_chargevalue" />
</fieldset>
</div>
</div>
</div>
</div>
</div>
<!-- Abilities -->
<div class="aab">
<input type="hidden" class="tabstoggle" name="attr_sheetTabAbilities" value="aaa" />
<div class="tabrow">
<h2 data-i18n="Abilities">Abilities</h2>
<button type="action" name="act_aaa" class="aaabtn"><span data-i18n="Active Abilities">Active Abilities</span></button>
<button type="action" name="act_apa" class="apabtn"><span data-i18n="Passive Abilities">Passive Abilities</span></button>
</div>
<br />
<div class="aaa">
<h3 data-i18n="Active Abilities">Active Abilities</h3>
<fieldset class="repeating_activeabilities">
<div class="2colrow">
<div class="col1 nowrap">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_aablname" />
<label data-i18n="Activation:">Activation:</label>
<select name="attr_aablactivation">
<option value="Free Action" data-i18n="Free Action Option">Free Action</option>
<option value="Action" data-i18n="Action Option">Action</option>
<option value="Action + Ends Turn" data-i18n="Action End Turn Option">Action + Ends Turn</option>
</select>
<br/>
<label data-i18n="Range:">Range:</label>
<select name="attr_aablrange" class="rangeselect">
<option value="Self" data-i18n="Self Range Option">Self</option>
<option value="Weapon" data-i18n="Weapon Range Option">Weapon</option>
<option value="Adjacent" data-i18n="Adjacent Range Option">Adjacent</option>
<option value="Short" data-i18n="Short Range Option">Short</option>
<option value="Medium" data-i18n="Medium Range Option">Medium</option>
<option value="Long" data-i18n="Long Range Option">Long</option>
<option value="-" data-i18n="None Range Option">-</option>
</select>
<label style="margin-left:27px;" data-i18n="Cooldown:">Cooldown:</label><input type="number" name="attr_aablcooldown" value="0" />
<label style="margin-left:27px;" data-i18n="Charges:">Charges:</label><input type="number" name="attr_aablcharges" value="0" /><br/>
<label data-i18n="Effect:">Effect:</label><textarea name="attr_aableffect"></textarea>
</div>
<div class="col2">
<label data-i18n="Type:">Type:</label>
<select name="attr_aabltype">
<option value="Standard" data-i18n="Standard Ability">Standard Ability</option>
<option value="Weapon" data-i18n="Attack">Attack</option>
<option value="Area" data-i18n="Area of Effect">Area of Effect</option>
<option value="Will" data-i18n="Will Attack">Will Attack</option>
</select>
<input type="hidden" class="tabstoggle" name="attr_aabltype" value="Standard" />
<div class="aablStandard">
<input type="hidden" class="hideifzero" name="attr_aablnocharges" value="0" />
<div>
<label class="attacklabel">Out of Charges!</label>
</div>
<input type="hidden" class="hideifone" name="attr_aablnocharges" value="0" />
<div>
<input type="hidden" class="hideifzero" name="attr_aabloncooldown" value="0" />
<div>
<label class="attacklabel">Ability On Cooldown!</label>
</div>
<input type="hidden" class="hideifone" name="attr_aabloncooldown" value="0" />
<div>
<input type="hidden" class="hideifzero" name="attr_aablcooldown" value="0"/>
<button type="action" name="act_setcooldown" class="btn tooltip">
<span style="font-family:Pictos">t</span> Set On Cooldown
<span class="tooltiptext" style="left:11px;"><b>Set On Cooldown</b><hr />Put ability on cooldown</span></button>
<br />
<input type="hidden" class="hideifzero" name="attr_aablcharges" value="0"/>
<button type="action" name="act_usecharge" class="btn tooltip">
<span style="font-family:Pictos">}</span> Use Charge (<span name="attr_aablchargesleft"></span>/<span name="attr_aablcharges"></span>)
<span class="tooltiptext" style="left:11px;"><b>Use Charge</b><hr />Expend ability charge</span></button>
</div>
</div>
</div>
<div class="aablWeapon nowrap">
<span class="labellike help tooltip" style="right:40px;top:-32px;">&nbsp;<span style="font-family:Pictos">?</span><span class="tooltiptext" data-i18n="Weapon Attack Tooltip"><b>Attack</b><hr />This ability appears as a <em>Attack</em> on the Combat panel.</span></span>
<label data-i18n="Weapon:">Weapon:</label>
<select name="attr_aablatkweap" style="width:211px;margin-right:0;">
<option value="Nothing" data-i18n="Does Not Use Weapon">Does Not Use Weapon</option>
<option value="Primary" data-i18n="Primary Weapon">Primary Weapon</option>
<option value="Secondary" data-i18n="Secondary Weapon">Secondary Weapon</option>
</select><br />
<label style="margin-left:0px;" data-i18n="Aim Dice:">Aim Dice:</label><input type="number" name="attr_aablatkaim" value="0" />
<label style="margin-left:17px;" data-i18n="Crit Dice:">Crit Dice:</label><input type="number" name="attr_aablatkcrit" value="0" /><br/>
<input type="hidden" class="tabstoggle" name="attr_aablatkweap" value="Nothing" />
<div class="nothing">
<label data-i18n="Damage:">Damage:</label><input style="width:62px;margin-right:0;" type="text" spellcheck="false" name="attr_aablatkdmg" />
<label style="width:90px;margin-left:0px;" data-i18n="Crit Dmg:">Crit Dmg:</label><input type="number" name="attr_aablatkcritdmg" value="0" /><br/>
</div>
<div class="weapon">
<label data-i18n="Bonus Dmg:">Bonus Dmg:</label><input type="number" name="attr_aablatkbonusdmg" value="0" />
</div>
</div>
<div class="aablArea">
<span class="labellike help tooltip" style="right:40px;top:-32px;">&nbsp;<span style="font-family:Pictos">?</span><span class="tooltiptext" data-i18n="Area Attack Tooltip"><b>Area of Effect</b><hr />This ability appears as an <em>Area of Effect</em> on the Combat panel.</span></span>
<label data-i18n="Damage:">Damage:</label><input style="width:207px;margin-right:0;" type="text" spellcheck="false" name="attr_aablatkdmg" /><br/>
<label data-i18n="Crit Dice:">Crit Dice:</label><input type="number" name="attr_aablatkcrit" value="0" />
<label style="width:90px;margin-left:13px;" data-i18n="Crit Dmg:">Crit Dmg:</label><input type="number" name="attr_aablatkcritdmg" value="0" />
<label data-i18n="Effects:">Effects:</label><input style="width:207px;margin-right:0;" type="text" spellcheck="false" name="attr_aablatkeffects" /><br/>
</div>
<div class="aablWill wrap">
<span class="labellike help tooltip" style="right:40px;top:-32px;">&nbsp;<span style="font-family:Pictos">?</span><span class="tooltiptext" data-i18n="Will Attack Tooltip"><b>Will Attack</b><hr />This ability appears as a <em>Will Attack</em> on the Combat panel.</span></span>
<label data-i18n="Crit Dice:">Crit Dice:</label><input type="number" name="attr_aablcritdice" value="0" />
</div>
</div>
</div>
<hr style="margin-top:4px;" />
</fieldset>
</div>
<div class="apa">
<h3 data-i18n="Passive Abilities">Passive Abilities</h3>
<fieldset class="repeating_passiveabilities">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_pablname" /><br/>
<label data-i18n="Effect:">Effect:</label><textarea name="attr_pableffect"></textarea>
<hr />
</fieldset>
</div>
</div>
<!-- Equipment -->
<div class="eqp">
<input type="hidden" class="tabstoggle" name="attr_sheetTabEqp" value="epw" />
<div class="tabrow">
<h2 data-i18n="Equipment">Equipment</h2>
<button type="action" name="act_epw" class="epwbtn"><span data-i18n="Primary Weapon">Primary Weapon</span></button>
<button type="action" name="act_esw" class="eswbtn"><span data-i18n="Secondary Weapon">Secondary Weapon</span></button>
<button type="action" name="act_eba" class="ebabtn"><span data-i18n="Body Armor">Body Armor</span></button>
<button type="action" name="act_ehg" class="ehgbtn"><span data-i18n="Headgear">Headgear</span></button>
</div>
<br />
<div class="epw">
<div style="display:inline-block;float:right;margin-right:4px;">
<span data-i18n="Type:" class="labellike">Type:</span>&nbsp;&nbsp;<select name="attr_wptype" style="width:200px;" value="Weapon">
<option value="Weapon" data-i18n="Weapon">Weapon</option>
<option value="Special Equipment" data-i18n="Special Equipment">Special Equipment</option>
</select>
</div>
<input type="hidden" name="attr_wptype" class="weaponhider">
<div class="weapon">
<h3 data-i18n="Primary Weapon">Primary Weapon</h3>
</div>
<div class="specialequipment">
<h3 data-i18n="Special Equipment">Special Equipment</h3>
</div>
<div class="2colrow">
<div class="col nowrap">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_wpname" /><br/>
<input type="hidden" name="attr_wptype" class="weaponhider">
<div class="weapon">
<label data-i18n="Range:">Range:</label>
<select name="attr_wprange">
<option value="Adjacent" data-i18n="Adjacent Range Option">Adjacent</option>
<option value="Short" data-i18n="Short Range Option">Short</option>
<option value="Medium" data-i18n="Medium Range Option">Medium</option>
<option value="Long" data-i18n="Long Range Option">Long</option>
</select>
<br/>
<div class="2colrowx">
<div class="colx">
<label data-i18n="Aim Dice:">Aim Dice:</label><input type="number" name="attr_wpaimdice" value="0" />
</div>
<div class="colx">
<label data-i18n="Crit Dice:">Crit Dice:</label><input type="number" name="attr_wpcritdice" value="0" />
</div>
</div>
<label data-i18n="Damage:">Damage:</label><input type="text" spellcheck="false" name="attr_wpdamage" value="0" /><br/>
<div class="2colrowx">
<div class="colx">
<label data-i18n="Crit Dmg:">Crit Dmg:</label><input type="number" name="attr_wpcritdmg" value="0" />
</div>
<div class="colx">
<label data-i18n="Max Ammo:">Max Ammo:</label><input type="number" name="attr_wpammo_max" value="0" />
</div>
</div>
</div>
<div class="specialequipment">
<div class="clearfix">
<label data-i18n="Notes:">Notes:</label><textarea name="attr_wpnotes"></textarea>
</div>
<label data-i18n="Mod Slots:">Mod Slots:</label><input type="number" name="attr_wp_modslots" value="0" /><br/>
<div class="clearfix">
<label data-i18n="Mods:">Mods:</label><textarea name="attr_wpmods"></textarea>
</div>
</div>
</div>
<div class="col">
<input type="hidden" name="attr_wptype" class="weaponhider">
<div class="weapon">
<div class="clearfix">
<label data-i18n="Notes:">Notes:</label><textarea name="attr_wpnotes"></textarea>
</div>
<label data-i18n="Mod Slots:">Mod Slots:</label><input type="number" name="attr_wp_modslots" value="0" /><br/>
<div class="clearfix">
<label data-i18n="Mods:">Mods:</label><textarea name="attr_wpmods"></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="esw">
<h3 data-i18n="Secondary Weapon">Secondary Weapon</h3>
<div class="2colrow">
<div class="col nowrap">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_wsname" /><br/>
<label data-i18n="Range:">Range:</label>
<select name="attr_wsrange">
<option value="Adjacent" data-i18n="Adjacent Range Option">Adjacent</option>
<option value="Short" data-i18n="Short Range Option">Short</option>
<option value="Medium" data-i18n="Medium Range Option">Medium</option>
<option value="Long" data-i18n="Long Range Option">Long</option>
</select>
<br/>
<div class="2colrowx">
<div class="colx">
<label data-i18n="Aim Dice:">Aim Dice:</label><input type="number" name="attr_wsaimdice" value="0" />
</div>
<div class="colx">
<label data-i18n="Crit Dice:">Crit Dice:</label><input type="number" name="attr_wscritdice" value="0" />
</div>
</div>
<label data-i18n="Damage:">Damage:</label><input type="text" spellcheck="false" name="attr_wsdamage" value="0" /><br/>
<div class="2colrowx">
<div class="colx">
<label data-i18n="Crit Dmg:">Crit Dmg:</label><input type="number" name="attr_wscritdmg" value="0" />
</div>
</div>
</div>
<div class="col">
<div class="clearfix">
<label data-i18n="Notes:">Notes:</label><textarea name="attr_wsnotes"></textarea>
</div>
<label data-i18n="Mod Slots:">Mod Slots:</label><input type="number" name="attr_ws_modslots" value="0" /><br/>
<div class="clearfix">
<label data-i18n="Mods:">Mods:</label><textarea name="attr_wsmods"></textarea>
</div>
</div>
</div>
</div>
<div class="eba">
<h3 data-i18n="Body Armor">Body Armor</h3>
<div class="2colrow">
<div class="col nowrap">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_baname" /><br/>
<label data-i18n="Hit Points:">HP:</label><input type="number" name="attr_bahp" style="margin-right:10px;" value="0" />
<label style="width:74px;" data-i18n="Armor Points:">AP:</label><input type="number" name="attr_baap" style="margin-right:10px;" value="0" />
<label style="width:73px;" data-i18n="Shield Points:">SP:</label><input type="number" name="attr_basp" value="0" />
<div class="clearfix">
<label data-i18n="Notes:">Notes:</label><textarea name="attr_banotes"></textarea>
</div>
<label data-i18n="Mod Slots:">Mod Slots:</label><input type="number" name="attr_ba_modslots" value="0" /><br/>
<div class="clearfix">
<label data-i18n="Mods:">Mods:</label><textarea name="attr_bamods"></textarea>
</div>
</div>
<div class="col pockets">
<span class="labellike help tooltip">&nbsp;<span style="font-family:Pictos">?</span><span class="tooltiptext"><b>Empty Pockets:</b><br/>To get an empty pocket to stay on the character sheet, put a dash (-) in the text field.</span></span>
<h3 data-i18n="Pockets">Pockets</h3>
<fieldset class="repeating_bapockets">
<select name="attr_pocketname" style="position:relative;top:-1px;">
<option value="Utility" data-i18n="Utility Pocket Option">Utility</option>
<option value="Grenade" data-i18n="Grenade Pocket Option">Grenade</option>
<option value="Special Ammo" data-i18n="Special Ammo Pocket Option">Special Ammo</option>
<option value="Hardpoint" data-i18n="Hardpoint Pocket Option">Hardpoint</option>
</select>
<input type="text" spellcheck="false" name="attr_pocketitemname" />
</fieldset>
</div>
</div>
</div>
<div class="ehg">
<h3 data-i18n="Headgear">Headgear</h3>
<div class="2colrow">
<div class="col">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_hgname" /><br/>
<div class="clearfix">
<label data-i18n="Effects:">Effects:</label><textarea name="attr_hgeffects"></textarea>
</div>
</div>
<div class="col">
</div>
</div>
</div>
</div>
<!-- Responsibilities -->
<div class="res">
<h2 data-i18n="Responsibilities">Responsibilities</h2>
<div class="2colrow">
<div class="col2">
<label data-i18n="Acquisition:">Acquisition:</label><input type="number" name="attr_acquisition" value="0" />
<button type="action" name="act_useacquisition" class="skillbtn"><span data-i18n="Use">Use</span></button><br/>
<label data-i18n="Arcana:">Arcana:</label><input type="number" name="attr_arcana" value="0" />
<button type="action" name="act_usearcana" class="skillbtn"><span data-i18n="Use">Use</span></button><br/>
<label data-i18n="Engineering:">Engineering:</label><input type="number" name="attr_engineering" value="0" />
<button type="action" name="act_useengineering" class="skillbtn"><span data-i18n="Use">Use</span></button><br/>
<label data-i18n="Entertainment:">Entertainment:</label><input type="number" name="attr_entertainment" value="0" />
<button type="action" name="act_useentertainment" class="skillbtn"><span data-i18n="Use">Use</span></button><br/>
<label data-i18n="Leadership:">Leadership:</label><input type="number" name="attr_leadership" value="0" />
<button type="action" name="act_useleadership" class="skillbtn"><span data-i18n="Use">Use</span></button><br/>
<label data-i18n="Medicine:">Medicine:</label><input type="number" name="attr_medicine" value="0" />
<button type="action" name="act_usemedicine" class="skillbtn"><span data-i18n="Use">Use</span></button><br/>
<label data-i18n="Navigation:">Navigation:</label><input type="number" name="attr_navigation" value="0" />
<button type="action" name="act_usenavigation" class="skillbtn"><span data-i18n="Use">Use</span></button><br/>
<label data-i18n="Security:">Security:</label><input type="number" name="attr_security" value="0" />
<button type="action" name="act_usesecurity" class="skillbtn"><span data-i18n="Use">Use</span></button><br/>
<label data-i18n="Spirituality:">Spirituality:</label><input type="number" name="attr_spirituality" value="0" />
<button type="action" name="act_usespirituality" class="skillbtn"><span data-i18n="Use">Use</span></button><br/>
<label data-i18n="Sustenance:">Sustenance:</label><input type="number" name="attr_sustenance" value="0" />
<button type="action" name="act_usesustenance" class="skillbtn"><span data-i18n="Use">Use</span></button>
</div>
<div class="col1 nowrap">
<h3 data-i18n="Skill Action">Skill Action</h3>
<label data-i18n="Difficulty:">Difficulty:</label><select name="attr_skilldifficulty">
<option value="Easy" data-i18n="Easy Difficulty Option">Easy (+2 skill)</option>
<option value="Average" data-i18n="Average Difficulty Option">Average (+1 skill)</option>
<option value="Difficult" data-i18n="Difficult Difficulty Option">Difficult (+0)</option>
</select><br />
<label data-i18n="Responsibility:">Responsibility:</label><select name="attr_skillresponsibility">
<option value="acquisition" data-i18n="Acquisition Option">Acquisition</option>
<option value="arcana" data-i18n="Arcana Option">Arcana</option>
<option value="engineering" data-i18n="Engineering Option">Engineering</option>
<option value="entertainment" data-i18n="Entertainment Option">Entertainment</option>
<option value="leadership" data-i18n="Leadership Option">Leadership</option>
<option value="medicine" data-i18n="Medicine Option">Medicine</option>
<option value="navigation" data-i18n="Navigation Option">Navigation</option>
<option value="security" data-i18n="Security Option">Security</option>
<option value="spirituality" data-i18n="Spirituality Option">Spirituality</option>
<option value="sustenance" data-i18n="Sustenance Option">Sustenance</option>
</select><br />
<label data-i18n="Assist:">Assist:</label><select name="attr_skillassist">
<option value="No" data-i18n="No Assist Option">No (+0)</option>
<option value="Yes" data-i18n="Assist Option">Assisted By Another Character (+1 skill)</option>
</select><br />
<label data-i18n="Equipment:">Equipment:</label><select name="attr_skillitem">
<option value="No" data-i18n="No Equipment Option">None (+0)</option>
<option value="Yes" data-i18n="Equipment Option">Using a Useful Item or Piece of Equipment (+1 skill)</option>
</select><br />
<label data-i18n="Bonus Skill:">Bonus Skill:</label><input style="width:18%;position:relative;right:3px;margin-right:93px;" type="number" value="0" name="attr_bonusskill" />
<label data-i18n="Bonus Crit:">Bonus Crit:</label><input style="width:18%;position:relative;right:3px;" type="number" value="0" name="attr_bonusskillcrit" />
<div class="attack clearfix skillroller">
<button type="roll" name="roll_skillaction" class="btn" value="&{template:zafirskillaction} {{name=@{skillname}}} {{aim=[[(@{skilldice})d6>5]]}} {{crit=[[(@{bonusskillcrit})d6>6]]}} {{responsibility=@{skillresponsibility}}} {{player=@{char_name}}}"><span data-i18n="Skill Roll">Skill Roll</span></button>
<select name="attr_skillname" style="width:110px;margin-right:10px;">
<option value="Coerce" data-i18n="Coerce Skill Option">Coerce</option>
<option value="Deceive" data-i18n="Deceive Skill Option">Deceive</option>
<option value="Persuade" data-i18n="Persuade Skill Option">Persuade</option>
<option value="Intuit" data-i18n="Intuit Skill Option">Intuit</option>
<option value="Investigate" data-i18n="Investigate Skill Option">Investigate</option>
<option value="Notice" data-i18n="Notice Skill Option">Notice</option>
<option value="Pilot" data-i18n="Pilot Skill Option">Pilot</option>
<option value="Stunts" data-i18n="Stunts Skill Option">Stunts</option>
<option value="Tinker" data-i18n="Tinker Skill Option">Tinker</option>
</select>
<label>+<span name="attr_skilldice"></span> <span data-i18n="skill">skill</span>&nbsp;&nbsp;&nbsp;+<span name="attr_bonusskillcrit"></span> <span data-i18n="crit">crit</span></label>
</div>
</div>
</div>
</div>
<!-- Inventory -->
<div class="inv">
<div class="3colrow">
<div class="col">
<h2 data-i18n="Money">Money</h2>
<label class="short money" style="font-family:Helvetica, Arial">₹</label><input type="number" class="expand" name="attr_money" value="0" /><br/>
</div>
<div class="col">
<h2 data-i18n="Inventory">Inventory</h2>
<textarea name="attr_inventory"></textarea>
</div>
<div class="col">
</div>
</div>
</div>
<!-- Misc -->
<div class="oth">
<div class="3colrow">
<div class="col">
<div class="clearfix">
<h2 data-i18n="Proficiencies">Proficiencies</h2>
<textarea name="attr_proficiencies"></textarea>
</div>
<br />
<h2 data-i18n="Z-mail Address">Z-mail Address</h2>
<input type="text" class="full" spellcheck="false" name="attr_zmail" />
</div>
<div class="col">
<h2 data-i18n="Languages">Languages</h2>
<h3 data-i18n="Fluent">Fluent</h3>
<textarea name="attr_fluentlanguages"></textarea>
<br />
<h3 data-i18n="Conversational">Conversational</h3>
<textarea name="attr_conversationallanguages"></textarea>
</div>
<div class="col">
<h2 data-i18n="Settings">Settings</h2>
<div>
<h3 data-i18n="General Sheet Options">General Sheet Options</h3>
<label style="width:250px;" data-i18n="Condense Upper Sheet:">Condense Upper Sheet:</label><input type="checkbox" name="attr_condensesheet" value="1"/><br />
<label style="width:250px;" data-i18n="Large Origin Textbox:">Large Origin Textbox:</label><input type="checkbox" name="attr_largeorigin" value="1"/><br />
<label style="width:250px;" data-i18n="Show Focus:">Show Focus:</label><input type="checkbox" name="attr_showfocus" value="1" checked /><br />
</div>
<div>
<h3 data-i18n="Combat Tab Options">Combat Tab Options</h3>
<label style="width:250px;" data-i18n="Show Ammo Tracker:">Show Ammo Tracker:</label><input type="checkbox" name="attr_showammotracker" value="1" checked /><br />
<label style="width:250px;" data-i18n="Show Concealment:">Show Concealment:</label><input type="checkbox" name="attr_showconcealment" value="1" checked /><br />
<label style="width:250px;" data-i18n="Show Dodge Roller:">Show Dodge Roller:</label><input type="checkbox" name="attr_showdodgeroller" value="1" checked /><br />
<label style="width:250px;" data-i18n="Show Condition Tracker:">Show Condition Tracker:</label><input type="checkbox" name="attr_showconditiontracker" value="1" checked /><br />
<label style="width:250px;" data-i18n="Show Cooldown Tracker:">Show Cooldown Tracker:</label><input type="checkbox" name="attr_showcooldowntracker" value="1" checked /><br />
<label style="width:250px;" data-i18n="Show Charges Tracker:">Show Charges Tracker:</label><input type="checkbox" name="attr_showchargestracker" value="1" checked />
</div>
<div>
<h3 data-i18n="Game Master Options">Game Master Options</h3>
<button type="action" name="act_switchsheettype" class="btn" style="float:none;margin-left:0;"><span data-i18n="Switch to Game Master's Toolkit">Switch to Game Master's Toolkit</span></button>
</div>
</div>
</div>
</div>
</div>
<div class="gmtools">
<button type="action" name="act_switchsheettype" class="btn" style="position:relative;top:-15px;"><span data-i18n="Switch to Character Sheet">Switch to Character Sheet</span></button>
<input type="hidden" class="tabstoggle" name="attr_gmTab" value="gmcombat" />
<div class="tabrow">
<h2 data-i18n="Game Master's Toolkit">Game Master's Toolkit</h2>
<button type="action" name="act_gmcombat" class="gmcombatbtn"><span data-i18n="Combat">Combat</span></button>
<button type="action" name="act_gmunits" class="gmunitsbtn"><span data-i18n="Enemy Units">Enemy Units</span></button>
</div>
<br />
<div class="gmcombat">
<div class="2colrow">
<div class="col1 nowrap">
<h3 data-i18n="Attack">Attack</h3>
<label data-i18n="Target Cover:">Target Cover:</label><select name="attr_atkcover">
<option value="Full Cover" data-i18n="Full Cover Option">Full Cover (+0)</option>
<option value="Half Cover" data-i18n="Half Cover Option">Half Cover (+1 aim)</option>
<option value="No Cover" data-i18n="No Cover Option">No Cover (+2 aim/+2 crit)</option>
</select><br />
<label data-i18n="Elevation:">Elevation:</label><select name="attr_atkelevation">
<option value="None" data-i18n="No Elevation Option">None (+0)</option>
<option value="Elevation" data-i18n="Elevation Option">Elevation (+1 aim)</option>
</select><br />
<label data-i18n="Range:">Range:</label><select name="attr_atkrange">
<option value="Optimal Range" data-i18n="Optimal Range Option">Optimal Range (+0)</option>
<option value="Non-optimal" data-i18n="Out Of Range Option">Too Close/Too Far (-1 aim)</option>
</select><br />
<label data-i18n="Overwatch:">Overwatch:</label><select name="attr_atkoverwatch">
<option value="No" data-i18n="Normal Attack Option">Normal Attack (+0)</option>
<option value="Yes" data-i18n="Overwatch Attack Option">Overwatch Reaction Attack (-1 aim)</option>
</select>
<br />
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmatk" class="btn" value="&{template:zafir} {{name=@{gmatkname}}} {{aim=[[(@{gmatkaimdicetotal})d6>5]]}} {{crit=[[(@{gmatkcritdicetotal})d6>6]]}} {{damage=[[(@{gmatkdamage})]]}} {{critdmg=[[(@{gmatkdamage}) + (@{gmatkcritdamage})]]}} {{notes=@{selectedenemyatknotes}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Attack">Attack</span></button>
<input type="text" name="attr_gmatkname" spellcheck="false" placeholder="Attack Name" style="width:110px;margin-right:10px;">
<label>&nbsp;&nbsp;<input type="number" name="attr_gmatkaimdice" value="0">&nbsp;<span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;<input type="number" name="attr_gmatkcritdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gmatkdamage" spellcheck="false" value="0">(+<input type="number" name="attr_gmatkcritdamage" value="0">)</label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk1_id" value="">
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmatk1" class="btn" value="&{template:zafir} {{name=@{gmatk1name}}} {{aim=[[(@{gmatk1aimdicetotal})d6>5]]}} {{crit=[[(@{gmatk1critdicetotal})d6>6]]}} {{damage=[[(@{gmatk1damage})]]}} {{critdmg=[[(@{gmatk1damage}) + (@{gmatk1critdamage})]]}} {{notes=@{selectedenemyatk1notes}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Attack">Attack</span></button>
<input type="text" name="attr_gmatk1name" spellcheck="false" placeholder="Attack Name" style="width:110px;margin-right:10px;">
<label>&nbsp;&nbsp;<input type="number" name="attr_gmatk1aimdice" value="0">&nbsp;<span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;<input type="number" name="attr_gmatk1critdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gmatk1damage" spellcheck="false" value="0">(+<input type="number" name="attr_gmatk1critdamage" value="0">)</label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk2_id" value="">
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmatk2" class="btn" value="&{template:zafir} {{name=@{gmatk2name}}} {{aim=[[(@{gmatk2aimdicetotal})d6>5]]}} {{crit=[[(@{gmatk2critdicetotal})d6>6]]}} {{damage=[[(@{gmatk2damage})]]}} {{critdmg=[[(@{gmatk2damage}) + (@{gmatk2critdamage})]]}} {{notes=@{selectedenemyatk2notes}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Attack">Attack</span></button>
<input type="text" name="attr_gmatk2name" spellcheck="false" placeholder="Attack Name" style="width:110px;margin-right:10px;">
<label>&nbsp;&nbsp;<input type="number" name="attr_gmatk2aimdice" value="0">&nbsp;<span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;<input type="number" name="attr_gmatk2critdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gmatk2damage" spellcheck="false" value="0">(+<input type="number" name="attr_gmatk2critdamage" value="0">)</label>
</div>
<br />
<!-- Grenade Attack -->
<h3 data-i18n="Grenade Attack">Grenade Attack</h3>
<label data-i18n="Targets:">Targets:</label><input style="margin-right:8px;" type="number" name="attr_gmgtargets" value="1" min="1" max="5">
<label style="width:80px;" data-i18n="Effects:">Effects:</label><input style="width:279px;" type="text" name="attr_gmgeffects" value="">
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmgatk" class="btn"
value="&{template:zafirgrenade} {{name=@{gmgatkname}}} {{targets=@{gmgtargets}}} {{targetsroll=[[@{gmgtargets}]]}} {{crit1=[[(@{gmgatkcritdice})d6>6]]}} {{damage1=[[@{gmgatkdamage}]]}} {{critdmg1=[[@{gmgatkdamage} + @{gmgatkcritdamage}]]}} {{crit2=[[(@{gmgatkcritdice})d6>6]]}} {{damage2=[[@{gmgatkdamage}]]}} {{critdmg2=[[@{gmgatkdamage} + @{gmgatkcritdamage}]]}} {{crit3=[[(@{gmgatkcritdice})d6>6]]}} {{damage3=[[@{gmgatkdamage}]]}} {{critdmg3=[[@{gmgatkdamage} + @{gmgatkcritdamage}]]}} {{crit4=[[(@{gmgatkcritdice})d6>6]]}} {{damage4=[[@{gmgatkdamage}]]}} {{critdmg4=[[@{gmgatkdamage} + @{gmgatkcritdamage}]]}} {{crit5=[[(@{gmgatkcritdice})d6>6]]}} {{damage5=[[@{gmgatkdamage}]]}} {{critdmg5=[[@{gmgatkdamage} + @{gmgatkcritdamage}]]}} {{notes=@{gmgeffects}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Grenade Attack">Grenade Attack</span></button>
<input type="text" name="attr_gmgatkname" spellcheck="false" placeholder="Grenade Type" style="width:110px;margin-right:10px;">
<label>&nbsp;<input type="number" name="attr_gmgatkcritdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gmgatkdamage" spellcheck="false" value="0">(+<input type="number" name="attr_gmgatkcritdamage" value="0">)</label>
</div>
<br />
<!-- Will Attack -->
<div>
<h3 data-i18n="Will Attack">Will Attack</h3>
<label data-i18n="Wounded:">Wounded:</label><select name="attr_willatkwounded">
<option value="No" data-i18n="Full Health Option">Target at Full Health (+0)</option>
<option value="Yes" data-i18n="Wounded Option">Target Wounded (+1 will)</option>
</select><br />
<label data-i18n="Conditions:">Conditions:</label><select name="attr_willatkcondition">
<option value="No" data-i18n="No Conditions Option">None (+0)</option>
<option value="Yes" data-i18n="Some Conditions Option">Target has Negative Condition (+1 will)</option>
</select><br />
<label data-i18n="Isolated:">Isolated:</label><select name="attr_willatkisolated">
<option value="No" data-i18n="Not Isolated Option">No (+0)</option>
<option value="Yes" data-i18n="Isolated Option">Target is Isolated (no allies within 4 tiles) (+1 will)</option>
</select><br />
<label data-i18n="Panic:">Panic:</label><select name="attr_willatkpanic">
<option value="No" data-i18n="Not Panicked Option">No (+0)</option>
<option value="Ally" data-i18n="Ally Panicked Option">Target's Ally Panicked (+1 will)</option>
<option value="Target" data-i18n="Target Panicked Option">Target is Panicked (+1 will, +2 crit)</option>
</select><br />
<div class="customattack attack clearfix willattack">
<button type="roll" name="roll_willattack" class="btn" value="&{template:zafirwillattack} {{name=@{gmwatkname}}} {{aim=[[(@{gmwatkaimdice})d6>5]]}} {{crit=[[(@{gmwatkcritdice})d6>6]]}} {{resist=[[(@{gmwatkresistdice})d6>6]]}} {{enemy=@{selectedenemy}}}"><span data-i18n="Will Attack">Will Attack</span></button>
<input type="text" name="attr_gmwatkname" spellcheck="false" placeholder="Will Attack" style="width:110px;margin-right:10px;">
<label><input type="number" name="attr_gmwatkwill" value="0"> <span data-i18n="will">will</span>&nbsp;&nbsp;<input type="number" name="attr_gmwatkwillcrit" value="0"> <span data-i18n="crit">crit</span>&nbsp;&nbsp;<input type="number" name="attr_gmenemywill" value="0"> <span data-i18n="resist">resist</span></label>
</div>
<div class="customattack attack clearfix willattack">
<button type="roll" name="roll_panicattack" class="btn" value="&{template:zafirwillattack} {{panic=panic}} {{aim=[[2d6>5]]}} {{crit=[[0]]}} {{resist=[[(@{panicresist})d6>6]]}} {{enemy=@{panicname}}}"><span data-i18n="Test For Panic">Test For Panic</span></button>
<input type="text" name="attr_panicname" spellcheck="false" placeholder="Character" style="width:110px;margin-right:10px;">
<label>2 <span data-i18n="will">will</span>&nbsp;&nbsp;<input type="number" name="attr_panicresist" value="0"> <span data-i18n="resist">resist</span></label>
</div>
</div>
<br />
<!-- Dodge Roller -->
<div>
<h3 data-i18n="Dodge">Dodge</h3>
<div class="attack customattack clearfix dodgeroller">
<button type="roll" name="roll_dodge" class="btn" value="&{template:zafirdodge} {{dodge=[[(@{gmdodgedice})d6>6]]}} {{enemy=@{selectedenemy}}}"><span data-i18n="Dodge">Dodge</span></button>
<label style="width:110px" data-i18n="Dodge Dice:">Dodge Dice:</label><input type="number" name="attr_gmdodgedice" value="0" />
</div>
</div>
</div>
<div class="col2 nowrap readonly gmunits">
<input type="hidden" class="valuehider" name="attr_selectedenemyid" value="">
<div class="selectedunit">
<div class="nameplate">
<span name="attr_selectedenemy">&nbsp;</span>
</div>
<div class="content">
<div class="3colrowx">
<div class="colx">
<span class="label" data-i18n="Hit Points:">HP:</span> <span name="attr_selectedenemyhp"></span>
</div>
<input type="hidden" class="hideifzero valuehider" name="attr_selectedenemyap" value=""/>
<div class="colx">
<span class="label" data-i18n="Armor Points:">AP:</span> <span name="attr_selectedenemyap"></span>
</div>
<input type="hidden" class="hideifzero valuehider" name="attr_selectedenemysp" value=""/>
<div class="colx">
<span class="label" data-i18n="Shield Points:">SP:</span> <span name="attr_selectedenemysp"></span>
</div>
</div>
<div class="3colrowx">
<div class="colx">
<span class="label" data-i18n="Speed:">Speed:</span> <span name="attr_selectedenemyspeed"></span>
</div>
<div class="colx">
<span class="label" data-i18n="Aim:">Aim:</span> <span name="attr_selectedenemyaim"></span>
</div>
<div class="colx">
<span class="label" data-i18n="Will:">Will:</span> <span name="attr_selectedenemywill"></span>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemynotes" value=""/>
<div class="notes wrap" style="margin-left:8px;"><span name="attr_selectedenemynotes"></span></div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk0_id" value="active">
<div class="attackinfo">
<span class="label" style="margin-left:-24px;" data-i18n="Attack:">Attack:</span> <span name="attr_selectedenemyatkname">Weapon</span>
<input type="hidden" class="hideifzero" name="attr_gmshowattackinfo" value="1"/>
<div>
<span class="label" data-i18n="Aim:">Aim:</span> +<span name="attr_selectedenemyatkaim"></span>,
<span class="label" data-i18n="Crit:">Crit:</span> +<span name="attr_selectedenemyatkcrit"></span>,
<span class="label" data-i18n="Dmg:">Dmg:</span> <span name="attr_selectedenemyatkdmg"></span> (+<span name="attr_selectedenemyatkcritdmg"></span>)
<input type="hidden" class="valuehider" name="attr_selectedenemyatknotes" value=""/>
<div class="notes wrap"><span name="attr_selectedenemyatknotes"></span></div>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk1_id" value="">
<div class="attackinfo">
<span class="label" style="margin-left:-24px;" data-i18n="Attack:">Attack:</span> <span name="attr_selectedenemyatk1name">Weapon</span>
<input type="hidden" class="hideifzero" name="attr_gmshowattackinfo" value="1"/>
<div>
<span class="label" data-i18n="Aim:">Aim:</span> +<span name="attr_selectedenemyatk1aim"></span>,
<span class="label" data-i18n="Crit:">Crit:</span> +<span name="attr_selectedenemyatk1crit"></span>,
<span class="label" data-i18n="Dmg:">Dmg:</span> <span name="attr_selectedenemyatk1dmg"></span> (+<span name="attr_selectedenemyatk1critdmg"></span>)
<input type="hidden" class="valuehider" name="attr_selectedenemyatk1notes" value=""/>
<div class="notes wrap"><span name="attr_selectedenemyatk1notes"></span></div>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk2_id" value="">
<div class="attackinfo">
<span class="label" style="margin-left:-24px;" data-i18n="Attack:">Attack:</span> <span name="attr_selectedenemyatk2name">Weapon</span>
<input type="hidden" class="hideifzero" name="attr_gmshowattackinfo" value="1"/>
<div>
<span class="label" data-i18n="Aim:">Aim:</span> +<span name="attr_selectedenemyatk2aim"></span>,
<span class="label" data-i18n="Crit:">Crit:</span> +<span name="attr_selectedenemyatk2crit"></span>,
<span class="label" data-i18n="Dmg:">Dmg:</span> <span name="attr_selectedenemyatk2dmg"></span> (+<span name="attr_selectedenemyatk2critdmg"></span>)
<input type="hidden" class="valuehider" name="attr_selectedenemyatk2notes" value=""/>
<div class="notes wrap"><span name="attr_selectedenemyatk2notes"></span></div>
</div>
</div>
</div>
</div>
<button type="action" name="act_clearselectedunit" class="btn" style="float:right;width:auto;padding-top:4px;padding-bottom:4px;">Clear</button>
<h3 data-i18n="Enemy Unit Selector">Enemy Unit Selector</h3>
<fieldset class="repeating_gmenemyunitlist">
<button type="action" name="act_selectunit" class="btn"><span name="attr_gmunitname"></span></button>
</fieldset>
<h3 data-i18n="Unit Display Options">Unit Display Options</h3>
<label data-i18n="Show Attack Info:">Show Attack Info:</label><input type="checkbox" name="attr_gmshowattackinfo" value="1" checked="true" />
</div>
</div>
</div>
<div class="gmunits">
<input type="hidden" name="attr_selectedenemyid" value="" />
<div class="2colrow">
<div class="col1">
<h3 data-i18n="Enemy Unit Selector">Enemy Unit Selector</h3>
<fieldset class="repeating_gmenemyunitlist">
<input type="hidden" name="attr_gmunitname" value="New Unit" >
<button type="action" name="act_selectunit" class="btn"><span name="attr_gmunitname"></span></button>
</fieldset>
<button class="addbtn" type="action" name="act_addgmunit"><span data-i18n="Plus Add">+Add</span></button>
</div>
<div class="col2">
<input type="hidden" class="valuehider" name="attr_selectedenemyid" value="">
<div>
<h2 style="border-bottom:1px solid #aaa;"><span name="attr_selectedenemy"></span></h2>
<div class="nowrap">
<label data-i18n="Unit Name:">Unit Name:</label><input type="text" spellcheck="false" name="attr_selectedenemy" />
<br />
<label data-i18n="Hit Points:">HP:</label><input type="number" name="attr_selectedenemyhp" style="margin-right:10px;" value="0" />
<label style="width:74px;" data-i18n="Armor Points:">AP:</label><input type="number" name="attr_selectedenemyap" style="margin-right:10px;" value="0" />
<label style="width:73px;" data-i18n="Shield Points:">SP:</label><input type="number" name="attr_selectedenemysp" value="0" />
<br />
<label data-i18n="Speed:">Speed:</label><input type="number" name="attr_selectedenemyspeed" style="margin-right:10px;" value="0" />
<label style="width:74px;" data-i18n="Aim:">Aim:</label><input type="number" name="attr_selectedenemyaim" style="margin-right:10px;" value="0" />
<label style="width:73px;" data-i18n="Will:">Will:</label><input type="number" name="attr_selectedenemywill" style="margin-right:10px;" value="0" />
<label style="width:73px;" data-i18n="Dodge:">Dodge:</label><input type="number" name="attr_selectedenemydodge" style="margin-right:10px;" value="0" /><br />
<label data-i18n="Unit Notes:">Unit Notes:</label><input type="text" spellcheck="false" name="attr_selectedenemynotes"></input>
</div>
<div class="2colrowx nowrap">
<div class="colx nowrap">
<h3 data-i18n="Attacks">Attacks</h3>
<div class="enemyattacklist">
<input type="hidden" class="valuehider" name="attr_selectedenemyatk0_id" value="">
<div class="enemyattackentry">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_selectedenemyatkname" /><br />
<label data-i18n="Aim Dice:">Aim Dice:</label><input type="number" name="attr_selectedenemyatkaim" value="0" />
<label data-i18n="Crit Dice:" style="margin-left:32px;">Crit Dice:</label><input type="number" name="attr_selectedenemyatkcrit" value="0" /><br />
<label data-i18n="Damage:">Damage:</label><input style="width:65px;" type="text" spellcheck="false" name="attr_selectedenemyatkdmg" value="0" />
<label data-i18n="Crit Dmg:" style="margin-left:12px;">Crit Dmg:</label><input type="number" name="attr_selectedenemyatkcritdmg" value="0" /><br />
<label data-i18n="Notes:">Notes:</label><input type="text" spellcheck="false" name="attr_selectedenemyatknotes" />
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk1_id" value="">
<div class="enemyattackentry">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_selectedenemyatk1name" /><br />
<label data-i18n="Aim Dice:">Aim Dice:</label><input type="number" name="attr_selectedenemyatkaim" value="0" />
<label data-i18n="Crit Dice:" style="margin-left:32px;">Crit Dice:</label><input type="number" name="attr_selectedenemyatk1crit" value="0" /><br />
<label data-i18n="Damage:">Damage:</label><input style="width:65px;" type="text" spellcheck="false" name="attr_selectedenemyatk1dmg" value="0" />
<label data-i18n="Crit Dmg:" style="margin-left:12px;">Crit Dmg:</label><input type="number" name="attr_selectedenemyatk1critdmg" value="0" /><br />
<label data-i18n="Notes:">Notes:</label><input type="text" spellcheck="false" name="attr_selectedenemyatk1notes" />
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk2_id" value="">
<div class="enemyattackentry">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_selectedenemyatk2name" /><br />
<label data-i18n="Aim Dice:">Aim Dice:</label><input type="number" name="attr_selectedenemyatk2aim" value="0" />
<label data-i18n="Crit Dice:" style="margin-left:32px;">Crit Dice:</label><input type="number" name="attr_selectedenemyatk2crit" value="0" /><br />
<label data-i18n="Damage:">Damage:</label><input style="width:65px;" type="text" spellcheck="false" name="attr_selectedenemyatk2dmg" value="0" />
<label data-i18n="Crit Dmg:" style="margin-left:12px;">Crit Dmg:</label><input type="number" name="attr_selectedenemyatk2critdmg" value="0" /><br />
<label data-i18n="Notes:">Notes:</label><input type="text" spellcheck="false" name="attr_selectedenemyatk2notes" />
</div>
<input type="hidden" class="avaluehider" name="attr_selectedenemyatk2_id">
<div>
<button class="addbtn" type="action" name="act_addgmunitatk"><span data-i18n="Plus Add">+Add</span></button>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk0_id">
<div>
<button class="removebtn" type="action" name="act_removegmunitatk"><span data-i18n="Remove">Remove</span></button>
</div>
</div>
<!--<button class="removebtn" type="action" name="act_cleargmattacks">Clear</button>-->
</div>
<div class="colx nowrap">
<h3 data-i18n="Abilities">Abilities</h3>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- // Roll Templates //////////////////////////////////////////////////////////////// -->
<rolltemplate class="sheet-rolltemplate-zafir">
{{#enemy}}<div class="enemy">{{/enemy}}
{{#player}}<div class="player">{{/player}}
<div class="sheet-template-container">
{{#enemy}}<div class="sheet-template-nameplate">{{enemy}}</div>{{/enemy}}
{{#player}}<div class="sheet-template-nameplate">{{player}}</div>{{/player}}
<div class="sheet-template-header"><span data-i18n="Attack:">Attack:</span> {{name}}</div>
{{#rollGreater() aim 0}}
{{#rollGreater() crit 0}}
<div class="sheet-template-row sheet-crit-hit"><span data-i18n="CRITICAL HIT!">CRITICAL HIT!</span> {{crit}} {{aim}}</div>
<div class="sheet-template-row sheet-crit-dmg"><span data-i18n="Critical Damage:">Critical Damage:</span> {{critdmg}}</div>
{{/rollGreater() crit 0}}
{{#rollTotal() crit 0}}
<div class="sheet-template-row sheet-hit"><span data-i18n="HIT!">HIT!</span> {{aim}}</div>
<div class="sheet-template-row sheet-damage"><span data-i18n="Damage:">Damage:</span> {{damage}}</div>
{{/rollTotal() crit 0}}
{{#notes}}
<div class="sheet-template-row sheet-notes">{{notes}}</div>
{{/notes}}
{{/rollGreater() aim 0}}
{{#rollTotal() aim 0}}
<div class="sheet-template-row sheet-miss"><span data-i18n="MISS!">MISS!</span> {{aim}}</div>
{{/rollTotal() aim 0}}
</div>
{{#enemy}}</div>{{/enemy}}
{{#player}}</div>{{/player}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-zafirwillattack">
{{#enemy}}<div class="enemy">{{/enemy}}
{{#player}}<div class="player">{{/player}}
{{^enemy}}{{^player}}<div class="enemy">{{/player}}{{/enemy}}
<div class="sheet-template-container">
{{#enemy}}<div class="sheet-template-nameplate">{{enemy}}</div>{{/enemy}}
{{#player}}<div class="sheet-template-nameplate">{{player}}</div>{{/player}}
{{^enemy}}{{^player}}
<div class="sheet-template-nameplate">
{{#panic}}<span data-i18n="Test For Panic">Test For Panic</span>{{/panic}}
{{^panic}}<span data-i18n="Will Attack">Will Attack</span>{{/panic}}
</div>
{{/player}}{{/enemy}}
{{#panic}}
<div class="sheet-template-header"><span data-i18n="Test For Panic">Test For Panic</span>!</div>
{{/panic}}
{{^panic}}
{{#name}}<div class="sheet-template-header">{{name}}</div>{{/name}}
{{^name}}<div class="sheet-template-header"><span data-i18n="Will Attack">Will Attack</span></div>{{/name}}
{{/panic}}
{{#rollGreater() aim 0}}
{{#rollGreater() resist 0}}
{{#panic}}<div class="sheet-template-row sheet-hit">{{/panic}}
{{^panic}}<div class="sheet-template-row sheet-miss">{{/panic}}
{{resist}} {{aim}} <span data-i18n="RESISTED!">RESISTED!</span></div>
{{/rollGreater() resist 0}}
{{#rollTotal() resist 0}}
{{#rollGreater() crit 0}}
<div class="sheet-template-row sheet-crit-hit sheet-critsuccess">{{crit}} {{aim}} <span data-i18n="SUCCESS">SUCCESS</span> + <br /><span data-i18n="CRITICAL EFFECT!">CRITICAL EFFECT!</span></div>
{{/rollGreater() crit 0}}
{{#rollTotal() crit 0}}
{{#panic}}
<div class="sheet-template-row sheet-crit-hit"><span data-i18n="PANIC!">PANIC!</span> {{aim}}</div>
{{/panic}}
{{^panic}}
<div class="sheet-template-row sheet-hit"><span data-i18n="SUCCESS!">SUCCESS!</span> {{aim}}</div>
{{/panic}}
{{/rollTotal() crit 0}}
{{/rollTotal() resist 0}}
{{#notes}}
<div class="sheet-template-row sheet-notes">{{notes}}</div>
{{/notes}}
{{/rollGreater() aim 0}}
{{#rollTotal() aim 0}}
{{#panic}}<div class="sheet-template-row sheet-hit">{{/panic}}
{{^panic}}<div class="sheet-template-row sheet-miss">{{/panic}}
<span data-i18n="RESISTED!">RESISTED!</span> {{aim}}</div>
{{/rollTotal() aim 0}}
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-zafirskillaction">
<div class="player">
<div class="sheet-template-container">
{{#player}}<div class="sheet-template-nameplate">{{player}}</div>{{/player}}
<div class="sheet-template-header">{{name}} <span data-i18n="Action">Action</span></div>
<div class="sheet-template-row sheet-responsibility"><span data-i18n="Using">Using</span> {{responsibility}}</div>
{{#rollGreater() aim 0}}
{{#rollGreater() crit 0}}
<div class="sheet-template-row sheet-crit-hit"><span data-i18n="CRITICAL SUCCESS!">CRITICAL SUCCESS!</span> {{crit}} {{aim}}</div>
{{/rollGreater() crit 0}}
{{#rollTotal() crit 0}}
<div class="sheet-template-row sheet-hit"><span data-i18n="SUCCESS!">SUCCESS!</span> {{aim}}</div>
{{/rollTotal() crit 0}}
{{/rollGreater() aim 0}}
{{#rollTotal() aim 0}}
<div class="sheet-template-row sheet-miss"><span data-i18n="FAILED!">FAILED!</span> {{aim}}</div>
{{/rollTotal() aim 0}}
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-zafirdodge">
{{#enemy}}<div class="enemy">{{/enemy}}
{{#player}}<div class="player">{{/player}}
<div class="sheet-template-container">
{{#enemy}}<div class="sheet-template-nameplate">{{enemy}}</div>{{/enemy}}
{{#player}}<div class="sheet-template-nameplate">{{player}}</div>{{/player}}
<div class="sheet-template-header"><span data-i18n="Dodge!">Dodge!</span></div>
{{#rollGreater() dodge 0}}
<div class="sheet-template-row sheet-hit"><span data-i18n="SUCCESS!">SUCCESS!</span> {{dodge}}</div>
{{/rollGreater() dodge 0}}
{{#rollTotal() dodge 0}}
<div class="sheet-template-row sheet-miss"><span data-i18n="FAILED!">FAILED!</span> {{dodge}}</div>
{{/rollTotal() dodge 0}}
</div>
{{#enemy}}</div>{{/enemy}}
{{#player}}</div>{{/player}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-zafirgrenade">
{{#enemy}}<div class="enemy">{{/enemy}}
{{#player}}<div class="player">{{/player}}
<div class="sheet-template-container">
{{#enemy}}<div class="sheet-template-nameplate">{{enemy}}</div>{{/enemy}}
{{#player}}<div class="sheet-template-nameplate">{{player}}</div>{{/player}}
{{#name}}
<div class="sheet-template-header">{{name}} (×{{targets}})</div>
{{/name}}
{{^name}}
<div class="sheet-template-header"><span data-i18n="Grenade Attack">Grenade Attack</span> (×{{targets}})</div>
{{/name}}
{{#notes}}
<div class="sheet-template-row sheet-notes">{{notes}}</div>
{{/notes}}
{{#rollGreater() targetsroll 0}}
{{#rollGreater() crit1 0}}
<div class="sheet-template-row sheet-crit-hit"><span data-i18n="Critical Damage:">Critical Damage:</span> {{critdmg1}}</div>
{{/rollGreater() crit1 0}}
{{#rollTotal() crit1 0}}
<div class="sheet-template-row sheet-damage"><span data-i18n="Damage:">Damage:</span> {{damage1}}</div>
{{/rollTotal() crit1 0}}
{{/rollGreater() targetsroll 0}}
{{#rollGreater() targetsroll 1}}
{{#rollGreater() crit2 0}}
<div class="sheet-template-row sheet-crit-hit"><span data-i18n="Critical Damage:">Critical Damage:</span> {{critdmg2}}</div>
{{/rollGreater() crit2 0}}
{{#rollTotal() crit2 0}}
<div class="sheet-template-row sheet-damage"><span data-i18n="Damage:">Damage:</span> {{damage2}}</div>
{{/rollTotal() crit2 0}}
{{/rollGreater() targetsroll 1}}
{{#rollGreater() targetsroll 2}}
{{#rollGreater() crit3 0}}
<div class="sheet-template-row sheet-crit-hit"><span data-i18n="Critical Damage:">Critical Damage:</span> {{critdmg3}}</div>
{{/rollGreater() crit3 0}}
{{#rollTotal() crit3 0}}
<div class="sheet-template-row sheet-damage"><span data-i18n="Damage:">Damage:</span> {{damage3}}</div>
{{/rollTotal() crit3 0}}
{{/rollGreater() targetsroll 2}}
{{#rollGreater() targetsroll 3}}
{{#rollGreater() crit4 0}}
<div class="sheet-template-row sheet-crit-hit"><span data-i18n="Critical Damage:">Critical Damage:</span> {{critdmg4}}</div>
{{/rollGreater() crit4 0}}
{{#rollTotal() crit4 0}}
<div class="sheet-template-row sheet-damage"><span data-i18n="Damage:">Damage:</span> {{damage4}}</div>
{{/rollTotal() crit4 0}}
{{/rollGreater() targetsroll 3}}
{{#rollGreater() targetsroll 4}}
{{#rollGreater() crit5 0}}
<div class="sheet-template-row sheet-crit-hit"><span data-i18n="Critical Damage:">Critical Damage:</span> {{critdmg5}}</div>
{{/rollGreater() crit5 0}}
{{#rollTotal() crit5 0}}
<div class="sheet-template-row sheet-damage"><span data-i18n="Damage:">Damage:</span> {{damage5}}</div>
{{/rollTotal() crit5 0}}
{{/rollGreater() targetsroll 4}}
</div>
{{#enemy}}</div>{{/enemy}}
{{#player}}</div>{{/player}}
</rolltemplate>
<!-- // Sheet Workers //////////////////////////////////////////////////////////////// -->
<script type="text/worker">
// Main tab bar
const buttonlist = ["atk", "aab", "pab", "eqp", "res", "inv", "oth"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTab: button
});
});
});
// Equipment sheet tab bar
const buttonlistEqp = ["epw", "esw", "eba", "ehg"];
buttonlistEqp.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTabEqp: button
});
});
});
// Equipment sheet tab bar
const buttonlistAbilities = ["aaa", "apa"];
buttonlistAbilities.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTabAbilities: button
});
});
});
// Combat sheet tab bar
const buttonlistAttacks = ["cwp", "cgn", "cwl"];
buttonlistAttacks.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTabAttacks: button
});
});
});
// Combat sheet tab bar
const buttonlistGm = ["gmcombat", "gmunits"];
buttonlistGm.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
gmTab: button
});
});
});
// Skill use responsibilities buttons
const responsibilities = [
"acquisition",
"arcana",
"engineering",
"entertainment",
"leadership",
"medicine",
"navigation",
"security",
"spirituality",
"sustenance"
];
responsibilities.forEach(responsibility => {
on(`clicked:use${responsibility}`, function() {
setAttrs({
skillresponsibility: responsibility
});
});
});
function sheetOpenAndAttrChanged(inputs) {
return "sheet:opened change:" + inputs.join(" change:");
}
function getRepeatingAttrs(repeatingSection, attrs, onComplete) {
getSectionIDs(repeatingSection, function (ids) {
let attrsToGet = [];
for (let i = 0; i < ids.length; ++i) {
let id = ids[i];
for (let j = 0; j < attrs.length; ++j) {
let attrName = attrs[j];
attrsToGet.push(`repeating_${repeatingSection}_${id}_${attrName}`);
}
}
getAttrs(attrsToGet, function(values) {
let simpleValues = {};
for (let i = 0; i < ids.length; ++i) {
let id = ids[i];
simpleValues[id] = {};
for (let j = 0; j < attrs.length; ++j) {
let attrName = attrs[j];
simpleValues[id][attrName] = values[`repeating_${repeatingSection}_${id}_${attrName}`];
}
}
onComplete(ids, simpleValues, values);
});
});
}
// Setting the calculated attributes
const combatAttrInputs = [
"level",
"toughness",
"agility",
"accuracy",
"discipline",
"maxhpother",
"speedother",
"aimother",
"willother",
"bahp"
];
on(sheetOpenAndAttrChanged(combatAttrInputs), function() {
getAttrs(combatAttrInputs, function(values) {
let level = parseInt(values.level)||0;
let toughness = parseInt(values.toughness)||0;
let agility = parseInt(values.agility)||0;
let accuracy = parseInt(values.accuracy)||0;
let discipline = parseInt(values.discipline)||0;
let maxhpother = parseInt(values.maxhpother)||0;
let speedother = parseInt(values.speedother)||0;
let aimother = parseInt(values.aimother)||0;
let willother = parseInt(values.willother)||0;
let bodyArmorHP = parseInt(values.bahp)||0;
let halflevel = Math.floor(level / 2);
let doubleAgility = (agility * 2);
setAttrs({
halflevel: halflevel,
doubleagility: doubleAgility,
hp_max: 2 + halflevel + toughness + bodyArmorHP + maxhpother,
speed: 6 + doubleAgility + speedother,
aim: accuracy + aimother,
will: discipline + willother
});
});
});
// Setting the aim dice for weapon attacks
const attackDiceInputs = [
"wpaimdice",
"wpcritdice",
"wpdamage",
"wpcritdmg",
"wsaimdice",
"wscritdice",
"wsdamage",
"wscritdmg",
"aim",
"atkcover",
"atkelevation",
"atkrange",
"atkotheraim",
"atkothercrit",
"gmatkaimdice",
"gmatkcritdice",
"atkoverwatch"
];
on(sheetOpenAndAttrChanged(attackDiceInputs) +
" change:repeating_activeabilities" +
" change:repeating_activeabilities:aablatkweap" +
" change:repeating_activeabilities:aablatkaim" +
" change:repeating_activeabilities:aablatkcrit" +
" change:repeating_activeabilities:aablatkdmg" +
" change:repeating_activeabilities:aablatkcritdmg" +
" change:repeating_activeabilities:aablatkbonusdmg", function() {
getAttrs(attackDiceInputs, function(values) {
let wpaimdice = parseInt(values.wpaimdice)||0;
let wpcritdice = parseInt(values.wpcritdice)||0;
let wpdamage = values.wpdamage;
let wpcritdmg = parseInt(values.wpcritdmg)||0;
let wsaimdice = parseInt(values.wsaimdice)||0;
let wscritdice = parseInt(values.wscritdice)||0;
let wsdamage = values.wsdamage;
let wscritdmg = parseInt(values.wscritdmg)||0;
let aim = parseInt(values.aim)||0;
let atkcover = values.atkcover;
let atkelevation = values.atkelevation;
let atkrange = values.atkrange;
let atkoverwatch = values.atkoverwatch;
let atkotheraim = parseInt(values.atkotheraim)||0;
let atkothercrit = parseInt(values.atkothercrit)||0;
let gmatkaimdice = parseInt(values.gmatkaimdice)||0;
let gmatkcritdice = parseInt(values.gmatkcritdice)||0;
let aimBonus = 0;
let critBonus = 0;
// Cover
if (atkcover == "No Cover") {
aimBonus += 2;
critBonus += 2;
}
else if (atkcover == "Half Cover") {
aimBonus += 1;
}
// Elevation
if (atkelevation == "Elevation") {
aimBonus += 1;
}
// Range
if (atkrange == "Non-optimal") {
aimBonus -= 1;
}
// Overwatch
if (atkoverwatch == "Yes") {
aimBonus -= 1;
}
setAttrs({
wpattackaimdice: Math.max(wpaimdice + aim + atkotheraim + aimBonus, 0),
wpattackcritdice: Math.max(wpcritdice + atkothercrit + critBonus, 0),
wpattackdamage: wpdamage,
wsattackaimdice: Math.max(wsaimdice + aim + atkotheraim + aimBonus, 0),
wsattackcritdice: Math.max(wscritdice + atkothercrit + critBonus, 0),
wsattackdamage: wsdamage,
custattackaimdice: Math.max(aim + atkotheraim + aimBonus, 0),
custattackcritdice: Math.max(atkothercrit + critBonus, 0),
gmatkaimdicetotal: Math.max(gmatkaimdice + aimBonus, 0),
gmatkcritdicetotal: Math.max(gmatkcritdice + critBonus, 0)
});
const repeatAttrs = [
"aablatkweap",
"aablatkaim",
"aablatkcrit",
"aablatkdmg",
"aablatkcritdmg",
"aablatkbonusdmg"
];
getRepeatingAttrs("activeabilities", repeatAttrs, function(ids, simpleValues) {
let output = {};
for (let i = 0; i < ids.length; ++i) {
let id = ids[i];
let aablatkweap = simpleValues[id].aablatkweap;
let aablatkaim = parseInt(simpleValues[id].aablatkaim)||0;
let aablatkcrit = parseInt(simpleValues[id].aablatkcrit)||0;
let aablatkdmg = simpleValues[id].aablatkdmg;
let aablatkcritdmg = parseInt(simpleValues[id].aablatkcritdmg)||0;
let aablatkbonusdmg = parseInt(simpleValues[id].aablatkbonusdmg)||0;
let baseAimDice = 0;
let baseCritDice = 0;
let totalDamage = "";
let totalCritDamage = 0;
if (aablatkweap == "Nothing") {
baseAimDice = aablatkaim;
baseCritDice = aablatkcrit;
totalDamage = aablatkdmg;
totalCritDamage = aablatkcritdmg;
}
else if (aablatkweap == "Primary") {
baseAimDice = wpaimdice + aablatkaim;
baseCritDice = wpcritdice + aablatkcrit;
totalDamage = wpdamage;
totalCritDamage = wpcritdmg + aablatkcritdmg;
if (aablatkbonusdmg > 0) {
totalDamage += "+" + aablatkbonusdmg;
}
}
else if (aablatkweap == "Secondary") {
baseAimDice = wsaimdice + aablatkaim;
baseCritDice = wscritdice + aablatkcrit;
totalDamage = wsdamage;
totalCritDamage = wscritdmg + aablatkcritdmg;
if (aablatkbonusdmg > 0) {
totalDamage += "+" + aablatkbonusdmg;
}
}
output["repeating_activeabilities_" + id + "_aablatkrollaimdice"] = Math.max(baseAimDice + aim + atkotheraim + aimBonus, 0);
output["repeating_activeabilities_" + id + "_aablatkrollcritdice"] = Math.max(baseCritDice + atkothercrit + critBonus, 0);
output["repeating_activeabilities_" + id + "_aablatkrolldamage"] = totalDamage;
output["repeating_activeabilities_" + id + "_aablatkrollcritdamage"] = totalCritDamage;
}
setAttrs(output);
});
});
});
const willAttackInputs = [
"will",
"bonuswill",
"bonuswillcrit",
"enemywill",
"gmwatkwill",
"gmwatkwillcrit",
"gmenemywill",
"willatkwounded",
"willatkcondition",
"willatkisolated",
"willatkpanic"
];
on(sheetOpenAndAttrChanged(willAttackInputs) +
" change:repeating_activeabilities" +
" change:repeating_activeabilities:aablcritdice", function() {
getAttrs(willAttackInputs, function(values) {
let will = parseInt(values.will)||0;
let extraWill = parseInt(values.bonuswill)||0;
let extraCrit = parseInt(values.bonuswillcrit)||0;
let enemywill = parseInt(values.enemywill)||0;
let gmwatkwill = parseInt(values.gmwatkwill)||0;
let gmwatkwillcrit = parseInt(values.gmwatkwillcrit)||0;
let gmenemywill = parseInt(values.gmenemywill)||0;
let willatkwounded = values.willatkwounded;
let willatkcondition = values.willatkcondition;
let willatkisolated = values.willatkisolated;
let willatkpanic = values.willatkpanic;
let willBonus = 0;
let critBonus = 0;
if (willatkwounded == "Yes") {
willBonus += 1;
}
if (willatkcondition == "Yes") {
willBonus += 1;
}
if (willatkisolated == "Yes") {
willBonus += 1;
}
if (willatkpanic == "Ally") {
willBonus += 1;
}
else if (willatkpanic == "Target") {
willBonus += 1;
critBonus += 2;
}
setAttrs({
willattackaimdice: Math.max(will + extraWill + willBonus, 0),
willattackcritdice: Math.max(extraCrit + critBonus, 0),
willattackresistdice: Math.max(enemywill, 0),
gmwatkaimdice: Math.max(gmwatkwill + willBonus, 0),
gmwatkcritdice: Math.max(gmwatkwillcrit + critBonus, 0),
gmwatkresistdice: Math.max(gmenemywill, 0)
});
const repeatAttrs = [
"aablcritdice"
];
getRepeatingAttrs("activeabilities", repeatAttrs, function(ids, simpleValues) {
let output = {};
for (let i = 0; i < ids.length; ++i) {
let id = ids[i];
let aablcritdice = parseInt(simpleValues[id].aablcritdice)||0;
output["repeating_activeabilities_" + id + "_aablwillatkaimdice"] = Math.max(will + extraWill + willBonus, 0);
output["repeating_activeabilities_" + id + "_aablwillatkcritdice"] = Math.max(aablcritdice + extraCrit + critBonus, 0);
output["repeating_activeabilities_" + id + "_aablresist"] = Math.max(enemywill, 0);
}
setAttrs(output);
});
});
});
//skilldice
const skillActionInputs = [
"skilldifficulty",
"skillresponsibility",
"skillassist",
"skillitem",
"bonusskill",
"acquisition",
"arcana",
"engineering",
"entertainment",
"leadership",
"medicine",
"navigation",
"security",
"spirituality",
"sustenance"
];
on(sheetOpenAndAttrChanged(skillActionInputs), function() {
getAttrs(skillActionInputs, function(values) {
let skilldifficulty = values.skilldifficulty;
let skillresponsibility = values.skillresponsibility;
let skillassist = values.skillassist;
let skillitem = values.skillitem;
let bonusskill = parseInt(values.bonusskill)||0;
let responsibility = parseInt(values[skillresponsibility])||0;
let skillBonus = 0;
if (skilldifficulty == "Easy") {
skillBonus += 2;
}
else if (skilldifficulty == "Average") {
skillBonus += 1;
}
if (skillassist == "Yes") {
skillBonus += 1;
}
if (skillitem == "Yes") {
skillBonus += 1;
}
setAttrs({
skilldice: Math.max(responsibility + skillBonus + bonusskill, 0)
});
});
});
function ReloadPrimaryWeapon() {
getAttrs(["wpammo_max"], function(values) {
let wpammo_max = parseInt(values.wpammo_max)||0;
setAttrs({
wpammo: wpammo_max
});
});
}
on("clicked:reloadprimary clicked:repeating_activeabilities:reloadprimary", function() {
ReloadPrimaryWeapon();
});
on("clicked:useammo clicked:repeating_activeabilities:useammo", function() {
getAttrs(["wpammo"], function(values) {
let wpammo = parseInt(values.wpammo)||0;
setAttrs({
wpammo: Math.max(wpammo - 1, 0)
});
});
});
on("sheet:opened change:wpammo", function(eventInfo) {
getAttrs(["wpammo"], function(values) {
let wpammo = parseInt(values.wpammo)||0;
setAttrs({
wpneedreload: (wpammo == 0) ? 1 : 0
});
});
});
on("clicked:switchsheettype", function() {
getAttrs(["sheetTypeToggle"], function(values) {
let sheetTypeToggle = values.sheetTypeToggle;
setAttrs({
sheetTypeToggle: sheetTypeToggle == "charactersheet" ? "gmtools" : "charactersheet"
});
});
});
on("sheet:opened change:repeating_activeabilities:aabltype change:wpammo", function(eventInfo) {
getAttrs(["wpammo"], function(values) {
let wpammo = parseInt(values.wpammo)||0;
getRepeatingAttrs("activeabilities", ["aabltype", "aablatkweap"], function(abilityIds, abilityValues) {
let output = {};
for (var i = 0; i < abilityIds.length; ++i) {
let id = abilityIds[i];
let abilityType = abilityValues[id].aabltype;
let abilityAtkWeapon = abilityValues[id].aablatkweap;
//console.log(id + " type:" + abilityType + ", weapon:" + abilityAtkWeapon);
if (abilityType == "Weapon" && abilityAtkWeapon == "Primary") {
output[`repeating_activeabilities_${id}_aablhasammo`] = (wpammo > 0) ? 1 : 0;
output[`repeating_activeabilities_${id}_aablneedreload`] = (wpammo == 0) ? 1 : 0;
}
else {
output[`repeating_activeabilities_${id}_aablhasammo`] = 0;
output[`repeating_activeabilities_${id}_aablneedreload`] = 0;
}
}
setAttrs(output);
});
});
});
const MAX_GM_UNIT_ATKS = 3;
const MAX_GM_UNIT_ABILITIES = 6;
const selectedEnemyAttrs = [
// Base attrs
["_gmunitname", "selectedenemy"],
["_gmunithp", "selectedenemyhp"],
["_gmunitap", "selectedenemyap"],
["_gmunitsp", "selectedenemysp"],
["_gmunitspeed", "selectedenemyspeed"],
["_gmunitaim", "selectedenemyaim"],
["_gmunitwill", "selectedenemywill"],
// Attack 0
["_gmunitatk0_id", "selectedenemyatk0_id"],
["_gmunitatkname", "selectedenemyatkname"],
["_gmunitatkaim", "selectedenemyatkaim"],
["_gmunitatkcrit", "selectedenemyatkcrit"],
["_gmunitatkdmg", "selectedenemyatkdmg"],
["_gmunitatkcritdmg", "selectedenemyatkcritdmg"],
["_gmunitatknotes", "selectedenemyatknotes"],
// Attack 1
["_gmunitatk1_id", "selectedenemyatk1_id"],
["_gmunitatk1name", "selectedenemyatk1name"],
["_gmunitatk1aim", "selectedenemyatk1aim"],
["_gmunitatk1crit", "selectedenemyatk1crit"],
["_gmunitatk1dmg", "selectedenemyatk1dmg"],
["_gmunitatk1critdmg", "selectedenemyatk1critdmg"],
["_gmunitatk1notes", "selectedenemyatk1notes"],
// Attack 2
["_gmunitatk2_id", "selectedenemyatk2_id"],
["_gmunitatk2name", "selectedenemyatk2name"],
["_gmunitatk2aim", "selectedenemyatk2aim"],
["_gmunitatk2crit", "selectedenemyatk2crit"],
["_gmunitatk2dmg", "selectedenemyatk2dmg"],
["_gmunitatk2critdmg", "selectedenemyatk2critdmg"],
["_gmunitatk2notes", "selectedenemyatk2notes"]
];
function SelectUnit(unitId) {
let attrs = [
["_gmunitwill", "gmwatkwill"],
["_gmunitnotes", "selectedenemynotes"],
["_gmunitdodge", "gmdodgedice"],
["_gmunitatkname", "gmatkname"],
["_gmunitatkcrit", "gmatkcritdice"],
["_gmunitatkdmg", "gmatkdamage"],
["_gmunitatkcritdmg", "gmatkcritdamage"],
["_gmunitatkaim", "gmatkaimdice"],
["_gmunitatknotes", "selectedenemyatknotes"],
["_gmunitatk1name", "gmatk1name"],
["_gmunitatk1crit", "gmatk1critdice"],
["_gmunitatk1dmg", "gmatk1damage"],
["_gmunitatk1critdmg", "gmatk1critdamage"],
["_gmunitatk1aim", "gmatk1aimdice"],
["_gmunitatk1notes", "selectedenemyatk1notes"],
["_gmunitatk2name", "gmatk2name"],
["_gmunitatk2crit", "gmatk2critdice"],
["_gmunitatk2dmg", "gmatk2damage"],
["_gmunitatk2critdmg", "gmatk2critdamage"],
["_gmunitatk2aim", "gmatk2aimdice"],
["_gmunitatk2notes", "selectedenemyatk2notes"]
];
attrGetters = [];
attrs.forEach(attrPair => {
attrPair[0] = "repeating_gmenemyunitlist_" + unitId + attrPair[0];
attrGetters.push(attrPair[0]);
});
selectedEnemyAttrs.forEach(attrPair => {
let completeAttr = "repeating_gmenemyunitlist_" + unitId + attrPair[0];
attrs.push([completeAttr, attrPair[1]]);
attrGetters.push(completeAttr);
});
let output = { selectedenemyid: unitId };
getAttrs(attrGetters, function(values) {
attrs.forEach(attrPair => {
output[attrPair[1]] = values[attrPair[0]]||"";
});
setAttrs(output);
});
}
on("clicked:repeating_gmenemyunitlist:selectunit", function(eventInfo) {
let unitId = eventInfo.sourceAttribute.replace("repeating_gmenemyunitlist_", "").replace("_selectunit", "");
SelectUnit(unitId);
});
// Edit underlying unit of selected unit
selectedEnemyAttrs.forEach(attrPair => {
var listAttr = attrPair[0];
var selectAttr = attrPair[1];
on(`change:${selectAttr}`, function(eventInfo) {
getAttrs(["selectedenemyid"], function(values) {
var selectedenemyid = values.selectedenemyid;
if (selectedenemyid) {
let fullListAttr = `repeating_gmenemyunitlist_${selectedenemyid}${listAttr}`;
setAttrs({
[fullListAttr]: eventInfo.newValue
});
}
else {
console.warn("'selectedenemyid' is null or empty. Reselect the unit before editing.");
}
});
});
});
function ClearSelectedUnit() {
setAttrs({
selectedenemyid: ""
});
}
function RemoveSelectedUnitAttack(index) {
if (index < 0 || index >= MAX_GM_UNIT_ATKS) {
return;
}
var indexValue = index == 0 ? "" : index;
setAttrs({
[`selectedenemyatk${index}_id`]: "",
[`selectedenemyatk${indexValue}name`]: "",
[`selectedenemyatk${indexValue}aim`]: 0,
[`selectedenemyatk${indexValue}crit`]: 0,
[`selectedenemyatk${indexValue}dmg`]: "0",
[`selectedenemyatk${indexValue}critdmg`]: 0,
[`selectedenemyatk${indexValue}notes`]: ""
});
}
function AddSelectedUnitAttack(index) {
if (index < 0 || index >= MAX_GM_UNIT_ATKS) {
return;
}
var indexValue = index == 0 ? "" : index;
setAttrs({
[`selectedenemyatk${index}_id`]: "active",
[`selectedenemyatk${indexValue}name`]: "",
[`selectedenemyatk${indexValue}aim`]: 0,
[`selectedenemyatk${indexValue}crit`]: 0,
[`selectedenemyatk${indexValue}dmg`]: "0",
[`selectedenemyatk${indexValue}critdmg`]: 0,
[`selectedenemyatk${indexValue}notes`]: ""
});
}
on("clicked:clearselectedunit", function() {
ClearSelectedUnit();
});
on("remove:repeating_gmenemyunitlist", function(eventInfo) {
getAttrs(["selectedenemyid"], function(values) {
let unitId = values.selectedenemyid;
if (eventInfo.sourceAttribute.includes(unitId)) {
ClearSelectedUnit();
}
});
});
on("clicked:addgmunit", function() {
var newRowId = generateRowID();
var newAttrs = {};
newAttrs[`repeating_gmenemyunitlist_${newRowId}_selectedenemy`] = "New Unit";
setAttrs(newAttrs, null, function() {
SelectUnit(newRowId);
});
});
const ENEMY_ATTACK_ATTR = [
"selectedenemyatk0_id",
"selectedenemyatk1_id",
"selectedenemyatk2_id"
];
const ENEMY_ABILITY_ATTR = [
"selectedenemyability0_id",
"selectedenemyability1_id",
"selectedenemyability2_id",
"selectedenemyability3_id",
"selectedenemyability4_id",
"selectedenemyability5_id"
];
on("clicked:addgmunitatk", function() {
getAttrs(ENEMY_ATTACK_ATTR, function(values) {
let highestAttackIndex = -1;
for(let i = 0; i < MAX_GM_UNIT_ATKS; ++i) {
var attrName = ENEMY_ATTACK_ATTR[i];
var attrValue = values[attrName]||"";
if (attrValue != "") {
highestAttackIndex = i;
}
}
if (highestAttackIndex == (MAX_GM_UNIT_ATKS - 1)) {
return;
}
let nextAttackIndex = highestAttackIndex + 1;
AddSelectedUnitAttack(nextAttackIndex);
});
});
on("clicked:removegmunitatk", function() {
getAttrs(ENEMY_ATTACK_ATTR, function(values) {
let highestAttackIndex = -1;
for(let i = 0; i < MAX_GM_UNIT_ATKS; ++i) {
var attrName = ENEMY_ATTACK_ATTR[i];
var attrValue = values[attrName]||"";
if (attrValue != "") {
highestAttackIndex = i;
}
}
if (highestAttackIndex == -1) {
return;
}
RemoveSelectedUnitAttack(highestAttackIndex);
});
});
on("clicked:repeating_activeabilities:setcooldown", function(eventInfo) {
let unitId = eventInfo.sourceAttribute.replace("repeating_activeabilities_", "").replace("_setcooldown", "");
let abilityNameAttr = `repeating_activeabilities_${unitId}_aablname`;
let abilityCooldownAttr = `repeating_activeabilities_${unitId}_aablcooldown`;
getAttrs([abilityNameAttr, abilityCooldownAttr], function (values) {
let abilityName = values[abilityNameAttr];
let abilityCooldown = parseInt(values[abilityCooldownAttr])||0;
if (abilityCooldown > 0) {
getRepeatingAttrs("cooldowntracker", ["cooldownname"], function(ids, simpleValues) {
let existingId = null;
for (let i = 0; i < ids.length; ++i) {
let id = ids[i];
let itemName = simpleValues[id].cooldownname;
if (itemName == abilityName) {
existingId = id;
break;
}
}
if (!existingId) {
let newCooldownId = generateRowID();
setAttrs({
[`repeating_cooldowntracker_${newCooldownId}_cooldownname`]: abilityName,
[`repeating_cooldowntracker_${newCooldownId}_cooldownvalue`]: abilityCooldown
});
}
else {
setAttrs({
[`repeating_cooldowntracker_${existingId}_cooldownvalue`]: abilityCooldown
});
}
});
}
});
});
on("clicked:repeating_activeabilities:usecharge", function(eventInfo) {
let unitId = eventInfo.sourceAttribute.replace("repeating_activeabilities_", "").replace("_usecharge", "");
let abilityNameAttr = `repeating_activeabilities_${unitId}_aablname`;
let abilityChargesAttr = `repeating_activeabilities_${unitId}_aablcharges`;
getAttrs([abilityNameAttr, abilityChargesAttr], function (values) {
let abilityName = values[abilityNameAttr];
let abilityCharges = parseInt(values[abilityChargesAttr])||0;
if (abilityCharges > 0) {
getRepeatingAttrs("chargetracker", ["chargename", "chargevalue"], function(ids, simpleValues) {
let existingId = null;
for (let i = 0; i < ids.length; ++i) {
let id = ids[i];
let itemName = simpleValues[id].chargename;
if (itemName == abilityName) {
existingId = id;
break;
}
}
if (!existingId) {
let newChargesId = generateRowID();
setAttrs({
[`repeating_chargetracker_${newChargesId}_chargename`]: abilityName,
[`repeating_chargetracker_${newChargesId}_chargevalue`]: (abilityCharges - 1)
});
}
else {
let currentCharges = simpleValues[existingId].chargevalue;
setAttrs({
[`repeating_chargetracker_${existingId}_chargevalue`]: Math.max(currentCharges - 1, 0)
});
}
});
}
});
});
// Update charges
on("sheet:opened change:repeating_chargetracker remove:repeating_chargetracker", function(eventInfo) {
getRepeatingAttrs("chargetracker", ["chargename", "chargevalue"], function(chargeIds, chargeValues) {
getRepeatingAttrs("activeabilities", ["aablname", "aablcharges"], function(abilityIds, abilityValues) {
let output = {};
for (var abilityIndex = 0; abilityIndex < abilityIds.length; ++abilityIndex) {
let abilityId = abilityIds[abilityIndex];
let abilityName = abilityValues[abilityId].aablname;
let abilityMaxCharges = abilityValues[abilityId].aablcharges;
let abilityNoChargesAttr = `repeating_activeabilities_${abilityId}_aablnocharges`;
let abilityChargesLeftAttr = `repeating_activeabilities_${abilityId}_aablchargesleft`;
if (abilityMaxCharges == 0)
{
output[abilityNoChargesAttr] = 0;
output[abilityChargesLeftAttr] = 0;
}
else {
let exists = false;
for (let chargeTrackerIndex = 0; chargeTrackerIndex < chargeIds.length; ++chargeTrackerIndex) {
let chargeTrackerId = chargeIds[chargeTrackerIndex];
let chargeTrackerName = chargeValues[chargeTrackerId].chargename;
let chargeTrackerValue = chargeValues[chargeTrackerId].chargevalue;
if (abilityName == chargeTrackerName) {
output[abilityChargesLeftAttr] = chargeTrackerValue;
output[abilityNoChargesAttr] = (chargeTrackerValue == 0) ? 1 : 0;
exists = true;
break;
}
}
if (!exists) {
output[abilityNoChargesAttr] = 0;
output[abilityChargesLeftAttr] = abilityMaxCharges;
}
}
}
setAttrs(output);
});
});
});
// Update cooldowns
on("sheet:opened change:repeating_cooldowntracker remove:repeating_cooldowntracker", function(eventInfo) {
getRepeatingAttrs("cooldowntracker", ["cooldownname", "cooldownvalue"], function(cooldownIds, cooldownValues) {
getRepeatingAttrs("activeabilities", ["aablname", "aablcooldown"], function(abilityIds, abilityValues) {
let output = {};
for (var abilityIndex = 0; abilityIndex < abilityIds.length; ++abilityIndex) {
let abilityId = abilityIds[abilityIndex];
let abilityName = abilityValues[abilityId].aablname;
let abilityCooldown = abilityValues[abilityId].aablcooldown;
let abilityOnCooldownAttr = `repeating_activeabilities_${abilityId}_aabloncooldown`;
let abilityCooldownLeftAttr = `repeating_activeabilities_${abilityId}_aablcooldownleft`;
if (abilityCooldown == 0)
{
output[abilityOnCooldownAttr] = 0;
output[abilityCooldownLeftAttr] = 0;
}
else {
let exists = false;
for (let cooldownIndex = 0; cooldownIndex < cooldownIds.length; ++cooldownIndex) {
let cooldownId = cooldownIds[cooldownIndex];
let cooldownName = cooldownValues[cooldownId].cooldownname;
let cooldownValue = parseInt(cooldownValues[cooldownId].cooldownvalue)||0;
if (abilityName == cooldownName) {
output[abilityCooldownLeftAttr] = cooldownValue;
output[abilityOnCooldownAttr] = (cooldownValue > 0) ? 1 : 0;
exists = true;
break;
}
}
if (!exists) {
output[abilityOnCooldownAttr] = 0;
output[abilityCooldownLeftAttr] = abilityCooldown;
}
}
}
setAttrs(output);
});
});
});
on("clicked:conceal", function() {
setAttrs({
concealed: 1
});
});
on("clicked:reveal", function() {
setAttrs({
concealed: 0
});
});
function ClearRepeatingSection(repeating) {
getSectionIDs(repeating, function(ids) {
for (let i = 0; i < ids.length; ++i) {
removeRepeatingRow(`repeating_${repeating}_${ids[i]}`);
}
});
}
on("clicked:initcombat", function() {
ClearRepeatingSection("conditiontracker");
ClearRepeatingSection("cooldowntracker");
ClearRepeatingSection("chargetracker");
ReloadPrimaryWeapon();
// Add all charges
getRepeatingAttrs("activeabilities", ["aablname", "aablcharges"], function(abilityIds, abilityValues) {
abilityIds.forEach(abilityId => {
let id = generateRowID();
let name = abilityValues[abilityId].aablname;
let charges = parseInt(abilityValues[abilityId].aablcharges)||0;
if (charges > 0) {
setAttrs({
[`repeating_chargetracker_${id}_chargename`]: name,
[`repeating_chargetracker_${id}_chargevalue`]: charges
});
}
});
});
});
function DecrementAndRemoveZeroValues(repeating, valueAttr) {
getRepeatingAttrs(repeating, [valueAttr], function(ids, values) {
let output = {};
let remove = [];
for (var i = 0; i < ids.length; ++i) {
let id = ids[i];
let value = parseInt(values[id][valueAttr]);
if (!isNaN(value)) {
let newValue = Math.max(value - 1, 0);
output[`repeating_${repeating}_${id}_${valueAttr}`] = newValue;
if (newValue == 0) {
remove.push(`repeating_${repeating}_${id}`);
}
}
}
setAttrs(output, null, function() {
remove.forEach(attr => {
removeRepeatingRow(attr);
});
});
});
}
on("clicked:roundstart", function() {
DecrementAndRemoveZeroValues("cooldowntracker", "cooldownvalue");
DecrementAndRemoveZeroValues("conditiontracker", "conditionvalue");
});
</script>