[Zafir] Setting up automatic attacks and abilities for GM enemy units

This commit is contained in:
Randy Knapp
2020-12-07 20:53:31 -08:00
parent 381b39e941
commit 15f5ba6c4e
3 changed files with 404 additions and 102 deletions
+2 -1
View File
@@ -287,5 +287,6 @@
"Area of Effect Attacks:":"Area of Effect Attacks:",
"Will Attacks":"Will Attacks",
"Will Attacks:":"Will Attacks:",
"Items:":"Items:"
"Items:":"Items:",
"Bonus:":"Bonus:"
}
+5 -1
View File
@@ -369,7 +369,7 @@ button.sheet-addbtn {
.sheet-enemyattacklist button.sheet-addbtn {
float: right;
margin-left: 12px;
margin-left: 0px;
}
button.sheet-skillbtn {
@@ -1103,6 +1103,10 @@ div.sheet-itemUsable {
display: block;
}
.sheet-tabstoggle[value="Passive"] ~ div.sheet-itemNotPassive {
display: none;
}
button.sheet-atkbtn,
button.sheet-aabbtn,
button.sheet-pabbtn,
+397 -100
View File
@@ -341,7 +341,7 @@
<div class="customattack attack clearfix">
<button type="roll" name="roll_gatk" class="btn"
value="&{template:zafirgrenade} {{name=@{gatkname}}} {{targets=@{gtargets}}} {{targetsroll=[[@{gtargets}]]}} {{crit1=[[ [Crit Dice] (@{gatkcritdice})d6>6]]}} {{damage1=[[ [Damage] @{gatkdamage}]]}} {{critdmg1=[[ [Damage] @{gatkdamage} + @{gatkcritdamage}]]}} {{crit2=[[ [Crit Dice] (@{gatkcritdice})d6>6]]}} {{damage2=[[ [Damage] @{gatkdamage}]]}} {{critdmg2=[[ [Damage] @{gatkdamage} + @{gatkcritdamage}]]}} {{crit3=[[ [Crit Dice] (@{gatkcritdice})d6>6]]}} {{damage3=[[ [Damage] @{gatkdamage}]]}} {{critdmg3=[[ [Damage] @{gatkdamage} + @{gatkcritdamage}]]}} {{crit4=[[ [Crit Dice] (@{gatkcritdice})d6>6]]}} {{damage4=[[ [Damage] @{gatkdamage}]]}} {{critdmg4=[[ [Damage] @{gatkdamage} + @{gatkcritdamage}]]}} {{crit5=[[ [Crit Dice] (@{gatkcritdice})d6>6]]}} {{damage5=[[ [Damage] @{gatkdamage}]]}} {{critdmg5=[[ [Damage] @{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;">
<input type="text" name="attr_gatkname" spellcheck="false" placeholder="Custom Grenade" style="width:110px;margin-right:10px;">
<label>&nbsp;<input type="number" name="attr_gatkcritdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gatkdamage" spellcheck="false" value="0">(+<input type="number" name="attr_gatkcritdamage" value="0">)</label>
</div>
<br />
@@ -464,7 +464,7 @@
<input type="hidden" name="attr_itemeffects" />
<input type="hidden" class="tabstoggle" name="attr_itemtype" value="Utility" />
<div class="itemUtility">
<input type="hidden" class="tabstoggle" name="attr_itemusage" value="Passive" />
<input type="hidden" class="tabstoggle" name="attr_itemusage" value="Passive" />
<div class="itemUsable">
<div class="attack clearfix">
<div class="flexcontainer">
@@ -1122,28 +1122,31 @@
<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>
</select><br />
<label data-i18n="Bonus:">Bonus:</label><input type="number" name="attr_gmatkaimdice" value="0" style="position:relative;right:3px;"><span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;<input type="number" name="attr_gmatkcritdice" value="0">&nbsp;<span data-i18n="crit">crit</span>
<br />
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmatk" class="btn" value="&{template:zafir} {{name=@{gmatkname}}} {{aim=[[ [Aim Dice] (@{gmatkaimdicetotal})d6>5]]}} {{crit=[[ [Crit Dice] (@{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;">
<input type="text" name="attr_gmatkname" spellcheck="false" placeholder="Custom" style="width:110px;margin-right:10px;">
<label>&nbsp;&nbsp;<input type="number" name="attr_gmatkaimdice" value="0">&nbsp;<span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;<input type="number" name="attr_gmatkcritdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gmatkdamage" spellcheck="false" value="0">(+<input type="number" name="attr_gmatkcritdamage" value="0">)</label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk0_id" value="">
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmatk0" class="btn" value="&{template:zafir} {{name=@{selectedenemyatkname}}} {{aim=[[ [Aim Dice] (@{gmatkaimdicetotal}+@{selectedenemyatkaim})d6>5]]}} {{crit=[[ [Crit Dice] (@{gmatkcritdicetotal}+@{selectedenemyatkcrit})d6>6]]}} {{damage=[[(@{selectedenemyatkdmg})]]}} {{critdmg=[[(@{selectedenemyatkdmg}) + (@{selectedenemyatkcritdmg})]]}} {{notes=@{selectedenemyatknotes}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Attack">Attack</span></button>
<label style="width:110px;overflow:hidden;text-overflow:ellipsis;"><span name="attr_selectedenemyatkname"></span></label>
<label>+<span name="attr_selectedenemyatkaim"></span> <span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;+<span name="attr_selectedenemyatkcrit"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span name="attr_selectedenemyatkdmg"></span> (+<span name="attr_selectedenemyatkcritdmg"></span>)</label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk1_id" value="">
<div class="customattack attack clearfix">
<input type="hidden" name="attr_gmatk1aimdicetotal" />
<input type="hidden" name="attr_gmatk1critdicetotal" />
<button type="roll" name="roll_gmatk1" class="btn" value="&{template:zafir} {{name=@{gmatk1name}}} {{aim=[[ [Aim Dice] (@{gmatk1aimdicetotal})d6>5]]}} {{crit=[[ [Crit Dice] (@{gmatk1critdicetotal})d6>6]]}} {{damage=[[(@{gmatk1damage})]]}} {{critdmg=[[(@{gmatk1damage}) + (@{gmatk1critdamage})]]}} {{notes=@{selectedenemyatk1notes}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Attack">Attack</span></button>
<input type="text" name="attr_gmatk1name" spellcheck="false" placeholder="Attack Name" style="width:110px;margin-right:10px;">
<label>&nbsp;&nbsp;<input type="number" name="attr_gmatk1aimdice" value="0">&nbsp;<span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;<input type="number" name="attr_gmatk1critdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gmatk1damage" spellcheck="false" value="0">(+<input type="number" name="attr_gmatk1critdamage" value="0">)</label>
<button type="roll" name="roll_gmatk1" class="btn" value="&{template:zafir} {{name=@{selectedenemyatk1name}}} {{aim=[[ [Aim Dice] (@{gmatkaimdicetotal}+@{selectedenemyatk1aim})d6>5]]}} {{crit=[[ [Crit Dice] (@{gmatkcritdicetotal}+@{selectedenemyatk1crit})d6>6]]}} {{damage=[[(@{selectedenemyatk1dmg})]]}} {{critdmg=[[(@{selectedenemyatk1dmg}) + (@{selectedenemyatk1critdmg})]]}} {{notes=@{selectedenemyatk1notes}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Attack">Attack</span></button>
<label style="width:110px;overflow:hidden;text-overflow:ellipsis;"><span name="attr_selectedenemyatk1name"></span></label>
<label>+<span name="attr_selectedenemyatk1aim"></span> <span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;+<span name="attr_selectedenemyatk1crit"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span name="attr_selectedenemyatk1dmg"></span> (+<span name="attr_selectedenemyatk1critdmg"></span>)</label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyatk2_id" value="">
<div class="customattack attack clearfix">
<input type="hidden" name="attr_gmatk2aimdicetotal" />
<input type="hidden" name="attr_gmatk2critdicetotal" />
<button type="roll" name="roll_gmatk2" class="btn" value="&{template:zafir} {{name=@{gmatk2name}}} {{aim=[[ [Aim Dice] (@{gmatk2aimdicetotal})d6>5]]}} {{crit=[[ [Crit Dice] (@{gmatk2critdicetotal})d6>6]]}} {{damage=[[(@{gmatk2damage})]]}} {{critdmg=[[(@{gmatk2damage}) + (@{gmatk2critdamage})]]}} {{notes=@{selectedenemyatk2notes}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Attack">Attack</span></button>
<input type="text" name="attr_gmatk2name" spellcheck="false" placeholder="Attack Name" style="width:110px;margin-right:10px;">
<label>&nbsp;&nbsp;<input type="number" name="attr_gmatk2aimdice" value="0">&nbsp;<span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;<input type="number" name="attr_gmatk2critdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gmatk2damage" spellcheck="false" value="0">(+<input type="number" name="attr_gmatk2critdamage" value="0">)</label>
<button type="roll" name="roll_gmatk2" class="btn" value="&{template:zafir} {{name=@{selectedenemyatk2name}}} {{aim=[[ [Aim Dice] (@{gmatkaimdicetotal}+@{selectedenemyatk2aim})d6>5]]}} {{crit=[[ [Crit Dice] (@{gmatkcritdicetotal}+@{selectedenemyatk2crit})d6>6]]}} {{damage=[[(@{selectedenemyatk2dmg})]]}} {{critdmg=[[(@{selectedenemyatk2dmg}) + (@{selectedenemyatk2critdmg})]]}} {{notes=@{selectedenemyatk2notes}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Attack">Attack</span></button>
<label style="width:110px;overflow:hidden;text-overflow:ellipsis;"><span name="attr_selectedenemyatk2name"></span></label>
<label>+<span name="attr_selectedenemyatk2aim"></span> <span data-i18n="aim">aim</span>&nbsp;&nbsp;&nbsp;+<span name="attr_selectedenemyatk2crit"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span name="attr_selectedenemyatk2dmg"></span> (+<span name="attr_selectedenemyatk2critdmg"></span>)</label>
</div>
<br />
<!-- Grenade Attack -->
@@ -1153,9 +1156,34 @@
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmgatk" class="btn"
value="&{template:zafirgrenade} {{name=@{gmgatkname}}} {{targets=@{gmgtargets}}} {{targetsroll=[[@{gmgtargets}]]}} {{crit1=[[ [Crit Dice] (@{gmgatkcritdice})d6>6]]}} {{damage1=[[ [Damage] @{gmgatkdamage}]]}} {{critdmg1=[[ [Damage] @{gmgatkdamage} + @{gmgatkcritdamage}]]}} {{crit2=[[ [Crit Dice] (@{gmgatkcritdice})d6>6]]}} {{damage2=[[ [Damage] @{gmgatkdamage}]]}} {{critdmg2=[[ [Damage] @{gmgatkdamage} + @{gmgatkcritdamage}]]}} {{crit3=[[ [Crit Dice] (@{gmgatkcritdice})d6>6]]}} {{damage3=[[ [Damage] @{gmgatkdamage}]]}} {{critdmg3=[[ [Damage] @{gmgatkdamage} + @{gmgatkcritdamage}]]}} {{crit4=[[ [Crit Dice] (@{gmgatkcritdice})d6>6]]}} {{damage4=[[ [Damage] @{gmgatkdamage}]]}} {{critdmg4=[[ [Damage] @{gmgatkdamage} + @{gmgatkcritdamage}]]}} {{crit5=[[ [Crit Dice] (@{gmgatkcritdice})d6>6]]}} {{damage5=[[ [Damage] @{gmgatkdamage}]]}} {{critdmg5=[[ [Damage] @{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;">
<input type="text" name="attr_gmgatkname" spellcheck="false" placeholder="Custom" style="width:110px;margin-right:10px;">
<label>&nbsp;<input type="number" name="attr_gmgatkcritdice" value="0">&nbsp;<span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;<input type="text" name="attr_gmgatkdamage" spellcheck="false" value="0">(+<input type="number" name="attr_gmgatkcritdamage" value="0">)</label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemygrenadeatk0_id" value="">
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmgatk" class="btn"
value="&{template:zafirgrenade} {{name=@{selectedenemygrenadeatk0name}}} {{targets=@{gmgtargets}}} {{targetsroll=[[@{gmgtargets}]]}} {{crit1=[[ [Crit Dice] (@{selectedenemygrenadeatk0critdice})d6>6]]}} {{damage1=[[ [Damage] @{selectedenemygrenadeatk0damage}]]}} {{critdmg1=[[ [Damage] @{selectedenemygrenadeatk0damage} + @{selectedenemygrenadeatk0critdmg}]]}} {{crit2=[[ [Crit Dice] (@{selectedenemygrenadeatk0critdice})d6>6]]}} {{damage2=[[ [Damage] @{selectedenemygrenadeatk0damage}]]}} {{critdmg2=[[ [Damage] @{selectedenemygrenadeatk0damage} + @{selectedenemygrenadeatk0critdmg}]]}} {{crit3=[[ [Crit Dice] (@{selectedenemygrenadeatk0critdice})d6>6]]}} {{damage3=[[ [Damage] @{selectedenemygrenadeatk0damage}]]}} {{critdmg3=[[ [Damage] @{selectedenemygrenadeatk0damage} + @{selectedenemygrenadeatk0critdmg}]]}} {{crit4=[[ [Crit Dice] (@{selectedenemygrenadeatk0critdice})d6>6]]}} {{damage4=[[ [Damage] @{selectedenemygrenadeatk0damage}]]}} {{critdmg4=[[ [Damage] @{selectedenemygrenadeatk0damage} + @{selectedenemygrenadeatk0critdmg}]]}} {{crit5=[[ [Crit Dice] (@{selectedenemygrenadeatk0critdice})d6>6]]}} {{damage5=[[ [Damage] @{selectedenemygrenadeatk0damage}]]}} {{critdmg5=[[ [Damage] @{selectedenemygrenadeatk0damage} + @{selectedenemygrenadeatk0critdmg}]]}} {{notes=@{selectedenemygrenadeatk0effect}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Grenade Attack">Grenade Attack</span></button>
<label style="width:110px;overflow:hidden;text-overflow:ellipsis;"><span name="attr_selectedenemygrenadeatk0name"></span></label>
<label>+<span name="attr_selectedenemygrenadeatk0critdice" value="0"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span name="attr_selectedenemygrenadeatk0damage" value="0"></span> (+<span name="attr_selectedenemygrenadeatk0critdmg"></span>)</label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemygrenadeatk1_id" value="">
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmgatk" class="btn"
value="&{template:zafirgrenade} {{name=@{selectedenemygrenadeatk1name}}} {{targets=@{gmgtargets}}} {{targetsroll=[[@{gmgtargets}]]}} {{crit1=[[ [Crit Dice] (@{selectedenemygrenadeatk1critdice})d6>6]]}} {{damage1=[[ [Damage] @{selectedenemygrenadeatk1damage}]]}} {{critdmg1=[[ [Damage] @{selectedenemygrenadeatk1damage} + @{selectedenemygrenadeatk1critdmg}]]}} {{crit2=[[ [Crit Dice] (@{selectedenemygrenadeatk1critdice})d6>6]]}} {{damage2=[[ [Damage] @{selectedenemygrenadeatk1damage}]]}} {{critdmg2=[[ [Damage] @{selectedenemygrenadeatk1damage} + @{selectedenemygrenadeatk1critdmg}]]}} {{crit3=[[ [Crit Dice] (@{selectedenemygrenadeatk1critdice})d6>6]]}} {{damage3=[[ [Damage] @{selectedenemygrenadeatk1damage}]]}} {{critdmg3=[[ [Damage] @{selectedenemygrenadeatk1damage} + @{selectedenemygrenadeatk1critdmg}]]}} {{crit4=[[ [Crit Dice] (@{selectedenemygrenadeatk1critdice})d6>6]]}} {{damage4=[[ [Damage] @{selectedenemygrenadeatk1damage}]]}} {{critdmg4=[[ [Damage] @{selectedenemygrenadeatk1damage} + @{selectedenemygrenadeatk1critdmg}]]}} {{crit5=[[ [Crit Dice] (@{selectedenemygrenadeatk1critdice})d6>6]]}} {{damage5=[[ [Damage] @{selectedenemygrenadeatk1damage}]]}} {{critdmg5=[[ [Damage] @{selectedenemygrenadeatk1damage} + @{selectedenemygrenadeatk1critdmg}]]}} {{notes=@{selectedenemygrenadeatk1effect}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Grenade Attack">Grenade Attack</span></button>
<label style="width:110px;overflow:hidden;text-overflow:ellipsis;"><span name="attr_selectedenemygrenadeatk1name"></span></label>
<label>+<span name="attr_selectedenemygrenadeatk1critdice" value="0"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span name="attr_selectedenemygrenadeatk1damage" value="0"></span> (+<span name="attr_selectedenemygrenadeatk1critdmg"></span>)</label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemygrenadeatk2_id" value="">
<div class="customattack attack clearfix">
<button type="roll" name="roll_gmgatk" class="btn"
value="&{template:zafirgrenade} {{name=@{selectedenemygrenadeatk2name}}} {{targets=@{gmgtargets}}} {{targetsroll=[[@{gmgtargets}]]}} {{crit1=[[ [Crit Dice] (@{selectedenemygrenadeatk2critdice})d6>6]]}} {{damage1=[[ [Damage] @{selectedenemygrenadeatk2damage}]]}} {{critdmg1=[[ [Damage] @{selectedenemygrenadeatk2damage} + @{selectedenemygrenadeatk2critdmg}]]}} {{crit2=[[ [Crit Dice] (@{selectedenemygrenadeatk2critdice})d6>6]]}} {{damage2=[[ [Damage] @{selectedenemygrenadeatk2damage}]]}} {{critdmg2=[[ [Damage] @{selectedenemygrenadeatk2damage} + @{selectedenemygrenadeatk2critdmg}]]}} {{crit3=[[ [Crit Dice] (@{selectedenemygrenadeatk2critdice})d6>6]]}} {{damage3=[[ [Damage] @{selectedenemygrenadeatk2damage}]]}} {{critdmg3=[[ [Damage] @{selectedenemygrenadeatk2damage} + @{selectedenemygrenadeatk2critdmg}]]}} {{crit4=[[ [Crit Dice] (@{selectedenemygrenadeatk2critdice})d6>6]]}} {{damage4=[[ [Damage] @{selectedenemygrenadeatk2damage}]]}} {{critdmg4=[[ [Damage] @{selectedenemygrenadeatk2damage} + @{selectedenemygrenadeatk2critdmg}]]}} {{crit5=[[ [Crit Dice] (@{selectedenemygrenadeatk2critdice})d6>6]]}} {{damage5=[[ [Damage] @{selectedenemygrenadeatk2damage}]]}} {{critdmg5=[[ [Damage] @{selectedenemygrenadeatk2damage} + @{selectedenemygrenadeatk2critdmg}]]}} {{notes=@{selectedenemygrenadeatk2effect}}} {{enemy=@{selectedenemy}}}"><span data-i18n="Grenade Attack">Grenade Attack</span></button>
<label style="width:110px;overflow:hidden;text-overflow:ellipsis;"><span name="attr_selectedenemygrenadeatk2name"></span></label>
<label>+<span name="attr_selectedenemygrenadeatk2critdice" value="0"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span name="attr_selectedenemygrenadeatk2damage" value="0"></span> (+<span name="attr_selectedenemygrenadeatk2critdmg"></span>)</label>
</div>
<br />
<!-- Will Attack -->
<div>
@@ -1177,9 +1205,10 @@
<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:">Bonus:</label><input type="number" name="attr_gmwatkwill" value="0" style="position:relative;right:3px;"><span data-i18n="will">will</span>&nbsp;&nbsp;<input type="number" name="attr_gmwatkwillcrit" value="0"> <span data-i18n="crit">crit</span><br />
<div class="customattack attack clearfix willattack">
<button type="roll" name="roll_willattack" class="btn" value="&{template:zafirwillattack} {{name=@{gmwatkname}}} {{aim=[[ [Will Attack Dice] (@{gmwatkaimdice})d6>5]]}} {{crit=[[ [Crit Effect Dice] (@{gmwatkcritdice})d6>6]]}} {{resist=[[ [Resist Dice] (@{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;">
<input type="text" name="attr_gmwatkname" spellcheck="false" placeholder="Custom" style="width:110px;margin-right:10px;">
<label><input type="number" name="attr_gmwatkwill" value="0"> <span data-i18n="will">will</span>&nbsp;&nbsp;<input type="number" name="attr_gmwatkwillcrit" value="0"> <span data-i18n="crit">crit</span>&nbsp;&nbsp;<input type="number" name="attr_gmenemywill" value="0"> <span data-i18n="resist">resist</span></label>
</div>
<div class="customattack attack clearfix willattack">
@@ -1187,30 +1216,161 @@
<input type="text" name="attr_panicname" spellcheck="false" placeholder="Character" style="width:110px;margin-right:10px;">
<label>2 <span data-i18n="will">will</span>&nbsp;&nbsp;<input type="number" name="attr_panicresist" value="0"> <span data-i18n="resist">resist</span></label>
</div>
</div>
<br />
<!-- Dodge Roller -->
<div>
<h3 data-i18n="Dodge">Dodge</h3>
<div class="attack customattack clearfix dodgeroller">
<button type="roll" name="roll_dodge" class="btn" value="&{template:zafirdodge} {{dodge=[[ [Dodge Dice] (@{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" />
<input type="hidden" class="valuehider" name="attr_selectedenemywillatk0_id" value="">
<div class="customattack attack clearfix willattack">
<button type="roll" name="roll_willattack" class="btn" value="&{template:zafirwillattack} {{name=@{selectedenemywillatk0name}}} {{aim=[[ [Will Attack Dice] (@{gmwatkaimdice}+@{selectedenemywill})d6>5]]}} {{crit=[[ [Crit Effect Dice] (@{selectedenemywillatk0critdice})d6>6]]}} {{resist=[[ [Resist Dice] (@{gmwatkresistdice})d6>6]]}} {{enemy=@{selectedenemy}}}"><span data-i18n="Will Attack">Will Attack</span></button>
<label style="width:110px;overflow:hidden;text-overflow:ellipsis;"><span name="attr_selectedenemywillatk0name"></span></label>
<label>+<span name="attr_selectedenemywill"></span> <span data-i18n="will">will</span>&nbsp;&nbsp;+<span name="attr_selectedenemywillatk0critdice" value="0"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;<input type="number" name="attr_gmenemywill" value="0"> <span data-i18n="resist">resist</span></label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemywillatk1_id" value="">
<div class="customattack attack clearfix willattack">
<button type="roll" name="roll_willattack" class="btn" value="&{template:zafirwillattack} {{name=@{selectedenemywillatk1name}}} {{aim=[[ [Will Attack Dice] (@{gmwatkaimdice}+@{selectedenemywill})d6>5]]}} {{crit=[[ [Crit Effect Dice] (@{selectedenemywillatk1critdice})d6>6]]}} {{resist=[[ [Resist Dice] (@{gmwatkresistdice})d6>6]]}} {{enemy=@{selectedenemy}}}"><span data-i18n="Will Attack">Will Attack</span></button>
<label style="width:110px;overflow:hidden;text-overflow:ellipsis;"><span name="attr_selectedenemywillatk1name"></span></label>
<label>+<span name="attr_selectedenemywill"></span> <span data-i18n="will">will</span>&nbsp;&nbsp;+<span name="attr_selectedenemywillatk1critdice" value="0"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;<input type="number" name="attr_gmenemywill" value="0"> <span data-i18n="resist">resist</span></label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemywillatk2_id" value="">
<div class="customattack attack clearfix willattack">
<button type="roll" name="roll_willattack" class="btn" value="&{template:zafirwillattack} {{name=@{selectedenemywillatk2name}}} {{aim=[[ [Will Attack Dice] (@{gmwatkaimdice}+@{selectedenemywill})d6>5]]}} {{crit=[[ [Crit Effect Dice] (@{selectedenemywillatk2critdice})d6>6]]}} {{resist=[[ [Resist Dice] (@{gmwatkresistdice})d6>6]]}} {{enemy=@{selectedenemy}}}"><span data-i18n="Will Attack">Will Attack</span></button>
<label style="width:110px;overflow:hidden;text-overflow:ellipsis;"><span name="attr_selectedenemywillatk2name"></span></label>
<label>+<span name="attr_selectedenemywill"></span> <span data-i18n="will">will</span>&nbsp;&nbsp;+<span name="attr_selectedenemywillatk2critdice" value="0"></span> <span data-i18n="crit">crit</span>&nbsp;&nbsp;<input type="number" name="attr_gmenemywill" value="0"> <span data-i18n="resist">resist</span></label>
</div>
</div>
<br />
<div>
<h3 data-i18n="Items and Abilities">Items &amp; Abilities</h3>
<h3 data-i18n="Abilities">Abilities</h3>
<div class="customattack attack clearfix">
<button type="roll" name="roll_useability" class="btn" value="&{template:zafir} {{name=@{gmuseabilityname}}} {{notes=@{gmuseabilityeffect}}} {{enemy=@{selectedenemy}}} {{label=Use Ability:}}"><span data-i18n="Use Ability">Use Ability</span></button>
<input type="text" name="attr_gmuseabilityname" spellcheck="false" placeholder="Ability Name" style="width:110px;margin-right:10px;">
<input type="text" name="attr_gmuseabilityeffect" spellcheck="false" placeholder="Ability Effect" style="width:275px;margin-right:10px;">
<label style="width:0px">&nbsp;</label>
</div>
<input type="hidden" class="tabstoggle" name="attr_selectedenemyabl0activation" value="Passive" />
<div class="itemNotPassive">
<input type="hidden" class="valuehider" name="attr_selectedenemyabl0_id" value="">
<div class="customattack attack clearfix">
<div class="flexcontainer">
<div class="left">
<label style="width:auto;"><span name="attr_selectedenemyabl0name"></span></label>
</div>
<div class="center usableeffects">
<span name="attr_selectedenemyabl0effect"></span>
</div>
<div class="right">
<button type="roll" name="roll_useitem" class="btn" style="float:none;" value="&{template:zafir} {{name=@{selectedenemyabl0name}}} {{notes=@{selectedenemyabl0effect}}} {{enemy=@{selectedenemy}}} {{label=Use Ability:}}"><span data-i18n="Use Ability">Use Ability</span>
</button>
</div>
</div>
</div>
</div>
<input type="hidden" class="tabstoggle" name="attr_selectedenemyabl1activation" value="Passive" />
<div class="itemNotPassive">
<input type="hidden" class="valuehider" name="attr_selectedenemyabl1_id" value="">
<div class="customattack attack clearfix">
<div class="flexcontainer">
<div class="left">
<label style="width:auto;"><span name="attr_selectedenemyabl1name"></span></label>
</div>
<div class="center usableeffects">
<span name="attr_selectedenemyabl1effect"></span>
</div>
<div class="right">
<button type="roll" name="roll_useitem" class="btn" style="float:none;" value="&{template:zafir} {{name=@{selectedenemyabl1name}}} {{notes=@{selectedenemyabl1effect}}} {{enemy=@{selectedenemy}}} {{label=Use Ability:}}"><span data-i18n="Use Ability">Use Ability</span>
</button>
</div>
</div>
</div>
</div>
<input type="hidden" class="tabstoggle" name="attr_selectedenemyabl2activation" value="Passive" />
<div class="itemNotPassive">
<input type="hidden" class="valuehider" name="attr_selectedenemyabl2_id" value="">
<div class="customattack attack clearfix">
<div class="flexcontainer">
<div class="left">
<label style="width:auto;"><span name="attr_selectedenemyabl2name"></span></label>
</div>
<div class="center usableeffects">
<span name="attr_selectedenemyabl2effect"></span>
</div>
<div class="right">
<button type="roll" name="roll_useitem" class="btn" style="float:none;" value="&{template:zafir} {{name=@{selectedenemyabl2name}}} {{notes=@{selectedenemyabl2effect}}} {{enemy=@{selectedenemy}}} {{label=Use Ability:}}"><span data-i18n="Use Ability">Use Ability</span>
</button>
</div>
</div>
</div>
</div>
<br />
<h3 data-i18n="Items">Items</h3>
<div class="customattack attack clearfix">
<button type="roll" name="roll_useitem" class="btn" value="&{template:zafir} {{name=@{gmuseitemname}}} {{notes=@{gmuseitemeffect}}} {{enemy=@{selectedenemy}}} {{label=Use Item:}}"><span data-i18n="Use Item">Use Item</span></button>
<input type="text" name="attr_gmuseitemname" spellcheck="false" placeholder="Item Name" style="width:110px;margin-right:10px;">
<input type="text" name="attr_gmuseitemeffect" spellcheck="false" placeholder="Item Effect" style="width:290px;margin-right:10px;">
<label style="width:0px">&nbsp;</label>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyitem0_id" value="">
<div class="customattack attack clearfix">
<button type="roll" name="roll_useability" class="btn" value="&{template:zafir} {{name=@{gmuseabilityname}}} {{notes=@{gmuseabilityeffect}}} {{enemy=@{selectedenemy}}} {{label=Use Ability:}}"><span data-i18n="Use Ability">Use Ability</span></button>
<input type="text" name="attr_gmuseabilityname" spellcheck="false" placeholder="Ability Name" style="width:110px;margin-right:10px;">
<input type="text" name="attr_gmuseabilityeffect" spellcheck="false" placeholder="Ability Effect" style="width:275px;margin-right:10px;">
<label style="width:0px">&nbsp;</label>
<div class="flexcontainer">
<div class="left">
<label style="width:auto;"><span name="attr_selectedenemyitem0name"></span></label>
</div>
<div class="center usableeffects">
<span name="attr_selectedenemyitem0effect"></span>
</div>
<div class="right">
<button type="roll" name="roll_useitem" class="btn" style="float:none;" value="&{template:zafir} {{name=@{selectedenemyitem0name}}} {{notes=@{selectedenemyitem0effect}}} {{enemy=@{selectedenemy}}} {{label=Use Item:}}"><span data-i18n="Use Item">Use Item</span>
</button>
</div>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyitem1_id" value="">
<div class="customattack attack clearfix">
<div class="flexcontainer">
<div class="left">
<label style="width:auto;"><span name="attr_selectedenemyitem1name"></span></label>
</div>
<div class="center usableeffects">
<span name="attr_selectedenemyitem1effect"></span>
</div>
<div class="right">
<button type="roll" name="roll_useitem" class="btn" style="float:none;" value="&{template:zafir} {{name=@{selectedenemyitem1name}}} {{notes=@{selectedenemyitem1effect}}} {{enemy=@{selectedenemy}}} {{label=Use Item:}}"><span data-i18n="Use Item">Use Item</span>
</button>
</div>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyitem2_id" value="">
<div class="customattack attack clearfix">
<div class="flexcontainer">
<div class="left">
<label style="width:auto;"><span name="attr_selectedenemyitem2name"></span></label>
</div>
<div class="center usableeffects">
<span name="attr_selectedenemyitem2effect"></span>
</div>
<div class="right">
<button type="roll" name="roll_useitem" class="btn" style="float:none;" value="&{template:zafir} {{name=@{selectedenemyitem2name}}} {{notes=@{selectedenemyitem2effect}}} {{enemy=@{selectedenemy}}} {{label=Use Item:}}"><span data-i18n="Use Item">Use Item</span>
</button>
</div>
</div>
</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=[[ [Dodge Dice] (@{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>
@@ -1456,7 +1616,7 @@
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<div class="stats">
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl1cooldown"/>
<span><span class="label2" data-i18n="Cooldown:">Cooldown:</span> <span name="attr_selectedenemyabl1cooldown"></span>, </span>
<span><span class="label2" data-i18n="Cooldown:">Cooldown:</span> <span name="attr_selectedenemyabl1cooldown"></span>&nbsp;&nbsp;&nbsp;</span>
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl1charges"/>
<span><span class="label2" data-i18n="Charges:">Charges:</span> <span name="attr_selectedenemyabl1charges"></span></span>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl1effect" value=""/>
@@ -1475,7 +1635,7 @@
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<div class="stats">
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl2cooldown"/>
<span><span class="label2" data-i18n="Cooldown:">Cooldown:</span> <span name="attr_selectedenemyabl2cooldown"></span>, </span>
<span><span class="label2" data-i18n="Cooldown:">Cooldown:</span> <span name="attr_selectedenemyabl2cooldown"></span>&nbsp;&nbsp;&nbsp;</span>
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl2charges"/>
<span><span class="label2" data-i18n="Charges:">Charges:</span> <span name="attr_selectedenemyabl2charges"></span></span>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl2effect" value=""/>
@@ -1483,6 +1643,63 @@
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl3_id" value="">
<div class="attackinfo">
<input type="hidden" class="hideifone" name="attr_gmobfuscateabilities" value="0"/>
<span class="label" name="attr_selectedenemyabl3name">Ability</span>
<input type="hidden" class="hideifzero" name="attr_gmobfuscateabilities" value="0"/>
<span class="label">???</span>
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<span style="font-style:italic;">(<span name="attr_selectedenemyabl3activation"></span>)</span>
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<div class="stats">
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl3cooldown"/>
<span><span class="label2" data-i18n="Cooldown:">Cooldown:</span> <span name="attr_selectedenemyabl3cooldown"></span>&nbsp;&nbsp;&nbsp;</span>
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl3charges"/>
<span><span class="label2" data-i18n="Charges:">Charges:</span> <span name="attr_selectedenemyabl3charges"></span></span>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl3effect" value=""/>
<div class="notes wrap">&#8226; <span name="attr_selectedenemyabl3effect"></span></div>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl4_id" value="">
<div class="attackinfo">
<input type="hidden" class="hideifone" name="attr_gmobfuscateabilities" value="0"/>
<span class="label" name="attr_selectedenemyabl4name">Ability</span>
<input type="hidden" class="hideifzero" name="attr_gmobfuscateabilities" value="0"/>
<span class="label">???</span>
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<span style="font-style:italic;">(<span name="attr_selectedenemyabl4activation"></span>)</span>
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<div class="stats">
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl4cooldown"/>
<span><span class="label2" data-i18n="Cooldown:">Cooldown:</span> <span name="attr_selectedenemyabl4cooldown"></span>&nbsp;&nbsp;&nbsp;</span>
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl4charges"/>
<span><span class="label2" data-i18n="Charges:">Charges:</span> <span name="attr_selectedenemyabl4charges"></span></span>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl4effect" value=""/>
<div class="notes wrap">&#8226; <span name="attr_selectedenemyabl4effect"></span></div>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl5_id" value="">
<div class="attackinfo">
<input type="hidden" class="hideifone" name="attr_gmobfuscateabilities" value="0"/>
<span class="label" name="attr_selectedenemyabl5name">Ability</span>
<input type="hidden" class="hideifzero" name="attr_gmobfuscateabilities" value="0"/>
<span class="label">???</span>
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<span style="font-style:italic;">(<span name="attr_selectedenemyabl5activation"></span>)</span>
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<div class="stats">
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl5cooldown"/>
<span><span class="label2" data-i18n="Cooldown:">Cooldown:</span> <span name="attr_selectedenemyabl5cooldown"></span>&nbsp;&nbsp;&nbsp;</span>
<input type="hidden" class="hideifzero" name="attr_selectedenemyabl5charges"/>
<span><span class="label2" data-i18n="Charges:">Charges:</span> <span name="attr_selectedenemyabl5charges"></span></span>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl5effect" value=""/>
<div class="notes wrap">&#8226; <span name="attr_selectedenemyabl5effect"></span></div>
</div>
</div>
<!-- Items -->
<input type="hidden" class="valuehider" name="attr_selectedenemyitem0_id" value="">
<div class="attackinfo">
@@ -1499,6 +1716,36 @@
<div class="notes wrap">&#8226; <span name="attr_selectedenemyitem0effect"></span></div>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyitem1_id" value="">
<div class="attackinfo">
<input type="hidden" class="hideifone" name="attr_gmobfuscateabilities" value="0"/>
<span class="label" name="attr_selectedenemyitem1name">Item</span>
<input type="hidden" class="hideifzero" name="attr_gmobfuscateabilities" value="0"/>
<span class="label">???</span>
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<div class="stats">
<input type="hidden" class="hideifzero" name="attr_selectedenemyitem1charges"/>
<span><span class="label2" data-i18n="Charges:">Charges:</span> <span name="attr_selectedenemyitem1charges"></span></span>
<input type="hidden" class="valuehider" name="attr_selectedenemyitem1effect" value=""/>
<div class="notes wrap">&#8226; <span name="attr_selectedenemyitem1effect"></span></div>
</div>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyitem2_id" value="">
<div class="attackinfo">
<input type="hidden" class="hideifone" name="attr_gmobfuscateabilities" value="0"/>
<span class="label" name="attr_selectedenemyitem2name">Item</span>
<input type="hidden" class="hideifzero" name="attr_gmobfuscateabilities" value="0"/>
<span class="label">???</span>
<input type="hidden" class="hideifzero" name="attr_gmshowabilityinfo" value="1"/>
<div class="stats">
<input type="hidden" class="hideifzero" name="attr_selectedenemyitem2charges"/>
<span><span class="label2" data-i18n="Charges:">Charges:</span> <span name="attr_selectedenemyitem2charges"></span></span>
<input type="hidden" class="valuehider" name="attr_selectedenemyitem2effect" value=""/>
<div class="notes wrap">&#8226; <span name="attr_selectedenemyitem2effect"></span></div>
</div>
</div>
</div>
</div>
<button type="action" name="act_refreshselectedunit" class="btn" style="float:right;width:auto;padding-top:4px;padding-bottom:4px;">Refresh</button>
@@ -1779,10 +2026,58 @@
<label data-i18n="Effect:">Effect:</label><textarea name="attr_selectedenemyabl2effect"></textarea>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl3_id" value="">
<div class="enemyattackentry clearfix">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_selectedenemyabl3name" /><br />
<label data-i18n="Activation:">Activation:</label><select name="attr_selectedenemyabl3activation">
<option value="Passive" data-i18n="Passive Option">Passive</option>
<option value="Reaction" data-i18n="Reaction Option">Reaction</option>
<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="Cooldown:">Cooldown:</label><input type="number" name="attr_selectedenemyabl3cooldown" value="0" />
<label style="margin-left:32px;" data-i18n="Charges:">Charges:</label><input type="number" name="attr_selectedenemyabl3charges" value="0" /><br/>
<label data-i18n="Effect:">Effect:</label><textarea name="attr_selectedenemyabl3effect"></textarea>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl4_id" value="">
<div class="enemyattackentry clearfix">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_selectedenemyabl4name" /><br />
<label data-i18n="Activation:">Activation:</label><select name="attr_selectedenemyabl4activation">
<option value="Passive" data-i18n="Passive Option">Passive</option>
<option value="Reaction" data-i18n="Reaction Option">Reaction</option>
<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="Cooldown:">Cooldown:</label><input type="number" name="attr_selectedenemyabl4cooldown" value="0" />
<label style="margin-left:32px;" data-i18n="Charges:">Charges:</label><input type="number" name="attr_selectedenemyabl4charges" value="0" /><br/>
<label data-i18n="Effect:">Effect:</label><textarea name="attr_selectedenemyabl4effect"></textarea>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl5_id" value="">
<div class="enemyattackentry clearfix">
<label data-i18n="Name:">Name:</label><input type="text" spellcheck="false" name="attr_selectedenemyabl5name" /><br />
<label data-i18n="Activation:">Activation:</label><select name="attr_selectedenemyabl5activation">
<option value="Passive" data-i18n="Passive Option">Passive</option>
<option value="Reaction" data-i18n="Reaction Option">Reaction</option>
<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="Cooldown:">Cooldown:</label><input type="number" name="attr_selectedenemyabl5cooldown" value="0" />
<label style="margin-left:32px;" data-i18n="Charges:">Charges:</label><input type="number" name="attr_selectedenemyabl5charges" value="0" /><br/>
<label data-i18n="Effect:">Effect:</label><textarea name="attr_selectedenemyabl5effect"></textarea>
</div>
<input type="hidden" class="valuehider" name="attr_selectedenemyabl0_id" value="">
<div>
<button class="removebtn" type="action" name="act_removegmunitabl"><span data-i18n="Remove">Remove</span></button>
</div><input type="hidden" class="avaluehider" name="attr_selectedenemyabl2_id" value="">
</div><input type="hidden" class="avaluehider" name="attr_selectedenemyabl5_id" value="">
<div>
<button class="addbtn" type="action" name="act_addgmunitabl"><span data-i18n="Plus Add">+Add</span></button>
</div>
@@ -3300,6 +3595,7 @@ on("sheet:opened change:repeating_activeabilities:aabltype change:wpammo", funct
});
const MAX_GM_UNIT_ATKS = 3;
const MAX_GM_UNIT_ABILITIES = 6;
const selectedEnemyAttrs = [
// Base attrs
@@ -3312,6 +3608,7 @@ const selectedEnemyAttrs = [
["_gmunitwill", "selectedenemywill"],
["_gmunitdodge", "selectedenemydodge"],
["_gmunitnotes", "selectedenemynotes"],
// Attack 0
["_gmunitatk0_id", "selectedenemyatk0_id"],
["_gmunitatkname", "selectedenemyatkname"],
@@ -3417,6 +3714,27 @@ const selectedEnemyAttrs = [
["_gmunitabl2cooldown", "selectedenemyabl2cooldown"],
["_gmunitabl2charges", "selectedenemyabl2charges"],
["_gmunitabl2effect", "selectedenemyabl2effect"],
// Ability 3
["_gmunitabl3_id", "selectedenemyabl3_id"],
["_gmunitabl3name", "selectedenemyabl3name"],
["_gmunitabl3activation", "selectedenemyabl3activation"],
["_gmunitabl3cooldown", "selectedenemyabl3cooldown"],
["_gmunitabl3charges", "selectedenemyabl3charges"],
["_gmunitabl3effect", "selectedenemyabl3effect"],
// Ability 4
["_gmunitabl4_id", "selectedenemyabl4_id"],
["_gmunitabl4name", "selectedenemyabl4name"],
["_gmunitabl4activation", "selectedenemyabl4activation"],
["_gmunitabl4cooldown", "selectedenemyabl4cooldown"],
["_gmunitabl4charges", "selectedenemyabl4charges"],
["_gmunitabl4effect", "selectedenemyabl4effect"],
// Ability 5
["_gmunitabl5_id", "selectedenemyabl5_id"],
["_gmunitabl5name", "selectedenemyabl5name"],
["_gmunitabl5activation", "selectedenemyabl5activation"],
["_gmunitabl5cooldown", "selectedenemyabl5cooldown"],
["_gmunitabl5charges", "selectedenemyabl5charges"],
["_gmunitabl5effect", "selectedenemyabl5effect"],
// Item 0
["_gmunititem0_id", "selectedenemyitem0_id"],
@@ -3441,32 +3759,10 @@ function SelectUnit(unitId, force) {
if (!force && selectedenemyid == unitId) {
return;
}
console.log("selectedenemyid: " + selectedenemyid);
//console.log("selectedenemyid: " + selectedenemyid);
let attrs = [
["_gmunitwill", "gmwatkwill"],
["_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"]
// TODO ACTUALLY PULL ALL DATA
["_gmunitdodge", "gmdodgedice"]
];
attrGetters = [];
attrs.forEach(attrPair => {
@@ -3565,18 +3861,17 @@ function RemoveSelectedUnitGrenadeAttack(index) {
return;
}
var indexValue = index == 0 ? "" : index;
setAttrs({
[`selectedenemygrenadeatk${index}_id`]: "",
[`selectedenemygrenadeatk${indexValue}name`]: "",
[`selectedenemygrenadeatk${indexValue}charges`]: 0,
[`selectedenemygrenadeatk${indexValue}range`]: "Short",
[`selectedenemygrenadeatk${indexValue}radius`]: "0.0",
[`selectedenemygrenadeatk${indexValue}damage`]: "0",
[`selectedenemygrenadeatk${indexValue}critdice`]: 0,
[`selectedenemygrenadeatk${indexValue}critdmg`]: 0,
[`selectedenemygrenadeatk${indexValue}breaking`]: 0,
[`selectedenemygrenadeatk${indexValue}effect`]: ""
[`selectedenemygrenadeatk${index}name`]: "",
[`selectedenemygrenadeatk${index}charges`]: 0,
[`selectedenemygrenadeatk${index}range`]: "Short",
[`selectedenemygrenadeatk${index}radius`]: "0.0",
[`selectedenemygrenadeatk${index}damage`]: "0",
[`selectedenemygrenadeatk${index}critdice`]: 0,
[`selectedenemygrenadeatk${index}critdmg`]: 0,
[`selectedenemygrenadeatk${index}breaking`]: 0,
[`selectedenemygrenadeatk${index}effect`]: ""
});
}
@@ -3585,23 +3880,22 @@ function AddSelectedUnitGrenadeAttack(index) {
return;
}
var indexValue = index == 0 ? "" : index;
setAttrs({
[`selectedenemygrenadeatk${index}_id`]: "active",
[`selectedenemygrenadeatk${indexValue}name`]: "",
[`selectedenemygrenadeatk${indexValue}charges`]: 0,
[`selectedenemygrenadeatk${indexValue}range`]: "Short",
[`selectedenemygrenadeatk${indexValue}radius`]: "0.0",
[`selectedenemygrenadeatk${indexValue}damage`]: "0",
[`selectedenemygrenadeatk${indexValue}critdice`]: 0,
[`selectedenemygrenadeatk${indexValue}critdmg`]: 0,
[`selectedenemygrenadeatk${indexValue}breaking`]: 0,
[`selectedenemygrenadeatk${indexValue}effect`]: ""
[`selectedenemygrenadeatk${index}name`]: "",
[`selectedenemygrenadeatk${index}charges`]: 0,
[`selectedenemygrenadeatk${index}range`]: "Short",
[`selectedenemygrenadeatk${index}radius`]: "0.0",
[`selectedenemygrenadeatk${index}damage`]: "0",
[`selectedenemygrenadeatk${index}critdice`]: 0,
[`selectedenemygrenadeatk${index}critdmg`]: 0,
[`selectedenemygrenadeatk${index}breaking`]: 0,
[`selectedenemygrenadeatk${index}effect`]: ""
});
}
function RemoveSelectedUnitAbility(index, baseAttrName) {
if (index < 0 || index >= MAX_GM_UNIT_ATKS) {
function RemoveSelectedUnitAbility(index, baseAttrName, maxEntries) {
if (index < 0 || index >= maxEntries) {
return;
}
@@ -3616,8 +3910,8 @@ function RemoveSelectedUnitAbility(index, baseAttrName) {
});
}
function AddSelectedUnitAbility(index, baseAttrName) {
if (index < 0 || index >= MAX_GM_UNIT_ATKS) {
function AddSelectedUnitAbility(index, baseAttrName, maxEntries) {
if (index < 0 || index >= maxEntries) {
return;
}
@@ -3682,7 +3976,10 @@ const ENEMY_WILL_ATK_ATTR = [
const ENEMY_ABILITY_ATTR = [
"selectedenemyabl0_id",
"selectedenemyabl1_id",
"selectedenemyabl2_id"
"selectedenemyabl2_id",
"selectedenemyabl3_id",
"selectedenemyabl4_id",
"selectedenemyabl5_id"
];
const ENEMY_ITEM_ATTR = [
@@ -3775,8 +4072,8 @@ on("clicked:addgmunitwillatk", function() {
return;
}
let nextAbilityIndex = highestAbilityIndex + 1;
console.log("AddSelectedUnitAbility:" + nextAbilityIndex);
AddSelectedUnitAbility(nextAbilityIndex, "selectedenemywillatk");
//console.log("AddSelectedUnitAbility:" + nextAbilityIndex);
AddSelectedUnitAbility(nextAbilityIndex, "selectedenemywillatk", MAX_GM_UNIT_ATKS);
});
});
@@ -3793,34 +4090,34 @@ on("clicked:removegmunitwillatk", function() {
if (highestAbilityIndex == -1) {
return;
}
console.log("RemoveSelectedUnitAbility:" + highestAbilityIndex);
RemoveSelectedUnitAbility(highestAbilityIndex, "selectedenemywillatk");
//console.log("RemoveSelectedUnitAbility:" + highestAbilityIndex);
RemoveSelectedUnitAbility(highestAbilityIndex, "selectedenemywillatk", MAX_GM_UNIT_ATKS);
});
});
on("clicked:addgmunitabl", function() {
getAttrs(ENEMY_ABILITY_ATTR, function(values) {
let highestAbilityIndex = -1;
for(let i = 0; i < MAX_GM_UNIT_ATKS; ++i) {
for(let i = 0; i < MAX_GM_UNIT_ABILITIES; ++i) {
var attrName = ENEMY_ABILITY_ATTR[i];
var attrValue = values[attrName]||"";
if (attrValue != "") {
highestAbilityIndex = i;
}
}
if (highestAbilityIndex == (MAX_GM_UNIT_ATKS - 1)) {
if (highestAbilityIndex == (MAX_GM_UNIT_ABILITIES - 1)) {
return;
}
let nextAbilityIndex = highestAbilityIndex + 1;
console.log("AddSelectedUnitAbility:" + nextAbilityIndex);
AddSelectedUnitAbility(nextAbilityIndex, "selectedenemyabl");
//console.log("AddSelectedUnitAbility:" + nextAbilityIndex);
AddSelectedUnitAbility(nextAbilityIndex, "selectedenemyabl", MAX_GM_UNIT_ABILITIES);
});
});
on("clicked:removegmunitabl", function() {
getAttrs(ENEMY_ABILITY_ATTR, function(values) {
let highestAbilityIndex = -1;
for(let i = 0; i < MAX_GM_UNIT_ATKS; ++i) {
for(let i = 0; i < MAX_GM_UNIT_ABILITIES; ++i) {
var attrName = ENEMY_ABILITY_ATTR[i];
var attrValue = values[attrName]||"";
if (attrValue != "") {
@@ -3830,8 +4127,8 @@ on("clicked:removegmunitabl", function() {
if (highestAbilityIndex == -1) {
return;
}
console.log("RemoveSelectedUnitAbility:" + highestAbilityIndex);
RemoveSelectedUnitAbility(highestAbilityIndex, "selectedenemyabl");
//console.log("RemoveSelectedUnitAbility:" + highestAbilityIndex);
RemoveSelectedUnitAbility(highestAbilityIndex, "selectedenemyabl", MAX_GM_UNIT_ABILITIES);
});
});
@@ -3849,8 +4146,8 @@ on("clicked:addgmunititem", function() {
return;
}
let nextAbilityIndex = highestAbilityIndex + 1;
console.log("AddSelectedUnitAbility:" + nextAbilityIndex);
AddSelectedUnitAbility(nextAbilityIndex, "selectedenemyitem");
//console.log("AddSelectedUnitAbility:" + nextAbilityIndex);
AddSelectedUnitAbility(nextAbilityIndex, "selectedenemyitem", MAX_GM_UNIT_ATKS);
});
});
@@ -3867,8 +4164,8 @@ on("clicked:removegmunititem", function() {
if (highestAbilityIndex == -1) {
return;
}
console.log("RemoveSelectedUnitAbility:" + highestAbilityIndex);
RemoveSelectedUnitAbility(highestAbilityIndex, "selectedenemyitem");
//console.log("RemoveSelectedUnitAbility:" + highestAbilityIndex);
RemoveSelectedUnitAbility(highestAbilityIndex, "selectedenemyitem", MAX_GM_UNIT_ATKS);
});
});
@@ -4215,7 +4512,7 @@ on("clicked:startcharactermancerfromsheet", function() {
on("mancerfinish:x", function(eventInfo) {
let data = eventInfo.data;
console.log(data);
//console.log(data);
let output = {};
let xclass = data.classx.values.classx || "";
@@ -4764,7 +5061,7 @@ on("mancerroll:trinket", function(eventInfo) {
let rerollCount = 0;
while (inventory.includes(newTrinket)) {
if (rerollCount >= 36) {
console.log("All!!!");
//console.log("All!!!");
break;
}
@@ -4776,7 +5073,7 @@ on("mancerroll:trinket", function(eventInfo) {
roll2++;
}
console.log("Duplicate! Next: " + roll1 + ", " + roll2);
//console.log("Duplicate! Next: " + roll1 + ", " + roll2);
newTrinket = trinkets[roll1][roll2];
rerollCount++;
@@ -4826,7 +5123,7 @@ function LogAllPropsRecursive(value, indent) {
var propValue;
for(var propName in value) {
propValue = value[propName];
console.log(indent + propName + ": " + propValue);
//console.log(indent + propName + ": " + propValue);
//LogAllPropsRecursive(propValue, indent + " ");
}
}