2261 lines
140 KiB
HTML
2261 lines
140 KiB
HTML
<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"> / </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"> / </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"> / </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"> / </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> +<span name="attr_wpattackcritdice"></span> <span data-i18n="crit">crit</span> <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> +<span name="attr_wsattackcritdice"></span> <span data-i18n="crit">crit</span> <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> +<span name="attr_aablatkrollcritdice"></span> <span data-i18n="crit">crit</span> <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> +<span name="attr_custattackcritdice"></span> <span data-i18n="crit">crit</span> <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> <input type="number" name="attr_gatkcritdice" value="0"> <span data-i18n="crit">crit</span> <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> <span name="attr_aablatkrollcritdice"></span> <span data-i18n="crit">crit</span> <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> +<span name="attr_aablwillatkcritdice"></span> <span data-i18n="crit">crit</span> +<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> +<span name="attr_willattackcritdice"></span> <span data-i18n="crit">crit</span> +<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"> / </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;"> <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;"> <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;"> <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> <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"> <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> +<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> <input type="number" name="attr_gmatkaimdice" value="0"> <span data-i18n="aim">aim</span> <input type="number" name="attr_gmatkcritdice" value="0"> <span data-i18n="crit">crit</span> <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> <input type="number" name="attr_gmatk1aimdice" value="0"> <span data-i18n="aim">aim</span> <input type="number" name="attr_gmatk1critdice" value="0"> <span data-i18n="crit">crit</span> <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> <input type="number" name="attr_gmatk2aimdice" value="0"> <span data-i18n="aim">aim</span> <input type="number" name="attr_gmatk2critdice" value="0"> <span data-i18n="crit">crit</span> <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> <input type="number" name="attr_gmgatkcritdice" value="0"> <span data-i18n="crit">crit</span> <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> <input type="number" name="attr_gmwatkwillcrit" value="0"> <span data-i18n="crit">crit</span> <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> <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"> </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>
|