5967 lines
234 KiB
HTML
5967 lines
234 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" title="Languages, Advantages, Disadvantages, and Cultural Familiarities" /><span>Traits</span>
|
||
<input type="radio" name="attr_tab" value="3" class="sheet-tab sheet-tab3" title="Skills and Techniques" /><span>Skills</span>
|
||
<input type="radio" name="attr_tab" value="4" class="sheet-tab sheet-tab4" /><span>Combat</span>
|
||
<input type="radio" name="attr_tab" value="5" class="sheet-tab sheet-tab5" /><span>Inventory</span>
|
||
<input type="radio" name="attr_tab" value="6" class="sheet-tab sheet-tab6" /><span>Grimoire</span>
|
||
<input type="radio" name="attr_tab" value="7" class="sheet-tab sheet-tab7" /><span>Updates</span>
|
||
<input type="radio" name="attr_tab" value="0" class="sheet-tab sheet-tab0" /><span title="Sheet Options">y</span>
|
||
<div class="sheet-tab-br"></div>
|
||
|
||
|
||
<!-- ===== ===== ===== ===== GENERAL TAB ===== ===== ===== ===== -->
|
||
<div class="sheet-tab1">
|
||
|
||
<!-- _____ _____ ATTRIBUTE BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-attribute">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Attributes</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<div class="sheet-popup">Mod</div>
|
||
<span class="sheet-tooltip">
|
||
A modifier that will be applied to your
|
||
<br />
|
||
attribute. All derived attributes draw their<br />
|
||
base from your unmodified attributes.<br />
|
||
Therefore this MOD will generally only<br />
|
||
affect direct attribute rolls and skill rolls.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">Pts</div>
|
||
</div> <!-- .sheet-header -->
|
||
<div class="sheet-main-attribute">
|
||
<div class="sheet-row sheet-row-strength">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">ST</div>
|
||
<span class="sheet-tooltip">
|
||
Strength
|
||
<br />
|
||
10pts/level
|
||
<br />
|
||
Unmodified <span name="attr_strength_base"></span>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_strength" value="10" readonly="readonly" >
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_strength_mod" value="0" step="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_strength_points" value="0" step="10" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Strength Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{strength} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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="&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Dexterity Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{dexterity} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Intelligence Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{intelligence} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Health Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{health} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Perception Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{perception} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Vision Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{vision} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Hearing Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{hearing} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Taste/Smell Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{taste_smell} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Touch Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{touch} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Will Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{willpower} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Attribute Check}} {{characterName=@{character_name}}} {{skillName=Fear Roll}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{fear_check} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" 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="" step="0.25" 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="@{speed_tracker} @{selected|token_name} has a speed of [[@{basic_speed} &{tracker}]]. Added to 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-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Enhncd</div>
|
||
<span class="sheet-tooltip">
|
||
Enhanced ground move.
|
||
<br />
|
||
10pts per half level. Can use up|down arrow keys
|
||
<br />
|
||
Level: <span name="attr_enhanced_ground_move_multiple" value="0"></span>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_enhanced_ground_move" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_enhanced_ground_move_mod" value="0" step=".5" class="editable" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_enhanced_ground_move_points" value="0" step="10" class="editable" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-dodge">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Dodge</div>
|
||
<span class="sheet-tooltip">
|
||
Dodge
|
||
<br />
|
||
Based on Basic Speed
|
||
<br />
|
||
Unmodified: <span name="attr_dodge_base" value="0"></span>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_dodge" value="" readonly="readonly" >
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_dodge_mod" value="0" step="1" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-lift-st sheet-hr">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Lift ST</div>
|
||
<span class="sheet-tooltip">
|
||
Lifting Strength
|
||
<br />
|
||
Based on Strength
|
||
<br />
|
||
3pts/level
|
||
<br />
|
||
Unmodified: <input class="sheet-inline" type="number" name="attr_lift_st_base" readonly="readonly" >
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_lift_st" value="0" readonly="readonly" >
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_lift_st_mod" value="0" step="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_lift_st_points" value="0" step="3" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-lift">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Lift</div>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_basic_lift" value="0" readonly="readonly" >
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-strike-st sheet-hr">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Striking</div>
|
||
<span class="sheet-tooltip">
|
||
Striking Strength
|
||
<br />
|
||
Based on Strength
|
||
<br />
|
||
5pts/level
|
||
<br />
|
||
Unmodified: <input class="sheet-inline" type="number" name="attr_striking_st_base" readonly="readonly" >
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_striking_st" value="0" readonly="readonly" >
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_striking_st_mod" value="0" step="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_striking_st_points" value="0" step="5" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-thrust-damage">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Thrust</div>
|
||
<span class="sheet-tooltip">
|
||
Thrust Damage
|
||
<br />
|
||
<div>See page 16 for the complete table.</div>
|
||
<table>
|
||
<thead><tr><th>Strength</th><th>Thrust</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>1</td><td>1d6-6</td></tr>
|
||
<tr><td>2</td><td>1d6-6</td></tr>
|
||
<tr><td>3</td><td>1d6-5</td></tr>
|
||
<tr><td>4</td><td>1d6-5</td></tr>
|
||
<tr><td>5</td><td>1d6-4</td></tr>
|
||
<tr><td>6</td><td>1d6-4</td></tr>
|
||
<tr><td>7</td><td>1d6-3</td></tr>
|
||
<tr><td>8</td><td>1d6-3</td></tr>
|
||
<tr><td>9</td><td>1d6-2</td></tr>
|
||
<tr><td>10</td><td>1d6-2</td></tr>
|
||
<tr><td>11</td><td>1d6-1</td></tr>
|
||
<tr><td>12</td><td>1d6-1</td></tr>
|
||
<tr><td>13</td><td>1d6</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<table>
|
||
<thead><tr><th>Strength</th><th>Thrust</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>14</td><td>1d6</td></tr>
|
||
<tr><td>15</td><td>1d6+1</td></tr>
|
||
<tr><td>16</td><td>1d6+1</td></tr>
|
||
<tr><td>17</td><td>1d6+2</td></tr>
|
||
<tr><td>18</td><td>1d6+2</td></tr>
|
||
<tr><td>19</td><td>2d6-1</td></tr>
|
||
<tr><td>20</td><td>2d6-1</td></tr>
|
||
<tr><td>21</td><td>2d6</td></tr>
|
||
<tr><td>22</td><td>2d6</td></tr>
|
||
<tr><td>23</td><td>2d6+1</td></tr>
|
||
<tr><td>24</td><td>2d6+1</td></tr>
|
||
<tr><td>25</td><td>2d6+2</td></tr>
|
||
<tr><td>26</td><td>2d6+2</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_thrust" value="1d6-2" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<input type="hidden" name="attr_thrust_damage_dice_icon" class="thrust-damage-dice-icon" value="explode" />
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Damage Roll}} {{characterName=@{character_name}}} {{skillName=Thrust Damage}} {{damageRoll=[[@{thrust}]]}}" name="roll_dmgThrust" class="roll_damage" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-swing-damage">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Swing</div>
|
||
<span class="sheet-tooltip">
|
||
Swing Damage
|
||
<br />
|
||
<div>See page 16 for the complete table.</div>
|
||
<table>
|
||
<thead><tr><th>Strength</th><th>Swing</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>1</td><td>1d6-5</td></tr>
|
||
<tr><td>2</td><td>1d6-5</td></tr>
|
||
<tr><td>3</td><td>1d6-4</td></tr>
|
||
<tr><td>4</td><td>1d6-4</td></tr>
|
||
<tr><td>5</td><td>1d6-3</td></tr>
|
||
<tr><td>6</td><td>1d6-3</td></tr>
|
||
<tr><td>7</td><td>1d6-2</td></tr>
|
||
<tr><td>8</td><td>1d6-2</td></tr>
|
||
<tr><td>9</td><td>1d6-1</td></tr>
|
||
<tr><td>10</td><td>1d6</td></tr>
|
||
<tr><td>11</td><td>1d6+1</td></tr>
|
||
<tr><td>12</td><td>1d6+2</td></tr>
|
||
<tr><td>13</td><td>2d6-1</td></tr>
|
||
</tbody>
|
||
</table>
|
||
<table>
|
||
<thead><tr><th>Strength</th><th>Swing</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>14</td><td>2d6</td></tr>
|
||
<tr><td>15</td><td>2d6+1</td></tr>
|
||
<tr><td>16</td><td>2d6+2</td></tr>
|
||
<tr><td>17</td><td>3d6-1</td></tr>
|
||
<tr><td>18</td><td>3d6</td></tr>
|
||
<tr><td>19</td><td>3d6+1</td></tr>
|
||
<tr><td>20</td><td>3d6+2</td></tr>
|
||
<tr><td>21</td><td>4d6-1</td></tr>
|
||
<tr><td>22</td><td>4d6</td></tr>
|
||
<tr><td>23</td><td>4d6+1</td></tr>
|
||
<tr><td>24</td><td>4d6+2</td></tr>
|
||
<tr><td>25</td><td>5d6-1</td></tr>
|
||
<tr><td>26</td><td>5d6</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_swing" value="1d6" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<input type="hidden" name="attr_swing_damage_dice_icon" class="swing-damage-dice-icon" value="explode" />
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Damage Roll}} {{characterName=@{character_name}}} {{skillName=Swing Damage}} {{damageRoll=[[@{swing}]]}}" name="roll_dmgSwing" class="roll_damage" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-flight-advantage sheet-hr">
|
||
<div class="title"><h3>Flying</h3></div>
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Flight</div>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="checkbox" name="attr_flight_checked" value="1" class="sheet-boolean" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_flight_points" value="0" class="editable" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Air Mv</div>
|
||
<span class="sheet-tooltip">
|
||
Bas Air Move = Basic Speed * 2 = <input class="sheet-inline" type="number" name="attr_basic_air_move_unmodified" readonly="readonly">
|
||
<br />
|
||
2pts/level, you can use up and down arrows
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_basic_air_move" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_basic_air_move_mod" value="0" step="1" class="editable" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_basic_air_move_points" value="0" step="2" class="editable" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-enhanced-air">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Enhncd</div>
|
||
<span class="sheet-tooltip">
|
||
Enhanced Air Move<br />
|
||
Modifier box: steps of .5, you can use up and down arrows.<br />
|
||
Points box: 10 points per half-level, you can use up and down arrows.<br />
|
||
Each level doubles top air move. Half-level is a multiple of 1.5.<br />
|
||
Level: <span name="attr_enhanced_air_move_level" value="0"></span>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_enhanced_air_move" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_enhanced_air_level" value="0" step=".5" class="editable" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_enhanced_air_move_points" value="0" step="10" class="editable" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-flight-advantage sheet-hr">
|
||
<div class="title"><h3>Swimming</h3></div>
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Amphib</div>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="checkbox" name="attr_amphibious_checked" value="1" class="sheet-boolean" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_amphibious_points" value="0" class="editable" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Wtr Mv</div>
|
||
<span class="sheet-tooltip">
|
||
Basic Move = <input class="sheet-inline" type="number" name="attr_basic_water_move_unmodified" readonly="readonly"><br />
|
||
Formula = Basic Move / 5 or Basic Move if amphibious.<br />
|
||
5pts/level, you can use up and down arrows.<br />
|
||
NOTE: Max +2 water move if you have swimming skill.<br />
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_basic_water_move" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_basic_water_move_mod" value="0" step="1" class="editable" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_basic_water_move_points" value="0" step="5" class="editable" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-enhanced-air">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Enhncd</div>
|
||
<span class="sheet-tooltip">
|
||
Enhanced Water Move<br />
|
||
Modifier box: steps of .5, you can use up and down arrows.<br />
|
||
Points box: 10 points per half-level, you can use up and down arrows.<br />
|
||
Each level doubles top water move. Half-level is a multiple of 1.5.<br />
|
||
Level: <span name="attr_enhanced_water_move_level" value="0"></span>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_enhanced_water_move" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_enhanced_water_level" value="0" step=".5" class="editable" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_enhanced_water_move_points" value="0" step="10" class="editable" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-flight-advantage sheet-hr">
|
||
<div class="title"><h3>Jumping</h3></div>
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Skill</div>
|
||
<span class="sheet-tooltip">
|
||
Jump Skill. If entered, use Jump skill/2 instead of Basic Move.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_jump_skill" value="" class="editable" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Use ST</div>
|
||
<span class="sheet-tooltip">
|
||
If Basic Lift (<input type="text" name="attr_display_jump_basic_lift" value="@{simple_lift}" disabled="disabled" class="textInline" />) > body weight, use ST/4 instead of Move or Jump skill.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="checkbox" name="attr_use_st_for_jump" value="1" class="sheet-boolean" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-enhanced-air">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Super</div>
|
||
<span class="sheet-tooltip">
|
||
Super Jump<br />
|
||
Modifier box: steps of 1, you can use up and down arrows.<br />
|
||
Points box: 10 points per level, you can use up and down arrows.<br />
|
||
Each level doubles jump.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_super_jump_level" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_super_jump_entered_level" value="0" step="1" class="editable" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_super_jump_points" value="0" step="10" class="editable" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Prep</div>
|
||
<span class="sheet-tooltip">
|
||
Concentrate for 2 seconds for full jump distances.<br />
|
||
If no concentration, jump distances are halved.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="checkbox" name="attr_jump_concentration" value="1" class="sheet-boolean" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
feet
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
yards
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Broad</div>
|
||
<span class="sheet-tooltip">
|
||
Standing Broad Jump Distance.<br />
|
||
First column is base move stat.<br />
|
||
Formula = (2 x Stat To use) - 3 feet<br />
|
||
Stat to use: <input type="text" name="attr_standing_broad_jump_stat_to_use" value="" readonly="readonly" class="textInline width-wide" /><br />
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_broad_jump_base" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_broad_jump_distance_feet" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="text" name="attr_broad_jump_distance_yards" value="0" readonly="readonly" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Run</div>
|
||
<span class="sheet-tooltip">
|
||
Running Broad Jump.<br />
|
||
Formula = (2 x Stat To use) - 3 feet<br />
|
||
Stat to use: <input type="text" name="attr_running_broad_jump_stat_to_use" value="" readonly="readonly" class="textInline width-wide" /><br />
|
||
Max running broad jump distance is twice standing broad jump distance.<br />
|
||
Basic Set Campaigns Page 352.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" step="1" name="attr_running_jump_yards_moved" value="0" class="editable">
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_running_jump_distance_feet" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="text" name="attr_running_jump_distance_yards" value="0" readonly="readonly">
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">High</div>
|
||
<span class="sheet-tooltip">
|
||
High Jump Distance.<br />
|
||
First column is base move stat.<br />
|
||
Formula = (6 x Stat To use) - 10 inches<br />
|
||
Stat to use: <input type="text" name="attr_standing_high_jump_stat_to_use" value="" readonly="readonly" class="textInline width-wide" />
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_high_jump_base" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_high_jump_distance_feet" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="text" name="attr_high_jump_distance_yards" value="0" readonly="readonly">
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Run</div>
|
||
<span class="sheet-tooltip">
|
||
Running High Jump.<br />
|
||
Formula = (6 x Stat To use) - 10 inches<br />
|
||
Stat to use: <input type="text" name="attr_running_high_jump_stat_to_use" value="" readonly="readonly" class="textInline width-wide" /><br />
|
||
Max running high jump distance is twice standing high jump distance.<br />
|
||
Basic Set Campaigns Page 352.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" step="1" name="attr_running_high_jump_yards_moved" value="0" class="editable">
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_running_high_jump_distance_feet" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="text" name="attr_running_high_jump_distance_yards" value="0" readonly="readonly">
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-basic-move">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">JMP MV</div>
|
||
<span class="sheet-tooltip">
|
||
Jump move.<br />
|
||
Greater of Broad Jump Yards / 5 OR Normal Ground Move.<br />
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_jump_move_speed" value="0" readonly="readonly">
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-attributes -->
|
||
|
||
<div class="sheet-box sheet-stats">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Stats</div>
|
||
<div class="sheet-cell sheet-col1">Value</div>
|
||
<div class="sheet-cell sheet-col2">Mod</div>
|
||
<div class="sheet-cell sheet-col3">Pts</div>
|
||
</div> <!-- .sheet-header -->
|
||
<div class="sheet-row sheet-row-hit-points">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Max HP</div>
|
||
<span class="sheet-tooltip">
|
||
Hit Points
|
||
<br />
|
||
Based on Strength
|
||
<br />
|
||
2pts/level
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_hit_points_max" value="10" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_hit_points_mod" value="0" step="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_hit_points_points" value="0" step="2" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-sub-row sheet-row-current-points">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Current HP</div>
|
||
<span class="sheet-tooltip">
|
||
Current Hit Points
|
||
<br />
|
||
When you're hit points are low, you take penalties.
|
||
<br />
|
||
See Page 419.
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td class="sheet-label">Reeling</td>
|
||
<td><input type="text" name="attr_hp_reeling" value="[[floor((@{hit_points|max}) / 3)]]" disabled="disabled"></td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
- Halve Move, Speed, and Dodge
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="sheet-label">Verge of Collapse</td>
|
||
<td><input type="text" value="Less than 0" readonly="readonly" ></td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
- Roll every turn @{VS} HT or fall unconscious.
|
||
<br />
|
||
- Your HT roll is at -1 for every 1xHP you are below 0.
|
||
<br />
|
||
- If you do nothing, and don't defend, you don't have to roll.
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="sheet-label">Verge of Death</td>
|
||
<td><input type="number" name="attr_hp_verge" value="[[(@{hit_points|max}) * -1]]" disabled="disabled"></td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
- Roll once @{VS} HT to stay alive.
|
||
<br />
|
||
- If you fail by 1 or 2 you are mortally wounded, but not dead.
|
||
<br />
|
||
- Roll again every time you take injury that puts you below<br />
|
||
another multiple of your max HP.
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="sheet-label">Death</td>
|
||
<td><input type="number" name="attr_hp_death" value="[[(@{hit_points|max}) * -5]]" disabled="disabled"></td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
- You are dead.
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="sheet-label">Total Destruction</td>
|
||
<td><input type="number" name="attr_hp_destruction" value="[[(@{hit_points|max}) * -10]]" disabled="disabled"></td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
- Your body has been destroyed beyond recognition or ressurection.
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_hit_points" value="10" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-fatigue-points">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Max FP</div>
|
||
<span class="sheet-tooltip">
|
||
Fatigue Points
|
||
<br />
|
||
Based on Health
|
||
<br />
|
||
3pts/level
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_fatigue_points_max" value="10" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_fatigue_points_mod" value="0" step="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_fatigue_points_points" value="0" step="3" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-sub-row sheet-row-current-points">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Current FP</div>
|
||
<span class="sheet-tooltip">
|
||
Current Fatigue Points
|
||
<br />
|
||
When you're fatigue points are low you take penalties.
|
||
<br />
|
||
See Page 426.
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td class="sheet-label">Tired</td>
|
||
<td><input type="number" name="attr_fp_tired" value="[[floor((@{fatigue_points|max}) / 3)]]" disabled="disabled"></td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
- Halve Move, ST, and Dodge
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="sheet-label">Verge of Collapse</td>
|
||
<td><input type="text" value="Less than 0" disabled="disabled"></td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
- Further FP loss also comes off your HP.
|
||
<br />
|
||
- Roll against Will to do anything besides rest or talk.
|
||
<br />
|
||
- If you fail your Will roll, you fall unconscious.
|
||
<br />
|
||
- On a critical failure, roll @{VS} HT or suffer a heart attack.
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="sheet-label">Unconscious</td>
|
||
<td><input type="number" name="attr_fp_unconscious" value="[[-(@{fatigue_points|max})]]" disabled="disabled"></td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
- Immediately fall unconscious
|
||
<br />
|
||
- FP can't drop any lower, but you still lose HP.
|
||
<br />
|
||
- You regain consciousness at 0 FP
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_fatigue_points" value="10" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-energy-points">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Max ER</div>
|
||
<span class="sheet-tooltip">
|
||
Energy Reserve
|
||
<br />
|
||
Rules can vary depending on what<br />
|
||
magic system you are using.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_energy_points_max" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2"></div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_energy_points_points" value="0" step="3" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-sub-row sheet-row-current-points">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Current ER</div>
|
||
<span class="sheet-tooltip">
|
||
Current Energy Reserve
|
||
<br />
|
||
Rules can vary.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_energy_points" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-hr">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_user_pool1_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_user_pool1_max" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2"></div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_user_pool1_points" value=0 />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-sub-row sheet-row-current-points">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Current</div>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_user_pool1" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_user_pool2_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_user_pool2_max" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2"></div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_user_pool2_points" value=0 />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-sub-row sheet-row-current-points">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Current</div>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_user_pool2" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<!-- _____ _____ MISCELLENEOUS BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-miscelleneous">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Miscellaneous</div>
|
||
<div class="sheet-cell sheet-col1">Pts</div>
|
||
</div> <!-- .sheet-header -->
|
||
<div class="sheet-row sheet-row-tech-level">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Tech Level</div>
|
||
<span class="sheet-tooltip">
|
||
This is the technology level that you character is familiar with.
|
||
<br />
|
||
It costs 5 points to raise this above or below the campaign"s<br />normal TL.
|
||
<div class="sheet-clearfix"></div>
|
||
<table style="text-align: left;">
|
||
<tbody>
|
||
<tr><td>TL0</td><td>Stone Age (Prehistory and later). </td></tr>
|
||
<tr><td>TL1</td><td>Bronze Age (3500 B.C.+).</td></tr>
|
||
<tr><td>TL2</td><td>Iron Age (1200 B.C.+).</td></tr>
|
||
<tr><td>TL3</td><td>Medieval (600 A.D.+).</td></tr>
|
||
<tr><td>TL4</td><td>Age of Sail (1450+).</td></tr>
|
||
<tr><td>TL5</td><td>Industrial Revolution (1730+).</td></tr>
|
||
<tr><td>TL6</td><td>Mechanized Age (1880+).</td></tr>
|
||
<tr><td>TL7</td><td>Nuclear Age (1940+).</td></tr>
|
||
<tr><td>TL8</td><td>Digital Age (1980+).</td></tr>
|
||
<tr><td>TL9</td><td>Microtech Age (2025+?).</td></tr>
|
||
<tr><td>TL10</td><td>Robotic Age (2070+?).</td></tr>
|
||
<tr><td>TL11</td><td>Age of Exotic Matter.</td></tr>
|
||
<tr><td>TL12+</td><td>Whatever the GM likes!</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_tl" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" step="5" name="attr_tl_pts" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-appearance">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Appearance
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<select name="attr_appearance">
|
||
<option value="-24">Horrific (-6)</option>
|
||
<option value="-20">Monstrous (-5)</option>
|
||
<option value="-16">Hideous (-4)</option>
|
||
<option value="-8">Ugly (-2)</option>
|
||
<option value="-4">Unattractive (-1)</option>
|
||
<option value="0" selected="selected">Average</option>
|
||
<option value="4">Attractive (+1)</option>
|
||
<option value="12">Handsome (+4/2)</option>
|
||
<option value="16">Very Handsome (+6/2)</option>
|
||
<option value="20">Transcendent (+8/2)</option>
|
||
</select>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_appearance_pts" value="@{appearance}" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-race">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Race
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_race" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-gender">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Gender
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_gender" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-size">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Size Modifier
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_size" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-hand">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Pri Hand
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hand" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-reactions">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Reactions
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_reactions" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-miscelleneous -->
|
||
|
||
|
||
<!-- _____ _____ POINT SUMMARY BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-points">
|
||
<div class="sheet-table">
|
||
<input type="hidden" name="attr_toggle_unspent_points" class="sheet-toggle-unspoint-points" value="0" />
|
||
<div class="sheet-header">
|
||
<div class="sheet-popup">Point Sum</div>
|
||
<span class="sheet-tooltip">
|
||
<strong>Total</strong>: Manual input: Represents to total value of the<br/>
|
||
PC in Character Points (spent and unspent combined).
|
||
<br />
|
||
<strong>Spent</strong>: Automatic total of Spent points: Attributes +<br/>
|
||
Traits + Skills + Other.
|
||
<br/>
|
||
<strong>Unspent</strong>: Has the option of being Manual or<br/>
|
||
Automatic, depending on an option selected on the
|
||
<br/>
|
||
Settings page entitled ‘Enter Unspent Points’.
|
||
<br/>
|
||
Manual Mode (Blue color): You manually enter your
|
||
<br/>
|
||
Unspent points.
|
||
<br/>
|
||
Automatic mode (Black color): It calculates the
|
||
<br/>
|
||
point total difference between Total and Spent.
|
||
</span>
|
||
</div> <!-- .sheet-header -->
|
||
|
||
<div class="sheet-row sheet-row-other">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Total
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_total_points" value="150" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-attributes sheet-hr">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Attributes
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_att_points" value="@{strength_points} + @{dexterity_points} + @{intelligence_points} + @{health_points} + @{perception_points} + @{vision_points} + @{hearing_points} + @{taste_smell_points} + @{touch_points} + @{willpower_points} + @{fear_check_points} + @{hit_points_points} + @{fatigue_points_points} + @{energy_points_points} + @{user_pool1_points} + @{user_pool2_points} + @{basic_speed_points} + @{basic_move_points} + @{striking_st_points} + @{lift_st_points} + @{enhanced_ground_move_points} + @{flight_points} + @{basic_air_move_points} + @{enhanced_air_move_points} + @{amphibious_points} + @{basic_water_move_points} + @{enhanced_water_move_points} + @{super_jump_points}" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-traits">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Traits
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_trait_points" readonly="readonly" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-skills">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Skills
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_skill_points" disabled="disabled" value="@{skills_points} + @{techniques_points} + @{spells_points}" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-other">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Other
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_misc_points" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-other">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Spent
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_point_summary" disabled="disabled" value="@{att_points} + @{trait_points} + @{skill_points} + @{misc_points}" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-total sheet-hr">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Unspent
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_point_diff" value="@{total_points} - (@{att_points} + @{trait_points} + @{skill_points} + @{misc_points})" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-unspent sheet-hr">
|
||
<div class="sheet-cell sheet-col0 sheet-label sheet-unspent-points-label">
|
||
Unspent
|
||
</div>
|
||
<div class="sheet-cell sheet-col1 sheet-unspent-points">
|
||
<input type="text" name="attr_unspent_points" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-points -->
|
||
|
||
|
||
<!-- _____ _____ LIFTING BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-lift">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Lifting and Moving</div>
|
||
<div class="sheet-cell sheet-col1">Weight</div>
|
||
</div> <!-- .sheet-header -->
|
||
<div class="sheet-row sheet-row-simple-lift">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Simple Lift</div>
|
||
<span class="sheet-tooltip">
|
||
The weight the character can lift overhead<br />with one hand in one second.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_simple_lift" value="round(@{basic_lift})" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-one-handed-lift">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">One-Handed Lift</div>
|
||
<span class="sheet-tooltip">
|
||
The weight the character can lift overhead<br />with one hand in two seconds.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_one_hand_lift" value="round(2 * @{basic_lift})" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-two-handed-lift">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Two-Handed Lift</div>
|
||
<span class="sheet-tooltip">
|
||
The weight the character can lift overhead<br />with both hands in four seconds.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_two_hand_lift" value="round(8 * @{basic_lift})" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-shove-knock-over">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">Shove & 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 & 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 - Original author(s) misspelled this througout the file_____ _____ -->
|
||
<!-- Note: Many of the Move and Dodge calculations were complicated, this was to allow for a Minimum Move of 1 and a Minimum Dodge of 1 -->
|
||
|
||
<div class="sheet-box sheet-encumberance">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Encumberance</div>
|
||
<div class="sheet-cell sheet-colAll">Load</div>
|
||
<div class="sheet-cell sheet-colAll">Move</div>
|
||
<div class="sheet-cell sheet-colAll">ENH MOVE</div>
|
||
<div class="sheet-cell sheet-colAll">Air</div>
|
||
<div class="sheet-cell sheet-colAll">Water</div>
|
||
<div class="sheet-cell sheet-colAll">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-colAll">
|
||
<input type="text" name="attr_lift_0" value="@{basic_lift}" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_move_0" value="@{basic_move}" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_enhanced_move_0" value="" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_air_0" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_water_0" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" 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-colAll">
|
||
<input type="text" name="attr_lift_1" value="2 * @{basic_lift}" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_move_1" value="[[((1 + floor((@{basic_move} * 0.8))) + abs(1 - floor((@{basic_move} * 0.8)))) / 2]]" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_enhanced_move_1" value="" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_air_1" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_water_1" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_dodge_1" value="[[((1 + (@{dodge} - 1)) + abs(1 - (@{dodge} - 1))) / 2]]" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-encumberance-2">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Medium (2)
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_lift_2" value="floor(3 * @{basic_lift}*100)/100" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_move_2" value="[[((1 + floor((@{basic_move} * 0.6))) + abs(1 - floor((@{basic_move} * 0.6)))) / 2]]" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_enhanced_move_2" value="" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_air_2" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_water_2" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_dodge_2" value="[[((1 + (@{dodge} - 2)) + abs(1 - (@{dodge} -2))) / 2]]" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-encumberance-3">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Heavy (3)
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_lift_3" value="floor(6 * @{basic_lift}*100)/100" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_move_3" value="[[((1 + floor((@{basic_move} * 0.4))) + abs(1 - floor((@{basic_move} * 0.4)))) / 2]]" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_enhanced_move_3" value="" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_air_3" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_water_3" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_dodge_3" value="[[((1 + (@{dodge} - 3)) + abs(1 - (@{dodge} -3))) / 2]]" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-encumberance-4">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
X-Heavy (4)
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_lift_4" value="10 * @{basic_lift}" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_move_4" value="[[((1 + floor((@{basic_move} * 0.2))) + abs(1 - floor((@{basic_move} * 0.2)))) / 2]]" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_enhanced_move_4" value="" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_air_4" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_water_4" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_dodge_4" value="[[((1 + (@{dodge} -4)) + abs(1 - (@{dodge} - 4))) / 2]]" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<!-- Yes I realize encumbrance is spelled wrong here but the original authors misspelled it throughout the file so I did the same to stay backwards compatible. -->
|
||
<div class="sheet-row sheet-row-encumberance-MAX">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<div class="sheet-popup">MAX Load*</div>
|
||
<span class="sheet-tooltip">
|
||
Carry on Back (B353) 15xBL. Thus, you can carry
|
||
<br />
|
||
more than you can lift by yourself . . . but
|
||
<br />
|
||
every second that your encumbrance is over 10xBL
|
||
<br />
|
||
(that is Extra-Heavy encumbrance), you lose 1 FP.
|
||
<br />
|
||
</span>
|
||
</div>
|
||
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_lift_5" value="15 * @{basic_lift}" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_move_5" value="[[((1 + floor((@{basic_move} * 0.2))) + abs(1 - floor((@{basic_move} * 0.2)))) / 2]]" disabled="disabled" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_enhanced_move_5" value="" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_air_5" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_water_5" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_dodge_5" value="[[((1 + (@{dodge} -4)) + abs(1 - (@{dodge} - 4))) / 2]]"disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-load sheet-hr">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Current (<span name="attr_encumbrance_level" value=""></span>)
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" step=".001" name="attr_total_weight" value="" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_current_move" value="" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_enhanced_move_current" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_current_air" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_current_water" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-colAll">
|
||
<input type="text" name="attr_current_dodge" value="" readonly="readonly" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-encumberance -->
|
||
|
||
</div> <!-- .sheet-tab1 -->
|
||
|
||
|
||
<!-- ===== ===== ===== ===== TRAITS TAB ===== ===== ===== ===== -->
|
||
<div class="sheet-tab2">
|
||
|
||
<!-- _____ _____ LANGUAGE BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-language">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Native Language</div>
|
||
<div class="sheet-cell sheet-col1">Spoken</div>
|
||
<div class="sheet-cell sheet-col2">Written</div>
|
||
<div class="sheet-cell sheet-col3">Pts</div>
|
||
</div> <!-- .sheet-header -->
|
||
<div class="sheet-row sheet-row-native-language">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" style="font-weight:bold;" name="attr_name_native_language" placeholder="-Enter Native Language here">
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<select name="attr_native_language_spoken">
|
||
<option value="0" selected>Native</option>
|
||
<option value="-1">Accented</option>
|
||
<option value="-2">Broken</option>
|
||
<option value="-3">None</option>
|
||
</select>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<select name="attr_native_language_written">
|
||
<option value="0" selected>Native</option>
|
||
<option value="-1">Accented</option>
|
||
<option value="-2">Broken</option>
|
||
<option value="-3">None</option>
|
||
</select>
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="text" name="attr_native_language_points" value="@{native_language_spoken} + @{native_language_written}" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Learned Languages</div>
|
||
<div class="sheet-cell sheet-col1">Spoken</div>
|
||
<div class="sheet-cell sheet-col2">Written</div>
|
||
<div class="sheet-cell sheet-col3">Pts</div>
|
||
</div> <!-- .sheet-header -->
|
||
<fieldset class="repeating_languages">
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<select name="attr_spoken">
|
||
<option value="3">Native</option>
|
||
<option value="2">Accented</option>
|
||
<option value="1">Broken</option>
|
||
<option value="0" selected>None</option>
|
||
</select>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<select name="attr_written">
|
||
<option value="3">Native</option>
|
||
<option value="2">Accented</option>
|
||
<option value="1">Broken</option>
|
||
<option value="0" selected>None</option>
|
||
</select>
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="text" name="attr_points" value="@{spoken} + @{written}" disabled="disabled" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset> <!-- .repeating_languages -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-language -->
|
||
|
||
|
||
<!-- _____ _____ CULTURE BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-culture">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Cultural Familiarities</div>
|
||
<div class="sheet-cell sheet-col1">Pts</div>
|
||
</div> <!-- .sheet-header -->
|
||
<fieldset class="repeating_cultures">
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_points" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset> <!-- .repeating_cultures -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-culture -->
|
||
|
||
<div class="sheet-clearfix"> </div>
|
||
|
||
|
||
<!-- _____ _____ ADVANTAGES BOX _____ _____ -->
|
||
<!-- this box uses the identifier "traits" for backwards compatibility -->
|
||
|
||
<div class="sheet-box sheet-traits">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Advantages (& Perks)</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<div class="sheet-popup">FOA</div>
|
||
<span class="sheet-tooltip">
|
||
Frequency of Appearance
|
||
<br />
|
||
<table>
|
||
<tbody>
|
||
<tr><td>15 or less><td></td>
|
||
<tr><td>12 or less><td></td>
|
||
<tr><td>9 or less><td></td>
|
||
<tr><td>6 or less><td></td>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2"></div>
|
||
<div class="sheet-cell sheet-col3">Pts</div>
|
||
<div class="sheet-cell sheet-col4">Ref</div>
|
||
</div> <!-- .sheet-header -->
|
||
<fieldset class="repeating_traits">
|
||
<input class="sheet-toggle" type="checkbox" />
|
||
<span class="sheet-checkbox"></span>
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_foa" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Frequency of Appearance Check}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{foa} + @{modifier}]]}} {{notes=@{notes}}} {{bookReference=@{ref}}} {{useCriticalPlusTen=[[0]]}}" name="roll_vsAFOA" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_points" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<input type="text" name="attr_ref" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-details">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Notes
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_notes" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset> <!-- .repeating_traits -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-traits -->
|
||
|
||
|
||
<!-- _____ _____ DISADVANTAGES BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-disadvantages">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Disadvantages (& Quirks)</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<div class="sheet-popup">SCN</div>
|
||
<span class="sheet-tooltip">
|
||
Self-control Number OR
|
||
<br />
|
||
Frequency of Appearance
|
||
<br />
|
||
<table>
|
||
<tbody>
|
||
<tr><td>15 or less</td></tr>
|
||
<tr><td>12 or less</td></tr>
|
||
<tr><td>9 or less</td></tr>
|
||
<tr><td>6 or less</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2"></div>
|
||
<div class="sheet-cell sheet-col3">Pts</div>
|
||
<div class="sheet-cell sheet-col4">Ref</div>
|
||
</div> <!-- .sheet-header -->
|
||
<fieldset class="repeating_disadvantages">
|
||
<input class="sheet-toggle" type="checkbox" />
|
||
<span class="sheet-checkbox"></span>
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_control_rating" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Self-control Check}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{control_rating} + @{modifier}]]}} {{notes=@{notes}}} {{bookReference=@{ref}}} {{useCriticalPlusTen=[[0]]}}" name="roll_vsDSCR" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" name="attr_points" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<input type="text" name="attr_ref" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-details">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Notes
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_notes" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset> <!-- .repeating_disadvantages -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-disadvantages -->
|
||
|
||
|
||
<!-- _____ _____ RACIAL TRAITS BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-racial">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Racial Traits</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<div class="sheet-popup">SCN</div>
|
||
<span class="sheet-tooltip">
|
||
Self-control Number OR
|
||
<br />
|
||
Frequency of Appearance
|
||
<table>
|
||
<tbody>
|
||
<tr><td>15 or less</td></tr>
|
||
<tr><td>12 or less</td></tr>
|
||
<tr><td>9 or less</td></tr>
|
||
<tr><td>6 or less</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2"></div>
|
||
<div class="sheet-cell sheet-col3">Pts</div>
|
||
<div class="sheet-cell sheet-col4">Ref</div>
|
||
</div> <!-- .sheet-header -->
|
||
<fieldset class="repeating_racial">
|
||
<input class="sheet-toggle" type="checkbox" />
|
||
<span class="sheet-checkbox"></span>
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" name="attr_control_rating" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Self-control Check}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{control_rating} + @{modifier}]]}} {{notes=@{notes}}} {{bookReference=@{ref}}} {{useCriticalPlusTen=[[0]]}}" 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-col1"></div>
|
||
<div class="sheet-cell sheet-col2">TL</div>
|
||
<div class="sheet-cell sheet-col3">Level</div>
|
||
<div class="sheet-cell sheet-col4">Attr</div>
|
||
<div class="sheet-cell sheet-col5">Diff</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_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-col1">
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Skill Roll}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{level} + @{modifier}]]}} {{notes=@{notes}}} {{bookReference=@{ref}}} {{useCriticalPlusTen=[[@{use_critical_plus_10}]]}}" name="roll_vsSL" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_tl" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<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-col4">
|
||
<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-col5">
|
||
<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-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_skills -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-skills -->
|
||
|
||
|
||
<!-- _____ _____ TECHNIQUES BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-techniques">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Techniques</div>
|
||
<div class="sheet-cell sheet-col1">Parent</div>
|
||
<div class="sheet-cell sheet-col2">Min</div>
|
||
<div class="sheet-cell sheet-col3">Max</div>
|
||
<div class="sheet-cell sheet-col4">Level</div>
|
||
<div class="sheet-cell sheet-col5">Cost</div>
|
||
<div class="sheet-cell sheet-col6">Bonus</div>
|
||
<div class="sheet-cell sheet-col7">Pts</div>
|
||
<div class="sheet-cell sheet-col8">Ref</div>
|
||
</div> <!-- .sheet-header -->
|
||
<fieldset class="repeating_techniques">
|
||
<input class="sheet-toggle" type="checkbox" />
|
||
<span class="sheet-checkbox"></span>
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_parent" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="number" name="attr_min" value="0" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
---
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<input type="text" name="attr_level" disabled="disabled" value="@{min} + floor(@{points} / @{points_per_level}) + @{bonus}"/>
|
||
</div>
|
||
<div class="sheet-cell sheet-col5">
|
||
<input type="number" name="attr_points_per_level" value="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col6">
|
||
<input type="number" name="attr_bonus" value="0" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col7">
|
||
<input type="number" name="attr_points" value="0" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col8">
|
||
<input type="text" name="attr_ref" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-details">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Notes
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_notes" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset> <!-- .repeating_techniques -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-techniques -->
|
||
|
||
</div> <!-- .sheet-tab3 -->
|
||
|
||
|
||
<!-- ===== ===== ===== ===== COMBAT TAB ===== ===== ===== ===== -->
|
||
<div class="sheet-tab4">
|
||
|
||
<!-- _____ _____ HIT LOCATION BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-damage-reduction">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header sheet-row-title">
|
||
<div class="sheet-cell sheet-col0">
|
||
Hit Location
|
||
</div>
|
||
</div> <!-- .sheet-header -->
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Where</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<div class="sheet-popup">Pen</div>
|
||
<span class="sheet-tooltip">
|
||
This is the <strong>Penalty</strong> <br />
|
||
applied to attack the <br />
|
||
specific location.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">DR</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-skull">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_skull" value="Skull" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_skull" value="-7" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_skull_dr_max" value="2" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-face">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_face" value="Face" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_face" value="-5" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_face_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-eyes">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_eyes" value="Eyes" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_eyes" value="-9" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_eyes_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-neck">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_neck" value="Neck" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_neck" value="-5" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_neck_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-arms">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_arms" value="Arms" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_arms" value="-2" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_arms_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-hands">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_hands" value="Hands" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_hands" value="-4" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_hands_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-torso">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_torso" value="Torso" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_torso" value="0" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_torso_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-vitals">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_vitals" value="Vitals" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_vitals" value="-3" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_vitals_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-groin">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_groin" value="Groin" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_groin" value="-3" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_groind_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-legs">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_legs" value="Legs" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_legs" value="-2" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_legs_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-feet">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_feet" value="Feet" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_feet" value="-4" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_feet_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-area">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name_area" value="Area" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty_area" value="n/a" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_area_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-header sheet-row-title">
|
||
<div class="sheet-cell sheet-col0">
|
||
User Created
|
||
</div>
|
||
</div> <!-- .sheet-header -->
|
||
<fieldset class="repeating_location">
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_hit_penalty" value="0" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_dr_max" value="0" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset>
|
||
</div> <!-- .sheet-table -->
|
||
|
||
<div class="speed-range-table"> <!-- .speed-range-table image-->
|
||
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/GURPS/Images/Speed_Range_Table.PNG" style="width:140px" alt="GURPS Speed\Range Tabke" />
|
||
</div> <!-- .speed-range-table image-->
|
||
|
||
</div> <!-- .sheet-box .sheet-damage-reduction -->
|
||
|
||
|
||
<!-- _____ _____ ACTIVE DEFENSE BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-active-defense">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Active Defenses</div>
|
||
<div class="sheet-cell sheet-col1">Type</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<div class="sheet-popup">Info</div>
|
||
<span class="sheet-tooltip">
|
||
<strong>F</strong>: this is a fencing weapon.
|
||
<br />
|
||
<strong>U</strong>: the weapon is unbalanced. You cannot use it to<br />
|
||
parry if you've already attacked with it this turn<br /> (and vice versa).
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">Skill</div>
|
||
</div> <!-- .sheet-header -->
|
||
<div class="sheet-row sheet-row-stats sheet-row-standard">
|
||
<div class="sheet-cell sheet-col0">
|
||
<div class="sheet-popup">[Optional] Apply Combat Reflexes to Dodge and Fear Modifiers</div>
|
||
<span class="sheet-tooltip sheet-ad-col0-tooltip">
|
||
Quickly add +1 Dodge modifier and
|
||
+2 Fright modifier on the General tab.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col1"> </div>
|
||
<div class="sheet-cell sheet-col2"> </div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="checkbox" class="sheet-boolean" name="attr_combat_reflexes" value="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col4"> </div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-stats sheet-row-standard">
|
||
<div class="sheet-cell sheet-col0">Dodge</div>
|
||
<div class="sheet-cell sheet-col1">Dodge</div>
|
||
<div class="sheet-cell sheet-col2"></div>
|
||
<div class="sheet-cell sheet-col3"><input type="text" name="attr_ad_dodge_skill" value="@{current_dodge}" disabled="disabled" /></div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Defense Roll}} {{characterName=@{character_name}}} {{skillName=Dodge}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{current_dodge} + @{modifier}]]}} {{useCriticalPlusTen=[[0]]}}" name="roll_vsDodge" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-stats sheet-row-standard">
|
||
<div class="sheet-cell sheet-col0">Dodge and Retreat</div>
|
||
<div class="sheet-cell sheet-col1">Dodge</div>
|
||
<div class="sheet-cell sheet-col2"></div>
|
||
<div class="sheet-cell sheet-col3"><input type="text" name="attr_ad_dodge_retreat_skill" value="@{current_dodge} + 3" disabled="disabled" /></div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Defense Roll}} {{characterName=@{character_name}}} {{skillName=Dodge and Retreat}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{current_dodge} + @{modifier} + 3]]}} {{useCriticalPlusTen=[[0]]}}" 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}&{template:skillRoll} {{type=Defense Roll (@{type})}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{skill} + @{modifier}]]}} {{notes=@{info}}} {{useCriticalPlusTen=[[0]]}}" name="roll_vsSL" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset> <!-- .repeating_defense -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-active-defense -->
|
||
|
||
|
||
<!-- _____ _____ MELEE ATTACKS BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-melee-attacks">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Melee Attacks</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<div class="sheet-popup">Damage</div>
|
||
<span class="sheet-tooltip">
|
||
<strong>Armor Divisor</strong>: A number in parenthesis after<br />
|
||
the damage - eg. (2) - is an armor divisor.
|
||
<br />
|
||
Enter this number as AD(#) or as
|
||
<br />
|
||
Armor Divisor(#) in the Damage Notes.
|
||
<br />
|
||
<strong>ex</strong>: indicates the attack causes an explosion.<br />
|
||
See page 269. Enter in the Damage Notes
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<div class="sheet-popup"> </div>
|
||
<span class="sheet-tooltip">
|
||
Damage Macro
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<div class="sheet-popup">Type</div>
|
||
<span class="sheet-tooltip">
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Abbr</th>
|
||
<th>Name</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr><td>cut</td> <td>Cutting</td></tr>
|
||
<tr><td>imp</td> <td>Impaling</td></tr>
|
||
<tr><td>cr</td> <td>Crushing</td></tr>
|
||
<tr><td>pi-</td> <td>Small Piercing</td></tr>
|
||
<tr><td>pi</td> <td>Piercing</td></tr>
|
||
<tr><td>pi+</td> <td>Large Piercing</td></tr>
|
||
<tr><td>pi++</td><td>Huge Piercing</td></tr>
|
||
<tr><td>aff</td> <td>Affliction</td></tr>
|
||
<tr><td>burn</td><td>Burning</td></tr>
|
||
<tr><td>cor</td> <td>Corrosion</td></tr>
|
||
<tr><td>fat</td> <td>Fatigue</td></tr>
|
||
<tr><td>tox</td> <td>Toxic</td></tr>
|
||
<tr><td>spec</td><td>Special</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<div class="sheet-popup">Reach</div>
|
||
<span class="sheet-tooltip">
|
||
The distance in yards that the weapon can reach.
|
||
<br />
|
||
<strong>C</strong>: this weapon can be used in close combat.
|
||
<br />
|
||
<strong>*</strong>: the weapon is awkward, and requires a Ready<br />
|
||
maneuver to switch between different reaches.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col5">
|
||
<span style="background-color: #87CEFA">| skill |</span>
|
||
</div>
|
||
</div> <!-- .sheet-header -->
|
||
|
||
<fieldset class="repeating_melee">
|
||
<input class="sheet-toggle" type="checkbox" />
|
||
<span class="sheet-checkbox"></span>
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_damage" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="hidden" name="attr_damage_dice_icon" class="melee-damage-dice-icon" value="explode" />
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Melee Damage}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{damageRoll=[[@{damage}]]}} {{damageType=@{type}}} {{damageTypeId=[[@{damage_type_id}]]}} {{notes=@{damage_notes}}}" name="roll_damage" class="roll_damage" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<select name="attr_type">
|
||
<option value="Cutting (cut)">cut</option>
|
||
<option value="Impaling (imp)">imp</option>
|
||
<option value="Crushing (cr)">cr</option>
|
||
<option value="Small Piercing (pi-)">pi-</option>
|
||
<option value="Piercing (pi)">pi</option>
|
||
<option value="Large Piercing (pi+)">pi+</option>
|
||
<option value="Huge Piercing (pi++)">pi++</option>
|
||
<option value="Affliction (aff)">aff</option>
|
||
<option value="Burning (burn)">burn</option>
|
||
<option value="Corrosion (cor)">cor</option>
|
||
<option value="Fatigue (fat)">fat</option>
|
||
<option value="Toxic (tox)">tox</option>
|
||
<option value="Special (spec)">spec</option>
|
||
</select>
|
||
<input type="hidden" name="attr_damage_type_id" value="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<input type="text" name="attr_reach" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col5">
|
||
<input type="text" name="attr_skill" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col6">
|
||
<button type="roll" class="template-attack-roll" value="@{roll}&{template:skillRoll} {{type=Melee Attack}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{skill} + @{modifier}]]}} {{reach=@{reach}}} {{notes=@{notes}}} {{useCriticalPlusTen=[[@{use_critical_plus_10}]]}}" name="roll_vsSL" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-details2">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Weapon Notes
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_notes" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2 sheet-label">
|
||
Damage Notes
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="text" name="attr_damage_notes" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset> <!-- .repeating_melee -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-melee-attacks -->
|
||
|
||
|
||
<!-- _____ _____ RANGED ATTACKS BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-ranged-attacks">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Ranged Attacks</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<div class="sheet-popup">Damage</div>
|
||
<span class="sheet-tooltip">
|
||
<strong>Armor Divisor</strong>: A number in parenthesis after<br />
|
||
the damage - eg. (2) - is an armor divisor.<br />
|
||
Enter this number as AD(#) or as<br />
|
||
Armor Divisor(#) in the Damage Notes.
|
||
<br />
|
||
<strong>ex</strong>: indicates the attack causes an explosion.<br />
|
||
<strong>[#d]</strong>: indicates the attack causes fragmentation.<br />
|
||
See page 269.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col2"> </div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<div class="sheet-popup">Type</div>
|
||
<span class="sheet-tooltip">
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Abbr</th>
|
||
<th>Name</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr><td>cut</td> <td>Cutting</td></tr>
|
||
<tr><td>imp</td> <td>Impaling</td></tr>
|
||
<tr><td>cr</td> <td>Crushing</td></tr>
|
||
<tr><td>pi-</td> <td>Small Piercing</td></tr>
|
||
<tr><td>pi</td> <td>Piercing</td></tr>
|
||
<tr><td>pi+</td> <td>Large Piercing</td></tr>
|
||
<tr><td>pi++</td><td>Huge Piercing</td></tr>
|
||
<tr><td>aff</td> <td>Affliction</td></tr>
|
||
<tr><td>burn</td><td>Burning</td></tr>
|
||
<tr><td>cor</td> <td>Corrosion</td></tr>
|
||
<tr><td>fat</td> <td>Fatigue</td></tr>
|
||
<tr><td>tox</td> <td>Toxic</td></tr>
|
||
<tr><td>spec</td><td>Special</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">Acc</div>
|
||
<div class="sheet-cell sheet-col5">
|
||
<div class="sheet-popup">RNG</div>
|
||
<span class="sheet-tooltip">
|
||
See page 269.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col6">
|
||
<div class="sheet-popup">RoF</div>
|
||
<span class="sheet-tooltip">
|
||
Rate of Fire
|
||
<br />
|
||
The maximum number of shots that can be fired in <br />
|
||
one turn (by a regular person).
|
||
<br />
|
||
The minimum number of shots is 1.
|
||
<br /><br />
|
||
<strong>!</strong>: minimum RoF is 1/4 of the maximum, rounded up.
|
||
<br />
|
||
<strong>mxn</strong>: fires the first number of shots, which each then<br />
|
||
split into the second number (eg. shotguns)
|
||
<br />
|
||
<strong>Jet</strong>: shoots a continuous stream of fliud. See page 106.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col7">
|
||
<div class="sheet-popup">Shots</div>
|
||
<span class="sheet-tooltip">
|
||
The number of shots that can be fired before the<br />
|
||
weapon must be reloaded.<br />
|
||
The parenthetical number indicates the number of 1<br />
|
||
second ready maneuvers required to reload the<br />
|
||
weapon.<br />
|
||
<strong>T</strong>: the weapon is thrown. To "reload" it, pick it up.<br />
|
||
<strong>i</strong>: you must load the shots individually. the listed<br />
|
||
time is for each shot.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col8">Bulk</div>
|
||
<div class="sheet-cell sheet-col9">
|
||
<div class="sheet-popup">RCL</div>
|
||
<span class="sheet-tooltip">
|
||
When firing at RoF 2+, every full multiple of Rcl<br />
|
||
by which you make your attack roll means you score<br />
|
||
one extra hit, to a maximum number of hits equal<br />
|
||
to total shots fired. See page 373.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col10">
|
||
<span style="background-color: #87CEFA">| skill |</span>
|
||
</div>
|
||
</div> <!-- .sheet-header -->
|
||
|
||
<fieldset class="repeating_ranged">
|
||
<input class="sheet-toggle" type="checkbox" />
|
||
<span class="sheet-checkbox"></span>
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_damage" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="hidden" name="attr_damage_dice_icon" class="range-damage-dice-icon" value="explode" />
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Ranged Damage}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{damageRoll=[[@{damage}]]}} {{damageType=@{type}}} {{damageTypeId=[[@{damage_type_id}]]}} {{notes=@{damage_notes}}}" name="roll_damage" class="roll_damage" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<select name="attr_type">
|
||
<option value="Cutting (cut)">cut</option>
|
||
<option value="Impaling (imp)">imp</option>
|
||
<option value="Crushing (cr)">cr</option>
|
||
<option value="Small Piercing (pi-)">pi-</option>
|
||
<option value="Piercing (pi)">pi</option>
|
||
<option value="Large Piercing (pi+)">pi+</option>
|
||
<option value="Huge Piercing (pi++)">pi++</option>
|
||
<option value="Affliction (aff)">aff</option>
|
||
<option value="Burning (burn)">burn</option>
|
||
<option value="Corrosion (cor)">cor</option>
|
||
<option value="Fatigue (fat)">fat</option>
|
||
<option value="Toxic (tox)">tox</option>
|
||
<option value="Special (spec)">spec</option>
|
||
</select>
|
||
<input type="hidden" name="attr_damage_type_id" value="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<input type="text" name="attr_acc" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col5">
|
||
<input type="text" name="attr_range" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col6">
|
||
<input type="text" name="attr_rof" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col7">
|
||
<input type="text" name="attr_shots" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col8">
|
||
<input type="text" name="attr_bulk" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col9">
|
||
<input type="text" name="attr_recoil" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col10">
|
||
<input type="text" name="attr_skill" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col11">
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Ranged Attack}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{skill} + @{modifier}]]}} {{notes=@{notes}}} {{rof=@{rof}}} {{recoil=@{recoil}}} {{useCriticalPlusTen=[[@{use_critical_plus_10}]]}}" name="roll_vsSL" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-details2">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Weapon Notes
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_notes" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2 sheet-label">
|
||
Damage Notes
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="text" name="attr_damage_notes" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset> <!-- .repeating_ranged -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-ranged-attacks -->
|
||
|
||
</div> <!-- .sheet-tab4 -->
|
||
|
||
|
||
<!-- ===== ===== ===== ===== ITEMS TAB ===== ===== ===== ===== -->
|
||
<div class="sheet-tab5">
|
||
|
||
<!-- _____ _____ QUICK INVENTORY BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-quick-inventory sheet-textarea">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Quick Inventory & Wealth</div>
|
||
</div>
|
||
<textarea name="attr_quick_inventory"></textarea>
|
||
</div>
|
||
|
||
<!-- _____ _____ INVENTORY BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-items">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Possessions</div>
|
||
<div class="sheet-cell sheet-col1">TL</div>
|
||
<div class="sheet-cell sheet-col2">Ref</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<div class="sheet-popup">On</div>
|
||
<span class="sheet-tooltip">
|
||
Carried
|
||
<br />
|
||
Is the item being carried at the moment?
|
||
</span>
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">#</div>
|
||
<div class="sheet-cell sheet-col5">$</div>
|
||
<div class="sheet-cell sheet-col6">W</div>
|
||
<div class="sheet-cell sheet-col7">$+</div>
|
||
<div class="sheet-cell sheet-col8">W+</div>
|
||
</div>
|
||
<fieldset class="repeating_item">
|
||
<input class="sheet-toggle" type="checkbox" />
|
||
<span class="sheet-checkbox"></span>
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_tl" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2">
|
||
<input type="text" name="attr_ref" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input class="sheet-boolean" type="checkbox" name="attr_carried" value="1" checked />
|
||
</div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<input type="number" name="attr_count" value="1" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col5">
|
||
<input type="number" name="attr_cost" value="0.00" step="0.01" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col6">
|
||
<input type="number" name="attr_weight" value="0.000" step="0.0001" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col7" style="text-align: right;background-color: #c9c9c9;border-bottom: 1px solid white;border-right: 1px solid white;">
|
||
<span name="attr_costtotal" value="0.00" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col8" style="text-align: right;background-color: #c9c9c9;border-bottom: 1px solid white;border-right: 1px solid white;">
|
||
<span name="attr_weighttotal" value="0.000" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
<div class="sheet-row sheet-row-details">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Notes
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="text" name="attr_notes" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</fieldset> <!-- .repeating_item -->
|
||
<div class="sheet-row sheet-row-totals">
|
||
<div class="sheet-cell sheet-col0 sheet-label">
|
||
Total Value:
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<input type="number" step=".01" name="attr_total_value" value="0" readonly="readonly" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col2 sheet-label">
|
||
Total Weight:
|
||
</div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<input type="number" step=".001" name="attr_total_weight" value="0" readonly="readonly" />
|
||
</div>
|
||
</div> <!-- .sheet-row -->
|
||
</div> <!-- .sheet-table -->
|
||
</div> <!-- .sheet-box .sheet-items -->
|
||
|
||
</div> <!-- .sheet-tab5 -->
|
||
|
||
|
||
<!-- ===== ===== ===== ===== GRIMOIRE TAB ===== ===== ===== ===== -->
|
||
<div class="sheet-tab6">
|
||
|
||
<!-- _____ _____ SPELLS SETUP _____ _____ -->
|
||
<div class="sheet-box sheet-spells">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell"> Spells Based on: </div>
|
||
<div class="sheet-cell sheet-col3">
|
||
<select name="attr_spell_base">
|
||
<option value="@{strength}">ST</option>
|
||
<option value="@{dexterity}">DX</option>
|
||
<option value="@{intelligence}" selected>IQ</option>
|
||
<option value="@{health}">HT</option>
|
||
<option value="@{willpower}">Will</option>
|
||
<option value="@{perception}">Per</option>
|
||
<option value="10">10</option>
|
||
</select>
|
||
</div>
|
||
<div class="sheet-cell"> Magery/PI/Bonus Level: </div>
|
||
<div class="sheet-cell sheet-col4">
|
||
<input type="number" name="attr_spell_bonus" value="0" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<!-- _____ _____ SPELLS BOX _____ _____ -->
|
||
|
||
<div class="sheet-box sheet-spells">
|
||
<div class="sheet-table">
|
||
<div class="sheet-header">
|
||
<div class="sheet-cell sheet-col0">Spell</div>
|
||
<div class="sheet-cell sheet-col1"></div>
|
||
<div class="sheet-cell sheet-col2">Level</div>
|
||
<div class="sheet-cell sheet-col3">Diff</div>
|
||
<div class="sheet-cell sheet-col4">Pts</div>
|
||
<div class="sheet-cell sheet-col5">Time</div>
|
||
<div class="sheet-cell sheet-col6">Duration</div>
|
||
<div class="sheet-cell sheet-col7">Cost</div>
|
||
<div class="sheet-cell sheet-col8">Maintain</div>
|
||
<div class="sheet-cell sheet-col9">Ref</div>
|
||
</div> <!-- .sheet-header -->
|
||
<fieldset class="repeating_spells">
|
||
<input class="sheet-toggle" type="checkbox" />
|
||
<span class="sheet-checkbox"></span>
|
||
<div class="sheet-row sheet-row-stats">
|
||
<div class="sheet-cell sheet-col0">
|
||
<input type="text" name="attr_name" />
|
||
</div>
|
||
<div class="sheet-cell sheet-col1">
|
||
<button type="roll" value="@{roll}&{template:skillRoll} {{type=Spell Skill Roll}} {{characterName=@{character_name}}} {{skillName=@{name}}} {{rollResult=[[3d6]]}} {{effectiveSkill=[[@{level} + @{modifier}]]}} {{notes=@{notes}}} {{castingTime=@{casttime}}} {{castingDuration=@{duration}}} {{castingCost=@{cost}}} {{castingMaintain=@{maintain}}} {{bookReference=@{ref}}} {{useCriticalPlusTen=[[@{use_critical_plus_10}]]}}" 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>
|
||
<div>
|
||
<input type="checkbox" name="attr_updates_read" class="sheet-manual-unspent-box" value="1">
|
||
<span>Mark updates as read</span>
|
||
</div>
|
||
|
||
<h3>Latest Changes: Updated 02/11/2019</h3>
|
||
|
||
<h3>Known Issues</h3>
|
||
<ul>
|
||
<li>Unable to delete a Technique - UPDATE</li>
|
||
<li>
|
||
The issue is the 'Max' value for the Technique. If any value was placed in there, the row will not delete.
|
||
So in this PULL I have blocked values from being placed there so that new Techniques can be deleted if need be.
|
||
Existing Techniques that you are unable to delete - the Devs are looking into that issue and will advise me.
|
||
</li>
|
||
<li>NOTE: Techniques, as it is now on the character sheet, does not really work well - that section will most likely be completely rewritten (I plan on doing it when I get some time and my skills at HTML improve).</li>
|
||
</ul>
|
||
|
||
<h3>Note to authors</h3>
|
||
<ul>
|
||
<p>I need to mention that the original author(s) misspelled the words Miscellaneous (as Miscellwneous) and Encumbrance (as Encumberance) in both the CSS and HTML files. Rather than write extensive code to fix this, I just corrected the cosmetic portions only. Also note that the original author(s) use the word Fear in place of Fright although the proper word to use is Fright. As with the misspelled words, I changed no code other than the cosmetic side. This seemed simpler then spending hours writing code, transferring values from the attributes in question, and making sure it still functions. It also avoids having to explain it to the users in case they used those misspelled attributes in homemade macros.</p>
|
||
</ul>
|
||
|
||
<h3>Revision History</h3>
|
||
<ul>
|
||
<p>Please note: I, Mike W, am not one of the original authors of this sheet. All I have done is to fix a number of small issues, changed some formatting, and implemeted some suggested changes. The basic functionality of the sheet has remained the same.</p>
|
||
|
||
<p>To report any 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).</p>
|
||
|
||
<p>https://app.roll20.net/forum/post/6616836/gurps-sheet-number-1-thread-1/?pageforid=6644122#post-6644122</p>
|
||
|
||
<p>In your post, please specify if it is an Issue or Suggestion with as much detail information as possible. Screen shots help a lot! I am just learning to work with HTML and CSS so I may not be able to do everything requested. I make no promises on how fast I may be able to implement a Fix or a Suggestion - so please be patient. -Thanks, Mike W.</p>
|
||
|
||
<p>If there are others that are working on or wish to work on this sheet, lets coordinate using the Roll20 forum for now - perhaps later we can use GitHub.</p>
|
||
</ul>
|
||
|
||
<h4>Version: 1.5.1</h4>
|
||
|
||
<p>Pull Request: 02/11/2019</p>
|
||
|
||
<ul>
|
||
<li>Added attributes for enhanced ground movement, flying, swimming, and jumping</li>
|
||
<li>Added encumbrance columsn for enhanced ground movement, flying, and swimming</li>
|
||
<li>Added roll table templates. Shows success/error on rolls. Shows critical success or fail.</li>
|
||
<li>Modified option for private/public rolls. NOTE: Roll templates do not support showing just skill.</li>
|
||
<li>
|
||
Added option for private/public speed button. NOTE: If token is not selected,
|
||
it show an error to select token in order to add character to the order tracker
|
||
</li>
|
||
<li>Added option to use Skill+10 for critical success or just use 3 or 4 for critical success</li>
|
||
<li>Added option to mark updates as read. If marked, last tab visited will be opened instead of the updates tab.</li>
|
||
</ul>
|
||
|
||
<h4>Version: 1.5.0</h4>
|
||
|
||
<p>Pull Request: 02/05/2019</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Fixed alert indicating to use a valid 3 decimal Weight value for the Inventory weight attribute, which in fact can up to 4 decimal places, Reported by Ray G (@raymond-g) (UserID: 1600355</li>
|
||
<li>Fixed Inventory header alignment – Cosmetic Only</li>
|
||
<li>Fixed Inventory calculations color bacground – Cosetic Only</li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.9</h4>
|
||
|
||
<p>Pull Request: 01/08/2019</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Fixed the placement and alignment of the SCN, Macro, PTS, and REF fields in Racial Traits – Cosmetic Only</li>
|
||
<li>Added a Background color for all Calculated fields – Cosmetic Only</li>
|
||
<li>Remove odd and even row background color – Cosmetic Only</li>
|
||
<li>Added bottom border to all Input fields – Cosmetic Only</li>
|
||
<li>Fixed alert indicating to use whole numbers for Speed which can have can have up to 2 decimal places - Cosmetic Only</li>
|
||
<li>Added a ‘Note to Authors’ section in the Updates page</li>
|
||
<li>Updated the Readme.md file</li>
|
||
<li>Fixed Skills Column alignment order – Code Fix only</li>
|
||
<li>Set the Default selection for the Modifier Prompt to Single Modifier Prompt</li>
|
||
<li>Fixed ToolTip placement for Thrust and Swing attributes – Cosmetic only</li>
|
||
<li>Increased width of character sheet to the maximum possible – Cosmetic Only</li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.8</h4>
|
||
|
||
<p>Pull Request: 12/18/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Changed the PULL date for version 1.4.7 to 12/04/2018 – Cosmetic Only</li>
|
||
<li>Changed the width of the REF field in Advantages, Disadvantages, Skills, Techniques, and Possessions – Cosmetic Only</li>
|
||
<li>Removed the visual cue for editable fields on the General Tab – Request by MANY – Cosmetic Only</li>
|
||
<li>Added highlighted light gray color for calculated fields on all pages – Cosmetics Only</li>
|
||
<li>Removed the blue highlight from Melee and Ranged attacks as it is no longer needed – Cosmetic Only</li>
|
||
<li>Fixed alert indicating to use whole number on attributes that can be up to 2 or 3 decimal places in value in the Inventory section - Cosmetic Only</li>
|
||
<li>Resized the Life and Moving box and the Encumbrance box for FUTURE upgrades - Cosmetic Only</li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.7</h4>
|
||
|
||
<p>Pull Request: 12/04/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Added 'Latest Update' with date to the top of the Updates page - Cosmetic Only</li>
|
||
<li>Changed the Input color from pink to a light gray: Because of so many complaints about the pink - Cosmetic Only</li>
|
||
<li>Fixed the Current HP, Thrust, and Swing fields on the General page to display the Input Color – Cosmetic Only</li>
|
||
<li>Fixed bug for the Total Points and the calculated Unspent Points were not totaling correctly on the General page – The actual fix was spotted and provided by Filipe (UserID: 1089514)</li>
|
||
<li>Fix alignment of columns for Attributes on the General page - Cosmetic Only</li>
|
||
<li>Fix base tooltip font size from 10 to 11 to make it more readable - Cosmetic Only</li>
|
||
<li>Added tooltips for POINT SUM on the General page for Total, Spent, and Unspent - Cosmetic Only</li>
|
||
<li>Under POINT SUM in the General page, changed ‘Starting’ to ‘Total’ and changed ‘Total’ to ‘Spent‘ - Requested first by Valter (UserID:285013), then by many others – Cosmetic Only</li>
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.6</h4>
|
||
|
||
<p>Pull Request: 11/20/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Rearranged the order of fields in the Melee Attacks repeating section to match the order presented in the GURPS books – Cosmetic Only</li>
|
||
<li>Rearranged the order of fields in the Ranged Attacks repeating section to match the order presented in the GURPS books – Cosmetic Only</li>
|
||
<li>Fixed various typo’s on the Updates page – Cosmetic Only </li>
|
||
<li>Fixed tooltip format specifically the width and placement – Cosmetic Only</li>
|
||
<li>Fixed tooltip for Attribute Mod, Shots, and RoF to fit the format – Cosmetic Only</li>
|
||
<li>Fixed the tooltip for Combat Reflexes, changed +3 fear to +2 Fright – Cosmetic Only </li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.5</h4>
|
||
|
||
<p>Pull Request: 11/13/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Fixed version 1.4.1 Pull request Date – Cosmetic Only</li>
|
||
<li>Fixed version 1.4.2 Pull request date – Cosmetic Only </li>
|
||
<li>Fixed version 1.4.3 Added back in – Cosmetic Only </li>
|
||
<li>Fixed version 1.4.4 Renumbered from 1.4.3 – Cosmetic Only </li>
|
||
<li>Renamed ‘Skils’ tab to ‘Skills’ – Cosmetic Only </li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.4</h4>
|
||
|
||
<p>Pull Request: 11/06/2018</p>
|
||
<ul>
|
||
<li>Changes made by MadCoder https://github.com/MadCoder253/roll20-character-sheets/issues</li>
|
||
<li>Added visual cue for editable fields on the General Tab</li>
|
||
<li>Sheet Setting Gear Icon: Foundational Sheet Options</li>
|
||
<li>Option to use automated unspent points or to enter unspent points manually</li>
|
||
<li>Option to select damage dice icon</li>
|
||
<li>Initial development of additional movement options</li>
|
||
<li>Added help text to combat reflexes. Mainly helpful for users who haven't noticed the options.</li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.3</h4>
|
||
|
||
<p>Pull Request: 10/30/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Fixed version 1.4.1 Pull request Date – Cosmetic Only</li>
|
||
<li>Fixed version 1.4.2 Pull request date – Cosmetic Only </li>
|
||
<li> Added information pertaining to who made changes in version 1.4.2 – Cosmetic Only </li>
|
||
<li>Widened Shots field in the Range Attacks section – Cosmetic Only</li>
|
||
<li>Fixed widths (margins) of the Active Defenses, Melee Attacks, and the Ranged Attacks sections – Cosmetic Only</li>
|
||
<li>Fixed widths of the Damage Macro for the Melee Attacks and the Ranged Attacks sections – Cosmetic Only </li>
|
||
<li>Change the background color of the Skill field and Macro field to a Light Blue for Melee Attacks and Ranged Attacks – Cosmetic Only</li>
|
||
<li>Added some ‘Hover’ information for the Traits and Skills Tabs – Cosmetic Only</li>
|
||
<li>Restore some deleted Revision History – Cosmetic Only</li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.2</h4>
|
||
|
||
<p>Pull Request: 10/23/2018</p>
|
||
<ul>
|
||
<li>Changes made by MadCoder https://github.com/MadCoder253/roll20-character-sheets/issues</li>
|
||
<li>Changed damage roll icons to red explosion to easily identify the difference from the skill roll icon</li>
|
||
<li>Update thrust and swing damage when striking ST is updated</li>
|
||
<li>Ability to enter values for Unspent points</li>
|
||
<li>When combat reflexes is toggled, update the dodge and fear check modifiers on the general tab</li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.1</h4>
|
||
|
||
<p>Pull Request: 09/11/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Fixed Encumbrance Table calculations to always allow for a Minimum Move of 1 and a Minimum Dodge of 1.</li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.4.0</h4>
|
||
|
||
<p>Pull Request: 09/04/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Fixed bug with calculating Current Move for Heavy and Extra Heavy Encumbrances and not using a Minimum of 1. Reported by Ray G (@raymond-g) (UserID: 1600355)</li>
|
||
<li>Fixed bug with calculating Total Weight from Inventory which at times created a weigh of more than 3 decimal places.</li>
|
||
<li >Added a "FOA" (Frequency of Appearance) field under Advantages (& Quirks) </li>
|
||
<li >Modified the Tool Tip for SCN under Disadvantages (& Quirks) and Racial Traits to include the wording "OR Frequency of Appearance" - Cosmetic Only</li>
|
||
<li>Added Max Load to the Encumbrance Table</li>
|
||
</ul>
|
||
|
||
<h4>Version: 1.3.9</h4>
|
||
|
||
<p>Pull Request: 08/21/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610</li>
|
||
<li>Updated the Language Box format - Cosmetic Only</li>
|
||
<li>Added additional options for Native Language in regards to Spoken and Written levels as a Disadvantage</li>
|
||
<li>Updated the Inventory Box format Cosmetic Only</li>
|
||
<li>Added fields of "TL" (Tech Level) and "Ref" (Reference) to the Inventory repeating section</li>
|
||
<li>Fixed bug for Single Modifier Prompt and Extended Modifier Prompts if a "+" is used for a positive modifier entry</li>
|
||
|
||
</ul>
|
||
|
||
<h4>Version: 1.3.8</h4>
|
||
|
||
<p>Pull Request: 08/08/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Added the Speed-Range table image to the Combat Tab - Requested by CaptainJoy (UserID: GitHub) </li>
|
||
<li>Set the character sheet to always open to the Updates Tab</li>
|
||
<li>Fixed BUG where Basic Lift calculations for ST 7 or less was incorrectly rounding for Light, Medium, and Heavy Encumbrances </li>
|
||
<li>Renamed Notes to Weapon Notes under Melee Attacks and Ranged Attacks - osmetic Only</li>
|
||
<li>Added Damage Notes with an attribute under Melee Attacks and Ranged Attacks</li>
|
||
<li>Changed Tool Tip for Damage, for Melee attacks and Ranged Attacks, to indicate using the Damage Notes field - Cosmetic Only</li>
|
||
<li>Changed Armour Divisor to Armor Divisor - Cosmetic Only</li>
|
||
<li>Changed the output of the Attack Macros for Melee and Ranged attacks to include the Weapons Notes attribute - Cosmetic Only</li>
|
||
<li>Changed the output of the Damage Macros for Melee and Ranged attacks to include the Damage Notes attribute - Cosmetic Only</li>
|
||
</ul>
|
||
|
||
<h4>Version: 1.3.7</h4>
|
||
|
||
<p>Pull Request: 08/01/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610)</li>
|
||
<li>Fixed alignment issue with the Notes field Under Skills not Left Justified - Cosmetic Only </li>
|
||
<li>Changed Hit Location box to have an additional Header identifying User Created Locations - Cosmetic Only</li>
|
||
<li>Changed all fields in the Hit Location box to be editable. This will enable you to change the name of any of the default Locations and the To Hit Penalty - Request from Valter (User id: 285013)</li>
|
||
<li> Fixed Bug where some Hit Locations did not save their DR values</li>
|
||
<li>Removed and Deleted the CR Label and attr_control_rating for Advantages. The correct terminology is Self-control Number and this is not used for Advantages</li>
|
||
<li>Added an attribute for Native Language. Nothing fancy just a direct input - Requested by Flemmerr (User id: 1515009)</li>
|
||
<li>Added the Recoil attribute to the chat results for the Ranged Attacks macro - Cosmetic only</li>
|
||
<li>Changed the Label of "Disadvantages" to "Disadvantages (& Quirks)" - Cosmetic Only </li>
|
||
<li>Changed the Label of "Advantages" to "Advantages (& Perks)" - Cosmetic Only </li>
|
||
<li>Fixed many miscellaneous issues to existing table fieldsets</li>
|
||
</ul>
|
||
|
||
<h4>Version: 1.3.6</h4>
|
||
|
||
<p>Pull Request: 07/25/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes, Fixes, and Adds made by Mike W (UserID: 1414610</li>
|
||
<li>Corrected spelling of Miscellaneous on the General page - Cosmetic only</li>
|
||
<li>Updated Tool Tip for Type under Melee Attacks and Ranged, removed the Multiplier information as it is irrelevant, also fixed the alignment - Cosmetic only</li>
|
||
<li>Added missing information from Type drop down for Ranged Attacks - Missing was Affliction and Special</li>
|
||
<li>Changed the label of "Quick Inventory" to "Quick Inventory & Wealth" and the Label left justified - Cosmetic</li>
|
||
<li>Changed the Melee Attacks and Ranged Attacks macros to include the Notes attribute in the results in Chat - Cosmetic only </li>
|
||
<li>Changed all Die Macros to apply Bold to the Character Name in the results in Chat - Cosmetic only</li>
|
||
<li>Change when adding a new Skill, Technique, or Spell, the Points defaults to 0 instead of blank</li>
|
||
<li>Fixed minor spelling errors - Cosmetic only</li>
|
||
<li>Renamed Header of CR to SCN under Disadvantages and Racial Trains to reflect correct terminology - Cosmetic only</li>
|
||
<li>Fixed Tool Tip of SCN (formerly CR) under Disadvantages and Racial Trains to reflect correct terminology - changed from "Control Rating" to "Self-control Number" - Cosmetic only</li>
|
||
<li>Added Macro for Self-control Number Roll within Disadvantages and Racial Traits</li>
|
||
<li>Changes and Adds requested by Mike W (@mike-w) (UserID: 1414610)</li>
|
||
<li>Spelling correction requested by Rabulias (@rabulias) (UserID: 4692)</li>
|
||
</ul>
|
||
|
||
<h4>Version: 1.3.5</h4>
|
||
|
||
<p>Pull Request: 7/17/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes made by Tom S</li>
|
||
<li>Changed the word Fear to Fright (Visibility only - no attributes where changed)</li>
|
||
<li>Changed the Macro result from vs. Will to vs. Fright</li>
|
||
<li>Changed the Hit Location DR input to accept text (so that you can add DR entries like 2* or 3/1*)</li>
|
||
<li>Changed the visible width of the DR field making it wider</li>
|
||
<li>Fixed bug in Hit Location Penalty not saving for added custom location</li>
|
||
<li>Added a Tool Tip for Pen header in Hit Location</li>
|
||
<li>Requested by Mike W (@mike-w) (UserID: 1414610) see: https://app.roll20.net/forum/post/6572120/</li>
|
||
</ul>
|
||
|
||
<h4>Version: 1.3.4</h4>
|
||
|
||
<p>Pull Request: 3/7/2018</p>
|
||
<ul>
|
||
<li>Changes made by MadCoder https://github.com/MadCoder253/roll20-character-sheets/issues</li>
|
||
<li>Add Revision History Tab</li>
|
||
<li>Changed roll buttons to use dicefontd6 (requested by Mike W
|
||
(@mike-w) (UserID: 1414610) see: https://app.roll20.net/forum/post/5845539/</li>
|
||
<li>Fix lift & encumbrance rounding error for low ST. Round to whole number.
|
||
(requested by Lucy (@lucy) (UserID: 359497) see: https://app.roll20.net/forum/permalink/5142954/</li>
|
||
</ul>
|
||
|
||
<h4>Version 1.3.3</h4>
|
||
|
||
<p>Pull Request: 3/1/2018</p>
|
||
|
||
<ul>
|
||
<li>Changes made by MadCoder https://github.com/MadCoder253/roll20-character-sheets/issues</li>
|
||
<li>Restyled tabs to work with Firefox and MS Edge</li>
|
||
<li>Traits tab -> disadvantages section: slight changes to column spacing</li>
|
||
<li>Combat tab -> Ranged attacks section: slight changes to column spacing and abbreviate titles</li>
|
||
<li>Skills Tab -> Techniques section: slight changes to column spacing</li>
|
||
<li>Added URL to GURPS roll20 wiki</li>
|
||
</ul>
|
||
|
||
</div>
|
||
|
||
</div> <!-- .sheet-tab7 -->
|
||
|
||
<div class="sheet-tab0">
|
||
<div class="sheet-options">
|
||
<div class="sheet-box">
|
||
<input type="radio" name="attr_modifier" value="0" />
|
||
<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}]]" checked="true" />
|
||
<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>
|
||
<div class="sheet-box">
|
||
<input type="radio" name="attr_roll" value="" 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 " />
|
||
<span class="sheet-popup">Private Skill Levels <em>deprecated</em></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 />
|
||
<b>NOTE:</b> This now behaves just like Private Rolls
|
||
</span>
|
||
<br />
|
||
<input type="radio" name="attr_roll" value="/w gm " />
|
||
<span class="sheet-popup">Private Rolls</span>
|
||
<span class="sheet-tooltip">
|
||
Only the GM will see your skill<br />
|
||
level and the result.
|
||
</span>
|
||
</div>
|
||
<div class="sheet-box">
|
||
<input type="radio" name="attr_speed_tracker" value="/em" checked="true" />
|
||
<span class="sheet-popup">Public Speed Tracker</span>
|
||
<span class="sheet-tooltip">
|
||
Show basic speed and add to track message to public.
|
||
</span>
|
||
<br />
|
||
<input type="radio" name="attr_speed_tracker" value="/w gm" />
|
||
<span class="sheet-popup">Private Speed Tracker</span>
|
||
<span class="sheet-tooltip">
|
||
Show basic speed and add to track message to GM.
|
||
</span>
|
||
</div>
|
||
</div>
|
||
<div class="sheet-box">
|
||
<div>
|
||
<input type="checkbox" name="attr_use_unspent_box" class="sheet-manual-unspent-box" value="1" />
|
||
<span class="sheet-popup">Enter Unspent Points</span>
|
||
<span class="sheet-tooltip">Check if you would like to manually track your unspent points</span>
|
||
</div>
|
||
</div>
|
||
<div class="sheet-box">
|
||
Damage Dice Icon
|
||
<div>
|
||
<input type="radio" name="attr_damage_dice_type" value="explode" checked="true" />
|
||
<button type="roll" value="0" name="btn_damage_dice_explode" class="roll_explode btn" disabled="disabled" />
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_damage_dice_type" value="d6black" />
|
||
<button type="roll" value="0" name="btn_damage_dice_d6black" class="btn" disabled="disabled" />
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_damage_dice_type" value="d20blank" />
|
||
<button type="roll" value="0" name="btn_damage_dice_d20blank" class="btn roll_d20blank" disabled="disabled" />
|
||
</div>
|
||
<div>
|
||
<input type="radio" name="attr_damage_dice_type" value="d4skull" />
|
||
<button type="roll" value="0" name="btn_damage_dice_d4skull" class="btn roll_d4skull" disabled="disabled" />
|
||
</div>
|
||
</div>
|
||
<hr />
|
||
<div class="sheet-box">
|
||
<input type="radio" name="attr_mod_cascade" value="all" checked="true" />
|
||
<span class="sheet-popup">Mods to attributes increase all derived stats (including HP, FP)</span>
|
||
<br />
|
||
<input type="radio" name="attr_mod_cascade" value="some" />
|
||
<span class="sheet-popup">Mods to attributes increase most derived stats (not HP, FP)</span>
|
||
<br />
|
||
<input type="radio" name="attr_mod_cascade" value="none" />
|
||
<span class="sheet-popup">Mods to attributes do not increase derived stats</span>
|
||
</div>
|
||
<div class="sheet-box">
|
||
<span><b>Critical Successes:</b></span><br />
|
||
<input type="radio" name="attr_use_critical_plus_10" value="1" checked="checked" />
|
||
<span class="sheet-popup">Use rules as written</span>
|
||
<br />
|
||
<input type="radio" name="attr_use_critical_plus_10" value="0" />
|
||
<span class="sheet-popup">Only on a 3 or 4</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>
|
||
|
||
<!-- ROLL TEMPLATES -->
|
||
<div class="rolltemplates">
|
||
|
||
<rolltemplate class="sheet-rolltemplate-skillRoll">
|
||
<div class="container">
|
||
<table class="result">
|
||
<tr>
|
||
<th colspan="2">{{characterName}}</th>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2" class="subhead">{{skillName}}</td>
|
||
</tr>
|
||
{{#type}}
|
||
<tr>
|
||
<td class="label">Type:</td>
|
||
<td>
|
||
{{type}}
|
||
</td>
|
||
</tr>
|
||
{{/type}}
|
||
{{#rollResult}}
|
||
<tr>
|
||
<td class="label">Roll:</td>
|
||
<td>
|
||
<!-- successful skill roll -->
|
||
{{#rollBetween() rollResult -10 effectiveSkill}}
|
||
<span class="success">{{rollResult}}</span>
|
||
{{/rollBetween() rollResult -10 effectiveSkill}}
|
||
|
||
<!-- failed skill roll -->
|
||
{{#rollGreater() rollResult effectiveSkill}}
|
||
<span class="failure">{{rollResult}}</span>
|
||
{{/rollGreater() rollResult effectiveSkill}}
|
||
|
||
<!-- if effectiveSKill is 16 or higher, check for critical success 6 or less -->
|
||
{{#rollTotal() useCriticalPlusTen 1}}
|
||
{{#rollGreater() effectiveSkill 15}}
|
||
{{#rollLess() rollResult 7}}
|
||
<span class="success">Critical Success</span>
|
||
{{/rollLess() rollResult 7}}
|
||
{{/rollGreater() effectiveSkill 15}}
|
||
{{/rollTotal() useCriticalPlusTen 1}}
|
||
<!-- handle case if critical plus ten is off. 3 or 4 is critical success -->
|
||
{{#rollTotal() useCriticalPlusTen 0}}
|
||
{{#rollGreater() effectiveSkill 15}}
|
||
{{#rollLess() rollResult 5}}
|
||
<span class="success">Critical Success</span>
|
||
{{/rollLess() rollResult 5}}
|
||
{{/rollGreater() effectiveSkill 15}}
|
||
{{/rollTotal() useCriticalPlusTen 0}}
|
||
|
||
<!-- if effectiveSKill is 15, check for critical success 5 or less -->
|
||
{{#rollTotal() useCriticalPlusTen 1}}
|
||
{{#rollTotal() effectiveSkill 15}}
|
||
{{#rollLess() rollResult 6}}
|
||
<span class="success">Critical Success</span>
|
||
{{/rollLess() rollResult 6}}
|
||
{{/rollTotal() effectiveSkill 15}}
|
||
{{/rollTotal() useCriticalPlusTen 1}}
|
||
<!-- handle case if critical plus ten is off. 3 or 4 is critical success -->
|
||
{{#rollTotal() useCriticalPlusTen 0}}
|
||
{{#rollTotal() effectiveSkill 15}}
|
||
{{#rollLess() rollResult 5}}
|
||
<span class="success">Critical Success</span>
|
||
{{/rollLess() rollResult 5}}
|
||
{{/rollTotal() effectiveSkill 15}}
|
||
{{/rollTotal() useCriticalPlusTen 0}}
|
||
|
||
|
||
<!-- if effectiveSKill is 14 or less, check for critical success 4 or less -->
|
||
{{#rollLess() effectiveSkill 15}}
|
||
{{#rollLess() rollResult 5}}
|
||
<span class="success">Critical Success</span>
|
||
{{/rollLess() rollResult 5}}
|
||
{{/rollLess() effectiveSkill 15}}
|
||
|
||
<!-- if effective skill is 3 or less, critical failure is 13 or higher -->
|
||
{{#rollLess() effectiveSkill 4}}
|
||
{{#rollGreater() rollResult 12}}
|
||
<span class="failure">Critical Failure</span>
|
||
{{/rollGreater() rollResult 12}}
|
||
{{/rollLess() effectiveSkill 4}}
|
||
|
||
<!-- if effective skill is 4, critical failure is 14 or higher -->
|
||
{{#rollTotal() effectiveSkill 4}}
|
||
{{#rollGreater() rollResult 13}}
|
||
<span class="failure">Critical Failure</span>
|
||
{{/rollGreater() rollResult 13}}
|
||
{{/rollTotal() effectiveSkill 4}}
|
||
|
||
<!-- if effective skill is 5, critical failure is 15 or higher -->
|
||
{{#rollTotal() effectiveSkill 5}}
|
||
{{#rollGreater() rollResult 14}}
|
||
<span class="failure">Critical Failure</span>
|
||
{{/rollGreater() rollResult 14}}
|
||
{{/rollTotal() effectiveSkill 5}}
|
||
|
||
<!-- if effective skill is 6, critical failure is 16 or higher -->
|
||
{{#rollTotal() effectiveSkill 6}}
|
||
{{#rollGreater() rollResult 15}}
|
||
<span class="failure">Critical Failure</span>
|
||
{{/rollGreater() rollResult 15}}
|
||
{{/rollTotal() effectiveSkill 6}}
|
||
|
||
<!-- if effective skill is 7 to 15, critical failure is 17 or 18 -->
|
||
{{#rollBetween() effectiveSkill 7 15}}
|
||
{{#rollGreater() rollResult 16}}
|
||
<span class="failure">Critical Failure</span>
|
||
{{/rollGreater() rollResult 16}}
|
||
{{/rollBetween() effectiveSkill 7 15}}
|
||
|
||
<!-- if effective skill is 16 or higher, critical failure is 18 -->
|
||
{{#rollGreater() effectiveSkill 15}}
|
||
{{#rollGreater() rollResult 17}}
|
||
<span class="failure">Critical Failure</span>
|
||
{{/rollGreater() rollResult 17}}
|
||
{{/rollGreater() effectiveSkill 15}}
|
||
|
||
</td>
|
||
</tr>
|
||
{{/rollResult}}
|
||
{{#effectiveSkill}}
|
||
<tr>
|
||
<td class="label">Target:</td>
|
||
<td>
|
||
{{effectiveSkill}}
|
||
</td>
|
||
</tr>
|
||
{{/effectiveSkill}}
|
||
{{#damageRoll}}
|
||
<tr>
|
||
<td class="label">Damage:</td>
|
||
<td>
|
||
{{damageRoll}} <span class="damageType">{{damageType}}</span>
|
||
</td>
|
||
</tr>
|
||
{{/damageRoll}}
|
||
{{#rollTotal() damageTypeId 1}}
|
||
<tr>
|
||
<td class="label cutting"> </td>
|
||
<td>
|
||
Damage x1.5<br />
|
||
Neck Damage x2<br />
|
||
Skull Damage x4
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 1}}
|
||
{{#rollTotal() damageTypeId 2}}
|
||
<tr>
|
||
<td class="label impaling"> </td>
|
||
<td>
|
||
Damage x2<br />
|
||
Vitals Damage x3<br />
|
||
Skull Damage x4
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 2}}
|
||
{{#rollTotal() damageTypeId 3}}
|
||
<tr>
|
||
<td class="label crushing"> </td>
|
||
<td>
|
||
Damage x1<br />
|
||
Neck Damage x1.5<br />
|
||
Skull Damage x4
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 3}}
|
||
{{#rollTotal() damageTypeId 4}}
|
||
<tr>
|
||
<td class="label pierce-minus"> </td>
|
||
<td>
|
||
Damage x.5<br />
|
||
Vitals Damage x3<br />
|
||
Skull Damage x4
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 4}}
|
||
{{#rollTotal() damageTypeId 5}}
|
||
<tr>
|
||
<td class="label pierce"> </td>
|
||
<td>
|
||
Damage x1<br />
|
||
Vitals Damage x3<br />
|
||
Skull Damage x4
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 5}}
|
||
{{#rollTotal() damageTypeId 6}}
|
||
<tr>
|
||
<td class="label pierce-plus"> </td>
|
||
<td>
|
||
Damage x1.5<br />
|
||
Vitals Damage x3<br />
|
||
Skull Damage x4
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 6}}
|
||
{{#rollTotal() damageTypeId 7}}
|
||
<tr>
|
||
<td class="label pierce-plus-plus"> </td>
|
||
<td>
|
||
Damage x2<br />
|
||
Vitals Damage x3<br />
|
||
Skull Damage x4
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 7}}
|
||
{{#rollTotal() damageTypeId 8}}
|
||
<tr>
|
||
<td class="label affliction"> </td>
|
||
<td>
|
||
special damage and affects based on
|
||
affliction description
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 8}}
|
||
{{#rollTotal() damageTypeId 9}}
|
||
<tr>
|
||
<td class="label burning"> </td>
|
||
<td>
|
||
Damage x1<br />
|
||
Skull Damage x4
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 9}}
|
||
{{#rollTotal() damageTypeId 10}}
|
||
<tr>
|
||
<td class="label corrosion"> </td>
|
||
<td>
|
||
Damage x1<br />
|
||
Face Damage x1.5, blind eye if major wound, both eyes if full HP<br />
|
||
Neck Damage x1.5<br />
|
||
Skull Damage x4
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 10}}
|
||
{{#rollTotal() damageTypeId 11}}
|
||
<tr>
|
||
<td class="label fatigue"> </td>
|
||
<td>
|
||
Damage x1<br />
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 11}}
|
||
{{#rollTotal() damageTypeId 12}}
|
||
<tr>
|
||
<td class="label toxic"> </td>
|
||
<td>
|
||
Damage x1<br />
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 12}}
|
||
{{#rollTotal() damageTypeId 13}}
|
||
<tr>
|
||
<td class="label special"> </td>
|
||
<td>
|
||
Special damage, see description
|
||
</td>
|
||
</tr>
|
||
{{/rollTotal() damageTypeId 13}}
|
||
{{#reach}}
|
||
<tr>
|
||
<td class="label">Reach:</td>
|
||
<td>{{reach}}</td>
|
||
</tr>
|
||
{{/reach}}
|
||
{{#notes}}
|
||
<tr>
|
||
<td class="label">Notes:</td>
|
||
<td>{{notes}}</td>
|
||
</tr>
|
||
{{/notes}}
|
||
{{#castingTime}}
|
||
<tr>
|
||
<td class="label">Time:</td>
|
||
<td>{{castingTime}}</td>
|
||
</tr>
|
||
{{/castingTime}}
|
||
{{#castingDuration}}
|
||
<tr>
|
||
<td class="label">Duration:</td>
|
||
<td>{{castingDuration}}</td>
|
||
</tr>
|
||
{{/castingDuration}}
|
||
{{#castingCost}}
|
||
<tr>
|
||
<td class="label">Cost:</td>
|
||
<td>{{castingCost}}</td>
|
||
</tr>
|
||
{{/castingCost}}
|
||
{{#castingMaintain}}
|
||
<tr>
|
||
<td class="label">Maintain:</td>
|
||
<td>{{castingMaintain}}</td>
|
||
</tr>
|
||
{{/castingMaintain}}
|
||
{{#rof}}
|
||
<tr>
|
||
<td class="label">RoF:</td>
|
||
<td>{{rof}}</td>
|
||
</tr>
|
||
{{/rof}}
|
||
{{#recoil}}
|
||
<tr>
|
||
<td class="label">Recoil:</td>
|
||
<td>{{recoil}}</td>
|
||
</tr>
|
||
{{/recoil}}
|
||
{{#bookReference}}
|
||
<tr>
|
||
<td class="label">Reference:</td>
|
||
<td>{{bookReference}}</td>
|
||
</tr>
|
||
{{/bookReference}}
|
||
</table>
|
||
</div>
|
||
</rolltemplate>
|
||
|
||
</div>
|
||
|
||
<script type="text/worker">
|
||
|
||
var noop = function () {}; // do nothing.
|
||
|
||
var version = "1.5.1";
|
||
|
||
var modCascade = true;
|
||
var modCascadeAll = true;
|
||
|
||
// add global variable
|
||
var damageTable = [];
|
||
|
||
/* Due to the change from auto-calc fields to helper scrips,
|
||
* I'm running a "on open" to set various fields. At some point
|
||
* in the future this might no longer be needed.
|
||
*/
|
||
on('sheet:opened', function() {
|
||
console.log('********* Sheet Opened *********');
|
||
|
||
console.log('** Setting default TAB to Updates **');
|
||
|
||
/* When the sheet is opened, it opens to the Update tab */
|
||
getAttrs(["updates_read"], function(values) {
|
||
|
||
console.log(values.updates_read);
|
||
|
||
if (values.updates_read == "1") {
|
||
|
||
// do nothing
|
||
|
||
} else {
|
||
|
||
// activate update tab
|
||
setAttrs({tab:7});
|
||
|
||
}
|
||
|
||
} );
|
||
|
||
|
||
/* For Bug Fix v1.3.9 : Need to convert the Value of the Modifier Prompt*/
|
||
console.log('** Attribute Modifier new values v1.3.9 **');
|
||
|
||
getAttrs(['modifier'], function(v){
|
||
const setObj = {};
|
||
if(v.modifier==='?{Modifier|0}'){
|
||
setObj.modifier = '[[?{Modifier|0}]]'
|
||
}else if(v.modifier==='?{Modifier|0} + ?{Shock|0} + ?{Reeling or Staggered|0} + ?{Off-Hand|0} + ?{Familiarity|0}'){
|
||
setObj.modifier = '[[?{Modifier|0}]] +[[?{Shock|0}]] + [[?{Reeling or Staggered|0}]] + [[?{Off-Hand|0}]] + [[?{Familiarity|0}]]'
|
||
}
|
||
setAttrs(setObj,{silent:true});
|
||
});
|
||
|
||
getAttrs(['sheet_version', 'mod_cascade', 'modCascade', 'modCascadeAll'], function(v) {
|
||
if (v.modCascade && v.modCascadeAll) {
|
||
modCascade = v.modCascade;
|
||
modCascadeAll = v.modCascadeAll;
|
||
}
|
||
if (!v.sheet_version || v.sheet_version != version) {
|
||
|
||
// Set sheet version:
|
||
// uncheck the updates_read checkbox and
|
||
// be sure to select tab #7, where the updates are located
|
||
setAttrs({
|
||
sheet_version: version,
|
||
updates_read: 0,
|
||
tab: 7
|
||
});
|
||
|
||
|
||
// initialize any empty fields in repeating sections since the default values were removed.
|
||
loadRepeating('repeating_languages', 'spoken', 0);
|
||
loadRepeating('repeating_languages', 'written', 0);
|
||
loadRepeating('repeating_skills', 'points', 1);
|
||
loadRepeating('repeating_cultures', 'points', 1);
|
||
loadRepeating('repeating_techniques', 'points', 1);
|
||
loadRepeating('repeating_spells', 'points', 1);
|
||
|
||
// initalize all calculated stats
|
||
resetAll(v.mod_cascade);
|
||
}
|
||
});
|
||
|
||
damageTable = generateDamageTable();
|
||
|
||
});
|
||
|
||
on('change:mod_cascade', function (e) {
|
||
getAttrs(['mod_cascade'], function (v) {
|
||
resetAll(v.mod_cascade);
|
||
})
|
||
});
|
||
|
||
function resetAll(mod_cascade) {
|
||
switch(mod_cascade) {
|
||
case 'all':
|
||
modCascade = true;
|
||
modCascadeAll = true;
|
||
break;
|
||
case 'some':
|
||
modCascade = true;
|
||
modCascadeAll = false;
|
||
break;
|
||
default:
|
||
modCascade = false;
|
||
modCascadeAll = false;
|
||
}
|
||
setAttrs({
|
||
modCascade: modCascade,
|
||
modCascadeAll: modCascadeAll
|
||
});
|
||
|
||
// last thing to update is movement
|
||
var thenMovementStats = _.after(1, function () {
|
||
|
||
// last thing to update is movement tables
|
||
updateToggleUnspentCheckBox();
|
||
updateDiceDamageIcons();
|
||
updateEnhancedMove();
|
||
updateFlightValues();
|
||
updateWaterMoveValues();
|
||
updateJumpDistanceValues();
|
||
|
||
});
|
||
|
||
// After move, dodge, encumbrance, HP, and FP
|
||
var thenCurrentMoveDodge = _.after(2, function () {
|
||
updateMoveDodge(thenMovementStats);
|
||
});
|
||
|
||
// After DX and HT
|
||
var thenSpeedMoveDodge = _.after(2, function () {
|
||
updateBasicSpeed(function () {
|
||
// After Basic Speed...
|
||
updateBasicMove(thenCurrentMoveDodge);
|
||
updateDodge(thenCurrentMoveDodge);
|
||
});
|
||
});
|
||
|
||
// After Lift and weight...
|
||
var thenEncumbrance = _.after(2, function () {
|
||
updateEncLevel(thenCurrentMoveDodge);
|
||
});
|
||
|
||
sumRepeating('repeating_item', 'weighttotal', function (v) {
|
||
setAttrs({ total_weight: (v * 1000) / 1000 }, {silent: false}, thenEncumbrance);
|
||
});
|
||
|
||
// Update attributes, then secondary characteristics, and so on...
|
||
updateST(function () {
|
||
// After ST...
|
||
updateHP(thenCurrentMoveDodge);
|
||
updateLift(thenEncumbrance);
|
||
updateStrikingST();
|
||
// updateStrikingST damage rolls
|
||
console.log("update Striking Damage");
|
||
updateStrikingStrengthDamage();
|
||
});
|
||
updateDX(thenSpeedMoveDodge);
|
||
updateIQ(function () {
|
||
// After IQ...
|
||
updateWill();
|
||
updatePer(function () {
|
||
// After Per...
|
||
updateSense();
|
||
});
|
||
});
|
||
updateHT(function () {
|
||
updateFP(thenCurrentMoveDodge);
|
||
thenSpeedMoveDodge();
|
||
});
|
||
|
||
}
|
||
|
||
// Sum values, used in reduce
|
||
function getSum(total, num) {
|
||
return (+total || 0) + (+num || 0);
|
||
}
|
||
|
||
// function to sum a field from a repeating section
|
||
function sumRepeating(sectionName, fieldName, callback) {
|
||
getSectionIDs(sectionName, function (ids) {
|
||
if (ids.length === 0 ) {
|
||
callback(0);
|
||
return;
|
||
}
|
||
var fieldArray = [];
|
||
for (var i = 0; i < ids.length; i++) {
|
||
fieldArray.push(sectionName + '_' + ids[i] + '_' + fieldName);
|
||
}
|
||
getAttrs(fieldArray, function (fieldValues) {
|
||
var vals = Object.values(fieldValues);
|
||
vals.push(0);
|
||
var total = vals.reduce(getSum);
|
||
callback(total);
|
||
});
|
||
});
|
||
}
|
||
|
||
// load values of a repeating section
|
||
function loadRepeating(sectionName, fieldName, defaultValue) {
|
||
console.log('********* loadRepeating ' + sectionName + '.' + fieldName + '*********');
|
||
getSectionIDs(sectionName, function (ids) {
|
||
if (ids.length === 0 ) {
|
||
return;
|
||
}
|
||
var fieldArray = [];
|
||
var update = {};
|
||
for (var i = 0; i < ids.length; i++) {
|
||
var propName = sectionName + '_' + ids[i] + '_' + fieldName;
|
||
fieldArray.push(propName);
|
||
update[propName] = defaultValue;
|
||
}
|
||
getAttrs(fieldArray, function (fieldValues) {
|
||
Object.assign(update, fieldValues);
|
||
setAttrs(update);
|
||
});
|
||
});
|
||
}
|
||
|
||
// Strength Change
|
||
on('change:strength_points change:strength_mod', function (e) {
|
||
updateST();
|
||
});
|
||
// Update Strength
|
||
function updateST(callback) {
|
||
callback = callback || noop;
|
||
console.log('********* updateST *********');
|
||
getAttrs(['strength_points', 'strength_mod'], function(v) {
|
||
var base = 10 + ((+v.strength_points || 0) / 10 | 0);
|
||
var mod = +v.strength_mod || 0;
|
||
setAttrs({
|
||
strength_base: base,
|
||
strength: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Dexterity Change
|
||
on('change:dexterity_points change:dexterity_mod', function (e) {
|
||
updateDX();
|
||
});
|
||
// Update Dexterity
|
||
function updateDX(callback) {
|
||
callback = callback || noop;
|
||
console.log('********* updateDX *********');
|
||
getAttrs(['dexterity_points', 'dexterity_mod'], function(v) {
|
||
var base = 10 + ((+v.dexterity_points || 0) / 20 | 0);
|
||
var mod = +v.dexterity_mod || 0;
|
||
setAttrs({
|
||
dexterity_base: base,
|
||
dexterity: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Intelligence
|
||
on('change:intelligence_points change:intelligence_mod', function (e) {
|
||
updateIQ();
|
||
});
|
||
// Update Intelligence
|
||
function updateIQ(callback) {
|
||
callback = callback || noop;
|
||
console.log('********* updateIQ *********');
|
||
getAttrs(['intelligence_points', 'intelligence_mod'], function(v) {
|
||
var base = 10 + ((+v.intelligence_points || 0) / 20 | 0);
|
||
var mod = +v.intelligence_mod || 0;
|
||
setAttrs({
|
||
intelligence_base: base,
|
||
intelligence: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Health
|
||
on('change:health_points change:health_mod', function (e) {
|
||
updateHT();
|
||
});
|
||
// Update Health
|
||
function updateHT(callback) {
|
||
callback = callback || noop;
|
||
console.log('********* updateHT *********');
|
||
getAttrs(['health_points', 'health_mod'], function(v) {
|
||
var base = 10 + ((+v.health_points || 0) / 10 | 0);
|
||
var mod = +v.health_mod || 0;
|
||
setAttrs({
|
||
health_base: base,
|
||
health: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// HP
|
||
on('change:strength change:hit_points_points change:hit_points_mod', function (e) {
|
||
updateHP();
|
||
});
|
||
// Update HP
|
||
function updateHP(callback) {
|
||
console.log('********* updateHP *********');
|
||
callback = callback || noop;
|
||
getAttrs(['strength', 'strength_base', 'hit_points_points', 'hit_points_mod'], function(v) {
|
||
var base = (modCascadeAll ? +v.strength : +v.strength_base) +
|
||
((+v.hit_points_points || 0) / 2 | 0);
|
||
var mod = +v.hit_points_mod;
|
||
setAttrs({
|
||
hit_points_max: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// FP
|
||
on('change:health change:fatigue_points_points change:fatigue_points_mod', function (e) {
|
||
updateFP();
|
||
});
|
||
// Update FP
|
||
function updateFP(callback) {
|
||
console.log('********* updateFP *********');
|
||
callback = callback || noop;
|
||
getAttrs(['health', 'health_base', 'fatigue_points_points', 'fatigue_points_mod'], function(v) {
|
||
var base = (modCascadeAll ? +v.health : +v.health_base) +
|
||
((+v.fatigue_points_points || 0) / 3 | 0);
|
||
var mod = +v.fatigue_points_mod;
|
||
setAttrs({
|
||
fatigue_points_max: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Perception
|
||
on('change:intelligence change:perception_points change:perception_mod', function (e) {
|
||
updatePer();
|
||
});
|
||
// Update Perception
|
||
function updatePer(callback) {
|
||
console.log('********* updatePer *********');
|
||
callback = callback || noop;
|
||
getAttrs(['intelligence', 'intelligence_base', 'perception_points', 'perception_mod'], function(v) {
|
||
var base = (modCascade ? +v.intelligence : +v.intelligence_base) +
|
||
((+v.perception_points || 0) / 5 | 0);
|
||
var mod = +v.perception_mod || 0;
|
||
setAttrs({
|
||
perception_base: base,
|
||
perception: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Vision, Hearing, Smell, Touch
|
||
on('change:perception change:vision_points change:vision_mod change:hearing_points change:hearing_mod change:taste_smell_points change:taste_smell_mod change:touch_points change:touch_mod', function (e) {
|
||
updateSense();
|
||
});
|
||
// Update Vision, Hearing, Smell, Touch
|
||
function updateSense() {
|
||
console.log('********* updateSense *********');
|
||
getAttrs(['perception', 'perception_base', 'vision_points', 'vision_mod', 'hearing_points', 'hearing_mod', 'taste_smell_points', 'taste_smell_mod', 'touch_points', 'touch_mod'], function(v) {
|
||
var base = (modCascade ? +v.perception : +v.perception_base);
|
||
var visionBase = base + ((+v.vision_points || 0) / 2 | 0);
|
||
var visionMod = +v.vision_mod || 0;
|
||
var hearingBase = base + ((+v.hearing_points || 0) / 2 | 0);
|
||
var hearingMod = +v.hearing_mod || 0;
|
||
var tasteSmellBase = base + ((+v.taste_smell_points || 0) / 2 | 0);
|
||
var tasteSmellMod = +v.taste_smell_mod || 0;
|
||
var touchBase = base + ((+v.touch_points || 0) / 2 | 0);
|
||
var touchMod = +v.touch_mod || 0;
|
||
setAttrs({
|
||
vision_base: visionBase,
|
||
vision: visionBase + visionMod,
|
||
hearing_base: hearingBase,
|
||
hearing: hearingBase + hearingMod,
|
||
taste_smell_base: tasteSmellBase,
|
||
taste_smell: tasteSmellBase + tasteSmellMod,
|
||
touch_base: touchBase,
|
||
touch: touchBase + touchMod
|
||
});
|
||
});
|
||
}
|
||
|
||
// Updage Willpower, Fear (This is actually called Fright Check - the General page reflects this)
|
||
on('change:intelligence change:willpower_points change:willpower_mod change:fear_check_points change:fear_check_mod', function (e) {
|
||
updateWill();
|
||
});
|
||
// Updage Willpower, Fear (This is actually called Fright Check - the General page reflects this)
|
||
function updateWill() {
|
||
console.log('********* updateWill *********');
|
||
getAttrs(['intelligence', 'intelligence_base', 'willpower_points', 'willpower_mod', 'fear_check_points', 'fear_check_mod'], function(v) {
|
||
var wBase = (modCascade ? +v.intelligence : +v.intelligence_base) +
|
||
((+v.willpower_points || 0) / 5 | 0);
|
||
var wMod = +v.willpower_mod || 0;
|
||
var fBase = wBase + (modCascade ? +wMod : 0) +
|
||
((+v.fear_check_points || 0) / 2 | 0);
|
||
var fMod = +v.fear_check_mod || 0;
|
||
setAttrs({
|
||
willpower_base: wBase,
|
||
willpower: wBase + wMod,
|
||
fear_check_base: fBase,
|
||
fear_check: fBase + fMod
|
||
});
|
||
});
|
||
}
|
||
|
||
// Speed
|
||
on('change:dexterity change:health change:basic_speed_points change:basic_speed_mod', function (e) {
|
||
updateBasicSpeed();
|
||
});
|
||
// Update Speed
|
||
function updateBasicSpeed(callback) {
|
||
console.log('********* updateBasicSpeed *********');
|
||
callback = callback || noop;
|
||
getAttrs(['dexterity', 'dexterity_base', 'health', 'health_base', 'basic_speed_points', 'basic_speed_mod'], function(v) {
|
||
var dx = (modCascade ? +v.dexterity : +v.dexterity_base);
|
||
var ht = (modCascade ? +v.health : +v.health_base);
|
||
var base = (dx + ht) / 4 + (((+v.basic_speed_points || 0) / 5 | 0) * 0.25);
|
||
var mod = +v.basic_speed_mod || 0;
|
||
setAttrs({
|
||
basic_speed_base: base,
|
||
basic_speed: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Move
|
||
on('change:basic_speed change:basic_move_points change:basic_move_mod', function (e) {
|
||
updateBasicMove();
|
||
});
|
||
// Update Move
|
||
function updateBasicMove(callback) {
|
||
console.log('********* updateBasicMove *********');
|
||
callback = callback || noop;
|
||
getAttrs(['basic_speed', 'basic_speed_base', 'basic_move_points', 'basic_move_mod'], function(v) {
|
||
var speed = (modCascade ? +v.basic_speed : +v.basic_speed_base);
|
||
var base = Math.floor(speed) + ((+v.basic_move_points || 0) / 5 | 0);
|
||
var mod = +v.basic_move_mod || 0;
|
||
setAttrs({
|
||
basic_move_base: base,
|
||
basic_move: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Dodge
|
||
on('change:basic_speed change:dodge_mod', function (e) {
|
||
updateDodge();
|
||
});
|
||
// Update Dodge
|
||
function updateDodge(callback) {
|
||
console.log('********* updateDodge *********');
|
||
callback = callback || noop;
|
||
getAttrs(['basic_speed', 'basic_speed_base', 'dodge_mod'], function(v) {
|
||
var speed = (modCascade ? +v.basic_speed : +v.basic_speed_base);
|
||
var base = Math.floor(speed) + 3;
|
||
var mod = +v.dodge_mod || 0;
|
||
setAttrs({
|
||
dodge_base: base,
|
||
dodge: base + mod
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Encumbered/injured move and dodge
|
||
on('change:encumbrance_level change:dodge change:basic_move change:hit_points change:fatigue_points', function (e) {
|
||
updateMoveDodge();
|
||
});
|
||
// Update encumbered/injured move and dodge
|
||
function updateMoveDodge(callback) {
|
||
console.log('***** UPDATE MOVE/DODGE *****');
|
||
callback = callback || noop;
|
||
getAttrs(['encumbrance_level', 'dodge', 'basic_move', 'hit_points', 'hit_points_max', 'fatigue_points', 'fatigue_points_max', 'strength_base', 'strength_mod'], function(v) {
|
||
var dodge = +v.dodge;
|
||
var move = +v.basic_move;
|
||
var strength = +v.strength_base + +v.strength_mod;
|
||
if (v.encumbrance_level === 5) {
|
||
dodge = 1;
|
||
move = 1;
|
||
} else {
|
||
dodge = dodge - +v.encumbrance_level;
|
||
// There is some math error when calculating Encumbrance which requires the modifier of 1.01 instead of 1 below
|
||
move = Math.floor(+v.basic_move * (1.01 - (0.2 * +v.encumbrance_level)));
|
||
dodge = dodge < 1 ? 1 : dodge;
|
||
move = move < 1 ? 1 : move;
|
||
}
|
||
if (+v.hit_points < +v.hit_points_max / 3) {
|
||
dodge = Math.ceil(dodge / 2);
|
||
move = Math.ceil(move / 2);
|
||
}
|
||
if (+v.fatigue_points < +v.fatigue_points_max / 3 ) {
|
||
dodge = Math.ceil(dodge / 2);
|
||
move = Math.ceil(move / 2);
|
||
strength = Math.ceil(strength / 2);
|
||
}
|
||
setAttrs({
|
||
current_move: move,
|
||
current_dodge: dodge,
|
||
strength: strength
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Lifting ST
|
||
on('change:strength change:lift_st_points change:lift_st_mod', function (e) {
|
||
updateLift();
|
||
});
|
||
// Update Lift
|
||
function updateLift(callback) {
|
||
console.log('********* updateLift *********');
|
||
callback = callback || noop;
|
||
getAttrs(['strength', 'strength_base', 'lift_st_points', 'lift_st_mod'], function(v) {
|
||
var base = (modCascade ? +v.strength : +v.strength_base) +
|
||
((+v.lift_st_points || 0) / 3 | 0);
|
||
var modded = base + +v.lift_st_mod;
|
||
var basicLift = (modded * modded) / 5;
|
||
if (basicLift >= 10) {
|
||
basicLift = Math.round(basicLift);
|
||
}
|
||
setAttrs({
|
||
lift_st_base: base,
|
||
lift_st: modded,
|
||
basic_lift: basicLift
|
||
}, {silent: false}, callback);
|
||
});
|
||
}
|
||
|
||
// Striking ST
|
||
on('change:strength change:striking_st_points change:striking_st_mod', function (e) {
|
||
updateStrikingST();
|
||
});
|
||
// Update Striking
|
||
function updateStrikingST() {
|
||
console.log('********* updateStrikingST *********');
|
||
getAttrs(['strength', 'strength_base', 'striking_st_points', 'striking_st_mod'], function(v) {
|
||
var base = (modCascade ? +v.strength : +v.strength_base) +
|
||
((+v.striking_st_points || 0) / 5 | 0);
|
||
var mod = +v.striking_st_mod;
|
||
setAttrs({
|
||
striking_st_base: base,
|
||
striking_st: base + mod
|
||
});
|
||
});
|
||
}
|
||
|
||
// Update the total cost of Languages
|
||
on('change:native_language_spoken change:native_language_written change:repeating_languages:spoken change:repeating_languages:written remove:repeating_languages', function (e) {
|
||
console.log('**** Languages Changed ****');
|
||
var total = 0;
|
||
var tally = _.after(2, function () {
|
||
setAttrs({ languages_points: total });
|
||
});
|
||
getAttrs(['native_language_spoken', 'native_language_written'], function(v) {
|
||
console.log('Native Language Spoken: ' + v.native_language_spoken);
|
||
console.log('Native Language Written: ' + v.native_language_written);
|
||
total += +v.native_language_spoken;
|
||
total += +v.native_language_written;
|
||
tally();
|
||
});
|
||
sumRepeating('repeating_languages', 'spoken', function(v) {
|
||
console.log('Spoken: ' + v);
|
||
total += +v;
|
||
tally();
|
||
});
|
||
sumRepeating('repeating_languages', 'written', function(v) {
|
||
console.log('Written: ' + v);
|
||
total += +v;
|
||
tally();
|
||
});
|
||
});
|
||
|
||
// Update the total cost of Cultural Familiarities
|
||
on('change:repeating_cultures:points remove:repeating_cultures', function (e) {
|
||
sumRepeating('repeating_cultures', 'points', function(v) {
|
||
setAttrs({ cf_points: v });
|
||
});
|
||
});
|
||
|
||
// Update the total cost of Advantages
|
||
on('change:repeating_traits:points remove:repeating_traits', function (e) {
|
||
sumRepeating('repeating_traits', 'points', function(v) {
|
||
setAttrs({ advantages_points: v });
|
||
});
|
||
});
|
||
|
||
// Update the total cost of Disadvantages
|
||
on('change:repeating_disadvantages:points remove:repeating_disadvantages', function (e) {
|
||
sumRepeating('repeating_disadvantages', 'points', function(v) {
|
||
setAttrs({ disadvantages_points: v });
|
||
});
|
||
});
|
||
|
||
// Update the total cost of Racial Traits
|
||
on('change:repeating_racial:points remove:repeating_racial', function (e) {
|
||
sumRepeating('repeating_racial', 'points', function(v) {
|
||
setAttrs({ racial_points: v });
|
||
});
|
||
});
|
||
|
||
// Update the total cost of Skills
|
||
on('change:repeating_skills:points remove:repeating_skills', function (e) {
|
||
sumRepeating('repeating_skills', 'points', function(v) {
|
||
setAttrs({ skills_points: v });
|
||
});
|
||
});
|
||
|
||
// Update the total cost of Techniques
|
||
on('change:repeating_techniques:points remove:repeating_techniques', function (e) {
|
||
sumRepeating('repeating_techniques', 'points', function(v) {
|
||
setAttrs({ techniques_points: v });
|
||
});
|
||
});
|
||
|
||
// Update the total cost of Spells
|
||
on('change:repeating_spells:points remove:repeating_spells', function (e) {
|
||
sumRepeating('repeating_spells', 'points', function(v) {
|
||
setAttrs({ spells_points: v });
|
||
});
|
||
});
|
||
|
||
// Update Summery
|
||
on('change:tl_pts change:appearance change:languages_points change:cf_points change:advantages_points change:disadvantages_points change:racial_points', function (e) {
|
||
getAttrs(['tl_pts', 'appearance', 'languages_points', 'cf_points', 'advantages_points', 'disadvantages_points', 'racial_points'], function(v) {
|
||
var vals = Object.values(v);
|
||
vals.push(0);
|
||
setAttrs({ trait_points: vals.reduce(getSum) });
|
||
});
|
||
});
|
||
|
||
// Update the line total weight and cost
|
||
on('change:repeating_item:count change:repeating_item:cost change:repeating_item:carried change:repeating_item:weight', function (e) {
|
||
getAttrs(['repeating_item_count', 'repeating_item_cost', 'repeating_item_weight', 'repeating_item_carried'], function (item) {
|
||
setAttrs({
|
||
repeating_item_weighttotal: Math.round(item.repeating_item_count * item.repeating_item_weight * item.repeating_item_carried * 1000) / 1000,
|
||
repeating_item_costtotal: Math.round(item.repeating_item_count * item.repeating_item_cost * 100) / 100
|
||
});
|
||
});
|
||
});
|
||
|
||
// Update the total weight of all carried items.
|
||
on('change:repeating_item:weighttotal remove:repeating_item', function (e) {
|
||
sumRepeating('repeating_item', 'weighttotal', function(v) {
|
||
setAttrs({ total_weight: Math.round(v * 1000) / 1000 });
|
||
});
|
||
});
|
||
|
||
// Get Encumbrance Level:
|
||
on('change:total_weight change:basic_lift', function (e) {
|
||
updateEncLevel();
|
||
});
|
||
function updateEncLevel(callback) {
|
||
getAttrs(['basic_lift', 'total_weight'], function(v) {
|
||
callback = callback || noop;
|
||
var basicLift = +v.basic_lift;
|
||
var encumbranceLevel = Math.floor(v.total_weight / basicLift);
|
||
if (encumbranceLevel > 0 && (v.total_weight % basicLift) === 0) {
|
||
encumbranceLevel--;
|
||
}
|
||
if (encumbranceLevel >= 10) {
|
||
encumbranceLevel = 4;
|
||
} else if (encumbranceLevel >= 6) {
|
||
encumbranceLevel = 4;
|
||
} else if (encumbranceLevel >= 3) {
|
||
encumbranceLevel = 3;
|
||
}
|
||
setAttrs(
|
||
{ encumbrance_level: encumbranceLevel },
|
||
{silent: false},
|
||
callback
|
||
);
|
||
});
|
||
}
|
||
|
||
// Update the total cost of all items.
|
||
on('change:repeating_item:costtotal remove:repeating_item', function (e) {
|
||
sumRepeating('repeating_item', 'costtotal', function(v) {
|
||
setAttrs({ total_value: (v * 100) / 100 });
|
||
});
|
||
});
|
||
|
||
// Update thrust and swing when striking st is updated
|
||
on('change:striking_st', function(e){
|
||
|
||
updateStrikingStrengthDamage();
|
||
|
||
});
|
||
|
||
/**
|
||
* Get the striking ST value and then get the damage type
|
||
* update Thrust and Swing
|
||
*/
|
||
function updateStrikingStrengthDamage(callback) {
|
||
|
||
// get Strking strength
|
||
getAttrs(['striking_st'], function(values) {
|
||
|
||
callback = callback || noop;
|
||
|
||
// + means to convert variable to number
|
||
var strikingST = +values.striking_st;
|
||
|
||
// get the damageType object (strength, thrust, swing)
|
||
var damageType = getDamageType(strikingST);
|
||
|
||
// set thrust and swing
|
||
setAttrs({
|
||
thrust: damageType.thrust,
|
||
swing: damageType.swing
|
||
});
|
||
|
||
});
|
||
|
||
}
|
||
|
||
/**
|
||
* Returns the damage type object
|
||
* based on ST
|
||
* damageType {strength, thrust, swing}
|
||
*
|
||
* @param int strikingST ST of attack
|
||
*
|
||
* @return object
|
||
*/
|
||
function getDamageType(strikingST) {
|
||
|
||
// return value
|
||
var damgeType = null;
|
||
|
||
var modifier = 0;
|
||
|
||
var baseThrust = 11;
|
||
|
||
var baseSwing = 13;
|
||
|
||
// prevent bad ST from causing issue
|
||
if (isNaN(strikingST) || strikingST < 0) {
|
||
strikingST = 1;
|
||
}
|
||
|
||
if (strikingST < 110) {
|
||
|
||
// get damageType from table
|
||
damageType = damageTable[strikingST];
|
||
|
||
} else {
|
||
|
||
// calculate the total
|
||
// Add 1d6 to thrust and swing for every full 10 points over 100
|
||
modifier = Math.floor((strikingST - 100) / 10);
|
||
|
||
baseThrust = baseThrust + modifier;
|
||
|
||
baseSwing = baseSwing = modifier;
|
||
|
||
damageType = {strength:strikingST, thrust:baseThrust + "d6", swing:baseSwing + "d6"};
|
||
|
||
}
|
||
|
||
return damageType;
|
||
}
|
||
|
||
/**
|
||
* Populates the global variable damageTable
|
||
*/
|
||
function generateDamageTable() {
|
||
|
||
var damageTable = [];
|
||
|
||
damageTable[0] = {strength:"0", thrust:"1d6-6", swing:"1d6-6"};
|
||
damageTable[1] = {strength:"1", thrust:"1d6-6", swing:"1d6-5"};
|
||
damageTable[2] = {strength:"2", thrust:"1d6-6", swing:"1d6-5"};
|
||
damageTable[3] = {strength:"3", thrust:"1d6-5", swing:"1d6-4"};
|
||
damageTable[4] = {strength:"4", thrust:"1d6-5", swing:"1d6-4"};
|
||
damageTable[5] = {strength:"5", thrust:"1d6-4", swing:"1d6-3"};
|
||
damageTable[6] = {strength:"6", thrust:"1d6-4", swing:"1d6-3"};
|
||
damageTable[7] = {strength:"7", thrust:"1d6-3", swing:"1d6-2"};
|
||
damageTable[8] = {strength:"8", thrust:"1d6-3", swing:"1d6-2"};
|
||
damageTable[9] = {strength:"9", thrust:"1d6-2", swing:"1d6-1"};
|
||
damageTable[10] = {strength:"10", thrust:"1d6-2", swing:"1d6"};
|
||
damageTable[11] = {strength:"11", thrust:"1d6-1", swing:"1d6+1"};
|
||
damageTable[12] = {strength:"12", thrust:"1d6-1", swing:"1d6+2"};
|
||
damageTable[13] = {strength:"13", thrust:"1d6", swing:"2d6-1"};
|
||
damageTable[14] = {strength:"14", thrust:"1d6", swing:"2d6"};
|
||
damageTable[15] = {strength:"15", thrust:"1d6+1", swing:"2d6+1"};
|
||
damageTable[16] = {strength:"16", thrust:"1d6+1", swing:"2d6+2"};
|
||
damageTable[17] = {strength:"17", thrust:"1d6+2", swing:"3d6-1"};
|
||
damageTable[18] = {strength:"18", thrust:"1d6+2", swing:"3d6"};
|
||
damageTable[19] = {strength:"19", thrust:"2d6-1", swing:"3d6+1"};
|
||
damageTable[20] = {strength:"20", thrust:"2d6-1", swing:"3d6+2"};
|
||
damageTable[21] = {strength:"21", thrust:"2d6", swing:"4d6-1"};
|
||
damageTable[22] = {strength:"22", thrust:"2d6", swing:"4d6"};
|
||
damageTable[23] = {strength:"23", thrust:"2d6+1", swing:"4d6+1"};
|
||
damageTable[24] = {strength:"24", thrust:"2d6+1", swing:"4d6+2"};
|
||
damageTable[25] = {strength:"25", thrust:"2d6+2", swing:"5d6-1"};
|
||
damageTable[26] = {strength:"26", thrust:"2d6+2", swing:"5d6"};
|
||
damageTable[27] = {strength:"27", thrust:"3d6-1", swing:"5d6+1"};
|
||
damageTable[28] = {strength:"28", thrust:"3d6-1", swing:"5d6+1"};
|
||
damageTable[29] = {strength:"29", thrust:"3d6", swing:"5d6+2"};
|
||
damageTable[30] = {strength:"30", thrust:"3d6", swing:"5d6+2"};
|
||
damageTable[31] = {strength:"31", thrust:"3d6+1", swing:"6d6-1"};
|
||
damageTable[32] = {strength:"32", thrust:"3d6+1", swing:"6d6-1"};
|
||
damageTable[33] = {strength:"33", thrust:"3d6+2", swing:"6d6"};
|
||
damageTable[34] = {strength:"34", thrust:"3d6+2", swing:"6d6"};
|
||
damageTable[35] = {strength:"35", thrust:"4d6-1", swing:"6d6+1"};
|
||
damageTable[36] = {strength:"36", thrust:"4d6-1", swing:"6d6+1"};
|
||
damageTable[37] = {strength:"37", thrust:"4d6", swing:"6d6+2"};
|
||
damageTable[38] = {strength:"38", thrust:"4d6", swing:"6d6+2"};
|
||
damageTable[39] = {strength:"39", thrust:"4d6+1", swing:"7d6-1"};
|
||
damageTable[40] = {strength:"40", thrust:"4d6+1", swing:"7d6-1"};
|
||
damageTable[41] = {strength:"41", thrust:"4d6+1", swing:"7d6-1"};
|
||
damageTable[42] = {strength:"42", thrust:"4d6+1", swing:"7d6-1"};
|
||
damageTable[43] = {strength:"43", thrust:"4d6+1", swing:"7d6-1"};
|
||
damageTable[44] = {strength:"44", thrust:"4d6+1", swing:"7d6-1"};
|
||
damageTable[45] = {strength:"45", thrust:"5d6", swing:"7d6+1"};
|
||
damageTable[46] = {strength:"46", thrust:"5d6", swing:"7d6+1"};
|
||
damageTable[47] = {strength:"47", thrust:"5d6", swing:"7d6+1"};
|
||
damageTable[48] = {strength:"48", thrust:"5d6", swing:"7d6+1"};
|
||
damageTable[49] = {strength:"49", thrust:"5d6", swing:"7d6+1"};
|
||
damageTable[50] = {strength:"50", thrust:"5d6+2", swing:"8d6-1"};
|
||
damageTable[51] = {strength:"51", thrust:"5d6+2", swing:"8d6-1"};
|
||
damageTable[52] = {strength:"52", thrust:"5d6+2", swing:"8d6-1"};
|
||
damageTable[53] = {strength:"53", thrust:"5d6+2", swing:"8d6-1"};
|
||
damageTable[54] = {strength:"54", thrust:"5d6+2", swing:"8d6-1"};
|
||
damageTable[55] = {strength:"55", thrust:"6d6", swing:"8d6+1"};
|
||
damageTable[56] = {strength:"56", thrust:"6d6", swing:"8d6+1"};
|
||
damageTable[57] = {strength:"57", thrust:"6d6", swing:"8d6+1"};
|
||
damageTable[58] = {strength:"58", thrust:"6d6", swing:"8d6+1"};
|
||
damageTable[59] = {strength:"59", thrust:"6d6", swing:"8d6+1"};
|
||
damageTable[60] = {strength:"60", thrust:"7d6-1", swing:"9d6"};
|
||
damageTable[61] = {strength:"61", thrust:"7d6-1", swing:"9d6"};
|
||
damageTable[62] = {strength:"62", thrust:"7d6-1", swing:"9d6"};
|
||
damageTable[63] = {strength:"63", thrust:"7d6-1", swing:"9d6"};
|
||
damageTable[64] = {strength:"64", thrust:"7d6-1", swing:"9d6"};
|
||
damageTable[65] = {strength:"65", thrust:"7d6+1", swing:"9d6+2"};
|
||
damageTable[66] = {strength:"66", thrust:"7d6+1", swing:"9d6+2"};
|
||
damageTable[67] = {strength:"67", thrust:"7d6+1", swing:"9d6+2"};
|
||
damageTable[68] = {strength:"68", thrust:"7d6+1", swing:"9d6+2"};
|
||
damageTable[69] = {strength:"69", thrust:"7d6+1", swing:"9d6+2"};
|
||
damageTable[70] = {strength:"70", thrust:"8d6", swing:"10d6"};
|
||
damageTable[71] = {strength:"71", thrust:"8d6", swing:"10d6"};
|
||
damageTable[72] = {strength:"72", thrust:"8d6", swing:"10d6"};
|
||
damageTable[73] = {strength:"73", thrust:"8d6", swing:"10d6"};
|
||
damageTable[74] = {strength:"74", thrust:"8d6", swing:"10d6"};
|
||
damageTable[75] = {strength:"75", thrust:"8d6+2", swing:"10d6+2"};
|
||
damageTable[76] = {strength:"76", thrust:"8d6+2", swing:"10d6+2"};
|
||
damageTable[77] = {strength:"77", thrust:"8d6+2", swing:"10d6+2"};
|
||
damageTable[78] = {strength:"78", thrust:"8d6+2", swing:"10d6+2"};
|
||
damageTable[79] = {strength:"79", thrust:"8d6+2", swing:"10d6+2"};
|
||
damageTable[80] = {strength:"80", thrust:"9d6", swing:"11d6"};
|
||
damageTable[81] = {strength:"81", thrust:"9d6", swing:"11d6"};
|
||
damageTable[82] = {strength:"82", thrust:"9d6", swing:"11d6"};
|
||
damageTable[83] = {strength:"83", thrust:"9d6", swing:"11d6"};
|
||
damageTable[84] = {strength:"84", thrust:"9d6", swing:"11d6"};
|
||
damageTable[85] = {strength:"85", thrust:"9d6+2", swing:"11d6+2"};
|
||
damageTable[86] = {strength:"86", thrust:"9d6+2", swing:"11d6+2"};
|
||
damageTable[87] = {strength:"87", thrust:"9d6+2", swing:"11d6+2"};
|
||
damageTable[88] = {strength:"88", thrust:"9d6+2", swing:"11d6+2"};
|
||
damageTable[89] = {strength:"89", thrust:"9d6+2", swing:"11d6+2"};
|
||
damageTable[90] = {strength:"90", thrust:"10d6", swing:"12d6"};
|
||
damageTable[91] = {strength:"91", thrust:"10d6", swing:"12d6"};
|
||
damageTable[92] = {strength:"92", thrust:"10d6", swing:"12d6"};
|
||
damageTable[93] = {strength:"93", thrust:"10d6", swing:"12d6"};
|
||
damageTable[94] = {strength:"94", thrust:"10d6", swing:"12d6"};
|
||
damageTable[95] = {strength:"95", thrust:"10d6+2", swing:"12d6+2"};
|
||
damageTable[96] = {strength:"96", thrust:"10d6+2", swing:"12d6+2"};
|
||
damageTable[97] = {strength:"97", thrust:"10d6+2", swing:"12d6+2"};
|
||
damageTable[98] = {strength:"98", thrust:"10d6+2", swing:"12d6+2"};
|
||
damageTable[99] = {strength:"99", thrust:"10d6+2", swing:"12d6+2"};
|
||
damageTable[100] = {strength:"100", thrust:"11d6", swing:"13d6"};
|
||
|
||
return damageTable;
|
||
|
||
}
|
||
|
||
// check for combat reflexes toggle box
|
||
on('change:combat_reflexes', function(e){
|
||
|
||
updateActiveDefenses();
|
||
|
||
});
|
||
|
||
/**
|
||
* Get combat reflexes. Update active defenses
|
||
*/
|
||
function updateActiveDefenses(callback) {
|
||
|
||
// get the defense values
|
||
getAttrs(['combat_reflexes', 'dodge_mod', 'fear_check_mod'], function(values) {
|
||
|
||
callback = callback || noop;
|
||
|
||
// + means to convert variable to number
|
||
var chkCombatReflexes = +values.combat_reflexes;
|
||
|
||
var modDodge = 0;
|
||
|
||
var modFear = 0;
|
||
|
||
if (chkCombatReflexes == 1) {
|
||
|
||
modDodge = 1;
|
||
|
||
modFear = 2;
|
||
|
||
} else {
|
||
|
||
modDodge = -1;
|
||
|
||
modFear = -2;
|
||
|
||
}
|
||
|
||
// update dodge modifier
|
||
var orig_dodge_mod = 0;
|
||
|
||
if (isNaN(values.dodge_mod)) {
|
||
orig_dodge_mod = 0;
|
||
} else {
|
||
orig_dodge_mod = +values.dodge_mod;
|
||
}
|
||
|
||
var new_dodge_mod = orig_dodge_mod + modDodge;
|
||
|
||
// update fear check
|
||
var orig_fear_check_mod = 0;
|
||
|
||
if (isNaN(values.fear_check_mod)) {
|
||
orig_fear_check_mod = 0;
|
||
} else {
|
||
orig_fear_check_mod = +values.fear_check_mod;
|
||
}
|
||
|
||
var new_fear_check_mod = orig_fear_check_mod + modFear;
|
||
|
||
// update
|
||
|
||
// set thrust and swing
|
||
setAttrs({
|
||
dodge_mod: new_dodge_mod,
|
||
fear_check_mod: new_fear_check_mod
|
||
});
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// check for manual or calculated option
|
||
on("change:use_unspent_box", function (e) {
|
||
|
||
updateToggleUnspentCheckBox();
|
||
|
||
});
|
||
|
||
/**
|
||
* Updates the hidden toggle_unspent_points. Used by
|
||
* css to show/hide unspent boxes
|
||
* see: gurps.css -> input.sheet-toggle-unspoint-points[value="1"]
|
||
*
|
||
*/
|
||
function updateToggleUnspentCheckBox() {
|
||
|
||
console.log('***** TOGGLE UNSPENT BOX *****');
|
||
getAttrs(['use_unspent_box'], function(values) {
|
||
|
||
setAttrs({
|
||
toggle_unspent_points: values.use_unspent_box
|
||
});
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// check for selected damage dice change
|
||
on("change:damage_dice_type", function (e) {
|
||
|
||
updateDiceDamageIcons();
|
||
|
||
});
|
||
|
||
/**
|
||
* Controller function to update each section of
|
||
* damage dice icons
|
||
*/
|
||
function updateDiceDamageIcons() {
|
||
|
||
console.log('***** UPDATE DICE DAMAGE *****');
|
||
|
||
updateThrustSwingDamageIcons();
|
||
|
||
updateRepeatingDamageDice("repeating_melee");
|
||
|
||
updateRepeatingDamageDice("repeating_ranged");
|
||
|
||
}
|
||
|
||
/**
|
||
* Update the Thrust and Swing Damage Icons
|
||
* on the general tab by setting the hidden inputs
|
||
*/
|
||
function updateThrustSwingDamageIcons() {
|
||
|
||
getAttrs(['damage_dice_type'], function(values) {
|
||
|
||
setAttrs({
|
||
thrust_damage_dice_icon: values.damage_dice_type,
|
||
swing_damage_dice_icon: values.damage_dice_type
|
||
});
|
||
|
||
});
|
||
|
||
}
|
||
|
||
/**
|
||
* Gets the repeating sections ids. loop through
|
||
* each id, must use getAttrs() inside the loop,
|
||
* then set the hidden input for dice damge icon
|
||
*
|
||
* @param string sectionID Repeating section id
|
||
*/
|
||
function updateRepeatingDamageDice(sectionID) {
|
||
|
||
// get all the ids for each repeating section
|
||
getSectionIDs(sectionID, function (ids) {
|
||
|
||
// loop though each ids using underscores
|
||
// see: https://underscorejs.org/#each
|
||
_.each(ids,function(id) {
|
||
|
||
getAttrs(['damage_dice_type'], function(values) {
|
||
|
||
var hiddenDamageIcon = [sectionID + "_" + id + "_damage_dice_icon"];
|
||
|
||
// set the hidden input attribute
|
||
setAttrs({
|
||
[sectionID + "_" + id + "_damage_dice_icon"]: values.damage_dice_type
|
||
});
|
||
|
||
});
|
||
|
||
});
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// check to see if ground move mod or move points changed
|
||
on("change:enhanced_ground_move_mod change:enhanced_ground_move_points change:basic_move change:encumbrance_level change:hit_points change:fatigue_points", function(e) {
|
||
|
||
updateEnhancedMove();
|
||
|
||
});
|
||
|
||
/**
|
||
* Get the attributes for enhanced ground move modifier and points spent
|
||
* Update the fields for ground multiple and ground move based on mod and points
|
||
*/
|
||
function updateEnhancedMove() {
|
||
|
||
console.log('***** UPDATE ENHANCED MOVE *****');
|
||
|
||
getAttrs(["enhanced_ground_move_mod", "enhanced_ground_move_points", "basic_move", "encumbrance_level", "hit_points", "hit_points_max", "fatigue_points", "fatigue_points_max"], function(values) {
|
||
|
||
// + sign converts value to a number
|
||
var groundModifier = +values.enhanced_ground_move_mod;
|
||
|
||
var groundPoints = +values.enhanced_ground_move_points;
|
||
|
||
var groundModifierFromPoints = 0;
|
||
|
||
var totalModifier = 0;
|
||
|
||
var basicMove = +values.basic_move;
|
||
|
||
var enhancedMove = 0;
|
||
|
||
// encumbrance levels
|
||
var enhancedMove0 = "";
|
||
|
||
var enhancedMove1 = "";
|
||
|
||
var enhancedMove2 = "";
|
||
|
||
var enhancedMove3 = "";
|
||
|
||
var enhancedMove4 = "";
|
||
|
||
var enhancedMove5 = "";
|
||
|
||
var encumberedEnhancedMove1 = 0;
|
||
|
||
var encumberedEnhancedMove2 = 0;
|
||
|
||
var encumberedEnhancedMove3 = 0;
|
||
|
||
var encumberedEnhancedMove4 = 0;
|
||
|
||
// current speed based on encumbrance and pain/fatigue
|
||
var currentEnhancedMove = "";
|
||
|
||
var injuryFatigueMoveModifier = 1;
|
||
|
||
// validate groundModifer
|
||
if (groundModifier < 0) {
|
||
groundModifier = 0;
|
||
}
|
||
|
||
// make sure groundModifier is multiple of .5
|
||
// https://stackoverflow.com/questions/25209849/javascript-round-up-to-nearest-5
|
||
groundModifier = Math.ceil(groundModifier * 2) / 2;
|
||
|
||
// validate groundPoints
|
||
if (groundPoints < 0) {
|
||
groundPoints = 0;
|
||
}
|
||
|
||
// make sure groundPoints is multiple of 10
|
||
// https://stackoverflow.com/questions/18953384/javascript-round-up-to-the-next-multiple-of-5
|
||
groundPoints = Math.ceil(groundPoints / 10) * 10;
|
||
|
||
groundModifierFromPoints = groundPoints / 20;
|
||
|
||
totalModifier = groundModifier + groundModifierFromPoints;
|
||
|
||
enhancedMove = getEnhancedValue(basicMove, totalModifier);
|
||
|
||
if (totalModifier == 0) {
|
||
|
||
enhancedMove0 = "";
|
||
|
||
enhancedMove1 = "";
|
||
|
||
enhancedMove2 = "";
|
||
|
||
enhancedMove3 = "";
|
||
|
||
enhancedMove4 = "";
|
||
|
||
enhancedMove5 = "";
|
||
|
||
currentBasicMove = "";
|
||
|
||
currentEnhancedMove = "";
|
||
|
||
} else {
|
||
|
||
enhancedMove0 = basicMove + "/" + enhancedMove;
|
||
|
||
move1 = getEncumberedMove(basicMove, 1);
|
||
encumberedEnhancedMove1 = getEncumberedMove(enhancedMove, 1);
|
||
enhancedMove1 = move1 + "/" + encumberedEnhancedMove1;
|
||
|
||
move2 = getEncumberedMove(basicMove, 2);
|
||
encumberedEnhancedMove2 = getEncumberedMove(enhancedMove, 2);
|
||
enhancedMove2 = move2 + "/" + encumberedEnhancedMove2;
|
||
|
||
move3 = getEncumberedMove(basicMove, 3);
|
||
encumberedEnhancedMove3 = getEncumberedMove(enhancedMove, 3);
|
||
enhancedMove3 = move3 + "/" + encumberedEnhancedMove3;
|
||
|
||
move4 = getEncumberedMove(basicMove, 4);
|
||
encumberedEnhancedMove4 = getEncumberedMove(enhancedMove, 4);
|
||
enhancedMove4 = move4 + "/" + encumberedEnhancedMove4;
|
||
|
||
enhancedMove5 = enhancedMove4;
|
||
|
||
// check for half move
|
||
injuryFatigueMoveModifier = getInjuryFatigueModifier(values.hit_points, values.hit_points_max, values.fatigue_points, values.fatigue_points_max);
|
||
|
||
// determine the current encumbrance move
|
||
switch(values.encumbrance_level) {
|
||
|
||
case 0:
|
||
currentEnhancedMove = Math.floor(+basicMove * injuryFatigueMoveModifier) + "/" + Math.floor(+enhancedMove * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 1:
|
||
currentEnhancedMove = Math.floor(+move1 * injuryFatigueMoveModifier) + "/" + Math.floor(+encumberedEnhancedMove1 * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 2:
|
||
currentEnhancedMove = Math.floor(+move2 * injuryFatigueMoveModifier) + "/" + Math.floor(+encumberedEnhancedMove2 * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 3:
|
||
currentEnhancedMove = Math.floor(+move3 * injuryFatigueMoveModifier) + "/" + Math.floor(+encumberedEnhancedMove3 * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 4:
|
||
case 5:
|
||
default:
|
||
currentEnhancedMove = Math.floor(+move4 * injuryFatigueMoveModifier) + "/" + Math.floor(+encumberedEnhancedMove4 * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
// set values and making sure modifiers are correct multiples
|
||
setAttrs({
|
||
"enhanced_ground_move_mod": groundModifier,
|
||
"enhanced_ground_move_points": groundPoints,
|
||
"enhanced_ground_move_multiple": totalModifier,
|
||
"enhanced_ground_move": enhancedMove,
|
||
"enhanced_move_0": enhancedMove0,
|
||
"enhanced_move_1": enhancedMove1,
|
||
"enhanced_move_2": enhancedMove2,
|
||
"enhanced_move_3": enhancedMove3,
|
||
"enhanced_move_4": enhancedMove4,
|
||
"enhanced_move_5": enhancedMove5,
|
||
"enhanced_move_current": currentEnhancedMove
|
||
});
|
||
|
||
|
||
});
|
||
|
||
}
|
||
|
||
/**
|
||
* Calculates move based on encumbrance level
|
||
* encumbrance level 1-4. 5 is the same as 4, just costs fatigue
|
||
*
|
||
* @param int basicMove Starting basic move
|
||
* @param string encumbranceLevel Encumbrance level 1-4
|
||
*
|
||
* @return int
|
||
*/
|
||
function getEncumberedMove(basicMove, encumbranceLevel) {
|
||
|
||
var newMove = 0;
|
||
|
||
var encumbranceModifier = 0;
|
||
|
||
// make sure we have a good value
|
||
if (encumbranceLevel < 1) {
|
||
encumbranceLevel = 1;
|
||
} else if (encumbranceLevel > 4) {
|
||
encumbranceLevel = 4;
|
||
}
|
||
|
||
encumbranceModifier = 1 - ((encumbranceLevel*2)/10);
|
||
|
||
// fix floating point bug
|
||
// see: https://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-only-if-necessary
|
||
encumbranceModifier = Math.round(encumbranceModifier * 100) / 100;
|
||
|
||
newMove = Math.floor(basicMove * encumbranceModifier);
|
||
|
||
// minimum move is 1
|
||
if (newMove <= 0) {
|
||
newMove = 1;
|
||
}
|
||
|
||
return newMove;
|
||
|
||
}
|
||
|
||
/**
|
||
* Calculate the enhanced value for multiples of 2.
|
||
* If .5 value, then multiply by 1.5
|
||
* see GURPS Basic Set, page 52 enhanced move
|
||
*
|
||
* @param int baseValue Value to multiply
|
||
* @param decimal level Level of enhanced move to apply to baseValue
|
||
*
|
||
* @return int
|
||
*/
|
||
function getEnhancedValue(baseValue, level) {
|
||
|
||
var enhancedValue = 0;
|
||
|
||
// check for formula to use
|
||
if (level == 0) {
|
||
|
||
enhancedValue = 0;
|
||
|
||
} else if (level % 1 == 0) {
|
||
|
||
// if no remainder, use this formula
|
||
enhancedValue = baseValue * Math.pow(2, level);
|
||
|
||
} else {
|
||
|
||
// if there is a remainder, use this formula
|
||
// remove the .5 and then multiply by 1.5
|
||
enhancedValue = (baseValue * Math.pow(2, Math.floor(level))) * 1.5;
|
||
|
||
enhancedValue = Math.floor(enhancedValue);
|
||
|
||
}
|
||
return enhancedValue;
|
||
|
||
}
|
||
|
||
/**
|
||
* Checks for 1/3 HP and 1/3 FP.
|
||
* Apply move modifies
|
||
*
|
||
* @param int hit_points Current hit points of character
|
||
* @param int hit_points_max Max HP of character
|
||
* @param int fatigue_points Current FP of character
|
||
* @param int fatigue_points_max Max FP of character
|
||
*
|
||
* @return decimal
|
||
*/
|
||
function getInjuryFatigueModifier(hit_points, hit_points_max, fatigue_points, fatigue_points_max) {
|
||
|
||
var modifier = 1;
|
||
|
||
if (+hit_points < +hit_points_max / 3) {
|
||
|
||
modifier = modifier / 2;
|
||
|
||
}
|
||
|
||
if (+fatigue_points < +fatigue_points_max / 3 ) {
|
||
|
||
modifier = modifier / 2;
|
||
|
||
}
|
||
|
||
return modifier;
|
||
|
||
}
|
||
|
||
// check for changes that affect flight speed
|
||
on("change:flight_checked change:basic_speed change:basic_air_move_points change:basic_air_move_mod change:enhanced_air_level change:enhanced_air_move_points change:encumbrance_level change:hit_points change:fatigue_points", function(e) {
|
||
|
||
updateFlightValues();
|
||
|
||
});
|
||
|
||
/**
|
||
* Update flight values, including encumbered and current speed
|
||
*
|
||
* @return void
|
||
*/
|
||
function updateFlightValues() {
|
||
|
||
console.log('***** UPDATE FLIGHT VALUES *****');
|
||
|
||
getAttrs(["flight_checked", "basic_speed", "enhanced_air_level", "basic_air_move", "basic_air_move_mod",
|
||
"basic_air_move_points", "enhanced_air_level", "enhanced_air_move_points",
|
||
"encumbrance_level", "hit_points", "hit_points_max", "fatigue_points", "fatigue_points_max"], function(values) {
|
||
|
||
// + sign converts value to a number
|
||
var airMovePoints = +values.basic_air_move_points;
|
||
|
||
// ensure valid airMovePoints
|
||
if (airMovePoints < 0) {
|
||
airMovePoints = 0;
|
||
}
|
||
|
||
var basicAirMoveMod = +values.basic_air_move_mod;
|
||
|
||
// ensure valid basicAirMoveMod
|
||
if (basicAirMoveMod < 0) {
|
||
basicAirMoveMod = 0;
|
||
}
|
||
|
||
var airMoveUnmodified = 0;
|
||
|
||
var airMove = 0;
|
||
|
||
var airModifierFromPoints = 0;
|
||
|
||
var baseEnhancedAirMove = "";
|
||
|
||
var enhancedAirLevel = 0;
|
||
|
||
var enhancedEnteredLevel = +values.enhanced_air_level;
|
||
|
||
var encumberedDisplayMove0 = "";
|
||
|
||
var encumberedDisplayMove1 = "";
|
||
|
||
var encumberedDisplayMove2 = "";
|
||
|
||
var encumberedDisplayMove3 = "";
|
||
|
||
var encumberedDisplayMove4 = "";
|
||
|
||
var encumberedDisplayMove5 = "";
|
||
|
||
var currentAirMove = "";
|
||
|
||
// ensure valid enhancedEnteredLevel
|
||
if (enhancedEnteredLevel < 0) {
|
||
enhancedEnteredLevel = 0;
|
||
}
|
||
|
||
var enhancedEnteredPoints = +values.enhanced_air_move_points;
|
||
|
||
// ensure valid enhancedEnteredPoints
|
||
if (enhancedEnteredPoints < 0) {
|
||
enhancedEnteredPoints = 0;
|
||
}
|
||
|
||
var enhancedAirLevelFromPoints = 0;
|
||
|
||
var totalEnhancedLevel = 0;
|
||
|
||
var injuryFatigueMoveModifier = 1;
|
||
|
||
// if flight is checked, calculate the values
|
||
if (values.flight_checked == 1) {
|
||
|
||
//----------------
|
||
// calculate air move
|
||
airMoveUnmodified = +values.basic_speed * 2;
|
||
|
||
// base is basis_speed * 2
|
||
airMove = +values.basic_speed * 2;
|
||
|
||
// add air move modifier
|
||
airMove = airMove + basicAirMoveMod;
|
||
|
||
// make sure airMovePoints is multiple of 2
|
||
// https://stackoverflow.com/questions/18953384/javascript-round-up-to-the-next-multiple-of-5
|
||
airMovePoints = Math.ceil(airMovePoints / 2) * 2;
|
||
|
||
airModifierFromPoints = airMovePoints/2;
|
||
|
||
// add in the air move from spent points
|
||
airMove = airMove + airModifierFromPoints;
|
||
|
||
//-----------------
|
||
// calculate top air speed
|
||
// make sure groundPoints is multiple of 10
|
||
// https://stackoverflow.com/questions/18953384/javascript-round-up-to-the-next-multiple-of-5
|
||
enhancedEnteredPoints = Math.ceil(enhancedEnteredPoints / 10) * 10;
|
||
|
||
enhancedAirLevelFromPoints = enhancedEnteredPoints / 20;
|
||
|
||
// make sure enhancedEnteredLevel is multiple of .5
|
||
// https://stackoverflow.com/questions/25209849/javascript-round-up-to-nearest-5
|
||
enhancedEnteredLevel = Math.ceil(enhancedEnteredLevel * 2) / 2;
|
||
|
||
totalEnhancedLevel = enhancedEnteredLevel + enhancedAirLevelFromPoints;
|
||
|
||
baseEnhancedAirMove = getEnhancedValue(airMove, totalEnhancedLevel);
|
||
|
||
// get the encumbered levels
|
||
encumberedDisplayMove0 = airMove + "/" + baseEnhancedAirMove;
|
||
|
||
encumberedDisplayMove1 = getEncumberedMove(airMove, 1) + "/" + getEncumberedMove(baseEnhancedAirMove, 1);
|
||
|
||
encumberedDisplayMove2 = getEncumberedMove(airMove, 2) + "/" + getEncumberedMove(baseEnhancedAirMove, 2);
|
||
|
||
encumberedDisplayMove3 = getEncumberedMove(airMove, 3) + "/" + getEncumberedMove(baseEnhancedAirMove, 3);
|
||
|
||
encumberedDisplayMove4 = getEncumberedMove(airMove, 4) + "/" + getEncumberedMove(baseEnhancedAirMove, 4);
|
||
|
||
encumberedDisplayMove5 = encumberedDisplayMove4;
|
||
|
||
// check for half move
|
||
injuryFatigueMoveModifier = getInjuryFatigueModifier(values.hit_points, values.hit_points_max, values.fatigue_points, values.fatigue_points_max);
|
||
|
||
// determine the current encumbrance move
|
||
switch(values.encumbrance_level) {
|
||
|
||
case 0:
|
||
currentAirMove = (airMove * injuryFatigueMoveModifier) + "/" + (baseEnhancedAirMove * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 1:
|
||
currentAirMove = (getEncumberedMove(airMove, 1) * injuryFatigueMoveModifier) + "/" + (getEncumberedMove(baseEnhancedAirMove, 1) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 2:
|
||
currentAirMove = (getEncumberedMove(airMove, 2) * injuryFatigueMoveModifier) + "/" + (getEncumberedMove(baseEnhancedAirMove, 2) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 3:
|
||
currentAirMove = (getEncumberedMove(airMove, 3) * injuryFatigueMoveModifier) + "/" + (getEncumberedMove(baseEnhancedAirMove, 3) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 4:
|
||
case 5:
|
||
default:
|
||
currentAirMove = (getEncumberedMove(airMove, 4) * injuryFatigueMoveModifier) + "/" + (getEncumberedMove(baseEnhancedAirMove, 4) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
}
|
||
|
||
} else {
|
||
|
||
airMove = 0;
|
||
|
||
baseEnhancedAirMove = 0;
|
||
|
||
currentAirMove = 0;
|
||
|
||
}
|
||
|
||
// set air moves
|
||
setAttrs({
|
||
"basic_air_move": airMove,
|
||
"basic_air_move_unmodified": airMoveUnmodified,
|
||
"enhanced_air_move": baseEnhancedAirMove,
|
||
"enhanced_air_move_level": totalEnhancedLevel,
|
||
"basic_air_move_points": airMovePoints,
|
||
"enhanced_air_move_points": enhancedEnteredPoints,
|
||
"air_0": encumberedDisplayMove0,
|
||
"air_1": encumberedDisplayMove1,
|
||
"air_2": encumberedDisplayMove2,
|
||
"air_3": encumberedDisplayMove3,
|
||
"air_4": encumberedDisplayMove4,
|
||
"air_5": encumberedDisplayMove5,
|
||
"current_air": currentAirMove
|
||
});
|
||
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// check for changes that affect water speed
|
||
on("change:amphibious_checked change:basic_move change:basic_water_move_points change:basic_water_move_mod change:enhanced_water_level change:enhanced_water_move_points change:encumbrance_level change:hit_points change:fatigue_points", function(e) {
|
||
|
||
updateWaterMoveValues();
|
||
|
||
});
|
||
|
||
/**
|
||
* Update water move values, including encumbered and current speed
|
||
*
|
||
* @return void
|
||
*/
|
||
function updateWaterMoveValues() {
|
||
|
||
console.log('***** UPDATE WATER MOVE VALUES *****');
|
||
|
||
getAttrs(["amphibious_checked", "basic_move", "enhanced_water_level", "basic_water_move", "basic_water_move_mod",
|
||
"basic_water_move_points", "enhanced_water_level", "enhanced_water_move_points",
|
||
"encumbrance_level", "hit_points", "hit_points_max", "fatigue_points", "fatigue_points_max"], function(values) {
|
||
|
||
// + sign converts value to a number
|
||
var waterMovePoints = +values.basic_water_move_points;
|
||
|
||
// ensure valid waterMovePoints
|
||
if (waterMovePoints < 0) {
|
||
waterMovePoints = 0;
|
||
}
|
||
|
||
var basicWaterMoveMod = +values.basic_water_move_mod;
|
||
|
||
// ensure valid basicWaterMoveMod
|
||
if (basicWaterMoveMod < 0) {
|
||
basicWaterMoveMod = 0;
|
||
}
|
||
|
||
var waterMoveUnmodified = 0;
|
||
|
||
var waterMove = 0;
|
||
|
||
var waterModifierFromPoints = 0;
|
||
|
||
var baseEnhancedWaterMove = "";
|
||
|
||
var enhancedWaterLevel = 0;
|
||
|
||
var enhancedEnteredLevel = +values.enhanced_water_level;
|
||
|
||
var encumberedDisplayMove0 = "";
|
||
|
||
var encumberedDisplayMove1 = "";
|
||
|
||
var encumberedDisplayMove2 = "";
|
||
|
||
var encumberedDisplayMove3 = "";
|
||
|
||
var encumberedDisplayMove4 = "";
|
||
|
||
var encumberedDisplayMove5 = "";
|
||
|
||
var currentWaterMove = "";
|
||
|
||
// ensure valid enhancedEnteredLevel
|
||
if (enhancedEnteredLevel < 0) {
|
||
enhancedEnteredLevel = 0;
|
||
}
|
||
|
||
var enhancedEnteredPoints = +values.enhanced_water_move_points;
|
||
|
||
// ensure valid enhancedEnteredPoints
|
||
if (enhancedEnteredPoints < 0) {
|
||
enhancedEnteredPoints = 0;
|
||
}
|
||
|
||
var enhancedWaterLevelFromPoints = 0;
|
||
|
||
var totalEnhancedLevel = 0;
|
||
|
||
var injuryFatigueMoveModifier = 1;
|
||
|
||
// if flight is checked, calculate the values
|
||
if (values.amphibious_checked == 1 && (enhancedEnteredPoints > 0 || enhancedEnteredLevel > 0)) {
|
||
|
||
//----------------
|
||
// calculate water move
|
||
waterMoveUnmodified = +values.basic_move;
|
||
|
||
// determine move
|
||
if (values.amphibious_checked == 1) {
|
||
// base is basis_move
|
||
waterMove = +values.basic_move;
|
||
|
||
} else {
|
||
|
||
// base is basis_move / 5
|
||
waterMove = +values.basic_move / 5;
|
||
}
|
||
|
||
// add water move modifier
|
||
waterMove = waterMove + basicWaterMoveMod;
|
||
|
||
// make sure waterMovePoints is multiple of 5
|
||
// https://stackoverflow.com/questions/18953384/javascript-round-up-to-the-next-multiple-of-5
|
||
waterMovePoints = Math.ceil(waterMovePoints / 5) * 5;
|
||
|
||
waterModifierFromPoints = waterMovePoints/5;
|
||
|
||
// add in the water move from spent points
|
||
waterMove = waterMove + waterModifierFromPoints;
|
||
|
||
waterMove = Math.floor(waterMove);
|
||
|
||
// make sure it's a minimum of 1.
|
||
if (waterMove <= 0) {
|
||
waterMove = 1;
|
||
}
|
||
|
||
//-----------------
|
||
// calculate top water speed
|
||
// make sure groundPoints is multiple of 10
|
||
// https://stackoverflow.com/questions/18953384/javascript-round-up-to-the-next-multiple-of-5
|
||
enhancedEnteredPoints = Math.ceil(enhancedEnteredPoints / 10) * 10;
|
||
|
||
enhancedWaterLevelFromPoints = enhancedEnteredPoints / 20;
|
||
|
||
// make sure enhancedEnteredLevel is multiple of .5
|
||
// https://stackoverflow.com/questions/25209849/javascript-round-up-to-nearest-5
|
||
enhancedEnteredLevel = Math.ceil(enhancedEnteredLevel * 2) / 2;
|
||
|
||
totalEnhancedLevel = enhancedEnteredLevel + enhancedWaterLevelFromPoints;
|
||
|
||
baseEnhancedWaterMove = getEnhancedValue(waterMove, totalEnhancedLevel);
|
||
|
||
// get the encumbered levels
|
||
encumberedDisplayMove0 = waterMove + "/" + baseEnhancedWaterMove;
|
||
|
||
encumberedDisplayMove1 = getEncumberedMove(waterMove, 1) + "/" + getEncumberedMove(baseEnhancedWaterMove, 1);
|
||
|
||
encumberedDisplayMove2 = getEncumberedMove(waterMove, 2) + "/" + getEncumberedMove(baseEnhancedWaterMove, 2);
|
||
|
||
encumberedDisplayMove3 = getEncumberedMove(waterMove, 3) + "/" + getEncumberedMove(baseEnhancedWaterMove, 3);
|
||
|
||
encumberedDisplayMove4 = getEncumberedMove(waterMove, 4) + "/" + getEncumberedMove(baseEnhancedWaterMove, 4);
|
||
|
||
encumberedDisplayMove5 = encumberedDisplayMove4;
|
||
|
||
// check for half move
|
||
injuryFatigueMoveModifier = getInjuryFatigueModifier(values.hit_points, values.hit_points_max, values.fatigue_points, values.fatigue_points_max);
|
||
|
||
// determine the current encumbrance move
|
||
switch(values.encumbrance_level) {
|
||
|
||
case 0:
|
||
currentWaterMove = (waterMove * injuryFatigueMoveModifier) + "/" + (baseEnhancedWaterMove * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 1:
|
||
currentWaterMove = (getEncumberedMove(waterMove, 1) * injuryFatigueMoveModifier) + "/" + (getEncumberedMove(baseEnhancedWaterMove, 1) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 2:
|
||
currentWaterMove = (getEncumberedMove(waterMove, 2) * injuryFatigueMoveModifier) + "/" + (getEncumberedMove(baseEnhancedWaterMove, 2) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 3:
|
||
currentWaterMove = (getEncumberedMove(waterMove, 3) * injuryFatigueMoveModifier) + "/" + (getEncumberedMove(baseEnhancedWaterMove, 3) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 4:
|
||
case 5:
|
||
default:
|
||
currentWaterMove = (getEncumberedMove(waterMove, 4) * injuryFatigueMoveModifier) + "/" + (getEncumberedMove(baseEnhancedWaterMove, 4) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
}
|
||
|
||
} else {
|
||
|
||
//----------------
|
||
// calculate water move
|
||
waterMoveUnmodified = +values.basic_move;
|
||
|
||
// determine move
|
||
if (values.amphibious_checked == 1) {
|
||
// base is basis_move
|
||
waterMove = +values.basic_move;
|
||
|
||
} else {
|
||
|
||
// base is basis_move / 5
|
||
waterMove = +values.basic_move / 5;
|
||
}
|
||
|
||
// add water move modifier
|
||
waterMove = waterMove + basicWaterMoveMod;
|
||
|
||
waterMove = Math.floor(waterMove);
|
||
|
||
// make sure it's a minimum of 1.
|
||
if (waterMove <= 0) {
|
||
waterMove = 1;
|
||
}
|
||
|
||
// make sure waterMovePoints is multiple of 5
|
||
// https://stackoverflow.com/questions/18953384/javascript-round-up-to-the-next-multiple-of-5
|
||
waterMovePoints = Math.ceil(waterMovePoints / 5) * 5;
|
||
|
||
waterModifierFromPoints = waterMovePoints/5;
|
||
|
||
// add in the water move from spent points
|
||
waterMove = waterMove + waterModifierFromPoints;
|
||
|
||
baseEnhancedWaterMove = 0;
|
||
|
||
currentWaterMove = 0;
|
||
|
||
// get the encumbered levels
|
||
encumberedDisplayMove0 = waterMove;
|
||
|
||
encumberedDisplayMove1 = getEncumberedMove(waterMove, 1);
|
||
|
||
encumberedDisplayMove2 = getEncumberedMove(waterMove, 2);
|
||
|
||
encumberedDisplayMove3 = getEncumberedMove(waterMove, 3);
|
||
|
||
encumberedDisplayMove4 = getEncumberedMove(waterMove, 4);
|
||
|
||
encumberedDisplayMove5 = encumberedDisplayMove4;
|
||
|
||
// check for half move
|
||
injuryFatigueMoveModifier = getInjuryFatigueModifier(values.hit_points, values.hit_points_max, values.fatigue_points, values.fatigue_points_max);
|
||
|
||
// determine the current encumbrance move
|
||
switch(values.encumbrance_level) {
|
||
|
||
case 0:
|
||
currentWaterMove = (waterMove * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 1:
|
||
currentWaterMove = (getEncumberedMove(waterMove, 1) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 2:
|
||
currentWaterMove = (getEncumberedMove(waterMove, 2) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 3:
|
||
currentWaterMove = (getEncumberedMove(waterMove, 3) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
case 4:
|
||
case 5:
|
||
default:
|
||
currentWaterMove = (getEncumberedMove(waterMove, 4) * injuryFatigueMoveModifier);
|
||
break;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
// set water moves
|
||
setAttrs({
|
||
"basic_water_move": waterMove,
|
||
"basic_water_move_unmodified": waterMoveUnmodified,
|
||
"enhanced_water_move": baseEnhancedWaterMove,
|
||
"enhanced_water_move_level": totalEnhancedLevel,
|
||
"basic_water_move_points": waterMovePoints,
|
||
"enhanced_water_move_points": enhancedEnteredPoints,
|
||
"water_0": encumberedDisplayMove0,
|
||
"water_1": encumberedDisplayMove1,
|
||
"water_2": encumberedDisplayMove2,
|
||
"water_3": encumberedDisplayMove3,
|
||
"water_4": encumberedDisplayMove4,
|
||
"water_5": encumberedDisplayMove5,
|
||
"current_water": currentWaterMove
|
||
});
|
||
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// check for changes that affect jump distance
|
||
on("change:use_st_for_jump change:jump_skill change:basic_move change:enhanced_ground_move change:super_jump_entered_level change:super_jump_points change:jump_concentration change:running_jump_yards_moved change:running_high_jump_yards_moved change:strength change:encumbrance_level change:hit_points change:fatigue_points", function(e) {
|
||
|
||
updateJumpDistanceValues();
|
||
|
||
});
|
||
|
||
/**
|
||
* Update jump distance values
|
||
*/
|
||
function updateJumpDistanceValues() {
|
||
|
||
console.log('***** UPDATE JUMP VALUES *****');
|
||
|
||
getAttrs(["use_st_for_jump", "jump_skill", "basic_move", "enhanced_ground_move", "super_jump_entered_level",
|
||
"super_jump_points", "strength", "jump_concentration", "running_jump_yards_moved", "running_high_jump_yards_moved",
|
||
"encumbrance_level", "hit_points", "hit_points_max", "fatigue_points", "fatigue_points_max"], function(values) {
|
||
|
||
var jumpSkill = +values.jump_skill;
|
||
|
||
if (jumpSkill < 0) {
|
||
jumpSkill = 0;
|
||
}
|
||
|
||
var jumpST = +values.strength;
|
||
|
||
if (jumpST < 0) {
|
||
jumpST = 0;
|
||
}
|
||
|
||
// + sign converts value to a number
|
||
var superJumpPoints = +values.super_jump_points;
|
||
|
||
// ensure valid superJumpPoints
|
||
if (superJumpPoints < 0) {
|
||
superJumpPoints = 0;
|
||
}
|
||
|
||
var superJumpEnteredLevel = +values.super_jump_entered_level;
|
||
|
||
if (superJumpEnteredLevel < 0) {
|
||
superJumpEnteredLevel = 0;
|
||
}
|
||
|
||
var basicMove = +values.basic_move;
|
||
|
||
// ensure valid basicWaterMoveMod
|
||
if (basicMove < 0) {
|
||
basicMove = 0;
|
||
}
|
||
|
||
// check for super move
|
||
var enhancedGroundMove = +values.enhanced_ground_move;
|
||
|
||
if (enhancedGroundMove < 0) {
|
||
enhancedGroundMove = 0;
|
||
}
|
||
|
||
// check for running jump
|
||
var runningJumpYardsMoved = +values.running_jump_yards_moved;
|
||
|
||
runningJumpYardsMoved = Math.floor(runningJumpYardsMoved);
|
||
|
||
var runningHighJumpYardsMoved = +values.running_high_jump_yards_moved;
|
||
|
||
runningHighJumpYardsMoved = Math.floor(runningHighJumpYardsMoved);
|
||
|
||
var runningMoveToUse = 0;
|
||
|
||
var runningHighMoveToUse = 0;
|
||
|
||
var jumpBroadFeet = 0;
|
||
|
||
var jumpBroadYards = 0;
|
||
|
||
var runningBroadJumpFeet = 0;
|
||
|
||
var runningBroadJumpYards = 0;
|
||
|
||
var jumpHighFeet = 0;
|
||
|
||
var jumpHighYards = 0;
|
||
|
||
var runningHighJumpFeet = 0;
|
||
|
||
var runningHighJumpYards = 0;
|
||
|
||
var superJumpLevelFromPoints = 0;
|
||
|
||
var totalSuperJumpLevel = 0;
|
||
|
||
var encumberedDisplayMove0 = "";
|
||
|
||
var encumberedDisplayMove1 = "";
|
||
|
||
var encumberedDisplayMove2 = "";
|
||
|
||
var encumberedDisplayMove3 = "";
|
||
|
||
var encumberedDisplayMove4 = "";
|
||
|
||
var encumberedDisplayMove5 = "";
|
||
|
||
var totalSuperJumpLevel = 0;
|
||
|
||
var injuryFatigueMoveModifier = 1;
|
||
|
||
var jumpMoveSpeed = 0;
|
||
|
||
var finalJumpMoveSpeed = 0;
|
||
|
||
var statUsedForJump = "";
|
||
|
||
var statUsedForRunningJump = "";
|
||
|
||
var baseJumpMove = "";
|
||
|
||
// calculate broad and high jump
|
||
if (jumpSkill > 0) {
|
||
|
||
// -------------
|
||
// USE JUMP SKILL
|
||
baseJumpMove = Math.floor(jumpSkill/2);
|
||
|
||
// calc. standing broad jump
|
||
jumpBroadFeet = baseJumpMove;
|
||
|
||
if (jumpBroadFeet <= 0) {
|
||
jumpBroadFeet = 1;
|
||
}
|
||
|
||
statUsedForJump = "Jump Skill/2 = " + jumpBroadFeet;
|
||
|
||
jumpBroadFeet = (jumpBroadFeet * 2) - 3;
|
||
|
||
if (jumpBroadFeet <= 0) {
|
||
jumpBroadFeet = 1;
|
||
}
|
||
|
||
// calc. running broad jump
|
||
if (enhancedGroundMove > Math.floor(jumpSkill/2)) {
|
||
|
||
// use enhanced move instead of jump skill
|
||
statUsedForRunningJump = "Basic Move * (2 ^ Enh MV Mod)";
|
||
|
||
runningMoveToUse = enhancedGroundMove;
|
||
|
||
runningHighMoveToUse = enhancedGroundMove;
|
||
|
||
} else {
|
||
|
||
// use jump skill for running jump
|
||
statUsedForRunningJump = statUsedForJump + " + Yards Run";
|
||
|
||
runningMoveToUse = Math.floor(jumpSkill/2) + runningJumpYardsMoved;
|
||
|
||
runningHighMoveToUse = Math.floor(jumpSkill/2) + runningHighJumpYardsMoved;
|
||
|
||
}
|
||
|
||
runningBroadJumpFeet = (runningMoveToUse * 2) - 3;
|
||
|
||
if (runningBroadJumpFeet <= 0) {
|
||
|
||
runningBroadJumpFeet = 1;
|
||
|
||
}
|
||
|
||
// calc. standing high jump
|
||
jumpHighFeet = Math.floor(jumpSkill/2);
|
||
|
||
if (jumpHighFeet <= 0) {
|
||
jumpHighFeet = 1;
|
||
}
|
||
|
||
jumpHighFeet = (6 * jumpHighFeet) - 10;
|
||
|
||
if (jumpHighFeet <= 0) {
|
||
jumpHighFeet = 1;
|
||
}
|
||
|
||
// convert to feet
|
||
// round to 2 decimals
|
||
// https://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-only-if-necessary
|
||
jumpHighFeet = Math.round( (jumpHighFeet / 12) * 100) / 100;
|
||
|
||
if (jumpHighFeet <= 0) {
|
||
jumpHighFeet = 1;
|
||
}
|
||
|
||
// calc. running high jump
|
||
runningHighJumpFeet = (6 * runningHighMoveToUse) - 10;
|
||
|
||
if (runningHighJumpFeet <= 0) {
|
||
runningHighJumpFeet = 1;
|
||
}
|
||
|
||
// convert to feet
|
||
runningHighJumpFeet = Math.floor(runningHighJumpFeet / 12);
|
||
|
||
if (runningHighJumpFeet <= 0) {
|
||
|
||
runningHighJumpFeet = 1;
|
||
|
||
} else if (runningHighJumpFeet > jumpHighFeet * 2) {
|
||
|
||
// can't be greater than twice standing broad jump
|
||
runningHighJumpFeet = jumpHighFeet * 2;
|
||
|
||
}
|
||
|
||
} else if (values.use_st_for_jump == "1") {
|
||
|
||
//-------------------------------
|
||
// USE Strength to determine jump
|
||
baseJumpMove = Math.floor(jumpST/4);
|
||
|
||
// calc. standing broad jump
|
||
jumpBroadFeet = baseJumpMove;
|
||
|
||
if (jumpBroadFeet <= 0) {
|
||
jumpBroadFeet = 1;
|
||
}
|
||
|
||
statUsedForJump = "ST / 4 = " + jumpBroadFeet;
|
||
|
||
jumpBroadFeet = (jumpBroadFeet * 2) - 3;
|
||
|
||
if (jumpBroadFeet <= 0) {
|
||
jumpBroadFeet = 1;
|
||
}
|
||
|
||
// calc. running broad jump
|
||
if (enhancedGroundMove > Math.floor(jumpST/4)) {
|
||
|
||
// use enhanced move instead of strength
|
||
statUsedForRunningJump = "Basic Move * (2 ^ Enh MV Mod)";
|
||
|
||
runningMoveToUse = enhancedGroundMove;
|
||
|
||
runningHighMoveToUse = enhancedGroundMove;
|
||
|
||
} else {
|
||
|
||
statUsedForRunningJump = statUsedForJump + " + Yards Run";
|
||
|
||
runningMoveToUse = Math.floor(jumpST/4) + runningJumpYardsMoved;
|
||
|
||
runningHighMoveToUse = Math.floor(jumpST/2) + runningHighJumpYardsMoved;
|
||
}
|
||
|
||
runningBroadJumpFeet = (runningMoveToUse * 2) - 3;
|
||
|
||
if (runningBroadJumpFeet <= 0) {
|
||
|
||
runningBroadJumpFeet = 1;
|
||
|
||
}
|
||
|
||
// calc. standing high jump
|
||
jumpHighFeet = Math.floor(jumpST/4);
|
||
|
||
if (jumpHighFeet <= 0) {
|
||
jumpHighFeet = 1;
|
||
}
|
||
|
||
jumpHighFeet = (6 * jumpHighFeet) - 10;
|
||
|
||
if (jumpHighFeet <= 0) {
|
||
jumpHighFeet = 1;
|
||
}
|
||
|
||
// convert to feet
|
||
// round to 2 decimals
|
||
// https://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-only-if-necessary
|
||
jumpHighFeet = Math.round( (jumpHighFeet / 12) * 100) / 100;
|
||
|
||
if (jumpHighFeet <= 0) {
|
||
jumpHighFeet = 1;
|
||
}
|
||
|
||
// calc. running high jump
|
||
runningHighJumpFeet = (6 * runningHighMoveToUse) - 10;
|
||
|
||
if (runningHighJumpFeet <= 0) {
|
||
runningHighJumpFeet = 1;
|
||
}
|
||
|
||
// convert to feet
|
||
runningHighJumpFeet = Math.floor(runningHighJumpFeet / 12);
|
||
|
||
if (runningHighJumpFeet <= 0) {
|
||
|
||
runningHighJumpFeet = 1;
|
||
|
||
} else if (runningHighJumpFeet > jumpHighFeet * 2) {
|
||
|
||
// can't be greater than twice standing broad jump
|
||
runningHighJumpFeet = jumpHighFeet * 2;
|
||
|
||
}
|
||
|
||
} else {
|
||
|
||
//---------------
|
||
// USE Basic Move
|
||
baseJumpMove = basicMove;
|
||
|
||
statUsedForJump = "Basic Move = " + basicMove;
|
||
|
||
// calc. standing broad jump
|
||
jumpBroadFeet = (basicMove * 2) - 3;
|
||
|
||
if (jumpBroadFeet <= 0) {
|
||
jumpBroadFeet = 1;
|
||
}
|
||
|
||
// calc. running broad jump
|
||
if (enhancedGroundMove > basicMove) {
|
||
|
||
// use enhanced move instead of strength
|
||
statUsedForRunningJump = "Basic Move * (2 ^ Enh MV Mod)";
|
||
|
||
runningMoveToUse = enhancedGroundMove;
|
||
|
||
runningHighMoveToUse = enhancedGroundMove;
|
||
|
||
} else {
|
||
|
||
statUsedForRunningJump = statUsedForJump + " + Yards Run";
|
||
|
||
runningMoveToUse = basicMove + runningJumpYardsMoved;
|
||
|
||
runningHighMoveToUse = basicMove + runningHighJumpYardsMoved;
|
||
|
||
}
|
||
|
||
runningBroadJumpFeet = (runningMoveToUse * 2) - 3;
|
||
|
||
if (runningBroadJumpFeet <= 0) {
|
||
|
||
runningBroadJumpFeet = 1;
|
||
|
||
} else if (runningBroadJumpFeet > jumpBroadFeet * 2) {
|
||
|
||
// can't be greater than twice standing broad jump
|
||
runningBroadJumpFeet = jumpBroadFeet * 2;
|
||
|
||
}
|
||
|
||
// calc. high jump
|
||
jumpHighFeet = (6 * basicMove) - 10;
|
||
|
||
if (jumpHighFeet <= 0) {
|
||
jumpHighFeet = 1;
|
||
}
|
||
|
||
// convert to feet
|
||
// round to 2 decimals
|
||
// https://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-only-if-necessary
|
||
jumpHighFeet = Math.round( (jumpHighFeet / 12) * 100) / 100;
|
||
|
||
if (jumpHighFeet <= 0) {
|
||
jumpHighFeet = 1;
|
||
}
|
||
|
||
// calc. running high jump
|
||
runningHighJumpFeet = (6 * runningHighMoveToUse) - 10;
|
||
|
||
if (runningHighJumpFeet <= 0) {
|
||
runningHighJumpFeet = 1;
|
||
}
|
||
|
||
// convert to feet
|
||
runningHighJumpFeet = Math.floor(runningHighJumpFeet / 12);
|
||
|
||
if (runningHighJumpFeet <= 0) {
|
||
|
||
runningHighJumpFeet = 1;
|
||
|
||
} else if (runningHighJumpFeet > jumpHighFeet * 2) {
|
||
|
||
// can't be greater than twice standing broad jump
|
||
runningHighJumpFeet = jumpHighFeet * 2;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
// If no concentration, divide distance by 2
|
||
if (values.jump_concentration != "1") {
|
||
|
||
jumpBroadFeet = Math.floor(jumpBroadFeet / 2);
|
||
|
||
if (jumpBroadFeet <= 0) {
|
||
jumpBroadFeet = 1;
|
||
}
|
||
|
||
runningBroadJumpFeet = Math.floor(runningBroadJumpFeet / 2);
|
||
|
||
if (runningBroadJumpFeet <= 0 ) {
|
||
runningBroadJumpFeet = 1;
|
||
}
|
||
|
||
// reduce in half
|
||
// round to 2 decimals
|
||
// https://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-only-if-necessary
|
||
jumpHighFeet = Math.round( (jumpHighFeet / 2) * 100) / 100;
|
||
|
||
if (jumpHighFeet <= 0) {
|
||
jumpHighFeet = 1;
|
||
}
|
||
|
||
runningHighJumpFeet = Math.floor(runningHighJumpFeet / 2);
|
||
|
||
if (runningHighJumpFeet <= 0) {
|
||
|
||
runningHighJumpFeet = 1;
|
||
}
|
||
|
||
}
|
||
|
||
// check for super jump
|
||
if (superJumpPoints > 0 || superJumpEnteredLevel > 0) {
|
||
|
||
//-----------------
|
||
// calculate super jump
|
||
// make sure points is multiple of 10
|
||
// https://stackoverflow.com/questions/18953384/javascript-round-up-to-the-next-multiple-of-5
|
||
superJumpPoints = Math.ceil(superJumpPoints / 10) * 10;
|
||
|
||
superJumpLevelFromPoints = superJumpPoints / 10;
|
||
|
||
// -------
|
||
// make sure entered super jump level is an integer, min of 1
|
||
superJumpEnteredLevel = Math.floor(superJumpEnteredLevel);
|
||
|
||
if (superJumpEnteredLevel < 0) {
|
||
superJumpEnteredLevel = 0;
|
||
}
|
||
|
||
totalSuperJumpLevel = superJumpEnteredLevel + superJumpLevelFromPoints;
|
||
|
||
// get the new jump feet values based on super level
|
||
jumpBroadFeet = getEnhancedValue(jumpBroadFeet, totalSuperJumpLevel);
|
||
|
||
runningBroadJumpFeet = getEnhancedValue(runningBroadJumpFeet, totalSuperJumpLevel);
|
||
|
||
jumpHighFeet = getEnhancedValue(jumpHighFeet, totalSuperJumpLevel);
|
||
|
||
runningHighJumpFeet = getEnhancedValue(runningHighJumpFeet, totalSuperJumpLevel);
|
||
|
||
}
|
||
|
||
// get broad jump in yards. Minimum of 1
|
||
jumpBroadYards = Math.floor(jumpBroadFeet / 3);
|
||
|
||
// get running jump in yards. Min of 1
|
||
runningBroadJumpYards = Math.floor(runningBroadJumpFeet / 3)
|
||
|
||
// get high jump in yards
|
||
jumpHighYards = Math.floor(jumpHighFeet / 3);
|
||
|
||
// get running high in yards
|
||
runningHighJumpYards = Math.floor(runningHighJumpFeet / 3);
|
||
|
||
// calculate jump move speed
|
||
jumpMoveSpeed = Math.floor(jumpBroadYards / 5);
|
||
|
||
if (jumpMoveSpeed <= 0) {
|
||
jumpMoveSpeed = 1;
|
||
}
|
||
|
||
// determine which one to use
|
||
if (jumpMoveSpeed > basicMove) {
|
||
|
||
finalJumpMoveSpeed = jumpMoveSpeed;
|
||
|
||
} else {
|
||
|
||
finalJumpMoveSpeed = basicMove;
|
||
|
||
}
|
||
|
||
// set jump distances
|
||
setAttrs({
|
||
"broad_jump_distance_feet": jumpBroadFeet,
|
||
"broad_jump_distance_yards": jumpBroadYards,
|
||
"high_jump_distance_feet": jumpHighFeet,
|
||
"high_jump_distance_yards": jumpHighYards,
|
||
"super_jump_level": totalSuperJumpLevel,
|
||
"super_jump_entered_level": superJumpEnteredLevel,
|
||
"super_jump_points": superJumpPoints,
|
||
"running_jump_distance_feet": runningBroadJumpFeet,
|
||
"running_jump_distance_yards": runningBroadJumpYards,
|
||
"running_high_jump_distance_feet": runningHighJumpFeet,
|
||
"running_high_jump_distance_yards": runningHighJumpYards,
|
||
"broad_jump_base": baseJumpMove,
|
||
"standing_broad_jump_stat_to_use": statUsedForJump,
|
||
"running_broad_jump_stat_to_use": statUsedForRunningJump,
|
||
"high_jump_base": baseJumpMove,
|
||
"standing_high_jump_stat_to_use": statUsedForJump,
|
||
"running_high_jump_stat_to_use": statUsedForRunningJump,
|
||
"jump_move_speed": finalJumpMoveSpeed
|
||
});
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// set number values for damage types
|
||
// Update thrust and swing when striking st is updated
|
||
on('change:repeating_melee:type', function(event){
|
||
|
||
getAttrs(['repeating_melee_type'], function(values) {
|
||
|
||
var typeId = getDamageTypeId(values.repeating_melee_type);
|
||
|
||
setAttrs({
|
||
"repeating_melee_damage_type_id": typeId
|
||
});
|
||
|
||
});
|
||
|
||
});
|
||
|
||
// set number values for damage types
|
||
// Update thrust and swing when striking st is updated
|
||
on('change:repeating_ranged:type', function(event){
|
||
|
||
console.log("----ranged damage type changed: set damage_type_id ----");
|
||
|
||
getAttrs(['repeating_ranged_type'], function(values) {
|
||
|
||
var typeId = getDamageTypeId(values.repeating_ranged_type);
|
||
|
||
setAttrs({
|
||
"repeating_ranged_damage_type_id": typeId
|
||
});
|
||
|
||
});
|
||
|
||
});
|
||
|
||
/**
|
||
* Get Damage Type ID for damage type string
|
||
* Used for adding custom notes to rolltemplates
|
||
*/
|
||
function getDamageTypeId(damageType) {
|
||
|
||
var typeId = 1;
|
||
|
||
switch(damageType) {
|
||
|
||
case "Cutting (cut)":
|
||
typeId = 1;
|
||
break;
|
||
|
||
case "Impaling (imp)":
|
||
typeId = 2;
|
||
break;
|
||
|
||
case "Crushing (cr)":
|
||
typeId = 3;
|
||
break;
|
||
|
||
case "Small Piercing (pi-)":
|
||
typeId = 4;
|
||
break;
|
||
|
||
case "Piercing (pi)":
|
||
typeId = 5;
|
||
break;
|
||
|
||
case "Large Piercing (pi+)":
|
||
typeId = 6;
|
||
break;
|
||
|
||
case "Huge Piercing (pi++)":
|
||
typeId = 7;
|
||
break;
|
||
|
||
case "Affliction (aff)":
|
||
typeId = 8;
|
||
break;
|
||
|
||
case "Burning (burn)":
|
||
typeId = 9;
|
||
break;
|
||
|
||
case "Corrosion (cor)":
|
||
typeId = 10;
|
||
break;
|
||
|
||
case "Fatigue (fat)":
|
||
typeId = 11;
|
||
break;
|
||
|
||
case "Toxic (tox)":
|
||
typeId = 12;
|
||
break;
|
||
|
||
case "Special (spec)":
|
||
typeId = 13;
|
||
break;
|
||
|
||
default:
|
||
typeId = 1;
|
||
|
||
}
|
||
|
||
return typeId;
|
||
|
||
}
|
||
|
||
</script> |