Files
roll20-character-sheets/ImperiumMaledictum/sheet_new.html
T

2062 lines
92 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.
<input class="toggle-tabs" type="hidden" name="attr_tab" value="page1" />
<input class="toggle-sheet" type="hidden" name="attr_sheet_type" value="character" />
<input class="faction" type="hidden" name="attr_faction" />
<input class="patron-faction" type="hidden" name="attr_patron_faction" />
<div class="tabs">
<div class="tab-page1"><button type="action"
name="act_page1">Page 1</button></div>
<div class="tab-page2"><button type="action"
name="act_page2">Page 2</button></div>
<div class="tab-patron"><button type="action"
name="act_patron">Patron</button></div>
<div class="tab-npc"><button type="action"
name="act_npc">NPC</button></div>
<div class="tab-settings"><button type="action"
name="act_settings">Settings</button></div>
<div class="roller">
<select class="input character" name="attr_difficulty">
<option value="60">Very Easy (+60)</option>
<option value="40">Easy (+40)</option>
<option value="20">Routine (+20)</option>
<option value="0" selected>Challenging (+0)</option>
<option value="-10">Difficult (-10)</option>
<option value="-20">Hard (-20)</option>
<option value="-30">Very Hard (-30)</option>
</select>
<select class="input character" name="attr_superiority">
<option value="0">No Superiority</option>
<option value="1">+1 Superiority</option>
<option value="2">+2 Superiority</option>
<option value="3">+3 Superiority</option>
<option value="4">+4 Superiority</option>
<option value="5">+5 Superiority</option>
<option value="6">+6 Superiority</option>
</select>
<select class="input character" name="attr_circumstances">
<option value="3">Advantage (+20)</option>
<option value="2">Advantage (+10)</option>
<option value="1">Advantage</option>
<option value="0" selected>No Advantage</option>
<option value="-1">Disadvantage</option>
<option value="-2">Disadvantage (-10)</option>
<option value="-3">Disadvantage (-20)</option>
</select>
</div>
</div>
<!-- ++PAGE1++ -->
<div class="grid page1 widegap">
<div class="grid col3 vwidegap">
<h1 class="vspan2">Imperium Maledictum</h1>
<!-- <img class="logo" src="https://raw.githubusercontent.com/clgarret/roll20-character-sheets/master/ImperiumMaledictum/imperium_maledictum_logo.jpg"/> -->
<div class="grid col4-profile1 span2 vcol">
<input type="text" spellcheck="false" list="origin" name="attr_origin" />
<datalist id="origin">
<option>Agri World</option>
<option>Feral World</option>
<option>Feudal World</option>
<option>Forge World</option>
<option>Hive World</option>
<option>Schola Progenium</option>
<option>Shrine World</option>
<option>Voidborn</option>
</datalist>
<label>Origin</label>
<input type="text" spellcheck="false" list="faction" name="attr_faction" />
<datalist id="faction">
<option>Adeptus Administratum</option>
<option>Adeptus Astra Telepathica</option>
<option>Adeptus Mechanicus</option>
<option>Adeptus Ministorum</option>
<option>Astra Militarum</option>
<option>Imperial Fleet</option>
<option>Infractionist</option>
<option>The Inquisition</option>
<option>Rogue Trader Dynasty</option>
</datalist>
<label>Faction</label>
<input type="text" spellcheck="false" list="role" name="attr_role" />
<datalist id="role">
<option>Interlocutor</option>
<option>Mystic</option>
<option>Penumbra</option>
<option>Savant</option>
<option>Warrior</option>
<option>Zealot</option>
</datalist>
<label>Role</label>
<input type="text" spellcheck="false" name="attr_patron" />
<label>Patron</label>
</div>
<div class="grid col6 span2 vcol">
<input type="text" spellcheck="false" name="attr_age" />
<label>Age</label>
<input type="text" spellcheck="false" name="attr_eyes" />
<label>Eyes</label>
<input type="text" spellcheck="false" name="attr_hair" />
<label>Hair</label>
<input type="text" spellcheck="false" name="attr_height" />
<label>Height</label>
<input type="text" spellcheck="false" name="attr_weight" />
<label>Weight</label>
<input type="text" spellcheck="false" name="attr_handedness" />
<label>Handedness</label>
</div>
</div>
<div class="grid col3 widegap">
<div class="grid vcol">
<input class="lrg" type="text" spellcheck="false" name="attr_character_name" />
<label>Character Name</label>
</div>
<div class="grid col4 span2 vcol">
<input class="span3" type="text" spellcheck="false"
name="attr_distinguishing_features" />
<label class="span3">Distinguishing Features</label>
<div class="grid col2 vspan2 vcol nogap split xp">
<input type="number" name="attr_xp_current" />
<label class="hint">Current</label>
<input type="number" name="attr_xp_spent" />
<label class="hint">Spent</label>
</div>
</div>
</div>
<div class="grid col3-chars vwidegap">
<div class="grid nogap characteristics">
<h2>Characteristics</h2>
<div class="grid nogap lined">
<div class="grid col10-chars">
<span />
<span class="label">WS</span>
<span class="label">BS</span>
<span class="label">STR</span>
<span class="label">TGH</span>
<span class="label">AG</span>
<span class="label">INT</span>
<span class="label">PER</span>
<span class="label">WIL</span>
<span class="label">FEL</span>
<span class="label">Starting</span>
<input type="number" name="attr_starting_ws" tooltip="Weapon Skill" />
<input type="number" name="attr_starting_bs" tooltip="Ballistic Skill" />
<input type="number" name="attr_starting_str" tooltip="Strength" />
<input type="number" name="attr_starting_tgh" tooltip="Toughness" />
<input type="number" name="attr_starting_ag" tooltip="Agility" />
<input type="number" name="attr_starting_int" tooltip="Intelligence" />
<input type="number" name="attr_starting_per" tooltip="Perception" />
<input type="number" name="attr_starting_wil" tooltip="Willpower" />
<input type="number" name="attr_starting_fel" tooltip="Fellowship" />
<span class="label">Advances</span>
<input type="number" name="attr_advances_ws" />
<input type="number" name="attr_advances_bs" />
<input type="number" name="attr_advances_str" />
<input type="number" name="attr_advances_tgh" />
<input type="number" name="attr_advances_ag" />
<input type="number" name="attr_advances_int" />
<input type="number" name="attr_advances_per" />
<input type="number" name="attr_advances_wil" />
<input type="number" name="attr_advances_fel" />
<span class="label">Current</span>
<button class="input" type="action" name="act_ws" value="">
<span name="attr_ws" />
</button>
<button class="input" type="action" name="act_bs" value="">
<span name="attr_bs" />
</button>
<button class="input" type="action" name="act_str" value="">
<span name="attr_str" />
</button>
<button class="input" type="action" name="act_tgh" value="">
<span name="attr_tgh" />
</button>
<button class="input" type="action" name="act_ag" value="">
<span name="attr_ag" />
</button>
<button class="input" type="action" name="act_int" value="">
<span name="attr_int" />
</button>
<button class="input" type="action" name="act_per" value="">
<span name="attr_per" />
</button>
<button class="input" type="action" name="act_wil" value="">
<span name="attr_wil" />
</button>
<button class="input" type="action" name="act_fel" value="">
<span name="attr_fel" />
</button>
<input type="hidden" name="attr_ws_bonus" value="0" />
<input type="hidden" name="attr_bs_bonus" value="0" />
<input type="hidden" name="attr_str_bonus" value="0" />
<input type="hidden" name="attr_tgh_bonus" value="0" />
<input type="hidden" name="attr_ag_bonus" value="0" />
<input type="hidden" name="attr_int_bonus" value="0" />
<input type="hidden" name="attr_per_bonus" value="0" />
<input type="hidden" name="attr_wil_bonus" value="0" />
<input type="hidden" name="attr_fel_bonus" value="0" />
</div>
</div>
</div>
<div class="grid nogap vsplit">
<h2>Fate</h2>
<div class="grid col2 vcol novgap">
<label>Current</label>
<input type="number" name="attr_fate_current" value="3" />
<label>Total</label>
<input type="number" name="attr_fate_spent" value="3" />
</div>
</div>
<div class="grid nogap vsplit corruption">
<h2>Corruption</h2>
<div class="grid col4 vcol novgap">
<label>Total</label>
<input type="number" name="attr_corruption_total" />
<label class="span3">Mutations & Malignancies</label>
<div class="auto-expand span3">
<span name="attr_mutations"></span>
<textarea spellcheck="false" name="attr_corruption_mutations"></textarea>
</div>
</div>
</div>
</div>
<div class="grid nogap skills">
<h2>Skills & Specialisations</h2>
<div class="grid col3 widegap">
<div class="grid nogap lined">
<div class="grid col5-skills">
<span class="label">Skill</span>
<span class="label span2">Char.</span>
<span class="label pullup">Adv. <sub>(+5 each)</sub></span>
<span class="label">Total</span>
<label>Athletics</label>
<span class="label">STR</span>
<span class="input" name="attr_str" />
<input type="hidden" name="attr_skill_advances_athletics" value="0" />
<input type="number" name="attr_skill_advances_athletics" />
<input type="hidden" name="attr_skill_athletics" value="0" />
<button class="input" type="action" name="act_athletics" value="">
<span name="attr_athletics" />
</button>
<label>Awareness</label>
<span class="label">PER</span>
<span class="input" name="attr_per" />
<input type="hidden" name="attr_skill_advances_awareness" value="0" />
<input type="number" name="attr_skill_advances_awareness" />
<input type="hidden" name="attr_skill_awareness" value="0" />
<button class="input" type="action" name="act_awareness" value="">
<span name="attr_awareness" />
</button>
<label>Dexterity</label>
<span class="label">AG</span>
<span class="input" name="attr_ag" />
<input type="hidden" name="attr_skill_advances_dexterity" value="0" />
<input type="number" name="attr_skill_advances_dexterity" />
<input type="hidden" name="attr_skill_dexterity" value="0" />
<button class="input" type="action" name="act_dexterity" value="">
<span name="attr_dexterity" />
</button>
<label>Discipline</label>
<span class="label">WIL</span>
<span class="input" name="attr_wil" />
<input type="hidden" name="attr_skill_advances_discipline" value="0" />
<input type="number" name="attr_skill_advances_discipline" />
<input type="hidden" name="attr_skill_discipline" value="0" />
<button class="input" type="action" name="act_discipline" value="">
<span name="attr_discipline" />
</button>
<label>Fortitude</label>
<span class="label">TGH</span>
<span class="input" name="attr_tgh" />
<input type="hidden" name="attr_skill_advances_fortitude" value="0" />
<input type="number" name="attr_skill_advances_fortitude" />
<input type="hidden" name="attr_skill_fortitude" value="0" />
<button class="input" type="action" name="act_fortitude" value="">
<span name="attr_fortitude" />
</button>
<label>Intuition</label>
<span class="label">PER</span>
<span class="input" name="attr_per" />
<input type="hidden" name="attr_skill_advances_intuition" value="0" />
<input type="number" name="attr_skill_advances_intuition" />
<input type="hidden" name="attr_skill_intuition" value="0" />
<button class="input" type="action" name="act_intuition" value="">
<span name="attr_intuition" />
</button>
<label>Linguistics</label>
<span class="label">INT</span>
<span class="input" name="attr_int" />
<input type="hidden" name="attr_skill_advances_linguistics" value="0" />
<input type="number" name="attr_skill_advances_linguistics" />
<input type="hidden" name="attr_skill_linguistics" value="0" />
<button class="input" type="action" name="act_linguistics" value="">
<span name="attr_linguistics" />
</button>
<label>Logic</label>
<span class="label">INT</span>
<span class="input" name="attr_int" />
<input type="hidden" name="attr_skill_advances_logic" value="0" />
<input type="number" name="attr_skill_advances_logic" />
<input type="hidden" name="attr_skill_logic" value="0" />
<button class="input" type="action" name="act_logic" value="">
<span name="attr_logic" />
</button>
<label>Lore</label>
<span class="label">INT</span>
<span class="input" name="attr_int" />
<input type="hidden" name="attr_skill_advances_lore" value="0" />
<input type="number" name="attr_skill_advances_lore" />
<input type="hidden" name="attr_skill_lore" value="0" />
<button class="input" type="action" name="act_lore" value="">
<span name="attr_lore" />
</button>
<label>Medicae</label>
<span class="label">INT</span>
<span class="input" name="attr_int" />
<input type="hidden" name="attr_skill_advances_medicae" value="0" />
<input type="number" name="attr_skill_advances_medicae" />
<input type="hidden" name="attr_skill_medicae" value="0" />
<button class="input" type="action" name="act_medicae" value="">
<span name="attr_medicae" />
</button>
</div>
</div>
<div class="grid nogap lined">
<div class="grid col5-skills">
<span class="label">Skill</span>
<span class="label span2">Char.</span>
<span class="label pullup">Adv. <sub>(+5 each)</sub></span>
<span class="label">Total</span>
<label>Melee</label>
<span class="label">WS</span>
<span class="input" name="attr_ws" />
<input type="hidden" name="attr_skill_advances_melee" value="0" />
<input type="number" name="attr_skill_advances_melee" />
<input type="hidden" name="attr_skill_melee" value="0" />
<button class="input" type="action" name="act_melee" value="">
<span name="attr_melee" />
</button>
<label>Navigation</label>
<span class="label">INT</span>
<span class="input" name="attr_int" />
<input type="hidden" name="attr_skill_advances_navigation" value="0" />
<input type="number" name="attr_skill_advances_navigation" />
<input type="hidden" name="attr_skill_navigation" value="0" />
<button class="input" type="action" name="act_navigation" value="">
<span name="attr_navigation" />
</button>
<label>Piloting</label>
<span class="label">AG</span>
<span class="input" name="attr_ag" />
<input type="hidden" name="attr_skill_advances_piloting" value="0" />
<input type="number" name="attr_skill_advances_piloting" />
<input type="hidden" name="attr_skill_piloting" value="0" />
<button class="input" type="action" name="act_piloting" value="">
<span name="attr_piloting" />
</button>
<label>Presence</label>
<span class="label">WIL</span>
<span class="input" name="attr_wil" />
<input type="hidden" name="attr_skill_advances_presence" value="0" />
<input type="number" name="attr_skill_advances_presence" />
<input type="hidden" name="attr_skill_presence" value="0" />
<button class="input" type="action" name="act_presence" value="">
<span name="attr_presence" />
</button>
<label>Psychic Mastery</label>
<span class="label">WIL</span>
<span class="input" name="attr_wil" />
<input type="hidden" name="attr_skill_advances_psychic_mastery" value="0" />
<input type="number" name="attr_skill_advances_psychic_mastery" />
<input type="hidden" name="attr_skill_psychic_mastery" value="0" />
<button class="input" type="action" name="act_psychic_mastery" value="">
<span name="attr_psychic_mastery" />
</button>
<label>Ranged</label>
<span class="label">BS</span>
<span class="input" name="attr_bs" />
<input type="hidden" name="attr_skill_advances_ranged" value="0" />
<input type="number" name="attr_skill_advances_ranged" />
<input type="hidden" name="attr_skill_ranged" value="0" />
<button class="input" type="action" name="act_ranged" value="">
<span name="attr_ranged" />
</button>
<label>Rapport</label>
<span class="label">FEL</span>
<span class="input" name="attr_fel" />
<input type="hidden" name="attr_skill_advances_rapport" value="0" />
<input type="number" name="attr_skill_advances_rapport" />
<input type="hidden" name="attr_skill_rapport" value="0" />
<button class="input" type="action" name="act_rapport" value="">
<span name="attr_rapport" />
</button>
<label>Reflexes</label>
<span class="label">AG</span>
<span class="input" name="attr_ag" />
<input type="hidden" name="attr_skill_advances_reflexes" value="0" />
<input type="number" name="attr_skill_advances_reflexes" />
<input type="hidden" name="attr_skill_reflexes" value="0" />
<button class="input" type="action" name="act_reflexes" value="">
<span name="attr_reflexes" />
</button>
<label>Stealth</label>
<span class="label">AG</span>
<span class="input" name="attr_ag" />
<input type="hidden" name="attr_skill_advances_stealth" value="0" />
<input type="number" name="attr_skill_advances_stealth" />
<input type="hidden" name="attr_skill_stealth" value="0" />
<button class="input" type="action" name="act_stealth" value="">
<span name="attr_stealth" />
</button>
<label>Tech</label>
<span class="label">INT</span>
<span class="input" name="attr_int" />
<input type="hidden" name="attr_skill_advances_tech" value="0" />
<input type="number" name="attr_skill_advances_tech" />
<input type="hidden" name="attr_skill_tech" value="0" />
<button class="input" type="action" name="act_tech" value="">
<span name="attr_tech" />
</button>
</div>
</div>
<div class="grid nogap lined">
<div class="grid col4-skills">
<span class="label">Specialisation</span>
<span class="label">Skill</span>
<span class="label pullup">ADV <sub>(+5 each)</sub></span>
<span class="label">Total</span>
</div>
<fieldset class="repeating_specialisations">
<input type="text" spellcheck="false" name="attr_specialisation_name" />
<select class="input" name="attr_specialisation_skill">
<option value=""></option>
<option value="athletics">Athletics</option>
<option value="awareness">Awareness</option>
<option value="dexterity">Dexterity</option>
<option value="discipline">Discipline</option>
<option value="fortitude">Fortitude</option>
<option value="intuition">Intuition</option>
<option value="linguistics">Linguistics</option>
<option value="logic">Logic</option>
<option value="lore">Lore</option>
<option value="medicae">Medicae</option>
<option value="navigation">Navigation</option>
<option value="piloting">Piloting</option>
<option value="presence">Presence</option>
<option value="psychic_mastery">Psychic Mastery</option>
<option value="rapport">Rapport</option>
<option value="reflexes">reflexes</option>
<option value="stealth">Stealth</option>
<option value="tech">Tech</option>
</select>
<input type="number" name="attr_specialisation_advances" />
<input type="hidden" name="attr_specialisation_total" value="0" />
<button class="input" type="action" name="act_action" value="">
<span name="attr_specialisation_total" />
</button>
</fieldset>
<div class="grid col4-skills">
<span class="label">Specialisation</span>
<span class="label">Skill</span>
<span class="label pullup">ADV <sub>(+5 each)</sub></span>
<span class="label">Total</span>
</div>
<fieldset class="repeating_specialisations2" name="repeating_specialisations2">
<select class="input" name="attr_specialisation2_name">
<option value="Brawling">Brawling</option>
<option value="One-handed">One-Handed</option>
<option value="Two-handed">Two-Handed</option>
<option value="Long Gun">Long Gun</option>
<option value="Ordnance">Ordnance</option>
<option value="Pistol">Pistols</option>
<option value="Thrown">Thrown</option>
</select>
<select class="input" name="attr_specialisation2_skill">
<option value="melee">Melee</option>
<option value="ranged">Ranged</option>
</select>
<input type="number" name="attr_specialisation2_advances" />
<input type="hidden" name="attr_specialisation2_total" value="0" />
<button class="input" type="action" name="act_action" value="">
<span name="attr_specialisation2_total" />
</button>
</fieldset>
</div>
</div>
</div>
<div class="grid col3 widegap">
<div class="grid widegap">
<div class="grid nogap">
<h2>Goals</h2>
<div class="auto-expand">
<span name="attr_goals"></span>
<textarea spellcheck="false" name="attr_goals"></textarea>
</div>
</div>
<div class="grid nogap">
<h2>Connections</h2>
<div class="auto-expand">
<span name="attr_connections"></span>
<textarea spellcheck="false" name="attr_connections"></textarea>
</div>
</div>
<div class="grid nogap">
<h2>Notes</h2>
<div class="auto-expand">
<span name="attr_notes"></span>
<textarea spellcheck="false" name="attr_notes"></textarea>
</div>
</div>
<div class="grid nogap">
<h2>Divination</h2>
<div class="auto-expand">
<span name="attr_divination"></span>
<textarea spellcheck="false" name="attr_divination"></textarea>
</div>
</div>
<div class="grid nogap">
<h2>Solars</h2>
<div class="auto-expand">
<span name="attr_currency"></span>
<textarea spellcheck="false" name="attr_currency"></textarea>
</div>
</div>
<div class="grid nogap">
<h3>Other Currencies</h3>
<div class="auto-expand">
<span name="attr_other_currencies"></span>
<textarea spellcheck="false" name="attr_other_currencies"></textarea>
</div>
</div>
</div>
<div class="grid span2 widegap">
<div class="grid nogap">
<h2>Influence</h2>
<div class="grid col3-influences">
<span class="label">Faction</span>
<span class="label">Infl.</span>
<span class="label">Contacts</span>
</div>
<fieldset class="repeating_influences">
<input type="text" spellcheck="false" name="attr_influence_faction" />
<input type="number" name="attr_influence_value" />
<input type="text" spellcheck="false" name="attr_influence_contacts" />
</fieldset>
</div>
<div class="grid nogap">
<h2>Talents</h2>
<div class="grid col2-talents">
<span class="label">Talent</span>
<span class="label">Effect</span>
</div>
<fieldset class="repeating_talents">
<input type="text" spellcheck="false" name="attr_talent_name" />
<div class="auto-expand">
<span name="attr_talent_effect"></span>
<textarea spellcheck="false" name="attr_talent_effect"></textarea>
</div>
</fieldset>
</div>
</div>
</div>
</div>
<!-- ++PAGE2++ -->
<div class="grid page2 widegap">
<div class="grid col6 widegap">
<div class="grid widegap">
<div class="grid nogap">
<h2>Initiative</h2>
<label class="hint">PerB + AgB</label>
<button class="input unlined" type="roll" name="roll_initiative" value="&{template:imbasic} {{reroll=[Reroll](~initiative)}} {{name=@{character_name}}} {{topic=Initiative}} {{result=[[@{initiative} &{tracker}]]}}">
<span name="attr_initiative" />
</button>
</div>
<div class="grid nogap">
<div class="grid nogap vsplit warpcharge">
<h2>Warp Charge</h2>
<div class="grid col2 vcol novgap">
<label>Current</label>
<input type="number" name="attr_warp_charge_current" />
<label>Threshold</label>
<input type="number" name="attr_warp_charge_threshold" />
</div>
<label class="hint">WilB (×2 if Sanctioned)</label>
</div>
<label class="flex slim">
<input type="checkbox" name="attr_sanctioned" value="1" />
<span class="label">Sanctioned</span>
</label>
</div>
</div>
<div class="grid nogap vsplit wounds">
<h2>Wounds</h2>
<label class="hint">StrB + (2 × TghB) + WilB</label>
<div class="grid col2 vcol novgap">
<label>Current</label>
<input type="number" name="attr_wounds_current" />
<label>Maximum</label>
<input type="number" name="attr_wounds_maximum" />
</div>
</div>
<div class="grid span4 nogap">
<h2>Critical Wounds</h2>
<label class="hint">Maximum equal to TghB (<span name="attr_tgh_bonus" />)</label>
<div class="grid col2-crits">
<span class="label">Location</span>
<span class="label">Effect</span>
</div>
<fieldset class="repeating_criticals">
<select class="input" name="attr_critical_location">
<option value=""></option>
<option value="Head">Head</option>
<option value="Left Arm">Left Arm</option>
<option value="Right Arm">Right Arm</option>
<option value="Left Leg">Left Leg</option>
<option value="Right Leg">Right Leg</option>
<option value="Body">Body</option>
</select>
<div class="auto-expand">
<span name="attr_critical_effect"></span>
<textarea spellcheck="false" name="attr_critical_effect"></textarea>
</div>
</fieldset>
</div>
</div>
<div class="grid nogap">
<h2>Weapons</h2>
<div class="grid col8-weapons">
<span class="label">Name</span>
<span class="label">Specialisation</span>
<span class="label">Test</span>
<span class="label">Damage</span>
<span class="label">Range</span>
<span class="label">Mag</span>
<span class="label">Enc.</span>
<span class="label">Traits</span>
</div>
<fieldset class="repeating_weapons" name="repeating_weapons">
<input class="weaponspec" type="hidden" name="attr_weapon_specialisation" />
<input type="text" spellcheck="false" name="attr_weapon_name" />
<select class="input" name="attr_weapon_specialisation">
<option value=""></option>
<option value="Brawling">Brawling</option>
<option value="One-handed">One-handed</option>
<option value="Two-handed">Two-handed</option>
<option value="Long Gun">Long Gun</option>
<option value="Ordnance">Ordnance</option>
<option value="Pistol">Pistol</option>
<option value="Thrown">Thrown</option>
</select>
<button class="input" type="action" name="act_action" value="">
<span name="attr_weapon_total" />
</button>
<input class="ranged" type="number" name="attr_weapon_damage" />
<div class="grid col2 nogap split melee">
<input type="number" name="attr_weapon_damage" />
<span class="input" name="attr_weapon_damage_total" />
<input type="hidden" name="attr_weapon_damage_total" value="0" />
</div>
<select class="input" name="attr_weapon_range">
<option value=""></option>
<option value="Immediate">Immediate</option>
<option value="Short">Short</option>
<option value="Medium">Medium</option>
<option value="Long">Long</option>
<option value="Extreme">Extreme</option>
</select>
<div class="grid col2 nogap split">
<input type="number" name="attr_weapon_mag" />
<input type="number" name="attr_weapon_mag_max" />
</div>
<input type="number" name="attr_weapon_enc" />
<div class="auto-expand">
<span name="attr_weapon_traits"></span>
<textarea spellcheck="false" name="attr_weapon_traits"></textarea>
</div>
</fieldset>
</div>
<div class="grid col5 widegap">
<div class="grid span4 nogap">
<h2>Armour</h2>
<div class="grid col5-armour">
<span class="label">Name</span>
<span class="label">Locations</span>
<span class="label">Armour</span>
<span class="label">Enc.</span>
<span class="label">Traits</span>
</div>
<fieldset class="repeating_armour">
<input type="text" spellcheck="false" name="attr_armour_name" />
<select class="input" name="attr_armour_locations">
<option value=""></option>
<option value="All">All</option>
<option value="Arms,Body,Legs">Arms,Body,Legs</option>
<option value="Arms,Body">Arms,Body</option>
<option value="Head">Head</option>
<option value="Arms">Arms</option>
<option value="Body">Body</option>
<option value="Legs">Legs</option>
<option value="Special">Special</option>
</select>
<input type="number" name="attr_armour_value" />
<input type="number" name="attr_armour_enc" />
<div class="auto-expand">
<span name="attr_armour_traits"></span>
<textarea spellcheck="false" name="attr_armour_traits"></textarea>
</div>
</fieldset>
</div>
<div class="grid nogap lined tight">
<div class="grid col3-hitloc">
<span class="label">d10</span>
<span class="label">Hit Location</span>
<span class="label">Armour</span>
<label>1</label>
<span class="label">Head</span>
<input type="number" name="attr_head_armour" />
<input type="hidden" name="attr_head_armour" value="0" />
<label>2</label>
<span class="label">Left Arm</span>
<input type="number" name="attr_larm_armour" />
<input type="hidden" name="attr_larm_armour" value="0" />
<label>3</label>
<span class="label">Right Arm</span>
<input type="number" name="attr_rarm_armour" />
<input type="hidden" name="attr_rarm_armour" value="0" />
<label>4</label>
<span class="label">Left Leg</span>
<input type="number" name="attr_lleg_armour" />
<input type="hidden" name="attr_lleg_armour" value="0" />
<label>5</label>
<span class="label">Right Leg</span>
<input type="number" name="attr_rleg_armour" />
<input type="hidden" name="attr_rleg_armour" value="0" />
<label>6-0</label>
<span class="label">Body</span>
<input type="number" name="attr_body_armour" />
<input type="hidden" name="attr_body_armour" value="0" />
</div>
</div>
</div>
<div class="grid col4 widegap">
<div class="grid span4 nogap">
<h2>Equipment</h2>
<div class="grid col4 gap">
<input type="text" id="equipment1" name="attr_equipment1">
<input type="text" id="equipment2" name="attr_equipment2">
<input type="text" id="equipment3" name="attr_equipment3">
<input type="text" id="equipment4" name="attr_equipment4">
<input type="text" id="equipment5" name="attr_equipment5">
<input type="text" id="equipment6" name="attr_equipment6">
<input type="text" id="equipment7" name="attr_equipment7">
<input type="text" id="equipment8" name="attr_equipment8">
<input type="text" id="equipment9" name="attr_equipment9">
<input type="text" id="equipment10" name="attr_equipment10">
<input type="text" id="equipment11" name="attr_equipment11">
<input type="text" id="equipment12" name="attr_equipment12">
<input type="text" id="equipment13" name="attr_equipment13">
<input type="text" id="equipment14" name="attr_equipment14">
<input type="text" id="equipment15" name="attr_equipment15">
<input type="text" id="equipment16" name="attr_equipment16">
<input type="text" id="equipment17" name="attr_equipment17">
<input type="text" id="equipment18" name="attr_equipment18">
<input type="text" id="equipment19" name="attr_equipment19">
<input type="text" id="equipment20" name="attr_equipment20">
<input type="text" id="equipment21" name="attr_equipment21">
<input type="text" id="equipment22" name="attr_equipment22">
<input type="text" id="equipment23" name="attr_equipment23">
<input type="text" id="equipment24" name="attr_equipment24">
<input type="text" id="equipment25" name="attr_equipment25">
<input type="text" id="equipment26" name="attr_equipment26">
<input type="text" id="equipment27" name="attr_equipment27">
<input type="text" id="equipment28" name="attr_equipment28">
<input type="text" id="equipment29" name="attr_equipment29">
<input type="text" id="equipment30" name="attr_equipment30">
<input type="text" id="equipment31" name="attr_equipment31">
<input type="text" id="equipment32" name="attr_equipment32">
<input type="text" id="equipment33" name="attr_equipment33">
<input type="text" id="equipment34" name="attr_equipment34">
<input type="text" id="equipment35" name="attr_equipment35">
<input type="text" id="equipment36" name="attr_equipment36">
<input type="text" id="equipment37" name="attr_equipment37">
<input type="text" id="equipment38" name="attr_equipment38">
<input type="text" id="equipment39" name="attr_equipment39">
<input type="text" id="equipment40" name="attr_equipment40">
</div>
</div>
</div>
<div class="grid col1">
<div class="grid nogap">
<h2>Combat Notes</h2>
<div class="grid col2 widgap">
<div class="auto-expand">
<span name="attr_combat_notes"></span>
<textarea spellcheck="false" name="attr_combat_notes"></textarea>
</div>
<div class="grid nogap vsplit encumbrance">
<h3>Encumbrance</h3>
<div class="grid col2 vcol novgap">
<label>Current</label>
<input type="number" name="attr_encumbrance_current" />
<label>Maximum</label>
<input type="number" name="attr_encumbrance_max" />
</div>
<label class="hint">StrB + TghB</label>
</div>
</div>
</div>
</div>
<div class="grid nogap powers">
<h2>Psychic Powers
<span class="flex">
<label>Psychic Focus</label>
<input type="checkbox" name="attr_psychic_focus" value="1" />
</span>
</h2>
<div class="grid col10-powers">
<span class="label">Name</span>
<span class="label">Discipline</span>
<span class="label">Test</span>
<span class="label">Dmg</span>
<span class="label">WR</span>
<span class="label">Difficulty</span>
<span class="label">Range</span>
<span class="label">Target</span>
<span class="label">Duration</span>
<span class="label">Effect</span>
</div>
<fieldset class="repeating_powers">
<input type="text" spellcheck="false" name="attr_power_name" />
<select class="input" name="attr_power_specialisation">
<option value=""></option>
<option value="Minor (Biomancy)">Minor (Biomancy)</option>
<option value="Minor (Divination)">Minor (Divination)</option>
<option value="Minor (Pyromancy)">Minor (Pyromancy)</option>
<option value="Minor (Telekinesis)">Minor (Telekinesis)</option>
<option value="Minor (Telepathy)">Minor (Telepathy)</option>
<option value="Biomancy">Biomancy</option>
<option value="Divination">Divination</option>
<option value="Pyromancy">Pyromancy</option>
<option value="Telekinesis">Telekinesis</option>
<option value="Telepathy">Telepathy</option>
</select>
<button class="input" type="action" name="act_action" value="">
<span name="attr_power_total" />
</button>
<input type="number" name="attr_power_damage_total" />
<input type="number" name="attr_power_wr" />
<select class="input" name="attr_power_difficulty">
<option value=""></option>
<option value="60">Very Easy (+60)</option>
<option value="40">Easy (+40)</option>
<option value="20">Routine (+20)</option>
<option value="0">Challenging (+0)</option>
<option value="-10">Difficult (-10)</option>
<option value="-20">Hard (-20)</option>
<option value="-30">Very Hard (-30)</option>
</select>
<input type="text" spellcheck="false" name="attr_power_range" />
<input type="text" spellcheck="false" name="attr_power_target" />
<input type="text" spellcheck="false" name="attr_power_duration" />
<input type="checkbox" name="attr_power_details" value="1" />
<input class="toggle-details" type="hidden" name="attr_power_details" value="0" />
<div class="auto-expand span10">
<span name="attr_power_effect"></span>
<textarea spellcheck="false" name="attr_power_effect"></textarea>
</div>
</fieldset>
</div>
</div>
<!-- ++PATRON++ -->
<div class="grid patron widegap">
<div class="grid col3 vcol">
<input class="lrg" type="text" spellcheck="false" name="attr_character_name" />
<label>Patron Name</label>
<input type="text" spellcheck="false" list="faction" name="attr_patron_faction" />
<datalist id="patron_faction">
<option>Adeptus Administratum</option>
<option>Adeptus Astra Telepathica</option>
<option>Adeptus Mechanicus</option>
<option>Adeptus Ministorum</option>
<option>Astra Militarum</option>
<option>Imperial Fleet</option>
<option>Infractionist</option>
<option>The Inquisition</option>
<option>Rogue Trader Dynasty</option>
</datalist>
<label>Faction</label>
<input type="text" spellcheck="false" list="patron_duty" name="attr_patron_duty" />
<datalist id="patron_duty">
</datalist>
<label>Duty</label>
</div>
<div class="grid col3 vcol">
<input type="text" spellcheck="false" list="patron_pay_grade" name="attr_patron_pay_grade" />
<datalist id="patron_pay_grade">
<option>Poor</option>
<option>Standard</option>
<option>Good</option>
<option>Excellent</option>
</datalist>
<label>Pay Grade</label>
<input type="text" spellcheck="false" list="patron_motivation" name="attr_patron_motivation" />
<datalist id="patron_motivation">
<option>Conflict</option>
<option>Information</option>
<option>Material</option>
<option>Reputation</option>
<option>Unity</option>
</datalist>
<label>Motivation</label>
<input type="text" spellcheck="false" list="patron_demeanor" name="attr_patron_demeanour" />
<datalist id="patron_demeanor">
<option>Wrathful</option>
<option>Sombre</option>
<option>Pragmatic</option>
<option>Zealous</option>
<option>Inscrutable</option>
</datalist>
<label>Demeanor</label>
</div>
<div class="grid col2 widegap">
<div class="grid nogap">
<h2>Boons</h2>
<fieldset class="repeating_patronboons">
<input type="text" spellcheck="false" name="attr_boon_name"
placeholder="Boon" />
<div class="auto-expand">
<span name="attr_boon_effect"></span>
<textarea spellcheck="false" name="attr_boon_effect"></textarea>
</div>
</fieldset>
</div>
<div class="grid nogap">
<h2>Liabilities</h2>
<fieldset class="repeating_patronliabilities">
<input type="text" spellcheck="false" name="attr_liability_name"
placeholder="Boon" />
<div class="auto-expand">
<span name="attr_liability_effect"></span>
<textarea spellcheck="false" name="attr_liability_effect"></textarea>
</div>
</fieldset>
</div>
</div>
<div class="grid nogap">
<h2>Influence</h2>
<div class="grid col4-influences">
<span class="label">Faction</span>
<span class="label">Infl</span>
<span class="label">Contacts</span>
<span class="label">Intel</span>
</div>
<fieldset class="repeating_patroninfluences">
<input type="text" spellcheck="false" name="attr_influence_faction" />
<input type="number" name="attr_influence_value" />
<input type="text" spellcheck="false" name="attr_influence_contacts" />
<input type="text" spellcheck="false" name="attr_influence_intel" />
</fieldset>
</div>
<div class="grid nogap">
<h2>Notes</h2>
<div class="auto-expand">
<span name="attr_patron_notes"></span>
<textarea spellcheck="false" name="attr_patron_notes"></textarea>
</div>
</div>
</div>
<!-- ++NPC++ -->
<div class="grid npc widegap">
<div class="grid col5-npcname vcol">
<input class="lrg" type="text" spellcheck="false" name="attr_character_name" />
<label>Name</label>
<input type="text" spellcheck="false" list="size" name="attr_npc_size" />
<datalist id="size">
<option>Tiny</option>
<option>Small</option>
<option>Medium</option>
<option>Large</option>
<option>Enormous</option>
<option>Monstrous</option>
</datalist>
<label>Size</label>
<input type="text" spellcheck="false" list="type" name="attr_npc_type" />
<label>Type</label>
<input type="text" spellcheck="false" list="faction" name="attr_npc_faction" />
<label>Faction</label>
<input type="text" spellcheck="false" list="npc_role" name="attr_npc_role" />
<datalist id="npc_role">
<option>Troop</option>
<option>Elite</option>
<option>Leader</option>
</datalist>
<label>Role</label>
</div>
<div class="grid col2 widegap">
<div class="grid">
<div class="grid nogap lined">
<div class="grid col9">
<button class="input" type="action" name="act_npc_ws" value="">
<span class="label">WS</span>
</button>
<button class="input" type="action" name="act_npc_bs" value="">
<span class="label">BS</span>
</button>
<button class="input" type="action" name="act_npc_str" value="">
<span class="label">STR</span>
</button>
<button class="input" type="action" name="act_npc_tgh" value="">
<span class="label">TGH</span>
</button>
<button class="input" type="action" name="act_npc_ag" value="">
<span class="label">AG</span>
</button>
<button class="input" type="action" name="act_npc_int" value="">
<span class="label">INT</span>
</button>
<button class="input" type="action" name="act_npc_per" value="">
<span class="label">PER</span>
</button>
<button class="input" type="action" name="act_npc_wil" value="">
<span class="label">WIL</span>
</button>
<button class="input" type="action" name="act_npc_fel" value="">
<span class="label">FEL</span>
</button>
<input type="number" name="attr_npc_ws" tooltip="Weapon Skill" />
<input type="number" name="attr_npc_bs" tooltip="Ballistic Skill" />
<input type="number" name="attr_npc_str" tooltip="Strength" />
<input type="number" name="attr_npc_tgh" tooltip="Toughness" />
<input type="number" name="attr_npc_ag" tooltip="Agility" />
<input type="number" name="attr_npc_int" tooltip="Intelligence" />
<input type="number" name="attr_npc_per" tooltip="Perception" />
<input type="number" name="attr_npc_wil" tooltip="Willpower" />
<input type="number" name="attr_npc_fel" tooltip="Fellowship" />
</div>
</div>
<div class="grid col3 vcol">
<div class="grid col2 nogap split">
<input type="number" name="attr_npc_wounds" />
<input type="number" name="attr_npc_wounds_max" />
</div>
<label>Wounds</label>
<div class="grid col2 nogap split">
<input type="number" name="attr_npc_critical_wounds" />
<input type="number" name="attr_npc_critical_wounds_max" />
</div>
<label>Critical Wounds</label>
<div class="grid col2 nogap split">
<input type="number" name="attr_npc_warp_charge" />
<input type="number" name="attr_npc_warp_charge_max" />
</div>
<label>Warp Charge</label>
</div>
<div class="grid col4 vcol">
<input type="number" name="attr_npc_armour" />
<label>Armour</label>
<div class="grid col2">
<input type="number" name="attr_npc_initiative" />
<button class="input dice" type="roll" name="roll_npcinitiative" value="&{template:imbasic} {{reroll=[Reroll](~npcinitiative)}} {{name=@{character_name}}} {{topic=Initiative}} {{result=[[@{npc_initiative} &{tracker}]]}}" />
</div>
<label>Initiative</label>
<input type="text" spellcheck="false" list="speed" name="attr_npc_speed" />
<datalist id="speed">
<option>Normal</option>
<option>Fast</option>
<option>Slow</option>
</datalist>
<label>Speed</label>
<input type="number" name="attr_npc_resolve" />
<label>Resolve</label>
</div>
<div class="grid nogap">
<h3>Skills</h3>
<fieldset class="repeating_npcskills">
<input type="text" spellcheck="false" name="attr_npcskill_name" placeholder="Name" />
<input type="number" name="attr_npcskill_total" />
<button class="input dice" type="action" name="act_action" value="" />
</fieldset>
</div>
</div>
<div class="grid">
<div class="grid nogap">
<h2>Traits</h2>
<fieldset class="repeating_npctraits">
<input type="text" spellcheck="false" name="attr_npctrait_name" placeholder="Name" />
<div class="auto-expand">
<span name="attr_npctrait_effect"></span>
<textarea spellcheck="false" name="attr_npctrait_effect" placeholder="Effect"></textarea>
</div>
</fieldset>
</div>
<div class="grid nogap">
<h2>Possessions</h2>
<div class="auto-expand">
<span name="attr_npc_equipment"></span>
<textarea spellcheck="false" name="attr_npc_equipment" placeholder="Possessions"></textarea>
</div>
</div>
</div>
<div class="grid nogap span2">
<h2>Attacks</h2>
<div class="grid col7-npcattacks">
<span class="label">Name</span>
<span class="label">Skill</span>
<span class="label">Test</span>
<span class="label">WR</span>
<span class="label">Damage</span>
<span class="label">Range</span>
<span class="label">Traits</span>
</div>
<fieldset class="repeating_npcattacks">
<input type="text" spellcheck="false" name="attr_npcattack_name" placeholder="Name" />
<input type="text" spellcheck="false" name="attr_npcattack_skill" placeholder="Skill" />
<div class="grid col2">
<input type="number" name="attr_npcattack_total" placeholder="25" />
<button class="input dice" type="action" name="act_action" value="" />
</div>
<input type="number" name="attr_npcattack_wr" placeholder="0" />
<div class="auto-expand">
<span name="attr_npcattack_damage_info"></span>
<textarea spellcheck="false" name="attr_npcattack_damage_info" placeholder="4 + SL Damage"></textarea>
</div>
<select class="input" name="attr_npcattack_range" placeholder="Range">
<option value=""></option>
<option value="Immediate">Immediate</option>
<option value="Short">Short</option>
<option value="Medium">Medium</option>
<option value="Long">Long</option>
<option value="Extreme">Extreme</option>
</select>
<div class="auto-expand">
<span name="attr_npcattack_traits"></span>
<textarea spellcheck="false" name="attr_npcattack_traits" placeholder="Traits"></textarea>
</div>
</fieldset>
</div>
</div>
</div>
<!-- ++SETTINGS++ -->
<div class="grid settings widegap">
<h2>Settings</h2>
<div class="grid col4 vcol">
<select class="input" name="attr_sheet_type">
<option value="character">Character</option>
<option value="patron">Patron</option>
<option value="npc">NPC</option>
</select>
<label>Sheet Type</label>
</div>
</div>
<script type="text/worker">
const tab_list = ["page1","page2","patron","npc","settings"];
const chars_data = {
"ws": {"name": "Weapon Skill"},
"bs": {"name": "Ballistic Skill"},
"str": {"name": "Strength"},
"tgh": {"name": "Toughness"},
"ag": {"name": "Agility"},
"int": {"name": "Intelligence"},
"per": {"name": "Perception"},
"wil": {"name": "Willpower"},
"fel": {"name": "Fellowship"}
};
const skill_data = {
"athletics": {
"name": "Athletics",
"char": "str"
},
"awareness": {
"name": "Awareness",
"char": "per"
},
"dexterity": {
"name": "Dexterity",
"char": "ag"
},
"discipline": {
"name": "Discipline",
"char": "wil"
},
"fortitude": {
"name": "Fortitude",
"char": "tgh"
},
"intuition": {
"name": "Intuition",
"char": "per"
},
"linguistics": {
"name": "Linguistics",
"char": "int"
},
"logic": {
"name": "Logic",
"char": "int"
},
"lore": {
"name": "Lore",
"char": "int"
},
"medicae": {
"name": "Medicae",
"char": "int"
},
"melee": {
"name": "Melee",
"char": "ws"
},
"navigation": {
"name": "Navigation",
"char": "int"
},
"presence": {
"name": "Presence",
"char": "wil"
},
"piloting": {
"name": "Piloting",
"char": "ag"
},
"psychic_mastery": {
"name": "Psychic Mastery",
"char": "wil"
},
"ranged": {
"name": "Ranged",
"char": "bs"
},
"rapport": {
"name": "Rapport",
"char": "fel"
},
"reflexes": {
"name": "Reflexes",
"char": "ag"
},
"stealth": {
"name": "Stealth",
"char": "ag"
},
"tech": {
"name": "Tech",
"char": "int"
}
};
const melee_list = ["Brawling","One-handed","Two-handed"];
const ranged_list = ["Long Gun","Ordnance","Pistol","Thrown"];
const diff_data = {
"60": {"name": "Very Easy (+60)"},
"40": {"name": "Easy (+40)"},
"20": {"name": "Routine (+20)"},
"0": {"name": "Challenging (+0)"},
"-10": {"name": "Difficult (-10)"},
"-20": {"name": "Hard (-20)"},
"-30": {"name": "Very Hard (-30)"}
};
const hitloc_data = {
"1": {"name": "Head", "key": "head"},
"2": {"name": "Left Arm", "key": "larm"},
"3": {"name": "Right Arm", "key": "rarm"},
"4": {"name": "Left Leg", "key": "lleg"},
"5": {"name": "Right Leg", "key": "rleg"},
"6": {"name": "Body", "key": "body"},
"7": {"name": "Body", "key": "body"},
"8": {"name": "Body", "key": "body"},
"9": {"name": "Body", "key": "body"},
"0": {"name": "Body", "key": "body"}
};
const diff_list = [-30,-20,-10,0,20,40,60];
const chars_list = Object.keys(chars_data);
const chars_start_list = chars_list.map(i => "starting_" + i);
const chars_advances_list = chars_list.map(i => "advances_" + i);
const npc_chars_list = chars_list.map(i => "npc_" + i);
const skill_list = Object.keys(skill_data);
const skill_advances_list = skill_list.map(i => "skill_advances_" + i);
const chars_trigger_list = chars_start_list
.concat(chars_advances_list)
.concat(skill_advances_list)
.concat(["sanctioned"]);
tab_list.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({"tab": button});
});
});
chars_trigger_list.forEach(trigger => {
on(`change:${trigger}`, function() {
getAttrs(chars_trigger_list, function(values) {
let update = {};
let initiative = 0; // perB + agB
let wounds = 0; // strB + tghB * 2 + wilB
let encumbrance = 0; // strB + tghB
let warp = 0;
let sanctioned = parseInt(values["sanctioned"])||0;
chars_list.forEach(char => {
let start = parseInt(values[`starting_${char}`])||0;
let advances = parseInt(values[`advances_${char}`])||0;
let total = start + advances;
let bonus = getBonus(total);
if (char == "str") {
wounds += bonus;
encumbrance += bonus;
} else if (char == "tgh") {
wounds += bonus * 2;
encumbrance += bonus;
} else if (char == "per") {
initiative += bonus;
} else if (char == "ag") {
initiative += bonus;
} else if (char == "wil") {
wounds += bonus;
warp += sanctioned ? bonus * 2 : bonus;
}
update[`${char}`] = total;
update[`${char}_bonus`] = bonus;
skill_list.forEach(skill => {
if (skill_data[skill]["char"] == char) {
let sadvances = parseInt(values[`skill_advances_${skill}`])||0;
let stotal = total + sadvances * 5;
update[`${skill}`] = stotal;
}
});
});
update["initiative"] = initiative;
update["wounds_maximum"] = wounds;
update["encumbrance_max"] = encumbrance;
update["warp_charge_threshold"] = warp;
setAttrs(update);
});
});
});
const getBonus = function(char) {
return Math.floor(char / 10);
};
skill_list.forEach(trigger => {
on(`change:${trigger}`, function() {
getSectionIDs("repeating_specialisations", function(idarray) {
let fields = [];
for (var i=0; i < idarray.length; i++) {
let id = idarray[i];
fields.push(`repeating_specialisations_${id}_specialisation_skill`);
fields.push(`repeating_specialisations_${id}_specialisation_advances`);
}
getSectionIDs("repeating_weapons", function(idarray2) {
for (var i=0; i < idarray2.length; i++) {
let id = idarray2[i];
fields.push(`repeating_weapons_${id}_weapon_specialisation`);
}
getSectionIDs("repeating_powers", function(idarray3) {
for (var i=0; i < idarray3.length; i++) {
let id = idarray3[i];
fields.push(`repeating_powers_${id}_power_specialisation`);
}
getSectionIDs("repeating_specialisations2", function(idarray4) {
for (var i=0; i < idarray4.length; i++) {
let id = idarray4[i];
fields.push(`repeating_specialisations2_${id}_specialisation2_name`);
fields.push(`repeating_specialisations2_${id}_specialisation2_skill`);
fields.push(`repeating_specialisations2_${id}_specialisation2_advances`);
fields.push(`repeating_specialisations2_${id}_specialisation2_total`);
}
getAttrs(skill_list.concat(fields), function(values) {
let update = {};
for (var i=0; i < idarray3.length; i++) {
let id3 = idarray3[i];
let spec = values[`repeating_powers_${id3}_power_specialisation`];
let psychic = parseInt(values["psychic_mastery"])||0;
update[`repeating_powers_${id3}_power_total`] = psychic;
}
for (var i=0; i < idarray.length; i++) {
let id = idarray[i];
let skill = values[`repeating_specialisations_${id}_specialisation_skill`];
let advances = parseInt(values[`repeating_specialisations_${id}_specialisation_advances`])||0;
let total = (parseInt(values[`${skill}`])||0) + advances * 5;
update[`repeating_specialisations_${id}_specialisation_total`] = total;
if (["melee","ranged"].includes(skill)) {
for (var i=0; i < idarray2.length; i++) {
let id2 = idarray2[i];
let spec = values[`repeating_weapons_${id2}_weapon_specialisation`];
if (spec == skill) {
update[`repeating_weapons_${id2}_weapon_total`] = total;
}
}
} else if (skill == "psychic_mastery") {
for (var i=0; i < idarray3.length; i++) {
let id3 = idarray3[i];
let spec = values[`repeating_powers_${id3}_power_specialisation`];
spec = spec.replace("Minor (", "").replace(")", "");
if (spec == skill) {
update[`repeating_powers_${id3}_power_total`] = total;
}
}
}
}
for (var i=0; i < idarray4.length; i++) {
let id = idarray4[i];
let name = values[`repeating_specialisations2_${id}_specialisation2_name`];
let skill = values[`repeating_specialisations2_${id}_specialisation2_skill`];
let advances = parseInt(values[`repeating_specialisations2_${id}_specialisation2_advances`])||0;
let total = (parseInt(values[`${skill}`])||0) + advances * 5;
update[`repeating_specialisations2_${id}_specialisation2_total`] = total;
}
for (var i=0; i < idarray2.length; i++) {
let id2 = idarray2[i];
let spec = values[`repeating_weapons_${id2}_weapon_specialisation`];
let melee = parseInt(values["melee"])||0;
let ranged = parseInt(values["ranged"])||0;
for (var j=0; j < idarray4.length; j++) {
let id4 = idarray4[j];
let spec_name4 = values[`repeating_specialisations2_${id4}_specialisation2_name`];
if (spec_name4 == spec) {
let skill4 = values[`repeating_specialisations2_${id4}_specialisation2_skill`];
let advances4 = parseInt(values[`repeating_specialisations2_${id4}_specialisation2_advances`])||0;
let total = (parseInt(values[`${skill4}`])||0) + advances4 * 5;
melee = total;
ranged = total;
}
}
if (melee_list.includes(spec)) {
update[`repeating_weapons_${id2}_weapon_total`] = melee;
} else if (ranged_list.includes(spec)) {
update[`repeating_weapons_${id2}_weapon_total`] = ranged;
}
}
setAttrs(update);
});
});
});
});
});
});
});
on("change:repeating_specialisations", function(eventInfo) {
getSectionIDs("repeating_powers", function(idarray2) {
let fields = [];
for (var i=0; i < idarray2.length; i++) {
let id = idarray2[i];
fields.push(`repeating_powers_${id}_power_specialisation`);
}
getSectionIDs("repeating_specialisations", function(idarray4) {
for (var i=0; i < idarray4.length; i++) {
let id = idarray4[i];
fields.push(`repeating_specialisations_${id}_specialisation_name`);
fields.push(`repeating_specialisations_${id}_specialisation_skill`);
fields.push(`repeating_specialisations_${id}_specialisation_advances`);
fields.push(`repeating_specialisations_${id}_specialisation_total`);
}
getAttrs(skill_list.concat(fields)
.concat([
"repeating_specialisations_specialisation_name",
"repeating_specialisations_specialisation_skill",
"repeating_specialisations_specialisation_advances"
]), function(values) {
let update = {};
let name = values["repeating_specialisations_specialisation_name"];
let skill = values["repeating_specialisations_specialisation_skill"];
let advances = parseInt(values["repeating_specialisations_specialisation_advances"])||0;
let total = (parseInt(values[`${skill}`])||0) + advances * 5;
update[`repeating_specialisations_specialisation_total`] = total;
for (var i=0; i < idarray2.length; i++) {
let id = idarray2[i];
let spec = values[`repeating_powers_${id}_power_specialisation`];
spec = spec.replace("Minor (", "").replace(")", "");
if (spec == name) {
update[`repeating_powers_${id}_power_total`] = total;
}
}
setAttrs(update);
});
});
});
});
on("change:repeating_specialisations2", function(eventInfo) {
getSectionIDs("repeating_weapons", function(idarray) {
let fields = [];
for (var i=0; i < idarray.length; i++) {
let id = idarray[i];
fields.push(`repeating_weapons_${id}_weapon_specialisation`);
}
getSectionIDs("repeating_specialisations2", function(idarray4) {
for (var i=0; i < idarray4.length; i++) {
let id = idarray4[i];
fields.push(`repeating_specialisations2_${id}_specialisation2_name`);
fields.push(`repeating_specialisations2_${id}_specialisation2_skill`);
fields.push(`repeating_specialisations2_${id}_specialisation2_advances`);
fields.push(`repeating_specialisations2_${id}_specialisation2_total`);
}
getAttrs(skill_list.concat(fields)
.concat([
"repeating_specialisations2_specialisation2_name",
"repeating_specialisations2_specialisation2_skill",
"repeating_specialisations2_specialisation2_advances"
]), function(values) {
let update = {};
let name = values["repeating_specialisations2_specialisation2_name"];
let skill = values["repeating_specialisations2_specialisation2_skill"];
let advances = parseInt(values["repeating_specialisations2_specialisation2_advances"])||0;
let total = (parseInt(values[`${skill}`])||0) + advances * 5;
update[`repeating_specialisations2_specialisation2_total`] = total;
for (var i=0; i < idarray.length; i++) {
let id = idarray[i];
let spec = values[`repeating_weapons_${id}_weapon_specialisation`];
if (spec == name) {
update[`repeating_weapons_${id}_weapon_total`] = total;
}
}
setAttrs(update);
});
});
});
});
const repeating_data = {
"repeating_weapons": ["specialisation","damage"],
"repeating_powers": ["specialisation"]
};
Object.keys(repeating_data).forEach(repeater => {
let key = repeater.replace("repeating_", "");
key = key.slice(0, key.length - 1);
let triggers = [];
let trigger_fields = [];
repeating_data[repeater].forEach(trigger => {
triggers.push(`change:${repeater}:${key}_${trigger}`);
trigger_fields.push(`${repeater}_${key}_${trigger}`);
});
triggers = triggers.join(" ");
on(triggers, function(eventInfo) {
getSectionIDs("repeating_specialisations", function(idarray) {
let fields = [];
for (var i=0; i < idarray.length; i++) {
let id = idarray[i];
fields.push(`repeating_specialisations_${id}_specialisation_name`);
fields.push(`repeating_specialisations_${id}_specialisation_total`);
}
getSectionIDs("repeating_specialisations2", function(idarray5) {
for (var i=0; i < idarray5.length; i++) {
let id = idarray5[i];
fields.push(`repeating_specialisations2_${id}_specialisation2_name`);
fields.push(`repeating_specialisations2_${id}_specialisation2_skill`);
fields.push(`repeating_specialisations2_${id}_specialisation2_advances`);
fields.push(`repeating_specialisations2_${id}_specialisation2_total`);
}
getAttrs(skill_list.concat(fields)
.concat(["str_bonus"]).concat(trigger_fields), function(values) {
let update = {};
let spec = values[`${repeater}_${key}_specialisation`];
let melee = parseInt(values["melee"])||0;
let ranged = parseInt(values["ranged"])||0;
let psychic = parseInt(values["psychic_mastery"])||0;
let test = 0;
spec = repeater == "repeating_powers" ?
spec.replace("Minor (", "").replace(")", "") :
spec;
for (var i=0; i < idarray.length; i++) {
let id = idarray[i];
let name = values[`repeating_specialisations_${id}_specialisation_name`];
let total = parseInt(values[`repeating_specialisations_${id}_specialisation_total`])||0;
if (name == spec) {
test = total
break;
}
}
if (repeater == "repeating_weapons") {
test = test == 0 && melee_list.includes(spec) ? melee :
test == 0 && ranged_list.includes(spec) ? ranged :
test;
for (var i=0; i < idarray5.length; i++) {
let id = idarray5[i];
let name = values[`repeating_specialisations2_${id}_specialisation2_name`];
let advances = values[`repeating_specialisations2_${id}_specialisation2_advances`];
let total = parseInt(values[`repeating_specialisations2_${id}_specialisation2_total`])||0;
if (name == spec) {
test = total
break;
}
}
} else if (repeater == "repeating_powers") {
test = test == 0 ? psychic : test;
}
update[`${repeater}_${key}_total`] = test;
if (`${repeater}_${key}_damage` in values) {
let damage = parseInt(values[`${repeater}_${key}_damage`])||0;
let strb = parseInt(values["str_bonus"])||0;
damage = melee_list.includes(spec) ? damage + strb : damage;
update[`${repeater}_${key}_damage_total`] = damage;
}
setAttrs(update);
});
});
});
});
});
const test_list = ["difficulty","circumstances","superiority","psychic_focus"];
const button_list = chars_list.concat(skill_list).concat(npc_chars_list);
button_list.forEach(trigger => {
on(`clicked:${trigger}`, function(eventInfo) {
const field = eventInfo["triggerName"] ?
eventInfo["triggerName"].replace("clicked:", "") : "";
let reroll = field;
let skill_name = chars_list.includes(field) ? chars_data[field]["name"] :
skill_list.includes(field) ? skill_data[field]["name"] :
npc_chars_list.includes(field) ? chars_data[field.replace("npc_","")]["name"] : "";
if (!skill_name) return;
getAttrs(test_list.concat(button_list), function(values) {
let skill_total = parseInt(values[`${field}`])||0;
let diff_roll = parseInt(values["difficulty"])||0;
let circ = parseInt(values["circumstances"])||0;
let superiority = parseInt(values["superiority"])||0;
rollTest(reroll, skill_name, skill_total, diff_roll, circ, superiority);
});
});
});
const repeating_list = ["repeating_specialisations","repeating_specialisations2","repeating_weapons",
"repeating_powers","repeating_npcskills","repeating_npcattacks"];
repeating_list.forEach(trigger => {
on(`clicked:${trigger}:action`, function(eventInfo) {
const source = eventInfo["sourceAttribute"] ? eventInfo["sourceAttribute"] : "";
let reroll = source ? source : "roll";
let key = trigger.replace("repeating_", "");
key = key.slice(0, key.length - 1);
if (key == 'specialisations') {
key = 'specialisation2';
}
getAttrs(test_list.concat([
`${trigger}_${key}_name`,
`${trigger}_${key}_total`,
`${trigger}_${key}_damage_total`,
`${trigger}_${key}_damage_info`,
`${trigger}_${key}_difficulty`
]), function(values) {
let skill_name = values[`${trigger}_${key}_name`];
let skill_total = parseInt(values[`${trigger}_${key}_total`])||0;
let diff_roll = parseInt(values["difficulty"])||0;
if (`${trigger}_${key}_difficulty` in values) {
diff_roll = parseInt(values[`${trigger}_${key}_difficulty`])||0;
}
let circ = parseInt(values["circumstances"])||0;
let superiority = parseInt(values["superiority"])||0;
let slmod = trigger == "repeating_powers" ? (parseInt(values["psychic_focus"])||0) : 0;
let dmg = parseInt(values[`${trigger}_${key}_damage_total`])||-1;
let dmg_info = values[`${trigger}_${key}_damage_info`];
let critfum = trigger == "repeating_weapons";
rollTest(reroll, skill_name, skill_total, diff_roll, circ, superiority, dmg, dmg_info, slmod, critfum);
});
});
});
const rollTest = function(reroll, skill_name, skill_total, diff_roll, circ, superiority, dmg=-1, dmgi="", slmod=0, critfum=false) {
let circ_bonus = 0;
let circ_roll = "";
let adv_roll = "";
let disadv_roll = "";
let dmg_roll = "";
let dmg_info = dmgi ? ` {{damage_info=${dmgi}}}` : "";
let hitloc = "";
let adjustedsl = slmod > 0 ? ` {{adjustedsl=+${slmod}}}` :
slmod < 0 ? ` {{adjustedsl=${slmod}}}` : "";
if (circ > 0) {
circ_bonus = (circ - 1) * 10;
adv_roll = " {{advantage=[[0]]}}";
circ_roll = " {{circumstances=Advantage";
circ_roll += circ_bonus > 0 ? ` (+${circ_bonus})` : "";
circ_roll += "}}";
} else if (circ < 0) {
circ_bonus = (circ + 1) * 10;
disadv_roll = " {{disadvantage=[[0]]}}";;
circ_roll = " {{circumstances=Disadvantage";
circ_roll += circ_bonus < 0 ? ` (${circ_bonus})` : "";
circ_roll += "}}";
}
if (dmg > -1) {
dmg_roll = ` {{damage=[[${dmg}]]}}`;
}
if (dmg > -1 || dmgi) {
hitloc = ` {{hitlocation=[[0]]}}`;
}
startRoll(`&{template:imtest} {{reroll=[Reroll](~${reroll})}} `
.concat(`{{name=@{character_name}}} {{skill_name=${skill_name}}} `)
.concat(`{{skill_total=[[${skill_total}]]}} {{difficulty=[[${diff_roll}]]}} `)
.concat(`{{result=[[1d100]]}}${adv_roll}${disadv_roll}${circ_roll}${dmg_roll}${dmg_info}${hitloc} `)
.concat(`{{sl=[[0]]}} {{sl_info=[[0]]}} {{critical=[[0]]}} {{fumble=[[0]]}}${adjustedsl}`)
.concat(`{{superiority=${superiority}}}`), (results) => {
const result = results.results.result.result;
let digits = result.toString().split('').map(Number);
if (digits.length == 1) {
digits.push(0);
}
const difficulty = results.results.difficulty.result;
const diff_name = diff_data[`${difficulty}`]["name"];
// account for original SL that is better/worse
let final_result = result;
let final_total = skill_total + difficulty;
let final_sl = getSl(final_total, final_result, slmod, superiority);
if (circ != 0) {
final_total += circ_bonus;
let hi_result = result == 100 ? 100 :
Math.min(...digits) * 10 + Math.max(...digits);
let hi_sl = getSl(final_total, hi_result, slmod, superiority);
let lo_result = result == 100 ? 100 :
Math.max(...digits) * 10 + Math.min(...digits);
let lo_sl = getSl(final_total, lo_result, slmod, superiority);
if ((circ > 0 && parseInt(hi_sl) >= parseInt(lo_sl)) ||
(circ < 0 && parseInt(hi_sl) <= parseInt(lo_sl))) {
final_result = hi_result;
final_sl = hi_sl;
} else if ((circ > 0 && parseInt(lo_sl) >= parseInt(hi_sl)) ||
(circ < 0 && parseInt(lo_sl) <= parseInt(hi_sl))) {
final_result = lo_result;
final_sl = lo_sl;
}
}
let final_sl_info = getSlInfo(final_sl);
let crit = critfum && final_result <= final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0;
let fumb = critfum && final_result > final_total && final_result % 10 == Math.floor(final_result / 10) ? 1 : 0;
let u = final_result % 10;
let hitlocation = `${u}, ${hitloc_data[u]["name"]}`;
finishRoll(
results.rollId,
{
"result": final_result,
"difficulty": diff_name,
"skill_total": final_total,
"sl": final_sl,
"sl_info": final_sl_info,
"critical": crit,
"fumble": fumb,
"hitlocation": hitlocation
}
);
});
};
const getSl = function(skill, result, mod, superiority) {
let sl = Math.floor(skill / 10) - Math.floor(result / 10) + superiority;
sl += mod;
if ((result >= 96) && (sl > 0)) { // && skill > result) {
sl = `-0`;
} else if ((result <= 5) && (sl < 1)) { // && skill < result) {
sl = `+0`;
} else if (sl == 0 && (result <= skill || mod > 0)) {
sl = `+${sl}`;
} else if (sl == 0) {
sl = `-${sl}`;
} else if (sl > 0) {
sl = `+${sl}`;
} else {
sl = `${sl}`;
}
return sl;
};
const getSlInfo = function(sl) {
let info = "";
let isl = parseInt(sl)||0;
if (isl >= 5) {
info = "Astounding Success";
} else if (isl >= 3) {
info = "Impressive Success";
} else if (isl >= 1) {
info = "Success";
} else if (isl == 0) {
info = sl == "+0" ? "Marginal Success" : "Marginal Failure";
} else if (isl >= -2) {
info = "Failure";
} else if (isl >= -4) {
info = "Impressive Failure";
} else {
info = "Astounding Failure";
}
return info;
}
const patron_data = {
"Adeptus Administratum": [
{"value": "Departmento Munitorum Ordinate"},
{"value": "Tithe Prefectus"}
],
"Adeptus Astra Telepathica": [
{"value": "Astropath"},
{"value": "Sister of Silence"}
],
"Adeptus Mechanicus": [
{"value": "Forge Lord"},
{"value": "Magos Biologis"}
],
"Adeptus Ministorum": [
{"value": "Arch-Confessor"},
{"value": "Sororitas Canoness"}
],
"Astra Militarum": [
{"value": "Lord-Commissar"},
{"value": "Senior Officer"}
],
"Imperial Fleet": [
{"value": "Voidship Captain"},
{"value": "Port Commander"}
],
"Infractionist": [
{"value": "Criminal Mastermind"},
{"value": "Merchant Guilder"}
],
"The Inquisition": [
{"value": "Ordo Xenos Inquisitor"},
{"value": "Ordo Hereticus Inquisitor"}
],
"Rogue Trader Dynasty": [
{"value": "Diplomat"},
{"value": "Trader Militant"}
]
}
</script>
<rolltemplate class="sheet-rolltemplate-imtest">
<div class="container">
<p>++Incoming Transmission++</p>
<h1>{{name}}:
{{computed::result}},
{{computed::sl}} SL
</h1>
{{#rollGreater() computed::result 95}}
<p>//<strong>Automatic Failure</strong></p>
{{/rollGreater() computed::result 95}}
{{#rollLess() computed::result 6}}
<p>//<strong>Automatic Success</strong></p>
{{/rollLess() computed::result 6}}
{{#rollBetween() computed::result 6 95}}
<p>//{{computed::sl_info}}</p>
{{/rollBetween() computed::result 6 95}}
{{#rollTotal() computed::critical 1}}
<p><strong>//Critical</strong></p>
{{/rollTotal() computed::critical 1}}
{{#rollTotal() computed::fumble 1}}
<p><strong>//Fumble</strong></p>
{{/rollTotal() computed::fumble 1}}
<p>{{skill_name}}: {{skill_total}}%</p>
<p>//{{computed::difficulty}}</p>
{{#adjustedsl}}
<p>//Adjusted SL: {{adjustedsl}}</p>
{{/adjustedsl}}
{{#circumstances}}
<p>//{{circumstances}}</p>
{{/circumstances}}
<p>Test adjusted to {{computed::skill_total}}%</p>
{{#circumstances}}
<p>//Unmodified roll: {{result}}</p>
{{/circumstances}}
{{#rollLess() superiority 1 }}
{{#superiority}}
<p>//Superiority: {{superiority}}</p>
{{/superiority}}
{{/rollLess() superiority 1 }}
{{#damage}}
<p>Attack:</p>
<p>-Damage- {{damage}} {{computed::sl}} SL</p>
<p>-Hit Location- {{computed::hitlocation}}</p>
{{/damage}}
{{^damage}}
{{#damage_info}}
<p>Attack:</p>
<p>-Damage- {{damage_info}}</p>
<p>-Hit Location- {{computed::hitlocation}}</p>
{{/damage_info}}
{{/damage}}
<p>++End Transmission++</p>
<div class="options">
{{reroll}}
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-imbasic">
<div class="container">
<p>++Incoming Transmission++</p>
<h1>{{name}}: {{#result}}{{result}}, {{/result}}{{topic}}</h1>
{{#info}}
<p>{{info}}</p>
{{/info}}
<p>++End Transmission++</p>
<div class="options">
{{reroll}}
</div>
</div>
</rolltemplate>