Files
roll20-character-sheets-tester/Stars_Without_Number_Revised/Stars_Without_Number_Revised.html
T
2017-11-19 15:47:23 +01:00

2917 lines
101 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<rolltemplate class="sheet-rolltemplate-initiative">
<table class="sheet-swn-template-container">
<thead>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-name">
{{characterName}}
</th>
</tr>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-type">
Initiative
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="sheet-swn-template-result">
<span class="sheet-black-text">{{rollValue}}</span>
</td>
</tr>
</tbody>
</table>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-basicattack">
<table class="sheet-swn-template-container">
<thead>
<tr class="sheet-swn-template-title">
<th colspan="2" class="sheet-swn-template-name">
{{characterName}}
</th>
</tr>
<tr class="sheet-swn-template-title">
<th colspan="2" class="sheet-swn-template-type">
{{attackType}} Attack
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="sheet-swn-template-result">
<span class="sheet-black-text">{{rollValue}}</span>
</td>
</tr>
</tbody>
</table>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-save">
<table class="sheet-swn-template-container">
<thead>
<tr class="sheet-swn-template-title">
<th colspan="2" class="sheet-swn-template-name">
{{characterName}}
</th>
</tr>
<tr class="sheet-swn-template-title">
<th colspan="2" class="sheet-swn-template-type">
{{type}} Save
</th>
</tr>
</thead>
<tbody>
<tr>
{{#^rollLess() rollValue save}}
<td class="sheet-swn-template-result">
Success!
</td>
{{/^rollLess() rollValue save}} {{#rollLess() rollValue save}}
<td class="sheet-swn-template-result sheet-fail-tabstyle">
Fail!
</td>
{{/rollLess() rollValue save}}
<td class="sheet-swn-template-result">
<span class="sheet-black-text">{{rollValue}}</span> vs
<span class="sheet-black-text">{{save}}</span>
</td>
</tr>
</tbody>
</table>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-attack">
<table class="sheet-swn-template-container">
<thead>
<tr class="sheet-swn-template-title">
<th colspan="2" class="sheet-swn-template-name">
{{characterName}}
</th>
</tr>
<tr class="sheet-swn-template-title">
<th colspan="2" class="sheet-swn-template-type">
{{#name}} {{name}} {{/name}} {{#name}} {{#attackType}}
<br> {{/attackType}} {{/name}} {{#attackType}} {{attackType}} Attack {{/attackType}}
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="sheet-swn-template-result">
<span class="sheet-black-text">{{rollValue}}</span>
</td>
</tr>
{{#damage}}
<tr>
<td class="sheet-swn-template-result" colspan="2">
<span class="sheet-swn sheet-results-element sheet-roll-output">
<span class="black-text">{{damage}}</span> damage!
</span>
</td>
</tr>
{{/damage}}
</tbody>
</table>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-skill">
<table class="sheet-swn-template-container">
<thead>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-name" colspan="2">
{{characterName}}
</th>
</tr>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-type" colspan="2">
{{type}}
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="sheet-swn-template-result">
Check Result
</td>
<td class="sheet-swn-template-result">
<span class="sheet-black-text">{{rollValue}}</span>
</td>
</tr>
</tbody>
</table>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-reaction">
<table class="sheet-swn-template-container">
<thead>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-name" colspan="2">
{{characterName}}
</th>
</tr>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-type" colspan="2">
Reaction
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="sheet-swn-template-result">
Result
</td>
<td class="sheet-swn-template-result">
{{#rollLess() rollValue 3}}
<span class="sheet-black-text">{{rollValue}}</span> Hostile
{{/rollLess() rollValue 3}}
{{#rollBetween() rollValue 3 5}}
<span class="sheet-black-text">{{rollValue}}</span> Negative
{{/rollBetween() rollValue 3 5}}
{{#rollBetween() rollValue 6 8}}
<span class="sheet-black-text">{{rollValue}}</span> Neutral
{{/rollBetween() rollValue 6 8}}
{{#rollBetween() rollValue 9 11}}
<span class="sheet-black-text">{{rollValue}}</span> Positive
{{/rollBetween() rollValue 9 11}}
{{#rollGreater() rollValue 11}}
<span class="sheet-black-text">{{rollValue}}</span> Friendly
{{/rollGreater() rollValue 11}}
</td>
</tr>
</tbody>
</table>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-morale">
<table class="sheet-swn-template-container">
<thead>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-name" colspan="2">
{{characterName}}
</th>
</tr>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-type" colspan="2">
Morale
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="sheet-swn-template-result">
Check Result
</td>
<td class="sheet-swn-template-result">
{{#rollGreater() rollValue morale}}
<span class="sheet-black-text">{{rollValue}}</span> Fail!
{{/rollGreater() rollValue morale}}
{{#rollBetween() rollValue 2 morale}}
<span class="sheet-black-text">{{rollValue}}</span> Success!
{{/rollBetween() rollValue 2 morale}}
</td>
</tr>
</tbody>
</table>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-hitpoints">
<table class="sheet-swn-template-container">
<thead>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-name" colspan="2">
{{characterName}}
</th>
</tr>
<tr class="sheet-swn-template-title">
<th class="sheet-swn-template-type" colspan="2">
Hit Points
</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2" class="sheet-swn-template-result">
<span class="sheet-black-text">{{rollValue}}</span>
</td>
</tr>
</tbody>
</table>
</rolltemplate>
<div class="sheet-logo">
<img src="http://i.imgur.com/3U3Ibb7.png" alt="Stars Without Number">
</div>
<div class="sheet-version">Version 1.5.0</div>
<input type="radio" name="attr_tab" class="sheet-tab sheet-tab-character" value="1" title="Character" checked>
<input type="radio" name="attr_tab" class="sheet-tab sheet-tab-ship" value="2" title="Ship">
<input type="radio" name="attr_tab" class="sheet-tab sheet-tab-npc" value="3" title="NPC">
<div class="sheet-tab-content sheet-tab-npc">
<div class="sheet-wrapper">
<h3>Stats</h3>
<div class="sheet-3colrow sheet-stats">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col sheet-stats-label">
<label for="attr_name">Name</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_name" class="sheet-stats-input">
</div>
</div>
<div class="sheet-2colrow">
<div class="sheet-col sheet-stats-label">
<label for="attr_stat_block">Stat Block</label>
</div>
<div class="sheet-col">
<select name="attr_stat_block" class="sheet-stats-input">
<optgroup label="Human">
<option value="1 10 0 Unarmed 10m 6 1 15">Peaceful Human</option>
<option value="1 10 1 Weapon 10m 8 1 15">Martial Human</option>
<option value="2 14 2 Weapon+1 10m 9 1 14">Veteran Figther</option>
<option value="3 16 4 Weapon+1 10m 10 2 14">Elite Fighter</option>
<option value="6 16 8 Weapon+3 10m 11 3 12">Heroic Fighter</option>
<option disabled>──────────</option>
<option value="6 16 8 Weapon+3 10m 11 3 12">Barbarian Hero</option>
<option value="1 12 2 Weapon 10m 8 1 15">Barbarian Tribal</option>
<option value="3 14 4 Weapon+1 10m 9 2 15">Gang Boss</option>
<option value="1 12 1 Weapon 10m 7 1 15">Gang Member</option>
<option value="4 16 5 Weapon=1 15m 10 2 13">Geneerngineered Killer</option>
<option value="10 20 +12x2 Weapon+4 10m 12 5 10">Legendary Fighter</option>
<option value="3 16 4 Weapon+1 10m 10 2 14">Military Elite</option>
<option value="1 16 1 Weapon 10m 9 1 15">Military Soldier</option>
<option value="1 10 0 Unarmed 10m 6 1 15">Normal Human</option>
<option value="7 18 9 Weapon+2 10m 11 3 12">Pirate King</option>
<option value="1 14 1 Weapon 10m 8 1 15">Police Officer</option>
<option value="6 12 8 Weapon+3 10m 12 3 12">Serial Killer</option>
<option value="1 10 0 Weapon 10m 6 2 15">Skilled Professional</option>
<option value="8 20 10 Weapon+3 10m 11 3 11">Warrior Tyrant</option>
</optgroup>
<optgroup label="Robot">
<option value="1 14 n/a n/a 5m 8 1 15">Janitor Bot</option>
<option value="1 15 1 1d8[Stun] 10m 12 1 15">Civilian Security Bot</option>
<option value="1 14 0 1d6 10m 8 1 15">Rapair Bot</option>
<option value="2 15 0 1d10 5 8 1 14">Industrial Work Bot</option>
<option value="1 12 0 1d2 10m 6 1 15">Companion Bot</option>
<option value="2 16 1 Weapon 10m 10 1 14">Soldier Bot</option>
<option value="6 18 8 2d8x2 15m 10 2 12">Heavy Warbot</option>
</optgroup>
<optgroup label="Beast">
<option value="1Hp 14 1 1d2 10m 7 1 15">Small Vicious Beast</option>
<option value="1 13 1 1d4 15m 8 1 15">Small Pack Hunter</option>
<option value="2 14 2 1d6 15m 9 1 14">Large Pack Hunter</option>
<option value="5 13 4 1d10 15m 8 1 12">Large Agressive Prey Animal</option>
<option value="3 14 4 1d8x2 15m 8 2 14">Lesser Lone Predator</option>
<option value="5 16 6 1d10x2 10m 9 2 12">Greater Lone Predator</option>
<option value="8 16 8 1d10x2 20m 9 2 11">Terrifying Apex Predator</option>
<option value="10 18 10 1d10x4 20m 12 3 10">Geneengineered Murder Beast</option>
</optgroup>
</select>
</div>
</div>
<div class="sheet-2colrow">
<div class="sheet-col sheet-stats-label">
<label for="attr_damage">Damage</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_damage" class="sheet-stats-input">
</div>
</div>
<div class="sheet-2colrow">
<div class="sheet-col sheet-stats-label">
<label for="attr_move">Move</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_move" class="sheet-stats-input">
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_attack_bonus">Attack Bonus</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_attack_bonus" class="sheet-stats-half">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_morale">Morale</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_morale" class="sheet-stats-half">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_saves">Saves</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_saves" class="sheet-stats-half">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_skills">Skills</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_skills" class="sheet-stats-half">
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_ac">AC</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_ac" class="sheet-stats-half">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_hd">Hit Dice</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_hd" class="sheet-stats-half">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_hp_max">Max Hit Points</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_hp_max" class="sheet-stats-half">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_hp">Current Hit Points</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_hp" class="sheet-stats-half">
</div>
</div>
</div>
</div>
<h3>Quick rolls</h3>
<div class="sheet-row">
<div class="sheet-col">
<label for="initiative_roll">Initiative Roll</label>
<button type="roll" name="initiative_roll" value="@{initiative_roll_hidden} &{template:initiative} {{characterName=@{name}}} {{rollValue=[[1d8 &{tracker}]]}}"></button>
Hidden? <input type="checkbox" name="attr_initiative_roll_hidden" value="/w GM">
</div>
<div class="sheet-col">
<label for="reaction_roll">Reaction Roll</label>
<button type="roll" name="reaction_roll" value="@{reaction_roll_hidden} &{template:reaction} {{characterName=@{name}}} {{rollValue=[[2d6]]}}"></button>
Hidden? <input type="checkbox" name="attr_reaction_roll_hidden" value="/w GM" checked>
</div>
<div class="sheet-col">
<label for="attack_roll">Attack</label>
<button type="roll" name="attack_roll" value="@{attack_roll_hidden} &{template:attack} {{characterName=@{name}}} {{name=Attack}} {{rollValue=[[1d20 + @{attack_bonus}[AB] + ?{Burst|No, 0|Yes, 2}[Burst]]]}} {{damage=[[@{damage} + ?{Burst|No, 0|Yes, 2}[Burst]]]}}"></button>
Hidden? <input type="checkbox" name="attr_attack_roll_hidden" value="/w GM">
</div>
<div class="sheet-col">
<label for="morale_roll">Morale</label>
<button type="roll" name="morale_roll" value="@{morale_roll_hidden} &{template:morale} {{characterName=@{name}}} {{morale=[[@{morale}]]}} {{rollValue=[[2d6]]}}"></button>
Hidden? <input type="checkbox" name="attr_morale_roll_hidden" value="/w GM" checked>
</div>
<div class="sheet-col">
<label for="hp_roll">Roll hp</label>
<button type="roll" name="hp_roll" value="@{hp_roll_hidden} &{template:hitpoints} {{characterName=@{name}}} {{rollValue=[[@{hd}d8]]}}"></button>
Hidden? <input type="checkbox" name="attr_hp_roll_hidden" value="/w GM" checked>
</div>
<div class="sheet-col">
<label for="skill_roll">Roll skill</label>
<button type="roll" name="skill_roll" value="@{skill_roll_hidden} &{template:skill} {{characterName=@{name}}} {{type=Skill}} {{rollValue=[[2d6 + ?{Proficient|Yes, @{skills}| No, 0}[Skill]]]}}"></button>
Hidden? <input type="checkbox" name="attr_skill_roll_hidden" value="/w GM" checked>
</div>
<div class="sheet-col">
<label for="save_roll">Roll save</label>
<button type="roll" name="save_roll" value="@{save_roll_hidden} &{template:save} {{characterName=@{name}}} {{save=[[@{saves}]]}} {{rollValue=[[1d20]]}}"></button>
Hidden? <input type="checkbox" name="attr_save_roll_hidden" value="/w GM" checked>
</div>
</div>
<h3>Desription and notes</h3>
<div class="sheet-row">
<textarea name="attr_notes" class="sheet-textarea-wide"></textarea>
</div>
</div>
</div>
<div class="sheet-tab-content sheet-tab-ship">
<div class="sheet-wrapper">
<h3>Core Stats</h3>
<div class="sheet-2colrow sheet-stats">
<div class="sheet-col">
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_name">Name</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_name">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_hulltype">Hull Type</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_hulltype">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_speed">Speed</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_speed">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_ac">Armor Class</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_ac">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_armor">Armor</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_armor">
</div>
</div>
<div class="sheet-row sheet-stats-ship-min-max">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_crew_min">Crew Min/Max</label>
</div>
<div class="sheet-col sheet-stats-ship-value">
<input type="text" name="attr_ship_crew_min">
</div>
<div class="sheet-col sheet-stats-label sheet-stats-label-separator">
<label for="attr_ship_crew_max">/</label>
</div>
<div class="sheet-col sheet-stats-ship-value">
<input type="text" name="attr_ship_crew_max">
</div>
</div>
<div class="sheet-row sheet-stats-ship-min-max">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_hp_min">Hit Points</label>
</div>
<div class="sheet-col sheet-stats-ship-value">
<input type="text" name="attr_ship_hp_min">
</div>
<div class="sheet-col sheet-stats-label sheet-stats-label-separator">
<label for="attr_ship_hp_max">/</label>
</div>
<div class="sheet-col sheet-stats-ship-value">
<input type="text" name="attr_ship_hp_max">
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-row">
<textarea name="attr_ship_notes"></textarea>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-stats">
<div class="sheet-col">
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_free_power">Free Power</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_free_power">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_free_mass">Free Mass</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_free_mass">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_free_hardpoints">Free Hardpoints</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_free_hardpoints">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_cargo_tonnage">Cargo Tonnage</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_cargo_tonnage">
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_current_crew">Current Crew</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_current_crew">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_operating_cost">Operating Cost</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_operating_cost">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_maintenance_cost">Maintenance Cost</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_maintenance_cost">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_last_maintenance_cost">Last Maintenance Date</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_last_maintenance_cost">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_ship_home_port">Home Port</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_ship_home_port">
</div>
</div>
</div>
</div>
<h3>Weapons</h3>
<div class="sheet-col sheet-ship-repeating-headers">
<div class="sheet-ship-weapons sheet-7colrow">
<div class="sheet-col sheet-ship-weapon">
<label for="attr_ship_weapon_name">Name</label>
</div>
<div class="sheet-col sheet-ship-weapon">
<label>Power</label>
</div>
<div class="sheet-col sheet-ship-weapon">
<label>Attack Bonus</label>
</div>
<div class="sheet-col sheet-ship-weapon">
<label>Damage</label>
</div>
<div class="sheet-col sheet-ship-weapon">
<label>Ammo</label>
</div>
<div class="sheet-col sheet-ship-weapon">
<label>Special Effects</label>
</div>
<div class="sheet-col sheet-ship-weapon">
<label class="sheet-ship-item-halfsize">Broken?</label>
</div>
</div>
<fieldset class="repeating_weapons repeating repeating-ship-weapons">
<div class="sheet-ship-weapons sheet-7colrow">
<div class="sheet-col sheet-ship-weapon">
<input type="text" name="attr_ship_weapon_name">
</div>
<div class="sheet-col sheet-ship-weapon">
<input type="number" name="attr_ship_weapon_power">
</div>
<div class="sheet-col sheet-ship-weapon">
<input class="sheet-ship-item-halfsize" type="number" name="attr_ship_weapon_ab">
</div>
<div class="sheet-col sheet-ship-weapon">
<input type="text" name="attr_ship_weapon_damage">
</div>
<div class="sheet-col sheet-ship-weapon">
<input class="sheet-ship-item-halfsize" type="number" min="0" name="attr_ship_weapon_ammo">
</div>
<div class="sheet-col sheet-ship-weapon">
<input type="text" min="0" name="attr_ship_weapon_special_effects">
</div>
<div class="sheet-col sheet-ship-weapon">
<input class="sheet-ship-item-halfsize" type="checkbox" min="0" name="attr_ship_weapon_broken">
</div>
</div>
</fieldset>
</div>
<h3>Defenses</h3>
<div class="sheet-col sheet-ship-repeating-headers">
<div class="sheet-ship-weapons sheet-3colrow">
<div class="sheet-col sheet-ship-defense">
<label>Name</label>
</div>
<div class="sheet-col sheet-ship-defense">
<label>Special Effects</label>
</div>
<div class="sheet-col sheet-ship-defense">
<label class="sheet-ship-item-halfsize">Broken?</label>
</div>
</div>
<fieldset class="repeating_defenses repeating repeating-ship-defenses">
<div class="sheet-ship-weapons sheet-3colrow">
<div class="sheet-col sheet-ship-defense">
<input type="text" name="attr_ship_defense_name">
</div>
<div class="sheet-col sheet-ship-defense">
<input type="text" name="attr_ship_defense_special_effects">
</div>
<div class="sheet-col sheet-ship-defense">
<input class="sheet-ship-item-halfsize" type="checkbox" name="attr_ship_defense_broken">
</div>
</div>
</fieldset>
</div>
<h3>Fittings</h3>
<div class="sheet-col sheet-ship-repeating-headers">
<div class="sheet-ship-weapons sheet-3colrow">
<div class="sheet-col sheet-ship-fitting">
<label>Name</label>
</div>
<div class="sheet-col sheet-ship-fitting">
<label>Special Effects</label>
</div>
<div class="sheet-col sheet-ship-fitting">
<label class="sheet-ship-item-halfsize">Broken?</label>
</div>
</div>
<fieldset class="repeating_fittings repeating repeating-ship-fittings">
<div class="sheet-ship-weapons sheet-3colrow">
<div class="sheet-col sheet-ship-fitting">
<input type="text" name="attr_ship_fitting_name">
</div>
<div class="sheet-col sheet-ship-fitting">
<input type="text" name="attr_ship_fitting_special_effects">
</div>
<div class="sheet-col sheet-ship-fitting">
<input class="sheet-ship-item-halfsize" type="checkbox" name="attr_ship_fitting_broken">
</div>
</div>
</fieldset>
</div>
<h3>Other Notes</h3>
<div class="sheet-col sheet-ship-other-notes">
<textarea name="attr_ship_other_notes"></textarea>
</div>
</div>
</div>
<div class="sheet-tab-content sheet-tab-character">
<div class="sheet-wrapper">
Click on a header to toggle that section!
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle" name="attr_stats_show">
<label class="sheet-section-toggle-header-label">
<h3>Core Stats</h3>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle-header" name="attr_stats_show_label">
</label>
<div class="sheet-3colrow sheet-stats sheet-section-hide">
<div class="sheet-col">
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_name">Name</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_name" class="sheet-stats-input">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_gender">Gender</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_gender" class="sheet-stats-input">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_class">Class</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_class" class="sheet-stats-input">
<input type="checkbox" class="sheet-toggle" title="show/hide" name="attr_class_ability_show" value="1">
<textarea name="attr_class_ability" style="width: 200%;" class="sheet-hide" placeholder="Class ability"></textarea>
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_level">Level</label>
</div>
<div class="sheet-col">
<input value="1" type="number" min="1" name="attr_level" class="sheet-stats-input">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_xp">XP</label>
</div>
<div class="sheet-col">
<input type="number" min="0" name="attr_xp" class="sheet-stats-input">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_xp_max">Next Level XP</label>
</div>
<div class="sheet-col">
<input type="number" min="0" name="attr_xp_max" class="sheet-stats-input">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_homeworld">Homeworld</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_homeworld" class="sheet-stats-input">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_background">Background</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_background" class="sheet-stats-input">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-stats-label">
<label for="attr_faction">Faction</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_faction" class="sheet-stats-input">
</div>
</div>
</div>
<div class="sheet-col sheet-attribute-table">
<div class="sheet-row">
<table>
<thead>
<tr>
<th>&nbsp;</th>
<th>
<label>Base</label>
</th>
<th>
<label>Bonus</label>
</th>
<th>
<label>Modifier</label>
</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="glyphicon glyphicon-question-sign"></span>
<label for="attr_str" title="Physical prowess, melee combat, carrying gear, brute forces">Strength</label>
</td>
<td>
<input type="number" name="attr_str" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_str_misc" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_str_bonus" readonly class="sheet-stats-half">
</td>
</tr>
<tr>
<td>
<label for="attr_dex">Dexterity</label>
</td>
<td>
<input type="number" name="attr_dex" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_dex_misc" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_dex_bonus" readonly class="sheet-stats-half">
</td>
</tr>
<tr>
<td>
<label for="attr_con">Constitution</label>
</td>
<td>
<input type="number" name="attr_con" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_con_misc" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_con_bonus" readonly class="sheet-stats-half">
</td>
</tr>
<tr>
<td>
<label for="attr_int">Intelligence</label>
</td>
<td>
<input type="number" name="attr_int" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_int_misc" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_int_bonus" readonly class="sheet-stats-half">
</td>
</tr>
<tr>
<td>
<label for="attr_wis">Wisdom</label>
</td>
<td>
<input type="number" name="attr_wis" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_wis_misc" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_wis_bonus" readonly class="sheet-stats-half">
</td>
</tr>
<tr>
<td>
<label for="attr_cha">Charisma</label>
</td>
<td>
<input type="number" name="attr_cha" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_cha_misc" class="sheet-stats-half">
</td>
<td>
<input type="number" name="attr_cha_bonus" readonly class="sheet-stats-half">
</td>
</tr>
</tbody>
</table>
</div>
<div class="sheet-row">&nbsp;</div>
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_attack_bonus">Base Attack Bonus</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_attack_bonus" class="sheet-stats-half" value="0">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_innate_ac">Innate AC</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_innate_ac" class="sheet-stats-half">
</div>
</div>
<div class="sheet-row">
<div class="sheet-col sheet-attribute-ext-label">
<label for="attr_AC">AC</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_AC" class="sheet-stats-half" readonly>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-row">
<label class="sheet-subhead">Hit Points</label>
</div>
<div class="sheet-row">
<table>
<tr>
<td>
<label for="attr_hp">Current</label>
</td>
<td>
<input type="number" name="attr_hp" class="sheet-stats-half">
</td>
</tr>
<tr>
<td>
<label for="attr_strain_max">Max</label>
</td>
<td>
<input type="number" name="attr_hp_max" class="sheet-stats-half">
</td>
</tr>
</table>
</div>
<div class="sheet-row">&nbsp;</div>
<div class="sheet-row">
<label class="sheet-subhead">System Strain</label>
</div>
<div class="sheet-row">
<table>
<tbody>
<tr>
<td>
<label for="attr_strain">Base</label>
</td>
<td>
<input type="number" name="attr_strain" class="sheet-stats-half">
</td>
</tr>
<tr>
<td>
<label for="attr_strain_max">Max</label>
</td>
<td>
<input type="number" name="attr_strain_max" readonly class="sheet-stats-half">
</td>
</tr>
<tr>
<td>
<label for="attr_strain_perm">Perm</label>
</td>
<td>
<input type="number" name="attr_strain_perm" class="sheet-stats-half">
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle" name="attr_combat_show">
<label class="sheet-section-toggle-header-label">
<h3>Combat</h3>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle-header" name="attr_combat_show_label">
</label>
<div class="sheet-section-hide">
<div class="sheet-row">
<div class="sheet-col">
<label for="roll_initiative">Roll Initiative (Select your token first)</label>
<button type="roll" name="roll_initiative" value="&{template:initiative} {{characterName=@{name}}} {{rollValue=[[1d8+@{dex_bonus} &{tracker}]]}}"></button>
</div>
</div>
<div class="sheet-row sheet-gear">
<div class="sheet-col">
<label class="sheet-subhead">Weapons</label>
</div>
</div>
<div class="sheet-weapons-wrapper">
<label style="width: 105px">Weapon</label>
<label class="sheet-weapons-short" style="width: 65px">Weapon AB</label>
<label class="sheet-weapons-short" style="width: 95px">Skill</label>
<label class="sheet-weapons-short" style="width: 60px">Attribute</label>
<label class="sheet-weapons-short" style="width: 50px">Damage</label>
<label class="sheet-weapons-short" style="width: 75px">Burst?</label>
<label class="sheet-weapons-short" style="width: 100px">Add Skill to damage?</label>
<label style="width: 70px">Range</label>
<label class="sheet-weapons-short" style="width: 55px">Ammo</label>
<label class="sheet-weapons-short" style="width: 55px">Magazines</label>
<br>
<fieldset class="repeating_weapons">
<input type="text" name="attr_weapon_name" style="width: 105px">
<input type="number" name="attr_weapon_attack" value="0" style="width: 65px">
<select class="inputbox" name="attr_weapon_skill_bonus" style="width: 95px; height: 25px">
<option value="@{skill_shoot}">Shoot</option>
<option value="@{skill_punch}">Punch</option>
<option value="@{skill_stab}">Stab</option>
<option value="@{skill_telekinesis}">Telekinesis</option>
</select>
<select class="inputbox" name="attr_attribute_mod" style="width: 60px; height: 25px">
<option value="@{str_bonus}">STR</option>
<option value="@{dex_bonus}">DEX</option>
<option value="@{con_bonus}">CON</option>
<option value="@{int_bonus}">INT</option>
<option value="@{wis_bonus}">WIS</option>
<option value="@{cha_bonus}">CHA</option>
</select>
<input type="text" name="attr_weapon_damage" style="width: 50px">
<select class="inputbox" name="attr_weapon_burst" style="width: 75px; height: 25px">
<option value="0">No</option>
<option value="?{Burst|Yes, 2|No, 0}">Ask</option>
<option value="2">Always</option>
</select>
<input type="checkbox" name="attr_add_skill" value="@{weapon_skill_bonus}" style="width: 100px;">
<input type="text" name="attr_weapon_range" style="width: 70px">
<input type="number" name="attr_weapon_ammo" style="width: 55px">
<input type="number" name="attr_weapon_magazines" style="width: 55px">
<button type="roll" name="roll_weapon_to_hit" value="/me &{template:attack} {{characterName=@{name}}} {{name=@{weapon_name}}} {{rollValue=[[1d20 + @{attack_bonus}[AB] + @{weapon_attack}[Weapon AB] + [[{{@{weapon_skill_bonus},-1}>0}*(@{weapon_skill_bonus}+2) - 2]][Skill] + @{attribute_mod}[Attribute] + @{weapon_burst}[Burst] + ?{Other Modifier|0}[Modifier]]]}} {{damage=[[@{weapon_damage} + @{attribute_mod}[Attribute] + @{add_skill}[Skill] + @{weapon_burst}[Burst]]]}}"></button>
</fieldset>
</div>
</div>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle" name="attr_saves_show">
<label class="sheet-section-toggle-header-label">
<h3>Saving Throws</h3>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle-header" name="attr_saves_show_label">
</label>
<div class="sheet-section-hide">
<div class="sheet-3colrow sheet-saves">
<div class="sheet-col">
<label for="attr_save_physical">Physical Save</label>
</div>
<div class="sheet-col">
<label for="attr_save_mental">Mental Save</label>
</div>
<div class="sheet-col">
<label for="attr_save_evasion">Evasion Save</label>
</div>
</div>
<div class="sheet-3colrow sheet-saves">
<div class="sheet-col">
<input readonly type="number" min="0" name="attr_save_physical" class="sheet-stats-save">
<button name="roll_save_physical" type="roll" value="/me &{template:save} {{rollValue=[[1d20]]}} {{save=[[@{save_physical}]]}} {{characterName=@{name}}} {{type=Physical}}"></button>
</div>
<div class="sheet-col">
<input readonly type="number" min="0" name="attr_save_mental" class="sheet-stats-save">
<button name="roll_save_mental" type="roll" value="/me &{template:save} {{rollValue=[[1d20]]}} {{save=[[@{save_mental}]]}} {{characterName=@{name}}} {{type=Mental}}"></button>
</div>
<div class="sheet-col">
<input readonly type="number" min="0" name="attr_save_evasion" class="sheet-stats-save">
<button name="roll_save_evasion" type="roll" value="/me &{template:save} {{rollValue=[[1d20]]}} {{save=[[@{save_evasion}]]}} {{characterName=@{name}}} {{type=Evasion}}"></button>
</div>
</div>
</div>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle" name="attr_skills_show">
<label class="sheet-section-toggle-header-label">
<h3>Skills</h3>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle-header" name="attr_skills_show_label">
</label>
<div class="sheet-section-hide">
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label class="sheet-skill-label">Skill:</label>
</div>
<div class="sheet-col">
<label class="sheet-skill-label">Level:</label>
</div>
</div>
</div>
<div class="sheet-col">
<label class="sheet-skill-label">2d6</label>
<label class="sheet-skill-label">3d6</label>
<label class="sheet-skill-label">4d6</label>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label class="sheet-skill-label">Skill:</label>
</div>
<div class="sheet-col">
<label class="sheet-skill-label">Level:</label>
</div>
</div>
</div>
<div class="sheet-col">
<label class="sheet-skill-label">2d6</label>
<label class="sheet-skill-label">3d6</label>
<label class="sheet-skill-label">4d6</label>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_administer">Administer</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_administer">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_administer_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_administer_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_administer_specialist" value="4d6d2">
<button name="roll_skill_administer" type="roll" value="/me &{template:skill} {{type=Administer}} {{characterName=@{name}}} {{rollValue=[[@{skill_administer_specialist} + @{skill_administer}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Attribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_program">Program</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_program">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_program_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_program_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_program_specialist" value="4d6d2">
<button name="roll_skill_program" type="roll" value="/me &{template:skill} {{type=Program}} {{characterName=@{name}}} {{rollValue=[[@{skill_program_specialist} + @{skill_program}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_connect">Connect</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_connect">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_connect_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_connect_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_connect_specialist" value="4d6d2">
<button name="roll_skill_connect" type="roll" value="/me &{template:skill} {{type=Connect}} {{characterName=@{name}}} {{rollValue=[[@{skill_connect_specialist} + @{skill_connect}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_punch">Punch</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_punch">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_punch_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_punch_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_punch_specialist" value="4d6d2">
<button name="roll_skill_punch" type="roll" value="/me &{template:skill} {{type=Punch}} {{characterName=@{name}}} {{rollValue=[[@{skill_punch_specialist} + @{skill_punch}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_exert">Exert</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_exert">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_exert_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_exert_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_exert_specialist" value="4d6d2">
<button name="roll_skill_exert" type="roll" value="/me &{template:skill} {{type=Exert}} {{characterName=@{name}}} {{rollValue=[[@{skill_exert_specialist} + @{skill_exert}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_shoot">Shoot</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_shoot">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_shoot_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_shoot_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_shoot_specialist" value="4d6d2">
<button name="roll_skill_Shoot" type="roll" value="/me &{template:skill} {{type=Shoot}} {{characterName=@{name}}} {{rollValue=[[@{skill_Shoot_specialist} + @{skill_Shoot}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_fix">Fix</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_fix">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_fix_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_fix_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_fix_specialist" value="4d6d2">
<button name="roll_skill_fix" type="roll" value="/me &{template:skill} {{type=Fix}} {{characterName=@{name}}} {{rollValue=[[@{skill_fix_specialist} + @{skill_fix}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_sneak">Sneak</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_sneak">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_sneak_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_sneak_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_sneak_specialist" value="4d6d2">
<button name="roll_skill_sneak" type="roll" value="/me &{template:skill} {{type=Sneak}} {{characterName=@{name}}} {{rollValue=[[@{skill_sneak_specialist} + @{skill_sneak}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_heal">Heal</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_heal">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_heal_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_heal_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_heal_specialist" value="4d6d2">
<button name="roll_skill_heal" type="roll" value="/me &{template:skill} {{type=Heal}} {{characterName=@{name}}} {{rollValue=[[@{skill_heal_specialist} + @{skill_heal}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_stab">Stab</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_stab">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_stab_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_stab_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_stab_specialist" value="4d6d2">
<button name="roll_skill_stab" type="roll" value="/me &{template:skill} {{type=Stab}} {{characterName=@{name}}} {{rollValue=[[@{skill_stab_specialist} + @{skill_stab}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_know">Know</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_know">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_know_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_know_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_know_specialist" value="4d6d2">
<button name="roll_skill_know" type="roll" value="/me &{template:skill} {{type=Know}} {{characterName=@{name}}} {{rollValue=[[@{skill_know_specialist} + @{skill_know}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_survive">Survive</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_survive">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_survive_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_survive_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_survive_specialist" value="4d6d2">
<button name="roll_skill_survive" type="roll" value="/me &{template:skill} {{type=Survive}} {{characterName=@{name}}} {{rollValue=[[@{skill_survive_specialist} + @{skill_survive}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_lead">Lead</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_lead">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_lead_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_lead_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_lead_specialist" value="4d6d2">
<button name="roll_skill_lead" type="roll" value="/me &{template:skill} {{type=Lead}} {{characterName=@{name}}} {{rollValue=[[@{skill_lead_specialist} + @{skill_lead}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_talk">Talk</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_talk">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_talk_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_talk_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_talk_specialist" value="4d6d2">
<button name="roll_skill_talk" type="roll" value="/me &{template:skill} {{type=Talk}} {{characterName=@{name}}} {{rollValue=[[@{skill_talk_specialist} + @{skill_talk}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_notice">Notice</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_notice">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_notice_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_notice_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_notice_specialist" value="4d6d2">
<button name="roll_skill_notice" type="roll" value="/me &{template:skill} {{type=Notice}} {{characterName=@{name}}} {{rollValue=[[@{skill_notice_specialist} + @{skill_notice}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_trade">Trade</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_trade">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_trade_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_trade_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_trade_specialist" value="4d6d2">
<button name="roll_skill_trade" type="roll" value="/me &{template:skill} {{type=Trade}} {{characterName=@{name}}} {{rollValue=[[@{skill_trade_specialist} + @{skill_trade}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_perform">Perform</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_perform">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_perform_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_perform_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_perform_specialist" value="4d6d2">
<button name="roll_skill_perform" type="roll" value="/me &{template:skill} {{type=Perform}} {{characterName=@{name}}} {{rollValue=[[@{skill_perform_specialist} + @{skill_perform}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_work">Work</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_work">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_work_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_work_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_work_specialist" value="4d6d2">
<button name="roll_skill_work" type="roll" value="/me &{template:skill} {{type=Work}} {{characterName=@{name}}} {{rollValue=[[@{skill_work_specialist} + @{skill_work}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_pilot">Pilot</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" value="-1" name="attr_skill_pilot">
</div>
</div>
</div>
<div class="sheet-col">
<input style="width: 30px" type="radio" name="attr_skill_pilot_specialist" value="2d6" checked>
<input style="width: 30px" type="radio" name="attr_skill_pilot_specialist" value="3d6d1">
<input style="width: 30px" type="radio" name="attr_skill_pilot_specialist" value="4d6d2">
<button name="roll_skill_pilot" type="roll" value="/me &{template:skill} {{type=Pilot}} {{characterName=@{name}}} {{rollValue=[[@{skill_pilot_specialist} + @{skill_pilot}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Atttribute] + ?{Assisted?|0}[Assist]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_points" class="sheet-skill-points-unspent">Unspent Skill Points</label>
</div>
<div class="sheet-col">
<input type="number" min="-1" name="attr_skill_points">
</div>
</div>
</div>
</div>
<div class="sheet-row">
Cost to raise by 1: New Level + 1. Min level 1 for skill lvl 0 and 1, 3 for skill 2, 6 for skill 3, and 9 for skill 4.
</div>
</div>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle" name="attr_psionics_show">
<label class="sheet-section-toggle-header-label">
<h3>Psychic Skills and Techniques</h3>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle-header" name="attr_psionics_show_label">
</label>
<div class="sheet-section-hide">
<div class="sheet-2colrow sheet-skills sheet-hide">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_biopsion">Biopsion</label>
</div>
<div class="sheet-col">
<input type="number" value="-1" min="-1" name="attr_skill_biopsion">
<button name="roll_skill_biopsion" type="roll" value="/me &{template:skill} {{type=Biopsion}} {{characterName=@{name}}} {{rollValue=[[ 2d6+@{skill_biopsion}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Attribute] + ?{Assisted?|0}[Assisted]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_metapsion">Metapsion</label>
</div>
<div class="sheet-col">
<input type="number" value="-1" min="-1" name="attr_skill_metapsion">
<button name="roll_skill_metapsion" type="roll" value="/me &{template:skill} {{type=Metapsion}} {{characterName=@{name}}} {{rollValue=[[ 2d6+@{skill_metapsion}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Attribute] + ?{Assisted?|0}[Assisted]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills sheet-hide">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_precognition">Precognition</label>
</div>
<div class="sheet-col">
<input type="number" value="-1" min="-1" name="attr_skill_precognition">
<button name="roll_skill_precognition" type="roll" value="/me &{template:skill} {{type=Precognition}} {{characterName=@{name}}} {{rollValue=[[ 2d6+@{skill_precognition}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Attribute] + ?{Assisted?|0}[Assisted]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_telekinesis">Telekinesis</label>
</div>
<div class="sheet-col">
<input type="number" value="-1" min="-1" name="attr_skill_telekinesis">
<button name="roll_skill_telekinesis" type="roll" value="/me &{template:skill} {{type=Telekinesis}} {{characterName=@{name}}} {{rollValue=[[ 2d6+@{skill_telekinesis}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Attribute] + ?{Assisted?|0}[Assisted]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-skills sheet-hide">
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_telepathy">Telepathy</label>
</div>
<div class="sheet-col">
<input type="number" value="-1" min="-1" name="attr_skill_telepathy">
<button name="roll_skill_telepathy" type="roll" value="/me &{template:skill} {{type=Telepathy}} {{characterName=@{name}}} {{rollValue=[[ 2d6+@{skill_telepathy}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Attribute] + ?{Assisted?|0}[Assisted]]]}}"></button>
</div>
</div>
</div>
<div class="sheet-col">
<div class="sheet-2colrow">
<div class="sheet-col">
<label for="attr_skill_teleportation">Teleportation</label>
</div>
<div class="sheet-col">
<input type="number" value="-1" min="-1" name="attr_skill_teleportation">
<button name="roll_skill_teleportation" type="roll" value="/me &{template:skill} {{type=Teleportation}} {{characterName=@{name}}} {{rollValue=[[ 2d6+@{skill_teleportation}[Skill] + ?{Attribute|Str,@{str_bonus}|Int,@{int_bonus}|Dex,@{dex_bonus}|Wis,@{wis_bonus}|Con,@{con_bonus}|Cha,@{cha_bonus}|None,0}[Attribute] + ?{Assisted?|0}[Assisted]]]}}"></button>
</div>
</div>
</div>
</div>
<div class="sheet-2colrow sheet-hide">
<div class="sheet-col">
<div class="sheet-row sheet-psionics-power">
<label>Psionic Techniques</label>
</div>
<div class="sheet-row">
<fieldset class="repeating_technique">
<input type="text" name="attr_technique">
<input type="checkbox" class="sheet-toggle" title="show/hide" name="attr_technique_show" value="1">
<button name="macro_technique" type="roll" value="/me @{technique_description}"></button>
<textarea name="attr_technique_description" class="sheet-hide" placeholder="Technique Description"></textarea>
</fieldset>
</div>
</div>
<div class="sheet-col">
<div class="sheet-6colrow sheet-psionics-pp">
<div class="sheet-col">
<label>Committed Effort Scene</label>
</div>
<div class="sheet-col">
<input value="0" type="number" min="0" name="attr_psionics_committed_effort_scene">
</div>
<div class="sheet-col">
<label>Committed Effort Day</label>
</div>
<div class="sheet-col">
<input value="0" type="number" min="0" name="attr_psionics_committed_effort_day">
</div>
<div class="sheet-col">
<label>Extra Effort</label>
</div>
<div class="sheet-col">
<input value="0" type="number" min="0" name="attr_psionics_extra_effort">
</div>
<div class="sheet-col">
<label>Total Effort</label>
</div>
<div class="sheet-col">
<input readonly type="number" min="0" name="attr_psionics_total_effort">
</div>
</div>
</div>
</div>
</div>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle" name="attr_foci_show">
<label class="sheet-section-toggle-header-label">
<h3>Foci</h3>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle-header" name="attr_foci_show_label">
</label>
<div class="sheet-row sheet-section-hide">
<fieldset class="repeating_foci">
<div class="sheet-row sheet-gear">
<div class="sheet-col" style="width: 65%">
<input style="width: 100%" type="text" name="attr_focus_name" placeholder="Focus">
</div>
<div class="sheet-col" style="width: 60px">
<input type="number" min="0" name="attr_focus_level" style="width: 100%" placeholder="Level">
</div>
<input type="checkbox" class="sheet-toggle" title="show/hide" name="attr_focus_show" value="1">
<button name="macro_focus" type="roll" value="/me @{focus_description}"></button>
<textarea name="attr_focus_description" class="sheet-hide" placeholder="Focus Description"></textarea>
</div>
</fieldset>
</div>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle" name="attr_gear_show">
<label class="sheet-section-toggle-header-label">
<h3>Gear</h3>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle-header" name="attr_gear_show_label">
</label>
<div class="sheet-section-hide">
<div class="sheet-row">
<div class="sheet-col">
<div class="sheet-row sheet-gear-credits">
<div class="sheet-col">
<label for="attr_credits">Credits</label>
</div>
<div class="sheet-col">
<input type="number" min="0" name="attr_credits" class="sheet-gear-credits">
</div>
<div class="sheet-col">
<label for="attr_credits_owed">Credits Owed</label>
</div>
<div class="sheet-col">
<input type="number" min="0" name="attr_credits_owed" class="sheet-gear-credits">
</div>
</div>
<div class="sheet-row sheet-gear">
<div class="sheet-col">
<label for="attr_gear_readied_current">Current Readied</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_gear_readied_current" value="0" readonly>
</div>
<div class="sheet-col">
<label for="attr_gear_readied_max">Max Readied</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_gear_readied_max">
</div>
<div class="sheet-col">
<label for="attr_gear_stowed_current">Current Stowed</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_gear_stowed_current" value="0" readonly>
</div>
<div class="sheet-col">
<label for="attr_gear_stowed_max">Max Stowed</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_gear_stowed_max">
</div>
</div>
<div class="sheet-row sheet-gear">
<div class="sheet-col">
<label class="sheet-subhead">Armour</label>
</div>
</div>
<div class="sheet-6colrow sheet-gear">
<div class="sheet-col">
<label for="attr_armor_name">Name</label>
</div>
<div class="sheet-col">
<input type="text" name="attr_armor_name" value="">
</div>
<div class="sheet-col">
<label for="attr_armor_ac">AC</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_armor_ac" value="0">
</div>
<div class="sheet-col">
<label for="attr_armor_enc">Encumberence</label>
</div>
<div class="sheet-col">
<input type="number" name="attr_armor_enc" value="0">
</div>
</div>
<div class="sheet-row sheet-gear">
<div class="sheet-col">
<label class="sheet-subhead">Equipment</label>
</div>
</div>
<div class="sheet-row sheet-gear" style="border-bottom: 1px solid black;">
<div class="sheet-col" style="width: 210px;">
<label for="attr_gear_readied_current">Item(s)</label>
</div>
<div class="sheet-col" style="width: 150px">
<label for="attr_gear_readied_max">Encumbrance</label>
</div>
<div class="sheet-col">
<label for="attr_gear_stowed_current">Status</label>
</div>
</div>
<fieldset class="repeating_gear">
<div class="sheet-row sheet-gear">
<div class="sheet-col" style="width: 210px">
<input type="text" name="attr_gear_name" placeholder="Item">
</div>
<div class="sheet-col" style="width: 150px">
<input type="number" min="0" name="attr_gear_encumbrance">
</div>
<div class="sheet-col">
Readied
<input type="radio" name="attr_gear_readied" value="1"> Stowed
<input type="radio" name="attr_gear_readied" value="2"> Other
<input type="radio" name="attr_gear_readied" value="0" checked>
</div>
</div>
</fieldset>
<div class="sheet-row sheet-gear">
<div class="sheet-col">
<label class="sheet-subhead">Cyberware</label>
</div>
</div>
<fieldset class="repeating_cyberware">
<div class="sheet-row sheet-gear-cyberware">
<div class="sheet-col">
<input type="text" name="attr_cyberware">
<input type="checkbox" class="sheet-toggle" title="show/hide" name="attr_cyberware_show" value="1" style="width: 15px;">
<button name="macro_cyberware" type="roll" value="/me @{cyberware_description}"></button>
<textarea name="attr_cyberware_description" class="sheet-hide" placeholder="Cyberware Description"></textarea>
</div>
</div>
</fieldset>
<div class="sheet-row sheet-gear">
<div class="sheet-col">
<label class="sheet-subhead">Other Equipment</label>
</div>
</div>
<div class="sheet-row sheet-gear-other">
<textarea name="attr_gear_other"></textarea>
</div>
</div>
</div>
<div class="sheet-row sheet-gear">
<div class="sheet-col">
<label class="sheet-subhead">Weapons</label>
</div>
</div>
<div class="sheet-weapons-wrapper">
<label style="width: 105px">Weapon</label>
<label class="sheet-weapons-short" style="width: 65px">Weapon AB</label>
<label class="sheet-weapons-short" style="width: 95px">Skill</label>
<label class="sheet-weapons-short" style="width: 60px">Attribute</label>
<label class="sheet-weapons-short" style="width: 50px">Damage</label>
<label class="sheet-weapons-short" style="width: 75px">Burst?</label>
<label class="sheet-weapons-short" style="width: 100px">Add Skill to damage?</label>
<label style="width: 70px">Range</label>
<label class="sheet-weapons-short" style="width: 55px">Ammo</label>
<label class="sheet-weapons-short" style="width: 55px">Magazines</label>
<br>
<fieldset class="repeating_weapons">
<input type="text" name="attr_weapon_name" style="width: 105px">
<input type="number" name="attr_weapon_attack" value="0" style="width: 65px">
<select class="inputbox" name="attr_weapon_skill_bonus" style="width: 95px; height: 25px">
<option value="@{skill_shoot}">Shoot</option>
<option value="@{skill_punch}">Punch</option>
<option value="@{skill_stab}">Stab</option>
<option value="@{skill_telekinesis}">Telekinesis</option>
</select>
<select class="inputbox" name="attr_attribute_mod" style="width: 60px; height: 25px">
<option value="@{str_bonus}">STR</option>
<option value="@{dex_bonus}">DEX</option>
<option value="@{con_bonus}">CON</option>
<option value="@{int_bonus}">INT</option>
<option value="@{wis_bonus}">WIS</option>
<option value="@{cha_bonus}">CHA</option>
</select>
<input type="text" name="attr_weapon_damage" style="width: 50px">
<select class="inputbox" name="attr_weapon_burst" style="width: 75px; height: 25px">
<option value="0">No</option>
<option value="?{Burst|Yes, 2|No, 0}">Ask</option>
<option value="2">Always</option>
</select>
<input type="checkbox" name="attr_add_skill" value="@{weapon_skill_bonus}" style="width: 100px;">
<input type="text" name="attr_weapon_range" style="width: 70px">
<input type="number" name="attr_weapon_ammo" style="width: 55px">
<input type="number" name="attr_weapon_magazines" style="width: 55px">
<button type="roll" name="roll_weapon_to_hit" value="/me &{template:attack} {{characterName=@{name}}} {{name=@{weapon_name}}} {{rollValue=[[1d20 + @{attack_bonus}[AB] + @{weapon_attack}[Weapon AB] + [[{{@{weapon_skill_bonus},-1}>0}*(@{weapon_skill_bonus}+2) - 2]][Skill] + @{attribute_mod}[Attribute] + @{weapon_burst}[Burst] + ?{Other Modifier|0}[Modifier]]]}} {{damage=[[@{weapon_damage} + @{attribute_mod}[Attribute] + @{add_skill}[Skill] + @{weapon_burst}[Burst]]]}}"></button>
</fieldset>
</div>
</div>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle" name="attr_misc_show">
<label class="sheet-section-toggle-header-label">
<h3>Miscellaneous</h3>
<input checked type="checkbox" title="show/hide" class="sheet-section-toggle-header" name="attr_misc_show_label">
</label>
<div class="sheet-section-hide">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-row sheet-misc-goal">
<label>Current Goals</label>
</div>
</div>
<div class="sheet-col">
<div class="sheet-row sheet-misc-goal-xp">
<label>XP</label>
</div>
</div>
</div>
<fieldset class="repeating_goals">
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-row sheet-misc-goal">
<input type="text" name="attr_misc_goal">
</div>
</div>
<div class="sheet-col">
<div class="sheet-row sheet-misc-goal-xp">
<input type="number" min="0" name="attr_misc_goal_xp">
</div>
</div>
</div>
</fieldset>
<div class="sheet-row">
<label for="attr_languages" class="sheet-languages">Languages</label>
</div>
<fieldset class="repeating_languages">
<input type="text" name="attr_languages">
</fieldset>
<div class="sheet-row">
<label for="attr_notes">Notes</label>
</div>
<div class="sheet-row">
<textarea name="attr_notes" class="sheet-textarea-wide"></textarea>
</div>
</div>
</div>
</div>
<script type="text/worker">
/* ---- BEGIN: TheAaronSheet.js ---- */
// Github: https://github.com/shdwjk/TheAaronSheet/blob/master/TheAaronSheet.js
// By: The Aaron, Arcane Scriptomancer
// Contact: https://app.roll20.net/users/104025/the-aaron
var TAS = TAS || (function(){
'use strict';
var version = '0.2.4',
lastUpdate = 1457098091,
loggingSettings = {
debug: {
key: 'debug',
title: 'DEBUG',
color: {
bgLabel: '#7732A2',
label: '#F2EF40',
bgText: '#FFFEB7',
text: '#7732A2'
}
},
error: {
key: 'error',
title: 'Error',
color: {
bgLabel: '#C11713',
label: 'white',
bgText: '#C11713',
text: 'white'
}
},
warn: {
key: 'warn',
title: 'Warning',
color: {
bgLabel: '#F29140',
label: 'white',
bgText: '#FFD8B7',
text: 'black'
}
},
info: {
key: 'info',
title: 'Info',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
notice: {
key: 'notice',
title: 'Notice',
color: {
bgLabel: '#33C133',
label: 'white',
bgText: '#ADF1AD',
text: 'black'
}
},
log: {
key: 'log',
title: 'Log',
color: {
bgLabel: '#f2f240',
label: 'black',
bgText: '#ffff90',
text: 'black'
}
},
callstack: {
key: 'TAS',
title: 'function',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
callstack_async: {
key: 'TAS',
title: 'ASYNC CALL',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#413FA9',
text: 'white'
}
},
TAS: {
key: 'TAS',
title: 'TAS',
color: {
bgLabel: 'grey',
label: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)',
bgText: 'grey',
text: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)'
}
}
},
config = {
debugMode: false,
logging: {
log: true,
notice: true,
info: true,
warn: true,
error: true,
debug: false
}
},
callstackRegistry = [],
queuedUpdates = {}, //< Used for delaying saves till the last momment.
complexType = function(o){
switch(typeof o){
case 'string':
return 'string';
case 'boolean':
return 'boolean';
case 'number':
return (_.isNaN(o) ? 'NaN' : (o.toString().match(/\./) ? 'decimal' : 'integer'));
case 'function':
return 'function: '+(o.name ? o.name+'()' : '(anonymous)');
case 'object':
return (_.isArray(o) ? 'array' : (_.isArguments(o) ? 'arguments' : ( _.isNull(o) ? 'null' : 'object')));
default:
return typeof o;
}
},
dataLogger = function(primaryLogger,secondaryLogger,data){
_.each(data,function(m){
var type = complexType(m);
switch(type){
case 'string':
primaryLogger(m);
break;
case 'undefined':
case 'null':
case 'NaN':
primaryLogger('['+type+']');
break;
case 'number':
case 'not a number':
case 'integer':
case 'decimal':
case 'boolean':
primaryLogger('['+type+']: '+m);
break;
default:
primaryLogger('['+type+']:=========================================');
secondaryLogger(m);
primaryLogger('=========================================================');
break;
}
});
},
colorLog = function(options){
var coloredLoggerFunction,
key = options.key,
label = options.title || 'TAS',
lBGColor = (options.color && options.color.bgLabel) || 'blue',
lTxtColor = (options.color && options.color.label) || 'white',
mBGColor = (options.color && options.color.bgText) || 'blue',
mTxtColor = (options.color && options.color.text) || 'white';
coloredLoggerFunction = function(message){
console.log(
'%c '+label+': %c '+message + ' ',
'background-color: '+lBGColor+';color: '+lTxtColor+'; font-weight:bold;',
'background-color: '+mBGColor+';color: '+mTxtColor+';'
);
};
return function(){
if('TAS'===key || config.logging[key]){
dataLogger(coloredLoggerFunction,function(m){console.log(m);},_.toArray(arguments));
}
};
},
logDebug = colorLog(loggingSettings.debug),
logError = colorLog(loggingSettings.error),
logWarn = colorLog(loggingSettings.warn),
logInfo = colorLog(loggingSettings.info),
logNotice = colorLog(loggingSettings.notice),
logLog = colorLog(loggingSettings.log),
log = colorLog(loggingSettings.TAS),
logCS = colorLog(loggingSettings.callstack),
logCSA = colorLog(loggingSettings.callstack_async),
registerCallstack = function(callstack,label){
var idx=_.findIndex(callstackRegistry,function(o){
return (_.difference(o.stack,callstack).length === _.difference(callstack,o.stack).length) &&
_.difference(o.stack,callstack).length === 0 &&
o.label === label;
});
if(-1 === idx){
idx=callstackRegistry.length;
callstackRegistry.push({
stack: callstack,
label: label
});
}
return idx;
},
setConfigOption = function(options){
var newconf =_.defaults(options,config);
newconf.logging=_.defaults(
(options && options.logging)||{},
config.logging
);
config=newconf;
},
debugMode = function(){
config.logging.debug=true;
config.debugMode = true;
},
getCallstack = function(){
var e = new Error('dummy'),
stack = _.map(_.rest(e.stack.replace(/^[^\(]+?[\n$]/gm, '')
.replace(/^\s+at\s+/gm, '')
.replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@')
.split('\n')),function(l){
return l.replace(/\s+.*$/,'');
});
return stack;
},
logCallstackSub = function(cs){
var matches, csa;
_.find(cs,function(line){
matches = line.match(/TAS_CALLSTACK_(\d+)/);
if(matches){
csa=callstackRegistry[matches[1]];
logCSA( '===================='+(csa.label ? '> '+csa.label+' <' : '')+'====================');
logCallstackSub(csa.stack);
return true;
}
logCS(line);
return false;
});
},
logCallstack = function(){
var cs;
if(config.debugMode){
cs = getCallstack();
cs.shift();
log('==============================> CALLSTACK <==============================');
logCallstackSub(cs);
log('=========================================================================');
}
},
wrapCallback = function (label, callback, context){
var callstack;
if('function' === typeof label){
context=callback;
callback=label;
label=undefined;
}
if(!config.debugMode){
return (function(cb,ctx){
return function(){
cb.apply(ctx||{},arguments);
};
}(callback,context));
}
callstack = getCallstack();
callstack.shift();
return (function(cb,ctx,cs,lbl){
var ctxref=registerCallstack(cs,lbl);
/*jshint -W054 */
return new Function('cb','ctx','TASlog',
"return function TAS_CALLSTACK_"+ctxref+"(){"+
"TASlog('Entering: '+(cb.name||'(anonymous function)'));"+
"cb.apply(ctx||{},arguments);"+
"TASlog('Exiting: '+(cb.name||'(anonymous function)'));"+
"};")(cb,ctx,log);
/*jshint +W054 */
}(callback,context,callstack,label));
},
prepareUpdate = function( attribute, value ){
queuedUpdates[attribute]=value;
},
applyQueuedUpdates = function() {
setAttrs(queuedUpdates);
queuedUpdates = {};
},
namesFromArgs = function(args,base){
return _.chain(args)
.reduce(function(memo,attr){
if('string' === typeof attr) {
memo.push(attr);
} else if(_.isArray(args) || _.isArguments(args)){
memo = namesFromArgs(attr,memo);
}
return memo;
},(_.isArray(base) && base) || [])
.uniq()
.value();
},
addId = function(obj,value){
Object.defineProperty(obj,'id',{
value: value,
writeable: false,
enumerable: false
});
},
addProp = function(obj,prop,value,fullname){
(function(){
var pname=(_.contains(['S','F','I','D'],prop) ? '_'+prop : prop),
full_pname = fullname || prop,
pvalue=value;
_.each(['S','I','F'],function(p){
if( !_.has(obj,p)){
Object.defineProperty(obj, p, {
value: {},
enumerable: false,
readonly: true
});
}
});
if( !_.has(obj,'D')){
Object.defineProperty(obj, 'D', {
value: _.reduce(_.range(10),function(m,d){
Object.defineProperty(m, d, {
value: {},
enumerable: true,
readonly: true
});
return m;
},{}),
enumerable: false,
readonly: true
});
}
// Raw value
Object.defineProperty(obj, pname, {
enumerable: true,
set: function(v){
if(v!==pvalue) {
pvalue=v;
prepareUpdate(full_pname,v);
}
},
get: function(){
return pvalue;
}
});
// string value
Object.defineProperty(obj.S, pname, {
enumerable: true,
set: function(v){
var val=v.toString();
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return pvalue.toString();
}
});
// int value
Object.defineProperty(obj.I, pname, {
enumerable: true,
set: function(v){
var val=parseInt(v,10) || 0;
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseInt(pvalue,10) || 0;
}
});
// float value
Object.defineProperty(obj.F, pname, {
enumerable: true,
set: function(v){
var val=parseFloat(v) || 0;
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseFloat(pvalue) || 0;
}
});
_.each(_.range(10),function(d){
Object.defineProperty(obj.D[d], pname, {
enumerable: true,
set: function(v){
var val=(parseFloat(v) || 0).toFixed(d);
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return (parseFloat(pvalue) || 0).toFixed(d);
}
});
});
}());
},
repeating = function( section ) {
return (function(s){
var sectionName = s,
attrNames = [],
fieldNames = [],
operations = [],
after = [],
repAttrs = function TAS_Repeating_Attrs(){
attrNames = namesFromArgs(arguments,attrNames);
return this;
},
repFields = function TAS_Repeating_Fields(){
fieldNames = namesFromArgs(arguments,fieldNames);
return this;
},
repReduce = function TAS_Repeating_Reduce(func, initial, final, context) {
operations.push({
type: 'reduce',
func: (func && _.isFunction(func) && func) || _.noop,
memo: (_.isUndefined(initial) && 0) || initial,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repMap = function TAS_Repeating_Map(func, final, context) {
operations.push({
type: 'map',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repEach = function TAS_Repeating_Each(func, final, context) {
operations.push({
type: 'each',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repTap = function TAS_Repeating_Tap(final, context) {
operations.push({
type: 'tap',
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repAfter = function TAS_Repeating_After(callback,context) {
after.push({
callback: (callback && _.isFunction(callback) && callback) || _.noop,
context: context || {}
});
return this;
},
repExecute = function TAS_Repeating_Execute(callback,context){
var rowSet = {},
attrSet = {},
fieldIds = [],
fullFieldNames = [];
repAfter(callback,context);
// call each operation per row.
// call each operation's final
getSectionIDs("repeating_"+sectionName,function(ids){
fieldIds = ids;
fullFieldNames = _.reduce(fieldIds,function(memo,id){
return memo.concat(_.map(fieldNames,function(name){
return 'repeating_'+sectionName+'_'+id+'_'+name;
}));
},[]);
getAttrs( _.uniq(attrNames.concat(fullFieldNames)), function(values){
_.each(attrNames,function(aname){
if(values.hasOwnProperty(aname)){
addProp(attrSet,aname,values[aname]);
}
});
rowSet = _.reduce(fieldIds,function(memo,id){
var r={};
addId(r,id);
_.each(fieldNames,function(name){
var fn = 'repeating_'+sectionName+'_'+id+'_'+name;
addProp(r,name,values[fn],fn);
});
memo[id]=r;
return memo;
},{});
_.each(operations,function(op){
var res;
switch(op.type){
case 'tap':
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'each':
_.each(rowSet,function(r){
_.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'map':
res = _.map(rowSet,function(r){
return _.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
case 'reduce':
res = op.memo;
_.each(rowSet,function(r){
res = _.bind(op.func,op.context,res,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
}
});
// finalize attrs
applyQueuedUpdates();
_.each(after,function(op){
_.bind(op.callback,op.context)();
});
});
});
};
return {
attrs: repAttrs,
attr: repAttrs,
column: repFields,
columns: repFields,
field: repFields,
fields: repFields,
reduce: repReduce,
inject: repReduce,
foldl: repReduce,
map: repMap,
collect: repMap,
each: repEach,
forEach: repEach,
tap: repTap,
'do': repTap,
after: repAfter,
last: repAfter,
done: repAfter,
execute: repExecute,
go: repExecute,
run: repExecute
};
}(section));
},
repeatingSimpleSum = function(section, field, destination){
repeating(section)
.attr(destination)
.field(field)
.reduce(function(m,r){
return m + (r.F[field]);
},0,function(t,r,a){
a.S[destination]=t;
})
.execute();
};
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ The Aaron Sheet v'+version+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ Last update: '+(new Date(lastUpdate*1000))+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
return {
/* Repeating Sections */
repeatingSimpleSum: repeatingSimpleSum,
repeating: repeating,
/* Configuration */
config: setConfigOption,
/* Debugging */
callback: wrapCallback,
callstack: logCallstack,
debugMode: debugMode,
_fn: wrapCallback,
/* Logging */
debug: logDebug,
error: logError,
warn: logWarn,
info: logInfo,
notice: logNotice,
log: logLog
};
}());
/* ---- END: TheAaronSheet.js ---- */
/**
* Events
*/
on("sheet:opened", function() {
validateAttrMods();
calculateMaxStrain();
validateStrain();
validateGear();
migrateTechniques();
migrateCyberware();
migrateLanguages();
});
on("change:str change:int change:dex change:wis change:con change:cha", function(e) {
var attr = e.sourceAttribute;
calculateMod([attr]);
console.log(attr);
if (attr === 'con') {
calculateMaxStrain();
}
});
on("change:str_misc change:int_misc change:dex_misc change:wis_misc change:con_misc change:cha_misc", function(e) {
var attr = e.sourceAttribute.substr(0, 3);
calculateMod([attr]);
});
on("change:strain", function() {
validateStrain();
});
on("change:strain_perm", function() {
validateStrain();
});
on("change:gear_readied_max", function() {
validateReadiedMax();
});
on("change:level", function() {
calculateSaves();
});
on("change:skill_biopsion change:skill_precognition change:skill_telepathy change:skill_teleportation, change:skill_telekinesis change:skill_metapsion change:psionics_extra_effort", function() {
calculateEffort();
})
on("change:armor_ac change:innate_ac", function() {
calculateAC();
});
on("change:repeating_gear", function() {
getAttrs(["gear_readied_current", "gear_stowed_current"], function(v) {
setAttrs({
gear_readied_current: parseInt(0)
});
setAttrs({
gear_stowed_current: parseInt(0)
});
});
TAS.repeating("gear")
.attrs("gear_readied_current", "gear_stowed_current")
.fields("gear_encumbrance", "gear_readied")
.map(function(row, attrSet, id, rowSet) {
if (parseInt(row.gear_readied) === 1) {
attrSet.gear_readied_current += parseInt(row.gear_encumbrance);
} else if (parseInt(row.gear_readied) === 2) {
attrSet.gear_stowed_current += parseInt(row.gear_encumbrance);
}
})
.execute();
});
on("change:stat_block", function() {
fillNpc();
})
/**
* Calculations
*/
calculateSaves = function() {
getAttrs(["str_bonus", "con_bonus", "cha_bonus", "wis_bonus", "dex_bonus", "int_bonus", "level"], function(v) {
setAttrs({
save_physical: 16 - v.level - Math.max(v.str_bonus, v.con_bonus),
save_mental: 16 - v.level - Math.max(v.cha_bonus, v.wis_bonus),
save_evasion: 16 - v.level - Math.max(v.int_bonus, v.dex_bonus)
});
});
}
calculateEffort = function() {
getAttrs(["wis_bonus", "con_bonus", "psionics_extra_effort", "skill_biopsion", "skill_precognition", "skill_telepathy", "skill_teleportation", "skill_telekinesis", "skill_metapsion"], function(v) {
setAttrs({
psionics_total_effort: 1 + Math.max(v.wis_bonus, v.con_bonus) + Math.max(v.skill_biopsion, v.skill_precognition, v.skill_telepathy, v.skill_teleportation, v.skill_telekinesis, v.skill_metapsion) + parseInt(v.psionics_extra_effort, 10)
});
});
}
calculateAC = function() {
getAttrs(["dex_bonus", "armor_ac", "innate_ac"], function(v) {
if (v.innate_ac === '' || v.innate_ac === undefined) {
v.innate_ac = 10;
}
setAttrs({
AC: Math.max(10, parseInt(v.armor_ac, 10), parseInt(v.innate_ac, 10)) + parseInt(v.dex_bonus)
});
});
}
calculateMod = function(attributes) {
attributes.map(function(attr) {
var attrModMisc = attr + '_misc';
getAttrs([attr, attrModMisc], function(v) {
var attrModName = attr + '_bonus';
var updatedVal = {};
if (v[attr] >= 18) {
updatedVal[attrModName] = 2;
} else if (v[attr] >= 14 && v[attr] <= 17) {
updatedVal[attrModName] = 1;
} else if (v[attr] >= 4 && v[attr] <= 7) {
updatedVal[attrModName] = -1;
} else if (v[attr] <= 3) {
updatedVal[attrModName] = -2;
} else {
updatedVal[attrModName] = 0
}
if (v[attrModMisc] === '' || v[attrModMisc] === undefined) {
v[attrModMisc] = 0;
}
updatedVal[attrModName] += parseInt(v[attrModMisc]);
setAttrs(updatedVal);
calculateSaves();
calculateEffort();
calculateAC();
});
});
}
calculateMaxStrain = function() {
getAttrs(['con'], function(v) {
setAttrs({
strain_max: parseInt(v.con)
});
});
}
/**
* Validations
*/
validateAttrMods = function() {
calculateMod(['str', 'int', 'dex', 'wis', 'con', 'cha']);
}
validateStrain = function() {
getAttrs(["strain", "strain_perm", "strain_max"], function(v) {
if (!v.strain || (!v.strain_perm && !v.strain_max)) return false;
v.strain = +v.strain;
if (v.strain_perm) v.strain_perm = +v.strain_perm;
if (v.strain_max) v.strain_max = +v.strain_max;
if (v.strain_perm && v.strain < v.strain_perm) {
setAttrs({
strain: v.strain_perm
});
} else if (v.strain_max && v.strain > v.strain_max) {
setAttrs({
strain: v.strain_max
});
}
});
}
validateGear = function() {
validateReadiedMax();
validateStowedMax();
}
validateReadiedMax = function() {
getAttrs(["str", "gear_readied_max"], function(v) {
if (!v.str) return false;
v.str = +v.str;
if (v.gear_readied_max) v.gear_readied_max = +v.gear_readied_max;
readied_max = Math.floor(v.str / 2);
if (readied_max === v.gear_readied_max) return false;
setAttrs({
gear_readied_max: readied_max
});
});
}
validateStowedMax = function() {
getAttrs(["str", "gear_stowed_max"], function(v) {
if (!v.str) return false;
v.str = +v.str;
if (v.gear_stowed_max) v.gear_stowed_max = +v.gear_stowed_max;
stowed_max = v.str;
if (stowed_max === v.gear_stowed_max) return false;
setAttrs({
gear_stowed_max: stowed_max
});
});
}
/**
* Migrations
*/
migrateTechniques = function() {
console.log("Psychic migrate started");
var technique, i, newRow, newRowId, newRowAttrs = {};
getAttrs(['psionics_mastered_1', 'psionics_mastered_2', 'psionics_mastered_3', 'psionics_mastered_4', 'psionics_mastered_5', 'psionics_mastered_6', 'psionics_mastered_7', 'psionics_mastered_8'], function(values) {
console.log(values);
for (i = 1; i < 9; i++) {
technique = values["psionics_mastered_" + i];
console.log(technique);
if (technique !== "" && typeof technique === 'string') {
console.log("In need of update");
newRowId = generateRowID();
console.log(newRowId);
newRow = "repeating_technique_" + newRowId + "_technique";
console.log(newRow);
newRowAttrs[newRow] = technique;
console.log(newRowAttrs);
setAttrs(newRowAttrs, function(values) {
console.log("updated");
});
newRow = "psionics_mastered_" + i;
newRowAttrs[newRow] = "";
setAttrs(newRowAttrs);
} else {
console.log("no update");
}
}
});
}
migrateCyberware = function() {
console.log("Cyberware migrate started");
var cyberware, i, newRow, newRowId, newRowAttrs = {};
getAttrs(['cyberware_1', 'cyberware_2', 'cyberware_3', 'cyberware_4'], function(values) {
console.log(values);
for (i = 1; i < 5; i++) {
cyberware = values["cyberware_" + i];
console.log(cyberware);
if (cyberware !== "" && typeof cyberware === 'string') {
console.log("In need of update");
newRowId = generateRowID();
console.log(newRowId);
newRow = "repeating_cyberware_" + newRowId + "_cyberware";
console.log(newRow);
newRowAttrs[newRow] = cyberware;
console.log(newRowAttrs);
setAttrs(newRowAttrs, function(values) {
console.log("updated");
});
newRow = "cyberware_" + i;
newRowAttrs[newRow] = "";
setAttrs(newRowAttrs);
} else {
console.log("no update");
}
}
});
}
migrateLanguages = function() {
//console.log("Languages migrate started");
var languages, i, newRow, newRowId, newRowAttrs = {};
getAttrs(["languages"], function(v) {
console.log("Languages retrieved");
languages = v["languages"].split(/\r?\n/);
for (i = 0; i < languages.length; i++) {
if (languages[i] !== "" && typeof languages[i] === 'string') {
console.log("In need of update");
newRowId = generateRowID();
console.log(newRowId);
newRow = "repeating_languages_" + newRowId + "_languages";
console.log(newRow);
newRowAttrs[newRow] = languages[i];
console.log(newRowAttrs);
setAttrs(newRowAttrs, function(values) {
console.log("updated");
});
} else {
console.log("no update");
}
}
setAttrs({languages: ""});
});
}
/**
* Autofilling
*/
fillNpc = function() {
getAttrs(["stat_block"], function(v) {
stats = v["stat_block"].split(" ");
setAttrs({hd: stats[0], ac: stats[1], attack_bonus: stats[2], damage: stats[3], move: stats[4], morale: stats[5], skills: stats[6], saves: stats[7]});
});
}
/**
* Checkbox madness
*/
on("change:stats_show_label", function () {
getAttrs(['stats_show_label'], function(v) {
setAttrs({stats_show:v.stats_show_label});
});
});
on("change:combat_show_label", function () {
getAttrs(['combat_show_label'], function(v) {
setAttrs({combat_show:v.combat_show_label});
});
});
on("change:saves_show_label", function () {
getAttrs(['saves_show_label'], function(v) {
setAttrs({saves_show:v.saves_show_label});
});
});
on("change:skills_show_label", function () {
getAttrs(['skills_show_label'], function(v) {
setAttrs({skills_show:v.skills_show_label});
});
});
on("change:psionics_show_label", function () {
getAttrs(['psionics_show_label'], function(v) {
setAttrs({psionics_show:v.psionics_show_label});
});
});
on("change:foci_show_label", function () {
getAttrs(['foci_show_label'], function(v) {
setAttrs({foci_show:v.foci_show_label});
});
});
on("change:gear_show_label", function () {
getAttrs(['gear_show_label'], function(v) {
setAttrs({gear_show:v.gear_show_label});
});
});
on("change:misc_show_label", function () {
getAttrs(['misc_show_label'], function(v) {
setAttrs({misc_show:v.misc_show_label});
});
});
</script>