Files
roll20-character-sheets/GURPS/gurps.html
T
Klingon Mike 763f552528 [GURPS] Big fix, Cosmetic Changes
Changed the PULL date for version 1.4.7 to 12/04/2018 – Cosmetic Only
Changed the width of the REF field in Advantages, Disadvantages, Skills, Techniques, and Possessions – Cosmetic Only
Removed the visual cue for editable fields on the General Tab – Requested by MANY – Cosmetic Only
Added highlighted light gray color for calculated fields on all pages – Cosmetics Only
Removed the blue highlight from Melee and Ranged attacks as it is no longer needed – Cosmetic Only
Fixed alert indicating to use whole number on attributes that can be up to 2 or 3 decimal places in value in the Inventory section - Cosmetic Only
Resized the Life and Moving box and the Encumbrance box for FUTURE upgrades - Cosmetic Only
2018-12-17 03:41:42 -08:00

3894 lines
148 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div class="sheet-wrapper">
<!-- HIDDEN FIELDS -->
<input type="hidden" name="attr_10" value="10" disabled="disabled" />
<input type="hidden" name="attr_VS" value="vs:" disabled="disabled" />
<input type="hidden" name="attr_languages_points" value="0" />
<input type="hidden" name="attr_cf_points" value="0" />
<input type="hidden" name="attr_advantages_points" value="0" />
<input type="hidden" name="attr_disadvantages_points" value="0" />
<input type="hidden" name="attr_racial_points" value="0" />
<input type="hidden" name="attr_skills_points" value="0" />
<input type="hidden" name="attr_techniques_points" value="0" />
<input type="hidden" name="attr_spells_points" value="0" />
<!-- /HIDDEN FIELDS -->
<!-- ===== ===== ===== ===== TABS ===== ===== ===== ===== -->
<input type="radio" name="attr_tab" value="1" class="sheet-tab sheet-tab1" checked="checked" /><span>General</span>
<input type="radio" name="attr_tab" value="2" class="sheet-tab sheet-tab2" title="Languages, Advantages, Disadvantages, and Cultural Familiarities" /><span>Traits</span>
<input type="radio" name="attr_tab" value="3" class="sheet-tab sheet-tab3" title="Skills and Techniques" /><span>Skills</span>
<input type="radio" name="attr_tab" value="4" class="sheet-tab sheet-tab4" /><span>Combat</span>
<input type="radio" name="attr_tab" value="5" class="sheet-tab sheet-tab5" /><span>Inventory</span>
<input type="radio" name="attr_tab" value="6" class="sheet-tab sheet-tab6" /><span>Grimoire</span>
<input type="radio" name="attr_tab" value="7" class="sheet-tab sheet-tab7" /><span>Updates</span>
<input type="radio" name="attr_tab" value="0" class="sheet-tab sheet-tab0" /><span title="Sheet Options">y</span>
<div class="sheet-tab-br"></div>
<!-- ===== ===== ===== ===== GENERAL TAB ===== ===== ===== ===== -->
<div class="sheet-tab1">
<!-- _____ _____ ATTRIBUTE BOX _____ _____ -->
<div class="sheet-box sheet-attribute">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Attributes</div>
<div class="sheet-cell sheet-col1">
<div class="sheet-popup">Mod</div>
<span class="sheet-tooltip">
A modifier that will be applied to your
<br />
attribute. All derived attributes draw their<br />
base from your unmodified attributes.<br />
Therefore this MOD will generally only<br />
affect direct attribute rolls and skill rolls.
</span>
</div>
<div class="sheet-cell sheet-col2">Pts</div>
</div> <!-- .sheet-header -->
<div class="sheet-main-attribute">
<div class="sheet-row sheet-row-strength">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">ST</div>
<span class="sheet-tooltip">
Strength
<br />
10pts/level
<br />
Unmodified <span name="attr_strength_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_strength" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_strength_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_strength_points" value="0" step="10" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} ST [[@{strength} + @{modifier}]]" name="roll_vsST" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-dexterity">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">DX</div>
<span class="sheet-tooltip">
Dexterity
<br />
20pts/level
<br />
Unmodified: <span name="attr_dexterity_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_dexterity" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_dexterity_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dexterity_points" value="0" step="20" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} DX [[@{dexterity} + @{modifier}]]" name="roll_vsDX" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-intelligence">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">IQ</div>
<span class="sheet-tooltip">
Intelligence
<br />
20pts/level
<br />
Unmodified: <span name="attr_intelligence_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_intelligence" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_intelligence_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_intelligence_points" value="0" step="20" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} IQ [[@{intelligence} + @{modifier}]]" name="roll_vsIQ" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-health">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">HT</div>
<span class="sheet-tooltip">
Health
<br />
10pts/level
<br />
Unmodified: <span name="attr_health_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_health" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_health_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_health_points" value="0" step="10" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} HT [[@{health} + @{modifier}]]" name="roll_vsHT" />
</div>
</div> <!-- .sheet-row -->
</div>
<div class="sheet-row sheet-row-perception sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Per</div>
<span class="sheet-tooltip">
Perception
<br />
Based on Intelligence
<br />
5pts/level
<br />
Unmodified: <span name="attr_perception_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_perception" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_perception_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_perception_points" value="0" step="5" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} Per [[@{perception} + @{modifier}]]" name="roll_vsPer" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-vision">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Vision</div>
<span class="sheet-tooltip">
Visual Perception
<br />
Based on Perception
<br />
2pts/level
<br />
Unmodified: <span name="attr_vision_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_vision" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_vision_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_vision_points" value="0" step="2" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} Vision [[@{vision} + @{modifier}]]" name="roll_vsVision" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-hearing">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Hearing</div>
<span class="sheet-tooltip">
Audio Perception
<br />
Based on Perception
<br />
2pts/level
<br />
Unmodified: <span name="attr_hearing_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_hearing" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_hearing_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_hearing_points" value="0" step="2" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} Hearing [[@{hearing} + @{modifier}]]" name="roll_vsHearing" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-taste-smell">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Smell</div>
<span class="sheet-tooltip">
Taste & Smell Perception
<br />
Based on Perception
<br />
2pts/level
<br />
Unmodified: <span name="attr_taste_smell_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_taste_smell" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_taste_smell_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_taste_smell_points" value="0" step="2" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} Taste or Smell [[@{taste_smell} + @{modifier}]]" name="roll_vsTasteSmell" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-touch">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Touch</div>
<span class="sheet-tooltip">
Touch Perception
<br />
Based on Perception
<br />
2pts/level
<br />
Unmodified: <span name="attr_touch_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_touch" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_touch_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_touch_points" value="0" step="2" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} Touch [[@{touch} + @{modifier}]]" name="roll_vsTouch" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-willpower sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Will</div>
<span class="sheet-tooltip">
Willpower
<br />
Based on Intelligence
<br />
5pts/level
<br />
Unmodified: <span name="attr_willpower_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_willpower" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_willpower_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_willpower_points" value="0" step="5" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} Will [[@{willpower} + @{modifier}]]" name="roll_vsWill" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-fear">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Fright</div>
<span class="sheet-tooltip">
Fear Check
<br />
Based on Willpower
<br />
2pts/level
<br />
Unmodified: <span name="attr_fear_check_base"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_fear_check" value="10" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_fear_check_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_fear_check_points" value="0" step="2" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} Fright [[@{fear_check} + @{modifier}]]" name="roll_vsFearCheck" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-basic-speed sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Speed</div>
<span class="sheet-tooltip">
Basic Speed
<br />
Based on Health and Dexterity
<br />
5pts/0.25
<br />
Unmodified: <span name="attr_basic_speed_base" value="10"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_basic_speed" value="" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_basic_speed_mod" value="0" step="0.25" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_basic_speed_points" value="0" step="5" />
</div>
<div class="sheet-cell sheet-col4">
<button class="sheet-roll-tracker" type="roll" value="/em has a speed of [[@{basic_speed} &{tracker}]]" name="roll_init" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-basic-move">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Move</div>
<span class="sheet-tooltip">
Basic Move
<br />
Based on Basic Speed
<br />
5pts/level
<br />
Unmodified: <span name="attr_basic_move_base" value="0"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_basic_move" value="" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_basic_move_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_basic_move_points" value="0" step="5" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-dodge">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Dodge</div>
<span class="sheet-tooltip">
Dodge
<br />
Based on Basic Speed
<br />
Unmodified: <span name="attr_dodge_base" value="0"></span>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_dodge" value="" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_dodge_mod" value="0" step="1" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-lift-st sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Lift ST</div>
<span class="sheet-tooltip">
Lifting Strength
<br />
Based on Strength
<br />
3pts/level
<br />
Unmodified: <input class="sheet-inline" type="number" name="attr_lift_st_base" readonly="readonly" >
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_lift_st" value="0" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_lift_st_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_lift_st_points" value="0" step="3" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-basic-lift">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Lift</div>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_basic_lift" value="0" readonly="readonly" >
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-strike-st sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Striking</div>
<span class="sheet-tooltip">
Striking Strength
<br />
Based on Strength
<br />
5pts/level
<br />
Unmodified: <input class="sheet-inline" type="number" name="attr_striking_st_base" readonly="readonly" >
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_striking_st" value="0" readonly="readonly" >
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_striking_st_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_striking_st_points" value="0" step="5" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-thrust-damage">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Thrust</div>
<span class="sheet-tooltip">
Thrust Damage
<br />
<div>See page 16 for the complete table.</div>
<table>
<thead><tr><th>Strength</th><th>Thrust</th></tr></thead>
<tbody>
<tr><td>1</td><td>1d6-6</td></tr>
<tr><td>2</td><td>1d6-6</td></tr>
<tr><td>3</td><td>1d6-5</td></tr>
<tr><td>4</td><td>1d6-5</td></tr>
<tr><td>5</td><td>1d6-4</td></tr>
<tr><td>6</td><td>1d6-4</td></tr>
<tr><td>7</td><td>1d6-3</td></tr>
<tr><td>8</td><td>1d6-3</td></tr>
<tr><td>9</td><td>1d6-2</td></tr>
<tr><td>10</td><td>1d6-2</td></tr>
<tr><td>11</td><td>1d6-1</td></tr>
<tr><td>12</td><td>1d6-1</td></tr>
<tr><td>13</td><td>1d6</td></tr>
</tbody>
</table>
<table>
<thead><tr><th>Strength</th><th>Thrust</th></tr></thead>
<tbody>
<tr><td>14</td><td>1d6</td></tr>
<tr><td>15</td><td>1d6+1</td></tr>
<tr><td>16</td><td>1d6+1</td></tr>
<tr><td>17</td><td>1d6+2</td></tr>
<tr><td>18</td><td>1d6+2</td></tr>
<tr><td>19</td><td>2d6-1</td></tr>
<tr><td>20</td><td>2d6-1</td></tr>
<tr><td>21</td><td>2d6</td></tr>
<tr><td>22</td><td>2d6</td></tr>
<tr><td>23</td><td>2d6+1</td></tr>
<tr><td>24</td><td>2d6+1</td></tr>
<tr><td>25</td><td>2d6+2</td></tr>
<tr><td>26</td><td>2d6+2</td></tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_thrust" value="1d6-2" />
</div>
<div class="sheet-cell sheet-col4">
<input type="hidden" name="attr_thrust_damage_dice_icon" class="thrust-damage-dice-icon" value="explode" />
<button type="roll" value="/roll @{thrust}" name="roll_dmgThrust" class="roll_damage" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-swing-damage">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Swing</div>
<span class="sheet-tooltip">
Swing Damage
<br />
<div>See page 16 for the complete table.</div>
<table>
<thead><tr><th>Strength</th><th>Swing</th></tr></thead>
<tbody>
<tr><td>1</td><td>1d6-5</td></tr>
<tr><td>2</td><td>1d6-5</td></tr>
<tr><td>3</td><td>1d6-4</td></tr>
<tr><td>4</td><td>1d6-4</td></tr>
<tr><td>5</td><td>1d6-3</td></tr>
<tr><td>6</td><td>1d6-3</td></tr>
<tr><td>7</td><td>1d6-2</td></tr>
<tr><td>8</td><td>1d6-2</td></tr>
<tr><td>9</td><td>1d6-1</td></tr>
<tr><td>10</td><td>1d6</td></tr>
<tr><td>11</td><td>1d6+1</td></tr>
<tr><td>12</td><td>1d6+2</td></tr>
<tr><td>13</td><td>2d6-1</td></tr>
</tbody>
</table>
<table>
<thead><tr><th>Strength</th><th>Swing</th></tr></thead>
<tbody>
<tr><td>14</td><td>2d6</td></tr>
<tr><td>15</td><td>2d6+1</td></tr>
<tr><td>16</td><td>2d6+2</td></tr>
<tr><td>17</td><td>3d6-1</td></tr>
<tr><td>18</td><td>3d6</td></tr>
<tr><td>19</td><td>3d6+1</td></tr>
<tr><td>20</td><td>3d6+2</td></tr>
<tr><td>21</td><td>4d6-1</td></tr>
<tr><td>22</td><td>4d6</td></tr>
<tr><td>23</td><td>4d6+1</td></tr>
<tr><td>24</td><td>4d6+2</td></tr>
<tr><td>25</td><td>5d6-1</td></tr>
<tr><td>26</td><td>5d6</td></tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_swing" value="1d6" />
</div>
<div class="sheet-cell sheet-col4">
<input type="hidden" name="attr_swing_damage_dice_icon" class="swing-damage-dice-icon" value="explode" />
<button type="roll" value="/roll @{swing}" name="roll_dmgSwing" class="roll_damage" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-flight sheet-hr" style="display: none;">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Flight</div>
<span class="sheet-tooltip">
Check to add air movement
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="checkbox" name="attr_flight_checked" value="1" class="sheet-boolean" />
</div>
<div class="sheet-cell sheet-col2">
&nbsp;
</div>
<div class="sheet-cell sheet-col3">
&nbsp;
</div>
</div> <!-- .sheet-row -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-attributes -->
<div class="sheet-box sheet-stats">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Stats</div>
<div class="sheet-cell sheet-col1">Value</div>
<div class="sheet-cell sheet-col2">Mod</div>
<div class="sheet-cell sheet-col3">Pts</div>
</div> <!-- .sheet-header -->
<div class="sheet-row sheet-row-hit-points">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Max HP</div>
<span class="sheet-tooltip">
Hit Points
<br />
Based on Strength
<br />
2pts/level
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_hit_points_max" value="10" readonly="readonly" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_hit_points_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_hit_points_points" value="0" step="2" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-current-points">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Current HP</div>
<span class="sheet-tooltip">
Current Hit Points
<br />
When you're hit points are low, you take penalties.
<br />
See Page 419.
<table>
<tbody>
<tr>
<td class="sheet-label">Reeling</td>
<td><input type="text" name="attr_hp_reeling" value="[[floor((@{hit_points|max}) / 3)]]" disabled="disabled"></td>
</tr>
<tr>
<td colspan="2">
- Halve Move, Speed, and Dodge
</td>
</tr>
<tr>
<td class="sheet-label">Verge of Collapse</td>
<td><input type="text" value="Less than 0" readonly="readonly" ></td>
</tr>
<tr>
<td colspan="2">
- Roll every turn @{VS} HT or fall unconscious.
<br />
- Your HT roll is at -1 for every 1xHP you are below 0.
<br />
- If you do nothing, and don't defend, you don't have to roll.
</td>
</tr>
<tr>
<td class="sheet-label">Verge of Death</td>
<td><input type="number" name="attr_hp_verge" value="[[(@{hit_points|max}) * -1]]" disabled="disabled"></td>
</tr>
<tr>
<td colspan="2">
- Roll once @{VS} HT to stay alive.
<br />
- If you fail by 1 or 2 you are mortally wounded, but not dead.
<br />
- Roll again every time you take injury that puts you below<br />
another multiple of your max HP.
</td>
</tr>
<tr>
<td class="sheet-label">Death</td>
<td><input type="number" name="attr_hp_death" value="[[(@{hit_points|max}) * -5]]" disabled="disabled"></td>
</tr>
<tr>
<td colspan="2">
- You are dead.
</td>
</tr>
<tr>
<td class="sheet-label">Total Destruction</td>
<td><input type="number" name="attr_hp_destruction" value="[[(@{hit_points|max}) * -10]]" disabled="disabled"></td>
</tr>
<tr>
<td colspan="2">
- Your body has been destroyed beyond recognition or ressurection.
</td>
</tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_hit_points" value="10" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-fatigue-points">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Max FP</div>
<span class="sheet-tooltip">
Fatigue Points
<br />
Based on Health
<br />
3pts/level
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_fatigue_points_max" value="10" readonly="readonly" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_fatigue_points_mod" value="0" step="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_fatigue_points_points" value="0" step="3" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-current-points">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Current FP</div>
<span class="sheet-tooltip">
Current Fatigue Points
<br />
When you're fatigue points are low you take penalties.
<br />
See Page 426.
<table>
<tbody>
<tr>
<td class="sheet-label">Tired</td>
<td><input type="number" name="attr_fp_tired" value="[[floor((@{fatigue_points|max}) / 3)]]" disabled="disabled"></td>
</tr>
<tr>
<td colspan="2">
- Halve Move, ST, and Dodge
</td>
</tr>
<tr>
<td class="sheet-label">Verge of Collapse</td>
<td><input type="text" value="Less than 0" disabled="disabled"></td>
</tr>
<tr>
<td colspan="2">
- Further FP loss also comes off your HP.
<br />
- Roll against Will to do anything besides rest or talk.
<br />
- If you fail your Will roll, you fall unconscious.
<br />
- On a critical failure, roll @{VS} HT or suffer a heart attack.
</td>
</tr>
<tr>
<td class="sheet-label">Unconscious</td>
<td><input type="number" name="attr_fp_unconscious" value="[[-(@{fatigue_points|max})]]" disabled="disabled"></td>
</tr>
<tr>
<td colspan="2">
- Immediately fall unconscious
<br />
- FP can't drop any lower, but you still lose HP.
<br />
- You regain consciousness at 0 FP
</td>
</tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_fatigue_points" value="10" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-energy-points">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Max ER</div>
<span class="sheet-tooltip">
Energy Reserve
<br />
Rules can vary depending on what<br />
magic system you are using.
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_energy_points_max" />
</div>
<div class="sheet-cell sheet-col2"></div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_energy_points_points" value="0" step="3" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-current-points">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Current ER</div>
<span class="sheet-tooltip">
Current Energy Reserve
<br />
Rules can vary.
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_energy_points" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_user_pool1_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_user_pool1_max" />
</div>
<div class="sheet-cell sheet-col2"></div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_user_pool1_points" value=0 />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-current-points">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Current</div>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_user_pool1" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_user_pool2_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_user_pool2_max" />
</div>
<div class="sheet-cell sheet-col2"></div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_user_pool2_points" value=0 />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-sub-row sheet-row-current-points">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Current</div>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_user_pool2" value="0" />
</div>
</div> <!-- .sheet-row -->
</div>
</div>
<!-- _____ _____ MISCELLENEOUS BOX _____ _____ -->
<div class="sheet-box sheet-miscelleneous">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Miscellaneous</div>
<div class="sheet-cell sheet-col1">Pts</div>
</div> <!-- .sheet-header -->
<div class="sheet-row sheet-row-tech-level">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Tech Level</div>
<span class="sheet-tooltip">
This is the technology level that you character is familiar with.
<br />
It costs 5 points to raise this above or below the campaign"s<br />normal TL.
<div class="sheet-clearfix"></div>
<table style="text-align: left;">
<tbody>
<tr><td>TL0</td><td>Stone Age (Prehistory and later). </td></tr>
<tr><td>TL1</td><td>Bronze Age (3500 B.C.+).</td></tr>
<tr><td>TL2</td><td>Iron Age (1200 B.C.+).</td></tr>
<tr><td>TL3</td><td>Medieval (600 A.D.+).</td></tr>
<tr><td>TL4</td><td>Age of Sail (1450+).</td></tr>
<tr><td>TL5</td><td>Industrial Revolution (1730+).</td></tr>
<tr><td>TL6</td><td>Mechanized Age (1880+).</td></tr>
<tr><td>TL7</td><td>Nuclear Age (1940+).</td></tr>
<tr><td>TL8</td><td>Digital Age (1980+).</td></tr>
<tr><td>TL9</td><td>Microtech Age (2025+?).</td></tr>
<tr><td>TL10</td><td>Robotic Age (2070+?).</td></tr>
<tr><td>TL11</td><td>Age of Exotic Matter.</td></tr>
<tr><td>TL12+</td><td>Whatever the GM likes!</td></tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_tl" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" step="5" name="attr_tl_pts" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-appearance">
<div class="sheet-cell sheet-col0 sheet-label">
Appearance
</div>
<div class="sheet-cell sheet-col1">
<select name="attr_appearance">
<option value="-24">Horrific (-6)</option>
<option value="-20">Monstrous (-5)</option>
<option value="-16">Hideous (-4)</option>
<option value="-8">Ugly (-2)</option>
<option value="-4">Unattractive (-1)</option>
<option value="0" selected="selected">Average</option>
<option value="4">Attractive (+1)</option>
<option value="12">Handsome (+4/2)</option>
<option value="16">Very Handsome (+6/2)</option>
<option value="20">Transcendent (+8/2)</option>
</select>
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_appearance_pts" value="@{appearance}" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-race">
<div class="sheet-cell sheet-col0 sheet-label">
Race
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_race" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-gender">
<div class="sheet-cell sheet-col0 sheet-label">
Gender
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_gender" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-size">
<div class="sheet-cell sheet-col0 sheet-label">
Size Modifier
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_size" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-hand">
<div class="sheet-cell sheet-col0 sheet-label">
Pri Hand
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hand" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-reactions">
<div class="sheet-cell sheet-col0 sheet-label">
Reactions
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_reactions" />
</div>
</div> <!-- .sheet-row -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-miscelleneous -->
<!-- _____ _____ POINT SUMMARY BOX _____ _____ -->
<div class="sheet-box sheet-points">
<div class="sheet-table">
<input type="hidden" name="attr_toggle_unspent_points" class="sheet-toggle-unspoint-points" value="0" />
<div class="sheet-header">
<div class="sheet-popup">Point Sum</div>
<span class="sheet-tooltip">
<strong>Total</strong>: Manual input: Represents to total value of the<br/>
PC in Character Points (spent and unspent combined).
<br />
<strong>Spent</strong>: Automatic total of Spent points: Attributes +<br/>
Traits + Skills + Other.
<br/>
<strong>Unspent</strong>: Has the option of being Manual or<br/>
Automatic, depending on an option selected on the
<br/>
Settings page entitled Enter Unspent Points.
<br/>
Manual Mode (Blue color): You manually enter your
<br/>
Unspent points.
<br/>
Automatic mode (Black color): It calculates the
<br/>
point total difference between Total and Spent.
</span>
</div> <!-- .sheet-header -->
<div class="sheet-row sheet-row-other">
<div class="sheet-cell sheet-col0 sheet-label">
Total
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_total_points" value="150" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-attributes sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
Attributes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_att_points" value="@{strength_points} + @{dexterity_points} + @{intelligence_points} + @{health_points} + @{perception_points} + @{vision_points} + @{hearing_points} + @{taste_smell_points} + @{touch_points} + @{willpower_points} + @{fear_check_points} + @{hit_points_points} + @{fatigue_points_points} + @{energy_points_points} + @{user_pool1_points} + @{user_pool2_points} + @{basic_speed_points} + @{basic_move_points} + @{striking_st_points} + @{lift_st_points}" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-traits">
<div class="sheet-cell sheet-col0 sheet-label">
Traits
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_trait_points" readonly="readonly" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-skills">
<div class="sheet-cell sheet-col0 sheet-label">
Skills
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_skill_points" disabled="disabled" value="@{skills_points} + @{techniques_points} + @{spells_points}" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-other">
<div class="sheet-cell sheet-col0 sheet-label">
Other
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_misc_points" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-other">
<div class="sheet-cell sheet-col0 sheet-label">
Spent
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_point_summary" disabled="disabled" value="@{att_points} + @{trait_points} + @{skill_points} + @{misc_points}" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-total sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
Unspent
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_point_diff" value="@{total_points} - (@{att_points} + @{trait_points} + @{skill_points} + @{misc_points})" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-unspent sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label sheet-unspent-points-label">
Unspent
</div>
<div class="sheet-cell sheet-col1 sheet-unspent-points">
<input type="text" name="attr_unspent_points" value="0" />
</div>
</div> <!-- .sheet-row -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-points -->
<!-- _____ _____ LIFTING BOX _____ _____ -->
<div class="sheet-box sheet-lift">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Lifting and Moving</div>
<div class="sheet-cell sheet-col1">Weight</div>
</div> <!-- .sheet-header -->
<div class="sheet-row sheet-row-simple-lift">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Simple Lift</div>
<span class="sheet-tooltip">
The weight the character can lift overhead<br />with one hand in one second.
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_simple_lift" value="round(@{basic_lift})" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-one-handed-lift">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">One-Handed Lift</div>
<span class="sheet-tooltip">
The weight the character can lift overhead<br />with one hand in two seconds.
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_one_hand_lift" value="round(2 * @{basic_lift})" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-two-handed-lift">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Two-Handed Lift</div>
<span class="sheet-tooltip">
The weight the character can lift overhead<br />with both hands in four seconds.
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_two_hand_lift" value="round(8 * @{basic_lift})" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-shove-knock-over">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Shove &amp; Knock Over</div>
<span class="sheet-tooltip">
The weight of an object the character can<br />shove and knock over.
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_shove_lift" value="round(12 * @{basic_lift})" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-running-shove-knock-over">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Running Shove &amp; Knock Over</div>
<span class="sheet-tooltip">
The weight of an object the character can<br />shove and knock over with a running start.
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_run_shove_lift" value="round(24 * @{basic_lift})" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-carry-on-back">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Carry On Back</div>
<span class="sheet-tooltip">
The weight the character can carry slung<br />over his/her back.
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_carry_back_lift" value="round(15 * @{basic_lift})" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-shift-slightly">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">Shift Slightly</div>
<span class="sheet-tooltip">
The weight of an object that the character<br />can shift slightly on a floor.
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_shift_lift" value="round(50 * @{basic_lift})" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-lift -->
<!-- _____ _____ ENCUMBERANCE BOX _____ _____ -->
<!-- Note: Many of the Move and Dodge calculations were complicated, this was to allow for a Minimum Move of 1 and a Minimum Dodge of 1 -->
<div class="sheet-box sheet-encumberance">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Encumberance</div>
<div class="sheet-cell sheet-col1">Load</div>
<div class="sheet-cell sheet-col2">Move</div>
<div class="sheet-cell sheet-col1" style="display: none;">Air</div>
<div class="sheet-cell sheet-col1" style="display: none;">Water</div>
<div class="sheet-cell sheet-col1" style="display: none;">Jump</div>
<div class="sheet-cell sheet-col3">Dodge</div>
</div>
<div class="sheet-row sheet-row-encumberance-0">
<div class="sheet-cell sheet-col0 sheet-label">
None (0)
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_lift_0" value="@{basic_lift}" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_0" value="@{basic_move}" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_air_0" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_water_0" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_jump_0" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_0" value="@{dodge} " disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-encumberance-1">
<div class="sheet-cell sheet-col0 sheet-label">
Light (1)
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_lift_1" value="2 * @{basic_lift}" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_1" value="[[((1 + floor((@{basic_move} * 0.8))) + abs(1 - floor((@{basic_move} * 0.8)))) / 2]]" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_air_1" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_water_1" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_jump_1" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_1" value="[[((1 + (@{dodge} - 1)) + abs(1 - (@{dodge} - 1))) / 2]]" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-encumberance-2">
<div class="sheet-cell sheet-col0 sheet-label">
Medium (2)
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_lift_2" value="floor(3 * @{basic_lift}*100)/100" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_2" value="[[((1 + floor((@{basic_move} * 0.6))) + abs(1 - floor((@{basic_move} * 0.6)))) / 2]]" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_air_2" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_water_2" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_jump_2" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_2" value="[[((1 + (@{dodge} - 2)) + abs(1 - (@{dodge} -2))) / 2]]" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-encumberance-3">
<div class="sheet-cell sheet-col0 sheet-label">
Heavy (3)
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_lift_3" value="floor(6 * @{basic_lift}*100)/100" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_3" value="[[((1 + floor((@{basic_move} * 0.4))) + abs(1 - floor((@{basic_move} * 0.4)))) / 2]]" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_air_3" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_water_3" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_jump_3" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_3" value="[[((1 + (@{dodge} - 3)) + abs(1 - (@{dodge} -3))) / 2]]" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-encumberance-4">
<div class="sheet-cell sheet-col0 sheet-label">
X-Heavy (4)
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_lift_4" value="10 * @{basic_lift}" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_4" value="[[((1 + floor((@{basic_move} * 0.2))) + abs(1 - floor((@{basic_move} * 0.2)))) / 2]]" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_air_4" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_water_4" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_jump_4" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_4" value="[[((1 + (@{dodge} -4)) + abs(1 - (@{dodge} - 4))) / 2]]" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<!-- Yes I realize encumbrance is spelled wrong here but the original authors misspelled it throughout the file so I did the same to stay backwards compatible. -->
<div class="sheet-row sheet-row-encumberance-MAX">
<div class="sheet-cell sheet-col0 sheet-label">
<div class="sheet-popup">MAX Load*</div>
<span class="sheet-tooltip">
Carry on Back (B353) 15xBL. Thus, you can carry
<br />
more than you can lift by yourself . . . but
<br />
every second that your encumbrance is over 10xBL
<br />
(that is Extra-Heavy encumbrance), you lose 1 FP.
<br />
</span>
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_lift_5" value="15 * @{basic_lift}" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_5" value="[[((1 + floor((@{basic_move} * 0.2))) + abs(1 - floor((@{basic_move} * 0.2)))) / 2]]" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_air_5" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_water_5" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_jump_5" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_5" value="[[((1 + (@{dodge} -4)) + abs(1 - (@{dodge} - 4))) / 2]]"disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-load sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
Current (<span name="attr_encumbrance_level" value=""></span>)
</div>
<div class="sheet-cell sheet-col1">
<input type="number" step=".001"name="attr_total_weight" value="" readonly="readonly" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_current_move" value="" readonly="readonly" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_current_air" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_current_water" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col1" style="display: none;">
<input type="number" name="attr_current_jump" value="0" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_current_dodge" value="" readonly="readonly" />
</div>
</div> <!-- .sheet-row -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-encumberance -->
</div> <!-- .sheet-tab1 -->
<!-- ===== ===== ===== ===== TRAITS TAB ===== ===== ===== ===== -->
<div class="sheet-tab2">
<!-- _____ _____ LANGUAGE BOX _____ _____ -->
<div class="sheet-box sheet-language">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Native Language</div>
<div class="sheet-cell sheet-col1">Spoken</div>
<div class="sheet-cell sheet-col2">Written</div>
<div class="sheet-cell sheet-col3">Pts</div>
</div> <!-- .sheet-header -->
<div class="sheet-row sheet-row-native-language">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" style="font-weight:bold;" name="attr_name_native_language" placeholder="-Enter Native Language here">
</div>
<div class="sheet-cell sheet-col1">
<select name="attr_native_language_spoken">
<option value="0" selected>Native</option>
<option value="-1">Accented</option>
<option value="-2">Broken</option>
<option value="-3">None</option>
</select>
</div>
<div class="sheet-cell sheet-col2">
<select name="attr_native_language_written">
<option value="0" selected>Native</option>
<option value="-1">Accented</option>
<option value="-2">Broken</option>
<option value="-3">None</option>
</select>
</div>
<div class="sheet-cell sheet-col3">
<input type="text" name="attr_native_language_points" value="@{native_language_spoken} + @{native_language_written}" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Learned Languages</div>
<div class="sheet-cell sheet-col1">Spoken</div>
<div class="sheet-cell sheet-col2">Written</div>
<div class="sheet-cell sheet-col3">Pts</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_languages">
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<select name="attr_spoken">
<option value="3">Native</option>
<option value="2">Accented</option>
<option value="1">Broken</option>
<option value="0" selected>None</option>
</select>
</div>
<div class="sheet-cell sheet-col2">
<select name="attr_written">
<option value="3">Native</option>
<option value="2">Accented</option>
<option value="1">Broken</option>
<option value="0" selected>None</option>
</select>
</div>
<div class="sheet-cell sheet-col3">
<input type="text" name="attr_points" value="@{spoken} + @{written}" disabled="disabled" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_languages -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-language -->
<!-- _____ _____ CULTURE BOX _____ _____ -->
<div class="sheet-box sheet-culture">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Cultural Familiarities</div>
<div class="sheet-cell sheet-col1">Pts</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_cultures">
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_points" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_cultures -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-culture -->
<div class="sheet-clearfix"> </div>
<!-- _____ _____ ADVANTAGES BOX _____ _____ -->
<!-- this box uses the identifier "traits" for backwards compatibility -->
<div class="sheet-box sheet-traits">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Advantages (& Perks)</div>
<div class="sheet-cell sheet-col1">
<div class="sheet-popup">FOA</div>
<span class="sheet-tooltip">
Frequency of Appearance
<br />
<table>
<tbody>
<tr><td>15 or less><td></td>
<tr><td>12 or less><td></td>
<tr><td>9 or less><td></td>
<tr><td>6 or less><td></td>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col2"></div>
<div class="sheet-cell sheet-col3">Pts</div>
<div class="sheet-cell sheet-col4">Ref</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_traits">
<input class="sheet-toggle" type="checkbox" />
<span class="sheet-checkbox"></span>
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_foa" />
</div>
<div class="sheet-cell sheet-col2">
<button type="roll" value="@{roll} [[3d6]] @{VS} @{name} [[@{foa} + @{modifier}]]" name="roll_vsAFOA" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_points" />
</div>
<div class="sheet-cell sheet-col4">
<input type="text" name="attr_ref" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-details">
<div class="sheet-cell sheet-col0 sheet-label">
Notes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_notes" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_traits -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-traits -->
<!-- _____ _____ DISADVANTAGES BOX _____ _____ -->
<div class="sheet-box sheet-disadvantages">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Disadvantages (& Quirks)</div>
<div class="sheet-cell sheet-col1">
<div class="sheet-popup">SCN</div>
<span class="sheet-tooltip">
Self-control Number OR
<br />
Frequency of Appearance
<br />
<table>
<tbody>
<tr><td>15 or less</td></tr>
<tr><td>12 or less</td></tr>
<tr><td>9 or less</td></tr>
<tr><td>6 or less</td></tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col2"></div>
<div class="sheet-cell sheet-col3">Pts</div>
<div class="sheet-cell sheet-col4">Ref</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_disadvantages">
<input class="sheet-toggle" type="checkbox" />
<span class="sheet-checkbox"></span>
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_control_rating" />
</div>
<div class="sheet-cell sheet-col2">
<button type="roll" value="@{roll} [[3d6]] @{VS} @{name} [[@{control_rating} + @{modifier}]]" name="roll_vsDSCR" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_points" />
</div>
<div class="sheet-cell sheet-col4">
<input type="text" name="attr_ref" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-details">
<div class="sheet-cell sheet-col0 sheet-label">
Notes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_notes" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_disadvantages -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-disadvantages -->
<!-- _____ _____ RACIAL TRAITS BOX _____ _____ -->
<div class="sheet-box sheet-racial">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Racial Traits</div>
<div class="sheet-cell sheet-col1">
<div class="sheet-popup">SCN</div>
<span class="sheet-tooltip">
Self-control Number OR
<br />
Frequency of Appearance
<table>
<tbody>
<tr><td>15 or less</td></tr>
<tr><td>12 or less</td></tr>
<tr><td>9 or less</td></tr>
<tr><td>6 or less</td></tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col2"></div>
<div class="sheet-cell sheet-col3">Pts</div>
<div class="sheet-cell sheet-col4">Ref</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_racial">
<input class="sheet-toggle" type="checkbox" />
<span class="sheet-checkbox"></span>
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="number" name="attr_control_rating" />
</div>
<div class="sheet-cell sheet-col2">
<button type="roll" value="@{roll} [[3d6]] @{VS} @{name} [[@{control_rating} + @{modifier}]]" name="roll_vsRSCR" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_points" />
</div>
<div class="sheet-cell sheet-col4">
<input type="text" name="attr_ref" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-details">
<div class="sheet-cell sheet-col0 sheet-label">
Notes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_notes" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_racial -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-racial -->
</div> <!-- .sheet-tab2 -->
<!-- ===== ===== ===== ===== SKILLS TAB ===== ===== ===== ===== -->
<div class="sheet-tab3">
<!-- _____ _____ SKILLS BOX _____ _____ -->
<div class="sheet-box sheet-skills">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Skills</div>
<div class="sheet-cell sheet-col8"></div>
<div class="sheet-cell sheet-col1">TL</div>
<div class="sheet-cell sheet-col2">Level</div>
<div class="sheet-cell sheet-col3">Attr</div>
<div class="sheet-cell sheet-col4">Diff</div>
<div class="sheet-cell sheet-col5">Bonus</div>
<div class="sheet-cell sheet-col6">Pts</div>
<div class="sheet-cell sheet-col7">Ref</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_skills">
<input class="sheet-toggle" type="checkbox" />
<span class="sheet-checkbox"></span>
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col8">
<button type="roll" value="@{roll} [[3d6]] @{VS} @{name} [[@{level} + @{modifier}]]" name="roll_vsSL" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_tl" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_level" disabled="disabled" value="@{base} + @{difficulty} + @{bonus} + (floor((@{points} * 0.25) + 2) * ceil( ( ( @{points} - 2 ) + abs( @{points} - 2) ) / 256 ) + @{points} * abs( ceil( ( ( @{points} - 2 ) + abs( @{points} - 2) ) / 256 ) - 1 ))"/>
</div>
<div class="sheet-cell sheet-col3">
<select name="attr_base">
<option value="@{strength}">ST</option>
<option value="@{dexterity}">DX</option>
<option value="@{intelligence}">IQ</option>
<option value="@{health}">HT</option>
<option value="@{willpower}">Will</option>
<option value="@{perception}">Per</option>
<option value="10">10</option>
</select>
</div>
<div class="sheet-cell sheet-col4">
<select name="attr_difficulty">
<option value="-1">E</option>
<option value="-2">A</option>
<option value="-3">H</option>
<option value="-4">VH</option>
</select>
</div>
<div class="sheet-cell sheet-col5">
<input type="number" name="attr_bonus" value="0" />
</div>
<div class="sheet-cell sheet-col6">
<input type="number" name="attr_points" value="0" />
</div>
<div class="sheet-cell sheet-col7">
<input type="text" name="attr_ref" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-details">
<div class="sheet-cell sheet-col0 sheet-label">
Notes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_notes" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_skills -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-skills -->
<!-- _____ _____ TECHNIQUES BOX _____ _____ -->
<div class="sheet-box sheet-techniques">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Techniques</div>
<div class="sheet-cell sheet-col1">Parent</div>
<div class="sheet-cell sheet-col2">Min</div>
<div class="sheet-cell sheet-col3">Max</div>
<div class="sheet-cell sheet-col4">Level</div>
<div class="sheet-cell sheet-col5">Cost</div>
<div class="sheet-cell sheet-col6">Bonus</div>
<div class="sheet-cell sheet-col7">Pts</div>
<div class="sheet-cell sheet-col8">Ref</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_techniques">
<input class="sheet-toggle" type="checkbox" />
<span class="sheet-checkbox"></span>
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_parent" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_min" value="0" />
</div>
<div class="sheet-cell sheet-col3">
---
</div>
<div class="sheet-cell sheet-col4">
<input type="text" name="attr_level" disabled="disabled" value="@{min} + floor(@{points} / @{points_per_level}) + @{bonus}"/>
</div>
<div class="sheet-cell sheet-col5">
<input type="number" name="attr_points_per_level" value="1" />
</div>
<div class="sheet-cell sheet-col6">
<input type="number" name="attr_bonus" value="0" />
</div>
<div class="sheet-cell sheet-col7">
<input type="number" name="attr_points" value="0" />
</div>
<div class="sheet-cell sheet-col8">
<input type="text" name="attr_ref" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-details">
<div class="sheet-cell sheet-col0 sheet-label">
Notes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_notes" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_techniques -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-techniques -->
</div> <!-- .sheet-tab3 -->
<!-- ===== ===== ===== ===== COMBAT TAB ===== ===== ===== ===== -->
<div class="sheet-tab4">
<!-- _____ _____ HIT LOCATION BOX _____ _____ -->
<div class="sheet-box sheet-damage-reduction">
<div class="sheet-table">
<div class="sheet-header sheet-row-title">
<div class="sheet-cell sheet-col0">
Hit Location
</div>
</div> <!-- .sheet-header -->
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Where</div>
<div class="sheet-cell sheet-col1">
<div class="sheet-popup">Pen</div>
<span class="sheet-tooltip">
This is the <strong>Penalty</strong> <br />
applied to attack the <br />
specific location.
</span>
</div>
<div class="sheet-cell sheet-col2">DR</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-skull">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_skull" value="Skull" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_skull" value="-7" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_skull_dr_max" value="2" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-face">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_face" value="Face" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_face" value="-5" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_face_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-eyes">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_eyes" value="Eyes" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_eyes" value="-9" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_eyes_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-neck">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_neck" value="Neck" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_neck" value="-5" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_neck_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-arms">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_arms" value="Arms" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_arms" value="-2" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_arms_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-hands">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_hands" value="Hands" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_hands" value="-4" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_hands_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-torso">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_torso" value="Torso" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_torso" value="0" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_torso_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-vitals">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_vitals" value="Vitals" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_vitals" value="-3" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_vitals_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-groin">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_groin" value="Groin" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_groin" value="-3" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_groind_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-legs">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_legs" value="Legs" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_legs" value="-2" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_legs_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-feet">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_feet" value="Feet" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_feet" value="-4" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_feet_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-area">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name_area" value="Area" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty_area" value="n/a" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_area_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-header sheet-row-title">
<div class="sheet-cell sheet-col0">
User Created
</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_location">
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0 sheet-label">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hit_penalty" value="0" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
</fieldset>
</div> <!-- .sheet-table -->
<div class="speed-range-table"> <!-- .speed-range-table image-->
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/GURPS/Images/Speed_Range_Table.PNG" style="width:140px" alt="GURPS Speed\Range Tabke" />
</div> <!-- .speed-range-table image-->
</div> <!-- .sheet-box .sheet-damage-reduction -->
<!-- _____ _____ ACTIVE DEFENSE BOX _____ _____ -->
<div class="sheet-box sheet-active-defense">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Active Defenses</div>
<div class="sheet-cell sheet-col1">Type</div>
<div class="sheet-cell sheet-col2">
<div class="sheet-popup">Info</div>
<span class="sheet-tooltip">
<strong>F</strong>: this is a fencing weapon.
<br />
<strong>U</strong>: the weapon is unbalanced. You cannot use it to<br />
parry if you've already attacked with it this turn<br /> (and vice versa).
</span>
</div>
<div class="sheet-cell sheet-col3">Skill</div>
</div> <!-- .sheet-header -->
<div class="sheet-row sheet-row-stats sheet-row-standard">
<div class="sheet-cell sheet-col0">
<div class="sheet-popup">[Optional] Apply Combat Reflexes to Dodge and Fear Modifiers</div>
<span class="sheet-tooltip sheet-ad-col0-tooltip">
Quickly add +1 Dodge modifier and
+2 Fright modifier on the General tab.
</span>
</div>
<div class="sheet-cell sheet-col1">&nbsp;</div>
<div class="sheet-cell sheet-col2">&nbsp;</div>
<div class="sheet-cell sheet-col3">
<input type="checkbox" class="sheet-boolean" name="attr_combat_reflexes" value="1" />
</div>
<div class="sheet-cell sheet-col4">&nbsp;</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-stats sheet-row-standard">
<div class="sheet-cell sheet-col0">Dodge</div>
<div class="sheet-cell sheet-col1">Dodge</div>
<div class="sheet-cell sheet-col2"></div>
<div class="sheet-cell sheet-col3"><input type="text" name="attr_ad_dodge_skill" value="@{current_dodge}" disabled="disabled" /></div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} Dodge [[@{current_dodge} + @{modifier}]]" name="roll_vsDodge" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-stats sheet-row-standard">
<div class="sheet-cell sheet-col0">Dodge and Retreat</div>
<div class="sheet-cell sheet-col1">Dodge</div>
<div class="sheet-cell sheet-col2"></div>
<div class="sheet-cell sheet-col3"><input type="text" name="attr_ad_dodge_retreat_skill" value="@{current_dodge} + 3" disabled="disabled" /></div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} Dodge and Retreat [[@{current_dodge} + @{modifier} + 3]]" name="roll_vsDodgeRetreat" />
</div>
</div> <!-- .sheet-row -->
<fieldset class="repeating_defense">
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<select name="attr_type">
<option>Dodge</option>
<option>Parry</option>
<option>Block</option>
<option>Magic</option>
<option>Other</option>
</select>
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_info" />
</div>
<div class="sheet-cell sheet-col3">
<input type="text" name="attr_skill" />
</div>
<div class="sheet-cell sheet-col4">
<button type="roll" value="@{roll} [[3d6]] @{VS} @{name} [[@{skill} + @{modifier}]]" name="roll_vsSL" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_defense -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-active-defense -->
<!-- _____ _____ MELEE ATTACKS BOX _____ _____ -->
<div class="sheet-box sheet-melee-attacks">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Melee Attacks</div>
<div class="sheet-cell sheet-col1">
<div class="sheet-popup">Damage</div>
<span class="sheet-tooltip">
<strong>Armor Divisor</strong>: A number in parenthesis after<br />
the damage - eg. (2) - is an armor divisor.
<br />
Enter this number as AD(#) or as
<br />
Armor Divisor(#) in the Damage Notes.
<br />
<strong>ex</strong>: indicates the attack causes an explosion.<br />
See page 269. Enter in the Damage Notes
</span>
</div>
<div class="sheet-cell sheet-col2">
<div class="sheet-popup"> </div>
<span class="sheet-tooltip">
Damage Macro
</span>
</div>
<div class="sheet-cell sheet-col3">
<div class="sheet-popup">Type</div>
<span class="sheet-tooltip">
<table>
<thead>
<tr>
<th>Abbr</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr><td>cut</td> <td>Cutting</td></tr>
<tr><td>imp</td> <td>Impaling</td></tr>
<tr><td>cr</td> <td>Crushing</td></tr>
<tr><td>pi-</td> <td>Small Piercing</td></tr>
<tr><td>pi</td> <td>Piercing</td></tr>
<tr><td>pi+</td> <td>Large Piercing</td></tr>
<tr><td>pi++</td><td>Huge Piercing</td></tr>
<tr><td>aff</td> <td>Affliction</td></tr>
<tr><td>burn</td><td>Burning</td></tr>
<tr><td>cor</td> <td>Corrosion</td></tr>
<tr><td>fat</td> <td>Fatigue</td></tr>
<tr><td>tox</td> <td>Toxic</td></tr>
<tr><td>spec</td><td>Special</td></tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col4">
<div class="sheet-popup">Reach</div>
<span class="sheet-tooltip">
The distance in yards that the weapon can reach.
<br />
<strong>C</strong>: this weapon can be used in close combat.
<br />
<strong>*</strong>: the weapon is awkward, and requires a Ready<br />
maneuver to switch between different reaches.
</span>
</div>
<div class="sheet-cell sheet-col5">
<span style="background-color: #87CEFA">| skill |</span>
</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_melee">
<input class="sheet-toggle" type="checkbox" />
<span class="sheet-checkbox"></span>
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_damage" />
</div>
<div class="sheet-cell sheet-col2">
<input type="hidden" name="attr_damage_dice_icon" class="melee-damage-dice-icon" value="explode" />
<button type="roll" value="@{roll} [[@{damage}]] @{type} damage. (@{name}) **Notes: ** @{damage_notes}" name="roll_damage" class="roll_damage" />
</div>
<div class="sheet-cell sheet-col3">
<select name="attr_type">
<option value="Cutting (cut)">cut</option>
<option value="Impaling (imp)">imp</option>
<option value="Crushing (cr)">cr</option>
<option value="Small Piercing (pi-)">pi-</option>
<option value="Piercing (pi)">pi</option>
<option value="Large Piercing (pi+)">pi+</option>
<option value="Huge Piercing (pi++)">pi++</option>
<option value="Affliction (aff)">aff</option>
<option value="Burning (burn)">burn</option>
<option value="Corrosion (cor)">cor</option>
<option value="Fatigue (fat)">fat</option>
<option value="Toxic (tox)">tox</option>
<option value="Special (spec)">spec</option>
</select>
</div>
<div class="sheet-cell sheet-col4">
<input type="text" name="attr_reach" />
</div>
<div class="sheet-cell sheet-col5">
<input type="text" name="attr_skill" />
</div>
<div class="sheet-cell sheet-col6">
<button type="roll" value="@{roll} [[3d6]] @{VS} @{name} [[@{skill} + @{modifier}]] **Notes:** @{notes}" name="roll_vsSL" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-details2">
<div class="sheet-cell sheet-col0 sheet-label">
Weapon Notes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_notes" />
</div>
<div class="sheet-cell sheet-col2 sheet-label">
Damage Notes
</div>
<div class="sheet-cell sheet-col3">
<input type="text" name="attr_damage_notes" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_melee -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-melee-attacks -->
<!-- _____ _____ RANGED ATTACKS BOX _____ _____ -->
<div class="sheet-box sheet-ranged-attacks">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Ranged Attacks</div>
<div class="sheet-cell sheet-col1">
<div class="sheet-popup">Damage</div>
<span class="sheet-tooltip">
<strong>Armor Divisor</strong>: A number in parenthesis after<br />
the damage - eg. (2) - is an armor divisor.<br />
Enter this number as AD(#) or as<br />
Armor Divisor(#) in the Damage Notes.
<br />
<strong>ex</strong>: indicates the attack causes an explosion.<br />
<strong>[#d]</strong>: indicates the attack causes fragmentation.<br />
See page 269.
</span>
</div>
<div class="sheet-cell sheet-col2"> </div>
<div class="sheet-cell sheet-col3">
<div class="sheet-popup">Type</div>
<span class="sheet-tooltip">
<table>
<thead>
<tr>
<th>Abbr</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr><td>cut</td> <td>Cutting</td></tr>
<tr><td>imp</td> <td>Impaling</td></tr>
<tr><td>cr</td> <td>Crushing</td></tr>
<tr><td>pi-</td> <td>Small Piercing</td></tr>
<tr><td>pi</td> <td>Piercing</td></tr>
<tr><td>pi+</td> <td>Large Piercing</td></tr>
<tr><td>pi++</td><td>Huge Piercing</td></tr>
<tr><td>aff</td> <td>Affliction</td></tr>
<tr><td>burn</td><td>Burning</td></tr>
<tr><td>cor</td> <td>Corrosion</td></tr>
<tr><td>fat</td> <td>Fatigue</td></tr>
<tr><td>tox</td> <td>Toxic</td></tr>
<tr><td>spec</td><td>Special</td></tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col4">Acc</div>
<div class="sheet-cell sheet-col5">
<div class="sheet-popup">RNG</div>
<span class="sheet-tooltip">
See page 269.
</span>
</div>
<div class="sheet-cell sheet-col6">
<div class="sheet-popup">RoF</div>
<span class="sheet-tooltip">
Rate of Fire
<br />
The maximum number of shots that can be fired in <br />
one turn (by a regular person).
<br />
The minimum number of shots is 1.
<br /><br />
<strong>!</strong>: minimum RoF is 1/4 of the maximum, rounded up.
<br />
<strong>mxn</strong>: fires the first number of shots, which each then<br />
split into the second number (eg. shotguns)
<br />
<strong>Jet</strong>: shoots a continuous stream of fliud. See page 106.
</span>
</div>
<div class="sheet-cell sheet-col7">
<div class="sheet-popup">Shots</div>
<span class="sheet-tooltip">
The number of shots that can be fired before the<br />
weapon must be reloaded.<br />
The parenthetical number indicates the number of 1<br />
second ready maneuvers required to reload the<br />
weapon.<br />
<strong>T</strong>: the weapon is thrown. To "reload" it, pick it up.<br />
<strong>i</strong>: you must load the shots individually. the listed<br />
time is for each shot.
</span>
</div>
<div class="sheet-cell sheet-col8">Bulk</div>
<div class="sheet-cell sheet-col9">
<div class="sheet-popup">RCL</div>
<span class="sheet-tooltip">
When firing at RoF 2+, every full multiple of Rcl<br />
by which you make your attack roll means you score<br />
one extra hit, to a maximum number of hits equal<br />
to total shots fired. See page 373.
</span>
</div>
<div class="sheet-cell sheet-col10">
<span style="background-color: #87CEFA">| skill |</span>
</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_ranged">
<input class="sheet-toggle" type="checkbox" />
<span class="sheet-checkbox"></span>
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_damage" />
</div>
<div class="sheet-cell sheet-col2">
<input type="hidden" name="attr_damage_dice_icon" class="range-damage-dice-icon" value="explode" />
<button type="roll" value="@{roll} [[@{damage}]] @{type} damage. (@{name}) **Notes: ** @{damage_notes}" name="roll_damage" class="roll_damage" />
</div>
<div class="sheet-cell sheet-col3">
<select name="attr_type">
<option value="Cutting (cut)">cut</option>
<option value="Impaling (imp)">imp</option>
<option value="Crushing (cr)">cr</option>
<option value="Small Piercing (pi-)">pi-</option>
<option value="Piercing (pi)">pi</option>
<option value="Large Piercing (pi+)">pi+</option>
<option value="Huge Piercing (pi++)">pi++</option>
<option value="Affliction (aff)">aff</option>
<option value="Burning (burn)">burn</option>
<option value="Corrosion (cor)">cor</option>
<option value="Fatigue (fat)">fat</option>
<option value="Toxic (tox)">tox</option>
<option value="Special (spec)">spec</option>
</select>
</div>
<div class="sheet-cell sheet-col4">
<input type="text" name="attr_acc" />
</div>
<div class="sheet-cell sheet-col5">
<input type="text" name="attr_range" />
</div>
<div class="sheet-cell sheet-col6">
<input type="text" name="attr_rof" />
</div>
<div class="sheet-cell sheet-col7">
<input type="text" name="attr_shots" />
</div>
<div class="sheet-cell sheet-col8">
<input type="text" name="attr_bulk" />
</div>
<div class="sheet-cell sheet-col9">
<input type="text" name="attr_recoil" />
</div>
<div class="sheet-cell sheet-col10">
<input type="text" name="attr_skill" />
</div>
<div class="sheet-cell sheet-col11">
<button type="roll" value="@{roll} [[3d6]] @{VS} @{name} [[@{skill} + @{modifier}]] **Recoil: @{recoil} | Notes:** @{notes}" name="roll_vsSL" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-details2">
<div class="sheet-cell sheet-col0 sheet-label">
Weapon Notes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_notes" />
</div>
<div class="sheet-cell sheet-col2 sheet-label">
Damage Notes
</div>
<div class="sheet-cell sheet-col3">
<input type="text" name="attr_damage_notes" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_ranged -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-ranged-attacks -->
</div> <!-- .sheet-tab4 -->
<!-- ===== ===== ===== ===== ITEMS TAB ===== ===== ===== ===== -->
<div class="sheet-tab5">
<!-- _____ _____ QUICK INVENTORY BOX _____ _____ -->
<div class="sheet-box sheet-quick-inventory sheet-textarea">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Quick Inventory & Wealth</div>
</div>
<textarea name="attr_quick_inventory"></textarea>
</div>
<!-- _____ _____ INVENTORY BOX _____ _____ -->
<div class="sheet-box sheet-items">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Possessions</div>
<div class="sheet-cell sheet-col1">TL</div>
<div class="sheet-cell sheet-col2">Ref</div>
<div class="sheet-cell sheet-col3">
<div class="sheet-popup">On</div>
<span class="sheet-tooltip">
Carried
<br />
Is the item being carried at the moment?
</span>
</div>
<div class="sheet-cell sheet-col4">#</div>
<div class="sheet-cell sheet-col5">$</div>
<div class="sheet-cell sheet-col6">W</div>
<div class="sheet-cell sheet-col7">$+</div>
<div class="sheet-cell sheet-col8">W+</div>
</div>
<fieldset class="repeating_item">
<input class="sheet-toggle" type="checkbox" />
<span class="sheet-checkbox"></span>
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_tl" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_ref" />
</div>
<div class="sheet-cell sheet-col3">
<input class="sheet-boolean" type="checkbox" name="attr_carried" value="1" checked />
</div>
<div class="sheet-cell sheet-col4">
<input type="number" name="attr_count" value="1" />
</div>
<div class="sheet-cell sheet-col5">
<input type="number" name="attr_cost" value="0.00" step="0.01" />
</div>
<div class="sheet-cell sheet-col6">
<input type="number" name="attr_weight" value="0" step="0.001" />
</div>
<div class="sheet-cell sheet-col7" style="text-align: right">
<span name="attr_costtotal" value="0.00" />
</div>
<div class="sheet-cell sheet-col8" style="text-align: right">
<span name="attr_weighttotal" value="0" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-details">
<div class="sheet-cell sheet-col0 sheet-label">
Notes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_notes" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_item -->
<div class="sheet-row sheet-row-totals">
<div class="sheet-cell sheet-col0 sheet-label">
Total Value:
</div>
<div class="sheet-cell sheet-col1">
<input type="number" step=".01" name="attr_total_value" value="0" readonly="readonly" />
</div>
<div class="sheet-cell sheet-col2 sheet-label">
Total Weight:
</div>
<div class="sheet-cell sheet-col3">
<input type="number" step=".001" name="attr_total_weight" value="0" readonly="readonly" />
</div>
</div> <!-- .sheet-row -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-items -->
</div> <!-- .sheet-tab5 -->
<!-- ===== ===== ===== ===== GRIMOIRE TAB ===== ===== ===== ===== -->
<div class="sheet-tab6">
<!-- _____ _____ SPELLS SETUP _____ _____ -->
<div class="sheet-box sheet-spells">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell"> Spells Based on: </div>
<div class="sheet-cell sheet-col3">
<select name="attr_spell_base">
<option value="@{strength}">ST</option>
<option value="@{dexterity}">DX</option>
<option value="@{intelligence}" selected>IQ</option>
<option value="@{health}">HT</option>
<option value="@{willpower}">Will</option>
<option value="@{perception}">Per</option>
<option value="10">10</option>
</select>
</div>
<div class="sheet-cell"> Magery/PI/Bonus Level: </div>
<div class="sheet-cell sheet-col4">
<input type="number" name="attr_spell_bonus" value="0" />
</div>
</div>
</div>
</div>
<!-- _____ _____ SPELLS BOX _____ _____ -->
<div class="sheet-box sheet-spells">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Spell</div>
<div class="sheet-cell sheet-col1"></div>
<div class="sheet-cell sheet-col2">Level</div>
<div class="sheet-cell sheet-col3">Diff</div>
<div class="sheet-cell sheet-col4">Pts</div>
<div class="sheet-cell sheet-col5">Time</div>
<div class="sheet-cell sheet-col6">Duration</div>
<div class="sheet-cell sheet-col7">Cost</div>
<div class="sheet-cell sheet-col8">Maintain</div>
<div class="sheet-cell sheet-col9">Ref</div>
</div> <!-- .sheet-header -->
<fieldset class="repeating_spells">
<input class="sheet-toggle" type="checkbox" />
<span class="sheet-checkbox"></span>
<div class="sheet-row sheet-row-stats">
<div class="sheet-cell sheet-col0">
<input type="text" name="attr_name" />
</div>
<div class="sheet-cell sheet-col1">
<button type="roll" value="@{roll} [[3d6]] @{VS} @{name} [[@{level} + @{modifier}]]" name="roll_vsSL" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_level" disabled="disabled"
value="@{spell_base} + @{difficulty} + @{spell_bonus} + (floor((@{points} * 0.25) + 2) * ceil( ( ( @{points} - 2 ) + abs( @{points} - 2) ) / 256 ) + @{points} * abs( ceil( ( ( @{points} - 2 ) + abs( @{points} - 2) ) / 256 ) - 1 ))"/>
</div>
<div class="sheet-cell sheet-col3">
<select name="attr_difficulty">
<option value="-3">H</option>
<option value="-4">VH</option>
</select>
</div>
<div class="sheet-cell sheet-col4">
<input type="number" name="attr_points" value"0" />
</div>
<div class="sheet-cell sheet-col5">
<input type="text" name="attr_casttime" />
</div>
<div class="sheet-cell sheet-col6">
<input type="text" name="attr_duration" />
</div>
<div class="sheet-cell sheet-col7">
<input type="text" name="attr_cost" />
</div>
<div class="sheet-cell sheet-col8">
<input type="text" name="attr_maintain" />
</div>
<div class="sheet-cell sheet-col9">
<input type="text" name="attr_ref" />
</div>
</div> <!-- .sheet-row -->
<div class="sheet-row sheet-row-details">
<div class="sheet-cell sheet-col0 sheet-label">
Notes
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_notes" />
</div>
</div> <!-- .sheet-row -->
</fieldset> <!-- .repeating_spells -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-spells -->
</div> <!-- .sheet-tab6 -->
<!-- ===== ===== ===== ===== Revision History TAB ===== ===== ===== ===== -->
<div class="sheet-tab7">
<div>
<h3>Latest Changes: Updated 12/18/2018</h3>
<h3>Known Issues</h3>
<ul>
<li>Unable to delete a Technique - UPDATE</li>
<li>
The issue is the 'Max' value for the Technique. If any value was placed in there, the row will not delete.
So in this PULL I have blocked values from being placed there so that new Techniques can be deleted if need be.
Existing Techniques that you are unable to delete - the Devs are looking into that issue and will advise me.
</li>
<li>NOTE: Techniques, as it is now on the character sheet, does not really work well - that section will most likely be completely rewritten (I plan on doing it when I get some time and my skills at HTML improve).</li>
</ul>
<h3>Revision History</h3>
<p>Please note: I, Mike W, am not one of the original authors of this sheet. All I have done is to fix a number of small issues, changed some formatting, and implemeted some suggested changes. The basic functionality of the sheet has remained the same.</p>
<p>To report an Issues or a Suggestion, please use the Roll20 forum under Character Sheets & Compendium. Mike W has created a thread named: [GURPS] - Sheet #1 - Thread 1 (that seems to be similar to the naming convention used by other sheets).</p>
<p>https://app.roll20.net/forum/post/6616836/gurps-sheet-number-1-thread-1/?pageforid=6644122#post-6644122</p>
<p>In your post, please specify if it is an Issue or Suggestion with as much detail information as possible. Screen shots help a lot! I am just learning to work with HTML and CSS so I may not be able to do everything requested. I make no promises on how fast I may be able to implement a Fix or a Suggestion - so please be patient. -Thanks, Mike W.</p>
<p>If there are others that are working on or wish to work on this sheet, lets coordinate using the Roll20 forum for now - perhaps later we can use GitHub.</p>
<h4>Version: 1.4.8</h4>
<p>Pull Request: 12/18/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
<li>Changed the PULL date for version 1.4.7 to 12/04/2018 Cosmetic Only</li>
<li>Changed the width of the REF field in Advantages, Disadvantages, Skills, Techniques, and Possessions Cosmetic Only</li>
<li>Removed the visual cue for editable fields on the General Tab Request by MANY Cosmetic Only</li>
<li>Added highlighted light gray color for calculated fields on all pages Cosmetics Only</li>
<li>Removed the blue highlight from Melee and Ranged attacks as it is no longer needed Cosmetic Only</li>
<li>Fixed alert indicating to use whole number on attributes that can be up to 2 or 3 decimal places in value in the Inventory section - Cosmetic Only</li>
<li>Resized the Life and Moving box and the Encumbrance box for FUTURE upgrades - Cosmetic Only</li>
</ul>
<h4>Version: 1.4.7</h4>
<p>Pull Request: 12/04/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
<li>Added 'Latest Update' with date to the top of the Updates page - Cosmetic Only</li>
<li>Changed the Input color from pink to a light gray: Because of so many complaints about the pink - Cosmetic Only</li>
<li>Fixed the Current HP, Thrust, and Swing fields on the General page to display the Input Color Cosmetic Only</li>
<li>Fixed bug for the Total Points and the calculated Unspent Points were not totaling correctly on the General page The actual fix was spotted and provided by Filipe (UserID: 1089514)</li>
<li>Fix alignment of columns for Attributes on the General page - Cosmetic Only</li>
<li>Fix base tooltip font size from 10 to 11 to make it more readable - Cosmetic Only</li>
<li>Added tooltips for POINT SUM on the General page for Total, Spent, and Unspent - Cosmetic Only</li>
<li>Under POINT SUM in the General page, changed Starting to Total and changed Total to Spent - Requested first by Valter (UserID:285013), then by many others Cosmetic Only</li>
</ul>
<h4>Version: 1.4.6</h4>
<p>Pull Request: 11/20/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
<li>Rearranged the order of fields in the Melee Attacks repeating section to match the order presented in the GURPS books Cosmetic Only</li>
<li>Rearranged the order of fields in the Ranged Attacks repeating section to match the order presented in the GURPS books Cosmetic Only</li>
<li>Fixed various typos on the Updates page Cosmetic Only </li>
<li>Fixed tooltip format specifically the width and placement Cosmetic Only</li>
<li>Fixed tooltip for Attribute Mod, Shots, and RoF to fit the format Cosmetic Only</li>
<li>Fixed the tooltip for Combat Reflexes, changed +3 fear to +2 Fright Cosmetic Only </li>
</ul>
<h4>Version: 1.4.5</h4>
<p>Pull Request: 11/13/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
<li>Fixed version 1.4.1 Pull request Date Cosmetic Only</li>
<li>Fixed version 1.4.2 Pull request date Cosmetic Only </li>
<li>Fixed version 1.4.3 Added back in Cosmetic Only </li>
<li>Fixed version 1.4.4 Renumbered from 1.4.3 Cosmetic Only </li>
<li>Renamed Skils tab to Skills Cosmetic Only </li>
</ul>
<h4>Version: 1.4.4</h4>
<p>Pull Request: 11/06/2018</p>
<ul>
<li>Changes made by MadCoder https://github.com/MadCoder253/roll20-character-sheets/issues</li>
<li>Added visual cue for editable fields on the General Tab</li>
<li>Sheet Setting Gear Icon: Foundational Sheet Options</li>
<li>Option to use automated unspent points or to enter unspent points manually</li>
<li>Option to select damage dice icon</li>
<li>Initial development of additional movement options</li>
<li>Added help text to combat reflexes. Mainly helpful for users who haven't noticed the options.</li>
</ul>
<h4>Version: 1.4.3</h4>
<p>Pull Request: 10/30/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
<li>Fixed version 1.4.1 Pull request Date Cosmetic Only</li>
<li>Fixed version 1.4.2 Pull request date Cosmetic Only </li>
<li> Added information pertaining to who made changes in version 1.4.2 Cosmetic Only </li>
<li>Widened Shots field in the Range Attacks section Cosmetic Only</li>
<li>Fixed widths (margins) of the Active Defenses, Melee Attacks, and the Ranged Attacks sections Cosmetic Only</li>
<li>Fixed widths of the Damage Macro for the Melee Attacks and the Ranged Attacks sections Cosmetic Only </li>
<li>Change the background color of the Skill field and Macro field to a Light Blue for Melee Attacks and Ranged Attacks Cosmetic Only</li>
<li>Added some Hover information for the Traits and Skills Tabs Cosmetic Only</li>
<li>Restore some deleted Revision History Cosmetic Only</li>
</ul>
<h4>Version: 1.4.2</h4>
<p>Pull Request: 10/23/2018</p>
<ul>
<li>Changes made by MadCoder https://github.com/MadCoder253/roll20-character-sheets/issues</li>
<li>Changed damage roll icons to red explosion to easily identify the difference from the skill roll icon</li>
<li>Update thrust and swing damage when striking ST is updated</li>
<li>Ability to enter values for Unspent points</li>
<li>When combat reflexes is toggled, update the dodge and fear check modifiers on the general tab</li>
</ul>
<h4>Version: 1.4.1</h4>
<p>Pull Request: 09/11/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
<li>Fixed Encumbrance Table calculations to always allow for a Minimum Move of 1 and a Minimum Dodge of 1.</li>
</ul>
<h4>Version: 1.4.0</h4>
<p>Pull Request: 09/04/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
<li>Fixed bug with calculating Current Move for Heavy and Extra Heavy Encumbrances and not using a Minimum of 1. Reported by Ray G (@raymond-g) (UserID: 1600355)</li>
<li>Fixed bug with calculating Total Weight from Inventory which at times created a weigh of more than 3 decimal places.</li>
<li >Added a "FOA" (Frequency of Appearance) field under Advantages (& Quirks) </li>
<li >Modified the Tool Tip for SCN under Disadvantages (& Quirks) and Racial Traits to include the wording "OR Frequency of Appearance" - Cosmetic Only</li>
<li>Added Max Load to the Encumbrance Table</li>
</ul>
<h4>Version: 1.3.9</h4>
<p>Pull Request: 08/21/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610</li>
<li>Updated the Language Box format - Cosmetic Only</li>
<li>Added additional options for Native Language in regards to Spoken and Written levels as a Disadvantage</li>
<li>Updated the Inventory Box format Cosmetic Only</li>
<li>Added fields of "TL" (Tech Level) and "Ref" (Reference) to the Inventory repeating section</li>
<li>Fixed bug for Single Modifier Prompt and Extended Modifier Prompts if a "+" is used for a positive modifier entry</li>
</ul>
<h4>Version: 1.3.8</h4>
<p>Pull Request: 08/08/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
<li>Added the Speed-Range table image to the Combat Tab - Requested by CaptainJoy (UserID: GitHub) </li>
<li>Set the character sheet to always open to the Updates Tab</li>
<li>Fixed BUG where Basic Lift calculations for ST 7 or less was incorrectly rounding for Light, Medium, and Heavy Encumbrances </li>
<li>Renamed Notes to Weapon Notes under Melee Attacks and Ranged Attacks - osmetic Only</li>
<li>Added Damage Notes with an attribute under Melee Attacks and Ranged Attacks</li>
<li>Changed Tool Tip for Damage, for Melee attacks and Ranged Attacks, to indicate using the Damage Notes field - Cosmetic Only</li>
<li>Changed Armour Divisor to Armor Divisor - Cosmetic Only</li>
<li>Changed the output of the Attack Macros for Melee and Ranged attacks to include the Weapons Notes attribute - Cosmetic Only</li>
<li>Changed the output of the Damage Macros for Melee and Ranged attacks to include the Damage Notes attribute - Cosmetic Only</li>
</ul>
<h4>Version: 1.3.7</h4>
<p>Pull Request: 08/01/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
<li>Fixed alignment issue with the Notes field Under Skills not Left Justified - Cosmetic Only </li>
<li>Changed Hit Location box to have an additional Header identifying User Created Locations - Cosmetic Only</li>
<li>Changed all fields in the Hit Location box to be editable. This will enable you to change the name of any of the default Locations and the To Hit Penalty - Request from Valter (User id: 285013)</li>
<li> Fixed Bug where some Hit Locations did not save their DR values</li>
<li>Removed and Deleted the CR Label and attr_control_rating for Advantages. The correct terminology is Self-control Number and this is not used for Advantages</li>
<li>Added an attribute for Native Language. Nothing fancy just a direct input - Requested by Flemmerr (User id: 1515009)</li>
<li>Added the Recoil attribute to the chat results for the Ranged Attacks macro - Cosmetic only</li>
<li>Changed the Label of "Disadvantages" to "Disadvantages (& Quirks)" - Cosmetic Only </li>
<li>Changed the Label of "Advantages" to "Advantages (& Perks)" - Cosmetic Only </li>
<li>Fixed many miscellaneous issues to existing table fieldsets</li>
</ul>
<h4>Version: 1.3.6</h4>
<p>Pull Request: 07/25/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610</li>
<li>Corrected spelling of Miscellaneous on the General page - Cosmetic only</li>
<li>Updated Tool Tip for Type under Melee Attacks and Ranged, removed the Multiplier information as it is irrelevant, also fixed the alignment - Cosmetic only</li>
<li>Added missing information from Type drop down for Ranged Attacks - Missing was Affliction and Special</li>
<li>Changed the label of "Quick Inventory" to "Quick Inventory & Wealth" and the Label left justified - Cosmetic</li>
<li>Changed the Melee Attacks and Ranged Attacks macros to include the Notes attribute in the results in Chat - Cosmetic only </li>
<li>Changed all Die Macros to apply Bold to the Character Name in the results in Chat - Cosmetic only</li>
<li>Change when adding a new Skill, Technique, or Spell, the Points defaults to 0 instead of blank</li>
<li>Fixed minor spelling errors - Cosmetic only</li>
<li>Renamed Header of CR to SCN under Disadvantages and Racial Trains to reflect correct terminology - Cosmetic only</li>
<li>Fixed Tool Tip of SCN (formerly CR) under Disadvantages and Racial Trains to reflect correct terminology - changed from "Control Rating" to "Self-control Number" - Cosmetic only</li>
<li>Added Macro for Self-control Number Roll within Disadvantages and Racial Traits</li>
<li>Changes and Adds requested by Mike W (@mike-w) (UserID: 1414610)</li>
<li>Spelling correction requested by Rabulias (@rabulias) (UserID: 4692)</li>
</ul>
<h4>Version: 1.3.5</h4>
<p>Pull Request: 7/17/2018</p>
<ul>
<li>Changes made by Tom S</li>
<li>Changed the word Fear to Fright (Visibility only - no attributes where changed)</li>
<li>Changed the Macro result from vs. Will to vs. Fright</li>
<li>Changed the Hit Location DR input to accept text (so that you can add DR entries like 2* or 3/1*)</li>
<li>Changed the visible width of the DR field making it wider</li>
<li>Fixed bug in Hit Location Penalty not saving for added custom location</li>
<li>Added a Tool Tip for Pen header in Hit Location</li>
<li>Requested by Mike W (@mike-w) (UserID: 1414610) see: https://app.roll20.net/forum/post/6572120/</li>
</ul>
<h4>Version: 1.3.4</h4>
<p>Pull Request: 3/7/2018</p>
<ul>
<li>Changes made by MadCoder https://github.com/MadCoder253/roll20-character-sheets/issues</li>
<li>Add Revision History Tab</li>
<li>Changed roll buttons to use dicefontd6 (requested by Mike W
(@mike-w) (UserID: 1414610) see: https://app.roll20.net/forum/post/5845539/</li>
<li>Fix lift & encumbrance rounding error for low ST. Round to whole number.
(requested by Lucy (@lucy) (UserID: 359497) see: https://app.roll20.net/forum/permalink/5142954/</li>
</ul>
<h4>Version 1.3.3</h4>
<p>Pull Request: 3/1/2018</p>
<ul>
<li>Changes made by MadCoder https://github.com/MadCoder253/roll20-character-sheets/issues</li>
<li>Restyled tabs to work with Firefox and MS Edge</li>
<li>Traits tab -> disadvantages section: slight changes to column spacing</li>
<li>Combat tab -> Ranged attacks section: slight changes to column spacing and abbreviate titles</li>
<li>Skills Tab -> Techniques section: slight changes to column spacing</li>
<li>Added URL to GURPS roll20 wiki</li>
</ul>
</div>
</div> <!-- .sheet-tab7 -->
<div class="sheet-tab0">
<div class="sheet-options">
<div class="sheet-box">
<input type="radio" name="attr_modifier" value="0" checked="true" />
<span class="sheet-popup">No Modifier Prompt</span>
<span class="sheet-tooltip">
Rolls will be made immediately with no prompt.
</span>
<br /><input type="radio" name="attr_modifier" value="[[?{Modifier|0}]]" />
<span class="sheet-popup">Single Modifier Prompt</span>
<span class="sheet-tooltip">
Ask for a bonus or penalty to be added to dice rolls.
<br />
This will not affect damage rolls.
</span>
<br />
<input type="radio" name="attr_modifier" value="[[?{Modifier|0}]] +[[?{Shock|0}]] + [[?{Reeling or Staggered|0}]] + [[?{Off-Hand|0}]] + [[?{Familiarity|0}]]" />
<span class="sheet-popup">Extended Modifier Prompts</span>
<span class="sheet-tooltip">
Instead of a single modifier, rolls will ask for a series of modifiers,<br />
to remind you about potential bonuses/penalties.
<br />
This will not affect damage rolls.
</span>
</div>
<div class="sheet-box">
<input type="radio" name="attr_roll" value="**@{character_name}** rolls" checked="true" />
<span class="sheet-popup">Public Rolls</span>
<span class="sheet-tooltip">
All players will be able to see<br />
your skill level, roll and results.
</span>
<br />
<input type="radio" name="attr_roll" value="/w gm --l **@{character_name}** rolls" />
<span class="sheet-popup">Private Skill Levels</span>
<span class="sheet-tooltip">
Only the GM will be able to see<br />
your skill level, but all players<br />
will see the result.
<br />
This will not affect damage rolls.
</span>
<br />
<input type="radio" name="attr_roll" value="/w gm **@{character_name}** rolls" />
<span class="sheet-popup">Private Rolls</span>
<span class="sheet-tooltip">
Only the GM will see your skill<br />
level and the result.
<br />
This will not affect damage rolls.
</span>
</div>
<div class="sheet-box">
<input type="checkbox" name="attr_use_unspent_box" class="sheet-manual-unspent-box" value="1" />
<span class="sheet-popup">Enter Unspent Points</span>
<span class="sheet-tooltip">Check if you would like to manually track your unspent points</span>
</div>
<div class="sheet-box">
Damage Dice Icon
<div>
<input type="radio" name="attr_damage_dice_type" value="explode" checked="true" />
<button type="roll" value="0" name="btn_damage_dice_explode" class="roll_explode btn" disabled="disabled" />
</div>
<div>
<input type="radio" name="attr_damage_dice_type" value="d6black" />
<button type="roll" value="0" name="btn_damage_dice_d6black" class="btn" disabled="disabled" />
</div>
<div>
<input type="radio" name="attr_damage_dice_type" value="d20blank" />
<button type="roll" value="0" name="btn_damage_dice_d20blank" class="btn roll_d20blank" disabled="disabled" />
</div>
<div>
<input type="radio" name="attr_damage_dice_type" value="d4skull" />
<button type="roll" value="0" name="btn_damage_dice_d4skull" class="btn roll_d4skull" disabled="disabled" />
</div>
</div>
<hr />
<div class="sheet-box">
<input type="radio" name="attr_mod_cascade" value="all" checked="true" />
<span class="sheet-popup">Mods to attributes increase all derived stats (including HP, FP)</span>
<br />
<input type="radio" name="attr_mod_cascade" value="some" />
<span class="sheet-popup">Mods to attributes increase most derived stats (not HP, FP)</span>
<br />
<input type="radio" name="attr_mod_cascade" value="none" />
<span class="sheet-popup">Mods to attributes do not increase derived stats</span>
</div>
<br />
</div>
</div>
<!-- ===== ===== ===== ===== LOGO ===== ===== ===== ===== -->
<div style="text-align: center; margin-top: 10px;">
<hr />
<img height="30px" src="http://www.sjgames.com/poweredbygurps/img/logo.gif" />
<hr />
<a href="https://wiki.roll20.net/GURPS_4th_Edition" target="_blank">GURPS 4th Edition Roll20 Wiki</a><br />
https://wiki.roll20.net/GURPS_4th_Edition
</div>
</div>
<script type="text/worker">
var noop = function () {}; // do nothing.
var version = "1.4.8";
var modCascade = true;
var modCascadeAll = true;
// add global variable
var damageTable = [];
/* Due to the change from auto-calc fields to helper scrips,
* I'm running a "on open" to set various fields. At some point
* in the future this might no longer be needed.
*/
on('sheet:opened', function() {
console.log('********* Sheet Opened *********');
console.log('** Setting default TAB to Updates **');
/* When the sheet is opened, it opens to the Update tab */
setAttrs({tab:7});
/* For Bug Fix v1.3.9 : Need to convert the Value of the Modifier Prompt*/
console.log('** Attribute Modifier new values v1.3.9 **');
getAttrs(['modifier'], function(v){
const setObj = {};
if(v.modifier==='?{Modifier|0}'){
setObj.modifier = '[[?{Modifier|0}]]'
}else if(v.modifier==='?{Modifier|0} + ?{Shock|0} + ?{Reeling or Staggered|0} + ?{Off-Hand|0} + ?{Familiarity|0}'){
setObj.modifier = '[[?{Modifier|0}]] +[[?{Shock|0}]] + [[?{Reeling or Staggered|0}]] + [[?{Off-Hand|0}]] + [[?{Familiarity|0}]]'
}
setAttrs(setObj,{silent:true});
});
getAttrs(['sheet_version', 'mod_cascade', 'modCascade', 'modCascadeAll'], function(v) {
if (v.modCascade && v.modCascadeAll) {
modCascade = v.modCascade;
modCascadeAll = v.modCascadeAll;
}
if (!v.sheet_version || v.sheet_version != version) {
// Set sheet version:
setAttrs({ sheet_version: version });
// initialize any empty fields in repeating sections since the default values were removed.
loadRepeating('repeating_languages', 'spoken', 0);
loadRepeating('repeating_languages', 'written', 0);
loadRepeating('repeating_skills', 'points', 1);
loadRepeating('repeating_cultures', 'points', 1);
loadRepeating('repeating_techniques', 'points', 1);
loadRepeating('repeating_spells', 'points', 1);
// initalize all calculated stats
resetAll(v.mod_cascade);
}
});
damageTable = generateDamageTable();
});
on('change:mod_cascade', function (e) {
getAttrs(['mod_cascade'], function (v) {
resetAll(v.mod_cascade);
})
});
function resetAll(mod_cascade) {
switch(mod_cascade) {
case 'all':
modCascade = true;
modCascadeAll = true;
break;
case 'some':
modCascade = true;
modCascadeAll = false;
break;
default:
modCascade = false;
modCascadeAll = false;
}
setAttrs({
modCascade: modCascade,
modCascadeAll: modCascadeAll
});
// After move, dodge, encumbrance, HP, and FP
var thenCurrentMoveDodge = _.after(5, function () {
updateMoveDodge();
});
// After DX and HT
var thenSpeedMoveDodge = _.after(2, function () {
updateBasicSpeed(function () {
// After Basic Speed...
updateBasicMove(thenCurrentMoveDodge);
updateDodge(thenCurrentMoveDodge);
});
});
// After Lift and weight...
var thenEncumbrance = _.after(2, function () {
updateEncLevel(thenCurrentMoveDodge);
});
sumRepeating('repeating_item', 'weighttotal', function (v) {
setAttrs({ total_weight: (v * 1000) / 1000 }, {silent: false}, thenEncumbrance);
});
// Update attributes, then secondary characteristics, and so on...
updateST(function () {
// After ST...
updateHP(thenCurrentMoveDodge);
updateLift(thenEncumbrance);
updateStrikingST();
// updateStrikingST damage rolls
console.log("update Striking Damage");
updateStrikingStrengthDamage();
});
updateDX(thenSpeedMoveDodge);
updateIQ(function () {
// After IQ...
updateWill();
updatePer(function () {
// After Per...
updateSense();
});
});
updateHT(function () {
updateFP(thenCurrentMoveDodge);
thenSpeedMoveDodge();
});
}
// Sum values, used in reduce
function getSum(total, num) {
return (+total || 0) + (+num || 0);
}
// function to sum a field from a repeating section
function sumRepeating(sectionName, fieldName, callback) {
getSectionIDs(sectionName, function (ids) {
if (ids.length === 0 ) {
callback(0);
return;
}
var fieldArray = [];
for (var i = 0; i < ids.length; i++) {
fieldArray.push(sectionName + '_' + ids[i] + '_' + fieldName);
}
getAttrs(fieldArray, function (fieldValues) {
var vals = Object.values(fieldValues);
vals.push(0);
var total = vals.reduce(getSum);
callback(total);
});
});
}
// load values of a repeating section
function loadRepeating(sectionName, fieldName, defaultValue) {
console.log('********* loadRepeating ' + sectionName + '.' + fieldName + '*********');
getSectionIDs(sectionName, function (ids) {
if (ids.length === 0 ) {
return;
}
var fieldArray = [];
var update = {};
for (var i = 0; i < ids.length; i++) {
var propName = sectionName + '_' + ids[i] + '_' + fieldName;
fieldArray.push(propName);
update[propName] = defaultValue;
}
getAttrs(fieldArray, function (fieldValues) {
Object.assign(update, fieldValues);
setAttrs(update);
});
});
}
// Strength Change
on('change:strength_points change:strength_mod', function (e) {
updateST();
});
// Update Strength
function updateST(callback) {
callback = callback || noop;
console.log('********* updateST *********');
getAttrs(['strength_points', 'strength_mod'], function(v) {
var base = 10 + ((+v.strength_points || 0) / 10 | 0);
var mod = +v.strength_mod || 0;
setAttrs({
strength_base: base,
strength: base + mod
}, {silent: false}, callback);
});
}
// Dexterity Change
on('change:dexterity_points change:dexterity_mod', function (e) {
updateDX();
});
// Update Dexterity
function updateDX(callback) {
callback = callback || noop;
console.log('********* updateDX *********');
getAttrs(['dexterity_points', 'dexterity_mod'], function(v) {
var base = 10 + ((+v.dexterity_points || 0) / 20 | 0);
var mod = +v.dexterity_mod || 0;
setAttrs({
dexterity_base: base,
dexterity: base + mod
}, {silent: false}, callback);
});
}
// Intelligence
on('change:intelligence_points change:intelligence_mod', function (e) {
updateIQ();
});
// Update Intelligence
function updateIQ(callback) {
callback = callback || noop;
console.log('********* updateIQ *********');
getAttrs(['intelligence_points', 'intelligence_mod'], function(v) {
var base = 10 + ((+v.intelligence_points || 0) / 20 | 0);
var mod = +v.intelligence_mod || 0;
setAttrs({
intelligence_base: base,
intelligence: base + mod
}, {silent: false}, callback);
});
}
// Health
on('change:health_points change:health_mod', function (e) {
updateHT();
});
// Update Health
function updateHT(callback) {
callback = callback || noop;
console.log('********* updateHT *********');
getAttrs(['health_points', 'health_mod'], function(v) {
var base = 10 + ((+v.health_points || 0) / 10 | 0);
var mod = +v.health_mod || 0;
setAttrs({
health_base: base,
health: base + mod
}, {silent: false}, callback);
});
}
// HP
on('change:strength change:hit_points_points change:hit_points_mod', function (e) {
updateHP();
});
// Update HP
function updateHP(callback) {
console.log('********* updateHP *********');
callback = callback || noop;
getAttrs(['strength', 'strength_base', 'hit_points_points', 'hit_points_mod'], function(v) {
var base = (modCascadeAll ? +v.strength : +v.strength_base) +
((+v.hit_points_points || 0) / 2 | 0);
var mod = +v.hit_points_mod;
setAttrs({
hit_points_max: base + mod
}, {silent: false}, callback);
});
}
// FP
on('change:health change:fatigue_points_points change:fatigue_points_mod', function (e) {
updateFP();
});
// Update FP
function updateFP(callback) {
console.log('********* updateFP *********');
callback = callback || noop;
getAttrs(['health', 'health_base', 'fatigue_points_points', 'fatigue_points_mod'], function(v) {
var base = (modCascadeAll ? +v.health : +v.health_base) +
((+v.fatigue_points_points || 0) / 3 | 0);
var mod = +v.fatigue_points_mod;
setAttrs({
fatigue_points_max: base + mod
}, {silent: false}, callback);
});
}
// Perception
on('change:intelligence change:perception_points change:perception_mod', function (e) {
updatePer();
});
// Update Perception
function updatePer(callback) {
console.log('********* updatePer *********');
callback = callback || noop;
getAttrs(['intelligence', 'intelligence_base', 'perception_points', 'perception_mod'], function(v) {
var base = (modCascade ? +v.intelligence : +v.intelligence_base) +
((+v.perception_points || 0) / 5 | 0);
var mod = +v.perception_mod || 0;
setAttrs({
perception_base: base,
perception: base + mod
}, {silent: false}, callback);
});
}
// Vision, Hearing, Smell, Touch
on('change:perception change:vision_points change:vision_mod change:hearing_points change:hearing_mod change:taste_smell_points change:taste_smell_mod change:touch_points change:touch_mod', function (e) {
updateSense();
});
// Update Vision, Hearing, Smell, Touch
function updateSense() {
console.log('********* updateSense *********');
getAttrs(['perception', 'perception_base', 'vision_points', 'vision_mod', 'hearing_points', 'hearing_mod', 'taste_smell_points', 'taste_smell_mod', 'touch_points', 'touch_mod'], function(v) {
var base = (modCascade ? +v.perception : +v.perception_base);
var visionBase = base + ((+v.vision_points || 0) / 2 | 0);
var visionMod = +v.vision_mod || 0;
var hearingBase = base + ((+v.hearing_points || 0) / 2 | 0);
var hearingMod = +v.hearing_mod || 0;
var tasteSmellBase = base + ((+v.taste_smell_points || 0) / 2 | 0);
var tasteSmellMod = +v.taste_smell_mod || 0;
var touchBase = base + ((+v.touch_points || 0) / 2 | 0);
var touchMod = +v.touch_mod || 0;
setAttrs({
vision_base: visionBase,
vision: visionBase + visionMod,
hearing_base: hearingBase,
hearing: hearingBase + hearingMod,
taste_smell_base: tasteSmellBase,
taste_smell: tasteSmellBase + tasteSmellMod,
touch_base: touchBase,
touch: touchBase + touchMod
});
});
}
// Updage Willpower, Fear (This is actually called Fright Check - the General page reflects this)
on('change:intelligence change:willpower_points change:willpower_mod change:fear_check_points change:fear_check_mod', function (e) {
updateWill();
});
// Updage Willpower, Fear (This is actually called Fright Check - the General page reflects this)
function updateWill() {
console.log('********* updateWill *********');
getAttrs(['intelligence', 'intelligence_base', 'willpower_points', 'willpower_mod', 'fear_check_points', 'fear_check_mod'], function(v) {
var wBase = (modCascade ? +v.intelligence : +v.intelligence_base) +
((+v.willpower_points || 0) / 5 | 0);
var wMod = +v.willpower_mod || 0;
var fBase = wBase + (modCascade ? +wMod : 0) +
((+v.fear_check_points || 0) / 2 | 0);
var fMod = +v.fear_check_mod || 0;
setAttrs({
willpower_base: wBase,
willpower: wBase + wMod,
fear_check_base: fBase,
fear_check: fBase + fMod
});
});
}
// Speed
on('change:dexterity change:health change:basic_speed_points change:basic_speed_mod', function (e) {
updateBasicSpeed();
});
// Update Speed
function updateBasicSpeed(callback) {
console.log('********* updateBasicSpeed *********');
callback = callback || noop;
getAttrs(['dexterity', 'dexterity_base', 'health', 'health_base', 'basic_speed_points', 'basic_speed_mod'], function(v) {
var dx = (modCascade ? +v.dexterity : +v.dexterity_base);
var ht = (modCascade ? +v.health : +v.health_base);
var base = (dx + ht) / 4 + (((+v.basic_speed_points || 0) / 5 | 0) * 0.25);
var mod = +v.basic_speed_mod || 0;
setAttrs({
basic_speed_base: base,
basic_speed: base + mod
}, {silent: false}, callback);
});
}
// Move
on('change:basic_speed change:basic_move_points change:basic_move_mod', function (e) {
updateBasicMove();
});
// Update Move
function updateBasicMove(callback) {
console.log('********* updateBasicMove *********');
callback = callback || noop;
getAttrs(['basic_speed', 'basic_speed_base', 'basic_move_points', 'basic_move_mod'], function(v) {
var speed = (modCascade ? +v.basic_speed : +v.basic_speed_base);
var base = Math.floor(speed) + ((+v.basic_move_points || 0) / 5 | 0);
var mod = +v.basic_move_mod || 0;
setAttrs({
basic_move_base: base,
basic_move: base + mod
}, {silent: false}, callback);
});
}
// Dodge
on('change:basic_speed change:dodge_mod', function (e) {
updateDodge();
});
// Update Dodge
function updateDodge(callback) {
console.log('********* updateDodge *********');
callback = callback || noop;
getAttrs(['basic_speed', 'basic_speed_base', 'dodge_mod'], function(v) {
var speed = (modCascade ? +v.basic_speed : +v.basic_speed_base);
var base = Math.floor(speed) + 3;
var mod = +v.dodge_mod || 0;
setAttrs({
dodge_base: base,
dodge: base + mod
}, {silent: false}, callback);
});
}
// Encumbered/injured move and dodge
on('change:encumbrance_level change:dodge change:basic_move change:hit_points change:fatigue_points', function (e) {
updateMoveDodge();
});
// Update encumbered/injured move and dodge
function updateMoveDodge() {
console.log('***** UPDATE MOVE/DODGE *****');
getAttrs(['encumbrance_level', 'dodge', 'basic_move', 'hit_points', 'hit_points_max', 'fatigue_points', 'fatigue_points_max', 'strength_base', 'strength_mod'], function(v) {
var dodge = +v.dodge;
var move = +v.basic_move;
var strength = +v.strength_base + +v.strength_mod;
if (v.encumbrance_level === 5) {
dodge = 1;
move = 1;
} else {
dodge = dodge - +v.encumbrance_level;
// There is some math error when calculating Encumbrance which requires the modifier of 1.01 instead of 1 below
move = Math.floor(+v.basic_move * (1.01 - (0.2 * +v.encumbrance_level)));
dodge = dodge < 1 ? 1 : dodge;
move = move < 1 ? 1 : move;
}
if (+v.hit_points < +v.hit_points_max / 3) {
dodge = Math.ceil(dodge / 2);
move = Math.ceil(move / 2);
}
if (+v.fatigue_points < +v.fatigue_points_max / 3 ) {
dodge = Math.ceil(dodge / 2);
move = Math.ceil(move / 2);
strength = Math.ceil(strength / 2);
}
setAttrs({
current_move: move,
current_dodge: dodge,
strength: strength
});
});
}
// Lifting ST
on('change:strength change:lift_st_points change:lift_st_mod', function (e) {
updateLift();
});
// Update Lift
function updateLift(callback) {
console.log('********* updateLift *********');
callback = callback || noop;
getAttrs(['strength', 'strength_base', 'lift_st_points', 'lift_st_mod'], function(v) {
var base = (modCascade ? +v.strength : +v.strength_base) +
((+v.lift_st_points || 0) / 3 | 0);
var modded = base + +v.lift_st_mod;
var basicLift = (modded * modded) / 5;
if (basicLift >= 10) {
basicLift = Math.round(basicLift);
}
setAttrs({
lift_st_base: base,
lift_st: modded,
basic_lift: basicLift
}, {silent: false}, callback);
});
}
// Striking ST
on('change:strength change:striking_st_points change:striking_st_mod', function (e) {
updateStrikingST();
});
// Update Striking
function updateStrikingST() {
console.log('********* updateStrikingST *********');
getAttrs(['strength', 'strength_base', 'striking_st_points', 'striking_st_mod'], function(v) {
var base = (modCascade ? +v.strength : +v.strength_base) +
((+v.striking_st_points || 0) / 5 | 0);
var mod = +v.striking_st_mod;
setAttrs({
striking_st_base: base,
striking_st: base + mod
});
});
}
// Update the total cost of Languages
on('change:native_language_spoken change:native_language_written change:repeating_languages:spoken change:repeating_languages:written remove:repeating_languages', function (e) {
console.log('**** Languages Changed ****');
var total = 0;
var tally = _.after(2, function () {
setAttrs({ languages_points: total });
});
getAttrs(['native_language_spoken', 'native_language_written'], function(v) {
console.log('Native Language Spoken: ' + v.native_language_spoken);
console.log('Native Language Written: ' + v.native_language_written);
total += +v.native_language_spoken;
total += +v.native_language_written;
tally();
});
sumRepeating('repeating_languages', 'spoken', function(v) {
console.log('Spoken: ' + v);
total += +v;
tally();
});
sumRepeating('repeating_languages', 'written', function(v) {
console.log('Written: ' + v);
total += +v;
tally();
});
});
// Update the total cost of Cultural Familiarities
on('change:repeating_cultures:points remove:repeating_cultures', function (e) {
sumRepeating('repeating_cultures', 'points', function(v) {
setAttrs({ cf_points: v });
});
});
// Update the total cost of Advantages
on('change:repeating_traits:points remove:repeating_traits', function (e) {
sumRepeating('repeating_traits', 'points', function(v) {
setAttrs({ advantages_points: v });
});
});
// Update the total cost of Disadvantages
on('change:repeating_disadvantages:points remove:repeating_disadvantages', function (e) {
sumRepeating('repeating_disadvantages', 'points', function(v) {
setAttrs({ disadvantages_points: v });
});
});
// Update the total cost of Racial Traits
on('change:repeating_racial:points remove:repeating_racial', function (e) {
sumRepeating('repeating_racial', 'points', function(v) {
setAttrs({ racial_points: v });
});
});
// Update the total cost of Skills
on('change:repeating_skills:points remove:repeating_skills', function (e) {
sumRepeating('repeating_skills', 'points', function(v) {
setAttrs({ skills_points: v });
});
});
// Update the total cost of Techniques
on('change:repeating_techniques:points remove:repeating_techniques', function (e) {
sumRepeating('repeating_techniques', 'points', function(v) {
setAttrs({ techniques_points: v });
});
});
// Update the total cost of Spells
on('change:repeating_spells:points remove:repeating_spells', function (e) {
sumRepeating('repeating_spells', 'points', function(v) {
setAttrs({ spells_points: v });
});
});
// Update Summery
on('change:tl_pts change:appearance change:languages_points change:cf_points change:advantages_points change:disadvantages_points change:racial_points', function (e) {
getAttrs(['tl_pts', 'appearance', 'languages_points', 'cf_points', 'advantages_points', 'disadvantages_points', 'racial_points'], function(v) {
var vals = Object.values(v);
vals.push(0);
setAttrs({ trait_points: vals.reduce(getSum) });
});
});
// Update the line total weight and cost
on('change:repeating_item:count change:repeating_item:cost change:repeating_item:carried change:repeating_item:weight', function (e) {
getAttrs(['repeating_item_count', 'repeating_item_cost', 'repeating_item_weight', 'repeating_item_carried'], function (item) {
setAttrs({
repeating_item_weighttotal: Math.round(item.repeating_item_count * item.repeating_item_weight * item.repeating_item_carried * 1000) / 1000,
repeating_item_costtotal: Math.round(item.repeating_item_count * item.repeating_item_cost * 100) / 100
});
});
});
// Update the total weight of all carried items.
on('change:repeating_item:weighttotal remove:repeating_item', function (e) {
sumRepeating('repeating_item', 'weighttotal', function(v) {
setAttrs({ total_weight: Math.round(v * 1000) / 1000 });
});
});
// Get Encumbrance Level:
on('change:total_weight change:basic_lift', function (e) {
updateEncLevel();
});
function updateEncLevel(callback) {
getAttrs(['basic_lift', 'total_weight'], function(v) {
callback = callback || noop;
var basicLift = +v.basic_lift;
var encumbranceLevel = Math.floor(v.total_weight / basicLift);
if (encumbranceLevel > 0 && (v.total_weight % basicLift) === 0) {
encumbranceLevel--;
}
if (encumbranceLevel >= 10) {
encumbranceLevel = 4;
} else if (encumbranceLevel >= 6) {
encumbranceLevel = 4;
} else if (encumbranceLevel >= 3) {
encumbranceLevel = 3;
}
setAttrs(
{ encumbrance_level: encumbranceLevel },
{silent: false},
callback
);
});
}
// Update the total cost of all items.
on('change:repeating_item:costtotal remove:repeating_item', function (e) {
sumRepeating('repeating_item', 'costtotal', function(v) {
setAttrs({ total_value: (v * 100) / 100 });
});
});
// Update thrust and swing when striking st is updated
on('change:striking_st', function(e){
updateStrikingStrengthDamage();
});
/**
* Get the striking ST value and then get the damage type
* update Thrust and Swing
*/
function updateStrikingStrengthDamage(callback) {
// get Strking strength
getAttrs(['striking_st'], function(values) {
callback = callback || noop;
// + means to convert variable to number
var strikingST = +values.striking_st;
// get the damageType object (strength, thrust, swing)
var damageType = getDamageType(strikingST);
// set thrust and swing
setAttrs({
thrust: damageType.thrust,
swing: damageType.swing
});
});
}
/**
* Returns the damage type object
* based on ST
* damageType {strength, thrust, swing}
*
* @param int strikingST ST of attack
*
* @return object
*/
function getDamageType(strikingST) {
// return value
var damgeType = null;
var modifier = 0;
var baseThrust = 11;
var baseSwing = 13;
// prevent bad ST from causing issue
if (isNaN(strikingST) || strikingST < 0) {
strikingST = 1;
}
if (strikingST < 110) {
// get damageType from table
damageType = damageTable[strikingST];
} else {
// calculate the total
// Add 1d6 to thrust and swing for every full 10 points over 100
modifier = Math.floor((strikingST - 100) / 10);
baseThrust = baseThrust + modifier;
baseSwing = baseSwing = modifier;
damageType = {strength:strikingST, thrust:baseThrust + "d6", swing:baseSwing + "d6"};
}
return damageType;
}
/**
* Populates the global variable damageTable
*/
function generateDamageTable() {
var damageTable = [];
damageTable[0] = {strength:"0", thrust:"1d6-6", swing:"1d6-6"};
damageTable[1] = {strength:"1", thrust:"1d6-6", swing:"1d6-5"};
damageTable[2] = {strength:"2", thrust:"1d6-6", swing:"1d6-5"};
damageTable[3] = {strength:"3", thrust:"1d6-5", swing:"1d6-4"};
damageTable[4] = {strength:"4", thrust:"1d6-5", swing:"1d6-4"};
damageTable[5] = {strength:"5", thrust:"1d6-4", swing:"1d6-3"};
damageTable[6] = {strength:"6", thrust:"1d6-4", swing:"1d6-3"};
damageTable[7] = {strength:"7", thrust:"1d6-3", swing:"1d6-2"};
damageTable[8] = {strength:"8", thrust:"1d6-3", swing:"1d6-2"};
damageTable[9] = {strength:"9", thrust:"1d6-2", swing:"1d6-1"};
damageTable[10] = {strength:"10", thrust:"1d6-2", swing:"1d6"};
damageTable[11] = {strength:"11", thrust:"1d6-1", swing:"1d6+1"};
damageTable[12] = {strength:"12", thrust:"1d6-1", swing:"1d6+2"};
damageTable[13] = {strength:"13", thrust:"1d6", swing:"2d6-1"};
damageTable[14] = {strength:"14", thrust:"1d6", swing:"2d6"};
damageTable[15] = {strength:"15", thrust:"1d6+1", swing:"2d6+1"};
damageTable[16] = {strength:"16", thrust:"1d6+1", swing:"2d6+2"};
damageTable[17] = {strength:"17", thrust:"1d6+2", swing:"3d6-1"};
damageTable[18] = {strength:"18", thrust:"1d6+2", swing:"3d6"};
damageTable[19] = {strength:"19", thrust:"2d6-1", swing:"3d6+1"};
damageTable[20] = {strength:"20", thrust:"2d6-1", swing:"3d6+2"};
damageTable[21] = {strength:"21", thrust:"2d6", swing:"4d6-1"};
damageTable[22] = {strength:"22", thrust:"2d6", swing:"4d6"};
damageTable[23] = {strength:"23", thrust:"2d6+1", swing:"4d6+1"};
damageTable[24] = {strength:"24", thrust:"2d6+1", swing:"4d6+2"};
damageTable[25] = {strength:"25", thrust:"2d6+2", swing:"5d6-1"};
damageTable[26] = {strength:"26", thrust:"2d6+2", swing:"5d6"};
damageTable[27] = {strength:"27", thrust:"3d6-1", swing:"5d6+1"};
damageTable[28] = {strength:"28", thrust:"3d6-1", swing:"5d6+1"};
damageTable[29] = {strength:"29", thrust:"3d6", swing:"5d6+2"};
damageTable[30] = {strength:"30", thrust:"3d6", swing:"5d6+2"};
damageTable[31] = {strength:"31", thrust:"3d6+1", swing:"6d6-1"};
damageTable[32] = {strength:"32", thrust:"3d6+1", swing:"6d6-1"};
damageTable[33] = {strength:"33", thrust:"3d6+2", swing:"6d6"};
damageTable[34] = {strength:"34", thrust:"3d6+2", swing:"6d6"};
damageTable[35] = {strength:"35", thrust:"4d6-1", swing:"6d6+1"};
damageTable[36] = {strength:"36", thrust:"4d6-1", swing:"6d6+1"};
damageTable[37] = {strength:"37", thrust:"4d6", swing:"6d6+2"};
damageTable[38] = {strength:"38", thrust:"4d6", swing:"6d6+2"};
damageTable[39] = {strength:"39", thrust:"4d6+1", swing:"7d6-1"};
damageTable[40] = {strength:"40", thrust:"4d6+1", swing:"7d6-1"};
damageTable[41] = {strength:"41", thrust:"4d6+1", swing:"7d6-1"};
damageTable[42] = {strength:"42", thrust:"4d6+1", swing:"7d6-1"};
damageTable[43] = {strength:"43", thrust:"4d6+1", swing:"7d6-1"};
damageTable[44] = {strength:"44", thrust:"4d6+1", swing:"7d6-1"};
damageTable[45] = {strength:"45", thrust:"5d6", swing:"7d6+1"};
damageTable[46] = {strength:"46", thrust:"5d6", swing:"7d6+1"};
damageTable[47] = {strength:"47", thrust:"5d6", swing:"7d6+1"};
damageTable[48] = {strength:"48", thrust:"5d6", swing:"7d6+1"};
damageTable[49] = {strength:"49", thrust:"5d6", swing:"7d6+1"};
damageTable[50] = {strength:"50", thrust:"5d6+2", swing:"8d6-1"};
damageTable[51] = {strength:"51", thrust:"5d6+2", swing:"8d6-1"};
damageTable[52] = {strength:"52", thrust:"5d6+2", swing:"8d6-1"};
damageTable[53] = {strength:"53", thrust:"5d6+2", swing:"8d6-1"};
damageTable[54] = {strength:"54", thrust:"5d6+2", swing:"8d6-1"};
damageTable[55] = {strength:"55", thrust:"6d6", swing:"8d6+1"};
damageTable[56] = {strength:"56", thrust:"6d6", swing:"8d6+1"};
damageTable[57] = {strength:"57", thrust:"6d6", swing:"8d6+1"};
damageTable[58] = {strength:"58", thrust:"6d6", swing:"8d6+1"};
damageTable[59] = {strength:"59", thrust:"6d6", swing:"8d6+1"};
damageTable[60] = {strength:"60", thrust:"7d6-1", swing:"9d6"};
damageTable[61] = {strength:"61", thrust:"7d6-1", swing:"9d6"};
damageTable[62] = {strength:"62", thrust:"7d6-1", swing:"9d6"};
damageTable[63] = {strength:"63", thrust:"7d6-1", swing:"9d6"};
damageTable[64] = {strength:"64", thrust:"7d6-1", swing:"9d6"};
damageTable[65] = {strength:"65", thrust:"7d6+1", swing:"9d6+2"};
damageTable[66] = {strength:"66", thrust:"7d6+1", swing:"9d6+2"};
damageTable[67] = {strength:"67", thrust:"7d6+1", swing:"9d6+2"};
damageTable[68] = {strength:"68", thrust:"7d6+1", swing:"9d6+2"};
damageTable[69] = {strength:"69", thrust:"7d6+1", swing:"9d6+2"};
damageTable[70] = {strength:"70", thrust:"8d6", swing:"10d6"};
damageTable[71] = {strength:"71", thrust:"8d6", swing:"10d6"};
damageTable[72] = {strength:"72", thrust:"8d6", swing:"10d6"};
damageTable[73] = {strength:"73", thrust:"8d6", swing:"10d6"};
damageTable[74] = {strength:"74", thrust:"8d6", swing:"10d6"};
damageTable[75] = {strength:"75", thrust:"8d6+2", swing:"10d6+2"};
damageTable[76] = {strength:"76", thrust:"8d6+2", swing:"10d6+2"};
damageTable[77] = {strength:"77", thrust:"8d6+2", swing:"10d6+2"};
damageTable[78] = {strength:"78", thrust:"8d6+2", swing:"10d6+2"};
damageTable[79] = {strength:"79", thrust:"8d6+2", swing:"10d6+2"};
damageTable[80] = {strength:"80", thrust:"9d6", swing:"11d6"};
damageTable[81] = {strength:"81", thrust:"9d6", swing:"11d6"};
damageTable[82] = {strength:"82", thrust:"9d6", swing:"11d6"};
damageTable[83] = {strength:"83", thrust:"9d6", swing:"11d6"};
damageTable[84] = {strength:"84", thrust:"9d6", swing:"11d6"};
damageTable[85] = {strength:"85", thrust:"9d6+2", swing:"11d6+2"};
damageTable[86] = {strength:"86", thrust:"9d6+2", swing:"11d6+2"};
damageTable[87] = {strength:"87", thrust:"9d6+2", swing:"11d6+2"};
damageTable[88] = {strength:"88", thrust:"9d6+2", swing:"11d6+2"};
damageTable[89] = {strength:"89", thrust:"9d6+2", swing:"11d6+2"};
damageTable[90] = {strength:"90", thrust:"10d6", swing:"12d6"};
damageTable[91] = {strength:"91", thrust:"10d6", swing:"12d6"};
damageTable[92] = {strength:"92", thrust:"10d6", swing:"12d6"};
damageTable[93] = {strength:"93", thrust:"10d6", swing:"12d6"};
damageTable[94] = {strength:"94", thrust:"10d6", swing:"12d6"};
damageTable[95] = {strength:"95", thrust:"10d6+2", swing:"12d6+2"};
damageTable[96] = {strength:"96", thrust:"10d6+2", swing:"12d6+2"};
damageTable[97] = {strength:"97", thrust:"10d6+2", swing:"12d6+2"};
damageTable[98] = {strength:"98", thrust:"10d6+2", swing:"12d6+2"};
damageTable[99] = {strength:"99", thrust:"10d6+2", swing:"12d6+2"};
damageTable[100] = {strength:"100", thrust:"11d6", swing:"13d6"};
return damageTable;
}
// check for combat reflexes toggle box
on('change:combat_reflexes', function(e){
updateActiveDefenses();
});
/**
* Get combat reflexes. Update active defenses
*/
function updateActiveDefenses(callback) {
// get the defense values
getAttrs(['combat_reflexes', 'dodge_mod', 'fear_check_mod'], function(values) {
callback = callback || noop;
// + means to convert variable to number
var chkCombatReflexes = +values.combat_reflexes;
var modDodge = 0;
var modFear = 0;
if (chkCombatReflexes == 1) {
modDodge = 1;
modFear = 2;
} else {
modDodge = -1;
modFear = -2;
}
// update dodge modifier
var orig_dodge_mod = 0;
if (isNaN(values.dodge_mod)) {
orig_dodge_mod = 0;
} else {
orig_dodge_mod = +values.dodge_mod;
}
var new_dodge_mod = orig_dodge_mod + modDodge;
// update fear check
var orig_fear_check_mod = 0;
if (isNaN(values.fear_check_mod)) {
orig_fear_check_mod = 0;
} else {
orig_fear_check_mod = +values.fear_check_mod;
}
var new_fear_check_mod = orig_fear_check_mod + modFear;
// update
// set thrust and swing
setAttrs({
dodge_mod: new_dodge_mod,
fear_check_mod: new_fear_check_mod
});
});
}
// check for update to basic_move
on("change:basic_move", function (e) {
updateEnumbranceTable();
});
/**
* Update the air, water, jump moves based on
* basic move, flight, amphibious, enhanced move (ground, air, water)
*/
function updateEnumbranceTable() {
getAttrs(['basic_move'], function(values) {
console.log("basic_move: ", values.basic_move);
});
}
// check for manual or calculated option
on("change:use_unspent_box", function (e) {
updateToggleUnspentCheckBox();
});
/**
* Updates the hidden toggle_unspent_points. Used by
* css to show/hide unspent boxes
* see: gurps.css -> input.sheet-toggle-unspoint-points[value="1"]
*
*/
function updateToggleUnspentCheckBox() {
getAttrs(['use_unspent_box'], function(values) {
setAttrs({
toggle_unspent_points: values.use_unspent_box
});
});
}
// check for selected damage dice change
on("change:damage_dice_type", function (e) {
updateDiceDamageIcons();
});
/**
* Controller function to update each section of
* damage dice icons
*/
function updateDiceDamageIcons() {
updateThrustSwingDamageIcons();
updateRepeatingDamageDice("repeating_melee");
//updateRepeatingDamageDice("repeating_ranged");
}
/**
* Update the Thrust and Swing Damage Icons
* on the general tab by setting the hidden inputs
*/
function updateThrustSwingDamageIcons() {
console.log("Update Thrust Swing Damage Icons");
getAttrs(['damage_dice_type'], function(values) {
console.log("KEN: dice type:", values.damage_dice_type);
setAttrs({
thrust_damage_dice_icon: values.damage_dice_type,
swing_damage_dice_icon: values.damage_dice_type
});
});
}
/**
* Gets the repeating sections ids. loop through
* each id, must use getAttrs() inside the loop,
* then set the hidden input for dice damge icon
*
* @param string sectionID Repeating section id
*/
function updateRepeatingDamageDice(sectionID) {
console.log("KEN: update repeating dice damage icon. sectionID: ", sectionID);
// get all the ids for each repeating section
getSectionIDs(sectionID, function (ids) {
console.log("KEN ids: ", ids);
// loop though each ids using underscores
// see: https://underscorejs.org/#each
_.each(ids,function(id) {
getAttrs(['damage_dice_type'], function(values) {
console.log("KEN: repeating dice type:", values.damage_dice_type);
var hiddenDamageIcon = [sectionID + "_" + id + "_damage_dice_icon"];
console.log("hiddenDamageIcon: ", hiddenDamageIcon);
// set the hidden input attribute
setAttrs({
[sectionID + "_" + id + "_damage_dice_icon"]: values.damage_dice_type
});
});
});
});
}
</script>