Files
roll20-character-sheets/StarWars5E/StarWars5E_HTML.html
T
2024-06-03 13:15:14 -04:00

18497 lines
1.1 MiB
Plaintext
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="monster_confirm_flag" type="hidden" name="attr_monster_confirm_flag">
<div class="licensecontainer compendium-drop-target monsters">
<input class="npc_toggle" name="attr_npc" type="hidden" value="0">
<input type="hidden" class="npcpowercastingflag" name="attr_npcpowercastingflag">
<input type="hidden" class="toggleflag" name="attr_rtype">
<div class="advantagetoggle">
<input type="radio" class="toggle-left" name="attr_advantagetoggle" value="{{query=1}} {{advantage=1}} {{r2=[[@{d20}"><span data-i18n="adv-u">ADVANTAGE</span>
<input type="radio" class="toggle-center" name="attr_advantagetoggle" value="{{query=1}} {{normal=1}} {{r2=[[0d20" checked="checked"><span data-i18n="norm-u">NORMAL</span>
<input type="radio" class="toggle-right" name="attr_advantagetoggle" value="{{query=1}} {{disadvantage=1}} {{r2=[[@{d20}"><span data-i18n="disadv-u">DISADVANTAGE</span>
</div>
<input type="hidden" class="toggleflag" name="attr_wtype">
<div class="advantagetoggle whispertoggle">
<input type="radio" class="toggle-left" name="attr_whispertoggle" value="" checked="checked"><span data-i18n="public:-u">PUBLIC</span>
<input type="radio" class="toggle-right" name="attr_whispertoggle" value="/w gm "><span data-i18n="to-gm:-u">TO <span class="togm">GM</span></span>
</div>
<div class="container npc" style="width: 390px;">
<input class="npc_options-flag" type="checkbox" name="attr_npc_options-flag" checked="checked"><span>y</span>
<div class="npc_options">
<div class="row title">
<span data-i18n="npc-options-u">NPC OPTIONS</span>
</div>
<div class="row">
<span data-i18n="name-u">NAME</span>
<input type="text" name="attr_npc_name">
</div>
<div class="row">
<span data-i18n="npc-type-u">NPC TYPE</span>
<input type="text" name="attr_npc_type" placeholder="Medium fiend, any evil alignment" data-i18n-placeholder="npc-type-place">
</div>
<div class="row">
<span data-i18n="armor-class-u">ARMOR CLASS</span>
<input class="num" type="text" name="attr_npc_ac" placeholder="10">
<span data-i18n="type-u">TYPE</span>
<input type="text" name="attr_npc_actype" placeholder="scale mail" data-i18n-placeholder="npc-armor-place" value="">
</div>
<div class="row">
<span data-i18n="hit-points-u">HIT POINTS</span>
<input class="num" type="text" name="attr_hp_max" placeholder="82">
<span data-i18n="formula-u">FORMULA</span>
<input type="text" name="attr_npc_hpformula" placeholder="11d8 + 33">
</div>
<div class="row">
<span data-i18n="speed-u">SPEED</span>
<input type="text" name="attr_npc_speed" placeholder="30 ft., fly 60ft." data-i18n-placeholder="npc-speed-place">
</div>
<div class="spacer"></div>
<div class="row">
<span data-i18n="attributes-u">ATTRIBUTES</span>
</div>
<div class="row">
<span data-i18n="str-u">STR</span>
<input class="num" type="text" name="attr_strength_base" value="10">
<span data-i18n="dex-u">DEX</span>
<input class="num" type="text" name="attr_dexterity_base" value="10">
<span data-i18n="con-u">CON</span>
<input class="num" type="text" name="attr_constitution_base" value="10">
<span data-i18n="int-u">INT</span>
<input class="num" type="text" name="attr_intelligence_base" value="10">
<span data-i18n="wis-u">WIS</span>
<input class="num" type="text" name="attr_wisdom_base" value="10">
<span data-i18n="cha-u">CHA</span>
<input class="num" type="text" name="attr_charisma_base" value="10">
</div>
<div class="spacer"></div>
<div class="row">
<span data-i18n="saves-u">SAVES</span>
</div>
<div class="row">
<span data-i18n="str-u">STR</span>
<input class="num" type="text" name="attr_npc_str_save_base" placeholder="0">
<span data-i18n="dex-u">DEX</span>
<input class="num" type="text" name="attr_npc_dex_save_base" placeholder="0">
<span data-i18n="con-u">CON</span>
<input class="num" type="text" name="attr_npc_con_save_base" placeholder="0">
<span data-i18n="int-u">INT</span>
<input class="num" type="text" name="attr_npc_int_save_base" placeholder="0">
<span data-i18n="wis-u">WIS</span>
<input class="num" type="text" name="attr_npc_wis_save_base" placeholder="0">
<span data-i18n="cha-u">CHA</span>
<input class="num" type="text" name="attr_npc_cha_save_base" placeholder="0">
<input type="hidden" name="attr_npc_str_save" value="@{strength_mod}">
<input type="hidden" name="attr_npc_dex_save" value="@{dexterity_mod}">
<input type="hidden" name="attr_npc_con_save" value="@{constitution_mod}">
<input type="hidden" name="attr_npc_int_save" value="@{intelligence_mod}">
<input type="hidden" name="attr_npc_wis_save" value="@{wisdom_mod}">
<input type="hidden" name="attr_npc_cha_save" value="@{charisma_mod}">
</div>
<div class="spacer"></div>
<div class="row">
<span data-i18n="skills-u">SKILLS</span>
</div>
<div class="row skills-list" data-i18n-list="skills-list">
<div class="col">
<div class="row" data-i18n-list-item="acrobatics">
<span data-i18n="acrobatics-u">ACROBATICS</span>
<input class="num" type="text" name="attr_npc_acrobatics_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="animal_handling">
<span data-i18n="animal_handling-u">ANIMAL HANDLING</span>
<input class="num" type="text" name="attr_npc_animal_handling_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="athletics">
<span data-i18n="athletics-u">ATHLETICS</span>
<input class="num" type="text" name="attr_npc_athletics_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="deception">
<span data-i18n="deception-u">DECEPTION</span>
<input class="num" type="text" name="attr_npc_deception_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="insight">
<span data-i18n="insight-u">INSIGHT</span>
<input class="num" type="text" name="attr_npc_insight_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="intimidation">
<span data-i18n="intimidation-u">INTIMIDATION</span>
<input class="num" type="text" name="attr_npc_intimidation_base" placeholder="0">
</div>
</div>
<div class="col" data-i18n-list-sublist>
<div class="row" data-i18n-list-item="investigation">
<span data-i18n="investigation-u">INVESTIGATION</span>
<input class="num" type="text" name="attr_npc_investigation_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="lore">
<span data-i18n="lore-u">LORE</span>
<input class="num" type="text" name="attr_npc_lore_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="medicine">
<span data-i18n="medicine-u">MEDICINE</span>
<input class="num" type="text" name="attr_npc_medicine_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="nature">
<span data-i18n="nature-u">NATURE</span>
<input class="num" type="text" name="attr_npc_nature_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="perception">
<span data-i18n="perception-u">PERCEPTION</span>
<input class="num" type="text" name="attr_npc_perception_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="performance">
<span data-i18n="performance-u">PERFORMANCE</span>
<input class="num" type="text" name="attr_npc_performance_base" placeholder="0">
</div>
</div>
<div class="col" data-i18n-list-sublist>
<div class="row" data-i18n-list-item="persuasion">
<span data-i18n="persuasion-u">PERSUASION</span>
<input class="num" type="text" name="attr_npc_persuasion_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="piloting">
<span data-i18n="piloting-u">PILOTING</span>
<input class="num" type="text" name="attr_npc_piloting_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="sleight_of_hand">
<span data-i18n="sleight_of_hand-u">SLEIGHT OF HAND</span>
<input class="num" type="text" name="attr_npc_sleight_of_hand_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="stealth">
<span data-i18n="stealth-u">STEALTH</span>
<input class="num" type="text" name="attr_npc_stealth_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="survival">
<span data-i18n="survival-u">SURVIVAL</span>
<input class="num" type="text" name="attr_npc_survival_base" placeholder="0">
</div>
<div class="row" data-i18n-list-item="technology">
<span data-i18n="technology-u">TECHNOLOGY</span>
<input class="num" type="text" name="attr_npc_technology_base" placeholder="0">
</div>
</div>
<input type="hidden" name="attr_npc_acrobatics" value="@{dexterity_mod}">
<input type="hidden" name="attr_npc_animal_handling" value="@{wisdom_mod}">
<input type="hidden" name="attr_npc_athletics" value="@{strength_mod}">
<input type="hidden" name="attr_npc_deception" value="@{charisma_mod}">
<input type="hidden" name="attr_npc_insight" value="@{wisdom_mod}">
<input type="hidden" name="attr_npc_intimidation" value="@{charisma_mod}">
<input type="hidden" name="attr_npc_investigation" value="@{intelligence_mod}">
<input type="hidden" name="attr_npc_lore" value="@{intelligence_mod}">
<input type="hidden" name="attr_npc_medicine" value="@{wisdom_mod}">
<input type="hidden" name="attr_npc_nature" value="@{intelligence_mod}">
<input type="hidden" name="attr_npc_perception" value="@{wisdom_mod}">
<input type="hidden" name="attr_npc_performance" value="@{charisma_mod}">
<input type="hidden" name="attr_npc_persuasion" value="@{charisma_mod}">
<input type="hidden" name="attr_npc_piloting" value="@{intelligence_mod}">
<input type="hidden" name="attr_npc_sleight_of_hand" value="@{dexterity_mod}">
<input type="hidden" name="attr_npc_stealth" value="@{dexterity_mod}">
<input type="hidden" name="attr_npc_survival" value="@{wisdom_mod}">
<input type="hidden" name="attr_npc_technology" value="@{intelligence_mod}">
</div>
<div class="row">
<span data-i18n="damage-vuln-u">DAMAGE VULNERABILITIES</span>
<input type="text" name="attr_npc_vulnerabilities" placeholder="fire" data-i18n-placeholder="npc-dmg-vuln-place">
</div>
<div class="row">
<span data-i18n="damage-res-u">DAMAGE RESISTANCES</span>
<input type="text" name="attr_npc_resistances" placeholder="cold" data-i18n-placeholder="npc-dmg-res-place">
</div>
<div class="row">
<span data-i18n="damage-imm-u">DAMAGE IMMUNITIES</span>
<input type="text" name="attr_npc_immunities" placeholder="lighting, thunder" data-i18n-placeholder="npc-dmg-imm-place">
</div>
<div class="row">
<span data-i18n="cond-imm-u">CONDITION IMMUNITIES</span>
<input type="text" name="attr_npc_condition_immunities" placeholder="charmed" data-i18n-placeholder="npc-cond-imm-place">
</div>
<div class="row">
<span data-i18n="senses-u">SENSES</span>
<input type="text" name="attr_npc_senses" placeholder="darkvision 120ft., passive Perception 16" data-i18n-placeholder="npc-senses-place">
</div>
<div class="row">
<span data-i18n="langs-u">LANGUAGES</span>
<input type="text" name="attr_npc_languages" placeholder="Abyssal, Common, Infernal" value="—" data-i18n-placeholder="npc-langs-place">
</div>
<div class="row">
<span data-i18n="challenge-u">CHALLENGE</span>
<input class="num" type="text" name="attr_npc_challenge" placeholder="1">
<span data-i18n="xp-u">XP</span>
<input type="text" name="attr_npc_xp" placeholder="250">
</div>
<div class="row">
<span data-i18n="token_size-u">TOKEN SIZE</span>
<input class="text" name="attr_token_size" value="1" placeholder="1">
</div>
<div class="row">
<input class="npcpowercastingflag" type="checkbox" name="attr_npcpowercastingflag" value="1">
<span data-i18n="powercast-npc-u">POWERCASTING NPC</span>
<div class="npcpoweroptions">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_powercasting_ability" style="margin: 0px; width: auto; padding: 0px; height: 15px;">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="npcpoweroptions">
<div class="row">
<span data-i18n="glob-atk-mod:-u">GLOBAL POWER ATTACK MODIFIER:</span>
<input type="text" class="num" name="attr_globalpowermod" placeholder="0" value="0">
</div>
<div class="row">
<span data-i18n="power-caster-lvl:-u">POWER CASTER LEVEL:</span>
<input type="text" class="num" name="attr_caster_level">
</div>
<div class="row">
<span data-i18n="power_dc_mod:-u">POWER SAVE DC MOD:</span>
<input type="text" class="num" name="attr_power_dc_mod" placeholde="0" value="0">
</div>
</div>
</div>
<div class="row">
<input type="checkbox" name="attr_npcreactionsflag" value="1">
<span data-i18n="has-reaction-u">HAS REACTIONS</span>
</div>
<div class="row">
<span data-i18n="leg-actions:-u">LEGENDARY ACTIONS:</span>
<input class="num" type="text" name="attr_npc_legendary_actions" value="0" placeholder="0">
</div>
<div class="row title">
<span data-i18n="gen-opts-u">GENERAL OPTIONS</span>
</div>
<div class="row">
<span>SHEET TYPE:</span>
<select name="attr_npc">
<option value="0">PC</option>
<option value="1">NPC</option>
<option value="2">Ship</option>
</select>
</div>
<div class="row">
<span data-i18n="roll-queries:-u">ROLL QUERIES:</span>
<select name="attr_rtype">
<option value="{{always=1}} {{r2=[[@{d20}" data-i18n="always-adv">Always Roll Advantage</option>
<option value="@{advantagetoggle}" data-i18n="adv-toggle">Advantage Toggle</option>
<option value="{{query=1}} ?{Advantage?|Normal Roll,&#123&#123normal=1&#125&#125 &#123&#123r2=[[0d20|Advantage,&#123&#123advantage=1&#125&#125 &#123&#123r2=[[@{d20}|Disadvantage,&#123&#123disadvantage=1&#125&#125 &#123&#123r2=[[@{d20}}" data-i18n="query-adv">Query Advantage</option>
<option value="{{normal=1}} {{r2=[[0d20" data-i18n="never-adv">Never Roll Advantage</option>
</select>
</div>
<div class="row">
<span data-i18n="whisp-rolls-gm:-u">WHISPER ROLLS TO GM:</span>
<select name="attr_wtype">
<option value="" data-i18n="never-whisper-roll">Never Whisper Rolls</option>
<option value="@{whispertoggle}" data-i18n="toggle-roll-whisper">Whisper Toggle</option>
<option value="?{Whisper?|Public Roll,|Whisper Roll,/w gm }" data-i18n="query-whisper-roll">Query Whisper</option>
<option value="/w gm " data-i18n="always-whisper-roll">Always Whisper Rolls</option>
</select>
</div>
<div class="row">
<span data-i18n="auto-dmg-roll:-u">AUTO DAMAGE ROLL:</span>
<select class="dtype" name="attr_dtype">
<option value="pick" data-i18n="never-dmg">Don't Auto Roll Damage</option>
<option value="full" data-i18n="always-dmg">Auto Roll Damage & Crit</option>
</select>
</div>
<div class="row">
<span data-i18n="npc-name-in-rolls:-u">NPC NAME IN ROLLS:</span>
<select name="attr_npc_name_flag">
<option value="{{name=@{npc_name}}}" data-i18n="show">Show</option>
<option value="0" data-i18n="hide">Hide</option>
</select>
</div>
<div class="row">
<input type="checkbox" name="attr_init_tiebreaker" value="@{dexterity}/100">
<span data-i18n="add-dex-tiebreaker-u">ADD DEX TIEBREAKER TO INITIATIVE</span>
</div>
</div>
<div class="display">
<div class="row title red">
<button type="roll" name="roll_npc_init" style="width: 100%;" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{init}}} {{mod=[[[[@{initiative_bonus}]][DEX]]]}} {{r1=[[@{d20}+[[@{initiative_bonus}]][DEX] &{tracker}]]}} {{normal=1}} {{type=Initiative}}">
<span name="attr_npc_name"></span>
</button>
</div>
<div class="row subtitle" style="margin-top: -5px;">
<span class="italics" name="attr_npc_type"></span>
</div>
<div class="triangle"></div>
<div class="row red" style="position:relative;">
<span data-i18n="ac" class="bold">Armor Class</span>
<span class="num" name="attr_npc_ac"></span>
<input class="actype" type="hidden" name="attr_npc_actype" value="">
<span class="parens" name="attr_npc_actype"></span>
<button type="roll" name="roll_npc_init" style="position: absolute; right: 5px; height: 30px; width: 20px;" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{init}}} {{mod=[[[[@{initiative_bonus}]][DEX]]]}} {{r1=[[@{d20}+[[@{initiative_bonus}]][DEX] &{tracker}]]}} {{normal=1}} {{type=Initiative}}">
<span class="npc-init-die">t</span>
<span style="display: block;">INIT</span>
</button>
</div>
<div class="row red">
<span data-i18n="hp" class="bold">Hit Points</span>
<span class="num3" name="attr_hp_max"></span>
<button type="roll" name="roll_npc_hpformula" value="@{wtype}&{template:npc} {{type=Hit Points}} {{normal=1}} @{npc_name_flag} {{rname=^{hp}}} {{mod=@{npc_hpformula}}} {{r1=[[@{npc_hpformula}]]}} charname=@{character_name}">
<span class="parens" name="attr_npc_hpformula" style="font-size: 12px; font-weight: normal;"></span>
</button>
</div>
<div class="row red">
<span data-i18n="speed" class="bold">Speed</span>
<span name="attr_npc_speed"></span>
</div>
<div class="triangle"></div>
<div class="row red">
<div class="attr-container">
<button type="roll" name="roll_npc_str" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{strength}}} {{mod=[[[[@{strength_mod}]][STR]]]}} {{r1=[[@{d20}+[[@{strength_mod}]][STR]]]}} @{rtype}+[[@{strength_mod}]][STR]]]}} {{type=Ability}}">
<span class="bold" data-i18n="str-u">STR</span>
<span name="attr_strength"></span>
<input class="negativeflag" type="hidden" name="attr_npc_str_negative" value="0">
<span class="npcattr" name="attr_strength_mod"></span>
</button>
</div>
<div class="attr-container">
<button type="roll" name="roll_npc_dex" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{dexterity}}} {{mod=[[[[@{dexterity_mod}]][DEX]]]}} {{r1=[[@{d20}+[[@{dexterity_mod}]][DEX]]]}} @{rtype}+[[@{dexterity_mod}]][DEX]]]}} {{type=Ability}}">
<span class="bold" data-i18n="dex-u">DEX</span>
<span name="attr_dexterity"></span>
<input class="negativeflag" type="hidden" name="attr_npc_dex_negative" value="0">
<span class="npcattr" name="attr_dexterity_mod"></span>
</button>
</div>
<div class="attr-container">
<button type="roll" name="roll_npc_con" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{constitution}}} {{mod=[[[[@{constitution_mod}]][CON]]]}} {{r1=[[@{d20}+[[@{constitution_mod}]][CON]]]}} @{rtype}+[[@{constitution_mod}]][CON]]]}} {{type=Ability}}">
<span class="bold" data-i18n="con-u">CON</span>
<span name="attr_constitution"></span>
<input class="negativeflag" type="hidden" name="attr_npc_con_negative" value="0">
<span class="npcattr" name="attr_constitution_mod"></span>
</button>
</div>
<div class="attr-container">
<button type="roll" name="roll_npc_int" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{intelligence}}} {{mod=[[[[@{intelligence_mod}]][INT]]]}} {{r1=[[@{d20}+[[@{intelligence_mod}]][INT]]]}} @{rtype}+[[@{intelligence_mod}]][INT]]]}} {{type=Ability}}">
<span class="bold" data-i18n="int-u">INT</span>
<span name="attr_intelligence"></span>
<input class="negativeflag" type="hidden" name="attr_npc_int_negative" value="0">
<span class="npcattr" name="attr_intelligence_mod"></span>
</button>
</div>
<div class="attr-container">
<button type="roll" name="roll_npc_wis" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{wisdom}}} {{mod=[[[[@{wisdom_mod}]][WIS]]]}} {{r1=[[@{d20}+[[@{wisdom_mod}]][WIS]]]}} @{rtype}+[[@{wisdom_mod}]][WIS]]]}} {{type=Ability}}">
<span class="bold" data-i18n="wis-u">WIS</span>
<span name="attr_wisdom"></span>
<input class="negativeflag" type="hidden" name="attr_npc_wis_negative" value="0">
<span class="npcattr" name="attr_wisdom_mod"></span>
</button>
</div>
<div class="attr-container">
<button type="roll" name="roll_npc_cha" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{charisma}}} {{mod=[[[[@{charisma_mod}]][CHA]]]}} {{r1=[[@{d20}+[[@{charisma_mod}]][CHA]]]}} @{rtype}+[[@{charisma_mod}]][CHA]]]}} {{type=Ability}}">
<span class="bold" data-i18n="cha-u">CHA</span>
<span name="attr_charisma"></span>
<input class="negativeflag" type="hidden" name="attr_npc_cha_negative" value="0">
<span class="npcattr" name="attr_charisma_mod"></span>
</button>
</div>
</div>
<div class="triangle"></div>
<input class="flag" type="hidden" name="attr_npc_saving_flag" value="">
<div class="row saving red">
<span class="bold" data-i18n="saving-throw">Saving Throws</span>
<input class="flag" type="hidden" name="attr_npc_str_save_flag" value="0">
<button type="roll" name="roll_npc_str_save" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{strength-save}}} {{mod=[[[[@{npc_str_save}]][STR SAVE]]]}} {{r1=[[@{d20}+[[@{npc_str_save}]][STR SAVE]]]}} @{rtype}+[[@{npc_str_save}]][STR SAVE]]]}} {{type=Save}}">
<span data-i18n="str">Str</span>
<span class="stat" name="attr_npc_str_save"></span>
</button>
<input class="flag" type="hidden" name="attr_npc_dex_save_flag" value="0">
<button type="roll" name="roll_npc_dex_save" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{dexterity-save}}} {{mod=[[[[@{npc_dex_save}]][DEX SAVE]]]}} {{r1=[[@{d20}+[[@{npc_dex_save}]][DEX SAVE]]]}} @{rtype}+[[@{npc_dex_save}]][DEX SAVE]]]}} {{type=Save}}">
<span data-i18n="dex">Dex</span>
<span class="stat" name="attr_npc_dex_save"></span>
</button>
<input class="flag" type="hidden" name="attr_npc_con_save_flag" value="0">
<button type="roll" name="roll_npc_con_save" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{constitution-save}}} {{mod=[[[[@{npc_con_save}]][CON SAVE]]]}} {{r1=[[@{d20}+[[@{npc_con_save}]][CON SAVE]]]}} @{rtype}+[[@{npc_con_save}]][CON SAVE]]]}} {{type=Save}}">
<span data-i18n="con">Con</span>
<span class="stat" name="attr_npc_con_save"></span>
</button>
<input class="flag" type="hidden" name="attr_npc_int_save_flag" value="0">
<button type="roll" name="roll_npc_int_save" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{intelligence-save}}} {{mod=[[[[@{npc_int_save}]][INT SAVE]]]}} {{r1=[[@{d20}+[[@{npc_int_save}]][INT SAVE]]]}} @{rtype}+[[@{npc_int_save}]][INT SAVE]]]}} {{type=Save}}">
<span data-i18n="int">Int</span>
<span class="stat" name="attr_npc_int_save"></span>
</button>
<input class="flag" type="hidden" name="attr_npc_wis_save_flag" value="0">
<button type="roll" name="roll_npc_wis_save" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{wisdom-save}}} {{mod=[[[[@{npc_wis_save}]][WIS SAVE]]]}} {{r1=[[@{d20}+[[@{npc_wis_save}]][WIS SAVE]]]}} @{rtype}+[[@{npc_wis_save}]][WIS SAVE]]]}} {{type=Save}}">
<span data-i18n="wis">Wis</span>
<span class="stat" name="attr_npc_wis_save"></span>
</button>
<input class="flag" type="hidden" name="attr_npc_cha_save_flag" value="0">
<button type="roll" name="roll_npc_cha_save" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{charisma-save}}} {{mod=[[[[@{npc_cha_save}]][CHA SAVE]]]}} {{r1=[[@{d20}+[[@{npc_cha_save}]][CHA SAVE]]]}} @{rtype}+[[@{npc_cha_save}]][CHA SAVE]]]}} {{type=Save}}">
<span data-i18n="cha">Cha</span>
<span class="stat" name="attr_npc_cha_save"></span>
</button>
</div>
<input class="flag" type="hidden" name="attr_npc_skills_flag" value="">
<div class="row skills skills-list red" data-i18n-list="skills-list">
<span class="bold" data-i18n="skills">Skills</span>
<span data-i18n-list-item="acrobatics">
<input class="flag" type="hidden" name="attr_npc_acrobatics_flag" value="0">
<button type="roll" name="roll_npc_acrobatics" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{acrobatics}}} {{mod=@{npc_acrobatics}}} {{r1=[[@{d20}+@{npc_acrobatics}]]}} @{rtype}+@{npc_acrobatics}]]}} {{type=Skill}}">
<span data-i18n="acrobatics">Acrobatics</span>
<span class="stat" name="attr_npc_acrobatics"></span>
</button>
</span>
<span data-i18n-list-item="animal_handling">
<input class="flag" type="hidden" name="attr_npc_animal_handling_flag" value="0">
<button type="roll" name="roll_npc_animal_handling" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{animal_handling}}} {{mod=@{npc_animal_handling}}} {{r1=[[@{d20}+@{npc_animal_handling}]]}} @{rtype}+@{npc_animal_handling}]]}} {{type=Skill}}">
<span data-i18n="animal_handling">Animal Handling</span>
<span class="stat" name="attr_npc_animal_handling"></span>
</button>
</span>
<span data-i18n-list-item="athletics">
<input class="flag" type="hidden" name="attr_npc_athletics_flag" value="0">
<button type="roll" name="roll_npc_athletics" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{athletics}}} {{mod=@{npc_athletics}}} {{r1=[[@{d20}+@{npc_athletics}]]}} @{rtype}+@{npc_athletics}]]}} {{type=Skill}}">
<span data-i18n="athletics">Athletics</span>
<span class="stat" name="attr_npc_athletics"></span>
</button>
</span>
<span data-i18n-list-item="deception">
<input class="flag" type="hidden" name="attr_npc_deception_flag" value="0">
<button type="roll" name="roll_npc_deception" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{deception}}} {{mod=@{npc_deception}}} {{r1=[[@{d20}+@{npc_deception}]]}} @{rtype}+@{npc_deception}]]}} {{type=Skill}}">
<span data-i18n="deception">Deception</span>
<span class="stat" name="attr_npc_deception"></span>
</button>
</span>
<span data-i18n-list-item="insight">
<input class="flag" type="hidden" name="attr_npc_insight_flag" value="0">
<button type="roll" name="roll_npc_insight" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{insight}}} {{mod=@{npc_insight}}} {{r1=[[@{d20}+@{npc_insight}]]}} @{rtype}+@{npc_insight}]]}} {{type=Skill}}">
<span data-i18n="insight">Insight</span>
<span class="stat" name="attr_npc_insight"></span>
</button>
</span>
<span data-i18n-list-item="intimidation">
<input class="flag" type="hidden" name="attr_npc_intimidation_flag" value="0">
<button type="roll" name="roll_npc_intimidation" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{intimidation}}} {{mod=@{npc_intimidation}}} {{r1=[[@{d20}+@{npc_intimidation}]]}} @{rtype}+@{npc_intimidation}]]}} {{type=Skill}}">
<span data-i18n="intimidation">Intimidation</span>
<span class="stat" name="attr_npc_intimidation"></span>
</button>
</span>
<span data-i18n-list-item="investigation">
<input class="flag" type="hidden" name="attr_npc_investigation_flag" value="0">
<button type="roll" name="roll_npc_investigation" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{investigation}}} {{mod=@{npc_investigation}}} {{r1=[[@{d20}+@{npc_investigation}]]}} @{rtype}+@{npc_investigation}]]}} {{type=Skill}}">
<span data-i18n="investigation">Investigation</span>
<span class="stat" name="attr_npc_investigation"></span>
</button>
</span>
<span data-i18n-list-item="lore">
<input class="flag" type="hidden" name="attr_npc_lore_flag" value="0">
<button type="roll" name="roll_npc_lore" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{lore}}} {{mod=@{npc_lore}}} {{r1=[[@{d20}+@{npc_lore}]]}} @{rtype}+@{npc_lore}]]}} {{type=Skill}}">
<span data-i18n="lore">Lore</span>
<span class="stat" name="attr_npc_lore"></span>
</button>
</span>
<span data-i18n-list-item="medicine">
<input class="flag" type="hidden" name="attr_npc_medicine_flag" value="0">
<button type="roll" name="roll_npc_medicine" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{medicine}}} {{mod=@{npc_medicine}}} {{r1=[[@{d20}+@{npc_medicine}]]}} @{rtype}+@{npc_medicine}]]}} {{type=Skill}}">
<span data-i18n="medicine">Medicine</span>
<span class="stat" name="attr_npc_medicine"></span>
</button>
</span>
<span data-i18n-list-item="nature">
<input class="flag" type="hidden" name="attr_npc_nature_flag" value="0">
<button type="roll" name="roll_npc_nature" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{nature}}} {{mod=@{npc_nature}}} {{r1=[[@{d20}+@{npc_nature}]]}} @{rtype}+@{npc_nature}]]}} {{type=Skill}}">
<span data-i18n="nature">Nature</span>
<span class="stat" name="attr_npc_nature"></span>
</button>
</span>
<span data-i18n-list-item="perception">
<input class="flag" type="hidden" name="attr_npc_perception_flag" value="0">
<button type="roll" name="roll_npc_perception" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{perception}}} {{mod=@{npc_perception}}} {{r1=[[@{d20}+@{npc_perception}]]}} @{rtype}+@{npc_perception}]]}} {{type=Skill}}">
<span data-i18n="perception">Perception</span>
<span class="stat" name="attr_npc_perception"></span>
</button>
</span>
<span data-i18n-list-item="performance">
<input class="flag" type="hidden" name="attr_npc_performance_flag" value="0">
<button type="roll" name="roll_npc_performance" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{performance}}} {{mod=@{npc_performance}}} {{r1=[[@{d20}+@{npc_performance}]]}} @{rtype}+@{npc_performance}]]}} {{type=Skill}}">
<span data-i18n="performance">Performance</span>
<span class="stat" name="attr_npc_performance"></span>
</button>
</span>
<span data-i18n-list-item="persuasion">
<input class="flag" type="hidden" name="attr_npc_persuasion_flag" value="0">
<button type="roll" name="roll_npc_persuasion" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{persuasion}}} {{mod=@{npc_persuasion}}} {{r1=[[@{d20}+@{npc_persuasion}]]}} @{rtype}+@{npc_persuasion}]]}} {{type=Skill}}">
<span data-i18n="persuasion">Persuasion</span>
<span class="stat" name="attr_npc_persuasion"></span>
</button>
</span>
<span data-i18n-list-item="piloting">
<input class="flag" type="hidden" name="attr_npc_piloting_flag" value="0">
<button type="roll" name="roll_npc_piloting" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{piloting}}} {{mod=@{npc_piloting}}} {{r1=[[@{d20}+@{npc_piloting}]]}} @{rtype}+@{npc_piloting}]]}} {{type=Skill}}">
<span data-i18n="piloting">Piloting</span>
<span class="stat" name="attr_npc_piloting"></span>
</button>
</span>
<span data-i18n-list-item="sleight_of_hand">
<input class="flag" type="hidden" name="attr_npc_sleight_of_hand_flag" value="0">
<button type="roll" name="roll_npc_sleight_of_hand" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{sleight_of_hand}}} {{mod=@{npc_sleight_of_hand}}} {{r1=[[@{d20}+@{npc_sleight_of_hand}]]}} @{rtype}+@{npc_sleight_of_hand}]]}} {{type=Skill}}">
<span data-i18n="sleight_of_hand">Sleight of Hand</span>
<span class="stat" name="attr_npc_sleight_of_hand"></span>
</button>
</span>
<span data-i18n-list-item="stealth">
<input class="flag" type="hidden" name="attr_npc_stealth_flag" value="0">
<button type="roll" name="roll_npc_stealth" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{stealth}}} {{mod=@{npc_stealth}}} {{r1=[[@{d20}+@{npc_stealth}]]}} @{rtype}+@{npc_stealth}]]}} {{type=Skill}}">
<span data-i18n="stealth">Stealth</span>
<span class="stat" name="attr_npc_stealth"></span>
</button>
</span>
<span data-i18n-list-item="survival">
<input class="flag" type="hidden" name="attr_npc_survival_flag" value="0">
<button type="roll" name="roll_npc_survival" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{survival}}} {{mod=@{npc_survival}}} {{r1=[[@{d20}+@{npc_survival}]]}} @{rtype}+@{npc_survival}]]}} {{type=Skill}}">
<span data-i18n="survival">Survival</span>
<span class="stat" name="attr_npc_survival"></span>
</button>
</span>
<span data-i18n-list-item="technology">
<input class="flag" type="hidden" name="attr_npc_technology_flag" value="0">
<button type="roll" name="roll_npc_technology" value="@{wtype}&{template:npc} @{npc_name_flag} {{rname=^{technology}}} {{mod=@{npc_technology}}} {{r1=[[@{d20}+@{npc_technology}]]}} @{rtype}+@{npc_technology}]]}} {{type=Skill}}">
<span data-i18n="technology">Technology</span>
<span class="stat" name="attr_npc_technology"></span>
</button>
</span>
</div>
<input class="flag" type="hidden" name="attr_npc_vulnerabilities">
<div class="row status vulnerabilities red">
<span class="bold" data-i18n="dmg-vuln">Damage Vulnerabilities</span>
<span class="info" name="attr_npc_vulnerabilities"></span>
</div>
<input class="flag" type="hidden" name="attr_npc_resistances">
<div class="row status resistances red">
<span class="bold" data-i18n="dmg-res">Damage Resistances</span>
<span class="info" name="attr_npc_resistances"></span>
</div>
<input class="flag" type="hidden" name="attr_npc_immunities">
<div class="row status immunities red">
<span class="bold" data-i18n="dmg-imm">Damage Immunities</span>
<span class="info" name="attr_npc_immunities"></span>
</div>
<input class="flag" type="hidden" name="attr_npc_condition_immunities">
<div class="row status condition_immunities red">
<span class="bold" data-i18n="cond-imm">Condition Immunities</span>
<span class="info" name="attr_npc_condition_immunities"></span>
</div>
<div class="row senses red">
<span class="bold" data-i18n="senses">Senses</span>
<span class="info" name="attr_npc_senses"></span>
</div>
<div class="row languages red">
<span class="bold" data-i18n="langs">Languages</span>
<span class="info languages" name="attr_npc_languages" value="—"></span>
</div>
<div class="row red">
<span class="bold" data-i18n="challenge">Challenge</span>
<span class="num" name="attr_npc_challenge"></span>
<span class="parens xp" name="attr_npc_xp"></span>
</div>
<div class="triangle"></div>
<div class="row traits">
<fieldset class="repeating_npctrait">
<div class="trait">
<input type="text" name="attr_name" placeholder="False Appearance." data-i18n-placeholder="npc-trait-name-place">
<textarea name="attr_desc" placeholder="If the dragon fails..." data-i18n-placeholder="npc-trait-desc-place"></textarea>
</div>
</fieldset>
</div>
</div>
<div class="actions_container">
<input class="dflag" type="hidden" name="attr_dflag" value="pick">
<div class="row actions">
<div class="row actiontitle" style="position: relative;">
<span class="title red" data-i18n="actions">Actions</span>
</div>
<fieldset class="repeating_npcaction">
<div class="action">
<input class="npc_options-flag" type="checkbox" name="attr_npc_options-flag" checked="checked"><span>y</span>
<div class="npc_options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_name">
</div>
<div class="row">
<input type="checkbox" name="attr_attack_flag" value="on">
<span data-i18n="attack-u">ATTACK</span>
</div>
<input type="hidden" class="attack_options" name="attr_attack_flag" value="0">
<div class="row attack_option">
<span data-i18n="type:-u">TYPE:</span>
<select name="attr_attack_type">
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
<span style="margin-left: 15px;" data-i18n="range-reach:-u">RANGE/REACH:</span>
<input type="text" name="attr_attack_range" placeholder="5 ft." style="width: 100px;" data-i18n-placeholder="range-reach-place">
</div>
<div class="row attack_option">
<span data-i18n="to-hit:-u">TO HIT:</span>
<input type="text" name="attr_attack_tohit" value="0" placeholder="5" style="width: 30px;">
<span style="margin-left: 15px;" data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_attack_target" placeholder="One target" style="width: 100px;" data-i18n-placeholder="to-hit-place">
</div>
<input type="hidden" name="attr_damage_flag">
<div class="row attack_option">
<span data-i18n="on-hit:-u">ON HIT:</span>
<input type="text" name="attr_attack_damage" placeholder="1d10" style="width: 65px;">
<input type="text" name="attr_attack_damagetype" placeholder="slashing" style="width: 100px;" data-i18n-placeholder="on-hit-place">
<input type="hidden" name="attr_attack_crit">
</div>
<div class="row attack_option">
<span data-i18n="on-hit2:-u">ON HIT 2:</span>
<input type="text" name="attr_attack_damage2" placeholder="2d6+5" style="width: 65px;">
<input type="text" name="attr_attack_damagetype2" placeholder="fire" style="width: 100px;" data-i18n-placeholder="on-hit-2-place">
<input type="hidden" name="attr_attack_crit2">
</div>
<div class="row attack_option">
<span data-i18n="desc:-u">DESCRIPTION:</span>
<select name="attr_show_desc">
<option value="@{description}" data-i18n="show">Show</option>
<option value=" " data-i18n="hide">Hide</option>
</select>
</div>
<div class="row">
<textarea name="attr_description"></textarea>
</div>
</div>
<div class="display">
<button class="pick" type="roll" name="roll_npc_action" value="@{rollbase}">
<div class="row wide">
<span class="bold wide" name="attr_name"></span>
</div>
<input class="attack_options" type="hidden" name="attr_attack_flag">
<div class="row attack attack_option">
<span class="italics" name="attr_attack_type"></span><span class="italics"> Weapon Attack: </span><span name="attr_attack_tohitrange">
</div>
<div class="row attack attack_option">
<span class="italics" style="font-size: 13px; font-weight: normal; vertical-align: middle;" data-i18n="hit:">Hit: </span><span name="attr_attack_onhit" style="vertical-align: middle;"></span>
</div>
<span class="description" name="attr_description"></span>
</button>
</div>
<input type="hidden" name="attr_rollbase">
<button type="roll" style="display: none;" name="roll_npc_dmg" value="@{wtype}&{template:npcdmg} @{damage_flag} {{dmg1=[[@{attack_damage}+0]]}} {{dmg1type=@{attack_damagetype}}} {{dmg2=[[@{attack_damage2}+0]]}} {{dmg2type=@{attack_damagetype2}}}"></button>
<button type="roll" style="display: none;" name="roll_npc_crit" value="@{wtype}&{template:npcdmg} @{damage_flag} {{crit=1}} {{dmg1=[[@{attack_damage}+0]]}} {{dmg1type=@{attack_damagetype}}} {{dmg2=[[@{attack_damage2}+0]]}} {{dmg2type=@{attack_damagetype2}}} {{crit1=[[@{attack_crit}+0]]}} {{crit2=[[@{attack_crit2}+0]]}}"></button>
</div>
</fieldset>
</div>
<input class="reaction_flag" type="hidden" name="attr_npcreactionsflag">
<div class="row actions reaction">
<div class="row actiontitle">
<span class="title red" data-i18n="reactions">Reactions</span>
</div>
<fieldset class="repeating_npcreaction">
<div class="trait">
<input type="text" name="attr_name" placeholder="Parry." data-i18n-placeholder="npc-repeating-name-place">
<textarea name="attr_desc" placeholder="The creature adds 2 to its AC against..." data-i18n-placeholder="npc-repeating-desc-place"></textarea>
</div>
</fieldset>
</div>
<input class="legendary_flag" type="hidden" name="attr_npc_legendary_actions" value="0">
<div class="row actions legendary">
<div class="row actiontitle">
<span class="title red" data-i18n="leg-actions">Legendary Actions</span>
</div>
<div class="row">
<div class="legendaryactions" data-i18n="leg-actions-desc"><span name="attr_npc_legendary_actions_desc"></span></div>
</div>
<fieldset class="repeating_npcaction-l">
<div class="action">
<input class="npc_options-flag" type="checkbox" name="attr_npc_options-flag" checked="checked"><span>y</span>
<div class="npc_options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_name">
</div>
<div class="row">
<input type="checkbox" name="attr_attack_flag" value="on">
<span data-i18n="attack-u">ATTACK</span>
</div>
<input type="hidden" class="attack_options" name="attr_attack_flag" value="0">
<div class="row attack_option">
<span data-i18n="type:-u">TYPE:</span>
<select name="attr_attack_type">
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
<span style="margin-left: 15px;" data-i18n="range-reach:-u">RANGE/REACH:</span>
<input type="text" name="attr_attack_range" placeholder="5 ft." style="width: 100px;" data-i18n-placeholder="range-reach-place">
</div>
<div class="row attack_option">
<span data-i18n="to-hit:-u">TO HIT:</span>
<input type="text" name="attr_attack_tohit" value="0" placeholder="5" style="width: 30px;">
<span style="margin-left: 15px;" data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_attack_target" placeholder="One target" style="width: 100px;" data-i18n-placeholder="to-hit-place">
</div>
<input type="hidden" name="attr_damage_flag">
<div class="row attack_option">
<span data-i18n="on-hit:-u">ON HIT:</span>
<input type="text" name="attr_attack_damage" placeholder="1d10" style="width: 65px;">
<input type="text" name="attr_attack_damagetype" placeholder="slashing" style="width: 100px;" data-i18n-placeholder="on-hit-place">
<input type="hidden" name="attr_attack_crit">
</div>
<div class="row attack_option">
<span data-i18n="on-hit2:-u">ON HIT 2:</span>
<input type="text" name="attr_attack_damage2" placeholder="2d6+5" style="width: 65px;">
<input type="text" name="attr_attack_damagetype2" placeholder="fire" style="width: 100px;" data-i18n-placeholder="on-hit-2-place">
<input type="hidden" name="attr_attack_crit2">
</div>
<div class="row attack_option">
<span data-i18n="desc:-u">DESCRIPTION:</span>
<select name="attr_show_desc">
<option value="@{description}" data-i18n="show">Show</option>
<option value=" " data-i18n="hide">Hide</option>
</select>
</div>
<div class="row">
<textarea name="attr_description"></textarea>
</div>
</div>
<div class="display">
<button class="pick" type="roll" name="roll_npc_action" value="@{rollbase}">
<div class="row wide">
<span class="bold wide" name="attr_name"></span>
</div>
<input class="attack_options" type="hidden" name="attr_attack_flag">
<div class="row attack attack_option">
<span class="italics" name="attr_attack_type"></span><span class="italics"> Weapon Attack: </span><span name="attr_attack_tohitrange">
</div>
<div class="row attack attack_option">
<span class="italics" style="font-size: 13px; font-weight: normal; vertical-align: middle;" data-i18n="hit:">Hit: </span><span name="attr_attack_onhit" style="vertical-align: middle;"></span>
</div>
<span class="description" name="attr_description"></span>
</button>
</div>
<input type="hidden" name="attr_rollbase">
<button type="roll" style="display: none;" name="roll_npc_dmg" value="@{wtype}&{template:npcdmg} @{damage_flag} {{dmg1=[[@{attack_damage}+0]]}} {{dmg1type=@{attack_damagetype}}} {{dmg2=[[@{attack_damage2}+0]]}} {{dmg2type=@{attack_damagetype2}}}"></button>
<button type="roll" style="display: none;" name="roll_npc_crit" value="@{wtype}&{template:npcdmg} @{damage_flag} {{crit=1}} {{dmg1=[[@{attack_damage}+0]]}} {{dmg1type=@{attack_damagetype}}} {{dmg2=[[@{attack_damage2}+0]]}} {{dmg2type=@{attack_damagetype2}}} {{crit1=[[@{attack_crit}+0]]}} {{crit2=[[@{attack_crit2}+0]]}}"></button>
</div>
</fieldset>
</div>
<input class="npcpower_flag" type="hidden" name="attr_npcpower_flag">
<div class="row actions npcpower powers">
<div class="row actiontitle">
<span class="title red" style="font-weight: normal; text-align: left;" data-i18n="powers">Powers</span>
</div>
<div class="warning"><span>THIS SECTION IS NOW NO LONGER SUPPORTED. PLEASE TRANSFER ANY POWERS LISTED HERE INTO THE NEW POWERS BY LEVEL SECTION, AVAILABLE AFTER SELECTING THE 'POWERCASTING NPC' OPTION FROM THE NPC OPTIONS ABOVE. FOR MODULE USERS, THIS SHEET WILL BE UPDATED IN AN UPCOMING PATCH.</span></div>
<div class="power-container">
<fieldset class="repeating_power-npc">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Melee" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="dmg:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="dmg2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="npc-atk-effect-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="on" data-i18n="on">On</option>
<option value="off" selected="selected" data-i18n="off">Off</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="desc:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel">
<input type="hidden" name="attr_rollbase">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<input type="hidden" name="attr_powerprepared"><span class="prep"></span>
<span class="powername" name="attr_powername"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration">C</span>
</div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
<div class="container pc">
<input class="tab-button core" type="radio" name="attr_tab" value="core" checked="checked"><span data-i18n="core-u">CORE</span>
<input class="tab-button bio" type="radio" name="attr_tab" value="bio"><span data-i18n="bio-u">BIO</span>
<input class="tab-button powers" type="radio" name="attr_tab" value="powers"><span data-i18n="powers-u">POWERS</span>
<input class="tab-button options" type="radio" name="attr_tab" value="options"><span style="font-family: pictos">y</span>
<div class="page core">
<div class="header">
<div class="name-container">
<img src="https://s22.postimg.cc/jnlp8fqc1/Star_Wars_5_E_Logo_Shrunk.png" style="padding-bottom: 10px;">
<input type="text" name="attr_character_name" style="width: 100%;">
<span class="label" data-i18n="char-name-u">CHARACTER NAME</span>
</div>
<input class="options-flag" type="checkbox" name="attr_options-class-selection" checked="checked"><span>y</span>
<div class="header-info sheet-options">
<div class="sheet-row" style="border-top: 2px dashed gold;">
<span data-i18n="class:-u">CLASS:</span>
<input type="hidden" name="attr_custom_class" class="sheet-flag">
<select class="hiding class" name="attr_class">
<option value="" data-i18n="choose">Choose</option>
<option value="Berserker" data-i18n="berserker">Berserker</option>
<option value="Consular" data-i18n="consular">Consular</option>
<option value="Engineer" data-i18n="engineer">Engineer</option>
<option value="Fighter" data-i18n="fighter">Fighter</option>
<option value="Guardian" data-i18n="guardian">Guardian</option>
<option value="Monk" data-i18n="monk">Monk</option>
<option value="Operative" data-i18n="operative">Operative</option>
<option value="Scholar" data-i18n="scholar">Scholar</option>
<option value="Scout" data-i18n="scout">Scout</option>
<option value="Sentinel" data-i18n="sentinel">Sentinel</option>
</select>
<input type="text" class="showing" name="attr_cust_classname" style="width: 90px;">
<span data-i18n="subclass:-u">SUBCLASS:</span>
<input type="text" name="attr_subclass">
<span data-i18n="lvl:-u">LEVEL:</span>
<input type="number" class="class-level" style="width: 40px" name="attr_base_level" value="1">
</div>
<div class="sheet-row">
<span data-i18n="race:-u">RACE:</span>
<input type="text" name="attr_race">
<span data-i18n="subrace:-u">SUBRACE:</span>
<input type="text" name="attr_subrace">
</div>
</div>
<div class="header-info sheet-display">
<div class="top">
<div class="hlabel-container">
<input type="text" name="attr_class_display" class="sheet-class-display sheet-no_events">
<span class="label" data-i18n="class-level-u">CLASS & LEVEL</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_background" style="width: 182px;">
<span class="label" data-i18n="background-u">BACKGROUND</span>
</div>
</div>
<div class="bottom">
<div class="hlabel-container">
<input type="text" name="attr_race_display" class="sheet-no_events">
<span class="label" data-i18n="race-u">RACE</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_alignment">
<span class="label" data-i18n="alignment-u">ALIGNMENT</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_experience">
<span class="label" data-i18n="exp-pts-u">EXPERIENCE POINTS</span>
</div>
</div>
</div>
</div>
<div class="body">
<div class="col col1">
<div class="attributes-container" style="margin-top: 10px;">
<div class="attr-container">
<button type="roll" name="roll_strength" value="@{wtype}&{template:simple} {{rname=^{strength-u}}} {{mod=@{strength_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{strength_mod}@{jack_attr}[STR]]]}} @{rtype}+@{strength_mod}@{jack_attr}[STR]]]}} @{charname_output}" data-i18n="strength-u">STRENGTH</button>
<span class="attr" name="attr_strength_mod" title="@{strength_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_strength_base" title="@{strength}" value="10">
<input type="hidden" name="attr_strength" value="10">
<input class="attr-flag" type="hidden" name="attr_strength_flag" value="0">
<span class="finalattr" name="attr_strength">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_dexterity" value="@{wtype}&{template:simple} {{rname=^{dexterity-u}}} {{mod=@{dexterity_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{dexterity_mod}@{jack_attr}[DEX]]]}} @{rtype}+@{dexterity_mod}@{jack_attr}[DEX]]]}} @{charname_output}" data-i18n="dexterity-u">DEXTERITY</button>
<span class="attr" name="attr_dexterity_mod" title="@{dexterity_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_dexterity_base" title="@{dexterity}" value="10">
<input type="hidden" name="attr_dexterity" value="10">
<input class="attr-flag" type="hidden" name="attr_dexterity_flag" value="0">
<span class="finalattr" name="attr_dexterity">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_constitution" value="@{wtype}&{template:simple} {{rname=^{constitution-u}}} {{mod=@{constitution_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{constitution_mod}@{jack_attr}[CON]]]}} @{rtype}+@{constitution_mod}@{jack_attr}[CON]]]}} @{charname_output}" data-i18n="constitution-u">CONSTITUTION</button>
<span class="attr" name="attr_constitution_mod" title="@{constitution_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_constitution_base" title="@{constitution}" value="10">
<input type="hidden" name="attr_constitution" value="10">
<input class="attr-flag" type="hidden" name="attr_constitution_flag" value="0">
<span class="finalattr" name="attr_constitution">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_intelligence" value="@{wtype}&{template:simple} {{rname=^{intelligence-u}}} {{mod=@{intelligence_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{intelligence_mod}@{jack_attr}[INT]]]}} @{rtype}+@{intelligence_mod}@{jack_attr}[INT]]]}} @{charname_output}" data-i18n="intelligence-u">INTELLIGENCE</button>
<span class="attr" name="attr_intelligence_mod" title="@{intelligence_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_intelligence_base" title="@{intelligence}" value="10">
<input type="hidden" name="attr_intelligence" value="10">
<input class="attr-flag" type="hidden" name="attr_intelligence_flag" value="0">
<span class="finalattr" name="attr_intelligence">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_wisdom" value="@{wtype}&{template:simple} {{rname=^{wisdom-u}}} {{mod=@{wisdom_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{wisdom_mod}@{jack_attr}[WIS]]]}} @{rtype}+@{wisdom_mod}@{jack_attr}[WIS]]]}} @{charname_output}" data-i18n="wisdom-u">WISDOM</button>
<span class="attr" name="attr_wisdom_mod" title="@{wisdom_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_wisdom_base" title="@{wisdom}" value="10">
<input type="hidden" name="attr_wisdom" value="10">
<input class="attr-flag" type="hidden" name="attr_wisdom_flag" value="0">
<span class="finalattr" name="attr_wisdom">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_charisma" value="@{wtype}&{template:simple} {{rname=^{charisma-u}}} {{mod=@{charisma_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{charisma_mod}@{jack_attr}[CHA]]]}} @{rtype}+@{charisma_mod}@{jack_attr}[CHA]]]}} @{charname_output}" data-i18n="charisma-u">CHARISMA</button>
<span class="attr" name="attr_charisma_mod" title="@{charisma_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_charisma_base" title="@{charisma}" value="10">
<input type="hidden" name="attr_charisma" value="10">
<input class="attr-flag" type="hidden" name="attr_charisma_flag" value="0">
<span class="finalattr" name="attr_charisma">
</div>
</div>
</div>
<div class="skills-saves-container">
<div class="insp-prof-container">
<div class="value">
<input type="checkbox" name="attr_inspiration"><span></span>
</div>
<div class="label">
<span data-i18n="inspiration-u">INSPIRATION</span>
</div>
</div>
<div class="insp-prof-container">
<div class="value">
<span name="attr_pb" title="@{pb}"></span>
</div>
<div class="label">
<span data-i18n="prof-bonus-u">PROFICIENCY BONUS</span>
</div>
</div>
<div class="saving-throw-container">
<div class="saving-throw">
<input type="checkbox" name="attr_strength_save_prof" title="@{strength_save_prof}" value="(@{pb})">
<span name="attr_strength_save_bonus" title="@{strength_save_bonus}">0</span>
<button type="roll" name="roll_strength_save" value="@{wtype}&{template:simple} {{rname=^{strength-save-u}}} {{mod=@{strength_save_bonus}}} {{r1=[[@{d20}+@{strength_save_bonus}@{pbd_safe}]]}} @{rtype}+@{strength_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="strength">Strength</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_dexterity_save_prof" title="@{dexterity_save_prof}" value="(@{pb})">
<span name="attr_dexterity_save_bonus" title="@{dexterity_save_bonus}">0</span>
<button type="roll" name="roll_dexterity_save" value="@{wtype}&{template:simple} {{rname=^{dexterity-save-u}}} {{mod=@{dexterity_save_bonus}}} {{r1=[[@{d20}+@{dexterity_save_bonus}@{pbd_safe}]]}} @{rtype}+@{dexterity_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="dexterity">Dexterity</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_constitution_save_prof" title="@{constitution_save_prof}" value="(@{pb})">
<span name="attr_constitution_save_bonus" title="@{constitution_save_bonus}">0</span>
<button type="roll" name="roll_constitution_save" value="@{wtype}&{template:simple} {{rname=^{constitution-save-u}}} {{mod=@{constitution_save_bonus}}} {{r1=[[@{d20}+@{constitution_save_bonus}@{pbd_safe}]]}} @{rtype}+@{constitution_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="constitution">Constitution</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_intelligence_save_prof" title="@{intelligence_save_prof}" value="(@{pb})">
<span name="attr_intelligence_save_bonus" title="@{intelligence_save_bonus}">0</span>
<button type="roll" name="roll_intelligence_save" value="@{wtype}&{template:simple} {{rname=^{intelligence-save-u}}} {{mod=@{intelligence_save_bonus}}} {{r1=[[@{d20}+@{intelligence_save_bonus}@{pbd_safe}]]}} @{rtype}+@{intelligence_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="intelligence">Intelligence</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_wisdom_save_prof" title="@{wisdom_save_prof}" value="(@{pb})">
<span name="attr_wisdom_save_bonus" title="@{wisdom_save_bonus}">0</span>
<button type="roll" name="roll_wisdom_save" value="@{wtype}&{template:simple} {{rname=^{wisdom-save-u}}} {{mod=@{wisdom_save_bonus}}} {{r1=[[@{d20}+@{wisdom_save_bonus}@{pbd_safe}]]}} @{rtype}+@{wisdom_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="wisdom">Wisdom</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_charisma_save_prof" title="@{charisma_save_prof}" value="(@{pb})">
<span name="attr_charisma_save_bonus" title="@{charisma_save_bonus}">0</span>
<button type="roll" name="roll_charisma_save" value="@{wtype}&{template:simple} {{rname=^{charisma-save-u}}} {{mod=@{charisma_save_bonus}}} {{r1=[[@{d20}+@{charisma_save_bonus}@{pbd_safe}]]}} @{rtype}+@{charisma_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="charisma">Charisma</button>
</div>
<input type="hidden" class="toggleflag" name="attr_global_save_mod_flag">
<div class="hidden textarea globalattack">
<span class="label" data-i18n="global-save-u">GLOBAL SAVE MODIFIER</span>
<fieldset class="repeating_savemod">
<div class="global-mod">
<input type="checkbox" name="attr_options-flag" class="options-flag" checked="checked" style="top: -15px;"><span>y</span>
<input type="checkbox" name="attr_global_save_active_flag" value="1" class="active-flag">
<div class="options">
<textarea type="textarea" name="attr_global_save_rollstring" placeholder="1d4[BLESS]" style="width: 125px;"></textarea>
</div>
<div class="display">
<span class="title" name="attr_global_save_rollstring"></span>
</div>
</div>
</fieldset>
</div>
<div class="label">
<span data-i18n="saving-throws-u">SAVING THROWS</span>
</div>
</div>
<div class="skills-container skills-list">
<div data-i18n-list="skills-list">
<div class="skill" data-i18n-list-item="acrobatics">
<input type="checkbox" name="attr_acrobatics_prof" title="@{acrobatics_prof}" value="(@{pb}*@{acrobatics_type})">
<span name="attr_acrobatics_bonus" title="@{acrobatics_bonus}">0</span>
<button type="roll" name="roll_acrobatics" value="@{wtype}&{template:simple} {{rname=^{acrobatics-u}}} {{mod=@{acrobatics_bonus}}} {{r1=[[@{d20}+@{acrobatics_bonus}@{pbd_safe}]]}} @{rtype}+@{acrobatics_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}" data-i18n="acrobatics-core">Acrobatics <span>(Dex)</span></button>
</div>
<div class="skill" data-i18n-list-item="animal_handling">
<input type="checkbox" name="attr_animal_handling_prof" title="@{animal_handling_prof}" value="(@{pb}*@{animal_handling_type})">
<span name='attr_animal_handling_bonus' title='@{animal_handling_bonus}'>0</span>
<button type='roll' name='roll_animal_handling' value='@{wtype}&{template:simple} {{rname=^{animal_handling-u}}} {{mod=@{animal_handling_bonus}}} {{r1=[[@{d20}+@{animal_handling_bonus}@{pbd_safe}]]}} @{rtype}+@{animal_handling_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='animal_handling-core'>Animal Handling <span>(Wis)</span></button>
</div>
<div class="skill" data-i18n-list-item="athletics">
<input type="checkbox" name="attr_athletics_prof" title="@{athletics_prof}" value="(@{pb}*@{athletics_type})">
<span name='attr_athletics_bonus' title='@{athletics_bonus}'>0</span>
<button type='roll' name='roll_athletics' value='@{wtype}&{template:simple} {{rname=^{athletics-u}}} {{mod=@{athletics_bonus}}} {{r1=[[@{d20}+@{athletics_bonus}@{pbd_safe}]]}} @{rtype}+@{athletics_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='athletics-core'>Athletics <span>(Str)</span></button>
</div>
<div class="skill" data-i18n-list-item="deception">
<input type="checkbox" name="attr_deception_prof" title="@{deception_prof}" value="(@{pb}*@{deception_type})">
<span name='attr_deception_bonus' title='@{deception_bonus}'>0</span>
<button type='roll' name='roll_deception' value='@{wtype}&{template:simple} {{rname=^{deception-u}}} {{mod=@{deception_bonus}}} {{r1=[[@{d20}+@{deception_bonus}@{pbd_safe}]]}} @{rtype}+@{deception_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='deception-core'>Deception <span>(Cha)</span></button>
</div>
<div class="skill" data-i18n-list-item="insight">
<input type="checkbox" name="attr_insight_prof" title="@{insight_prof}" value="(@{pb}*@{insight_type})">
<span name='attr_insight_bonus' title='@{insight_bonus}'>0</span>
<button type='roll' name='roll_insight' value='@{wtype}&{template:simple} {{rname=^{insight-u}}} {{mod=@{insight_bonus}}} {{r1=[[@{d20}+@{insight_bonus}@{pbd_safe}]]}} @{rtype}+@{insight_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='insight-core'>Insight <span>(Wis)</span></button>
</div>
<div class="skill" data-i18n-list-item="intimidation">
<input type="checkbox" name="attr_intimidation_prof" title="@{intimidation_prof}" value="(@{pb}*@{intimidation_type})">
<span name='attr_intimidation_bonus' title='@{intimidation_bonus}'>0</span>
<button type='roll' name='roll_intimidation' value='@{wtype}&{template:simple} {{rname=^{intimidation-u}}} {{mod=@{intimidation_bonus}}} {{r1=[[@{d20}+@{intimidation_bonus}@{pbd_safe}]]}} @{rtype}+@{intimidation_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='intimidation-core'>Intimidation <span>(Cha)</span></button>
</div>
<div class="skill" data-i18n-list-item="investigation">
<input type="checkbox" name="attr_investigation_prof" title="@{investigation_prof}" value="(@{pb}*@{investigation_type})">
<span name='attr_investigation_bonus' title='@{investigation_bonus}'>0</span>
<button type='roll' name='roll_investigation' value='@{wtype}&{template:simple} {{rname=^{investigation-u}}} {{mod=@{investigation_bonus}}} {{r1=[[@{d20}+@{investigation_bonus}@{pbd_safe}]]}} @{rtype}+@{investigation_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='investigation-core'>Investigation <span>(Int)</span></button>
</div>
<div class="skill" data-i18n-list-item="lore">
<input type="checkbox" name="attr_lore_prof" title="@{lore_prof}" value="(@{pb}*@{lore_type})">
<span name='attr_lore_bonus' title='@{lore_bonus}'>0</span>
<button type='roll' name='roll_lore' value='@{wtype}&{template:simple} {{rname=^{lore-u}}} {{mod=@{lore_bonus}}} {{r1=[[@{d20}+@{lore_bonus}@{pbd_safe}]]}} @{rtype}+@{lore_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='lore-core'>Lore <span>(Int)</span></button>
</div>
<div class="skill" data-i18n-list-item="medicine">
<input type="checkbox" name="attr_medicine_prof" title="@{medicine_prof}" value="(@{pb}*@{medicine_type})">
<span name='attr_medicine_bonus' title='@{medicine_bonus}'>0</span>
<button type='roll' name='roll_medicine' value='@{wtype}&{template:simple} {{rname=^{medicine-u}}} {{mod=@{medicine_bonus}}} {{r1=[[@{d20}+@{medicine_bonus}@{pbd_safe}]]}} @{rtype}+@{medicine_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='medicine-core'>Medicine <span>(Wis)</span></button>
</div>
<div class="skill" data-i18n-list-item="nature">
<input type="checkbox" name="attr_nature_prof" title="@{nature_prof}" value="(@{pb}*@{nature_type})">
<span name='attr_nature_bonus' title='@{nature_bonus}'>0</span>
<button type='roll' name='roll_nature' value='@{wtype}&{template:simple} {{rname=^{nature-u}}} {{mod=@{nature_bonus}}} {{r1=[[@{d20}+@{nature_bonus}@{pbd_safe}]]}} @{rtype}+@{nature_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='nature-core'>Nature <span>(Int)</span></button>
</div>
<div class="skill" data-i18n-list-item="perception">
<input type="checkbox" name="attr_perception_prof" title="@{perception_prof}" value="(@{pb}*@{perception_type})">
<span name='attr_perception_bonus' title='@{perception_bonus}'>0</span>
<button type='roll' name='roll_perception' value='@{wtype}&{template:simple} {{rname=^{perception-u}}} {{mod=@{perception_bonus}}} {{r1=[[@{d20}+@{perception_bonus}@{pbd_safe}]]}} @{rtype}+@{perception_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='perception-core'>Perception <span>(Wis)</span></button>
</div>
<div class="skill" data-i18n-list-item="performance">
<input type="checkbox" name="attr_performance_prof" title="@{performance_prof}" value="(@{pb}*@{performance_type})">
<span name='attr_performance_bonus' title='@{performance_bonus}'>0</span>
<button type='roll' name='roll_performance' value='@{wtype}&{template:simple} {{rname=^{performance-u}}} {{mod=@{performance_bonus}}} {{r1=[[@{d20}+@{performance_bonus}@{pbd_safe}]]}} @{rtype}+@{performance_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='performance-core'>Performance <span>(Cha)</span></button>
</div>
<div class="skill" data-i18n-list-item="persuasion">
<input type="checkbox" name="attr_persuasion_prof" title="@{persuasion_prof}" value="(@{pb}*@{persuasion_type})">
<span name='attr_persuasion_bonus' title='@{persuasion_bonus}'>0</span>
<button type='roll' name='roll_persuasion' value='@{wtype}&{template:simple} {{rname=^{persuasion-u}}} {{mod=@{persuasion_bonus}}} {{r1=[[@{d20}+@{persuasion_bonus}@{pbd_safe}]]}} @{rtype}+@{persuasion_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='persuasion-core'>Persuasion <span>(Wis)</span></button>
</div>
<div class="skill" data-i18n-list-item="piloting">
<input type="checkbox" name="attr_piloting_prof" title="@{piloting_prof}" value="(@{pb}*@{piloting_type})">
<span name='attr_piloting_bonus' title='@{piloting_bonus}'>0</span>
<button type='roll' name='roll_piloting' value='@{wtype}&{template:simple} {{rname=^{piloting-u}}} {{mod=@{piloting_bonus}}} {{r1=[[@{d20}+@{piloting_bonus}@{pbd_safe}]]}} @{rtype}+@{piloting_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='piloting-core'>Piloting <span>(Int)</span></button>
</div>
<div class="skill" data-i18n-list-item="sleight_of_hand">
<input type="checkbox" name="attr_sleight_of_hand_prof" title="@{sleight_of_hand_prof}" value="(@{pb}*@{sleight_of_hand_type})">
<span name='attr_sleight_of_hand_bonus' title='@{sleight_of_hand_bonus}'>0</span>
<button type='roll' name='roll_sleight_of_hand' value='@{wtype}&{template:simple} {{rname=^{sleight_of_hand-u}}} {{mod=@{sleight_of_hand_bonus}}} {{r1=[[@{d20}+@{sleight_of_hand_bonus}@{pbd_safe}]]}} @{rtype}+@{sleight_of_hand_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='sleight_of_hand-core'>Sleight of Hand <span>(Dex)</span></button>
</div>
<div class="skill" data-i18n-list-item="stealth">
<input type="checkbox" name="attr_stealth_prof" title="@{stealth_prof}" value="(@{pb}*@{stealth_type})">
<span name='attr_stealth_bonus' title='@{stealth_bonus}'>0</span>
<button type='roll' name='roll_stealth' value='@{wtype}&{template:simple} {{rname=^{stealth-u}}} {{mod=@{stealth_bonus}}} {{r1=[[@{d20}+@{stealth_bonus}@{pbd_safe}]]}} @{rtype}+@{stealth_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='stealth-core'>Stealth <span>(Dex)</span></button>
</div>
<div class="skill" data-i18n-list-item="survival">
<input type="checkbox" name="attr_survival_prof" title="@{survival_prof}" value="(@{pb}*@{survival_type})">
<span name='attr_survival_bonus' title='@{survival_bonus}'>0</span>
<button type='roll' name='roll_survival' value='@{wtype}&{template:simple} {{rname=^{survival-u}}} {{mod=@{survival_bonus}}} {{r1=[[@{d20}+@{survival_bonus}@{pbd_safe}]]}} @{rtype}+@{survival_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='survival-core'>Survival <span>(Wis)</span></button>
</div>
<div class="skill" data-i18n-list-item="technology">
<input type="checkbox" name="attr_technology_prof" title="@{technology_prof}" value="(@{pb}*@{technology_type})">
<span name='attr_technology_bonus' title='@{technology_bonus}'>0</span>
<button type='roll' name='roll_technology' value='@{wtype}&{template:simple} {{rname=^{technology-u}}} {{mod=@{technology_bonus}}} {{r1=[[@{d20}+@{technology_bonus}@{pbd_safe}]]}} @{rtype}+@{technology_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='technology-core'>Technology <span>(Int)</span></button>
</div>
</div>
<div class="label">
<span data-i18n="skills-u">SKILLS</span>
</div>
</div>
</div>
<div class="insp-prof-container" style="width: 100%; margin-top: 2px;">
<div class="value">
<!-- <input type="text" name="attr_passive_wisdom" title="@{passive_wisdom}" value="(10+@{perception_bonus}+@{passiveperceptionmod})" disabled="true" ><span></span> -->
<span name="attr_passive_wisdom"></span>
</div>
<div class="label" style="width: 217px;">
<span data-i18n="pass-wis-u">PASSIVE WISDOM (PERCEPTION)</span>
</div>
</div>
<div class="tool_proficiencies" style="margin-bottom: 10px; min-height: 100px; position: relative;">
<div class="top">
<span class="label" style="width: 106px;" data-i18n="tool-u">TOOL</span>
<span class="label" style="width: 35px;" data-i18n="pro-u">PRO</span>
<span class="label" style="width: 50px;" data-i18n="attr-u">ATTRIBUTE</span>
</div>
<fieldset class="repeating_tool">
<div class="tool">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_toolname" style="width: 120px;">
</div>
<div class="row">
<span data-i18n="prof-bonus:-u">PROFICIENCY BONUS:</span>
<select name="attr_toolbonus_base">
<option value="(@{pb})" selected="selected" data-i18n="prof-u">PROFICIENT</option>
<option value="(@{pb}*2)" data-i18n="expertise-u">EXPERTISE</option>
<option value="(floor(@{pb}/2))" data-i18n="jack-of-all-u">JACK OF ALL TRADES</option>
</select>
</div>
<div class="row">
<span data-i18n="attr:-u">ATTRIBUTE:</span>
<select name="attr_toolattr_base">
<option value="@{strength_mod}" selected="selected" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}" data-i18n="charisma-u">CHARISMA</option>
<option value="?{Attribute?|Strength,@{strength_mod}|Dexterity,@{dexterity_mod}|Constitution,@{constitution_mod}|Intelligence,@{intelligence_mod}|Wisdom,@{wisdom_mod}|Charisma,@{charisma_mod}}" data-i18n="query-attr-u">QUERY ATTRIBUTE</option>
</select>
<span data-i18n="mods:-u">MODS:</span>
<input type="text" class="num" name="attr_tool_mod" title="@{tool_mod}" value="0">
</div>
</div>
<div class="display">
<button type="roll" name="roll_tool" value="@{wtype}&{template:simple} {{rname=@{toolname}}} {{mod=@{toolbonus}}} {{r1=[[@{d20}+@{toolbonus}@{pbd_safe}]]}} @{rtype}+@{toolbonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}">
<span name="attr_toolname" style="width: 100px;"></span>
<input type="text" name="attr_toolbonus_display" style="width: 40px; text-align: center;">
<input type="hidden" name="attr_toolbonus">
<input type="text" name="attr_toolattr" style="width: 80px;">
</button>
</div>
</div>
</fieldset>
<input type="hidden" class="toggleflag" name="attr_global_skill_mod_flag">
<div class="hidden textarea globalattack">
<span class="label" data-i18n="global-skill-u">GLOBAL SKILL MODIFIER</span>
<fieldset class="repeating_skillmod">
<div class="global-mod">
<input type="checkbox" name="attr_options-flag" class="options-flag" checked="checked" style="top: -15px;"><span>y</span>
<input type="checkbox" name="attr_global_skill_active_flag" value="1" class="active-flag">
<div class="options">
<textarea type="textarea" name="attr_global_skill_rollstring" placeholder="1d4[GUIDANCE]"></textarea>
</div>
<div class="display">
<span class="title" name="attr_global_skill_rollstring"></span>
</div>
</div>
</fieldset>
</div>
<div class="label" style="position: absolute; bottom: 0px; width: 100%; text-align: center;">
<span data-i18n="tool-prof-u" style="display: inline;">TOOL PROFICIENCIES</span><span style="display: inline;"> & </span><span data-i18n="custom-skills-u" style="display: inline;">CUSTOM SKILLS</span>
</div>
</div>
<div class="textbox-container proficiencies" style="margin-bottom: 10px;">
<input type="hidden" class="inventoryflag" name="attr_simpleproficencies" value="complex">
<textarea class="sheet-simple" name="attr_other_proficiencies_and_languages" style="min-height: 91px; height: 91px;"></textarea>
<div class="complex">
<div class="top">
<span class="label" style="width: 60px;" data-i18n="type-u">TYPE</span>
<span class="label" style="width: 135px;" data-i18n="proficency-u">PROFICIENCY</span>
</div>
<fieldset class="repeating_proficiencies">
<div class="proficiency">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="type:-u">TYPE:</span>
<select name="attr_prof_type">
<option selected="selected" data-i18n="lang-u">LANGUAGE</option>
<option data-i18n="weapon-u">WEAPON</option>
<option data-i18n="armor-u">ARMOR</option>
<option data-i18n="other-u">OTHER</option>
</select>
</div>
<div class="row" style="margin-bottom: 3px;">
<span data-i18n="proficency-u">PROFICIENCY</span><span>:</span>
<input type="text" name="attr_name" style="width: 165px;" placeholder="Basic, Huttese, Binary">
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<button type="roll" name="roll_output" value="@{wtype}&{template:traits} @{charname_output} {{name=@{prof_type} PROFICIENCY}} {{description=@{name}}}">
<span name="attr_prof_type" style="width: 55px;"></span>
<span name="attr_name" style="width: 159px;"></span>
</button>
</div>
</div>
</fieldset>
</div>
<div class="label">
<span style="margin-top: -10px;" data-i18n="other-prof-langs-u">OTHER PROFICIENCIES & LANGUAGES</span>
</div>
</div>
<div class="textbox-container proficiencies">
<input type="hidden" class="inventoryflag" name="attr_simpleproficencies" value="complex">
<textarea class="sheet-simple" name="attr_deployments" style="min-height: 91px; height: 91px;"></textarea>
<div class="complex">
<div class="top">
<span class="label" style="width: 60px;" data-i18n="rank-u">RANK</span>
<span class="label" style="width: 135px;" data-i18n="deployment-u">DEPLOYMENT</span>
</div>
<fieldset class="repeating_deployments">
<div class="deployment">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="deployment:-u">DEPLOYMENT:</span>
<select name="attr_deployment_type">
<option selected="selected" data-i18n="coordinator">Coordinator</option>
<option data-i18n="gunner">Gunner</option>
<option data-i18n="mechanic">Mechanic</option>
<option data-i18n="operator">Operator</option>
<option data-i18n="pilot">Pilot</option>
<option data-i18n="technician">Technician</option>
</select>
</div>
<div class="row" style="margin-bottom: 3px;">
<span data-i18n="rank:-u">RANK:</span>
<input type="number" name="attr_deployment_rank" style="width: 40px;">
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<button type="roll" name="roll_output" value="@{wtype}&{template:traits} @{charname_output} {{name=@{deployment_type} @{deployment_rank}}} {{description=Deployment}}">
<span name="attr_deployment_rank" style="width: 55px;"></span>
<span name="attr_deployment_type" style="width: 159px;"></span>
</button>
</div>
</div>
</fieldset>
</div>
<div class="label">
<span style="margin-top: -10px;" data-i18n="deployments-u">DEPLOYMENTS</span>
</div>
</div>
</div>
<div class="col col2">
<div class="ac-init-speed-container">
<div class="ac">
<input type="text" name="attr_ac" title="@{ac}">
<span class="label pc-ac" data-i18n="armor-class-u">ARMOR CLASS</span>
</div>
<div class="init">
<span name="attr_initiative_bonus" title="@{initiative_bonus}"></span>
<button type="roll" name="roll_initiative" value="@{wtype}&{template:simple} {{rname=^{init-u}}} {{mod=@{initiative_bonus}}} {{r1=[[@{initiative_style}+@{initiative_bonus}@{pbd_safe}[INIT] &{tracker}]]}} {{normal=1}} @{charname_output}" data-i18n="init-u">INITIATIVE</button>
</div>
<div class="speed">
<input type="text" name="attr_speed" title="@{speed}">
<span class="label" data-i18n="speed-u">SPEED</span>
</div>
</div>
<div class="hp">
<div class="top">
<span data-i18n="hp-max">Hit Point Maximum</span>
<input type="text" name="attr_hp_max" title="@{hp_max}">
</div>
<input type="number" name="attr_hp" title="@{hp}">
<span class="label" data-i18n="hp-current-u">CURRENT HIT POINTS</span>
</div>
<div class="hp" style="min-height: 56px;">
<input type="number" name="attr_hp_temp" title="@{hp_temp}">
<span class="label" data-i18n="hp-temp-u">TEMPORARY HIT POINTS</span>
</div>
<div class="hdice-dsaves-container" style="width: 242px;">
<div class="subcontainer">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_hit_dice_max" title="@{hit_dice_max}">
</div>
<input type="number" name="attr_hit_dice" title="@{hit_dice}" style="margin-bottom: -6px;">
<button type="roll" name="roll_hit_dice" value="@{wtype}&{template:simple} {{rname=^{hit-dice-u}}} {{mod=D@{hitdie_final}+[[@{constitution_mod}[CON]]]}} {{r1=[[1d@{hitdie_final}+[[@{constitution_mod}]][CON]]]}} {{normal=1}} @{charname_output}" data-i18n="hit-dice-u">HIT DICE</button>
</div>
<div class="subcontainer" style="float: right;">
<div class="row-container">
<span class="label" data-i18n="successes-u">SUCCESSES</span>
<input type="checkbox" name="attr_deathsave_succ1">
<input type="checkbox" name="attr_deathsave_succ2">
<input type="checkbox" name="attr_deathsave_succ3">
</div>
<div class="row-container">
<span class="label" data-i18n="failures-u">FAILURES</span>
<input type="checkbox" name="attr_deathsave_fail1">
<input type="checkbox" name="attr_deathsave_fail2">
<input type="checkbox" name="attr_deathsave_fail3">
</div>
<button type="roll" name="roll_death_save" style="margin-top: 6px;" value="@{wtype}&{template:simple} {{rname=^{death-save-u}}} {{mod=@{death_save_bonus}}} {{r1=[[@{d20}+@{death_save_bonus}[MOD]@{globalsavingthrowbonus}]]}} {{normal=1}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="death-saves-u">DEATH SAVES</button>
</div>
</div>
<input type="hidden" class="exhaustion-toggle" name="attr_exhaustion_toggle" value="0">
<div class="exhaustion" style="position: relative;">
<input type="number" name="attr_exhaustion_level" step="1" min="0" max="6">
<div class="ex-descriptions">
<span class="ex-description" name="attr_exhaustion_1"></span>
<span class="ex-description" name="attr_exhaustion_2"></span>
<span class="ex-description" name="attr_exhaustion_3"></span>
<span class="ex-description" name="attr_exhaustion_4"></span>
<span class="ex-description" name="attr_exhaustion_5"></span>
<span class="ex-description" name="attr_exhaustion_6"></span>
</div>
<span class="label" data-i18n="exhaustion-u">EXHAUSTION LEVEL</span>
</div>
<input type="hidden" class="ammoflag" name="attr_ammotracking">
<div class="attacks" style="position: relative;">
<div class="top">
<span class="label" style="width: 95px;" data-i18n="name-u">NAME</span>
<span class="label" style="width: 35px;" data-i18n="atk-u">ATK</span>
<span class="label" style="width: 65px;" data-i18n="dmg-type-u">DAMAGE/TYPE</span>
</div>
<fieldset class="repeating_attack">
<div class="attack">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_atkname">
</div>
<div class="row">
<input type="checkbox" name="attr_atkflag" value="{{attack=1}}" checked="checked">
<span data-i18n="attack:-u">ATTACK:</span>
<select name="attr_atkattr_base">
<option value="@{strength_mod}" data-i18n="str-u">STR</option>
<option value="@{dexterity_mod}" selected="selected" data-i18n="dex-u">DEX</option>
<option value="@{constitution_mod}" data-i18n="con-u">CON</option>
<option value="@{intelligence_mod}" data-i18n="int-u">INT</option>
<option value="@{wisdom_mod}" data-i18n="wis-u">WIS</option>
<option value="@{charisma_mod}" data-i18n="cha-u">CHA</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="0">-</option>
</select>
<span>+</span>
<input type="text" class="num" name="attr_atkmod" placeholder="0">
<span>+</span>
<input type="checkbox" name="attr_atkprofflag" value="(@{pb})" checked="checked" style="margin-left: 3px;">
<span data-i18n="proficient-u">PROFICIENT</span>
</div>
<div class="row">
<span style="margin-left: 17px;" data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_atkrange" placeholder="Self (60-foot cone)" style="width: 170px;" data-i18n-placeholder="range-place">
</div>
<div class="row">
<span style="margin-left: 17px;" data-i18n="power-bonus:-u">POWER BONUS:</span>
<input type="text" class="num" name="attr_atkpower" placeholder="0">
<span data-i18n="crit-range-u">CRIT RANGE:</span>
<input type="text" class="num" name="attr_atkcritrange" value="20" placeholder="20">
</div>
<div class="row">
<input type="checkbox" name="attr_dmgflag" value="{{damage=1}} {{dmg1flag=1}}" checked="checked">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_dmgbase" placeholder="1d6" style="width: 50px;">
<span>+</span>
<select name="attr_dmgattr">
<option value="@{strength_mod}" data-i18n="str-u">STR</option>
<option value="@{dexterity_mod}" selected="selected" data-i18n="dex-u">DEX</option>
<option value="@{constitution_mod}" data-i18n="con-u">CON</option>
<option value="@{intelligence_mod}" data-i18n="int-u">INT</option>
<option value="@{wisdom_mod}" data-i18n="wis-u">WIS</option>
<option value="@{charisma_mod}" data-i18n="cha-u">CHA</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="0">-</option>
</select>
<span>+</span>
<input type="text" class="num" name="attr_dmgmod" placeholder="0">
</div>
<div class="row">
<span style="margin-left: 17px;" data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_dmgtype" placeholder="Slashing" style="width: 50px;" data-i18n-placeholder="dmg-type-place">
<span data-i18n="crit:-u">CRIT:</span>
<input type="text" name="attr_dmgcustcrit" placeholder="1d6" style="width: 80px;">
</div>
<div class="row">
<input type="checkbox" name="attr_dmg2flag" value="{{damage=1}} {{dmg2flag=1}}">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_dmg2base" placeholder="1d6" style="width: 50px;">
<span>+</span>
<select name="attr_dmg2attr">
<option value="@{strength_mod}" data-i18n="str-u">STR</option>
<option value="@{dexterity_mod}" data-i18n="dex-u">DEX</option>
<option value="@{constitution_mod}" data-i18n="con-u">CON</option>
<option value="@{intelligence_mod}" data-i18n="int-u">INT</option>
<option value="@{wisdom_mod}" data-i18n="wis-u">WIS</option>
<option value="@{charisma_mod}" data-i18n="cha-u">CHA</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="0" selected="selected">-</option>
</select>
<span>+</span>
<input type="text" class="num" name="attr_dmg2mod" placeholder="0">
</div>
<div class="row">
<span style="margin-left: 17px;" data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_dmg2type" placeholder="Slashing" style="width: 50px;" data-i18n-placeholder="dmg-type-place">
<span data-i18n="crit:-u">CRIT:</span>
<input type="text" name="attr_dmg2custcrit" placeholder="1d6" style="width: 80px;">
</div>
<div class="row">
<input type="checkbox" name="attr_saveflag" value="{{save=1}} {{saveattr=@{saveattr}}} {{savedesc=@{saveeffect}}} {{savedc=[[[[@{savedc}]][SAVE]]]}}">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_saveattr">
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" selected="selected" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="vs-dc:-u">VS DC:</span>
<select name="attr_savedc">
<option value="(@{power_save_dc})" selected="selected" data-i18n="power-u">POWER</option>
<option value="(@{strength_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="str-u">STR</option>
<option value="(@{dexterity_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="dex-u">DEX</option>
<option value="(@{constitution_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="con-u">CON</option>
<option value="(@{intelligence_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="int-u">INT</option>
<option value="(@{wisdom_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="wis-u">WIS</option>
<option value="(@{charisma_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="cha-u">CHA</option>
<option value="(@{saveflat})" data-i18n="flat-u">FLAT</option>
</select>
<input class="flatflag" type="hidden" name="attr_savedc">
<input class="num flat" type="text" name="attr_saveflat" placeholder="10" value="10">
</div>
<div class="row">
<span data-i18n="save-effect:-u">SAVE EFFECT:</span>
<input type="text" name="attr_saveeffect" placeholder="half damage" style="width: 160px;" data-i18n-placeholder="save-effect-place">
</div>
<div class="row ammo">
<span data-i18n="ammunition:-u">AMMUNITION:</span>
<input type="text" name="attr_ammo" placeholder="Arrows" style="width: 160px;" data-i18n-placeholder="ammunition-place">
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
<textarea name="attr_atk_desc" placeholder="Up to 2 creatures within 5 feet" data-i18n-placeholder="description-place"></textarea>
</div>
</div>
<div class="display">
<button type="roll" name="roll_attack" value="@{rollbase}">
<span name="attr_atkname" style="width: 85px;"></span>
<input type="text" name="attr_atkbonus" style="width: 40px; text-align: center;" value="">
<input type="text" name="attr_atkdmgtype" style="width: 90px;" value="">
</button>
</div>
</div>
<input type="hidden" name="attr_rollbase">
<input type="hidden" name="attr_rollbase_dmg">
<input type="hidden" name="attr_rollbase_crit">
<input type="hidden" name="attr_hldmg">
<input type="hidden" name="attr_powerlevel">
<input type="hidden" name="attr_itemid">
<input type="hidden" name="attr_powerid">
<input type="hidden" name="attr_power_innate">
<input type="hidden" name="attr_versatile_alt">
<button type="roll" name="roll_attack_dmg" style="display: none;" value="@{rollbase_dmg}"></button>
<button type="roll" name="roll_attack_crit" style="display: none;" value="@{rollbase_crit}"></button>
</fieldset>
<input type="hidden" class="toggleflag" name="attr_global_attack_mod_flag">
<div class="hidden textbox globalattack">
<span class="label" data-i18n="global-attack-u">GLOBAL ATTACK MODIFIER</span>
<fieldset class="repeating_tohitmod">
<div class="global-mod">
<input type="checkbox" name="attr_options-flag" class="options-flag" checked="checked" style="top: -15px;"><span>y</span>
<input type="checkbox" name="attr_global_attack_active_flag" value="1" class="active-flag">
<div class="options">
<textarea type="textarea" name="attr_global_attack_rollstring" placeholder="1d4[BLESS]"></textarea>
</div>
<div class="display">
<span class="title" name="attr_global_attack_rollstring"></span>
</div>
</div>
</fieldset>
</div>
<input type="hidden" class="toggleflag" name="attr_global_damage_mod_flag">
<div class="hidden textbox globalattack">
<span class="label" data-i18n="global-damage-u">GLOBAL DAMAGE MODIFIER</span>
<fieldset class="repeating_damagemod">
<div class="global-mod">
<input type="checkbox" name="attr_options-flag" class="options-flag" checked="checked" style="top: -15px;"><span>y</span>
<input type="checkbox" name="attr_global_damage_active_flag" value="1" class="active-flag">
<div class="options">
<textarea type="textarea" name="attr_global_damage_rollstring" placeholder="1d6[SNEAK ATTACK]"></textarea>
<div class="row" style="margin-bottom: 5px;">
<span style="display: inline; margin-left: 25px;" data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_global_damage_type" value="">
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<span class="title" name="attr_global_damage_rollstring" style="width: 110px; padding-right: 0px;"></span>
<span class="subheader" name="attr_global_damage_type" style="padding-right: 0px;"></span>
</div>
</div>
</fieldset>
</div>
<span class="label" style="margin-top: 0px; position: absolute; bottom: 0px;" data-i18n="atk-powercasting-u">ATTACKS & POWERCASTING</span>
</div>
<div class="equipment">
<div class="money">
<div class="coin">
<span class="label" data-i18n="credit-piece-u">CR</span>
<input type="text" name="attr_cr" title="@{cr}">
</div>
</div>
<input type="hidden" class="inventoryflag" name="attr_simpleinventory" value="complex">
<textarea class="simple" name="attr_equipment"></textarea>
<div class="complex">
<input type="hidden" class="warningflag" name="attr_armorwarningflag">
<div class="warning">
<span data-i18n="warning-armor-sets-u">
<input type="checkbox" name="attr_armorwarning" value="hide">
WARNING - MULTIPLE SETS OF ARMOR OR SHIELDS HAVE BEEN ADDED AND AC IS NOT CORRECTLY CALCULATED. UNEQUIP THE ARMOR PIECE FROM THE ITEM DETAILS.
</span>
</div>
<div class="header" style="height: auto;">
<span class="pictos" style="width: 25px; font-size: 15px;">*</span>
<span style="width: 100px; text-align: left;" data-i18n="item-name-u">ITEM NAME</SPAN>
<span style="width: 25px;"><img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/5th%20Edition%20OGL%20by%20Roll20/images/weight_lbs.png" style="width: 15px; margin-bottom: -3px;"></span>
</div>
<fieldset class="repeating_inventory">
<input type="hidden" class="equippedflag" name="attr_equipped">
<div class="item">
<input class="weight" type="text" name="attr_itemcount" value="1">
<input class="name" type="text" name="attr_itemname">
<input class="weight" type="text" name="attr_itemweight">
<input class="inventorysubflag" type="checkbox" name="attr_inventorysubflag"><span>i</span>
<div class="subitem">
<input class="equipped" type="checkbox" name="attr_equipped" value="1" checked="checked">
<span class="equippedlabel" data-i18n="equipped-u">EQUIPPED</span>
<input class="equipped" type="checkbox" name="attr_useasresource" value="1">
<span class="equippedlabel" data-i18n="use-as-resource-u">USE AS A RESOURCE</span>
<input class="equipped" type="checkbox" name="attr_hasattack" value="1">
<span class="equippedlabel" data-i18n="has-attack-u">HAS AN ATTACK</span>
<span class="label" data-i18n="prop:-u">PROP:</span>
<input class="subfield" type="text" name="attr_itemproperties">
<span class="label" data-i18n="mods:-u">MODS:</span>
<input class="subfield" type="text" name="attr_itemmodifiers">
<textarea class="subtextarea" name="attr_itemcontent"></textarea>
</div>
<input type="hidden" name="attr_itemattackid">
<input type="hidden" name="attr_itemresourceid">
</div>
</fieldset>
<div class="weighttotal">
<span class="label" data-i18n="total-weight-u">TOTAL WEIGHT</span>
<input type="text" name="attr_weighttotal" value="0">
<input type="hidden" class="encumberance" name="attr_encumberance">
<span class="encumb immobile" data-i18n="immobile-u">IMMOBILE</span>
<span class="encumb heavily" data-i18n="heavily-encumbered-u">HEAVILY ENCUMBERED</span>
<span class="encumb encumbered" data-i18n="encumbered-u">ENCUMBERED</span>
<span class="encumb over" data-i18n="over-carrying-cap-u">OVER CARRYING CAPACITY</span>
</div>
</div>
<span class="label" style="margin-top: 0px; position: absolute; bottom: 0px;" data-i18n="equipment-u">EQUIPMENT</span>
</div>
</div>
<div class="col col3">
<div class="textbox pibf">
<input class="options-flag" type="checkbox" name="attr_options-flag-personality" checked="checked"><span>y</span>
<div class="options">
<textarea name="attr_personality_traits" style="min-height: 50px; height: 50px;"></textarea>
</div>
<div class="display">
<span name="attr_personality_traits"></span>
</div>
<span class="label" data-i18n="personality-traits-u">PERSONALITY TRAITS</span>
</div>
<div class="textbox pibf">
<input class="options-flag" type="checkbox" name="attr_options-flag-ideals" checked="checked"><span>y</span>
<div class="options">
<textarea name="attr_ideals"></textarea>
</div>
<div class="display">
<span name="attr_ideals"></span>
</div>
<span class="label" data-i18n="ideals-u">IDEALS</span>
</div>
<div class="textbox pibf">
<input class="options-flag" type="checkbox" name="attr_options-flag-bonds" checked="checked"><span>y</span>
<div class="options">
<textarea name="attr_bonds"></textarea>
</div>
<div class="display">
<span name="attr_bonds"></span>
</div>
<span class="label" data-i18n="bonds-u">BONDS</span>
</div>
<div class="textbox pibf">
<input class="options-flag" type="checkbox" name="attr_options-flag-flaws" checked="checked"><span>y</span>
<div class="options">
<textarea name="attr_flaws" style="min-height: 46px; height: 46px;"></textarea>
</div>
<div class="display">
<span name="attr_flaws"></span>
</div>
<span class="label" data-i18n="flaws-u">FLAWS</span>
</div>
<div class="resources">
<div class="hdice-dsaves-container" style="width: 246px; margin-top: 10px;">
<div class="subcontainer" style="height: 64px; width: 119px;">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_class_resource_max" title="@{class_resource_max}">
</div>
<input type="number" name="attr_class_resource" title="@{class_resource}" style="margin-bottom: -6px;">
<input type="text" class="label" name="attr_class_resource_name" title="@{class_resource_name}" placeholder="CLASS RESOURCE" data-i18n-placeholder="class-resource-u">
</div>
<div class="subcontainer" style="height: 64px; width: 119px; float: right;">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_other_resource_max" title="@{other_resource_max}">
</div>
<input type="number" name="attr_other_resource" title="@{other_resource}" style="margin-bottom: -6px;">
<input type="text" class="label" name="attr_other_resource_name" title="@{other_resource_name}" placeholder="OTHER RESOURCE" data-i18n-placeholder="other-resource-u">
<input type="hidden" name="attr_other_resource_itemid">
</div>
</div>
<fieldset class="repeating_resource">
<div class="hdice-dsaves-container" style="width: 246px; margin-top: 10px;">
<div class="subcontainer" style="height: 64px; width: 119px;">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_resource_left_max" title="@{repeating_resource_left_max}">
</div>
<input type="number" name="attr_resource_left" title="@{repeating_resource_left}" style="margin-bottom: -6px;">
<input type="text" class="label" name="attr_resource_left_name" title="@{repeating_resource_left_name}" placeholder="OTHER RESOURCE" data-i18n-placeholder="other-resource-u">
<input type="hidden" name="attr_resource_left_itemid">
</div>
<div class="subcontainer" style="height: 64px; width: 119px;">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_resource_right_max" title="@{repeating_resource_right_max}">
</div>
<input type="number" name="attr_resource_right" title="@{repeating_resource_right}" style="margin-bottom: -6px;">
<input type="text" class="label" name="attr_resource_right_name" title="@{repeating_resource_right_name}" placeholder="OTHER RESOURCE" data-i18n-placeholder="other-resource-u">
<input type="hidden" name="attr_resource_right_itemid">
</div>
</div>
</fieldset>
</div>
<div class="textbox traits" style="min-height: 480px;">
<input type="hidden" class="inventoryflag" name="attr_simpletraits" value="complex">
<textarea class="sheet-simple" name="attr_features_and_traits" style="min-height: 461px; height: 461px;"></textarea>
<div class="complex">
<fieldset class="repeating_traits">
<div class="trait">
<button type="roll" name="roll_output" class="output" value="@{wtype}&{template:traits} @{charname_output} {{name=@{name}}} {{source=@{source}: @{source_type}}} {{description=@{description}}}">w</button>
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<input class="display-flag" type="checkbox" name="attr_display_flag">
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_name" style="width: 120px;">
</div>
<div class="row">
<span data-i18n="source:-u">SOURCE:</span>
<select name="attr_source">
<option selected="selected" data-i18n="racial">Racial</option>
<option data-i18n="class">Class</option>
<option data-i18n="feat">Feat</option>
<option data-i18n="background">Background</option>
<option data-i18n="other">Other</option>
</select>
</div>
<div class="row">
<span data-i18n="source-type:-u">SOURCE TYPE:</span>
<input type="text" name="attr_source_type" style="width: 160px;" placeholder="Bothan/Fighter/4th Level">
</div>
<div class="row">
<textarea name="attr_description" style="min-height: 200px; height: 200px;"></textarea>
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<span class="title" name="attr_name"></span>
<span class="subheader">
<span name="attr_source"></span><span>: </span><span name="attr_source_type"></span>
</span>
<span class="desc" name="attr_description"></span>
</div>
</div>
</fieldset>
</div>
<span class="label" data-i18n="feats-traits-u" style="margin-top: 0px; position: absolute; bottom: 0px;">FEATURES & TRAITS</span>
</div>
<input type="hidden" class="missing-info-flag" name="attr_missing_info">
<div class="missing-info">
<span><span class="info-popup pictos">i</span> Looking for missing data?</span>
<span class="missing-info-desc">Your data is in the simple version that can be re-enabled from the Settings(gear) tab of the character sheet. Under GENERAL OPTIONS and then FEATS & TRAITS. Set the section to be 'Simple'.</span>
</div>
</div>
</div>
</div>
<div class="page bio">
<div class="header">
<div class="name-container">
<img src="https://s22.postimg.cc/jnlp8fqc1/Star_Wars_5_E_Logo_Shrunk.png" style="padding-bottom: 10px;">
<input type="text" name="attr_character_name" style="width: 100%;">
<span class="label" data-i18n="char-name-u">CHARACTER NAME</span>
</div>
<div class="header-info">
<div class="top" style="position: relative; top: 10px;">
<div class="hlabel-container">
<input type="text" name="attr_age" style="width: 120px;">
<span class="label" data-i18n="age-u">AGE</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_size" style="width: 120px;">
<span class="label" data-i18n="size-u">SIZE</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_height" style="width: 120px;">
<span class="label" data-i18n="height-u">HEIGHT</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_weight" style="width: 120px;">
<span class="label" data-i18n="weight-u">WEIGHT</span>
</div>
</div>
<div class="bottom">
<div class="hlabel-container">
<input type="text" name="attr_eyes" style="width: 160px;">
<span class="label" data-i18n="eye-u">EYES</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_skin" style="width: 160px;">
<span class="label" data-i18n="skin-u">SKIN</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_hair" style="width: 160px;">
<span class="label" data-i18n="hair-u">HAIR</span>
</div>
</div>
</div>
</div>
<div class="body">
<div class="col col1">
<div class="textbox">
<textarea name="attr_character_appearance" style="min-height: 300px; height: 300px;"></textarea>
<span class="label" data-i18n="char-appearance-u">CHARACTER APPEARANCE</span>
</div>
<div class="textbox">
<textarea name="attr_character_backstory" style="min-height: 623px; height: 623px;"></textarea>
<span class="label" data-i18n="char-backstory-u">CHARACTER BACKSTORY</span>
</div>
<div class="textbox">
<textarea name="attr_miscellaneous" style="min-height: 300px; height: 300px;"></textarea>
<span class="label" data-i18n="miscellaneous-u">MISCELLANEOUS</span>
</div>
</div>
<div class="col2-3">
<div class="textbox">
<textarea name="attr_allies_and_organizations" style="min-height: 288px; height: 300px;"></textarea>
<span class="label" data-i18n="allies-orgs-u">ALLIES & ORGANIZATIONS</span>
</div>
<div class="textbox">
<textarea name="attr_additional_feature_and_traits" style="min-height: 289px; height: 300px;"></textarea>
<span class="label" data-i18n="add-feats-traits-u">ADDITIONAL FEATURES & TRAITS</span>
</div>
<div class="textbox">
<textarea name="attr_treasure" style="min-height: 300px; height: 300px;"></textarea>
<span class="label" data-i18n="treasure-u">LOOT</span>
</div>
<div class="textbox">
<textarea name="attr_storage" style="min-height: 300px; height: 300px;"></textarea>
<span class="label" data-i18n="storage-u">STORAGE</span>
</div>
</div>
</div>
</div>
<div class="page powers">
<div class="header">
<div class="name-container">
<img src="https://s22.postimg.cc/jnlp8fqc1/Star_Wars_5_E_Logo_Shrunk.png" style="padding-bottom: 10px;">
<input type="text" name="attr_character_name" style="width: 100%;">
<span class="label" data-i18n="char-name-u">CHARACTER NAME</span>
</div>
<div class="header-info">
<div class="part">
<select name="attr_powercasting_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
<span class="label" data-i18n="power-ability-u">POWERCASTING ABILITY</span>
</div>
<div class="part">
<span class="display" name="attr_power_save_dc"></span>
<span class="label" data-i18n="power-save-dc-u">POWER SAVE DC</span>
</div>
<div class="part">
<span class="display" name="attr_power_attack_bonus"></span>
<span class="label" data-i18n="power-atk-bonus-u">POWER ATTACK BONUS</span>
</div>
</div>
</div>
<input type="hidden" class="powericon_flag" name="attr_powericon_flag" value="all">
<div class="body">
<div class="col col1">
<span class="power-labels">
<span data-i18n="force_slots_total-u" style="margin-right: 45px;">FORCE TOTAL</span>
<span data-i18n="force_slots_remaining-u">FORCE REMAINING</span>
</span>
<div class="power-level">
<div class="level">
<span class="label">FP</span>
</div>
<div class="total">
<input type="number" name="attr_force_power_points_total" value="0">
</div>
<div class="expended">
<input type="number" name="attr_force_power_points_expended" value="0">
</div>
</div>
<span class="power-labels">
<span data-i18n="tech_slots_total-u" style="margin-right: 45px;">TECH TOTAL</span>
<span data-i18n="tech_slots_remaining-u">TECH REMAINING</span>
</span>
<div class="power-level">
<div class="level">
<span class="label">TP</span>
</div>
<div class="total">
<input type="number" name="attr_tech_power_points_total" value="0">
</div>
<div class="expended">
<input type="number" name="attr_tech_power_points_expended" value="0">
</div>
</div>
<br>
<div class="power-level">
<div class="level">
<span class="label">0</span>
</div>
<div class="cantrips">
<span class="label" data-i18n="cantrips-u">AT-WILL</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-cantrip">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="cantrip-progression:-u">AT-WILL PROGRESSION</span>
<select name="attr_power_damage_progression">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Cantrip Dice" data-i18n="cantrip-dice-u">AT-WILL DICE</option>
<option value="Cantrip Beam" data-i18n="cantrip-beam-u">AT-WILL BEAM</option>
</select>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="cantrip">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
<div class="power-level">
<div class="level">
<span class="label">1</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-1">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="1">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<input type="checkbox" name="attr_powerprepared" value="1" class="sheet-prep-box"><span class="prep"></span>
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
<div class="power-level">
<div class="level">
<span class="label">2</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-2">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="2">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<input type="checkbox" name="attr_powerprepared" value="1" class="sheet-prep-box"><span class="prep"></span>
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
</div>
<div class="col col2">
<div class="power-level">
<div class="level">
<span class="label">3</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-3">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="3">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<input type="checkbox" name="attr_powerprepared" value="1" class="sheet-prep-box"><span class="prep"></span>
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
<div class="power-level">
<div class="level">
<span class="label">4</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-4">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="4">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<input type="checkbox" name="attr_powerprepared" value="1" class="sheet-prep-box"><span class="prep"></span>
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
<!-- Edited Spell Adding here ppl -->
<div class="power-level">
<div class="level">
<span class="label">5</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-5">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="5">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<input type="checkbox" name="attr_powerprepared" value="1" class="sheet-prep-box"><span class="prep"></span>
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
<!-- Removed Components Here -->
</div>
<div class="col col3">
<div class="power-level">
<div class="level">
<span class="label">6</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-6">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="6">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<input type="checkbox" name="attr_powerprepared" value="1" class="sheet-prep-box"><span class="prep"></span>
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
<div class="power-level">
<div class="level">
<span class="label">7</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-7">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="7">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<input type="checkbox" name="attr_powerprepared" value="1" class="sheet-prep-box"><span class="prep"></span>
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
<div class="power-level">
<div class="level">
<span class="label">8</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-8">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="8">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<input type="checkbox" name="attr_powerprepared" value="1" class="sheet-prep-box"><span class="prep"></span>
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
<div class="power-level">
<div class="level">
<span class="label">9</span>
</div>
</div>
<div class="power-container">
<fieldset class="repeating_power-9">
<div class="power">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_powername">
</div>
<div class="row">
<span data-i18n="school:-u">SCHOOL:</span>
<select name="attr_powerschool">
<option value="force" data-i18n="force">Force</option>
<option value="tech" data-i18n="tech">Tech</option>
</select>
</div>
<div class="row">
<span data-i18n="casting-time:-u">CASTING TIME:</span>
<input type="text" name="attr_powercastingtime">
</div>
<div class="row">
<span data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_powerrange">
</div>
<div class="row">
<span data-i18n="target:-u">TARGET:</span>
<input type="text" name="attr_powertarget">
</div>
<div class="row">
<input type="checkbox" name="attr_powerconcentration" value="{{concentration=1}}">
<span data-i18n="concentration-u">CONCENTRATION</span>
</div>
<div class="row">
<span data-i18n="duration:-u">DURATION:</span>
<input type="text" name="attr_powerduration">
</div>
<div class="row">
<span data-i18n="power-ability-u">POWERCASTING ABILITY</span>
<select name="attr_power_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="innate:-u">INNATE:</span>
<input type="text" name="attr_innate" placeholder="1/day" value="">
</div>
<div class="row">
<span data-i18n="output:-u">OUTPUT:</span>
<select name="attr_poweroutput">
<option value="POWERCARD" data-i18n="powercard-u">POWERCARD</option>
<option value="ATTACK" data-i18n="attack-u">ATTACK</option>
</select>
</div>
<input type="hidden" class="powerattackinfoflag" name="attr_poweroutput">
<div class="powerattackinfo">
<div class="row">
<span data-i18n="power-atk:-u">POWER ATTACK:</span>
<select name="attr_powerattack">
<option value="None" data-i18n="none">None</option>
<option value="Melee" data-i18n="melee">Melee</option>
<option value="Ranged" data-i18n="ranged">Ranged</option>
</select>
</div>
<div class="row">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_powerdamage" style="width: 50px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_powerdamage2" style="width: 45px;">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_powerdamagetype2" style="width: 103px;">
</div>
<div class="row">
<span data-i18n="healing:-u">HEALING:</span>
<input type="text" name="attr_powerhealing" style="width: 45px;">
</div>
<div class="row">
<input type="checkbox" name="attr_powerdmgmod" value="Yes">
<span data-i18n="add-ability-mod-u">ADD ABILITY MOD TO DAMAGE OR HEALING</span>
</div>
<div class="row">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_powersave">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="effect:-u">EFFECT:</span>
<input type="text" name="attr_powersavesuccess" style="width: 78px;" placeholder="Half damage" data-i18n-placeholder="half-dmg-place">
</div>
<div class="row">
<span data-i18n="at-higher-lvl-dmg:-u">HIGHER LVL CAST DMG:</span>
<input type="text" name="attr_powerhldie" placeholder="1" style="width: 15px; text-align: right;">
<select name="attr_powerhldietype">
<option value="" selected="selected" data-i18n="none-u">NONE</option>
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<span>+</span>
<input type="text" name="attr_powerhlbonus" placeholder="0" style="width: 15px; text-align: center;">
</div>
<div class="row">
<span data-i18n="include_power_desc:-u">INCLUDE POWER DESCRIPTION IN ATTACK:</span>
<select name="attr_includedesc">
<option value="off" selected="selected" data-i18n="off">Off</option>
<option value="partial" data-i18n="partial">Partial</option>
<option value="on" data-i18n="on">On</option>
</select>
</div>
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
</div>
<div class="row">
<textarea name="attr_powerdescription"></textarea>
</div>
<div class="row">
<span data-i18n="at-higher-lvl:-u">AT HIGHER LEVELS:</span>
</div>
<div class="row">
<textarea name="attr_powerathigherlevels" style="height: 36px; min-height: 36px;"></textarea>
</div>
<input type="hidden" name="attr_powerattackid">
<input type="hidden" name="attr_powerlevel" value="9">
</div>
<div class="display">
<input type="hidden" name="attr_rollcontent" value="@{wtype}&{template:power} {{level=@{powerschool} @{powerlevel}}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}">
<input type="checkbox" name="attr_powerprepared" value="1" class="sheet-prep-box"><span class="prep"></span>
<button class="powercard" type="roll" name="roll_power" value="@{rollcontent}">
<span class="powername" name="attr_powername"></span>
<input class="innate_flag" type="hidden" name="attr_innate" value="">
<span class="innate" name="attr_innate"></span>
</button>
<input type="hidden" class="powerconcentration" name="attr_powerconcentration" value="0">
<span class="powerconcentration" data-i18n="power-concentration">C</span>
</div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
<div class="page options">
<div class="header">
<div class="name-container">
<img src="https://s22.postimg.cc/jnlp8fqc1/Star_Wars_5_E_Logo_Shrunk.png" style="padding-bottom: 10px;">
<input type="text" name="attr_character_name" style="width: 100%;">
<span class="label" data-i18n="char-name-u">CHARACTER NAME</span>
</div>
<input class="options-flag" type="checkbox" name="attr_options-class-selection" checked="checked"><span>y</span>
<div class="header-info sheet-options">
<div class="sheet-row" style="border-top: 2px dashed gold;">
<span data-i18n="class:-u">CLASS:</span>
<input type="hidden" name="attr_custom_class" class="sheet-flag">
<select class="hiding class" name="attr_class">
<option value="" data-i18n="choose">Choose</option>
<option value="Berserker" data-i18n="berserker">Berserker</option>
<option value="Scholar" data-i18n="scholar">Scholar</option>
<option value="Engineer" data-i18n="engineer">Engineer</option>
<option value="Fighter" data-i18n="fighter">Fighter</option>
<option value="Monk" data-i18n="monk">Monk</option>
<option value="Guardian" data-i18n="guardian">Guardian</option>
<option value="Scout" data-i18n="scout">Scout</option>
<option value="Operative" data-i18n="operative">Operative</option>
<option value="Sentinel" data-i18n="sentinel">Sentinel</option>
<option value="Consular" data-i18n="consular">Consular</option>
</select>
<input type="text" class="showing" name="attr_cust_classname" style="width: 90px;">
<span data-i18n="subclass:-u">SUBCLASS:</span>
<input type="text" name="attr_subclass">
<span data-i18n="lvl:-u">LEVEL:</span>
<input type="number" class="class-level" style="width: 40px" name="attr_base_level" value="1">
</div>
<div class="sheet-row">
<span data-i18n="race:-u">RACE:</span>
<input type="text" name="attr_race">
<span data-i18n="subrace:-u">SUBRACE:</span>
<input type="text" name="attr_subrace">
</div>
</div>
<div class="header-info sheet-display">
<div class="top">
<div class="hlabel-container">
<input type="text" name="attr_class_display" class="sheet-class-display sheet-no_events">
<span class="label" data-i18n="class-level-u">CLASS & LEVEL</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_background" style="width: 182px;">
<span class="label" data-i18n="background-u">BACKGROUND</span>
</div>
</div>
<div class="bottom">
<div class="hlabel-container">
<input type="text" name="attr_race_display" class="sheet-no_events">
<span class="label" data-i18n="race-u">RACE</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_alignment">
<span class="label" data-i18n="alignment-u">ALIGNMENT</span>
</div>
<div class="hlabel-container">
<input type="text" name="attr_experience">
<span class="label" data-i18n="exp-pts-u">EXPERIENCE POINTS</span>
</div>
</div>
</div>
</div>
<div class="body">
<div class="col col1">
<div class="class_options">
<div class="row">
<span data-i18n="hit-die:-u">HIT DIE:</span>
<select name="attr_hitdietype">
<option value="4">D4</option>
<option value="6">D6</option>
<option value="8">D8</option>
<option value="10">D10</option>
<option value="12">D12</option>
</select>
</div>
<div class="row">
<span data-i18n="carrying-capacity-mod:-u">CARRYING CAPACITY MODIFIER:</span>
<input type="text" class="num" name="attr_carrying_capacity_mod" placeholder="*2">
</div>
<div class="row">
<span data-i18n="glob-atk-mod:-u">GLOBAL POWER ATTACK MODIFIER:</span>
<input type="text" class="num" name="attr_globalpowermod" placeholder="0" value="0">
</div>
<div class="row">
<span data-i18n="power-caster-lvl:-u">POWER CASTER LEVEL:</span>
<input type="text" class="num" name="attr_caster_level">
</div>
<div class="row">
<span data-i18n="power_dc_mod:-u">POWER SAVE DC MOD:</span>
<input type="text" class="num" name="attr_power_dc_mod" placeholde="0" value="0">
</div>
<div class="row">
<span data-i18n="power-icons:-u">POWER ICONS:</span>
<select name="attr_powericon_flag">
<option value="all" data-i18n="show_all">Show All</option>
<option value="cp" data-i18n="cr_only">C&R Only</option>
<option value="none" data-i18n="none">None</option>
</select>
</div>
<div class="row">
<input type="checkbox" name="attr_precognition_flag" value="1">
<span data-i18n="precognition-u">PRECOGNITION (REROLL ONES)</span>
</div>
<div class="row">
<input type="checkbox" name="attr_tech_fighter" value="1">
<span data-i18n="tech-fighter-u">TECH FIGHTER</span>
</div>
<div class="row">
<input type="checkbox" name="attr_tech_operative" value="1">
<span data-i18n="tech-operative-u">TECH OPERATIVE</span>
</div>
<div class="row title">
<span data-i18n="class-options-u">CLASS OPTIONS</span>
</div>
</div>
<div class="class_options">
<div class="row">
<input type="checkbox" name="attr_multiclass1_flag" value="1">
<span data-i18n="2nd-class:-u">2ND CLASS:</span>
<select name="attr_multiclass1" style="width: 64px;">
<option value="berserker" data-i18n="berserker">Berserker</option>
<option value="scholar" data-i18n="scholar">Scholar</option>
<option value="engineer" data-i18n="engineer">Engineer</option>
<option value="fighter" data-i18n="fighter">Fighter</option>
<option value="monk" data-i18n="monk">Monk</option>
<option value="guardian" data-i18n="guardian">Guardian</option>
<option value="scout" data-i18n="scout">Scout</option>
<option value="operative" data-i18n="operative">Operative</option>
<option value="sentinel" data-i18n="sentinel">Sentinel</option>
<option value="consular" data-i18n="consular">Consular</option>
</select>
<span data-i18n="lvl:-u">LEVEL:</span>
<input type="text" name="attr_multiclass1_lvl" value="1" style="width: 28px; text-align: center;">
<span data-i18n="subclass:-u" class="sheet-subclass">SUBCLASS:</span>
<input type="text" name="attr_multiclass1_subclass">
</div>
<div class="row">
<input type="checkbox" name="attr_multiclass2_flag" value="1">
<span data-i18n="3rd-class:-u">3RD CLASS:</span>
<select name="attr_multiclass2" style="width: 64px;">
<option value="berserker" data-i18n="berserker">Berszerker</option>
<option value="scholar" data-i18n="scholar">Scholar</option>
<option value="engineer" data-i18n="engineer">Engineer</option>
<option value="fighter" data-i18n="fighter">Fighter</option>
<option value="monk" data-i18n="monk">Monk</option>
<option value="guardian" data-i18n="guardian">Guardian</option>
<option value="scout" data-i18n="scout">Scout</option>
<option value="operative" data-i18n="operative">Operative</option>
<option value="sentinel" data-i18n="sentinel">Sentinel</option>
<option value="consular" data-i18n="consular">Consular</option>
</select>
<span data-i18n="lvl:-u">LEVEL:</span>
<input type="text" name="attr_multiclass2_lvl" value="1" style="width: 28px; text-align: center;">
<span data-i18n="subclass:-u" class="sheet-subclass">SUBCLASS:</span>
<input type="text" name="attr_multiclass2_subclass">
</div>
<div class="row">
<input type="checkbox" name="attr_multiclass3_flag" value="1">
<span data-i18n="4th-class:-u">4TH CLASS:</span>
<select name="attr_multiclass3" style="width: 64px;">
<option value="berserker" data-i18n="berserker">Berserker</option>
<option value="scholar" data-i18n="scholar">Scholar</option>
<option value="engineer" data-i18n="engineer">Engineer</option>
<option value="fighter" data-i18n="fighter">Fighter</option>
<option value="monk" data-i18n="monk">Monk</option>
<option value="guardian" data-i18n="guardian">Guardian</option>
<option value="scout" data-i18n="scout">Scout</option>
<option value="operative" data-i18n="operative">Operative</option>
<option value="sentinel" data-i18n="sentinel">Sentinel</option>
<option value="consular" data-i18n="consular">Consular</option>
</select>
<span data-i18n="lvl:-u">LEVEL:</span>
<input type="text" name="attr_multiclass3_lvl" value="1" style="width: 28px; text-align: center;">
<span data-i18n="subclass:-u" class="sheet-subclass">SUBCLASS:</span>
<input type="text" name="attr_multiclass3_subclass">
</div>
<div class="row title">
<span data-i18n="mutliclass-opts-u">MULTICLASS OPTIONS</span>
</div>
</div>
<div class="class_options">
<div class="row">
<input type="checkbox" name="attr_custom_class" value="1">
<span data-i18n="use-cust-class-u">USE CUSTOM CLASS</span>
</div>
<div class="row">
<span data-i18n="class-name:-u">CLASS NAME:</span>
<input type="text" name="attr_cust_classname">
</div>
<div class="row">
<span data-i18n="hit-die:-u">HIT DIE:</span>
<select name="attr_cust_hitdietype">
<option value="4">D4</option>
<option value="6">D6</option>
<option value="8">D8</option>
<option value="10">D10</option>
<option value="12">D12</option>
</select>
</div>
<div class="row">
<span data-i18n="powercasting-ability:-u">POWERCASTING ABILITY:</span>
<select name="attr_cust_powercasting_ability">
<option value="0*" data-i18n="none-u">NONE</option>
<option value="@{strength_mod}+" data-i18n="strength-u">STRENGTH</option>
<option value="@{dexterity_mod}+" data-i18n="dexterity-u">DEXTERITY</option>
<option value="@{constitution_mod}+" data-i18n="constitution-u">CONSTITUTION</option>
<option value="@{intelligence_mod}+" data-i18n="intelligence-u">INTELLIGENCE</option>
<option value="@{wisdom_mod}+" data-i18n="wisdom-u">WISDOM</option>
<option value="@{charisma_mod}+" data-i18n="charisma-u">CHARISMA</option>
</select>
</div>
<div class="row">
<span data-i18n="power-slots:-u">POWER SLOTS:</span>
<select name="attr_cust_powerslots">
<option value="none" data-i18n="none-u">NONE</option>
<option value="full" data-i18n="power-full-u">FULL (Engineer, Druid, Consular)</option>
<option value="half" data-i18n="power-half-u">HALF (Guardian, Scout)</option>
<option value="third" data-i18n="power-third-u">THIRD (Tech Fighter/Operative)</option>
</select>
</div>
<div class="row">
<span data-i18n="saves-u">SAVES</span>
</div>
<div class="row">
<input type="checkbox" name="attr_cust_strength_save_prof" value="(@{pb})">
<span data-i18n="strength">Strength</span>
</div>
<div class="row">
<input type="checkbox" name="attr_cust_dexterity_save_prof" value="(@{pb})">
<span data-i18n="dexterity">Dexterity</span>
</div>
<div class="row">
<input type="checkbox" name="attr_cust_constitution_save_prof" value="(@{pb})">
<span data-i18n="constitution">Constitution</span>
</div>
<div class="row">
<input type="checkbox" name="attr_cust_intelligence_save_prof" value="(@{pb})">
<span data-i18n="intelligence">Intelligence</span>
</div>
<div class="row">
<input type="checkbox" name="attr_cust_wisdom_save_prof" value="(@{pb})">
<span data-i18n="wisdom">Wisdom</span>
</div>
<div class="row">
<input type="checkbox" name="attr_cust_charisma_save_prof" value="(@{pb})">
<span data-i18n="charisma">Charisma</span>
</div>
<div class="row title">
<span data-i18n="cust-class-opts">CUSTOM CLASS OPTIONS</span>
</div>
</div>
</div>
<div class="col col2">
<div class="attribute_options" style="width: 234px;">
<div class="row skill">
<span data-i18n="strength-u">STRENGTH</span>
<span>+</span><input type="text" class="num" name="attr_strength_bonus" value="0" placeholder="0" title="@{strength_bonus}">
</div>
<div class="row skill">
<span data-i18n="dexterity-u">DEXTERITY</span>
<span>+</span><input type="text" class="num" name="attr_dexterity_bonus" value="0" placeholder="0" title="@{dexterity_bonus}">
</div>
<div class="row skill">
<span data-i18n="constitution-u">CONSTITUTION</span>
<span>+</span><input type="text" class="num" name="attr_constitution_bonus" value="0" placeholder="0" title="@{constitution_bonus}">
</div>
<div class="row skill">
<span data-i18n="intelligence-u">INTELLIGENCE</span>
<span>+</span><input type="text" class="num" name="attr_intelligence_bonus" value="0" placeholder="0" title="@{intelligence_bonus}">
</div>
<div class="row skill">
<span data-i18n="wisdom-u">WISDOM</span>
<span>+</span><input type="text" class="num" name="attr_wisdom_bonus" value="0" placeholder="0" title="@{wisdom_bonus}">
</div>
<div class="row skill">
<span data-i18n="charisma-u">CHARISMA</span>
<span>+</span><input type="text" class="num" name="attr_charisma_bonus" value="0" placeholder="0" title="@{charisma_bonus}">
</div>
<div class="row">
<span data-i18n="initiative-mod:-u">INITIATIVE MODIFIER:</span>
<input type="text" class="num" name="attr_initmod" placeholder="0" value="0">
</div>
<div class="row">
<span data-i18n="initiative-style:-u">INITIATIVE STYLE:</span>
<select name="attr_initiative_style">
<option value="@{d20}" selected="selected" data-i18n="norm">Normal</option>
<option value="{@{d20},@{d20}}kh1" data-i18n="adv">Advantage</option>
<option value="{@{d20},@{d20}}kl1" data-i18n="disadv">Disadvantage</option>
<!-- <option value="?{Advantage?|Normal Roll,&#64;&#123;d20&#125;|Advantage,&#123;&#64;&#123;d20&#125;&#44;&#64;&#123;d20&#125;&#125;kh1|Disadvantage,&#123;&#64;&#123;d20&#125;&#44;&#64;&#123;d20&#125;&#125;kl1}" data-i18n="query-roll-adv">Query Advantage</option> -->
<!-- Pajellen was here -->
</select>
</div>
<div class="row">
<input type="checkbox" name="attr_init_tiebreaker" value="@{dexterity}/100">
<span data-i18n="add-dex-tiebreaker-u">ADD DEX TIEBREAKER TO INITIATIVE</span>
</div>
<div class="row">
<span data-i18n="glob-ac-mod:-u">GLOBAL ARMOR CLASS MODIFIER:</span>
<input type="text" class="num" name="attr_globalacmod" placeholder="0" value="0">
</div>
<div class="row">
<span data-i18n="armor-class-tracking:-u">ARMOR CLASS TRACKING:</span>
<select name="attr_custom_ac_flag">
<option value="0" selected="selected" data-i18n="automatic">Automatic</option>
<option value="1" data-i18n="custom">Custom</option>
<option value="2" data-i18n="off">Off</option>
</select>
</div>
<input class="toggleflag" type="hidden" name="attr_custom_ac_flag">
<div class="row hidden">
<span data-i18n="custom_ac:-u">CUSTOM AC:</span>
<input type="text" class="num" name="attr_custom_ac_base" placeholder="10" value="10">
<span>+</span>
<select name="attr_custom_ac_part1">
<option value="none" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span>+</span>
<select name="attr_custom_ac_part2">
<option value="none" selected="selected" data-i18n="none-u">NONE</option>
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
</div>
<div class="row">
<span data-i18n="hpmods:-u">HP MODIFIERS:</span>
</div>
<fieldset class="repeating_hpmod">
<div style="padding-left: 15px;">
<span data-i18n="source:-u">SOURCE:</span>
<input type="text" name="attr_source">
<span data-i18n="mod:-u">MOD:</span>
<input type="text" name="attr_mod" class="num">
</div>
</fieldset>
<div class="row title">
<span data-i18n="attribute-opts-u">ATTRIBUTE OPTIONS</span>
</div>
</div>
<div class="save_options" style="width: 234px;">
<div class="row skill">
<span data-i18n="strength-save-u">Strength Save</span>
<span>+</span><input type="text" class="num" name="attr_strength_save_mod" value="0" placeholder="0" title="@{strength_save_mod}">
</div>
<div class="row skill">
<span data-i18n="dexterity-save-u">Dexterity Save</span>
<span>+</span><input type="text" class="num" name="attr_dexterity_save_mod" value="0" placeholder="0" title="@{dexterity_save_mod}">
</div>
<div class="row skill">
<span data-i18n="constitution-save-u">Constitution Save</span>
<span>+</span><input type="text" class="num" name="attr_constitution_save_mod" value="0" placeholder="0" title="@{constitution_save_mod}">
</div>
<div class="row skill">
<span data-i18n="intelligence-save-u">Intelligence Save</span>
<span>+</span><input type="text" class="num" name="attr_intelligence_save_mod" value="0" placeholder="0" title="@{intelligence_save_mod}">
</div>
<div class="row skill">
<span data-i18n="wisdom-save-u">Wisdom Save</span>
<span>+</span><input type="text" class="num" name="attr_wisdom_save_mod" value="0" placeholder="0" title="@{wisdom_save_mod}">
</div>
<div class="row skill">
<span data-i18n="charisma-save-u">Charisma Save</span>
<span>+</span><input type="text" class="num" name="attr_charisma_save_mod" value="0" placeholder="0" title="@{charisma_save_mod}">
</div>
<div class="row">
<span data-i18n="death-save-mod:-u">DEATH SAVE MODIFIER:</span>
<input type="text" class="num" name="attr_death_save_mod" placeholder="0" value="0">
</div>
<div class="row">
<span data-i18n="glob-saving-mod:-u">GLOBAL SAVING THROW MODIFIER:</span>
<input type="text" class="num" name="attr_globalsavemod" placeholder="0" value="0">
</div>
<div class="row title">
<span data-i18n="save-opts-u">SAVE OPTIONS</span>
</div>
</div>
<div class="skill_options" style="width: 234px;">
<div data-i18n-list="skills-list">
<div class="row skill" data-i18n-list-item="acrobatics">
<select name="attr_acrobatics_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="acrobatics-core">Acrobatics <span>(Dex)</span></span>
<span>+</span><input type="text" class="num" name="attr_acrobatics_flat" value="0" placeholder="0" title="@{acrobatics_flat}">
</div>
<div class="row skill" data-i18n-list-item="animal_handling">
<select name="attr_animal_handling_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="animal_handling-core">Animal Handling <span>(Wis)</span></span>
<span>+</span><input type="text" class="num" name="attr_animal_handling_flat" value="0" placeholder="0" title="@{animal_handling_flat}">
</div>
<div class="row skill" data-i18n-list-item="technology">
<select name="attr_technology_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="technology-core">Technology <span>(Int)</span></span>
<span>+</span><input type="text" class="num" name="attr_technology_flat" value="0" placeholder="0" title="@{technology_flat}">
</div>
<div class="row skill" data-i18n-list-item="athletics">
<select name="attr_athletics_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="athletics-core">Athletics <span>(Str)</span></span>
<span>+</span><input type="text" class="num" name="attr_athletics_flat" value="0" placeholder="0" title="@{athletics_flat}">
</div>
<div class="row skill" data-i18n-list-item="deception">
<select name="attr_deception_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="deception-core">Deception <span>(Cha)</span></span>
<span>+</span><input type="text" class="num" name="attr_deception_flat" value="0" placeholder="0" title="@{deception_flat}">
</div>
<div class="row skill" data-i18n-list-item="lore">
<select name="attr_lore_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="lore-core">Lore <span>(Int)</span></span>
<span>+</span><input type="text" class="num" name="attr_lore_flat" value="0" placeholder="0" title="@{lore_flat}">
</div>
<div class="row skill" data-i18n-list-item="insight">
<select name="attr_insight_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="insight-core">Insight <span>(Wis)</span></span>
<span>+</span><input type="text" class="num" name="attr_insight_flat" value="0" placeholder="0" title="@{insight_flat}">
</div>
<div class="row skill" data-i18n-list-item="intimidation">
<select name="attr_intimidation_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="intimidation-core">Intimidation <span>(Cha)</span></span>
<span>+</span><input type="text" class="num" name="attr_intimidation_flat" value="0" placeholder="0" title="@{intimidation_flat}">
</div>
<div class="row skill" data-i18n-list-item="investigation">
<select name="attr_investigation_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="investigation-core">Investigation <span>(Int)</span></span>
<span>+</span><input type="text" class="num" name="attr_investigation_flat" value="0" placeholder="0" title="@{investigation_flat}">
</div>
<div class="row skill" data-i18n-list-item="medicine">
<select name="attr_medicine_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="medicine-core">Medicine <span>(Wis)</span></span>
<span>+</span><input type="text" class="num" name="attr_medicine_flat" value="0" placeholder="0" title="@{medicine_flat}">
</div>
<div class="row skill" data-i18n-list-item="nature">
<select name="attr_nature_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="nature-core">Nature <span>(Int)</span></span>
<span>+</span><input type="text" class="num" name="attr_nature_flat" value="0" placeholder="0" title="@{nature_flat}">
</div>
<div class="row skill" data-i18n-list-item="perception">
<select name="attr_perception_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="perception-core">Perception <span>(Wis)</span></span>
<span>+</span><input type="text" class="num" name="attr_perception_flat" value="0" placeholder="0" title="@{perception_flat}">
</div>
<div class="row skill" data-i18n-list-item="performance">
<select name="attr_performance_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="performance-core">Performance <span>(Cha)</span></span>
<span>+</span><input type="text" class="num" name="attr_performance_flat" value="0" placeholder="0" title="@{performance_flat}">
</div>
<div class="row skill" data-i18n-list-item="persuasion">
<select name="attr_persuasion_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="persuasion-core">Persuasion <span>(Cha)</span></span>
<span>+</span><input type="text" class="num" name="attr_persuasion_flat" value="0" placeholder="0" title="@{persuasion_flat}">
</div>
<div class="row skill" data-i18n-list-item="piloting">
<select name="attr_piloting_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="piloting-core">Piloting <span>(Int)</span></span>
<span>+</span><input type="text" class="num" name="attr_piloting_flat" value="0" placeholder="0" title="@{piloting_flat}">
</div>
<div class="row skill" data-i18n-list-item="sleight_of_hand">
<select name="attr_sleight_of_hand_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="sleight_of_hand-core">Sleight of Hand <span>(Dex)</span></span>
<span>+</span><input type="text" class="num" name="attr_sleight_of_hand_flat" value="0" placeholder="0" title="@{sleight_of_hand_flat}">
</div>
<div class="row skill" data-i18n-list-item="stealth">
<select name="attr_stealth_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="stealth-core">Stealth <span>(Dex)</span></span>
<span>+</span><input type="text" class="num" name="attr_stealth_flat" value="0" placeholder="0" title="@{stealth_flat}">
</div>
<div class="row skill" data-i18n-list-item="survival">
<select name="attr_survival_type"><option value="1" selected="selected" data-i18n="normal">Normal</option><option value="2" data-i18n="expirtise">Expertise</option></select>
<span data-i18n="survival-core">Survival <span>(Wis)</span></span>
<span>+</span><input type="text" class="num" name="attr_survival_flat" value="0" placeholder="0" title="@{survival_flat}">
</div>
</div>
<div class="row" style="margin-top:10px;">
<input type="checkbox" name="attr_jack_of_all_trades" value="@{jack}">
<span data-i18n="jack-of-all-u">JACK OF ALL TRADES</span>
</div>
<div class="row">
<span data-i18n="pass-perc-mod:-u">PASSIVE PERCEPTION MODIFIER:</span>
<input type="text" class="num" name="attr_passiveperceptionmod" placeholder="0" value="0">
</div>
<div class="row title">
<span data-i18n="skill-opts-u">SKILL OPTIONS</span>
</div>
</div>
</div>
<div class="col col3">
<div class="general_options">
<div class="version">
<span data-i18n="version">v</span>
<input type="text" name="attr_version">
</div>
<div class="row">
<span>SHEET TYPE:</span>
<select name="attr_npc">
<option value="0">PC</option>
<option value="1">NPC</option>
<option value="2">Ship</option>
</select>
</div>
<div class="row">
<span data-i18n="roll-queries:-u">ROLL QUERIES:</span>
<select name="attr_rtype">
<option value="{{always=1}} {{r2=[[@{d20}" data-i18n="always-roll-adv">Always Roll Advantage</option>
<option value="@{advantagetoggle}" data-i18n="toggle-roll-adv">Advantage Toggle</option>
<option value="{{query=1}} ?{Advantage?|Normal Roll,&#123&#123normal=1&#125&#125 &#123&#123r2=[[0d20|Advantage,&#123&#123advantage=1&#125&#125 &#123&#123r2=[[@{d20}|Disadvantage,&#123&#123disadvantage=1&#125&#125 &#123&#123r2=[[@{d20}}" data-i18n="query-roll-adv">Query Advantage</option>
<option value="{{normal=1}} {{r2=[[0d20" data-i18n="never-roll-adv">Never Roll Advantage</option>
</select>
</div>
<div class="row">
<span data-i18n="whisp-rolls-gm:-u">WHISPER ROLLS TO GM:</span>
<select name="attr_wtype">
<option value="" data-i18n="never-whisper-roll">Never Whisper Rolls</option>
<option value="@{whispertoggle}" data-i18n="toggle-roll-whisper">Whisper Toggle</option>
<option value="?{Whisper?|Public Roll,|Whisper Roll,/w gm }" data-i18n="query-whisper-roll">Query Whisper</option>
<option value="/w gm " data-i18n="always-whisper-roll">Always Whisper Rolls</option>
</select>
</div>
<div class="row">
<span data-i18n="auto-dmg-roll:-u">AUTO DAMAGE ROLL:</span>
<select class="dtype" name="attr_dtype">
<option value="pick" data-i18n="never-roll-dmg">Don't Auto Roll Damage</option>
<option value="full" data-i18n="always-roll-dmg">Auto Roll Damage & Crit</option>
</select>
</div>
<div class="row">
<span data-i18n="core-die-roll:-u">CORE DIE ROLL:</span>
<input type="text" name="attr_core_die" value="1d20" placeholder="1d20" title="@{core_die}">
</div>
<div class="row">
<span data-i18n="prof-bonus:-u">PROFICIENCY BONUS:</span>
<select class="dtype" name="attr_pb_type">
<option value="level" data-i18n="by-level">By Level (Default)</option>
<option value="die" data-i18n="prof-die">Proficency Die (DMG)</option>
<option value="custom" data-i18n="custom">Custom</option>
</select>
<input type="hidden" name="attr_pb_type">
<input class="pb_custom" type="text" style="float:right;" name="attr_pb_custom" placeholder="2d10">
</div>
<div class="row">
<input type="checkbox" name="attr_global_save_mod_flag" value="1">
<span data-i18n="show-global-save-field-u">SHOW GLOBAL SAVE MODIFIER FIELD</span>
</div>
<div class="row">
<input type="checkbox" name="attr_global_skill_mod_flag" value="1">
<span data-i18n="show-global-skill-field-u">SHOW GLOBAL SKILL MODIFIER FIELD</span>
</div>
<div class="row">
<input type="checkbox" name="attr_global_attack_mod_flag" value="1">
<span data-i18n="show-global-attack-field-u">SHOW GLOBAL ATTACK MODIFIER FIELD</span>
</div>
<div class="row">
<input type="checkbox" name="attr_global_damage_mod_flag" value="1">
<span data-i18n="show-global-damage-field-u">SHOW GLOBAL DAMAGE MODIFIER FIELD</span>
</div>
<div class="row">
<span data-i18n="add-char-to-templates:-u">ADD CHARACTER NAME TO TEMPLATES:</span>
<select class="dtype" name="attr_charname_output">
<option value="{{charname=@{character_name}}}" data-i18n="on">On</option>
<option value="charname=@{character_name}" selected="selected" data-i18n="off">Off</option>
</select>
</div>
<div class="row">
<span data-i18n="level-calculations:-u">LEVEL CALCULATIONS:</span>
<select class="dtype" name="attr_level_calculations">
<option value="on" selected="selected" data-i18n="on">On</option>
<option value="off" data-i18n="off">Off</option>
</select>
</div>
<div class="row">
<span data-i18n="encumbrance:-u">ENCUMBRANCE:</span>
<select name="attr_encumberance_setting">
<option value="off" data-i18n="simple">Simple</option>
<option value="on" data-i18n="variant-phb">Variant (PHB p176)</option>
<option value="disabled" data-i18n="off">Off</option>
</select>
</div>
<div class="row">
<span data-i18n="inventory:-u">INVENTORY:</span>
<select name="attr_simpleinventory">
<option value="complex" data-i18n="compendium-compatible">Compendium Compatible</option>
<option value="simple" data-i18n="simple">Simple</option>
</select>
</div>
<div class="row">
<span data-i18n="feats-traits-u">FEATURES AND TRAITS</span><span>:</span>
<select name="attr_simpletraits">
<option value="complex" data-i18n="compendium-compatible">Compendium Compatible</option>
<option value="simple" data-i18n="simple">Simple</option>
</select>
</div>
<div class="row">
<span data-i18n="prof-langs-u">PROFICENCIES AND LANGUAGES</span><span>:</span>
<select name="attr_simpleproficencies">
<option value="complex" data-i18n="compendium-compatible">Compendium Compatible</option>
<option value="simple" data-i18n="simple">Simple</option>
</select>
</div>
<div class="row">
<span data-i18n="ammo-tracking:-u">AMMO TRACKING:</span>
<select name="attr_ammotracking">
<option value="on" data-i18n="on">On</option>
<option value="off" selected="selected" data-i18n="off">Off</option>
</select>
<span data-i18n-title="api-required-title" data-i18n="api-required-u" title="Try it now with easy one click API installation available with your Pro subscription." style="color:#666; cursor:help;">(API REQUIRED)</span>
</div>
<div class="row">
<span data-i18n="exhaustion-setting-u">SHOW EXHAUSTION TRACKING:</span>
<select name="attr_exhaustion_toggle">
<option value="1" data-i18n="on">On</option>
<option value="0" data-i18n="off" selected="selected">Off</option>
</select>
</div>
<div class="row title">
<span data-i18n="general-opts-u">GENERAL OPTIONS</span>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div style="margin-right: 50px; margin-left: 10px;">
<span data-i18n="portions-sheet-utilize">
Portions of this sheet utilize content from the System Reference Document 5.0 under the OGL License. View OGL License and Copyright Notice. https://wiki.roll20.net/SRD_5.0_OGL_License
</span>
</div>
<div>
<span data-i18n="footer-wiki-link">
For more information about this character sheet, its functionality, or uses, please check out the Roll20 Wiki for official documentation. https://wiki.roll20.net/5th_Edition_OGL_by_Roll20
</span>
</div>
</div>
<!-- #region COMPENDIUM DROP CATCHERS -->
<input type="hidden" name="attr_drop_category" accept="Category">
<input type="hidden" name="attr_drop_name" accept="Name">
<input type="hidden" name="attr_drop_weight" accept="Weight">
<input type="hidden" name="attr_drop_properties" accept="Properties">
<input type="hidden" name="attr_drop_modifiers" accept="Modifiers">
<input type="hidden" name="attr_drop_content" accept="Content">
<input type="hidden" name="attr_drop_itemtype" accept="Item Type">
<input type="hidden" name="attr_drop_damage" accept="Damage">
<input type="hidden" name="attr_drop_damagetype" accept="Damage Type">
<input type="hidden" name="attr_drop_range" accept="Range">
<input type="hidden" name="attr_drop_ac" accept="AC">
<input type="hidden" name="attr_drop_actions" accept="data-Actions">
<input type="hidden" name="attr_drop_legendary_actions" accept="data-Legendary Actions">
<input type="hidden" name="attr_drop_legendary_actions_desc" accept="Legendary Actions Desc">
<input type="hidden" name="attr_drop_reactions" accept="data-Reactions">
<input type="hidden" name="attr_drop_traits" accept="data-Traits">
<input type="hidden" name="attr_drop_attack_type" accept="Power Attack">
<input type="hidden" name="attr_drop_powerdesc" accept="data-description">
<input type="hidden" name="attr_drop_damage2" accept="Secondary Damage">
<input type="hidden" name="attr_drop_damagetype2" accept="Secondary Damage Type">
<input type="hidden" name="attr_drop_alt_damage" accept="Alternate Damage">
<input type="hidden" name="attr_drop_alt_damagetype" accept="Alternate Damage Type">
<input type="hidden" name="attr_drop_alt_damage2" accept="Alternate Secondary Damage">
<input type="hidden" name="attr_drop_alt_damagetype2" accept="Alternate Secondary Damage Type">
<input type="hidden" name="attr_drop_powerschool" accept="School">
<input type="hidden" name="attr_drop_powercastingtime" accept="Casting Time">
<input type="hidden" name="attr_drop_powertarget" accept="Target">
<input type="hidden" name="attr_drop_powercomp_materials" accept="Material">
<input type="hidden" name="attr_drop_powerconcentrationflag" accept="Concentration">
<input type="hidden" name="attr_drop_powerduration" accept="Duration">
<input type="hidden" name="attr_drop_powerhealing" accept="Healing">
<input type="hidden" name="attr_drop_powerdmgmod" accept="Add Casting Modifier">
<input type="hidden" name="attr_drop_powersave" accept="Save">
<input type="hidden" name="attr_drop_powersavesuccess" accept="Save Success">
<input type="hidden" name="attr_drop_powerhldie" accept="Higher Power Slot Dice">
<input type="hidden" name="attr_drop_powerhldietype" accept="Higher Power Slot Die">
<input type="hidden" name="attr_drop_powerhlbonus" accept="Higher Power Slot Bonus">
<input type="hidden" name="attr_drop_powerhldesc" accept="Higher Power Slot Desc">
<input type="hidden" name="attr_drop_powerlevel" accept="Level">
<input type="hidden" name="attr_drop_power_damage_progression" accept="Damage Progression">
<input type="hidden" name="attr_drop_speed" accept="Speed">
<input type="hidden" name="attr_drop_str" accept="STR">
<input type="hidden" name="attr_drop_dex" accept="DEX">
<input type="hidden" name="attr_drop_con" accept="CON">
<input type="hidden" name="attr_drop_int" accept="INT">
<input type="hidden" name="attr_drop_wis" accept="WIS">
<input type="hidden" name="attr_drop_cha" accept="CHA">
<input type="hidden" name="attr_drop_vulnerabilities" accept="Vulnerabilities">
<input type="hidden" name="attr_drop_resistances" accept="Resistances">
<input type="hidden" name="attr_drop_immunities" accept="Immunities">
<input type="hidden" name="attr_drop_condition_immunities" accept="Condition Immunities">
<input type="hidden" name="attr_drop_languages" accept="Languages">
<input type="hidden" name="attr_drop_challenge_rating" accept="Challenge Rating">
<input type="hidden" name="attr_drop_size" accept="Size">
<input type="hidden" name="attr_drop_type" accept="Type">
<input type="hidden" name="attr_drop_alignment" accept="Alignment">
<input type="hidden" name="attr_drop_hp" accept="HP">
<input type="hidden" name="attr_drop_saving_throws" accept="Saving Throws">
<input type="hidden" name="attr_drop_senses" accept="Senses">
<input type="hidden" name="attr_drop_passive_perception" accept="Passive Perception">
<input type="hidden" name="attr_drop_skills" accept="Skills">
<input type="hidden" name="attr_drop_token_size" accept="Token Size">
<input type="hidden" name="attr_drop_armor_prof" accept="data-Armor Proficiency">
<input type="hidden" name="attr_drop_hit_die" accept="Hit Die">
<input type="hidden" name="attr_drop_weapon_prof" accept="data-Weapon Proficiency">
<input type="hidden" name="attr_drop_powercasting_ability" accept="Powercasting Ability">
<input type="hidden" name="attr_drop_class_saving_throws" accept="data-Saving Throws">
<input type="hidden" name="attr_drop_language_prof" accept="data-Language Proficiency">
<input type="hidden" name="attr_drop_tool_prof" accept="data-Tool Proficiency">
<input type="hidden" name="attr_drop_hp_per_level" accept="data-HP per level">
<input type="hidden" name="attr_drop_class_powers" accept="data-Class Powers">
<input type="hidden" name="attr_drop_global_damage" accept="data-Global Damage">
<input type="hidden" name="attr_drop_feature_name" accept="data-Feature Name">
<input type="hidden" name="attr_drop_feature_description" accept="data-Feature Description">
<input type="hidden" name="attr_drop_resources" accept="data-Resources">
<!-- endregion COMPENDIUM DROP CATCHERS -->
<!-- #region Manual Drop Fields-->
<input type="hidden" name="attr_drop_power_ability" accept="powercasting_ability">
<input type="hidden" name="attr_drop_toolbonus_base" accept="toolbonus_base">
<input type="hidden" name="attr_drop_itemcount" accept="itemcount">
<input type="hidden" name="attr_drop_skill_proficiency" accept="data-Skill Proficiency">
<input type="hidden" name="attr_drop_parent" accept="data-Parent">
<!-- endregion Manual Drop Fields-->
</div> <!-- licensecontainer div close -->
<div class="container ship">
<input class="tab-button ship-core" type="radio" name="attr_ship_tab" value="ship-core" checked="checked"><span data-i18n="core-u">CORE</span>
<input class="tab-button ship-cargo" type="radio" name="attr_ship_tab" value="ship-cargo"><span data-i18n="ship-cargo-tab-u">CARGO</span>
<input class="tab-button ship-mods" type="radio" name="attr_ship_tab" value="ship-mods"><span data-i18n="ship-mods-tab-u">MODS</span>
<input class="tab-button ship-suites" type="radio" name="attr_ship_tab" value="ship-suites"><span data-i18n="ship-suites-tab-u">SUITES</span>
<input class="tab-button options" type="radio" name="attr_ship_tab" value="options"><span style="font-family: pictos">y</span>
<div class="page ship-suites">
<div class="header">
<div class="name-container">
<img src="https://s22.postimg.cc/jnlp8fqc1/Star_Wars_5_E_Logo_Shrunk.png" style="padding-bottom: 10px;">
<input type="text" name="attr_character_name" style="width: 100%;">
<span class="label" data-i18n="ship-name-u">SHIP NAME</span>
</div>
<div class="header-info sheet-options">
<div class="sheet-row">
<span data-i18n="ship-size:-u">SIZE:</span>
<select class="hiding class" name="attr_ship_size">
<option value="" data-i18n="choose">Choose</option>
<option value="Tiny" data-i18n="tiny">Tiny</option>
<option value="Small" data-i18n="small">Small</option>
<option value="Medium" data-i18n="medium">Medium</option>
<option value="Large" data-i18n="large">Large</option>
<option value="Huge" data-i18n="huge">Huge</option>
<option value="Gargantuan" data-i18n="gargantuan">Gargantuan</option>
</select>
<span data-i18n="ship-tier:-u">TIER:</span>
<input type="number" class="class-level" style="width: 40px" name="attr_base_ship_tier" value="0">
<span data-i18n="role-specialization:-u">ROLE:</span>
<input type="text" class="class-level" name="attr_ship_role" value="">
</div>
<div class="sheet-row">
<span data-i18n="ship-manufacturer:-u">MANUFACTURER/LINE/CLASS:</span>
<input type="text" name="attr_ship_manufacturer">
</div>
<div class="sheet-row">
<span data-i18n="ship-credits-next-tier:-u">CREDITS NEEDED TO UPGRADE TO NEXT TIER:</span>
<input type="number" style="width:90px" name="attr_ship_cr_next">
</div>
</div>
</div>
<div class="body">
<div class="col2-3">
<div class="textbox traits" style="min-height: 84px; width:480px; display:inline-block;">
<input type="hidden" class="inventoryflag" name="attr_simpletraits" value="complex">
<textarea class="sheet-simple" name="attr_features_and_traits" style="min-height: 260px; height: 260px;"></textarea>
<div class="complex" style="width: 475px;">
<fieldset class="repeating_suites">
<div class="trait">
<button type="roll" name="roll_output" class="output" value="@{wtype}&{template:traits} @{charname_output} {{name=@{suite_name}}} {{source=@{suite_source}: @{suite_source_type}}} {{description=@{suite_description}}}">w</button>
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<input class="display-flag" type="checkbox" name="attr_display_flag">
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_suite_name" style="width: 120px;">
</div>
<div class="row">
<span data-i18n="source:-u">SOURCE:</span>
<select name="attr_suite_source">
<option selected="selected" data-i18n="base">Base</option>
<option data-i18n="upgrade">Upgrade</option>
<option data-i18n="other">Other</option>
</select>
</div>
<div class="row">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_suite_source_type" style="width: 160px;" value="Suite System">
</div>
<div class="row">
<span data-i18n="grade:-u">GRADE:</span>
<input type="number" name="attr_suite_grade" style="width: 160px;" placeholder=0>
</div>
<div class="row">
<span data-i18n="cost:-u">Cost:</span>
<input type="number" name="attr_suite_mod_cost" style="width: 160px;" placeholder=0>
</div>
<div class="row">
<textarea name="attr_suite_description" style="min-height: 200px; height: 200px;"></textarea>
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<span class="title" name="attr_suite_name"></span>
<span class="subheader">
Grade: <span name="attr_suite_grade"></span>: <span name="attr_suite_source"></span><span>: </span><span name="attr_suite_source_type"></span>: <span name="attr_suite_mod_cost"></span> cr
</span>
<span class="desc" name="attr_suite_description"></span>
</div>
</div>
</fieldset>
</div>
<span class="label" data-i18n="modifications-suites-u" style="margin-top: 0px; position: absolute; bottom: 0px;">SUITE MODIFICATIONS</span>
</div>
</div>
<div class="col">
<div class="hp">
<div class="top">
<span data-i18n="ship-mod-max">Modification Capacity</span>
<input type="text" name="attr_ship_mod_max" title="@{ship_mod_max}">
</div>
<input type="number" name="attr_ship_mod_current" title="@{ship_mod_current}">
<span class="label" data-i18n="ship-mod-current-u">TOTAL MODIFICATIONS</span>
</div>
<div class="hp">
<div class="top">
<span data-i18n="ship-suites-max">Maximum Suites</span>
<input type="text" name="attr_ship_suites_max" title="@{ship_suites_max}">
</div>
<input type="number" name="attr_ship_suites_current" title="@{ship_suites_current}">
<span class="label" data-i18n="ship-suites-current-u">TOTAL SUITES</span>
</div>
</div>
</div>
</div>
<div class="page ship-mods">
<div class="header">
<div class="name-container">
<img src="https://s22.postimg.cc/jnlp8fqc1/Star_Wars_5_E_Logo_Shrunk.png" style="padding-bottom: 10px;">
<input type="text" name="attr_character_name" style="width: 100%;">
<span class="label" data-i18n="ship-name-u">SHIP NAME</span>
</div>
<div class="header-info sheet-options">
<div class="sheet-row">
<span data-i18n="ship-size:-u">SIZE:</span>
<select class="hiding class" name="attr_ship_size">
<option value="" data-i18n="choose">Choose</option>
<option value="Tiny" data-i18n="tiny">Tiny</option>
<option value="Small" data-i18n="small">Small</option>
<option value="Medium" data-i18n="medium">Medium</option>
<option value="Large" data-i18n="large">Large</option>
<option value="Huge" data-i18n="huge">Huge</option>
<option value="Gargantuan" data-i18n="gargantuan">Gargantuan</option>
</select>
<span data-i18n="ship-tier:-u">TIER:</span>
<input type="number" class="class-level" style="width: 40px" name="attr_base_ship_tier" value="0">
<span data-i18n="role-specialization:-u">ROLE:</span>
<input type="text" class="class-level" name="attr_ship_role" value="">
</div>
<div class="sheet-row">
<span data-i18n="ship-manufacturer:-u">MANUFACTURER/LINE/CLASS:</span>
<input type="text" name="attr_ship_manufacturer">
</div>
<div class="sheet-row">
<span data-i18n="ship-credits-next-tier:-u">CREDITS NEEDED TO UPGRADE TO NEXT TIER:</span>
<input type="number" style="width:90px" name="attr_ship_cr_next">
</div>
</div>
</div>
<div class="body">
<div class="col2-3">
<div class="textbox traits" style="min-height: 84px; width:480px; display:inline-block;">
<input type="hidden" class="inventoryflag" name="attr_simpletraits" value="complex">
<textarea class="sheet-simple" name="attr_features_and_traits" style="min-height: 260px; height: 260px;"></textarea>
<div class="complex" style="width: 475px;">
<fieldset class="repeating_modifications">
<div class="trait">
<button type="roll" name="roll_output" class="output" value="@{wtype}&{template:traits} @{charname_output} {{name=@{name}}} {{source=@{source}: @{source_type}}} {{description=@{description}}}">w</button>
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<input class="display-flag" type="checkbox" name="attr_display_flag">
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_name" style="width: 120px;">
</div>
<div class="row">
<span data-i18n="source:-u">SOURCE:</span>
<select name="attr_source">
<option selected="selected" data-i18n="base">Base</option>
<option data-i18n="upgrade">Upgrade</option>
<option data-i18n="other">Other</option>
</select>
</div>
<div class="row">
<span data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_source_type" style="width: 160px;" placeholder="Universal, Engineering...">
</div>
<div class="row">
<span data-i18n="grade:-u">GRADE:</span>
<input type="number" name="attr_mod_grade" style="width: 160px;" placeholder=0>
</div>
<div class="row">
<span data-i18n="cost:-u">Cost:</span>
<input type="number" name="attr_mod_cost" style="width: 160px;" placeholder=0>
</div>
<div class="row">
<textarea name="attr_description" style="min-height: 200px; height: 200px;"></textarea>
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<span class="title" name="attr_name"></span>
<span class="subheader">
Grade: <span name="attr_mod_grade"></span>: <span name="attr_source"></span><span>: </span><span name="attr_source_type"></span> : <span name="attr_mod_cost"></span> cr
</span>
<span class="desc" name="attr_description"></span>
</div>
</div>
</fieldset>
</div>
<span class="label" data-i18n="modifications-u" style="margin-top: 0px; position: absolute; bottom: 0px;">MODIFICATIONS</span>
</div>
</div>
<div class="col">
<div class="hp">
<div class="top">
<span data-i18n="ship-mod-max">Modification Capacity</span>
<input type="text" name="attr_ship_mod_max" title="@{ship_mod_max}">
</div>
<input type="number" name="attr_ship_mod_current" title="@{ship_mod_current}">
<span class="label" data-i18n="ship-mod-current-u">TOTAL MODIFICATIONS</span>
</div>
<div class="hp">
<div class="top">
<span data-i18n="ship-hardpoints-max">Fixed Hardpoints</span>
<input type="text" name="attr_ship_hardpoints_max" title="@{ship_hardpoints_max}">
</div>
<input type="number" name="attr_ship_hardpoints_current" title="@{ship_hardpoints_current}">
<span class="label" data-i18n="ship-hardpoints-current-u">HARDPOINTS USED</span>
</div>
<div class="hp">
<div class="top">
<span data-i18n="ship-t-hardpoints-max">Turret Hardpoints</span>
<input type="text" name="attr_ship_t_hardpoints_max" title="@{ship_t_hardpoints_max}">
</div>
<input type="number" name="attr_ship_t_hardpoints_current" title="@{ship_t_hardpoints_current}">
<span class="label" data-i18n="ship-t-hardpoints-current-u">TURRET HARDPOINTS USED</span>
</div>
</div>
</div>
</div>
<div class="page ship-cargo">
<div class="header">
<div class="name-container">
<img src="https://s22.postimg.cc/jnlp8fqc1/Star_Wars_5_E_Logo_Shrunk.png" style="padding-bottom: 10px;">
<input type="text" name="attr_character_name" style="width: 100%;">
<span class="label" data-i18n="ship-name-u">SHIP NAME</span>
</div>
<div class="header-info sheet-options">
<div class="sheet-row">
<span data-i18n="ship-size:-u">SIZE:</span>
<select class="hiding class" name="attr_ship_size">
<option value="" data-i18n="choose">Choose</option>
<option value="Tiny" data-i18n="tiny">Tiny</option>
<option value="Small" data-i18n="small">Small</option>
<option value="Medium" data-i18n="medium">Medium</option>
<option value="Large" data-i18n="large">Large</option>
<option value="Huge" data-i18n="huge">Huge</option>
<option value="Gargantuan" data-i18n="gargantuan">Gargantuan</option>
</select>
<span data-i18n="ship-tier:-u">TIER:</span>
<input type="number" class="class-level" style="width: 40px" name="attr_base_ship_tier" value="0">
<span data-i18n="role-specialization:-u">ROLE:</span>
<input type="text" class="class-level" name="attr_ship_role" value="">
</div>
<div class="sheet-row">
<span data-i18n="ship-manufacturer:-u">MANUFACTURER/LINE/CLASS:</span>
<input type="text" name="attr_ship_manufacturer">
</div>
<div class="sheet-row">
<span data-i18n="ship-credits-next-tier:-u">CREDITS NEEDED TO UPGRADE TO NEXT TIER:</span>
<input type="number" style="width:90px" name="attr_ship_cr_next">
</div>
</div>
</div>
<div class="body">
<div class="col2-3">
<div style="display:inline-block" class="equipment">
<div class="money">
<div class="coin">
<span class="label" data-i18n="credit-piece-u">CR</span>
<input type="text" name="attr_cr" title="@{cr}">
</div>
</div>
<input type="hidden" class="inventoryflag" name="attr_simpleinventory" value="complex">
<textarea class="simple" name="attr_equipment"></textarea>
<div class="complex">
<input type="hidden" class="warningflag" name="attr_armorwarningflag">
<div class="warning">
<span data-i18n="warning-armor-sets-u">
<input type="checkbox" name="attr_armorwarning" value="hide">
WARNING - MULTIPLE SETS OF ARMOR OR SHIELDS HAVE BEEN ADDED AND AC IS NOT CORRECTLY CALCULATED. UNEQUIP THE ARMOR PIECE FROM THE ITEM DETAILS.
</span>
</div>
<div class="header" style="height: auto;">
<span class="pictos" style="width: 25px; font-size: 15px;">*</span>
<span style="width: 100px; text-align: left;" data-i18n="item-name-u">ITEM NAME</SPAN>
<span style="width: 25px;"><img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/5th%20Edition%20OGL%20by%20Roll20/images/weight_lbs.png" style="width: 15px; margin-bottom: -3px;"></span>
</div>
<fieldset class="repeating_inventory">
<input type="hidden" class="equippedflag" name="attr_equipped">
<div class="item">
<input class="weight" type="text" name="attr_itemcount" value="1">
<input class="name" type="text" name="attr_itemname">
<input class="weight" type="text" name="attr_itemweight">
<input class="inventorysubflag" type="checkbox" name="attr_inventorysubflag"><span>i</span>
<div class="subitem">
<input class="equipped" type="checkbox" name="attr_equipped" value="1" checked="checked">
<span class="equippedlabel" data-i18n="equipped-u">EQUIPPED</span>
<input class="equipped" type="checkbox" name="attr_useasresource" value="1">
<span class="equippedlabel" data-i18n="use-as-resource-u">USE AS A RESOURCE</span>
<input class="equipped" type="checkbox" name="attr_hasattack" value="1">
<span class="equippedlabel" data-i18n="has-attack-u">HAS AN ATTACK</span>
<span class="label" data-i18n="prop:-u">PROP:</span>
<input class="subfield" type="text" name="attr_itemproperties">
<span class="label" data-i18n="mods:-u">MODS:</span>
<input class="subfield" type="text" name="attr_itemmodifiers">
<textarea class="subtextarea" name="attr_itemcontent"></textarea>
</div>
<input type="hidden" name="attr_itemattackid">
<input type="hidden" name="attr_itemresourceid">
</div>
</fieldset>
<div class="weighttotal">
<span class="label" data-i18n="total-cargo-tons-u">TOTAL CARGO (TONS)</span>
<input type="text" name="attr_weighttotal" value="0">
</div>
</div>
<span class="label" style="margin-top: 0px; position: absolute; bottom: 0px;" data-i18n="cargo-u">CARGO</span>
</div>
<div style="display:inline-block" class="equipment">
<div class="money">
<div class="coin">
<span class="label" data-i18n="credit-piece-u">CR</span>
<input type="text" name="attr_hiddencr" title="@{hiddencr}">
</div>
</div>
<input type="hidden" class="inventoryflag" name="attr_simpleinventory" value="complex">
<textarea class="simple" name="attr_equipment"></textarea>
<div class="complex">
<input type="hidden" class="warningflag" name="attr_armorwarningflag">
<div class="warning">
<span data-i18n="warning-armor-sets-u">
<input type="checkbox" name="attr_armorwarning" value="hide">
WARNING - MULTIPLE SETS OF ARMOR OR SHIELDS HAVE BEEN ADDED AND AC IS NOT CORRECTLY CALCULATED. UNEQUIP THE ARMOR PIECE FROM THE ITEM DETAILS.
</span>
</div>
<div class="header" style="height: auto;">
<span class="pictos" style="width: 25px; font-size: 15px;">*</span>
<span style="width: 100px; text-align: left;" data-i18n="item-name-u">ITEM NAME</SPAN>
<span style="width: 25px;"><img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/5th%20Edition%20OGL%20by%20Roll20/images/weight_lbs.png" style="width: 15px; margin-bottom: -3px;"></span>
</div>
<fieldset class="repeating_hiddeninventory">
<input type="hidden" class="equippedflag" name="attr_equipped">
<div class="item">
<input class="weight" type="text" name="attr_itemcount" value="1">
<input class="name" type="text" name="attr_itemname">
<input class="weight" type="text" name="attr_itemweight">
<input class="inventorysubflag" type="checkbox" name="attr_inventorysubflag"><span>i</span>
<div class="subitem">
<input class="equipped" type="checkbox" name="attr_equipped" value="1" checked="checked">
<span class="equippedlabel" data-i18n="equipped-u">EQUIPPED</span>
<input class="equipped" type="checkbox" name="attr_useasresource" value="1">
<span class="equippedlabel" data-i18n="use-as-resource-u">USE AS A RESOURCE</span>
<input class="equipped" type="checkbox" name="attr_hasattack" value="1">
<span class="equippedlabel" data-i18n="has-attack-u">HAS AN ATTACK</span>
<span class="label" data-i18n="prop:-u">PROP:</span>
<input class="subfield" type="text" name="attr_itemproperties">
<span class="label" data-i18n="mods:-u">MODS:</span>
<input class="subfield" type="text" name="attr_itemmodifiers">
<textarea class="subtextarea" name="attr_itemcontent"></textarea>
</div>
<input type="hidden" name="attr_itemattackid">
<input type="hidden" name="attr_itemresourceid">
</div>
</fieldset>
<div class="weighttotal">
<span class="label" data-i18n="total-hidden-cargo-tons-u">TOTAL HIDDEN CARGO (TONS)</span>
<input type="text" name="attr_hiddenweighttotal" value="0">
</div>
</div>
<span class="label" style="margin-top: 0px; position: absolute; bottom: 0px;" data-i18n="hidden-cargo-u">HIDDEN CARGO</span>
</div>
<div class="textbox">
<span class="label" data-i18n="ship-notes-u">SHIP NOTES AND MISC</span>
<textarea name="attr_ship_notes" style="min-height: 400px; height: 400px;"></textarea>
</div>
</div>
<div class="col">
<div class="hp">
<div class="top">
<span data-i18n="ship-fuel-max">Ship Fuel Capacity</span>
<input type="text" name="attr_ship_fuel_max" title="@{ship_fuel_max}">
</div>
<input type="number" name="attr_ship_fuel_current" title="@{ship_fuel_current}">
<span class="label" data-i18n="ship-fuel-current-label">CURRENT FUEL (UNITS)</span>
</div>
<div class="hp">
<input type="number" name="attr_ship_fuel_cost" title="@{ship_fuel_cost}">
<span class="label" data-i18n="ship-fuel-cost-label">FUEL COST (CR)</span>
</div>
<div class="hp">
<div class="top">
<span data-i18n="ship-food-max">Ship Food Capacity</span>
<input type="text" name="attr_ship_food_max" title="@{food_max}">
</div>
<input type="number" name="attr_ship_food_current" title="@{ship_food_current}">
<span class="label" data-i18n="ship-food-current-label">CURRENT FOOD (PORTIONS)</span>
</div>
<div class="hp">
<div class="top">
<span data-i18n="ship-reg-cargo-max">Regular Cargo Capacity</span>
<input type="text" name="attr_ship_reg_cargo_max" title="@{ship_reg_cargo_max}">
</div>
<input type="number" name="attr_weighttotal" title="@{weighttotal}">
<span class="label" data-i18n="total-cargo-tons-u">CURRENT CARGO (TONS)</span>
</div>
<div class="hp">
<div class="top">
<span data-i18n="ship-hidden-cargo-max">Hidden Cargo Capacity</span>
<input type="text" name="attr_ship_hidden_cargo_max" title="@{ship_hidden_cargo_max}">
</div>
<input type="number" name="attr_hiddenweighttotal" title="@{hiddenweighttotal}">
<span class="label" data-i18n="total-hidden-cargo-tons-u">HIDDEN CARGO (TONS)</span>
</div>
</div>
</div>
</div>
<div class="page ship-core">
<div class="header">
<div class="name-container">
<img src="https://s22.postimg.cc/jnlp8fqc1/Star_Wars_5_E_Logo_Shrunk.png" style="padding-bottom: 10px;">
<input type="text" name="attr_character_name" style="width: 100%;">
<span class="label" data-i18n="ship-name-u">SHIP NAME</span>
</div>
<div class="header-info sheet-options">
<div class="sheet-row">
<span data-i18n="ship-size:-u">SIZE:</span>
<select class="hiding class" name="attr_ship_size">
<option value="" data-i18n="choose">Choose</option>
<option value="Tiny" data-i18n="tiny">Tiny</option>
<option value="Small" data-i18n="small">Small</option>
<option value="Medium" data-i18n="medium">Medium</option>
<option value="Large" data-i18n="large">Large</option>
<option value="Huge" data-i18n="huge">Huge</option>
<option value="Gargantuan" data-i18n="gargantuan">Gargantuan</option>
</select>
<span data-i18n="ship-tier:-u">TIER:</span>
<input type="number" class="class-level" style="width: 40px" name="attr_base_ship_tier" value="0">
<span data-i18n="role-specialization:-u">ROLE:</span>
<input type="text" class="class-level" name="attr_ship_role" value="">
</div>
<div class="sheet-row">
<span data-i18n="ship-manufacturer:-u">MANUFACTURER/LINE/CLASS:</span>
<input type="text" name="attr_ship_manufacturer">
</div>
<div class="sheet-row">
<span data-i18n="ship-credits-next-tier:-u">CREDITS NEEDED TO UPGRADE TO NEXT TIER:</span>
<input type="number" style="width:90px" name="attr_ship_cr_next">
</div>
</div>
</div>
<div class="body">
<div class="col2-3">
<div style="display:inline" class="halfcol">
<div class="attributes-container" style="margin-top: 10px;">
<div class="attr-container">
<button type="roll" name="roll_strength" value="@{wtype}&{template:simple} {{rname=^{strength-u}}} {{mod=@{strength_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{strength_mod}@{jack_attr}[STR]]]}} @{rtype}+@{strength_mod}@{jack_attr}[STR]]]}} @{charname_output}" data-i18n="strength-u">STRENGTH</button>
<span class="attr" name="attr_strength_mod" title="@{strength_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_strength_base" title="@{strength}" value="10">
<input type="hidden" name="attr_strength" value="10">
<input class="attr-flag" type="hidden" name="attr_strength_flag" value="0">
<span class="finalattr" name="attr_strength">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_dexterity" value="@{wtype}&{template:simple} {{rname=^{dexterity-u}}} {{mod=@{dexterity_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{dexterity_mod}@{jack_attr}[DEX]]]}} @{rtype}+@{dexterity_mod}@{jack_attr}[DEX]]]}} @{charname_output}" data-i18n="dexterity-u">DEXTERITY</button>
<span class="attr" name="attr_dexterity_mod" title="@{dexterity_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_dexterity_base" title="@{dexterity}" value="10">
<input type="hidden" name="attr_dexterity" value="10">
<input class="attr-flag" type="hidden" name="attr_dexterity_flag" value="0">
<span class="finalattr" name="attr_dexterity">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_constitution" value="@{wtype}&{template:simple} {{rname=^{constitution-u}}} {{mod=@{constitution_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{constitution_mod}@{jack_attr}[CON]]]}} @{rtype}+@{constitution_mod}@{jack_attr}[CON]]]}} @{charname_output}" data-i18n="constitution-u">CONSTITUTION</button>
<span class="attr" name="attr_constitution_mod" title="@{constitution_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_constitution_base" title="@{constitution}" value="10">
<input type="hidden" name="attr_constitution" value="10">
<input class="attr-flag" type="hidden" name="attr_constitution_flag" value="0">
<span class="finalattr" name="attr_constitution">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_intelligence" value="@{wtype}&{template:simple} {{rname=^{intelligence-u}}} {{mod=@{intelligence_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{intelligence_mod}@{jack_attr}[INT]]]}} @{rtype}+@{intelligence_mod}@{jack_attr}[INT]]]}} @{charname_output}" data-i18n="intelligence-u">INTELLIGENCE</button>
<span class="attr" name="attr_intelligence_mod" title="@{intelligence_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_intelligence_base" title="@{intelligence}" value="10">
<input type="hidden" name="attr_intelligence" value="10">
<input class="attr-flag" type="hidden" name="attr_intelligence_flag" value="0">
<span class="finalattr" name="attr_intelligence">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_wisdom" value="@{wtype}&{template:simple} {{rname=^{wisdom-u}}} {{mod=@{wisdom_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{wisdom_mod}@{jack_attr}[WIS]]]}} @{rtype}+@{wisdom_mod}@{jack_attr}[WIS]]]}} @{charname_output}" data-i18n="wisdom-u">WISDOM</button>
<span class="attr" name="attr_wisdom_mod" title="@{wisdom_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_wisdom_base" title="@{wisdom}" value="10">
<input type="hidden" name="attr_wisdom" value="10">
<input class="attr-flag" type="hidden" name="attr_wisdom_flag" value="0">
<span class="finalattr" name="attr_wisdom">
</div>
</div>
<div class="attr-container">
<button type="roll" name="roll_charisma" value="@{wtype}&{template:simple} {{rname=^{charisma-u}}} {{mod=@{charisma_mod}@{jack_bonus}}} {{r1=[[@{d20}+@{charisma_mod}@{jack_attr}[CHA]]]}} @{rtype}+@{charisma_mod}@{jack_attr}[CHA]]]}} @{charname_output}" data-i18n="charisma-u">CHARISMA</button>
<span class="attr" name="attr_charisma_mod" title="@{charisma_mod}">0</span>
<div class="attr-mod">
<input class="baseattr" type="text" name="attr_charisma_base" title="@{charisma}" value="10">
<input type="hidden" name="attr_charisma" value="10">
<input class="attr-flag" type="hidden" name="attr_charisma_flag" value="0">
<span class="finalattr" name="attr_charisma">
</div>
</div>
</div>
<div class="skills-saves-container">
<div class="insp-prof-container">
<div class="value">
<input type="number" name="attr_hyperdrive_class">
</div>
<div class="label">
<span data-i18n="hyperdrive_class-u">HYPERDRIVE CLASS</span>
</div>
</div>
<div class="insp-prof-container">
<div class="value">
<input type="number" name="attr_navcomputer_bonus">
</div>
<div class="label">
<span data-i18n="navcomputer_bonus-u">NAVCOMPUTER BONUS</span>
</div>
</div>
<div class="insp-prof-container">
<div class="value">
<input type="number" value="0" name="attr_pb">
</div>
<div class="label">
<span data-i18n="pilot_prof_bonus-u">PILOT PROF BONUS</span>
</div>
</div>
<div class="insp-prof-container">
<div class="value">
<input type="number" value="0" name="attr_pilot_skill">
</div>
<div class="label">
<span data-i18n="pilot_proficiency-u">PILOT INT(PILOTING)</span>
</div>
</div>
<div class="saving-throw-container">
<div class="saving-throw">
<input type="checkbox" name="attr_strength_save_prof" title="@{strength_save_prof}" value="(@{pb})">
<span name="attr_strength_save_bonus" title="@{strength_save_bonus}">0</span>
<button type="roll" name="roll_strength_save" value="@{wtype}&{template:simple} {{rname=^{strength-save-u}}} {{mod=@{strength_save_bonus}}} {{r1=[[@{d20}+@{strength_save_bonus}@{pbd_safe}]]}} @{rtype}+@{strength_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="strength">Strength</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_dexterity_save_prof" title="@{dexterity_save_prof}" value="(@{pb})">
<span name="attr_dexterity_save_bonus" title="@{dexterity_save_bonus}">0</span>
<button type="roll" name="roll_dexterity_save" value="@{wtype}&{template:simple} {{rname=^{dexterity-save-u}}} {{mod=@{dexterity_save_bonus}}} {{r1=[[@{d20}+@{dexterity_save_bonus}@{pbd_safe}]]}} @{rtype}+@{dexterity_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="dexterity">Dexterity</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_constitution_save_prof" title="@{constitution_save_prof}" value="(@{pb})">
<span name="attr_constitution_save_bonus" title="@{constitution_save_bonus}">0</span>
<button type="roll" name="roll_constitution_save" value="@{wtype}&{template:simple} {{rname=^{constitution-save-u}}} {{mod=@{constitution_save_bonus}}} {{r1=[[@{d20}+@{constitution_save_bonus}@{pbd_safe}]]}} @{rtype}+@{constitution_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="constitution">Constitution</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_intelligence_save_prof" title="@{intelligence_save_prof}" value="(@{pb})">
<span name="attr_intelligence_save_bonus" title="@{intelligence_save_bonus}">0</span>
<button type="roll" name="roll_intelligence_save" value="@{wtype}&{template:simple} {{rname=^{intelligence-save-u}}} {{mod=@{intelligence_save_bonus}}} {{r1=[[@{d20}+@{intelligence_save_bonus}@{pbd_safe}]]}} @{rtype}+@{intelligence_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="intelligence">Intelligence</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_wisdom_save_prof" title="@{wisdom_save_prof}" value="(@{pb})">
<span name="attr_wisdom_save_bonus" title="@{wisdom_save_bonus}">0</span>
<button type="roll" name="roll_wisdom_save" value="@{wtype}&{template:simple} {{rname=^{wisdom-save-u}}} {{mod=@{wisdom_save_bonus}}} {{r1=[[@{d20}+@{wisdom_save_bonus}@{pbd_safe}]]}} @{rtype}+@{wisdom_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="wisdom">Wisdom</button>
</div>
<div class="saving-throw">
<input type="checkbox" name="attr_charisma_save_prof" title="@{charisma_save_prof}" value="(@{pb})">
<span name="attr_charisma_save_bonus" title="@{charisma_save_bonus}">0</span>
<button type="roll" name="roll_charisma_save" value="@{wtype}&{template:simple} {{rname=^{charisma-save-u}}} {{mod=@{charisma_save_bonus}}} {{r1=[[@{d20}+@{charisma_save_bonus}@{pbd_safe}]]}} @{rtype}+@{charisma_save_bonus}@{pbd_safe}]]}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="charisma">Charisma</button>
</div>
<input type="hidden" class="toggleflag" name="attr_global_save_mod_flag">
<div class="hidden textarea globalattack">
<span class="label" data-i18n="global-save-u">GLOBAL SAVE MODIFIER</span>
<fieldset class="repeating_savemod">
<div class="global-mod">
<input type="checkbox" name="attr_options-flag" class="options-flag" checked="checked" style="top: -15px;"><span>y</span>
<input type="checkbox" name="attr_global_save_active_flag" value="1" class="active-flag">
<div class="options">
<textarea type="textarea" name="attr_global_save_rollstring" placeholder="1d4[BLESS]" style="width: 125px;"></textarea>
</div>
<div class="display">
<span class="title" name="attr_global_save_rollstring"></span>
</div>
</div>
</fieldset>
</div>
<div class="label">
<span data-i18n="saving-throws-u">SAVING THROWS</span>
</div>
</div>
<div class="skills-container skills-list">
<div class="skill" data-i18n-list-item="ship_boost">
<input type="checkbox" name="attr_ship_boost_prof" title="@{ship_boost_prof}" value="(@{pb}*@{ship_boost_type})">
<span name='attr_ship_boost_bonus' title='@{ship_boost_bonus}'>0</span>
<button type='roll' name='roll_ship_boost' value='@{wtype}&{template:simple} {{rname=^{ship_boost-u}}} {{mod=@{ship_boost_bonus}}} {{r1=[[@{d20}+@{ship_boost_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_boost_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_boost-core'>Boost <span>(Str)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_ram">
<input type="checkbox" name="attr_ship_ram_prof" title="@{ship_ram_prof}" value="(@{pb}*@{ship_ram_type})">
<span name='attr_ship_ram_bonus' title='@{ship_ram_bonus}'>0</span>
<button type='roll' name='roll_ship_ram' value='@{wtype}&{template:simple} {{rname=^{ship_ram-u}}} {{mod=@{ship_ram_bonus}}} {{r1=[[@{d20}+@{ship_ram_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_ram_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_ram-core'>Ram <span>(Str)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_hide">
<input type="checkbox" name="attr_ship_hide_prof" title="@{ship_hide_prof}" value="(@{pb}*@{ship_hide_type})">
<span name='attr_ship_hide_bonus' title='@{ship_hide_bonus}'>0</span>
<button type='roll' name='roll_ship_hide' value='@{wtype}&{template:simple} {{rname=^{ship_hide-u}}} {{mod=@{ship_hide_bonus}}} {{r1=[[@{d20}+@{ship_hide_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_hide_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_hide-core'>Hide <span>(Dex)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_maneuvering">
<input type="checkbox" name="attr_ship_maneuvering_prof" title="@{ship_maneuvering_prof}" value="(@{pb}*@{ship_maneuvering_type})">
<span name='attr_ship_maneuvering_bonus' title='@{ship_maneuvering_bonus}'>0</span>
<button type='roll' name='roll_ship_maneuvering' value='@{wtype}&{template:simple} {{rname=^{ship_maneuvering-u}}} {{mod=@{ship_maneuvering_bonus}}} {{r1=[[@{d20}+@{ship_maneuvering_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_maneuvering_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_maneuvering-core'>Maneuvering <span>(Dex)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_patch">
<input type="checkbox" name="attr_ship_patch_prof" title="@{ship_patch_prof}" value="(@{pb}*@{ship_patch_type})">
<span name='attr_ship_patch_bonus' title='@{ship_patch_bonus}'>0</span>
<button type='roll' name='roll_ship_patch' value='@{wtype}&{template:simple} {{rname=^{ship_patch-u}}} {{mod=@{ship_patch_bonus}}} {{r1=[[@{d20}+@{ship_patch_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_patch_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_patch-core'>Patch <span>(Con)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_regulation">
<input type="checkbox" name="attr_ship_regulation_prof" title="@{ship_regulation_prof}" value="(@{pb}*@{ship_regulation_type})">
<span name='attr_ship_regulation_bonus' title='@{ship_regulation_bonus}'>0</span>
<button type='roll' name='roll_ship_regulation' value='@{wtype}&{template:simple} {{rname=^{ship_regulation-u}}} {{mod=@{ship_regulation_bonus}}} {{r1=[[@{d20}+@{ship_regulation_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_regulation_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_regulation-core'>Regulation <span>(Con)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_astrogation">
<input type="checkbox" name="attr_ship_astrogation_prof" title="@{ship_astrogation_prof}" value="(@{pb}*@{ship_astrogation_type})">
<span name='attr_ship_astrogation_bonus' title='@{ship_astrogation_bonus}'>0</span>
<button type='roll' name='roll_ship_astrogation' value='@{wtype}&{template:simple} {{rname=^{ship_astrogation-u}}} {{mod=@{ship_astrogation_bonus}}} {{r1=[[@{d20}+@{ship_astrogation_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_astrogation_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_astrogation-core'>Astrogation <span>(Int)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_data">
<input type="checkbox" name="attr_ship_data_prof" title="@{ship_data_prof}" value="(@{pb}*@{ship_data_type})">
<span name='attr_ship_data_bonus' title='@{ship_data_bonus}'>0</span>
<button type='roll' name='roll_ship_data' value='@{wtype}&{template:simple} {{rname=^{ship_data-u}}} {{mod=@{ship_data_bonus}}} {{r1=[[@{d20}+@{ship_data_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_data_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_data-core'>Data <span>(Int)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_probe">
<input type="checkbox" name="attr_ship_probe_prof" title="@{ship_probe_prof}" value="(@{pb}*@{ship_probe_type})">
<span name='attr_ship_probe_bonus' title='@{ship_probe_bonus}'>0</span>
<button type='roll' name='roll_ship_probe' value='@{wtype}&{template:simple} {{rname=^{ship_probe-u}}} {{mod=@{ship_probe_bonus}}} {{r1=[[@{d20}+@{ship_probe_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_probe_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_probe-core'>Probe <span>(Int)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_scan">
<input type="checkbox" name="attr_ship_scan_prof" title="@{ship_scan_prof}" value="(@{pb}*@{ship_scan_type})">
<span name='attr_ship_scan_bonus' title='@{ship_scan_bonus}'>0</span>
<button type='roll' name='roll_ship_scan' value='@{wtype}&{template:simple} {{rname=^{ship_scan-u}}} {{mod=@{ship_scan_bonus}}} {{r1=[[@{d20}+@{ship_scan_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_scan_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_scan-core'>Scan <span>(Wis)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_impress">
<input type="checkbox" name="attr_ship_impress_prof" title="@{ship_impress_prof}" value="(@{pb}*@{ship_impress_type})">
<span name='attr_ship_impress_bonus' title='@{ship_impress_bonus}'>0</span>
<button type='roll' name='roll_ship_impress' value='@{wtype}&{template:simple} {{rname=^{ship_impress-u}}} {{mod=@{ship_impress_bonus}}} {{r1=[[@{d20}+@{ship_impress_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_impress_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_impress-core'>Impress <span>(Cha)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_interfere">
<input type="checkbox" name="attr_ship_interfere_prof" title="@{ship_interfere_prof}" value="(@{pb}*@{ship_interfere_type})">
<span name='attr_ship_interfere_bonus' title='@{ship_interfere_bonus}'>0</span>
<button type='roll' name='roll_ship_interfere' value='@{wtype}&{template:simple} {{rname=^{ship_interfere-u}}} {{mod=@{ship_interfere_bonus}}} {{r1=[[@{d20}+@{ship_interfere_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_interfere_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_interfere-core'>Interfere <span>(Cha)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_menace">
<input type="checkbox" name="attr_ship_menace_prof" title="@{ship_menace_prof}" value="(@{pb}*@{ship_menace_type})">
<span name='attr_ship_menace_bonus' title='@{ship_menace_bonus}'>0</span>
<button type='roll' name='roll_ship_menace' value='@{wtype}&{template:simple} {{rname=^{ship_menace-u}}} {{mod=@{ship_menace_bonus}}} {{r1=[[@{d20}+@{ship_menace_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_menace_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_menace-core'>Menace <span>(Cha)</span></button>
</div>
<div class="skill" data-i18n-list-item="ship_swindle">
<input type="checkbox" name="attr_ship_swindle_prof" title="@{ship_swindle_prof}" value="(@{pb}*@{ship_swindle_type})">
<span name='attr_ship_swindle_bonus' title='@{ship_swindle_bonus}'>0</span>
<button type='roll' name='roll_ship_swindle' value='@{wtype}&{template:simple} {{rname=^{ship_swindle-u}}} {{mod=@{ship_swindle_bonus}}} {{r1=[[@{d20}+@{ship_swindle_bonus}@{pbd_safe}]]}} @{rtype}+@{ship_swindle_bonus}@{pbd_safe}]]}} {{global=@{global_skill_mod}}} @{charname_output}' data-i18n='ship_swindle-core'>Swindle <span>(Cha)</span></button>
</div>
<div class="label">
<span data-i18n="skills-u">SKILLS</span>
</div>
</div>
</div>
</div>
<div style="display:inline-block" class="halfcol">
<div class="ac-init-speed-container">
<div class="ac">
<input type="text" name="attr_ac">
<span class="label pc-ac" data-i18n="armor-class-u">ARMOR CLASS</span>
</div>
<div class="speed">
<input type="text" name="attr_ship_turnspeed">
<span class="label" data-i18n="ship_turnspeed-u">TURNING SPEED</span>
</div>
<div class="speed">
<input type="text" name="attr_ship_flyspeed">
<span class="label" data-i18n="ship_flyspeed-u">FLYING SPEED</span>
</div>
</div>
<div class="hp">
<div class="top">
<span data-i18n="ship-hp-max">Hull Point Maximum</span>
<input type="text" style="width:40px" name="attr_hp_max" title="@{hp_max}">
<input type="text" style="float:right; width:40px;" name="attr_ship_dmg_reduction">
<span style="float:right; width:50px;" data-i18n="ship-dr">Dmg Red.</span>
</div>
<input type="number" name="attr_hp" title="@{hp}">
<span class="label" data-i18n="ship-hp-current-u">CURRENT HULL POINTS</span>
</div>
<div class="hp">
<div class="top">
<span data-i18n="ship-shield-max">Shield Point Maximum</span>
<input type="text" style="width:40px" name="attr_ship_shield_max">
<input type="text" style="float:right; width:40px;" name="attr_ship_shield_regen_rate">
<span style="float:right; width:50px;" data-i18n="ship-regen-rate">Regen Rate</span>
</div>
<input type="number" name="attr_ship_shield_points">
<span class="label" data-i18n="ship-shield-u">CURRENT SHIELD POINTS</span>
</div>
<div class="hp">
<div class="top">
<span class="label" data-i18n="ship-armor-label:">Armor: </span>
<select name="attr_ship_armor">
<option value="none" selected="selected" data-i18n="option-select-none-u">None</option>
<option value="deflection" data-i18n="deflection-shield-u">Deflection Armor</option>
<option value="lightweight" data-i18n="lightweight-shield-u">Fortress Armor</option>
<option value="reinforced" data-i18n="reinforced-shield-u">Reinforced Armor</option>
<option value="customshiparmor" data-i18n="custom-ship-armor-u">Custom Armor</option>
</select>
</div>
<div class="top">
<span class="label" data-i18n="ship-shield-label:">Shields: </span>
<select name="attr_ship_shield">
<option value="none" selected="selected" data-i18n="option-select-none-u">None</option>
<option value="directional" data-i18n="directional-shield-u">Directional Shield</option>
<option value="fortress" data-i18n="fortress-shield-u">Fortress Shield</option>
<option value="quickcharge" data-i18n="quick-charge-shield-u">Quick Charge Shield</option>
<option value="customshipshield" data-i18n="custom-ship-shield-u">Custom Shield</option>
</select>
</div>
<span class="label" data-i18n="armor-shields-label-u">ARMOR &amp; SHIELDS</span>
</div>
<div class="hdice-dsaves-container" style="width: 242px;">
<div class="subcontainer">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_hull_dice_max" title="@{hull_dice_max}">
</div>
<input type="number" name="attr_hull_dice" title="@{hull_dice}" style="margin-bottom: -6px;">
<button type="roll" name="roll_hull_dice" value="@{wtype}&{template:simple} {{rname=^{hull-dice-u}}} {{mod=D@{hulldie_final}}} {{r1=[[1d@{hulldie_final}]]}} {{normal=1}} @{charname_output}" data-i18n="hull-dice-u">HULL DICE</button>
</div>
<div class="subcontainer">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_shield_dice_max" title="@{shield_dice_max}">
</div>
<input type="number" name="attr_shield_dice" title="@{shield_dice}" style="margin-bottom: -6px;">
<button type="roll" name="roll_shield_dice" value="@{wtype}&{template:simple} {{rname=^{shield-dice-u}}} {{mod=D@{shielddie_final}}} {{r1=[[1d@{shielddie_final}]]}} {{normal=1}} @{charname_output}" data-i18n="shield-dice-u">SHIELD DICE</button>
</div>
</div>
<div class="hdice-dsaves-container" style="width: 242px;">
<div class="subcontainer" >
<div class="row-container" style="float:right;margin-top:10px;">
<span class="label" data-i18n="successes-u">SUCCESSES</span>
<input type="checkbox" name="attr_deathsave_succ1">
<input type="checkbox" name="attr_deathsave_succ2">
<input type="checkbox" name="attr_deathsave_succ3">
</div>
<button style="margin-top:8px;" type="roll" name="roll_death_save" value="@{wtype}&{template:simple} {{rname=^{destruction-save-u}}} {{mod=@{death_save_bonus}}} {{r1=[[@{d20}+@{death_save_bonus}[MOD]@{globalsavingthrowbonus}]]}} {{normal=1}} {{global=@{global_save_mod}}} @{charname_output}" data-i18n="destruction-saves-u">DESTRUCTION SAVES</button>
</div>
<div class ="subcontainer">
<div class="row options" style="text-align:center;">
<button type="roll" name="roll_system_damage" data-i18n="system-dmg-lvl:-u" style="width:86px;" value="@{wtype}&{template:traits} @{charname_output} {{name=System Damage}} {{source=Level: @{system_dmg_lvl}}} {{description=@{system_dmg}}}">SYSTEM DMG LEVEL:</button>
</div>
<div class="row options" style="text-align:center; font-size: 20px;">
<select name="attr_system_dmg_lvl" style="margin-left:3px;">
<option value="0" selected="selected">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
</div>
</div>
</div>
<div class="hp">
<div class="top">
<span class="label" data-i18n="reactor-u">Reactor: </span>
<select name="attr_ship_reactor">
<option value="none" selected="selected" data-i18n="option-select-none-u">None</option>
<option value="fuelcell" data-i18n="fuel-cell-reactor-u">Fuel Cell Reactor</option>
<option value="ionization" data-i18n="ionization-reactor-u">Ionization Reactor</option>
<option value="powercore" data-i18n="pwr-core-reactor-u">Power Core Reactor</option>
</select>
</div>
<div class="top">
<span data-i18n="pwrcoupling-u">Power Coupling: </span>
<select name="attr_ship_pwr_coupling">
<option value="none" selected="selected" data-i18n="option-select-none-u">None</option>
<option value="direct" data-i18n="direct-pwr-coup-u">Direct Power Coupling</option>
<option value="distributed" data-i18n="dist-pwr-coup-u">Distributed Power Coupling</option>
<option value="hubspoke" data-i18n="hub-spoke-pwr-coup-u">Hub Spoke Power Coupling</option>
</select>
</div>
<span class="label" data-i18n="reactor-pwr-couple-u">REACTOR &amp; POWER COUPLING</span>
</div>
<div class="insp-prof-container">
<div class="value">
<!-- <span name="attr_passive_wisdom"></span> -->
<input type="number" value="@{wisdom}" name="attr_passive_ship_scan">
</div>
<div class="label">
<span data-i18n="passive-ship-scan-u">PASSIVE SCAN (WISDOM)</span>
</div>
</div>
</div>
<input type="hidden" class="ammoflag" name="attr_ammotracking">
<div class="attacks" style="position: relative;min-height:100px;min-width:500px">
<div class="top" style="margin-left:5px;">
<span class="label" style="width:60px;margin:0px;" data-i18n="ship-weapon-category-u">CATEGORY</span>
<span class="label" style="width:60px;margin:0px;" data-i18n="ship-weapon-facing-u">FACING</span>
<span class="label" style="width:150px;margin:0px;" data-i18n="name-u">NAME</span>
<span class="label" style="width:60px;margin:0px;" data-i18n="ship-weapon-range-u">RANGE</span>
<span class="label" style="width:30px;margin:0px;" data-i18n="atk-u">ATK</span>
<span class="label" style="width:75px;margin:0px;" data-i18n="dmg-type-u">DMG/TYPE</span>
<span class="label" style="width:30px;margin:0px;" data-i18n="attacks-per-round-u">ATKS</span>
</div>
<fieldset class="repeating_attack">
<div class="attack">
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<div class="options">
<div class="row">
<span data-i18n="ship-weapon-category:-u">WEAPON CATEGORY</span>
<select name="attr_ship_weapon_category">
<option value="PRIMARY" selected="selected" data-i18n="primary-u">PRIMARY</option>
<option value="SECONDARY" data-i18n="secondary-u">SECONDARY</option>
<option value="TERTIARY" data-i18n="tertiary-u">TERTIARY</option>
<option value="QUATERNARY" data-i18n="quaternary-u">QUATERNARY</option>
</select>
</div>
<div class="row">
<span data-i18n="ship-weapon-facing:-u">WEAPON FACING:</span>
<select name="attr_ship_weapon_facing">
<option value="TURRETED" selected="selected" data-i18n="turreted-u">TURRETED</option>
<option value="FRONT" data-i18n="bow-front-u">FRONT</option>
<option value="BACK" data-i18n="stern-back-u">BACK</option>
<option value="LEFT" data-i18n="port-left-u">LEFT</option>
<option value="RIGHT" data-i18n="starboard-right-u">RIGHT</option>
<option value="BROADSIDED" data-i18n="broadsided-u">BROADSIDED</option>
</select>
</div>
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_atkname">
</div>
<div class="row">
<input type="checkbox" name="attr_atkflag" value="{{attack=1}}" checked="checked">
<span data-i18n="attack:-u">ATTACK:</span>
<select name="attr_atkattr_base">
<option value="@{strength_mod}" data-i18n="str-u">STR</option>
<option value="@{dexterity_mod}" selected="selected" data-i18n="dex-u">DEX</option>
<option value="@{constitution_mod}" data-i18n="con-u">CON</option>
<option value="@{intelligence_mod}" data-i18n="int-u">INT</option>
<option value="@{wisdom_mod}" data-i18n="wis-u">WIS</option>
<option value="@{charisma_mod}" data-i18n="cha-u">CHA</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="0">-</option>
</select>
<span>+</span>
<input type="text" class="num" name="attr_atkmod" placeholder="0">
<input type="hidden" name="attr_atkprofflag" value="">
</div>
<div class="row">
<span style="margin-left: 17px;" data-i18n="range:-u">RANGE:</span>
<input type="text" name="attr_atkrange" placeholder="Self (60-foot cone)" style="width: 170px;" data-i18n-placeholder="range-place">
</div>
<div class="row">
<span data-i18n="crit-range-u">CRIT RANGE:</span>
<input type="text" class="num" name="attr_atkcritrange" value="20" placeholder="20">
</div>
<div class="row">
<input type="checkbox" name="attr_dmgflag" value="{{damage=1}} {{dmg1flag=1}}" checked="checked">
<span data-i18n="damage:-u">DAMAGE:</span>
<input type="text" name="attr_dmgbase" placeholder="1d6" style="width: 50px;">
<span>+</span>
<select name="attr_dmgattr">
<option value="@{strength_mod}" data-i18n="str-u">STR</option>
<option value="@{dexterity_mod}" selected="selected" data-i18n="dex-u">DEX</option>
<option value="@{constitution_mod}" data-i18n="con-u">CON</option>
<option value="@{intelligence_mod}" data-i18n="int-u">INT</option>
<option value="@{wisdom_mod}" data-i18n="wis-u">WIS</option>
<option value="@{charisma_mod}" data-i18n="cha-u">CHA</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="0">-</option>
</select>
<span>+</span>
<input type="text" class="num" name="attr_dmgmod" placeholder="0">
</div>
<div class="row">
<span style="margin-left: 17px;" data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_dmgtype" placeholder="Energy" style="width: 50px;" data-i18n-placeholder="Energy">
<span data-i18n="crit:-u">CRIT:</span>
<input type="text" name="attr_dmgcustcrit" placeholder="1d6" style="width: 80px;">
</div>
<div class="row">
<input type="checkbox" name="attr_dmg2flag" value="{{damage=1}} {{dmg2flag=1}}">
<span data-i18n="damage2:-u">DAMAGE2:</span>
<input type="text" name="attr_dmg2base" placeholder="1d6" style="width: 50px;">
<span>+</span>
<select name="attr_dmg2attr">
<option value="@{strength_mod}" data-i18n="str-u">STR</option>
<option value="@{dexterity_mod}" data-i18n="dex-u">DEX</option>
<option value="@{constitution_mod}" data-i18n="con-u">CON</option>
<option value="@{intelligence_mod}" data-i18n="int-u">INT</option>
<option value="@{wisdom_mod}" data-i18n="wis-u">WIS</option>
<option value="@{charisma_mod}" data-i18n="cha-u">CHA</option>
<option value="power" data-i18n="power-u">POWER</option>
<option value="0" selected="selected">-</option>
</select>
<span>+</span>
<input type="text" class="num" name="attr_dmg2mod" placeholder="0">
</div>
<div class="row">
<span style="margin-left: 17px;" data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_dmg2type" placeholder="Energy" style="width: 50px;" data-i18n-placeholder="Energy">
<span data-i18n="crit:-u">CRIT:</span>
<input type="text" name="attr_dmg2custcrit" placeholder="1d6" style="width: 80px;">
</div>
<div class="row">
<input type="checkbox" name="attr_saveflag" value="{{save=1}} {{saveattr=@{saveattr}}} {{savedesc=@{saveeffect}}} {{savedc=[[[[@{savedc}]][SAVE]]]}}">
<span data-i18n="saving-throw:-u">SAVING THROW:</span>
<select name="attr_saveattr">
<option value="Strength" data-i18n="str-u">STR</option>
<option value="Dexterity" selected="selected" data-i18n="dex-u">DEX</option>
<option value="Constitution" data-i18n="con-u">CON</option>
<option value="Intelligence" data-i18n="int-u">INT</option>
<option value="Wisdom" data-i18n="wis-u">WIS</option>
<option value="Charisma" data-i18n="cha-u">CHA</option>
</select>
<span data-i18n="vs-dc:-u">VS DC:</span>
<select name="attr_savedc">
<option value="(@{power_save_dc})" selected="selected" data-i18n="power-u">POWER</option>
<option value="(@{strength_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="str-u">STR</option>
<option value="(@{dexterity_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="dex-u">DEX</option>
<option value="(@{constitution_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="con-u">CON</option>
<option value="(@{intelligence_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="int-u">INT</option>
<option value="(@{wisdom_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="wis-u">WIS</option>
<option value="(@{charisma_mod}+8+@{power_dc_mod}+@{pb})" data-i18n="cha-u">CHA</option>
<option value="(@{saveflat})" data-i18n="flat-u">FLAT</option>
</select>
<input class="flatflag" type="hidden" name="attr_savedc" value="saveflat">
<input class="num flat" type="text" name="attr_saveflat" placeholder="8" value="8">
</div>
<div class="row">
<span data-i18n="save-effect:-u">SAVE EFFECT:</span>
<input type="text" name="attr_saveeffect" placeholder="half damage" style="width: 160px;" data-i18n-placeholder="save-effect-place" value="half damage">
</div>
<div class="row ammo">
<span data-i18n="ammunition:-u">AMMUNITION:</span>
<input type="text" name="attr_ammo" placeholder="Arrows" style="width: 160px;" data-i18n-placeholder="ammunition-place">
</div>
<div class="row">
<span data-i18n="attacks-per-round:-u">ATK/ROUND:</span>
<input type="text" name="attr_atk_per_round" placeholder="1" style="width: 160px;">
</div>
<div class="row">
<span data-i18n="description:-u">DESCRIPTION:</span>
<textarea name="attr_atk_desc" placeholder="Up to 2 creatures within 5 feet" data-i18n-placeholder="description-place"></textarea>
</div>
</div>
<div class="display">
<button type="roll" name="roll_attack" value="@{rollbase}">
<span name="attr_ship_weapon_category" style="width: 50px;"></span>
<span name="attr_ship_weapon_facing" style="width:50px;"></span>
<span name="attr_atkname" style="width: 140px;"></span>
<span name="attr_atkrange" style="width: 50px"></span>
<input type="text" name="attr_atkbonus" style="width: 35px; text-align: center;" value="">
<input type="text" name="attr_atkdmgtype" style="width: 75px;" value="">
<input type="text" name="attr_atk_per_round" style="width: 30px;" value="">
</button>
</div>
</div>
<input type="hidden" name="attr_rollbase">
<input type="hidden" name="attr_rollbase_dmg">
<input type="hidden" name="attr_rollbase_crit">
<input type="hidden" name="attr_hldmg">
<input type="hidden" name="attr_powerlevel">
<input type="hidden" name="attr_itemid">
<input type="hidden" name="attr_powerid">
<input type="hidden" name="attr_power_innate">
<input type="hidden" name="attr_versatile_alt">
<button type="roll" name="roll_attack_dmg" style="display: none;" value="@{rollbase_dmg}"></button>
<button type="roll" name="roll_attack_crit" style="display: none;" value="@{rollbase_crit}"></button>
</fieldset>
<span class="label" style="margin-top: 0px; position: absolute; bottom: 0px;" data-i18n="ship-weapons-u">Ship Weapon Attacks</span>
</div>
<input type="hidden" class="toggleflag" name="attr_global_attack_mod_flag">
<div class="hidden textbox globalattack">
<span class="label" data-i18n="global-attack-u">GLOBAL ATTACK MODIFIER</span>
<fieldset class="repeating_tohitmod">
<div class="global-mod">
<input type="checkbox" name="attr_options-flag" class="options-flag" checked="checked" style="top: -15px;"><span>y</span>
<input type="checkbox" name="attr_global_attack_active_flag" value="1" class="active-flag">
<div class="options">
<textarea type="textarea" name="attr_global_attack_rollstring" placeholder="1d4[BLESS]"></textarea>
</div>
<div class="display">
<span class="title" name="attr_global_attack_rollstring"></span>
</div>
</div>
</fieldset>
</div>
<input type="hidden" class="toggleflag" name="attr_global_damage_mod_flag">
<div class="hidden textbox globalattack">
<span class="label" data-i18n="global-damage-u">GLOBAL DAMAGE MODIFIER</span>
<fieldset class="repeating_damagemod">
<div class="global-mod">
<input type="checkbox" name="attr_options-flag" class="options-flag" checked="checked" style="top: -15px;"><span>y</span>
<input type="checkbox" name="attr_global_damage_active_flag" value="1" class="active-flag">
<div class="options">
<textarea type="textarea" name="attr_global_damage_rollstring" placeholder="1d6[SNEAK ATTACK]"></textarea>
<div class="row" style="margin-bottom: 5px;">
<span style="display: inline; margin-left: 25px;" data-i18n="type:-u">TYPE:</span>
<input type="text" name="attr_global_damage_type" value="">
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<span class="title" name="attr_global_damage_rollstring" style="width: 110px; padding-right: 0px;"></span>
<span class="subheader" name="attr_global_damage_type" style="padding-right: 0px;"></span>
</div>
</div>
</fieldset>
</div>
</div>
<div class="col">
<div class="pwr-dice-container">
<div class="label">
<span data-i18n="ship-pwr-die-label-u">POWER DIE CAPACITY STORAGE</span>
</div>
<div class="pwr-die-system">
<button type="roll" name="roll_pwr_dice" value="@{wtype}&{template:simple} {{rname=^{pwr-dice-cen-u}}} {{mod=D@{pwrdie_final}}} {{r1=[[1d@{pwrdie_final}]]}} {{normal=1}} @{charname_output}" data-i18n="central-system-u">Central System Power Die</button>
<input type="text" name="attr_pwr_c_storage" value="0"><span> &#47; </span>
<input type="text" name="attr_pwr_c_storage_actual" value="0">
</div>
<div class="pwr-die-system">
<button type="roll" name="roll_pwr_dice" value="@{wtype}&{template:simple} {{rname=^{pwr-dice-com-u}}} {{mod=D@{pwrdie_final}}} {{r1=[[1d@{pwrdie_final}]]}} {{normal=1}} @{charname_output}" data-i18n="comms-system-u">Communication System Power Die</button>
<input type="text" name="attr_pwr_s_storage" value="0"><span> &#47; </span>
<input type="text" name="attr_pwr_comm_storage_actual" value="0">
</div>
<div class="pwr-die-system">
<button type="roll" name="roll_pwr_dice" value="@{wtype}&{template:simple} {{rname=^{pwr-dice-eng-u}}} {{mod=D@{pwrdie_final}}} {{r1=[[1d@{pwrdie_final}]]}} {{normal=1}} @{charname_output}" data-i18n="engines-system-u">Engines System Power Die</button>
<input type="text" name="attr_pwr_s_storage" value="0"><span> &#47; </span>
<input type="text" name="attr_pwr_engine_storage_actual" value="0">
</div>
<div class="pwr-die-system">
<button type="roll" name="roll_pwr_dice" value="@{wtype}&{template:simple} {{rname=^{pwr-dice-shi-u}}} {{mod=D@{pwrdie_final}}} {{r1=[[1d@{pwrdie_final}]]}} {{normal=1}} @{charname_output}" data-i18n="shields-system-u">Shields System Power Die</button>
<input type="text" name="attr_pwr_s_storage" value="0"><span> &#47; </span>
<input type="text" name="attr_pwr_shields_storage_actual" value="0">
</div>
<div class="pwr-die-system">
<button type="roll" name="roll_pwr_dice" value="@{wtype}&{template:simple} {{rname=^{pwr-dice-sen-u}}} {{mod=D@{pwrdie_final}}} {{r1=[[1d@{pwrdie_final}]]}} {{normal=1}} @{charname_output}" data-i18n="sensors-system-u">Sensors System Power Die</button>
<input type="text" name="attr_pwr_s_storage" value="0"><span> &#47; </span>
<input type="text" name="attr_pwr_sensors_storage_actual" value="0">
</div>
<div class="pwr-die-system">
<button type="roll" name="roll_pwr_dice" value="@{wtype}&{template:simple} {{rname=^{pwr-dice-wea-u}}} {{mod=D@{pwrdie_final}}} {{r1=[[1d@{pwrdie_final}]]}} {{normal=1}} @{charname_output}" data-i18n="weapons-system-u">Weapons System Power Die</button>
<input type="text" name="attr_pwr_s_storage" value="0"><span> &#47; </span><input type="text" name="attr_pwr_weapons_storage_actual" value="0">
</div>
<div class="pwr-die-system" style="margin-top:10px;">
<button type="roll" name="roll_pwr_dice_recovery" value="@{wtype}&{template:simple} {{rname=^{pwr-dice-recovery-u}}} {{mod=D@{pwrdie_recovery}}} {{r1=[[1d@{pwrdie_recovery}-@{pwrdie_mod}]]}} {{normal=1}} @{charname_output}" data-i18n="pwr-dice-recovery-u"></button>
</div>
</div>
<div class="resources">
<div class="hdice-dsaves-container" style="width: 246px; margin-top: 10px;">
<div class="subcontainer" style="min-height: 64px; min-width: 119px;">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_class_resource_max" title="@{class_resource_max}">
</div>
<input type="number" name="attr_class_resource" title="@{class_resource}" style="margin-bottom: -6px;">
<input type="text" class="label" name="attr_class_resource_name" title="@{class_resource_name}" placeholder="CLASS RESOURCE" data-i18n-placeholder="class-resource-u">
</div>
<div class="subcontainer" style="min-height: 64px; min-width: 119px; float: right;">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_other_resource_max" title="@{other_resource_max}">
</div>
<input type="number" name="attr_other_resource" title="@{other_resource}" style="margin-bottom: -6px;">
<input type="text" class="label" name="attr_other_resource_name" title="@{other_resource_name}" placeholder="OTHER RESOURCE" data-i18n-placeholder="other-resource-u">
<input type="hidden" name="attr_other_resource_itemid">
</div>
</div>
<fieldset class="repeating_resource">
<div class="hdice-dsaves-container" style="width: 246px; margin-top: 10px;">
<div class="subcontainer" style="height: 64px; width: 119px;">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_resource_left_max" title="@{repeating_resource_left_max}">
</div>
<input type="number" name="attr_resource_left" title="@{repeating_resource_left}" style="margin-bottom: -6px;">
<input type="text" class="label" name="attr_resource_left_name" title="@{repeating_resource_left_name}" placeholder="OTHER RESOURCE" data-i18n-placeholder="other-resource-u">
<input type="hidden" name="attr_resource_left_itemid">
</div>
<div class="subcontainer" style="height: 64px; width: 119px;">
<div class="top">
<span data-i18n="total">Total</span>
<input type="text" name="attr_resource_right_max" title="@{repeating_resource_right_max}">
</div>
<input type="number" name="attr_resource_right" title="@{repeating_resource_right}" style="margin-bottom: -6px;">
<input type="text" class="label" name="attr_resource_right_name" title="@{repeating_resource_right_name}" placeholder="OTHER RESOURCE" data-i18n-placeholder="other-resource-u">
<input type="hidden" name="attr_resource_right_itemid">
</div>
</div>
</fieldset>
</div>
<div class="textbox traits" style="min-height: 250px;">
<input type="hidden" class="inventoryflag" name="attr_simpletraits" value="complex">
<textarea class="sheet-simple" name="attr_features_and_traits" style="min-height: 461px; height: 461px;"></textarea>
<div class="complex">
<fieldset class="repeating_shiptraits">
<div class="trait">
<button type="roll" name="roll_output" class="output" value="@{wtype}&{template:traits} @{charname_output} {{name=@{name}}} {{source=@{source}: @{source_type}}} {{description=@{description}}}">w</button>
<input class="options-flag" type="checkbox" name="attr_options-flag" checked="checked"><span>y</span>
<input class="display-flag" type="checkbox" name="attr_display_flag">
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_name" style="width: 120px;">
</div>
<div class="row">
<span data-i18n="source:-u">SOURCE:</span>
<select name="attr_source">
<option selected="selected" data-i18n="tier">Tier</option>
<option data-i18n="other">Other</option>
</select>
</div>
<div class="row">
<span data-i18n="source-type:-u">SOURCE TYPE:</span>
<input type="text" name="attr_source_type" style="width: 160px;" placeholder="Tier 1">
</div>
<div class="row">
<textarea name="attr_description" style="min-height: 200px; height: 200px;"></textarea>
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<span class="title" name="attr_name"></span>
<span class="subheader">
<span name="attr_source"></span><span>: </span><span name="attr_source_type"></span>
</span>
<span class="desc" name="attr_description"></span>
</div>
</div>
</fieldset>
</div>
<span class="label" data-i18n="feats-traits-u" style="margin-top: 0px; position: absolute; bottom: 0px;">FEATURES & TRAITS</span>
</div>
</div>
</div>
</div>
<div class="page options">
<div class="header">
<div class="name-container">
<img src="https://s22.postimg.cc/jnlp8fqc1/Star_Wars_5_E_Logo_Shrunk.png" style="padding-bottom: 10px;">
<input type="text" name="attr_character_name" style="width: 100%;">
<span class="label" data-i18n="ship-name-u">SHIP NAME</span>
</div>
<div class="header-info sheet-options">
<div class="sheet-row">
<span data-i18n="ship-size:-u">SIZE:</span>
<select class="hiding class" name="attr_ship_size">
<option value="" data-i18n="choose">Choose</option>
<option value="Tiny" data-i18n="tiny">Tiny</option>
<option value="Small" data-i18n="small">Small</option>
<option value="Medium" data-i18n="medium">Medium</option>
<option value="Large" data-i18n="large">Large</option>
<option value="Huge" data-i18n="huge">Huge</option>
<option value="Gargantuan" data-i18n="gargantuan">Gargantuan</option>
</select>
<span data-i18n="ship-tier:-u">TIER:</span>
<input type="number" class="class-level" style="width: 40px" name="attr_base_ship_tier" value="0">
<span data-i18n="role-specialization:-u">ROLE:</span>
<input type="text" class="class-level" name="attr_ship_role" value="">
</div>
<div class="sheet-row">
<span data-i18n="ship-manufacturer:-u">MANUFACTURER/LINE/CLASS:</span>
<input type="text" name="attr_ship_manufacturer">
</div>
<div class="sheet-row">
<span data-i18n="ship-credits-next-tier:-u">CREDITS NEEDED TO UPGRADE TO NEXT TIER:</span>
<input type="number" style="width:90px" name="attr_ship_cr_next">
</div>
</div>
</div>
<div class="body">
<div class="col">
<div class="general_options">
<div class="version">
<span data-i18n="version">v</span>
<input type="text" name="attr_version">
</div>
<div class="row">
<span>SHEET TYPE:</span>
<select name="attr_npc">
<option value="0">PC</option>
<option value="1">NPC</option>
<option value="2">Ship</option>
</select>
</div>
<div class="row">
<span data-i18n="roll-queries:-u">ROLL QUERIES:</span>
<select name="attr_rtype">
<option value="{{always=1}} {{r2=[[@{d20}" data-i18n="always-roll-adv">Always Roll Advantage</option>
<option value="@{advantagetoggle}" data-i18n="toggle-roll-adv">Advantage Toggle</option>
<option value="{{query=1}} ?{Advantage?|Normal Roll,&#123&#123normal=1&#125&#125 &#123&#123r2=[[0d20|Advantage,&#123&#123advantage=1&#125&#125 &#123&#123r2=[[@{d20}|Disadvantage,&#123&#123disadvantage=1&#125&#125 &#123&#123r2=[[@{d20}}" data-i18n="query-roll-adv">Query Advantage</option>
<option value="{{normal=1}} {{r2=[[0d20" data-i18n="never-roll-adv">Never Roll Advantage</option>
</select>
</div>
<div class="row">
<span data-i18n="whisp-rolls-gm:-u">WHISPER ROLLS TO GM:</span>
<select name="attr_wtype">
<option value="" data-i18n="never-whisper-roll">Never Whisper Rolls</option>
<option value="@{whispertoggle}" data-i18n="toggle-roll-whisper">Whisper Toggle</option>
<option value="?{Whisper?|Public Roll,|Whisper Roll,/w gm }" data-i18n="query-whisper-roll">Query Whisper</option>
<option value="/w gm " data-i18n="always-whisper-roll">Always Whisper Rolls</option>
</select>
</div>
<div class="row">
<span data-i18n="auto-dmg-roll:-u">AUTO DAMAGE ROLL:</span>
<select class="dtype" name="attr_dtype">
<option value="pick" data-i18n="never-roll-dmg">Don't Auto Roll Damage</option>
<option value="full" data-i18n="always-roll-dmg">Auto Roll Damage & Crit</option>
</select>
</div>
<div class="row">
<span data-i18n="core-die-roll:-u">CORE DIE ROLL:</span>
<input type="text" name="attr_core_die" value="1d20" placeholder="1d20" title="@{core_die}">
</div>
<div class="row">
<input type="checkbox" name="attr_global_attack_mod_flag" value="1">
<span data-i18n="show-global-attack-field-u">SHOW GLOBAL ATTACK MODIFIER FIELD</span>
</div>
<div class="row">
<input type="checkbox" name="attr_global_damage_mod_flag" value="1">
<span data-i18n="show-global-damage-field-u">SHOW GLOBAL DAMAGE MODIFIER FIELD</span>
</div>
<div class="row">
<span data-i18n="add-char-to-templates:-u">ADD CHARACTER NAME TO TEMPLATES:</span>
<select class="dtype" name="attr_charname_output">
<option value="{{charname=@{character_name}}}" data-i18n="on">On</option>
<option value="charname=@{character_name}" selected="selected" data-i18n="off">Off</option>
</select>
</div>
<div class="row">
<span data-i18n="feats-traits-u">FEATURES AND TRAITS</span><span>:</span>
<select name="attr_simpletraits">
<option value="complex" data-i18n="compendium-compatible">Compendium Compatible</option>
<option value="simple" data-i18n="simple">Simple</option>
</select>
</div>
<div class="row">
<span data-i18n="ammo-tracking:-u">AMMO TRACKING:</span>
<select name="attr_ammotracking">
<option value="on" data-i18n="on">On</option>
<option value="off" selected="selected" data-i18n="off">Off</option>
</select>
<span data-i18n-title="api-required-title" data-i18n="api-required-u" title="Try it now with easy one click API installation available with your Pro subscription." style="color:#666; cursor:help;">(API REQUIRED)</span>
</div>
<div class="row">
<span data-i18n="armor-class-tracking:-u">ARMOR CLASS TRACKING:</span>
<select name="attr_custom_ac_flag">
<option value="0" selected="selected" data-i18n="automatic">Automatic</option>
<option value="2" data-i18n="off">Off</option>
</select>
</div>
<div class="row">
<span data-i18n="speed-tracking:-u">SPEED TRACKING:</span>
<select name="attr_custom_speed_flag">
<option value="0" selected="selected" data-i18n="automatic">Automatic</option>
<option value="1" data-i18n="off">Off</option>
</select>
</div>
<div class="row title">
<span data-i18n="general-opts-u">GENERAL OPTIONS</span>
</div>
</div>
</div>
<div class="col">
<div class="save_options" style="width: 234px;">
<div class="row skill">
<span data-i18n="strength-save-u">Strength Save</span>
<span>+</span><input type="text" class="num" name="attr_strength_save_mod" value="0" placeholder="0" title="@{strength_save_mod}">
</div>
<div class="row skill">
<span data-i18n="dexterity-save-u">Dexterity Save</span>
<span>+</span><input type="text" class="num" name="attr_dexterity_save_mod" value="0" placeholder="0" title="@{dexterity_save_mod}">
</div>
<div class="row skill">
<span data-i18n="constitution-save-u">Constitution Save</span>
<span>+</span><input type="text" class="num" name="attr_constitution_save_mod" value="0" placeholder="0" title="@{constitution_save_mod}">
</div>
<div class="row skill">
<span data-i18n="intelligence-save-u">Intelligence Save</span>
<span>+</span><input type="text" class="num" name="attr_intelligence_save_mod" value="0" placeholder="0" title="@{intelligence_save_mod}">
</div>
<div class="row skill">
<span data-i18n="wisdom-save-u">Wisdom Save</span>
<span>+</span><input type="text" class="num" name="attr_wisdom_save_mod" value="0" placeholder="0" title="@{wisdom_save_mod}">
</div>
<div class="row skill">
<span data-i18n="charisma-save-u">Charisma Save</span>
<span>+</span><input type="text" class="num" name="attr_charisma_save_mod" value="0" placeholder="0" title="@{charisma_save_mod}">
</div>
<div class="row">
<span data-i18n="death-save-mod:-u">DEATH SAVE MODIFIER:</span>
<input type="text" class="num" name="attr_death_save_mod" placeholder="0" value="0">
</div>
<div class="row">
<span data-i18n="glob-saving-mod:-u">GLOBAL SAVING THROW MODIFIER:</span>
<input type="text" class="num" name="attr_globalsavemod" placeholder="0" value="0">
</div>
<div class="row title">
<span data-i18n="save-opts-u">SAVE OPTIONS</span>
</div>
</div>
<div class="skill_options" style="width: 234px;">
<div data-i18n-list="skills-list">
<div class="row skill" data-i18n-list-item="ship_boost">
<select name="attr_ship_boost_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_boost-core">Boost <span>(Str)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_boost_flat" value="0" placeholder="0" title="@{ship_boost_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_ram">
<select name="attr_ship_ram_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_ram-core">Ram <span>(Str)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_ram_flat" value="0" placeholder="0" title="@{ship_ram_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_hide">
<select name="attr_ship_hide_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_hide-core">Hide <span>(Dex)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_hide_flat" value="0" placeholder="0" title="@{ship_hide_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_maneuvering">
<select name="attr_ship_maneuvering_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_maneuvering-core">Maneuvering <span>(Dex)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_maneuvering_flat" value="0" placeholder="0" title="@{ship_maneuvering_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_patch">
<select name="attr_ship_patch_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_patch-core">Patch <span>(Con)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_patch_flat" value="0" placeholder="0" title="@{ship_patch_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_regulation">
<select name="attr_ship_regulation_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_regulation-core">Regulation <span>(Con)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_regulation_flat" value="0" placeholder="0" title="@{ship_regulation_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_astrogation">
<select name="attr_ship_astrogation_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_astrogation-core">Astrogation<span>(Int)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_astrogation_flat" value="0" placeholder="0" title="@{ship_astrogation_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_data">
<select name="attr_ship_data_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_data-core">Data <span>(Int)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_data_flat" value="0" placeholder="0" title="@{ship_data_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_probe">
<select name="attr_ship_probe_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_probe-core">Probe <span>(Int)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_probe_flat" value="0" placeholder="0" title="@{ship_probe_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_scan">
<select name="attr_ship_scan_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_scan-core">Scan <span>(Wis)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_scan_flat" value="0" placeholder="0" title="@{ship_scan_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_impress">
<select name="attr_ship_impress_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_impress-core">Impress <span>(Cha)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_impress_flat" value="0" placeholder="0" title="@{ship_impress_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_interfere">
<select name="attr_ship_interfere_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_interfere-core">Interfere <span>(Cha)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_interfere_flat" value="0" placeholder="0" title="@{ship_interfere_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_menace">
<select name="attr_ship_menace_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_menace-core">Menace <span>(Cha)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_menace_flat" value="0" placeholder="0" title="@{ship_menace_flat}">
</div>
<div class="row skill" data-i18n-list-item="ship_swindle">
<select name="attr_ship_swindle_type"><option value="1" selected="selected" data-i18n="proficiently">Proficiently</option><option value="2" data-i18n="expertly">Expertly</option></select>
<span data-i18n="ship_swindle-core">Swindle <span>(Cha)</span></span>
<span>+</span><input type="text" class="num" name="attr_ship_swindle_flat" value="0" placeholder="0" title="@{ship_swindle_flat}">
</div>
</div>
<div class="row" style="margin-top:10px;">
<input type="checkbox" name="attr_jack_of_all_trades" value="@{jack}">
<span data-i18n="jack-of-all-u">JACK OF ALL TRADES</span>
</div>
<div class="row">
<span data-i18n="pass-perc-mod:-u">PASSIVE PERCEPTION MODIFIER:</span>
<input type="text" class="num" name="attr_passiveperceptionmod" placeholder="0" value="0">
</div>
<div class="row title">
<span data-i18n="skill-opts-u">SKILL OPTIONS</span>
</div>
</div>
</div>
<div class="col">
<span class="label">LEGACY/CUSTOM ARMOR AND SHIELDS</span>
<div class="attacks" style="position: relative;min-height:100px;">
<div class="globalattack">
<span class="label" data-i18n="armor-u" style="border:none">ARMOR</span>
<div class="global-mod">
<input type="checkbox" name="attr_options-flag" class="options-flag" checked="checked" style="top: -15px;"><span>y</span>
<input type="checkbox" name="attr_ship_armor_active_flag" value="1" class="active-flag">
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_ship_armor_name">
</div>
<div class="row">
<span data-i18n="ac-bonus:-u">AC BONUS:</span>
<input type="number" name="attr_ship_armor_ac_bonus">
</div>
<div class="row">
<span data-i18n="hp-slash-hit-die:-u">HP/HIT DIE:</span>
<input type="number" name="attr_ship_armor_hp_per_hit_die">
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<span name="attr_ship_armor_name" style="width:120px; padding-right: 0px;"></span>
<span name="attr_ship_armor_ac_bonus" style="width:20px; padding-right: 0px;"></span>
<span name="attr_ship_armor_hp_per_hit_die" style="width:20px; padding-right: 0px;"></span>
</div>
</div>
</div>
<div class="globalattack">
<span class="label" data-i18n="shield-u">SHIELD</span>
<div class="global-mod">
<input type="checkbox" name="attr_options-flag" class="options-flag" checked="checked" style="top: -15px;"><span>y</span>
<input type="checkbox" name="attr_ship_shield_active_flag" value="1" class="active-flag">
<div class="options">
<div class="row">
<span data-i18n="name:-u">NAME:</span>
<input type="text" name="attr_ship_shield_name">
</div>
<div class="row">
<span data-i18n="shield-capacity-x:-u">SHIELD CAPACITY X:</span>
<input type="number" style="width:100px;" name="attr_ship_shield_capacity">
</div>
<div class="row">
<span data-i18n="regen-rate-x:-u">REGEN RATE X:</span>
<input type="number" style="width:100px;" name="attr_ship_shield_regen_rate_coefficient">
</div>
</div>
<div class="display" style="margin-bottom: 2px;">
<span name="attr_ship_shield_name" style="width:120px; padding-right: 0px;"></span>
<span name="attr_ship_shield_capacity" style="width:20px; padding-right: 0px;"></span>
<span name="attr_ship_shield_regen_rate_coefficient" style="width:20px; padding-right: 0px;"></span>
</div>
</div>
</div>
<span class="sheet-label" style="margin-top: 0px; position: absolute; bottom: 0px;" data-i18n="armor-and-shield-u">ARMOR &amp; SHIELD</span>
</div>
</div>
</div>
</div>
</div>
<!-- #region HIDDEN FIELDS -->
<input type="hidden" name="attr_d20" value="1d20">
<input type="hidden" name="attr_level" value="1">
<input type="hidden" name="attr_pb" value="2">
<input type="hidden" name="attr_pbd_safe" value="">
<input type="hidden" name="attr_jack" value="1">
<input type="hidden" name="attr_jack_attr" value="">
<input type="hidden" name="attr_jack_bonus" value="">
<input type="hidden" name="attr_passive_wisdom" value="10">
<input type="hidden" name="attr_hitdie_final" value="">
<input type="hidden" name="attr_globalsavingthrowbonus" value="">
<input type="hidden" name="attr_death_save_bonus" value="0">
<input type="hidden" name="attr_initiative_bonus" value="0">
<input type="hidden" name="attr_power_save_dc" value="0">
<input type="hidden" name="attr_power_attack_bonus" value="0">
<input type="hidden" name="attr_power_attack_mod" value="0">
<input type="hidden" name="attr_npc_legendary_actions_desc" value="">
<input type="hidden" name="attr_global_damage_mod_crit" value="0">
<input type="hidden" name="attr_global_damage_mod_roll" value="0">
<input type="hidden" name="attr_global_damage_mod_type" value="">
<input type="hidden" name="attr_global_attack_mod" value="">
<input type="hidden" name="attr_global_save_mod" value="">
<input type="hidden" name="attr_global_skill_mod" value="">
<input type="hidden" name="attr_exhaustion_1" value="">
<input type="hidden" name="attr_exhaustion_2" value="">
<input type="hidden" name="attr_exhaustion_3" value="">
<input type="hidden" name="attr_exhaustion_4" value="">
<input type="hidden" name="attr_exhaustion_5" value="">
<input type="hidden" name="attr_exhaustion_6" value="">
<input type="hidden" name="attr_strength_mod" value="0">
<input type="hidden" name="attr_dexterity_mod" value="0">
<input type="hidden" name="attr_constitution_mod" value="0">
<input type="hidden" name="attr_intelligence_mod" value="0">
<input type="hidden" name="attr_wisdom_mod" value="0">
<input type="hidden" name="attr_charisma_mod" value="0">
<input type="hidden" name="attr_strength_save_bonus" value="0">
<input type="hidden" name="attr_dexterity_save_bonus" value="0">
<input type="hidden" name="attr_constitution_save_bonus" value="0">
<input type="hidden" name="attr_intelligence_save_bonus" value="0">
<input type="hidden" name="attr_wisdom_save_bonus" value="0">
<input type="hidden" name="attr_charisma_save_bonus" value="0">
<input type='hidden' name='attr_acrobatics_bonus' value='0'>
<input type='hidden' name='attr_animal_handling_bonus' value='0'>
<input type='hidden' name='attr_technology_bonus' value='0'>
<input type='hidden' name='attr_athletics_bonus' value='0'>
<input type='hidden' name='attr_deception_bonus' value='0'>
<input type='hidden' name='attr_lore_bonus' value='0'>
<input type='hidden' name='attr_insight_bonus' value='0'>
<input type='hidden' name='attr_intimidation_bonus' value='0'>
<input type='hidden' name='attr_investigation_bonus' value='0'>
<input type='hidden' name='attr_medicine_bonus' value='0'>
<input type='hidden' name='attr_nature_bonus' value='0'>
<input type='hidden' name='attr_perception_bonus' value='0'>
<input type='hidden' name='attr_performance_bonus' value='0'>
<input type='hidden' name='attr_persuasion_bonus' value='0'>
<input type='hidden' name='attr_piloting_bonus' value='0'>
<input type='hidden' name='attr_sleight_of_hand_bonus' value='0'>
<input type='hidden' name='attr_stealth_bonus' value='0'>
<input type='hidden' name='attr_survival_bonus' value='0'>
<input type='hidden' name='attr_lvl1_slots_total' value='0'>
<input type='hidden' name='attr_lvl2_slots_total' value='0'>
<input type='hidden' name='attr_lvl3_slots_total' value='0'>
<input type='hidden' name='attr_lvl4_slots_total' value='0'>
<input type='hidden' name='attr_lvl5_slots_total' value='0'>
<input type='hidden' name='attr_lvl6_slots_total' value='0'>
<input type='hidden' name='attr_lvl7_slots_total' value='0'>
<input type='hidden' name='attr_lvl8_slots_total' value='0'>
<input type='hidden' name='attr_lvl9_slots_total' value='0'>
<input type='hidden' name='attr_l1mancer_status' value='completed'>
<input type='hidden' name='attr_pilot_skill' value='0'>
<input type='hidden' name='attr_ship_size' value='0'>
<input type='hidden' name='attr_system_dmg_lvl' value='0'>
<input type='hidden' name='attr_system_dmg' value='None.'>
<input type='hidden' name='attr_ship_boost_bonus' value='0'>
<input type='hidden' name='attr_ship_ram_bonus' value='0'>
<input type='hidden' name='attr_ship_hide_bonus' value='0'>
<input type='hidden' name='attr_ship_maneuvering_bonus' value='0'>
<input type='hidden' name='attr_ship_patch_bonus' value='0'>
<input type='hidden' name='attr_ship_regulation_bonus' value='0'>
<input type='hidden' name='attr_ship_astrogation_bonus' value='0'>
<input type='hidden' name='attr_ship_data_bonus' value='0'>
<input type='hidden' name='attr_ship_probe_bonus' value='0'>
<input type='hidden' name='attr_ship_scan_bonus' value='0'>
<input type='hidden' name='attr_ship_impress_bonus' value='0'>
<input type='hidden' name='attr_ship_interfere_bonus' value='0'>
<input type='hidden' name='attr_ship_menace_bonus' value='0'>
<input type='hidden' name='attr_ship_swindle_bonus' value='0'>
<input type="hidden" name="attr_hulldie_final" value="">
<input type="hidden" name="attr_shielddie_final" value="">
<input type="hidden" name="attr_pwrdie_final" value="">
<input type="hidden" name="attr_pwrdie_recovery" value="">
<input type="hidden" name="attr_pwrdie_mod" value="">
<input type="hidden" name="attr_ship_mod_max" value="">
<input type="hidden" name="attr_ship_mod_current" value="">
<input type="hidden" name="attr_ship_hardpoints_max" value="">
<input type="hidden" name="attr_ship_hardpoints_current" value="">
<input type="hidden" name="attr_ship_t_hardpoints_max" value="">
<input type="hidden" name="attr_ship_t_hardpoints_current" value="">
<input type="hidden" name="attr_ship_suites_max" value="">
<input type="hidden" name="attr_ship_suites_current" value="">
<!-- endregion HIDDEN FIELDS -->
<div class="compendium_warning">
<span data-i18n="accepting-drop-u">ACCEPTING DROP FROM COMPENDIUM</span>
</div>
<div class="monster_confirm">
<span data-i18n="are_you_sure">Are you sure you want to turn this character into a </span><span name="attr_drop_name"></span><span>?</span>
<div style="margin-top: 20px;">
<div style="position: relative; display: inline-block; margin-right: 25px;">
<input class="yes" type="checkbox" name="attr_confirm"><span class="yes" data-i18n="yes">Yes</span>
</div>
<div style="position: relative; display: inline-block;">
<input class="cancel" type="checkbox" name="attr_cancel"><span class="cancel" data-i18n="cancel">Cancel</span>
</div>
</div>
</div>
<!-- ROLL TEMPLATES -->
<div class="rolltemplates">
<rolltemplate class="sheet-rolltemplate-simple">
<div class="container">
<div class="result">
{{#always}}
<div class="adv">
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
</div>
{{/always}}
{{#normal}}
<div class="solo">
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
</div>
{{/normal}}
{{#advantage}}
{{#rollLess() r1 r2}}
<div class="adv">
<span class="grey">{{r1}}{{#global}} + {{global}}{{/global}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
</div>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<div class="adv">
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
</div>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<div class="adv">
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span class="grey">{{r2}}{{#global}} + {{global}}{{/global}}</span>
</div>
{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollLess() r1 r2}}
<div class="adv">
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span class="grey">{{r2}}{{#global}} + {{global}}{{/global}}</span>
</div>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<div class="adv">
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
</div>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<div class="adv">
<span class="grey">{{r1}}{{#global}} + {{global}}{{/global}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
</div>
{{/rollGreater() r1 r2}}
{{/disadvantage}}
</div>
<div class="label">
<span>{{rname}}{{#mod}} <span>({{mod}})</span>{{/mod}}</span>
</div>
{{#charname}}
<div class="charname">
<span>{{charname}}</span>
</div>
{{/charname}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-atk">
<div class="container">
<div class="result">
{{#always}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/always}}
{{#normal}}
<div class="solo">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/normal}}
{{#advantage}}
{{#rollLess() r1 r2}}
<div class="adv">
<span class="grey">{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span class="grey">{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollLess() r1 r2}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span class="grey">{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<div class="adv">
<span class="grey">{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollGreater() r1 r2}}
{{/disadvantage}}
</div>
{{#range}}
<div class="sublabel">
<span>{{range}}</span>
</div>
{{/range}}
<div class="label">
{{#normal}}
{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}
{{#^rollWasCrit() r1}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/^rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollTotal() r1 r2}}{{#^rollWasCrit() r1}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/^rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollLess() r1 r2}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollLess() r1 r2}}
{{#rollGreater() r1 r2}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollGreater() r1 r2}}
{{/disadvantage}}
</div>
{{#charname}}
<div class="charname">
<span>{{charname}}</span>
</div>
{{/charname}}
</div>
{{#desc}}
<div class="desc info">
<span><span class="top"></span><span class="middle">{{desc}}</span><span class="bottom"></span>
</div>
{{/desc}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-dmg">
{{#save}}
{{#attack}}
<div class="desc save">
{{/attack}}
{{^attack}}
<div class="atk save">
{{/attack}}
<div class="savedc">
<span class="rolltemplate-inline" data-i18n="difficulty-class-abv">DC</span><span class="rolltemplate-inline">{{savedc}}</span>
</div>
{{#savedesc}}
<div class="sublabel">
<span>{{savedesc}}</span>
</div>
{{/savedesc}}
<div class="label">
<span class="rolltemplate-inline">{{saveattr}}</span> <span class="rolltemplate-inline" data-i18n="save">Save</span>
</div>
</div>
{{/save}}
{{^attack}}
{{#desc}}
<div class="desc info">
<span><span class="top"></span><span class="middle">{{desc}}</span><span class="bottom"></span>
</div>
{{/desc}}
{{/attack}}
{{#globaldamage}}
{{#^rollTotal() globaldamage 0}}
<div class="desc">
<span>{{globaldamage}}{{#globaldamagecrit}}<span class="plus"> + </span>{{globaldamagecrit}}{{/globaldamagecrit}}</span>
<span class="sublabel">{{globaldamagetype}}</span>
</div>
{{/^rollTotal() globaldamage 0}}
{{/globaldamage}}
{{#hldmg}}
{{#^rollTotal() hldmg 0}}
<div class="desc">
<span>{{hldmg}}{{#hldmgcrit}}<span class="plus"> + </span>{{hldmgcrit}}{{/hldmgcrit}}</span>
<span class="sublabel">{{dmg1type}}</span>
<div class="label">
<span data-i18n="higher-lvl-cast">Higher Level Cast</span>
</div>
</div>
{{/^rollTotal() hldmg 0}}
{{/hldmg}}
<div class="container damagetemplate">
<div class="result">
{{#dmg1flag}}
{{^dmg2flag}}
<div class="solo">
<span class="damage">{{dmg1}}{{#crit}} + {{crit1}}{{/crit}}</span>
<span class="sublabel">{{dmg1type}}</span>
</div>
{{/dmg2flag}}
{{/dmg1flag}}
{{#dmg2flag}}
{{^dmg1flag}}
<div class="solo">
<span class="damage">{{dmg2}}{{#crit}} + {{crit2}}{{/crit}}</span>
<span class="sublabel">{{dmg2type}}</span>
</div>
{{/dmg1flag}}
{{/dmg2flag}}
{{#dmg1flag}}
{{#dmg2flag}}
<div class="adv">
<span class="damage">{{dmg1}}{{#crit}} + {{crit1}}{{/crit}}</span>
<span class="sublabel">{{dmg1type}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span class="damage">{{dmg2}}{{#crit}} + {{crit2}}{{/crit}}</span>
<span class="sublabel">{{dmg2type}}</span>
</div>
{{/dmg2flag}}
{{/dmg1flag}}
</div>
{{^attack}}
{{#range}}
<div class="sublabel" style="color: black;">
<span>{{range}}</span>
</div>
{{/range}}
<div class="label">
<span>{{rname}}</span>{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}}
</div>
{{#charname}}
<div class="charname">
<span>{{charname}}</span>
</div>
{{/charname}}
{{/attack}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-atkdmg">
{{#attack}}
<div class="container atk">
<div class="result">
{{#always}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/always}}
{{#normal}}
<div class="solo">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/normal}}
{{#advantage}}
{{#rollLess() r1 r2}}
<div class="adv">
<span class="grey">{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span class="grey">{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollLess() r1 r2}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span class="grey">{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<div class="adv">
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<div class="adv">
<span class="grey">{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
</div>
{{/rollGreater() r1 r2}}
{{/disadvantage}}
</div>
{{#range}}
<div class="sublabel">
<span>{{range}}</span>
</div>
{{/range}}
<div class="label">
<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}}{{#attack}} <span>({{mod}})</span>{{/attack}}</span>
</div>
{{#charname}}
<div class="charname">
<span>{{charname}}</span>
</div>
{{/charname}}
</div>
{{/attack}}
{{#save}}
{{#attack}}
<div class="container desc save">
{{/attack}}
{{^attack}}
<div class="container atk save">
{{/attack}}
<div class="savedc">
<span class="rolltemplate-inline" data-i18n="difficulty-class-abv">DC</span><span class="rolltemplate-inline">{{savedc}}</span>
</div>
{{#savedesc}}
<div class="sublabel">
<span>{{savedesc}}</span>
</div>
{{/savedesc}}
<div class="label">
<span class="rolltemplate-inline">{{saveattr}}</span> <span class="rolltemplate-inline" data-i18n="save">Save</span>
</div>
</div>
{{/save}}
{{#desc}}
<div class="desc info">
<span><span class="top"></span><span class="middle">{{desc}}</span><span class="bottom"></span>
</div>
{{/desc}}
{{#globaldamage}}
{{#^rollTotal() globaldamage 0}}
<div class="desc">
<span>
{{globaldamage}}
{{#attack}}
{{#normal}}
{{#rollWasCrit() r1}}<span class="plus"> + </span>{{globaldamagecrit}}{{/rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="plus"> + </span>{{globaldamagecrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="plus"> + </span>{{globaldamagecrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{/disadvantage}}
{{/attack}}
</span>
<span class="sublabel">{{globaldamagetype}}</span>
</div>
{{/^rollTotal() globaldamage 0}}
{{/globaldamage}}
{{#hldmg}}
{{#^rollTotal() hldmg 0}}
<div class="desc">
<span>
{{hldmg}}
<!-- {{#hldmgcrit}} + {{hldmgcrit}}{{/hldmgcrit}} -->
{{#attack}}
{{#normal}}
{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{/disadvantage}}
{{/attack}}
</span>
<span class="sublabel">{{dmg1type}}</span>
<div class="label">
<span data-i18n="higher-lvl-cast">Higher Level Cast</span>
</div>
</div>
{{/^rollTotal() hldmg 0}}
{{/hldmg}}
{{#damage}}
<div class="container damagetemplate">
<div class="result">
{{#dmg1flag}}
{{^dmg2flag}}
<div class="solo">
<span class="damage">
{{dmg1}}
{{#attack}}
{{#normal}}
{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{/disadvantage}}
{{/attack}}
</span>
<span class="sublabel">{{dmg1type}}</span>
</div>
{{/dmg2flag}}
{{/dmg1flag}}
{{#dmg2flag}}
{{^dmg1flag}}
<div class="solo">
<span class="damage">
{{dmg2}}
{{#attack}}
{{#normal}}
{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{/disadvantage}}
{{/attack}}
</span>
<span class="sublabel">{{dmg2type}}</span>
</div>
{{/dmg1flag}}
{{/dmg2flag}}
{{#dmg1flag}}
{{#dmg2flag}}
<div class="adv">
<span class="damage">
{{dmg1}}
{{#attack}}
{{#normal}}
{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{/disadvantage}}
{{/attack}}
</span>
<span class="sublabel">{{dmg1type}}</span>
</div>
<div class="advspacer"></div>
<div class="adv">
<span>
{{dmg2}}
{{#attack}}
{{#normal}}
{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{/disadvantage}}
{{/attack}}
</span>
<span class="sublabel">{{dmg2type}}</span>
</div>
{{/dmg2flag}}
{{/dmg1flag}}
</div>
{{^attack}}
{{#range}}
<div class="sublabel">
<span>{{range}}</span>
</div>
{{/range}}
<div class="label">
<span>{{rname}}</span>{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}}
</div>
{{#charname}}
<div class="charname">
<span>{{charname}}</span>
</div>
{{/charname}}
{{/attack}}
</div>
{{/damage}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-desc">
<div class="desc info">
<span><span class="top"></span><span class="middle">{{desc}}</span><span class="bottom"></span>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-power">
<div class="container">
<div class="title row">
<span>{{name}}</span>{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}}
</div>
<div class="spacer"></div>
{{#castingtime}}
<div class="row">
<span class="bold" data-i18n="casting-time:">Casting Time:</span> <span>{{castingtime}}<span>
</div>
{{/castingtime}}
{{#range}}
<div class="row">
<span class="bold" data-i18n="range:">Range:</span> <span>{{range}}<span>
</div>
{{/range}}
{{#target}}
<div class="row">
<span class="bold" data-i18n="target:">Target:</span> <span>{{target}}<span>
</div>
{{/target}}
{{#duration}}
<div class="row">
<span class="bold" data-i18n="duration:">Duration:</span> <span>{{#concentration}}<span data-i18n="concentration">Concentration</span> {{/concentration}}{{duration}}<span>
</div>
{{/duration}}
<div class="spacer"></div>
{{#description}}
<div class="row">
<span class="description">{{description}}<span>
</div>
{{/description}}
{{#athigherlevels}}
<div class="row">
<span class="bold italics" data-i18n="at-higher-lvl">At Higher Levels</span>. <span class="description">{{athigherlevels}}<span>
</div>
{{/athigherlevels}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-traits">
<div class="row header">
<span>{{name}}</span>
</div>
{{#source}}
<div class="row subheader">
<span class="italics">{{#charname}}{{charname}} {{/charname}}{{source}}</span>
</div>
{{/source}}
{{#description}}
<div class="row">
<span class="desc">{{description}}</span>
</div>
{{/description}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-npc">
<div class="row header">
<span>{{rname}}</span>
</div>
{{#name}}
<div class="row subheader">
<span class="italics">{{name}}</span>
</div>
{{/name}}
<div class="arrow-right"></div>
<div class="row">
{{#normal}}
<span class="italics">{{type}}: </span><span>{{r1}}</span>
{{/normal}}
{{#always}}
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}
<span class="italics">{{type}}: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollLess() r1 r2}}
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<span class="italics">{{type}}: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollGreater() r1 r2}}
{{/disadvantage}}
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-npcatk">
<div class="row header">
{{#normal}}
{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}
{{#^rollWasCrit() r1}}{{rname}}{{/^rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{rnamec}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}{{rname}}{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{rnamec}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}{{rname}}{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollTotal() r1 r2}}{{#^rollWasCrit() r1}}{{rname}}{{/^rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollLess() r1 r2}}{{rname}}{{/rollLess() r1 r2}}
{{#rollGreater() r1 r2}}{{rnamec}}{{/rollGreater() r1 r2}}
{{/disadvantage}}
</div>
{{#name}}
<div class="row subheader">
<span class="italics">{{name}}</span>
</div>
{{/name}}
<div class="arrow-right"></div>
<div class="row">
{{#normal}}
{{#rollWasCrit() r1}}<span class="italics">{{typec}}: </span>{{/rollWasCrit() r1}}
{{#^rollWasCrit() r1}}<span class="italics">{{type}}: </span>{{/^rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="italics">{{typec}}: </span>{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="italics">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="italics">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}<span class="italics">{{type}}: </span>{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="italics">[{{typec}}: </span>{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="italics">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="italics">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}<span class="italics">{{type}}: </span>{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="italics">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollTotal() r1 r2}}{{#^rollWasCrit() r1}}<span class="italics">{{type}}: </span>{{/^rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollLess() r1 r2}}<span class="italics">{{type}}: </span>{{/rollLess() r1 r2}}
{{#rollGreater() r1 r2}}<span class="italics">{{typec}}: </span>{{/rollGreater() r1 r2}}
{{/disadvantage}}
{{#normal}}
<span>{{r1}}</span>
{{/normal}}
{{#always}}
<span>{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}
<span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<span>{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollLess() r1 r2}}
<span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<span>{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollGreater() r1 r2}}
{{/disadvantage}}
</div>
{{#description}}
<div class="row">
<span class="desc">{{description}}</span>
</div>
{{/description}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-npcdmg">
<div class="container dmgcontainer damagetemplate">
<span class="italics">Damage: </span>
<span>
{{#dmg1flag}}
{{dmg1}}{{#crit}} + {{crit1}}{{/crit}}{{dmg1type}}
{{/dmg1flag}}
{{#dmg1flag}}{{#dmg2flag}}+{{/dmg2flag}}{{/dmg1flag}}
{{#dmg2flag}}
{{dmg2}}{{#crit}} + {{crit2}}{{/crit}}{{dmg2type}}
{{/dmg2flag}}
</span>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-npcaction">
<div class="container">
<div class="row header">
<span>{{rname}}</span>
</div>
{{#name}}
<div class="row subheader">
<span class="italics">{{name}}</span>
</div>
{{/name}}
<div class="arrow-right"></div>
{{#attack}}
<div class="row">
{{#normal}}
<span class="italics">Attack: </span><span>{{r1}}</span>
{{/normal}}
{{#always}}
<span class="italics">Attack: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}
<span class="italics">Attack: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<span class="italics">Attack: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<span class="italics">Attack: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollLess() r1 r2}}
<span class="italics">Attack: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}
<span class="italics">Attack: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}
<span class="italics">Attack: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
{{/rollGreater() r1 r2}}
{{/disadvantage}}
</div>
{{/attack}}
{{#description}}
<span class="desc">{{description}}</span>
{{/description}}
</div>
{{#damage}}
<div class="container dmgcontainer damagetemplate">
<span class="italics">Damage: </span>
<span>
{{#dmg1flag}}
{{dmg1}}
{{#normal}}
{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{/disadvantage}}
{{dmg1type}}
{{/dmg1flag}}
{{#dmg1flag}}{{#dmg2flag}}+{{/dmg2flag}}{{/dmg1flag}}
{{#dmg2flag}}
{{dmg2}}
{{#normal}}
{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}
{{/normal}}
{{#always}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/always}}
{{#advantage}}
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
{{/advantage}}
{{#disadvantage}}
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
{{/disadvantage}}
{{dmg2type}}
{{/dmg2flag}}
</span>
</div>
{{/damage}}
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-mancerroll">
<div class="container">
<div class="row header">
<span>{{title}}</span>
</div>
{{#r1}}
<div class="row">
<span class="desc">Roll 1: </span>
<span class="result">{{r1}}</span>
</div>
{{/r1}}
{{#r2}}
<div class="row">
<span class="desc">Roll 2: </span>
<span class="result">{{r2}}</span>
</div>
{{/r2}}
{{#r3}}
<div class="row">
<span class="desc">Roll 3: </span>
<span class="result">{{r3}}</span>
</div>
{{/r3}}
{{#r4}}
<div class="row">
<span class="desc">Roll 4: </span>
<span class="result">{{r4}}</span>
</div>
{{/r4}}
{{#r5}}
<div class="row">
<span class="desc">Roll 5: </span>
<span class="result">{{r5}}</span>
</div>
{{/r5}}
{{#r6}}
<div class="row">
<span class="desc">Roll 6: </span>
<span class="result">{{r6}}</span>
</div>
{{/r6}}
</div>
</rolltemplate>
</div>
<!-- WORKERS -->
<script type="text/worker">
on("sheet:opened", function(eventinfo) {
versioning(function() {
if(eventinfo.sourceType === "sheetworker") {
setAttrs({l1mancer_status: "completed"})
}
else {
check_l1_mancer();
};
});
// cleanup_drop_fields();
// v2_old_values_check();
});
on("sheet:compendium-drop", function() {
getAttrs(["hp_max","npc_senses","token_size","cd_bar1_v","cd_bar1_m","cd_bar1_l","cd_bar2_v","cd_bar2_m","cd_bar2_l","cd_bar3_v","cd_bar3_m","cd_bar3_l"], function(v) {
var default_attr = {};
default_attr["width"] = 70;
default_attr["height"] = 70;
if(v["npc_senses"].toLowerCase().match(/(darkvision|blindsight|tremorsense|truesight)/)) {
default_attr["light_radius"] = Math.max.apply(Math, v["npc_senses"].match(/\d+/g));
}
if(v["token_size"]) {
var squarelength = 70;
if(v["token_size"].indexOf(",") > -1) {
var setwidth = !isNaN(v["token_size"].split(",")[0]) ? v["token_size"].split(",")[0] : 1;
var setheight = !isNaN(v["token_size"].split(",")[1]) ? v["token_size"].split(",")[1] : 1;
default_attr["width"] = setwidth * squarelength;
default_attr["height"] = setheight * squarelength;
}
else {
default_attr["width"] = squarelength * v["token_size"]
default_attr["height"] = squarelength * v["token_size"]
};
}
var getList = {};
for(x = 1; x<=3; x++) {
_.each(["v", "m"], function(letter) {
var keyname = "cd_bar" + x + "_" + letter;
if(v[keyname] != undefined && isNaN(v[keyname])) {
getList[keyname] = v[keyname];
}
});
}
getAttrs(_.values(getList), function(values) {
_.each(_.keys(getList), function(keyname) {
v[keyname] = values[getList[keyname]] == undefined ? "" : values[getList[keyname]];
});
if(v["cd_bar1_l"]) {
default_attr["bar1_link"] = v["cd_bar1_l"];
}
else if(v["cd_bar1_v"] || v["cd_bar1_m"]) {
if(v["cd_bar1_v"]) {
default_attr["bar1_value"] = v["cd_bar1_v"];
}
if(v["cd_bar1_m"]) {
default_attr["bar1_max"] = v["cd_bar1_m"];
}
}
else {
default_attr["bar1_value"] = v["hp_max"];
default_attr["bar1_max"] = v["hp_max"];
}
if(v["cd_bar2_l"]) {
default_attr["bar2_link"] = v["cd_bar2_l"];
}
else if(v["cd_bar2_v"] || v["cd_bar2_m"]) {
if(v["cd_bar2_v"]) {
default_attr["bar2_value"] = v["cd_bar2_v"];
}
if(v["cd_bar2_m"]) {
default_attr["bar2_max"] = v["cd_bar2_m"];
}
}
else {
default_attr["bar2_link"] = "npc_ac";
}
if(v["cd_bar3_l"]) {
default_attr["bar3_link"] = v["cd_bar3_l"];
}
else if(v["cd_bar3_v"] || v["cd_bar3_m"]) {
if(v["cd_bar3_v"]) {
default_attr["bar3_value"] = v["cd_bar3_v"];
}
if(v["cd_bar3_m"]) {
default_attr["bar3_max"] = v["cd_bar3_m"];
}
}
setDefaultToken(default_attr);
});
});
});
on("change:strength_base change:strength_bonus", function() {
update_attr("strength");
});
on("change:strength", function() {
update_mod("strength");
check_customac("Strength");
update_weight();
});
on("change:dexterity_base change:dexterity_bonus", function() {
update_attr("dexterity");
update_initiative();
});
on("change:dexterity", function() {
update_mod("dexterity");
check_customac("Dexterity");
});
on("change:constitution_base change:constitution_bonus", function() {
update_attr("constitution");
});
on("change:constitution_mod", function(eventinfo) {
getSectionIDs("hpmod", function(ids) {
var hp_attrs = _.map(ids, function(id) { [`repeating_hpmod_${id}_source`, `repeating_hpmod_${id}_mod`]; });
getAttrs(_.flatten(hp_attrs), function(attrs) {
var update = {};
var constitution_mod_found = false;
_.each(hp_attrs, function(element) {
if(attrs[element[0]] === "CON") {
update[element[1]] = eventinfo.newValue;
constitution_mod_found = true;
}
});
if(!constitution_mod_found) {
var rowid = generateRowID();
update[`repeating_hpmod_${rowid}_source`] = "CON";
update[`repeating_hpmod_${rowid}_mod`] = eventinfo.newValue;
}
setAttrs(update);
});
});
});
on("change:constitution", function() {
update_mod("constitution");
check_customac("Constitution");
});
on("change:intelligence_base change:intelligence_bonus", function() {
update_attr("intelligence");
});
on("change:intelligence", function() {
update_mod("intelligence");
check_customac("Intelligence");
});
on("change:wisdom_base change:wisdom_bonus", function() {
update_attr("wisdom");
});
on("change:wisdom", function() {
update_mod("wisdom");
check_customac("Wisdom");
});
on("change:charisma_base change:charisma_bonus", function() {
update_attr("charisma");
});
on("change:charisma", function() {
update_mod("charisma");
check_customac("Charisma");
});
on("change:strength_mod", function() {
update_save("strength");
update_skills(["athletics"]);
update_attacks("strength");
update_tool("strength");
update_power_info("strength");
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_ship_speeds();
update_skills(["ship_boost", "ship_ram"]);
update_ship_dice();
}
else {
return;
}
});
});
on("change:dexterity_mod", function() {
update_save("dexterity");
update_skills(["acrobatics", "sleight_of_hand", "stealth", "ship_hide", "ship_maneuvering"]);
update_attacks("dexterity");
update_tool("dexterity");
update_power_info("dexterity");
update_ac();
update_initiative();
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_ship_speeds();
}
else {
return;
}
});
});
on("change:constitution_mod", function() {
update_save("constitution");
update_attacks("constitution");
update_tool("constitution");
update_power_info("constitution");
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_ship_speeds();
update_skills(["ship_patch", "ship_regulation"]);
update_ship_suite_capacity();
update_ship_dice();
}
else {
return;
}
});
});
on("change:intelligence_mod", function() {
update_save("intelligence");
update_skills(["technology", "lore", "investigation", "nature", "piloting", "ship_astrogation", "ship_data", "ship_probe"]);
update_attacks("intelligence");
update_tool("intelligence");
update_power_info("intelligence");
});
on("change:wisdom_mod", function() {
update_save("wisdom");
update_skills(["animal_handling", "insight", "medicine", "perception", "survival", "ship_scan"]);
update_attacks("wisdom");
update_tool("wisdom");
update_power_info("wisdom");
});
on("change:charisma_mod", function() {
update_save("charisma");
update_skills(["deception", "intimidation", "performance", "persuasion", "ship_impress", "ship_interfere", "ship_menace", "ship_swindle"]);
update_attacks("charisma");
update_tool("charisma");
update_power_info("charisma");
});
on("change:strength_save_prof change:strength_save_mod", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
update_save("strength");
});
on("change:dexterity_save_prof change:dexterity_save_mod", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
update_save("dexterity");
});
on("change:constitution_save_prof change:constitution_save_mod", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
update_save("constitution");
});
on("change:intelligence_save_prof change:intelligence_save_mod", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
update_save("intelligence");
});
on("change:wisdom_save_prof change:wisdom_save_mod", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
update_save("wisdom");
});
on("change:charisma_save_prof change:charisma_save_mod", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
update_save("charisma");
});
on("change:globalsavemod", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
update_all_saves();
});
on("change:death_save_mod", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
update_save("death");
});
on("change:acrobatics_prof change:acrobatics_type change:acrobatics_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["acrobatics"]);
}
});
});
on("change:animal_handling_prof change:animal_handling_type change:animal_handling_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["animal_handling"]);
}
});
});
on("change:technology_prof change:technology_type change:technology_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["technology"]);
}
});
});
on("change:athletics_prof change:athletics_type change:athletics_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["athletics"]);
}
});
});
on("change:deception_prof change:deception_type change:deception_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["deception"]);
}
});
});
on("change:lore_prof change:lore_type change:lore_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["lore"]);
}
});
});
on("change:insight_prof change:insight_type change:insight_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["insight"]);
}
});
});
on("change:intimidation_prof change:intimidation_type change:intimidation_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["intimidation"]);
}
});
});
on("change:investigation_prof change:investigation_type change:investigation_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["investigation"]);
}
});
});
on("change:medicine_prof change:medicine_type change:medicine_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["medicine"]);
}
});
});
on("change:nature_prof change:nature_type change:nature_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["nature"]);
}
});
});
on("change:perception_prof change:perception_type change:perception_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["perception"]);
}
});
});
on("change:performance_prof change:performance_type change:performance_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["performance"]);
}
});
});
on("change:persuasion_prof change:persuasion_type change:persuasion_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["persuasion"]);
}
});
});
on("change:piloting_prof change:piloting_type change:piloting_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["piloting"]);
}
});
});
on("change:sleight_of_hand_prof change:sleight_of_hand_type change:sleight_of_hand_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["sleight_of_hand"]);
}
});
});
on("change:stealth_prof change:stealth_type change:stealth_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["stealth"]);
}
});
});
on("change:survival_prof change:survival_type change:survival_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_skills(["survival"]);
}
});
});
//Begin ship based skill proficency change CATCHERS
on("change:ship_boost_prof change:ship_boost_type change:ship_boost_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_boost"]);
}
else {
return;
}
});
});
on("change:ship_ram_prof change:ship_ram_type change:ship_ram_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_ram"]);
}
else {
return;
}
});
});
on("change:ship_maneuvering_prof change:ship_maneuvering_type change:ship_maneuvering_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_maneuvering"]);
}
else {
return;
}
});
});
on("change:ship_patch_prof change:ship_patch_type change:ship_patch_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_patch"]);
}
else {
return;
}
});
});
on("change:ship_hide_prof change:ship_hide_type change:ship_hide_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_hide"]);
}
else {
return;
}
});
});
on("change:ship_regulation_prof change:ship_regulation_type change:ship_regulation_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_regulation"]);
}
else {
return;
}
});
});
on("change:ship_astrogation_prof change:ship_astrogation_type change:ship_astrogation_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_astrogation"]);
}
else {
return;
}
});
});
on("change:ship_data_prof change:ship_data_type change:ship_data_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_data"]);
}
else {
return;
}
});
});
on("change:ship_probe_prof change:ship_probe_type change:ship_probe_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_probe"]);
}
else {
return;
}
});
});
on("change:ship_scan_prof change:ship_scan_type change:ship_scan_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_scan"]);
}
else {
return;
}
});
});
on("change:ship_impress_prof change:ship_impress_type change:ship_impress_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_impress"]);
}
else {
return;
}
});
});
on("change:ship_interfere_prof change:ship_interfere_type change:ship_interfere_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_interfere"]);
}
else {
return;
}
});
});
on("change:ship_menace_prof change:ship_menace_type change:ship_menace_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_menace"]);
}
else {
return;
}
});
});
on("change:ship_swindle_prof change:ship_swindle_type change:ship_swindle_flat", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_skills(["ship_swindle"]);
}
else {
return;
}
});
});
on("change:ship_reactor", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_pwr_die_recovery();
update_ship_capacity();
}
else {
return;
}
});
});
on("change:ship_pwr_coupling", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {return;};
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
update_pwr_die_capacity();
}
else {
return;
}
});
});
on("change:repeating_tool:toolname change:repeating_tool:toolbonus_base change:repeating_tool:toolattr_base change:repeating_tool:tool_mod", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {
return;
}
var tool_id = eventinfo.sourceAttribute.substring(15, 35);
update_tool(tool_id);
});
on("change:repeating_attack:atkname change:repeating_attack:atkflag change:repeating_attack:atkattr_base change:repeating_attack:atkmod change:repeating_attack:atkpower change:repeating_attack:atkprofflag change:repeating_attack:dmgflag change:repeating_attack:dmgbase change:repeating_attack:dmgattr change:repeating_attack:dmgmod change:repeating_attack:dmgtype change:repeating_attack:dmg2flag change:repeating_attack:dmg2base change:repeating_attack:dmg2attr change:repeating_attack:dmg2mod change:repeating_attack:dmg2type change:repeating_attack:saveflag change:repeating_attack:savedc change:repeating_attack:saveflat change:repeating_attack:dmgcustcrit change:repeating_attack:dmg2custcrit change:repeating_attack:ammo change:repeating_attack:saveattr change:repeating_attack:atkrange", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {
return;
}
var source = eventinfo.sourceAttribute.substr(38);
var attackid = eventinfo.sourceAttribute.substring(17, 37);
if(source == "atkattr_base" || source == "savedc") {
getAttrs(["repeating_attack_powerid", "repeating_attack_powerlevel"], function(v) {
set = {};
if(v.repeating_attack_powerid && v.repeating_attack_powerid != "" && v.repeating_attack_powerlevel && v.repeating_attack_powerlevel != "") {
var newVal = eventinfo.newValue == "power" ? "power" : _.last(eventinfo.newValue.split("_")[0].split("{"));
set["repeating_attack_atkattr_base"] = newVal == "power" ? "power" : "@{" + newVal + "_mod}";
set["repeating_attack_savedc"] = newVal == "power" ? "power" : "(@{" + newVal + "_mod}+8+@{pb})";
set["repeating_power-" + v.repeating_attack_powerlevel + "_" + v.repeating_attack_powerid + "_power_ability"] = newVal == "power" ? "power" : "@{" + newVal + "_mod}+";
}
setAttrs(set, function() {
update_attacks(attackid);
});
});
} else {
update_attacks(attackid);
}
});
on("change:repeating_damagemod remove:repeating_damagemod", function(eventinfo) {
update_globaldamage();
});
on("change:global_damage_mod_flag", function(eventinfo) {
if(eventinfo.newValue === "1") {
getSectionIDs("damagemod", function(ids) {
if(!ids || ids.length === 0) {
var update = {};
var rowid = generateRowID();
update[`repeating_damagemod_${rowid}_global_damage_active_flag`] = "1";
update[`repeating_damagemod_${rowid}_global_damage_rollstring`] = "1d6[SNEAK ATTACK]";
update[`repeating_damagemod_${rowid}_global_damage_type`] = "Sneak";
setAttrs(update);
}
});
}
});
on("change:exhaustion_toggle", function(eventinfo) {
if(eventinfo.newValue !== "0") {
getAttrs(["exhaustion_level"], function(attrs) {
if(!attrs.exhaustion_level || attrs.exhaustion_level === "") {
var update = {};
update.exhaustion_level = "0";
setAttrs(update);
}
});
}
});
on("change:exhaustion_level", function() {
var update = {
"exhaustion_1": "",
"exhaustion_2": "",
"exhaustion_3": "",
"exhaustion_4": "",
"exhaustion_5": "",
"exhaustion_6": ""
};
getAttrs(["exhaustion_level"], function(attrs) {
switch(attrs["exhaustion_level"]) {
case "6":
update["exhaustion_6"] = "• " + getTranslationByKey("exhaustion-6");
case "5":
update["exhaustion_5"] = "• " + getTranslationByKey("exhaustion-5");
case "4":
update["exhaustion_4"] = "• " + getTranslationByKey("exhaustion-4");
case "3":
update["exhaustion_3"] = "• " + getTranslationByKey("exhaustion-3");
case "2":
update["exhaustion_2"] = "• " + getTranslationByKey("exhaustion-2");
case "1":
update["exhaustion_1"] = "• " + getTranslationByKey("exhaustion-1");
break;
default:
update["exhaustion_1"] = "• " + getTranslationByKey("exhaustion-0");
break;
}
setAttrs(update, {silent: true});
});
});
on("change:race change:subrace", function(eventinfo) {
update_race_display();
});
on("change:drop_category", function(eventinfo) {
if(eventinfo.newValue === "Monsters") {
getAttrs(["class","race","speed","hp"], function(v) {
if(v["class"] != "" || v["race"] != "" || v["speed"] != "" || v["hp"] != "") {
setAttrs({monster_confirm_flag: 1});
}
else {
handle_drop(eventinfo.newValue);
}
});
}
else {
handle_drop(eventinfo.newValue);
}
});
on("change:repeating_inventory:hasattack", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {
return;
}
var itemid = eventinfo.sourceAttribute.substring(20, 40);
getAttrs(["repeating_inventory_" + itemid + "_hasattack", "repeating_inventory_" + itemid + "_itemattackid"], function(v) {
var attackid = v["repeating_inventory_" + itemid + "_itemattackid"];
var hasattack = v["repeating_inventory_" + itemid + "_hasattack"];
if(attackid && attackid != "" && hasattack == 0) {
remove_attack(attackid);
}
else if(hasattack == 1) {
create_attack_from_item(itemid);
};
});
})
on("change:repeating_hiddeninventory:hasattack", function(eventinfo) {
if(eventinfo.sourceType === "sheetworker") {
return;
}
var itemid = eventinfo.sourceAttribute.substring(20, 40);
getAttrs(["repeating_hiddeninventory_" + itemid + "_hasattack", "repeating_hiddeninventory_" + itemid + "_itemattackid"], function(v) {
var attackid = v["repeating_hiddeninventory_" + itemid + "_itemattackid"];
var hasattack = v["repeating_hiddeninventory_" + itemid + "_hasattack"];
if(attackid && attackid != "" && hasattack == 0) {
remove_attack(attackid);
}
else if(hasattack == 1) {
create_attack_from_item(itemid, {hidden: true});
};
});
})
on("change:repeating_hiddeninventory:itemname change:repeating_hiddeninventory:itemproperties change:repeating_hiddeninventory:itemmodifiers change:repeating_hiddeninventory:itemcount", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var itemid = eventinfo.sourceAttribute.substring(20, 40);
getAttrs(["repeating_hiddeninventory_" + itemid + "_itemattackid", "repeating_hiddeninventory_" + itemid + "_itemresourceid"], function(v) {
var attackid = v["repeating_hiddeninventory_" + itemid + "_itemattackid"];
var resourceid = v["repeating_hiddeninventory_" + itemid + "_itemresourceid"];
if(attackid) {
update_attack_from_item(itemid, attackid, {hidden: true});
}
if(resourceid) {
update_resource_from_item(itemid, resourceid, false, {hidden: true});
}
});
});
on("change:repeating_hiddeninventory:useasresource", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var itemid = eventinfo.sourceAttribute.substring(20, 40);
getAttrs(["repeating_hiddeninventory_" + itemid + "_useasresource", "repeating_hiddeninventory_" + itemid + "_itemresourceid"], function(v) {
var useasresource = v["repeating_hiddeninventory_" + itemid + "_useasresource"];
var resourceid = v["repeating_hiddeninventory_" + itemid + "_itemresourceid"];
if(useasresource == 1) {
create_resource_from_item(itemid, {hidden: true});
}
else {
remove_resource(resourceid);
};
});
});
on("change:repeating_inventory:itemname change:repeating_inventory:itemproperties change:repeating_inventory:itemmodifiers change:repeating_inventory:itemcount", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var itemid = eventinfo.sourceAttribute.substring(20, 40);
getAttrs(["repeating_inventory_" + itemid + "_itemattackid", "repeating_inventory_" + itemid + "_itemresourceid"], function(v) {
var attackid = v["repeating_inventory_" + itemid + "_itemattackid"];
var resourceid = v["repeating_inventory_" + itemid + "_itemresourceid"];
if(attackid) {
update_attack_from_item(itemid, attackid);
}
if(resourceid) {
update_resource_from_item(itemid, resourceid);
}
});
});
on("change:repeating_inventory:useasresource", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var itemid = eventinfo.sourceAttribute.substring(20, 40);
getAttrs(["repeating_inventory_" + itemid + "_useasresource", "repeating_inventory_" + itemid + "_itemresourceid"], function(v) {
var useasresource = v["repeating_inventory_" + itemid + "_useasresource"];
var resourceid = v["repeating_inventory_" + itemid + "_itemresourceid"];
if(useasresource == 1) {
create_resource_from_item(itemid);
}
else {
remove_resource(resourceid);
};
});
});
on("change:other_resource change:other_resource_name change:repeating_resource:resource_left change:repeating_resource:resource_left_name change:repeating_resource:resource_right change:repeating_resource:resource_right_name", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var resourceid = eventinfo.sourceAttribute;
if(eventinfo.sourceAttribute.indexOf("other") > -1) {
resourceid = "other_resource";
}
else if(eventinfo.sourceAttribute.substring(eventinfo.sourceAttribute.length - 5) == "_name") {
resourceid = eventinfo.sourceAttribute.substring(0, eventinfo.sourceAttribute.length - 5);
};
getAttrs([resourceid, resourceid + "_name", resourceid + "_itemid"], function(v) {
if(!v[resourceid + "_name"]) {
remove_resource(resourceid);
}
else if(v[resourceid + "_itemid"] && v[resourceid + "_itemid"] != ""){
update_item_from_resource(resourceid, v[resourceid + "_itemid"]);
};
});
});
on("change:repeating_inventory:itemweight change:repeating_inventory:itemcount change:cp change:sp change:ep change:gp change:pp change:encumberance_setting change:size change:carrying_capacity_mod change:repeating_hiddeninventory:itemweight change:repeating_hiddeninventory:itemcount", function() {
update_weight();
});
on("change:repeating_inventory:itemmodifiers change:repeating_inventory:equipped", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var itemid = eventinfo.sourceAttribute.substring(20, 40);
getAttrs(["repeating_inventory_" + itemid + "_itemmodifiers"], function(v) {
if(v["repeating_inventory_" + itemid + "_itemmodifiers"]) {
check_itemmodifiers(v["repeating_inventory_" + itemid + "_itemmodifiers"], eventinfo.previousValue);
};
});
});
on("change:repeating_hiddeninventory:itemmodifiers change:repeating_hiddeninventory:equipped", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var itemid = eventinfo.sourceAttribute.substring(20, 40);
getAttrs(["repeating_hiddeninventory_" + itemid + "_itemmodifiers"], function(v) {
if(v["repeating_hiddeninventory_" + itemid + "_itemmodifiers"]) {
check_itemmodifiers(v["repeating_hiddeninventory_" + itemid + "_itemmodifiers"], eventinfo.previousValue);
};
});
});
on("change:globalacmod change:custom_ac_flag change:custom_ac_base change:custom_ac_part1 change:custom_ac_part2", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_ac();
});
on("change:repeating_power-cantrip:powername change:repeating_power-1:powername change:repeating_power-1:powerprepared change:repeating_power-2:powername change:repeating_power-2:powerprepared change:repeating_power-3:powername change:repeating_power-3:powerprepared change:repeating_power-4:powername change:repeating_power-4:powerprepared change:repeating_power-5:powername change:repeating_power-5:powerprepared change:repeating_power-6:powername change:repeating_power-6:powerprepared change:repeating_power-7:powername change:repeating_power-7:powerprepared change:repeating_power-8:powername change:repeating_power-8:powerprepared change:repeating_power-9:powername change:repeating_power-9:powerprepared change:repeating_power-cantrip:powerrange change:repeating_power-1:powerrange change:repeating_power-2:powerrange change:repeating_power-3:powerrange change:repeating_power-4:powerrange change:repeating_power-5:powerrange change:repeating_power-6:powerrange change:repeating_power-7:powerrange change:repeating_power-8:powerrange change:repeating_power-9:powerrange change:repeating_power-cantrip:powertarget change:repeating_power-1:powertarget change:repeating_power-2:powertarget change:repeating_power-3:powertarget change:repeating_power-4:powertarget change:repeating_power-5:powertarget change:repeating_power-6:powertarget change:repeating_power-7:powertarget change:repeating_power-8:powertarget change:repeating_power-9:powertarget change:repeating_power-cantrip:powerdamage change:repeating_power-1:powerdamage change:repeating_power-2:powerdamage change:repeating_power-3:powerdamage change:repeating_power-4:powerdamage change:repeating_power-5:powerdamage change:repeating_power-6:powerdamage change:repeating_power-7:powerdamage change:repeating_power-8:powerdamage change:repeating_power-9:powerdamage change:repeating_power-cantrip:powerdamagetype change:repeating_power-1:powerdamagetype change:repeating_power-2:powerdamagetype change:repeating_power-3:powerdamagetype change:repeating_power-4:powerdamagetype change:repeating_power-5:powerdamagetype change:repeating_power-6:powerdamagetype change:repeating_power-7:powerdamagetype change:repeating_power-8:powerdamagetype change:repeating_power-9:powerdamagetype change:repeating_power-cantrip:powerdamage2 change:repeating_power-1:powerdamage2 change:repeating_power-2:powerdamage2 change:repeating_power-3:powerdamage2 change:repeating_power-4:powerdamage2 change:repeating_power-5:powerdamage2 change:repeating_power-6:powerdamage2 change:repeating_power-7:powerdamage2 change:repeating_power-8:powerdamage2 change:repeating_power-9:powerdamage2 change:repeating_power-cantrip:powerdamagetype2 change:repeating_power-1:powerdamagetype2 change:repeating_power-2:powerdamagetype2 change:repeating_power-3:powerdamagetype2 change:repeating_power-4:powerdamagetype2 change:repeating_power-5:powerdamagetype2 change:repeating_power-6:powerdamagetype2 change:repeating_power-7:powerdamagetype2 change:repeating_power-8:powerdamagetype2 change:repeating_power-9:powerdamagetype2 change:repeating_power-cantrip:powerhealing change:repeating_power-1:powerhealing change:repeating_power-2:powerhealing change:repeating_power-3:powerhealing change:repeating_power-4:powerhealing change:repeating_power-5:powerhealing change:repeating_power-6:powerhealing change:repeating_power-7:powerhealing change:repeating_power-8:powerhealing change:repeating_power-9:powerhealing change:repeating_power-cantrip:powerdmgmod change:repeating_power-1:powerdmgmod change:repeating_power-2:powerdmgmod change:repeating_power-3:powerdmgmod change:repeating_power-4:powerdmgmod change:repeating_power-5:powerdmgmod change:repeating_power-6:powerdmgmod change:repeating_power-7:powerdmgmod change:repeating_power-8:powerdmgmod change:repeating_power-9:powerdmgmod change:repeating_power-cantrip:powersave change:repeating_power-1:powersave change:repeating_power-2:powersave change:repeating_power-3:powersave change:repeating_power-4:powersave change:repeating_power-5:powersave change:repeating_power-6:powersave change:repeating_power-7:powersave change:repeating_power-8:powersave change:repeating_power-9:powersave change:repeating_power-cantrip:powersavesuccess change:repeating_power-1:powersavesuccess change:repeating_power-2:powersavesuccess change:repeating_power-3:powersavesuccess change:repeating_power-4:powersavesuccess change:repeating_power-5:powersavesuccess change:repeating_power-6:powersavesuccess change:repeating_power-7:powersavesuccess change:repeating_power-8:powersavesuccess change:repeating_power-9:powersavesuccess change:repeating_power-cantrip:powerhldie change:repeating_power-1:powerhldie change:repeating_power-2:powerhldie change:repeating_power-3:powerhldie change:repeating_power-4:powerhldie change:repeating_power-5:powerhldie change:repeating_power-6:powerhldie change:repeating_power-7:powerhldie change:repeating_power-8:powerhldie change:repeating_power-9:powerhldie change:repeating_power-cantrip:powerhldietype change:repeating_power-1:powerhldietype change:repeating_power-2:powerhldietype change:repeating_power-3:powerhldietype change:repeating_power-4:powerhldietype change:repeating_power-5:powerhldietype change:repeating_power-6:powerhldietype change:repeating_power-7:powerhldietype change:repeating_power-8:powerhldietype change:repeating_power-9:powerhldietype change:repeating_power-cantrip:power_updateflag change:repeating_power-1:power_updateflag change:repeating_power-2:power_updateflag change:repeating_power-3:power_updateflag change:repeating_power-4:power_updateflag change:repeating_power-5:power_updateflag change:repeating_power-6:power_updateflag change:repeating_power-7:power_updateflag change:repeating_power-8:power_updateflag change:repeating_power-9:power_updateflag change:repeating_power-cantrip:powerattack change:repeating_power-1:powerattack change:repeating_power-2:powerattack change:repeating_power-3:powerattack change:repeating_power-4:powerattack change:repeating_power-5:powerattack change:repeating_power-6:powerattack change:repeating_power-7:powerattack change:repeating_power-8:powerattack change:repeating_power-9:powerattack change:repeating_power-cantrip:powerhlbonus change:repeating_power-1:powerhlbonus change:repeating_power-2:powerhlbonus change:repeating_power-3:powerhlbonus change:repeating_power-4:powerhlbonus change:repeating_power-5:powerhlbonus change:repeating_power-6:powerhlbonus change:repeating_power-7:powerhlbonus change:repeating_power-8:powerhlbonus change:repeating_power-9:powerhlbonus change:repeating_power-cantrip:includedesc change:repeating_power-1:includedesc change:repeating_power-2:includedesc change:repeating_power-3:includedesc change:repeating_power-4:includedesc change:repeating_power-5:includedesc change:repeating_power-6:includedesc change:repeating_power-7:includedesc change:repeating_power-8:includedesc change:repeating_power-9:includedesc change:repeating_power-cantrip:powerathigherlevels change:repeating_power-1:powerathigherlevels change:repeating_power-2:powerathigherlevels change:repeating_power-3:powerathigherlevels change:repeating_power-4:powerathigherlevels change:repeating_power-5:powerathigherlevels change:repeating_power-6:powerathigherlevels change:repeating_power-7:powerathigherlevels change:repeating_power-8:powerathigherlevels change:repeating_power-9:powerathigherlevels change:repeating_power-cantrip:powerdescription change:repeating_power-1:powerdescription change:repeating_power-2:powerdescription change:repeating_power-3:powerdescription change:repeating_power-4:powerdescription change:repeating_power-5:powerdescription change:repeating_power-6:powerdescription change:repeating_power-7:powerdescription change:repeating_power-8:powerdescription change:repeating_power-9:powerdescription change:repeating_power-cantrip:innate change:repeating_power-1:innate change:repeating_power-2:innate change:repeating_power-3:innate change:repeating_power-4:innate change:repeating_power-5:innate change:repeating_power-6:innate change:repeating_power-7:innate change:repeating_power-8:innate change:repeating_power-9:innate change:repeating_power-cantrip:power_ability change:repeating_power-1:power_ability change:repeating_power-2:power_ability change:repeating_power-3:power_ability change:repeating_power-4:power_ability change:repeating_power-5:power_ability change:repeating_power-6:power_ability change:repeating_power-7:power_ability change:repeating_power-8:power_ability change:repeating_power-9:power_ability", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var regex_result = /^(repeating_power-(?:cantrip|\d)_[^_]+)_.+$/.exec(eventinfo.sourceAttribute);
if(regex_result) {
var repeating_source = regex_result[1];
getAttrs([repeating_source + "_powerattackid", repeating_source + "_powerlevel"], function(v) {
var powerid = repeating_source.slice(-20);
var attackid = v[repeating_source + "_powerattackid"];
var lvl = v[repeating_source + "_powerlevel"];
if(attackid && lvl && powerid) {
update_attack_from_power(lvl, powerid, attackid)
}
});
}
});
on("change:repeating_power-cantrip:poweroutput change:repeating_power-1:poweroutput change:repeating_power-2:poweroutput change:repeating_power-3:poweroutput change:repeating_power-4:poweroutput change:repeating_power-5:poweroutput change:repeating_power-6:poweroutput change:repeating_power-7:poweroutput change:repeating_power-8:poweroutput change:repeating_power-9:poweroutput", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var repeating_source = eventinfo.sourceAttribute.substring(0, eventinfo.sourceAttribute.lastIndexOf('_'));
getAttrs([repeating_source + "_powerattackid", repeating_source + "_powerlevel", repeating_source + "_poweroutput", repeating_source + "_powerattackid", repeating_source + "_powerathigherlevels","character_id"], function(v) {
var update = {};
var poweroutput = v[repeating_source + "_poweroutput"];
var powerid = repeating_source.slice(-20);
var attackid = v[repeating_source + "_powerattackid"];
var lvl = v[repeating_source + "_powerlevel"];
if(poweroutput && poweroutput === "ATTACK") {
create_attack_from_power(lvl, powerid, v["character_id"]);
}
else if(poweroutput && poweroutput === "POWERCARD" && attackid && attackid != "") {
remove_attack(attackid);
var powerlevel = "@{powerlevel}";
if(v[repeating_source + "_powerathigherlevels"]) {
var lvl = parseInt(v[repeating_source + "_powerlevel"],10);
powerlevel = "?{Cast at what level?";
for(i = 0; i < 10-lvl; i++) {
powerlevel = powerlevel + "|Level " + (parseInt(i, 10) + parseInt(lvl, 10)) + "," + (parseInt(i, 10) + parseInt(lvl, 10));
}
powerlevel = powerlevel + "}";
}
update[repeating_source + "_rollcontent"] = "@{wtype}&{template:power} {{level=@{powerschool} " + powerlevel + "}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}";
}
setAttrs(update, {silent: true});
});
});
on("change:repeating_power-cantrip:powerathigherlevels change:repeating_power-1:powerathigherlevels change:repeating_power-2:powerathigherlevels change:repeating_power-3:powerathigherlevels change:repeating_power-4:powerathigherlevels change:repeating_power-5:powerathigherlevels change:repeating_power-6:powerathigherlevels change:repeating_power-7:powerathigherlevels change:repeating_power-8:powerathigherlevels change:repeating_power-9:powerathigherlevels", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
var repeating_source = eventinfo.sourceAttribute.substring(0, eventinfo.sourceAttribute.lastIndexOf('_'));
getAttrs([repeating_source + "_powerlevel", repeating_source + "_poweroutput", repeating_source + "_powerathigherlevels"], function(v) {
var update = {};
var poweroutput = v[repeating_source + "_poweroutput"];
var lvl = v[repeating_source + "_powerlevel"];
if(poweroutput && poweroutput === "POWERCARD") {
var powerlevel = "@{powerlevel}";
if(v[repeating_source + "_powerathigherlevels"]) {
var lvl = parseInt(v[repeating_source + "_powerlevel"],10);
powerlevel = "?{Cast at what level?";
for(i = 0; i < 10-lvl; i++) {
powerlevel = powerlevel + "|Level " + (parseInt(i, 10) + parseInt(lvl, 10)) + "," + (parseInt(i, 10) + parseInt(lvl, 10));
}
powerlevel = powerlevel + "}";
}
update[repeating_source + "_rollcontent"] = "@{wtype}&{template:power} {{level=@{powerschool} " + powerlevel + "}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}";
}
setAttrs(update, {silent: true});
});
});
on("change:class change:custom_class change:cust_classname change:cust_hitdietype change:cust_powercasting_ability change:cust_powerslots change:cust_strength_save_prof change:cust_dexterity_save_prof change:cust_constitution_save_prof change:cust_intelligence_save_prof change:cust_wisdom_save_prof change:cust_charisma_save_prof change:subclass change:multiclass1 change:multiclass1_subclass change:multiclass2 change:multiclass2_subclass change:multiclass3 change:multiclass3_subclass" , function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
getAttrs(["npc"], function(v) {
if(v.npc === "2") {
return;
}
else {
update_class();
}
});
});
on("change:base_level change:multiclass1_flag change:multiclass1 change:multiclass1_lvl change:multiclass2_flag change:multiclass2 change:multiclass2_lvl change:multiclass3_flag change:multiclass3 change:multiclass3_lvl change:tech_fighter change:tech_operative", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
set_level();
});
on("change:level_calculations change:caster_level change:lvl1_slots_mod change:lvl2_slots_mod change:lvl3_slots_mod change:lvl4_slots_mod change:lvl5_slots_mod change:lvl6_slots_mod change:lvl7_slots_mod change:lvl8_slots_mod change:lvl9_slots_mod", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
getAttrs(["level_calculations"], function(v) {
if(!v["level_calculations"] || v["level_calculations"] == "on") {
update_power_slots();
};
});
});
on("change:caster_level", function(eventinfo) {
getAttrs(["caster_level","npc"], function(v) {
var casterlvl = v["caster_level"] && !isNaN(parseInt(v["caster_level"], 10)) ? parseInt(v["caster_level"], 10) : 0;
if(v["npc"] && v["npc"] == 1 && casterlvl > 0) {
setAttrs({level: casterlvl})
};
});
});
on("change:pb", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
getAttrs(["npc"], function(v) {
if(v.npc === "2"){
update_pb();
}
});
});
on("change:pb_type change:pb_custom", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
getAttrs(["npc"], function(v) {
if(v.npc !== "2"){
update_pb();
}
});
});
on("change:dtype", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_attacks("all");
update_npc_action("all");
});
on("change:jack_of_all_trades", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_jack_attr();
update_all_ability_checks();
});
on("change:initmod change:init_tiebreaker", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_initiative();
});
on("change:powercasting_ability change:power_dc_mod change:globalpowermod", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_power_info();
});
on("change:npc_challenge", function() {
update_challenge();
});
on("change:npc_str_save_base change:npc_dex_save_base change:npc_con_save_base change:npc_int_save_base change:npc_wis_save_base change:npc_cha_save_base", function(eventinfo) {
update_npc_saves();
});
on("change:npc_acrobatics_base change:npc_animal_handling_base change:npc_technology_base change:npc_athletics_base change:npc_deception_base change:npc_lore_base change:npc_insight_base change:npc_intimidation_base change:npc_investigation_base change:npc_medicine_base change:npc_nature_base change:npc_perception_base change:npc_performance_base change:npc_persuasion_base change:npc_piloting_base change:npc_sleight_of_hand_base change:npc_stealth_base change:npc_survival_base", function(eventinfo) {
update_npc_skills();
});
on("change:repeating_npcaction:attack_flag change:repeating_npcaction:attack_type change:repeating_npcaction:attack_range change:repeating_npcaction:attack_target change:repeating_npcaction:attack_tohit change:repeating_npcaction:attack_damage change:repeating_npcaction:attack_damagetype change:repeating_npcaction:attack_damage2 change:repeating_npcaction:attack_damagetype2 change:repeating_npcaction-l:attack_flag change:repeating_npcaction-l:attack_type change:repeating_npcaction-l:attack_range change:repeating_npcaction-l:attack_target change:repeating_npcaction-l:attack_tohit change:repeating_npcaction-l:attack_damage change:repeating_npcaction-l:attack_damagetype change:repeating_npcaction-l:attack_damage2 change:repeating_npcaction-l:attack_damagetype2 change:repeating_npcaction:show_desc change:repeating_npcaction-l:show_desc change:repeating_npcaction:description change:repeating_npcaction-l:description", function(eventinfo) {
var actionid = eventinfo.sourceAttribute.substring(20, 40);
var legendary = eventinfo.sourceAttribute.indexOf("npcaction-l") > -1 ? true : false;
if(legendary) {
actionid = eventinfo.sourceAttribute.substring(22, 42);
}
update_npc_action(actionid, legendary);
});
on("change:core_die change:precognition_flag", function() {
getAttrs(["core_die","precognition_flag"], function(v) {
core = v.core_die && v.core_die != "" ? v.core_die : "1d20";
luck = v.precognition_flag && v.precognition_flag === "1" ? "ro<1" : "";
update = {};
update["d20"] = core + luck;
if(!v.core_die || v.core_die === "") {
update["core_die"] = "1d20";
}
setAttrs(update);
});
});
on("change:repeating_skillmod", function(eventinfo) {
update_globalskills();
});
on("change:global_skill_mod_flag", function(eventinfo) {
if(eventinfo.newValue === "1") {
getSectionIDs("skillmod", function(ids) {
if(!ids || ids.length === 0) {
var update = {};
var rowid = generateRowID();
update[`repeating_skillmod_${rowid}_global_skill_rollstring`] = "1d4[GUIDANCE]";
update[`repeating_skillmod_${rowid}_global_skill_active_flag`] = "1";
setAttrs(update);
}
});
}
});
on("change:repeating_savemod", function(eventinfo) {
update_globalsaves();
});
on("change:global_save_mod_flag", function(eventinfo) {
if(eventinfo.newValue === "1") {
getSectionIDs("savemod", function(ids) {
if(!ids || ids.length === 0) {
var update = {};
var rowid = generateRowID();
update[`repeating_savemod_${rowid}_global_save_rollstring`] = "1d4[BLESS]";
update[`repeating_savemod_${rowid}_global_save_active_flag`] = "1";
setAttrs(update);
}
});
}
});
on("change:repeating_tohitmod", function(eventinfo) {
update_globalattack();
});
on("change:global_attack_mod_flag", function(eventinfo) {
if(eventinfo.newValue === "1") {
getSectionIDs("tohitmod", function(ids) {
if(!ids || ids.length === 0) {
var update = {};
var rowid = generateRowID();
update[`repeating_tohitmod_${rowid}_global_attack_rollstring`] = "1d4[BLESS]";
update[`repeating_tohitmod_${rowid}_global_attack_active_flag`] = "1";
setAttrs(update);
}
});
}
});
on("change:confirm", function(eventinfo) {
setAttrs({monster_confirm_flag: ""});
getAttrs(["drop_category"], function(v) {
if(v["drop_category"]) {
handle_drop(v["drop_category"]);
}
});
});
on("change:cancel", function(eventinfo) {
setAttrs({monster_confirm_flag: ""});
cleanup_drop_fields();
});
on("change:passiveperceptionmod", function(eventinfo) {
update_passive_perception();
});
on("remove:repeating_inventory", function(eventinfo) {
var itemid = eventinfo.sourceAttribute.substring(20, 40);
var attackids = eventinfo.removedInfo && eventinfo.removedInfo["repeating_inventory_" + itemid + "_itemattackid"] ? eventinfo.removedInfo["repeating_inventory_" + itemid + "_itemattackid"] : undefined;
var resourceid = eventinfo.removedInfo && eventinfo.removedInfo["repeating_inventory_" + itemid + "_itemresourceid"] ? eventinfo.removedInfo["repeating_inventory_" + itemid + "_itemresourceid"] : undefined;
if(attackids) {
_.each(attackids.split(","), function(value) { remove_attack(value); });
}
if(resourceid) {
remove_resource(resourceid);
}
if(eventinfo.removedInfo && eventinfo.removedInfo["repeating_inventory_" + itemid + "_itemmodifiers"]) {
check_itemmodifiers(eventinfo.removedInfo["repeating_inventory_" + itemid + "_itemmodifiers"]);
}
update_weight();
});
on("remove:repeating_hiddeninventory", function(eventinfo) {
var itemid = eventinfo.sourceAttribute.substring(20, 40);
var attackids = eventinfo.removedInfo && eventinfo.removedInfo["repeating_hiddeninventory_" + itemid + "_itemattackid"] ? eventinfo.removedInfo["repeating_hiddeninventory_" + itemid + "_itemattackid"] : undefined;
var resourceid = eventinfo.removedInfo && eventinfo.removedInfo["repeating_hiddeninventory_" + itemid + "_itemresourceid"] ? eventinfo.removedInfo["repeating_hiddeninventory_" + itemid + "_itemresourceid"] : undefined;
if(attackids) {
_.each(attackids.split(","), function(value) { remove_attack(value); });
}
if(resourceid) {
remove_resource(resourceid);
}
if(eventinfo.removedInfo && eventinfo.removedInfo["repeating_hiddeninventory_" + itemid + "_itemmodifiers"]) {
check_itemmodifiers(eventinfo.removedInfo["repeating_hiddeninventory_" + itemid + "_itemmodifiers"]);
}
update_weight();
});
on("remove:repeating_attack", function(eventinfo) {
var attackid = eventinfo.sourceAttribute.substring(17, 37);
var itemid = eventinfo.removedInfo["repeating_attack_" + attackid + "_itemid"];
var powerid = eventinfo.removedInfo["repeating_attack_" + attackid + "_powerid"];
var powerlvl = eventinfo.removedInfo["repeating_attack_" + attackid + "_powerlevel"];
if(itemid) {
getAttrs(["repeating_inventory_" + itemid + "_hasattack"], function(v) {
if(v["repeating_inventory_" + itemid + "_hasattack"] && v["repeating_inventory_" + itemid + "_hasattack"] == 1) {
var update = {};
update["repeating_inventory_" + itemid + "_itemattackid"] = "";
update["repeating_inventory_" + itemid + "_hasattack"] = 0;
setAttrs(update, {silent: true});
}
});
getAttrs(["repeating_hiddeninventory_" + itemid + "_hasattack"], function(v) {
if(v["repeating_hiddeninventory_" + itemid + "_hasattack"] && v["repeating_hiddeninventory_" + itemid + "_hasattack"] == 1) {
var update = {};
update["repeating_hiddeninventory_" + itemid + "_itemattackid"] = "";
update["repeating_hiddeninventory_" + itemid + "_hasattack"] = 0;
setAttrs(update, {silent: true});
}
});
};
if(powerid && powerlvl) {
getAttrs(["repeating_power-" + powerlvl + "_" + powerid + "_poweroutput"], function(v) {
if(v["repeating_power-" + powerlvl + "_" + powerid + "_poweroutput"] && v["repeating_power-" + powerlvl + "_" + powerid + "_poweroutput"] == "ATTACK") {
var update = {};
update["repeating_power-" + powerlvl + "_" + powerid + "_powerattackid"] = "";
update["repeating_power-" + powerlvl + "_" + powerid + "_poweroutput"] = "POWERCARD";
setAttrs(update, {silent: true});
}
});
};
});
on("remove:repeating_resource", function(eventinfo) {
var resourceid = eventinfo.sourceAttribute.substring(19, 39);
var inventory = "repeating_inventory_";
var update = {};
var left_itemid = eventinfo.removedInfo["repeating_resource_" + resourceid + "_resource_left_itemid"];
getAttrs(["repeating_hiddeninventory_" + left_itemid + "_itemname"], function(x) {
if(x["repeating_hiddeninventory_" + left_itemid + "_itemname"]) {
inventory = "repeating_hiddeninventory_";
}
});
if(left_itemid) {
update[inventory + left_itemid + "_useasresource"] = 0;
update[inventory + left_itemid + "_itemresourceid"] = "";
}
inventory = "repeating_inventory_";
var right_itemid = eventinfo.removedInfo["repeating_resource_" + resourceid + "_resource_right_itemid"];
getAttrs(["repeating_hiddeninventory_" + right_itemid + "_itemname"], function(y) {
if(y["repeating_hiddeninventory_" + right_itemid + "_itemname"]) {
inventory = "repeating_hiddeninventory_";
}
});
if(right_itemid) {
update[inventory + right_itemid + "_useasresource"] = 0;
update[inventory + right_itemid + "_itemresourceid"] = "";
}
setAttrs(update, {silent: true});
});
on("remove:repeating_power-cantrip remove:repeating_power-1 remove:repeating_power-2 remove:repeating_power-3 remove:repeating_power-4 remove:repeating_power-5 remove:repeating_power-6 remove:repeating_power-7 remove:repeating_power-8 remove:repeating_power-9", function(eventinfo) {
var attackid = eventinfo.removedInfo[eventinfo.sourceAttribute + "_powerattackid"];
if(attackid) {
remove_attack(attackid);
}
});
on("clicked:relaunch_lvl1mancer", function(eventinfo) {
getAttrs(["l1mancer_status"], function(v) {
if(v["l1mancer_status"] === "completed") {
setAttrs({l1mancer_status: ""});
}
check_l1_mancer();
});
});
on("change:ship_size", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_ac();
update_ship_speeds();
update_ship_dice();
update_ship_capacity();
update_ship_suite_capacity();
update_ship_tier_cost();
});
on("change:base_ship_tier", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_ship_dice();
update_ship_tier_cost();
});
on("change:pilot_skill", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_ac();
});
on("change:system_dmg_lvl", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
switch(eventinfo.newValue) {
case "0":
setAttrs({system_dmg: "None"});
break;
case "1":
setAttrs({system_dmg: "Disadvantage on ability checks."});
break;
case "2":
setAttrs({system_dmg: "Flying speed halved and turning speed doubled."});
break;
case "3":
setAttrs({system_dmg: "Disadvantage on attack rolls and saving throws."});
break;
case "4":
setAttrs({system_dmg: "Hit point maximum, shield point maximum, and shield regeneration rate halved."});
break;
case "5":
setAttrs({system_dmg: "Ship becomes permanently \"used\"."});
break;
case "6":
setAttrs({system_dmg: "Ship suffers catastrophic power failure. All primary systems fail."});
break;
default:
setAttrs({system_dmg: "None"});
break;
}
});
on("change:ship_armor_active_flag change:ship_armor_ac_bonus", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_ac();
});
on("change:ship_shield_active_flag change:ship_shield_capacity change:hp_max", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_shield_points();
});
on("change:ship_shield_active_flag change:ship_shield_regen_rate_coefficient change:ship_size", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_shield_regen();
});
on("change:ship_armor change:ship_size", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_ac();
update_ship_dice();
});
on("change:ship_shield change:ship_size", function(eventinfo) {
if(eventinfo.sourceType && eventinfo.sourceType === "sheetworker") {
return;
}
update_ship_dice();
});
var update_attr = function(attr) {
getSectionIDs("repeating_inventory", function(idarray) {
update_inventory_from_attr_change("repeating_inventory_", idarray, attr);
});
getSectionIDs("repeating_hiddeninventory", function(idarray) {
update_inventory_from_attr_change("repeating_hiddeninventory_", idarray, attr);
});
};
var update_inventory_from_attr_change = function(inventory, idarray, attr) {
var update = {};
var attr_fields = [attr + "_base",attr + "_bonus"];
_.each(idarray, function(currentID, i) {
attr_fields.push(inventory + currentID + "_equipped");
attr_fields.push(inventory + currentID + "_itemmodifiers");
});
getAttrs(attr_fields, function(v) {
var base = v[attr + "_base"] && !isNaN(parseInt(v[attr + "_base"], 10)) ? parseInt(v[attr + "_base"], 10) : 10;
var bonus = v[attr + "_bonus"] && !isNaN(parseInt(v[attr + "_bonus"], 10)) ? parseInt(v[attr + "_bonus"], 10) : 0;
var item_base = 0;
var item_bonus = 0;
_.each(idarray, function(currentID) {
if((!v[inventory + currentID + "_equipped"] || v[inventory + currentID + "_equipped"] === "1") && v[inventory + currentID + "_itemmodifiers"] && v[inventory + currentID + "_itemmodifiers"].toLowerCase().indexOf(attr > -1)) {
var mods = v[inventory + currentID + "_itemmodifiers"].toLowerCase().split(",");
_.each(mods, function(mod) {
if(mod.indexOf(attr) > -1 && mod.indexOf("save") === -1) {
if(mod.indexOf(":") > -1) {
var new_base = !isNaN(parseInt(mod.replace(/[^0-9]/g, ""), 10)) ? parseInt(mod.replace(/[^0-9]/g, ""), 10) : false;
item_base = new_base && new_base > item_base ? new_base : item_base;
}
else if(mod.indexOf("-") > -1) {
var new_mod = !isNaN(parseInt(mod.replace(/[^0-9]/g, ""), 10)) ? parseInt(mod.replace(/[^0-9]/g, ""), 10) : false;
item_bonus = new_mod ? item_bonus - new_mod : item_bonus;
}
else {
var new_mod = !isNaN(parseInt(mod.replace(/[^0-9]/g, ""), 10)) ? parseInt(mod.replace(/[^0-9]/g, ""), 10) : false;
item_bonus = new_mod ? item_bonus + new_mod : item_bonus;
}
};
});
}
});
update[attr + "_flag"] = bonus > 0 || item_bonus > 0 || item_base > base ? 1 : 0;
base = base > item_base ? base : item_base;
update[attr] = base + bonus + item_bonus;
setAttrs(update);
});
};
var update_mod = function (attr) {
getAttrs([attr], function(v) {
var attr_abr = attr.substring(0,3);
var finalattr = v[attr] && isNaN(v[attr]) === false ? Math.floor((parseInt(v[attr], 10) - 10) / 2) : 0;
var update = {};
update[attr + "_mod"] = finalattr;
update["npc_" + attr_abr + "_negative"] = v[attr] && !isNaN(v[attr]) && parseInt(v[attr], 10) < 10 ? 1 : 0;
setAttrs(update);
});
};
var update_save = function (attr) {
getSectionIDs("repeating_inventory", function(idarray) {
update_inventory_from_save_change("repeating_inventory_", idarray, attr);
});
getSectionIDs("repeating_hiddeninventory", function(idarray) {
update_inventory_from_save_change("repeating_hiddeninventory_", idarray, attr);
});
};
var update_inventory_from_save_change = function(inventory, idarray, attr) {
var save_attrs = [attr + "_mod", attr + "_save_prof", attr + "_save_mod","pb","globalsavemod","pb_type"];
_.each(idarray, function(currentID, i) {
save_attrs.push(inventory + currentID + "_equipped");
save_attrs.push(inventory + currentID + "_itemmodifiers");
});
getAttrs(save_attrs, function(v) {
var attr_mod = v[attr + "_mod"] ? parseInt(v[attr + "_mod"], 10) : 0;
var prof = v[attr + "_save_prof"] && v[attr + "_save_prof"] != 0 && !isNaN(v["pb"]) ? parseInt(v["pb"], 10) : 0;
var save_mod = v[attr + "_save_mod"] && !isNaN(parseInt(v[attr + "_save_mod"], 10)) ? parseInt(v[attr + "_save_mod"], 10) : 0;
var global = v["globalsavemod"] && !isNaN(v["globalsavemod"]) ? parseInt(v["globalsavemod"], 10) : 0;
var items = 0;
_.each(idarray, function(currentID) {
if(v[inventory + currentID + "_equipped"] && v[inventory + currentID + "_equipped"] === "1" && v[inventory + currentID + "_itemmodifiers"] && (v[inventory + currentID + "_itemmodifiers"].toLowerCase().indexOf("saving throws") > -1 || v[inventory + currentID + "_itemmodifiers"].toLowerCase().indexOf(attr + " save") > -1)) {
var mods = v[inventory + currentID + "_itemmodifiers"].toLowerCase().split(",");
_.each(mods, function(mod) {
if(mod.indexOf(attr + " save") > -1) {
var substr = mod.slice(mod.lastIndexOf(attr + " save") + attr.length + " save".length);
var bonus = substr && substr.length > 0 && !isNaN(parseInt(substr,10)) ? parseInt(substr,10) : 0;
}
else if(mod.indexOf("saving throws") > -1) {
var substr = mod.slice(mod.lastIndexOf("saving throws") + "saving throws".length);
var bonus = substr && substr.length > 0 && !isNaN(parseInt(substr,10)) ? parseInt(substr,10) : 0;
};
if(bonus && bonus != 0) {
items = items + bonus;
};
});
}
});
var total = attr_mod + prof + save_mod + global + items;
if(v["pb_type"] && v["pb_type"] === "die" && v[attr + "_save_prof"] != 0 && attr != "death") {
total = total + "+" + v["pb"];
};
var update = {};
update[attr + "_save_bonus"] = total;
setAttrs(update, {silent: true});
});
};
var update_all_saves = function() {
update_save("strength");
update_save("dexterity");
update_save("constitution");
update_save("intelligence");
update_save("wisdom");
update_save("charisma");
update_save("death");
};
var update_all_ability_checks = function(){
update_initiative();
update_skills(["athletics", "acrobatics", "sleight_of_hand", "stealth", "technology", "lore", "investigation", "nature", "piloting", "animal_handling", "insight", "medicine", "perception", "survival", "deception", "intimidation", "performance", "persuasion", "ship_boost", "ship_ram", "ship_hide", "ship_maneuvering", "ship_patch", "ship_regulation", "ship_astrogation", "ship_data", "ship_probe", "ship_scan", "ship_impress", "ship_interfere", "ship_menace", "ship_swindle"]);
};
var update_skills = function (skills_array) {
var skill_parent = {
athletics: "strength",
acrobatics: "dexterity",
sleight_of_hand: "dexterity",
stealth: "dexterity",
ship_hide: "dexterity",
technology: "intelligence",
lore: "intelligence",
investigation: "intelligence",
nature: "intelligence",
piloting: "intelligence",
animal_handling: "wisdom",
insight: "wisdom",
medicine: "wisdom",
perception: "wisdom",
survival: "wisdom",
deception: "charisma",
intimidation: "charisma",
performance: "charisma",
persuasion: "charisma",
ship_boost: "strength",
ship_ram: "strength",
ship_maneuvering: "dexterity",
ship_patch: "constitution",
ship_regulation: "constitution",
ship_astrogation: "intelligence",
ship_data: "intelligence",
ship_probe: "intelligence",
ship_scan: "wisdom",
ship_impress: "charisma",
ship_interfere: "charisma",
ship_menace: "charisma",
ship_swindle: "charisma"};
var attrs_to_get = ["pb","pb_type","jack_of_all_trades","jack"];
var callbacks = [];
if(skills_array.indexOf("perception") > -1) {
callbacks.push( function() {update_passive_perception();} )
};
_.each(skills_array, function(s) {
if(skill_parent[s] && attrs_to_get.indexOf(skill_parent[s]) === -1) {attrs_to_get.push(skill_parent[s] + "_mod")};
attrs_to_get.push(s + "_prof");
attrs_to_get.push(s + "_type");
attrs_to_get.push(s + "_flat");
});
getSectionIDs("repeating_inventory", function(idarray) {
update_inventory_from_skill_change("repeating_inventory_", idarray, callbacks, attrs_to_get, skill_parent, skills_array);
});
getSectionIDs("repeating_hiddeninventory", function(idarray) {
update_inventory_from_skill_change("repeating_hiddeninventory_", idarray, callbacks, attrs_to_get, skill_parent, skills_array);
});
};
var update_inventory_from_skill_change = function(inventory, idarray, callbacks, attrs_to_get, skill_parent, skills_array) {
var update = {};
_.each(idarray, function(currentID, i) {
attrs_to_get.push(inventory + currentID + "_equipped");
attrs_to_get.push(inventory + currentID + "_itemmodifiers");
});
getAttrs(attrs_to_get, function(v) {
_.each(skills_array, function(s) {
console.log("UPDATING SKILL: " + s);
var attr_mod = v[skill_parent[s] + "_mod"] ? parseInt(v[skill_parent[s] + "_mod"], 10) : 0;
var prof = v[s + "_prof"] != 0 && !isNaN(v["pb"]) ? parseInt(v["pb"], 10) : 0;
var flat = v[s + "_flat"] && !isNaN(parseInt(v[s + "_flat"], 10)) ? parseInt(v[s + "_flat"], 10) : 0;
var type = v[s + "_type"] && !isNaN(parseInt(v[s + "_type"], 10)) ? parseInt(v[s + "_type"], 10) : 1;
var jack = v["jack_of_all_trades"] && v["jack_of_all_trades"] != 0 && v["jack"] ? v["jack"] : 0;
var item_bonus = 0;
_.each(idarray, function(currentID) {
if(v[inventory + currentID + "_equipped"] && v[inventory + currentID + "_equipped"] === "1" && v[inventory + currentID + "_itemmodifiers"] && (v[inventory + currentID + "_itemmodifiers"].toLowerCase().replace(/ /g,"_").indexOf(s) > -1 || v[inventory + currentID + "_itemmodifiers"].toLowerCase().indexOf("ability checks") > -1)) {
var mods = v[inventory + currentID + "_itemmodifiers"].toLowerCase().split(",");
_.each(mods, function(mod) {
if(mod.replace(/ /g,"_").indexOf(s) > -1 || mod.indexOf("ability checks") > -1) {
if(mod.indexOf("-") > -1) {
var new_mod = !isNaN(parseInt(mod.replace(/[^0-9]/g, ""), 10)) ? parseInt(mod.replace(/[^0-9]/g, ""), 10) : false;
item_bonus = new_mod ? item_bonus - new_mod : item_bonus;
}
else {
var new_mod = !isNaN(parseInt(mod.replace(/[^0-9]/g, ""), 10)) ? parseInt(mod.replace(/[^0-9]/g, ""), 10) : false;
item_bonus = new_mod ? item_bonus + new_mod : item_bonus;
}
};
});
};
});
var total = attr_mod + flat + item_bonus;
if(v["pb_type"] && v["pb_type"] === "die") {
if(v[s + "_prof"] != 0) {
type === 1 ? "" : "2"
total = total + "+" + type + v["pb"];
}
else if(v[s + "_prof"] == 0 && jack != 0) {
total = total + "+" + jack;
};
}
else {
if(v[s + "_prof"] != 0) {
total = total + (prof * type);
}
else if(v[s + "_prof"] == 0 && jack != 0) {
total = total + parseInt(jack, 10);
};
};
update[s + "_bonus"] = total;
});
setAttrs(update, {silent: true}, function() {callbacks.forEach(function(callback) {callback(); })} );
});
};
var update_tool = function(tool_id) {
if(tool_id.substring(0,1) === "-" && tool_id.length === 20) {
do_update_tool([tool_id]);
}
else if(tool_id === "all") {
getSectionIDs("repeating_tool", function(idarray) {
do_update_tool(idarray);
});
}
else {
getSectionIDs("repeating_tool", function(idarray) {
var tool_attribs = [];
_.each(idarray, function(id) {
tool_attribs.push("repeating_tool_" + id + "_toolattr_base");
});
getAttrs(tool_attribs, function(v) {
var attr_tool_ids = [];
_.each(idarray, function(id) {
if(v["repeating_tool_" + id + "_toolattr_base"] && v["repeating_tool_" + id + "_toolattr_base"].indexOf(tool_id) > -1) {
attr_tool_ids.push(id);
}
});
if(attr_tool_ids.length > 0) {
do_update_tool(attr_tool_ids);
}
});
});
};
};
var do_update_tool = function(tool_array) {
var tool_attribs = ["pb","pb_type","jack","strength_mod","dexterity_mod","constitution_mod","intelligence_mod","wisdom_mod","charisma_mod"];
var update = {};
_.each(tool_array, function(tool_id) {
tool_attribs.push("repeating_tool_" + tool_id + "_toolbonus_base");
tool_attribs.push("repeating_tool_" + tool_id + "_tool_mod");
tool_attribs.push("repeating_tool_" + tool_id + "_toolattr_base");
});
getAttrs(tool_attribs, function(v) {
_.each(tool_array, function(tool_id) {
console.log("UPDATING TOOL: " + tool_id);
var query = false;
if(v["repeating_tool_" + tool_id + "_toolattr_base"] && v["repeating_tool_" + tool_id + "_toolattr_base"].substring(0,2) === "?{") {
update["repeating_tool_" + tool_id + "_toolattr"] = "QUERY";
var mod = "?{Attribute?|Strength,@{strength_mod}|Dexterity,@{dexterity_mod}|Constitution,@{constitution_mod}|Intelligence,@{intelligence_mod}|Wisdom,@{wisdom_mod}|Charisma,@{charisma_mod}}";
if(v["repeating_tool_" + tool_id + "_tool_mod"]) {
mod = mod + "+" + v["repeating_tool_" + tool_id + "_tool_mod"];
}
query = true;
}
else {
var attr = v["repeating_tool_" + tool_id + "_toolattr_base"].substring(0, v["repeating_tool_" + tool_id + "_toolattr_base"].length - 5).substr(2);
var attr_mod = v[attr + "_mod"] ? parseInt(v[attr + "_mod"], 10) : 0;
var tool_mod = v["repeating_tool_" + tool_id + "_tool_mod"] && !isNaN(parseInt(v["repeating_tool_" + tool_id + "_tool_mod"], 10)) ? parseInt(v["repeating_tool_" + tool_id + "_tool_mod"], 10) : 0;
var mod = attr_mod + tool_mod;
update["repeating_tool_" + tool_id + "_toolattr"] = attr.toUpperCase();
if(v["repeating_tool_" + tool_id + "_tool_mod"] && v["repeating_tool_" + tool_id + "_tool_mod"].indexOf("@{") > -1) {
update["repeating_tool_" + tool_id + "_toolbonus"] = update["repeating_tool_" + tool_id + "_toolbonus"] + "+" + v["repeating_tool_" + tool_id + "_tool_mod"];
}
if(!v["repeating_tool_" + tool_id + "_tool_mod"]) {
update["repeating_tool_" + tool_id + "_tool_mod"] = 0;
}
};
if(v["pb_type"] && v["pb_type"] === "die" ) {
if(v["repeating_tool_" + tool_id + "_toolbonus_base"] === "(@{pb})") {update["repeating_tool_" + tool_id + "_toolbonus"] = mod + "+" + v.pb}
else if(v["repeating_tool_" + tool_id + "_toolbonus_base"] === "(@{pb}*2)") {update["repeating_tool_" + tool_id + "_toolbonus"] = mod + "+2" + v.pb}
else if(v["repeating_tool_" + tool_id + "_toolbonus_base"] === "(floor(@{pb}/2))") {update["repeating_tool_" + tool_id + "_toolbonus"] = mod + "+" + v.jack};
}
else if(v["repeating_tool_" + tool_id + "_toolattr_base"] && v["repeating_tool_" + tool_id + "_toolattr_base"].substring(0,2) === "?{") {
if(v["repeating_tool_" + tool_id + "_toolbonus_base"] === "(@{pb})") {update["repeating_tool_" + tool_id + "_toolbonus"] = mod + "+" + parseInt(v.pb, 10)}
else if(v["repeating_tool_" + tool_id + "_toolbonus_base"] === "(@{pb}*2)") {update["repeating_tool_" + tool_id + "_toolbonus"] = mod + "+" + (parseInt(v.pb, 10)*2)}
else if(v["repeating_tool_" + tool_id + "_toolbonus_base"] === "(floor(@{pb}/2))") {update["repeating_tool_" + tool_id + "_toolbonus"] = mod + "+" + parseInt(v.jack, 10)};
}
else {
if(v["repeating_tool_" + tool_id + "_toolbonus_base"] === "(@{pb})") {update["repeating_tool_" + tool_id + "_toolbonus"] = mod + parseInt(v.pb, 10)}
else if(v["repeating_tool_" + tool_id + "_toolbonus_base"] === "(@{pb}*2)") {update["repeating_tool_" + tool_id + "_toolbonus"] = mod + (parseInt(v.pb, 10)*2)}
else if(v["repeating_tool_" + tool_id + "_toolbonus_base"] === "(floor(@{pb}/2))") {update["repeating_tool_" + tool_id + "_toolbonus"] = mod + parseInt(v.jack, 10)};
};
if(query) {
update["repeating_tool_" + tool_id + "_toolbonus_display"] = "?";
}
else {
update["repeating_tool_" + tool_id + "_toolbonus_display"] = update["repeating_tool_" + tool_id + "_toolbonus"];
};
});
setAttrs(update, {silent: true});
});
};
var handle_drop = function(category, eventinfo) {
var callbacks = [];
var update = {};
var id = generateRowID();
getAttrs(["drop_name", "drop_weight", "drop_properties", "drop_modifiers", "drop_content", "drop_itemtype", "drop_damage", "drop_damagetype", "drop_damage2", "drop_damagetype2", "drop_alt_damage", "drop_alt_damagetype", "drop_alt_damage2", "drop_alt_damagetype2", "drop_range", "drop_ac", "drop_powerschool", "drop_powercastingtime", "drop_powertarget", "drop_powercomp", "drop_powercomp_materials", "drop_powerconcentrationflag", "drop_powerduration", "drop_powerhealing", "drop_powerdmgmod", "drop_powersave", "drop_powersavesuccess", "drop_powerhldie", "drop_powerhldietype", "drop_powerhlbonus", "drop_powerlevel", "drop_power_damage_progression", "drop_power_ability", "drop_attack_type", "drop_speed", "drop_str", "drop_dex", "drop_con", "drop_int", "drop_wis", "drop_cha", "drop_vulnerabilities", "drop_resistances", "drop_immunities", "drop_condition_immunities", "drop_languages", "drop_challenge_rating", "drop_size", "drop_type", "drop_alignment", "drop_hp", "drop_saving_throws", "drop_senses", "drop_passive_perception", "drop_skills", "drop_token_size", "character_id", "drop_actions", "drop_legendary_actions", "drop_legendary_actions_desc", "drop_reactions", "drop_traits", "npc_legendary_actions", "strength_mod", "dexterity_mod", "npc", "powercasting_ability", "drop_toolbonus_base", "drop_itemcount", "drop_armor_prof", "drop_hit_die", "drop_weapon_prof", "drop_powercasting_ability", "drop_class_saving_throws", "base_level", "drop_language_prof", "drop_tool_prof", "drop_power_ability", "drop_skill_proficiency", "drop_parent", "drop_hp_per_level", "drop_class_powers", "drop_global_damage", "drop_feature_name", "drop_feature_description", "drop_resources", "drop_powerhldesc", "drop_powerdesc", "strength_base", "dexterity_base", "constitution_base", "wisdom_base", "intelligence_base", "charisma_base"], function(v) {
id = generateRowID();
if(category === "Items") {
if(v["npc"] === "0") {
update["tab"] = "core";
if(v.drop_name) {update["repeating_inventory_" + id + "_itemname"] = v.drop_name};
if(v.drop_itemcount) {update["repeating_inventory_" + id + "_itemcount"] = v.drop_itemcount};
if(v.drop_weight) {update["repeating_inventory_" + id + "_itemweight"] = v.drop_weight};
if(v.drop_properties) {update["repeating_inventory_" + id + "_itemproperties"] = v.drop_properties};
if(v.drop_content) {update["repeating_inventory_" + id + "_itemcontent"] = v.drop_content};
if(!v.drop_itemtype || v.drop_itemtype == "") {v.drop_itemtype = category};
var mods = "Item Type: " + v.drop_itemtype;
if(v.drop_ac && v.drop_ac != "") {
mods += ", AC: " + v.drop_ac;
callbacks.push( function() {update_ac();} )
};
if(v.drop_damage && v.drop_damage != "") {mods += ", Damage: " + v.drop_damage};
if(v.drop_damagetype && v.drop_damagetype != "") {mods += ", Damage Type: " + v.drop_damagetype};
if(v.drop_damage2 && v.drop_damage2 != "") {mods += ", Secondary Damage: " + v.drop_damage2};
if(v.drop_damagetype2 && v.drop_damagetype2 != "") {mods += ", Secondary Damage Type: " + v.drop_damagetype2};
if(v.drop_alt_damage && v.drop_alt_damage != "") {mods += ", Alternate Damage: " + v.drop_alt_damage};
if(v.drop_alt_damagetype && v.drop_alt_damagetype != "") {mods += ", Alternate Damage Type: " + v.drop_alt_damagetype};
if(v.drop_alt_damage2 && v.drop_alt_damage2 != "") {mods += ", Alternate Secondary Damage: " + v.drop_alt_damage2};
if(v.drop_alt_damagetype2 && v.drop_alt_damagetype2 != "") {mods += ", Alternate Secondary Damage Type: " + v.drop_alt_damagetype2};
if(v.drop_range && v.drop_range != "") {mods += ", Range: " + v.drop_range};
if(v.drop_modifiers && v.drop_modifiers != "") {mods += ", " + v.drop_modifiers};
update["repeating_inventory_" + id + "_itemmodifiers"] = mods;
if(v.drop_itemtype.indexOf("Weapon") > -1) {
update["repeating_inventory_" + id + "_hasattack"] = 1;
callbacks.push( function() {
if(v.drop_alt_damage && v.drop_alt_damage !== "") {
create_attack_from_item(id, {versatile: true});
} else {
create_attack_from_item(id);
}
} );
}
else if(v.drop_itemtype.indexOf("Ammunition") > -1) {
update["repeating_inventory_" + id + "_useasresource"] = 1;
callbacks.push( function() {create_resource_from_item(id);} );
};
if(v["drop_modifiers"]) {
callbacks.push( function() {check_itemmodifiers(v["drop_modifiers"]);} );
};
callbacks.push( function() {update_weight();} );
}
else {
if(v.drop_itemtype && new RegExp('\\bweapon\\b', 'i').test(v.drop_itemtype)) {
var make_npc_attack_from_item = function(rowid, options) {
update["repeating_npcaction_" + rowid + "_npc_options-flag"] = "0";
update["repeating_npcaction_" + rowid + "_attack_flag"] = "on";
if(v.drop_name) {
update["repeating_npcaction_" + rowid + "_name"] = v.drop_name;
if(options && options.versatile) {
update["repeating_npcaction_" + rowid + "_name"] += " (" + (options.versatile === 1 ? "One-Handed" : "Two-Handed") + ")";
} else if(options && options.thrown) {
update["repeating_npcaction_" + rowid + "_name"] += " (Thrown)";
}
}
if(v.drop_content) { update["repeating_npcaction_" + rowid + "_description"] = v.drop_content; }
update["repeating_npcaction_" + rowid + "_attack_display_flag"] = "{{attack=1}}";
update["repeating_npcaction_" + rowid + "_attack_options"] = "{{attack=1}}";
update["repeating_npcaction_" + rowid + "_attack_type"] = v.drop_itemtype.substring(0, v.drop_itemtype.indexOf(" "));
var thrown = v.drop_properties && new RegExp('\\bthrown\\b', 'i').test(v.drop_properties);
if(v.drop_range && v.drop_range != "" && (!thrown || (options && options.thrown))) {
update["repeating_npcaction_" + rowid + "_attack_range"] = v.drop_range;
}
else if(v.drop_properties && new RegExp('\\breach\\b', 'i').test(v.drop_properties)) {
update["repeating_npcaction_" + rowid + "_attack_range"] = "10 ft";
}
else {
update["repeating_npcaction_" + rowid + "_attack_range"] = "5 ft";
}
update["repeating_npcaction_" + rowid + "_attack_target"] = "one target";
var isFinesse = v.drop_properties && new RegExp('\\bfinesse\\b', 'i').test(v.drop_properties);
var attack_type = update[`repeating_npcaction_${id}_attack_type`].toLowerCase();
var use_dex_mod = attack_type === "ranged" || (isFinesse && v.dexterity_mod > v.strength_mod);
var weapon_attr_mod = use_dex_mod ? v.dexterity_mod : v.strength_mod;
update["repeating_npcaction_" + rowid + "_attack_tohit"] = weapon_attr_mod;
if(options && options.versatile === 2) {
if(v.drop_alt_damage) { update["repeating_npcaction_" + rowid + "_attack_damage"] = v.drop_alt_damage + "+" + weapon_attr_mod; }
if(v.drop_alt_damagetype) { update["repeating_npcaction_" + rowid + "_attack_damagetype"] = v.drop_alt_damagetype; }
if(v.drop_alt_damage2) { update["repeating_npcaction_" + rowid + "_attack_damage2"] = v.drop_alt_damage2; }
if(v.drop_alt_damagetype2) { update["repeating_npcaction_" + rowid + "_attack_damagetype2"] = v.drop_alt_damagetype2; }
}
else {
if(v.drop_damage) { update["repeating_npcaction_" + rowid + "_attack_damage"] = v.drop_damage + "+" + weapon_attr_mod; }
if(v.drop_damagetype) {update["repeating_npcaction_" + rowid + "_attack_damagetype"] = v.drop_damagetype; }
if(v.drop_damage2) { update["repeating_npcaction_" + rowid + "_attack_damage2"] = v.drop_damage2; }
if(v.drop_damagetype2) { update["repeating_npcaction_" + rowid + "_attack_damagetype2"] = v.drop_damagetype2; }
}
if(v.drop_modifiers) {
if(attack_type === "melee") {
var tohit_regex = /(?:melee|weapon) *attacks? *([\\+\\-] *[0-9]+)/i;
var melee_damage_regex = /(?:melee|weapon) *damage *([\\+\\-] *[0-9]+)/i;
var tohit_match = tohit_regex.exec(v.drop_modifiers);
var damage_match = melee_damage_regex.exec(v.drop_modifiers);
if(tohit_match && tohit_match[1]) { update[`repeating_npcaction_${rowid}_attack_tohit`] = +update[`repeating_npcaction_${rowid}_attack_tohit`] + +tohit_match[1]; }
if(v.drop_damage && damage_match && damage_match[1]) { update[`repeating_npcaction_${rowid}_attack_damage`] += damage_match[1]; }
} else if(attack_type === "ranged") {
var tohit_regex = /(?:ranged|weapon) *attacks? *([\\+\\-] *[0-9]+)/i;
var ranged_damage_regex = /(?:ranged|weapon) *damage *([\\+\\-] *[0-9]+)/i;
var tohit_match = tohit_regex.exec(v.drop_modifiers);
var damage_match = ranged_damage_regex.exec(v.drop_modifiers);
if(tohit_match && tohit_match[1]) { update[`repeating_npcaction_${rowid}_attack_tohit`] = +update[`repeating_npcaction_${rowid}_attack_tohit`] + +tohit_match[1]; }
if(v.drop_damage && damage_match && damage_match[1]) { update[`repeating_npcaction_${rowid}_attack_damage`] += damage_match[1]; }
}
}
};
var versatile = v.drop_properties && new RegExp('\\bversatile\\b', 'i').test(v.drop_properties) ? 1 : undefined;
make_npc_attack_from_item(id, {versatile: versatile});
if(v.drop_properties && new RegExp('\\bthrown\\b', 'i').test(v.drop_properties)) {
make_npc_attack_from_item(generateRowID(), {thrown: true});
}
if(versatile && v.drop_alt_damage) {
make_npc_attack_from_item(generateRowID(), {versatile:2})
}
callbacks.push(function() { check_itemmodifiers(v.drop_modifiers); }, function() { update_npc_action("all"); });
}
}
};
if(category === "Powers") {
var lvl = v.drop_powerlevel && v.drop_powerlevel > 0 ? v.drop_powerlevel : "cantrip";
update["repeating_power-" + lvl + "_" + id + "_powerlevel"] = lvl;
if(v.drop_power_ability) {
update["repeating_power-" + lvl + "_" + id + "_power_ability"] = v.drop_power_ability;
} else {
update["repeating_power-" + lvl + "_" + id + "_power_ability"] = "power";
}
if(v.drop_name) {update["repeating_power-" + lvl + "_" + id + "_powername"] = v.drop_name};
if(v.drop_powerschool) {update["repeating_power-" + lvl + "_" + id + "_powerschool"] = v.drop_powerschool.toLowerCase()};
if(v.drop_powercastingtime) {update["repeating_power-" + lvl + "_" + id + "_powercastingtime"] = v.drop_powercastingtime};
if(v.drop_range) {update["repeating_power-" + lvl + "_" + id + "_powerrange"] = v.drop_range};
if(v.drop_powertarget) {update["repeating_power-" + lvl + "_" + id + "_powertarget"] = v.drop_powertarget};
if(v.drop_powercomp) {
if(v.drop_powercomp.toLowerCase().indexOf("v") === -1) {update["repeating_power-" + lvl + "_" + id + "_powercomp_v"] = "0"};
if(v.drop_powercomp.toLowerCase().indexOf("s") === -1) {update["repeating_power-" + lvl + "_" + id + "_powercomp_s"] = "0"};
if(v.drop_powercomp.toLowerCase().indexOf("m") === -1) {update["repeating_power-" + lvl + "_" + id + "_powercomp_m"] = "0"};
};
if(v.drop_powercomp_materials) {update["repeating_power-" + lvl + "_" + id + "_powercomp_materials"] = v.drop_powercomp_materials};
if(v.drop_powerconcentrationflag) {update["repeating_power-" + lvl + "_" + id + "_powerconcentration"] = "{{concentration=1}}"};
if(v.drop_powerduration) {update["repeating_power-" + lvl + "_" + id + "_powerduration"] = v.drop_powerduration};
if(v.drop_damage || v.drop_powerhealing) {
update["repeating_power-" + lvl + "_" + id + "_poweroutput"] = "ATTACK";
callbacks.push( function() {create_attack_from_power(lvl, id, v["character_id"]);} );
}
else if(v.drop_powerhldesc && v.drop_powerhldesc != "") {
var powerlevel = "?{Cast at what level?";
for(i = 0; i < 10-lvl; i++) {
powerlevel = powerlevel + "|Level " + (parseInt(i, 10) + parseInt(lvl, 10)) + "," + (parseInt(i, 10) + parseInt(lvl, 10));
}
powerlevel = powerlevel + "}";
update["repeating_power-" + lvl + "_" + id + "_rollcontent"] = "@{wtype}&{template:power} {{level=@{powerschool} " + powerlevel + "}} {{name=@{powername}}} {{castingtime=@{powercastingtime}}} {{range=@{powerrange}}} {{target=@{powertarget}}} {{duration=@{powerduration}}} {{description=@{powerdescription}}} {{athigherlevels=@{powerathigherlevels}}} {{innate=@{innate}}} @{powerconcentration} @{charname_output}";
};
if(v.drop_attack_type) {update["repeating_power-" + lvl + "_" + id + "_powerattack"] = v.drop_attack_type};
if(v.drop_damage) {update["repeating_power-" + lvl + "_" + id + "_powerdamage"] = v.drop_damage};
if(v.drop_damagetype) {update["repeating_power-" + lvl + "_" + id + "_powerdamagetype"] = v.drop_damagetype};
if(v.drop_damage2) {update["repeating_power-" + lvl + "_" + id + "_powerdamage2"] = v.drop_damage2};
if(v.drop_damagetype2) {update["repeating_power-" + lvl + "_" + id + "_powerdamagetype2"] = v.drop_damagetype2};
if(v.drop_powerhealing) {update["repeating_power-" + lvl + "_" + id + "_powerhealing"] = v.drop_powerhealing;};
if(v.drop_powerdmgmod) {update["repeating_power-" + lvl + "_" + id + "_powerdmgmod"] = v.drop_powerdmgmod};
if(v.drop_powersave) {update["repeating_power-" + lvl + "_" + id + "_powersave"] = v.drop_powersave};
if(v.drop_powersavesuccess) {update["repeating_power-" + lvl + "_" + id + "_powersavesuccess"] = v.drop_powersavesuccess};
if(v.drop_powerhldie) {update["repeating_power-" + lvl + "_" + id + "_powerhldie"] = v.drop_powerhldie};
if(v.drop_powerhldietype) {update["repeating_power-" + lvl + "_" + id + "_powerhldietype"] = v.drop_powerhldietype};
if(v.drop_powerhlbonus) {update["repeating_power-" + lvl + "_" + id + "_powerhlbonus"] = v.drop_powerhlbonus};
if(v.drop_powerhldesc) {update["repeating_power-" + lvl + "_" + id + "_powerathigherlevels"] = v.drop_powerhldesc};
if(v.drop_power_damage_progression && lvl == "cantrip") {update["repeating_power-" + lvl + "_" + id + "_power_damage_progression"] = v.drop_power_damage_progression};
if(v.drop_powerdesc) { update["repeating_power-" + lvl + "_" + id + "_powerdescription"] = v.drop_powerdesc};
update["repeating_power-" + lvl + "_" + id + "_options-flag"] = "0";
};
if(category === "Monsters") {
update["npc"] = "1";
update["npc_options-flag"] = "0";
if(v["drop_name"] && v["drop_name"] != "") {update["npc_name"] = v["drop_name"]};
update["npc_speed"] = v["drop_speed"] ? v["drop_speed"] : "";
update["strength_base"] = v["drop_str"] ? v["drop_str"] : "";
update["dexterity_base"] = v["drop_dex"] ? v["drop_dex"] : "";
update["constitution_base"] = v["drop_con"] ? v["drop_con"] : "";
update["intelligence_base"] = v["drop_int"] ? v["drop_int"] : "";
update["wisdom_base"] = v["drop_wis"] ? v["drop_wis"] : "";
update["charisma_base"] = v["drop_cha"] ? v["drop_cha"] : "";
callbacks.push( function() {update_attr("strength");} );
callbacks.push( function() {update_attr("dexterity");} );
callbacks.push( function() {update_attr("constitution");} );
callbacks.push( function() {update_attr("intelligence");} );
callbacks.push( function() {update_attr("wisdom");} );
callbacks.push( function() {update_attr("charisma");} );
update["npc_vulnerabilities"] = v["drop_vulnerabilities"] ? v["drop_vulnerabilities"] : "";
update["npc_resistances"] = v["drop_resistances"] ? v["drop_resistances"] : "";
update["npc_immunities"] = v["drop_immunities"] ? v["drop_immunities"] : "";
update["npc_condition_immunities"] = v["drop_condition_immunities"] ? v["drop_condition_immunities"] : "";
update["npc_languages"] = v["drop_languages"] ? v["drop_languages"] : "";
update["token_size"] = v["drop_token_size"] ? v["drop_token_size"] : "";
if(v["drop_challenge_rating"] && v["drop_challenge_rating"] != "") {
callbacks.push( function() {update_challenge();} );
update["npc_challenge"] = v["drop_challenge_rating"];
}
else {
update["npc_challenge"] = "";
}
var type = "";
if(v["drop_size"]) {type = v["drop_size"]};
if(v["drop_type"]) {
if(type.length > 0) {
type = type + " " + v["drop_type"].toLowerCase();
}
else {
type = v["drop_type"].toLowerCase();
}
};
if(v["drop_alignment"]) {
if(type.length > 0) {
type = type + ", " + v["drop_alignment"];
}
else {
type = v["drop_alignment"];
}
};
update["npc_type"] = type;
if(v["drop_hp"]) {
if(v["drop_hp"].indexOf("(") > -1) {
update["hp_max"] = v["drop_hp"].split(" (")[0];
update["npc_hpformula"] = v["drop_hp"].split(" (")[1].slice(0, -1);
}
else {
update["hp_max"] = v["drop_hp"]
update["npc_hpformula"] = ""
};
}
else {
update["hp_max"] = ""
update["npc_hpformula"] = ""
};
if(v["drop_ac"]) {
if(v["drop_ac"].indexOf("(") > -1) {
update["npc_ac"] = v["drop_ac"].split(" (")[0];
update["npc_actype"] = v["drop_ac"].split(" (")[1].slice(0, -1);
}
else {
update["npc_ac"] = v["drop_ac"];
update["npc_actype"] = "";
};
}
else {
update["npc_ac"] = "";
update["npc_actype"] = "";
};
if(v["drop_hp"]) {
if(v["drop_hp"].indexOf("(") > -1) {
update["hp_max"] = v["drop_hp"].split(" (")[0];
update["npc_hpformula"] = v["drop_hp"].split(" (")[1].slice(0, -1);
}
else {
update["hp_max"] = v["drop_hp"];
update["npc_hpformula"] = "";
}
}
else {
update["hp_max"] = "";
update["npc_hpformula"] = "";
};
var senses = v["drop_senses"] ? v["drop_senses"] : "";
if(v["drop_passive_perception"]) {
if(senses.length > 0) {
senses = senses + ", passive Perception " + v["drop_passive_perception"];
}
else {
senses = "passive Perception " + v["drop_passive_perception"];
}
}
update["npc_senses"] = senses;
update["npc_str_save_base"] = "";
update["npc_dex_save_base"] = "";
update["npc_con_save_base"] = "";
update["npc_int_save_base"] = "";
update["npc_wis_save_base"] = "";
update["npc_cha_save_base"] = "";
if(v["drop_saving_throws"] && v["drop_saving_throws"] != "") {
var savearray = v["drop_saving_throws"].split(", ");
_.each(savearray, function(save) {
kv = save.indexOf("-") > -1 ? save.split(" ") : save.split(" +");
update["npc_" + kv[0].toLowerCase() + "_save_base"] = parseInt(kv[1], 10);
});
callbacks.push( function() {update_npc_saves();} );
};
update["npc_acrobatics_base"] = "";
update["npc_animal_handling_base"] = "";
update["npc_technology_base"] = "";
update["npc_athletics_base"] = "";
update["npc_deception_base"] = "";
update["npc_lore_base"] = "";
update["npc_insight_base"] = "";
update["npc_intimidation_base"] = "";
update["npc_investigation_base"] = "";
update["npc_medicine_base"] = "";
update["npc_nature_base"] = "";
update["npc_perception_base"] = "";
update["npc_performance_base"] = "";
update["npc_persuasion_base"] = "";
update["npc_piloting_base"] = "";
update["npc_sleight_of_hand_base"] = "";
update["npc_stealth_base"] = "";
update["npc_survival_base"] = "";
if(v["drop_skills"] && v["drop_skills"] != "") {
skillarray = v["drop_skills"].split(", ");
_.each(skillarray, function(skill) {
kv = skill.indexOf("-") > -1 ? skill.split(" ") : skill.split(" +");
update["npc_" + kv[0].toLowerCase().replace(/ /g, '_') + "_base"] = parseInt(kv[1], 10);
});
callbacks.push( function() {update_npc_skills();} );
}
getSectionIDs("repeating_npcaction-l", function(idarray) {
_.each(idarray, function(currentID, i) {
removeRepeatingRow("repeating_npcaction-l_" + currentID);
});
});
getSectionIDs("repeating_npcreaction", function(idarray) {
_.each(idarray, function(currentID, i) {
removeRepeatingRow("repeating_npcreaction_" + currentID);
});
});
getSectionIDs("repeating_npcaction", function(idarray) {
_.each(idarray, function(currentID, i) {
removeRepeatingRow("repeating_npcaction_" + currentID);
});
});
getSectionIDs("repeating_npctrait", function(idarray) {
_.each(idarray, function(currentID, i) {
removeRepeatingRow("repeating_npctrait_" + currentID);
});
});
var contentarray = v["drop_content"];
if(v.drop_legendary_actions) {
var legendaryactionsarray = JSON.parse(v.drop_legendary_actions);
update["npc_legendary_actions"] = 1;
if(v.drop_legendary_actions_desc) {
update["npc_legendary_actions_desc"] = v.drop_legendary_actions_desc;
}
else if(v.npc_legendary_actions > 0){
update["npc_legendary_actions_desc"] = `The ${v.drop_name} can take ${v.npc_legendary_actions}, choosing from the options below. Only one legendary option can be used at a time and only at the end of another creature's turn. The ${v.drop_name} regains spent legendary actions at the start of its turn.`;
}
else {
update["npc_legendary_actions_desc"] = "";
}
}
else if(contentarray && contentarray.indexOf("Legendary Actions") > -1) {
if(contentarray.indexOf(/\n Legendary Actions\n/) > -1) {
temp = contentarray.split(/\n Legendary Actions\n/)
}
else {
temp = contentarray.split(/Legendary Actions\n/)
}
var legendaryactionsarray = temp[1];
contentarray = temp[0];
}
if(v.drop_reactions) {
var reactionsarray = JSON.parse(v.drop_reactions);
}
else if(contentarray && contentarray.indexOf("Reactions") > -1) {
if(contentarray.indexOf(/\n Reactions\n/) > -1) {
temp = contentarray.split(/\n Reactions\n/)
}
else {
temp = contentarray.split(/Reactions\n/)
}
var reactionsarray = temp[1];
contentarray = temp[0];
}
if(v.drop_actions) {
var actionsarray = JSON.parse(v.drop_actions);
}
else if(contentarray && contentarray.indexOf("Actions") > -1) {
if(contentarray.indexOf("Lair Actions") > -1) {
contentarray = contentarray.replace("Lair Actions","Lair Action");
}
if(contentarray.indexOf(/\n Actions\n/) > -1) {
temp = contentarray.split(/\n Actions\n/)
}
else {
temp = contentarray.split(/Actions\n/)
}
var actionsarray = temp[1];
contentarray = temp[0];
}
if(v.drop_traits) {
var traitsarray = JSON.parse(v.drop_traits);
}
else if(contentarray && contentarray.indexOf("Traits") > -1) {
if(contentarray.indexOf("Lair Traits") > -1) {
contentarray = contentarray.replace("Lair Traits","Lair Trait");
}
if(contentarray.indexOf(/\n Traits\n/) > -1) {
temp = contentarray.split(/\n Traits\n/)
}
else {
temp = contentarray.split(/Traits\n/)
}
var traitsarray = temp[1];
contentarray = temp[0];
}
if(traitsarray) {
if(v.drop_traits) {
var traitsobj = {};
traitsarray.forEach(function(val) { traitsobj[val.Name] = val.Desc; });
}
else {
traitsarray = traitsarray.split("**");
traitsarray.shift();
var traitsobj = {};
traitsarray.forEach(function(val, i) {
if (i % 2 === 1) return;
traitsobj[val] = traitsarray[i + 1];
});
}
_.each(traitsobj, function(desc, name) {
newrowid = generateRowID();
update["repeating_npctrait_" + newrowid + "_name"] = name + ".";
if(desc.substring(0,2) === ": " || encodeURI(desc.substring(0,2)) === ":%C2%A0") {
desc = desc.substring(2);
}
update["repeating_npctrait_" + newrowid + "_desc"] = desc.trim();
// POWERCASTING NPCS
if(name === "Powercasting") {
var lvl = parseInt(desc.substring(desc.indexOf("-level")-4, desc.indexOf("-level")-2).trim(), 10);
lvl = !isNaN(lvl) ? lvl : 1;
var ability = desc.match(/casting ability is (.*?) /);
ability = ability && ability.length > 1 ? ability[1] : false;
ability = ability ? "@{" + ability.toLowerCase() + "_mod}+" : "0*";
update["npcpowercastingflag"] = 1;
update["powercasting_ability"] = ability;
update["caster_level"] = lvl;
update["class"] = "Consular";
update["base_level"] = lvl;
update["level"] = lvl;
callbacks.push( function() {update_pb();} );
callbacks.push( function() {update_power_slots();} );
}
});
}
if(actionsarray) {
if(v.drop_actions) {
var actionsobj = {};
actionsarray.forEach(function(val) { actionsobj[val.Name] = val; });
_.each(actionsobj, function(data, name) {
newrowid = generateRowID();
update["repeating_npcaction_" + newrowid + "_npc_options-flag"] = "0";
update["repeating_npcaction_" + newrowid + "_name"] = name;
if(data["Desc"]) {
update["repeating_npcaction_" + newrowid + "_description"] = data["Desc"];
}
if(data["Type Attack"]) {
update["repeating_npcaction_" + newrowid + "_attack_flag"] = "on";
update["repeating_npcaction_" + newrowid + "_attack_display_flag"] = "{{attack=1}}";
update["repeating_npcaction_" + newrowid + "_attack_options"] = "{{attack=1}}";
if(data["Type"]) { update["repeating_npcaction_" + newrowid + "_attack_type"] = data["Type"]; }
if(data["Reach"]) { update["repeating_npcaction_" + newrowid + "_attack_range"] = data["Reach"]; }
if(data["Hit Bonus"]) { update["repeating_npcaction_" + newrowid + "_attack_tohit"] = data["Hit Bonus"]; }
if(data["Target"]) { update["repeating_npcaction_" + newrowid + "_attack_target"] = data["Target"]; }
if(data["Damage"]) { update["repeating_npcaction_" + newrowid + "_attack_damage"] = data["Damage"]; }
if(data["Damage Type"]) { update["repeating_npcaction_" + newrowid + "_attack_damagetype"] = data["Damage Type"]; }
if(data["Damage 2"] && data["Damage 2 Type"]) {
update["repeating_npcaction_" + newrowid + "_attack_damage2"] = data["Damage 2"];
update["repeating_npcaction_" + newrowid + "_attack_damagetype2"] = data["Damage 2 Type"];
}
}
})
}
else {
actionsarray = actionsarray.split("**");
actionsarray.shift();
var actionsobj = {};
actionsarray.forEach(function(val, i) {
if (i % 2 === 1) return;
actionsobj[val] = actionsarray[i + 1];
});
_.each(actionsobj, function(desc, name) {
newrowid = generateRowID();
update["repeating_npcaction_" + newrowid + "_npc_options-flag"] = "0";
update["repeating_npcaction_" + newrowid + "_name"] = name;
if(desc.substring(0,2) === ": " || encodeURI(desc.substring(0,2)) === ":%C2%A0") {
desc = desc.substring(2);
}
if(desc.indexOf(" Attack:") > -1) {
update["repeating_npcaction_" + newrowid + "_attack_flag"] = "on";
update["repeating_npcaction_" + newrowid + "_attack_display_flag"] = "{{attack=1}}";
update["repeating_npcaction_" + newrowid + "_attack_options"] = "{{attack=1}}";
if(desc.indexOf(" Weapon Attack:") > -1) {
attacktype = desc.split(" Weapon Attack:")[0];
}
else if(desc.indexOf(" Power Attack:") > -1) {
attacktype = desc.split(" Power Attack:")[0];
}
else {
console.log("FAILED TO IMPORT ATTACK - NO ATTACK TYPE FOUND (Weapon Attack/Power Attack)");
return;
}
update["repeating_npcaction_" + newrowid + "_attack_type"] = attacktype;
if(attacktype === "Melee") {
update["repeating_npcaction_" + newrowid + "_attack_range"] = (desc.match(/reach (.*?),/) || ["",""])[1];
}
else {
update["repeating_npcaction_" + newrowid + "_attack_range"] = (desc.match(/range (.*?),/) || ["",""])[1];
}
update["repeating_npcaction_" + newrowid + "_attack_tohit"] = (desc.match(/\+(.*) to hit/) || ["",""])[1];
update["repeating_npcaction_" + newrowid + "_attack_target"] = (desc.match(/\.,(?!.*\.,)(.*)\. Hit:/) || ["",""])[1];
if(desc.toLowerCase().indexOf("damage") > -1) {
update["repeating_npcaction_" + newrowid + "_attack_damage"] = (desc.match(/\(([^)]+)\)/) || ["",""])[1];
update["repeating_npcaction_" + newrowid + "_attack_damagetype"] = (desc.match(/\) (.*?) damage/) || ["",""])[1];
if((desc.match(/\(/g) || []).length > 1 && desc.match(/\((?!.*\()([^)]+)\)/)) {
var second_match = desc.match(/\((?!.*\()([^)]+)\)/);
if(second_match[1] && second_match[1].indexOf(" DC") === -1) {
update["repeating_npcaction_" + newrowid + "_attack_damage2"] = (desc.match(/\((?!.*\()([^)]+)\)/) || ["",""])[1];
update["repeating_npcaction_" + newrowid + "_attack_damagetype2"] = (desc.match(/\)(?!.*\)) (.*?) damage/) || ["",""])[1];
};
};
ctest1 = desc.split("damage.")[1];
ctest2 = desc.split("damage, ")[1];
if(ctest1 && ctest1.length > 0) {
update["repeating_npcaction_" + newrowid + "_description"] = ctest1.trim();
}
else if(ctest2 && ctest2.length > 0) {
update["repeating_npcaction_" + newrowid + "_description"] = ctest2.trim();
}
}
else {
update["repeating_npcaction_" + newrowid + "_description"] = desc.split("Hit:")[1].trim();
}
}
else {
update["repeating_npcaction_" + newrowid + "_description"] = desc;
}
});
}
callbacks.push( function() {update_npc_action("all");} );
}
if(reactionsarray) {
update["npcreactionsflag"] = 1;
if(v.drop_reactions) {
var reactionsobj = {};
reactionsarray.forEach(function(val) { reactionsobj[val.Name] = val.Desc; });
}
else {
reactionsarray = reactionsarray.split("**");
reactionsarray.shift();
var reactionsobj = {};
reactionsarray.forEach(function(val, i) {
if (i % 2 === 1) return;
reactionsobj[val] = reactionsarray[i + 1];
});
}
_.each(reactionsobj, function(desc, name) {
newrowid = generateRowID();
update["repeating_npcreaction_" + newrowid + "_name"] = name + ".";
if(desc.substring(0,2) === ": " || encodeURI(desc.substring(0,2)) === ":%C2%A0") {
desc = desc.substring(2);
}
update["repeating_npcreaction_" + newrowid + "_desc"] = desc.trim();
});
}
if(legendaryactionsarray) {
if(v.drop_legendary_actions) {
var actionsobj = {};
legendaryactionsarray.forEach(function(val) { actionsobj[val.Name] = val; });
_.each(actionsobj, function(data, name) {
newrowid = generateRowID();
update["repeating_npcaction-l_" + newrowid + "_npc_options-flag"] = "0";
update["repeating_npcaction-l_" + newrowid + "_name"] = name;
update["repeating_npcaction-l_" + newrowid + "_description"] = data["Desc"];
if(data["Type Attack"]) {
update["repeating_npcaction-l_" + newrowid + "_attack_flag"] = "on";
update["repeating_npcaction-l_" + newrowid + "_attack_display_flag"] = "{{attack=1}}";
update["repeating_npcaction-l_" + newrowid + "_attack_options"] = "{{attack=1}}";
update["repeating_npcaction-l_" + newrowid + "_attack_type"] = data["Type Attack"];
update["repeating_npcaction-l_" + newrowid + "_attack_range"] = data["Reach"];
update["repeating_npcaction-l_" + newrowid + "_attack_tohit"] = data["Hit Bonus"];
update["repeating_npcaction-l_" + newrowid + "_attack_target"] = data["Target"];
update["repeating_npcaction-l_" + newrowid + "_attack_damage"] = data["Damage"];
update["repeating_npcaction-l_" + newrowid + "_attack_damagetype"] = data["Damage Type"];
if(data["Damage 2"] && data["Damage 2 Type"]) {
update["repeating_npcaction-l_" + newrowid + "_attack_damage2"] = data["Damage 2"];
update["repeating_npcaction-l_" + newrowid + "_attack_damagetype2"] = data["Damage 2 Type"];
}
}
});
}
else {
var numlegendaryactions = (legendaryactionsarray.match(/\d+/) || [""])[0];
update["npc_legendary_actions"] = numlegendaryactions;
update["npc_legendary_actions_desc"] = `The ${v.drop_name} can take ${numlegendaryactions}, choosing from the options below. Only one legendary option can be used at a time and only at the end of another creature's turn. The ${v.drop_name} regains spent legendary actions at the start of its turn.`;
legendaryactionsarray = legendaryactionsarray.split("**");
legendaryactionsarray.shift();
var actionsobj = {};
legendaryactionsarray.forEach(function(val, i) {
if (i % 2 === 1) return;
actionsobj[val] = legendaryactionsarray[i + 1];
});
_.each(actionsobj, function(desc, name) {
newrowid = generateRowID();
update["repeating_npcaction-l_" + newrowid + "_npc_options-flag"] = "0";
update["repeating_npcaction-l_" + newrowid + "_name"] = name;
if(desc.substring(0,2) === ": " || encodeURI(desc.substring(0,2)) === ":%C2%A0") {
desc = desc.substring(2);
}
if(desc.indexOf(" Attack:") > -1) {
update["repeating_npcaction-l_" + newrowid + "_attack_flag"] = "on";
update["repeating_npcaction-l_" + newrowid + "_attack_display_flag"] = "{{attack=1}}";
update["repeating_npcaction-l_" + newrowid + "_attack_options"] = "{{attack=1}}";
if(desc.indexOf(" Weapon Attack:") > -1) {
attacktype = desc.split(" Weapon Attack:")[0];
}
else if(desc.indexOf(" Power Attack:") > -1) {
attacktype = desc.split(" Power Attack:")[0];
}
else {
console.log("FAILED TO IMPORT ATTACK - NO ATTACK TYPE FOUND (Weapon Attack/Power Attack)");
return;
}
update["repeating_npcaction-l_" + newrowid + "_attack_type"] = attacktype;
if(attacktype === "Melee") {
update["repeating_npcaction-l_" + newrowid + "_attack_range"] = (desc.match(/reach (.*?),/) || ["",""])[1];
}
else {
update["repeating_npcaction-l_" + newrowid + "_attack_range"] = (desc.match(/range (.*?),/) || ["",""])[1];
}
update["repeating_npcaction-l_" + newrowid + "_attack_tohit"] = (desc.match(/\+(.*) to hit/) || ["",""])[1];
update["repeating_npcaction-l_" + newrowid + "_attack_target"] = (desc.match(/\.,(?!.*\.,)(.*)\. Hit:/) || ["",""])[1];
update["repeating_npcaction-l_" + newrowid + "_attack_damage"] = (desc.match(/\(([^)]+)\)/) || ["",""])[1];
update["repeating_npcaction-l_" + newrowid + "_attack_damagetype"] = (desc.match(/\) (.*?) damage/) || ["",""])[1];
if((desc.match(/\(/g) || []).length > 1 && (!desc.match(/\((?!.*\()([^)]+)\)/).indexOf(" DC")[1] || desc.match(/\((?!.*\()([^)]+)\)/).indexOf(" DC")[1] === -1)) {
update["repeating_npcaction-l_" + newrowid + "_attack_damage2"] = (desc.match(/\((?!.*\()([^)]+)\)/) || ["",""])[1];
update["repeating_npcaction-l_" + newrowid + "_attack_damagetype2"] = (desc.match(/\)(?!.*\)) (.*?) damage/) || ["",""])[1];
}
}
else {
update["repeating_npcaction-l_" + newrowid + "_description"] = desc;
}
});
}
}
}
if(category === "Feats") {
update["tab"] = "core";
if(v.drop_name) {update["repeating_traits_" + id + "_name"] = v.drop_name};
if(v.drop_content) {update["repeating_traits_" + id + "_description"] = v.drop_content};
update["repeating_traits_" + id + "_source"] = "Feat";
update["repeating_traits_" + id + "_source_type"] = v.drop_properties ? v.drop_properties : "";
update["repeating_traits_" + id + "_options-flag"] = "0";
update["repeating_traits_" + id + "_display_flag"] = "on";
}
if(category === "Proficiencies") {
newrowid = generateRowID();
update["tab"] = "core";
if(v.drop_type.toLowerCase() === "language" || v.drop_type.toLowerCase() === "armor"
|| v.drop_type.toLowerCase() === "weapon" || v.drop_type.toLowerCase() === "other") {
getSectionIDs("proficiencies", function(ids) {
var idArray = [];
_.each(ids, function(sectionId) {
idArray.push("repeating_proficiencies_" + sectionId + "_name");
});
getAttrs(idArray, function(vals) {
var prof_names = [];
_.each(vals, function(value) {
prof_names.push(value.toLowerCase());
});
if( prof_names.indexOf(v.drop_name.toLowerCase()) == -1 ) {
update["repeating_proficiencies_" + newrowid + "_prof_type"] = v.drop_type.replace("custom", "").toUpperCase();
update["repeating_proficiencies_" + newrowid + "_name"] = v.drop_name;
update["repeating_proficiencies_" + newrowid + "_options-flag"] = 0;
};
callbacks.push( function() {cleanup_drop_fields();} );
setAttrs(update, {silent: true}, function() {callbacks.forEach(function(callback) {callback(); })} );
return;
});
});
}
else if(v.drop_type.toLowerCase() === "tool" || v.drop_type.toLowerCase() === "skillcustom") {
getSectionIDs("tool", function(ids) {
var idArray = [];
_.each(ids, function(sectionId) {
idArray.push("repeating_tool_" + sectionId + "_toolname");
});
getAttrs(idArray, function(vals) {
var prof_names = [];
_.each(vals, function(value) {
prof_names.push(value.toLowerCase());
});
if( prof_names.indexOf(v.drop_name.toLowerCase()) == -1 ) {
update["repeating_tool_" + newrowid + "_toolname"] = v.drop_name;
update["repeating_tool_" + newrowid + "_toolattr_base"] = "?{Attribute?|Strength,@{strength_mod}|Dexterity,@{dexterity_mod}|Constitution,@{constitution_mod}|Intelligence,@{intelligence_mod}|Wisdom,@{wisdom_mod}|Charisma,@{charisma_mod}}";
update["repeating_tool_" + newrowid + "_options-flag"] = 0;
if(v.drop_toolbonus_base) { update["repeating_tool_" + newrowid + "_toolbonus_base"] = v.drop_toolbonus_base };
callbacks.push( function() {update_tool(newrowid);} );
} else {
var match =_.keys(vals)[_.values(vals).indexOf(v.drop_name)];
if(v.drop_toolbonus_base) { update[match.replace("_toolname", "_toolbonus_base")] = v.drop_toolbonus_base };
callbacks.push( function() {update_tool(match.split("_")[2]);} );
};
callbacks.push( function() {cleanup_drop_fields();} );
setAttrs(update, {silent: true}, function() {callbacks.forEach(function(callback) {callback(); })} );
return;
});
});
}
if(v.drop_type.toLowerCase() === "skill") {
var skill_string = v.drop_name.toLowerCase().replace(/ /g, '_');
update[skill_string + "_prof"] = "(@{pb}*@{" + skill_string + "_type})";
};
}
var modStringToAttrib = function(modString) {
var finalAttrib = "";
if (modString == "FIN") {
if (parseInt(v.strength_base) > parseInt(v.dexterity_base)) {
finalAttrib = "@{strength_mod}";
} else {
finalAttrib = "@{dexterity_mod}";
}
} else {
switch(modString) {
case "STR":
finalAttrib = "@{strength_mod}";
break;
case "DEX":
finalAttrib = "@{dexterity_mod}";
break;
case "CON":
finalAttrib = "@{constitution_mod}";
break;
case "WIS":
finalAttrib = "@{wisdom_mod}";
break;
case "INT":
finalAttrib = "@{intelligence_mod}";
break;
case "CHA":
finalAttrib = "@{charisma_mod}";
break;
}
}
return finalAttrib;
};
if(category === "Classes") {
update["tab"] = "core";
if(v.drop_name && v.drop_name !== "") { update["class"] = v.drop_name; }
if(v.drop_hit_die && v.drop_hit_die !== "") {
update["base_level"] = v.base_level ? v.base_level : "1";
update["hit_dice_max"] = update["base_level"] + v.drop_hit_die;
update["hit_dice"] = update["base_level"];
}
if(v.drop_traits) {
var traits = JSON.parse(v.drop_traits);
_.each(traits, function(value) {
var id = generateRowID();
update["repeating_traits_" + id + "_name"] = value["Name"];
update["repeating_traits_" + id + "_description"] = value["Desc"];
update["repeating_traits_" + id + "_source"] = "Class";
update["repeating_traits_" + id + "_source_type"] = v.drop_name ? v.drop_name : "";
update["repeating_traits_" + id + "_options-flag"] = "0";
update["repeating_traits_" + id + "_display_flag"] = "on";
});
}
if(v.drop_class_saving_throws) {
var saves = JSON.parse(v.drop_class_saving_throws);
_.each(saves, function(value) {
update[value.toLowerCase() + "_save_prof"] = "(@{pb})";
});
}
if(v.drop_powercasting_ability && v.drop_powercasting_ability !== "") {
update["powercasting_ability"] = "+@{" + v.drop_powercasting_ability.toLowerCase() + "}";
}
if(v.drop_global_damage) {
var dmgmod = JSON.parse(v.drop_global_damage);
var id = generateRowID();
update["repeating_damagemod_" + id + "_global_damage_rollstring"] = `${dmgmod["Uses"]}[${dmgmod["Name"]}]`;
update["repeating_damagemod_" + id + "_global_damage_active_flag"] = "1";
update["repeating_damagemod_" + id + "_options-flag"] = "0";
update["repeating_damagemod_" + id + "_global_damage_type"] = dmgmod["Name"];
update["global_damage_mod_flag"] = "1";
}
if(v.drop_actions) {
var actionsobj = {};
JSON.parse(v.drop_actions).forEach(function(val) { actionsobj[val.Name] = val; });
_.each(actionsobj, function(data, name) {
newrowid = generateRowID();
update["repeating_attack_" + newrowid + "_options-flag"] = "0";
update["repeating_attack_" + newrowid + "_atkname"] = name;
if(data["Desc"]) {
update["repeating_attack_" + newrowid + "_atk_desc"] = data["Desc"];
}
if(data["Type Attack"]) {
update["repeating_attack_" + newrowid + "_attack_flag"] = "on";
update["repeating_attack_" + newrowid + "_atkflag"] = "{{attack=1}}";
update["repeating_attack_" + newrowid + "_attack_options"] = "{{attack=1}}";
if(data["Type"]) {
update["repeating_attack_" + newrowid + "_attack_type"] = data["Type"];
}
if(data["Reach"]) { update["repeating_attack_" + newrowid + "_atkrange"] = data["Reach"]; }
if(data["Damage"]) { update["repeating_attack_" + newrowid + "_dmgbase"] = data["Damage"]; }
if(data["Damage Type"]) { update["repeating_attack_" + newrowid + "_dmgtype"] = data["Damage Type"]; }
if (data["Modifier"]) {
update["repeating_attack_" + newrowid + "_dmgattr"] = modStringToAttrib(data["Modifier"]);
update["repeating_attack_" + newrowid + "_atkattr_base"] = modStringToAttrib(data["Modifier"]);
}
if(data["Damage 2"] && data["Damage 2 Type"]) {
update["repeating_attack_" + newrowid + "_dmg2flag"] = "{{damage=1}} {{dmg2flag=1}}";
update["repeating_attack_" + newrowid + "_atk_dmg2base"] = data["Damage 2"];
update["repeating_attack_" + newrowid + "_attack_damagetype2"] = data["Damage 2 Type"];
if (data["Modifier 2"]) {
update["repeating_attack_" + newrowid + "_dmg2attr"] = modStringToAttrib(data["Modifier 2"]);
}
}
}
});
}
if(v.drop_resources) {
var resources = JSON.parse(v.drop_resources);
var resource_count = 0;
var numUses = function(uses_string) {
var attribs = ["strength", "dexterity", "constitution", "wisdom", "intelligence", "charisma"];
uses_string = uses_string.toLowerCase();
_.each(attribs, function(attrib) {
var attribMod = Math.floor((parseInt(v[attrib + "_base"]) - 10) / 2);
if (attribMod < 0) attribMod = 0;
uses_string = uses_string.replace(attrib, attribMod);
});
var terms = uses_string.split("+");
var total = 0;
_.each(terms, function(term) {
total += parseInt(term);
});
return total;
};
_.each(resources, function(value) {
if (resource_count == 0) {
update["class_resource_name"] = value["Name"];
var uses = numUses(value["Uses"]);
update["class_resource"] = uses;
update["class_resource_max"] = uses;
resource_count++;
} else if (resource_count == 1) {
update["other_resource_name"] = value["Name"];
var uses = numUses(value["Uses"]);
update["other_resource"] = uses;
update["other_resource_max"] = uses;
resource_count++;
}
});
}
callbacks.push(update_class);
}
if(category === "Subclasses") {
if(v.drop_name && v.drop_name !== "") { update["subclass"] = v.drop_name; }
if(v.drop_hp_per_level && v.drop_hp_per_level !== "") {
var id = generateRowID();
update["repeating_hpmod_" + id + "_mod"] = v.drop_hp_per_level;
update["repeating_hpmod_" + id + "_source"] = v.drop_name ? v.drop_name : "Subclass";
}
if(v.drop_traits) {
var traits = JSON.parse(v.drop_traits);
_.each(traits, function(value) {
var id = generateRowID();
update["repeating_traits_" + id + "_name"] = value["Name"];
update["repeating_traits_" + id + "_description"] = value["Desc"];
update["repeating_traits_" + id + "_source"] = "Class";
update["repeating_traits_" + id + "_source_type"] = v.drop_name ? v.drop_name : "";
update["repeating_traits_" + id + "_options-flag"] = "0";
update["repeating_traits_" + id + "_display_flag"] = "on";
});
}
callbacks.push(update_class);
}
if(category === "Races" || category === "Subraces") {
update["tab"] = "core";
if(category === "Races") {
update["race"] = v.drop_name;
if (v.drop_name == "Halfling") {
update["precognition_flag"] = "1";
}
}
else {
update["subrace"] = v.drop_name;
};
if(v.drop_speed) {update["speed"] = v.drop_speed};
if(v.drop_size) {update["size"] = v.drop_size};
if(v.drop_traits) {
var trait_array = JSON.parse(v.drop_traits);
if(trait_array && trait_array.length) {
_.each(trait_array, function(trait) {
newrowid = generateRowID();
update["repeating_traits_" + newrowid + "_name"] = trait["Name"];
update["repeating_traits_" + newrowid + "_description"] = trait["Desc"];
update["repeating_traits_" + newrowid + "_source"] = "Racial";
update["repeating_traits_" + newrowid + "_source_type"] = v.drop_name;
update["repeating_traits_" + newrowid + "_options-flag"] = 0;
update["repeating_traits_" + newrowid + "_display_flag"] = "on";
});
};
};
if(v.drop_actions) {
var actionsobj = {};
JSON.parse(v.drop_actions).forEach(function(val) { actionsobj[val.Name] = val; });
_.each(actionsobj, function(data, name) {
newrowid = generateRowID();
update["repeating_attack_" + newrowid + "_options-flag"] = "0";
update["repeating_attack_" + newrowid + "_atkname"] = name;
if(data["Desc"]) {
update["repeating_attack_" + newrowid + "_atk_desc"] = data["Desc"];
}
if(data["Type Attack"]) {
if (data["Type"] == "Power") {
update["repeating_attack_" + newrowid + "_atkflag"] = "0";
update["repeating_attack_" + newrowid + "_attack_options"] = "";
update["repeating_attack_" + newrowid + "_saveflag"] = "{{save=1}} {{saveattr=@{saveattr}}} {{savedesc=@{saveeffect}}} {{savedc=[[[[@{savedc}]][SAVE]]]}}"
} else {
update["repeating_attack_" + newrowid + "_attack_flag"] = "on";
update["repeating_attack_" + newrowid + "_atkflag"] = "{{attack=1}}";
update["repeating_attack_" + newrowid + "_attack_options"] = "{{attack=1}}";
}
if(data["Reach"]) { update["repeating_attack_" + newrowid + "_atkrange"] = data["Reach"]; }
if(data["Damage"]) { update["repeating_attack_" + newrowid + "_dmgbase"] = data["Damage"]; }
if(data["Damage Type"]) { update["repeating_attack_" + newrowid + "_dmgtype"] = data["Damage Type"]; }
if (data["Modifier"]) {
update["repeating_attack_" + newrowid + "_dmgattr"] = modStringToAttrib(data["Modifier"]);
update["repeating_attack_" + newrowid + "_atkattr_base"] = modStringToAttrib(data["Modifier"]);
} else {
update["repeating_attack_" + newrowid + "_dmgattr"] = "0";
}
if (data["Save"]) { update["repeating_attack_" + newrowid + "_saveattr"] = data["Save"] }
if (data["Save DC"]) { update["repeating_attack_" + newrowid + "_savedc"] = "(" + modStringToAttrib(data["Save DC"]) + "+8+@{pb})" }
if (data["Save Effect"]) { update["repeating_attack_" + newrowid + "_saveeffect"] = data["Save Effect"] }
if(data["Damage 2"] && data["Damage 2 Type"]) {
update["repeating_attack_" + newrowid + "_dmg2flag"] = "{{damage=1}} {{dmg2flag=1}}";
update["repeating_attack_" + newrowid + "_atk_dmg2base"] = data["Damage 2"];
update["repeating_attack_" + newrowid + "_attack_damagetype2"] = data["Damage 2 Type"];
if (data["Modifier 2"]) {
update["repeating_attack_" + newrowid + "_dmg2attr"] = modStringToAttrib(data["Modifier 2"]);
} else {
update["repeating_attack_" + newrowid + "_dmgattr"] = "0";
}
}
}
});
}
callbacks.push(update_race_display);
}
if(category === "Backgrounds") {
update["tab"] = "core";
if(v.drop_name && v.drop_name !== "") { update["background"] = v.drop_name; }
if(v.drop_feature_name) {
var id = generateRowID();
update["repeating_traits_" + id + "_name"] = v.drop_feature_name;
update["repeating_traits_" + id + "_description"] = v.drop_feature_description || "";
update["repeating_traits_" + id + "_source"] = "Background";
update["repeating_traits_" + id + "_source_type"] = v.drop_name ? v.drop_name : "";
update["repeating_traits_" + id + "_options-flag"] = "0";
update["repeating_traits_" + id + "_display_flag"] = "on";
}
if(v.drop_traits) {
var traits = JSON.parse(v.drop_traits);
_.each(traits, function(value) {
var id = generateRowID();
update["repeating_traits_" + id + "_name"] = value["Name"];
update["repeating_traits_" + id + "_description"] = value["Desc"];
update["repeating_traits_" + id + "_source"] = "Background";
update["repeating_traits_" + id + "_source_type"] = v.drop_name ? v.drop_name : "";
update["repeating_traits_" + id + "_options-flag"] = "0";
update["repeating_traits_" + id + "_display_flag"] = "on";
});
}
}
//This one is just a catch-all for proficiencies, as they are formated the same regardless of the category
if(["Races", "Subraces", "Classes", "Subclasses", "Backgrounds"].indexOf(category) != -1) {
if(v.drop_skill_proficiency) {
var skill_array = JSON.parse(v.drop_skill_proficiency);
if(skill_array["Proficiencies"] && skill_array["Proficiencies"].length) {
_.each(skill_array["Proficiencies"], function(prof) {
var skill_string = prof.toLowerCase().replace(/ /g, '_');
update[skill_string + "_prof"] = "(@{pb}*@{" + skill_string + "_type})";
});
};
};
if(v.drop_language_prof || v.drop_weapon_prof || v.drop_armor_prof || v.drop_tool_prof) {
getSectionIDs("proficiencies", function(ids) {
var idArray = [];
_.each(ids, function(sectionId) {
idArray.push("repeating_proficiencies_" + sectionId + "_name");
});
getSectionIDs("tool", function(ids) {
_.each(ids, function(sectionId) {
idArray.push("repeating_tool_" + sectionId + "_toolname");
});
getAttrs(idArray, function(vals) {
var prof_names = [];
_.each(vals, function(value) {
prof_names.push(value.toLowerCase());
});
if(v.drop_language_prof) {
var lang_array = JSON.parse(v.drop_language_prof);
if(lang_array["Proficiencies"] && lang_array["Proficiencies"].length) {
_.each(lang_array["Proficiencies"], function(prof) {
if( prof_names.indexOf(prof.toLowerCase()) == -1 ) {
newrowid = generateRowID();
update["repeating_proficiencies_" + newrowid + "_prof_type"] = "LANGUAGE";
update["repeating_proficiencies_" + newrowid + "_name"] = prof;
update["repeating_proficiencies_" + newrowid + "_options-flag"] = 0;
}
});
}
};
if(v.drop_weapon_prof) {
var weap_array = JSON.parse(v.drop_weapon_prof);
if(weap_array["Proficiencies"] && weap_array["Proficiencies"].length) {
_.each(weap_array["Proficiencies"], function(prof) {
if( prof_names.indexOf(prof.toLowerCase()) == -1 ) {
newrowid = generateRowID();
update["repeating_proficiencies_" + newrowid + "_prof_type"] = "WEAPON";
update["repeating_proficiencies_" + newrowid + "_name"] = prof;
update["repeating_proficiencies_" + newrowid + "_options-flag"] = 0;
}
});
}
};
if(v.drop_armor_prof) {
var armor_array = JSON.parse(v.drop_armor_prof);
if(armor_array["Proficiencies"] && armor_array["Proficiencies"].length) {
_.each(armor_array["Proficiencies"], function(prof) {
if( prof_names.indexOf(prof.toLowerCase()) == -1 ) {
newrowid = generateRowID();
update["repeating_proficiencies_" + newrowid + "_prof_type"] = "ARMOR";
update["repeating_proficiencies_" + newrowid + "_name"] = prof;
update["repeating_proficiencies_" + newrowid + "_options-flag"] = 0;
}
});
}
};
if(v.drop_tool_prof) {
var tool_array = JSON.parse(v.drop_tool_prof);
if(tool_array["Proficiencies"] && tool_array["Proficiencies"].length) {
_.each(tool_array["Proficiencies"], function(prof) {
if( prof_names.indexOf(prof.toLowerCase()) == -1 ) {
newrowid = generateRowID();
update["repeating_tool_" + newrowid + "_toolname"] = prof;
update["repeating_tool_" + newrowid + "_toolattr_base"] = "?{Attribute?|Strength,@{strength_mod}|Dexterity,@{dexterity_mod}|Constitution,@{constitution_mod}|Intelligence,@{intelligence_mod}|Wisdom,@{wisdom_mod}|Charisma,@{charisma_mod}}";
update["repeating_tool_" + newrowid + "_options-flag"] = 0;
callbacks.push( function() {update_tool(newrowid);} );
}
});
}
};
callbacks.push( function() {cleanup_drop_fields();} );
setAttrs(update, {silent: true}, function() {callbacks.forEach(function(callback) {callback(); })} );
return;
});
});
});
}
}
callbacks.push( function() {cleanup_drop_fields();} );
setAttrs(update, {silent: true}, function() {callbacks.forEach(function(callback) {callback(); })} );
});
};
var cleanup_drop_fields = function() {
var update = {};
update["drop_category"] = "";
update["drop_name"] = "";
update["drop_weight"] = "";
update["drop_properties"] = "";
update["drop_modifiers"] = "";
update["drop_content"] = "";
update["drop_itemtype"] = "";
update["drop_damage"] = "";
update["drop_damagetype"] = "";
update["drop_range"] = "";
update["drop_ac"] = "";
update["drop_actions"] = "";
update["drop_legendary_actions"] = "";
update["drop_legendary_actions_desc"] = "";
update["drop_reactions"] = "";
update["drop_traits"] = "";
update["drop_attack_type"] = "";
update["drop_damage2"] = "";
update["drop_damagetype2"] = "";
update["drop_alt_damage"] = "";
update["drop_alt_damagetype"] = "";
update["drop_alt_damage2"] = "";
update["drop_alt_damagetype2"] = "";
update["drop_powerschool"] = "";
update["drop_powercastingtime"] = "";
update["drop_powertarget"] = "";
update["drop_powercomp"] = "";
update["drop_powercomp_materials"] = "";
update["drop_powerconcentrationflag"] = "";
update["drop_powerduration"] = "";
update["drop_powerhealing"] = "";
update["drop_powerdmgmod"] = "";
update["drop_powersave"] = "";
update["drop_powersavesuccess"] = "";
update["drop_powerhldie"] = "";
update["drop_powerhldietype"] = "";
update["drop_powerhlbonus"] = "";
update["drop_powerlevel"] = "";
update["drop_power_damage_progression"] = "";
update["drop_speed"] = "";
update["drop_str"] = "";
update["drop_dex"] = "";
update["drop_con"] = "";
update["drop_int"] = "";
update["drop_wis"] = "";
update["drop_cha"] = "";
update["drop_vulnerabilities"] = "";
update["drop_resistances"] = "";
update["drop_immunities"] = "";
update["drop_condition_immunities"] = "";
update["drop_languages"] = "";
update["drop_challenge_rating"] = "";
update["drop_size"] = "";
update["drop_type"] = "";
update["drop_alignment"] = "";
update["drop_hp"] = "";
update["drop_saving_throws"] = "";
update["drop_senses"] = "";
update["drop_passive_perception"] = "";
update["drop_skills"] = "";
update["drop_token_size"] = "";
update["drop_armor_prof"] = "";
update["drop_hit_die"] = "";
update["drop_weapon_prof"] = "";
update["drop_powercasting_ability"] = "";
update["drop_class_saving_throws"] = "";
update["drop_language_prof"] = "";
update["drop_tool_prof"] = "";
update["drop_hp_per_level"] = "";
update["drop_class_powers"] = "";
update["drop_global_damage"] = "";
update["drop_feature_name"] = "";
update["drop_feature_description"] = "";
update["drop_power_ability"] = "";
update["drop_toolbonus_base"] = "";
update["drop_itemcount"] = "";
update["drop_skill_proficiency"] = "";
update["drop_parent"] = "";
update["drop_resources"] = "";
update["drop_powerhldesc"] = "";
update["drop_powerdesc"] = "";
setAttrs(update, {silent: true});
};
var check_itemmodifiers = function(modifiers, previousValue) {
var mods = modifiers.toLowerCase().split(",");
if(previousValue) {
prevmods = previousValue.toLowerCase().split(",");
mods = _.union(mods, prevmods);
};
_.each(mods, function(mod) {
if(mod.indexOf("ac:") > -1 || mod.indexOf("ac +") > -1 || mod.indexOf("ac -") > -1) {update_ac();};
if(mod.indexOf("power") > -1) {update_power_info();};
if(mod.indexOf("saving throws") > -1) {update_all_saves();};
if(mod.indexOf("strength save") > -1) {update_save("strength");} else if(mod.indexOf("strength") > -1) {update_attr("strength");};
if(mod.indexOf("dexterity save") > -1) {update_save("dexterity");} else if(mod.indexOf("dexterity") > -1) {update_attr("dexterity");};
if(mod.indexOf("constitution save") > -1) {update_save("constitution");} else if(mod.indexOf("constitution") > -1) {update_attr("constitution");};
if(mod.indexOf("intelligence save") > -1) {update_save("intelligence");} else if(mod.indexOf("intelligence") > -1) {update_attr("intelligence");};
if(mod.indexOf("wisdom save") > -1) {update_save("wisdom");} else if(mod.indexOf("wisdom") > -1) {update_attr("wisdom");};
if(mod.indexOf("charisma save") > -1) {update_save("charisma");} else if(mod.indexOf("charisma") > -1) {update_attr("charisma");};
if(mod.indexOf("ability checks") > -1) {update_all_ability_checks();};
if(mod.indexOf("acrobatics") > -1) {update_skills(["acrobatics"]);};
if(mod.indexOf("animal handling") > -1) {update_skills(["animal_handling"]);};
if(mod.indexOf("technology") > -1) {update_skills(["technology"]);};
if(mod.indexOf("athletics") > -1) {update_skills(["athletics"]);};
if(mod.indexOf("deception") > -1) {update_skills(["deception"]);};
if(mod.indexOf("lore") > -1) {update_skills(["lore"]);};
if(mod.indexOf("insight") > -1) {update_skills(["insight"]);};
if(mod.indexOf("intimidation") > -1) {update_skills(["intimidation"]);};
if(mod.indexOf("investigation") > -1) {update_skills(["investigation"]);};
if(mod.indexOf("medicine") > -1) {update_skills(["medicine"]);};
if(mod.indexOf("nature") > -1) {update_skills(["nature"]);};
if(mod.indexOf("perception") > -1) {update_skills(["perception"]);};
if(mod.indexOf("performance") > -1) {update_skills(["performance"]);};
if(mod.indexOf("persuasion") > -1) {update_skills(["persuasion"]);};
if(mod.indexOf("piloting") > -1) {update_skills(["piloting"]);};
if(mod.indexOf("sleight of hand") > -1) {update_skills(["sleight_of_hand"]);};
if(mod.indexOf("stealth") > -1) {update_skills(["stealth"]);};
if(mod.indexOf("survival") > -1) {update_skills(["survival"]);};
if(mod.indexOf("ship boost") > -1) {update_skills(["ship_boost"]);};
if(mod.indexOf("ship ram") > -1) {update_skills(["ship_ram"]);};
if(mod.indexOf("ship hide") > -1) {update_skills(["ship_hide"]);};
if(mod.indexOf("ship maneuvering") > -1) {update_skills(["ship_maneuvering"]);};
if(mod.indexOf("ship patch") > -1) {update_skills(["ship_patch"]);};
if(mod.indexOf("ship regulation") > -1) {update_skills(["ship_regulation"]);};
if(mod.indexOf("ship astrogation") > -1) {update_skills(["ship_astrogation"]);};
if(mod.indexOf("ship data") > -1) {update_skills(["ship_data"]);};
if(mod.indexOf("ship probe") > -1) {update_skills(["ship_probe"]);};
if(mod.indexOf("ship scan") > -1) {update_skills(["ship_scan"]);};
if(mod.indexOf("ship impress") > -1) {update_skills(["ship_impress"]);};
if(mod.indexOf("ship interfere") > -1) {update_skills(["ship_interfere"]);};
if(mod.indexOf("ship menace") > -1) {update_skills(["ship_menace"]);};
if(mod.indexOf("ship swindle") > -1) {update_skills(["ship_swindle"]);};
});
};
var create_attack_from_item = function(itemid, options) {
var inventory = "repeating_inventory_";
var isHidden = false;
if(options && options.hidden) {
inventory = "repeating_hiddeninventory_";
isHidden = true;
}
var update = {};
var newrowid = generateRowID();
update[inventory + itemid + "_itemattackid"] = newrowid;
if(options && options.versatile) {
var newrowid2 = generateRowID();
update[inventory + itemid + "_itemattackid"] += "," + newrowid2;
setAttrs(update, {}, function() {
update_attack_from_item(itemid, newrowid, {newattack: true, versatile: "primary", hidden: isHidden});
update_attack_from_item(itemid, newrowid2, {newattack: true, versatile: "secondary", hidden: isHidden});
});
}
else {
setAttrs(update, {}, update_attack_from_item(itemid, newrowid, {newattack: true, hidden: isHidden}));
}
};
var update_attack_from_item = function(itemid, attackid, options) {
var inventory = "repeating_inventory_";
var isHidden = false;
if(options && options.hidden) {
inventory = "repeating_hiddeninventory_";
isHidden = true;
}
getAttrs([inventory + itemid + "_itemname",inventory + itemid + "_itemproperties",inventory + itemid + "_itemmodifiers", "strength", "dexterity"], function(v) {
var update = {}; var itemtype; var damage; var damagetype; var damage2; var damagetype2; var attackmod; var damagemod; var range;
var alt = {};
if(options && options.newattack) {
update["repeating_attack_" + attackid + "_options-flag"] = "0";
update["repeating_attack_" + attackid + "_itemid"] = itemid;
}
if(v[inventory + itemid + "_itemmodifiers"] && v[inventory + itemid + "_itemmodifiers"] != "") {
var mods = v[inventory + itemid + "_itemmodifiers"].split(",");
_.each(mods, function(mod) {
if(mod.indexOf("Item Type:") > -1) {itemtype = mod.split(":")[1].trim()}
else if(mod.indexOf("Alternate Secondary Damage Type:") > -1) {alt.damagetype2 = mod.split(":")[1].trim();}
else if(mod.indexOf("Alternate Secondary Damage:") > -1) {alt.damage2 = mod.split(":")[1].trim();}
else if(mod.indexOf("Alternate Damage Type:") > -1) {alt.damagetype = mod.split(":")[1].trim();}
else if(mod.indexOf("Alternate Damage:") > -1) {alt.damage = mod.split(":")[1].trim();}
else if(mod.indexOf("Secondary Damage Type:") > -1) {damagetype2 = mod.split(":")[1].trim()}
else if(mod.indexOf("Secondary Damage:") > -1) {damage2 = mod.split(":")[1].trim()}
else if(mod.indexOf("Damage Type:") > -1) {damagetype = mod.split(":")[1].trim()}
else if(mod.indexOf("Damage:") > -1) {damage = mod.split(":")[1].trim()}
else if(mod.indexOf("Range:") > -1) {range = mod.split(":")[1].trim()}
else if(mod.indexOf(" Attacks ") > -1) {attackmod = mod.split(" Attacks ")[1].trim()}
else if(mod.indexOf(" Damage ") > -1) {damagemod = mod.split(" Damage ")[1].trim()}
});
}
if(v[inventory + itemid + "_itemname"] && v[inventory + itemid + "_itemname"] != "") {
update["repeating_attack_" + attackid + "_atkname"] = v[inventory + itemid + "_itemname"];
if(options && options.versatile === "primary") {
update["repeating_attack_" + attackid + "_atkname"] += " (One-Handed)";
} else if(options && options.versatile === "secondary") {
update["repeating_attack_" + attackid + "_atkname"] += " (Two-Handed)";
}
}
if(options && options.versatile === "secondary") {
if(alt.damage) {
update["repeating_attack_" + attackid + "_dmgbase"] = alt.damage;
}
if(alt.damagetype) {
update["repeating_attack_" + attackid + "_dmgtype"] = alt.damagetype;
}
if(alt.damage2) {
update["repeating_attack_" + attackid + "_dmg2base"] = alt.damage2;
update["repeating_attack_" + attackid + "_dmg2attr"] = 0;
update["repeating_attack_" + attackid + "_dmg2flag"] = "{{damage=1}} {{dmg2flag=1}}";
}
if(alt.damagetype2) {
update["repeating_attack_" + attackid + "_dmg2type"] = alt.damagetype2;
}
update["repeating_attack_" + attackid + "_versatile_alt"] = "1";
}
else {
if(damage) {
update["repeating_attack_" + attackid + "_dmgbase"] = damage;
}
if(damagetype) {
update["repeating_attack_" + attackid + "_dmgtype"] = damagetype;
}
if(damage2) {
update["repeating_attack_" + attackid + "_dmg2base"] = damage2;
update["repeating_attack_" + attackid + "_dmg2attr"] = 0;
update["repeating_attack_" + attackid + "_dmg2flag"] = "{{damage=1}} {{dmg2flag=1}}";
}
if(damagetype2) {
update["repeating_attack_" + attackid + "_dmg2type"] = damagetype2;
}
}
if(range) {
update["repeating_attack_" + attackid + "_atkrange"] = range;
}
var finesse = v[inventory + itemid + "_itemproperties"] && /finesse/i.test(v[inventory + itemid + "_itemproperties"]);
if( (itemtype && itemtype.indexOf("Ranged") > -1) || (finesse && +v.dexterity > +v.strength)) {
update["repeating_attack_" + attackid + "_atkattr_base"] = "@{dexterity_mod}";
update["repeating_attack_" + attackid + "_dmgattr"] = "@{dexterity_mod}";
}
else {
update["repeating_attack_" + attackid + "_atkattr_base"] = "@{strength_mod}";
update["repeating_attack_" + attackid + "_dmgattr"] = "@{strength_mod}";
}
if(attackmod && damagemod && attackmod == damagemod) {
update["repeating_attack_" + attackid + "_atkpower"] = parseInt(attackmod, 10);
update["repeating_attack_" + attackid + "_atkmod"] = "";
update["repeating_attack_" + attackid + "_dmgmod"] = "";
}
else {
if(attackmod) {
update["repeating_attack_" + attackid + "_atkmod"] = parseInt(attackmod, 10);
}
if(damagemod) {
update["repeating_attack_" + attackid + "_dmgmod"] = parseInt(damagemod, 10);
}
update["repeating_attack_" + attackid + "_atkpower"] = "";
}
var callback = function() {update_attacks(attackid, "item")};
setAttrs(update, {silent: true}, callback);
});
};
var create_resource_from_item = function(itemid, options) {
var update = {};
var newrowid = generateRowID();
var inventory = "repeating_inventory_";
var isHidden = false;
if(options && options.hidden){
inventory = "repeating_hiddeninventory_";
isHidden = true;
}
getAttrs(["other_resource_name"], function(x) {
if(!x.other_resource_name || x.other_resource_name == "") {
update[inventory + itemid + "_itemresourceid"] = "other_resource";
setAttrs(update, {}, update_resource_from_item(itemid, "other_resource", true, {hidden: isHidden}));
}
else {
getSectionIDs("repeating_resource", function(idarray) {
if(idarray.length == 0) {
update[inventory + itemid + "_itemresourceid"] = newrowid + "_resource_left";
setAttrs(update, {}, update_resource_from_item(itemid, newrowid + "_resource_left", true, {hidden: isHidden}));
}
else {
var resource_names = [];
_.each(idarray, function(currentID, i) {
resource_names.push("repeating_resource_" + currentID + "_resource_left_name");
resource_names.push("repeating_resource_" + currentID + "_resource_right_name");
});
getAttrs(resource_names, function(y) {
var existing = false;
_.each(idarray, function(currentID, i) {
if((!y["repeating_resource_" + currentID + "_resource_left_name"] || y["repeating_resource_" + currentID + "_resource_left_name"] === "") && existing == false) {
update[inventory + itemid + "_itemresourceid"] = currentID + "_resource_left";
setAttrs(update, {}, update_resource_from_item(itemid, currentID + "_resource_left", true, {hidden:isHidden}));
existing = true;
}
else if((!y["repeating_resource_" + currentID + "_resource_right_name"] || y["repeating_resource_" + currentID + "_resource_right_name"] === "") && existing == false) {
update[inventory + itemid + "_itemresourceid"] = currentID + "_resource_right";
setAttrs(update, {}, update_resource_from_item(itemid, currentID + "_resource_right", true, {hidden:isHidden}));
existing = true;
};
});
if(!existing) {
update[inventory + itemid + "_itemresourceid"] = newrowid + "_resource_left";
setAttrs(update, {}, update_resource_from_item(itemid, newrowid + "_resource_left", true, {hidden:isHidden}));
}
});
};
});
};
});
};
var update_resource_from_item = function(itemid, resourceid, newresource, options) {
var inventory = "repeating_inventory_";
if(options && options.hidden) {
inventory = "repeating_hiddeninventory_";
}
getAttrs([inventory + itemid + "_itemname",inventory + itemid + "_itemcount"], function(v) {
var update = {}; var id;
if(resourceid && resourceid == "other_resource") {
id = resourceid;
}
else {
id = "repeating_resource_" + resourceid;
};
if(newresource) {
update[id + "_itemid"] = itemid;
} ;
if(!v[inventory + itemid + "_itemname"]) {
update[inventory + itemid + "_useasresource"] = 0;
update[inventory + itemid + "_itemresourceid"] = "";
remove_resource(resourceid);
};
if(v[inventory + itemid + "_itemname"] && v[inventory + itemid + "_itemname"] != "") {
update[id + "_name"] = v[inventory + itemid + "_itemname"];
};
if(v[inventory + itemid + "_itemcount"] && v[inventory + itemid + "_itemcount"] != "") {
update[id] = v[inventory + itemid + "_itemcount"];
};
setAttrs(update, {silent: true});
});
};
var update_item_from_resource = function(resourceid, itemid) {
var update = {};
var inventory = "repeating_inventory_";
getAttrs(["repeating_hiddeninventory_" + itemid + "_itemname"], function(x) {
if(x["repeating_hiddeninventory_" + itemid + "_itemname"]) {
inventory = "repeating_hiddeninventory_";
}
});
getAttrs([resourceid, resourceid + "_name"], function(v) {
update[inventory + itemid + "_itemcount"] = v[resourceid];
update[inventory + itemid + "_itemname"] = v[resourceid + "_name"];
setAttrs(update, {silent: true}, function() {update_weight()});
});
};
var create_attack_from_power = function(lvl, powerid, character_id) {
var update = {};
var newrowid = generateRowID();
update["repeating_power-" + lvl + "_" + powerid + "_powerattackid"] = newrowid;
update["repeating_power-" + lvl + "_" + powerid + "_rollcontent"] = "%{" + character_id + "|repeating_attack_" + newrowid + "_attack}";
setAttrs(update, {}, update_attack_from_power(lvl, powerid, newrowid, true));
}
var update_attack_from_power = function(lvl, powerid, attackid, newattack) {
getAttrs(["repeating_power-" + lvl + "_" + powerid + "_powername",
"repeating_power-" + lvl + "_" + powerid + "_powerrange",
"repeating_power-" + lvl + "_" + powerid + "_powertarget",
"repeating_power-" + lvl + "_" + powerid + "_powerattack",
"repeating_power-" + lvl + "_" + powerid + "_powerdamage",
"repeating_power-" + lvl + "_" + powerid + "_powerdamage2",
"repeating_power-" + lvl + "_" + powerid + "_powerdamagetype",
"repeating_power-" + lvl + "_" + powerid + "_powerdamagetype2",
"repeating_power-" + lvl + "_" + powerid + "_powerhealing",
"repeating_power-" + lvl + "_" + powerid + "_powerdmgmod",
"repeating_power-" + lvl + "_" + powerid + "_powersave",
"repeating_power-" + lvl + "_" + powerid + "_powersavesuccess",
"repeating_power-" + lvl + "_" + powerid + "_powerhldie",
"repeating_power-" + lvl + "_" + powerid + "_powerhldietype",
"repeating_power-" + lvl + "_" + powerid + "_powerhlbonus",
"repeating_power-" + lvl + "_" + powerid + "_powerlevel",
"repeating_power-" + lvl + "_" + powerid + "_includedesc",
"repeating_power-" + lvl + "_" + powerid + "_powerdescription",
"repeating_power-" + lvl + "_" + powerid + "_powerathigherlevels",
"repeating_power-" + lvl + "_" + powerid + "_power_damage_progression",
"repeating_power-" + lvl + "_" + powerid + "_innate",
"repeating_power-" + lvl + "_" + powerid + "_power_ability",
"powercasting_ability",
"character_id"], function(v) {
var update = {};
var description = "";
var powerAbility = v["repeating_power-" + lvl + "_" + powerid + "_power_ability"] != "power" ? v["repeating_power-" + lvl + "_" + powerid + "_power_ability"].slice(0, -1) : "power";
update["repeating_attack_" + attackid + "_atkattr_base"] = powerAbility;
if(newattack) {
update["repeating_attack_" + attackid + "_options-flag"] = "0";
update["repeating_attack_" + attackid + "_powerid"] = powerid;
update["repeating_attack_" + attackid + "_powerlevel"] = lvl;
} else {
update["repeating_power-" + lvl + "_" + powerid + "_rollcontent"] = "%{" + v["character_id"] + "|repeating_attack_" + attackid + "_attack}";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_power_ability"] == "power") {
update["repeating_attack_" + attackid + "_savedc"] = "(@{power_save_dc})";
} else if (v["repeating_power-" + lvl + "_" + powerid + "_power_ability"]) {
update["repeating_attack_" + attackid + "_savedc"] = "(" + powerAbility + "+8+@{power_dc_mod}+@{pb})";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powername"] && v["repeating_power-" + lvl + "_" + powerid + "_powername"] != "") {
update["repeating_attack_" + attackid + "_atkname"] = v["repeating_power-" + lvl + "_" + powerid + "_powername"];
}
if(!v["repeating_power-" + lvl + "_" + powerid + "_powerattack"] || v["repeating_power-" + lvl + "_" + powerid + "_powerattack"] === "None") {
update["repeating_attack_" + attackid + "_atkflag"] = "0";
}
else {
update["repeating_attack_" + attackid + "_atkflag"] = "{{attack=1}}";
description = description + v["repeating_power-" + lvl + "_" + powerid + "_powerattack"] + " Power Attack. ";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powerdamage"] && v["repeating_power-" + lvl + "_" + powerid + "_powerdamage"] != "") {
update["repeating_attack_" + attackid + "_dmgflag"] = "{{damage=1}} {{dmg1flag=1}}";
if(v["repeating_power-" + lvl + "_" + powerid + "_power_damage_progression"] && v["repeating_power-" + lvl + "_" + powerid + "_power_damage_progression"] === "Cantrip Dice") {
update["repeating_attack_" + attackid + "_dmgbase"] = "[[round((@{level} + 1) / 6 + 0.5)]]" + v["repeating_power-" + lvl + "_" + powerid + "_powerdamage"].substring(1);
}
else {
update["repeating_attack_" + attackid + "_dmgbase"] = v["repeating_power-" + lvl + "_" + powerid + "_powerdamage"];
}
}
else {
update["repeating_attack_" + attackid + "_dmgflag"] = "0"
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powerdmgmod"] && v["repeating_power-" + lvl + "_" + powerid + "_powerdmgmod"] === "Yes") {
update["repeating_attack_" + attackid + "_dmgattr"] = powerAbility;
}
else {
update["repeating_attack_" + attackid + "_dmgattr"] = "0";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powerdamagetype"]) {
update["repeating_attack_" + attackid + "_dmgtype"] = v["repeating_power-" + lvl + "_" + powerid + "_powerdamagetype"];
}
else {
update["repeating_attack_" + attackid + "_dmgtype"] = "";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powerdamage2"]) {
update["repeating_attack_" + attackid + "_dmg2base"] = v["repeating_power-" + lvl + "_" + powerid + "_powerdamage2"];
update["repeating_attack_" + attackid + "_dmg2attr"] = 0;
update["repeating_attack_" + attackid + "_dmg2flag"] = "{{damage=1}} {{dmg2flag=1}}";
}
else {
update["repeating_attack_" + attackid + "_dmg2base"] = "";
update["repeating_attack_" + attackid + "_dmg2attr"] = 0;
update["repeating_attack_" + attackid + "_dmg2flag"] = "0";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powerdamagetype2"]) {
update["repeating_attack_" + attackid + "_dmg2type"] = v["repeating_power-" + lvl + "_" + powerid + "_powerdamagetype2"];
}
else {
update["repeating_attack_" + attackid + "_dmg2type"] = "";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powerrange"]) {
update["repeating_attack_" + attackid + "_atkrange"] = v["repeating_power-" + lvl + "_" + powerid + "_powerrange"];
}
else {
update["repeating_attack_" + attackid + "_atkrange"] = "";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powerrange"]) {
update["repeating_attack_" + attackid + "_atkrange"] = v["repeating_power-" + lvl + "_" + powerid + "_powerrange"];
}
else {
update["repeating_attack_" + attackid + "_atkrange"] = "";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powersave"]) {
update["repeating_attack_" + attackid + "_saveflag"] = "{{save=1}} {{saveattr=@{saveattr}}} {{savedesc=@{saveeffect}}} {{savedc=[[[[@{savedc}]][SAVE]]]}}";
update["repeating_attack_" + attackid + "_saveattr"] = v["repeating_power-" + lvl + "_" + powerid + "_powersave"];
}
else {
update["repeating_attack_" + attackid + "_saveflag"] = "0";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powersavesuccess"]) {
update["repeating_attack_" + attackid + "_saveeffect"] = v["repeating_power-" + lvl + "_" + powerid + "_powersavesuccess"];
}
else {
update["repeating_attack_" + attackid + "_saveeffect"] = "";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powerhldie"] && v["repeating_power-" + lvl + "_" + powerid + "_powerhldie"] != "" && v["repeating_power-" + lvl + "_" + powerid + "_powerhldietype"] && v["repeating_power-" + lvl + "_" + powerid + "_powerhldietype"] != "") {
var bonus = "";
var powerlevel = v["repeating_power-" + lvl + "_" + powerid + "_powerlevel"];
var query = "?{Cast at what level?";
for(i = 0; i < 10-powerlevel; i++) {
query = query + "|Level " + (parseInt(i, 10) + parseInt(powerlevel, 10)) + "," + i;
}
query = query + "}";
if(v["repeating_power-" + lvl + "_" + powerid + "_powerhlbonus"] && v["repeating_power-" + lvl + "_" + powerid + "_powerhlbonus"] != "") {
bonus = "+(" + v["repeating_power-" + lvl + "_" + powerid + "_powerhlbonus"] + "*" + query + ")";
}
update["repeating_attack_" + attackid + "_hldmg"] = "{{hldmg=[[(" + v["repeating_power-" + lvl + "_" + powerid + "_powerhldie"] + "*" + query + ")" + v["repeating_power-" + lvl + "_" + powerid + "_powerhldietype"] + bonus + "]]}}";
}
else {
update["repeating_attack_" + attackid + "_hldmg"] = "";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powerhealing"] && v["repeating_power-" + lvl + "_" + powerid + "_powerhealing"] != "") {
if(!v["repeating_power-" + lvl + "_" + powerid + "_powerdamage"] || v["repeating_power-" + lvl + "_" + powerid + "_powerdamage"] === "") {
update["repeating_attack_" + attackid + "_dmgbase"] = v["repeating_power-" + lvl + "_" + powerid + "_powerhealing"];
update["repeating_attack_" + attackid + "_dmgflag"] = "{{damage=1}} {{dmg1flag=1}}";
update["repeating_attack_" + attackid + "_dmgtype"] = "Healing";
}
else if(!v["repeating_power-" + lvl + "_" + powerid + "_powerdamage2"] || v["repeating_power-" + lvl + "_" + powerid + "_powerdamage2"] === "") {
update["repeating_attack_" + attackid + "_dmg2base"] = v["repeating_power-" + lvl + "_" + powerid + "_powerhealing"];
update["repeating_attack_" + attackid + "_dmg2flag"] = "{{damage=1}} {{dmg2flag=1}}";
update["repeating_attack_" + attackid + "_dmg2type"] = "Healing";
}
}
if(v["repeating_power-" + lvl + "_" + powerid + "_innate"]) {
update["repeating_attack_" + attackid + "_power_innate"] = v["repeating_power-" + lvl + "_" + powerid + "_innate"];
}
else {
update["repeating_attack_" + attackid + "_power_innate"] = "";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_powertarget"]) {
description = description + v["repeating_power-" + lvl + "_" + powerid + "_powertarget"] + ". ";
}
if(v["repeating_power-" + lvl + "_" + powerid + "_includedesc"] && v["repeating_power-" + lvl + "_" + powerid + "_includedesc"] === "on") {
description = v["repeating_power-" + lvl + "_" + powerid + "_powerdescription"];
if(v["repeating_power-" + lvl + "_" + powerid + "_powerathigherlevels"] && v["repeating_power-" + lvl + "_" + powerid + "_powerathigherlevels"] != "") {
description = description + "\n\nAt Higher Levels: " + v["repeating_power-" + lvl + "_" + powerid + "_powerathigherlevels"];
}
}
else if(v["repeating_power-" + lvl + "_" + powerid + "_includedesc"] && v["repeating_power-" + lvl + "_" + powerid + "_includedesc"] === "off") {
description = "";
};
update["repeating_attack_" + attackid + "_atk_desc"] = description;
var callback = function() {update_attacks(attackid, "power")};
setAttrs(update, {silent: true}, callback);
});
};
var update_attacks = function(update_id, source) {
console.log("DOING UPDATE_ATTACKS: " + update_id);
if(update_id.substring(0,1) === "-" && update_id.length === 20) {
do_update_attack([update_id], source);
}
else if(["strength","dexterity","constitution","intelligence","wisdom","charisma","powers","all"].indexOf(update_id) > -1) {
getSectionIDs("repeating_attack", function(idarray) {
if(update_id === "all") {
do_update_attack(idarray);
}
else if(update_id === "powers") {
var attack_attribs = [];
_.each(idarray, function(id) {
attack_attribs.push("repeating_attack_" + id + "_powerid", "repeating_attack_" + id + "_powerlevel");
});
getAttrs(attack_attribs, function(v) {
var filteredIds = _.filter(idarray, function(id) {
return v["repeating_attack_" + id + "_powerid"] && v["repeating_attack_" + id + "_powerid"] != "";
});
var power_attacks = {};
_.each(filteredIds, function(attack_id) {
power_attacks[attack_id] = {
power_id: v["repeating_attack_" + attack_id + "_powerid"],
power_lvl: v["repeating_attack_" + attack_id + "_powerlevel"]
};
});
_.each(power_attacks, function(data, attack_id) { update_attack_from_power(data.power_lvl, data.power_id, attack_id); });
});
}
else {
var attack_attribs = ["powercasting_ability"];
_.each(idarray, function(id) {
attack_attribs.push("repeating_attack_" + id + "_atkattr_base");
attack_attribs.push("repeating_attack_" + id + "_dmgattr");
attack_attribs.push("repeating_attack_" + id + "_dmg2attr");
attack_attribs.push("repeating_attack_" + id + "_savedc");
});
getAttrs(attack_attribs, function(v) {
var attr_attack_ids = [];
_.each(idarray, function(id) {
if((v["repeating_attack_" + id + "_atkattr_base"] && v["repeating_attack_" + id + "_atkattr_base"].indexOf(update_id) > -1) || (v["repeating_attack_" + id + "_dmgattr"] && v["repeating_attack_" + id + "_dmgattr"].indexOf(update_id) > -1) || (v["repeating_attack_" + id + "_dmg2attr"] && v["repeating_attack_" + id + "_dmg2attr"].indexOf(update_id) > -1) || (v["repeating_attack_" + id + "_savedc"] && v["repeating_attack_" + id + "_savedc"].indexOf(update_id) > -1) || (v["repeating_attack_" + id + "_savedc"] && v["repeating_attack_" + id + "_savedc"] === "(@{power_save_dc})" && v["powercasting_ability"] && v["powercasting_ability"].indexOf(update_id) > -1)) {
attr_attack_ids.push(id);
}
});
if(attr_attack_ids.length > 0) {
do_update_attack(attr_attack_ids);
}
});
};
});
};
};
var do_update_attack = function(attack_array, source) {
var attack_attribs = ["level","d20","pb","pb_type","pbd_safe","dtype","globalpowermod","strength_mod","dexterity_mod","constitution_mod","intelligence_mod","wisdom_mod","charisma_mod","powercasting_ability","power_save_dc","power_attack_mod", "power_dc_mod", "global_damage_mod_roll", "global_damage_mod_crit"];
_.each(attack_array, function(attackid) {
attack_attribs.push("repeating_attack_" + attackid + "_atkflag");
attack_attribs.push("repeating_attack_" + attackid + "_atkname");
attack_attribs.push("repeating_attack_" + attackid + "_atkattr_base");
attack_attribs.push("repeating_attack_" + attackid + "_atkmod");
attack_attribs.push("repeating_attack_" + attackid + "_atkprofflag");
attack_attribs.push("repeating_attack_" + attackid + "_atkpower");
attack_attribs.push("repeating_attack_" + attackid + "_dmgflag");
attack_attribs.push("repeating_attack_" + attackid + "_dmgbase");
attack_attribs.push("repeating_attack_" + attackid + "_dmgattr");
attack_attribs.push("repeating_attack_" + attackid + "_dmgmod");
attack_attribs.push("repeating_attack_" + attackid + "_dmgtype");
attack_attribs.push("repeating_attack_" + attackid + "_dmg2flag");
attack_attribs.push("repeating_attack_" + attackid + "_dmg2base");
attack_attribs.push("repeating_attack_" + attackid + "_dmg2attr");
attack_attribs.push("repeating_attack_" + attackid + "_dmg2mod");
attack_attribs.push("repeating_attack_" + attackid + "_dmg2type");
attack_attribs.push("repeating_attack_" + attackid + "_dmgcustcrit");
attack_attribs.push("repeating_attack_" + attackid + "_dmg2custcrit");
attack_attribs.push("repeating_attack_" + attackid + "_saveflag");
attack_attribs.push("repeating_attack_" + attackid + "_savedc");
attack_attribs.push("repeating_attack_" + attackid + "_saveeffect");
attack_attribs.push("repeating_attack_" + attackid + "_saveflat");
attack_attribs.push("repeating_attack_" + attackid + "_hldmg");
attack_attribs.push("repeating_attack_" + attackid + "_powerid");
attack_attribs.push("repeating_attack_" + attackid + "_powerlevel");
attack_attribs.push("repeating_attack_" + attackid + "_atkrange");
attack_attribs.push("repeating_attack_" + attackid + "_itemid");
attack_attribs.push("repeating_attack_" + attackid + "_ammo");
attack_attribs.push("repeating_attack_" + attackid + "_global_damage_mod_field");
attack_attribs.push("npc");
});
getAttrs(attack_attribs, function(v) {
var isShipAttack = v.npc === "2";
_.each(attack_array, function(attackid) {
console.log("UPDATING ATTACK: " + attackid);
var callbacks = [];
var update = {};
var hbonus = "";
var hdmg1 = "";
var hdmg2 = "";
var dmg = "";
var dmg2 = "";
var rollbase = "";
var powerattack = false;
var powerattackmod = 0;
var powersavemod = 0;
var atkattr_abrev = "";
var dmgattr_abrev = "";
var dmg2attr_abrev = "";
var pbd_safe = v["pbd_safe"] ? v["pbd_safe"] : "";
var global_crit = v["repeating_attack_" + attackid + "_global_damage_mod_field"] && v["repeating_attack_" + attackid + "_global_damage_mod_field"] != "" ? "@{global_damage_mod_crit}" : "";
var hldmgcrit = v["repeating_attack_" + attackid + "_hldmg"] && v["repeating_attack_" + attackid + "_hldmg"] != "" ? v["repeating_attack_" + attackid + "_hldmg"].slice(0, 7) + "crit" + v["repeating_attack_" + attackid + "_hldmg"].slice(7) : "";
if(v["repeating_attack_" + attackid + "_powerid"] && v["repeating_attack_" + attackid + "_powerid"] != "") {
powerattack = true;
powerattackmod = v["power_attack_mod"] && !isNaN(parseInt(v["power_attack_mod"],10)) ? parseInt(v["power_attack_mod"],10) : 0;
powersavemod = v["power_dc_mod"] && !isNaN(parseInt(v["power_dc_mod"],10)) ? parseInt(v["power_dc_mod"],10) : 0;
};
if(!v["repeating_attack_" + attackid + "_atkattr_base"] || v["repeating_attack_" + attackid + "_atkattr_base"] === "0") {
atkattr_base = 0
} else if(v["repeating_attack_" + attackid + "_atkattr_base"] && v["repeating_attack_" + attackid + "_atkattr_base"] === "power") {
atkattr_base = parseInt(v[v["powercasting_ability"].substring(2, v["powercasting_ability"].length - 2)], 10);
atkattr_abrev = v["powercasting_ability"].substring(2, 5).toUpperCase();
} else {
atkattr_base = parseInt(v[v["repeating_attack_" + attackid + "_atkattr_base"].substring(2, v["repeating_attack_" + attackid + "_atkattr_base"].length - 1)], 10);
atkattr_abrev = v["repeating_attack_" + attackid + "_atkattr_base"].substring(2, 5).toUpperCase();
};
if(!v["repeating_attack_" + attackid + "_dmgattr"] || v["repeating_attack_" + attackid + "_dmgattr"] === "0") {
dmgattr = 0;
} else if(v["repeating_attack_" + attackid + "_dmgattr"] && v["repeating_attack_" + attackid + "_dmgattr"] === "power") {
dmgattr = parseInt(v[v["powercasting_ability"].substring(2, v["powercasting_ability"].length - 2)], 10);
dmgattr_abrev = v["powercasting_ability"].substring(2, 5).toUpperCase();
} else {
dmgattr = parseInt(v[v["repeating_attack_" + attackid + "_dmgattr"].substring(2, v["repeating_attack_" + attackid + "_dmgattr"].length - 1)], 10);
dmgattr_abrev =v["repeating_attack_" + attackid + "_dmgattr"].substring(2, 5).toUpperCase();
};
if(!v["repeating_attack_" + attackid + "_dmg2attr"] || v["repeating_attack_" + attackid + "_dmg2attr"] === "0") {
dmg2attr = 0;
} else if(v["repeating_attack_" + attackid + "_dmg2attr"] && v["repeating_attack_" + attackid + "_dmg2attr"] === "power") {
dmg2attr = parseInt(v[v["powercasting_ability"].substring(2, v["powercasting_ability"].length - 2)], 10);
dmg2attr_abrev = v["powercasting_ability"].substring(2, 5).toUpperCase();
} else {
dmg2attr = parseInt(v[v["repeating_attack_" + attackid + "_dmg2attr"].substring(2, v["repeating_attack_" + attackid + "_dmg2attr"].length - 1)], 10);
dmg2attr_abrev =v["repeating_attack_" + attackid + "_dmg2attr"].substring(2, 5).toUpperCase();
};
var dmgbase = v["repeating_attack_" + attackid + "_dmgbase"] && v["repeating_attack_" + attackid + "_dmgbase"] != "" ? v["repeating_attack_" + attackid + "_dmgbase"] : 0;
var dmg2base = v["repeating_attack_" + attackid + "_dmg2base"] && v["repeating_attack_" + attackid + "_dmg2base"] != "" ? v["repeating_attack_" + attackid + "_dmg2base"] : 0;
var dmgmod = v["repeating_attack_" + attackid + "_dmgmod"] && isNaN(parseInt(v["repeating_attack_" + attackid + "_dmgmod"],10)) === false ? parseInt(v["repeating_attack_" + attackid + "_dmgmod"],10) : 0;
var dmg2mod = v["repeating_attack_" + attackid + "_dmg2mod"] && isNaN(parseInt(v["repeating_attack_" + attackid + "_dmg2mod"],10)) === false ? parseInt(v["repeating_attack_" + attackid + "_dmg2mod"],10) : 0;
var dmgtype = v["repeating_attack_" + attackid + "_dmgtype"] ? v["repeating_attack_" + attackid + "_dmgtype"] + " " : "";
var dmg2type = v["repeating_attack_" + attackid + "_dmg2type"] ? v["repeating_attack_" + attackid + "_dmg2type"] + " " : "";
var pb = v["repeating_attack_" + attackid + "_atkprofflag"] && v["repeating_attack_" + attackid + "_atkprofflag"] != 0 && v.pb ? v.pb : 0;
/* if(isShipAttack) {
pb = 0;
} */
var atkmod = v["repeating_attack_" + attackid + "_atkmod"] && v["repeating_attack_" + attackid + "_atkmod"] != "" ? parseInt(v["repeating_attack_" + attackid + "_atkmod"],10) : 0;
var atkmag = v["repeating_attack_" + attackid + "_atkpower"] && v["repeating_attack_" + attackid + "_atkpower"] != "" ? parseInt(v["repeating_attack_" + attackid + "_atkpower"],10) : 0;
var dmgmag = isNaN(atkmag) === false && atkmag != 0 && ((v["repeating_attack_" + attackid + "_dmgflag"] && v["repeating_attack_" + attackid + "_dmgflag"] != 0) || (v["repeating_attack_" + attackid + "_dmg2flag"] && v["repeating_attack_" + attackid + "_dmg2flag"] != 0)) ? "+ " + atkmag + " Power Bonus" : "";
if(v["repeating_attack_" + attackid + "_atkflag"] && v["repeating_attack_" + attackid + "_atkflag"] != 0) {
bonus_mod = atkattr_base + atkmod + atkmag + powerattackmod;
if(v["pb_type"] && v["pb_type"] === "die") {
plus_minus = bonus_mod > -1 ? "+" : "";
bonus = bonus_mod + "+" + pb;
}
else {
bonus_mod = bonus_mod + parseInt(pb, 10);
plus_minus = bonus_mod > -1 ? "+" : "";
bonus = plus_minus + bonus_mod;
};
}
else if(v["repeating_attack_" + attackid + "_saveflag"] && v["repeating_attack_" + attackid + "_saveflag"] != 0) {
if(!v["repeating_attack_" + attackid + "_savedc"] || (v["repeating_attack_" + attackid + "_savedc"] && v["repeating_attack_" + attackid + "_savedc"] === "(@{power_save_dc})")) {
var tempdc = v["power_save_dc"];
}
else if(v["repeating_attack_" + attackid + "_savedc"] && v["repeating_attack_" + attackid + "_savedc"] === "(@{saveflat})") {
var tempdc = isNaN(parseInt(v["repeating_attack_" + attackid + "_saveflat"])) === false ? parseInt(v["repeating_attack_" + attackid + "_saveflat"]) : "0";
}
else {
var savedcattr = v["repeating_attack_" + attackid + "_savedc"].replace(/^[^{]*{/,"").replace(/\_.*$/,"");
var safe_pb = v["pb_type"] && v["pb_type"] === "die" ? parseInt(pb.substring(1), 10) / 2 : parseInt(pb,10);
var safe_attr = v[savedcattr + "_mod"] ? parseInt(v[savedcattr + "_mod"],10) : 0;
var tempdc = 8 + safe_attr + safe_pb + powersavemod;
};
bonus = "DC" + tempdc;
}
else {
bonus = "-";
}
if(v["repeating_attack_" + attackid + "_dmgflag"] && v["repeating_attack_" + attackid + "_dmgflag"] != 0) {
if(powerattack === true && dmgbase.indexOf("[[round((@{level} + 1) / 6 + 0.5)]]") > -1) {
// SPECIAL CANTRIP DAMAGE
dmgdiestring = Math.round(((parseInt(v["level"], 10) + 1) / 6) + 0.5).toString()
dmg = dmgdiestring + dmgbase.substring(dmgbase.lastIndexOf("d"));
if(dmgattr + dmgmod != 0) {
dmg = dmg + "+" + (dmgattr + dmgmod);
}
dmg = dmg + " " + dmgtype;
}
else {
if(dmgbase === 0 && (dmgattr + dmgmod === 0)){
dmg = 0;
}
if(dmgbase != 0) {
dmg = dmgbase;
}
if(dmgbase != 0 && (dmgattr + dmgmod != 0)){
dmg = dmgattr + dmgmod > 0 ? dmg + "+" : dmg;
}
if(dmgattr + dmgmod != 0) {
dmg = dmg + (dmgattr + dmgmod);
}
dmg = dmg + " " + dmgtype;
}
}
else {
dmg = "";
};
if(v["repeating_attack_" + attackid + "_dmg2flag"] && v["repeating_attack_" + attackid + "_dmg2flag"] != 0) {
if(dmg2base === 0 && (dmg2attr + dmg2mod === 0)){
dmg2 = 0;
}
if(dmg2base != 0) {
dmg2 = dmg2base;
}
if(dmg2base != 0 && (dmg2attr + dmg2mod != 0)){
dmg2 = dmg2attr + dmg2mod > 0 ? dmg2 + "+" : dmg2;
}
if(dmg2attr + dmg2mod != 0) {
dmg2 = dmg2 + (dmg2attr + dmg2mod);
}
dmg2 = dmg2 + " " + dmg2type;
}
else {
dmg2 = "";
};
dmgspacer = v["repeating_attack_" + attackid + "_dmgflag"] && v["repeating_attack_" + attackid + "_dmgflag"] != 0 && v["repeating_attack_" + attackid + "_dmg2flag"] && v["repeating_attack_" + attackid + "_dmg2flag"] != 0 ? "+ " : "";
crit1 = v["repeating_attack_" + attackid + "_dmgcustcrit"] && v["repeating_attack_" + attackid + "_dmgcustcrit"] != "" ? v["repeating_attack_" + attackid + "_dmgcustcrit"] : dmgbase;
crit2 = v["repeating_attack_" + attackid + "_dmg2custcrit"] && v["repeating_attack_" + attackid + "_dmg2custcrit"] != "" ? v["repeating_attack_" + attackid + "_dmg2custcrit"] : dmg2base;
r1 = v["repeating_attack_" + attackid + "_atkflag"] && v["repeating_attack_" + attackid + "_atkflag"] != 0 ? "@{d20}" : "0d20";
r2 = v["repeating_attack_" + attackid + "_atkflag"] && v["repeating_attack_" + attackid + "_atkflag"] != 0 ? "@{rtype}" : "{{r2=[[0d20";
if(v["repeating_attack_" + attackid + "_atkflag"] && v["repeating_attack_" + attackid + "_atkflag"] != 0) {
if(powerattackmod != 0) {hbonus = " + " + powerattackmod + "[POWERATK]" + hbonus};
if(atkmag != 0) {hbonus = " + " + atkmag + "[POWER]" + hbonus};
if(pb != 0) {hbonus = " + " + pb + pbd_safe + "[PROF]" + hbonus};
if(atkmod != 0) {hbonus = " + " + atkmod + "[MOD]" + hbonus};
if(atkattr_base != 0) {hbonus = " + " + atkattr_base + "[" + atkattr_abrev + "]" + hbonus};
}
else {
hbonus = "";
}
if(v["repeating_attack_" + attackid + "_dmgflag"] && v["repeating_attack_" + attackid + "_dmgflag"] != 0) {
if(atkmag != 0) {hdmg1 = " + " + atkmag + "[POWER]" + hdmg1};
if(dmgmod != 0) {hdmg1 = " + " + dmgmod + "[MOD]" + hdmg1};
if(dmgattr != 0) {hdmg1 = " + " + dmgattr + "[" + dmgattr_abrev + "]" + hdmg1};
hdmg1 = dmgbase + hdmg1;
}
else {
hdmg1 = "0";
}
if(v["repeating_attack_" + attackid + "_dmg2flag"] && v["repeating_attack_" + attackid + "_dmg2flag"] != 0) {
if(dmg2mod != 0) {hdmg2 = " + " + dmg2mod + "[MOD]" + hdmg2};
if(dmg2attr != 0) {hdmg2 = " + " + dmg2attr + "[" + dmg2attr_abrev + "]" + hdmg2};
hdmg2 = dmg2base + hdmg2;
}
else {
hdmg2 = "0";
}
var globaldamage = `[[${v.global_damage_mod_roll && v.global_damage_mod_roll !== "" ? v.global_damage_mod_roll : "0"}]]`;
var globaldamagecrit = `[[${v.global_damage_mod_crit && v.global_damage_mod_crit !== "" ? v.global_damage_mod_crit : "0"}]]`;
if(v.dtype === "full") {
pickbase = "full";
rollbase = "@{wtype}&{template:atkdmg} {{mod=@{atkbonus}}} {{rname=@{atkname}}} {{r1=[[" + r1 + "cs>@{atkcritrange}" + hbonus + "]]}} " + r2 + "cs>@{atkcritrange}" + hbonus + "]]}} @{atkflag} {{range=@{atkrange}}} @{dmgflag} {{dmg1=[[" + hdmg1 + "]]}} {{dmg1type=" + dmgtype + "}} @{dmg2flag} {{dmg2=[[" + hdmg2 + "]]}} {{dmg2type=" + dmg2type + "}} {{crit1=[[" + crit1 + "[CRIT]]]}} {{crit2=[[" + crit2 + "[CRIT]]]}} @{saveflag} {{desc=@{atk_desc}}} @{hldmg} " + hldmgcrit + " {{powerlevel=@{powerlevel}}} {{innate=@{power_innate}}} {{globalattack=@{global_attack_mod}}} {{globaldamage=" + globaldamage + "}} {{globaldamagecrit=" + globaldamagecrit + "}} {{globaldamagetype=@{global_damage_mod_type}}} ammo=@{ammo} @{charname_output}";
}
else if(v["repeating_attack_" + attackid + "_atkflag"] && v["repeating_attack_" + attackid + "_atkflag"] != 0) {
pickbase = "pick";
rollbase = "@{wtype}&{template:atk} {{mod=@{atkbonus}}} {{rname=[@{atkname}](~repeating_attack_attack_dmg)}} {{rnamec=[@{atkname}](~repeating_attack_attack_crit)}} {{r1=[[" + r1 + "cs>@{atkcritrange}" + hbonus + "]]}} " + r2 + "cs>@{atkcritrange}" + hbonus + "]]}} {{range=@{atkrange}}} {{desc=@{atk_desc}}} {{powerlevel=@{powerlevel}}} {{innate=@{power_innate}}} {{globalattack=@{global_attack_mod}}} ammo=@{ammo} @{charname_output}";
}
else if(v["repeating_attack_" + attackid + "_dmgflag"] && v["repeating_attack_" + attackid + "_dmgflag"] != 0) {
pickbase = "dmg";
rollbase = "@{wtype}&{template:dmg} {{rname=@{atkname}}} @{atkflag} {{range=@{atkrange}}} @{dmgflag} {{dmg1=[[" + hdmg1 + "]]}} {{dmg1type=" + dmgtype + "}} @{dmg2flag} {{dmg2=[[" + hdmg2 + "]]}} {{dmg2type=" + dmg2type + "}} @{saveflag} {{desc=@{atk_desc}}} @{hldmg} {{powerlevel=@{powerlevel}}} {{innate=@{power_innate}}} {{globaldamage=" + globaldamage + "}} {{globaldamagetype=@{global_damage_mod_type}}} ammo=@{ammo} @{charname_output}"
}
else {
pickbase = "empty";
rollbase = "@{wtype}&{template:dmg} {{rname=@{atkname}}} @{atkflag} {{range=@{atkrange}}} @{saveflag} {{desc=@{atk_desc}}} {{powerlevel=@{powerlevel}}} {{innate=@{power_innate}}} ammo=@{ammo} @{charname_output}"
}
update["repeating_attack_" + attackid + "_rollbase_dmg"] = "@{wtype}&{template:dmg} {{rname=@{atkname}}} @{atkflag} {{range=@{atkrange}}} @{dmgflag} {{dmg1=[[" + hdmg1 + "]]}} {{dmg1type=" + dmgtype + "}} @{dmg2flag} {{dmg2=[[" + hdmg2 + "]]}} {{dmg2type=" + dmg2type + "}} @{saveflag} {{desc=@{atk_desc}}} @{hldmg} {{powerlevel=@{powerlevel}}} {{innate=@{power_innate}}} {{globaldamage=" + globaldamage + "}} {{globaldamagetype=@{global_damage_mod_type}}} @{charname_output}";
update["repeating_attack_" + attackid + "_rollbase_crit"] = "@{wtype}&{template:dmg} {{crit=1}} {{rname=@{atkname}}} @{atkflag} {{range=@{atkrange}}} @{dmgflag} {{dmg1=[[" + hdmg1 + "]]}} {{dmg1type=" + dmgtype + "}} @{dmg2flag} {{dmg2=[[" + hdmg2 + "]]}} {{dmg2type=" + dmg2type + "}} {{crit1=[[" + crit1 + "]]}} {{crit2=[[" + crit2 + "]]}} @{saveflag} {{desc=@{atk_desc}}} @{hldmg} " + hldmgcrit + " {{powerlevel=@{powerlevel}}} {{innate=@{power_innate}}} {{globaldamage=" + globaldamage + "}} {{globaldamagecrit=" + globaldamagecrit + "}} {{globaldamagetype=@{global_damage_mod_type}}} @{charname_output}"
update["repeating_attack_" + attackid + "_atkbonus"] = bonus;
update["repeating_attack_" + attackid + "_atkdmgtype"] = dmg + dmgspacer + dmg2 + dmgmag + " ";
update["repeating_attack_" + attackid + "_rollbase"] = rollbase;
if(v["repeating_attack_" + attackid + "_powerid"] && v["repeating_attack_" + attackid + "_powerid"] != "" && (!source || source && source != "power") && v["repeating_attack_" + attackid + "_powerid"].length == 20) {
var powerid = v["repeating_attack_" + attackid + "_powerid"];
var lvl = v["repeating_attack_" + attackid + "_powerlevel"];
callbacks.push( function() {update_power_from_attack(lvl, powerid, attackid);} );
}
if(v["repeating_attack_" + attackid + "_itemid"] && v["repeating_attack_" + attackid + "_itemid"] != "" && (!source || source && source != "item")) {
var itemid = v["repeating_attack_" + attackid + "_itemid"];
callbacks.push( function() {update_item_from_attack(itemid, attackid);} );
}
setAttrs(update, {silent: true}, function() {callbacks.forEach(function(callback) {callback(); })} );
});
});
};
var update_power_from_attack = function(lvl, powerid, attackid) {
var update = {};
getAttrs(["repeating_attack_" + attackid + "_atkname", "repeating_attack_" + attackid + "_atkrange", "repeating_attack_" + attackid + "_atkflag", "repeating_attack_" + attackid + "_atkattr_base", "repeating_attack_" + attackid + "_dmgbase", "repeating_attack_" + attackid + "_dmgtype", "repeating_attack_" + attackid + "_dmg2base", "repeating_attack_" + attackid + "_dmg2type", "repeating_attack_" + attackid + "_saveflag", "repeating_attack_" + attackid + "_saveattr", "repeating_attack_" + attackid + "_saveeffect"], function(v) {
update["repeating_power-" + lvl + "_" + powerid + "_powername"] = v["repeating_attack_" + attackid + "_atkname"];
if(v["repeating_attack_" + attackid + "_atkrange"] && v["repeating_attack_" + attackid + "_atkrange"] != "") {
update["repeating_power-" + lvl + "_" + powerid + "_powerrange"] = v["repeating_attack_" + attackid + "_atkrange"];
}
else {
update["repeating_power-" + lvl + "_" + powerid + "_powerrange"] = "";
};
if(v["repeating_attack_" + attackid + "_dmgtype"] && v["repeating_attack_" + attackid + "_dmgtype"].toLowerCase() == "healing") {
if(v["repeating_attack_" + attackid + "_dmgbase"] && v["repeating_attack_" + attackid + "_dmgbase"] != "") {
update["repeating_power-" + lvl + "_" + powerid + "_powerhealing"] = v["repeating_attack_" + attackid + "_dmgbase"];
}
}
else {
if(v["repeating_attack_" + attackid + "_dmgbase"] && v["repeating_attack_" + attackid + "_dmgbase"] != "" && v["repeating_attack_" + attackid + "_dmgbase"].indexOf("[[round((@{level} + 1) / 6 + 0.5)]]") === -1) {
update["repeating_power-" + lvl + "_" + powerid + "_powerdamage"] = v["repeating_attack_" + attackid + "_dmgbase"];
}
else if(!v["repeating_attack_" + attackid + "_dmgbase"] || v["repeating_attack_" + attackid + "_dmgbase"] === "") {
update["repeating_power-" + lvl + "_" + powerid + "_powerdamage"] = "";
}
if(v["repeating_attack_" + attackid + "_dmgtype"] && v["repeating_attack_" + attackid + "_dmgtype"] != "") {
update["repeating_power-" + lvl + "_" + powerid + "_powerdamagetype"] = v["repeating_attack_" + attackid + "_dmgtype"];
}
else {
update["repeating_power-" + lvl + "_" + powerid + "_powerdamagetype"] = "";
}
};
if(v["repeating_attack_" + attackid + "_dmg2type"] && v["repeating_attack_" + attackid + "_dmg2type"].toLowerCase() == "healing") {
if(v["repeating_attack_" + attackid + "_dmgbase"] && v["repeating_attack_" + attackid + "_dmgbase"] != "") {
update["repeating_power-" + lvl + "_" + powerid + "_powerhealing"] = v["repeating_attack_" + attackid + "_dmgbase"];
}
}
else {
if(v["repeating_attack_" + attackid + "_dmg2base"] && v["repeating_attack_" + attackid + "_dmg2base"] != "") {
update["repeating_power-" + lvl + "_" + powerid + "_powerdamage2"] = v["repeating_attack_" + attackid + "_dmg2base"];
}
else {
update["repeating_power-" + lvl + "_" + powerid + "_powerdamage2"] = "";
}
if(v["repeating_attack_" + attackid + "_dmg2type"] && v["repeating_attack_" + attackid + "_dmg2type"] != "") {
update["repeating_power-" + lvl + "_" + powerid + "_powerdamagetype2"] = v["repeating_attack_" + attackid + "_dmg2type"];
}
else {
update["repeating_power-" + lvl + "_" + powerid + "_powerdamagetype2"] = "";
}
};
if(v["repeating_attack_" + attackid + "_saveflag"] && v["repeating_attack_" + attackid + "_saveflag"] != "0") {
update["repeating_power-" + lvl + "_" + powerid + "_powersave"] = v["repeating_attack_" + attackid + "_saveattr"];
}
else {
update["repeating_power-" + lvl + "_" + powerid + "_powersave"] = "";
};
if(v["repeating_attack_" + attackid + "_saveeffect"] && v["repeating_attack_" + attackid + "_saveeffect"] != "") {
update["repeating_power-" + lvl + "_" + powerid + "_powersavesuccess"] = v["repeating_attack_" + attackid + "_saveeffect"];
}
else {
update["repeating_power-" + lvl + "_" + powerid + "_powersavesuccess"] = "";
};
setAttrs(update, {silent: true});
});
};
var update_item_from_attack = function(itemid, attackid) {
var inventory = "repeating_inventory_";
getAttrs(["repeating_hiddeninventory_" + itemid + "_itemname"], function(x){
if(x["repeating_hiddeninventory_" + itemid + "_itemname"]) {
inventory = "repeating_hiddeninventory_";
}
});
getAttrs(["repeating_attack_" + attackid + "_atkname", "repeating_attack_" + attackid + "_dmgbase", "repeating_attack_" + attackid + "_dmg2base", "repeating_attack_" + attackid + "_dmgtype", "repeating_attack_" + attackid + "_dmg2type", "repeating_attack_" + attackid + "_atkrange", "repeating_attack_" + attackid + "_atkmod", "repeating_attack_" + attackid + "_dmgmod", inventory + itemid + "_itemmodifiers", "repeating_attack_" + attackid + "_versatile_alt", inventory + itemid + "_itemproperties", "repeating_attack_" + attackid + "_atkpower"], function(v) {
var update = {};
var mods = v[inventory + itemid + "_itemmodifiers"];
var damage = v["repeating_attack_" + attackid + "_dmgbase"] ? v["repeating_attack_" + attackid + "_dmgbase"] : 0;
var damage2 = v["repeating_attack_" + attackid + "_dmg2base"] ? v["repeating_attack_" + attackid + "_dmg2base"] : 0;
var damagetype = v["repeating_attack_" + attackid + "_dmgtype"] ? v["repeating_attack_" + attackid + "_dmgtype"] : 0;
var damagetype2 = v["repeating_attack_" + attackid + "_dmg2type"] ? v["repeating_attack_" + attackid + "_dmg2type"] : 0;
var range = v["repeating_attack_" + attackid + "_atkrange"] ? v["repeating_attack_" + attackid + "_atkrange"] : 0;
var attackmod = v["repeating_attack_" + attackid + "_atkmod"] ? v["repeating_attack_" + attackid + "_atkmod"] : 0;
var damagemod = v["repeating_attack_" + attackid + "_dmgmod"] ? v["repeating_attack_" + attackid + "_dmgmod"] : 0;
var powermod = v["repeating_attack_" + attackid + "_atkpower"] ? v["repeating_attack_" + attackid + "_atkpower"] : 0;
var atktype = "";
var altprefix = v["repeating_attack_" + attackid + "_versatile_alt"] === "1" ? "Alternate " : "";
if(/Alternate Damage:/i.test(v[inventory + itemid + "_itemmodifiers"])) {
update[inventory + itemid + "_itemname"] = v["repeating_attack_" + attackid + "_atkname"].replace(/\s*(?:\(One-Handed\)|\(Two-Handed\))/, "");
} else {
update[inventory + itemid + "_itemname"] = v["repeating_attack_" + attackid + "_atkname"];
}
var attack_type_regex = /(?:^|,)\s*Item Type: (Melee|Ranged) Weapon(?:,|$)/i;
var attack_type_results = attack_type_regex.exec(v[inventory + itemid + "_itemmodifiers"]);
atktype = attack_type_results ? attack_type_results[1] : "";
if(mods) {
mods = mods.split(",");
} else {
mods = [];
}
var damage_regex = new RegExp("^\\s*" + altprefix + "Damage:\\s*(.+)$", "i");
var damage_found = false;
for(var i = 0; i < mods.length; i++) {
if(damage_found = damage_regex.exec(mods[i])) {
if(damage !== 0) {
mods[i] = mods[i].replace(damage_found[1], damage);
} else {
mods.splice(i, 1);
}
break;
}
}
if(!damage_found && damage !== 0) {
mods.push(altprefix + "Damage: " + damage);
}
var damage2_regex = new RegExp("^\\s*" + altprefix + "Secondary Damage:\\s*(.+)$", "i");
var damage2_found = false;
for(var i = 0; i < mods.length; i++) {
if(damage2_found = damage2_regex.exec(mods[i])) {
if(damage2 !== 0) {
mods[i] = mods[i].replace(damage2_found[1], damage2);
} else {
mods.splice(i, 1);
}
break;
}
}
if(!damage2_found && damage2 !== 0) {
mods.push(altprefix + "Secondary Damage: " + damage2);
}
var dmgtype_regex = new RegExp("^\\s*" + altprefix + "Damage Type:\\s*(.+)$", "i");
var dmgtype_found = false;
for(var i = 0; i < mods.length; i++) {
if(dmgtype_found = dmgtype_regex.exec(mods[i])) {
if(damagetype !== 0) {
mods[i] = mods[i].replace(dmgtype_found[1], damagetype);
} else {
mods.splice(i, 1);
}
break;
}
}
if(!dmgtype_found && damagetype !== 0) {
mods.push(altprefix + "Damage Type: " + damagetype);
}
var dmgtype2_regex = new RegExp("^\\s*" + altprefix + "Secondary Damage Type:\\s*(.+)$", "i");
var dmgtype2_found = false;
for(var i = 0; i < mods.length; i++) {
if(dmgtype2_found = dmgtype2_regex.exec(mods[i])) {
if(damagetype2 !== 0) {
mods[i] = mods[i].replace(dmgtype_found[1], damagetype);
} else {
mods.splice(i, 1);
}
break;
}
}
if(!dmgtype2_found && damagetype2 !== 0) {
mods.push(altprefix + "Secondary Damage Type: " + damagetype2);
}
var range_found = false;
for(var i = 0; i < mods.length; i++) {
if(range_found = /^\s*Range:\s*(.+)$/i.exec(mods[i])) {
if(range !== 0) {
mods[i] = mods[i].replace(range_found[1], range);
} else {
mods.splice(i, 1);
}
break;
}
}
if(!range_found && range !== 0) {
mods.push("Range: " + range);
}
var attackmod_regex = new RegExp("^\\s*(?:" + (atktype !== "" ? atktype + "|" : "") + "Weapon) Attacks \\+?(.+)$", "i");
var attackmod_found = false;
for(var i = 0; i < mods.length; i++) {
if(attackmod_found = attackmod_regex.exec(mods[i])) {
if(powermod !== 0 || attackmod !== 0) {
mods[i] = mods[i].replace(attackmod_found[1], powermod !== 0 ? powermod : attackmod);
} else {
mods.splice(i, 1);
}
break;
}
}
if(!attackmod_found && (powermod !== 0 || attackmod !== 0)) {
var properties = v[inventory + itemid + "_itemproperties"];
if(properties && /Thrown/i.test(properties)) {
mods.push("Weapon Attacks: " + (powermod !== 0 ? powermod : attackmod));
}
else {
mods.push(atktype + " Attacks: " + (powermod !== 0 ? powermod : attackmod));
}
}
var damagemod_regex = new RegExp("^\\s*(?:" + (atktype !== "" ? atktype + "|" : "") + "Weapon) Damage \\+?(.+)$", "i");
var damagemod_found = false;
for(var i = 0; i < mods.length; i++) {
if(damagemod_found = damagemod_regex.exec(mods[i])) {
if(powermod !== 0 || damagemod !== 0) {
mods[i] = mods[i].replace(damagemod_found[1], powermod !== 0 ? powermod : attackmod);
} else {
mods.splice(i, 1);
}
break;
}
}
if(!damagemod_found && (powermod !== 0 || damagemod !== 0)) {
var properties = v[inventory + itemid + "_itemproperties"];
if(properties && /Thrown/i.test(properties)) {
mods.push("Weapon Damage: " + (powermod !== 0 ? powermod : damagemod));
}
else {
mods.push(atktype + " Damage: " + (powermod !== 0 ? powermod : damagemod));
}
}
update[inventory + itemid + "_itemmodifiers"] = mods.join(",");
setAttrs(update, {silent: true});
});
};
var remove_attack = function(attackid) {
removeRepeatingRow("repeating_attack_" + attackid);
};
var remove_resource = function(id) {
var update = {};
getAttrs([id + "_itemid"], function(v) {
var itemid = v[id + "_itemid"];
if(itemid) {
var inventory = "repeating_inventory_";
getAttrs(["repeating_hiddeninventory_" + itemid + "_itemname"], function(x){
if(x["repeating_hiddeninventory_" + itemid + "_itemname"]) {
inventory = "repeating_hiddeninventory_";
}
});
update[inventory + itemid + "_useasresource"] = 0;
update[inventory + itemid + "_itemresourceid"] = "";
};
if(id == "other_resource") {
update["other_resource"] = "";
update["other_resource_name"] = "";
update["other_resource_itemid"] = "";
setAttrs(update, {silent: true});
}
else {
var baseid = id.replace("repeating_resource_", "").substring(0,20);
var resource_names = ["repeating_resource_" + baseid + "_resource_left_name", "repeating_resource_" + baseid + "_resource_right_name"];
getAttrs(resource_names, function(v) {
if((id.indexOf("left") > -1 && !v["repeating_resource_" + baseid + "_resource_right_name"]) || (id.indexOf("right") > -1 && !v["repeating_resource_" + baseid + "_resource_left_name"])) {
removeRepeatingRow("repeating_resource_" + baseid);
}
else {
update["repeating_resource_" + id.replace("repeating_resource_", "")] = "";
update["repeating_resource_" + id.replace("repeating_resource_", "") + "_name"] = "";
};
setAttrs(update, {silent: true});
});
};
});
};
var update_weight = function() {
getSectionIDs("repeating_inventory", function(idarray) {
update_inventory_from_weight_change("repeating_inventory_", idarray, "weighttotal");
});
getSectionIDs("repeating_hiddeninventory", function(idarray) {
update_inventory_from_weight_change("repeating_hiddeninventory_", idarray, "hiddenweighttotal");
});
};
var update_inventory_from_weight_change = function (inventory, idarray, weightAttrToUpdate){
var update = {};
var wtotal = 0;
var weight_attrs = ["cp","sp","ep","gp","pp","encumberance_setting","strength","size","carrying_capacity_mod"];
_.each(idarray, function(currentID, i) {
weight_attrs.push(inventory + currentID + "_itemweight");
weight_attrs.push(inventory + currentID + "_itemcount");
});
getAttrs(weight_attrs, function(v) {
cp = isNaN(parseInt(v.cp, 10)) === false ? parseInt(v.cp, 10) : 0;
sp = isNaN(parseInt(v.sp, 10)) === false ? parseInt(v.sp, 10) : 0;
ep = isNaN(parseInt(v.ep, 10)) === false ? parseInt(v.ep, 10) : 0;
gp = isNaN(parseInt(v.gp, 10)) === false ? parseInt(v.gp, 10) : 0;
pp = isNaN(parseInt(v.pp, 10)) === false ? parseInt(v.pp, 10) : 0;
wtotal = wtotal + ((cp + sp + ep + gp + pp) / 50);
_.each(idarray, function(currentID, i) {
if(v[inventory + currentID + "_itemweight"] && isNaN(parseInt(v[inventory + currentID + "_itemweight"], 10)) === false) {
count = v[inventory + currentID + "_itemcount"] && isNaN(parseFloat(v[inventory + currentID + "_itemcount"])) === false ? parseFloat(v[inventory + currentID + "_itemcount"]) : 1;
wtotal = wtotal + (parseFloat(v[inventory + currentID + "_itemweight"]) * count);
}
});
update[weightAttrToUpdate] = wtotal;
var str_base = parseInt(v.strength, 10);
var size_multiplier = 1;
if(v["size"] && v["size"] != "") {
if(v["size"].toLowerCase().trim() == "tiny") {size_multiplier = .5}
else if(v["size"].toLowerCase().trim() == "large") {size_multiplier = 2}
else if(v["size"].toLowerCase().trim() == "huge") {size_multiplier = 4}
else if(v["size"].toLowerCase().trim() == "gargantuan") {size_multiplier = 8}
}
var str = str_base*size_multiplier;
if(v.carrying_capacity_mod) {
var operator = v.carrying_capacity_mod.substring(0,1);
var value = v.carrying_capacity_mod.substring(1);
if(["*","x","+","-"].indexOf(operator) > -1 && isNaN(parseInt(value,10)) === false) {
if(operator == "*" || operator == "x") {str = str*parseInt(value,10);}
else if(operator == "+") {str = str+parseInt(value,10);}
else if(operator == "-") {str = str-parseInt(value,10);}
}
}
if(!v.encumberance_setting || v.encumberance_setting === "off") {
if(wtotal > str*15) {
update["encumberance"] = "OVER CARRYING CAPACITY";
}
else {
update["encumberance"] = " ";
}
}
else if(v.encumberance_setting === "on") {
if(wtotal > str*15) {
update["encumberance"] = "IMMOBILE";
}
else if(wtotal > str*10) {
update["encumberance"] = "HEAVILY ENCUMBERED";
}
else if(wtotal > str*5) {
update["encumberance"] = "ENCUMBERED";
}
else {
update["encumberance"] = " ";
}
}
else {
update["encumberance"] = " ";
}
setAttrs(update, {silent: true});
});
};
var update_shield_points = function() {
getAttrs(["hp_max", "ship_shield_capacity", "ship_shield_max", "ship_shield_active_flag"], function(attrs) {
if(attrs.ship_shield_active_flag == "1") {
var tryParseShieldCapacity = parseFloat(attrs.ship_shield_capacity);
if(!isNaN(tryParseShieldCapacity)) {
var update = {};
update.ship_shield_max = Math.ceil(tryParseShieldCapacity * attrs.hp_max);
setAttrs(update, {silent: true});
}
}
else {
setAttrs({ship_shield_max: 0}, {silent: true});
}
});
}
var update_shield_regen = function() {
getAttrs(["ship_size", "ship_shield_regen_rate_coefficient", "ship_shield_active_flag"], function(attrs) {
if(attrs.ship_shield_active_flag == "1") {
var tryParseShieldCoefficient = isNaN(parseFloat(attrs.ship_shield_regen_rate_coefficient)) == false ? parseFloat(attrs.ship_shield_regen_rate_coefficient) : 0;
var shipSizeHitDie = 0;
switch(attrs.ship_size) {
case "Tiny":
shipSizeHitDie = 4;
break;
case "Small":
shipSizeHitDie = 6;
break;
case "Medium":
shipSizeHitDie = 8;
break;
case "Large":
shipSizeHitDie = 10;
break;
case "Huge":
shipSizeHitDie = 12;
break;
case "Gargantuan":
shipSizeHitDie = 20;
break;
}
setAttrs({
ship_shield_regen_rate: Math.ceil(tryParseShieldCoefficient * shipSizeHitDie)
}, {silent: true});
}
else {
setAttrs({ship_shield_regen_rate: 0}, {silent: true});
}
})
}
var update_ship_dice = function() {
getAttrs(["ship_size", "hulldie_final", "hull_dice_max", "shielddie_final", "shield_dice_max", "base_ship_tier", "pwrdie_final", "hp_max", "hp", "constitution_mod", "strength_mod", "ship_shield", "ship_shield_points", "ship_shield_max", "ship_armor", "ship_armor_active_flag", "ship_armor_hp_per_hit_die", "ship_shield_capacity", "ship_shield_regen_rate_coefficient", "ship_shield_active_flag", "ship_shield_regen_rate"], function(attrs) {
if(true) {
var shipSizeDie = 0;
var shipSizeDiceMax = 0;
var shipSizeHullPoints = 0;
var shipSizeShieldPoints = 0;
var shipHullPointsAfterFirst = 0;
var armorHpPerHitDieMod = 0;
var shieldCapacity = 0;
var shieldRegenRate = 0;
var tierDieMultiplier = 0;
var shipPwrDie = 0;
var sTier = isNaN(parseInt(attrs.base_ship_tier)) == false ? parseInt(attrs.base_ship_tier) : 0;
var localCon = isNaN(parseInt(attrs.constitution_mod)) == false ? parseInt(attrs.constitution_mod) : 0;
var localStr = isNaN(parseInt(attrs.strength_mod)) == false ? parseInt(attrs.strength_mod) : 0;
switch(attrs.ship_size) {
case "Tiny":
shipSizeDie = 4;
shipSizeDiceMax = 1;
tierDieMultiplier = 1;
shipHullPointsAfterFirst = 3;
break;
case "Small":
shipSizeDie = 6;
shipSizeDiceMax = 3;
tierDieMultiplier = 1;
shipHullPointsAfterFirst = 4;
break;
case "Medium":
shipSizeDie = 8;
shipSizeDiceMax = 5;
tierDieMultiplier = 1;
shipHullPointsAfterFirst = 5;
break;
case "Large":
shipSizeDie = 10;
shipSizeDiceMax = 7;
tierDieMultiplier = 1;
shipHullPointsAfterFirst = 6;
break;
case "Huge":
shipSizeDie = 12;
shipSizeDiceMax = 9;
tierDieMultiplier = 2;
shipHullPointsAfterFirst = 7;
break;
case "Gargantuan":
shipSizeDie = 20;
shipSizeDiceMax = 11;
tierDieMultiplier = 2;
shipHullPointsAfterFirst = 11;
break;
}
switch(sTier){
case 0:
shipPwrDie = 1;
break;
case 1:
shipPwrDie = 4;
break;
case 2:
shipPwrDie = 6;
break;
case 3:
shipPwrDie = 8;
break;
case 4:
shipPwrDie = 10;
break;
case 5:
shipPwrDie = 12;
break;
}
switch(attrs.ship_armor){
case "none":
break;
case "deflection":
break;
case "lightweight":
armorHpPerHitDieMod = -1
break;
case "reinforced":
armorHpPerHitDieMod = 1
break;
case "customshiparmor":
if(attrs.ship_armor_active_flag == "1") {
var tempHpAttrBonus = attrs["ship_armor_hp_per_hit_die"]
var tryParseHpBonus = parseInt(tempHpAttrBonus);
if(!isNaN(tryParseHpBonus)) {
armorHpPerHitDieMod = tryParseHpBonus;
}
}
break;
}
switch(attrs.ship_shield){
case "none":
break;
case "directional":
shieldCapacity = 1;
shieldRegenRate = 1;
break;
case "fortress":
shieldCapacity = 3/2;
shieldRegenRate = 2/3;
break;
case "quickcharge":
shieldCapacity = 2/3;
shieldRegenRate = 3/2;
break;
case "customshipshield":
if(attrs.ship_shield_active_flag == "1") {
shieldCapacity = isNaN(parseFloat(attrs.ship_shield_capacity)) == false ? parseFloat(attrs.ship_shield_capacity) : 0;
shieldRegenRate = isNaN(parseFloat(attrs.ship_shield_regen_rate_coefficient)) == false ? parseFloat(attrs.ship_shield_regen_rate_coefficient) : 0;
}
break;
}
var adjustedTierDies = shipSizeDiceMax + (sTier * tierDieMultiplier);
shipSizeHullPoints = shipSizeDie + localCon + ((adjustedTierDies-1) * shipHullPointsAfterFirst) + ((adjustedTierDies-1) * localCon) + (adjustedTierDies * armorHpPerHitDieMod);
shipSizeShieldPoints = Math.floor(((shipSizeDie + localStr) + ((adjustedTierDies-1) * shipHullPointsAfterFirst) + ((adjustedTierDies-1) * localStr)) * shieldCapacity);
var shipSizeShieldRegen = Math.floor(shipSizeDie * shieldRegenRate);
setAttrs({hulldie_final: shipSizeDie}, {silent: true});
setAttrs({hull_dice_max: adjustedTierDies}, {silent: true});
setAttrs({shielddie_final: shipSizeDie}, {silent: true});
setAttrs({shield_dice_max: adjustedTierDies}, {silent: true});
setAttrs({pwrdie_final: shipPwrDie}, {silent: true});
setAttrs({hp_max: shipSizeHullPoints}, {silent: true});
setAttrs({hp: shipSizeHullPoints}, {silent: true});
setAttrs({ship_shield_max: shipSizeShieldPoints}, {silent: true});
setAttrs({ship_shield_points: shipSizeShieldPoints}, {silent: true});
setAttrs({ship_shield_regen_rate: shipSizeShieldRegen}, {silent: true});
}
else {
setAttrs({hull_dice_max: 0}, {silent: true});
}
})
};
var update_pwr_die_recovery = function() {
getAttrs(["pwrdie_recovery", "ship_reactor", "pwrdie_mod"], function(attrs) {
if(true) {
var pwrDieRecov = 0;
var pwrDieMod = 0;
switch(attrs.ship_reactor) {
case "none":
pwrDieRecov = 0;
break;
case "fuelcell":
pwrDieRecov = 1;
break;
case "ionization":
pwrDieRecov = 2;
pwrDieMod = 1;
break;
case "powercore":
pwrDieRecov = 2;
break;
}
setAttrs({pwrdie_recovery: pwrDieRecov}, {silent: true});
setAttrs({pwrdie_mod: pwrDieMod}, {silent: true});
}
else {
setAttrs({pwrdie_recovery: 0}, {silent: true});
setAttrs({pwrdie_mod: 0}, {silent: true});
}
})
};
var update_pwr_die_capacity = function() {
getAttrs(["ship_pwr_coupling", "pwr_s_storage", "pwr_c_storage"], function(attrs) {
if(true) {
var pwrCentralStore = 0;
var pwrSystemStore = 0;
switch(attrs.ship_pwr_coupling) {
case "none":
pwrCentralStore = 0;
pwrSystemStore = 0;
break;
case "direct":
pwrCentralStore = 4;
pwrSystemStore = 0;
break;
case "distributed":
pwrCentralStore = 0;
pwrSystemStore = 2;
break;
case "hubspoke":
pwrCentralStore = 2;
pwrSystemStore = 1;
break;
}
setAttrs({pwr_s_storage: pwrSystemStore}, {silent: true});
setAttrs({pwr_c_storage: pwrCentralStore}, {silent: true});
}
else {
setAttrs({pwr_s_storage: 0}, {silent: true});
setAttrs({pwr_c_storage: 0}, {silent: true});
}
})
};
var update_ship_capacity = function() {
getAttrs(["ship_size", "ship_fuel_max", "ship_food_max", "ship_reg_cargo_max", "ship_fuel_cost", "ship_reactor"], function(attrs) {
if(true) {
var shipCargoCap = 0;
var shipFuelCap = 0;
var shipFoodCap = 0;
var shipFuelCost = 0;
var shipFuelMod = 0;
switch(attrs.ship_reactor) {
case "none":
shipFuelMod = 1;
break;
case "fuelcell":
shipFuelMod = 1;
break;
case "ionization":
shipFuelMod = 2/3;
break;
case "powercore":
shipFuelMod = 3/2;
break;
}
switch(attrs.ship_size) {
case "Tiny":
shipCargoCap = 0;
shipFoodCap = 0;
shipFuelCap = 5;
shipFuelCost = 25;
break;
case "Small":
shipCargoCap = 2;
shipFoodCap = 10;
shipFuelCap = 10;
shipFuelCost = 50;
break;
case "Medium":
shipCargoCap = 25;
shipFoodCap = 120;
shipFuelCap = 30;
shipFuelCost = 100;
break;
case "Large":
shipCargoCap = 500;
shipFoodCap = 240000;
shipFuelCap = 300;
shipFuelCost = 1000;
break;
case "Huge":
shipCargoCap = 10000;
shipFoodCap = 9600000;
shipFuelCap = 600;
shipFuelCost = 10000;
break;
case "Gargantuan":
shipCargoCap = 200000;
shipFoodCap = 576000000;
shipFuelCap = 1800;
shipFuelCost = 100000;
break;
}
setAttrs({ship_fuel_max: shipFuelCap}, {silent: true});
setAttrs({ship_food_max: shipFoodCap}, {silent: true});
setAttrs({ship_reg_cargo_max: shipCargoCap}, {silent: true});
setAttrs({ship_fuel_cost: Math.ceil(shipFuelCost * shipFuelMod)}, {silent: true})
}
else {
setAttrs({ship_fuel_max: 0}, {silent: true});
setAttrs({ship_food_max: 0}, {silent: true});
setAttrs({ship_reg_cargo_max: 0}, {silent: true});
setAttrs({ship_fuel_cost: 0}, {silent: true})
}
})
};
var update_ship_hp = function() {
getAttrs(["ship_size", "hp_max", "ship_shield", "constitution_mod", "ship_reactor"], function(attrs) {
})
};
var update_ship_suite_capacity = function() {
getAttrs(["ship_size", "attr_ship_suites_max", "attr_ship_mod_max", "constitution_mod"], function(attrs) {
if(true) {
var shipModCap = 0;
var shipSuiteCap = 0;
var cons_mod = attrs.constitution_mod
switch(attrs.ship_size) {
case "Tiny":
shipModCap = 10;
shipSuiteCap = 0;
break;
case "Small":
shipModCap = 20;
shipSuiteCap = -1 + cons_mod;
break;
case "Medium":
shipModCap = 30;
shipSuiteCap = 3 + cons_mod;
break;
case "Large":
shipModCap = 50;
shipSuiteCap = 3 + (2*cons_mod);
break;
case "Huge":
shipModCap = 60;
shipSuiteCap = 6 + (3*cons_mod);
break;
case "Gargantuan":
shipModCap = 70;
shipSuiteCap = 10 + (4*cons_mod);
break;
}
setAttrs({ship_suites_max: shipSuiteCap}, {silent: true});
setAttrs({ship_mod_max: shipModCap}, {silent: true});
}
else {
setAttrs({ship_suites_max: 0}, {silent: true});
setAttrs({ship_mod_max: 0}, {silent: true});
}
})
};
var update_ship_tier_cost = function() {
getAttrs(["ship_size", "base_ship_tier", "ship_cr_next"], function(attrs) {
if(true) {
var sTier = isNaN(parseInt(attrs.base_ship_tier)) == false ? parseInt(attrs.base_ship_tier) : 0;
var shipTierCostMod = 0;
var shipTierCostFinal = 0;
switch(attrs.ship_size) {
case "Tiny":
shipTierCostMod = 1/2;
break;
case "Small":
shipTierCostMod = 1;
break;
case "Medium":
shipTierCostMod = 2;
break;
case "Large":
shipTierCostMod = 10;
break;
case "Huge":
shipTierCostMod = 100;
break;
case "Gargantuan":
shipTierCostMod = 1000;
break;
}
switch(sTier) {
case 0:
shipTierCostFinal = 3900*shipTierCostMod;
break;
case 1:
shipTierCostFinal = 77500*shipTierCostMod;
break;
case 2:
shipTierCostFinal = 297000*shipTierCostMod;
break;
case 3:
shipTierCostFinal = 620000*shipTierCostMod;
break;
case 4:
shipTierCostFinal = 1150000*shipTierCostMod;
break;
case 5:
shipTierCostFinal = "N/A";
}
setAttrs({ship_cr_next: shipTierCostFinal}, {silent: true});
}
else {
setAttrs({ship_cr_next: 0}, {silent: true});
}
})
};
var update_ac = function() {
getAttrs(["custom_ac_flag","npc"], function(v) {
if(v.custom_ac_flag === "2") {
return;
}
else if(v.custom_ac_flag === "1" && v.npc !== "2") {
getAttrs(["custom_ac_base","custom_ac_part1","custom_ac_part2","strength_mod","dexterity_mod","constitution_mod","intelligence_mod","wisdom_mod","charisma_mod"], function(b) {
var base = isNaN(parseInt(b.custom_ac_base, 10)) === false ? parseInt(b.custom_ac_base, 10) : 10;
var part1attr = b.custom_ac_part1.toLowerCase();
var part2attr = b.custom_ac_part2.toLowerCase();
var part1 = part1attr === "none" ? 0 : b[part1attr + "_mod"];
var part2 = part2attr === "none" ? 0 : b[part2attr + "_mod"];
var total = base + part1 + part2;
setAttrs({ac: total});
});
}
else {
var ac_attrs = ["simpleinventory","dexterity_mod","globalacmod","npc","ship_size","pilot_skill", "ship_armor_ac_bonus", "ship_armor_active_flag", "ship_armor"];
getSectionIDs("repeating_inventory", function(idarray) {
update_inventory_from_ac_change("repeating_inventory_", idarray, ac_attrs);
});
if(v.npc === "2") {
getSectionIDs("repeating_hiddeninventory", function(idarray) {
update_inventory_from_ac_change("repeating_hiddeninventory_", idarray, ac_attrs);
});
}
};
});
};
var update_inventory_from_ac_change = function(inventory, idarray, ac_attrs) {
var update = {};
_.each(idarray, function(currentID, i) {
ac_attrs.push(inventory + currentID + "_equipped");
ac_attrs.push(inventory + currentID + "_itemmodifiers");
});
getAttrs(ac_attrs, function(b) {
var globalacmod = isNaN(parseInt(b.globalacmod, 10)) === false ? parseInt(b.globalacmod, 10) : 0;
var dexmod = +b["dexterity_mod"];
var total = 10 + dexmod;
var armorcount = 0;
var shieldcount = 0;
var armoritems = [];
if(b.simpleinventory === "complex") {
_.each(idarray, function(currentID, i) {
if(b[inventory + currentID + "_equipped"] && b[inventory + currentID + "_equipped"] === "1" && b[inventory + currentID + "_itemmodifiers"] && b[inventory + currentID + "_itemmodifiers"].toLowerCase().indexOf("ac") > -1) {
var mods = b[inventory + currentID + "_itemmodifiers"].split(",");
var ac = 0;
var type = "mod";
_.each(mods, function(mod) {
if(mod.substring(0,10) === "Item Type:") {
type = mod.substring(11, mod.length).trim().toLowerCase();
}
if(mod.toLowerCase().indexOf("ac:") > -1 || mod.toLowerCase().indexOf("ac +") > -1 || mod.toLowerCase().indexOf("ac+") > -1) {
var regex = mod.replace(/[^0-9]/g, "");
var bonus = regex && regex.length > 0 && isNaN(parseInt(regex,10)) === false ? parseInt(regex,10) : 0;
ac = ac + bonus;
}
if(mod.toLowerCase().indexOf("ac -") > -1 || mod.toLowerCase().indexOf("ac-") > -1) {
var regex = mod.replace(/[^0-9]/g, "");
var bonus = regex && regex.length > 0 && isNaN(parseInt(regex,10)) === false ? parseInt(regex,10) : 0;
ac = ac - bonus;
}
});
armoritems.push({type: type, ac: ac});
}
});
armorcount = armoritems.filter(function(item){ return item["type"].indexOf("armor") > -1 }).length;
shieldcount = armoritems.filter(function(item){ return item["type"].indexOf("shield") > -1 }).length;
if(b.npc === "2") {
var modac = 0;
_.each(armoritems, function(item) {
modac = modac + item["ac"];
})
switch(b.ship_armor){
case "none":
break;
case "deflection":
break;
case "lightweight":
modac += 2
break;
case "reinforced":
modac += -2
break;
case "customshiparmor":
if(b.ship_armor_active_flag == "1") {
var acArmor = b["ship_armor_ac_bonus"]
var tryParseAcBonus = parseInt(acArmor, 10);
if(!isNaN(tryParseAcBonus)) {
modac += tryParseAcBonus;
}
}
break;
}
var pilotSkill = isNaN(parseInt(b.pilot_skill, 10)) === false ? parseInt(b.pilot_skill, 10) : 0;
var shipSizeACBase = 0;
switch(b.ship_size) {
case "Tiny":
shipSizeACBase = 10;
break;
case "Small":
shipSizeACBase = 9;
break;
case "Medium":
shipSizeACBase = 8;
break;
case "Large":
shipSizeACBase = 7;
break;
case "Huge":
shipSizeACBase = 6;
break;
case "Gargantuan":
shipSizeACBase = 5;
break;
default:
shipSizeACBase = 0;
break;
}
total = shipSizeACBase + pilotSkill + modac;
}
else {
var base = dexmod;
var armorac = 10;
var shieldac = 0;
var modac = 0;
_.each(armoritems, function(item) {
if(item["type"].indexOf("light armor") > -1) {
armorac = item["ac"];
base = dexmod;
}
else if(item["type"].indexOf("medium armor") > -1) {
armorac = item["ac"];
base = Math.min(dexmod, 2);
}
else if(item["type"].indexOf("heavy armor") > -1) {
armorac = item["ac"];
base = 0;
}
else if(item["type"].indexOf("shield") > -1) {
shieldac = item["ac"];
}
else {
modac = modac + item["ac"];
}
})
total = base + armorac + shieldac + modac;
}
};
if(armorcount > 1 || shieldcount > 1) {
update["armorwarningflag"] = "show";
update["armorwarning"] = "0";
}
else {
update["armorwarningflag"] = "hide";
update["armorwarning"] = "0";
}
console.log("total: " + total);
update["ac"] = total + globalacmod;
setAttrs(update, {silent: true});
});
};
var check_customac = function(attr) {
getAttrs(["custom_ac_flag","custom_ac_part1","custom_ac_part2"], function(v) {
if(v["custom_ac_flag"] && v["custom_ac_flag"] === "1" && ((v["custom_ac_part1"] && v["custom_ac_part1"] === attr) || (v["custom_ac_part2"] && v["custom_ac_part2"] === attr))) {
update_ac();
}
});
};
var update_initiative = function() {
getSectionIDs("repeating_inventory", function(idarray) {
update_inventory_from_initiative_change("repeating_inventory_", idarray);
});
getSectionIDs("repeating_hiddeninventory", function(idarray) {
update_inventory_from_initiative_change("repeating_hiddeninventory_", idarray);
});
};
var update_inventory_from_initiative_change = function(inventory, idarray) {
var attrs_to_get = ["dexterity","dexterity_mod","initmod","jack_of_all_trades","jack","init_tiebreaker","pb_type"];
_.each(idarray, function(currentID, i) {
attrs_to_get.push(inventory + currentID + "_equipped");
attrs_to_get.push(inventory + currentID + "_itemmodifiers");
});
getAttrs(attrs_to_get, function(v) {
var update = {};
var final_init = parseInt(v["dexterity_mod"], 10);
if(v["initmod"] && !isNaN(parseInt(v["initmod"], 10))) {
final_init = final_init + parseInt(v["initmod"], 10);
}
if(v["init_tiebreaker"] && v["init_tiebreaker"] != 0) {
final_init = final_init + (parseInt(v["dexterity"], 10)/100);
}
if(v["jack_of_all_trades"] && v["jack_of_all_trades"] != 0) {
if(v["pb_type"] && v["pb_type"] === "die" && v["jack"]) {
// final_init = final_init + Math.floor(parseInt(v["jack"].substring(1),10)/2);
final_init = final_init + "+" + v["jack"];
}
else if(v["jack"] && !isNaN(parseInt(v["jack"], 10))) {
final_init = final_init + parseInt(v["jack"], 10);
}
}
_.each(idarray, function(currentID){
if(v[inventory + currentID + "_equipped"] && v[inventory + currentID + "_equipped"] === "1" && v[inventory + currentID + "_itemmodifiers"] && v[inventory + currentID + "_itemmodifiers"].toLowerCase().indexOf("ability checks") > -1) {
var mods = v[inventory + currentID + "_itemmodifiers"].toLowerCase().split(",");
_.each(mods, function(mod) {
if(mod.indexOf("ability checks") > -1) {
if(mod.indexOf("-") > -1) {
var new_mod = !isNaN(parseInt(mod.replace(/[^0-9]/g, ""), 10)) ? parseInt(mod.replace(/[^0-9]/g, ""), 10) : false;
final_init = new_mod ? final_init - new_mod : final_init;
}
else {
var new_mod = !isNaN(parseInt(mod.replace(/[^0-9]/g, ""), 10)) ? parseInt(mod.replace(/[^0-9]/g, ""), 10) : false;
final_init = new_mod ? final_init + new_mod : final_init;
}
}
});
}
});
if(final_init % 1 != 0) {
final_init = parseFloat(final_init.toPrecision(12)); // ROUNDING ERROR BUGFIX
}
update["initiative_bonus"] = final_init;
setAttrs(update, {silent: true});
});
};
var update_class = function() {
getAttrs(["class","base_level","custom_class","cust_classname","cust_hitdietype","cust_powercasting_ability","cust_strength_save_prof","cust_dexterity_save_prof","cust_constitution_save_prof","cust_intelligence_save_prof","cust_wisdom_save_prof","cust_charisma_save_prof","strength_save_prof","dexterity_save_prof","constitution_save_prof","intelligence_save_prof","wisdom_save_prof","charisma_save_prof","subclass","multiclass1","multiclass1_subclass","multiclass2","multiclass2_subclass","multiclass3","multiclass3_subclass","npc"], function(v) {
if(v.npc && v.npc == "1") {
return;
}
if(v.custom_class && v.custom_class != "0") {
setAttrs({
hitdietype: v.cust_hitdietype,
powercasting_ability: v.cust_powercasting_ability,
strength_save_prof: v.cust_strength_save_prof,
dexterity_save_prof: v.cust_dexterity_save_prof,
constitution_save_prof: v.cust_constitution_save_prof,
intelligence_save_prof: v.cust_intelligence_save_prof,
wisdom_save_prof: v.cust_wisdom_save_prof,
charisma_save_prof: v.cust_charisma_save_prof
});
}
else {
update = {};
switch(v.class) {
case "":
update["hitdietype"] = 6;
update["powercasting_ability"] = "0*";
update["strength_save_prof"] = 0;
update["dexterity_save_prof"] = 0;
update["constitution_save_prof"] = 0;
update["intelligence_save_prof"] = 0;
update["wisdom_save_prof"] = 0;
update["charisma_save_prof"] = 0;
update["class_resource_name"] = "";
break;
case "Berserker":
update["hitdietype"] = 12;
update["powercasting_ability"] = "0*";
update["strength_save_prof"] = "(@{pb})";
update["dexterity_save_prof"] = 0;
update["constitution_save_prof"] = "(@{pb})";
update["intelligence_save_prof"] = 0;
update["wisdom_save_prof"] = 0;
update["charisma_save_prof"] = 0;
update["class_resource_name"] = "Rage";
break;
case "Scholar":
update["hitdietype"] = 8;
update["powercasting_ability"] = "@{intelligence_mod}+";
update["strength_save_prof"] = 0;
update["dexterity_save_prof"] = 0;
update["constitution_save_prof"] = 0;
update["intelligence_save_prof"] = "(@{pb})";
update["wisdom_save_prof"] = "(@{pb})";
update["charisma_save_prof"] = 0;
update["class_resource_name"] = "Superiority Dice";
break;
case "Engineer":
update["hitdietype"] = 8;
update["powercasting_ability"] = "@{intelligence_mod}+";
update["strength_save_prof"] = 0;
update["dexterity_save_prof"] = 0;
update["constitution_save_prof"] = "(@{pb})";
update["intelligence_save_prof"] = "(@{pb})";
update["wisdom_save_prof"] = 0;
update["charisma_save_prof"] = 0;
update["class_resource_name"] = "Potent Aptitude";
break;
case "Fighter":
update["hitdietype"] = 10;
update["powercasting_ability"] = "0*";
update["strength_save_prof"] = "(@{pb})";
update["dexterity_save_prof"] = 0;
update["constitution_save_prof"] = "(@{pb})";
update["intelligence_save_prof"] = 0;
update["wisdom_save_prof"] = 0;
update["charisma_save_prof"] = 0;
update["class_resource_name"] = "Second Wind";
break;
case "Monk":
update["hitdietype"] = 8;
update["powercasting_ability"] = "0*";
update["strength_save_prof"] = "(@{pb})";
update["dexterity_save_prof"] = "(@{pb})";
update["constitution_save_prof"] = 0;
update["intelligence_save_prof"] = 0;
update["wisdom_save_prof"] = 0;
update["charisma_save_prof"] = 0;
update["class_resource_name"] = "Ki";
break;
case "Guardian":
update["hitdietype"] = 10;
update["powercasting_ability"] = "@{wisdom_mod}+";
update["strength_save_prof"] = 0;
update["dexterity_save_prof"] = 0;
update["constitution_save_prof"] = "(@{pb})";
update["intelligence_save_prof"] = 0;
update["wisdom_save_prof"] = 0;
update["charisma_save_prof"] = "(@{pb})";
update["class_resource_name"] = "Channel The Force";
break;
case "Scout":
update["hitdietype"] = 10;
update["powercasting_ability"] = "@{intelligence_mod}+";
update["strength_save_prof"] = "(@{pb})";
update["dexterity_save_prof"] = "(@{pb})";
update["constitution_save_prof"] = 0;
update["intelligence_save_prof"] = 0;
update["wisdom_save_prof"] = 0;
update["charisma_save_prof"] = 0;
update["class_resource_name"] = "";
break;
case "Operative":
update["hitdietype"] = 8;
update["powercasting_ability"] = "0*";
update["strength_save_prof"] = 0;
update["dexterity_save_prof"] = "(@{pb})";
update["constitution_save_prof"] = 0;
update["intelligence_save_prof"] = "(@{pb})";
update["wisdom_save_prof"] = 0;
update["charisma_save_prof"] = 0;
update["class_resource_name"] = "";
break;
case "Sentinel":
update["hitdietype"] = 8;
update["powercasting_ability"] = "@{wisdom_mod}+";
update["strength_save_prof"] = 0;
update["dexterity_save_prof"] = "(@{pb})";
update["constitution_save_prof"] = 0;
update["intelligence_save_prof"] = 0;
update["wisdom_save_prof"] = 0;
update["charisma_save_prof"] = "(@{pb})";
update["class_resource_name"] = "Force Points";
break;
case "Consular":
update["hitdietype"] = 6;
update["powercasting_ability"] = "@{wisdom_mod}+";
update["strength_save_prof"] = 0;
update["dexterity_save_prof"] = 0;
update["constitution_save_prof"] = 0;
update["intelligence_save_prof"] = 0;
update["wisdom_save_prof"] = "(@{pb})";
update["charisma_save_prof"] = "(@{pb})";
update["class_resource_name"] = "";
break;
}
setAttrs(update, {silent: true});
};
});
set_level();
};
var update_ship_speeds = function() {
getAttrs(["ship_size", "dexterity_mod", "constitution_mod", "strength_mod", "custom_speed_flag"], function(attributes) {
if(attributes.custom_speed_flag == "1") {
return;
}
var update = {};
var baseTurningSpeed = 0;
var baseFlyingSpeed = 0;
switch(attributes.ship_size) {
case "Tiny":
baseTurningSpeed = 300;
baseFlyingSpeed = 400;
break;
case "Small":
baseTurningSpeed = 250;
baseFlyingSpeed = 350;
break;
case "Medium":
baseTurningSpeed = 200;
baseFlyingSpeed = 300;
break;
case "Large":
baseTurningSpeed = 150;
baseFlyingSpeed = 250;
break;
case "Huge":
baseTurningSpeed = 100;
baseFlyingSpeed = 200;
break;
case "Gargantuan":
baseTurningSpeed = 50;
baseFlyingSpeed = 150;
break;
default:
baseTurningSpeed = 0;
break;
}
update["ship_flyspeed"] = baseFlyingSpeed + 50 * (attributes.strength_mod - attributes.constitution_mod);
if(update["ship_flyspeed"] < 0) {
update["ship_flyspeed"] = 0;
}
update["ship_turnspeed"] = baseTurningSpeed - 50 * (attributes.dexterity_mod - attributes.constitution_mod);
if(update["ship_turnspeed"] < 50) {
update["ship_flyspeed"] = update["ship_flyspeed"] + (50 - update["ship_turnspeed"]);
update["ship_turnspeed"] = 50;
}
setAttrs(update, {silent: true});
});
};
var set_level = function() {
getAttrs(["base_level","multiclass1_flag","multiclass2_flag","multiclass3_flag","multiclass1_lvl","multiclass2_lvl","multiclass3_lvl","class","multiclass1","multiclass2","multiclass3", "tech_fighter", "tech_operative", "custom_class", "cust_powerslots", "cust_classname", "level_calculations", "class", "subclass", "multiclass1_subclass","multiclass2_subclass","multiclass3_subclass"], function(v) {
var update = {};
var callbacks = [];
var multiclass = (v.multiclass1_flag && v.multiclass1_flag === "1") || (v.multiclass2_flag && v.multiclass2_flag === "1") || (v.multiclass3_flag && v.multiclass3_flag === "1") ? true : false;
var finalclass = v["custom_class"] && v["custom_class"] != "0" ? v["cust_powerslots"] : v["class"];
var finallevel = (v.base_level && v.base_level > 0) ? parseInt(v.base_level,10) : 1;
var charclass = v.custom_class && v.custom_class != "0" ? v["cust_classname"] : v["class"];
var hitdie_final = multiclass ? "?{Hit Die Class|" + charclass + ",@{hitdietype}" : "@{hitdietype}";
var subclass = v.subclass ? v.subclass + " " : "";
var class_display = subclass + charclass + " " + finallevel;
// This nested array is used to determine the overall powercasting level for the character.
var classes = [ [finalclass.toLowerCase(), v["base_level"]] ];
if(v.multiclass1_flag && v.multiclass1_flag === "1") {
var multiclasslevel = (v["multiclass1_lvl"] && v["multiclass1_lvl"] > 0) ? parseInt(v["multiclass1_lvl"], 10) : 1;
finallevel = finallevel + multiclasslevel;
hitdie_final = hitdie_final + "|" + v["multiclass1"].charAt(0).toUpperCase() + v["multiclass1"].slice(1) + "," + checkHitDie(v["multiclass1"]);
classes.push([ v["multiclass1"], multiclasslevel ]);
var subclass = v.multiclass1_subclass ? v.multiclass1_subclass + " " : "";
class_display = class_display + ", " + subclass + v.multiclass1 + " " + multiclasslevel;
};
if(v.multiclass2_flag && v.multiclass2_flag === "1") {
var multiclasslevel = (v["multiclass2_lvl"] && v["multiclass2_lvl"] > 0) ? parseInt(v["multiclass2_lvl"], 10) : 1;
finallevel = finallevel + multiclasslevel;
hitdie_final = hitdie_final + "|" + v["multiclass2"].charAt(0).toUpperCase() + v["multiclass2"].slice(1) + "," + checkHitDie(v["multiclass2"]);
classes.push([ v["multiclass2"], multiclasslevel ]);
var subclass = v.multiclass2_subclass ? v.multiclass2_subclass + " " : "";
class_display = class_display + ", " + subclass + v.multiclass2 + " " + multiclasslevel;
};
if(v.multiclass3_flag && v.multiclass3_flag === "1") {
var multiclasslevel = (v["multiclass3_lvl"] && v["multiclass3_lvl"] > 0) ? parseInt(v["multiclass3_lvl"], 10) : 1;
finallevel = finallevel + multiclasslevel;
hitdie_final = hitdie_final + "|" + v["multiclass3"].charAt(0).toUpperCase() + v["multiclass3"].slice(1) + "," + checkHitDie(v["multiclass3"]);
classes.push([ v["multiclass3"], multiclasslevel ]);
var subclass = v.multiclass3_subclass ? v.multiclass3_subclass + " " : "";
class_display = class_display + ", " + subclass + v.multiclass3 + " " + multiclasslevel;
};
var casterlevel = checkCasterLevel(classes, v["tech_fighter"], v["tech_operative"]);
update["hitdie_final"] = multiclass ? hitdie_final + "}" : hitdie_final;
update["level"] = finallevel;
update["caster_level"] = casterlevel;
update["class_display"] = class_display;
if(!v["level_calculations"] || v["level_calculations"] == "on") {
update["hit_dice_max"] = finallevel;
callbacks.push( function() {update_power_slots();} );
}
callbacks.push( function() {update_pb();} );
setAttrs(update, {silent: true}, function() {callbacks.forEach(function(callback) {callback(); })} );
});
};
var isMultiCaster = function(classes, tech_fighter, tech_operative) {
var singlecaster = false;
var multicaster = false;
_.each(classes, function(multiclass) {
var caster = getCasterType(multiclass[0], multiclass[1], tech_fighter, tech_operative) > 0;
if(caster && singlecaster) {
multicaster = true;
} else if(caster) {
singlecaster = true;
}
});
return multicaster;
};
var getCasterType = function(class_string, levels, tech_fighter, tech_operative) {
var full = ["scholar","engineer","druid","sorcerer","consular","full"];
var half = ["guardian","scout","half"];
if(full.indexOf(class_string) != -1) {
return 1;
} else if(half.indexOf(class_string) != -1) {
return (levels == 1) ? 0 : (1/2);
} else if(class_string === "third" || (class_string === "fighter" && tech_fighter === "1") || (class_string === "operative" && tech_operative === "1")) {
return (levels == 1 || levels == 2) ? 0 : (1/3);
} else {
return 0;
}
};
var checkCasterLevel = function(classes, tech_fighter, tech_operative) {
console.log("CHECKING CASTER LEVEL");
var multicaster = isMultiCaster(classes, tech_fighter, tech_operative);
var totalcasterlevel = 0;
_.each(classes, function(multiclass) {
var casterlevel = parseInt(multiclass[1], 10) * getCasterType(multiclass[0], multiclass[1], tech_fighter, tech_operative);
// Characters with multiple powercasting classes round down the casting level for that class
// Character with a single powercasting class round up the casting level
totalcasterlevel = totalcasterlevel + (multicaster ? Math.floor(casterlevel) : Math.ceil(casterlevel));
});
return totalcasterlevel;
};
var checkHitDie = function(class_string) {
var d10class = ["fighter","guardian","scout"];
var d8class = ["scholar","engineer","druid","monk","operative","sentinel"];
var d6class = ["sorcerer","consular"];
if(class_string === "berserker") {return "12"}
else if (d10class.indexOf(class_string) != -1) {return "10"}
else if (d8class.indexOf(class_string) != -1) {return "8"}
else if (d6class.indexOf(class_string) != -1) {return "6"}
else {return "0"};
};
var update_power_slots = function() {
getAttrs(["lvl1_slots_mod","lvl2_slots_mod","lvl3_slots_mod","lvl4_slots_mod","lvl5_slots_mod","lvl6_slots_mod","lvl7_slots_mod","lvl8_slots_mod","lvl9_slots_mod","caster_level"], function(v) {
var update = {};
var lvl = v["caster_level"] && !isNaN(parseInt(v["caster_level"], 10)) ? parseInt(v["caster_level"], 10) : 0;
var l1 = v["lvl1_slots_mod"] && !isNaN(parseInt(v["lvl1_slots_mod"], 10)) ? parseInt(v["lvl1_slots_mod"], 10) : 0;
var l2 = v["lvl2_slots_mod"] && !isNaN(parseInt(v["lvl2_slots_mod"], 10)) ? parseInt(v["lvl2_slots_mod"], 10) : 0;
var l3 = v["lvl3_slots_mod"] && !isNaN(parseInt(v["lvl3_slots_mod"], 10)) ? parseInt(v["lvl3_slots_mod"], 10) : 0;
var l4 = v["lvl4_slots_mod"] && !isNaN(parseInt(v["lvl4_slots_mod"], 10)) ? parseInt(v["lvl4_slots_mod"], 10) : 0;
var l5 = v["lvl5_slots_mod"] && !isNaN(parseInt(v["lvl5_slots_mod"], 10)) ? parseInt(v["lvl5_slots_mod"], 10) : 0;
var l6 = v["lvl6_slots_mod"] && !isNaN(parseInt(v["lvl6_slots_mod"], 10)) ? parseInt(v["lvl6_slots_mod"], 10) : 0;
var l7 = v["lvl7_slots_mod"] && !isNaN(parseInt(v["lvl7_slots_mod"], 10)) ? parseInt(v["lvl7_slots_mod"], 10) : 0;
var l8 = v["lvl8_slots_mod"] && !isNaN(parseInt(v["lvl8_slots_mod"], 10)) ? parseInt(v["lvl8_slots_mod"], 10) : 0;
var l9 = v["lvl9_slots_mod"] && !isNaN(parseInt(v["lvl9_slots_mod"], 10)) ? parseInt(v["lvl9_slots_mod"], 10) : 0;
if(lvl > 0) {
l1 = l1 + Math.min((lvl + 1),4);
if(lvl < 3) {l2 = l2 + 0;} else if(lvl === 3) {l2 = l2 + 2;} else {l2 = l2 + 3;};
if(lvl < 5) {l3 = l3 + 0;} else if(lvl === 5) {l3 = l3 + 2;} else {l3 = l3 + 3;};
if(lvl < 7) {l4 = l4 + 0;} else if(lvl === 7) {l4 = l4 + 1;} else if(lvl === 8) {l4 = l4 + 2;} else {l4 = l4 + 3;};
if(lvl < 9) {l5 = l5 + 0;} else if(lvl === 9) {l5 = l5 + 1;} else if(lvl < 18) {l5 = l5 + 2;} else {l5 = l5 + 3;};
if(lvl < 11) {l6 = l6 + 0;} else if(lvl < 19) {l6 = l6 + 1;} else {l6 = l6 + 2;};
if(lvl < 13) {l7 = l7 + 0;} else if(lvl < 20) {l7 = l7 + 1;} else {l7 = l7 + 2;};
if(lvl < 15) {l8 = l8 + 0;} else {l8 = l8 + 1;};
if(lvl < 17) {l9 = l9 + 0;} else {l9 = l9 + 1;};
};
update["lvl1_slots_total"] = l1;
update["lvl2_slots_total"] = l2;
update["lvl3_slots_total"] = l3;
update["lvl4_slots_total"] = l4;
update["lvl5_slots_total"] = l5;
update["lvl6_slots_total"] = l6;
update["lvl7_slots_total"] = l7;
update["lvl8_slots_total"] = l8;
update["lvl9_slots_total"] = l9;
setAttrs(update, {silent: true});
});
};
var update_pb = function() {
callbacks = [];
getAttrs(["level","pb_type","pb_custom","npc"], function(v) {
if(v.npc !== "2") {
var update = {};
var pb = 2;
var lvl = parseInt(v["level"],10);
if(lvl < 5) {pb = "2"} else if(lvl < 9) {pb = "3"} else if(lvl < 13) {pb = "4"} else if(lvl < 17) {pb = "5"} else {pb = "6"}
var jack = Math.floor(pb/2);
if(v["pb_type"] === "die") {
update["jack"] = "d" + pb;
update["pb"] = "d" + pb*2;
update["pbd_safe"] = "cs0cf0";
}
else if(v["pb_type"] === "custom" && v["pb_custom"] && v["pb_custom"] != "") {
update["pb"] = v["pb_custom"]
update["jack"] = !isNaN(parseInt(v["pb_custom"],10)) ? Math.floor(parseInt(v["pb_custom"],10)/2) : jack;
update["pbd_safe"] = "";
}
else {
update["pb"] = pb;
update["jack"] = jack;
update["pbd_safe"] = "";
};
}
callbacks.push( function() {update_attacks("all");} );
callbacks.push( function() {update_power_info();} );
callbacks.push( function() {update_jack_attr();} );
callbacks.push( function() {update_initiative();} );
callbacks.push( function() {update_tool("all");} );
callbacks.push( function() {update_all_saves();} );
callbacks.push( function() {update_skills(["athletics", "acrobatics", "sleight_of_hand", "stealth", "technology", "lore", "investigation", "nature", "piloting", "animal_handling", "insight", "medicine", "perception", "survival","deception", "intimidation", "performance", "persuasion", "ship_boost", "ship_ram", "ship_hide", "ship_maneuvering", "ship_patch", "ship_regulation", "ship_astrogation", "ship_data", "ship_probe", "ship_scan", "ship_impress", "ship_interfere", "ship_menace", "ship_swindle"]);} );
setAttrs(update, {silent: true}, function() {callbacks.forEach(function(callback) {callback(); })} );
});
};
var update_jack_attr = function() {
var update = {};
getAttrs(["jack_of_all_trades","jack"], function(v) {
if(v["jack_of_all_trades"] && v["jack_of_all_trades"] != 0) {
update["jack_bonus"] = "+" + v["jack"];
update["jack_attr"] = "+" + v["jack"] + "@{pbd_safe}";
}
else {
update["jack_bonus"] = "";
update["jack_attr"] = "";
}
setAttrs(update, {silent: true});
});
};
var update_power_info = function(attr) {
var update = {};
getAttrs(["powercasting_ability","power_dc_mod","globalpowermod","strength_mod","dexterity_mod","constitution_mod","intelligence_mod","wisdom_mod","charisma_mod"], function(v) {
if(attr && v["powercasting_ability"] && v["powercasting_ability"].indexOf(attr) === -1) {
return
};
if(!v["powercasting_ability"] || (v["powercasting_ability"] && v["powercasting_ability"] === "0*")) {
update["power_attack_bonus"] = "0";
update["power_save_dc"] = "0";
var callback = function() {update_attacks("powers")};
setAttrs(update, {silent: true}, callback);
return
};
var attr = attr ? attr : "";
console.log("UPDATING POWER INFO: " + attr);
var ability = parseInt(v[v["powercasting_ability"].substring(2,v["powercasting_ability"].length-2)],10);
var power_mod = v["globalpowermod"] && !isNaN(parseInt(v["globalpowermod"], 10)) ? parseInt(v["globalpowermod"], 10) : 0;
var atk = v["globalpowermod"] && !isNaN(parseInt(v["globalpowermod"], 10)) ? ability + parseInt(v["globalpowermod"], 10) : ability;
var dc = v["power_dc_mod"] && !isNaN(parseInt(v["power_dc_mod"], 10)) ? 8 + ability + parseInt(v["power_dc_mod"], 10) : 8 + ability;
var itemfields = ["pb_type","pb"];
getSectionIDs("repeating_inventory", function(idarray) {
update_inventory_from_power_info_change("repeating_inventory_", idarray, power_mod, atk, dc, itemfields, update);
});
getSectionIDs("repeating_hiddeninventory", function(idarray) {
update_inventory_from_power_info_change("repeating_hiddeninventory_", idarray, power_mod, atk, dc, itemfields, update);
});
});
};
var update_inventory_from_power_info_change = function(inventory, idarray, power_mod, atk, dc, itemfields, update) {
_.each(idarray, function(currentID, i) {
itemfields.push(inventory + currentID + "_equipped");
itemfields.push(inventory + currentID + "_itemmodifiers");
});
getAttrs(itemfields, function(v) {
_.each(idarray, function(currentID) {
if((!v[inventory + currentID + "_equipped"] || v[inventory + currentID + "_equipped"] === "1") && v[inventory + currentID + "_itemmodifiers"] && v[inventory + currentID + "_itemmodifiers"].toLowerCase().indexOf("power" > -1)) {
var mods = v[inventory + currentID + "_itemmodifiers"].toLowerCase().split(",");
_.each(mods, function(mod) {
if(mod.indexOf("power attack") > -1) {
var substr = mod.slice(mod.lastIndexOf("power attack") + "power attack".length);
atk = substr && substr.length > 0 && !isNaN(parseInt(substr,10)) ? atk + parseInt(substr,10) : atk;
power_mod = substr && substr.length > 0 && !isNaN(parseInt(substr,10)) ? power_mod + parseInt(substr,10) : power_mod;
};
if(mod.indexOf("power dc") > -1) {
var substr = mod.slice(mod.lastIndexOf("power dc") + "power dc".length);
dc = substr && substr.length > 0 && !isNaN(parseInt(substr,10)) ? dc + parseInt(substr,10) : dc;
};
});
};
});
if(v["pb_type"] && v["pb_type"] === "die") {
atk = atk + "+" + v["pb"];
dc = dc + parseInt(v["pb"].substring(1), 10) / 2;
}
else {
atk = parseInt(atk, 10) + parseInt(v["pb"], 10);
dc = parseInt(dc, 10) + parseInt(v["pb"], 10);
};
update["power_attack_mod"] = power_mod;
update["power_attack_bonus"] = atk;
update["power_save_dc"] = dc;
var callback = function() {update_attacks("powers")};
setAttrs(update, {silent: true}, callback);
});
};
var update_passive_perception = function() {
getAttrs(["pb_type","passiveperceptionmod","perception_bonus"], function(v) {
var passive_perception = 10;
var mod = !isNaN(parseInt(v["passiveperceptionmod"],10)) ? parseInt(v["passiveperceptionmod"],10) : 0;
var bonus = !isNaN(parseInt(v["perception_bonus"],10)) ? parseInt(v["perception_bonus"],10) : 0;
if(v["pb_type"] && v["pb_type"] === "die" && v["perception_bonus"] && isNaN(v["perception_bonus"]) && v["perception_bonus"].indexOf("+") > -1) {
var pieces = v["perception_bonus"].split(/\+|d/);
var base = !isNaN(parseInt(pieces[0],10)) ? parseInt(pieces[0],10) : 0;
var num_dice = !isNaN(parseInt(pieces[1],10)) ? parseInt(pieces[1],10) : 1;
var half_pb_die = !isNaN(parseInt(pieces[2],10)) ? parseInt(pieces[2],10)/2 : 2;
bonus = base + (num_dice * half_pb_die);
}
passive_perception = passive_perception + bonus + mod;
setAttrs({passive_wisdom: passive_perception})
});
};
var update_race_display = function() {
getAttrs(["race", "subrace"], function(v) {
var final_race = "";
final_race = v.subrace ? v.subrace : v.race;
if(v.race.toLowerCase() === "dragonborn") { final_race = v.race; };
setAttrs({race_display: final_race});
});
};
var organize_section_proficiencies = function() {
getSectionIDs("proficiencies", function(ids) {
var attribs = ["_reporder_repeating_proficiencies"];
_.each(ids, function(id) {
attribs.push("repeating_proficiencies_" + id + "_prof_type");
attribs.push("repeating_proficiencies_" + id + "_name");
});
getAttrs(attribs, function(v) {
var final_array = _(ids).chain().sortBy(function(id) {
return v["repeating_proficiencies_" + id + "_name"];
}).sortBy(function(id) {
return v["repeating_proficiencies_" + id + "_prof_type"];
}).value();
_.each(final_array, function(id) {
});
if(final_array && final_array.length > 0) {
setSectionOrder("proficiencies", final_array);
};
});
});
};
var update_challenge = function() {
getAttrs(["npc_challenge"], function(v) {
var update = {};
var xp = 0;
var pb = 0;
switch(v.npc_challenge) {
case "0":
xp = "10";
pb = 2;
break;
case "1/8":
xp = "25";
pb = 2;
break;
case "1/4":
xp = "50";
pb = 2;
break;
case "1/2":
xp = "100";
pb = 2;
break;
case "1":
xp = "200";
pb = 2;
break;
case "2":
xp = "450";
pb = 2;
break;
case "3":
xp = "700";
pb = 2;
break;
case "4":
xp = "1100";
pb = 2;
break;
case "5":
xp = "1800";
pb = 3;
break;
case "6":
xp = "2300";
pb = 3;
break;
case "7":
xp = "2900";
pb = 3;
break;
case "8":
xp = "3900";
pb = 3;
break;
case "9":
xp = "5000";
pb = 4;
break;
case "10":
xp = "5900";
pb = 4;
break;
case "11":
xp = "7200";
pb = 4;
break;
case "12":
xp = "8400";
pb = 4;
break;
case "13":
xp = "10000";
pb = 5;
break;
case "14":
xp = "11500";
pb = 5;
break;
case "15":
xp = "13000";
pb = 5;
break;
case "16":
xp = "15000";
pb = 5;
break;
case "17":
xp = "18000";
pb = 6;
break;
case "18":
xp = "20000";
pb = 6;
break;
case "19":
xp = "22000";
pb = 6;
break;
case "20":
xp = "25000";
pb = 6;
break;
case "21":
xp = "33000";
pb = 7;
break;
case "22":
xp = "41000";
pb = 7;
break;
case "23":
xp = "50000";
pb = 7;
break;
case "24":
xp = "62000";
pb = 7;
break;
case "25":
xp = "75000";
pb = 8;
break;
case "26":
xp = "90000";
pb = 8;
break;
case "27":
xp = "105000";
pb = 8;
break;
case "28":
xp = "120000";
pb = 8;
break;
case "29":
xp = "";
pb = 9;
break;
case "30":
xp = "155000";
pb = 9;
break;
}
update["npc_xp"] = xp;
update["pb_custom"] = pb;
update["pb_type"] = "custom";
setAttrs(update, {silent: true}, function() {update_pb()});
});
};
var update_npc_saves = function() {
getAttrs(["npc_str_save_base","npc_dex_save_base","npc_con_save_base","npc_int_save_base","npc_wis_save_base","npc_cha_save_base"], function(v) {
var update = {};
var last_save = 0; var cha_save_flag = 0; var cha_save = ""; var wis_save_flag = 0; var wis_save = ""; var int_save_flag = 0; var int_save = ""; var con_save_flag = 0; var con_save = ""; var dex_save_flag = 0; var dex_save = ""; var str_save_flag = 0; var str_save = "";
// 1 = Positive, 2 = Last, 3 = Negative, 4 = Last Negative
if(v.npc_cha_save_base && v.npc_cha_save_base != "@{charisma_mod}") {cha_save = parseInt(v.npc_cha_save_base, 10); if(last_save === 0) {last_save = 1; cha_save_flag = cha_save < 0 ? 4 : 2;} else {cha_save_flag = cha_save < 0 ? 3 : 1;} } else {cha_save_flag = 0; cha_save = "";};
if(v.npc_wis_save_base && v.npc_wis_save_base != "@{wisdom_mod}") {wis_save = parseInt(v.npc_wis_save_base, 10); if(last_save === 0) {last_save = 1; wis_save_flag = wis_save < 0 ? 4 : 2;} else {wis_save_flag = wis_save < 0 ? 3 : 1;} } else {wis_save_flag = 0; wis_save = "";};
if(v.npc_int_save_base && v.npc_int_save_base != "@{intelligence_mod}") {int_save = parseInt(v.npc_int_save_base, 10); if(last_save === 0) {last_save = 1; int_save_flag = int_save < 0 ? 4 : 2;} else {int_save_flag = int_save < 0 ? 3 : 1;} } else {int_save_flag = 0; int_save = "";};
if(v.npc_con_save_base && v.npc_con_save_base != "@{constitution_mod}") {con_save = parseInt(v.npc_con_save_base, 10); if(last_save === 0) {last_save = 1; con_save_flag = con_save < 0 ? 4 : 2;} else {con_save_flag = con_save < 0 ? 3 : 1;} } else {con_save_flag = 0; con_save = "";};
if(v.npc_dex_save_base && v.npc_dex_save_base != "@{dexterity_mod}") {dex_save = parseInt(v.npc_dex_save_base, 10); if(last_save === 0) {last_save = 1; dex_save_flag = dex_save < 0 ? 4 : 2;} else {dex_save_flag = dex_save < 0 ? 3 : 1;} } else {dex_save_flag = 0; dex_save = "";};
if(v.npc_str_save_base && v.npc_str_save_base != "@{strength_mod}") {str_save = parseInt(v.npc_str_save_base, 10); if(last_save === 0) {last_save = 1; str_save_flag = str_save < 0 ? 4 : 2;} else {str_save_flag = str_save < 0 ? 3 : 1;} } else {str_save_flag = 0; str_save = "";};
update["npc_saving_flag"] = "" + cha_save + wis_save + int_save + con_save + dex_save + str_save;
update["npc_str_save"] = str_save;
update["npc_str_save_flag"] = str_save_flag;
update["npc_dex_save"] = dex_save;
update["npc_dex_save_flag"] = dex_save_flag;
update["npc_con_save"] = con_save;
update["npc_con_save_flag"] = con_save_flag;
update["npc_int_save"] = int_save;
update["npc_int_save_flag"] = int_save_flag;
update["npc_wis_save"] = wis_save;
update["npc_wis_save_flag"] = wis_save_flag;
update["npc_cha_save"] = cha_save;
update["npc_cha_save_flag"] = cha_save_flag;
setAttrs(update, {silent: true});
});
};
var update_npc_skills = function() {
getAttrs(["npc_acrobatics_base","npc_animal_handling_base","npc_technology_base","npc_athletics_base","npc_deception_base","npc_lore_base","npc_insight_base","npc_intimidation_base","npc_investigation_base","npc_medicine_base","npc_nature_base","npc_perception_base","npc_performance_base","npc_persuasion_base","npc_piloting_base","npc_sleight_of_hand_base","npc_stealth_base","npc_survival_base"], function(v) {
var update = {};
var last_skill = 0;
var survival_flag = 0; var survival = ""; var stealth_flag = 0; var stealth = ""; var sleight_of_hand_flag = 0; var sleight_of_hand = ""; var piloting_flag = 0; var piloting = ""; var persuasion_flag = 0; var persuasion = ""; var performance_flag = 0; var sperformance = ""; var perception_flag = 0; var perception = ""; var perception_flag = 0; var perception = ""; var nature_flag = 0; var nature = ""; var medicine_flag = 0; var medicine = ""; var investigation_flag = 0; var investigation = ""; var intimidation_flag = 0; var intimidation = ""; var insight_flag = 0; var insight = ""; var lore_flag = 0; var lore = ""; var deception_flag = 0; var deception = ""; var athletics_flag = 0; var athletics = ""; var technology_flag = 0; var technology = ""; var animal_handling_flag = 0; var animal_handling = ""; var acrobatics_flag = 0; var acrobatics = "";
// 1 = Positive, 2 = Last, 3 = Negative, 4 = Last Negative
if(v.npc_survival_base && v.npc_survival_base != "@{wisdom_mod}") {survival = parseInt(v.npc_survival_base, 10); if(last_skill === 0) {last_skill = 1; survival_flag = survival < 0 ? 4 : 2;} else {survival_flag = survival < 0 ? 3 : 1;} } else {survival_flag = 0; survival = "";};
if(v.npc_stealth_base && v.npc_stealth_base != "@{dexterity_mod}") {stealth = parseInt(v.npc_stealth_base, 10); if(last_skill === 0) {last_skill = 1; stealth_flag = stealth < 0 ? 4 : 2;} else {stealth_flag = stealth < 0 ? 3 : 1;} } else {stealth_flag = 0; stealth = "";};
if(v.npc_sleight_of_hand_base && v.npc_sleight_of_hand_base != "@{dexterity_mod}") {sleight_of_hand = parseInt(v.npc_sleight_of_hand_base, 10); if(last_skill === 0) {last_skill = 1; sleight_of_hand_flag = sleight_of_hand < 0 ? 4 : 2;} else {sleight_of_hand_flag = sleight_of_hand < 0 ? 3 : 1;} } else {sleight_of_hand_flag = 0; sleight_of_hand = "";};
if(v.npc_piloting_base && v.npc_piloting_base != "@{intelligence_mod}") {piloting = parseInt(v.npc_piloting_base, 10); if(last_skill === 0) {last_skill = 1; piloting_flag = piloting < 0 ? 4 : 2;} else {piloting_flag = piloting < 0 ? 3 : 1;} } else {piloting_flag = 0; piloting = "";};
if(v.npc_persuasion_base && v.npc_persuasion_base != "@{charisma_mod}") {persuasion = parseInt(v.npc_persuasion_base, 10); if(last_skill === 0) {last_skill = 1; persuasion_flag = persuasion < 0 ? 4 : 2;} else {persuasion_flag = persuasion < 0 ? 3 : 1;} } else {persuasion_flag = 0; persuasion = "";};
if(v.npc_performance_base && v.npc_performance_base != "@{charisma_mod}") {sperformance = parseInt(v.npc_performance_base, 10); if(last_skill === 0) {last_skill = 1; performance_flag = sperformance < 0 ? 4 : 2;} else {performance_flag = sperformance < 0 ? 3 : 1;} } else {performance_flag = 0; sperformance = "";};
if(v.npc_perception_base && v.npc_perception_base != "@{wisdom_mod}") {perception = parseInt(v.npc_perception_base, 10); if(last_skill === 0) {last_skill = 1; perception_flag = perception < 0 ? 4 : 2;} else {perception_flag = perception < 0 ? 3 : 1;} } else {perception_flag = 0; perception = "";};
if(v.npc_nature_base && v.npc_nature_base != "@{intelligence_mod}") {nature = parseInt(v.npc_nature_base, 10); if(last_skill === 0) {last_skill = 1; nature_flag = nature < 0 ? 4 : 2;} else {nature_flag = nature < 0 ? 3 : 1;} } else {nature_flag = 0; nature = "";};
if(v.npc_medicine_base && v.npc_medicine_base != "@{wisdom_mod}") {medicine = parseInt(v.npc_medicine_base, 10); if(last_skill === 0) {last_skill = 1; medicine_flag = medicine < 0 ? 4 : 2;} else {medicine_flag = medicine < 0 ? 3 : 1;} } else {medicine_flag = 0; medicine = "";};
if(v.npc_investigation_base && v.npc_investigation_base != "@{intelligence_mod}") {investigation = parseInt(v.npc_investigation_base, 10); if(last_skill === 0) {last_skill = 1; investigation_flag = investigation < 0 ? 4 : 2;} else {investigation_flag = investigation < 0 ? 3 : 1;} } else {investigation_flag = 0; investigation = "";};
if(v.npc_intimidation_base && v.npc_intimidation_base != "@{charisma_mod}") {intimidation = parseInt(v.npc_intimidation_base, 10); if(last_skill === 0) {last_skill = 1; intimidation_flag = intimidation < 0 ? 4 : 2;} else {intimidation_flag = intimidation < 0 ? 3 : 1;} } else {intimidation_flag = 0; intimidation = "";};
if(v.npc_insight_base && v.npc_insight_base != "@{wisdom_mod}") {insight = parseInt(v.npc_insight_base, 10); if(last_skill === 0) {last_skill = 1; insight_flag = insight < 0 ? 4 : 2;} else {insight_flag = insight < 0 ? 3 : 1;} } else {insight_flag = 0; insight = "";};
if(v.npc_lore_base && v.npc_lore_base != "@{intelligence_mod}") {lore = parseInt(v.npc_lore_base, 10); if(last_skill === 0) {last_skill = 1; lore_flag = lore < 0 ? 4 : 2;} else {lore_flag = lore < 0 ? 3 : 1;} } else {lore_flag = 0; lore = "";};
if(v.npc_deception_base && v.npc_deception_base != "@{charisma_mod}") {deception = parseInt(v.npc_deception_base, 10); if(last_skill === 0) {last_skill = 1; deception_flag = deception < 0 ? 4 : 2;} else {deception_flag = deception < 0 ? 3 : 1;} } else {deception_flag = 0; deception = "";};
if(v.npc_athletics_base && v.npc_athletics_base != "@{strength_mod}") {athletics = parseInt(v.npc_athletics_base, 10); if(last_skill === 0) {last_skill = 1; athletics_flag = athletics < 0 ? 4 : 2;} else {athletics_flag = athletics < 0 ? 3 : 1;} } else {athletics_flag = 0; athletics = "";};
if(v.npc_technology_base && v.npc_technology_base != "@{intelligence_mod}") {technology = parseInt(v.npc_technology_base, 10); if(last_skill === 0) {last_skill = 1; technology_flag = technology < 0 ? 4 : 2;} else {technology_flag = technology < 0 ? 3 : 1;} } else {technology_flag = 0; technology = "";};
if(v.npc_animal_handling_base && v.npc_animal_handling_base != "@{wisdom_mod}") {animal_handling = parseInt(v.npc_animal_handling_base, 10); if(last_skill === 0) {last_skill = 1; animal_handling_flag = animal_handling < 0 ? 4 : 2;} else {animal_handling_flag = animal_handling < 0 ? 3 : 1;} } else {animal_handling_flag = 0; animal_handling = "";};
if(v.npc_acrobatics_base && v.npc_acrobatics_base != "@{dexterity_mod}") {acrobatics = parseInt(v.npc_acrobatics_base, 10); if(last_skill === 0) {last_skill = 1; acrobatics_flag = acrobatics < 0 ? 4 : 2;} else {acrobatics_flag = acrobatics < 0 ? 3 : 1;} } else {acrobatics_flag = 0; acrobatics = "";};
update["npc_skills_flag"] = "" + acrobatics + animal_handling + technology + athletics + deception + lore + insight + intimidation + investigation + medicine + nature + perception + sperformance + persuasion + piloting + sleight_of_hand + stealth + survival;
update["npc_stealth_flag"] = stealth_flag;
update["npc_survival"] = survival;;
update["npc_acrobatics"] = acrobatics;
update["npc_acrobatics_flag"] = acrobatics_flag;
update["npc_animal_handling"] = animal_handling;
update["npc_animal_handling_flag"] = animal_handling_flag;
update["npc_technology"] = technology;
update["npc_technology_flag"] = technology_flag;
update["npc_athletics"] = athletics;
update["npc_athletics_flag"] = athletics_flag;
update["npc_deception"] = deception;
update["npc_deception_flag"] = deception_flag;
update["npc_lore"] = lore;
update["npc_lore_flag"] = lore_flag;
update["npc_insight"] = insight;
update["npc_insight_flag"] = insight_flag;
update["npc_intimidation"] = intimidation;
update["npc_intimidation_flag"] = intimidation_flag;
update["npc_investigation"] = investigation;
update["npc_investigation_flag"] = investigation_flag;
update["npc_medicine"] = medicine;
update["npc_medicine_flag"] = medicine_flag;
update["npc_nature"] = nature;
update["npc_nature_flag"] = nature_flag;
update["npc_perception"] = perception;
update["npc_perception_flag"] = perception_flag;
update["npc_performance"] = sperformance;
update["npc_performance_flag"] = performance_flag;
update["npc_persuasion"] = persuasion;
update["npc_persuasion_flag"] = persuasion_flag;
update["npc_piloting"] = piloting;
update["npc_piloting_flag"] = piloting_flag;
update["npc_sleight_of_hand"] = sleight_of_hand;
update["npc_sleight_of_hand_flag"] = sleight_of_hand_flag;
update["npc_stealth"] = stealth;
update["npc_stealth_flag"] = stealth_flag;
update["npc_survival"] = survival;
update["npc_survival_flag"] = survival_flag;
setAttrs(update, {silent: true});
});
};
var update_npc_action = function(update_id, legendary) {
if(update_id.substring(0,1) === "-" && update_id.length === 20) {
do_update_npc_action([update_id], legendary);
}
else if(update_id === "all") {
var legendary_array = [];
var actions_array = [];
getSectionIDs("repeating_npcaction-l", function(idarray) {
legendary_array = idarray;
if(legendary_array.length > 0) {
do_update_npc_action(legendary_array, true);
}
getSectionIDs("repeating_npcaction", function(idarray) {
actions_array = idarray.filter(function(i) {return legendary_array.indexOf(i) < 0;});
if(actions_array.length > 0) {
do_update_npc_action(actions_array, false);
};
});
});
};
};
var do_update_npc_action = function(action_array, legendary) {
var repvar = legendary ? "repeating_npcaction-l_" : "repeating_npcaction_";
var action_attribs = ["dtype"];
_.each(action_array, function(actionid) {
action_attribs.push(repvar + actionid + "_attack_flag");
action_attribs.push(repvar + actionid + "_attack_type");
action_attribs.push(repvar + actionid + "_attack_range");
action_attribs.push(repvar + actionid + "_attack_target");
action_attribs.push(repvar + actionid + "_attack_tohit");
action_attribs.push(repvar + actionid + "_attack_damage");
action_attribs.push(repvar + actionid + "_attack_damagetype");
action_attribs.push(repvar + actionid + "_attack_damage2");
action_attribs.push(repvar + actionid + "_attack_damagetype2");
});
getAttrs(action_attribs, function(v) {
_.each(action_array, function(actionid) {
console.log("UPDATING NPC ACTION: " + actionid);
var callbacks = [];
var update = {};
var onhit = "";
var damage_flag = "";
var range = "";
var attack_flag = v[repvar + actionid + "_attack_flag"] && v[repvar + actionid + "_attack_flag"] != "0" ? "{{attack=1}}" : "";
var tohit = v[repvar + actionid + "_attack_tohit"] && isNaN(parseInt(v[repvar + actionid + "_attack_tohit"], 10)) === false ? parseInt(v[repvar + actionid + "_attack_tohit"], 10) : 0;
if(v[repvar + actionid + "_attack_type"] && v[repvar + actionid + "_attack_range"]) {
if(v[repvar + actionid + "_attack_type"] === "Melee") {var rangetype = "Reach";} else {var rangetype = "Range";};
range = ", " + rangetype + " " + v[repvar + actionid + "_attack_range"];
}
var target = v[repvar + actionid + "_attack_target"] && v[repvar + actionid + "_attack_target"] != "" ? ", " + v[repvar + actionid + "_attack_target"] : ""
var attack_tohitrange = "+" + tohit + range + target;
var dmg1 = v[repvar + actionid + "_attack_damage"] && v[repvar + actionid + "_attack_damage"] != "" ? v[repvar + actionid + "_attack_damage"] : "";
var dmg1type = v[repvar + actionid + "_attack_damagetype"] && v[repvar + actionid + "_attack_damagetype"] != "" ? " " + v[repvar + actionid + "_attack_damagetype"] : "";
var dmg2 = v[repvar + actionid + "_attack_damage2"] && v[repvar + actionid + "_attack_damage2"] != "" ? v[repvar + actionid + "_attack_damage2"] : "";
var dmg2type = v[repvar + actionid + "_attack_damagetype2"] && v[repvar + actionid + "_attack_damagetype2"] != "" ? " " + v[repvar + actionid + "_attack_damagetype2"] : "";
var dmgspacer = dmg1 != "" && dmg2 != "" ? " plus " : "";
var parsed_dmg1 = parse_roll_string(dmg1);
var parsed_dmg2 = parse_roll_string(dmg2);
if(dmg1 != "") {
onhit = onhit + parsed_dmg1.avg + " (" + dmg1 + ")" + dmg1type + " damage";
};
dmgspacer = dmg1 != "" && dmg2 != "" ? " plus " : "";
onhit = onhit + dmgspacer;
if(dmg2 != "") {
onhit = onhit + parsed_dmg2.avg + " (" + dmg2 + ")" + dmg2type + " damage";
};
if(dmg1 != "" || dmg2 != "") {damage_flag = damage_flag + "{{damage=1}} "};
if(dmg1 != "") {damage_flag = damage_flag + "{{dmg1flag=1}} "};
if(dmg2 != "") {damage_flag = damage_flag + "{{dmg2flag=1}} "};
var crit1 = "";
if(parsed_dmg1.rolls.length > 0){
parsed_dmg1.rolls.forEach(function(value) {
crit1 += parsed_dmg1.array[value] + "+";
});
crit1 = crit1.substring(0, crit1.length - 1);
}
var crit2 = "";
if(parsed_dmg2.rolls.length > 0){
parsed_dmg2.rolls.forEach(function(value) {
crit2 += parsed_dmg2.array[value] + "+";
});
crit2 = crit2.substring(0, crit2.length - 1);
}
var rollbase = "";
if(v.dtype === "full") {
rollbase = "@{wtype}&{template:npcaction} " + attack_flag + " @{damage_flag} @{npc_name_flag} {{rname=@{name}}} {{r1=[[@{d20}+(@{attack_tohit}+0)]]}} @{rtype}+(@{attack_tohit}+0)]]}} {{dmg1=[[@{attack_damage}+0]]}} {{dmg1type=@{attack_damagetype}}} {{dmg2=[[@{attack_damage2}+0]]}} {{dmg2type=@{attack_damagetype2}}} {{crit1=[[@{attack_crit}+0]]}} {{crit2=[[@{attack_crit2}+0]]}} {{description=@{show_desc}}} @{charname_output}";
}
else if(v[repvar + actionid + "_attack_flag"] && v[repvar + actionid + "_attack_flag"] != "0") {
if(legendary) {
rollbase = "@{wtype}&{template:npcatk} " + attack_flag + " @{damage_flag} @{npc_name_flag} {{rname=[@{name}](~repeating_npcaction-l_npc_dmg)}} {{rnamec=[@{name}](~repeating_npcaction-l_npc_crit)}} {{type=[Attack](~repeating_npcaction-l_npc_dmg)}} {{typec=[Attack](~repeating_npcaction-l_npc_crit)}} {{r1=[[@{d20}+(@{attack_tohit}+0)]]}} @{rtype}+(@{attack_tohit}+0)]]}} {{description=@{show_desc}}} @{charname_output}"
}
else {
rollbase = "@{wtype}&{template:npcatk} " + attack_flag + " @{damage_flag} @{npc_name_flag} {{rname=[@{name}](~repeating_npcaction_npc_dmg)}} {{rnamec=[@{name}](~repeating_npcaction_npc_crit)}} {{type=[Attack](~repeating_npcaction_npc_dmg)}} {{typec=[Attack](~repeating_npcaction_npc_crit)}} {{r1=[[@{d20}+(@{attack_tohit}+0)]]}} @{rtype}+(@{attack_tohit}+0)]]}} {{description=@{show_desc}}} @{charname_output}";
}
}
else if(dmg1 || dmg2) {
rollbase = "@{wtype}&{template:npcdmg} @{damage_flag} {{dmg1=[[@{attack_damage}+0]]}} {{dmg1type=@{attack_damagetype}}} {{dmg2=[[@{attack_damage2}+0]]}} {{dmg2type=@{attack_damagetype2}}} {{crit1=[[@{attack_crit}+0]]}} {{crit2=[[@{attack_crit2}+0]]}} @{charname_output}"
}
else {
rollbase = "@{wtype}&{template:npcaction} @{npc_name_flag} {{rname=@{name}}} {{description=@{show_desc}}} @{charname_output}"
}
update[repvar + actionid + "_attack_tohitrange"] = attack_tohitrange;
update[repvar + actionid + "_attack_onhit"] = onhit;
update[repvar + actionid + "_damage_flag"] = damage_flag;
update[repvar + actionid + "_attack_crit"] = crit1;
update[repvar + actionid + "_attack_crit2"] = crit2;
update[repvar + actionid + "_rollbase"] = rollbase;
setAttrs(update, {silent: true});
});
});
};
var parse_roll_string = function(rollstring) {
var out = {array: [], avg: 0, rolls: []};
if(!rollstring || rollstring === "") {
return out;
}
var rs_regex_initial = /(\-?\d+(?:d\d+)?)/ig;
var rs_regex_repeating = /([\+\-])(\-?\d+(?:d\d+)?)/ig;
var rs_nospace = rollstring.replace(/\s/g, '');
var rs_initial = rs_regex_initial.exec(rs_nospace);
if(rs_initial) {
out.array.push(rs_initial[1]);
rs_regex_repeating.lastIndex = rs_regex_initial.lastIndex;
var rs_repeating;
while(rs_repeating = rs_regex_repeating.exec(rs_nospace)) {
out.array.push(rs_repeating[1], rs_repeating[2]);
}
}
var add = true;
var dice_regex = /(\d+)d(\d+)/i;
var dice;
out.array.forEach(function(value, index, array) {
if(value === "+") {
add = true;
} else if(value === "-") {
add = false;
} else if(dice = dice_regex.exec(value)){
// this value is a die roll
var dice_avg = Math.floor(+dice[1] * (+dice[2] / 2 + 0.5));
out.avg += add ? dice_avg : -dice_avg;
out.rolls.push(index);
} else {
// this value is a number
out.avg += add ? +value : -+value;
}
})
return out;
};
var get_class_level = function(class_name, callback) {
getAttrs(["class", "base_level", "multiclass1_flag", "multiclass1", "multiclass1_lvl", "multiclass2_flag", "multiclass2", "multiclass2_lvl", "multiclass3_flag", "multiclass3", "multiclass3_lvl"], function(attrs) {
var regex = new RegExp(class_name, "i");
if(regex.test(attrs["class"])) {
callback(attrs.base_level);
} else if(attrs.multiclass1_flag && attrs.multiclass1_flag !== "0" && regex.test(attrs.multiclass1)) {
callback(attrs.multiclass1_lvl);
} else if(attrs.multiclass2_flag && attrs.multiclass2_flag !== "0" && regex.test(attrs.multiclass2)) {
callback(attrs.multiclass2_lvl);
} else if(attrs.multiclass3_flag && attrs.multiclass3_flag !== "0" && regex.test(attrs.multiclass3)) {
callback(attrs.multiclass3_lvl);
} else {
callback("0");
}
});
};
var update_globaldamage = function(callback) {
getSectionIDs("damagemod", function(ids) {
if(ids) {
var fields = {};
var attr_name_list = [];
ids.forEach(function(id) {
fields[id] = {};
attr_name_list.push(`repeating_damagemod_${id}_global_damage_active_flag`, `repeating_damagemod_${id}_global_damage_rollstring`, `repeating_damagemod_${id}_global_damage_type`);
});
getAttrs(attr_name_list, function(attrs) {
var regex = /^repeating_damagemod_(.+)_global_damage_(active_flag|rollstring|type)$/;
_.each(attrs, function(obj, name) {
var r = regex.exec(name);
if(r) {
fields[r[1]][r[2]] = obj;
}
});
var update = {global_damage_mod_roll: "", global_damage_mod_crit: "", global_damage_mod_type: ""};
_.each(fields, function(element) {
if(element.active_flag != "0") {
if(element.rollstring && element.rollstring !== "") { update["global_damage_mod_roll"] += element.rollstring + "+"; }
if(element.type && element.type !== "") { update["global_damage_mod_type"] += element.type + "/"; }
}
});
update["global_damage_mod_roll"] = update["global_damage_mod_roll"].replace(/\+(?=$)/, '');
update["global_damage_mod_type"] = update["global_damage_mod_type"].replace(/\/(?=$)/, '');
// Remove any non-roll damage modifiers from the global damage modifier for the crit rolls
// Will also remove any labels attached to these non-roll damage modifiers
update["global_damage_mod_crit"] = update["global_damage_mod_roll"].replace(/(?:[+\-*\/%]|\*\*|^)\s*\d+(?:\[.*?])?(?!d\d+)/gi, '')
// If what was just replace removed the first damage modifier, remove any now precending plus signs
.replace(/(?:^\+)/i, '');
setAttrs(update, {silent:true}, function() {
update_attacks("all");
if(typeof callback == "function") callback();
});
});
}
});
};
var update_globalattack = function(callback) {
getSectionIDs("tohitmod", function(ids) {
if(ids) {
var fields = {};
var attr_name_list = [];
ids.forEach(function(id) {
fields[id] = {};
attr_name_list.push(`repeating_tohitmod_${id}_global_attack_active_flag`, `repeating_tohitmod_${id}_global_attack_rollstring`);
});
getAttrs(attr_name_list, function(attrs) {
var regex = /^repeating_tohitmod_(.+)_global_attack_(active_flag|rollstring)$/;
_.each(attrs, function(obj, name) {
var r = regex.exec(name);
if(r) {
fields[r[1]][r[2]] = obj;
}
});
var update = {global_attack_mod: ""};
_.each(fields, function(element) {
if(element.active_flag != "0") {
if(element.rollstring && element.rollstring !== "") { update["global_attack_mod"] += element.rollstring + "+"; }
}
});
if(update["global_attack_mod"] !== "") {
update["global_attack_mod"] = "[[" + update["global_attack_mod"].replace(/\+(?=$)/, '') + "]]";
}
setAttrs(update, {silent:true}, function() {
if(typeof callback == "function") callback();
});
});
}
});
};
var update_globalsaves = function(callback) {
getSectionIDs("savemod", function(ids) {
if(ids) {
var fields = {};
var attr_name_list = [];
ids.forEach(function(id) {
fields[id] = {};
attr_name_list.push(`repeating_savemod_${id}_global_save_active_flag`, `repeating_savemod_${id}_global_save_rollstring`);
});
getAttrs(attr_name_list, function(attrs) {
var regex = /^repeating_savemod_(.+)_global_save_(active_flag|rollstring)$/;
_.each(attrs, function(obj, name) {
var r = regex.exec(name);
if(r) {
fields[r[1]][r[2]] = obj;
}
});
var update = {global_save_mod: ""};
_.each(fields, function(element) {
if(element.active_flag != "0") {
if(element.rollstring && element.rollstring !== "") { update["global_save_mod"] += element.rollstring + "+"; }
}
});
if(update["global_save_mod"] !== "") {
update["global_save_mod"] = "[[" + update["global_save_mod"].replace(/\+(?=$)/, '') + "]]";
}
setAttrs(update, {silent:true}, function() {
if(typeof callback == "function") callback();
});
});
}
});
};
var update_globalskills = function(callback) {
getSectionIDs("skillmod", function(ids) {
if(ids) {
var fields = {};
var attr_name_list = [];
ids.forEach(function(id) {
fields[id] = {};
attr_name_list.push(`repeating_skillmod_${id}_global_skill_active_flag`, `repeating_skillmod_${id}_global_skill_rollstring`);
});
getAttrs(attr_name_list, function(attrs) {
var regex = /^repeating_skillmod_(.+)_global_skill_(active_flag|rollstring)$/;
_.each(attrs, function(obj, name) {
var r = regex.exec(name);
if(r) {
fields[r[1]][r[2]] = obj;
}
});
var update = {global_skill_mod: ""};
_.each(fields, function(element) {
if(element.active_flag != "0") {
if(element.rollstring && element.rollstring !== "") { update["global_skill_mod"] += element.rollstring + "+"; }
}
});
if(update["global_skill_mod"] !== "") {
update["global_skill_mod"] = "[[" + update["global_skill_mod"].replace(/\+(?=$)/, '') + "]]";
}
setAttrs(update, {silent:true}, function() {
if(typeof callback == "function") callback();
});
});
}
});
};
var check_l1_mancer = function() {
getAttrs(["class", "base_level", "strength_base","dexterity_base","constitution_base","intelligence_base","wisdom_base","charisma_base","l1mancer_status","version","charactermancer_step"], function(v) {
if(!v["version"] || parseFloat(v["version"]) < 2.2) {
return;
}
if(v["l1mancer_status"] && v["l1mancer_status"] === "completed") {
return;
}
if(v["charactermancer_step"]) {
startCharactermancer(v["charactermancer_step"]);
}
else {
startCharactermancer("l1-welcome");
}
});
};
var v2_old_values_check = function() {
// update_attacks("all");
var update = {};
var attrs = ["simpletraits","features_and_traits","initiative_bonus","npc","character_id"];
getSectionIDs("repeating_power-npc", function(idarray) {
_.each(idarray, function(id) {
attrs.push("repeating_power-npc_" + id + "_rollcontent");
});
getAttrs(attrs, function(v) {
if(v["npc"] && v["npc"] == 1 && (!v["initiative_bonus"] || v["initiative_bonus"] == 0)) {
update_initiative();
}
var powerflag = idarray && idarray.length > 0 ? 1 : 0;
var missing = v["features_and_traits"] && v["simpletraits"] === "complex" ? 1 : 0;
update["npcpower_flag"] = powerflag;
update["missing_info"] = missing;
_.each(idarray, function(id) {
var content = v["repeating_power-npc_" + id + "_rollcontent"];
if(content.substring(0,3) === "%{-" && content.substring(22,41) === "|repeating_attack_-" && content.substring(60,68) === "_attack}") {
var thisid = content.substring(2,21);
if(thisid != v["character_id"]) {
update["repeating_power-npc_" + id + "_rollcontent"] = content.substring(0,2) + v["character_id"] + content.substring(22,68);
}
}
});
setAttrs(update);
});
});
};
var clear_npc_power_attacks = function(complete) {
getSectionIDs("repeating_attack", function(attack_ids) {
var getList = [];
var done = false;
_.each(attack_ids, function(id) {
getList.push(`repeating_attack_${id}_powerid`);
});
getAttrs(getList, function(v) {
_.each(attack_ids, function(id) {
if (v[`repeating_attack_${id}_powerid`] && v[`repeating_attack_${id}_powerid`].indexOf("npc_") != -1) {
removeRepeatingRow(`repeating_attack_${id}`);
}
});
complete();
});
});
}
var upgrade_to_2_0 = function(doneupdating) {
getAttrs(["npc","strength","dexterity","constitution","intelligence","wisdom","charisma","strength_base","dexterity_base","constitution_base","intelligence_base","wisdom_base","charisma_base","deathsavemod","death_save_mod","npc_str_save","npc_dex_save","npc_con_save","npc_int_save","npc_wis_save","npc_cha_save","npc_str_save_base","npc_dex_save_base","npc_con_save_base","npc_int_save_base","npc_wis_save_base","npc_cha_save_base","npc_acrobatics_base", "npc_animal_handling_base", "npc_technology_base", "npc_athletics_base", "npc_deception_base", "npc_lore_base", "npc_insight_base", "npc_intimidation_base", "npc_investigation_base", "npc_medicine_base", "npc_nature_base", "npc_perception_base", "npc_performance_base", "npc_persuasion_base", "npc_piloting_base", "npc_sleight_of_hand_base", "npc_stealth_base", "npc_survival_base", "npc_acrobatics", "npc_animal_handling", "npc_technology", "npc_athletics", "npc_deception", "npc_lore", "npc_insight", "npc_intimidation", "npc_investigation", "npc_medicine", "npc_nature", "npc_perception", "npc_performance", "npc_persuasion", "npc_piloting", "npc_sleight_of_hand", "npc_stealth", "npc_survival"], function(v) {
var update = {};
var stats = ["strength","dexterity","constitution","intelligence","wisdom","charisma"];
var npc_stats = ["npc_str_save","npc_dex_save","npc_con_save","npc_int_save","npc_wis_save","npc_cha_save","npc_acrobatics", "npc_animal_handling", "npc_technology", "npc_athletics", "npc_deception", "npc_lore", "npc_insight", "npc_intimidation", "npc_investigation", "npc_medicine", "npc_nature", "npc_perception", "npc_performance", "npc_persuasion", "npc_piloting", "npc_sleight_of_hand", "npc_stealth", "npc_survival"];
_.each(stats, function(attr) {
if(v[attr] && v[attr] != "10" && v[attr + "_base"] == "10") {
update[attr + "_base"] = v[attr];
}
});
_.each(npc_stats, function(attr) {
if(v[attr] && !isNaN(v[attr]) && v[attr + "_base"] == "") {
update[attr + "_base"] = v[attr];
}
});
if(v["deathsavemod"] && v["deathsavemod"] != "0" && v["death_save_mod"] === "0") {v["death_save_mod"] = v["deathsavemod"];};
if(v["npc"] && v["npc"] == "1") {
var callback = function() {
update_attr("all");
update_mod("strength");
update_mod("dexterity");
update_mod("constitution");
update_mod("intelligence");
update_mod("wisdom");
update_mod("charisma");
update_npc_action("all");
update_npc_saves();
update_npc_skills();
update_initiative();
}
}
else {
var callback = function() {
update_attr("all");
update_mod("strength");
update_mod("dexterity");
update_mod("constitution");
update_mod("intelligence");
update_mod("wisdom");
update_mod("charisma");
update_all_saves();
update_skills(["athletics", "acrobatics", "sleight_of_hand", "stealth", "technology", "lore", "investigation", "nature", "piloting", "animal_handling", "insight", "medicine", "perception", "survival","deception", "intimidation", "performance", "persuasion"]);
update_tool("all")
update_attacks("all");
update_pb();
update_jack_attr();
update_initiative();
update_weight();
update_power_info();
update_ac();
}
}
setAttrs(update, {silent: true}, callback);
doneupdating();
});
};
var upgrade_to_2_1 = function(doneupdating) {
v2_old_values_check();
doneupdating();
};
var upgrade_to_2_2 = function(doneupdating) {
setAttrs({l1mancer_status: "completed"}, function(eventinfo) {
setAttrs({"options-class-selection":"0"});
console.log("Preprocessed v2.2 upgrade");
update_tool("all");
update_attacks("all");
update_class();
update_race_display();
doneupdating();
});
};
var upgrade_to_2_3 = function(doneupdating) {
getSectionIDs("damagemod", function(ids) {
var update = {};
_.each(ids, function(rowid) {
update[`repeating_damagemod_${rowid}_options-flag`] = "0";
});
getSectionIDs("tohitmod", function(ids) {
_.each(ids, function(rowid) {
update[`repeating_tohitmod_${rowid}_options-flag`] = "0";
});
setAttrs(update);
doneupdating();
});
});
};
var upgrade_to_2_4 = function(doneupdating) {
clear_npc_power_attacks(function() {
update_globalskills(function() {
update_globalsaves(function() {
update_globalattack(function() {
update_globaldamage(function() {
getAttrs(["npc", "npcpowercastingflag", "powercasting_ability", "caster_level", "level_calculations"], function(v) {
if(v.npc == "1" && v.npcpowercastingflag == "1") {
getSectionIDs("npctrait", function(secIds) {
var getList = [];
_.each(secIds, function(x) {
getList.push("repeating_npctrait_" + x + "_name");
getList.push("repeating_npctrait_" + x + "_desc");
});
getAttrs(getList, function(traits) {
var update = {};
if(v.powercasting_ability == "0*" || v.caster_level == "0") {
var powerSec = "";
if (v.powercasting_ability == "0*") {
update.powercasting_ability = "@{intelligence_mod}+";
}
_.each(secIds, function(traitId) {
if(traits["repeating_npctrait_" + traitId + "_name"].toLowerCase().includes("powercasting.")) powerSec = traitId;
});
if(powerSec != "") {
var powercasting = traits["repeating_npctrait_" + powerSec + "_desc"].toLowerCase();
if (v.powercasting_ability == "0*") {
var lastIndex = 9999;
_.each(["intelligence", "wisdom", "charisma"], function(ability) {
var found = powercasting.indexOf(ability);
if(found > -1 && found < lastIndex) {
lastIndex = found;
update.powercasting_ability = "@{" + ability + "_mod}+";
}
});
}
if (v.caster_level == "0") {
var foundLevelidx = powercasting.search(/(\d|\d\d)(st|nd|rd|th)/);
if (foundLevelidx) {
var level = parseInt(powercasting.substring(foundLevelidx, foundLevelidx+4));
console.log(`Found powercasting level ${level} in trait, setting caster_level...`);
update.caster_level = level;
}
}
}
}
setAttrs(update, function() {
// Recalculate power slots in case NPC level was restored
if(!v["level_calculations"] || v["level_calculations"] == "on") {
update_power_slots();
};
// Set all powers without a given modifier to 'power'
var spgetList = [];
getSectionIDs("power-cantrip", function(secIds0) {
_.each(secIds0, function(x) {
spgetList.push("repeating_power-cantrip_" + x + "_power_ability");
});
getSectionIDs("power-1", function(secIds1) {
_.each(secIds1, function(x) {
spgetList.push("repeating_power-1_" + x + "_power_ability");
});
getSectionIDs("power-2", function(secIds2) {
_.each(secIds2, function(x) {
spgetList.push("repeating_power-2_" + x + "_power_ability");
});
getSectionIDs("power-3", function(secIds3) {
_.each(secIds3, function(x) {
spgetList.push("repeating_power-3_" + x + "_power_ability");
});
getSectionIDs("power-4", function(secIds4) {
_.each(secIds4, function(x) {
spgetList.push("repeating_power-4_" + x + "_power_ability");
});
getSectionIDs("power-5", function(secIds5) {
_.each(secIds5, function(x) {
spgetList.push("repeating_power-5_" + x + "_power_ability");
});
getSectionIDs("power-6", function(secIds6) {
_.each(secIds6, function(x) {
spgetList.push("repeating_power-6_" + x + "_power_ability");
});
getSectionIDs("power-7", function(secIds7) {
_.each(secIds7, function(x) {
spgetList.push("repeating_power-7_" + x + "_power_ability");
});
getSectionIDs("power-8", function(secIds8) {
_.each(secIds8, function(x) {
spgetList.push("repeating_power-8_" + x + "_power_ability");
});
getSectionIDs("power-9", function(secIds9) {
_.each(secIds9, function(x) {
spgetList.push("repeating_power-9_" + x + "_power_ability");
});
getAttrs(spgetList, function(powerAbilities) {
spupdate = {};
_.each(powerAbilities, function(ability, attributeName) {
if (ability == "0*") {
console.log("UPDATING POWER: " + attributeName);
spupdate[attributeName] = "power";
}
});
setAttrs(spupdate, function() {
update_attacks("powers");
update_challenge();
doneupdating();
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
} else if(v.npc != "1") {
doneupdating();
} else {
doneupdating();
}
});
});
});
});
});
});
};
var no_version_bugfix = function(doneupdating) {
getAttrs(["npc","class"], function(v) {
if(v["npc"] && v["npc"] != "0" || v["class"] && v["class"] != "") {
setAttrs({version: "2.1"});
}
else {
setAttrs({version: "2.3"}, {silent: true});
}
});
doneupdating();
};
var versioning = function(finished) {
getAttrs(["version"], function(v) {
if(v["version"] === "2.5") {
setAttrs({version: "2.5"}, function(){
finished();
});
console.log("5th Edition OGL by Roll20 v" + v["version"]);
return;
}
else if(!v["version"] || v["version"] === "") {
console.log("NO VERSION FOUND");
no_version_bugfix(function() {
versioning(finished);
});
}
else if(v["version"] === "2.4") {
console.log("UPGRADING TO v2.5");
setAttrs({version: "2.5"}, function(){
finished();
});
console.log("5th Edition OGL by Roll20 v" + v["version"]);
}
else if(v["version"] === "2.3") {
console.log("UPGRADING TO v2.4");
upgrade_to_2_4(function() {
setAttrs({version: "2.4"});
versioning(finished);
});
}
else if(v["version"] === "2.2") {
console.log("UPGRADING TO v2.3");
upgrade_to_2_3(function() {
setAttrs({version: "2.3"});
versioning(finished);
});
}
else if(v["version"] === "2.1") {
console.log("UPGRADING TO v2.2");
upgrade_to_2_2(function() {
setAttrs({version: "2.2"});
versioning(finished);
});
}
else if(v["version"] === "2.0") {
console.log("UPGRADING TO v2.1");
upgrade_to_2_1(function() {
setAttrs({version: "2.1"});
versioning(finished);
});
}
else {
console.log("UPGRADING TO v2.0");
upgrade_to_2_0(function() {
setAttrs({version: "2.0"});
versioning(finished);
});
};
});
};
on("mancer:cancel", function(eventinfo) {
if(!eventinfo["value"]) {return;};
var update = {};
if(eventinfo["value"] === "l1-welcome" || eventinfo["value"] === "l1-cancel") {
update["l1mancer_status"] = "completed";
update["charactermancer_step"] = "l1-welcome";
deleteCharmancerData(["l1-welcome","l1-race","l1-class","l1-abilities","l1-background","l1-equipment","l1-powers","l1-summary"]);
}
else if(eventinfo["value"].substring(0,3) === "l1-") {
update["l1mancer_status"] = eventinfo["value"];
};
setAttrs(update);
});
on("mancerfinish:l1-mancer", function(eventinfo) {
var noEquipmentDrop = false;
if(eventinfo.data["l1-equipment"]) {
noEquipmentDrop = eventinfo.data["l1-equipment"].values["equipment_type"] == "gold";
}
var getMancerPowers = function(mancerdata) {
var powersKnown = [];
if(mancerdata["l1-race"].data.subrace) {
_.each(mancerdata["l1-race"].data.subrace["data-Powers"], function(power) {
if(power.Name) {
powersKnown.push( {name: power.Name, ability: power.Ability} );
}
});
}
if(mancerdata["l1-race"].data.race) {
_.each(mancerdata["l1-race"].data.race["data-Powers"], function(power) {
if(power.Name) {
powersKnown.push( {name: power.Name, ability: power.Ability} );
}
});
}
if(mancerdata["l1-class"].data.subclass) {
_.each(mancerdata["l1-class"].data.subclass["data-Class Powers"], function(power, level) {
_.each(power.Known, function(known) {
powersKnown.push( {name: known, ability: mancerdata["l1-class"].data.class["Powercasting Ability"]} );
});
});
_.each(mancerdata["l1-class"].data.subclass["data-Powers"], function(power) {
if(power.Name) {
powersKnown.push( {name: power.Name, ability: power.Ability} );
}
});
}
if(mancerdata["l1-class"].data.class) {
_.each(mancerdata["l1-class"].data.class["data-Class Powers"], function(power, level) {
_.each(power.Known, function(known) {
powersKnown.push( {name: known, ability: mancerdata["l1-class"].data.class["Powercasting Ability"]} );
});
});
_.each(mancerdata["l1-class"].data.class["data-Powers"], function(power) {
if(power.Name) {
powersKnown.push( {name: power.Name, ability: power.Ability} );
}
});
}
if(mancerdata["l1-powers"] && mancerdata["l1-powers"].values) {
_.each(mancerdata["l1-powers"].values, function(value, name) {
if(value.substr(0,7) == "Powers:") {
powersKnown.push( {name: value.substring(7), ability: mancerdata["l1-powers"].values[name + "_casting"]} );
}
});
}
return powersKnown;
};
var getMancerStats = function(mancerdata) {
//Recalculate Ability Scores
//var hp = 0;
var allAbilities = {race: {}, subrace: {}};
var disableAbilities = {};
var allProficiencies = {};
var toSet = {};
var proficiencyList = ["Weapon", "Armor", "Skill", "Tool", "Language"];
var abilityList = ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"];
var proficiencyNum = 4;
var hitpoints = mancerdata["l1-class"].data.class ? mancerdata["l1-class"].data.class["Hit Die"] : mancerdata["l1-class"].values["custom_hit_die"];
hitpoints = parseInt(hitpoints.replace("d", ""));
_.each(mancerdata, function(page){
_.each(page.values, function(value, name) {
if(name.search("ability") !== -1) {
//var choiceSection = name.split("_")[0].replace("sub", "");
var choiceSection = name.split("_")[0];
if(page.data[choiceSection] && page.data[choiceSection]["data-Ability Score Choice"]) {
var increase = 1;
if(typeof page.data[choiceSection]["data-Ability Score Choice"] == "string") {
parseInt( _.last( page.data[choiceSection]["data-Ability Score Choice"].split("+") ) );
}
allAbilities[choiceSection] = allAbilities[choiceSection] || {};
allAbilities[choiceSection][value.toLowerCase()] = increase;
disableAbilities[choiceSection] = disableAbilities[choiceSection] || [];
disableAbilities[choiceSection].push(value);
}
}
});
_.each(page.data, function(pagedata, increaseSection) {
if(pagedata["data-Ability Score Increase"]) {
_.each(pagedata["data-Ability Score Increase"], function(amount, ability) {
allAbilities[increaseSection] = allAbilities[increaseSection] || {};
allAbilities[increaseSection][ability.toLowerCase()] = amount;
disableAbilities[increaseSection] = disableAbilities[increaseSection] || [];
disableAbilities[increaseSection].push(ability.toLowerCase());
});
}
if(pagedata["data-HP per level"]) {
hitpoints += pagedata["data-HP per level"];
}
});
});
if(mancerdata["l1-race"] && mancerdata["l1-race"].values.race == "Rules:Races") {
_.each(abilityList, function(ability){
var custom = mancerdata["l1-race"].values["race_custom_" + ability.toLowerCase()] || false;
if(custom) {
allAbilities.race[ability.toLowerCase()] = parseInt(custom);
}
});
}
if(mancerdata["l1-race"] && mancerdata["l1-race"].values.subrace == "Rules:Races") {
_.each(abilityList, function(ability){
var custom = mancerdata["l1-race"].values["subrace_custom_" + ability.toLowerCase()] || false;
if(custom) {
allAbilities.subrace[ability.toLowerCase()] = parseInt(custom);
}
});
}
var abilityTotals = {}
_.each(allAbilities, function(abilities) {
_.each(abilities, function(amount, ability) {
abilityTotals[ability] = abilityTotals[ability] || {bonus: 0};
abilityTotals[ability].bonus += amount;
});
});
_.each(abilityList, function(upperAbility) {
var ability = upperAbility.toLowerCase();
abilityTotals[ability] = abilityTotals[ability] || {bonus: 0, mod: 0};
if(mancerdata["l1-abilities"].values[ability]) {
abilityTotals[ability].base = parseInt( mancerdata["l1-abilities"].values[ability].split("~")[0] );
} else {
abilityTotals[ability].base = 0;
}
abilityTotals[ability].total = abilityTotals[ability].bonus + abilityTotals[ability].base;
abilityTotals[ability].mod = Math.floor((abilityTotals[ability].total - 10)/2);
});
allAbilities.totals = abilityTotals;
hitpoints += abilityTotals.constitution.mod;
//Recalculate Proficiencies
_.each(proficiencyList, function(prof){
//First get a list of all proficiencies
var finalProfs = [];
_.each(mancerdata, function(page){
_.each(page.values, function(value, name) {
if(name.search(prof.toLowerCase()) !== -1 || prof.toLowerCase() == "language" && name.search("class_feature_choice") !== -1) {
if (value.split(":")[0] == "Proficiencies") {
finalProfs.push( _.last(value.split(":")) );
}
}
});
_.each(page.data, function(pagedata) {
if(pagedata["data-" + prof + " Proficiency"] && pagedata["data-" + prof + " Proficiency"].Proficiencies) {
finalProfs = finalProfs.concat(pagedata["data-" + prof + " Proficiency"].Proficiencies);
}
});
});
allProficiencies[prof.toLowerCase()] = _.without(_.uniq(finalProfs), "custom");
});
var expertiseSelects = {};
var currentExpertise = [];
//Get a list of active expertise selects
_.each(mancerdata, function(page, pagename) {
_.each(page.data, function(data, section) {
for(var num=1; num<=proficiencyNum; num++) {
if( _.keys(data).indexOf("data-Expertise Choice " + num) != -1 ) {
expertiseSelects[section + "_expertise_choice_" + num] = data["data-Expertise Choice " + num];
}
}
});
});
_.each(expertiseSelects, function(fillArray, selectName) {
var expertChoices = [];
var options = {category: "Proficiencies", silent: true}
var currentValue = "";
//Create the list of values for this select
_.each(fillArray, function(expert) {
if(expert == "KNOWN") {
expertChoices = expertChoices.concat(allProficiencies.skill);
} else {
expertChoices.push(expert);
}
});
//Get the current value of the select
_.each(mancerdata, function(page){
_.each(page.values, function(value, name) {
if(name == selectName) {
currentValue = _.last(value.split(":"));
}
});
});
if(currentValue != "") {
//If the current value is not available, set it to blank. otherwise, add it to the list of expertise skills
if(expertChoices.indexOf(currentValue) == -1) {
options.selected = "";
toSet[selectName] = "";
} else {
currentExpertise.push(currentValue);
}
}
});
return {abilities: allAbilities, proficiencies: allProficiencies, expertise: _.uniq(currentExpertise), hp: hitpoints}
};
var doAllDrops = function(dropArray, callback) {
var thisPage = dropArray.shift();
var pageName = thisPage;
var additionalData = {};
if(typeof thisPage == "object") {
pageName = thisPage.name;
additionalData = thisPage.data || {};
}
getCompendiumPage(pageName, function(pageData) {
pageName = pageName.indexOf("@@!!@@") > -1 ? pageName.replace(/@@!!@@/g,"") : pageName; // Hacky bugfix to prevent custom names from matching unavailable content
currentDrop++;
if(typeof pageData == "string") {
console.log("Creating custom drop for " + pageName);
pageData = {name: pageName.split(":")[1], content: "", data: {Category: pageName.split(":")[0], Source: "Charactermancer"}};
};
setCharmancerText({"mancer_category": pageData.data.Category, "mancer_progress":"Applying change " + currentDrop + " out of " + totalDrops});
pageData.data = _.extend(pageData.data, additionalData);
if(pageData.data["data-Equipment"]) {
var json = JSON.parse(pageData.data["data-Equipment"]);
var newItems = makeItemData(json.default);
console.log("ADDING ADDITIONAL ITEMS:");
totalDrops += newItems.length;
dropArray = dropArray.concat(newItems);
}
if(pageData.data["data-Starting Gold"] && !noEquipmentDrop) {
set["gp"] += parseInt(pageData.data["data-Starting Gold"]);
}
if(pageData.data["data-Bundle"]) {
var json = JSON.parse(pageData.data["data-Bundle"]);
var newItems = makeItemData(json);
console.log("ADDING ADDITIONAL ITEMS (FROM BUNDLE):");
totalDrops += newItems.length
dropArray = dropArray.concat(newItems);
doAllDrops(dropArray, callback);
} else {
dropCompendiumData("licensecontainer", pageData, function(data) {
console.log("Dropped " + pageName);
if(dropArray.length > 0) {
doAllDrops(dropArray, callback);
} else {
callback();
}
});
}
});
};
var makeItemData = function(items) {
if (noEquipmentDrop) {
return [];
} else {
var itemArray = [];
var splitItems = [];
_.each(items, function(item) {
item = item.split(",");
_.each(item, function(splitItem) {
splitItems.push(splitItem.trim());
});
})
_.each(splitItems, function(item) {
var itemname = item.split("(")[0].trim().replace("Items:", "");
itemname = itemname.substring(0,4) == "and " ? itemname.substr(4) : itemname;
var itemdata = {name:"Items:" + itemname, data:{}}
if(item.includes("(")) {
var par = item.split("(")[1].split(")")[0];
if( !isNaN(parseInt(par)) ) {
itemdata.data["itemcount"] = parseInt(par);
}
}
if(itemname != "") {
itemArray.push(itemdata);
}
});
return itemArray;
}
};
var eraseRepeating = function(sectionArray, callback) {
var thisSection = sectionArray.shift();
getSectionIDs(thisSection, function(itemids) {
_.each(itemids, function(item) {
removeRepeatingRow("repeating_" + thisSection + "_" + item);
});
if(sectionArray.length > 0) {
eraseRepeating(sectionArray, callback);
} else {
callback();
}
});
}
var data = eventinfo.data;
var stats = getMancerStats(data);
var powers = getMancerPowers(data);
var equipment = [];
var silentset = {};
var clearset = {};
var set = {gp: 0};
var allDrops = [];
var currentDrop = 0;
var totalDrops = 1;
var allSkills = ["athletics", "acrobatics", "sleight_of_hand", "stealth", "technology", "lore", "investigation", "nature", "piloting", "animal_handling", "insight", "medicine", "perception", "survival","deception", "intimidation", "performance", "persuasion"];
var allAbilities = ["strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma"];
var eraseSections = ["attack", "inventory", "traits", "resource", "proficiencies", "tool", "damagemod", "power-cantrip"];
for(var x=1; x<=9; x++) {
eraseSections.push("power-" + x);
}
//first set is silent to make sure certain things don't trigger workers
silentset["class_resource_name"] = "";
silentset["class_resource"] = "";
silentset["class_resource_max"] = "";
silentset["other_resource_name"] = "";
silentset["other_resource"] = "";
silentset["other_resource_max"] = "";
silentset["other_resource_itemid"] = "";
silentset["class"] = "";
silentset["class_display"] = "";
silentset["subclass"] = "";
silentset["hitdietype"] = "";
silentset["hitdie_final"] = "";
silentset["race"] = "";
silentset["subrace"] = "";
silentset["race_display"] = "";
silentset["custom_class"] = "";
silentset["cust_classname"] = "";
//Set up setAttrs to erase some fields
clearset["precognition_flag"] = "0";
clearset["age"] = "";
clearset["hp"] = "";
clearset["hp_max"] = "";
clearset["size"] = "";
clearset["speed"] = "";
clearset["gp"] = "";
clearset["alignment"] = "";
clearset["global_damage_mod_flag"] = "";
clearset["powercasting_ability"] = "";
clearset["cust_hitdietype"] = "";
clearset["cust_powerslots"] = "";
clearset["cust_powercasting_ability"] = "";
clearset["tab"] = "core";
clearset["ac"] = "";
clearset["jack_bonsu"] = "";
clearset["jack_attr"] = "";
clearset["death_save_bonus"] = "";
clearset["weighttotal"] = "";
clearset["hiddenweighttotal"] = "";
clearset["initiative_bonus"] = "";
clearset["hit_dice"] = "";
clearset["hit_dice_max"] = "";
clearset["base_level"] = "1";
clearset["level"] = "1";
clearset["pb"] = "";
clearset["jack"] = "";
clearset["caster_level"] = "";
clearset["power_attack_mod"] = "";
clearset["power_attack_bonus"] = "";
clearset["power_save_dc"] = "";
clearset["armorwarningflag"] = "hide";
clearset["armorwarning"] = "0";
clearset["passive_wisdom"] = "";
_.each(allSkills, function(skill) {
clearset[skill + "_prof"] = "";//0
clearset[skill + "_type"] = "";//1
clearset[skill + "_bonus"] = "";
});
_.each(allAbilities, function(ability) {
clearset[ability + "_save_prof"] = "";
clearset[ability + "_save_bonus"] = "";
clearset[ability + "_bonus"] = "0";
clearset["cust_" + ability + "_save_prof"] = "";
});
clearset["personality_traits"] = "";
_.each(["ideal", "bond", "flaw"], function(type) {
clearset[type + "s"] = "";
});
clearset["background"] = "";
//Set up second setAttrs with ability scores
_.each(stats.abilities.totals, function(scores, name) {
clearset[name + "_base"] = scores.total;
});
//Add class features to first setAttrs [name, desc, source"Class", source_type:"Fighter", options-flag: 0]
for(var x=1; x<=4; x++) {
if(data["l1-class"].values["class_feature_choice_" + x] && data["l1-class"].values["class_feature_choice_" + x].search("Proficiencies:") == -1) {
if (data["l1-class"].values["class_feature_choice_" + x + "_manual"]) {
var newrowid1 = generateRowID();
var name = data["l1-class"].values["class_feature_choice_" + x + "_name"] || "";
name += ": " + data["l1-class"].values["class_feature_choice_" + x + "_manual"];
clearset["repeating_traits_" + newrowid1 + "_name"] = name;
clearset["repeating_traits_" + newrowid1 + "_source"] = "Class";
clearset["repeating_traits_" + newrowid1 + "_source_type"] = _.last(data["l1-class"].values.class.split(":"));
clearset["repeating_traits_" + newrowid1 + "_description"] = data["l1-class"].values["class_feature_choice_" + x + "_desc"] || "";
clearset["repeating_traits_" + newrowid1 + "_options-flag"] = 0;
clearset["repeating_traits_" + newrowid1 + "_display_flag"] = "on";
if (data["l1-class"].values["class_feature_choice_" + x + "_manual2"]) {
var newrowid2 = generateRowID();
var name = data["l1-class"].values["class_feature_choice_" + x + "_name"] || "";
name += ": " + data["l1-class"].values["class_feature_choice_" + x + "_manual2"];
clearset["repeating_traits_" + newrowid2 + "_name"] = name;
clearset["repeating_traits_" + newrowid2 + "_source"] = "Class";
clearset["repeating_traits_" + newrowid2 + "_source_type"] = _.last(data["l1-class"].values.class.split(":"));
clearset["repeating_traits_" + newrowid2 + "_description"] = data["l1-class"].values["class_feature_choice_" + x + "_desc"] || "";
clearset["repeating_traits_" + newrowid2 + "_options-flag"] = 0;
clearset["repeating_traits_" + newrowid2 + "_display_flag"] = "on";
}
} else {
var newrowid = generateRowID();
var name = data["l1-class"].values["class_feature_choice_" + x + "_name"] || "";
name += ": " + data["l1-class"].values["class_feature_choice_" + x];
clearset["repeating_traits_" + newrowid + "_name"] = name;
clearset["repeating_traits_" + newrowid + "_source"] = "Class";
clearset["repeating_traits_" + newrowid + "_source_type"] = _.last(data["l1-class"].values.class.split(":"));
clearset["repeating_traits_" + newrowid + "_description"] = data["l1-class"].values["class_feature_choice_" + x + "_desc"] || "";
clearset["repeating_traits_" + newrowid + "_options-flag"] = 0;
clearset["repeating_traits_" + newrowid + "_display_flag"] = "on";
}
};
}
if(data["l1-class"].values.subclass) {
for(var x=1; x<=4; x++) {
if(data["l1-class"].values["subclass_feature_choice_" + x]) {
var newrowid = generateRowID();
var name = data["l1-class"].values["subclass_feature_choice_" + x + "_name"] || "";
name += ": " + data["l1-class"].values["subclass_feature_choice_" + x];
clearset["repeating_traits_" + newrowid + "_name"] = name;
clearset["repeating_traits_" + newrowid + "_source"] = "Class";
clearset["repeating_traits_" + newrowid + "_source_type"] = _.last(data["l1-class"].values.class.split(":")) + " - " + _.last(data["l1-class"].values.subclass.split(":"));
clearset["repeating_traits_" + newrowid + "_description"] = data["l1-class"].values["subclass_feature_choice_" + x + "_desc"] || "";
clearset["repeating_traits_" + newrowid + "_options-flag"] = 0;
clearset["repeating_traits_" + newrowid + "_display_flag"] = "on";
};
}
}
//Set up drops. start with class, subclass, race, subrace, background
if(data["l1-class"].values["class_name"] && !data["l1-class"].data.class) {
var customClass = {data: {}};
customClass.name = "Classes@@!!@@:" + data["l1-class"].values["class_name"];
set["custom_class"] = "1";
set["cust_classname"] = data["l1-class"].values["class_name"];
set["cust_hitdietype"] = data["l1-class"].values["custom_hit_die"];
if(data["l1-class"].values["custom_class_power_ability"]) {
set["cust_powerslots"] = "full";
set["cust_powercasting_ability"] = "@{" + data["l1-class"].values["custom_class_power_ability"].toLowerCase() + "_mod}+";
}
traits = [];
for(var x = 1; x <= 4; x++) {
var trait = {};
if(data["l1-class"].values["custom_class_trait_name_" + x]) {
trait.Name = data["l1-class"].values["custom_class_trait_name_" + x];
trait.Desc = data["l1-class"].values["custom_class_trait_desc_" + x] || "";
traits.push(trait);
}
}
if(traits.length > 0) {
customClass.data["data-Traits"] = JSON.stringify(traits);
}
_.each(allAbilities, function(ability) {
if(data["l1-class"].values[ability.toLowerCase() + "_save"]) {
set["cust_" + ability + "_save_prof"] = "(@{pb})";
}
});
allDrops.push(customClass);
} else {
allDrops.push(data["l1-class"].values.class);
};
//set up subclass drop
if(data["l1-class"].values.subclass && data["l1-class"].values["subclass_name"]) {
var customSubclass = {data:{}};
customSubclass.name = "Subclasses@@!!@@:" + data["l1-class"].values["subclass_name"];
traits = [];
for(var x = 1; x <= 4; x++) {
var trait = {};
if(data["l1-class"].values["custom_class_trait_name_" + x]) {
trait.Name = data["l1-class"].values["custom_class_trait_name_" + x];
trait.Desc = data["l1-class"].values["custom_class_trait_desc_" + x] || "";
traits.push(trait);
}
}
if(traits.length > 0) {
customSubclass.data["data-Traits"] = JSON.stringify(traits);
}
allDrops.push(customSubclass);
} else if(data["l1-class"].values.subclass) {
allDrops.push(data["l1-class"].values.subclass);
};
//set up race drop
if(data["l1-race"].values["race_name"] && !data["l1-race"].data.race) {
var customRace = {data: {}};
customRace.name = "Races@@!!@@:" + data["l1-race"].values["race_name"];
if(data["l1-race"].values.size) {
customRace.data.Size = data["l1-race"].values.size;
}
if(data["l1-race"].values.speed) {
customRace.data.Speed = data["l1-race"].values.speed;
}
traits = [];
for(var x = 1; x <= 4; x++) {
var trait = {};
if(data["l1-race"].values["custom_race_trait_name_" + x]) {
trait.Name = data["l1-race"].values["custom_race_trait_name_" + x];
trait.Desc = data["l1-race"].values["custom_race_trait_desc_" + x] || "";
traits.push(trait);
}
}
if(traits.length > 0) {
customRace.data["data-Traits"] = JSON.stringify(traits);
}
allDrops.push(customRace);
} else {
allDrops.push(data["l1-race"].values.race);
}
//set up subrace drop
if(data["l1-race"].values.subrace && data["l1-race"].values["subrace_name"]) {
var customSubrace = {data: {}};
customSubrace.name = "Subraces@@!!@@:" + data["l1-race"].values["subrace_name"];
customSubrace.data["data-Parent"] = data["l1-race"].values.race.split(":")[1];
if(data["l1-race"].values.speed) {
customSubrace.data.Speed = data["l1-race"].values.speed;
}
traits = [];
for(var x = 1; x <= 4; x++) {
var trait = {};
if(data["l1-race"].values["custom_race_trait_name_" + x]) {
trait.Name = data["l1-race"].values["custom_race_trait_name_" + x];
trait.Desc = data["l1-race"].values["custom_race_trait_desc_" + x] || "";
traits.push(trait);
}
}
if(traits.length > 0) {
customSubrace.data["data-Traits"] = JSON.stringify(traits);
}
allDrops.push(customSubrace);
} else if(data["l1-race"].values.subrace) {
allDrops.push(data["l1-race"].values.subrace);
};
//set up feat drop
if(data["l1-feat"] && data["l1-feat"].values.feat) {
var feat = {name: data["l1-feat"].values.feat, data: {Properties: "1st Level"}};
allDrops.push(feat);
}
//set up background drop
if(data["l1-background"].values.background) {
if(data["l1-background"].values.background == "Rules:Backgrounds") {
var customBg = {data:{}};
customBg.name = "Backgrounds@@!!@@:" + data["l1-background"].values["background_name"];
if(data["l1-background"].values["custom_background_trait_name"]) {
var trait = {};
trait.Name = data["l1-background"].values["custom_background_trait_name"];
trait.Desc = data["l1-background"].values["custom_background_trait_desc"] || "";
customBg.data["data-Traits"] = JSON.stringify([trait]);
}
//console.log(customBg);
allDrops.push(customBg);
} else {
allDrops.push(data["l1-background"].values.background);
}
}
//Now add proficiency drops
_.each(["Armor", "Language", "Tool", "Weapon"], function(proftype) {
_.each(stats.proficiencies[proftype.toLowerCase()], function(prof) {
var profdata = {name: "Proficiencies:" + prof, data: {Type: proftype}}
if(stats.expertise.indexOf(prof) != -1) {
profdata.data["toolbonus_base"] = "(@{pb}*2)";
}
allDrops.push(profdata);
});
});
//add custom proficiencies
_.each(["race", "class"], function(section) {
if(data["l1-" + section].values["custom_" + section + "_prof_name_choice1"]) {
for(var x=1; x<=4; x++) {
if(data["l1-" + section].values["custom_" + section + "_prof_name_choice" + x]
&& data["l1-" + section].values["custom_" + section + "_prof_type_choice" + x]) {
var profdata = {data: {}}
profdata["name"] = "Proficiencies:" + data["l1-" + section].values["custom_" + section + "_prof_name_choice" + x];
profdata.data.Type = data["l1-" + section].values["custom_" + section + "_prof_type_choice" + x].toLowerCase().replace("skill", "skillcustom");
allDrops.push(profdata);
}
}
}
})
//Next, add power drops
_.each(powers, function(power) {
var powerdata = {name: "Powers:" + power.name};
powerdata.data = {"powercasting_ability": "@{" +power.ability.toLowerCase() + "_mod}+"};
allDrops.push(powerdata);
});
//Add equipment choice drops unless starting gold was chosen
if (data["l1-equipment"].values["equipment_type"] != "gold") {
_.each(data["l1-equipment"].values, function(val, name) {
if(name.includes("background_equipment_choice")) {
equipment = equipment.concat(val.split(" and "));
}
});
}
//Set up the final setAttrs()
set["alignment"] = data["l1-race"].values.alignment || "";
set["age"] = data["l1-race"].values.age || "";
set["hp"] = stats.hp;
set["hp_max"] = stats.hp;
set["l1mancer_status"] = "completed";
set["options-class-selection"] = "0";
if(data["l1-equipment"].values["equipment_type"] == "class") {
_.each(data["l1-equipment"].values, function(val, name) {
if(name.includes("class_equipment_choice")) {
equipment = equipment.concat(val.split(" and "));
}
});
} else if(data["l1-equipment"].values["equipment_type"] == "gold" && data["l1-equipment"].values["starting_gold"]) {
set["gp"] = parseInt(data["l1-equipment"].values["starting_gold"]);
}
//Add skill proficiencies
_.each(_.uniq(stats.proficiencies.skill.concat(stats.expertise)), function(prof) {
var profName = prof.toLowerCase().replace(" " , "_");
set[profName + "_prof"] = "(@{pb}*@{" + profName + "_type})";
if(stats.expertise.indexOf(prof) != -1) {
set[profName + "_type"] = 2;
}
});
//Add background traits
if(data["l1-background"].values["background_personality_choice1"] || data["l1-background"].values["background_personality_choice2"]) {
var choice1 = data["l1-background"].values["background_personality_choice1"] || false;
var choice2 = data["l1-background"].values["background_personality_choice2"] || false;
choice1 = choice1 || choice2;
if(choice1) {
set["personality_traits"] = choice1;
}
if(choice2) {
set["personality_traits"] += "\n\n" + choice2;
}
set["options-flag-personality"] = 0;
}
_.each(["ideal", "bond", "flaw"], function(type) {
if(data["l1-background"].values["background_" + type + "_choice"]) {
set[type + "s"] = data["l1-background"].values["background_" + type + "_choice"];
set["options-flag-" + type + "s"] = 0;
}
});
if(data["l1-background"].values["background_detail_choice"]) {
set["background"] = _.last(data["l1-background"].values["background"].split(":")) + " (" + data["l1-background"].values["background_detail_choice"] + ")";
}
allDrops = allDrops.concat(makeItemData(equipment));
totalDrops += allDrops.length;
//erase all repeating sections
eraseRepeating(eraseSections, function() {
//first set is silent to prevent unwanted sheet workers
setAttrs(silentset, {silent:true}, function() {
//reset remaining attributes, and set ability scores/custom info
setAttrs(clearset, function() {
doAllDrops(allDrops, function() {
console.log("DOING THE FINAL SET!!");
setAttrs(set, function() {
update_skills(allSkills);
update_attacks("all");
organize_section_proficiencies();
if(set["cust_classname"]) {
update_class();
}
finishCharactermancer();
});
});
});
});
});
});
</script>
<!-- CHARACTERMANCERS -->
<charmancer class="sheet-charmancer-l1-welcome">
<div class="charmancer container">
<ol class="steps">
<li><button class="step here" type="here" value="l1-welcome" data-i18n="charmancer-start">START</button></li>
<li><button class="step" type="back" value="l1-race" data-i18n="race-u">RACE</button></li>
<li><button class="step" type="back" value="l1-class" data-i18n="class-u">CLASS</button></li>
<li><button class="step" type="back" value="l1-abilities" data-i18n="abilities-u">ABILITIES</button></li>
<li><button class="step" type="back" value="l1-background" data-i18n="background-u">BACKGROUND</button></li>
<li><button class="step" type="back" value="l1-equipment" data-i18n="equipment-u">EQUIPMENT</button></li>
<li><button class="step" type="back" value="l1-powers" data-i18n="powers-u">POWERS</button></li>
<li><button class="step" type="back" value="l1-feat" data-i18n="feats-u">FEATS</button></li>
<li><button class="step" type="back" value="l1-summary" data-i18n="review-u">REVIEW</button></li>
<li><button class="exit" type="action" name="act_cancel" data-i18n="cancel-u">CANCEL</button></li>
</ol>
<p class="label" data-i18n="charmancer-welcome">Welcome to the Charactermancer!</p>
<p data-i18n="charmancer-what-is">The Charactermancer is step-by-step process that makes building a character simple and streamlined. Changes are saved as you progress, but have no fear. The character sheet is only updated when you have completed your review.</p>
<p class="label" data-i18n="charmancer-compendium">Your Compendium Awaits.</p>
<p data-i18n="charmancer-compendium-detail">The Charactermancer currently supports Dungeons &amp; Dragons 5th Edition SRD and the Player's Handbook. You can add the Player's Handbook to your compendium in the Marketplace, or the game owner can share their compendium with everyone in the game.</p>
<p class="label" data-i18n="get-started">Get started by clicking "Next".</p>
<div class="bottombar">
<button class="prev" type="cancel" value="l1-cancel" data-i18n="opt-out-u">OPT OUT</button>
<button type="button" data-scroll="#top" class="jump">Back to Top</button>
<button class="next" type="back" value="l1-race">Next</button>
</div>
<div class="choice cancel-prompt">
<p class="label" data-i18n="charmancer-cancel-heading">Where would you like to go, traveler?</p>
<button class="warning" type="cancel" value="l1-cancel" data-i18n="cancel_charactermancer">Discard and exit</button>
<button type="cancel" value="l1-powers" data-i18n="save_progress_and_exit">Save and Exit</button>
<button type="action" name="act_continue"><span data-i18n="continue-charmancer">Continue Charactermancer</span></button>
<p class="warning"><span data-i18n="charmancer-discard-warning">Discard and Exit will discard all choices youve made in Charactermancer and let you edit your character sheet directly.</span></p>
</div>
</div>
</charmancer>
<charmancer class="sheet-charmancer-l1-race">
<div class="charmancer container">
<ol class="steps">
<li><button class="step" type="back" value="l1-welcome" data-i18n="charmancer-start">START</button></li>
<li><button class="step here" type="here" value="l1-race" data-i18n="race-u">RACE</button></li>
<li><button class="step" type="back" value="l1-class" data-i18n="class-u">CLASS</button></li>
<li><button class="step" type="back" value="l1-abilities" data-i18n="abilities-u">ABILITIES</button></li>
<li><button class="step" type="back" value="l1-background" data-i18n="background-u">BACKGROUND</button></li>
<li><button class="step" type="back" value="l1-equipment" data-i18n="equipment-u">EQUIPMENT</button></li>
<li><button class="step" type="back" value="l1-powers" data-i18n="powers-u">POWERS</button></li>
<li><button class="step" type="back" value="l1-feat" data-i18n="feats-u">FEATS</button></li>
<li><button class="step" type="back" value="l1-summary" data-i18n="review-u">REVIEW</button></li>
<li><button class="exit" type="action" name="act_cancel" data-i18n="cancel-u">CANCEL</button></li>
</ol>
<div class="topbar">
<div class="sheet-attr-container">
<h4 data-i18n="strength">Strength</h4>
<span class="strength_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="dexterity">Dexterity</h4>
<span class="dexterity_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="constitution">Constitution</h4>
<span class="constitution_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="intelligence">Intelligence</h4>
<span class="intelligence_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="wisdom">Wisdom</h4>
<span class="wisdom_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="charisma">Charisma</h4>
<span class="charisma_total">-</span>
</div>
<div class="meta-info-container">
<span class="label"><span data-i18n="hp">Hit Points</span>: <span class="hit_points"></span></span>
<span class="choice label class_suggested_abilities_container"><span data-i18n="suggested-abilities">Suggested Abilities: </span><span class="label class_suggested_abilities"></span></span>
<span class="choice label class_powercasting_ability_container"><span data-i18n="class-powercasting">Class Powercasting Ability: </span><span class="label class_powercasting_ability"></span></span>
</div>
</div>
<div class="choices">
<div>
<div class="row">
<label class="hilite"><span data-i18n="charmancer-choose-race">Choose a race:</span>
<select name="comp_race" accept="Category:Races" required>
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="Rules:Races" data-i18n="custom">Custom</option>
</select>
<button type="action" name="act_info_race" class="mancer_info">i</button>
</label>
<div class="choice custom_race">
<label class="hilite"><span data-i18n="charmancer-custom-race-name">Custom Race Name:</span>
<input type="text" name="comp_race_name" placeholder="Custom Race" required>
</label>
</div>
</div>
<div class="choice row race_possible custom_race race_abilities">
<label><span data-i18n="ability-score-increase">Ability Score Increase:</span>
<p class="race_ability_score race_text"></p>
<select class="choice race_possible race_ability_choice1" name="comp_race_ability_choice1">
<option value="" data-i18n="choose">Choose</option>
<option value="strength" data-i18n="strength">Strength</option>
<option value="dexterity" data-i18n="dexterity">Dexterity</option>
<option value="constitution" data-i18n="constitution">Constitution</option>
<option value="intelligence" data-i18n="intelligence">Intelligence</option>
<option value="wisdom" data-i18n="wisdom">Wisdom</option>
<option value="charisma" data-i18n="charisma">Charisma</option>
</select>
<select class="choice race_possible race_ability_choice2" name="comp_race_ability_choice2">
<option value="" data-i18n="choose">Choose</option>
<option value="strength" data-i18n="strength">Strength</option>
<option value="dexterity" data-i18n="dexterity">Dexterity</option>
<option value="constitution" data-i18n="constitution">Constitution</option>
<option value="intelligence" data-i18n="intelligence">Intelligence</option>
<option value="wisdom" data-i18n="wisdom">Wisdom</option>
<option value="charisma" data-i18n="charisma">Charisma</option>
</select>
<label class="choice custom_race"><span data-i18n="strength">Strength:</span>
<input class="choice custom_race" type="number" name="comp_race_custom_strength" value="0" min="-5" max="5">
</label>
<label class="choice custom_race"><span data-i18n="dexterity">Dexterity:</span>
<input class="choice custom_race" type="number" name="comp_race_custom_dexterity" value="0" min="-5" max="5">
</label>
<label class="choice custom_race"><span data-i18n="constitution">Constitution:</span>
<input class="choice custom_race" type="number" name="comp_race_custom_constitution" value="0" min="-5" max="5">
</label>
<label class="choice custom_race"><span data-i18n="intelligence">Intelligence:</span>
<input class="choice custom_race" type="number" name="comp_race_custom_intelligence" value="0" min="-5" max="5">
</label>
<label class="choice custom_race"><span data-i18n="wisdom">Wisdom:</span>
<input class="choice custom_race" type="number" name="comp_race_custom_wisdom" value="0" min="-5" max="5">
</label>
<label class="choice custom_race"><span data-i18n="charisma">Charisma:</span>
<input class="choice custom_race" type="number" name="comp_race_custom_charisma" value="0" min="-5" max="5">
</label>
</label>
</div>
<div class="choice row race_always custom_race">
<label><span data-i18n="age">Age:</span>
<input type="number" name="comp_age" min="0">
</label>
</div>
<div class="choice row race_always custom_race">
<label><span data-i18n="alignment">Alignment:</span>
<select name="comp_alignment"> <!-- Character%20Advancement#h-Alignment -->
<option value="" data-i18n="choose">Choose</option>
<option value="Lawful Good" data-i18n="lawful-good">Lawful Good</option>
<option value="Neutral Good" data-i18n="neutral-good">Neutral Good</option>
<option value="Chaotic Good" data-i18n="chaotic-good">Chaotic Good</option>
<option value="Lawful Neutral" data-i18n="lawful-neutral">Lawful Neutral</option>
<option value="Neutral" data-i18n="neutral">Neutral</option>
<option value="Chaotic Neutral" data-i18n="chaotic-neutral">Chaotic Neutral</option>
<option value="Lawful Evil" data-i18n="lawful-evil">Lawful Evil</option>
<option value="Neutral Evil" data-i18n="neutral-evil">Neutral Evil</option>
<option value="Chaotic Evil" data-i18n="chaotic-evil">Chaotic Evil</option>
</select>
</label>
</div>
<div class="choice row race_always custom_race">
<label><span data-i18n="size">Size:</span>
<p class="race_size race_text"></p>
<select class="choice custom_race" name="comp_size">
<option value="" data-i18n="choose">Choose</option>
<option value="Tiny" data-i18n="tiny">Tiny</option>
<option value="Small" data-i18n="small">Small</option>
<option value="Medium" data-i18n="medium">Medium</option>
<option value="Large" data-i18n="large">Large</option>
<option value="Huge" data-i18n="huge">Huge</option>
<option value="Gargantuan" data-i18n="gargantuan">Gargantuan</option>
</select>
</label>
</div>
<div class="choice row race_always custom_race">
<label><span data-i18n="speed">Speed:</span>
<p class="race_speed race_text"></p>
<input class="choice custom_race" type="number" name="comp_speed" min="0">
</label>
</div>
<div class="choice row race_possible race_language_row custom_race">
<label><span data-i18n="language-proficiencies">Language Proficiencies:</span>
<p class="race_languages race_text"></p>
<select class="choice race_possible race_language_choice1 custom_race" name="comp_race_language_choice1">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice race_possible race_language_choice1_custom" name="comp_race_language_choice1_custom">
<select class="choice race_possible race_language_choice2" name="comp_race_language_choice2">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice race_possible race_language_choice2_custom" name="comp_race_language_choice2_custom">
<select class="choice race_possible race_language_choice3" name="comp_race_language_choice3">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice race_possible race_language_choice3_custom" name="comp_race_language_choice3_custom">
<select class="choice race_possible race_language_choice4" name="comp_race_language_choice4">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice race_possible race_language_choice4_custom" name="comp_race_language_choice4_custom">
</label>
</div>
<div class="choice row race_possible race_skill_row custom_race">
<label><span data-i18n:"skill-proficiencies">Skill Proficiencies:</span>
<p class="race_skills race_text"></p>
<select class="choice race_possible race_skill_choice1 custom_race" name="comp_race_skill_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_skill_choice2" name="comp_race_skill_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_skill_choice3" name="comp_race_skill_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_skill_choice4" name="comp_race_skill_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row race_possible race_weapon_row custom_race">
<label><span data-i18n:"weapon-proficiencies">Weapon Proficiencies:</span>
<p class="race_weapons race_text"></p>
<select class="choice race_possible race_weapon_choice1 custom_race" name="comp_race_weapon_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_weapon_choice2" name="comp_race_weapon_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_weapon_choice3" name="comp_race_weapon_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_weapon_choice4" name="comp_race_weapon_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row race_possible race_armor_row custom_race">
<label><span data-i18n:"armor-proficiencies">Armor Proficiencies:</span>
<p class="race_armors race_text"></p>
<select class="choice race_possible race_armor_choice1 custom_race" name="comp_race_armor_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_armor_choice2" name="comp_race_armor_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_armor_choice3" name="comp_race_armor_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_armor_choice4" name="comp_race_armor_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row race_possible race_tool_row custom_race">
<label>Tool Proficiencies:
<p class="race_tools race_text"></p>
<select class="choice race_possible race_tool_choice1 custom_race" name="comp_race_tool_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_tool_choice2" name="comp_race_tool_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_tool_choice3" name="comp_race_tool_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice race_possible race_tool_choice4" name="comp_race_tool_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row race_possible race_traits race_text">
</div>
<div class="choice subrace">
<div class="row">
<label class="hilite">Subrace:
<select class="choose_subrace" name="comp_subrace" required>
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="Rules:Races" data-i18n="custom">Custom</option>
</select>
<button type="action" name="act_info_subrace" class="mancer_info">i</button>
</label>
<div class="choice custom_subrace">
<label class="hilite">Custom Subrace Name:
<input type="text" name="comp_subrace_name" placeholder="Custom Subrace" required>
</label>
</div>
</div>
<div class="choice subrace_options">
<div class="row choice subrace_possible subrace_abilities">
<label>Subrace Ability Score Increase:
<p class="subrace_ability_score subrace_text"></p>
<select class="choice subrace_possible subrace_ability_choice1" name="comp_subrace_ability_choice1">
<option value="" data-i18n="choose">Choose</option>
<option value="strength" data-i18n="strength">Strength</option>
<option value="dexterity" data-i18n="dexterity">Dexterity</option>
<option value="constitution" data-i18n="constitution">Constitution</option>
<option value="intelligence" data-i18n="intelligence">Intelligence</option>
<option value="wisdom" data-i18n="wisdom">Wisdom</option>
<option value="charisma" data-i18n="charisma">Charisma</option>
</select>
<select class="choice subrace_possible subrace_ability_choice2" name="comp_subrace_ability_choice2">
<option value="" data-i18n="choose">Choose</option>
<option value="strength" data-i18n="strength">Strength</option>
<option value="dexterity" data-i18n="dexterity">Dexterity</option>
<option value="constitution" data-i18n="constitution">Constitution</option>
<option value="intelligence" data-i18n="intelligence">Intelligence</option>
<option value="wisdom" data-i18n="wisdom">Wisdom</option>
<option value="charisma" data-i18n="charisma">Charisma</option>
</select>
<label class="choice custom_subrace">Strength:
<input class="choice custom_subrace" type="number" name="comp_subrace_custom_strength" value="0" min="-5" max="5">
</label>
<label class="choice custom_subrace">Dexterity:
<input class="choice custom_subrace" type="number" name="comp_subrace_custom_dexterity" value="0" min="-5" max="5">
</label>
<label class="choice custom_subrace">Constitution:
<input class="choice custom_subrace" type="number" name="comp_subrace_custom_constitution" value="0" min="-5" max="5">
</label>
<label class="choice custom_subrace">Intelligence:
<input class="choice custom_subrace" type="number" name="comp_subrace_custom_intelligence" value="0" min="-5" max="5">
</label>
<label class="choice custom_subrace">Wisdom:
<input class="choice custom_subrace" type="number" name="comp_subrace_custom_wisdom" value="0" min="-5" max="5">
</label>
<label class="choice custom_subrace">Charisma:
<input class="choice custom_subrace" type="number" name="comp_subrace_custom_charisma" value="0" min="-5" max="5">
</label>
</label>
</div>
<div class="row choice subrace_possible subrace_speed_row custom_subrace">
<label>Subrace Speed:
<p class="subrace_speed subrace_text"></p>
<input class="choice custom_subrace" type="number" name="comp_speed" min="0">
</label>
</div>
<div class="row choice subrace_possible subrace_language_row custom_subrace">
<label>Language Proficiencies:
<p class="subrace_languages subrace_text"></p>
<select class="choice custom_subrace subrace_possible subrace_language_choice1" name="comp_subrace_language_choice1">
<option value="" data-i18n="choose">Choose</option>
<option value="custom" class="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice subrace_possible subrace_language_choice1_custom" name="comp_subrace_language_choice1_custom">
<select class="choice subrace_possible subrace_language_choice2" name="comp_subrace_language_choice2">
<option value="" data-i18n="choose">Choose</option>
<option value="custom" class="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice subrace_possible subrace_language_choice2_custom" name="comp_subrace_language_choice2_custom">
<select class="choice subrace_possible subrace_language_choice3" name="comp_subrace_language_choice3">
<option value="" data-i18n="choose">Choose</option>
<option value="custom" class="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice subrace_possible subrace_language_choice3_custom" name="comp_subrace_language_choice3_custom">
<select class="choice subrace_possible subrace_language_choice4" name="comp_subrace_language_choice4">
<option value="" data-i18n="choose">Choose</option>
<option value="custom" class="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice subrace_possible subrace_language_choice4_custom" name="comp_subrace_language_choice4_custom">
</label>
</div>
<div class="row choice subrace_possible subrace_skill_row custom_subrace">
<label>Skill Proficiencies:
<p class="subrace_skills subrace_text"></p>
<select class="choice custom_subrace subrace_possible subrace_skill_choice1" name="comp_subrace_skill_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_skill_choice2" name="comp_subrace_skill_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_skill_choice3" name="comp_subrace_skill_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_skill_choice4" name="comp_subrace_skill_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="row choice subrace_possible subrace_weapon_row custom_subrace">
<label>Weapon Proficiencies:
<p class="subrace_weapons subrace_text"></p>
<select class="choice custom_subrace subrace_possible subrace_weapon_choice1" name="comp_subrace_weapon_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_weapon_choice2" name="comp_subrace_weapon_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_weapon_choice3" name="comp_subrace_weapon_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_weapon_choice4" name="comp_subrace_weapon_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="row choice subrace_possible subrace_armor_row custom_subrace">
<label>Armor Proficiencies:
<p class="subrace_armors subrace_text"></p>
<select class="choice custom_subrace subrace_possible subrace_armor_choice1" name="comp_subrace_armor_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_armor_choice2" name="comp_subrace_armor_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_armor_choice3" name="comp_subrace_armor_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_armor_choice4" name="comp_subrace_armor_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="row choice subrace_possible subrace_tool_row custom_subrace">
<label>Tool Proficiencies:
<p class="subrace_tools subrace_text"></p>
<select class="choice custom_subrace subrace_possible subrace_tool_choice1" name="comp_subrace_tool_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_tool_choice2" name="comp_subrace_tool_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_tool_choice3" name="comp_subrace_tool_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subrace_possible subrace_tool_choice4" name="comp_subrace_tool_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="row subrace_traits subrace_text">
</div>
</div>
</div>
<div class="choice row race_possible custom_race custom_subrace">
<label>Other (Custom) Proficiencies:
<div class="custom_prof_choice1">
<select class="custom_race_prof_type_choice2" name="comp_custom_race_prof_type_choice1">
<option value="" data-i18n="choose">Choose</option>
<option value="armor">Armor</option>
<option value="weapon">Weapon</option>
<option value="tool">Tool</option>
<option value="skill">Skill</option>
<option value="other">Other</option>
</select>
<input type="text" class="custom_race_prof_name_choice1" name="comp_custom_race_prof_name_choice1">
</div>
<div class="choice race_possible subrace_possible custom_prof_choice2">
<select class="custom_race_prof_type_choice2" name="comp_custom_race_prof_type_choice2">
<option value="" data-i18n="choose">Choose</option>
<option value="armor">Armor</option>
<option value="weapon">Weapon</option>
<option value="tool">Tool</option>
<option value="skill">Skill</option>
<option value="other">Other</option>
</select>
<input type="text" class="custom_race_prof_name_choice2" name="comp_custom_race_prof_name_choice2">
</div>
<div class="choice race_possible subrace_possible custom_prof_choice3">
<select class="custom_race_prof_type_choice3" name="comp_custom_race_prof_type_choice3">
<option value="" data-i18n="choose">Choose</option>
<option value="armor">Armor</option>
<option value="weapon">Weapon</option>
<option value="tool">Tool</option>
<option value="skill">Skill</option>
<option value="other">Other</option>
</select>
<input type="text" class="custom_race_prof_name_choice3" name="comp_custom_race_prof_name_choice3">
</div>
<div class="choice race_possible subrace_possible custom_prof_choice4">
<select class="custom_race_prof_type_choice4" name="comp_custom_race_prof_type_choice4">
<option value="" data-i18n="choose">Choose</option>
<option value="armor">Armor</option>
<option value="weapon">Weapon</option>
<option value="tool">Tool</option>
<option value="skill">Skill</option>
<option value="other">Other</option>
</select>
<input type="text" class="custom_race_prof_name_choice4" name="comp_custom_race_prof_name_choice4">
</div>
</label>
</div>
<div class="choice row race_possible custom_race custom_subrace">
<label>Traits:
<div class="custom_trait_1">
<input type="text" name="comp_custom_race_trait_name_1">
<textarea name="comp_custom_race_trait_desc_1"></textarea>
</div>
<div class="choice subrace_possible race_possible custom_trait_2">
<input type="text" name="comp_custom_race_trait_name_2">
<textarea name="comp_custom_race_trait_desc_2"></textarea>
</div>
<div class="choice subrace_possible race_possible custom_trait_3">
<input type="text" name="comp_custom_race_trait_name_3">
<textarea name="comp_custom_race_trait_desc_3"></textarea>
</div>
<div class="choice subrace_possible race_possible custom_trait_4">
<input type="text" name="comp_custom_race_trait_name_4">
<textarea name="comp_custom_race_trait_desc_4"></textarea>
</div>
</label>
</div>
<div class="choice row race_possible custom_race custom_subrace">
<label>Innate Powercasting:
<label>Powercasting Ability:
<select name="comp_custom_race_power_ability">
<option value="" data-i18n="choose">Choose</option>
<option value="Strength" data-i18n="strength">Strength</option>
<option value="Dexterity" data-i18n="dexterity">Dexterity</option>
<option value="Constitution" data-i18n="constitution">Constitution</option>
<option value="Intelligence" data-i18n="intelligence">Intelligence</option>
<option value="Wisdom" data-i18n="wisdom">Wisdom</option>
<option value="Charisma" data-i18n="charisma">Charisma</option>
</select>
</label>
<label class="hilite choice custom_powercasting">Number of Cantrips:
<input type="number" name="comp_custom_race_power_number" min="1" value="1" required>
</label>
<label class="hilite choice custom_powercasting">Power List:
<select name="comp_custom_race_power_list" required>
<option value="" data-i18n="choose">Choose</option>
<option value="scholar" data-i18n="scholar">Scholar</option>
<option value="engineer" data-i18n="engineer">Engineer</option>
<option value="guardian" data-i18n="guardian">Guardian</option>
<option value="scout" data-i18n="scout">Scout</option>
<option value="sentinel" data-i18n="sentinel">Sentinel</option>
<option value="consular" data-i18n="consular">Consular</option>
</select>
</label>
</label>
</div>
</div>
</div>
<div class="info">
<div class="sheet-compendium-page sheet-race-info" accept="Rules:Races"></div>
</div>
<div class="bottombar">
<button class="prev" type="back" value="l1-welcome">Back</button>
<button type="button" data-scroll="#top" class="jump">Back to Top</button>
<button class="next" type="back" value="l1-class">Next</button>
</div>
<div class="choice cancel-prompt">
<p class="label">Where would you like to go, Traveler?</p>
<button class="warning" type="cancel" value="l1-cancel" data-i18n="cancel_charactermancer">Discard and exit</button>
<button type="cancel" value="l1-powers" data-i18n="save_progress_and_exit">Save and Exit</button>
<button type="action" name="act_continue" data-i18n="continue-charmancer">Continue Charactermancer</button>
<p class="warning"><span data-i18n="charmancer-discard-warning">Discard and Exit will discard any choices made and let you edit your character sheet directly.</span></p>
</div>
<input type="hidden" name="comp_has_subrace">
</div>
</charmancer>
<charmancer class="sheet-charmancer-l1-class">
<div class="charmancer container">
<ol class="steps">
<li><button class="step" type="back" value="l1-welcome" data-i18n="charmancer-start">START</button></li>
<li><button class="step" type="back" value="l1-race" data-i18n="race-u">RACE</button></li>
<li><button class="step here" type="here" value="l1-class" data-i18n="class-u">CLASS</button></li>
<li><button class="step" type="back" value="l1-abilities" data-i18n="abilities-u">ABILITIES</button></li>
<li><button class="step" type="back" value="l1-background" data-i18n="background-u">BACKGROUND</button></li>
<li><button class="step" type="back" value="l1-equipment" data-i18n="equipment-u">EQUIPMENT</button></li>
<li><button class="step" type="back" value="l1-powers" data-i18n="powers-u">POWERS</button></li>
<li><button class="step" type="back" value="l1-feat" data-i18n="feats-u">FEATS</button></li>
<li><button class="step" type="back" value="l1-summary" data-i18n="review-u">REVIEW</button></li>
<li><button class="exit" type="action" name="act_cancel" data-i18n="cancel" data-i18n="cancel-u">EXIT</button></li>
</ol>
<div class="topbar">
<div class="sheet-attr-container">
<h4 data-i18n="strength">Strength</h4>
<span class="strength_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="dexterity">Dexterity</h4>
<span class="dexterity_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="constitution">Constitution</h4>
<span class="constitution_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="intelligence">Intelligence</h4>
<span class="intelligence_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="wisdom">Wisdom</h4>
<span class="wisdom_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="charisma">Charisma</h4>
<span class="charisma_total">-</span>
</div>
<div class="meta-info-container">
<span class="label"><span data-i18n="hp">Hit Points</span>: <span class="hit_points"></span></span>
<span class="choice label class_suggested_abilities_container"><span data-i18n="suggested-abilities">Suggested Abilities: </span><span class="label class_suggested_abilities"></span></span>
<span class="choice label class_powercasting_ability_container"><span data-i18n="class-powercasting">Class Powercasting Ability: </span><span class="label class_powercasting_ability"></span></span>
</div>
</div>
<div class="choices">
<div>
<div class="row">
<label class="hilite">Choose a class:
<select name="comp_class" accept="Category:Classes" required>
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="Rules:Classes" data-i18n="custom">Custom</option>
</select>
<button type="action" name="act_info_class" class="mancer_info">i</button>
</label>
<div class="choice custom_class">
<label class="hilite">Custom Class Name:
<input type="text" name="comp_class_name" placeholder="Custom Class" required>
</label>
</div>
</div>
<div class="choice classes_options">
<div class="choice row custom_class">
<label class="hilite">Hit Die:
<select name="comp_custom_hit_die" required>
<option value="" data-i18n="choose">Choose</option>
<option value="4" >d4</option>
<option value="6" >d6</option>
<option value="8" >d8</option>
<option value="10" >d10</option>
<option value="12" >d12</option>
</select>
</label>
</div>
<div class="choice row custom_class">
<span>Saving Throw Proficiency:
<label><input type="checkbox" name="comp_strength_save" value="true">Strength</label>
<label><input type="checkbox" name="comp_dexterity_save" value="true">Dexterity</label>
<label><input type="checkbox" name="comp_constitution_save" value="true">Constitution</label>
<label><input type="checkbox" name="comp_intelligence_save" value="true">Intelligence</label>
<label><input type="checkbox" name="comp_wisdom_save" value="true">Wisdom</label>
<label><input type="checkbox" name="comp_charisma_save" value="true">Charisma</label>
</span>
</div>
<div class="choice row class_possible class_language_row custom_class">
<label>Language Proficiencies:
<p class="class_languages class_text"></p>
<select class="choice class_possible class_language_choice1 custom_class" name="comp_class_language_choice1">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice class_possible class_language_choice1_custom" name="comp_class_language_choice1_custom">
<select class="choice class_possible class_language_choice2" name="comp_class_language_choice2">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice class_possible class_language_choice2_custom" name="comp_class_language_choice2_custom">
<select class="choice class_possible class_language_choice3" name="comp_class_language_choice3">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice class_possible class_language_choice3_custom" name="comp_class_language_choice3_custom">
<select class="choice class_possible class_language_choice4" name="comp_class_language_choice4">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice class_possible class_language_choice4_custom" name="comp_class_language_choice4_custom">
</label>
</div>
<div class="choice row class_possible class_skill_row custom_class">
<label>Skill Proficiencies:
<p class="class_skills class_text"></p>
<select class="choice class_possible class_skill_choice1 custom_class" name="comp_class_skill_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_skill_choice2" name="comp_class_skill_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_skill_choice3" name="comp_class_skill_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_skill_choice4" name="comp_class_skill_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row class_possible class_weapon_row custom_class">
<label>Weapon Proficiencies:
<p class="class_weapons class_text"></p>
<select class="choice class_possible class_weapon_choice1 custom_class" name="comp_class_weapon_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_weapon_choice2" name="comp_class_weapon_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_weapon_choice3" name="comp_class_weapon_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_weapon_choice4" name="comp_class_weapon_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row class_possible class_armor_row custom_class">
<label>Armor Proficiencies:
<p class="class_armors class_text"></p>
<select class="choice class_possible class_armor_choice1 custom_class" name="comp_class_armor_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_armor_choice2" name="comp_class_armor_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_armor_choice3" name="comp_class_armor_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_armor_choice4" name="comp_class_armor_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row class_possible class_tool_row custom_class">
<label>Tool Proficiencies:
<p class="class_tools class_text"></p>
<select class="choice class_possible class_tool_choice1 custom_class" name="comp_class_tool_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_tool_choice2" name="comp_class_tool_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_tool_choice3" name="comp_class_tool_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_tool_choice4" name="comp_class_tool_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row class_possible class_expertise_row">
<h4>Expertise</h4>
<span class="class_expertise class_text"></span>
<select class="choice class_possible class_expertise_choice_1" name="comp_class_expertise_choice_1">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
<select class="choice class_possible class_expertise_choice_2" name="comp_class_expertise_choice_2">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
</div>
<div class="choice row class_possible class_feature_row_1">
<h4 class="class_feature_name_1"></h4>
<span class="class_feature_1"></span>
<select class="class_possible class_feature_choice_1" name="comp_class_feature_choice_1">
<option value="" data-i18n="choose">Choose</option>
</select>
<p class="description class_feature_description_1"></p>
</div>
<div class="choice row class_possible class_feature_row_1_manual">
<p>
<input type="text" class="class_possible class_feature_choice_1_manual" name="comp_class_feature_choice_1_manual">
</p>
<p>
<input type="text" class="class_possible class_feature_choice_1_manual2" name="comp_class_feature_choice_1_manual2">
</p>
</div>
<div class="choice row class_possible class_feature_row_2">
<h4 class="class_feature_name_2"></h4>
<span class="class_feature_2"></span>
<select class="class_possible class_feature_choice_2" name="comp_class_feature_choice_2">
<option value="" data-i18n="choose">Choose</option>
</select>
<p class="description class_feature_description_2"></p>
</div>
<div class="choice row class_possible class_feature_row_3">
<h4 class="class_feature_name_3"></h4>
<span class="class_feature_3"></span>
<select class="class_possible class_feature_choice_3" name="comp_class_feature_choice_3">
<option value="" data-i18n="choose">Choose</option>
</select>
<p class="description class_feature_description_3"></p>
</div>
<div class="choice row class_possible class_traits_row">
<span class="class_traits class_text"></span>
</div>
<div class="choice subclass">
<div class="row">
<label class="hilite">
<span class="subclass_prompt subclass_text"></span>
<select name="comp_subclass" accept="Category:Classes" required>
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="Rules:Classes" data-i18n="custom">Custom</option>
</select>
<button type="action" name="act_info_subclass" class="mancer_info">i</button>
</label>
<div class="choice custom_subclass">
<label class="hilite">
<span class="custom_subclass_name">Custom sublass Name:</span>
<input type="text" name="comp_subclass_name" placeholder="Custom Sublass" required>
</label>
</div>
</div>
<div class="choice subclass_options">
<div class="row choice subclass_possible subclass_language_row custom_subclass">
<label>Language Proficiencies:
<p class="subclass_languages subclass_text"></p>
<select class="choice custom_subclass subclass_possible subclass_language_choice1" name="comp_subclass_language_choice1">
<option value="" data-i18n="choose">Choose</option>
<option value="custom" class="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice class_possible subclass_language_choice1_custom" name="comp_subclass_language_choice1_custom">
<select class="choice subclass_possible subclass_language_choice2" name="comp_subclass_language_choice2">
<option value="" data-i18n="choose">Choose</option>
<option value="custom" class="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice class_possible subclass_language_choice2_custom" name="comp_subclass_language_choice2_custom">
<select class="choice subclass_possible subclass_language_choice3" name="comp_subclass_language_choice3">
<option value="" data-i18n="choose">Choose</option>
<option value="custom" class="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice class_possible subclass_language_choice3_custom" name="comp_subclass_language_choice3_custom">
<select class="choice subclass_possible subclass_language_choice4" name="comp_subclass_language_choice4">
<option value="" data-i18n="choose">Choose</option>
<option value="custom" class="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice class_possible subclass_language_choice4_custom" name="comp_subclass_language_choice4_custom">
</label>
</div>
<div class="row choice subclass_possible subclass_skill_row custom_subclass">
<label>Skill Proficiencies:
<p class="subclass_skills subclass_text"></p>
<select class="choice custom_subclass subclass_possible subclass_skill_choice1" name="comp_subclass_skill_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_skill_choice2" name="comp_subclass_skill_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_skill_choice3" name="comp_subclass_skill_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_skill_choice4" name="comp_subclass_skill_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="row choice subclass_possible subclass_weapon_row custom_subclass">
<label>Weapon Proficiencies:
<p class="subclass_weapons subclass_text"></p>
<select class="choice custom_subclass subclass_possible subclass_weapon_choice1" name="comp_subclass_weapon_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_weapon_choice2" name="comp_subclass_weapon_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_weapon_choice3" name="comp_subclass_weapon_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_weapon_choice4" name="comp_subclass_weapon_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="row choice subclass_possible subclass_armor_row custom_subclass">
<label>Armor Proficiencies:
<p class="subclass_armors subclass_text"></p>
<select class="choice custom_subclass subclass_possible subclass_armor_choice1" name="comp_subclass_armor_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_armor_choice2" name="comp_subclass_armor_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_armor_choice3" name="comp_subclass_armor_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_armor_choice4" name="comp_subclass_armor_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="row choice subclass_possible subclass_tool_row custom_subclass">
<label>Tool Proficiencies:
<p class="subclass_tools subclass_text"></p>
<select class="choice custom_subclass subclass_possible subclass_tool_choice1" name="comp_subclass_tool_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_tool_choice2" name="comp_subclass_tool_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_tool_choice3" name="comp_subclass_tool_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice subclass_possible subclass_tool_choice4" name="comp_subclass_tool_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row subclass_possible subclass_expertise_row">
<h4>Expertise</h4>
<span class="subclass_expertise"></span>
<select class="choice class_possible subclass_expertise_choice_1" name="comp_subclass_expertise_choice_1">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
<select class="choice subclass_possible subclass_expertise_choice_2" name="comp_subclass_expertise_choice_2">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
</div>
<div class="choice row subclass_possible subclass_feature_row_1">
<h4 class="subclass_feature_name_1"></h4>
<span class="subclass_feature_1"></span>
<select class="subclass_possible subclass_feature_choice_1" name="comp_subclass_feature_choice_1">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
<p class="description subclass_feature_description_1"></p>
</div>
<div class="choice row subclass_possible subclass_feature_row_2">
<h4 class="subclass_feature_name_2"></h4>
<span class="subclass_feature_2"></span>
<select class="subclass_possible subclass_feature_choice_2" name="comp_subclass_feature_choice_2">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
<p class="description subclass_feature_description_2"></p>
</div>
<div class="row">
<span class="subclass_traits subclass_text"></span>
</div>
</div>
</div>
<div class="choice row custom_class custom_subclass">
<label>Other (Custom) Proficiencies:
<div class="custom_prof_choice1">
<select class="custom_class_prof_type_choice2" name="comp_custom_class_prof_type_choice1">
<option value="" data-i18n="choose">Choose</option>
<option value="armor">Armor</option>
<option value="weapon">Weapon</option>
<option value="tool">Tool</option>
<option value="skill">Skill</option>
<option value="other">Other</option>
</select>
<input type="text" class="custom_class_prof_name_choice1" name="comp_custom_class_prof_name_choice1">
</div>
<div class="choice custom_prof_choice2">
<select class="custom_class_prof_type_choice2" name="comp_custom_class_prof_type_choice2">
<option value="" data-i18n="choose">Choose</option>
<option value="armor">Armor</option>
<option value="weapon">Weapon</option>
<option value="tool">Tool</option>
<option value="skill">Skill</option>
<option value="other">Other</option>
</select>
<input type="text" class="custom_class_prof_name_choice2" name="comp_custom_class_prof_name_choice2">
</div>
<div class="choice custom_prof_choice3">
<select class="custom_class_prof_type_choice3" name="comp_custom_class_prof_type_choice3">
<option value="" data-i18n="choose">Choose</option>
<option value="armor">Armor</option>
<option value="weapon">Weapon</option>
<option value="tool">Tool</option>
<option value="skill">Skill</option>
<option value="other">Other</option>
</select>
<input type="text" class="custom_class_prof_name_choice3" name="comp_custom_class_prof_name_choice3">
</div>
<div class="choice custom_prof_choice4">
<select class="custom_class_prof_type_choice4" name="comp_custom_class_prof_type_choice4">
<option value="" data-i18n="choose">Choose</option>
<option value="armor">Armor</option>
<option value="weapon">Weapon</option>
<option value="tool">Tool</option>
<option value="skill">Skill</option>
<option value="other">Other</option>
</select>
<input type="text" class="custom_class_prof_name_choice4" name="comp_custom_class_prof_name_choice4">
</div>
</label>
</div>
<div class="choice row custom_class custom_subclass">
<label><span class="custom_feature_name">Custom Class Features:</span>
<div class="custom_trait_1">
<input type="text" name="comp_custom_class_trait_name_1">
<textarea name="comp_custom_class_trait_desc_1"></textarea>
</div>
<div class="choice custom_trait_2">
<input type="text" name="comp_custom_class_trait_name_2">
<textarea name="comp_custom_class_trait_desc_2"></textarea>
</div>
<div class="choice custom_trait_3">
<input type="text" name="comp_custom_class_trait_name_3">
<textarea name="comp_custom_class_trait_desc_3"></textarea>
</div>
<div class="choice custom_trait_4">
<input type="text" name="comp_custom_class_trait_name_4">
<textarea name="comp_custom_class_trait_desc_4"></textarea>
</div>
</label>
</div>
<div class="choice row custom_class custom_class_powers">
<label>Powercasting Ability:
<select name="comp_custom_class_power_ability">
<option value="" data-i18n="choose">Choose</option>
<option value="Strength" data-i18n="strength">Strength</option>
<option value="Dexterity" data-i18n="dexterity">Dexterity</option>
<option value="Constitution" data-i18n="constitution">Constitution</option>
<option value="Intelligence" data-i18n="intelligence">Intelligence</option>
<option value="Wisdom" data-i18n="wisdom">Wisdom</option>
<option value="Charisma" data-i18n="charisma">Charisma</option>
</select>
</label>
<label class="hilite choice custom_powercasting">Number of Cantrips:
<input type="number" name="comp_custom_class_cantrip_number" min="0" value="1" required>
</label>
<label class="hilite choice custom_powercasting">Number of Level 1 Powers:
<input type="number" name="comp_custom_class_power_number" min="0" value="1" required>
</label>
<label class="hilite choice custom_powercasting">Power List:
<select name="comp_custom_class_power_list" required>
<option value="" data-i18n="choose">Choose</option>
<option value="scholar" data-i18n="scholar">Scholar</option>
<option value="engineer" data-i18n="engineer">Engineer</option>
<option value="guardian" data-i18n="guardian">Guardian</option>
<option value="scout" data-i18n="scout">Scout</option>
<option value="sentinel" data-i18n="sentinel">Sentinel</option>
<option value="consular" data-i18n="consular">Consular</option>
</select>
</label>
</div>
<div class="choice row custom_additional_powers custom_subclass">
<label>Additional Cantrips:
<input type="number" name="comp_custom_subclass_cantrip_number" min="0" value="0" required>
<label class="choice custom_cantrip_list">Cantrip List (if different from default class list):
<select name="comp_custom_subclass_cantrip_list">
<option value="" data-i18n="choose">Choose</option>
<option value="scholar" data-i18n="scholar">Scholar</option>
<option value="engineer" data-i18n="engineer">Engineer</option>
<option value="guardian" data-i18n="guardian">Guardian</option>
<option value="scout" data-i18n="scout">Scout</option>
<option value="sentinel" data-i18n="sentinel">Sentinel</option>
<option value="consular" data-i18n="consular">Consular</option>
</select>
</label>
</label>
<label>Additional Level 1 Powers:
<input type="number" name="comp_custom_subclass_power_number" min="0" value="0" required>
<label class="choice custom_power_list">Power List (if different from default class list):
<select name="comp_custom_subclass_power_list">
<option value="" data-i18n="choose">Choose</option>
<option value="scholar" data-i18n="scholar">Scholar</option>
<option value="engineer" data-i18n="engineer">Engineer</option>
<option value="guardian" data-i18n="guardian">Guardian</option>
<option value="scout" data-i18n="scout">Scout</option>
<option value="sentinel" data-i18n="sentinel">Sentinel</option>
<option value="consular" data-i18n="consular">Consular</option>
</select>
</label>
</label>
</div>
<div class="choice row class_possible class_equipment_row">
<h4>Equipment</h4>
<span class="class_standard_equipment"></span>
</div>
</div>
</div>
<input type="hidden" name="comp_class_feature_choice_1_name">
<input type="hidden" name="comp_class_feature_choice_1_desc">
<input type="hidden" name="comp_class_feature_choice_2_name">
<input type="hidden" name="comp_class_feature_choice_2_desc">
<input type="hidden" name="comp_class_feature_choice_3_name">
<input type="hidden" name="comp_class_feature_choice_3_desc">
<input type="hidden" name="comp_subclass_feature_choice_1_name">
<input type="hidden" name="comp_subclass_feature_choice_1_desc">
<input type="hidden" name="comp_subclass_feature_choice_2_name">
<input type="hidden" name="comp_subclass_feature_choice_2_desc">
</div>
<div class="info">
<div class="sheet-compendium-page sheet-class-info" accept="Rules:Classes"></div>
</div>
<div class="bottombar">
<button class="prev" type="back" value="l1-race">Back</button>
<button type="button" data-scroll="#top" class="jump">Back to Top</button>
<button class="next" type="back" value="l1-abilities">Next</button>
</div>
<div class="choice cancel-prompt">
<p class="label">Where would you like to go, Traveler?</p>
<button class="warning" type="cancel" value="l1-cancel" data-i18n="cancel_charactermancer">Discard and exit</button>
<button type="cancel" value="l1-powers" data-i18n="save_progress_and_exit">Save and Exit</button>
<button type="action" name="act_continue"><span data-i18n="continue-charmancer">Continue Charactermancer</span></button>
<p class="warning"><span data-i18n="charmancer-discard-warning">Discard and Exit will discard all choices youve made in Charactermancer and let you edit your character sheet directly.</span></p>
</div>
</div>
</charmancer>
<charmancer class="sheet-charmancer-l1-abilities">
<div class="charmancer container">
<ol class="steps">
<li><button class="step" type="back" value="l1-welcome" data-i18n="charmancer-start">START</button></li>
<li><button class="step" type="back" value="l1-race" data-i18n="race-u">RACE</button></li>
<li><button class="step" type="back" value="l1-class" data-i18n="class-u">CLASS</button></li>
<li><button class="step here" type="here" value="l1-abilities" data-i18n="abilities-u">ABILITIES</button></li>
<li><button class="step" type="back" value="l1-background" data-i18n="background-u">BACKGROUND</button></li>
<li><button class="step" type="back" value="l1-equipment" data-i18n="equipment-u">EQUIPMENT</button></li>
<li><button class="step" type="back" value="l1-powers" data-i18n="powers-u">POWERS</button></li>
<li><button class="step" type="back" value="l1-feat" data-i18n="feats-u">FEATS</button></li>
<li><button class="step" type="back" value="l1-summary" data-i18n="review-u">REVIEW</button></li>
<li><button class="exit" type="action" name="act_cancel" data-i18n="cancel" data-i18n="cancel-u">EXIT</button></li>
</ol>
<div class="topbar">
<div class="sheet-attr-container">
<h4 data-i18n="strength">Strength</h4>
<span class="strength_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="dexterity">Dexterity</h4>
<span class="dexterity_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="constitution">Constitution</h4>
<span class="constitution_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="intelligence">Intelligence</h4>
<span class="intelligence_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="wisdom">Wisdom</h4>
<span class="wisdom_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="charisma">Charisma</h4>
<span class="charisma_total">-</span>
</div>
<div class="meta-info-container">
<span class="label"><span data-i18n="hp">Hit Points</span>: <span class="hit_points"></span></span>
<span class="choice label class_suggested_abilities_container"><span data-i18n="suggested-abilities">Suggested Abilities: </span><span class="label class_suggested_abilities"></span></span>
<span class="choice label class_powercasting_ability_container"><span data-i18n="class-powercasting">Class Powercasting Ability: </span><span class="label class_powercasting_ability"></span></span>
</div>
</div>
<input type="hidden" name="comp_pointbuy_points" value="27">
<input type="hidden" name="comp_roll_results" value="">
<div class="choices">
<div class="row">
<label class="hilite">Ability Score Method:
<select name="comp_abilities" required>
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
</label>
</div>
<div class="row choice abilities_possible abilities_stdarray">
<p>Select your choices:</p>
<button type="action" name="act_clearstats"><span data-i18n="clear-abilities">Clear</span></button>
</div>
<div class="row choice abilities_possible abilities_rollstats">
<p>Select your choices:</p>
<p>
<button type="roll" name="roll_rollstats" value="&{template:mancerroll} {{title=Roll for Stats}} {{r1=[[4d6dl1]]}} {{r2=[[4d6dl1]]}} {{r3=[[4d6dl1]]}} {{r4=[[4d6dl1]]}} {{r5=[[4d6dl1]]}} {{r6=[[4d6dl1]]}}"><span data-i18n="standard-roll">(4d6, drop lowest)</span></button>
<button type="action" name="act_clearstats"><span data-i18n="clear-abilities">Clear</span></button>
</p>
</div>
<div class="row choice abilities_possible abilities_pointbuy">
<p>Select your choices:</p>
<p>
<span data-i18n="available-points:">Available Points: </span><strong><span class="points_available_display"></span></strong>&nbsp;
<button type="action" name="act_clearstats"><span data-i18n="clear-abilities">Clear</span></button>
</p>
</div>
<div class="choice abilities_possible abilities_selects">
<div class="row">
<div class="hilite">
<div>
<span class="label" data-i18n="strength">Strength:</span>
<span class="abilities_radio_strength" name="comp_strength" required></span>
</div>
<div>
<span class="label" data-i18n="dexterity">Dexterity:</span>
<span class="abilities_radio_dexterity" name="comp_dexterity" required></span>
</div>
<div>
<span class="label" data-i18n="constitution">Constitution:</span>
<span class="abilities_radio_constitution" name="comp_constitution" required></span>
</div>
<div>
<span class="label" data-i18n="intelligence">Intelligence:</span>
<span class="abilities_radio_intelligence" name="comp_intelligence" required></span>
</div>
<div>
<span class="label" data-i18n="wisdom">Wisdom:</span>
<span class="abilities_radio_wisdom" name="comp_wisdom" required></span>
</div>
<div>
<span class="label" data-i18n="charisma">Charisma:</span>
<span class="abilities_radio_charisma" name="comp_charisma" required></span>
</div>
</div>
</div>
</div>
<div class="row choice abilities_possible abilities_custom">
<!-- Manually input stats -->
<p>Input your scores:</p>
<div class="abilities_possible abilities_selects">
<div class="hilite">
<div>
<span class="label" data-i18n="strength">Strength:</span>
<input type="number" name="comp_strength" min="0" max="20" required>
</div>
<div>
<span class="label" data-i18n="dexterity">Dexterity:</span>
<input type="number" name="comp_dexterity" min="0" max="20" required>
</div>
<div>
<span class="label" data-i18n="constitution">Constitution:</span>
<input type="number" name="comp_constitution" min="0" max="20" required>
</div>
<div>
<span class="label" data-i18n="intelligence">Intelligence:</span>
<input type="number" name="comp_intelligence" min="0" max="20" required>
</div>
<div>
<span class="label" data-i18n="wisdom">Wisdom:</span>
<input type="number" name="comp_wisdom" min="0" max="20" required>
</div>
<div>
<span class="label" data-i18n="charisma">Charisma:</span>
<input type="number" name="comp_charisma" min="0" max="20" required>
</div>
</div>
</div>
</div>
</div>
<div class="info">
<div class="sheet-compendium-page sheet-abilscores-info" accept="Rules:Ability%20Scores"></div>
</div>
<div class="bottombar">
<button class="prev" type="back" value="l1-class">Back</button>
<button type="button" data-scroll="#top" class="jump">Back to Top</button>
<button class="next" type="back" value="l1-background">Next</button>
</div>
<div class="choice cancel-prompt">
<p class="label">Where would you like to go, Traveler?</p>
<button class="warning" type="cancel" value="l1-cancel" data-i18n="cancel_charactermancer">Discard and exit</button>
<button type="cancel" value="l1-powers" data-i18n="save_progress_and_exit">Save and Exit</button>
<button type="action" name="act_continue"><span data-i18n="continue-charmancer">Continue Charactermancer</span></button>
<p class="warning"><span data-i18n="charmancer-discard-warning">Discard and Exit will discard all choices youve made in Charactermancer and let you edit your character sheet directly.</span></p>
</div>
</div>
</charmancer>
<charmancer class="sheet-charmancer-l1-background">
<div class="charmancer container">
<ol class="steps">
<li><button class="step" type="back" value="l1-welcome" data-i18n="charmancer-start">START</button></li>
<li><button class="step" type="back" value="l1-race" data-i18n="race-u">RACE</button></li>
<li><button class="step" type="back" value="l1-class" data-i18n="class-u">CLASS</button></li>
<li><button class="step" type="back" value="l1-abilities" data-i18n="abilities-u">ABILITIES</button></li>
<li><button class="step here" type="here" value="l1-background" data-i18n="background-u">BACKGROUND</button></li>
<li><button class="step" type="back" value="l1-equipment" data-i18n="equipment-u">EQUIPMENT</button></li>
<li><button class="step" type="back" value="l1-powers" data-i18n="powers-u">POWERS</button></li>
<li><button class="step" type="back" value="l1-feat" data-i18n="feats-u">FEATS</button></li>
<li><button class="step" type="back" value="l1-summary" data-i18n="review-u">REVIEW</button></li>
<li><button class="exit" type="action" name="act_cancel" data-i18n="cancel" data-i18n="cancel-u">EXIT</button></li>
</ol>
<div class="topbar">
<div class="sheet-attr-container">
<h4 data-i18n="strength">Strength</h4>
<span class="strength_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="dexterity">Dexterity</h4>
<span class="dexterity_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="constitution">Constitution</h4>
<span class="constitution_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="intelligence">Intelligence</h4>
<span class="intelligence_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="wisdom">Wisdom</h4>
<span class="wisdom_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="charisma">Charisma</h4>
<span class="charisma_total">-</span>
</div>
<div class="meta-info-container">
<span class="label"><span data-i18n="hp">Hit Points</span>: <span class="hit_points"></span></span>
<span class="choice label class_suggested_abilities_container"><span data-i18n="suggested-abilities">Suggested Abilities: </span><span class="label class_suggested_abilities"></span></span>
<span class="choice label class_powercasting_ability_container"><span data-i18n="class-powercasting">Class Powercasting Ability: </span><span class="label class_powercasting_ability"></span></span>
</div>
</div>
<div class="choices">
<div class="row">
<label class="hilite">Choose a Background:
<select name="comp_background" accept="Category:Backgrounds" required>
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="Rules:Backgrounds" data-i18n="custom">Custom</option>
</select>
</label>
<div class="choice custom_background">
<label class="hilite">Name:
<input type="text" name="comp_background_name" placeholder="Artisan" required>
</label>
</div>
</div>
<div class="choice backgrounds_options">
<div class="choice row background_possible background_skill_row custom_background">
<p>
<span class="label">Skill Proficiencies:</span>
<span class="background_skills background_text"></span>
</p>
<select class="choice background_possible background_skill_choice1 custom_background" name="comp_background_skill_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice background_possible background_skill_choice2" name="comp_background_skill_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice background_possible background_skill_choice3" name="comp_background_skill_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice background_possible background_skill_choice4" name="comp_background_skill_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</div>
<div class="choice row background_possible background_tool_row custom_background">
<p>
<span class="label">Tool Proficiencies:</span>
<span class="background_tools background_text"></span>
</p>
<select class="choice background_possible background_tool_choice1 custom_background" name="comp_background_tool_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice background_possible background_tool_choice2" name="comp_background_tool_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice background_possible background_tool_choice3" name="comp_background_tool_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice background_possible background_tool_choice4" name="comp_background_tool_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</div>
<div class="choice row background_possible background_language_row custom_background">
<p>
<span class="label">Language Proficiencies:</span>
<span class="background_languages background_text"></span>
</p>
<select class="choice background_possible background_language_choice1 custom_background" name="comp_background_language_choice1">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom" value="custom">Custom</option>
</select>
<input type="text" class="choice background_possible background_language_choice1_custom" name="comp_background_language_choice1_custom">
<select class="choice background_possible background_language_choice2" name="comp_background_language_choice2">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom" value="custom">Custom</option>
</select>
<input type="text" class="choice background_possible background_language_choice2_custom" name="comp_background_language_choice2_custom">
</div>
<div class="choice row background_possible background_feature_row">
<p>
<span class="label">Background Feature: <span class="background_feature background_text"></span></span>
<span class="background_feature_description background_text"></span>
</p>
</div>
<div class="choice row custom_background">
<label><span class="custom_feature_name">Custom Background Feature:</span>
<div class="custom_trait_1">
<input type="text" name="comp_custom_background_trait_name">
<textarea name="comp_custom_background_trait_desc"></textarea>
</div>
</label>
</div>
<div class="choice row background_possible background_detail_choice_row">
<label>
<span class="label"><span class="background_detail_choice_name" name="comp_background_detail_choice_name">Option</span>:</span><br>
<select class="choice background_possible background_detail_choice" name="comp_background_detail_choice">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="roll" name="roll_background_detail_choice_roll" value="" class="bg_roll">Roll</button>
</label>
</div>
<div class="choice row background_possible background_personality_row custom_background">
<label>Personality Traits:<br>
<select class="choice background_possible background_personality_choice1" name="comp_background_personality_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="roll" name="roll_background_personality_choice1_roll" value="" class="bg_roll">Roll</button>
<select class="choice background_possible background_personality_choice2" name="comp_background_personality_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="roll" name="roll_background_personality_choice2_roll" value="" class="bg_roll">Roll</button>
<input type="text" class="choice custom_background" name="comp_background_personality_choice1">
<input type="text" class="choice custom_background" name="comp_background_personality_choice2">
</label>
<label>Ideal:<br>
<select class="choice background_possible background_ideal_choice" name="comp_background_ideal_choice">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="roll" name="roll_background_ideal_choice_roll" value="" class="bg_roll">Roll</button>
<input type="text" class="choice custom_background" name="comp_background_ideal_choice">
</label>
<label>Bond:<br>
<select class="choice background_possible background_bond_choice" name="comp_background_bond_choice">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="roll" name="roll_background_bond_choice_roll" value="" class="bg_roll">Roll</button>
<input type="text" class="choice custom_background" name="comp_background_bond_choice">
</label>
<label>Flaw:<br>
<select class="choice background_possible background_flaw_choice" name="comp_background_flaw_choice">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="roll" name="roll_background_flaw_choice_roll" value="" class="bg_roll">Roll</button>
<input type="text" class="choice custom_background" name="comp_background_flaw_choice">
</label>
</div>
<div class="choice row background_possible background_equipment_row">
<p>
<span class="label">Equipment:</span>
<span class="background_standard_equipment"></span>
<!-- TODO: Create choice for the three backgrounds that need it, based on Item Subtype (e.g. Artisan's Tools) -->
</p>
</div>
</div>
</div>
<div class="info">
<div class="sheet-compendium-page sheet-background-info" accept="Rules:Backgrounds"></div>
</div>
<div class="bottombar">
<button class="prev" type="back" value="l1-abilities">Back</button>
<button type="button" data-scroll="#top" class="jump">Back to Top</button>
<button class="next" type="back" value="l1-equipment">Next</button>
</div>
<div class="choice cancel-prompt">
<p class="label">Where would you like to go, Traveler?</p>
<button class="warning" type="cancel" value="l1-cancel" data-i18n="cancel_charactermancer">Discard and exit</button>
<button type="cancel" value="l1-powers" data-i18n="save_progress_and_exit">Save and Exit</button>
<button type="action" name="act_continue"><span data-i18n="continue-charmancer">Continue Charactermancer</span></button>
<p class="warning"><span data-i18n="charmancer-discard-warning">Discard and Exit will discard all choices youve made in Charactermancer and let you edit your character sheet directly.</span></p>
</div>
<input type="hidden" name="comp_background_detail_choice_array">
<input type="hidden" name="comp_background_personality_choice1_array">
<input type="hidden" name="comp_background_personality_choice2_array">
<input type="hidden" name="comp_background_ideal_choice_array">
<input type="hidden" name="comp_background_bond_choice_array">
<input type="hidden" name="comp_background_flaw_choice_array">
</div>
</charmancer>
<charmancer class="sheet-charmancer-l1-equipment">
<div class="charmancer container">
<ol class="steps">
<li><button class="step" type="back" value="l1-welcome" data-i18n="charmancer-start">START</button></li>
<li><button class="step" type="back" value="l1-race" data-i18n="race-u">RACE</button></li>
<li><button class="step" type="back" value="l1-class" data-i18n="class-u">CLASS</button></li>
<li><button class="step" type="back" value="l1-abilities" data-i18n="abilities-u">ABILITIES</button></li>
<li><button class="step" type="back" value="l1-background" data-i18n="background-u">BACKGROUND</button></li>
<li><button class="step here" type="here" value="l1-equipment" data-i18n="equipment-u">EQUIPMENT</button></li>
<li><button class="step" type="back" value="l1-powers" data-i18n="powers-u">POWERS</button></li>
<li><button class="step" type="back" value="l1-feat" data-i18n="feats-u">FEATS</button></li>
<li><button class="step" type="back" value="l1-summary" data-i18n="review-u">REVIEW</button></li>
<li><button class="exit" type="action" name="act_cancel" data-i18n="cancel" data-i18n="cancel-u">EXIT</button></li>
</ol>
<div class="topbar">
<div class="sheet-attr-container">
<h4 data-i18n="strength">Strength</h4>
<span class="strength_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="dexterity">Dexterity</h4>
<span class="dexterity_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="constitution">Constitution</h4>
<span class="constitution_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="intelligence">Intelligence</h4>
<span class="intelligence_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="wisdom">Wisdom</h4>
<span class="wisdom_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="charisma">Charisma</h4>
<span class="charisma_total">-</span>
</div>
<div class="meta-info-container">
<span class="label"><span data-i18n="hp">Hit Points</span>: <span class="hit_points"></span></span>
<span class="choice label class_suggested_abilities_container"><span data-i18n="suggested-abilities">Suggested Abilities: </span><span class="label class_suggested_abilities"></span></span>
<span class="choice label class_powercasting_ability_container"><span data-i18n="class-powercasting">Class Powercasting Ability: </span><span class="label class_powercasting_ability"></span></span>
</div>
</div>
<div class="choices">
<input type="hidden" name="comp_equipment_class">
<input type="hidden" name="comp_equipment_background">
<input type="hidden" name="comp_starting_gold_roll">
<div class="choice has_class row">
<p class="choice no_class">
<span class="label">You have not yet selected a class.</span>
</p>
<p class="choice eqp_custom_class">
<span class="label">You have created a custom class; you can add equipment to the character sheet after you have finished the Charactermancer.</span>
</p>
<p class="choice no_gold_option">
<span class="label">Pick your equipment.</span>
<span data-i18n="class">Class</span>: (<span class="class_label"></span>)
</p>
<div class="choice has_class equipment_type hilite">
<p>
<span class="label" data-i18n="equipment-choice-text">How would you like to choose your equipment?</span>
<span data-i18n="class">Class</span>: (<span class="class_label"></span>)
</p>
<select class="equipment_type" name="comp_equipment_type" required>
<option value="" data-i18n="choose">Choose</option>
<option value="class" data-i18n="class-equipment">Class Equipment</option>
<option value="gold" data-i18n="starting-wealth">Starting Wealth (PHB)</option>
</select>
</div>
</div>
<div class="row choice gold_option">
<p class="choice custom_class_gold">
<span class="label" data-i18n="equipment-from-class">Equipment from Class</span>
(<span class="class_label"></span>)
</p>
<p>
<span class="label" data-i18n="starting-gold:">Starting Gold:</span>
</p>
<p>
<input type="number" name="comp_starting_gold" value="0">
</p>
<p>
<div class="choice random_gold_option">
<button type="roll" name="roll_starting_gold" value=""><span class="starting_gold_btn_label"></span></button>
</div>
</p>
</div>
<div class="row choice class_option">
<p>
<span class="class_equipment"></span>
</p>
<select class="choice class_possible class_equipment_choice1" name="comp_class_equipment_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_equipment_choice1_double" name="comp_class_equipment_choice5">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_equipment_choice2" name="comp_class_equipment_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_equipment_choice2_double" name="comp_class_equipment_choice6">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_equipment_choice3" name="comp_class_equipment_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_equipment_choice3_double" name="comp_class_equipment_choice7">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_equipment_choice4" name="comp_class_equipment_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice class_possible class_equipment_choice4_double" name="comp_class_equipment_choice8">
<option value="" data-i18n="choose">Choose</option>
</select>
</div>
<div class="row choice no_class_warning">
<span data-i18n="no_class_warning-u" class="warning">NO CLASS HAS BEEN SELECTED OR SELECTED CLASS DOES NOT HAVE STANDARD EQUIPMENT. CLASS EQUIPMENT CANNOT BE CHOSEN AT THIS TIME.</span>
</div>
<div class="row">
<p class="choice no_background">
<span class="label">You have not yet selected a background.</span>
</p>
<p class="choice has_background class_option">
<span class="label" data-i18n="equipment-from-background">Equipment from Background</span>
(<span class="background_label"></span>)
</p>
<p class="choice background_chose_starting_gold background_gold_option">
<span class="label">You have chosen starting gold and do not get equipment from your background.</span>
</p>
<p class="choice has_background class_option">
<span class="background_equipment"></span>
</p>
<div class="choice class_option">
<select class="choice background_possible background_equipment_choice1" name="comp_background_equipment_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice background_possible background_equipment_choice2" name="comp_background_equipment_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice background_possible background_equipment_choice3" name="comp_background_equipment_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice background_possible background_equipment_choice4" name="comp_background_equipment_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</div>
</div>
</div>
<div class="info">
<div class="sheet-compendium-page sheet-background-info" accept="Rules:Equipment"></div>
</div>
<div class="bottombar">
<button class="prev" type="back" value="l1-background">Back</button>
<button type="button" data-scroll="#top" class="jump">Back to Top</button>
<button class="next" type="back" value="l1-powers">Next</button>
</div>
<div class="choice cancel-prompt">
<p class="label">Where would you like to go, Traveler?</p>
<button class="warning" type="cancel" value="l1-cancel" data-i18n="cancel_charactermancer">Discard and exit</button>
<button type="cancel" value="l1-powers" data-i18n="save_progress_and_exit">Save and Exit</button>
<button type="action" name="act_continue"><span data-i18n="continue-charmancer">Continue Charactermancer</span></button>
<p class="warning"><span data-i18n="charmancer-discard-warning">Discard and Exit will discard all choices youve made in Charactermancer and let you edit your character sheet directly.</span></p>
</div>
</div>
</charmancer>
<charmancer class="sheet-charmancer-l1-powers">
<div class="charmancer container">
<ol class="steps">
<li><button class="step" type="back" value="l1-welcome" data-i18n="charmancer-start">START</button></li>
<li><button class="step" type="back" value="l1-race" data-i18n="race-u">RACE</button></li>
<li><button class="step" type="back" value="l1-class" data-i18n="class-u">CLASS</button></li>
<li><button class="step" type="back" value="l1-abilities" data-i18n="abilities-u">ABILITIES</button></li>
<li><button class="step" type="back" value="l1-background" data-i18n="background-u">BACKGROUND</button></li>
<li><button class="step" type="back" value="l1-equipment" data-i18n="equipment-u">EQUIPMENT</button></li>
<li><button class="step here" type="here" value="l1-powers" data-i18n="powers-u">POWERS</button></li>
<li><button class="step" type="back" value="l1-feat" data-i18n="feats-u">FEATS</button></li>
<li><button class="step" type="back" value="l1-summary" data-i18n="review-u">REVIEW</button></li>
<li><button class="exit" type="action" name="act_cancel" data-i18n="cancel" data-i18n="cancel-u">EXIT</button></li>
</ol>
<div class="topbar">
<div class="sheet-attr-container">
<h4 data-i18n="strength">Strength</h4>
<span class="strength_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="dexterity">Dexterity</h4>
<span class="dexterity_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="constitution">Constitution</h4>
<span class="constitution_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="intelligence">Intelligence</h4>
<span class="intelligence_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="wisdom">Wisdom</h4>
<span class="wisdom_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="charisma">Charisma</h4>
<span class="charisma_total">-</span>
</div>
<div class="meta-info-container">
<span class="label"><span data-i18n="hp">Hit Points</span>: <span class="hit_points"></span></span>
<span class="choice label class_suggested_abilities_container"><span data-i18n="suggested-abilities">Suggested Abilities: </span><span class="label class_suggested_abilities"></span></span>
<span class="choice label class_powercasting_ability_container"><span data-i18n="class-powercasting">Class Powercasting Ability: </span><span class="label class_powercasting_ability"></span></span>
</div>
</div>
<div class="choice no_powers">
<p class="label">The Tech is a mystery to you.</p>
<p>Your character doesn't have powers at this level. Click “Next” to review your character!</p>
</div>
<div class="choice yes_powers">
<!-- is this div needed? -->
</div>
<div class="choices">
<div class="choice race_row">
<div class="row choice race_level0">
<p class="label"><span class="race_title"></span> Cantrips</p>
<p class="race_level0_known"></p>
<div class="choice race_level0_choice1">
<select name="comp_race_level0_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_race_level0_choice1" class="mancer_info">i</button>
</div>
<div class="choice race_level0_choice2">
<select name="comp_race_level0_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_race_level0_choice2" class="mancer_info">i</button>
</div>
<div class="choice race_level0_choice3">
<select name="comp_race_level0_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_race_level0_choice3" class="mancer_info">i</button>
</div>
</div>
<div class="row choice race_level1">
<p class="label"><span class="race_title"></span> Level 1</p>
<p class="race_level1_known"></p>
<div class="choice race_level1_choice1">
<select name="comp_race_level1_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_race_level1_choice1" class="mancer_info">i</button>
</div>
<div class="choice race_level1_choice2">
<select name="comp_race_level1_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_race_level1_choice2" class="mancer_info">i</button>
</div>
<div class="choice race_level1_choice3">
<select name="comp_race_level1_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_race_level1_choice3" class="mancer_info">i</button>
</div>
</div>
</div>
<div class="choice class_row">
<div class="row choice class_level0">
<p class="label"><span class="class_title"></span> Cantrips</p>
<p class="class_level0_known"></p>
<div class="choice class_level0_choice1">
<select name="comp_class_level0_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level0_choice1" class="mancer_info">i</button>
</div>
<div class="choice class_level0_choice2">
<select name="comp_class_level0_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level0_choice2" class="mancer_info">i</button>
</div>
<div class="choice class_level0_choice3">
<select name="comp_class_level0_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level0_choice3" class="mancer_info">i</button>
</div>
<div class="choice class_level0_choice4">
<select name="comp_class_level0_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level0_choice4" class="mancer_info">i</button>
</div>
<div class="choice class_level0_choice5">
<select name="comp_class_level0_choice5">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level0_choice5" class="mancer_info">i</button>
</div>
<div class="choice class_level0_choice6">
<select name="comp_class_level0_choice6">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level0_choice6" class="mancer_info">i</button>
</div>
</div>
<div class="row choice class_level1">
<p class="label"><span class="class_title"></span> Level 1</p>
<p class="class_level1_known"></p>
<div class="choice class_level1_choice1">
<select name="comp_class_level1_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level1_choice1" class="mancer_info">i</button>
</div>
<div class="choice class_level1_choice2">
<select name="comp_class_level1_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level1_choice2" class="mancer_info">i</button>
</div>
<div class="choice class_level1_choice3">
<select name="comp_class_level1_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level1_choice3" class="mancer_info">i</button>
</div>
<div class="choice class_level1_choice4">
<select name="comp_class_level1_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level1_choice4" class="mancer_info">i</button>
</div>
<div class="choice class_level1_choice5">
<select name="comp_class_level1_choice5">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level1_choice5" class="mancer_info">i</button>
</div>
<div class="choice class_level1_choice6">
<select name="comp_class_level1_choice6">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level1_choice6" class="mancer_info">i</button>
</div>
<div class="choice class_level1_choice7">
<select name="comp_class_level1_choice7">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level1_choice7" class="mancer_info">i</button>
</div>
<div class="choice class_level1_choice8">
<select name="comp_class_level1_choice8">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level1_choice8" class="mancer_info">i</button>
</div>
<div class="choice class_level1_choice9">
<select name="comp_class_level1_choice9">
<option value="" data-i18n="choose">Choose</option>
</select>
<button type="action" name="act_powerinfo_class_level1_choice9" class="mancer_info">i</button>
</div>
</div>
</div>
</div>
<div class="info power-info-container choice">
<div class="sheet-compendium-page sheet-powers-info" accept="Rules:Powers"></div>
</div>
<div class="bottombar">
<button class="prev" type="back" value="l1-equipment">Back</button>
<button type="button" data-scroll="#top" class="jump">Back to Top</button>
<button class="next" type="back" value="l1-feat">Next</button>
</div>
<div class="choice cancel-prompt">
<p class="label">Where would you like to go, Traveler?</p>
<button class="warning" type="cancel" value="l1-cancel" data-i18n="cancel_charactermancer">Discard and exit</button>
<button type="cancel" value="l1-powers" data-i18n="save_progress_and_exit">Save and Exit</button>
<button type="action" name="act_continue"><span data-i18n="continue-charmancer">Continue Charactermancer</span></button>
<p class="warning"><span data-i18n="charmancer-discard-warning">Discard and Exit will discard all choices youve made in Charactermancer and let you edit your character sheet directly.</span></p>
</div>
<input type="hidden" name="comp_race_powers">
<input type="hidden" name="comp_class_powers">
<input type="hidden" name="comp_race_number">
<input type="hidden" name="comp_class_number">
<input type="hidden" name="comp_race_level0_choice1_casting">
<input type="hidden" name="comp_race_level0_choice2_casting">
<input type="hidden" name="comp_race_level0_choice3_casting">
<input type="hidden" name="comp_race_level1_choice1_casting">
<input type="hidden" name="comp_race_level1_choice2_casting">
<input type="hidden" name="comp_race_level1_choice3_casting">
<input type="hidden" name="comp_class_level0_choice1_casting">
<input type="hidden" name="comp_class_level0_choice2_casting">
<input type="hidden" name="comp_class_level0_choice3_casting">
<input type="hidden" name="comp_class_level0_choice4_casting">
<input type="hidden" name="comp_class_level0_choice5_casting">
<input type="hidden" name="comp_class_level0_choice6_casting">
<input type="hidden" name="comp_class_level1_choice1_casting">
<input type="hidden" name="comp_class_level1_choice2_casting">
<input type="hidden" name="comp_class_level1_choice3_casting">
<input type="hidden" name="comp_class_level1_choice4_casting">
<input type="hidden" name="comp_class_level1_choice5_casting">
<input type="hidden" name="comp_class_level1_choice6_casting">
<input type="hidden" name="comp_class_level1_choice7_casting">
<input type="hidden" name="comp_class_level1_choice8_casting">
<input type="hidden" name="comp_class_level1_choice9_casting">
</div>
</charmancer>
<charmancer class="sheet-charmancer-l1-feat">
<div class="charmancer container">
<ol class="steps">
<li><button class="step" type="back" value="l1-welcome" data-i18n="charmancer-start">START</button></li>
<li><button class="step" type="back" value="l1-race" data-i18n="race-u">RACE</button></li>
<li><button class="step" type="back" value="l1-class" data-i18n="class-u">CLASS</button></li>
<li><button class="step" type="back" value="l1-abilities" data-i18n="abilities-u">ABILITIES</button></li>
<li><button class="step" type="back" value="l1-background" data-i18n="background-u">BACKGROUND</button></li>
<li><button class="step" type="back" value="l1-equipment" data-i18n="equipment-u">EQUIPMENT</button></li>
<li><button class="step" type="back" value="l1-powers" data-i18n="powers-u">POWERS</button></li>
<li><button class="step here" type="here" value="l1-feat" data-i18n="feats-u">FEATS</button></li>
<li><button class="step" type="back" value="l1-summary" data-i18n="review-u">REVIEW</button></li>
<li><button class="exit" type="action" name="act_cancel" data-i18n="cancel" data-i18n="cancel-u">EXIT</button></li>
</ol>
<div class="topbar">
<div class="sheet-attr-container">
<h4 data-i18n="strength">Strength</h4>
<span class="strength_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="dexterity">Dexterity</h4>
<span class="dexterity_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="constitution">Constitution</h4>
<span class="constitution_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="intelligence">Intelligence</h4>
<span class="intelligence_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="wisdom">Wisdom</h4>
<span class="wisdom_total">-</span>
</div>
<div class="sheet-attr-container">
<h4 data-i18n="charisma">Charisma</h4>
<span class="charisma_total">-</span>
</div>
<div class="meta-info-container">
<span class="label"><span data-i18n="hp">Hit Points</span>: <span class="hit_points"></span></span>
<span class="choice label class_suggested_abilities_container"><span data-i18n="suggested-abilities">Suggested Abilities: </span><span class="label class_suggested_abilities"></span></span>
<span class="choice label class_powercasting_ability_container"><span data-i18n="class-powercasting">Class Powercasting Ability: </span><span class="label class_powercasting_ability"></span></span>
</div>
</div>
<div class="choice no_feat">
<p class="label">A feat represents accomplishment, grit, determination, and expertise. It is the reward for hard work.</p>
<p>You really haven't done that much yet.</p>
</div>
<div class="choices choice yes_feat">
<div class="row">
<label>Choose a feat:
<select name="comp_feat" accept="Category:Feats">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice feat_options">
<div class="choice row feat_prereq feat_possible">
<label class="warning">Prerequisite:
<p class="feat_prerequisite feat_text"></p>
<p class="feat_text"><span data-i18n="feat-pre-check"></span>Look carefully! Prerequisites are not checked automatically.</p>
</label>
</div>
<div class="choice row feat_ability feat_possible">
<label>Ability Score Increase:
<p class="feat_ability_score feat_text"></p>
<select class="choice feat_possible feat_ability_choice" name="comp_feat_ability_choice">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row feat_possible feat_language_row">
<label>Language Proficiencies:
<p class="feat_languages feat_text"></p>
<select class="choice feat_possible feat_language_choice1" name="comp_feat_language_choice1">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice feat_possible feat_language_choice1_custom" name="comp_feat_language_choice1_custom">
<select class="choice feat_possible feat_language_choice2" name="comp_feat_language_choice2">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice feat_possible feat_language_choice2_custom" name="comp_feat_language_choice2_custom">
<select class="choice feat_possible feat_language_choice3" name="comp_feat_language_choice3">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice feat_possible feat_language_choice3_custom" name="comp_feat_language_choice3_custom">
<select class="choice feat_possible feat_language_choice4" name="comp_feat_language_choice4">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" value="custom" data-i18n="custom">Custom</option>
</select>
<input type="text" class="choice feat_possible feat_language_choice4_custom" name="comp_feat_language_choice4_custom">
</label>
</div>
<div class="choice row feat_possible feat_skill_row">
<label>Skill Proficiencies:
<p class="feat_skills feat_text"></p>
<select class="choice feat_possible feat_skill_choice1" name="comp_feat_skill_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_skill_choice2" name="comp_feat_skill_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_skill_choice3" name="comp_feat_skill_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_skill_choice4" name="comp_feat_skill_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row feat_possible feat_weapon_row">
<label>Weapon Proficiencies:
<p class="feat_weapons feat_text"></p>
<select class="choice feat_possible feat_weapon_choice1" name="comp_feat_weapon_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_weapon_choice2" name="comp_feat_weapon_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_weapon_choice3" name="comp_feat_weapon_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_weapon_choice4" name="comp_feat_weapon_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row feat_possible feat_armor_row">
<label>Armor Proficiencies:
<p class="feat_armors feat_text"></p>
<select class="choice feat_possible feat_armor_choice1" name="comp_feat_armor_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_armor_choice2" name="comp_feat_armor_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_armor_choice3" name="comp_feat_armor_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_armor_choice4" name="comp_feat_armor_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row feat_possible feat_tool_row">
<label>Tool Proficiencies:
<p class="feat_tools feat_text"></p>
<select class="choice feat_possible feat_tool_choice1" name="comp_feat_tool_choice1">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_tool_choice2" name="comp_feat_tool_choice2">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_tool_choice3" name="comp_feat_tool_choice3">
<option value="" data-i18n="choose">Choose</option>
</select>
<select class="choice feat_possible feat_tool_choice4" name="comp_feat_tool_choice4">
<option value="" data-i18n="choose">Choose</option>
</select>
</label>
</div>
<div class="choice row feat_possible feat_expertise_row">
<h4>Expertise</h4>
<span class="feat_expertise feat_text"></span>
<select class="choice feat_possible feat_expertise_choice_1" name="comp_feat_expertise_choice_1">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
<select class="choice feat_possible feat_expertise_choice_2" name="comp_feat_expertise_choice_2">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
</div>
<div class="choice row feat_possible feat_feature_row_1">
<h4 class="feat_feature_name_1"></h4>
<span class="feat_feature_1"></span>
<select class="feat_possible feat_feature_choice_1" name="comp_feat_feature_choice_1">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
<p class="description feat_feature_description_1"></p>
</div>
<div class="choice row feat_possible feat_feature_row_1_double">
<h4 class="feat_feature_name_1_double"></h4>
<span class="feat_feature_1_double"></span>
<select class="feat_possible feat_feature_choice_1_double" name="comp_feat_feature_choice_3">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
<p class="description feat_feature_description_1_double"></p>
</div>
<div class="choice row feat_possible feat_feature_row_2">
<h4 class="feat_feature_name_2"></h4>
<span class="feat_feature_2"></span>
<select class="feat_possible feat_feature_choice_2" name="comp_feat_feature_choice_2">
<option value="" data-i18n="choose">Choose</option>
<option class="custom" data-i18n="custom">Custom</option>
</select>
<p class="description feat_feature_description_2"></p>
</div>
</div>
</div>
<div class="info feat-info-container choice yes_feat">
<div class="sheet-compendium-page sheet-feat-info" accept="Rules:Feats"></div>
</div>
<div class="bottombar">
<button class="prev" type="back" value="l1-powers">Back</button>
<button type="button" data-scroll="#top" class="jump">Back to Top</button>
<button class="next" type="back" value="l1-summary">Next</button>
</div>
<div class="choice cancel-prompt">
<p class="label">Where would you like to go, Traveler?</p>
<button class="warning" type="cancel" value="l1-cancel" data-i18n="cancel_charactermancer">Discard and exit</button>
<button type="cancel" value="l1-feat" data-i18n="save_progress_and_exit">Save and Exit</button>
<button type="action" name="act_continue"><span data-i18n="continue-charmancer">Continue Charactermancer</span></button>
<p class="warning"><span data-i18n="charmancer-discard-warning">Discard and Exit will discard all choices youve made in Charactermancer and let you edit your character sheet directly.</span></p>
</div>
</div>
</charmancer>
<charmancer class="sheet-charmancer-l1-summary">
<div class="charmancer">
<ol class="steps">
<li><button class="step" type="back" value="l1-welcome" data-i18n="charmancer-start">START</button></li>
<li><button class="step" type="back" value="l1-race" data-i18n="race-u">RACE</button></li>
<li><button class="step" type="back" value="l1-class" data-i18n="class-u">CLASS</button></li>
<li><button class="step" type="back" value="l1-abilities" data-i18n="abilities-u">ABILITIES</button></li>
<li><button class="step" type="back" value="l1-background" data-i18n="background-u">BACKGROUND</button></li>
<li><button class="step" type="back" value="l1-equipment" data-i18n="equipment-u">EQUIPMENT</button></li>
<li><button class="step" type="back" value="l1-powers" data-i18n="powers-u">POWERS</button></li>
<li><button class="step" type="back" value="l1-feat" data-i18n="feats-u">FEATS</button></li>
<li><button class="step here" type="here" value="l1-summary" data-i18n="review-u">REVIEW</button></li>
<li><button class="exit" type="action" name="act_cancel" data-i18n="cancel" data-i18n="cancel-u">EXIT</button></li>
</ol>
<div class="topbar">
<div class="sheet-attr-container">
<h4>Strength</h4>
<span class="strength_total">-</span>
</div>
<div class="sheet-attr-container">
<h4>Dexterity</h4>
<span class="dexterity_total">-</span>
</div>
<div class="sheet-attr-container">
<h4>Constitution</h4>
<span class="constitution_total">-</span>
</div>
<div class="sheet-attr-container">
<h4>Intelligence</h4>
<span class="intelligence_total">-</span>
</div>
<div class="sheet-attr-container">
<h4>Wisdom</h4>
<span class="wisdom_total">-</span>
</div>
<div class="sheet-attr-container">
<h4>Charisma</h4>
<span class="charisma_total">-</span>
</div>
<div class="meta-info-container">
<span class="label"><span data-i18n="hp">Hit Points</span>: <span class="hit_points"></span></span>
<span class="choice label class_suggested_abilities_container"><span data-i18n="suggested-abilities">Suggested Abilities: </span><span class="label class_suggested_abilities"></span></span>
<span class="choice label class_powercasting_ability_container"><span data-i18n="class-powercasting">Class Powercasting Ability: </span><span class="label class_powercasting_ability"></span></span>
</div>
</div>
<p class="choice ready_text">The only choice left is to press on or turn back. If you're editing an existing character, all your existing data will be lost into the void when you apply your changes.</p>
<p class="label ready_message"></p>
<p class="label">Review your choices:</p>
<div class="summary">
<p class="label">Race</p>
<div class="race_info">
</div>
</div>
<div class="summary">
<p class="label">Class</p>
<div class="class_info">
</div>
</div>
<div class="summary">
<p class="label">Abilities</p>
<div class="ability_info">
</div>
</div>
<div class="summary">
<p class="label">Background</p>
<div class="background_info">
</div>
</div>
<div class="summary">
<p class="label">Equipment</p>
<div class="equipment_info">
</div>
</div>
<div class="summary">
<p class="label">Powers</p>
<div class="power_info">
</div>
</div>
<div class="summary">
<p class="label">Feats</p>
<div class="feat_info">
</div>
</div>
<div class="bottombar">
<button class="prev" type="back" value="l1-powers">Back</button>
<button type="button" data-scroll="#top" class="jump">Back to Top</button>
<button class="next choice apply_changes" type="finish" value="l1-mancer">Apply Changes</button>
</div>
<div class="choice cancel-prompt">
<p class="label">Where would you like to go, Traveler?</p>
<button class="warning" type="cancel" value="l1-cancel" data-i18n="cancel_charactermancer">Discard and exit</button>
<button type="cancel" value="l1-powers" data-i18n="save_progress_and_exit">Save and Exit</button>
<button type="action" name="act_continue"><span data-i18n="continue-charmancer">Continue Charactermancer</span></button>
<p class="warning"><span data-i18n="charmancer-discard-warning">Discard and Exit will discard all choices youve made in Charactermancer and let you edit your character sheet directly.</span></p>
</div>
</div>
</charmancer>
<charmancer class="sheet-charmancer-final">
<div class="charmancer">
<div class="">
<h1>Building your character...</h1>
</div>
<div class="">
<h2>Adding your <span class='mancer_category'></span></h2>
</div>
<div class="">
<h3><span class='mancer_progress'></span></h3>
</div>
<input type="hidden" name='attr_mancer_category'>
<input type="hidden" name='attr_mancer_progress'>
</div>
</charmancer>
<script type="text/worker">
var proficiencyList = ["Weapon", "Armor", "Skill", "Tool", "Language"];
var abilityList = ["Strength", "Dexterity", "Constitution", "Intelligence", "Wisdom", "Charisma"];
var getList = ["data-Ability Score Increase", "data-Ability Score Choice", "data-HP per level", "data-Expertise Choice 1", "data-Expertise Choice 2", "data-Powers", "data-Class Powers", "Powercasting Ability", "Hit Die", "Subclass Name", "data-Equipment", "Starting Gold", "data-Subclass Level", "Powercasting Ability", "Suggested Abilities", "data-Feats", "data-Background Choice Name"];
var changeListeners = "mancerchange:race_ability_choice1 mancerchange:race_ability_choice2 mancerchange:subrace_ability_choice1 mancerchange:subrace_ability_choice2 mancerchange:custom_hit_die mancerchange:feat_ability_choice";
var proficiencyNum = 4;
var customListeners = "";
var customProfListeners = "";
var customLanguageListeners = "";
var powerListeners = "";
var recalcCallNumber = 0;
for(var x = 1; x<=9; x++) {
powerListeners += " mancerchange:race_level0_choice" + x;
powerListeners += " mancerchange:race_level1_choice" + x;
powerListeners += " mancerchange:class_level0_choice" + x;
powerListeners += " mancerchange:class_level1_choice" + x;
}
_.each(abilityList, function(ability){
changeListeners += " mancerchange:race_custom_" + ability.toLowerCase();
changeListeners += " mancerchange:subrace_custom_" + ability.toLowerCase();
});
_.each(proficiencyList, function(prof) {
for(var x=1; x<=proficiencyNum; x++) {
changeListeners += " mancerchange:race_" + prof.toLowerCase() + "_choice" + x;
changeListeners += " mancerchange:subrace_" + prof.toLowerCase() + "_choice" + x;
changeListeners += " mancerchange:class_" + prof.toLowerCase() + "_choice" + x;
changeListeners += " mancerchange:subclass_" + prof.toLowerCase() + "_choice" + x;
changeListeners += " mancerchange:background_" + prof.toLowerCase() + "_choice" + x;
if(prof == "Language") {
customLanguageListeners += " mancerchange:race_" + prof.toLowerCase() + "_choice" + x + "_custom";
customLanguageListeners += " mancerchange:subrace_" + prof.toLowerCase() + "_choice" + x + "_custom";
customLanguageListeners += " mancerchange:class_" + prof.toLowerCase() + "_choice" + x + "_custom";
customLanguageListeners += " mancerchange:subclass_" + prof.toLowerCase() + "_choice" + x + "_custom";
customLanguageListeners += " mancerchange:background_" + prof.toLowerCase() + "_choice" + x + "_custom";
}
customListeners += " mancerchange:race_" + prof.toLowerCase() + "_choice" + x;
customListeners += " mancerchange:subrace_" + prof.toLowerCase() + "_choice" + x;
customListeners += " mancerchange:class_" + prof.toLowerCase() + "_choice" + x;
customListeners += " mancerchange:subclass_" + prof.toLowerCase() + "_choice" + x;
customListeners += " mancerchange:background_" + prof.toLowerCase() + "_choice" + x;
changeListeners += " mancerchange:class_expertise_choice_" + x;
changeListeners += " mancerchange:subclass_expertise_choice_" + x;
}
getList.push("data-" + prof + " Proficiency");
});
for(var x = 1; x<=4; x++) {
customProfListeners += "mancerchange:custom_race_prof_type_choice" + x + " ";
customProfListeners += "mancerchange:custom_class_prof_type_choice" + x + " ";
customProfListeners += "mancerchange:custom_background_prof_type_choice" + x + " ";
customProfListeners += "mancerchange:custom_race_prof_name_choice" + x + " ";
customProfListeners += "mancerchange:custom_class_prof_name_choice" + x + " ";
customProfListeners += "mancerchange:custom_background_prof_name_choice" + x + " ";
}
var recalcData = function(data) {
//Recalculate Ability Scores
var update = {"hit_points": "-"};
var allAbilities = {race: {}, subrace: {}, feat: {}};
var disableAbilities = {race: [], subrace: [], feat: []};
var allProficiencies = {};
var toSet = {};
var mancerdata = data || getCharmancerData();
var additionalHP = 0;
if(mancerdata["l1-class"] && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Suggested Abilities"]) {
update["class_suggested_abilities"] = mancerdata["l1-class"].data.class["Suggested Abilities"];
showChoices(["class_suggested_abilities_container"]);
} else {
update["class_suggested_abilities"] = "";
hideChoices(["class_suggested_abilities_container"]);
}
if(mancerdata["l1-class"] && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Powercasting Ability"]) {
update["class_powercasting_ability"] = mancerdata["l1-class"].data.class["Powercasting Ability"];
showChoices(["class_powercasting_ability_container"]);
} else {
update["class_powercasting_ability"] = "";
hideChoices(["class_powercasting_ability_container"]);
}
_.each(mancerdata, function(page){
_.each(page.values, function(value, name) {
if(name.search("ability") !== -1) {
//var choiceSection = name.split("_")[0].replace("sub", "");
var choiceSection = name.split("_")[0];
if(page.data[choiceSection] && page.data[choiceSection]["data-Ability Score Choice"]) {
var increase = 1;
if(typeof page.data[choiceSection]["data-Ability Score Choice"] == "string") {
increase = parseInt( _.last( page.data[choiceSection]["data-Ability Score Choice"].split("+") ) );
}
allAbilities[choiceSection] = allAbilities[choiceSection] || {};
allAbilities[choiceSection][value.toLowerCase()] = increase;
disableAbilities[choiceSection] = disableAbilities[choiceSection] || [];
disableAbilities[choiceSection].push(value);
}
}
});
_.each(page.data, function(pagedata, increaseSection) {
if(pagedata["data-Ability Score Increase"]) {
_.each(pagedata["data-Ability Score Increase"], function(amount, ability) {
allAbilities[increaseSection] = allAbilities[increaseSection] || {};
allAbilities[increaseSection][ability.toLowerCase()] = amount;
disableAbilities[increaseSection] = disableAbilities[increaseSection] || [];
disableAbilities[increaseSection].push(ability.toLowerCase());
});
}
if(pagedata["data-HP per level"]) {
additionalHP += pagedata["data-HP per level"];
}
});
});
if(mancerdata["l1-race"] && mancerdata["l1-race"].values.race == "Rules:Races") {
_.each(abilityList, function(ability){
var custom = mancerdata["l1-race"].values["race_custom_" + ability.toLowerCase()] || false;
if(custom) {
allAbilities.race[ability.toLowerCase()] = parseInt(custom);
}
});
}
if(mancerdata["l1-race"] && mancerdata["l1-race"].values.subrace == "Rules:Races") {
_.each(abilityList, function(ability){
var custom = mancerdata["l1-race"].values["subrace_custom_" + ability.toLowerCase()] || false;
if(custom) {
allAbilities.subrace[ability.toLowerCase()] = parseInt(custom);
}
});
}
var abilityTotals = {};
_.each(allAbilities, function(abilities) {
_.each(abilities, function(amount, ability) {
abilityTotals[ability] = abilityTotals[ability] || {bonus: 0};
abilityTotals[ability].bonus += amount;
});
});
_.each(abilityList, function(upperAbility) {
var ability = upperAbility.toLowerCase();
abilityTotals[ability] = abilityTotals[ability] || {bonus: 0, mod: 0};
if(mancerdata["l1-abilities"] && mancerdata["l1-abilities"].values[ability]) {
abilityTotals[ability].base = parseInt( mancerdata["l1-abilities"].values[ability].split("~")[0] );
} else {
abilityTotals[ability].base = 0;
}
abilityTotals[ability].total = abilityTotals[ability].bonus + abilityTotals[ability].base;
abilityTotals[ability].mod = Math.floor((abilityTotals[ability].total - 10)/2);
update[ability + "_total"] = abilityTotals[ability].total == 0 ? "-" : abilityTotals[ability].total;
});
allAbilities.totals = abilityTotals;
if(mancerdata["l1-class"] && (mancerdata["l1-class"].data.class || mancerdata["l1-class"].values["custom_hit_die"])) {
var basehp = mancerdata["l1-class"].data.class ? mancerdata["l1-class"].data.class["Hit Die"] : mancerdata["l1-class"].values["custom_hit_die"];
var conmod = abilityTotals.constitution.base > 0 ? abilityTotals.constitution.mod : 0;
update["hit_points"] = parseInt(basehp.replace("d", "")) + additionalHP + conmod;
}
_.each(disableAbilities, function(disable, disablesection) {
disableCharmancerOptions(disablesection + "_ability_choice1", disable);
disableCharmancerOptions(disablesection + "_ability_choice2", disable);
});
allProficiencies.auto = {};
//Recalculate Proficiencies
_.each(proficiencyList, function(prof){
//First get a list of all proficiencies
var finalProfs = [];
_.each(mancerdata, function(page){
_.each(page.values, function(value, name) {
if((name.search(prof.toLowerCase()) !== -1 || name.search("class_feature_choice_3") !== -1) && _.last(name.split("_")) != "custom") {
if(prof == "Language") {
if(value != "custom") {
if (value.split(":")[0] == "Proficiencies") {
finalProfs.push( _.last(value.split(":")) );
toSet[name + "_custom"] = "";
}
} else {
if(page.values[name + "_custom"]) {
finalProfs.push(page.values[name + "_custom"]);
}
}
} else {
finalProfs.push( _.last(value.split(":")) );
}
}
});
_.each(page.data, function(pagedata, section) {
if(pagedata["data-" + prof + " Proficiency"] && pagedata["data-" + prof + " Proficiency"].Proficiencies) {
finalProfs = finalProfs.concat(pagedata["data-" + prof + " Proficiency"].Proficiencies);
allProficiencies.auto[section] = allProficiencies.auto[section] || [];
allProficiencies.auto[section] = allProficiencies.auto[section].concat(pagedata["data-" + prof + " Proficiency"].Proficiencies);
}
});
});
allProficiencies[prof.toLowerCase()] = _.without(_.uniq(finalProfs), "custom");
});
var expertiseSelects = {};
var currentExpertise = [];
//Get a list of active expertise selects
_.each(mancerdata, function(page, pagename) {
_.each(page.data, function(data, section) {
for(var num=1; num<=proficiencyNum; num++) {
if( _.keys(data).indexOf("data-Expertise Choice " + num) != -1 ) {
expertiseSelects[section + "_expertise_choice_" + num] = data["data-Expertise Choice " + num];
}
}
});
});
_.each(expertiseSelects, function(fillArray, selectName) {
var expertChoices = [];
var options = {category: "Proficiencies", silent: true}
var currentValue = "";
//Create the list of values for this select
_.each(fillArray, function(expert) {
if(expert == "KNOWN") {
expertChoices = expertChoices.concat(allProficiencies.skill);
} else {
expertChoices.push(expert);
}
});
//Get the current value of the select
_.each(mancerdata, function(page){
_.each(page.values, function(value, name) {
if(name == selectName) {
currentValue = _.last(value.split(":"));
}
});
});
if(currentValue != "") {
//If the current value is not available, set it to blank. otherwise, add it to the list of expertise skills
if(expertChoices.indexOf(currentValue) == -1) {
options.selected = "";
toSet[selectName] = "";
} else {
currentExpertise.push(currentValue);
}
}
setCharmancerOptions(selectName, expertChoices, options);
});
//Go back through and disable expertise options
_.each(expertiseSelects, function(fillArray, selectName) {
disableCharmancerOptions(selectName, currentExpertise, {category: "Proficiencies"});
});
_.each(proficiencyList, function(prof){
//Now go through and disable the proficiencies
_.each(["race", "subrace", "class", "subclass", "background"], function(section) {
for(var num=1; num<=proficiencyNum; num++) {
var name = [section, prof.toLowerCase(), "choice"].join("_") + num;
disableCharmancerOptions(name, allProficiencies[prof.toLowerCase()].concat(currentExpertise), {category: "Proficiencies"});
};
});
});
setCharmancerText(update);
if(!data) {
setAttrs(toSet);
}
return {abilities: allAbilities, proficiencies: allProficiencies, expertise: _.uniq(currentExpertise)}
};
var handleAbilities = function(data, section) {
var showList = [];
if(data["data-Ability Score Increase"]) {
showList.push(section + "_abilities");
}
if(data["data-Ability Score Choice"]) {
showList.push(section + "_abilities");
showList.push(section + "_ability_choice1");
if(data["data-Ability Score Choice"].split("+")[0] == "2") {
showList.push(section + "_ability_choice2");
}
};
return showList;
};
var handleProficiencies = function(data, section, source) {
var showList = [];
var collected = recalcData();
_.each(proficiencyList, function(type) {
if(data["data-" + type + " Proficiency"]) {
showList.push(section + "_" + type.toLowerCase() + "_row");
var json = JSON.parse(data["data-" + type + " Proficiency"]);
for(var num=1; num<=proficiencyNum; num++) {
var className = section + "_" + type.toLowerCase() + "_choice" + num;
var settings = {category: "Proficiencies", disable: collected.proficiencies[type.toLowerCase()]};
if(source == "player") {
settings.selected = "";
}
if(json["Choice " + num]) {
showList.push(className);
if(json["Choice " + num] == "any") {
setCharmancerOptions(className, "Category:Proficiencies \"Type:" + type + "\"", settings);
} else {
if(json["Choice " + num][0].indexOf("Subtype:") != -1) {
setCharmancerOptions(className, "Category:Proficiencies \"Type:" + type + "\" \"" + json["Choice " + num][0] + "\"", settings);
} else {
setCharmancerOptions(className, json["Choice " + num], settings);
}
}
} else {
setCharmancerOptions(className, []);
}
};
} else {
for(var x=1; x<=proficiencyNum; x++) {
var className = section + "_" + type.toLowerCase() + "_choice" + x;
setCharmancerOptions(className, []);
};
}
});
for(var x = 1; x<=proficiencyNum; x++) {
var className = section + "_expertise_choice_" + x;
if(data["data-Expertise Choice " + x]) {
var json = JSON.parse(data["data-Expertise Choice " + x]);
var expertChoices = [];
showList.push(className);
showList.push(section + "_expertise_row");
_.each(json, function(expert) {
if(expert == "KNOWN") {
expertChoices = expertChoices.concat(collected.proficiencies.skill);
} else {
expertChoices.push(expert);
}
setCharmancerOptions(className, expertChoices, {category: "Proficiencies", disable: collected.expertise});
});
} else {
setCharmancerOptions(className, []);
}
}
return showList;
};
var knownPowers = function() {
var mancerdata = getCharmancerData();
var allPowers = {
race: false,
class: false,
known: [],
errors: {class: [], race: []}
};
var stats = recalcData();
var racename = getName("race", mancerdata, true);
var subracename = getName("subrace", mancerdata, true);
var classname = getName("class", mancerdata, true);
var subclassname = getName("subclass", mancerdata, true);
var classAbility = mancerdata["l1-class"] && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Powercasting Ability"] ? mancerdata["l1-class"].data.class["Powercasting Ability"] : "";
var expandedList = {};
//Collect expanded power lists
if(mancerdata["l1-class"] && mancerdata["l1-class"].data.subclass && mancerdata["l1-class"].data.subclass["data-Class Powers"]) {
_.each(mancerdata["l1-class"].data.subclass["data-Class Powers"], function(power, level) {
if(power["Expanded List"]) {
expandedList[level] = power["Expanded List"];
}
});
}
//Collect data from data-Powers
_.each(["race", "subrace", "class", "subclass"], function(section) {
var parentsection = section.replace("sub", "");
if(mancerdata["l1-" + parentsection] && mancerdata["l1-" + parentsection].data[section] && mancerdata["l1-" + parentsection].data[section]["data-Powers"]) {
allPowers[parentsection] = allPowers[parentsection] || {known: [], choices: []}
_.each(mancerdata["l1-" + parentsection].data[section]["data-Powers"], function(power) {
if(power.Name) {
allPowers[parentsection].known.push(power);
allPowers.known.push(power.Name);
} else {
allPowers[parentsection].choices.push(power);
}
});
}
});
//Collect data from data-Class Powers
_.each(["class", "subclass"], function(section) {
if(mancerdata["l1-class"] && mancerdata["l1-class"].data[section] && mancerdata["l1-class"].data[section]["data-Class Powers"]) {
allPowers.class = allPowers.class || {known: [], choices: []}
_.each(mancerdata["l1-class"].data[section]["data-Class Powers"], function(power, level) {
var numPowers = 0;
expandedList[level] = expandedList[level] || [];
if(power.Prepared) {
numPowers = Math.max(stats.abilities.totals[power.Prepared.split("+")[0].toLowerCase()].mod, 0) + parseInt(power.Prepared.split("+")[1]);
}
if(power.Choice) {
numPowers = parseInt(power.Choice);
}
if(numPowers > 0) {
for(var x = 1; x <= numPowers; x++) {
var thisPower = {List: classname, Level: parseInt(level), Ability: classAbility};
thisPower["Expanded List"] = expandedList[level];
allPowers.class.choices.push(thisPower);
}
}
_.each(power.Known, function(known) {
var thisPower = {Name: known, Level: parseInt(level), Ability: classAbility};
allPowers.class.known.push(thisPower);
allPowers.known.push(known);
});
});
}
});
//Collect custom race/subrace powers
if(mancerdata["l1-race"] && mancerdata["l1-race"].values.custom_race_power_ability) {
var raceAbility = mancerdata["l1-race"].values.custom_race_power_ability;
var numPowers = mancerdata["l1-race"].values.custom_race_power_number;
var powerList = mancerdata["l1-race"].values.custom_race_power_list;
if(powerList) {
allPowers.race = allPowers.race || {known: [], choices: []}
for(var x=1; x<=numPowers; x++) {
var thisPower = {
Ability: raceAbility,
Level: 0,
List: powerList
};
allPowers.race.choices.push(thisPower);
}
} else {
allPowers.errors.race.push("custom_race_power_list");
}
}
//Collect custom class powers
if(mancerdata["l1-class"] && mancerdata["l1-class"].values.custom_class_power_ability) {
var customAbility = mancerdata["l1-class"].values.custom_class_power_ability;
var customList = mancerdata["l1-class"].values.custom_class_power_list;
var customPowers = {"0": mancerdata["l1-class"].values.custom_class_cantrip_number, "1": mancerdata["l1-class"].values.custom_class_power_number};
if(customList && (customPowers["0"] > 0 || customPowers["1"] > 0)) {
allPowers.class = allPowers.class || {known: [], choices: []}
_.each(customPowers, function(number, level) {
for(var x=1; x<=number; x++) {
var thisPower = {
Ability: customAbility,
Level: level,
List: customList
};
allPowers.class.choices.push(thisPower);
}
});
} else {
allPowers.errors.class.push("custom_class_power_list");
allPowers.errors.class.push("custom_class_power_number");
}
}
//Collect custom subclass powers
if(mancerdata["l1-class"] && mancerdata["l1-class"].values.subclass == "Rules:Classes") {
var customPowers = {"0": mancerdata["l1-class"].values.custom_subclass_cantrip_number, "1": mancerdata["l1-class"].values.custom_subclass_power_number};
if(customPowers["0"] > 0 || customPowers["1"] > 0) {
allPowers.class = allPowers.class || {known: [], choices: []}
_.each(customPowers, function(number, level) {
var customList = classname.toLowerCase();
if(level == "0" && mancerdata["l1-class"].values.custom_subclass_cantrip_list) customList = mancerdata["l1-class"].values.custom_subclass_cantrip_list;
if(level == "1" && mancerdata["l1-class"].values.custom_subclass_power_list) customList = mancerdata["l1-class"].values.custom_subclass_power_list;
for(var x=1; x<=number; x++) {
var thisPower = {
Ability: classAbility,
Level: level,
List: customList
};
allPowers.class.choices.push(thisPower);
}
});
}
}
//Collect data from choices
if(mancerdata["l1-powers"]) {
var validchoices = [];
if(mancerdata["l1-powers"].values.race_powers == racename + subracename) validchoices.push("race");
if(mancerdata["l1-powers"].values.class_powers == classname + subclassname) validchoices.push("class");
_.each(validchoices, function(section) {
for(var x=1; x<=9; x++) {
if(mancerdata["l1-powers"].values[section + "_level0_choice" + x]) {
allPowers.known.push(mancerdata["l1-powers"].values[section + "_level0_choice" + x].substring(7));
}
if(mancerdata["l1-powers"].values[section + "_level1_choice" + x]) {
allPowers.known.push(mancerdata["l1-powers"].values[section + "_level1_choice" + x].substring(7));
}
}
});
}
return allPowers;
};
var cleanEquipment = function(equipment) {
var current_string = "(";
var hasDouble = false;
var firstItem = true;
_.each(equipment, function(item) {
if (item.search("~DBL") != -1) {
hasDouble = true;
item.replace("~DBL","");
}
item = item.replace(/"Item Type":(.|)Weapon.*\b/g, "Any Weapon");
item = item.replace(/Subtype:(.|)Martial.*\b("|)/g, "Any Martial Weapon");
item = item.replace(/Subtype:(.|)Simple.*\b("|)/g, "Any Simple Weapon");
item = item.replace(/Subtype:(.|)Artisan's Tools.*\b("|)/g, "A Set of Artisan's Tools");
item = item.replace(/Subtype:(.|)Gaming Set.*\b("|)/g, "A Gaming Set");
item = item.replace(/Subtype:(.|)Musical Instrument.*\b("|)/g, "A Musical Instrument");
if (!firstItem) current_string += " or ";
current_string += item;
firstItem = false;
});
current_string += ")";
if (hasDouble) {
current_string = "two of " + current_string;
}
return current_string.replace(/,/g, ", ");
};
var getName = function(request, data, custom) {
data = data || getCharmancerData();
var section = request.replace("sub", "");
var result = "";
var customString = custom ? "custom" : "";
if( data["l1-" + section] && data["l1-" + section].values[request] ) {
result = data["l1-" + section].values[request + "_name"] || data["l1-" + section].values[request];
}
result = result.split(":")[0] == "Rules" || result.split(":")[0] == "CategoryIndex" ? customString : result;
return _.last(result.split(":"));
}
on("mancerchange:race", function(eventinfo) {
changeCompendiumPage("sheet-race-info", eventinfo.newValue);
hideChoices();
var reset = {};
if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) {
showChoices(["race_options"]);
}
recalcData();
if(eventinfo.sourceType == "player") {
reset = {race_ability_choice1: "", race_ability_choice2: "", subrace_ability_choice1: "", subrace_ability_choice2: "", subrace: "", race_name: "", subrace_name: ""};
_.each(abilityList, function(ability){
reset["race_custom_" + ability.toLowerCase()] = 0;
reset["subrace_custom_" + ability.toLowerCase()] = 0;
reset[ability.toLowerCase() + "_save"] = "";
});
for(var x=1; x<=proficiencyNum; x++) {
reset["custom_race_trait_name_" + x] = "";
reset["custom_race_trait_desc_" + x] = "";
reset["custom_race_prof_name_choice" + x] = "";
reset["custom_race_prof_type_choice" + x] = "";
}
reset["custom_race_power_ability"] = "";
reset["custom_race_power_number"] = "1";
reset["custom_race_power_list"] = "";
reset["race_name"] = "";
reset["subrace_name"] = "";
reset["has_subrace"] = "";
}
if(eventinfo.newValue === "Rules:Races") {
//Clears saved data for this field
getCompendiumPage("");
setAttrs(reset, function() {
var update = {"race_text": ""};
var options = eventinfo.sourceType == "player" ? {selected: ""} : {}
showChoices(["custom_race"]);
setCharmancerText(update);
_.each(proficiencyList, function(prof) {
for(var x=1; x<=proficiencyNum; x++) {
var first = true;
setCharmancerOptions("race_" + prof.toLowerCase() + "_choice" + x, "Category:Proficiencies Type:" + prof, options, function() { if(first) { first = false; recalcData() } });
}
});
});
} else {
getCompendiumPage(eventinfo.newValue, getList, function(p) {
setAttrs(reset, function() {
var mancerdata = getCharmancerData();
var update = {};
var showList = ["race_always", "race_traits"];
var possibles = ["race_size", "race_speed", "race_ability_score", "race_traits"];
var data = p["data"];
_.each(proficiencyList, function(type){
possibles.push("race_" + type.toLowerCase() + "s");
});
_.each(possibles, function(key) {
update[key] = "";
});
if(data["Size"]) {update["race_size"] = data["Size"];};
if(data["Speed"]) {update["race_speed"] = data["Speed"];};
showList = showList.concat(handleAbilities(data, "race"));
if(data["data-Ability Score Increase"]) {
var abilityText = [];
var json = JSON.parse(data["data-Ability Score Increase"]);
_.each(json, function(increase, ability) {
abilityText.push(ability + " +" + increase);
});
update["race_ability_score"] = abilityText.join(", ");
}
showList = showList.concat(handleProficiencies(data, "race", eventinfo.sourceType));
_.each(proficiencyList, function(prof) {
if(data["data-" + prof + " Proficiency"]) {
var json = JSON.parse(data["data-" + prof + " Proficiency"]);
if(json.Proficiencies) {
update["race_" + prof.toLowerCase() + "s"] = json.Proficiencies.join(", ");
}
}
});
if(data["data-Traits"] && data["data-Traits"].length > 0) {
var traits_final = "";
var json = JSON.parse(data["data-Traits"]);
_.each(json, function(t, i) {
if(t["Name"] && t["Desc"]) {
traits_final = traits_final + "<b>" + t["Name"] + ".</b> " + t["Desc"] + "<br>";
};
update["race_traits"] = traits_final;
});
};
setCharmancerText(update);
var race_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Races" ? eventinfo.newValue.split(":")[1] : false;
if(race_name) {
var subOptions = {show_source: true};
if(eventinfo.sourceType != "player") {
subOptions.silent = true;
} else {
subOptions.selected = "";
}
setCharmancerOptions("subrace","Category:Subraces data-Parent:" + race_name, subOptions, function(values) {
if (values.length) {
setAttrs({"has_subrace": "true"});
showChoices(["subrace"]);
}
});
}
else {
hideChoices(["subrace"]);
}
showChoices(showList);
recalcData();
});
});
}
});
on(customListeners, function(eventinfo) {
var mancerdata = getCharmancerData();
var num = parseInt(eventinfo.triggerName.substr(-1));
var base = eventinfo.triggerName.slice(0, -1);
var section = eventinfo.triggerName.split("_")[0].replace("sub", "");
if(mancerdata["l1-" + section].values[base.split("_")[0]]
&& ["Rules", "CategoryIndex"].indexOf(mancerdata["l1-" + section].values[base.split("_")[0]].split(":")[0]) != -1
&& eventinfo.newValue) {
showChoices([base + (num+1)]);
}
});
on(customProfListeners, function(eventinfo) {
var mancerdata = getCharmancerData();
var num = parseInt(eventinfo.triggerName.substr(-1));
var section = eventinfo.triggerName.split("_")[1];
if(mancerdata["l1-" + section].values["custom_" + section + "_prof_name_choice" + num]
&& mancerdata["l1-" + section].values["custom_" + section + "_prof_type_choice" + num]) {
showChoices(["custom_prof_choice" + (num + 1)]);
}
});
on("mancerchange:custom_race_trait_name_1 mancerchange:custom_race_trait_name_2 mancerchange:custom_race_trait_name_3 mancerchange:custom_race_trait_name_4 mancerchange:custom_class_trait_name_1 mancerchange:custom_class_trait_name_2 mancerchange:custom_class_trait_name_3 mancerchange:custom_class_trait_name_4", function(eventinfo) {
var num = parseInt(eventinfo.triggerName.substr(-1));
if(eventinfo.newValue) {
showChoices(["custom_trait_" + (num + 1)]);
}
});
on("mancerchange:custom_race_power_ability mancerchange:custom_class_power_ability", function(eventinfo) {
var section = eventinfo.triggerName.split("_")[1];
if(eventinfo.newValue) {
showChoices(["custom_powercasting"]);
} else {
var set = {}
set["custom_" + section + "_power_number"] = "1";
set["custom_" + section + "_cantrip_number"] = "1";
set["custom_" + section + "_power_list"] = "";
setAttrs(set);
hideChoices(["custom_powercasting"]);
}
});
on("mancerchange:subrace", function(eventinfo) {
changeCompendiumPage("sheet-race-info", eventinfo.newValue);
var initHide = ["subrace_possible", "custom_trait_2", "custom_trait_3", "custom_trait_4"];
var reset = {};
if(eventinfo.newValue === "" || eventinfo.newValue === undefined) {
initHide.push("subrace_options");
}
else {
showChoices(["subrace_options"]);
}
hideChoices(initHide);
recalcData();
if(eventinfo.sourceType == "player") {
reset = {subrace_ability_choice1: "", subrace_ability_choice2: "", subrace_name: ""};
_.each(abilityList, function(ability){
reset["race_custom_" + ability.toLowerCase()] = 0;
reset["subrace_custom_" + ability.toLowerCase()] = 0;
});
for(var x=1; x<=proficiencyNum; x++) {
reset["custom_race_trait_name_" + x] = "";
reset["custom_race_trait_desc_" + x] = "";
reset["custom_race_prof_name_choice" + x] = "";
reset["custom_race_prof_type_choice" + x] = "";
}
reset["custom_race_power_ability"] = "";
reset["custom_race_power_number"] = "1";
reset["custom_race_power_list"] = "";
reset["subrace_name"] = "";
}
if(eventinfo.newValue === "Rules:Races") {
//Clears saved data for this field
getCompendiumPage("");
setAttrs(reset, function() {
var update = {"subrace_text": ""};
var options = eventinfo.sourceType == "player" ? {selected: ""} : {};
showChoices(["custom_subrace"]);
setCharmancerText(update);
_.each(proficiencyList, function(prof) {
for(var x=1; x<=proficiencyNum; x++) {
var first = true;
setCharmancerOptions("subrace_" + prof.toLowerCase() + "_choice" + x,
"Category:Proficiencies Type:" + prof, options, function() {
if(first) { first = false; recalcData(); }
});
}
});
deleteCharmancerData(["l1-feat"]);
});
} else {
hideChoices(["custom_subrace"]);
getCompendiumPage(eventinfo.newValue, getList, function(p) {
var update = {};
var showList = ["subrace_choices"];
var possibles = ["subrace_speed", "subrace_ability_score", "subrace_traits"];
var data = p["data"];
_.each(proficiencyList, function(type){
possibles.push("subrace_" + type.toLowerCase() + "s");
});
_.each(possibles, function(key) {
update[key] = "";
});
if(!data["data-Feats"]) deleteCharmancerData(["l1-feat"], function() {recalcData();});
if(data["Speed"]) {
update["subrace_speed"] = data["Speed"];
showList.push("subrace_speed_row");
};
showList = showList.concat(handleAbilities(data, "subrace"));
if(data["data-Ability Score Increase"]) {
var abilityText = [];
var json = JSON.parse(data["data-Ability Score Increase"]);
_.each(json, function(increase, ability) {
abilityText.push(ability + " +" + increase);
});
update["subrace_ability_score"] = abilityText.join(", ");
}
showList = showList.concat(handleProficiencies(data, "subrace", eventinfo.sourceType));
_.each(proficiencyList, function(prof) {
if(data["data-" + prof + " Proficiency"]) {
var json = JSON.parse(data["data-" + prof + " Proficiency"]);
if(json.Proficiencies) {
update["subrace_" + prof.toLowerCase() + "s"] = json.Proficiencies.join(", ");
}
}
});
if(data["data-Traits"] && data["data-Traits"].length > 0) {
var traits_final = "";
var json = JSON.parse(data["data-Traits"]);
_.each(json, function(t, i) {
if(t["Name"] && t["Desc"]) {
traits_final = traits_final + "<b>" + t["Name"] + ".</b> " + t["Desc"] + "<br>";
};
update["subrace_traits"] = traits_final;
});
};
setCharmancerText(update);
showChoices(showList);
setAttrs(reset);
recalcData();
});
}
});
on(changeListeners, function(eventinfo) {
if(eventinfo.triggerName.search("language") != -1) {
if(eventinfo.newValue == "custom") {
showChoices([eventinfo.triggerName + "_custom"]);
} else if(eventinfo.sourceType != "worker") {
hideChoices([eventinfo.triggerName + "_custom"]);
}
}
recalcData();
});
on(customLanguageListeners, function(eventinfo) {
if(eventinfo.sourceType != "worker") {
recalcData();
}
});
on("page:l1-class page:l1-race page:l1-abilities page:l1-background", function(eventinfo) {
recalcData();
});
on("page:l1-welcome", function(eventinfo) {
});
on("mancerchange:class", function(eventinfo) {
changeCompendiumPage("sheet-class-info", eventinfo.newValue);
hideChoices();
var initHide = ["class_possible", "subclass_choices"];
var reset = {};
if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) {
showChoices(["classes_options"]);
}
var current = recalcData();
if(eventinfo.sourceType == "player") {
reset = {subclass: ""};
reset["class_feature_choice_1_name"] = "";
reset["class_feature_choice_2_name"] = "";
reset["class_feature_choice_3_name"] = "";
reset["subclass_feature_choice_1_name"] = "";
reset["subclass_feature_choice_2_name"] = "";
_.each(abilityList, function(ability){
reset[ability.toLowerCase() + "_save"] = "";
});
for(var x=1; x<=proficiencyNum; x++) {
reset["custom_class_trait_name_" + x] = "";
reset["custom_class_trait_desc_" + x] = "";
reset["custom_class_prof_name_choice" + x] = "";
reset["custom_class_prof_type_choice" + x] = "";
}
reset["custom_class_power_ability"] = "";
reset["custom_class_cantrip_number"] = "0";
reset["custom_class_power_number"] = "0";
reset["custom_class_power_list"] = "";
reset["custom_hit_die"] = "";
reset["class_name"] = "";
reset["subclass_name"] = "";
reset["class_equipment_choice1"] = "";
reset["class_equipment_choice2"] = "";
reset["class_equipment_choice3"] = "";
reset["class_equipment_choice4"] = "";
}
if(eventinfo.newValue === "Rules:Classes") {
//Clears saved data for this field
getCompendiumPage("");
setAttrs(reset, function() {
var update = {"class_text": "", "custom_feature_name": "Class Features"};
var options = eventinfo.sourceType == "player" ? {selected: ""} : {}
showChoices(["custom_class"]);
update["custom_feature_name"] = "Custom Class Features";
setCharmancerText(update);
_.each(proficiencyList, function(prof) {
for(var x=1; x<=proficiencyNum; x++) {
var first = true;
setCharmancerOptions("class_" + prof.toLowerCase() + "_choice" + x, "Category:Proficiencies Type:" + prof, options, function() {
if(first) { first = false; recalcData() }
});
}
});
});
} else {
getCompendiumPage(eventinfo.newValue, getList, function(p) {
var update = {};
var showList = ["class_traits_row"];
var possibles = ["class_traits"];
var data = p["data"];
var hideList = [];
_.each(proficiencyList, function(type){
possibles.push("class_" + type.toLowerCase() + "s");
});
_.each(possibles, function(key) {
update[key] = "";
});
showList = showList.concat(handleProficiencies(data, "class", eventinfo.sourceType));
_.each(proficiencyList, function(prof) {
if(data["data-" + prof + " Proficiency"]) {
var json = JSON.parse(data["data-" + prof + " Proficiency"]);
if(json.Proficiencies) {
update["class_" + prof.toLowerCase() + "s"] = json.Proficiencies.join(", ");
}
}
});
if(data["data-Feature Choices"]) {
var json = JSON.parse(data["data-Feature Choices"]);
_.each(json, function(feature, num) {
var x = num + 1;
showList.push("class_feature_row_" + x);
if (feature.Values[0] == "Any Language") {
setCharmancerOptions("class_feature_choice_" + x, "Category:Proficiencies Type:Language", {category: "Proficiencies", disable: current.proficiencies["language"]});
} else {
setCharmancerOptions("class_feature_choice_" + x, feature.Values);
}
update["class_feature_name_" + x] = feature.Name;
reset["class_feature_choice_" + x + "_name"] = feature.Name;
});
}
if(eventinfo.sourceType == "player") {
for(var x = 1; x<=4; x++) {
reset["class_feature_choice_" + x] = "";
}
}
if(data["data-Traits"] && data["data-Traits"].length > 0) {
var traits_final = "";
var json = JSON.parse(data["data-Traits"]);
_.each(json, function(t, i) {
if(t["Name"] && t["Desc"]) {
traits_final = traits_final + "<b>" + t["Name"] + ".</b> " + t["Desc"] + "<br>";
};
update["class_traits"] = traits_final;
});
};
var class_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Classes" ? eventinfo.newValue.split(":")[1] : false;
if(class_name && data["data-Subclass Level"] == 1) {
var subOptions = {show_source: true};
if(eventinfo.sourceType != "player") {
subOptions.silent = true;
} else {
subOptions.selected = "";
}
update["subclass_prompt"] = "Choose a " + data["Subclass Name"];
setCharmancerOptions("subclass","Category:Subclasses data-Parent:" + class_name, subOptions, function(values) {
if (values.length) showChoices(["subclass"]);
});
}
else {
hideList.push("subclass");
}
if (data["data-Equipment"]) {
showList.push("class_equipment_row");
var equipment_string = "";
var json = JSON.parse(data["data-Equipment"]);
if(json["default"]) {
equipment_string += json["default"].join(", ");
}
for (var i = 1; i < 5; i++) {
if(json[i]) {
if (!json["default"].length && i == 1) {
equipment_string += "";
} else {
equipment_string += " and ";
}
equipment_string += cleanEquipment(json[i]);
}
};
update["class_standard_equipment"] = equipment_string;
}
setCharmancerText(update);
showChoices(showList);
hideChoices(hideList);
recalcData();
setAttrs(reset);
});
}
});
on("mancerchange:class_feature_choice_1 mancerchange:class_feature_choice_2", function(eventinfo) {
var data = getCharmancerData();
var featureNum = _.last( eventinfo.triggerName.split("_") );
var update = {};
var set = {};
set["class_feature_choice_" + featureNum + "_desc"] = "";
if(eventinfo.newValue) {
getCompendiumPage(data["l1-class"].values.class, function(p) {
var data = p["data"];
if(data["data-Feature Choices"]) {
var feature = JSON.parse(data["data-Feature Choices"])[featureNum-1];
var featureName = feature.Name;
var offset = 3;
if (eventinfo.newValue.split("~")[1] && eventinfo.newValue.split("~")[1] == "DBL") {
showChoices(["class_feature_row_" + featureNum + "_manual"]);
// var doubleChoiceNum = featureNum + offset;
// setCharmancerOptions("class_feature_choice_" + doubleChoiceNum, [eventinfo.newValue]);
} else {
hideChoices(["class_feature_row_" + featureNum + "_manual"]);
}
if(data["data-" + featureName + " Data"]) {
var json = JSON.parse(data["data-" + featureName + " Data"]);
var selected = _.findWhere(json, {Name: eventinfo.newValue});
if(selected) {
update["class_feature_description_" + featureNum] = selected.Desc;
set["class_feature_choice_" + featureNum + "_desc"] = selected.Desc;
setAttrs(set);
setCharmancerText(update);
}
}
}
});
} else {
update["class_feature_description_" + featureNum] = "";
setAttrs(set);
setCharmancerText(update);
}
});
on("mancerchange:subclass", function(eventinfo) {
changeCompendiumPage("sheet-class-info", eventinfo.newValue);
var initHide = ["subclass_possible"];
var reset = {};
if(eventinfo.newValue === "" || eventinfo.newValue === undefined) {
initHide.push("subclass_options");
initHide.push("custom_subclass");
}
else {
showChoices(["subclass_options"]);
if(eventinfo.newValue === "Rules:Classes") {
showChoices(["custom_subclass"]);
}
else {
initHide.push("custom_subclass");
}
}
hideChoices(initHide);
var current = recalcData();
if(eventinfo.sourceType == "player") {
reset["subclass_feature_choice_1_name"] = "";
reset["subclass_feature_choice_2_name"] = "";
for(var x=1; x<=proficiencyNum; x++) {
reset["custom_class_trait_name_" + x] = "";
reset["custom_class_trait_desc_" + x] = "";
reset["custom_class_prof_name_choice" + x] = "";
reset["custom_class_prof_type_choice" + x] = "";
}
reset["custom_class_power_ability"] = "";
reset["custom_class_cantrip_number"] = "0";
reset["custom_class_power_number"] = "0";
reset["custom_class_power_list"] = "";
reset["custom_subclass_cantrip_number"] = "0";
reset["custom_subclass_cantrip_list"] = "";
reset["custom_subclass_power_number"] = "0";
reset["custom_subclass_power_list"] = "";
reset["subclass_name"] = "";
}
if(eventinfo.newValue === "Rules:Classes") {
//Clears saved data for this field
getCompendiumPage("");
setAttrs(reset, function() {
var mancerdata = getCharmancerData();
var update = {"subclass_text": ""};
var options = eventinfo.sourceType == "player" ? {selected: ""} : {};
var subclassname = mancerdata["l1-class"].data.class["Subclass Name"];
showChoices(["custom_subclass"]);
if(mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["Powercasting Ability"]) {
showChoices(["custom_additional_powers"]);
} else {
showChoices(["custom_class_powers"]);
}
update["custom_feature_name"] = "Custom " + subclassname + " Features";
update["custom_subclass_name"] = "Custom " + subclassname + " Name";
setCharmancerText(update);
_.each(proficiencyList, function(prof) {
for(var x=1; x<=proficiencyNum; x++) {
var first = true;
setCharmancerOptions("subclass_" + prof.toLowerCase() + "_choice" + x,
"Category:Proficiencies Type:" + prof, options, function() {
if(first) { first = false; recalcData(); }
});
}
});
});
} else {
hideChoices(["custom_subclass"]);
getCompendiumPage(eventinfo.newValue, getList, function(p) {
var update = {};
var showList = [];
var possibles = ["subclass_traits"];
var data = p["data"];
var hideList = [];
_.each(proficiencyList, function(type){
possibles.push("subclass_" + type.toLowerCase() + "s");
});
_.each(possibles, function(key) {
update[key] = "";
});
showList = showList.concat(handleProficiencies(data, "subclass", eventinfo.sourceType));
_.each(proficiencyList, function(prof) {
if(data["data-" + prof + " Proficiency"]) {
var json = JSON.parse(data["data-" + prof + " Proficiency"]);
if(json.Proficiencies) {
update["subclass_" + prof.toLowerCase() + "s"] = json.Proficiencies.join(", ");
}
}
});
if(data["data-Feature Choices"]) {
var json = JSON.parse(data["data-Feature Choices"]);
_.each(json, function(feature, num) {
var x = num + 1;
showList.push("subclass_feature_row_" + x)
setCharmancerOptions("subclass_feature_choice_" + x, feature.Values);
update["subclass_feature_name_" + x] = feature.Name;
reset["subclass_feature_choice_" + x + "_name"] = feature.Name;
});
}
if(eventinfo.sourceType == "player") {
for(var x = 1; x<=4; x++) {
reset["subclass_feature_choice_" + x] = "";
}
}
if(data["data-Traits"] && data["data-Traits"].length > 0) {
var traits_final = "";
var json = JSON.parse(data["data-Traits"]);
_.each(json, function(t, i) {
if(t["Name"] && t["Desc"]) {
traits_final = traits_final + "<b>" + t["Name"] + ".</b> " + t["Desc"] + "<br>";
};
update["subclass_traits"] = traits_final;
});
};
setCharmancerText(update);
showChoices(showList);
hideChoices(hideList);
recalcData();
setAttrs(reset);
});
}
});
on("mancerchange:custom_subclass_cantrip_number mancerchange:custom_subclass_power_number", function(eventinfo) {
var section = eventinfo.triggerName.split("_")[2];
if(eventinfo.newValue && eventinfo.newValue > 0) {
showChoices(["custom_" + section + "_list"]);
} else {
var reset = {};
reset["custom_subclass_" + section + "_list"] = "";
hideChoices(["custom_" + section + "_list"]);
setAttrs(reset);
}
});
var costOfScore = function(score) {
if (isNaN(score) || score == 8) {
return 0;
}
var cost = 0;
if (score > 8) {
if (score < 14) {
cost = score - 8;
} else if (score == 14) {
cost = 7;
} else if (score == 15) {
cost = 9;
} else { // Score should never be higher, but let's cover our bases.
cost = 11;
}
}
return cost;
};
var recalcPoints = function() {
data = getCharmancerData();
var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"];
var maxPoints = 27;
var scores = {};
_.each(attribs, function(attrib) {
scores[attrib] = parseInt(data["l1-abilities"].values[attrib]);
if (isNaN(scores[attrib])) {
scores[attrib] = 8;
}
});
var pointsAvailable = maxPoints;
// Decrement points based on selected attribs
_.each(scores, function(score) {
if (!isNaN(score)) {
var cost = costOfScore(score);
pointsAvailable -= cost;
}
});
// Disable options if points are below a threshold.
if (pointsAvailable < 9) {
var choicesToDisable = ["15","14","13","12","11","10","9"];
_.each(attribs, function(attrib) {
var toDisableForThisAttrib = []
_.each(choicesToDisable, function(choice) {
if (scores[attrib] <= Number(choice) && (costOfScore(scores[attrib]) + pointsAvailable < costOfScore(Number(choice)))) {
toDisableForThisAttrib.push(choice);
}
});
disableCharmancerOptions(attrib, toDisableForThisAttrib);
});
} else {
_.each(attribs, function(attrib) {
disableCharmancerOptions(attrib, []);
});
}
_.each(attribs, function(attrib) {
setCharmancerText({"points_available_display":String(pointsAvailable)});
});
return String(pointsAvailable);
};
on("page:l1-abilities", function(eventinfo) {
var data = getCharmancerData();
getCompendiumPage("Rules:Ability%20Scores", getList, function(p) {
var pagedata = p["data"];
var allChoices = [];
if (pagedata["data-Generation Choices"]) {
var genChoices = JSON.parse(pagedata["data-Generation Choices"]);
_.each(genChoices, function(value, choice) {
allChoices.push(choice);
});
}
setCharmancerOptions("abilities", allChoices);
if (data["l1-abilities"] && data["l1-abilities"].values && data["l1-abilities"].values.abilities) {
setAttrs({"abilities": data["l1-abilities"].values.abilities});
}
});
})
on("mancerchange:abilities", function(eventinfo) {
var data = getCharmancerData();
var initHide = ["abilities_possible"];
var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"];
var standardArray = ["8", "10", "12", "13", "14", "15"];
var pointbuyChoices = ["8", "9", "10", "11", "12", "13", "14", "15"];
hideChoices(initHide);
if (data["l1-abilities"].values.abilities == "Standard Array") {
showChoices(["abilities_stdarray", "abilities_selects"]);
_.each(attribs, function(attrib) {
setCharmancerOptions(attrib, standardArray);
});
}
if (data["l1-abilities"].values.abilities == "Roll for Stats") {
showChoices(["abilities_rollstats"]);
if (data["l1-abilities"].values.roll_results && data["l1-abilities"].values.roll_results.length) {
showChoices(["abilities_selects"]);
var roll_results = typeof data["l1-abilities"].values.roll_results == "string" ? data["l1-abilities"].values.roll_results.split(",") : data["l1-abilities"].values.roll_results;
_.each(attribs, function(attrib) {
setCharmancerOptions(attrib, roll_results);
});
}
}
if (data["l1-abilities"].values.abilities == "Point Buy") {
showChoices(["abilities_pointbuy", "abilities_selects"]);
setCharmancerText({"points_available_display":data["l1-abilities"].values.pointbuy_points || "27"});
_.each(attribs, function(attrib) {
setCharmancerOptions(attrib, pointbuyChoices);
});
}
if (data["l1-abilities"].values.abilities == "custom") {
showChoices(["abilities_custom"]);
}
reset = {};
if (eventinfo.sourceType == "player") {
_.each(attribs, function(attrib) {
reset[attrib] = "";
});
reset["pointbuy_points"] = "27"
}
recalcData();
setAttrs(reset);
});
on("mancerchange:strength mancerchange:dexterity mancerchange:constitution mancerchange:intelligence mancerchange:wisdom mancerchange:charisma", function(eventinfo) {
data = getCharmancerData();
var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"];
var clearvalue = eventinfo.newValue;
var clearObject = {
strength: data["l1-abilities"].values.strength,
dexterity: data["l1-abilities"].values.dexterity,
constitution: data["l1-abilities"].values.constitution,
intelligence: data["l1-abilities"].values.intelligence,
wisdom: data["l1-abilities"].values.wisdom,
charisma: data["l1-abilities"].values.charisma};
if (data["l1-abilities"].values.abilities != "custom" && data["l1-abilities"].values.abilities != "Point Buy") {
attribs = _.reject(attribs, function(item) { return item == eventinfo.triggerName; });
_.each(attribs, function(attrib) {
if (clearvalue == clearObject[attrib]) {
clearObject[attrib] = "";
}
});
}
if (data["l1-abilities"].values.abilities == "Point Buy") {
clearObject.pointbuy_points = recalcPoints();
}
if (eventinfo.sourceType == "player") {
setAttrs(clearObject);
}
recalcData();
});
on("mancerroll:rollstats", function(eventinfo) {
var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"];
var results = [];
var i = 1;
_.each(eventinfo.roll, function(roll) {
results.push(roll.result + "~" + i);
i++;
});
results.sort(function(a,b) {return Number(a.split("~")[0]) - Number(b.split("~")[0])});
_.each(attribs, function(attrib) {
setCharmancerOptions(attrib, results);
});
setAttrs({roll_results: results, strength: "", dexterity: "", constitution: "", intelligence: "", wisdom: "", charisma: ""});
showChoices(["abilities_selects"]);
});
on("clicked:clearstats", function(eventinfo) {
var data = getCharmancerData();
var attribs = ["strength","dexterity","constitution","intelligence","wisdom","charisma"];
reset = {};
_.each(attribs, function(attrib) {
reset[attrib] = "";
disableCharmancerOptions(attrib, []);
});
setAttrs(reset);
});
on("clicked:info_race", function(eventinfo) {
var data = getCharmancerData();
var race = data["l1-race"] && data["l1-race"].values.race ? data["l1-race"].values.race : "Rules:Races";
changeCompendiumPage("sheet-race-info", race);
});
on("clicked:info_subrace", function(eventinfo) {
var data = getCharmancerData();
var subrace = data["l1-race"] && data["l1-race"].values.subrace ? data["l1-race"].values.subrace : data["l1-race"].values.race;
changeCompendiumPage("sheet-race-info", subrace);
});
on("clicked:info_class", function(eventinfo) {
var data = getCharmancerData();
var oclass = data["l1-class"] && data["l1-class"].values.class ? data["l1-class"].values.class : "Rules:Classes";
changeCompendiumPage("sheet-class-info", oclass);
});
on("clicked:info_subclass", function(eventinfo) {
var data = getCharmancerData();
var osubclass = data["l1-class"] && data["l1-class"].values.subclass ? data["l1-class"].values.subclass : data["l1-class"].values.class;
changeCompendiumPage("sheet-class-info", osubclass);
});
on("clicked:powerinfo_race_level0_choice1 clicked:powerinfo_race_level0_choice2 clicked:powerinfo_race_level0_choice3 clicked:powerinfo_race_level1_choice1 clicked:powerinfo_race_level1_choice2 clicked:powerinfo_race_level1_choice3 clicked:powerinfo_class_level0_choice1 clicked:powerinfo_class_level0_choice2 clicked:powerinfo_class_level0_choice3 clicked:powerinfo_class_level0_choice4 clicked:powerinfo_class_level0_choice5 clicked:powerinfo_class_level0_choice6 clicked:powerinfo_class_level1_choice1 clicked:powerinfo_class_level1_choice2 clicked:powerinfo_class_level1_choice3 clicked:powerinfo_class_level1_choice4 clicked:powerinfo_class_level1_choice5 clicked:powerinfo_class_level1_choice6 clicked:powerinfo_class_level1_choice7 clicked:powerinfo_class_level1_choice8 clicked:powerinfo_class_level1_choice9", function(eventinfo) {
var select_name = eventinfo.triggerName.substring(18);
var data = getCharmancerData();
var power_name = data["l1-powers"] && data["l1-powers"].values[select_name] ? data["l1-powers"].values[select_name] : "Rules:Powers";
console.log(power_name);
changeCompendiumPage("sheet-powers-info", power_name, "card_only");
});
on("mancerchange:background", function(eventinfo) {
changeCompendiumPage("sheet-background-info", eventinfo.newValue);
var initHide = ["background_possible", "custom_background"];
var reset = {};
if(eventinfo.newValue === "" || eventinfo.newValue === undefined) {
initHide.push("backgrounds_options");
}
else {
showChoices(["backgrounds_options"]);
}
hideChoices(initHide);
var current = recalcData();
if(eventinfo.sourceType == "player") {
reset = {};
for(var x=0; x<=4; x++) {
reset["background_skill_choice" + x] = "";
reset["background_tool_choice" + x] = "";
reset["background_language_choice" + x] = "";
}
reset["background_detail_choice"] = "";
reset["background_personality_choice1"] = "";
reset["background_personality_choice2"] = "";
reset["background_ideal_choice"] = "";
reset["background_bond_choice"] = "";
reset["background_flaw_choice"] = "";
reset["custom_background_trait_name"] = "";
reset["custom_background_trait_desc"] = "";
}
if(eventinfo.newValue === "Rules:Backgrounds") {
//Clears saved data for this field
getCompendiumPage("");
setAttrs(reset, function() {
var update = {"background_text": ""};
var options = eventinfo.sourceType == "player" ? {selected: ""} : {}
showChoices(["custom_background"]);
setCharmancerText(update);
_.each(proficiencyList, function(prof) {
for(var x=1; x<=proficiencyNum; x++) {
var first = true;
setCharmancerOptions("background_" + prof.toLowerCase() + "_choice" + x, "Category:Proficiencies Type:" + prof, options, function() { if(first) { first = false; recalcData() } });
}
});
});
} else {
getCompendiumPage(eventinfo.newValue, getList, function(p) {
var update = {};
var showList = [];
var possibles = ["background_feature"];
var data = p["data"];
var hideList = [];
var setRollButton = function(name, data, title) {
var set = {};
title = title || name.split("_")[1];
title = title[0].toUpperCase() + title.substring(1);
if(title == "Personality") title += " Trait"
set["roll_" + name + "_roll"] = "&{template:mancerroll} {{title=" + title + "}} {{r1=[[1d" + data.length + "]]}}";
set[name + "_array"] = JSON.stringify({name: title, array: data});
setAttrs(set);
};
_.each(proficiencyList, function(type){
possibles.push("background_" + type.toLowerCase() + "s");
});
_.each(possibles, function(key) {
update[key] = "";
});
showList = showList.concat(handleProficiencies(data, "background", eventinfo.sourceType));
_.each(proficiencyList, function(prof) {
if(data["data-" + prof + " Proficiency"]) {
var json = JSON.parse(data["data-" + prof + " Proficiency"]);
if(json.Proficiencies) {
update["background_" + prof.toLowerCase() + "s"] = json.Proficiencies.join(", ");
}
}
});
if (data["data-Background Choices"] && data["data-Background Choices"] != "") {
showList.push("background_detail_choice_row");
var choices = JSON.parse(data["data-Background Choices"]);
showList.push("background_detail_choice");
setCharmancerOptions("background_detail_choice", choices, {}, function(opts) {
setRollButton("background_detail_choice", opts, data["data-Background Choice Name"]);
});
update["background_detail_choice_name"] = data["data-Background Choice Name"];
}
if(eventinfo.sourceType == "player") {
reset["background_detail_choice"] = "";
}
if (data["data-Personality Traits"]) {
showList.push("background_personality_row");
var choices = JSON.parse(data["data-Personality Traits"]);
setCharmancerOptions("background_personality_choice1", choices, {}, function(opts) {
setRollButton("background_personality_choice1", opts);
});
setCharmancerOptions("background_personality_choice2", choices, {}, function(opts) {
setRollButton("background_personality_choice2", opts);
});
showList.push("background_personality_choice1");
showList.push("background_personality_choice2");
}
if (data["data-Ideals"]) {
var choices = JSON.parse(data["data-Ideals"]);
setCharmancerOptions("background_ideal_choice", choices, {}, function(opts) {
setRollButton("background_ideal_choice", opts);
});
showList.push("background_ideal_choice");
}
if (data["data-Bonds"]) {
var choices = JSON.parse(data["data-Bonds"]);
setCharmancerOptions("background_bond_choice", choices, {}, function(opts) {
setRollButton("background_bond_choice", opts);
});
showList.push("background_bond_choice");
}
if (data["data-Flaws"]) {
var choices = JSON.parse(data["data-Flaws"]);
setCharmancerOptions("background_flaw_choice", choices, {}, function(data) {
setRollButton("background_flaw_choice", data);
});
showList.push("background_flaw_choice");
}
if(eventinfo.sourceType == "player") {
reset = _.extend(reset, {"background_personality_choice1": "", "background_personality_choice2": "", "background_ideal_choice": "", "background_bond_choice": "", "background_flaw_choice": ""});
}
if (data["data-Equipment"]) {
showList.push("background_equipment_row");
var equipment_string = "";
var json = JSON.parse(data["data-Equipment"]);
if(json["default"]) {
equipment_string += json["default"].join(", ");
}
for (var i = 1; i < 5; i++) {
if(json[i]) {
if (!json["default"].length && i == 1) {
equipment_string += "";
} else {
equipment_string += " and ";
}
equipment_string += cleanEquipment(json[i]);
}
};
update["background_standard_equipment"] = equipment_string;
}
if(data["data-Feature Name"] && data["data-Feature Name"].length > 0) {
update["background_feature"] = "<b>" + data["data-Feature Name"] + ".</b>";
update["background_feature_description"] = data["data-Feature Description"];
showList = showList.concat(["background_feature_row", "background_feature", "background_feature_description"]);
};
var background_name = eventinfo.newValue && eventinfo.newValue.split(":").length > 1 && eventinfo.newValue.split(":")[0] === "Backgrounds" ? eventinfo.newValue.split(":")[1] : false;
setCharmancerText(update);
showChoices(showList);
hideChoices(hideList);
recalcData();
setAttrs(reset);
});
}
});
on("mancerchange:background_personality_choice1 mancerchange:background_personality_choice2", function(eventinfo) {
var mancerdata = getCharmancerData();
var choices = [];
if(mancerdata["l1-background"].values["background_personality_choice1"]) choices.push(mancerdata["l1-background"].values["background_personality_choice1"]);
if(mancerdata["l1-background"].values["background_personality_choice2"]) choices.push(mancerdata["l1-background"].values["background_personality_choice2"]);
disableCharmancerOptions("background_personality_choice1", choices);
disableCharmancerOptions("background_personality_choice2", choices);
});
on("mancerroll:background_detail_choice_roll mancerroll:background_personality_choice1_roll mancerroll:background_personality_choice2_roll mancerroll:background_ideal_choice_roll mancerroll:background_bond_choice_roll mancerroll:background_flaw_choice_roll", function(eventinfo) {
var data = getCharmancerData();
var index = eventinfo.roll[0].dice[0] - 1;
var baseName = eventinfo.triggerName.split(":")[1].slice(0,-5);
var choices = JSON.parse(data["l1-background"].values[baseName + "_array"]);
setCharmancerOptions(baseName, choices.array, {selected: choices.array[index]});
if(baseName.slice(0, -1) == "background_personality_choice") {
var num = baseName.substr(-1) == "1" ? "2" : "1";
var set = {};
set["roll_" + baseName.slice(0, -1) + num + "_roll"] = "&{template:mancerroll} {{title=" + choices.name + "}} {{r1=[[1d" + choices.array.length + "r" + (index + 1) + "]]}}";
setAttrs(set);
}
});
on("page:l1-equipment", function(eventinfo) {
var data = getCharmancerData();
var class_string = getName("class", data, true);
var background_string = getName("background", data, true);
var class_equipment = data && data["l1-equipment"] && data["l1-equipment"].values.equipment_class ? data["l1-equipment"].values.equipment_class : undefined;
var background_equipment = data && data["l1-equipment"] && data["l1-equipment"].values.equipment_background ? data["l1-class"].values.equipment_background : undefined;
var update = {};
var update_attr = {};
var showList = [];
var hideList = [];
var equipmentType = data["l1-equipment"] && data["l1-equipment"].values.equipment_type ? data["l1-equipment"].values.equipment_type : "";
var handleChoices = function(type) {
var equipment = {};
if(data["l1-" + type] && data["l1-" + type].data[type] && data["l1-" + type].data[type]["data-Equipment"]) {
equipment = data["l1-" + type].data[type]["data-Equipment"];
};
_.each(equipment, function(feature, num) {
if(num === "default") {
update[type + "_equipment"] = feature.join(", ");
} else {
var dynamic_items = "Category:None";
var static_items = [];
var hasDouble = false;
var doubleOffset = 4;
_.each(feature, function(f) {
if(f.indexOf("Subtype:") > -1) {
dynamic_items = 'Category:Items "Item Rarity":Standard ' + f.split("~")[0];
} else if (f.indexOf("*Weapon") > -1) {
dynamic_items = 'Category:Items "Item Rarity":Standard ' + f.split("~")[0];
} else {
static_items.push(f);
}
if (f.split("~")[1] && f.split("~")[1] == "DBL") {
hasDouble = true;
}
});
if (hasDouble) {
showList.push(type + "_equipment_choice" + num + "_double");
var doubleChoiceNum = parseInt(num) + doubleOffset;
setCharmancerOptions(type + "_equipment_choice" + doubleChoiceNum, dynamic_items, {add:static_items, category:"Items"});
} else {
hideList.push(type + "_equipment_choice" + num + "_double");
}
setCharmancerOptions(type + "_equipment_choice" + num, dynamic_items, {add: static_items, category:"Items"});
showList.push(type + "_equipment_choice" + num);
}
});
};
recalcData();
if(class_string) {
showList.push("has_class");
update["class_label"] = class_string;
update_attr["equipment_class"] = class_string;
if(class_equipment && class_equipment != class_string) {
update["starting_gold_btn_label"] = "";
update["class_equipment"] = "";
update_attr["starting_gold"] = 0;
update_attr["equipment_type"] = "";
equipmentType = "";
update_attr["class_equipment_choice1"] = "";
update_attr["class_equipment_choice2"] = "";
update_attr["class_equipment_choice3"] = "";
update_attr["class_equipment_choice4"] = "";
};
if(class_string == "custom") {
update_attr["equipment_type"] = "gold";
hideList.push("equipment_type", "random_gold_option")
showList.push("custom_class_gold", "gold_option", "eqp_custom_class");
} else {
handleChoices("class");
var startingGold = data["l1-class"].data.class && data["l1-class"].data.class["Starting Gold"] ? data["l1-class"].data.class["Starting Gold"] : false;
if(startingGold) {
update["starting_gold_btn_label"] = startingGold;
update_attr["roll_starting_gold"] = "&{template:mancerroll} {{title=Starting Gold}} {{r1=[[" + startingGold.replace("x", "*") + "]]}}";
showList.push("random_gold_option");
} else {
update_attr["roll_starting_gold"] = "&{template:mancerroll} {{title=Starting Gold}} {{r1=[[0]]}}";
update_attr["equipment_type"] = "class";
equipmentType = "class";
hideList.push("equipment_type", "gold_option");
showList.push("class_option", "no_gold_option");
}
}
} else {
showList.push("no_class");
};
if(background_string) {
update["background_label"] = background_string;
update_attr["equipment_background"] = background_string;
if(background_string != "custom") {
handleChoices("background");
}
if(data["l1-equipment"] && data["l1-equipment"].values.equipment_type || class_string == "custom") {
if(data["l1-equipment"] && equipmentType == "class" || class_string == "custom") {
showList.push("has_background");
if(background_equipment && background_equipment != background_string) {
update["background_equipment"] = "";
update_attr["background_equipment_choice1"] = "";
update_attr["background_equipment_choice2"] = "";
update_attr["background_equipment_choice3"] = "";
update_attr["background_equipment_choice4"] = "";
};
}
if(data["l1-equipment"] && equipmentType == "gold" && class_string != "custom") {
showList.push("background_chose_starting_gold");
}
}
} else {
showList.push("no_background");
}
if(equipmentType === "" || equipmentType === undefined) {
hideList.push("gold_option", "class_option");
} else if(equipmentType === "gold") {
if(background_string) showList.push("background_gold_option");
showList.push("gold_option");
hideList.push("class_option");
} else if(equipmentType === "class") {
showList.push("class_option");
hideList.push("gold_option");
}
showChoices(showList);
hideChoices(hideList);
setCharmancerText(update);
setAttrs(update_attr);
});
on("mancerchange:equipment_type", function(eventinfo) {
var showList = [];
var hideList = [];
var update = {};
var reset = {};
var data = getCharmancerData();
var class_string = getName("class", data, true);
var background_string = getName("background", data, true);
var class_equipment = data && data["l1-equipment"] && data["l1-equipment"].values.equipment_class ? data["l1-equipment"].values.equipment_class : undefined;
var background_equipment = data && data["l1-equipment"] && data["l1-equipment"].values.equipment_background ? data["l1-class"].values.equipment_background : undefined;
if(eventinfo.sourceType == "player") {
if(eventinfo.newValue === "" || eventinfo.newValue === undefined) {
hideList.push("gold_option", "class_option", "background_gold_option");
} else if(eventinfo.newValue === "gold") {
if(background_string) showList.push("background_gold_option");
if(class_string != "custom") showList.push("random_gold_option")
showList.push("gold_option");
hideList.push("class_option");
} else if(eventinfo.newValue === "class") {
showList.push("class_option");
hideList.push("gold_option", "background_gold_option");
}
}
showChoices(showList);
hideChoices(hideList);
});
on("mancerroll:starting_gold", function(eventinfo) {
setAttrs({starting_gold: eventinfo.roll[0].result});
});
on("clicked:cancel", function() {
showChoices(["cancel-prompt"]);
console.log(getCharmancerData());
console.log(recalcData());
});
on("clicked:continue", function() {
hideChoices(["cancel-prompt"]);
});
on("page:l1-powers", function(eventinfo) {
var stats = recalcData();
var mancerdata = getCharmancerData();
var powerData = knownPowers();
var showList = [];
var hideList = [];
var set = {};
var update = {};
var racename = getName("race", mancerdata, true);
var subracename = getName("subrace", mancerdata, true);
var classname = getName("class", mancerdata, true);
var subclassname = getName("subclass", mancerdata, true);
var levelTracker = {"race": {"0":1, "1":1}, "class": {"0":1, "1":1}};
set["race_powers"] = racename + subracename;
set["class_powers"] = classname + subclassname;
set["race_number"] = powerData.race ? powerData.race.choices.length : 0;
set["class_number"] = powerData.class ? powerData.class.choices.length : 0;
subracename = getName("subrace", mancerdata) == "" ? "" : " - " + getName("subrace", mancerdata);
subclassname = getName("subclass", mancerdata) == "" ? "" : " - " + getName("subclass", mancerdata);
setAttrs(set, function() {
powerData = knownPowers();
if(powerData.race) update["race_title"] = getName("race", mancerdata) + subracename;
if(powerData.class) update["class_title"] = getName("class", mancerdata) + subclassname;
_.each(["race", "class"], function(section) {
if(powerData[section]) {
showList.push(section + "_row");
for(var x=0; x<=1; x++) {
var knownArray = _.pluck(_.where(powerData[section].known, {Level:x}), "Name");
if(knownArray.length > 0) {
showList.push(section + "_level" + x);
update[section + "_level" + x + "_known"] = knownArray.join(", ");
}
}
_.each(powerData[section].choices, function(choice) {
var powerNumber = levelTracker[section][choice.Level];
var choiceName = section + "_level" + choice.Level + "_choice" + powerNumber;
levelTracker[section][choice.Level]++;
showList.push(section + "_level" + choice.Level);
showList.push(choiceName);
set[choiceName + "_casting"] = choice.Ability;
var options = {category: "Powers", disable: powerData.known, show_source: true};
if(choice["Expanded List"]) {
options.add = choice["Expanded List"];
}
var selects = choice.List;
if(typeof choice.List == "string") {
selects = "Category:Powers Classes:*" + choice.List + " Level:" + choice.Level;
}
setCharmancerOptions(choiceName, selects, options)
});
}
});
_.each(levelTracker, function(tracker, section) {
var previousPowers = mancerdata["l1-powers"] && mancerdata["l1-powers"].values[section + "_powers"] ? mancerdata["l1-powers"].values[section + "_powers"] : "";
if(previousPowers != set[section + "_powers"]) tracker = {"0":1, "1":1}
_.each(tracker, function(number, level) {
for(var x = number; x <= 9; x++) {
set[section + "_level" + level + "_choice" + x] = "";
}
})
});
showList = _.uniq(showList);
if (!powerData.race && !powerData.class) {
showList.push("no_powers");
hideList.push("yes_powers");
} else {
showList.push("power-info-container");
hideList.push("no_powers");
}
setCharmancerText(update);
showChoices(showList);
hideChoices(hideList);
setAttrs(set);
});
});
on("page:l1-feat", function(eventinfo) {
var stats = recalcData();
var mancerdata = getCharmancerData();
var showList = [];
var hideList = [];
if(mancerdata["l1-race"] && mancerdata["l1-race"].data.subrace && mancerdata["l1-race"].data.subrace["data-Feats"]) {
showList = ["yes_feat"];
hideList = ["no_feat"];
} else {
hideList = ["yes_feat"];
showList = ["no_feat"];
deleteCharmancerData(["l1-feat"]);
}
showChoices(showList);
hideChoices(hideList);
});
on("mancerchange:feat", function(eventinfo) {
changeCompendiumPage("sheet-feat-info", eventinfo.newValue);
var reset = {};
if(!(eventinfo.newValue === "" || eventinfo.newValue === undefined)) {
showChoices(["feat_options"]);
}
hideChoices(["feat_possible"]);
if(eventinfo.sourceType == "player") {
reset = {};
for(var x=1; x<=proficiencyNum; x++) {
//reset["custom_race_prof_name_choice" + x] = "";
//reset["custom_race_prof_type_choice" + x] = "";
}
reset["feat_ability_choice"] = "";
setCharmancerText({"feat_text": ""});
}
getCompendiumPage(eventinfo.newValue, getList, function(p) {
setAttrs(reset, function() {
var mancerdata = getCharmancerData();
var data = p["data"];
var showList = [];
var update = {};
if(data["data-Ability Score Increase"]) {
var abilityText = [];
var json = JSON.parse(data["data-Ability Score Increase"]);
_.each(json, function(increase, ability) {
abilityText.push(ability + " +" + increase);
});
update["feat_ability_score"] = abilityText.join(", ");
showList.push("feat_ability");
}
if(data["data-Ability Score Choice"]) {
var json = JSON.parse(data["data-Ability Score Choice"]);
setCharmancerOptions("feat_ability_choice", json);
showList.push("feat_ability", "feat_ability_choice");
}
if(data["Prerequisite"]) {
showList.push("feat_prereq")
update["feat_prerequisite"] = data["Prerequisite"];
}
//feat_ability_choice
setCharmancerText(update);
showChoices(showList);
recalcData();
});
});
});
on(powerListeners, function(eventinfo) {
if(eventinfo.sourceType == "player") {
changeCompendiumPage("sheet-powers-info", eventinfo.newValue, "card_only");
}
var mancerdata = getCharmancerData();
var known = knownPowers().known;
for(var x = 1; x<=9; x++) {
disableCharmancerOptions("race_level0_choice" + x, known, {category: "Powers"});
disableCharmancerOptions("race_level1_choice" + x, known, {category: "Powers"});
disableCharmancerOptions("class_level0_choice" + x, known, {category: "Powers"});
disableCharmancerOptions("class_level1_choice" + x, known, {category: "Powers"});
}
});
on("page:l1-summary", function() {
var recalc = recalcData();
var mancerdata = getCharmancerData();
var set = {};
var racename = getName("race", mancerdata);
var subracename = getName("subrace", mancerdata);
var classname = getName("class", mancerdata);
var subclassname = getName("subclass", mancerdata);
var bgname = getName("background", mancerdata);
var powerdata = knownPowers();
var racePowers = powerdata.race ? powerdata.race.choices.length : 0;
var classPowers = powerdata.class ? powerdata.class.choices.length : 0;
var ready = true;
var handleMissing = function(section, sectionName) {
var page = mancerdata["l1-" + section.replace("sub", "")] || false;
var missing = {};
var warnings = "";
sectionName = sectionName || section;
if(page && page.data && page.data[section]) {
_.each(proficiencyList, function(prof) {
if(page.data[section]["data-" + prof + " Proficiency"]) {
var numChoices = 0;
var totalChoices = 0;
for(var x=0; x<=proficiencyNum; x++) {
if(page.data[section]["data-" + prof + " Proficiency"]["Choice " + x]) {
numChoices++;
totalChoices++;
};
if(page.values[section + "_" + prof.toLowerCase() + "_choice" + x]) {
numChoices--;
var thischoice = _.last(page.values[section + "_" + prof.toLowerCase() + "_choice" + x].split(":"));
_.each(recalc.proficiencies.auto, function(profs, source) {
if(profs.includes(thischoice)) {
warnings += '<p class="sheet-warning">You\'ve chosen the ' + prof.toLowerCase() + ' ' + thischoice;
warnings += ', but you already have that ' + prof.toLowerCase() + ' from your ' + source + '.</p>';
};
});
}
}
if(numChoices > 0) missing[prof] = [totalChoices, numChoices];
}
});
if(page.data[section]["data-Ability Score Choice"]) {
var choices = 1;
if(typeof page.data[section]["data-Ability Score Choice"] == "string") {
choices = parseInt( page.data[section]["data-Ability Score Choice"].split("+")[0] );
}
var total = choices;
if(choices >= 2 && page.values[section + "_ability_choice2"]) choices--;
if(page.values[section + "_ability_choice"]) choices--;
if(page.values[section + "_ability_choice1"]) choices--;
if(choices > 0) missing.ability = [total, choices];
}
if(page.data[section]["data-Expertise Choice 1"] || page.data[section]["data-Expertise Choice 2"]) {
var choices = 0;
if(page.data[section]["data-Expertise Choice 1"]) choices++;
if(page.data[section]["data-Expertise Choice 2"]) choices++;
var total = choices;
if(choices >= 2 && page.values[section + "_expertise_choice_2"]) choices--;
if(page.values[section + "_expertise_choice"]) choices--;
if(page.values[section + "_expertise_choice_1"]) choices--;
if(choices > 0) missing.expertise = [total, choices];
}
}
_.each(missing, function(number, type) {
var singular = type == "ability" ? "an" : "a"
if(type == "ability") {
type = 'ability score increase'
}
warnings += '<p class="sheet-warning">You\'re ' + sectionName;
if(type == "expertise") {
warnings += " gives you expertise in ";
warnings += number[0] > 1 ? 'up to ' + number[0] + ' skills' : " a skill";
} else {
warnings += " allows you to choose ";
warnings += number[0] > 1 ? "up to " + number[0] + ' ' + type.toLowerCase() + 's' : singular + " " + type.toLowerCase();
}
if(number[0] - number[1] > 0) {
warnings += ', but you\'ve only chosen ' + number[1] + '!</p>';
} else {
warnings += number[0] > 1 ? ', and you haven\'t chosen any!</p>' : ', and you haven\'t chosen one!</p>';
}
});
return warnings;
};
if(mancerdata["l1-race"] && racename) {
set["race_info"] = '<p>Your race is ' + racename + '</p>';
if(!mancerdata["l1-race"].values.age) set["race_info"] += '<p class="sheet-warning">You haven\'t entered an age for your character.</p>';
if(!mancerdata["l1-race"].values.alignment) set["race_info"] += '<p class="sheet-warning">You haven\'t chosen your alignment.</p>';
set["race_info"] += handleMissing("race");
if(mancerdata["l1-race"].values["has_subrace"] == "true") {
if(subracename) {
set["race_info"] += '<p>Your subrace is ' + subracename + '</p>';
set["race_info"] += handleMissing("subrace");
} else {
if(mancerdata["l1-race"].values.subrace == "Rules:Races" && !mancerdata["l1-race"].values.subrace_name) {
set["race_info"] = '<p class="sheet-warning sheet-needed">You need to pick a name for your custom subrace!</p>';
} else {
set["race_info"] += '<p class="sheet-warning sheet-needed">You have not selected a subrace!</p>';
}
ready = false;
}
}
_.each(powerdata.errors.race, function(error) {
switch(error) {
case "custom_race_power_list":
set["race_info"] += '<p class="sheet-warning sheet-needed">You have not selected power list for your innate powercasting!</p>';
ready = false;
break;
default:
console.log("Unknown race power error: " + error);
}
});
if(mancerdata["l1-race"].values.race == "Rules:Races") {
if(!mancerdata["l1-race"].values.size) set["race_info"] += '<p class="sheet-warning">You have not selected a size for your custom race!</p>';
if(!mancerdata["l1-race"].values.speed) set["race_info"] += '<p class="sheet-warning">You have not selected a walking speed for your custom race!</p>';
}
} else {
if(mancerdata["l1-race"] && mancerdata["l1-race"].values.race == "Rules:Races" && !mancerdata["l1-race"].values.race_name) {
set["race_info"] = '<p class="sheet-warning sheet-needed">You need to pick a name for your custom race!</p>';
} else {
set["race_info"] = '<p class="sheet-warning sheet-needed">You have not selected a race!</p>';
}
ready = false;
}
if(mancerdata["l1-class"] && classname) {
set["class_info"] = '<p>Your class is ' + classname + '.</p>';
for(var x=1; x<=2; x++) {
var featurename = mancerdata["l1-class"].values["class_feature_choice_" + x + "_name"];
var featurechoice = mancerdata["l1-class"].values["class_feature_choice_" + x];
if(featurename) {
if(featurechoice) {
set["class_info"] += '<p>Your ' + featurename + ' is ' + featurechoice + '.</p>'
} else {
set["class_info"] += '<p class="sheet-warning">Your have not chosen a ' + featurename + '.</p>';
};
};
};
set["class_info"] += handleMissing("class");
if(mancerdata["l1-class"].values.race == "Rules:Classes" && !mancerdata["l1-class"].values.custom_hit_die) {
set["class_info"] = '<p class="sheet-warning">You need to pick a hit die for your custom class!</p>';
}
if(mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["data-Subclass Level"] == 1) {
if(subclassname && mancerdata["l1-class"].data.class && mancerdata["l1-class"].data.class["data-Subclass Level"] == 1) {
set["class_info"] += '<p>Your ' + mancerdata["l1-class"].data.class["Subclass Name"] + ' is ' + subclassname + '.</p>';
for(var x=1; x<=2; x++) {
var featurename = mancerdata["l1-class"].values["subclass_feature_choice_" + x + "_name"];
var featurechoice = mancerdata["l1-class"].values["subclass_feature_choice_" + x];
if(featurename) {
if(featurechoice) {
set["class_info"] += '<p>Your ' + featurename + ' is ' + featurechoice + '.</p>'
} else {
set["class_info"] += '<p class="sheet-warning">Your have not chosen a ' + featurename + '.</p>';
};
};
};
set["class_info"] += handleMissing("subclass", mancerdata["l1-class"].data.class["Subclass Name"]);
} else {
if(mancerdata["l1-class"].values.subclass == "Rules:Classes" && !mancerdata["l1-class"].values.subrace_name) {
set["class_info"] = '<p class="sheet-warning sheet-needed">You need to pick a name for your custom ' + mancerdata["l1-class"].data.class["Subclass Name"] + '!</p>';
} else {
set["class_info"] += '<p class="sheet-warning sheet-needed">You have not selected a ' + mancerdata["l1-class"].data.class["Subclass Name"] + '!</p>';
}
ready = false;
}
}
_.each(powerdata.errors.class, function(error) {
switch(error) {
case "custom_class_power_list":
set["race_info"] += '<p class="sheet-warning sheet-needed">You have selected a powercasting ability for your custom class, but you have not selected a power list.</p>';
ready = false;
break;
case "custom_class_power_number":
set["race_info"] += '<p class="sheet-warning sheet-needed">You have selected a powercasting ability for your custom class, but you have not selected a number of powers.</p>';
ready = false;
break;
default:
console.log("Unknown class power error: " + error);
}
});
} else {
if(mancerdata["l1-class"] && mancerdata["l1-class"].values.race == "Rules:Classes" && !mancerdata["l1-class"].values.race_name) {
set["class_info"] = '<p class="sheet-warning sheet-needed">You need to pick a name for your custom class!</p>';
} else {
set["class_info"] = '<p class="sheet-warning sheet-needed">You have not selected a class!</p>';
}
ready = false;
}
if(mancerdata["l1-abilities"] && mancerdata["l1-abilities"].values.abilities) {
switch(mancerdata["l1-abilities"].values.abilities) {
case "Standard Array":
set["ability_info"] = '<p>You generated your stats from the standard array.</p>';
break;
case "Roll for Stats":
set["ability_info"] = '<p>You generated your stats by rolling.</p>';
break;
case "Point Buy":
set["ability_info"] = '<p>You generated your stats with the point buy method.</p>';
break;
case "custom":
set["ability_info"] = '<p>You entered custom values for your stats.</p>';
break;
}
var x = 0;
_.each(abilityList, function(ability) {
if(!mancerdata["l1-abilities"].values[ability.toLowerCase()]) {
x++;
set["ability_info"] += '<p class="sheet-warning sheet-needed">You have not selected a score for your ' + ability.toLowerCase() + '!</p>';
ready = false;
}
});
if(x == 6) set["ability_info"] = '<p class="sheet-warning">You have not selected your ability scores!</p>';
} else {
set["ability_info"] = '<p class="sheet-warning sheet-needed">You have not generated your ability scores!</p>';
ready = false;
}
if(mancerdata["l1-background"] && bgname) {
set["background_info"] = '<p>You come from a ' + bgname + ' background.</p>';
if(mancerdata["l1-background"].data.background && mancerdata["l1-background"].data.background["data-Background Choice Name"]) {
if(!mancerdata["l1-background"].values["background_detail_choice"]) {
set["background_info"] += '<p class="sheet-warning">You haven\'t chosen your ';
set["background_info"] += mancerdata["l1-background"].data.background["data-Background Choice Name"] +'.</p>';
}
}
if(!mancerdata["l1-background"].values["background_personality_choice1"] && !mancerdata["l1-background"].values["background_personality_choice2"]) {
set["background_info"] += '<p class="sheet-warning">You haven\'t picked your personality traits.</p>';
} else if(!mancerdata["l1-background"].values["background_personality_choice1"] || !mancerdata["l1-background"].values["background_personality_choice2"]) {
set["background_info"] += '<p class="sheet-warning">You haven\'t picked one of your personality traits.</p>';
}
if(!mancerdata["l1-background"].values["background_ideal_choice"]) {
set["background_info"] += '<p class="sheet-warning">You haven\'t chosen your ideal.</p>';
}
if(!mancerdata["l1-background"].values["background_bond_choice"]) {
set["background_info"] += '<p class="sheet-warning">You haven\'t chosen your bond.</p>';
}
if(!mancerdata["l1-background"].values["background_flaw_choice"]) {
set["background_info"] += '<p class="sheet-warning">You haven\'t chosen your flaw.</p>';
}
set["background_info"] += handleMissing("background");
} else {
set["background_info"] = '<p class="sheet-warning sheet-needed">You have not selected a background!</p>';
ready = false;
}
if(mancerdata["l1-equipment"] && mancerdata["l1-equipment"].values["equipment_type"]) {
switch(mancerdata["l1-equipment"].values["equipment_type"]) {
case "class":
set["equipment_info"] = '<p>You got starting equipment based on your class and background.</p>';
break;
case "gold":
set["equipment_info"] = '<p>You opted for gold instead of starting equipment.</p>';
break;
}
if(mancerdata["l1-equipment"].values["equipment_type"] == "class") {
var choices = {"class": [0,0], "background": [0,0]};
_.each(choices, function(numbers, section) {
var equipment = mancerdata["l1-" + section].data[section] && mancerdata["l1-" + section].data[section]["data-Equipment"] ? mancerdata["l1-" + section].data[section]["data-Equipment"] : {};
_.each(equipment, function(choice, choicekey) {
if(choicekey != "default") numbers[0]++;
});
_.each(mancerdata["l1-equipment"].values, function(val, key) {
if(key.includes(section + "_equipment_choice")) numbers[1]++;
});
});
_.each(choices, function(number, type) {
if(number[0] - number[1] > 0) {
set["equipment_info"] += '<p class="sheet-warning">Your ' + type + ' gives you ';
set["equipment_info"] += number[0] > 1 ? number[0] + " equipment choices" : "an equipment choice";
if(number[1] > 0) {
set["equipment_info"] += ', but you\'ve only chosen ' + number[1] + '!</p>';
} else {
set["equipment_info"] += number[0] > 1 ? ', and you haven\'t chosen any!</p>' : ', and you haven\'t chosen it!</p>';
}
}
});
}
if(mancerdata["l1-equipment"].values["equipment_type"] == "gold" && mancerdata["l1-equipment"].values["starting_gold"] == "0") {
set["equipment_info"] = '<p class="sheet-warning">You selected starting wealth for your equipment, but you don\'t have any gold yet!</p>';
}
if(mancerdata["l1-equipment"].values["equipment_class"] != getName("class", mancerdata, true) || (mancerdata["l1-equipment"].values["equipment_background"] != getName("background", mancerdata, true) && mancerdata["l1-equipment"].values["equipment_type"] != "gold")) {
set["equipment_info"] = '<p class="sheet-warning sheet-needed">Your equipment options have changed, you\'ll need to choose again.</p>';
ready = false;
}
} else {
set["equipment_info"] = '<p class="sheet-warning sheet-needed">You have not selected any equipment!</p>';
ready = false;
}
var powersready = true;
var toDelete = [];
if(mancerdata["l1-powers"]) {
prevRace = mancerdata["l1-powers"].values.race_powers || "";
prevClass = mancerdata["l1-powers"].values.class_powers || "";
currentRace = getName("race", mancerdata, true) + getName("subrace", mancerdata, true);
currentClass = getName("class", mancerdata, true) + getName("subclass", mancerdata, true);
set["power_info"] = "";
if((racePowers + classPowers) == 0) {
set["power_info"] += '<p>The tech is a mystery to you.</p>';
deleteCharmancerData(["l1-powers"]);
powersready = false;
} else if(prevRace != currentRace || prevClass != currentClass || mancerdata["l1-powers"].values.race_number != racePowers || mancerdata["l1-powers"].values.class_number != classPowers) {
if(prevRace != currentRace || mancerdata["l1-powers"].values.race_number > racePowers) {
for(var x = 1; x<=9; x++) {
toDelete.push("race_level0_choice" + x);
toDelete.push("race_level1_choice" + x);
}
if(racePowers > 0 && mancerdata["l1-powers"].values.race_number > 0) {
set["power_info"] += '<p class="sheet-warning">Your racial powers were reset because your options have changed.</p>';
}
}
if(prevClass != currentClass || mancerdata["l1-powers"].values.class_number > classPowers) {
for(var x = 1; x<=9; x++) {
toDelete.push("class_level0_choice" + x);
toDelete.push("class_level1_choice" + x);
}
if(classPowers > 0 && mancerdata["l1-powers"].values.class_number > 0) {
set["power_info"] += '<p class="sheet-warning">Your class powers were reset because your options have changed.</p>';
}
}
}
} else if((racePowers + classPowers) > 0) {
set["power_info"] = '<p class="sheet-warning">You haven\'t selected your powers!</p>';
powersready = false
} else {
set["power_info"] = '<p>The tech is a mystery to you.</p>';
powersready = false
}
if(mancerdata["l1-race"] && mancerdata["l1-race"].data.subrace && mancerdata["l1-race"].data.subrace["data-Feats"]) {
if(mancerdata["l1-feat"] && mancerdata["l1-feat"].values.feat) {
set["feat_info"] = '<p>You\'ve selected the ' + mancerdata["l1-feat"].values.feat.split(":")[1] + ' feat.</p>';
set["feat_info"] += handleMissing("feat");
} else {
set["feat_info"] = '<p class="sheet-warning">You have access to a feat, but you have not yet selected one!</p>';
}
} else {
set["feat_info"] = '<p>As you exchange your novice notions of the world for experience, a feat may become within reach. Not today, however.</p>';
deleteCharmancerData(["l1-feat"]);
}
if(ready) {
set.ready_message = "If you're ready to build your " + racename;
set.ready_message += subracename == "" ? " " : " (" + subracename + ") ";
set.ready_message += subclassname == "" ? classname : classname + " (" + subclassname + ")";
set.ready_message += " from a " + bgname + " background, click \"Apply Changes.\"";
showChoices(["apply_changes", "ready_text"]);
} else {
set.ready_message = "Hold on there! You've missed some required fields, which have been marked with a <span class='sheet-needed'></span>.";
}
//If you're ready to build your race class from a background background, click "Apply Changes."
deleteCharmancerData([{"l1-powers":toDelete}], function() {
powerdata = knownPowers();
if(powersready) {
if (powerdata.known && powerdata.known.length) {
set["power_info"] += '<p>You know these powers: ' + powerdata.known.join(", ") + '.</p>';
}
var choices = {"cantrip": [0,0], "power": [0,0]};
_.each(powerdata, function(section) {
_.each(section.choices, function(power) {
if(power.Level == 0) choices.cantrip[0]++;
if(power.Level == 1) choices.power[0]++;
});
});
choices.cantrip[1] = choices.cantrip[0];
choices.power[1] = choices.power[0];
_.each(mancerdata["l1-powers"].values, function(val, name) {
if(name.split("_")[1] == "level0" && _.last(name.split("_")) != "casting") choices.cantrip[1]--;
if(name.split("_")[1] == "level1" && _.last(name.split("_")) != "casting") choices.power[1]--;
});
_.each(choices, function(number, type) {
if(number[1] > 0) {
set["power_info"] += '<p class="sheet-warning">You can choose ';
set["power_info"] += number[0] > 1 ? "up to " + number[0] + ' ' + type + 's' : "a " + type;
if(number[1] < number[0]) {
set["power_info"] += ', but you\'ve only chosen ' + (number[0] - number[1]) + '!</p>';
} else {
set["power_info"] += number[0] > 1 ? ', and you haven\'t chosen any!</p>' : ', and you haven\'t chosen one!</p>';
}
}
});
}
setCharmancerText(set);
});
});
</script>