Files
roll20-character-sheets-tester/GURPS/gurps.html
T
Tom Smalls f2d3ccb5f7 [GURPS} Fixed bug in Hitlocation Box
Fixed a bug where an attr_location_dr_max and attr_location_dr where inconsistant
2018-07-26 17:21:02 -07:00

2994 lines
109 KiB
HTML

<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" /><span>Traits</span>
<input type="radio" name="attr_tab" value="3" class="sheet-tab sheet-tab3" /><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 attribute.
<br />
All derived attributes draw their base from your<br />
unmodified attributes. Therefore this MOD will<br />
generally only affect direct attribute rolls and<br />
skills 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">
<button type="roll" value="/roll @{thrust}" name="roll_dmgThrust" />
</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">
<button type="roll" value="/roll @{swing}" name="roll_dmgSwing" />
</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">
Primary Hand
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_hand" />
</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">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">
Point Summary
</div>
</div> <!-- .sheet-header -->
<div class="sheet-row sheet-row-attributes">
<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-total sheet-hr">
<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-unspent sheet-hr">
<div class="sheet-cell sheet-col0 sheet-label">
Unspent
</div>
<div class="sheet-cell sheet-col1">
<input type="text" name="attr_unspent_points" disabled="disabled" value="@{total_points} - (@{att_points} + @{trait_points} + @{skill_points} + @{misc_points})" />
</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 _____ _____ -->
<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">Max Load</div>
<div class="sheet-cell sheet-col2">Move</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-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="round(2 * @{basic_lift})" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_1" value="floor((@{basic_move}) * 0.8)" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_1" value="@{dodge} - 1" 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="round(3 * @{basic_lift})" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_2" value="floor((@{basic_move}) * 0.6)" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_2" value="@{dodge} - 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="round(6 * @{basic_lift})" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_3" value="floor((@{basic_move}) * 0.4)" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_3" value="@{dodge} - 3" 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="round(10 * @{basic_lift})" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_move_4" value="floor((@{basic_move}) * 0.2)" disabled="disabled" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_dodge_4" value="@{dodge} - 4" 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" 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-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">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.0">One-Way</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.0">One-Way</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_languages -->
</div> <!-- .sheet-table -->
</div> <!-- .sheet-box .sheet-language -->
<div class="sheet-clearfix"> </div>
<!-- _____ _____ ADVENTAGES 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</div>
<div class="sheet-cell sheet-col1">
<div class="sheet-popup">CR</div>
<span class="sheet-tooltip">
Control Rating
<br />
<table>
<tbody>
<tr><td>6 or less</td><td>2x</td></tr>
<tr><td>9 or less</td><td>1.5x</td></tr>
<tr><td>12 or less</td><td>1x</td></tr>
<tr><td>15 or less</td><td>0.5x</td></tr>
</tbody>
</table>
</span>
</div>
<div class="sheet-cell sheet-col2">Pts</div>
<div class="sheet-cell sheet-col3">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_control_rating" />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_points" />
</div>
<div class="sheet-cell sheet-col3">
<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 -->
<div class="sheet-box sheet-disadvantages">
<div class="sheet-table">
<div class="sheet-header">
<div class="sheet-cell sheet-col0">Disadvantages</div>
<div class="sheet-cell sheet-col1">
<div class="sheet-popup">SCN</div>
<span class="sheet-tooltip">
Self-control Number
<br />
<table>
<tbody>
<tr><td>6 or less</td><td>2x</td></tr>
<tr><td>9 or less</td><td>1.5x</td></tr>
<tr><td>12 or less</td><td>1x</td></tr>
<tr><td>15 or less</td><td>0.5x</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 -->
<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
<br />
<table>
<tbody>
<tr><td>6 or less</td><td>2x</td></tr>
<tr><td>9 or less</td><td>1.5x</td></tr>
<tr><td>12 or less</td><td>1x</td></tr>
<tr><td>15 or less</td><td>0.5x</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">
<input type="number" name="attr_max" value="0" />
</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">
Skull
</div>
<div class="sheet-cell sheet-col1">
-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">
Face
</div>
<div class="sheet-cell sheet-col1">
-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">
Eyes
</div>
<div class="sheet-cell sheet-col1">
-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-eyes">
<div class="sheet-cell sheet-col0 sheet-label">
Neck
</div>
<div class="sheet-cell sheet-col1">
-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-r-arm">
<div class="sheet-cell sheet-col0 sheet-label">
Arms
</div>
<div class="sheet-cell sheet-col1">
-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">
Hands
</div>
<div class="sheet-cell sheet-col1">
-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">
Torso
</div>
<div class="sheet-cell sheet-col1">
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">
Vitals
</div>
<div class="sheet-cell sheet-col1">
-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-groind">
<div class="sheet-cell sheet-col0 sheet-label">
Groin
</div>
<div class="sheet-cell sheet-col1">
-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-l-leg">
<div class="sheet-cell sheet-col0 sheet-label">
Legs
</div>
<div class="sheet-cell sheet-col1">
-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">
Feet
</div>
<div class="sheet-cell sheet-col1">
-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-r-foot">
<div class="sheet-cell sheet-col0 sheet-label">
Area
</div>
<div class="sheet-cell sheet-col1">
-
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_area_dr_max" value="0" />
</div>
</div> <!-- .sheet-row -->
<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> <!-- .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">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_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">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-col2">
<div class="sheet-popup">Damage</div>
<span class="sheet-tooltip">
<strong>Armour Divisor</strong>: A number in parenthesis after<br />
the damage - eg. (2) - is an armour divisor.<br />
Divide the target"s DR by this number.
<br />
<strong>ex</strong>: indicates the attack causes an explosion.<br />
See page 269.
</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-col5">Skill</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_reach" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_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">
<button type="roll" value="@{roll} [[@{damage}]] @{type} damage. (@{name})" name="roll_damage" />
</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-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_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">RNG</div>
<span class="sheet-tooltip">
See page 269.
</span>
</div>
<div class="sheet-cell sheet-col2">Acc</div>
<div class="sheet-cell sheet-col3">
<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 split<br />
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-col4">
<div class="sheet-popup">Shots</div>
<span class="sheet-tooltip">
The number of shots that can be fired before the weapon must be reloaded.
<br />
The parenthetical number indicates the number of 1 second ready maneuvers<br />
required to reload the 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 time<br />
is for each shot.
</span>
</div>
<div class="sheet-cell sheet-col5">Bulk</div>
<div class="sheet-cell sheet-col6">
<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-col7">DAM</div>
<div class="sheet-cell sheet-col8">
<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-col10">Skill</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_range" />
</div>
<div class="sheet-cell sheet-col2">
<input type="text" name="attr_acc" />
</div>
<div class="sheet-cell sheet-col3">
<input type="text" name="attr_rof" />
</div>
<div class="sheet-cell sheet-col4">
<input type="text" name="attr_shots" />
</div>
<div class="sheet-cell sheet-col5">
<input type="text" name="attr_bulk" />
</div>
<div class="sheet-cell sheet-col6">
<input type="text" name="attr_recoil" />
</div>
<div class="sheet-cell sheet-col7">
<input type="text" name="attr_damage" />
</div>
<div class="sheet-cell sheet-col8">
<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-col9">
<button type="roll" value="@{roll} [[@{damage}]] @{type} damage. (For @{name})" name="roll_damage" />
</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}]] **Notes:** @{notes}" name="roll_vsSL" />
</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_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">
<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-col2">#</div>
<div class="sheet-cell sheet-col3">$</div>
<div class="sheet-cell sheet-col4">W</div>
<div class="sheet-cell sheet-col5">$+</div>
<div class="sheet-cell sheet-col6">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 class="sheet-boolean" type="checkbox" name="attr_carried" value="1" checked />
</div>
<div class="sheet-cell sheet-col2">
<input type="number" name="attr_count" value="1" />
</div>
<div class="sheet-cell sheet-col3">
<input type="number" name="attr_cost" value="0" />
</div>
<div class="sheet-cell sheet-col4">
<input type="number" name="attr_weight" value="0" step="any" />
</div>
<div class="sheet-cell sheet-col5">
<span name="attr_costtotal" value="0" />
</div>
<div class="sheet-cell sheet-col6">
<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" 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" 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>Known Issues</h3>
<ul>
<li>Unable to delete a Technique</li>
<li>Need an option for setting a character's Native language, which is 0 points</li>
</ul>
<h3>Revision History</h3>
<p>To report an Issues or a Suggestion, please use the Roll20 forum under Character Sheets & Compendium.
I have created a thread named: [GURPS] - Sheet #1 - Thread 1 (that seems to be similar to the naming
convention used by other sheets). 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 (Like Tom and I are doing) - perhaps later we can use GitHub.</p>
<h4>Version: 1.3.6</h4>
<p>Pull Request: 07/25/2018</p>
<ul>
<li>Changes, Fixes, and Adds made by Mike W</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 only</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 Rating 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>
<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.3.4';
var modCascade = true;
var modCascadeAll = true;
/* 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 *********');
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 });
// initalize 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);
}
});
});
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 * 100) / 100 }, {silent: false}, thenEncumbrance);
});
// Update attributes, then secondary characteristics, and so on...
updateST(function () {
// After ST...
updateHP(thenCurrentMoveDodge);
updateLift(thenEncumbrance);
updateStrikingST();
});
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
on('change:intelligence change:willpower_points change:willpower_mod change:fear_check_points change:fear_check_mod', function (e) {
updateWill();
});
// Updage Willpower, Fear
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 = 0;
move = 0;
} else {
dodge = dodge - +v.encumbrance_level;
move = Math.floor(+v.basic_move * (1 - (0.2 * +v.encumbrance_level)));
dodge = dodge < 0 ? 0 : dodge;
move = move < 0 ? 0 : 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:repeating_languages:spoken change:repeating_languages:written remove:repeating_languages', function (e) {
var total = 0;
var tally = _.after(2, function () {
setAttrs({ languages_points: total });
});
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 * 100) / 100,
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: (v * 100) / 100 });
});
});
// 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 = 5;
} 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 });
});
});
</script>