mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
2553 lines
138 KiB
HTML
2553 lines
138 KiB
HTML
<input type="text" name="attr_setupDone" value="0" style="display:none"/>
|
||
|
||
<input type="radio" name="attr_tab1" class="sheet-tab sheet-tab1" value="1" title="Page 1" checked="checked" /><span title="Page 1"></span>
|
||
<input type="radio" name="attr_tab1" class="sheet-tab sheet-tab2" value="2" title="Page 2" /><span title="Page 2"></span>
|
||
<input type="radio" name="attr_tab1" class="sheet-tab sheet-tab3" value="3" title="Page 3" /><span title="Page 3"></span>
|
||
<div class="sheet-tab-content sheet-tab1"><!--- Tab 1 start -->
|
||
<!-- <div class="sheet-cdiv">
|
||
<input class="sheet-HideConfig" type="checkbox" checked="checked" name="attr_is_config"><span class="sheet-is-config"><span style="font-family: "pictos"">y</span></span>
|
||
<div class="sheet-config" style="border-style: dotted ; border-color: gray ; padding: 5px ; background-color: white ; background-image: none">
|
||
|
||
</div>
|
||
</div>-->
|
||
|
||
<div class="wrapper1">
|
||
<div class="wrapper1-col1">
|
||
<div class="wrapper2">
|
||
<div class="wrapper2-col1-row1">
|
||
<div class="details-label">Character Name:</div>
|
||
</div>
|
||
<div class="wrapper2-col1-row2">
|
||
<div class="details-label">Role:</div>
|
||
</div>
|
||
<div class="wrapper2-col1-row3">
|
||
<div class="details-label">Specialization:</div>
|
||
</div>
|
||
<div class="wrapper2-col1-row4">
|
||
<div class="details-label">Profession:</div>
|
||
</div>
|
||
<div class="wrapper2-col2-row1">
|
||
<input type="text" class="text_input header_input" name="attr_character_name">
|
||
</div>
|
||
<div class="wrapper2-col2-row2">
|
||
<input type="text" class="text_input header_input" name="attr_role">
|
||
</div>
|
||
<div class="wrapper2-col2-row3">
|
||
<input type="text" class="text_input header_input" name="attr_specialiization">
|
||
</div>
|
||
<div class="wrapper2-col2-row4">
|
||
<input type="text" class="text_input header_input" name="attr_profession">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="wrapper1-col2">
|
||
<div class="wrapper2">
|
||
<div class="wrapper2-col1-row1">
|
||
<div class="details-label">Height:</div>
|
||
</div>
|
||
<div class="wrapper2-col1-row2">
|
||
<div class="details-label">Weight:</div>
|
||
</div>
|
||
<div class="wrapper2-col1-row3">
|
||
<div class="details-label">Eyes:</div>
|
||
</div>
|
||
<div class="wrapper2-col1-row4">
|
||
<div class="details-label">Hair:</div>
|
||
</div>
|
||
<div class="wrapper2-col2-row1">
|
||
<input type="text" class="text_input header_input" name="attr_height">
|
||
</div>
|
||
<div class="wrapper2-col2-row2">
|
||
<input type="text" class="text_input header_input" name="attr_weight">
|
||
</div>
|
||
<div class="wrapper2-col2-row3">
|
||
<input type="text" class="text_input header_input" name="attr_eyes">
|
||
</div>
|
||
<div class="wrapper2-col2-row4">
|
||
<input type="text" class="text_input header_input" name="attr_hair">
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="wrapper1-col3">
|
||
<div class="wrapper2">
|
||
<div class="wrapper2-col1-row1">
|
||
<div class="details-label">Experience:</div>
|
||
</div>
|
||
<div class="wrapper2-col1-row2">
|
||
<div class="details-label">Level:</div>
|
||
</div>
|
||
<div class="wrapper2-col1-row3">
|
||
<div class="details-label">People:</div>
|
||
</div>
|
||
<div class="wrapper2-col1-row4">
|
||
<div class="details-label">Class:</div>
|
||
</div>
|
||
<div class="wrapper2-col2-row1">
|
||
<input type="text" class="text_input header_input" name="attr_xp">
|
||
</div>
|
||
<div class="wrapper2-col2-row2">
|
||
<input type="text" class="text_input header_input" name="attr_level" value=1>
|
||
</div>
|
||
<div class="wrapper2-col2-row3">
|
||
<input type="text" class="text_input header_input" name="attr_race">
|
||
</div>
|
||
<div class="wrapper2-col2-row4">
|
||
<input type="text" class="text_input header_input" name="attr_class">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<br>
|
||
<div>
|
||
<div class="CndWrap" >
|
||
<span class="condition" name="attr_condition"></span>
|
||
</div>
|
||
<input name="attr_condition" style="display:none">
|
||
</div>
|
||
|
||
<div class="attribWrapper" >
|
||
<div class="attributes attribWrapper-col1" style="border: 1px solid black">
|
||
<div class="sectionHeader">Attributes</div>
|
||
<div style="display:inline-block;padding:5px 0 8px 8px;">
|
||
<div style="display:inline-block;">
|
||
<div class="lineheight1 details-label">Physique (PE):</div>
|
||
<div class="lineheight1 details-label">Speed (SD):</div>
|
||
<div class="lineheight1 details-label">Will (WL):</div>
|
||
<div class="lineheight1 details-label">Focus (FC):</div>
|
||
</div>
|
||
<div style="display:inline-block;">
|
||
<div style="display:inline-block;" >
|
||
<div class="lineheight1" >
|
||
<input type="text" class="num_valuesout" value="3" name="attr_peDice"><span> d6+</span>
|
||
<input type="text" class="num_valuesout" Value="0" readonly="readonly" style=background:none; name="attr_peMod" title="Current">
|
||
<button type="roll" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=Physique}} {{roll=[[((@{peDice}@{adDice})d6@{klkh}@{peDice})+(@{peMod})]]}} "> </button>
|
||
<!--<input type="text" style="grid-column:5;width:95%;text-align:center;vertical-align:bottom;" value="0" class="text_input" name="attr_maxRank"> <!--<input type="text" style="grid-column:5;width:95%;text-align:center;vertical-align:bottom;" class="text_input" name="attr_type">-->
|
||
<select style="grid-column:3;width:120px;text-align:center;" name="attr_PEcomp" id="PEcomp">
|
||
<option>Cursed</option>
|
||
<option>Flawed</option>
|
||
<option selected>Average</option>
|
||
<option>Trained</option>
|
||
<option>Exceptional</option>
|
||
<option>Master</option>
|
||
<option>Legendary</option>
|
||
</select>
|
||
</div>
|
||
<div class="lineheight1" >
|
||
<input type="text" class="num_valuesout" value="3" style=background:none; name="attr_sdDice" title="Current"><span> d6+</span>
|
||
<input type="text" class="num_valuesout" Value="0" style=background:none; readonly="readonly" name="attr_sdMod">
|
||
<button type="roll" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=Speed}} {{roll=[[((@{sdDice}@{adDice})d6@{klkh}@{sdDice})+(@{sdMod})]]}} "></button>
|
||
<select style="grid-column:3;width:120px;text-align:center;" name="attr_SDcomp" id="SDcomp">
|
||
<option>Cursed</option>
|
||
<option>Flawed</option>
|
||
<option selected>Average</option>
|
||
<option>Trained</option>
|
||
<option>Exceptional</option>
|
||
<option>Master</option>
|
||
<option>Legendary</option>
|
||
</select>
|
||
</div>
|
||
<div class="lineheight1" >
|
||
<input type="text" class="num_valuesout" value="3" style=background:none; name="attr_wlDice" title="Current"><span> d6+</span>
|
||
<input type="text" class="num_valuesout" Value="0" style=background:none; readonly="readonly" name="attr_wlMod">
|
||
<button type="roll" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=Will}} {{roll=[[((@{wlDice}@{adDice})d6@{klkh}@{wlDice})+(@{wlMod})]]}} "></button>
|
||
<select style="grid-column:3;width:120px;text-align:center;" name="attr_WLcomp" id="WLcomp">
|
||
<option>Cursed</option>
|
||
<option>Flawed</option>
|
||
<option selected>Average</option>
|
||
<option>Trained</option>
|
||
<option>Exceptional</option>
|
||
<option>Master</option>
|
||
<option>Legendary</option>
|
||
</select>
|
||
</div>
|
||
<div class="lineheight1" >
|
||
<input type="text" class="num_valuesout" value="3" style=background:none; name="attr_pwDice" title="Current"><span> d6+</span>
|
||
<input type="text" class="num_valuesout" Value="0" style=background:none; readonly="readonly" name="attr_pwMod">
|
||
<button type="roll" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=Focus}} {{roll=[[((@{pwDice}@{adDice})d6@{klkh}@{pwDice})+(@{pwMod})]]}} "></button>
|
||
<select style="grid-column:3;width:120px;text-align:center;" name="attr_PWcomp" id="PWcomp">
|
||
<option>Cursed</option>
|
||
<option>Flawed</option>
|
||
<option selected>Average</option>
|
||
<option>Trained</option>
|
||
<option>Exceptional</option>
|
||
<option>Master</option>
|
||
<option>Legendary</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="attribWrapper" >
|
||
<div class="attributes attribWrapper-col2" style="border: 1px solid black">
|
||
<div class="sectionHeader">Derived Attributes</div>
|
||
<div style="display:inline-block;padding:5px 0 7px 8px;">
|
||
<div class="lineheight1" >
|
||
<div class="details-label">Wound Threshold(WT):</div>
|
||
</div>
|
||
|
||
<div class="lineheight1" >
|
||
<div class="details-label">Move Mod:</div>
|
||
</div>
|
||
|
||
<div class="lineheight1" >
|
||
<div class="details-label">Batter Threshold(BT):</div>
|
||
</div>
|
||
<div class="lineheight1" >
|
||
<div class="details-label">Power: <input type="text" class="num_values" value="0" name="attr_ppCur">/</div>
|
||
</div>
|
||
</div>
|
||
<div style="display:inline-block;">
|
||
<div style="display:inline-block;">
|
||
<div class="lineheight1" >
|
||
<input type="text" class="num_valuesout" style=background:none; readonly="readonly" value="3" name="attr_healthtotal"> <input type="text" readonly="readonly" class="num_values" value="3" style="display:none" name="attr_healthbase"></span>
|
||
</div>
|
||
<div class="lineheight1" >
|
||
<input type="text" class="num_valuesout" value="0" style=background:none; readonly="readonly" name="attr_move"> </span>
|
||
<input type="text" class="num_valuesout" value="0" readonly="readonly" style="display:none" name="attr_basemove">
|
||
</div>
|
||
<div class="lineheight1" >
|
||
<input type="text" class="num_valuesout" value="6" style=background:none; readonly="readonly" name="attr_btMax">
|
||
<input type="text" class="num_valuesout" readonly="readonly" value="6" style="display:none" name="attr_btBase"></span>
|
||
|
||
</div>
|
||
<div class="lineheight1" >
|
||
<input type="text" class="num_valuesout" value="9" style=background:none; readonly="readonly" name="attr_ppMax">
|
||
<input type="text" style="display:none" class="num_values" value="0" style=background:none; readonly="readonly" name="attr_ppBase"></span>
|
||
</div>
|
||
</div>
|
||
<div style="display:inline-block;">
|
||
<div class="lineheight1" style="bold";>
|
||
Bonus:
|
||
</span><input type="text" class="num_values" value="0" name="attr_healthBonus"></span>
|
||
</div>
|
||
<div class="lineheight1" >
|
||
<span> Bonus: </span><input type="text" class="num_values" value="0" name="attr_moveBonus">
|
||
</div>
|
||
|
||
<div class="lineheight1" >
|
||
<span> Bonus: </span><input type="text" class="num_values" value="0" name="attr_btBonus">
|
||
</div>
|
||
<div class="lineheight1" >
|
||
<span> Bonus: </span><input type="text" class="num_values" value="0" name="attr_ppBonus">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="attribWrapper2" >
|
||
<div class="col1">
|
||
<div class="Wrapper5 brdT" >
|
||
<div class="attribHeader2 col1 row1 brdB brdR">Battering Points</div>
|
||
<div class="attribHeader2 col1 row2 brdB brdR">Defense</div>
|
||
<div class="attribHeader2 col1 row3 brdB brdR">Evasion</div>
|
||
<div class="attribHeader2 col1 row4 brdB brdR">Fortitude</div>
|
||
<div class="attribHeader2 col1 row5 brdB brdR">Resolve</div>
|
||
|
||
<div class="col2 row1 brdB brdR" style="padding-left:8px; display:flex;" >
|
||
|
||
<div>
|
||
<span class="btPts"><span class="btValue">0</span><br><input type="radio" value="0" checked="checked" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">1</span><br><input type="radio" value="1" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">2</span><br><input type="radio" value="2" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">3</span><br><input type="radio" value="3" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">4</span><br><input type="radio" value="4" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">5</span><br><input type="radio" value="5" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">6</span><br><input type="radio" value="6" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">7</span><br><input type="radio" value="7" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">8</span><br><input type="radio" value="8" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">9</span><br><input type="radio" value="9" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">10</span><br><input type="radio" value="10" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">11</span><br><input type="radio" value="11" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">12</span><br><input type="radio" value="12" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">13</span><br><input type="radio" value="13" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">14</span><br><input type="radio" value="14" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">15</span><br><input type="radio" value="15" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">16</span><br><input type="radio" value="16" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">17</span><br><input type="radio" value="17" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">18</span><br><input type="radio" value="18" name="attr_btPts" /></span>
|
||
<span class="btPts"><span class="btValue">19</span><br><input type="radio" value="19" name="attr_btPts" /></span>
|
||
</div>
|
||
</div>
|
||
<div style="padding-left:2px;padding-top:2px" class="lineheight1 col2 row2 brdB brdR">
|
||
|
||
<input type="text" class="num_valuesout defNum" value="0" style=background:none; readonly="readonly" name="attr_defTotal">
|
||
<input type="text" class="num_values defNum" value="0" style="display:none" readonly="readonly" title="Armor" name="attr_defArmor">
|
||
<input type="text" style="display:none" class="num_values defNum" value="0" title="Weapon" name="attr_defWeapon">
|
||
<input type="text" class="num_values" readonly="readonly" style="display:none" value=0 name=attr_pemod><span><input type="text" class="num_values" readonly="readonly" style="display:none" value=0 name=attr_sdmod> Bonus: <input type="text" class="num_values defNum" value="0" name="attr_defBonus">
|
||
</div>
|
||
<div style="padding-left:2px;padding-top:1px" class="lineheight1 col2 row3 brdB brdR">
|
||
|
||
<input type="text" class="num_valuesout" value="10" style=background:none; readonly="readonly" name="attr_target">
|
||
<!--!<input type="text" class="num_values" value="0" style="visibility:hidden" title="Base" name="attr_targetBase">-->
|
||
<span> Bonus: </span><input type="text" class="num_values" value="0" name="attr_targetBonus">
|
||
</div>
|
||
<div style="padding-left:2px;padding-top:1px" class="lineheight1 col2 row4 brdB brdR">
|
||
|
||
<input type="text" class="num_valuesout" value="13" style=background:none; readonly="readonly" name="attr_fortitude">
|
||
<span> Bonus: </span><input type="text" class="num_values" value="0" title="Fortitude Modifier" name="attr_fortitudeMod">
|
||
|
||
</div>
|
||
<div style="padding-left:2px;padding-top:1px" class="lineheight1 col2 row5 brdB brdR">
|
||
|
||
<input type="text" class="num_valuesout" value="13" style=background:none; readonly="readonly" name="attr_resolve">
|
||
<span> Bonus: </span><input type="text" class="num_values" value="0" title="Resolve Modifier" name="attr_resolveMod">
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="col2">
|
||
<div style="text-align:center;border:1px solid black;">
|
||
<div class="sectionHeader">Wounds</div>
|
||
<div>
|
||
|
||
<span class="btPts"><span class="btValue">0</span><br><input type="radio" value="0" checked="checked" name="attr_wounds" /></span>
|
||
<span class="btPts"><span class="btValue">1</span><br><input type="radio" value="1" name="attr_wounds" /></span>
|
||
<span class="btPts"><span class="btValue">2</span><br><input type="radio" value="2" name="attr_wounds" /></span>
|
||
<span class="btPts"><span class="btValue">3</span><br><input type="radio" value="3" name="attr_wounds" /></span>
|
||
<span class="btPts"><span class="btValue">4</span><br><input type="radio" value="4" name="attr_wounds" /></span>
|
||
<span class="btPts"><span class="btValue">5</span><br><input type="radio" value="5" name="attr_wounds" /></span>
|
||
<span class="btPts"><span class="btValue">6</span><br><input type="radio" value="6" name="attr_wounds" /></span>
|
||
</div>
|
||
<div style="text-align:center;vertical-align:bottom;height:43px;">
|
||
<div class="sectionHeader">Armor</div>
|
||
<input type="hidden" name="attr_armorVal" value="0" ><input type="hidden" name="attr_armorcomp" value="Master" ><input type="hidden" name="attr_armorMod" value="0" >
|
||
<select name="attr_armorSuit" style="width:65%;text-align:center;vertical-align:center;" class="lineheight1" >
|
||
<option value="0">None</option>
|
||
<option selected value="1">Clothes</option>
|
||
<option value="2">Runeweave Cloth</option>
|
||
<option value="3">Spell Stitched Cloth</option>
|
||
<option value="4">Padded/Gambeson</option>
|
||
<option value="5">Leather</option>
|
||
<option value="6">Studded Leather</option>
|
||
<option value="7">Corrupted Studded Leather</option>
|
||
<option value="8">Sanas Wood Armor</option>
|
||
<option value="9">Chainmail</option>
|
||
<option value="10">Splint Mail</option>
|
||
<option value="11">Scale Mail</option>
|
||
<option value="12">Steel Scale</option>
|
||
<option value="13">D'Wester Steel Scale</option>
|
||
<option value="14">Half Plate</option>
|
||
<option value="15">Full Plate</option>
|
||
<option value="16">Advanced Plate </option>
|
||
<option value="17">Steel Advanced Plate </option>
|
||
<option value="18">Advanced D'Wester Steel</option>
|
||
<option value="19">Custom 13</option>
|
||
<option value="20">Custom 14</option>
|
||
<option value="21">Custom 15</option>
|
||
<option value="22">Custom 16</option>
|
||
<option value="23">Custom 17</option>
|
||
<option value="24">Natural Armor (Master)</option>
|
||
</select> <span style="vertical-align:center;"> Bonus: </span><input type="text" class="num_values" Value="0" style="vertical-align:center;" name="attr_armorBonus" title="Bonus">
|
||
</div>
|
||
<div style="text-align:center;">
|
||
<div class="sectionHeader">Initiative (Speed + Will)</div>
|
||
<button type="roll" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=Initiative}} {{roll=[[((3@{adDice})d6@{klkh}3)+(@{wlMod}+@{sdMod}+@{iniBonus})&{tracker:+}]]}} "></button> <input type="text" class="num_valuesout" readonly="readonly" value=0 name=attr_Initiative> Bonus: </span><input type="text" class="num_values" Value="0" name="attr_iniBonus" title="Bonus">
|
||
</div>
|
||
<div style="text-align:center;">
|
||
<div class="sectionHeader">Senses (+Focus)</div>
|
||
Sight <input type="text" class="num_values" value="4" name="attr_sight">  Hearing<input type="text" class="num_values" value="0" name="attr_sound">  Scent <input type="text" class="num_values" value="-5" name="attr_scent">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="advantagetoggle" style="text-align:center; margin-top:-50px;">
|
||
<span>
|
||
<!--<input type="radio" class="toggle-left" name="attr_advantagetoggle" checked="checked" value="norm"><span >NORMAL</span>-->
|
||
<input type="radio" class="toggle-center" name="attr_advantagetoggle" checked="checked" value="adv"><span >ADVANTAGE</span>
|
||
<input type="text" class="num_values advDisAdvDice" value="0" style="align:left;" name="attr_advDisAdvDice">
|
||
<input type="radio" class="toggle-right" name="attr_advantagetoggle" value="disadv"><span >DISADVANTAGE</span>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<!--hi there -->
|
||
|
||
<br>
|
||
<fieldset class="repeating_weapons">
|
||
<div class="wpnTable">
|
||
<div class="wpnHdrWpn sectionHeader">Weapon</div>
|
||
<div class="wpnHdrType sectionHeader">Type</div>
|
||
<div class="wpnHdrAttack sectionHeader">Attack</div>
|
||
<div class="wpnHdrRoll sectionHeader">Roll</div>
|
||
<div class="wpnHdrAP sectionHeader">AP</div>
|
||
<div class="wpnHdrDmg1 sectionHeader">Damage</div>
|
||
<div class="wpnHdrDmg2 sectionHeader">Roll</div>
|
||
<div class="wpnHdrTraits sectionHeader">Traits</div>
|
||
|
||
<div class="wpnName" style="Padding-top:2px">
|
||
<input type="text" class="text_input wpnNameText" name="attr_wpn_name" style="vertical-align:center;text-align:center">
|
||
</div>
|
||
<div class="wpnType" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;vertical-align:bottom;">
|
||
<select name="attr_wpnType" style="width:80%;height:90%;font-size:x-small;text-align:center;">
|
||
<option value="0">Weapon (+PE)</option>
|
||
<option value="1">Spell (+FC)</option>
|
||
<option value="2">Mechanical (-)</option>
|
||
</select>
|
||
</div>
|
||
<div class="wpnAttack" style="Padding-top:2px;border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;">
|
||
<input type="text" value="0" class="num_values" style="text-align:center;" name="attr_wpnSkllRnk">
|
||
|
||
</div>
|
||
<div class="wpnRoll" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;vertical-align:center">
|
||
<button type="roll" class="sheet-d6-dice" style="text-align:center;" value="&{template:Roll} {{name=@{character_name}}} {{skill=@{wpn_name} Attack}} {{roll=[[((3@{adDice})d6@{klkh}3)+(@{wpnSkllRnk})]]}} {{AP=[[@{wpnAP}&{tracker:-}]]}}"></button>
|
||
</div>
|
||
<div class="wpnAP" style="Padding-top:2px">
|
||
<input type="text" class="num_values" name="attr_wpnAP">
|
||
</div>
|
||
<div class="wpnDmg1" style="Padding-top:2px">
|
||
<input type="text" class="num_values wpnText" name="attr_wpnDice">d+<input type="text" class="num_values" name="attr_wpnBonus">
|
||
</div>
|
||
<div class="wpnDmg2">
|
||
<button title="Damage" class="sheet-d6-dice" style="margin-left:1px;margin-right:1px;" type="roll" value="&{template:Roll} {{name=@{character_name}}} {{skill=@{wpn_name} Damage}} {{roll=[[(@{wpnDice}@{adDice})d6@{klkh}@{wpnDice}+@{wpndmgattr}+@{wpnBonus}]]}}"></button>
|
||
</div>
|
||
<div class="wpnTraits borderRight" style="Padding-top:2px">
|
||
<input type="text" class="text_input wpnTypeText" style="margin-left:1px;margin-right:1px;" name="attr_wpnTraits">
|
||
</div>
|
||
<div class="PAwpnName" style="Padding-top:4px" >
|
||
Heavy Attack
|
||
</div>
|
||
<div class="PAwpnType" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;vertical-align:bottom;"> <input type="text" class="num_values" value="0" style="visibility:hidden" title="apndmgattr" name="attr_wpndmgattr">
|
||
</div>
|
||
<div class="PAwpnAttack" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;Padding-top:3px">
|
||
↓
|
||
</div>
|
||
|
||
<div class="PAwpnRoll" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;">
|
||
<button type="roll" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=@{wpn_name} Heavy Attack}} {{roll=[[((3@{disaddice})d6@{disklkh}3)+@{wpnSkllRnk}]]}} {{AP=[[@{PAwpnAP}&{tracker:-}]]}}"></button>
|
||
</div>
|
||
<div class="PAwpnAP" style="Padding-top:3px">
|
||
<input type="text" class="num_valuesout" readonly="readonly" value="0" name="attr_PAwpnAP">
|
||
</div>
|
||
<div class="PAwpnDmg1" style="Padding-top:3px">
|
||
<div>
|
||
<input type="text" class="num_valuesout" readonly="readonly" name="attr_PAwpnDice">d+<input type="text" class="num_valuesout" readonly="readonly" value=0 name=attr_wpnbonus>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="PAwpnDmg2">
|
||
<button title="Damage" class="sheet-d6-dice" style="margin-left:1px;margin-right:1px;" type="roll" value="&{template:Roll} {{name=@{character_name}}} {{skill=@{wpn_name} Heavy Attack Damage}} {{roll=[[(@{PAwpnDice}@{adDice})d6@{klkh}@{PAwpnDice}+@{wpnBonus}+@{wpndmgattr}]]}} "></button>
|
||
</div>
|
||
|
||
<div class="PAwpnTraits borderRight" style="Padding-top:2px">
|
||
<input type="text" class="text_input wpnTypeText" style="margin-left:1px;margin-right:1px;" name="attr_PAwpnTraits">
|
||
</div>
|
||
|
||
<div class="HAwpnName" style="Padding-top:4px" >
|
||
Harassing Attack
|
||
</div>
|
||
<div class="HAwpnType" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;vertical-align:bottom;">
|
||
</div>
|
||
<div class="HAwpnAttack" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;">
|
||
|
||
</div>
|
||
<div class="HAwpnRoll" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;">
|
||
<button type="roll" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=@{wpn_name} Harassing Attack}} {{roll=[[((3@{adDice})d6@{klkh}3)+(@{wpnSkllRnk})]]}} {{AP=[[@{HAwpnAP}&{tracker:-}]]}}"></button>
|
||
</div>
|
||
<div class="HAwpnAP" style="Padding-top:3px">
|
||
<input type="text" class="num_valuesout" readonly="readonly" value="0" name="attr_HAwpnAP">
|
||
</div>
|
||
<div class="HAwpnDmg1" style="Padding-top:3px">
|
||
<input type="text" class="num_valuesout" readonly="readonly" name="attr_wpnDice">d+<input type="text" class="num_valuesout" readonly="readonly" value=0 name=attr_wpnbonus>↓
|
||
</div>
|
||
<div class="HAwpnDmg2" >
|
||
<button title="Damage" class="sheet-d6-dice" style="margin-left:1px;margin-right:1px;" type="roll" value="&{template:Roll} {{name=@{character_name}}} {{skill=@{wpn_name} Harassing Attack Damage}} {{roll=[[(@{wpnDice}@{disadDice})d6@{disklkh}@{wpnDice}+@{wpnBonus}+@{wpndmgattr}]]}}"></button>
|
||
</div>
|
||
<div class="HAwpnTraits borderRight" style="Padding-top:2px">
|
||
<input type="text" class="text_input wpnTypeText" style="margin-left:1px;margin-right:1px;" name="attr_HAwpnTraits">
|
||
</div>
|
||
|
||
<div class="PRwpnName" style="Padding-top:3px" >
|
||
Precise Attack
|
||
</div>
|
||
<div class="PRwpnType" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;vertical-align:bottom;">
|
||
</div>
|
||
<div class="PRwpnAttack" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;">
|
||
↑
|
||
</div>
|
||
<div class="PRwpnRoll" style="border-left: 1px solid black;border-bottom: 1px solid black;text-align:center;">
|
||
<button type="roll" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=@{wpn_name} Precise Attack}} {{roll=[[((3@{advaddice})d6@{advklkh}3)+(@{wpnSkllRnk})]]}} {{AP=[[@{PRwpnAP}&{tracker:-}]]}}"></button>
|
||
</div>
|
||
<div class="PRwpnAP" style="Padding-top:3px"><input type="text" class="num_valuesout" name="attr_PRwpnAP"> </div>
|
||
<div class="PRwpnDmg1" style="Padding-top:3px">
|
||
<div>
|
||
<input type="text" class="num_valuesout" readonly="readonly" name="attr_PRwpnDice">d+<input type="text" class="num_valuesout" readonly="readonly" value=0 name=attr_wpnbonus>
|
||
</div>
|
||
</div>
|
||
<div class="PRwpnDmg2">
|
||
<button title="Damage" class="sheet-d6-dice" style="margin-left:1px;margin-right:1px;" type="roll" value="&{template:Roll} {{name=@{character_name}}} {{skill=@{wpn_name} Precise Attack Damage}} {{roll=[[(@{wpnDice}@{adDice})d6@{klkh}@{wpnDice}+@{wpnBonus}+@{wpndmgattr}]]}}"></button>
|
||
</div>
|
||
<div class="PRwpnTraits borderRight" style="Padding-top:2px">
|
||
<input type="text" class="text_input wpnTypeText" style="margin-left:1px;margin-right:1px;" name="attr_PRwpnTraits">
|
||
</div>
|
||
|
||
</div>
|
||
<br>
|
||
</fieldset>
|
||
<br>
|
||
<div class="skillsValuesGrid">
|
||
<div class="col1" >
|
||
<div class="brdRLB">
|
||
<div class="skillsWrapper" border:1px solid black;>
|
||
<div class="sectionHeader" style="display:inline-block; width:100%;grid-column:1;">Skill</div>
|
||
<div class="sectionHeader" style="display:inline-block; width:100%;grid-column:2;">Bonus</div>
|
||
<!--<div class="sectionHeader" style="display:inline-block; width:100%;grid-column:4;" ></div>-->
|
||
<div class="sectionHeader" style="display:inline-block; width:100%;grid-column:3;">Competency</div>
|
||
</div>
|
||
<fieldset class="repeating_skills2">
|
||
<div class="skillsWrapper">
|
||
<input type="text" style="grid-column:1;width:100%;text-align:center;vertical-align:bottom;height:20px;margin-top:2px;" class="text_input" name="attr_skillName">
|
||
<span style="width:100%;text-align:center">
|
||
<!--<input type="text" style="grid-column:2;width:30%;text-align:center;vertical-align:bottom;" class="text_input" value="3" name="attr_dice">-->
|
||
<input type="text" style="grid-column:2;width:30%;text-align:center;vertical-align:center;margin-bottom:2px" class="num_valuesout" readonly="readonly" value="0" name="attr_rank">
|
||
<button type="roll" style="width 30px;font-size:10px" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=@{skillName}}} {{roll=[[((3@{adDice})d6@{klkh}3+@{rank})]]}} "></button>
|
||
</span>
|
||
<!--<input type="text" style="grid-column:3;width:95%;text-align:center;vertical-align:bottom;" value="0" class="text_input" name="attr_rank">-->
|
||
<!--<input type="text" style="grid-column:5;width:95%;text-align:center;vertical-align:bottom;" value="0" class="text_input" name="attr_maxRank"> <!--<input type="text" style="grid-column:5;width:95%;text-align:center;vertical-align:bottom;" class="text_input" name="attr_type">-->
|
||
<div class="lineheight2" >
|
||
<select style="grid-column:3;width:100%;text-align:center;vertical-align:bottom;height: 23px;font-size:x-small;" name="attr_skillcomp" id="skillcomp">
|
||
<option>Cursed</option>
|
||
<option>Flawed</option>
|
||
<option selected>Average</option>
|
||
<option>Trained</option>
|
||
<option>Exceptional</option>
|
||
<option>Master</option>
|
||
<option>Legendary</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
|
||
</fieldset>
|
||
</div>
|
||
<br>
|
||
|
||
<br>
|
||
|
||
|
||
|
||
</div>
|
||
<div class="col2" style="width: 98%;">
|
||
|
||
<div class="brdRLB">
|
||
<div>
|
||
<span class="sectionHeader" style="text-align:center;display:inline-block; width:100%;">Value Stack</span>
|
||
</div>
|
||
<div style="margin-top:1px;">
|
||
<fieldset class="repeating_values">
|
||
<div style="text-align:center;">
|
||
<input type="text" style="text-align:center;width:95%" class="text_input" name="attr_value">
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
|
||
<br>
|
||
<div class="brdRLB">
|
||
<div>
|
||
<span class="sectionHeader" style="text-align:center;display:inline-block; width:100%;">Survive (2 Power)</span>
|
||
</div>
|
||
<div style="text-align:center;border:"><button type="roll" class="sheet-d6-dice" value="&{template:Roll} {{name=@{character_name}}} {{skill=Survive}} {{roll=[[((1)d6!+@{SDMod}+@{dodgebonus})]]}} "></button>1d +
|
||
<span class="col2 row1" ><input type="text" class="num_valuesout" readonly="readonly" value=0 name=attr_sdmod>+<input type="text" class="num_values" value=0 name=attr_dodgebonus>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="brdRLB">
|
||
<div>
|
||
<span class="sectionHeader" style="text-align:center;display:inline-block; width:100%;">Currency</span>
|
||
</div>
|
||
<div class="moneyGrid" style="margin-top:1px;">
|
||
<span class="col1 row1 details-label2" >Copper</span>
|
||
<span class="col2 row1" >
|
||
<input type="text" class="text_input width99" name="attr_copper" />
|
||
</span>
|
||
<span class="col1 row2 details-label2" >Iron</span>
|
||
<span class="col2 row2" >
|
||
<input type="text" class="text_input width99" name="attr_iron" />
|
||
</span>
|
||
<span class="col1 row3 details-label2" >Silver</span>
|
||
<span class="col2 row3" >
|
||
<input type="text" class="text_input width99" name="attr_silver" />
|
||
</span>
|
||
<span class="col1 row4 details-label2">Gold</span>
|
||
<span class="col2 row4" >
|
||
<input type="text" class="text_input width99" name="attr_gold" />
|
||
</span>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<br>
|
||
<div class="brdRLB">
|
||
<div>
|
||
<span class="sectionHeader" style="text-align:center;display:inline-block; width:100%;">Equipment</span>
|
||
</div>
|
||
<div class="EquipGrid">
|
||
<div class="sectionHeader col1 width99" style="display:inline-block"></div>
|
||
<div class="sectionHeader col2 width99" style="display:inline-block">Item</div>
|
||
<div class="sectionHeader col3 width99" style="display:inline-block">Wt.</div>
|
||
</div>
|
||
<fieldset class="repeating_equipment">
|
||
<div class="EquipGrid">
|
||
<span class="col1 centerText"><input type="checkbox" class="text_input width99" style="text-align:center;" value="1" name="attr_carried" ></span>
|
||
<span class="col2 centerText"><input type="text" class="text_input width99 centerText" style="text-align:center;" name="attr_item" ></span>
|
||
<span class="col3 centerText"><input type="text" class="text_input width99 centerText" style="text-align:center;" value="0" name="attr_wt" ></span>
|
||
</div>
|
||
</fieldset>
|
||
|
||
<div class="wtTotGrid">
|
||
<div class="col1 width99 details-label" style="display:inline-block"></div>
|
||
<div class="col2 width99 details-label" style="display:inline-block">Carry Capacity: <input type="text" class="num_valuesout" style="width:40px;text-align:center;" value="0" name="attr_carrycapacity" /> Total:</div>
|
||
<div class="col3 width99" style="display:inline-block"><input type="text" class="text_input width99 centerText" style="text-align:center;" name="attr_carry_total" /></div>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="brdRLB">
|
||
<div>
|
||
<span class="sectionHeader" style="text-align:center;display:inline-block; width:100%;">Languages</span>
|
||
</div>
|
||
<div style="margin-top:1px;">
|
||
<fieldset class="repeating_languages">
|
||
<div style="text-align:center;">
|
||
<input type="text" style="text-align:center;width:95%" class="text_input" name="attr_language">
|
||
</div>
|
||
</fieldset>
|
||
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="brdRLB">
|
||
<div>
|
||
<span class="sectionHeader" style="text-align:center;display:inline-block; width:100%;">Reputation</span>
|
||
</div>
|
||
<div style="margin-top:1px;">
|
||
<fieldset class="repeating_reputation">
|
||
<div style="text-align:center;">
|
||
<input type="text" style="text-align:center;width:95%" class="text_input" name="attr_reputation">
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
|
||
<br>
|
||
<div class="brdRLB">
|
||
<div>
|
||
<span class="sectionHeader" style="text-align:center;display:inline-block; width:100%;">Resist/Vuln</span>
|
||
</div>
|
||
<div style="margin-top:1px;">
|
||
<fieldset class="repeating_resistvuln">
|
||
<div style="text-align:center;">
|
||
<input type="text" style="text-align:center;width:95%" class="text_input" name="attr_resistvuln">
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
<br>
|
||
<div class="brdRLB">
|
||
<div>
|
||
<span class="sectionHeader" style="text-align:center;display:inline-block; width:100%;">Fading</span>
|
||
</div>
|
||
<div style="margin-top:1px;">
|
||
<fieldset class="repeating_fading">
|
||
<div style="text-align:center;">
|
||
<input type="text" style="text-align:center;width:95%" class="text_input" name="attr_fading">
|
||
</div>
|
||
</fieldset>
|
||
</div>
|
||
</div>
|
||
|
||
<br>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<br>
|
||
<br>
|
||
<br>
|
||
|
||
</div>
|
||
<div class="sheet-tab-content sheet-tab2"><!--- Tab 2 start -->
|
||
|
||
<div class="brdRLB">
|
||
<div>
|
||
<span class="sectionHeader" style="text-align:center;display:inline-block; width:100%;">Abilities</span>
|
||
</div>
|
||
<div class="abilitiesGrid">
|
||
<div class="sectionHeader col1 width99" style="display:inline-block">Ability</div>
|
||
<div class="sectionHeader col2 width99" style="display:inline-block">Roll</div>
|
||
<div class="sectionHeader col3 width99" style="display:inline-block">AP</div>
|
||
<div class="sectionHeader col4 width99" style="display:inline-block">PW</div>
|
||
<div class="sectionHeader col5 width101" style="display:inline-block">Desc.</div>
|
||
</div>
|
||
<fieldset class="repeating_abilities">
|
||
|
||
<div class="abilitiesGrid">
|
||
<span class="col1 centerText"><input type="text" class="text_input text_input width99" name="attr_abilityname" ></span>
|
||
<span class="col2 centerText"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} uses @{abilityname} &{{AP=[[@{abilityap}&{tracker:-}]]}"></button></span>
|
||
<span class="col3 centerText"><input type="text" class="text_input width90 centerText" style="text-align:center;" value="0" name="attr_abilityap" ></span>
|
||
<span class="col4 centerText"><input type="text" class="text_input width90 centerText" style="text-align:center;" value="0" name="attr_abilitypp" ></span>
|
||
<span class="col5 centerText"><textarea type="text" style="width:90%;height:6em;font-size:xx-small;" name="attr_desc" ></textarea></span>
|
||
</div>
|
||
|
||
</fieldset>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="sheet-tab-content sheet-tab3 "><!--- Tab 3 start -->
|
||
<div class="actionstable" style="border:1px solid black;">
|
||
<table >
|
||
<thead>
|
||
<tr>
|
||
<th class="sectionHeader" style="width:18%">Action</th>
|
||
<th class="sectionHeader" style="width:7%">AP Cost</th>
|
||
<th class="sectionHeader" style="width:5%">Roll</th>
|
||
<th class="sectionHeader" style="width:52%">Short Description</th>
|
||
<th class="sectionHeader" style="width:18%">Traits</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Administer Inhalant" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Adminsiter Inhalant**}} {{roll=Action Points: 5
|
||
Traits: Provoking
|
||
You can administer an inhalant to another creature.}}" >Administer Inhalant</button></td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP administering an inhalant to another creture. (Provoking) &{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Administer an inhalant to another creature</td>
|
||
<td style="border:1px solid black;">Provoking</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Apply Poison" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Apply Poison**}} {{roll=Action Points: 4
|
||
Traits: Provoking
|
||
You can apply injury poison to a single melee weapon or 1 piece of ammunition. You may attempt an Alchemy check of 6, reducing the Action Point cost by 1 for each success beyond the first. On a failure, you accidentally cut yourself and are subjected to the ingestible version of the poison’s effects.}}" >Apply Poison</button></td>
|
||
<td style="border:1px solid black;text-align:center;">4</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 4 AP applying poison to a weapon or piece of ammunition. &{{AP=[[4&{tracker:-}]]}"></button>
|
||
<td>Apply poison to a weapon or ammunition</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Apply Poison" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Assist**}} {{roll=Action Points: 5
|
||
You can grant another creature advantage on a single roll during their next turn. There must be some logical way you could aid their actions, such as hoisting them up to help them climb or distracting an enemy to help them land an attack.}}" >Assist</button></td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP assisting another creature to grant it advantage on an action. &{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Grant another creature advantage</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Apply Poison" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Athletic Landing**}} {{roll=Action Points: 1 (Reaction)
|
||
Whenever you are falling you may take the Athletic Landing action to attempt an Athletics check of 6.Failure increases the falling damage, as if you had fallen 1 additional yard.For each success beyond the first, treat the fall as if it were 1 yard less.
|
||
If the falling damage does not batter you, you may land on your feet instead of prone. This does not prevent you from being knocked Prone from effects that specifically Prone you.}}" >Athletic Landing</button></td>
|
||
<td style="border:1px solid black;text-align:center;">1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 1 AP attempting an athletic landing. &{{AP=[[1&{tracker:-}]]}"></button>
|
||
<td>Reduce Falling Damage</td>
|
||
<td>Reaction</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Apply Poison" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Banish**}} {{roll=Action Points: 5
|
||
By chanting or reading off a series of arcane words, you can drive a spirit from this world. Make an attack using your Undead Lore against the Resolve of a Spirit within 10 yards. You gain one advantage on the attack for each of the spirit’s names that you invoke in the chant. Each success gives the spirit one Battering Point. A triple success banishes the spirit outright, destroying it forever.
|
||
You must be at least Trained in the Undead Lore skill to attempt the Banish action.}}" >Banish</button></td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP attempting to Banish a creature. &{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Undead Lore check to expel a spirit</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Blunted Strike" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Blunted Strike**}} {{roll= Action Points: Attack + 1 AP
|
||
Any weapon can deal Bludgeoning damage with decreased effect. Whenever you make a weapon attack you can declare it a Blunted Strike, using the handle, back end, or pommel to strike your enemy. The attack’s weapon damage type is changed to deal Bludgeoning, it costs 1 additional Action Point, and gains disadvantage on the attack roll.
|
||
To make a Blunted Strike with a Ranged weapon you must have a Blunted piece of ammunition. These cost the same price as regular ammunition.}}" >Blunted Strike</button></td>
|
||
<td style="border:1px solid black;text-align:center;">Attack</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} makes a Blunted Strike attack. &{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>Deal Bludgeoning damage with any weapon, and gain Unwieldy</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Called Shot" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Called Shot**}} {{roll=Action Points: Attack
|
||
Whenever you spend Action Points to make an attack against a single creature’s Evasion, you can make that attack into a called shot by declaring where on your target you wish to attack, prior to making any rolls.
|
||
Called Shots have additional effects but add a bonus to the target’s Evasion, making the attack more likely to miss. The bonus Evasion is always added on and unaffected by Battering Points.
|
||
For example, since head shots add 5 to a creature’s Evasion, and a creature cannot have an Evasion below 5, attacks against a creature’s head always require at least 10 (5+5) to succeed, and 20 to achieve a double success.
|
||
Each Called Shot option is mutually exclusive.
|
||
Arm, +2 Evasion. Whenever a creatures receives a Battering Point from an attack at its arm, it gains disadvantage on its next attack roll with that arm that round. This effect does not stack. If that arm is holding onto another creature, it gains disadvantage on its Will check to retain its hold.
|
||
If a creature’s arm is wounded, it gains disadvantage on all attack and damage rolls it makes with that arm until that wound is removed.
|
||
Head, +5 Evasion. After your damage is reduced by Defense, any remaining damage is doubled before checking for wounds. This does not apply to any damage that is checked against Fortitude such as Poison damage.
|
||
Leg, +2 Evasion. For every Battering Point inflicted to a creature’s leg its Movement Modifier is reduced by 1 until the end of its turn.
|
||
Whenever a creature suffers a Wound to a leg, it is Hampered, halving its movement speed until that Wound is removed.}}" >Called Shot</button></td>
|
||
|
||
<td style="border:1px solid black;text-align:center;">Attack</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} makes a called Shot attack. &{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>Target a specific part of an enemy for a specific effect</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Charge Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Charge Attack**}} {{roll=Action Points: Attack
|
||
Make a melee Heavy Attack that does not cost 1 additional Action Point. You may only attempt a Charge Attack if you (or your mount) take the Run Action and move at least 3 yards in a straight line towards your target prior to the attack. You cannot make a Charge Attack if you (or your mount) are Hampered otherwise unable to move at full speed.}}" >Charge Attack</button></td>
|
||
<td style="border:1px solid black;text-align:center;">Attack</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} makes a Charge Attack. &{{AP=[[0&{tracker:-}"></button>
|
||
<td>A melee Heavy Attack (for 1 less AP) after a Run action</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Climb Creature" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Climb Creature**}} {{roll=Action Points: 5
|
||
Duration: While hold persists
|
||
With at least 1 free hand, you can attempt to climb onto a creature that is two or more size categories larger than you. Make a melee attack using Physique or Athletics against that creature’s Evasion. On success you can climb onto that creature and move around it. You have advantage on attack rolls against creatures you are climbing on.
|
||
Each time you are battered while climbing another creature you must make a Riding or Will check of (10 + current Battering Points) or lose hold of that creature and are at risk of taking Falling damage.
|
||
The creature you are climbing on has disadvantage on its attack and damage rolls against you.}}" >Climb Creature</button></td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} attempts to climb a creature.&{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Climb onto larger creatures</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Command Minion" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Command Minion**}} {{roll=Action Points: 1
|
||
You issue an order to the minions under your control. You can command any number of your minions with a single command. If you wish for your minions to take different actions, you must take the Command Minion action multiple times, giving each order separately.
|
||
Each minion will perform the commanded action to the best of its ability until commanded otherwise. If it is unable to, such as the inability to detect the object of the command, then it becomes idle, spending 5 Action Points each turn doing nothing.
|
||
You can control the minion’s actions provided the actions are within the scope of the given command and what that creature is reasonably capable of. For example, if you command your minions to attack, you can decide which attack the minion makes (such as Bite, Claw, or Fire Blast), what type of attack the minion makes (such as Heavy Attack), when it empowers its spells, and when it uses any of its abilities.
|
||
Minions serving as noncombatant mounts do not need to be commanded to move and act as noncombatant mounts.
|
||
The available command options are:
|
||
Attack. When you issue the attack command you designate either a single foe or a type of creature you wish for the minions to attack. The category of creature must be something easily distinguishable. The minions will attack active creatures of the type, moving to them if necessary.
|
||
Defend. The minions take the Defend action.
|
||
Disengage. The minions take the Disengage action and move to a location you designate.
|
||
Fetch. The minions attempts to go and retrieve an item or creature, bringing it to a location you designate. The object of the fetch most be easily identifiable, and the creature must be able to detect it.
|
||
Follow. The minions follow a designated creature.
|
||
Move. The minions move to a designated location.
|
||
Protect. You designate a creature to protect. The minions will attack any creature that makes an attack against the designated creature.
|
||
Use. You designate an object such as a door, lever, or switch, and the minions will attempt to manipulate it according to your request. The request must be something the minion is capable of doing, as mindless minions cannot understand complicated tasks.}}" >Command Minion</button></td>
|
||
<td style="border:1px solid black;text-align:center;">1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} commands a minion. &{{AP=[[1&{tracker:-}]]}"></button>
|
||
<td>Command a minion or minions to do a task</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Deactivate" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Deactivate**}} {{roll=Deactivate has two uses. The first use is to disable traps or mechanical devices. The difficulty to do so is typically 10 + the creator’s skill, either Arcane Creations or Tinkering.
|
||
The second use is to tamper with the controls of a construct creature within 1 yard. To do so, make an Arcane Creations or Tinkering check against the construct’s Fortitude. Each success gives the Construct one Battering Point, and a triple success turns it off, Incapacitating it. If you are climbing on or grappling the construct you, gain advantage on this roll.
|
||
You must be at least Trained in either the Arcane Creations or Tinkering skills to attempt the Deactivate action.}}" >Deactivate</td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP attempting to Deactivate a construct, trap, or other device. &{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Arcane Creations or Tinkering check to deactivate a construct</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Defend" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Defend**}} {{roll=Action Points: 5
|
||
Duration: 1 Round*
|
||
You prepare yourself for incoming attacks, giving attack and damage rolls against you disadvantage until you take another action or the round ends.}}">Defend</td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP taking the Defend action. &{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Attack & damage rolls against you gain ↓ until your next turn</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Disarm" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Disarm**}} {{roll=Action Points: 5
|
||
Make a melee attack roll. If you exceed 10 + your target’s weapon skill, you can remove one weapon they are holding. It lands in a random spot within 1 yard of you and your target or the nearest spot.}}" >Disarm</td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP attempting to Disarm a creature. &{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Disarm an enemy's weapon</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Disengage" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Disengage**}} {{roll=Action Points: 5
|
||
Any movement taken from the Disengage action does not provoke Opportunity Attacks. If you take the Disengage action while Grappled or Restrained, you can attempt a Physique or Speed check to break free. The difficulty is set by the restraints or the holding creature’s Fortitude.}}">Disengage</td>
|
||
<td style="border:1px solid black;text-align:center;" ><input type="text" class="num_valuesout" value="5" name="attr_DisengageAP"></td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends @{DisengageAP} AP Disengaging. &{{AP=[[@{DisengageAP}&{tracker:-}]]}"></button>
|
||
<td>Move without Provoking</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Dismiss" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Dismiss**}} {{roll=Action Points: 1
|
||
End any ongoing spell or ability cast by you that has a Refresh.}}">Dismiss</td>
|
||
<td style="border:1px solid black;text-align:center;">1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 1 AP dismissing an effect. &{{AP=[[1&{tracker:-}]]}"></button>
|
||
<td>End an ongoing spell or ability that has a Refresh</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Dismiss" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Draw Item**}} {{roll=Action Points: 1
|
||
Draw a single weapon or item from your person.}}">Draw Item</td>
|
||
<td style="border:1px solid black;text-align:center;">1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 1 AP drawing an item. &{{AP=[[1&{tracker:-}]]}"></button>
|
||
<td>Draw a single weapon or item stowed on your person</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Draw Rune" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Draw Rune**}} {{roll=Action Points: 5 Traits: Provoking, Stationary
|
||
Draw a rune. See the Rune Uses section on page 186 for details on the various uses.}}">Draw Rune</td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP drawing a rune.&{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Draw a rune for various purposes</td>
|
||
<td>Provoking, Stationary</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Drink Potion" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Drink Potion**}} {{roll=Action Points: 4 Traits: Provoking
|
||
Drink a finger vial potion that you are holding.}}">Drink Potion</td>
|
||
<td style="border:1px solid black;text-align:center;">4</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 4 drinking a potion. &{{AP=[[4&{tracker:-}]]}"></button>
|
||
<td>Drink a finger vial potion in hand</td>
|
||
<td>Provoking</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Drink Potion" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Drop**}} {{roll=Action Points: 0 Traits: Free
|
||
Drop any weapon, creature, or object you are holding.}}">Drop</td>
|
||
<td style="border:1px solid black;text-align:center;">0</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} dropped something!&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>Drop any held item</td>
|
||
<td>Free</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Drink Potion" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Feint**}} {{roll=Action Points: 3
|
||
Feign an attack against a foe to set them off balance. Perform a Deception attack against the Sight of a creature within 10 yards that can see you. If you succeed you gain advantage on your next attack roll against that target’s Evasion that turn. If the attack hits, it also gains advantage on its damage roll.}}">Feint</td>
|
||
<td style="border:1px solid black;text-align:center;" ><input type="text" class="num_valuesout" value="3" name="attr_FeintAP"></td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends @{FeintAP} feinting an attack. &{{AP=[[@{FeintAP}&{tracker:-}]]}"></button>
|
||
<td>Deception check to aid an attack</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Drink Potion" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Grab**}} {{roll=Action Points: 5*
|
||
Duration: While hold persists
|
||
Make a melee attack using Physique against the better a creature's Evasion or Fortitude. On success the target is Grappled. If the target could lift you without being encumbered then it is not Grappled, but you may move with it as it moves.
|
||
The Grappled creature may attempt the Disengage action to attempt to break free by succeeding on a Physique or Speed check against your Fortitude.
|
||
When you grab a creature at Reach, it can attack whatever is grappling it, such as your arm, regardless of distance.
|
||
While grappling another creature, every time you are battered you must make a Will check of (10 + current Battering Points) or lose hold 1 creature you are holding, chosen randomly. Grabbing a creature requires a free hand or other appendage capable of holding.
|
||
You cannot move a Grappled creature the turn you establish the Grab, but if you are holding a creature at the start of your turn, you can lift, drag, or carry grabbed creatures, provided you have the Physique to do so. Moving with creatures your size or larger halves your Movement.
|
||
When using Physique to attack, Grab’s Action Point cost scales with your size, costing 1 less Action Point for each size below Medium (minimum 1) and 1 more for each size above Medium.}}">Grab</td>
|
||
<td style="border:1px solid black;text-align:center;" ><input type="text" class="num_valuesout" value="5" name="attr_GrabAP"></td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends @{GrabAP} attempting to grab a creature. &{{AP=[[@{GrabAP}&{tracker:-}]]}"></button>
|
||
<td>Grapple a creature</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Harassing Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Harassing Attack**}} {{roll=Action Points: Attack – 1 AP
|
||
Harassing attacks are meant to probe an opponent’s defenses, perhaps opening an opportunity to follow up with a deadlier strike. Any attack that costs Action Points, deals damage, and targets a single creature’s Evasion can be made into a harassing attack, by declaring so beforehand. The attack cost 1 less Action Points has disadvantage on all damage rolls, including Attack Augments.
|
||
This cannot reduce an attack below 2 Action Points, unless that attack is taken as a Consecutive action, Initial action, or Reaction.
|
||
Mutual Exclusivity: Attacks can be made as Standard, Harassing, Heavy, or Precise, but never more than one of those.}}">Harassing Attack</td>
|
||
<td style="border:1px solid black;text-align:center;">-1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} makes a Harassing Attack.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>A fast but weak attack. Disadvantage on Damage</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Heavy Attack**}} {{roll=Action Points: Attack + 1 AP
|
||
Heavy Attacks are meant to inflict serious harm on an opponent but are slower and less accurate. Any attack that costs Action Points, deals damage, and targets a single creature can be made into a Heavy Attack by declaring so beforehand. Heavy Attacks cost 1 additional Action Point and suffer disadvantage to the attack roll, but deal +1d damage. This damage bonus does not apply to Attack Augments.
|
||
Mutual Exclusivity: Attacks can be made as Standard, Harassing, Heavy, or Precise, but never more than one of these.}}">Heavy Attack</td>
|
||
<td style="border:1px solid black;text-align:center;">+1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} makes a Heavy Attack.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>A strong but slow attack. Disadvantage to hit, +1d damage</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Hesitate**}} {{roll=Action Points: 2 Traits: Stationary
|
||
Immediately pass turn to the next person even if they would still have less Action Points than you. If Hesitate would put you tied on Action Points with other creatures, you choose which creatures take their turns before you.}}">Hesitate</td>
|
||
<td style="border:1px solid black;text-align:center;">2</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} Hesitates for 2 AP. &{{AP=[[2&{tracker:-}]]}"></button>
|
||
<td>Immediately end your turn</td>
|
||
<td>Stationary</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Hide**}} {{roll=Action Points: 3
|
||
Whenever a foe loses line of sight of you, you may attempt to Hide by making a Stealth check. You are hidden from creatures with Senses below your Stealth check. Various factors such as lighting will affect the Stealth roll. See Senses on page 161 for details.}}">Hide</td>
|
||
<td style="border:1px solid black;text-align:center;">3</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 3 AP to hide.&{{AP=[[2&{tracker:-}]]}"></button>
|
||
<td>Stealth check to avoid detection</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Investigate**}} {{roll=Action Points: 5
|
||
You analyze the area around you. Make an Investigation roll. Add the result instead of the usual +10 to your Senses until the end of your turn.}}">Investigate</td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP Investigating.&{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Search or scan your surroundings</td>
|
||
<td>Provoking*</td>
|
||
</tr> <tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Move**}} {{roll=Action Points: 1 Traits: Provoking*
|
||
Move 1 additional yard (for a total of 2 yards for every Move action). *Move only provokes to creatures when you leave their melee reach.}}">Move</td>
|
||
<td style="border:1px solid black;text-align:center;">1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 1 AP doing a Move action. &{{AP=[[1&{tracker:-}]]}"></button>
|
||
<td>Move an additional yard (2 total)</td>
|
||
<td>Provoking*</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Nonlethal Attack**}} {{roll=Action Points: Attack
|
||
Nonlethal attacks are a way to subdue your foes. You can declare any melee weapon attack that deals physical damage as a Nonlethal Attack, converting its physical damage into Nonlethal damage. Nonlethal attacks cannot inflict Wounds. Instead, for each wound, a Nonlethal Attack would give a living creature, it instead gives it an additional Battering Point.
|
||
Whenever a Battering Point inflicted this way would render a target Exhausted, they are also Incapacitated, and knocked unconscious for 10 minutes.}}">Nonlethal Attack</td>
|
||
<td style="border:1px solid black;text-align:center;">+1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} makes a Nonlethal Attack.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>Make an attack to subdue living enemies without wounding</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Offhand Attack**}} {{roll=Action Points: Attack
|
||
Traits: Consecutive
|
||
Whenever you are wielding two or more weapons, after you make an attack with a wielded weapon you can make an attack with a different wielded weapon as a Consecutive action.}}">Offhand Attack</td>
|
||
<td style="border:1px solid black;text-align:center;">Attack</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} makes an Offhand Attack.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>While dual wielding make a Consecutive attack with a different weapon after attacking</td>
|
||
<td>Consecutive</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Opportunity Attack**}} {{roll=Action Points: Attack - 3 AP (Reaction)
|
||
Whenever a creature makes a Provoking action within your melee reach, or the first time it leaves your melee reach on a turn you may make any melee attack against it as an Opportunity Attack. This attack must only target the Provoking creature. Opportunity Attacks occur prior to the resolution of the Provoking action.}}">Opportunity Attack</td>
|
||
<td style="border:1px solid black;text-align:center;">-3</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} makes an Opportunity Attack.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>Make a quick attack to capitalize on an opening</td>
|
||
<td>Reaction</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Pass**}} {{roll=Action Points: 0
|
||
End your turn. You cannot take another turn until the next round. Add up to 10 of your remaining Action Points to your initiative roll in the following round. No effect can increase the Action Point cost of the Pass action.}}">Pass</td>
|
||
<td style="border:1px solid black;text-align:center;">0</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} Passes for the round.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>End turn and get no more turns for reaminder of the round.</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Pick Pocket**}} {{roll=Action Points: 5
|
||
Make a melee attack using Sleight of Hand against a creature’s Evasion. For each success you can remove one item from the creature’s person that is not being held or otherwise tethered to the creature.
|
||
If your Sleight of Hand exceeds the target’s Senses it does not immediately perceive the theft. }}">Pick Pocket</td>
|
||
<td style="border:1px solid black;text-align:center;" ><input type="text" class="num_valuesout" value="5" name="attr_PickPockAP"></td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends @{PickPockAP} Picking a Pocket.&{{AP=[[@{PickPockAP}&{tracker:-}]]}"></button>
|
||
<td>Steal items from a creature</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Pick Up**}} {{roll=Action Points: 1 Traits: Provoking
|
||
Pick an object up off the ground.}}">Pick Up</td>
|
||
<td style="border:1px solid black;text-align:center;">1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} Picks an object Up.&{{AP=[[1&{tracker:-}]]}"></button>
|
||
<td>Pick an object off the ground</td>
|
||
<td>Provoking</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Precise Attack**}} {{roll=Action Points: Attack + 2 AP
|
||
Precise Attacks sacrifice time for precision and are best used against targets that are difficult to hit. Any attack that costs Action Points, deals damage, and target’s a single creature’s Evasion can be made into a Precise Attack. Precise Attacks cost 2 more Action Points, but you gain advantage on the attack roll.
|
||
Mutual Exclusivity: Attacks can be made as Standard, Harassing, Heavy, or Precise, but never more than one of these.}}">Precise Attack</td>
|
||
<td style="border:1px solid black;text-align:center;">+2</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} makes a Precise Attack.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>A slower, more precise attack. Attack with Advantage</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Rally**}} {{roll=Action Points: 6 Traits: Provoking
|
||
Battering is not a permanent effect. By expending 6 Action Points you may attempt to Rally by making a Will check of 6. Remove 1 Battering Point from yourself per success.
|
||
Note the Comeback Heroic:
|
||
With a burst of energy, you perform a hastened Rally. Whenever you take the Rally action (including triggered Rally options, such as Steel Resolve), you can spend some or all its Action Point cost in Power instead of Action Points.
|
||
You get a bonus on your Rally attempt equal to the Power you spend, and the Rally loses the Provoking trait.}}">Rally</td>
|
||
<td style="border:1px solid black;text-align:center;">6</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} attempts to Rally!&{{AP=[[6&{tracker:-}]]}"></button>
|
||
<td>Will check to remove BP, removing one BP for every 6</td>
|
||
<td>Provoking</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Ready**}} {{roll=Action Points: Lose AP until trigger
|
||
Declare a single specific action, that you want to attempt when a specific thing happens. You lose Action Points until the triggering event happens. For example, you might take the Ready action to fire your bow when an enemy grimling steps out of hiding. Your current Action Points reduce until the event is triggered. Your Action Point total becomes whatever the triggering creature had at the moment of the trigger. After any creature’s turn you may end your Ready and take your turn, your current Action Points reducing to the same amount as the next creature in the initiative.}}">Ready</td>
|
||
<td style="border:1px solid black;text-align:center;">Varies</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} Readies an action.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>Prepare an action, losing AP until it triggers</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Recall Lore**}} {{roll=Action Points: 0 Traits: Reaction
|
||
Whenever you become aware of a creature, if it is of a type you have not encountered in play you may attempt to Recall Lore to see if your character has any knowledge of it.
|
||
Make a Lore check of the appropriate skill, prescribed by the GM. Alternatively, the GM may roll for you in secret. For most creatures the difficulty is 6, though it may be higher for more obscure creatures or outright impossible for creatures that are entirely new.
|
||
For each success the GM shares one of the following:
|
||
One damage type that the creature is Vulnerable or Resistant to.
|
||
One damage type to that the creature is highly (3+)Vulnerable or Resistant to.
|
||
One of the creature’s abilities, described narratively, for example, “This creature is capable of quickly regenerating its wounds.”
|
||
On failure, you instead learn two incorrect pieces of information similar to those above.}}">Recall Lore</td>
|
||
<td style="border:1px solid black;text-align:center;">0</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} tries to Recall Lore about this creature. &{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>Recall information about a creature</td>
|
||
<td>Reaction</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Draw Rune" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Run**}} {{roll=Action Points: 1 Traits: Provoking
|
||
Move 2 additional yards (to a total of 3).
|
||
At the end of any turn in which you’ve taken one or more run actions, you receive one Battering Point (regardless of how many Run actions were taken).}}">Run</td>
|
||
<td style="border:1px solid black;text-align:center;">1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 1 AP Running.&{{AP=[[1&{tracker:-}]]}"></button>
|
||
<td>Move 2 additional yards, receive a BP at the end of the turn</td>
|
||
<td>Provoking*</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Set Trap**}} {{roll=Action Points: 5 Traits: Stationary
|
||
Place a trap on the ground or attack with one that specifically designed to be attacked with, such as a Net.}}">Set Trap</td>
|
||
<td style="border:1px solid black;text-align:center;"><input type="text" class="num_valuesout" value="5" name="attr_SetTrapAP"></td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends @{SetTrapAP} AP setting a Trap or attacking with one. &{{AP=[[@{SetTrapAP}&{tracker:-}]]}"></button>
|
||
<td>Deploy a trap</td>
|
||
<td>Provoking*</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Shove**}} {{roll=Action Points: 5*
|
||
Make an attack using Physique against the better of a creature's Evasion or Fortitude. For every success the target is pushed 1 yard directly away from you.
|
||
If this movement would cause the shoved creature to collide with another creature, compare your initial Shove attack against that second creature’s Evasion. On a failure, that creature may immediately spend 1 Action Point as a Reaction to move 1 yard to an open space to avoid the collision. Repeat this process as necessary until either a collision occurs or the Shove distance is resolved.
|
||
In the event of a collision, whether it be with another creature or an object, the Shove stops. All creatures and objects involved take 1d + 1 Bludgeoning damage for every success your Shove attack had on the initial creature. Any creatures battered by this damage are knocked Prone.
|
||
When using Physique to attack, Shove’s Action Point cost scales with your size, costing 1 less Action Point for each size below Medium (minimum 1) and 1 more for each size above Medium.}}">Shove</td>
|
||
<td style="border:1px solid black;text-align:center;" ><input type="text" class="num_valuesout" value="5" name="attr_ShoveAP"></td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends @{ShoveAP} attempting to Shove a creature. &{{AP=[[@{ShoveAP}&{tracker:-}]]}"></button>
|
||
<td>Push enemies around the battlefield</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Speak**}} {{roll=Action Points: 0 Traits: Free
|
||
Speaking is a free action that can be done at any time. You are limited by time, though, and your character can never speak more than what they could reasonably say in the 10 seconds each round.}}">Speak</td>
|
||
<td style="border:1px solid black;text-align:center;">0</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} is still talking.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>Talk and communicate with friend or foe</td>
|
||
<td>Free</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Stand**}} {{roll=Action Points: 1 Traits: Provoking, Stationary
|
||
Stand up, ending the Prone condition. Alternatively, you can use this action to fall Prone. Note that any action that knocks a creature Prone during the Stand Action has no effect, as it takes place before the Stand action resolves.}}">Stand</td>
|
||
<td style="border:1px solid black;text-align:center;">1</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 1 AP Standing up.&{{AP=[[1&{tracker:-}]]}"></button>
|
||
<td>Stand up from prone</td>
|
||
<td>Provoking, Stationary</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Stow Item**}} {{roll=Action Points: 2
|
||
Traits: Provoking
|
||
Stow an item on your person.}}">Stow Item</td>
|
||
<td style="border:1px solid black;text-align:center;">2</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 2 AP stowing an item.&{{AP=[[2&{tracker:-}]]}"></button>
|
||
<td>Stow a weapon on your person</td>
|
||
<td>Provoking</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Subdue Beast**}} {{roll=Action Points: 5
|
||
You can use your Nature Lore skill to subdue wild animals. Make an attack using your Nature Lore against the Resolve of an animal within 10 yards. Each success gives the animal one Battering Point, and a triple success subdues it completely, rendering it no longer hostile. Subdued animals will usually run away but can be captured if you have the means to properly tie them up. They will not fight for you but may be sold to animal trainers or collectors.
|
||
You must be at least Trained in the Nature Lore skill to attempt the Subdue Beast action. This has no effect if attempted on Corruptions.}}">Subdue Beast</td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP attempting to subdue a beast.&{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Attempt to calm and subdue an animal</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Sunder**}} {{roll=Action Points: Attack
|
||
You attack an object in an attempt to break it.
|
||
An item’s Evasion is 5 plus any adjustments for size. An item’s Fortitude is equal to its Shatter Point. Resolve attacks cannot be attempted against an item.
|
||
If attacking the Evasion of an item that is being held, worn, or otherwise carried by a creature, your attack must succeed against the creature’s Evasion plus any size bonuses. Most held items will be +2 Evasion as held objects are typically two sizes smaller than the creature wielding it.
|
||
For example, you wish to shatter a creature’s sword. The creature currently has 12 Evasion. To hit that creature’s sword, you’d need to roll a 14 (12 + 2) to hit.
|
||
On hit, roll damage as normal. If the damage succeeds against the item’s Shatter Point, you break the item.
|
||
If gathered, the pieces of a sundered item are worth 25% of the item’s purchase price. These can be used as half the materials required to craft the item anew.
|
||
If you Sunder a creature’s armor, it is not immediately destroyed, but instead has its Armor value reduced by 1. The armor is destroyed if its Armor value is ever to 0.
|
||
The following table lists common items and what their Shatter Points are. Materials and other factors apply adjustments to these totals and Resistances.
|
||
|
||
Item Shatter Points
|
||
Simple Tool 15
|
||
Armor 20
|
||
Common Weapon 20
|
||
Door or Furniture 20
|
||
Interior Wall 30
|
||
Fortress Wall 50
|
||
|
||
Material Adjustments
|
||
Crude -5
|
||
Grund Starglass -5
|
||
+1 Item Material (such as steel) +10
|
||
+2 Item Material* +20
|
||
Stone (door, furniture, or wall) +20
|
||
Reinforced (door, furniture, or wall) +10
|
||
Magic Item +(IL x 3)
|
||
|
||
Material Resistances
|
||
Leather Bludgeoning 1 Slashing & Piercing 1
|
||
Metal Slashing & Piercing 1 Bludgeoning 1, Acid 3
|
||
Stone Slashing & Piercing 1 Bludgeoning 1, Acid 3
|
||
Wood Bludgeoning & Piercing 1 Slashing 1, Fire & Necrotic 3}}">Sunder</td>
|
||
<td style="border:1px solid black;text-align:center;">Attack</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} attempts to Sunder an object.&{{AP=[[0&{tracker:-}]]}"></button>
|
||
<td>Attempt to destroy an object</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Threaten**}} {{roll=Action Points: 3
|
||
Intimidate a foe to make them struggle to attack. Make an Intimidation attack against the Resolve of a single creature within 10 yards. For every success, that creature suffers disadvantage on its next attack roll that round. This is a fear effect.}}">Threaten</td>
|
||
<td style="border:1px solid black;text-align:center;">3</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 3 AP Threatening a creature.&{{AP=[[3&{tracker:-}]]}"></button>
|
||
<td>Intimidation check to scare foes</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Treat Wounds" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Treat Wounds**}} {{roll=Action Points: 5
|
||
Traits: Provoking, Stationary
|
||
Treat Wounds can be used to stabilize Dying creatures or to end the Bleeding conditions. Make a Medicine check of 5 to attend to a creature within 1 yard. A single success has no effect. On two successes you end the Dying condition and remove one stack of the Bleeding condition for each success beyond the first.
|
||
On a failure, you have made the situation worse. A Bleeding creature gains an additional stack of Bleeding. A Dying creature suffers disadvantage on its next Do-or-Die roll while the condition lasts.}}">Treat Wounds</td>
|
||
<td style="border:1px solid black;text-align:center;">5</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 5 AP Treating Wounds.&{{AP=[[5&{tracker:-}]]}"></button>
|
||
<td>Medicine check to stabilize a dying creature or treat injuries</td>
|
||
<td>Provoking, Stationary</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Trip**}} {{roll=Action Points: 5*
|
||
Make a melee attack using Physique against the better of the creature’s Evasion or Fortitude. On success, the target is knocked Prone and takes 1d + 1 Bludgeoning damage per success. This damage is increased by an additional 1d + 1 for every size category above medium the target is.
|
||
When using Physique to attack, Trip’s Action Point cost scales with your size, costing 1 less Action Point for each size below Medium (minimum 1) and 1 more for each size above Medium.}}">Trip</td>
|
||
<td style="border:1px solid black;text-align:center;" ><input type="text" class="num_valuesout" value="5" name="attr_TripAP"></td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends @{TripAP} attempting to Trip a creature.&{{AP=[[@{TripAP}&{tracker:-}]]}"></button>
|
||
<td>Knock a creature prone</td>
|
||
<td>-</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Use an Inhalant**}} {{roll=Action Points: 2
|
||
Inhale the contents of an inhalant that you are holding. (You may first need to do a Draw Item action.}}">Use an Inhalant</td>
|
||
<td style="border:1px solid black;text-align:center;">2</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 2 AP Consuming an Inhalant.&{{AP=[[2&{tracker:-}]]}"></button>
|
||
<td>Inhale the contents of an inhalant</td>
|
||
<td>-</td>
|
||
<tr>
|
||
<td style="border:1px solid black;"><button type="roll" name="Heavy Attack" class="sheet-blank-button" style="font-size:small" value="&{template:Action}} {{name=**Use Object**}} {{roll=Action Points: 2 Traits: Stationary
|
||
Open a door, close a door, or use a simple object like a switch, lever, or other mechanism. }}">Use Object</td>
|
||
<td style="border:1px solid black;text-align:center;">2</td>
|
||
<td style="text-align:center;vertical-align:center;"><button class="sheet-d6-dice" type="roll" value="/em @{character_name} spends 2 AP using an object.&{{AP=[[2&{tracker:-}]]}"></button>
|
||
<td>Open or close a door</td>
|
||
<td>Stationary</td>
|
||
</tr>
|
||
<tr>
|
||
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-Roll">
|
||
<div class="rollHeader flipColor">{{name}} Rolls</div>
|
||
<div class="rollHeader flipColor">{{skill}}</div>
|
||
<div class="rollBody">
|
||
<div class="rollResult">Result: {{roll}} </div>
|
||
{{#rollTotal() rollDamage 1}}
|
||
<div class="rollResult buffer damageResult">Damage: {{damage}} </div>
|
||
{{/rollTotal() rollDamage 1}}
|
||
{{#rollTotal() cascade 6}}
|
||
{{#^rollLess() roll cascade6}}
|
||
<div class="rollResult">Cascade</div>
|
||
{{/^rollLess() roll cascade6}}
|
||
{{/rollTotal() cascade 6}}
|
||
{{#rollTotal() cascade 5}}
|
||
{{#^rollLess() roll cascade5}}
|
||
<div class="rollResult">Cascade?</div>
|
||
{{/^rollLess() roll cascade5}}
|
||
{{/rollTotal() cascade 5}}
|
||
</div>
|
||
|
||
</rolltemplate>
|
||
|
||
<rolltemplate class="sheet-rolltemplate-Action">
|
||
<div class="rollHeader flipColor">{{name}}</div>
|
||
<div class="rollHeader flipColor">{{skill}}</div>
|
||
<div class="rollBody">
|
||
<div class="rollResult">{{roll}} </div>
|
||
|
||
</div>
|
||
|
||
</rolltemplate>
|
||
|
||
|
||
|
||
<script type="text/worker">
|
||
const table_proficiencies = {
|
||
'0.25': {Cursed: -2, Flawed: -1, Average: 0, Trained: 0, Exceptional: 0, Master: 1, Legendary: 2 },
|
||
'0.5': {Cursed: -2, Flawed: -1, Average: 0, Trained: 0, Exceptional: 1, Master: 2, Legendary: 3 },
|
||
'1': { Cursed: -2, Flawed: -1, Average: 0, Trained: 1, Exceptional: 2, Master: 3, Legendary: 4 },
|
||
'2': { Cursed: -2, Flawed: -1, Average: 0, Trained: 1, Exceptional: 2, Master: 4, Legendary: 5 },
|
||
'3': { Cursed: -2, Flawed: -1, Average: 0, Trained: 1, Exceptional: 3, Master: 4, Legendary: 5 },
|
||
'4': { Cursed: -2, Flawed: -1, Average: 0, Trained: 2, Exceptional: 3, Master: 5, Legendary: 6 },
|
||
'5': { Cursed: -2, Flawed: -1, Average: 1, Trained: 2, Exceptional: 4, Master: 5, Legendary: 6 },
|
||
'6': { Cursed: -2, Flawed: 0, Average: 1, Trained: 3, Exceptional: 4, Master: 6, Legendary: 7 },
|
||
'7': { Cursed: -1, Flawed: 0, Average: 1, Trained: 3, Exceptional: 5, Master: 6, Legendary: 7 },
|
||
'8': { Cursed: -1, Flawed: 0, Average: 1, Trained: 3, Exceptional: 5, Master: 7, Legendary: 8 },
|
||
'9': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 7, Legendary: 8 },
|
||
'10': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'11': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'12': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'13': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'14': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'15': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'16': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'17': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'18': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'19': { Cursed: -1, Flawed: 0, Average: 2, Trained: 4, Exceptional: 6, Master: 8, Legendary: 9 },
|
||
'20': { Cursed: 0, Flawed: 1, Average: 3, Trained: 5, Exceptional: 7, Master: 9, Legendary: 10 },
|
||
'30': { Cursed: 1, Flawed: 2, Average: 4, Trained: 6, Exceptional: 8, Master: 10, Legendary: 11 },
|
||
'40': { Cursed: 2, Flawed: 3, Average: 5, Trained: 7, Exceptional: 9, Master: 11, Legendary: 12 },
|
||
'50': { Cursed: 3, Flawed: 4, Average: 6, Trained: 8, Exceptional: 10, Master: 12, Legendary: 13 },
|
||
'60': { Cursed: 4, Flawed: 5, Average: 7, Trained: 9, Exceptional: 11, Master: 13, Legendary: 14 },
|
||
'70': { Cursed: 5, Flawed: 6, Average: 8, Trained: 10, Exceptional: 12, Master: 14, Legendary: 15 },
|
||
'80': { Cursed: 6, Flawed: 7, Average: 9, Trained: 11, Exceptional: 13, Master: 15, Legendary: 16 },
|
||
'90': { Cursed: 7, Flawed: 8, Average: 10, Trained: 12, Exceptional: 14, Master: 16, Legendary: 17 },
|
||
'100': { Cursed: 8, Flawed: 9, Average: 11, Trained: 13, Exceptional: 15, Master: 17, Legendary: 18 },
|
||
};
|
||
const valid_levels = ['0.25', '0.5', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '30', '40', '50', '60', '70', '80', '90', '100'];
|
||
|
||
['pe', 'sd', 'wl', 'pw', 'armor'].forEach(comp => {
|
||
on(`change:level change:${comp}comp sheet:opened`, () => {
|
||
getAttrs([`${comp}comp`, 'level'], values => {
|
||
const output = {};
|
||
const level = values.level;
|
||
if(valid_levels.includes(level)) {
|
||
const comp_level = table_proficiencies[level] || table_proficiencies['1'];
|
||
const comp_label = values[`${comp}comp`];
|
||
output[`${comp}mod`] = comp_level[comp_label] || 0;
|
||
} else {
|
||
output[`${comp}mod`] = 0;
|
||
}
|
||
setAttrs(output);
|
||
});
|
||
});
|
||
});
|
||
|
||
on('change:level change:repeating_skills2:skillcomp sheet:opened', () => {
|
||
getSectionIDs('repeating_skills2', idarray => {
|
||
const fieldnames = idarray.reduce((arr, id) => [...arr, `repeating_skills2_${id}_skillcomp`], []);
|
||
getAttrs([...fieldnames, 'level'], values => {
|
||
const output = {};
|
||
const level = values.level;
|
||
idarray.forEach(id => {
|
||
if(valid_levels.includes(level)) {
|
||
|
||
const comp_level = table_proficiencies[level] || table_proficiencies['1'];
|
||
const comp = values[`repeating_skills2_${id}_skillcomp`];
|
||
output[`repeating_skills2_${id}_rank`] = comp_level[comp] || 0;
|
||
} else {
|
||
output[`repeating_skills2_${id}_rank`] = 0;
|
||
}
|
||
});
|
||
setAttrs(output);
|
||
});
|
||
});
|
||
});
|
||
on('sheet:opened',function(){
|
||
|
||
getAttrs(["setupDone"], function(pvalue) {
|
||
console.log("hello there");
|
||
|
||
let SetupDone=parseInt(pvalue.setupDone);
|
||
console.log("setupdone: "+SetupDone );
|
||
if (SetupDone==0){
|
||
console.log("do setup");
|
||
|
||
incSkill("repeating_skills2","Alchemy");
|
||
incSkill("repeating_skills2","Arcane Creations Lore");
|
||
incSkill("repeating_skills2","Athletics");
|
||
incSkill("repeating_skills2","Corruption Lore");
|
||
incSkill("repeating_skills2","Cooking");
|
||
incSkill("repeating_skills2","Deception");
|
||
incSkill("repeating_skills2","Deduction");
|
||
incSkill("repeating_skills2","Endurance");
|
||
incSkill("repeating_skills2","Engineering");
|
||
incSkill("repeating_skills2","Fade Lore");
|
||
incSkill("repeating_skills2","Insight");
|
||
incSkill("repeating_skills2","Intimidation");
|
||
incSkill("repeating_skills2","Investigation");
|
||
incSkill("repeating_skills2","Language");
|
||
incSkill("repeating_skills2","Medicine");
|
||
incSkill("repeating_skills2","Nature Lore");
|
||
incSkill("repeating_skills2","Performance");
|
||
incSkill("repeating_skills2","Persuasion");
|
||
incSkill("repeating_skills2","Riding");
|
||
incSkill("repeating_skills2","Runecraft");
|
||
incSkill("repeating_skills2","Sleight of Hand");
|
||
incSkill("repeating_skills2","Smithing");
|
||
incSkill("repeating_skills2","Stealth");
|
||
incSkill("repeating_skills2","Tinkering");
|
||
incSkill("repeating_skills2","Undead Lore");
|
||
incSkill("repeating_skills2","Light Weapons");
|
||
incSkill("repeating_skills2","Heavy Weapons");
|
||
incSkill("repeating_skills2","Natural Weapons");
|
||
incSkill("repeating_skills2","Ranged Weapons");
|
||
incSkill("repeating_skills2","Shields");
|
||
incSkill("repeating_skills2","Throwing");
|
||
incSkill("repeating_skills2","Air");
|
||
incSkill("repeating_skills2","Earth");
|
||
incSkill("repeating_skills2","Fire");
|
||
incSkill("repeating_skills2","Water");
|
||
incSkill("repeating_skills2","Life");
|
||
incSkill("repeating_skills2","Death");
|
||
setAttrs({setupDone:1});
|
||
|
||
|
||
|
||
}
|
||
|
||
});
|
||
});
|
||
|
||
|
||
|
||
|
||
function incSkill(section,skill){
|
||
getSectionIDs(section, function(idArray) {
|
||
var found = false;
|
||
if (idArray.length > 0) {
|
||
var fields = [];
|
||
_.each(idArray, function(currentID) {
|
||
fields.push(section+"_" + currentID + "_skillName");
|
||
});
|
||
getAttrs(fields, function(values) {
|
||
_.each(idArray, function(currentID, i) {
|
||
var curSkill = values[section+"_" + idArray[i] + "_skillName"];
|
||
if (curSkill === skill){
|
||
found = true;
|
||
}
|
||
});
|
||
if (!found) {
|
||
console.log(skill+""+section+" add !!!!!!!!!!!");
|
||
addSkill(section,skill);
|
||
}
|
||
});
|
||
}
|
||
else{
|
||
addSkill(section,skill);
|
||
}
|
||
|
||
|
||
});
|
||
}
|
||
|
||
|
||
function addSkill(section,skill){
|
||
var id=getId();
|
||
var setObj = {};
|
||
setObj[section+"_"+id+'_skillName']=skill;
|
||
setAttrs(setObj);
|
||
console.log("!!!!!!!!! skill: "+skill);
|
||
setAttrs(setObj);
|
||
}
|
||
|
||
function getId(){
|
||
const sattrs = {};
|
||
const createdIDs = [];
|
||
var retId = 0;
|
||
if (createdIDs.length==0){
|
||
retId = generateRowID();
|
||
createdIDs.push(retId);
|
||
}
|
||
var checkit = true;
|
||
while (checkit==true) {
|
||
let newID = generateRowID();
|
||
console.log("Newid "+newID);
|
||
if (!createdIDs.includes(newID)) {
|
||
newrowid = newID;
|
||
console.log("newrowid "+newID);
|
||
createdIDs.push(newrowid);
|
||
checkit=false;
|
||
}
|
||
}
|
||
retId = newrowid;
|
||
|
||
|
||
return retId;
|
||
}
|
||
|
||
on("change:repeating_weapons:wpnDice", function(eventInfo) {
|
||
getAttrs(["repeating_weapons_wpnDice"], function(pvalue) {
|
||
let dice = parseInt(pvalue.repeating_weapons_wpnDice);
|
||
console.log("dice "+dice);
|
||
let PAdice = dice+1;
|
||
console.log("PAdice "+PAdice);
|
||
let HAdice = dice-1;
|
||
console.log("HAdice "+HAdice);
|
||
setAttrs({repeating_weapons_PAwpnDice:PAdice,repeating_weapons_HAwpnDice:HAdice,repeating_weapons_PRwpnDice:dice});
|
||
});
|
||
});
|
||
on("change:repeating_weapons:wpnAP", function(eventInfo) {
|
||
getAttrs(["repeating_weapons_wpnAP"], function(pvalue) {
|
||
let AP = parseInt(pvalue.repeating_weapons_wpnAP);
|
||
console.log("AP "+AP);
|
||
let PAwpnAP = AP+1;
|
||
console.log("PAwpnAP "+PAwpnAP);
|
||
let HAwpnAP = AP-1;
|
||
console.log("HAwpnAP "+HAwpnAP);
|
||
setAttrs({repeating_weapons_PAwpnAP:PAwpnAP,repeating_weapons_HAwpnAP:HAwpnAP});
|
||
});
|
||
});
|
||
|
||
/*advantagetoggle*/
|
||
|
||
on("change:advantagetoggle change:advdisadvdice sheet:opened", function() {
|
||
getAttrs(["advantagetoggle","advdisadvdice"], function(values) {
|
||
console.log("xxx: "+values.advantagetoggle);
|
||
let toggle = values.advantagetoggle;
|
||
let dice=" ";
|
||
let klkh=" ";
|
||
if (toggle=="adv"){
|
||
dice="+"+values.advdisadvdice;
|
||
klkh="kh";
|
||
}
|
||
else if (toggle=="disadv") {
|
||
dice="+"+values.advdisadvdice;
|
||
klkh="kl";
|
||
}
|
||
console.log("dice: "+dice);
|
||
console.log("klkh: "+klkh);
|
||
|
||
|
||
let advdice= parseInt(values.advdisadvdice)
|
||
let disaddice=" ";
|
||
let disklkh=" ";
|
||
if (advdice=="0") {
|
||
disaddice="+"+(1);
|
||
disklkh="kl";
|
||
}
|
||
else if (toggle=="adv" && advdice > 0){
|
||
disaddice="+"+(values.advdisadvdice-1);
|
||
disklkh="kh";
|
||
}
|
||
else {
|
||
disaddice ="+"+((parseInt(values.advdisadvdice) || 0)+1);
|
||
disklkh="kl";
|
||
}
|
||
console.log("dice: "+disaddice);
|
||
console.log("klkh: "+disklkh);
|
||
|
||
let advaddice=" ";
|
||
let advklkh=" ";
|
||
if (advdice=="0") {
|
||
advaddice="+"+(1);
|
||
advklkh="kh";
|
||
}
|
||
else if (toggle=="disadv" && advdice > 0){
|
||
advaddice="+"+(values.advdisadvdice-1);
|
||
advklkh="kl";
|
||
}
|
||
else {
|
||
advaddice ="+"+((parseInt(values.advdisadvdice) || 0)+1);
|
||
advklkh="kh";
|
||
}
|
||
console.log("dice: "+advaddice);
|
||
console.log("klkh: "+advklkh);
|
||
setAttrs({disaddice:disaddice,disklkh:disklkh,adDice:dice,klkh:klkh, advaddice:advaddice, advklkh:advklkh});
|
||
});
|
||
});
|
||
/*
|
||
on("change:advantagetoggle change:advdisadvdice", function() {
|
||
getAttrs(["advantagetoggle","advdisadvdice"], function(values) {
|
||
console.log("dxxx: "+values.advantagetoggle);
|
||
|
||
});
|
||
});
|
||
*/
|
||
on("change:healthBase change:healthBonus", function() {
|
||
getAttrs(["healthBase","healthBonus"], function(values) {
|
||
console.log("wtf");
|
||
console.log("healthBase: "+values.healthBase);
|
||
console.log("healthBonus: "+values.healthBonus);
|
||
let healthtotal = parseInt(values.healthBase)+parseInt(values.healthBonus);
|
||
setAttrs({healthtotal:healthtotal});
|
||
|
||
});
|
||
});
|
||
|
||
|
||
on("change:cascacdeTog", function() {
|
||
getAttrs(["cascacdeTog"], function(values) {
|
||
let cascadeVal="6";
|
||
if (values.cascacdeTog=="on"){
|
||
cascadeVal="5"
|
||
}
|
||
setAttrs({cascadeVal:cascadeVal});
|
||
|
||
});
|
||
});
|
||
|
||
|
||
on("change:peMod change:pwMod change:PEcomp change:PWcomp change:level change:repeating_weapons:wpnType sheet:opened", function(eventInfo) {
|
||
console.log("Dropdown changed!");
|
||
|
||
// Get all the row IDs in the repeating section
|
||
getSectionIDs("repeating_weapons", function(rowIds) {
|
||
_.each(rowIds, function(rowId) {
|
||
// Fetch the wpnType for the current repeating row
|
||
getAttrs(["repeating_weapons_" + rowId + "_wpnType", "pemod", "pwmod"], function(values) {
|
||
let wpnType = values["repeating_weapons_" + rowId + "_wpnType"];
|
||
let wpndmgattr; // Initialize wpndmgattr variable
|
||
|
||
let pemod = parseInt(values.pemod);
|
||
let pwmod = parseInt(values.pwmod);
|
||
|
||
if (wpnType === "0") {
|
||
wpndmgattr = pemod; // Use the pemod value
|
||
} else if (wpnType === "1") {
|
||
wpndmgattr = pwmod; // Use the pwmod value
|
||
} else if (wpnType === "2") {
|
||
wpndmgattr = 0; // Set to 0
|
||
}
|
||
|
||
// Specify the repeating section name, row ID, and attribute name
|
||
setAttrs({
|
||
["repeating_weapons_" + rowId + "_wpndmgattr"]: wpndmgattr
|
||
});
|
||
});
|
||
});
|
||
});
|
||
});
|
||
|
||
on("change:peDice change:peMod", function() {
|
||
getAttrs(["peDice","peMod"], function(values) {
|
||
let dice = parseInt(values.peDice);
|
||
let mod = parseInt(values.peMod);
|
||
let healthBase = ((dice+mod));
|
||
setAttrs({healthBase:healthBase});
|
||
|
||
});
|
||
});
|
||
|
||
on("change:peDice change:peMod", function() {
|
||
getAttrs(["peDice","peMod","carrycapacity"], function(values) {
|
||
let dice = parseInt(values.peDice);
|
||
let mod = parseInt(values.peMod);
|
||
let carrycapacity = (50 + (mod*10))*(2**(dice-3));
|
||
setAttrs({carrycapacity:carrycapacity});
|
||
|
||
});
|
||
});
|
||
|
||
on("change:wlDice change:wlMod change:wlBonus change:peDice", function() {
|
||
getAttrs(["wlDice","wlMod", "peDice"], function(values) {
|
||
let dice = parseInt(values.wlDice);
|
||
let mod = parseInt(values.wlMod);
|
||
let bt = (dice+mod)*(dice-1)+parseInt(values.peDice)-3;
|
||
setAttrs({btBase:bt});
|
||
|
||
});
|
||
});
|
||
|
||
on("change:btBase change:btBonus", function() {
|
||
getAttrs(["btBase","btBonus"], function(values) {
|
||
let bt = parseInt(values.btBase)+parseInt(values.btBonus);
|
||
setAttrs({btMax:bt});
|
||
});
|
||
});
|
||
|
||
on("change:sdDice change:sdMod change:moveBonus", function() {
|
||
getAttrs(["sdDice","sdMod", "moveBonus", "basemove"], function(values) {
|
||
let move = parseInt(0)+parseInt(values.moveBonus)+parseInt(values.sdMod);
|
||
setAttrs({move:move});
|
||
let basemove = parseInt(0)+parseInt(values.sdMod);
|
||
setAttrs({basemove:basemove});
|
||
});
|
||
});
|
||
|
||
|
||
on("change:pwDice change:pwMod change:pwBonus change:ppBonus", function() {
|
||
getAttrs(["pwDice","pwMod","ppBonus"], function(values) {
|
||
let dice = parseInt(values.pwDice);
|
||
let mod = parseInt(values.pwMod);
|
||
let bonus2 = parseInt(values.ppBonus);
|
||
let pp = ((dice+mod)*dice)+bonus2;
|
||
setAttrs({ppMAx:pp});
|
||
|
||
});
|
||
});
|
||
on("change:sdMod change:wlMod change:IniBonus ", function() {
|
||
getAttrs(["sdMod","wlMod","IniBonus","Initiative"], function(values) {
|
||
let sd = parseInt(values.sdMod);
|
||
let wl = parseInt(values.wlMod);
|
||
let bonus = parseInt(values.IniBonus);
|
||
let ini = sd + wl + bonus
|
||
setAttrs({Initiative:ini});
|
||
|
||
});
|
||
});
|
||
|
||
|
||
on("change:targetBase change:targetBonus change:peDice", function() {
|
||
getAttrs(["targetBase","targetBonus"], function(values) {
|
||
console.log("targetBase: "+values.targetBase);
|
||
console.log("targetBonus: "+values.targetBonus);
|
||
let target = parseInt(values.targetBase)+parseInt(values.targetBonus);
|
||
setAttrs({target:target});
|
||
});
|
||
});
|
||
|
||
/*armorVal*/
|
||
|
||
|
||
on("change:armorSuit change:level", () => {
|
||
getAttrs(["armorSuit","armorMod"], values => {
|
||
const armorSuit = values.armorSuit;
|
||
let armorVal = 0; // Declare and initialize armorVal
|
||
|
||
const armorValue = {
|
||
"0": 0,
|
||
"1": 1,
|
||
"2": 2,
|
||
"3": 3,
|
||
"4": 2,
|
||
"5": 3,
|
||
"6": 4,
|
||
"7": 5,
|
||
"8": 6,
|
||
"9": 5,
|
||
"10": 6,
|
||
"11": 7,
|
||
"12": 8,
|
||
"13": 9,
|
||
"14": 8,
|
||
"15": 9,
|
||
"16": 10,
|
||
"17": 11,
|
||
"18": 12,
|
||
"19": 13,
|
||
"20": 14,
|
||
"21": 15,
|
||
"22": 16,
|
||
"23": 17,
|
||
"24": parseInt(values.armorMod)
|
||
};
|
||
|
||
|
||
if (armorValue.hasOwnProperty(armorSuit)) {
|
||
armorVal = armorValue[armorSuit];
|
||
}
|
||
|
||
console.log('armorSuit:', armorSuit);
|
||
console.log('armorVal:', armorVal);
|
||
|
||
setAttrs({ armorVal });
|
||
});
|
||
});
|
||
|
||
|
||
|
||
on("change:armorVal change:armorBonus change:level", function() {
|
||
getAttrs(["armorVal", "armorBonus"], function(values) {
|
||
let armor = parseInt(values.armorVal)+parseInt(values.armorBonus);
|
||
setAttrs({defArmor:armor});
|
||
});
|
||
});
|
||
|
||
|
||
on("change:btPts change:hpMax", function() {
|
||
getAttrs(["btPts","hpMax"], function(values) {
|
||
let btPts =parseInt(values.btPts);
|
||
console.log("btPts: "+btPts)
|
||
let hpMax = parseInt(values.hpMax);
|
||
console.log("hpMax: "+hpMax);
|
||
let trigger = Math.ceil(hpMax/2);
|
||
console.log("trigger: "+trigger)
|
||
let cndMsg = "";
|
||
console.log("conditions");
|
||
if (btPts > trigger && btPts < hpMax){
|
||
console.log("Fatigued");
|
||
cndMsg = "Fatigued";
|
||
} else if (btPts >= hpMax){
|
||
console.log("Unconscious");
|
||
cndMsg = "Unconscious"
|
||
}
|
||
setAttrs({condition:cndMsg});
|
||
});
|
||
})
|
||
|
||
|
||
|
||
|
||
on("change:repeating_weapons:defSelect", function(eventInfo) {
|
||
getAttrs(["repeating_weapons_defSelect","repeating_weapons_wpnDef","LastDefRow","btPts","peMod","peBonus", "sdMod","sdBonus","defArmor","defBonus"], function(pvalue) {
|
||
console.log("!!!!!! stuff "+JSON.stringify(eventInfo.sourceAttribute));
|
||
console.log(pvalue);
|
||
|
||
|
||
console.log("marker -1");
|
||
let batterMod = parseInt(pvalue.btPts)*3;
|
||
console.log("marker -2");
|
||
let armor = parseInt(pvalue.defArmor);
|
||
console.log("marker -4");
|
||
let def = parseInt(pvalue.peMod);
|
||
console.log("marker -5");
|
||
console.log("def 1 "+def);
|
||
def = def+parseInt(pvalue.sdMod);
|
||
console.log("marker -6");
|
||
console.log("def 2 "+def);
|
||
|
||
|
||
let sourceA = eventInfo.sourceAttribute
|
||
let lastSelected = pvalue.LastDefRow;
|
||
let def2 = parseInt(pvalue.repeating_weapons_wpnDef);
|
||
console.log("def :"+def);
|
||
if (sourceA==lastSelected){
|
||
if (pvalue.defSelect!=="on"){
|
||
setAttrs({LastDefRow:" ",defWeapon:def2},{silent:true});
|
||
setAttrs({defWeapon:0});
|
||
def2=0;
|
||
defBonus=0;
|
||
}else{
|
||
setAttrs({defWeapon:def2});
|
||
}
|
||
}else{
|
||
console.log("marker 1");
|
||
lastSelected = lastSelected.trim();
|
||
console.log("marker 2");
|
||
if (lastSelected.length>0){
|
||
console.log("marker 3a");
|
||
let attrsToSet = {[lastSelected]:0,silent:true};
|
||
setAttrs(attrsToSet,{silent:true});
|
||
setAttrs({LastDefRow:sourceA},{silent:true});
|
||
console.log("def :"+def2);
|
||
setAttrs({defWeapon:def},{silent:true});
|
||
/*setAttrs({defWeapon:def});*/
|
||
} else {
|
||
console.log("marker 3b");
|
||
setAttrs({LastDefRow:sourceA},{silent:true});
|
||
console.log("def :"+def2);
|
||
setAttrs({defWeapon:def},{silent:true});
|
||
/*setAttrs({defWeapon:def2});*/
|
||
}
|
||
console.log("marker 4");
|
||
}
|
||
console.log("marker 5");
|
||
def = def+armor+def2+parseInt(pvalue.defBonus);
|
||
console.log("def 3 "+def);
|
||
|
||
if (batterMod>0){
|
||
def = Math.max(def-batterMod,armor);
|
||
}
|
||
setAttrs({defTotal:def});
|
||
|
||
});
|
||
});
|
||
|
||
|
||
on("change:btPts change:peBonus change:peMod change:sdBonus change:sdMod change:defArmor change:defBonus", function() {
|
||
getAttrs(["btPts","peMod","sdMod","defArmor","defBonus","defWeapon"], function(values) {
|
||
|
||
console.log(values);
|
||
let batterMod = parseInt(values.btPts)*3;
|
||
let armor = parseInt(values.defArmor);
|
||
let def = parseInt(values.peMod);
|
||
console.log("def 1 "+def);
|
||
def = def+parseInt(values.sdMod);
|
||
console.log("armor: "+armor);
|
||
console.log("defWeapon:"+parseInt(values.defWeapon));
|
||
console.log("defBonus: "+parseInt(values.defBonus));
|
||
def = def+armor+parseInt(values.defWeapon)+parseInt(values.defBonus);
|
||
console.log("def 3 "+def);
|
||
|
||
if (batterMod>0){
|
||
def = Math.max(def-batterMod,armor);
|
||
}
|
||
console.log("def 4 "+def);
|
||
|
||
|
||
/*Math.min(2, 3, 1)*/
|
||
setAttrs({defTotal:def});
|
||
/*setAttrs({defBase:def});*/
|
||
|
||
});
|
||
});
|
||
|
||
|
||
/*
|
||
on("change:defBase change:defArmor change:defWeapon", function() {
|
||
getAttrs(["defBase","defArmor","defWeapon"], function(values) {
|
||
console.log("defBase: "+defBase);
|
||
console.log("defArmor: "+defArmor);
|
||
console.log("defWeapon: "+defWeapon);
|
||
console.log("marker 1");
|
||
let def = parseInt(values.defBase)+parseInt(values.defArmor)+parseInt(values.defWeapon);
|
||
console.log("marker 2");
|
||
setAttrs({defTotal:def});
|
||
});
|
||
});
|
||
*/
|
||
|
||
on("change:btPts change:sdDice change:sdMod change:sdBonus change:targetBonus change:peDice", function() {
|
||
getAttrs(["btPts","sdDice","sdMod","targetBonus","peDice"], function(values) {
|
||
console.log("calc target");
|
||
let dice = parseInt(values.sdDice);
|
||
console.log("dice: " + dice);
|
||
console.log("sdMod: " + values.sdMod);
|
||
console.log("btPts: " + values.btPts);
|
||
let target = ((dice * dice) + parseInt(values.sdMod) + 1) - parseInt(values.btPts) +3 - parseInt(values.peDice);
|
||
target = Math.max(target, (5 - parseInt(values.targetBonus)));
|
||
console.log("target: " + target);
|
||
setAttrs({ targetBase: target });
|
||
});
|
||
});
|
||
|
||
|
||
on("change:btPts change:peMod change:fortitudeMod change:peDice", function() {
|
||
getAttrs(["btPts","peMod","fortitudeMod", "peDice"], function(values) {
|
||
let fortitude = (10 + parseInt(values.peMod) + parseInt(values.fortitudeMod)) - parseInt(values.btPts) + parseInt(values.peDice)*3 - 9;
|
||
fortitude = Math.max(fortitude, (5));
|
||
setAttrs({ fortitude: fortitude });
|
||
});
|
||
});
|
||
|
||
|
||
on("change:btPts change:wlMod change:resolveMod", function() {
|
||
getAttrs(["btPts","wlMod","resolveMod"], function(values) {
|
||
let resolve = (10 + parseInt(values.wlMod) + parseInt(values.resolveMod)) - parseInt(values.btPts);
|
||
resolve = Math.max(resolve, (5));
|
||
setAttrs({ resolve: resolve });
|
||
});
|
||
});
|
||
|
||
|
||
on("change:targetBase change:targetBonus", function() {
|
||
getAttrs(["targetBase","targetBonus"], function(values) {
|
||
let target = parseInt(values.targetBase)+parseInt(values.targetBonus);
|
||
setAttrs({target:target});
|
||
});
|
||
});
|
||
|
||
|
||
|
||
|
||
|
||
/* ---- BEGIN: TheAaronSheet.js ---- */
|
||
// Github: https://github.com/shdwjk/TheAaronSheet/blob/master/TheAaronSheet.js
|
||
// By: The Aaron, Arcane Scriptomancer
|
||
// Contact: https://app.roll20.net/users/104025/the-aaron
|
||
|
||
var TAS = TAS || (function(){
|
||
'use strict';
|
||
|
||
var version = '0.2.4',
|
||
lastUpdate = 1457098091,
|
||
|
||
loggingSettings = {
|
||
debug: {
|
||
key: 'debug',
|
||
title: 'DEBUG',
|
||
color: {
|
||
bgLabel: '#7732A2',
|
||
label: '#F2EF40',
|
||
bgText: '#FFFEB7',
|
||
text: '#7732A2'
|
||
}
|
||
},
|
||
error: {
|
||
key: 'error',
|
||
title: 'Error',
|
||
color: {
|
||
bgLabel: '#C11713',
|
||
label: 'white',
|
||
bgText: '#C11713',
|
||
text: 'white'
|
||
}
|
||
},
|
||
warn: {
|
||
key: 'warn',
|
||
title: 'Warning',
|
||
color: {
|
||
bgLabel: '#F29140',
|
||
label: 'white',
|
||
bgText: '#FFD8B7',
|
||
text: 'black'
|
||
}
|
||
},
|
||
info: {
|
||
key: 'info',
|
||
title: 'Info',
|
||
color: {
|
||
bgLabel: '#413FA9',
|
||
label: 'white',
|
||
bgText: '#B3B2EB',
|
||
text: 'black'
|
||
}
|
||
},
|
||
notice: {
|
||
key: 'notice',
|
||
title: 'Notice',
|
||
color: {
|
||
bgLabel: '#33C133',
|
||
label: 'white',
|
||
bgText: '#ADF1AD',
|
||
text: 'black'
|
||
}
|
||
},
|
||
log: {
|
||
key: 'log',
|
||
title: 'Log',
|
||
color: {
|
||
bgLabel: '#f2f240',
|
||
label: 'black',
|
||
bgText: '#ffff90',
|
||
text: 'black'
|
||
}
|
||
},
|
||
callstack: {
|
||
key: 'TAS',
|
||
title: 'function',
|
||
color: {
|
||
bgLabel: '#413FA9',
|
||
label: 'white',
|
||
bgText: '#B3B2EB',
|
||
text: 'black'
|
||
}
|
||
},
|
||
callstack_async: {
|
||
key: 'TAS',
|
||
title: 'ASYNC CALL',
|
||
color: {
|
||
bgLabel: '#413FA9',
|
||
label: 'white',
|
||
bgText: '#413FA9',
|
||
text: 'white'
|
||
}
|
||
},
|
||
TAS: {
|
||
key: 'TAS',
|
||
title: 'TAS',
|
||
color: {
|
||
bgLabel: 'grey',
|
||
label: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)',
|
||
bgText: 'grey',
|
||
text: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)'
|
||
}
|
||
}
|
||
},
|
||
|
||
|
||
config = {
|
||
debugMode: false,
|
||
logging: {
|
||
log: true,
|
||
notice: true,
|
||
info: true,
|
||
warn: true,
|
||
error: true,
|
||
debug: false
|
||
}
|
||
},
|
||
|
||
callstackRegistry = [],
|
||
queuedUpdates = {}, //< Used for delaying saves till the last momment.
|
||
|
||
complexType = function(o){
|
||
switch(typeof o){
|
||
case 'string':
|
||
return 'string';
|
||
case 'boolean':
|
||
return 'boolean';
|
||
case 'number':
|
||
return (_.isNaN(o) ? 'NaN' : (o.toString().match(/\./) ? 'decimal' : 'integer'));
|
||
case 'function':
|
||
return 'function: '+(o.name ? o.name+'()' : '(anonymous)');
|
||
case 'object':
|
||
return (_.isArray(o) ? 'array' : (_.isArguments(o) ? 'arguments' : ( _.isNull(o) ? 'null' : 'object')));
|
||
default:
|
||
return typeof o;
|
||
}
|
||
},
|
||
|
||
dataLogger = function(primaryLogger,secondaryLogger,data){
|
||
_.each(data,function(m){
|
||
var type = complexType(m);
|
||
switch(type){
|
||
case 'string':
|
||
primaryLogger(m);
|
||
break;
|
||
case 'undefined':
|
||
case 'null':
|
||
case 'NaN':
|
||
primaryLogger('['+type+']');
|
||
break;
|
||
case 'number':
|
||
case 'not a number':
|
||
case 'integer':
|
||
case 'decimal':
|
||
case 'boolean':
|
||
primaryLogger('['+type+']: '+m);
|
||
break;
|
||
default:
|
||
primaryLogger('['+type+']:=========================================');
|
||
secondaryLogger(m);
|
||
primaryLogger('=========================================================');
|
||
break;
|
||
}
|
||
});
|
||
},
|
||
|
||
|
||
colorLog = function(options){
|
||
var coloredLoggerFunction,
|
||
key = options.key,
|
||
label = options.title || 'TAS',
|
||
lBGColor = (options.color && options.color.bgLabel) || 'blue',
|
||
lTxtColor = (options.color && options.color.label) || 'white',
|
||
mBGColor = (options.color && options.color.bgText) || 'blue',
|
||
mTxtColor = (options.color && options.color.text) || 'white';
|
||
|
||
coloredLoggerFunction = function(message){
|
||
console.log(
|
||
'%c '+label+': %c '+message + ' ',
|
||
'background-color: '+lBGColor+';color: '+lTxtColor+'; font-weight:bold;',
|
||
'background-color: '+mBGColor+';color: '+mTxtColor+';'
|
||
);
|
||
};
|
||
return function(){
|
||
if('TAS'===key || config.logging[key]){
|
||
dataLogger(coloredLoggerFunction,function(m){console.log(m);},_.toArray(arguments));
|
||
}
|
||
};
|
||
},
|
||
|
||
logDebug = colorLog(loggingSettings.debug),
|
||
logError = colorLog(loggingSettings.error),
|
||
logWarn = colorLog(loggingSettings.warn),
|
||
logInfo = colorLog(loggingSettings.info),
|
||
logNotice = colorLog(loggingSettings.notice),
|
||
logLog = colorLog(loggingSettings.log),
|
||
log = colorLog(loggingSettings.TAS),
|
||
logCS = colorLog(loggingSettings.callstack),
|
||
logCSA = colorLog(loggingSettings.callstack_async),
|
||
|
||
registerCallstack = function(callstack,label){
|
||
var idx=_.findIndex(callstackRegistry,function(o){
|
||
return (_.difference(o.stack,callstack).length === _.difference(callstack,o.stack).length) &&
|
||
_.difference(o.stack,callstack).length === 0 &&
|
||
o.label === label;
|
||
});
|
||
if(-1 === idx){
|
||
idx=callstackRegistry.length;
|
||
callstackRegistry.push({
|
||
stack: callstack,
|
||
label: label
|
||
});
|
||
}
|
||
return idx;
|
||
},
|
||
|
||
setConfigOption = function(options){
|
||
var newconf =_.defaults(options,config);
|
||
newconf.logging=_.defaults(
|
||
(options && options.logging)||{},
|
||
config.logging
|
||
);
|
||
config=newconf;
|
||
},
|
||
|
||
debugMode = function(){
|
||
config.logging.debug=true;
|
||
config.debugMode = true;
|
||
},
|
||
|
||
getCallstack = function(){
|
||
var e = new Error('dummy'),
|
||
stack = _.map(_.rest(e.stack.replace(/^[^\(]+?[\n$]/gm, '')
|
||
.replace(/^\s+at\s+/gm, '')
|
||
.replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@')
|
||
.split('\n')),function(l){
|
||
return l.replace(/\s+.*$/,'');
|
||
});
|
||
return stack;
|
||
},
|
||
logCallstackSub = function(cs){
|
||
var matches, csa;
|
||
_.find(cs,function(line){
|
||
matches = line.match(/TAS_CALLSTACK_(\d+)/);
|
||
if(matches){
|
||
csa=callstackRegistry[matches[1]];
|
||
logCSA( '===================='+(csa.label ? '> '+csa.label+' <' : '')+'====================');
|
||
logCallstackSub(csa.stack);
|
||
return true;
|
||
}
|
||
logCS(line);
|
||
return false;
|
||
});
|
||
},
|
||
logCallstack = function(){
|
||
var cs;
|
||
if(config.debugMode){
|
||
cs = getCallstack();
|
||
cs.shift();
|
||
log('==============================> CALLSTACK <==============================');
|
||
logCallstackSub(cs);
|
||
log('=========================================================================');
|
||
}
|
||
},
|
||
|
||
|
||
wrapCallback = function (label, callback, context){
|
||
var callstack;
|
||
if('function' === typeof label){
|
||
context=callback;
|
||
callback=label;
|
||
label=undefined;
|
||
}
|
||
if(!config.debugMode){
|
||
return (function(cb,ctx){
|
||
return function(){
|
||
cb.apply(ctx||{},arguments);
|
||
};
|
||
}(callback,context));
|
||
}
|
||
|
||
callstack = getCallstack();
|
||
callstack.shift();
|
||
|
||
return (function(cb,ctx,cs,lbl){
|
||
var ctxref=registerCallstack(cs,lbl);
|
||
|
||
/*jshint -W054 */
|
||
return new Function('cb','ctx','TASlog',
|
||
"return function TAS_CALLSTACK_"+ctxref+"(){"+
|
||
"TASlog('Entering: '+(cb.name||'(anonymous function)'));"+
|
||
"cb.apply(ctx||{},arguments);"+
|
||
"TASlog('Exiting: '+(cb.name||'(anonymous function)'));"+
|
||
"};")(cb,ctx,log);
|
||
/*jshint +W054 */
|
||
}(callback,context,callstack,label));
|
||
},
|
||
|
||
|
||
prepareUpdate = function( attribute, value ){
|
||
queuedUpdates[attribute]=value;
|
||
},
|
||
|
||
applyQueuedUpdates = function() {
|
||
setAttrs(queuedUpdates);
|
||
queuedUpdates = {};
|
||
},
|
||
|
||
namesFromArgs = function(args,base){
|
||
return _.chain(args)
|
||
.reduce(function(memo,attr){
|
||
if('string' === typeof attr) {
|
||
memo.push(attr);
|
||
} else if(_.isArray(args) || _.isArguments(args)){
|
||
memo = namesFromArgs(attr,memo);
|
||
}
|
||
return memo;
|
||
},(_.isArray(base) && base) || [])
|
||
.uniq()
|
||
.value();
|
||
},
|
||
|
||
addId = function(obj,value){
|
||
Object.defineProperty(obj,'id',{
|
||
value: value,
|
||
writeable: false,
|
||
enumerable: false
|
||
});
|
||
},
|
||
|
||
addProp = function(obj,prop,value,fullname){
|
||
(function(){
|
||
var pname=(_.contains(['S','F','I','D'],prop) ? '_'+prop : prop),
|
||
full_pname = fullname || prop,
|
||
pvalue=value;
|
||
|
||
_.each(['S','I','F'],function(p){
|
||
if( !_.has(obj,p)){
|
||
Object.defineProperty(obj, p, {
|
||
value: {},
|
||
enumerable: false,
|
||
readonly: true
|
||
});
|
||
}
|
||
});
|
||
if( !_.has(obj,'D')){
|
||
Object.defineProperty(obj, 'D', {
|
||
value: _.reduce(_.range(10),function(m,d){
|
||
Object.defineProperty(m, d, {
|
||
value: {},
|
||
enumerable: true,
|
||
readonly: true
|
||
});
|
||
return m;
|
||
},{}),
|
||
enumerable: false,
|
||
readonly: true
|
||
});
|
||
}
|
||
|
||
|
||
// Raw value
|
||
Object.defineProperty(obj, pname, {
|
||
enumerable: true,
|
||
set: function(v){
|
||
if(v!==pvalue) {
|
||
pvalue=v;
|
||
prepareUpdate(full_pname,v);
|
||
}
|
||
},
|
||
get: function(){
|
||
return pvalue;
|
||
}
|
||
});
|
||
|
||
// string value
|
||
Object.defineProperty(obj.S, pname, {
|
||
enumerable: true,
|
||
set: function(v){
|
||
var val=v.toString();
|
||
if(val !== pvalue) {
|
||
pvalue=val;
|
||
prepareUpdate(full_pname,val);
|
||
}
|
||
},
|
||
get: function(){
|
||
return pvalue.toString();
|
||
}
|
||
});
|
||
|
||
// int value
|
||
Object.defineProperty(obj.I, pname, {
|
||
enumerable: true,
|
||
set: function(v){
|
||
var val=parseInt(v,10) || 0;
|
||
if(val !== pvalue){
|
||
pvalue=val;
|
||
prepareUpdate(full_pname,val);
|
||
}
|
||
},
|
||
get: function(){
|
||
return parseInt(pvalue,10) || 0;
|
||
}
|
||
});
|
||
|
||
// float value
|
||
Object.defineProperty(obj.F, pname, {
|
||
enumerable: true,
|
||
set: function(v){
|
||
var val=parseFloat(v) || 0;
|
||
if(val !== pvalue) {
|
||
pvalue=val;
|
||
prepareUpdate(full_pname,val);
|
||
}
|
||
},
|
||
get: function(){
|
||
return parseFloat(pvalue) || 0;
|
||
}
|
||
});
|
||
_.each(_.range(10),function(d){
|
||
Object.defineProperty(obj.D[d], pname, {
|
||
enumerable: true,
|
||
set: function(v){
|
||
var val=(parseFloat(v) || 0).toFixed(d);
|
||
if(val !== pvalue){
|
||
pvalue=val;
|
||
prepareUpdate(full_pname,val);
|
||
}
|
||
},
|
||
get: function(){
|
||
return (parseFloat(pvalue) || 0).toFixed(d);
|
||
}
|
||
});
|
||
});
|
||
|
||
}());
|
||
},
|
||
|
||
repeating = function( section ) {
|
||
return (function(s){
|
||
var sectionName = s,
|
||
attrNames = [],
|
||
fieldNames = [],
|
||
operations = [],
|
||
after = [],
|
||
|
||
repAttrs = function TAS_Repeating_Attrs(){
|
||
attrNames = namesFromArgs(arguments,attrNames);
|
||
return this;
|
||
},
|
||
repFields = function TAS_Repeating_Fields(){
|
||
fieldNames = namesFromArgs(arguments,fieldNames);
|
||
return this;
|
||
},
|
||
repReduce = function TAS_Repeating_Reduce(func, initial, final, context) {
|
||
operations.push({
|
||
type: 'reduce',
|
||
func: (func && _.isFunction(func) && func) || _.noop,
|
||
memo: (_.isUndefined(initial) && 0) || initial,
|
||
final: (final && _.isFunction(final) && final) || _.noop,
|
||
context: context || {}
|
||
});
|
||
return this;
|
||
},
|
||
repMap = function TAS_Repeating_Map(func, final, context) {
|
||
operations.push({
|
||
type: 'map',
|
||
func: (func && _.isFunction(func) && func) || _.noop,
|
||
final: (final && _.isFunction(final) && final) || _.noop,
|
||
context: context || {}
|
||
});
|
||
return this;
|
||
},
|
||
repEach = function TAS_Repeating_Each(func, final, context) {
|
||
operations.push({
|
||
type: 'each',
|
||
func: (func && _.isFunction(func) && func) || _.noop,
|
||
final: (final && _.isFunction(final) && final) || _.noop,
|
||
context: context || {}
|
||
});
|
||
return this;
|
||
},
|
||
repTap = function TAS_Repeating_Tap(final, context) {
|
||
operations.push({
|
||
type: 'tap',
|
||
final: (final && _.isFunction(final) && final) || _.noop,
|
||
context: context || {}
|
||
});
|
||
return this;
|
||
},
|
||
repAfter = function TAS_Repeating_After(callback,context) {
|
||
after.push({
|
||
callback: (callback && _.isFunction(callback) && callback) || _.noop,
|
||
context: context || {}
|
||
});
|
||
return this;
|
||
},
|
||
repExecute = function TAS_Repeating_Execute(callback,context){
|
||
var rowSet = {},
|
||
attrSet = {},
|
||
fieldIds = [],
|
||
fullFieldNames = [];
|
||
|
||
repAfter(callback,context);
|
||
|
||
// call each operation per row.
|
||
// call each operation's final
|
||
getSectionIDs("repeating_"+sectionName,function(ids){
|
||
fieldIds = ids;
|
||
fullFieldNames = _.reduce(fieldIds,function(memo,id){
|
||
return memo.concat(_.map(fieldNames,function(name){
|
||
return 'repeating_'+sectionName+'_'+id+'_'+name;
|
||
}));
|
||
},[]);
|
||
getAttrs( _.uniq(attrNames.concat(fullFieldNames)), function(values){
|
||
_.each(attrNames,function(aname){
|
||
if(values.hasOwnProperty(aname)){
|
||
addProp(attrSet,aname,values[aname]);
|
||
}
|
||
});
|
||
|
||
rowSet = _.reduce(fieldIds,function(memo,id){
|
||
var r={};
|
||
addId(r,id);
|
||
_.each(fieldNames,function(name){
|
||
var fn = 'repeating_'+sectionName+'_'+id+'_'+name;
|
||
addProp(r,name,values[fn],fn);
|
||
});
|
||
|
||
memo[id]=r;
|
||
|
||
return memo;
|
||
},{});
|
||
|
||
_.each(operations,function(op){
|
||
var res;
|
||
switch(op.type){
|
||
case 'tap':
|
||
_.bind(op.final,op.context,rowSet,attrSet)();
|
||
break;
|
||
|
||
case 'each':
|
||
_.each(rowSet,function(r){
|
||
_.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
|
||
});
|
||
_.bind(op.final,op.context,rowSet,attrSet)();
|
||
break;
|
||
|
||
case 'map':
|
||
res = _.map(rowSet,function(r){
|
||
return _.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
|
||
});
|
||
_.bind(op.final,op.context,res,rowSet,attrSet)();
|
||
break;
|
||
|
||
case 'reduce':
|
||
res = op.memo;
|
||
_.each(rowSet,function(r){
|
||
res = _.bind(op.func,op.context,res,r,attrSet,r.id,rowSet)();
|
||
});
|
||
_.bind(op.final,op.context,res,rowSet,attrSet)();
|
||
break;
|
||
}
|
||
});
|
||
|
||
// finalize attrs
|
||
applyQueuedUpdates();
|
||
_.each(after,function(op){
|
||
_.bind(op.callback,op.context)();
|
||
});
|
||
});
|
||
});
|
||
};
|
||
|
||
return {
|
||
attrs: repAttrs,
|
||
attr: repAttrs,
|
||
|
||
column: repFields,
|
||
columns: repFields,
|
||
field: repFields,
|
||
fields: repFields,
|
||
|
||
reduce: repReduce,
|
||
inject: repReduce,
|
||
foldl: repReduce,
|
||
|
||
map: repMap,
|
||
collect: repMap,
|
||
|
||
each: repEach,
|
||
forEach: repEach,
|
||
|
||
tap: repTap,
|
||
'do': repTap,
|
||
|
||
after: repAfter,
|
||
last: repAfter,
|
||
done: repAfter,
|
||
|
||
execute: repExecute,
|
||
go: repExecute,
|
||
run: repExecute
|
||
};
|
||
}(section));
|
||
},
|
||
|
||
|
||
repeatingSimpleSum = function(section, field, destination){
|
||
repeating(section)
|
||
.attr(destination)
|
||
.field(field)
|
||
.reduce(function(m,r){
|
||
return m + (r.F[field]);
|
||
},0,function(t,r,a){
|
||
a.S[destination]=t;
|
||
})
|
||
.execute();
|
||
};
|
||
|
||
|
||
|
||
return {
|
||
/* Repeating Sections */
|
||
repeatingSimpleSum: repeatingSimpleSum,
|
||
repeating: repeating,
|
||
|
||
/* Configuration */
|
||
config: setConfigOption,
|
||
|
||
/* Debugging */
|
||
callback: wrapCallback,
|
||
callstack: logCallstack,
|
||
debugMode: debugMode,
|
||
_fn: wrapCallback,
|
||
|
||
/* Logging */
|
||
debug: logDebug,
|
||
error: logError,
|
||
warn: logWarn,
|
||
info: logInfo,
|
||
notice: logNotice,
|
||
log: logLog
|
||
};
|
||
}());
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</script>
|
||
|
||
|
||
|
||
|