Files
roll20-character-sheets/Mythcraft/sheet.html
T

1755 lines
206 KiB
HTML

<input name="attr_version" type="hidden" value="1.8"/><!-- This need an even handler as well to update damage roll when effect is added but damage is empty--><!--include charactermancer/charactermancer.pug--><input type="hidden" name="attr_action_points_base" value="3"/><input type="hidden" name="attr_action_points_per_round" value="3"/><input type="hidden" name="attr_hit_points_base" value="10"/><input type="hidden" name="attr_hit_die_formula" value="10+0+0"/><input type="hidden" name="attr_set_hit_points" value="2"/><input type="hidden" name="attr_hit_point_die" value="1d4"/><input type="hidden" name="attr_luck_negative_modifier" value="0"/><input type="hidden" name="attr_luck_critical_modifier" value="0"/><input type="hidden" name="attr_critical_fail_base" value="1"/><input type="hidden" name="attr_critical_fail" value="1"/><input type="hidden" name="attr_critical_fail_modifier" value="0"/><input type="hidden" name="attr_critical_hit_base" value="20"/><input type="hidden" name="attr_critical_hit" value="20"/><input type="hidden" name="attr_critical_hit_modifier" value="0"/><input type="hidden" name="attr_rerolls_max" value="3"/><input type="hidden" name="attr_initiative" value="0"/><input type="hidden" name="attr_initiative_modifier" value="0"/><input type="hidden" name="attr_initiative_base" value="0"/><input type="hidden" name="attr_initiative_bonus" value="0"/><input type="hidden" name="attr_armor_rating_base" value="10"/><input type="hidden" name="attr_armor_rating_modifier" value="0"/><input type="hidden" name="attr_reflexes" value="10"/><input type="hidden" name="attr_reflexes_base" value="10"/><input type="hidden" name="attr_reflexes_modifier" value="0"/><input type="hidden" name="attr_fortitude" value="10"/><input type="hidden" name="attr_fortitude_base" value="10"/><input type="hidden" name="attr_fortitude_modifier" value="0"/><input type="hidden" name="attr_anticipation" value="10"/><input type="hidden" name="attr_anticipation_base" value="10"/><input type="hidden" name="attr_anticipation_modifier" value="0"/><input type="hidden" name="attr_logic" value="10"/><input type="hidden" name="attr_logic_base" value="10"/><input type="hidden" name="attr_logic_modifier" value="0"/><input type="hidden" name="attr_willpower" value="10"/><input type="hidden" name="attr_willpower_base" value="10"/><input type="hidden" name="attr_willpower_modifier" value="0"/><div class="dropzone compendium-drop-target creatures vehicles sheet"><input name="attr_drop_name" type="hidden" value="" accept="Name"/><input name="attr_drop_data" type="hidden" value="" accept="data"/><input name="attr_drop_content" type="hidden" value="" accept="Content"/><input name="attr_drop_category" type="hidden" value="" accept="Category"/><input class="type" name="attr_sheet_type" type="hidden" value="pc"/><input class="display_string" name="attr_character_settings" type="hidden" value=""/><div class="pc grid gap-6 p-2 auto-rows-max"><input type="hidden" name="attr_tab" value="main"/><div class="grid gap-4"><div class="flex flex-wrap flex-row gap-4"><div class="logo grow-0"><img src="https://raw.githubusercontent.com/quasireal-publishing/roll20-mythcraft/refs/heads/main/Mythcraft/src/imgs/Mythcraft-Logo-Badge-Textured-Black.png" alt="Mythcraft Logo" title="Mythcraft Logo"/></div><div class="grid gap-1 grow bio"><div class="grid grid-flow-col gap-2 name-row"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="character name"></h3><label data-i18n-title="enter character name" title="enter character name"><input data-i18n-placeholder="character name" name="attr_character_name" placeholder="character name" title="@{character_name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="lineage"></h3><label data-i18n-title="enter lineage" title="enter lineage"><input data-i18n-placeholder="lineage" name="attr_lineage" placeholder="lineage" title="@{lineage}" type="text" value=""/></label></div></div><div class="grid grid-flow-col gap-2 name-row"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="level"></h3><label data-i18n-title="enter level" title="enter level"><input data-i18n-placeholder="level" name="attr_level" placeholder="level" title="@{level}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="size"></h3><label data-i18n-title="enter size" title="enter size"><input data-i18n-placeholder="size" name="attr_size" placeholder="size" title="@{size}" type="text" value=""/></label></div></div><div class="grid grid-flow-col gap-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="height"></h3><label data-i18n-title="enter height" title="enter height"><input data-i18n-placeholder="height" name="attr_height" placeholder="height" title="@{height}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="weight"></h3><label data-i18n-title="enter weight" title="enter weight"><input data-i18n-placeholder="weight" name="attr_weight" placeholder="weight" title="@{weight}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="age"></h3><label data-i18n-title="enter age" title="enter age"><input data-i18n-placeholder="age" name="attr_age" placeholder="age" title="@{age}" type="text" value=""/></label></div></div><div class="grid grid-flow-col gap-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="appearance"></h3><label data-i18n-title="enter appearance" title="enter appearance"><input data-i18n-placeholder="appearance" name="attr_appearance" placeholder="appearance" title="@{appearance}" type="text" value=""/></label></div></div></div></div><div class="grid gap-2 grid-flow-col auto-cols-min"><div class="grid tab relative"><input type="radio" name="attr_tab" value="main"/><span class="capitalize" data-i18n="main"></span></div><div class="grid tab relative"><input type="radio" name="attr_tab" value="combat"/><span class="capitalize" data-i18n="combat"></span></div><div class="grid tab relative"><input type="radio" name="attr_tab" value="magic"/><span class="capitalize" data-i18n="magic"></span></div><div class="grid tab relative"><input type="radio" name="attr_tab" value="talents"/><span class="capitalize" data-i18n="talents"></span></div><div class="grid tab relative"><input type="radio" name="attr_tab" value="journal"/><span class="capitalize" data-i18n="journal"></span></div><div class="grid tab relative"><input type="radio" name="attr_tab" value="settings"/><span class="pictos lowercase">y</span></div></div></div><div class="grid gap-6 main"><div class="grid gap-2 solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="personality / background"></h2></div><div class="grid grid-flow-col gap-2 personality"><div class="grid col-auto-fr gap-1 grid-flow-col items-center values"><h3 class="ellipse text-center capitalize" data-i18n="values"></h3><label data-i18n-title="enter values" title="enter values"><input data-i18n-placeholder="values" name="attr_values" placeholder="values" title="@{values}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center drive"><h3 class="ellipse text-center capitalize" data-i18n="drive"></h3><label data-i18n-title="enter drive" title="enter drive"><input data-i18n-placeholder="drive" name="attr_drive" placeholder="drive" title="@{drive}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center quirk"><h3 class="ellipse text-center capitalize" data-i18n="quirk"></h3><label data-i18n-title="enter quirk" title="enter quirk"><input data-i18n-placeholder="quirk" name="attr_quirk" placeholder="quirk" title="@{quirk}" type="text" value=""/></label></div></div><div class="grid grid-flow-col gap-2 background"><div class="grid col-auto-fr gap-1 grid-flow-col items-center background"><h3 class="ellipse text-center capitalize" data-i18n="background"></h3><label data-i18n-title="enter background" title="enter background"><input data-i18n-placeholder="background" name="attr_background" placeholder="background" title="@{background}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center profession"><h3 class="ellipse text-center capitalize" data-i18n="profession"></h3><label data-i18n-title="enter profession" title="enter profession"><input data-i18n-placeholder="profession" name="attr_profession" placeholder="profession" title="@{profession}" type="text" value=""/></label></div></div></div><div class="grid gap-2 grid-flow-col items-center content-start attrs relative"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined strength" data-i18n="str" name="roll_strength" type="roll" value="&{template:rolls} {{header=^{strength}}} {{dice=[[1d20+@{strength}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter strength" title="enter strength"><input name="attr_strength" title="@{strength}" type="number" value="0"/></label></div><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined dexterity" data-i18n="dex" name="roll_dexterity" type="roll" value="&{template:rolls} {{header=^{dexterity}}} {{dice=[[1d20+@{dexterity}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter dexterity" title="enter dexterity"><input name="attr_dexterity" title="@{dexterity}" type="number" value="0"/></label></div><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined endurance" data-i18n="end" name="roll_endurance" type="roll" value="&{template:rolls} {{header=^{endurance}}} {{dice=[[1d20+@{endurance}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter endurance" title="enter endurance"><input name="attr_endurance" title="@{endurance}" type="number" value="0"/></label></div><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined awareness" data-i18n="awr" name="roll_awareness" type="roll" value="&{template:rolls} {{header=^{awareness}}} {{dice=[[1d20+@{awareness}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter awareness" title="enter awareness"><input name="attr_awareness" title="@{awareness}" type="number" value="0"/></label></div><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined intellect" data-i18n="int" name="roll_intellect" type="roll" value="&{template:rolls} {{header=^{intellect}}} {{dice=[[1d20+@{intellect}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter intellect" title="enter intellect"><input name="attr_intellect" title="@{intellect}" type="number" value="0"/></label></div><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined charisma" data-i18n="cha" name="roll_charisma" type="roll" value="&{template:rolls} {{header=^{charisma}}} {{dice=[[1d20+@{charisma}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter charisma" title="enter charisma"><input name="attr_charisma" title="@{charisma}" type="number" value="0"/></label></div><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined luck" data-i18n="luck" name="roll_luck" type="roll" value="&{template:rolls} {{header=^{luck}}} {{dice=[[1d20+@{luck}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter luck" title="enter luck"><input name="attr_luck" title="@{luck}" type="number" value="0"/></label></div><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined coordination" data-i18n="cor" name="roll_coordination" type="roll" value="&{template:rolls} {{header=^{coordination}}} {{dice=[[1d20+@{coordination}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter coordination" title="enter coordination"><input name="attr_coordination" title="@{coordination}" type="number" value="0"/></label></div></div><div class="grid grid-flow-cols gap-4 content-start p-2 relative grid-cols-2"><div class="grid gap-6 content-start"><div class="grid solid-border-2 rounded-md p-2 relative inventory content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="inventory"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="qty"></h3></div></div><fieldset class="repeating_inventory"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_inventory" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span class="display ellipse" name="attr_qty" title="@{qty}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="tags"></h4><span class="capitalize" name="attr_tags" title="@{tags}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="cost"></h4><span class="capitalize" name="attr_cost" title="@{cost}"></span></div><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="qty"></h4><label data-i18n-title="enter qty" title="enter qty"><input data-i18n-placeholder="qty" name="attr_qty" placeholder="qty" title="@{qty}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="tags"></h4><label data-i18n-title="enter tags" title="enter tags"><input data-i18n-placeholder="tags" name="attr_tags" placeholder="tags" title="@{tags}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="cost"></h4><label data-i18n-title="enter cost" title="enter cost"><input data-i18n-placeholder="cost" name="attr_cost" placeholder="cost" title="@{cost}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="currency"></h2></div><div class="grid gap-2 items-center grid-flow-col mb-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="a"></h3><label data-i18n-title="enter a" title="enter a"><input class="text-center" name="attr_a" title="@{a}" type="number" value="0"/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="sc"></h3><label data-i18n-title="enter sc" title="enter sc"><input class="text-center" name="attr_sc" title="@{sc}" type="number" value="0"/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="q"></h3><label data-i18n-title="enter q" title="enter q"><input class="text-center" name="attr_q" title="@{q}" type="number" value="0"/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="dc"></h3><label data-i18n-title="enter dc" title="enter dc"><input class="text-center" name="attr_dc" title="@{dc}" type="number" value="0"/></label></div></div><div class="grid mt-1"><textarea name="attr_currency" placeholder="currency"></textarea></div></div></div><div class="grid gap-6 content-start"><div class="grid solid-border-2 rounded-md p-2 relative skills"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="skills"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="attribute"></h3><h3 class="ellipse text-center capitalize" data-i18n="bonus"></h3></div></div><fieldset class="repeating_skills"><input type="hidden" name="attr_attribute_abbreviation" value="STR"/><input type="hidden" name="attr_bonus" value="0"/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis font-weight-bold" name="roll_skill" type="roll" value="&{template:rolls} {{header=@{name}}} {{dice=[[1d20+@{attribute}[attribute]+(@{modifier}[modifier])+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} {}}"><span name="attr_name"></span></button><span class="uppercase" name="attr_attribute_abbreviation"></span><span class="text-center" name="attr_bonus" title="@{bonus}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="category"></h4><span class="capitalize" name="attr_category" title="@{category}"></span></div><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center name"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center category"><h4 class="ellipse capitalize" data-i18n="category"></h4><label data-i18n-title="enter category" title="enter category"><input data-i18n-placeholder="category" name="attr_category" placeholder="category" title="@{category}" type="text" value=""/></label></div><div class="grid gap-2 grid-flow-col items-center attribute"><div class="grid gap-2 col-auto-fr items-center attribute-select"><h4 class="ellipse capitalize" data-i18n="attribute"></h4><select name="attr_attribute"><option value="@{strength}" data-i18n="strength"><val></val></option><option value="@{dexterity}" data-i18n="dexterity"><val></val></option><option value="@{endurance}" data-i18n="endurance"><val></val></option><option value="@{awareness}" data-i18n="awareness"><val></val></option><option value="@{intellect}" data-i18n="intellect"><val></val></option><option value="@{charisma}" data-i18n="charisma"><val></val></option><option value="@{luck}" data-i18n="luck"><val></val></option></select></div><span class="text-center plus">+</span><div class="grid col-auto-fr gap-1 grid-flow-col items-center modifier"><h4 class="ellipse capitalize" data-i18n="modifier"></h4><label data-i18n-title="enter modifier" title="enter modifier"><input data-i18n-placeholder="modifier" name="attr_modifier" placeholder="modifier" title="@{modifier}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div><div class="grid solid-border-2 rounded-md p-2 relative favorites content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="favorites"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="tags"></h3></div></div><fieldset class="repeating_favorites"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_favorites" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span class="display ellipse" name="attr_tags" title="@{tags}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="tags"></h4><label data-i18n-title="enter tags" title="enter tags"><input data-i18n-placeholder="tags" name="attr_tags" placeholder="tags" title="@{tags}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div></div></div><div class="grid gap-6 combat"><div class="grid grid-flow-col gap-2 hp-row"><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="hp &amp; shield"></h2></div><div class="grid grid-flow-col gap-2 hp mt-1"><div class="grid grid-flow-col gap-2"><div class="grid justify-center items-center"><label data-i18n-title="enter hp" title="enter hp"><input class="text-center" name="attr_hp" title="@{hp}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="current"></h3></div><div class="grid justify-center items-center"><label data-i18n-title="enter hp max" title="enter hp max"><input class="text-center" name="attr_hp_max" title="@{hp_max}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="max"></h3></div></div><div class="grid justify-center items-center"><label data-i18n-title="enter shield" title="enter shield"><input class="text-center" name="attr_shield" title="@{shield}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="shield"></h3></div></div></div><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="death points"></h2></div><div class="grid mt-1"><div class="grid grid-flow-col gap-2"><div class="grid justify-center items-center"><label data-i18n-title="enter death points" title="enter death points"><input class="text-center" name="attr_death_points" title="@{death_points}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="current"></h3></div><div class="grid justify-center items-center"><label data-i18n-title="enter death points max" title="enter death points max"><input class="text-center" name="attr_death_points_max" title="@{death_points_max}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="max"></h3></div></div></div></div><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="AR"></h2></div><div class="grid mt-1"><label data-i18n-title="enter armor rating" title="enter armor rating"><input class="text-center" data-i18n-placeholder="armor rating" name="attr_armor_rating" placeholder="armor rating" title="@{armor_rating}" type="text" value="10"/></label><h3 class="ellipse text-center capitalize" data-i18n="armor rating"></h3></div></div><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="speed"></h2></div><div class="grid mt-1"><label data-i18n-title="enter speed" title="enter speed"><input class="text-center" data-i18n-placeholder="speed" name="attr_speed" placeholder="speed" title="@{speed}" type="text" value="20"/></label><h3 class="ellipse text-center capitalize lowercase" data-i18n="ft"></h3></div></div></div><div class="grid grid grid-flow-col gap-2 items-center"><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="action points"></h2></div><div class="grid grid-flow-col gap-2 mt-1"><div class="grid justify-center items-center"><label data-i18n-title="enter action points" title="enter action points"><input name="attr_action_points" title="@{action_points}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="current"></h3></div><div class="grid justify-center items-center"><span class="text-center" name="attr_action_points_per_round" title="@{action_points_per_round}"></span><h3 class="ellipse text-center capitalize" data-i18n="ap/round"></h3></div></div></div><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="special AP"></h2></div><div class="grid mt-1"><div class="grid grid-flow-col gap-2"><div class="grid justify-center items-center"><label data-i18n-title="enter special action points" title="enter special action points"><input class="text-center" name="attr_special_action_points" title="@{special_action_points}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="current"></h3></div><div class="grid justify-center items-center"><label data-i18n-title="enter special action points max" title="enter special action points max"><input class="text-center" name="attr_special_action_points_max" title="@{special_action_points_max}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="max"></h3></div></div></div></div><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="luck points"></h2></div><div class="grid mt-1"><div class="grid grid-flow-col gap-2"><div class="grid justify-center items-center"><label data-i18n-title="enter luck points" title="enter luck points"><input class="text-center" name="attr_luck_points" title="@{luck_points}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="current"></h3></div><div class="grid justify-center items-center"><label data-i18n-title="enter luck points max" title="enter luck points max"><input class="text-center" name="attr_luck_points_max" title="@{luck_points_max}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="max"></h3></div></div></div></div><div class="grid solid-border-2 rounded-md p-2 relative h-full"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="initiative"></h2></div><div class="grid justify-center items-center"><span class="text-center" name="attr_initiative" title="@{initiative}"></span><button class="text-capitalize" data-i18n="initiative" name="roll_initiative" type="roll" value="&{template:rolls} {{header=^{initiative}}} {{dice=[[1d20+@{awareness}[awareness]+@{initiative_bonus}[modifier] &{tracker}]]}}"></button></div></div></div><div class="grid gap-1 justify-between items-center attrs"><div class="grid relative justify-center items-center strength"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined strength" data-i18n="str" name="roll_strength" type="roll" value="&{template:rolls} {{header=^{strength}}} {{dice=[[1d20+@{strength}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter strength" title="enter strength"><input class="text-center" name="attr_strength" title="@{strength}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center dexterity"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined dexterity" data-i18n="dex" name="roll_dexterity" type="roll" value="&{template:rolls} {{header=^{dexterity}}} {{dice=[[1d20+@{dexterity}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter dexterity" title="enter dexterity"><input class="text-center" name="attr_dexterity" title="@{dexterity}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center endurance"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined endurance" data-i18n="end" name="roll_endurance" type="roll" value="&{template:rolls} {{header=^{endurance}}} {{dice=[[1d20+@{endurance}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter endurance" title="enter endurance"><input class="text-center" name="attr_endurance" title="@{endurance}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center awareness"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined awareness" data-i18n="awr" name="roll_awareness" type="roll" value="&{template:rolls} {{header=^{awareness}}} {{dice=[[1d20+@{awareness}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter awareness" title="enter awareness"><input class="text-center" name="attr_awareness" title="@{awareness}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center intellect"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined intellect" data-i18n="int" name="roll_intellect" type="roll" value="&{template:rolls} {{header=^{intellect}}} {{dice=[[1d20+@{intellect}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter intellect" title="enter intellect"><input class="text-center" name="attr_intellect" title="@{intellect}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center charisma"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined charisma" data-i18n="cha" name="roll_charisma" type="roll" value="&{template:rolls} {{header=^{charisma}}} {{dice=[[1d20+@{charisma}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter charisma" title="enter charisma"><input class="text-center" name="attr_charisma" title="@{charisma}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center luck"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined luck" data-i18n="luck" name="roll_luck" type="roll" value="&{template:rolls} {{header=^{luck}}} {{dice=[[1d20+@{luck}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter luck" title="enter luck"><input class="text-center" name="attr_luck" title="@{luck}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center coordination"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined coordination" data-i18n="cor" name="roll_coordination" type="roll" value="&{template:rolls} {{header=^{coordination}}} {{dice=[[1d20+@{coordination}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter coordination" title="enter coordination"><input class="text-center" name="attr_coordination" title="@{coordination}" type="number" value="0"/></label></div></div><div></div><div class="grid relative justify-center items-center reflexes"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="ref"></h3><span class="text-center" name="attr_reflexes" title="@{reflexes}"></span></div></div><div class="grid relative justify-center items-center fortitude"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="fort"></h3><span class="text-center" name="attr_fortitude" title="@{fortitude}"></span></div></div><div class="grid relative justify-center items-center anticipation"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="ant"></h3><span class="text-center" name="attr_anticipation" title="@{anticipation}"></span></div></div><div class="grid relative justify-center items-center logic"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="log"></h3><span class="text-center" name="attr_logic" title="@{logic}"></span></div></div><div class="grid relative justify-center items-center willpower"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="wil"></h3><span class="text-center" name="attr_willpower" title="@{willpower}"></span></div></div></div><div class="grid solid-border-2 rounded-md p-2 relative attacks"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="attacks &amp; spellcasting"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="apc"></h3><h3 class="ellipse text-center capitalize" data-i18n="attribute"></h3><h3 class="ellipse text-center capitalize" data-i18n="bonus"></h3><h3 class="ellipse text-center capitalize" data-i18n="damage"></h3><h3 class="ellipse text-center capitalize" data-i18n="type"></h3><h3 class="ellipse text-center capitalize" data-i18n="range"></h3></div></div><div class="grid gap-4"><fieldset class="repeating_attacks"><input type="hidden" name="attr_link" value=""/><input type="hidden" name="attr_attribute_abbreviation" value="STR"/><input type="hidden" name="attr_attack_critical_hit" value="@{critical_hit}"/><input type="hidden" name="attr_roll_formula" value="{{dice=[[1d20+@{attribute}[attribute]+(@{modifier}[modifier])+(?{TA/TD|0}[tactical bonus])+(@{luck_negative_modifier}[negative luck modifier])cs@{attack_critical_hit}cf@{critical_fail}]]}} {{damage=[Damage](~repeating_attacks-roll_damage)}} {{defense=@{defense}}}"/><div class="grid gap-2 relative repeating-grid"> <div class="grid grid-flow-col gap-2 displayed custom-grid"><div class="grid gap-2 grid-flow-col"><button class="text-left ellipsis font-weight-bold" name="roll_name" type="roll" value="&{template:rolls} {{header=@{name}}} @{roll_formula}"><span name="attr_name"></span></button></div><span class="text-center" name="attr_apc" title="@{apc}"></span><span class="text-center" name="attr_attribute_abbreviation" title="@{attribute_abbreviation}"></span><span class="text-center" name="attr_bonus" title="@{bonus}"></span><button class="ellipsis font-weight-bold text-center" name="roll_damage" type="roll" value="&{template:rolls} {{header=@{name}}} {{dice=[[@{damage}[damage]+(@{damage_attribute}[damage attribute])]]}} {{type=@{damage_type}}}"><span name="attr_damage"></span></button><span class="text-center" name="attr_damage_type" title="@{damage_type}"></span><span class="text-center" name="attr_range" title="@{range}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="tags"></h4><span class="capitalize" name="attr_tags" title="@{tags}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="defense"></h4><span class="capitalize" name="attr_defense" title="@{defense}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="type"></h4><span class="capitalize" name="attr_type" title="@{type}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="size"></h4><span class="capitalize" name="attr_size" title="@{size}"></span></div><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="tags"></h4><label data-i18n-title="enter tags" title="enter tags"><input data-i18n-placeholder="tags" name="attr_tags" placeholder="tags" title="@{tags}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col items-center attack-modifiers"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="apc"></h4><label data-i18n-title="enter apc" title="enter apc"><input data-i18n-placeholder="apc" name="attr_apc" placeholder="apc" title="@{apc}" type="text" value=""/></label></div><div class="grid gap-2 grid-flow-col items-center attack-defense"><div class="grid gap-2 grid-flow-col col-auto-fr items-center"><h4 class="ellipse capitalize" data-i18n="attribute"></h4><select name="attr_attribute"><option value="0" data-i18n="none"></option><option value="@{strength}" data-i18n="strength"><val></val></option><option value="@{dexterity}" data-i18n="dexterity"><val></val></option><option value="@{endurance}" data-i18n="endurance"><val></val></option><option value="@{awareness}" data-i18n="awareness"><val></val></option><option value="@{intellect}" data-i18n="intellect"><val></val></option><option value="@{charisma}" data-i18n="charisma"><val></val></option><option value="@{luck}" data-i18n="luck"><val></val></option><option value="@{coordination}" data-i18n="coordination"><val></val></option></select></div><span class="text-center">+</span><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="modifier"></h4><label data-i18n-title="enter modifier" title="enter modifier"><input name="attr_modifier" title="@{modifier}" type="number" value="0"/></label></div><span class="text-center">vs</span><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="defense"></h4><label data-i18n-title="enter defense" title="enter defense"><input data-i18n-placeholder="defense" name="attr_defense" placeholder="defense" title="@{defense}" type="text" value=""/></label></div></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="crit range"></h4><label data-i18n-title="enter crit range" title="enter crit range"><input name="attr_crit_range" title="@{crit_range}" type="number" value="0"/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="damage"></h4><label data-i18n-title="enter damage" title="enter damage"><input data-i18n-placeholder="damage" name="attr_damage" placeholder="damage" title="@{damage}" type="text" value=""/></label></div><div class="grid gap-2 grid-flow-col col-auto-fr items-center"><h4 class="ellipse capitalize" data-i18n="damage attribute"></h4><select name="attr_damage_attribute"><option value="0" data-i18n="none"></option><option value="@{strength}" data-i18n="strength"><val></val></option><option value="@{dexterity}" data-i18n="dexterity"><val></val></option><option value="@{endurance}" data-i18n="endurance"><val></val></option><option value="@{awareness}" data-i18n="awareness"><val></val></option><option value="@{intellect}" data-i18n="intellect"><val></val></option><option value="@{charisma}" data-i18n="charisma"><val></val></option><option value="@{luck}" data-i18n="luck"><val></val></option><option value="@{coordination}" data-i18n="coordination"><val></val></option></select></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="damage type"></h4><label data-i18n-title="enter damage type" title="enter damage type"><input data-i18n-placeholder="damage type" name="attr_damage_type" placeholder="damage type" title="@{damage_type}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="range"></h4><label data-i18n-title="enter range" title="enter range"><input data-i18n-placeholder="range" name="attr_range" placeholder="range" title="@{range}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="reload"></h4><label data-i18n-title="enter reload" title="enter reload"><input data-i18n-placeholder="reload" name="attr_reload" placeholder="reload" title="@{reload}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="size"></h4><label data-i18n-title="enter size" title="enter size"><input data-i18n-placeholder="size" name="attr_size" placeholder="size" title="@{size}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="category"></h4><label data-i18n-title="enter category" title="enter category"><input data-i18n-placeholder="category" name="attr_category" placeholder="category" title="@{category}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="subcategory"></h4><label data-i18n-title="enter subcategory" title="enter subcategory"><input data-i18n-placeholder="subcategory" name="attr_subcategory" placeholder="subcategory" title="@{subcategory}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="type"></h4><label data-i18n-title="enter type" title="enter type"><input data-i18n-placeholder="type" name="attr_type" placeholder="type" title="@{type}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div><div class="grid gap-4 grid-flow-col auto-cols-fr"><div class="grid gap-6 content-start"><div class="grid solid-border-2 rounded-md p-2 relative reactive-actions content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="reactive actions"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="ap"></h3></div></div><fieldset class="repeating_reactive-actions"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_reactive_actions" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span class="display ellipse" name="attr_ap" title="@{ap}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="ap"></h4><label data-i18n-title="enter ap" title="enter ap"><input data-i18n-placeholder="ap" name="attr_ap" placeholder="ap" title="@{ap}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div><div class="grid solid-border-2 rounded-md p-2 relative conditions content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="conditions"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3></div></div><fieldset class="repeating_conditions"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_conditions" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div><div class="grid gap-6 content-start auto-cols-fr"><div class="grid solid-border-2 rounded-md p-2 relative favorites content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="favorites"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="tags"></h3></div></div><fieldset class="repeating_favorites"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_favorites" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span class="display ellipse" name="attr_tags" title="@{tags}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="tags"></h4><label data-i18n-title="enter tags" title="enter tags"><input data-i18n-placeholder="tags" name="attr_tags" placeholder="tags" title="@{tags}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div><div class="grid solid-border-2 rounded-md p-2 relative content-start w-full"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="trackables"></h2></div><fieldset class="repeating_trackables"><div class="grid gap-2 grid-flow-col"><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label><div class="grid grid-flow-col gap-2"><div class="grid justify-center items-center"><label data-i18n-title="enter value" title="enter value"><input class="text-center" name="attr_value" title="@{value}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="current"></h3></div><div class="grid justify-center items-center"><label data-i18n-title="enter value max" title="enter value max"><input class="text-center" name="attr_value_max" title="@{value_max}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="max"></h3></div></div></div></fieldset></div></div></div></div><div class="grid gap-6 magic"><div class="grid grid-flow-col gap-2 points-source"><div class="grid gap-6 content-start"><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="spell points"></h2></div><div class="grid mt-1"><div class="grid grid-flow-col gap-2"><div class="grid justify-center items-center"><label data-i18n-title="enter spell points" title="enter spell points"><input class="text-center" name="attr_spell_points" title="@{spell_points}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="current"></h3></div><div class="grid justify-center items-center"><label data-i18n-title="enter spell points max" title="enter spell points max"><input class="text-center" name="attr_spell_points_max" title="@{spell_points_max}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="max"></h3></div></div></div></div><div class="grid grid-flow-col gap-4"><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="spellcasting ability"></h2></div><div class="grid justify-center items-center mt-1"><select name="attr_spellcasting_ability"><option value="@{strength}" data-i18n="strength"><val></val></option><option value="@{dexterity}" data-i18n="dexterity"><val></val></option><option value="@{endurance}" data-i18n="endurance"><val></val></option><option value="@{awareness}" data-i18n="awareness"><val></val></option><option value="@{intellect}" data-i18n="intellect"><val></val></option><option value="@{charisma}" data-i18n="charisma"><val></val></option><option value="@{luck}" data-i18n="luck"><val></val></option></select></div></div><input type="hidden" name="attr_primary_source" value="arcane"/><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="primary source"></h2></div><div class="grid justify-center items-center mt-1"><select name="attr_primary_source"><option value="arcane" data-i18n="arcane"></option><val></val><option value="divine" data-i18n="divine"></option><val></val><option value="primal" data-i18n="primal"></option><val></val><option value="psionic" data-i18n="psionic"></option><val></val><option value="occult" data-i18n="occult"></option><val></val></select></div></div></div></div><div class="grid solid-border-2 rounded-md content-start p-2 source-magic relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="source"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="power level"></h3></div></div><fieldset class="repeating_sources"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat capitalize" name="roll_source" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span class="display ellipse text-center" name="attr_power_level" title="@{power_level}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid items-center gap-2 grid-flow-col col-auto-fr"><h4 class="ellipse capitalize" data-i18n="name"></h4><select name="attr_name"><option class="capitalize" value="arcane" data-i18n="arcane"><val></val></option><option class="capitalize" value="divine" data-i18n="divine"><val></val></option><option class="capitalize" value="primal" data-i18n="primal"><val></val></option><option class="capitalize" value="psionic" data-i18n="psionic"><val></val></option><option class="capitalize" value="occult" data-i18n="occult"><val></val></option></select></div><div class="grid justify-center items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="power level"></h4><label data-i18n-title="enter power level" title="enter power level"><input data-i18n-placeholder="power level" name="attr_power_level" placeholder="power level" title="@{power_level}" type="text" value=""/></label></div></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div><div class="grid gap-6 items-center spell-list"><div class="grid solid-border-2 rounded-md p-2 relative content-start spells spell-cards"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="spells"></h2></div><fieldset class="repeating_spells"><input type="hidden" name="attr_link" value=""/><input type="hidden" name="attr_roll_formula" value="{{description=@{description}}}"/><input type="hidden" name="attr_modifier" value="0"/><input type="hidden" name="attr_source" value="arcane"/><div class="grid gap-2 relative repeating-grid h-full content-start card"><div class="grid grid-flow-col gap-2 displayed custom-grid col-span-full"><button class="text-left ellipsis font-weight-bold" name="roll_name" type="roll" value="&{template:rolls} {{header=@{name}}} @{roll_formula}"><span name="attr_name"></span></button></div><div class="grid gap-2 items-center col-span-full"><span class="capitalize" name="attr_tags" title="@{tags}"></span></div><div class="grid gap-2 grid-flow-col col-span-full"><div class="grid gap-2 grid-flow-col display-span col-auto-fr"><h4 class="uppercase" data-i18n="apc"></h4><span class="capitalize" name="attr_apc" title="@{apc}"></span></div><div class="grid gap-2 grid-flow-col display-span col-auto-fr"><h4 class="uppercase" data-i18n="spc"></h4><span class="capitalize" name="attr_spc" title="@{spc}"></span></div></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="range"></h4><span class="capitalize" name="attr_range" title="@{range}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="requires"></h4><span class="capitalize" name="attr_requires" title="@{requires}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="duration"></h4><span class="capitalize" name="attr_duration" title="@{duration}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="ellipse capitalize" data-i18n="damage"></h4><button class="ellipsis font-weight-bold capitalize" name="roll_damage" type="roll" value="&{template:rolls} {{header=@{name}}} {{dice=[[@{damage}[damage]+(@{damage_attribute}[damage attribute])]]}} {{type=@{damage_type}}}"><span name="attr_damage"></span></button></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="ellipse capitalize" data-i18n="damage type"></h4><span class="capitalize" name="attr_damage_type" title="@{damage_type}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="casting time"></h4><span class="capitalize" name="attr_casting_time" title="@{casting_time}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="recharge"></h4><span class="capitalize" name="attr_recharge" title="@{recharge}"></span></div><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col grid-cols-2 items-center"><div class="grid gap-2 grid-flow-col col-auto-fr items-center"><h4 class="ellipse capitalize" data-i18n="source"></h4><select name="attr_source"><option value="arcane" data-i18n="arcane"><val></val></option><option value="divine" data-i18n="divine"><val></val></option><option value="primal" data-i18n="primal"><val></val></option><option value="psionic" data-i18n="psionic"><val></val></option><option value="occult" data-i18n="occult"><val></val></option></select></div><div class="grid gap-2 grid-flow-col items-center attack-toggle col-auto-fr"><h4 class="ellipse capitalize" data-i18n="attack"></h4><label class="switch" data-i18n-title="toggle attack"><input type="checkbox" name="attr_toggle_spell_attack"/><span class="slider"></span></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="tags"></h4><label data-i18n-title="enter tags" title="enter tags"><input data-i18n-placeholder="tags" name="attr_tags" placeholder="tags" title="@{tags}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col pc-grid-cols"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="apc"></h4><label data-i18n-title="enter apc" title="enter apc"><input data-i18n-placeholder="apc" name="attr_apc" placeholder="apc" title="@{apc}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="spc"></h4><label data-i18n-title="enter spc" title="enter spc"><input data-i18n-placeholder="spc" name="attr_spc" placeholder="spc" title="@{spc}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="range"></h4><label data-i18n-title="enter range" title="enter range"><input data-i18n-placeholder="range" name="attr_range" placeholder="range" title="@{range}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="requires"></h4><label data-i18n-title="enter requires" title="enter requires"><input data-i18n-placeholder="requires" name="attr_requires" placeholder="requires" title="@{requires}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="duration"></h4><label data-i18n-title="enter duration" title="enter duration"><input data-i18n-placeholder="duration" name="attr_duration" placeholder="duration" title="@{duration}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col grid-cols-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="damage"></h4><label data-i18n-title="enter damage" title="enter damage"><input data-i18n-placeholder="damage" name="attr_damage" placeholder="damage" title="@{damage}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="damage type"></h4><label data-i18n-title="enter damage type" title="enter damage type"><input data-i18n-placeholder="damage type" name="attr_damage_type" placeholder="damage type" title="@{damage_type}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="casting time"></h4><label data-i18n-title="enter casting time" title="enter casting time"><input data-i18n-placeholder="casting time" name="attr_casting_time" placeholder="casting time" title="@{casting_time}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="recharge"></h4><label data-i18n-title="enter recharge" title="enter recharge"><input data-i18n-placeholder="recharge" name="attr_recharge" placeholder="recharge" title="@{recharge}" type="text" value=""/></label></div></div><div class="grid gap-2 col-auto-fr items-center"><h4 class="ellipse capitalize" data-i18n="prerequisites"></h4><label data-i18n-title="enter prerequisites" title="enter prerequisites"><input data-i18n-placeholder="prerequisites" name="attr_prerequisites" placeholder="prerequisites" title="@{prerequisites}" type="text" value=""/></label></div><div class="grid gap-2 col-auto-fr items-center"><h4 class="ellipse capitalize" data-i18n="upcharge"></h4><label data-i18n-title="enter upcharge" title="enter upcharge"><input data-i18n-placeholder="upcharge" name="attr_upcharge" placeholder="upcharge" title="@{upcharge}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div></div><div class="grid gap-6 journal"><div class="grid rounded-md relative"><div class="grid solid-border-2 rounded-md p-2 relative additional-info content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="additional info"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="category"></h3></div></div><fieldset class="repeating_additional-info"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_additional_info" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span class="display ellipse" name="attr_category" title="@{category}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="category"></h4><label data-i18n-title="enter category" title="enter category"><input data-i18n-placeholder="category" name="attr_category" placeholder="category" title="@{category}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div><div class="grid gap-2 grid-flow-col auto-cols-fr"><div class="grid solid-border-2 rounded-md p-2 relative location-request-contacts content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="location request contacts"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3></div></div><fieldset class="repeating_location-request-contacts"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_location_request_contacts" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div><div class="grid solid-border-2 rounded-md p-2 relative content-start w-full"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="resources"></h2></div><fieldset class="repeating_resources"><div class="grid gap-2 grid-flow-col"><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label><div class="grid grid-flow-col gap-2"><div class="grid justify-center items-center"><label data-i18n-title="enter value" title="enter value"><input class="text-center" name="attr_value" title="@{value}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="current"></h3></div><div class="grid justify-center items-center"><label data-i18n-title="enter value max" title="enter value max"><input class="text-center" name="attr_value_max" title="@{value_max}" type="number" value="0"/></label><h3 class="ellipse text-center capitalize" data-i18n="max"></h3></div></div></div></fieldset></div></div><div class="grid solid-border-2 rounded-md p-2 relative journal content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="journal"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="date"></h3></div></div><fieldset class="repeating_journal"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_journal" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span class="display ellipse" name="attr_date" title="@{date}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="date"></h4><label data-i18n-title="enter date" title="enter date"><input data-i18n-placeholder="date" name="attr_date" placeholder="date" title="@{date}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div><div class="grid gap-4 talents grid-flow-col talent-grid auto-cols-fr"><div class="grid solid-border-2 rounded-md p-2 relative talents content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="talents"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="tags"></h3></div></div><fieldset class="repeating_talents"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_talents" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span class="display ellipse" name="attr_tags" title="@{tags}"></span></div><input class="toggle toggle-favorite" name="attr_toggle_favorite" title="favorite toggle" type="checkbox" value="true"/><span class="pictos uppercase">S</span><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="prerequisites"></h4><span class="capitalize" name="attr_prerequisites" title="@{prerequisites}"></span></div><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="tags"></h4><label data-i18n-title="enter tags" title="enter tags"><input data-i18n-placeholder="tags" name="attr_tags" placeholder="tags" title="@{tags}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="prerequisites"></h4><label data-i18n-title="enter prerequisites" title="enter prerequisites"><input data-i18n-placeholder="prerequisites" name="attr_prerequisites" placeholder="prerequisites" title="@{prerequisites}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div><div class="grid solid-border-2 rounded-md p-2 relative abilities content-start"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="abilities"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><h3 class="ellipse text-center capitalize" data-i18n="tags"></h3></div></div><fieldset class="repeating_abilities"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis chat" name="roll_abilities" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span class="display ellipse" name="attr_tags" title="@{tags}"></span></div><input class="toggle toggle-favorite" name="attr_toggle_favorite" title="favorite toggle" type="checkbox" value="true"/><span class="pictos uppercase">S</span><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="tags"></h4><label data-i18n-title="enter tags" title="enter tags"><input data-i18n-placeholder="tags" name="attr_tags" placeholder="tags" title="@{tags}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div><div class="grid gap-6 settings"><div class="grid gap-4 grid-flow-col grid-cols-2"><div class="grid solid-border-2 rounded-md p-2 relative justify-center h-max"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="character type"></h2></div><div class="mt-2"><div class="grid gap-2 grid-flow-col"><select name="attr_sheet_type"><option value="pc" data-i18n="pc"><val></val></option><option value="creature" data-i18n="creature"><val></val></option><option value="siege" data-i18n="siege"><val></val></option></select></div></div></div><!-- .grid.solid-border-2.rounded-md.p-2.relative.justify-center.h-max--><!-- +title('charactermancer')--><!-- .mt-2--><!-- button(type="action" name="act_launch_charactermancer" data-i18n="charactermancer")--><div class="grid solid-border-2 rounded-md p-2 relative"><div class="grid gap-4 justify-center absolute title"><h2 class="px-2 text-center capitalize" data-i18n="modifiers"></h2></div><div class="grid grid-flow-col gap-2 mb-2 border-bottom subheaders"><div class="grid grid-flow-col gap-2 custom-grid"><h3 class="ellipse text-center capitalize" data-i18n="active"></h3><h3 class="ellipse text-center capitalize" data-i18n="attribute"></h3><h3 class="ellipse text-center capitalize" data-i18n="modifier"></h3><h3 class="ellipse text-center capitalize" data-i18n="source"></h3></div></div><fieldset class="repeating_modifiers"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid custom-grid"><label class="switch" data-i18n-title="toggle active"><input type="checkbox" name="attr_toggle_active"/><span class="slider"></span></label><span class="display ellipse capitalize text-center" name="attr_attribute" title="@{attribute}"></span><span class="display ellipse capitalize text-center" name="attr_modifier" title="@{modifier}"></span><span class="display ellipse capitalize text-center" name="attr_source" title="@{source}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="source"></h4><span class="capitalize" name="attr_source" title="@{source}"></span></div><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><select name="attr_attribute"><option value="anticipation" data-i18n="anticipation"><val></val></option><option value="critical_fail" data-i18n="critical fail"><val></val></option><option value="critical_hit" data-i18n="critical hit"><val></val></option><option value="fortitude" data-i18n="fortitude"><val></val></option><option value="initiative" data-i18n="initiative"><val></val></option><option value="logic" data-i18n="logic"><val></val></option><option value="reflexes" data-i18n="reflexes"><val></val></option><option value="willpower" data-i18n="willpower"><val></val></option></select><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="modifier"></h4><label data-i18n-title="enter modifier" title="enter modifier"><input data-i18n-placeholder="modifier" name="attr_modifier" placeholder="modifier" title="@{modifier}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="source"></h4><label data-i18n-title="enter source" title="enter source"><input data-i18n-placeholder="source" name="attr_source" placeholder="source" title="@{source}" type="text" value=""/></label></div></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div></div></div><div class="creature p-2 relative auto-rows-max"><input class="settings-npc" type="hidden" name="attr_toggle_npc_settings"/><input class="edit-npc" type="hidden" name="attr_toggle_edit_npc_edit" value="true"/><input class="sections" type="hidden" name="attr_npc_sections" value=""/><div class="grid grid-flow-col auto-cols-min gap-2 settings-toggle absolute"><div class="grid relative grid-flow-col auto-cols-min gap-2"><input class="toggle toggle-edit" name="attr_toggle_edit_npc_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span></div><div class="grid relative grid-flow-col auto-cols-min gap-2"><input class="toggle toggle-settings" name="attr_toggle_npc_settings" title="favorite toggle" type="checkbox" value="true"/><span class="pictos lowercase">y</span></div></div><div class="grid gap-4 sheet"><div class="display-mode"><span class="display" name="attr_character_name"></span><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><span class="italic">Monster Level:</span><span class="italic" name="attr_level"></span></div><div class="grid gap-1 grid-flow-col items-center auto-cols-max"><span class="italic capitalize" name="attr_size" title="@{size}"></span><span class="italic capitalize" name="attr_tags" title="@{tags}"></span></div></div><div class="inputs grid gap-2"><div class="grid gap-2 grid-flow-col bio"><div class="grid grid-flow-col gap-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="character name"></h3><label data-i18n-title="enter character name" title="enter character name"><input data-i18n-placeholder="character name" name="attr_character_name" placeholder="character name" title="@{character_name}" type="text" value=""/></label></div></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="level"></h3><label data-i18n-title="enter level" title="enter level"><input class="text-center" name="attr_level" title="@{level}" type="number" value="0"/></label></div></div><div class="grid grid-flow-col gap-2 size-tags"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="size"></h3><label data-i18n-title="enter size" title="enter size"><input data-i18n-placeholder="size" name="attr_size" placeholder="size" title="@{size}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="tags"></h3><label data-i18n-title="enter tags" title="enter tags"><input data-i18n-placeholder="tags" name="attr_tags" placeholder="tags" title="@{tags}" type="text" value=""/></label></div></div></div><div class="grid gap-1 justify-between items-center attrs"><div class="grid relative justify-center items-center strength"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined strength" data-i18n="str" name="roll_strength" type="roll" value="&{template:rolls} {{header=^{strength}}} {{dice=[[1d20+@{strength}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter strength" title="enter strength"><input class="text-center" name="attr_strength" title="@{strength}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center dexterity"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined dexterity" data-i18n="dex" name="roll_dexterity" type="roll" value="&{template:rolls} {{header=^{dexterity}}} {{dice=[[1d20+@{dexterity}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter dexterity" title="enter dexterity"><input class="text-center" name="attr_dexterity" title="@{dexterity}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center endurance"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined endurance" data-i18n="end" name="roll_endurance" type="roll" value="&{template:rolls} {{header=^{endurance}}} {{dice=[[1d20+@{endurance}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter endurance" title="enter endurance"><input class="text-center" name="attr_endurance" title="@{endurance}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center awareness"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined awareness" data-i18n="awr" name="roll_awareness" type="roll" value="&{template:rolls} {{header=^{awareness}}} {{dice=[[1d20+@{awareness}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter awareness" title="enter awareness"><input class="text-center" name="attr_awareness" title="@{awareness}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center intellect"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined intellect" data-i18n="int" name="roll_intellect" type="roll" value="&{template:rolls} {{header=^{intellect}}} {{dice=[[1d20+@{intellect}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter intellect" title="enter intellect"><input class="text-center" name="attr_intellect" title="@{intellect}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center charisma"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined charisma" data-i18n="cha" name="roll_charisma" type="roll" value="&{template:rolls} {{header=^{charisma}}} {{dice=[[1d20+@{charisma}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter charisma" title="enter charisma"><input class="text-center" name="attr_charisma" title="@{charisma}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center luck"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined luck" data-i18n="luck" name="roll_luck" type="roll" value="&{template:rolls} {{header=^{luck}}} {{dice=[[1d20+@{luck}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter luck" title="enter luck"><input class="text-center" name="attr_luck" title="@{luck}" type="number" value="0"/></label></div></div><div class="grid relative justify-center items-center coordination"><div class="circle rounded-full border grid justify-center items-center font-bold"><button class="text-center uppercase undefined coordination" data-i18n="cor" name="roll_coordination" type="roll" value="&{template:rolls} {{header=^{coordination}}} {{dice=[[1d20+@{coordination}[attribute]+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} "></button><label data-i18n-title="enter coordination" title="enter coordination"><input class="text-center" name="attr_coordination" title="@{coordination}" type="number" value="0"/></label></div></div><div></div><div class="grid relative justify-center items-center reflexes"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="ref"></h3><span class="text-center" name="attr_reflexes" title="@{reflexes}"></span></div></div><div class="grid relative justify-center items-center fortitude"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="fort"></h3><span class="text-center" name="attr_fortitude" title="@{fortitude}"></span></div></div><div class="grid relative justify-center items-center anticipation"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="ant"></h3><span class="text-center" name="attr_anticipation" title="@{anticipation}"></span></div></div><div class="grid relative justify-center items-center logic"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="log"></h3><span class="text-center" name="attr_logic" title="@{logic}"></span></div></div><div class="grid relative justify-center items-center willpower"><div class="circle rounded-full border grid justify-center items-center font-bold"><h3 class="ellipse text-center capitalize" data-i18n="wil"></h3><span class="text-center" name="attr_willpower" title="@{willpower}"></span></div></div></div><div class="display-mode grid gap-4"><div class="grid gap-2 grid-flow-col auto-rows-min"><div class="grid"><div class="grid gap-2 grid-flow-col auto-cols-max items-center"><h3 class="ellipse text-center capitalize" data-i18n="hp"></h3><span class="font-base" name="attr_hp" title="@{hp}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-max items-center"><h3 class="ellipse text-center capitalize" data-i18n="speed"></h3><span class="font-base" name="attr_speed" title="@{speed}"></span></div></div><div class="grid gap-1 grid-flow-col col-auto-fr display-span"><h3 class="ellipse text-center capitalize" data-i18n="armor rating"></h3><span class="font-base" name="attr_armor_rating" title="@{armor_rating}"></span></div></div><div class="grid auto-rows-min"><div class="grid gap-2 items-center auto-cols-max grid-flow-col"><div class="grid gap-2 grid-flow-col items-center auto-cols-max display-span display-span"><h3 class="ellipse text-center capitalize" data-i18n="resist"></h3><span class="font-base" name="attr_resist" title="@{resist}"></span></div><div class="grid gap-2 grid-flow-col items-center auto-cols-max display-span display-span"><h3 class="ellipse text-center capitalize" data-i18n="immune"></h3><span class="font-base" name="attr_immune" title="@{immune}"></span></div></div><div class="grid gap-2 items-center auto-cols-max grid-flow-col"><div class="grid gap-2 grid-flow-col items-center auto-cols-max display-span"><h3 class="ellipse text-center capitalize" data-i18n="vulnerable"></h3><span class="font-base" name="attr_vulnerable" title="@{vulnerable}"></span></div></div><div class="grid gap-2 items-center auto-cols-max grid-flow-col"><div class="grid gap-2 grid-flow-col items-center auto-cols-max display-span"><h3 class="ellipse text-center capitalize" data-i18n="damage reduction"></h3><span class="font-base" name="attr_damage_reduction" title="@{damage_reduction}"></span></div><div class="grid gap-2 grid-flow-col items-center auto-cols-max display-span"><h3 class="ellipse text-center capitalize" data-i18n="damage threshold"></h3><span class="font-base" name="attr_damage_threshold" title="@{damage_threshold}"></span></div></div><div class="grid gap-2 grid-flow-col items-center items-center auto-cols-max display-span"><h3 class="ellipse text-center capitalize" data-i18n="senses"></h3><span class="font-base" name="attr_senses" title="@{senses}"></span></div><div class="grid gap-2 grid-flow-col items-center items-center auto-cols-max display-span"><h3 class="ellipse text-center capitalize" data-i18n="traits"></h3><span class="font-base" name="attr_traits" title="@{traits}"></span></div></div></div><div class="inputs grid gap-4"><div class="grid gap-2 grid-flow-col items-center hp-armor-speed"><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="hp"></h3><label data-i18n-title="enter hp" title="enter hp"><input data-i18n-placeholder="hp" name="attr_hp" placeholder="hp" title="@{hp}" type="text" value=""/></label></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="armor rating"></h3><label data-i18n-title="enter armor rating" title="enter armor rating"><input data-i18n-placeholder="armor rating" name="attr_armor_rating" placeholder="armor rating" title="@{armor_rating}" type="text" value=""/></label></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="speed"></h3><label data-i18n-title="enter speed" title="enter speed"><input data-i18n-placeholder="speed" name="attr_speed" placeholder="speed" title="@{speed}" type="text" value=""/></label></div></div></div><div class="grid gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="resist"></h3><label data-i18n-title="enter resist" title="enter resist"><input data-i18n-placeholder="resist" name="attr_resist" placeholder="resist" title="@{resist}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="immune"></h3><label data-i18n-title="enter immune" title="enter immune"><input data-i18n-placeholder="immune" name="attr_immune" placeholder="immune" title="@{immune}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="vulnerable"></h3><label data-i18n-title="enter vulnerable" title="enter vulnerable"><input data-i18n-placeholder="vulnerable" name="attr_vulnerable" placeholder="vulnerable" title="@{vulnerable}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="damage reduction"></h3><label data-i18n-title="enter damage reduction" title="enter damage reduction"><input data-i18n-placeholder="damage reduction" name="attr_damage_reduction" placeholder="damage reduction" title="@{damage_reduction}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="damage threshold"></h3><label data-i18n-title="enter damage threshold" title="enter damage threshold"><input data-i18n-placeholder="damage threshold" name="attr_damage_threshold" placeholder="damage threshold" title="@{damage_threshold}" type="text" value=""/></label></div></div><div class="grid gap-2 items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="senses"></h3><label data-i18n-title="enter senses" title="enter senses"><input data-i18n-placeholder="senses" name="attr_senses" placeholder="senses" title="@{senses}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="traits"></h3><label data-i18n-title="enter traits" title="enter traits"><input data-i18n-placeholder="traits" name="attr_traits" placeholder="traits" title="@{traits}" type="text" value=""/></label></div></div></div><div class="grid gap-2 items-center section-skills"><div class="grid gap-2 header-toggle"><h2 class="ellipse uppercase text-primary" data-i18n="skills"></h2><label class="switch" data-i18n-title="toggle skills"><input type="checkbox" name="attr_section_skills" value="on"/><span class="slider"></span></label></div><div class="display-mode mb-2"><i><span name="attr_skill_description"></span></i></div><div class="inputs"><textarea name="attr_skill_description" title="@{skill_description}"></textarea></div><fieldset class="repeating_skills"><input type="hidden" name="attr_attribute_abbreviation" value="STR"/><input type="hidden" name="attr_bonus" value="0"/><div class="grid gap-2 relative repeating-grid repeating_skills"><div class="grid grid-flow-col gap-2 displayed custom-grid"><button class="text-left ellipsis font-weight-bold" name="roll_skill" type="roll" value="&{template:rolls} {{header=@{name}}} {{dice=[[1d20+@{attribute}[attribute]+(@{modifier}[modifier])+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} {}}"><span name="attr_name"></span></button><span class="uppercase" name="attr_attribute_abbreviation"></span><span class="text-center" name="attr_modifier" title="@{modifier}"></span></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="category"></h4><span class="capitalize" name="attr_category" title="@{category}"></span></div><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center name"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center category"><h4 class="ellipse capitalize" data-i18n="category"></h4><label data-i18n-title="enter category" title="enter category"><input data-i18n-placeholder="category" name="attr_category" placeholder="category" title="@{category}" type="text" value=""/></label></div><div class="grid gap-2 grid-flow-col items-center attribute"><div class="grid gap-2 col-auto-fr items-center attribute-select"><h4 class="ellipse capitalize" data-i18n="attribute"></h4><select name="attr_attribute"><option value="@{strength}" data-i18n="strength"><val></val></option><option value="@{dexterity}" data-i18n="dexterity"><val></val></option><option value="@{endurance}" data-i18n="endurance"><val></val></option><option value="@{awareness}" data-i18n="awareness"><val></val></option><option value="@{intellect}" data-i18n="intellect"><val></val></option><option value="@{charisma}" data-i18n="charisma"><val></val></option><option value="@{luck}" data-i18n="luck"><val></val></option></select></div><span class="text-center plus">+</span><div class="grid col-auto-fr gap-1 grid-flow-col items-center modifier"><h4 class="ellipse capitalize" data-i18n="modifier"></h4><label data-i18n-title="enter modifier" title="enter modifier"><input data-i18n-placeholder="modifier" name="attr_modifier" placeholder="modifier" title="@{modifier}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div><div class="grid items-center section-features"><div class="grid gap-2 header-toggle"><h2 class="ellipse uppercase text-primary" data-i18n="features"></h2><label class="switch" data-i18n-title="toggle features"><input type="checkbox" name="attr_section_features" value="on"/><span class="slider"></span></label></div><fieldset class="repeating_features"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid features"><div class="grid grid-flow-col gap-2 displayed custom-grid"><p><button class="text-left ellipsis chat" name="roll_features" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><input type="hidden" name="attr_damage" value=""/><span class="hit font-bold capitalize" data-i18n="Hit:"></span><button class="ellipsis font-weight-bold text-center" name="roll_damage" type="roll" value="&{template:rolls} {{header=@{name}}} {{dice=[[@{damage}[damage]+(@{damage_attribute}[damage attribute])]]}} {{type=@{damage_type}}}"><span name="attr_damage"></span></button><span name="attr_damage_type" title="@{damage_type}"></span><span name="attr_description"></span></p></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><div class="edit grid gap-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid gap-2 grid-flow-col damage"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="damage"></h3><label data-i18n-title="enter damage" title="enter damage"><input data-i18n-placeholder="damage" name="attr_damage" placeholder="damage" title="@{damage}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="damage type"></h3><label data-i18n-title="enter damage type" title="enter damage type"><input data-i18n-placeholder="damage type" name="attr_damage_type" placeholder="damage type" title="@{damage_type}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div><div class="grid gap-2 items-center actions section-actions"><div class="grid gap-2 header-toggle"><h2 class="ellipse uppercase text-primary" data-i18n="actions"></h2><label class="switch" data-i18n-title="toggle actions"><input type="checkbox" name="attr_section_actions" value="on"/><span class="slider"></span></label></div><div class="display-mode mb-2"><i><span name="attr_action_description"></span></i></div><div class="inputs"><textarea name="attr_action_description" title="@{action_description}"></textarea></div><fieldset class="repeating_actions"><input type="hidden" name="attr_roll_formula" value="{{description=@{effect} @{description}}}"/><button class="ellipsis font-weight-bold hidden" name="roll_effect" type="roll" value="&{template:rolls} {{header=@{name}}} {{type=@{damage_type}}} {{effect=@{effect}}} {{description=@{description}}}"><span data-i18n="effect"></span></button><div class="grid gap-2 relative repeating-grid"><input type="hidden" name="attr_name"/><div class="grid grid-flow-col gap-2 displayed custom-grid"><span class="or font-bold" name="attr_name"></span><span class="or" name="attr_description"></span><input type="hidden" name="attr_toggle_action_attack"/><p><button class="text-left ellipsis font-weight-bold" name="roll_name" type="roll" value="&{template:rolls} {{header=@{name}}} @{roll_formula}"><span name="attr_name"></span></button><span name="attr_description"> </span><span class="italic" name="attr_range" title="@{range}"></span><span class="italic" name="attr_type" title="@{type}"></span><span name="attr_modifier" title="@{modifier}"></span><span class="vs">vs</span><span name="attr_defense" title="@{defense}"></span><span class="hit font-bold capitalize" data-i18n="Hit:"></span><span class="text-center mr-1" name="attr_damage_average" title="@{damage_average}"></span><button class="ellipsis font-weight-bold" name="roll_damage" type="roll" value="&{template:rolls} {{header=@{name}}} {{type=@{damage_type}}} {{dice=[[@{damage}[damage]+0]]}} {{effect=@{effect}}} {{description=@{description}}}"><span name="attr_damage"></span></button><span class="ml-1" name="attr_damage_type" title="@{damage_type}"></span><span name="attr_effect" title="@{effect}"></span></p></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><div class="edit grid gap-2"><div class="grid gap-2 grid-flow-col col-fr-auto"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid gap-2 grid-flow-col items-center attack-toggle auto-cols-min"><h3 class="ellipse text-center capitalize" data-i18n="attack"></h3><label class="switch" data-i18n-title="toggle attack"><input type="checkbox" name="attr_toggle_action_attack"/><span class="slider"></span></label></div></div><div class="grid gap-2 grid-flow-col range"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="range"></h3><label data-i18n-title="enter range" title="enter range"><input data-i18n-placeholder="range" name="attr_range" placeholder="range" title="@{range}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="type"></h3><label data-i18n-title="enter type" title="enter type"><input data-i18n-placeholder="type" name="attr_type" placeholder="type" title="@{type}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col items-center modifier"><div class="grid col-auto-fr gap-1 grid-flow-col items-center text-center"><h3 class="ellipse text-center capitalize" data-i18n="modifier"></h3><label data-i18n-title="enter modifier" title="enter modifier"><input data-i18n-placeholder="modifier" name="attr_modifier" placeholder="modifier" title="@{modifier}" type="text" value=""/></label></div><span>vs</span><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="defense"></h3><label data-i18n-title="enter defense" title="enter defense"><input data-i18n-placeholder="defense" name="attr_defense" placeholder="defense" title="@{defense}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col damage"><h3 class="ellipse text-center capitalize" data-i18n="Hit"></h3><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="damage"></h3><div class="grid grid-flow-col items-center dmg"><label data-i18n-title="enter damage average" title="enter damage average"><input class="text-center" data-i18n-placeholder="damage average" name="attr_damage_average" placeholder="damage average" title="@{damage_average}" type="text" value=""/></label><div class="grid grid-flow-col items-center"><span>(</span><label data-i18n-title="enter damage" title="enter damage"><input data-i18n-placeholder="damage" name="attr_damage" placeholder="damage" title="@{damage}" type="text" value=""/></label><span>)</span></div></div></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="type"></h3><label data-i18n-title="enter damage type" title="enter damage type"><input data-i18n-placeholder="damage type" name="attr_damage_type" placeholder="damage type" title="@{damage_type}" type="text" value=""/></label></div></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="effect"></h3><label data-i18n-title="enter effect" title="enter effect"><input data-i18n-placeholder="effect" name="attr_effect" placeholder="effect" title="@{effect}" type="text" value=""/></label></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div><div class="grid items-center section-reactions"><div class="grid gap-2 header-toggle"><h2 class="ellipse capitalize text-primary" data-i18n="reactions"></h2><label class="switch" data-i18n-title="toggle reactions"><input type="checkbox" name="attr_section_reactions" value="on"/><span class="slider"></span></label></div><fieldset class="repeating_reactions"><input type="hidden" name="attr_link" value=""/><div class="grid gap-2 relative repeating-grid"><div class="grid grid-flow-col gap-2 displayed custom-grid"><p><button class="text-left ellipsis chat" name="roll_reactions" type="roll" value="&{template:rolls} {{header=@{name}}} {{description=@{description}}}"><span name="attr_name"></span></button><span name="attr_description"></span></p></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><div class="edit grid gap-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="description"></div><textarea name="attr_description" placeholder="description"></textarea></div></div></fieldset></div><div class="grid items-center section-spells"><div class="grid gap-2 header-toggle"><h2 class="ellipse capitalize text-primary" data-i18n="spells"></h2><label class="switch" data-i18n-title="toggle spells"><input type="checkbox" name="attr_section_spells" value="on"/><span class="slider"></span></label></div><fieldset class="repeating_spells"><input type="hidden" name="attr_link" value=""/><input type="hidden" name="attr_roll_formula" value="{{description=@{description}}}"/><input type="hidden" name="attr_modifier" value="0"/><input type="hidden" name="attr_source" value="arcane"/><div class="grid gap-2 relative repeating-grid h-full content-start card"><div class="grid grid-flow-col gap-2 displayed custom-grid col-span-full"><button class="text-left ellipsis font-weight-bold" name="roll_name" type="roll" value="&{template:rolls} {{header=@{name}}} @{roll_formula}"><span name="attr_name"></span></button></div><div class="grid gap-2 items-center col-span-full"><span class="capitalize" name="attr_tags" title="@{tags}"></span></div><div class="grid gap-2 grid-flow-col col-span-full"><div class="grid gap-2 grid-flow-col display-span col-auto-fr"><h4 class="uppercase" data-i18n="apc"></h4><span class="capitalize" name="attr_apc" title="@{apc}"></span></div><div class="grid gap-2 grid-flow-col display-span col-auto-fr"><h4 class="uppercase" data-i18n="spc"></h4><span class="capitalize" name="attr_spc" title="@{spc}"></span></div></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><input class="toggle toggle-collapse" name="attr_toggle_collapse" title="collapse toggle" type="checkbox" value="true"/><span class="pictos lowercase">i</span><div class="collapsible grid gap-2"><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="range"></h4><span class="capitalize" name="attr_range" title="@{range}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="requires"></h4><span class="capitalize" name="attr_requires" title="@{requires}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="duration"></h4><span class="capitalize" name="attr_duration" title="@{duration}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="ellipse capitalize" data-i18n="damage"></h4><button class="ellipsis font-weight-bold capitalize" name="roll_damage" type="roll" value="&{template:rolls} {{header=@{name}}} {{dice=[[@{damage}[damage]+(@{damage_attribute}[damage attribute])]]}} {{type=@{damage_type}}}"><span name="attr_damage"></span></button></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="ellipse capitalize" data-i18n="damage type"></h4><span class="capitalize" name="attr_damage_type" title="@{damage_type}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="casting time"></h4><span class="capitalize" name="attr_casting_time" title="@{casting_time}"></span></div><div class="grid gap-2 col-auto-fr items-center display-span"><h4 class="capitalize" data-i18n="recharge"></h4><span class="capitalize" name="attr_recharge" title="@{recharge}"></span></div><div class="description"><span class="display" name="attr_description"></span></div></div><div class="edit grid gap-2"><div class="grid gap-2 edit-grid"><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="name"></h4><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col grid-cols-2 items-center"><div class="grid gap-2 grid-flow-col col-auto-fr items-center"><h4 class="ellipse capitalize" data-i18n="source"></h4><select name="attr_source"><option value="arcane" data-i18n="arcane"><val></val></option><option value="divine" data-i18n="divine"><val></val></option><option value="primal" data-i18n="primal"><val></val></option><option value="psionic" data-i18n="psionic"><val></val></option><option value="occult" data-i18n="occult"><val></val></option></select></div><div class="grid gap-2 grid-flow-col items-center attack-toggle col-auto-fr"><h4 class="ellipse capitalize" data-i18n="attack"></h4><label class="switch" data-i18n-title="toggle attack"><input type="checkbox" name="attr_toggle_spell_attack"/><span class="slider"></span></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="tags"></h4><label data-i18n-title="enter tags" title="enter tags"><input data-i18n-placeholder="tags" name="attr_tags" placeholder="tags" title="@{tags}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col pc-grid-cols"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="apc"></h4><label data-i18n-title="enter apc" title="enter apc"><input data-i18n-placeholder="apc" name="attr_apc" placeholder="apc" title="@{apc}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="spc"></h4><label data-i18n-title="enter spc" title="enter spc"><input data-i18n-placeholder="spc" name="attr_spc" placeholder="spc" title="@{spc}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="range"></h4><label data-i18n-title="enter range" title="enter range"><input data-i18n-placeholder="range" name="attr_range" placeholder="range" title="@{range}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="requires"></h4><label data-i18n-title="enter requires" title="enter requires"><input data-i18n-placeholder="requires" name="attr_requires" placeholder="requires" title="@{requires}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="duration"></h4><label data-i18n-title="enter duration" title="enter duration"><input data-i18n-placeholder="duration" name="attr_duration" placeholder="duration" title="@{duration}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col grid-cols-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="damage"></h4><label data-i18n-title="enter damage" title="enter damage"><input data-i18n-placeholder="damage" name="attr_damage" placeholder="damage" title="@{damage}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="damage type"></h4><label data-i18n-title="enter damage type" title="enter damage type"><input data-i18n-placeholder="damage type" name="attr_damage_type" placeholder="damage type" title="@{damage_type}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="casting time"></h4><label data-i18n-title="enter casting time" title="enter casting time"><input data-i18n-placeholder="casting time" name="attr_casting_time" placeholder="casting time" title="@{casting_time}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h4 class="ellipse capitalize" data-i18n="recharge"></h4><label data-i18n-title="enter recharge" title="enter recharge"><input data-i18n-placeholder="recharge" name="attr_recharge" placeholder="recharge" title="@{recharge}" type="text" value=""/></label></div></div><div class="grid gap-2 col-auto-fr items-center"><h4 class="ellipse capitalize" data-i18n="prerequisites"></h4><label data-i18n-title="enter prerequisites" title="enter prerequisites"><input data-i18n-placeholder="prerequisites" name="attr_prerequisites" placeholder="prerequisites" title="@{prerequisites}" type="text" value=""/></label></div><div class="grid gap-2 col-auto-fr items-center"><h4 class="ellipse capitalize" data-i18n="upcharge"></h4><label data-i18n-title="enter upcharge" title="enter upcharge"><input data-i18n-placeholder="upcharge" name="attr_upcharge" placeholder="upcharge" title="@{upcharge}" type="text" value=""/></label></div></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div><div class="grid gap-4 settings"> <div class="grid gap-2"><h2 class="ellipse capitalize" data-i18n="character type"></h2><div class="grid gap-2 grid-flow-col"><select name="attr_sheet_type"><option value="pc" data-i18n="pc"><val></val></option><option value="creature" data-i18n="creature"><val></val></option><option value="siege" data-i18n="siege"><val></val></option></select></div></div></div></div><div class="siege p-2 relative auto-rows-max"><input class="settings-npc" type="hidden" name="attr_toggle_npc_settings"/><input class="edit-npc" type="hidden" name="attr_toggle_edit_npc_edit" value="true"/><input class="sections" type="hidden" name="attr_npc_sections" value=""/><div class="grid grid-flow-col auto-cols-min gap-2 settings-toggle absolute"><div class="grid relative grid-flow-col auto-cols-min gap-2"><input class="toggle toggle-edit" name="attr_toggle_edit_npc_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span></div><div class="grid relative grid-flow-col auto-cols-min gap-2"><input class="toggle toggle-settings" name="attr_toggle_npc_settings" title="favorite toggle" type="checkbox" value="true"/><span class="pictos lowercase">y</span></div></div><div class="grid gap-4 sheet"><div class="display-mode"><span class="display" name="attr_character_name"></span><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><span name="attr_description" title="@{description}"></span></div></div><div class="inputs grid gap-2"><div class="grid gap-2 grid-flow-col bio"><div class="grid grid-flow-col gap-2"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="character name"></h3><label data-i18n-title="enter character name" title="enter character name"><input data-i18n-placeholder="character name" name="attr_character_name" placeholder="character name" title="@{character_name}" type="text" value=""/></label></div></div></div><div class="grid gap-2"><h3 class="ellipse text-center capitalize" data-i18n="description"></h3><textarea name="attr_description" placeholder="description"></textarea></div></div><div class="display-mode grid gap-4"><div class="grid auto-rows-min"><div class="grid gap-2 grid-flow-col auto-cols-max items-center"><h3 class="ellipse text-center capitalize" data-i18n="range"></h3><span name="attr_range" title="@{range}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-max items-center"><h3 class="ellipse text-center capitalize" data-i18n="ammunition"></h3><span name="attr_ammunition" title="@{ammunition}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-max items-center"><h3 class="ellipse text-center capitalize" data-i18n="reload"></h3><span name="attr_reload" title="@{reload}"></span></div><div class="grid gap-1 grid-flow-col col-auto-fr display-span"><h3 class="ellipse text-center capitalize" data-i18n="AOE"></h3><span name="attr_area_of_effect" title="@{area_of_effect}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-max items-center display-span"><h3 class="ellipse text-center capitalize" data-i18n="helf"></h3><span name="attr_helf" title="@{helf}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-max items-center display-span"><h3 class="ellipse text-center capitalize" data-i18n="speed"></h3><span name="attr_speed" title="@{speed}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-max items-center display-span"><h3 class="ellipse text-center capitalize" data-i18n="hp"></h3><span name="attr_hp" title="@{hp}"></span></div><div class="grid gap-4 grid-flow-col items-center auto-cols-max"><div class="grid gap-2 grid-flow-col auto-cols-min"><h3 class="ellipse text-center capitalize text-left" data-i18n="AR"></h3><span name="attr_armor_rating" title="@{armor_rating}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-min"><h3 class="ellipse text-center capitalize text-left" data-i18n="REF"></h3><span name="attr_reflexes" title="@{reflexes}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-min"><h3 class="ellipse text-center capitalize text-left" data-i18n="FORT"></h3><span name="attr_fortitude" title="@{fortitude}"></span></div></div><div class="resist grid gap-2 grid-flow-col items-center"><div class="grid gap-2 grid-flow-col auto-cols-max display-span"><h3 class="ellipse text-center capitalize text-left" data-i18n="resist"></h3><span name="attr_resist" title="@{resist}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-max display-span"><h3 class="ellipse text-center capitalize text-left" data-i18n="immune"></h3><span name="attr_immune" title="@{immune}"></span></div></div><div class="grid gap-2 grid-flow-col items-center auto-cols-max display-span"><h3 class="ellipse text-center capitalize text-left" data-i18n="vulnerable"></h3><span name="attr_vulnerable" title="@{vulnerable}"></span></div><div class="grid gap-2 grid-flow-col items-center"><div class="grid gap-2 grid-flow-col auto-cols-max display-span"><h3 class="ellipse text-center capitalize" data-i18n="DR"></h3><span name="attr_damage_reduction" title="@{damage_reduction}"></span></div><div class="grid gap-2 grid-flow-col auto-cols-max display-span"><h3 class="ellipse text-center capitalize" data-i18n="DT"></h3><span name="attr_damage_threshold" title="@{damage_threshold}"></span></div></div></div></div><div class="inputs grid gap-4"><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="range"></h3><label data-i18n-title="enter range" title="enter range"><input data-i18n-placeholder="range" name="attr_range" placeholder="range" title="@{range}" type="text" value=""/></label></div></div><div class="grid gap-2 items-center grid-flow-col"><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="ammunition"></h3><label data-i18n-title="enter ammunition" title="enter ammunition"><input data-i18n-placeholder="ammunition" name="attr_ammunition" placeholder="ammunition" title="@{ammunition}" type="text" value=""/></label></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="reload"></h3><label data-i18n-title="enter reload" title="enter reload"><input data-i18n-placeholder="reload" name="attr_reload" placeholder="reload" title="@{reload}" type="text" value=""/></label></div></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="area of effect"></h3><label data-i18n-title="enter area of effect" title="enter area of effect"><input data-i18n-placeholder="area of effect" name="attr_area_of_effect" placeholder="area of effect" title="@{area_of_effect}" type="text" value=""/></label></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="helf"></h3><label data-i18n-title="enter helf" title="enter helf"><input data-i18n-placeholder="helf" name="attr_helf" placeholder="helf" title="@{helf}" type="text" value=""/></label></div></div><div class="grid gap-2 items-center grid-flow-col"><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="speed"></h3><label data-i18n-title="enter speed" title="enter speed"><input data-i18n-placeholder="speed" name="attr_speed" placeholder="speed" title="@{speed}" type="text" value=""/></label></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="hp"></h3><label data-i18n-title="enter hp" title="enter hp"><input data-i18n-placeholder="hp" name="attr_hp" placeholder="hp" title="@{hp}" type="text" value=""/></label></div></div></div><div class="grid gap-2 items-center grid-flow-col"><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="armor rating"></h3><label data-i18n-title="enter armor rating" title="enter armor rating"><input data-i18n-placeholder="armor rating" name="attr_armor_rating" placeholder="armor rating" title="@{armor_rating}" type="text" value=""/></label></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="reflexes"></h3><label data-i18n-title="enter reflexes" title="enter reflexes"><input data-i18n-placeholder="reflexes" name="attr_reflexes" placeholder="reflexes" title="@{reflexes}" type="text" value=""/></label></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="fortitude"></h3><label data-i18n-title="enter fortitude" title="enter fortitude"><input data-i18n-placeholder="fortitude" name="attr_fortitude" placeholder="fortitude" title="@{fortitude}" type="text" value=""/></label></div></div></div><div class="grid gap-2 items-center grid-flow-col"><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="resist"></h3><label data-i18n-title="enter resist" title="enter resist"><input data-i18n-placeholder="resist" name="attr_resist" placeholder="resist" title="@{resist}" type="text" value=""/></label></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="immune"></h3><label data-i18n-title="enter immune" title="enter immune"><input data-i18n-placeholder="immune" name="attr_immune" placeholder="immune" title="@{immune}" type="text" value=""/></label></div></div></div><div class="grid gap-2 items-center grid-flow-col"><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="vulnerable"></h3><label data-i18n-title="enter vulnerable" title="enter vulnerable"><input data-i18n-placeholder="vulnerable" name="attr_vulnerable" placeholder="vulnerable" title="@{vulnerable}" type="text" value=""/></label></div></div></div><div class="grid gap-2 items-center grid-flow-col"><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="damage reduction"></h3><label data-i18n-title="enter damage reduction" title="enter damage reduction"><input data-i18n-placeholder="damage reduction" name="attr_damage_reduction" placeholder="damage reduction" title="@{damage_reduction}" type="text" value=""/></label></div></div><div class="grid grid-gap-2 grid-flow-col items-center"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="damage threshold"></h3><label data-i18n-title="enter damage threshold" title="enter damage threshold"><input data-i18n-placeholder="damage threshold" name="attr_damage_threshold" placeholder="damage threshold" title="@{damage_threshold}" type="text" value=""/></label></div></div></div></div><div class="grid gap-2 items-center actions section-actions"><div class="grid gap-2 header-toggle"><h2 class="ellipse uppercase text-primary" data-i18n="actions"></h2><label class="switch" data-i18n-title="toggle actions"><input type="checkbox" name="attr_section_actions" value="on"/><span class="slider"></span></label></div><div class="display-mode mb-2"><i><span name="attr_action_description"></span></i></div><div class="inputs"><textarea name="attr_action_description" title="@{action_description}"></textarea></div><fieldset class="repeating_actions"><input type="hidden" name="attr_roll_formula" value="{{description=@{effect} @{description}}}"/><button class="ellipsis font-weight-bold hidden" name="roll_effect" type="roll" value="&{template:rolls} {{header=@{name}}} {{type=@{damage_type}}} {{effect=@{effect}}} {{description=@{description}}}"><span data-i18n="effect"></span></button><div class="grid gap-2 relative repeating-grid"><input type="hidden" name="attr_name"/><div class="grid grid-flow-col gap-2 displayed custom-grid"><span class="or font-bold" name="attr_name"></span><span class="or" name="attr_description"></span><input type="hidden" name="attr_toggle_action_attack"/><p class="font-base"><button class="text-left ellipsis font-weight-bold" name="roll_name" type="roll" value="&{template:rolls} {{header=@{name}}} @{roll_formula}"><span name="attr_name"></span></button><span name="attr_description"> </span><span class="italic" name="attr_range" title="@{range}"></span><span class="italic" name="attr_type" title="@{type}"></span><span name="attr_modifier" title="@{modifier}"></span><span class="vs">vs</span><span name="attr_defense" title="@{defense}"></span><span class="hit font-bold capitalize" data-i18n="Hit:"></span><span class="text-center mr-1" name="attr_damage_average" title="@{damage_average}"></span><button class="ellipsis font-weight-bold" name="roll_damage" type="roll" value="&{template:rolls} {{header=@{name}}} {{type=@{damage_type}}} {{dice=[[@{damage}[damage]+0]]}} {{effect=@{effect}}} {{description=@{description}}}"><span name="attr_damage"></span></button><span class="ml-1" name="attr_damage_type" title="@{damage_type}"></span><span name="attr_effect" title="@{effect}"></span></p></div><input class="toggle toggle-edit" name="attr_toggle_edit" title="edit toggle" type="checkbox" value="true" checked="checked"/><span class="pictos lowercase">p</span><div class="edit grid gap-2"><div class="grid gap-2 grid-flow-col col-fr-auto"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="name"></h3><label data-i18n-title="enter name" title="enter name"><input data-i18n-placeholder="name" name="attr_name" placeholder="name" title="@{name}" type="text" value=""/></label></div><div class="grid gap-2 grid-flow-col items-center attack-toggle auto-cols-min"><h3 class="ellipse text-center capitalize" data-i18n="attack"></h3><label class="switch" data-i18n-title="toggle attack"><input type="checkbox" name="attr_toggle_action_attack"/><span class="slider"></span></label></div></div><div class="grid gap-2 grid-flow-col range"><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="range"></h3><label data-i18n-title="enter range" title="enter range"><input data-i18n-placeholder="range" name="attr_range" placeholder="range" title="@{range}" type="text" value=""/></label></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="type"></h3><label data-i18n-title="enter type" title="enter type"><input data-i18n-placeholder="type" name="attr_type" placeholder="type" title="@{type}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col items-center modifier"><div class="grid col-auto-fr gap-1 grid-flow-col items-center text-center"><h3 class="ellipse text-center capitalize" data-i18n="modifier"></h3><label data-i18n-title="enter modifier" title="enter modifier"><input data-i18n-placeholder="modifier" name="attr_modifier" placeholder="modifier" title="@{modifier}" type="text" value=""/></label></div><span>vs</span><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="defense"></h3><label data-i18n-title="enter defense" title="enter defense"><input data-i18n-placeholder="defense" name="attr_defense" placeholder="defense" title="@{defense}" type="text" value=""/></label></div></div><div class="grid gap-2 grid-flow-col damage"><h3 class="ellipse text-center capitalize" data-i18n="Hit"></h3><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="damage"></h3><div class="grid grid-flow-col items-center dmg"><label data-i18n-title="enter damage average" title="enter damage average"><input class="text-center" data-i18n-placeholder="damage average" name="attr_damage_average" placeholder="damage average" title="@{damage_average}" type="text" value=""/></label><div class="grid grid-flow-col items-center"><span>(</span><label data-i18n-title="enter damage" title="enter damage"><input data-i18n-placeholder="damage" name="attr_damage" placeholder="damage" title="@{damage}" type="text" value=""/></label><span>)</span></div></div></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="type"></h3><label data-i18n-title="enter damage type" title="enter damage type"><input data-i18n-placeholder="damage type" name="attr_damage_type" placeholder="damage type" title="@{damage_type}" type="text" value=""/></label></div></div><div class="grid col-auto-fr gap-1 grid-flow-col items-center"><h3 class="ellipse text-center capitalize" data-i18n="effect"></h3><label data-i18n-title="enter effect" title="enter effect"><input data-i18n-placeholder="effect" name="attr_effect" placeholder="effect" title="@{effect}" type="text" value=""/></label></div><div class="description"><textarea name="attr_description" placeholder="description"></textarea></div></div></div></fieldset></div></div><div class="grid gap-4 settings"> <div class="grid gap-2"><h2 class="ellipse capitalize" data-i18n="character type"></h2><div class="grid gap-2 grid-flow-col"><select name="attr_sheet_type"><option value="pc" data-i18n="pc"><val></val></option><option value="creature" data-i18n="creature"><val></val></option><option value="siege" data-i18n="siege"><val></val></option></select></div></div></div></div></div><div class="compendium_warning"><span class="uppercase" data-i18n="accepting drop">ACCEPTING DROP FROM COMPENDIUM</span></div><div class="footer mt-5 grid gap-2"><span class="mr-1">Version</span><span name="attr_version"></span><br/><span>This work is based on The MythCraft System by QuasiReal Publishing LLC and published using the Creative Commons Attribution 3.0 <a href="http://creativecommons.org/licenses/by/3.0/">Unported license (http://creativecommons.org/licenses/by/3.0/).</a></span><br/><span> Original template created by <a href="https://emeraldproductions.vercel.app/">Emerald Productions, LLC</a></span><img src="https://raw.githubusercontent.com/clevett/roll20-SheetTemplate/master/src/imgs/EProd_Emerald_Gloss.png" alt="Emerald Productions logo of an E"/></div><rolltemplate class="sheet-rolltemplate-rolls"><div class="sheet-template-container"><!-- - Display a header on the template ---><div class="sheet-template-header"> <h1>{{#header}}{{header}}{{/header}}</h1></div><!-- - Display the dice roll in the template ---><div class="sheet-template-body">{{#dice}}<div class="sheet-template-roll"><span>{{dice}}</span></div>{{/dice}}
{{#tags}}<div class="sheet-template-tags"><span>{{tags}}</span></div>{{/tags}}
{{#action}}<div class="sheet-template-action"><span>{{action}}</span></div>{{/action}}
{{#type}}<div class="sheet-template-type"><span>{{type}}</span></div>{{/type}}
{{#damage}}<div class="sheet-template-damage">{{damage}}</div>{{/damage}}
{{#defense}}<div class="sheet-template-defense"><span>vs </span><span class="sheet-capitalize">{{defense}}</span></div>{{/defense}}
{{#effect}}<div class="sheet-template-damage">{{effect}}</div>{{/effect}}
{{#description}}<div class="sheet-template-desc"><span>{{description}}</span></div>{{/description}}</div></div></rolltemplate><script type="text/worker">var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var attackFieldsetAttributes = [
"name",
"damage",
"damage_type",
"range",
"tags",
"apc",
"description",
];
var addSpellAttack = function (row, page) {
var attackRow = getRow("attacks");
var update = getUpdate(attackFieldsetAttributes, page, attackRow);
update["".concat(attackRow, "_link")] = row;
getAttrs(["spellcasting_ability", "primary_source"], function (_a) {
var spellcasting_ability = _a.spellcasting_ability, primary_source = _a.primary_source;
update["".concat(attackRow, "_attribute")] = spellcasting_ability;
update["".concat(attackRow, "_attribute_abbreviation")] =
getAttributeAbbreviation(spellcasting_ability);
var isPrimarySource = primary_source === page.data.source.toString().toLowerCase();
var rollFormula = getRollFormula(isPrimarySource);
update["".concat(attackRow, "_roll_formula")] = rollFormula;
update["".concat(row, "_roll_formula")] = rollFormula;
update["".concat(row, "_link")] = attackRow;
var attribute = spellcasting_ability.slice(2, -1);
getAttrs([attribute], function (attrs) {
var int = parseInteger(attrs[attribute]);
var bonus = isPrimarySource ? int : Math.ceil(int / 2);
update["".concat(attackRow, "_bonus")] = bonus > 0 ? "+".concat(bonus) : "".concat(bonus);
setDropAttrs(update);
});
});
return attackRow;
};
var mentalAttributes = ["awareness", "intellect", "charisma"];
var metaphysicAttributes = ["luck", "coordination"];
var physicalAttributes = [
"strength",
"dexterity",
"endurance",
];
var attributes = __spreadArray(__spreadArray(__spreadArray([], mentalAttributes, true), metaphysicAttributes, true), physicalAttributes, true);
var action_points = [
"coordination",
"action_points_base",
"action_points_modifier",
];
var hit_points = ["endurance", "hit_points_base", "level"];
var critical_attributes = [
"critical_hit",
"luck",
"critical_hit_base",
"critical_hit_modifier",
];
var critical_fail_attributes = [
"critical_fail",
"critical_fail_base",
"critical_fail_modifier",
];
var armor_rating = ["armor_rating_base", "armor_rating_modifier"];
var anticipation = [
"anticipation_base",
"anticipation_modifier",
"awareness",
];
var fortitude = ["fortitude_base", "fortitude_modifier", "endurance"];
var logic = ["logic_base", "logic_modifier", "intellect"];
var reflexes = ["reflexes_base", "reflexes_modifier", "dexterity"];
var willpower = ["willpower_base", "willpower_modifier", "charisma"];
var defenses = [
"anticipation",
"fortitude",
"logic",
"reflexes",
"willpower",
];
var initiative = ["initiative_base", "initiative_bonus", "awareness"];
var modifiers = __spreadArray(__spreadArray([], defenses, true), ["action_points", "initiative", "armor_rating"], false);
[anticipation, fortitude, logic, reflexes, willpower].forEach(function (attrs) {
attrs.forEach(function (attr) {
on("change:".concat(attr), function () {
updateDerivedAttribute(attrs);
});
});
});
initiative.forEach(function (attr) {
on("change:".concat(attr), function () {
updateModifiedAttribute(initiative);
});
});
["modifier", "toggle_active", "attribute"].forEach(function (attribute) {
on("change:repeating_modifiers:".concat(attribute), function (event) {
updateAttributeModifier(event);
});
});
on("remove:repeating_modifiers", function (event) {
var sourceAttribute = event.sourceAttribute, removedInfo = event.removedInfo;
if (removedInfo["".concat(sourceAttribute, "_modifier")] !== "" &&
removedInfo["".concat(sourceAttribute, "_modifier")] !== "0" &&
removedInfo["".concat(sourceAttribute, "_modifier")] !== undefined &&
removedInfo["".concat(sourceAttribute, "_toggle_active")] === "on") {
updateAttributeModifier(event);
}
});
["attacks", "spells", "reactive-actions"].forEach(function (fieldset) {
on("change:repeating_".concat(fieldset), function (event) {
updateLinkedAttribute(event);
});
});
["attacks", "skills"].forEach(function (fieldset) {
on("change:repeating_".concat(fieldset, ":attribute"), function (event) {
var _a;
var sourceAttribute = event.sourceAttribute, newValue = event.newValue;
if (!newValue)
return;
var repeatingRow = getFieldsetRow(sourceAttribute);
var abbreviation = getAttributeAbbreviation(newValue);
setAttrs((_a = {}, _a["".concat(repeatingRow, "_attribute_abbreviation")] = abbreviation, _a));
});
["attribute", "modifier"].forEach(function (attr) {
on("change:repeating_".concat(fieldset, ":").concat(attr), function (event) {
var sourceAttribute = event.sourceAttribute;
var repeatingRow = getFieldsetRow(sourceAttribute);
getAttrs(["".concat(repeatingRow, "_attribute"), "".concat(repeatingRow, "_modifier")], function (values) {
var attribute = sliceAttribute(values["".concat(repeatingRow, "_attribute")]);
getAttrs([attribute], function (v) {
var _a;
var attrs = {
attribute: v[attribute],
modifier: values["".concat(repeatingRow, "_modifier")],
};
var integers = parseIntegers(attrs);
var sum = sumIntegers(Object.values(integers));
setAttrs((_a = {},
_a["".concat(repeatingRow, "_bonus")] = sum > 0 ? "+".concat(sum) : "".concat(sum),
_a));
});
});
});
});
});
["attacks", "inventory"].forEach(function (fieldset) {
on("change:repeating_".concat(fieldset, ":name"), function (event) {
updateLinkedAttribute(event);
});
});
["abilities", "favorites", "talents"].forEach(function (fieldset) {
["name", "tags", "description", "ap"].forEach(function (attr) {
on("change:repeating_".concat(fieldset, ":").concat(attr), function (event) {
updateLinkedAttribute(event);
});
});
on("change:repeating_".concat(fieldset, ":toggle_favorite"), function (event) {
var sourceAttribute = event.sourceAttribute, newValue = event.newValue;
var abilitiesRow = getFieldsetRow(sourceAttribute);
var isFavorite = newValue === "true";
if (isFavorite) {
getAttrs([
"".concat(abilitiesRow, "_description"),
"".concat(abilitiesRow, "_link"),
"".concat(abilitiesRow, "_name"),
"".concat(abilitiesRow, "_tags"),
], function (values) {
var _a;
var favoriteRow = getRow("favorites");
var update = (_a = {},
_a["".concat(favoriteRow, "_description")] = values["".concat(abilitiesRow, "_description")],
_a["".concat(favoriteRow, "_link")] = abilitiesRow,
_a["".concat(favoriteRow, "_name")] = values["".concat(abilitiesRow, "_name")],
_a["".concat(favoriteRow, "_tags")] = values["".concat(abilitiesRow, "_tags")],
_a["".concat(favoriteRow, "_toggle_edit")] = false,
_a["".concat(abilitiesRow, "_link")] = favoriteRow,
_a);
setAttrs(update, { silent: true });
});
}
else {
getAttrs(["".concat(abilitiesRow, "_link")], function (values) {
var favoriteRow = values["".concat(abilitiesRow, "_link")];
removeRepeatingRow(favoriteRow);
});
}
});
});
action_points.forEach(function (attr) {
on("change:".concat(attr), function () {
updateActionPointsPerRound(action_points);
});
});
critical_attributes.forEach(function (attr) {
on("change:".concat(attr), function () {
updateCriticalRange(critical_attributes);
});
});
critical_fail_attributes.forEach(function (attr) {
on("change:".concat(attr), function () {
updateCriticalFailRange(critical_fail_attributes);
});
});
on("change:luck", function () {
updateLuck(["luck"]);
});
hit_points.forEach(function (attr) {
on("change:".concat(attr), function () {
updateHitPoints(hit_points);
});
});
on("change:primary_source", function (event) {
var newValue = event.newValue, previousValue = event.previousValue;
var section = "repeating_spells";
getSectionIDs(section, function (ids) {
var sourceMap = ids.map(function (id) { return "".concat(section, "_").concat(id, "_source"); });
var linksMap = ids.map(function (id) { return "".concat(section, "_").concat(id, "_link"); });
var formulasMap = ids.map(function (id) { return "".concat(section, "_").concat(id, "_roll_formula"); });
getAttrs(__spreadArray(__spreadArray(__spreadArray([], sourceMap, true), linksMap, true), formulasMap, true), function (v) {
var update = {};
formulasMap.forEach(function (e) {
if (v[e] === "{{description=@{description}}}") {
return;
}
var rowId = getFieldsetRow(e);
var link = v["".concat(rowId, "_link")];
var source = v["".concat(rowId, "_source")];
var isPrimarySource = source === newValue;
var wasPrimarySource = source === previousValue;
if (wasPrimarySource || isPrimarySource) {
var formula = getRollFormula(isPrimarySource);
update["".concat(rowId, "_roll_formula")] = formula;
if (link) {
update["".concat(link, "_roll_formula")] = formula;
}
setAttrs(update, { silent: true });
}
});
});
});
});
on("change:repeating_spells:source", function (event) {
var sourceAttribute = event.sourceAttribute, newValue = event.newValue;
var repeatingRow = getFieldsetRow(sourceAttribute);
getAttrs(["primary_source"], function (values) {
var _a;
var isPrimarySource = values.primary_source === newValue;
setAttrs((_a = {},
_a["".concat(repeatingRow, "_roll_formula")] = getRollFormula(isPrimarySource),
_a));
});
});
on("change:repeating_spells:toggle_attack", function (event) {
updateSpellRollFormula(event);
});
[
"attacks",
"spells",
"abilities",
"favorites",
"talents",
"reactive-actions",
].forEach(function (fieldset) {
on("remove:repeating_".concat(fieldset), function (event) {
updateLinks(event);
});
});
on("change:repeating_actions:toggle_action_attack", function (event) {
updateCreatureAttackRollFormula(event);
});
["damage", "effect", "toggle_action_attack"].forEach(function (attr) {
on("change:repeating_actions:".concat(attr), function (event) {
var sourceAttribute = event.sourceAttribute;
var row = getFieldsetRow(sourceAttribute);
getAttrs(["".concat(row, "_damage"), "".concat(row, "_effect"), "".concat(row, "_toggle_action_attack")], function (values) {
var _a;
var isAttack = values["".concat(row, "_toggle_action_attack")] === "on";
setAttrs((_a = {},
_a["".concat(row, "_roll_formula")] = getCreatureAttackRollFormula(isAttack, {
includeDice: true,
includeDefense: !!values["".concat(row, "_defense")],
includeDamage: !!values["".concat(row, "_damage")],
includeEffect: !!values["".concat(row, "_effect")],
}),
_a));
});
});
});
["skills", "features", "actions", "reactions", "spells"].forEach(function (section) {
on("change:section_".concat(section), function (event) {
var newValue = event.newValue;
getAttrs(["npc_sections"], function (values) {
var sections = values.npc_sections
? values.npc_sections.split(",")
: [];
if (newValue === "on" && !sections.includes(section)) {
sections.push(section);
}
else if (newValue !== "on" && sections.includes(section)) {
var index = sections.indexOf(section);
if (index > -1) {
sections.splice(index, 1);
}
}
setAttrs({ npc_sections: sections.join(",") });
});
});
});
["crit_range"].forEach(function (attr) {
on("change:repeating_attacks:".concat(attr), function (event) {
updateAttacksCriticalHit(event);
});
});
on("change:critical_hit", function (event) {
updateAllAttacksCriticalHits(event);
});
var getAttacksCriticalHit = function (critical_hit, crit_range) {
var globalCriticalHit = critical_hit.includes(">")
? parseInt(critical_hit.split(">")[1])
: parseInt(critical_hit);
var attackCriticalHit = parseInt(crit_range);
if (globalCriticalHit === 0 || globalCriticalHit === 16) {
return "@{critical_hit}";
}
var sum = Math.max(16, globalCriticalHit - attackCriticalHit);
return ">".concat(sum);
};
var getCreatureAttackRollFormula = function (isAttack, options) {
if (isAttack === void 0) { isAttack = false; }
if (options === void 0) { options = {
includeDamage: true,
includeDefense: true,
includeDice: true,
includeEffect: true,
}; }
var dice = "{{dice=[[1d20+(@{modifier})+(?{TA/TD|0}[tactical bonus])]]}}";
var defense = "{{action=@{range} @{type}. @{modifier} vs @{defense} }}";
var damage = "{{damage=[Damage](~repeating_actions-roll_damage)}}";
var effect = "{{effect=[Effect](~repeating_actions-roll_effect)}}";
var description = "{{description=@{description}}}";
if (isAttack) {
var formula = "";
if (options.includeDice) {
formula += "".concat(dice);
}
if (options.includeDefense) {
formula += " ".concat(defense);
}
if (options.includeDamage) {
formula += " ".concat(damage);
}
if (options.includeEffect) {
formula += " ".concat(effect);
}
return formula.trim();
}
return description;
};
var getRollFormula = function (isPrimarySource, isSpellCard) {
if (isSpellCard) {
return "{{description=@{description}}}";
}
var abilityModifier = "@{spellcasting_ability}";
if (!isPrimarySource) {
abilityModifier = "ceil(".concat(abilityModifier, "/2)");
}
return "{{dice=[[1d20+".concat(abilityModifier, "[ability]+(@{modifier}[modifier])+(?{TA/TD|0})[tactical bonus]+(@{luck_negative_modifier}[negative luck modifier])cs>@{attack_critical_hit}cf@{critical_fail}]]}} {{damage=[Damage](~repeating_spells-roll_damage)}} {{defense=@{defense}}} {{description=@{description}}}");
};
var updateActionPointsPerRound = function (attributes) {
getAttrs(attributes, function (values) {
var _a = parseIntegers(values), coordination = _a.coordination, action_points_base = _a.action_points_base, action_points_modifier = _a.action_points_modifier;
var action_points_per_round = action_points_base;
switch (coordination) {
case -1:
case -2:
action_points_per_round = action_points_base - 1 || 0;
break;
case -3:
action_points_per_round = action_points_base - 2 || 0;
break;
default:
action_points_per_round =
Math.floor(coordination / 2) + action_points_base;
break;
}
action_points_per_round += action_points_modifier || 0;
setAttrs({ action_points_per_round: action_points_per_round });
});
};
var updateAllAttacksCriticalHits = function (event) {
var newValue = event.newValue;
getSectionIDs("repeating_attacks", function (ids) {
var attrs = [];
ids.forEach(function (id) {
attrs.push("repeating_attacks_".concat(id, "_attack_critical_hit"));
attrs.push("repeating_attacks_".concat(id, "_crit_range"));
});
getAttrs(attrs, function (values) {
var update = {};
ids.forEach(function (id) {
var attackCriticalHit = values["repeating_attacks_".concat(id, "_attack_critical_hit")];
var critRange = values["repeating_attacks_".concat(id, "_crit_range")];
if (critRange === "0" && attackCriticalHit === "@{critical_hit}") {
return;
}
var ch = getAttacksCriticalHit(newValue, critRange);
if (ch !== attackCriticalHit) {
update["repeating_attacks_".concat(id, "_attack_critical_hit")] = ch;
}
});
if (Object.keys(update).length > 0) {
setAttrs(update, { silent: true });
}
});
});
};
var updateAttacksCriticalHit = function (event) {
getAttrs(["critical_hit"], function (values) {
var _a;
var sourceAttribute = event.sourceAttribute, newValue = event.newValue;
var row = getFieldsetRow(sourceAttribute);
var critical_hit = values.critical_hit;
var ch = getAttacksCriticalHit(critical_hit, newValue);
setAttrs((_a = {},
_a["".concat(row, "_attack_critical_hit")] = ch,
_a));
});
};
var updateAttributeModifier = function (_a) {
var sourceAttribute = _a.sourceAttribute, previousValue = _a.previousValue, removedInfo = _a.removedInfo;
var rowId = getFieldsetRow(sourceAttribute);
getSectionIDs("repeating_modifiers", function (ids) {
var attrs = [];
ids.forEach(function (id) {
attrs.push("repeating_modifiers_".concat(id, "_attribute"));
attrs.push("repeating_modifiers_".concat(id, "_modifier"));
attrs.push("repeating_modifiers_".concat(id, "_toggle_active"));
});
getAttrs(attrs, function (v) {
var update = {};
var activeIds = ids.filter(function (id) {
return (v["repeating_modifiers_".concat(id, "_toggle_active")] === "on" &&
v["repeating_modifiers_".concat(id, "_modifier")] !== "0" &&
v["repeating_modifiers_".concat(id, "_modifier")] !== "" &&
v["repeating_modifiers_".concat(id, "_modifier")] !== undefined);
});
var getAttributeSum = function (attribute) {
var attributeModifiers = activeIds.filter(function (id) {
return v["repeating_modifiers_".concat(id, "_attribute")] === attribute;
});
var integers = attributeModifiers.map(function (id) {
return parseInt(v["repeating_modifiers_".concat(id, "_modifier")] || "0", 10);
});
return sumIntegers(integers);
};
var attribute = removedInfo && removedInfo["".concat(sourceAttribute, "_attribute")]
? removedInfo["".concat(sourceAttribute, "_attribute")]
: v["".concat(rowId, "_attribute")];
if (attribute === "initiative") {
update["initiative_bonus"] = getAttributeSum("initiative");
}
else {
update["".concat(attribute, "_modifier")] = getAttributeSum(attribute.toString());
}
if (previousValue && modifiers.includes(previousValue)) {
update["".concat(previousValue, "_modifier")] = getAttributeSum(previousValue);
}
setAttrs(update);
});
});
};
var updateCreatureAttackRollFormula = function (event) {
var _a;
var sourceAttribute = event.sourceAttribute, newValue = event.newValue, sourceType = event.sourceType;
if (sourceType !== "player") {
return;
}
var row = getFieldsetRow(sourceAttribute);
var isAttack = newValue === "on";
if (!isAttack) {
setAttrs((_a = {},
_a["".concat(row, "_roll_formula")] = getCreatureAttackRollFormula(false),
_a));
return;
}
getAttrs(["".concat(row, "_damage")], function (values) {
var _a;
var hasDamage = values["".concat(row, "_damage")];
var attackRollFormula = getCreatureAttackRollFormula(true, {
includeDice: true,
includeDefense: true,
includeDamage: !!hasDamage,
});
setAttrs((_a = {},
_a["".concat(row, "_roll_formula")] = attackRollFormula,
_a));
});
};
var updateCriticalFailRange = function (attributes) {
getAttrs(attributes, function (values) {
var _a = parseIntegers(values), critical_fail_base = _a.critical_fail_base, critical_fail = _a.critical_fail, critical_fail_modifier = _a.critical_fail_modifier;
var range = critical_fail_base + critical_fail_modifier;
var cr = range < 1 ? 1 : range;
if (cr !== critical_fail) {
setAttrs({
critical_fail: "<".concat(cr),
});
}
});
};
var updateCriticalRange = function (attributes) {
getAttrs(attributes, function (values) {
var _a = parseIntegers(values), luck = _a.luck, critical_hit_base = _a.critical_hit_base, critical_hit = _a.critical_hit, critical_hit_modifier = _a.critical_hit_modifier;
if (luck < 0) {
setAttrs({
critical_hit: "0",
});
return;
}
var hit = critical_hit_base;
if (luck >= 12) {
hit = critical_hit_base - 2;
}
else if (luck >= 6 && luck <= 11) {
hit = critical_hit_base - 1;
}
hit = hit + critical_hit_modifier;
var cr = Math.max(16, Math.min(20, hit));
if (cr !== critical_hit) {
setAttrs({
critical_hit: ">".concat(cr),
});
}
});
};
var updateDerivedAttribute = function (attributes) {
getAttrs(attributes, function (values) {
var _a;
var sum = sumIntegers(Object.values(parseIntegers(values)));
var name = attributes
.find(function (e) { return e.includes("base"); })
.replace("_base", "");
setAttrs((_a = {}, _a[name] = sum, _a));
});
};
var updateDefaultToken = function (values, size) {
var update = __assign(__assign({}, values), { width: 70, height: 70 });
if (size) {
var sizeMap = {
fine: 20,
diminutive: 28,
tiny: 35,
small: 50,
medium: 70,
large: 140,
huge: 210,
gargantuan: 280,
colossal: 350,
titan: 420,
};
var sizeKey = Object.keys(sizeMap).find(function (key) {
return size.toLowerCase().includes(key);
});
var sizeValue = sizeKey ? sizeMap[sizeKey] : undefined;
if (sizeValue) {
update.width = sizeValue;
update.height = sizeValue;
}
}
Object.entries(update).forEach(function (_a) {
var key = _a[0], value = _a[1];
if (typeof value === "boolean") {
console.warn("Token default ".concat(key, " is a boolean. Setting to 0."), "color: orange; font-weight:bold");
}
});
setDefaultToken(update);
};
var updateHitPoints = function (attributes) {
getAttrs(attributes, function (values) {
var _a = parseIntegers(values), endurance = _a.endurance, hit_points_base = _a.hit_points_base, level = _a.level;
var die_pips = 0;
var set_hit_points = 0;
if (endurance >= -2 && endurance <= 12) {
if (endurance === -3) {
die_pips = 0;
set_hit_points = 0;
}
else if (endurance >= -2 && endurance <= -1) {
die_pips = 2;
set_hit_points = 1;
}
else if (endurance >= 0 && endurance <= 2) {
die_pips = 4;
set_hit_points = 2;
}
else if (endurance >= 3 && endurance <= 5) {
die_pips = 6;
set_hit_points = 3;
}
else if (endurance >= 6 && endurance <= 8) {
die_pips = 8;
set_hit_points = 4;
}
else if (endurance >= 9 && endurance <= 11) {
die_pips = 10;
set_hit_points = 5;
}
else if (endurance >= 12) {
die_pips = 12;
set_hit_points = 6;
}
}
var hit_point_die = die_pips ? "".concat(level, "d").concat(die_pips) : 0;
var hit_die_formula = "".concat(hit_points_base, "+").concat(hit_point_die, "+").concat(level);
setAttrs({ hit_point_die: hit_point_die, hit_die_formula: hit_die_formula, set_hit_points: set_hit_points });
});
};
var updateLinkedAttribute = function (event) {
var sourceAttribute = event.sourceAttribute, newValue = event.newValue;
if (sourceAttribute.includes("link")) {
return;
}
var attr = getFieldsetAttr(sourceAttribute);
var fieldset = getFieldsetGroupName(sourceAttribute);
getAttrs(["repeating_".concat(fieldset, "_link")], function (values) {
var _a;
var linkedRow = values["repeating_".concat(fieldset, "_link")];
if (linkedRow) {
var update = (_a = {},
_a["".concat(linkedRow, "_").concat(attr)] = newValue,
_a);
setAttrs(update, { silent: true });
}
});
};
var updateLinks = function (event) {
var sourceAttribute = event.sourceAttribute, removedInfo = event.removedInfo;
var update = {};
if (removedInfo) {
var effectedLink_1 = removedInfo["".concat(sourceAttribute, "_link")] + "_link";
getAttrs(["".concat(effectedLink_1)], function (values) {
var link = values["".concat(effectedLink_1)];
if (link) {
update["".concat(effectedLink_1)] = "";
setAttrs(update, { silent: true });
}
});
}
};
var updateLuck = function (attributes) {
getAttrs(attributes, function (values) {
var luck = parseInt(values.luck);
var attrs = {};
attrs.rerolls_max = Math.ceil(luck / 2) || 0;
if (luck < 0) {
attrs.luck_negative_modifier = luck;
}
else {
attrs.luck_negative_modifier = 0;
}
setAttrs(attrs);
});
};
var updateModifiedAttribute = function (attributes) {
getAttrs(attributes, function (values) {
var _a;
var sum = sumIntegers(Object.values(parseIntegers(values)));
var name = attributes
.find(function (e) { return e.includes("base"); })
.replace("_base", "");
setAttrs((_a = {}, _a[name] = sum > 0 ? "+".concat(sum) : sum < 0 ? "-".concat(sum) : "0", _a));
});
};
var updateSpellRollFormula = function (event) {
var _a;
var sourceAttribute = event.sourceAttribute, newValue = event.newValue, sourceType = event.sourceType;
var row = getFieldsetRow(sourceAttribute);
var isSpellCard = newValue === "0";
if (sourceType !== "player") {
return;
}
if (isSpellCard) {
var formula = getRollFormula(undefined, isSpellCard);
setAttrs((_a = {},
_a["".concat(row, "_roll_formula")] = formula,
_a));
return;
}
if (!isSpellCard) {
getAttrs(["primary_source", "".concat(row, "_source")], function (_a) {
var _b;
var primary_source = _a.primary_source, values = __rest(_a, ["primary_source"]);
var isPrimarySource = primary_source === values["".concat(row, "_source")];
setAttrs((_b = {},
_b["".concat(row, "_roll_formula")] = getRollFormula(isPrimarySource, isSpellCard),
_b));
});
var attributes_1 = __spreadArray(__spreadArray([], attackFieldsetAttributes, true), ["source", "link"], false).map(function (attr) { return "".concat(row, "_").concat(attr); });
getAttrs(attributes_1, function (values) {
var data = {};
__spreadArray(__spreadArray([], attackFieldsetAttributes, true), ["source"], false).forEach(function (attr) {
data[attr] = values["".concat(row, "_").concat(attr)];
});
var link = values["".concat(row, "_link")];
if (!link) {
var data_1 = {};
__spreadArray(__spreadArray([], attackFieldsetAttributes, true), ["source"], false).forEach(function (attr) {
data_1[attr] = values["".concat(row, "_").concat(attr)];
});
addSpellAttack(row, {
name: values["".concat(row, "_name")],
data: data_1,
});
}
});
}
};
var _this = this;
on("sheet:opened", function () {
getAttrs(["version"], function (v) {
versioning(parseFloat(v.version) || 1);
});
});
var versioning = function (version) { return __awaiter(_this, void 0, void 0, function () {
var updateMessage;
return __generator(this, function (_a) {
updateMessage = function (v) {
return console.log("%c Sheet is updating to ".concat(v), "color: orange; font-weight:bold");
};
switch (true) {
case version < 1:
versioning(1);
updateMessage(1);
break;
case version < 1.1:
updateMessage(1.1);
versionOneOne();
versioning(1.1);
break;
case version < 1.2:
updateMessage(1.2);
versionOneTwo();
versioning(1.2);
break;
case version < 1.21:
updateMessage(1.21);
versionOneTwoOne();
versioning(1.21);
break;
case version < 1.3:
updateMessage(1.3);
versionOneThree();
versioning(1.3);
break;
case version < 1.7:
updateMessage(1.7);
versionOneSeven();
versioning(1.7);
break;
case version < 1.71:
updateMessage(1.71);
versionOneSevenOne();
versioning(1.71);
break;
default:
console.log("%c Sheet is update to date.", "color: green; font-weight:bold");
setAttrs({ version: version });
}
return [2];
});
}); };
var dropWarning = function (v) {
console.warn("%c Compendium Drop Error: ".concat(v), "color: orange; font-weight:bold");
};
var dropAttrs = ["drop_name", "drop_data", "drop_content"];
var handle_drop = function () {
getAttrs(dropAttrs, function (v) {
var _a;
if (!v.drop_name || !v.drop_data) {
return;
}
var page = {
name: v.drop_name,
data: (_a = parseJSON(v.drop_data)) !== null && _a !== void 0 ? _a : v.drop_data,
content: v.drop_content,
};
var Category = page.data.Category;
console.log("%c Handling drop for ".concat(page.name, ": ").concat(Category), "color: orange;");
var handler;
switch (Category) {
case "Creatures":
handler = handle_creature;
break;
case "Conditions":
handler = handle_conditions;
break;
case "Backgrounds":
handler = handle_bop;
break;
case "Professions":
handler = handle_profession;
break;
case "Equipment":
handler = handle_equipment;
break;
case "Features":
handler = handle_feature;
break;
case "Lineages":
handler = handle_lineage;
break;
case "Skills":
handler = handle_skills;
break;
case "Spells":
handler = handle_spell;
break;
case "Talents":
handler = handle_talent;
break;
case "Vehicles":
handler = handle_vehicles;
break;
default:
dropWarning("Unknown category: ".concat(Category));
handler = undefined;
}
if (handler) {
try {
handler(page);
}
catch (error) {
console.warn("Error handling ".concat(Category, ": ").concat(error.message));
}
}
setDropAttrs({
drop_name: "",
drop_data: "",
drop_content: "",
drop_category: "",
});
});
};
["data"].forEach(function (attr) {
on("change:drop_".concat(attr), function () {
handle_drop();
});
});
var getRow = function (section) { return "repeating_".concat(section, "_").concat(generateRowID()); };
var getUpdate = function (attrs, page, repeatingRow) {
var update = {};
attrs.forEach(function (attr) {
var _a, _b;
var sheetAttr = repeatingRow ? "".concat(repeatingRow, "_").concat(attr) : attr;
var pageValue = page[attr];
var dataValue = (_a = page.data) === null || _a === void 0 ? void 0 : _a[attr];
if (pageValue === undefined && dataValue === undefined) {
return;
}
update[sheetAttr] = roll20Attribute(attr, (_b = pageValue) !== null && _b !== void 0 ? _b : dataValue);
});
if (repeatingRow) {
update["".concat(repeatingRow, "_toggle_edit")] = false;
}
return update;
};
var processDataArrays = function (array, callback) {
if (array === undefined) {
return;
}
var parsed = typeof array === "string" ? parseJSON(array) : array;
var map = parsed.map(function (e) { return callback(e); });
return map === null || map === void 0 ? void 0 : map.reduce(function (acc, val) { return (__assign(__assign({}, acc), val)); });
};
var roll20Attribute = function (attr, value) {
var selectAttributes = ["attribute", "damage_attribute"];
var isAttribute = attributes.includes("".concat(value).toLowerCase());
if (selectAttributes.includes(attr) &&
isAttribute &&
typeof value === "string") {
return "@{".concat(createAttributeName(value), "}");
}
return value;
};
var setDropAttrs = function (update, silent) {
if (silent === void 0) { silent = { silent: true }; }
try {
setAttrs(update, silent);
}
catch (e) {
dropWarning("Error setting attributes: ".concat(e));
}
};
var getFavorites = function (page) {
var JSON = parseJSON(page.data.favorites);
var update = {};
JSON.forEach(function (e) {
var row = getRow("favorites");
update["".concat(row, "_name")] = "".concat(e.name);
update["".concat(row, "_description")] = e.description;
update["".concat(row, "_tags")] = e.tags;
update["".concat(row, "_toggle_edit")] = false;
});
return update;
};
var getReactiveActions = function (page) {
var JSON = parseJSON(page.data.reactive_actions);
var update = {};
JSON.forEach(function (action) {
var row = getRow("reactive-actions");
update["".concat(row, "_name")] = "".concat(action.name);
update["".concat(row, "_description")] = action.description;
update["".concat(row, "_ap")] = action.ap;
update["".concat(row, "_toggle_edit")] = false;
});
return update;
};
var getTrackables = function (page) {
var JSON = parseJSON(page.data.trackables);
var update = {};
JSON.forEach(function (trackable) {
var newRow = getRow("trackables");
update["".concat(newRow, "_name")] = "".concat(page.name, " ").concat(trackable.name);
update["".concat(newRow, "_value")] = trackable.value;
update["".concat(newRow, "_value_max")] = trackable.value;
});
return update;
};
var handle_bop = function (page) {
var attrs = ["name", "occupation", "description"];
var row = getRow("additional-info");
var update = getUpdate(attrs, page, row);
update["".concat(row, "_category")] = page.data.Category;
if (page.data.Category === "Backgrounds") {
update["background"] = page.name;
update["occupation_tag"] = page.data.occupation;
}
if (page.data.Category === "Professions") {
update["profession"] = page.name;
}
setDropAttrs(update);
};
var handle_conditions = function (page) {
var attrs = ["name", "description"];
var row = getRow("conditions");
var update = getUpdate(attrs, page, row);
setDropAttrs(update);
};
var handle_creature = function (page) {
console.log("%c Creature Drop for ".concat(page.name), "color: orange;");
var attrs = [
"action_description",
"anticipation",
"armor_rating",
"awareness",
"charisma",
"description",
"dexterity",
"damage_reduction",
"damage_threshold",
"endurance",
"fortitude",
"hp",
"immune",
"intellect",
"level",
"logic",
"name",
"reflexes",
"resist",
"senses",
"size",
"speed",
"strength",
"tags",
"traits",
"vulnerable",
"willpower",
];
var update = getUpdate(attrs, page);
update.character_name = page.name;
update.sheet_type = "creature";
update.toggle_npc_setting = false;
update.toggle_edit_npc_edit = false;
var sections = processSection(page, [
"skills",
"features",
"actions",
"reactions",
"spells",
]);
Object.assign(update, sections);
var attackUpdate = processSkillsAndAttack(update);
Object.assign(update, attackUpdate);
update.hp_max = update.hp || 0;
var hasDefenses = defenses.some(function (attr) { return page.data[attr]; });
var silent = hasDefenses ? true : false;
console.table(update);
setDropAttrs(update, { silent: silent });
var hp = typeof update.hp === "boolean" ? 0 : update.hp;
var armorRating = typeof update.armor_rating === "boolean" ? 0 : update.armor_rating;
var tokenDefaults = {
bar1_value: hp,
bar1_max: hp,
bar2_value: armorRating,
};
updateDefaultToken(tokenDefaults, page.data["size"]);
};
var handle_equipment = function (page) {
var attrs = ["name", "description", "cost", "tags"];
var row = getRow("inventory");
var update = getUpdate(attrs, page, row);
update["".concat(row, "_qty")] = page.data.quantity ? page.data.quantity : 1;
var links = [];
if (page.data.subcategory === "weapon") {
var attackRow = getRow("attacks");
links.push(attackRow);
handle_weapon(page, attackRow, row);
if (page.data.extra_attacks) {
var extraAttacks = parseJSON(page.data.extra_attacks);
extraAttacks.forEach(function (e) {
var extraAttackRow = getRow("attacks");
handle_weapon(__assign(__assign({}, page), { name: e.name, data: __assign(__assign({}, e), { Category: page.data.Category, expansion: page.data.expansion }) }), extraAttackRow, undefined);
});
}
if (page.data.reactive_actions) {
var reactiveActions = getReactiveActions(page);
Object.assign(update, reactiveActions);
}
}
if (page.data.modifiers) {
handle_modifiers(page, row);
}
if (page.data.trackables) {
var trackables = getTrackables(page);
Object.assign(update, trackables);
}
if (page.data.favorites) {
var favorites = getFavorites(page);
Object.assign(update, favorites);
}
var linksString = links.join(",");
update["".concat(row, "_link")] = linksString;
setDropAttrs(update);
};
var handle_feature = function (page) {
var attrs = ["name", "description"];
var row = getRow("abilities");
var update = getUpdate(attrs, page, row);
["lineage", "profession"].forEach(function (attr) {
if (page.data[attr]) {
update["".concat(row, "_tags")] = page.data[attr];
}
});
setDropAttrs(update);
};
var handle_lineage = function (page) {
var attrs = ["height", "weight", "speed", "size"];
var update = getUpdate(attrs, page);
update["lineage"] = page.name;
try {
setAttrs(update, { silent: true });
}
catch (e) {
dropWarning("Error setting attributes: ".concat(e));
}
};
var handle_modifiers = function (page, inventoryRow) {
var modifiers = parseJSON(page.data.modifiers);
var update = {};
modifiers.forEach(function (modifier) {
var _a;
if (modifier.modifier) {
var newRow = getRow("modifiers");
update["".concat(newRow, "_link")] = inventoryRow;
update["".concat(newRow, "_modifier")] = modifier.modifier;
update["".concat(newRow, "_source")] = page.name;
update["".concat(newRow, "_toggle_active")] = "on";
update["".concat(newRow, "_attribute")] = modifier.attribute;
update["".concat(newRow, "_description")] = (_a = modifier.description) !== null && _a !== void 0 ? _a : "";
update["".concat(newRow, "_toggle_edit")] = false;
}
else {
console.warn("Modifier ".concat(modifier.attribute, " has no modifier value"));
}
});
setDropAttrs(update, { silent: false });
};
var handle_profession = function (page) {
if (page.data.occupation) {
handle_bop(page);
return;
}
var attrs = ["name", "description"];
var row = getRow("abilities");
var update = getUpdate(attrs, page, row);
if (page.data.profession) {
update["".concat(row, "_tags")] = page.data.profession;
}
setDropAttrs(update);
};
var handle_skills = function (page) {
var attrs = ["name", "category", "description", "attribute"];
var row = getRow("skills");
var update = getUpdate(attrs, page, row);
update["".concat(row, "_bonus")] = 1;
if (typeof page.data.attribute === "string") {
update["".concat(row, "_attribute_abbreviation")] = getAttributeAbbreviation(page.data.attribute);
}
setDropAttrs(update);
};
var handle_spell = function (page) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
var attrs = [
"apc",
"description",
"focus",
"name",
"spc",
"type",
"damage",
"damage_type",
"upcharge",
"range",
"duration",
"cast_time",
"prerequisites",
"recharge",
];
var row = getRow("spells");
var update = getUpdate(attrs, page, row);
if (page.data.damage) {
update["".concat(row, "_toggle_spell_attack")] = "on";
addSpellAttack(row, page);
}
if ((_a = page.data) === null || _a === void 0 ? void 0 : _a.function_note) {
update["".concat(row, "_function")] = "".concat(page.data.function, " (").concat(page.data.function_note, ")");
}
if ((_b = page.data) === null || _b === void 0 ? void 0 : _b.liturgy_apc) {
update["".concat(row, "_apc")] = "".concat(page.data.liturgy_apc, " (liturgy apc)");
}
if ((_c = page.data) === null || _c === void 0 ? void 0 : _c.liturgy_spc) {
update["".concat(row, "_spc")] = "".concat(page.data.liturgy_spc, " (liturgy spc)");
}
if (((_d = page.data) === null || _d === void 0 ? void 0 : _d.requires) && ((_e = page.data) === null || _e === void 0 ? void 0 : _e.materials)) {
update["".concat(row, "_requires")] = "".concat((_f = page.data) === null || _f === void 0 ? void 0 : _f.requires, " (").concat(page.data.materials, ")");
}
else if ((_g = page.data) === null || _g === void 0 ? void 0 : _g.requires) {
update["".concat(row, "_requires")] = "".concat((_h = page.data) === null || _h === void 0 ? void 0 : _h.requires);
}
else if ((_j = page.data) === null || _j === void 0 ? void 0 : _j.materials) {
update["".concat(row, "_requires")] = "".concat((_k = page.data) === null || _k === void 0 ? void 0 : _k.materials);
}
var tags = "".concat(page.data.source, " ").concat(page.data.type, ", ").concat(page.data.function);
if ((_l = page.data) === null || _l === void 0 ? void 0 : _l.function_note) {
tags += ", ".concat(page.data.function_note);
}
if (page.data.source) {
update["".concat(row, "_source")] = page.data.source.toString().toLowerCase();
}
update["".concat(row, "_tags")] = tags;
setDropAttrs(update);
};
var handle_talent = function (page) {
var attrs = ["name", "description", "level", "prerequisites"];
var row = getRow("talents");
var update = getUpdate(attrs, page, row);
var tag = page.data.stack;
if (page.data.track) {
tag += ", ".concat(page.data.track);
}
update["".concat(row, "_tags")] = tag;
if (page.data.reactive) {
var reactiveRow = getRow("reactive-actions");
var reactiveAttrs = ["name", "description", "ap"];
var reactiveUpdate = getUpdate(reactiveAttrs, page, reactiveRow);
Object.assign(update, reactiveUpdate);
update["".concat(reactiveRow, "_toggle_edit")] = false;
update["".concat(reactiveRow, "_link")] = row;
update["".concat(row, "_link")] = reactiveRow;
}
setDropAttrs(update);
};
var handle_vehicles = function (page) {
var attrs = [
"range",
"ammunition",
"reload",
"area_of_effect",
"helf",
"speed",
"hp",
"armor_rating",
"reflexes",
"fortitude",
"resist",
"immune",
"vulnerable",
"damage_reduction",
"damage_threshold",
"action_description",
];
var update = getUpdate(attrs, page);
update.sheet_type = "siege";
update.toggle_npc_setting = false;
update.toggle_edit_npc_edit = false;
update.npc_sections = "actions";
update.section_actions = "on";
var sections = processSection(page, ["actions"]);
Object.assign(update, sections);
var attackUpdate = processSkillsAndAttack(update);
Object.assign(update, attackUpdate);
if (update.action_description) {
update["section_actions"] = "on";
if (!update.npc_sections.includes("actions")) {
update.npc_sections = "".concat(update.npc_sections, ",actions");
}
}
setDropAttrs(update, { silent: true });
var hp = typeof update.hp === "boolean" ? 0 : update.hp;
var armorRating = typeof update.armor_rating === "boolean" ? 0 : update.armor_rating;
var tokenDefaults = {
bar1_value: hp,
bar1_max: hp,
bar2_value: armorRating,
};
updateDefaultToken(tokenDefaults, page.data["size"]);
};
var getAttributeInfo = function (attr) {
if (typeof attr === "string") {
return {
attribute: "@{".concat(attr, "}"),
abbreviation: getAttributeAbbreviation(attr),
};
}
console.warn("Attribute is not a string: ".concat(attr));
return { attribute: "", abbreviation: "" };
};
var handle_weapon = function (page, attackRow, inventoryRow) {
var _a;
var _b;
var attrs = [
"apc",
"cost",
"damage_type",
"damage",
"damage_attribute",
"name",
"range",
"reload",
"size",
"subcategory",
"tags",
"type",
"weight",
"description",
"effect",
"crit_range",
"defense",
];
var row = attackRow ? attackRow : getRow("attacks");
var update = getUpdate(attrs, page, row);
update["".concat(row, "_category")] = page.data.Category;
update["".concat(row, "_link")] = inventoryRow;
var setAttributeField = function (key, value) {
if (!value)
return;
var _a = getAttributeInfo(value), attribute = _a.attribute, abbreviation = _a.abbreviation;
update["".concat(row, "_").concat(key)] = attribute;
update["".concat(row, "_").concat(key, "_abbreviation")] = abbreviation;
};
setAttributeField("attribute", page.data.attribute);
if (page.data.damage_attribute) {
setAttributeField("damage_attribute", page.data.damage_attribute);
}
else {
setAttributeField("damage_attribute", page.data.attribute);
}
if (!page.data.attribute) {
update["".concat(row, "_bonus")] = 0;
}
setDropAttrs(update);
setDropAttrs((_a = {},
_a["".concat(row, "_modifier")] = (_b = page.data.modifier) !== null && _b !== void 0 ? _b : 0,
_a), { silent: false });
};
var isDataArray = function (data) {
return Array.isArray(data) || (typeof data === "string" && data.startsWith("["));
};
var parseJSON = function (jsonString) {
try {
if (typeof jsonString === "object") {
return jsonString;
}
return JSON.parse(jsonString);
}
catch (e) {
console.warn("Error parsing JSON: ".concat(jsonString));
return undefined;
}
};
var processSection = function (page, list) {
var update = {};
var sections = [];
list.forEach(function (section) {
var sectionData = page.data[section];
if (sectionData && isDataArray(sectionData)) {
sections.push(section);
var processed = processDataArrays(sectionData, function (data) {
return getUpdate(Object.keys(data), data, getRow(section));
});
Object.assign(update, processed);
}
});
update.npc_sections = sections.join(",");
sections.forEach(function (section) {
update["section_".concat(section)] = "on";
});
return update;
};
var processSkillsAndAttack = function (updateAttrs) {
var update = {};
Object.entries(__assign({}, updateAttrs)).forEach(function (_a) {
var key = _a[0], value = _a[1];
var row = getFieldsetRow(key);
if (key.endsWith("_defense")) {
update["".concat(row, "_toggle_action_attack")] = "on";
update["".concat(row, "_roll_formula")] = getCreatureAttackRollFormula(true, {
includeDice: true,
includeDefense: !!update["".concat(row, "_defense")],
includeDamage: !!update["".concat(row, "_damage")],
includeEffect: !!update["".concat(row, "_effect")],
});
return;
}
if (key.endsWith("_modifier")) {
var int = parseInteger("".concat(value));
update["".concat(row, "_modifier")] = int > 0 ? "+".concat(int) : "".concat(value);
}
if (key.endsWith("_attribute")) {
update["".concat(row, "_attribute")] = "@{".concat(value, "}");
var abbr = getAttributeAbbreviation("".concat(value));
update["".concat(row, "_attribute_abbreviation")] = "(".concat(abbr, ")");
return;
}
});
return update;
};
var convertIntegerNegative = function (number) {
return number > 0 ? -Math.abs(number) : number;
};
var convertIntegersNegatives = function (numbers) {
var negativeNumbers = {};
for (var _i = 0, _a = Object.entries(numbers); _i < _a.length; _i++) {
var _b = _a[_i], key = _b[0], value = _b[1];
negativeNumbers[key] = convertIntegerNegative(value);
}
return negativeNumbers;
};
var createAttributeName = function (name) {
return name === null || name === void 0 ? void 0 : name.replace(/ /g, "_").toLowerCase();
};
var getAttributeAbbreviation = function (attribute) {
if (attribute.includes("none") || attribute.includes("0")) {
return "-";
}
if (attribute.includes("luck")) {
return "luck";
}
if (attribute.includes("awareness")) {
return "awr";
}
if (attribute.includes("coordination")) {
return "cor";
}
if (attribute.charAt(0) === "@") {
attribute = attribute.substring(2, attribute.length - 1);
}
var abbreviation = attribute.substring(0, 3);
return abbreviation;
};
var getFieldsetAttr = function (key) {
var reprowid = getFieldsetRow(key);
return key.split("".concat(reprowid, "_"))[1];
};
var getFieldsetGroupName = function (trigger) { return trigger.split("_")[1]; };
var getFieldsetRow = function (trigger) {
var split = trigger.split("_");
return "".concat(split[0], "_").concat(split[1], "_").concat(split[2]);
};
var getTranslations = function (translationKeys) {
var translations = {};
translationKeys.forEach(function (obj) {
Object.keys(obj).forEach(function (key) {
var translation = getTranslationByKey(key);
if (typeof translation === "string") {
translations["".concat(key)] = translation;
}
});
});
return translations;
};
var parseInteger = function (string) { return parseFloat(string) || 0; };
var parseIntegers = function (values) {
var parsedNumbers = {};
for (var _i = 0, _a = Object.entries(values); _i < _a.length; _i++) {
var _b = _a[_i], key = _b[0], value = _b[1];
if (typeof value === "string") {
parsedNumbers[key] = parseInteger(value);
}
else if (typeof value === "number") {
parsedNumbers[key] = value;
}
}
return parsedNumbers;
};
var sliceAttribute = function (attribute) { return attribute.slice(2, -1); };
var sumIntegers = function (numbers) { return numbers.reduce(function (a, b) { return a + b; }, 0); };
var versionOneOne = function () {
var fieldsToUpdate = ["repeating_attacks", "repeating_skills"];
fieldsToUpdate.forEach(function (fieldset) {
getSectionIDs(fieldset, function (ids) {
var bonuses = ids.map(function (id) { return "".concat(fieldset, "_").concat(id, "_bonus"); });
getAttrs(bonuses, function (values) {
var updates = {};
bonuses.forEach(function (bonus) {
var modifier = bonus.replace("bonus", "modifier");
updates[modifier] = values[bonus] || "0";
});
setAttrs(updates);
});
});
});
getAttrs(["awareness", "initiative_bonus"], function (v) {
setAttrs({ initiative: v.initiative_bonus + v.awareness });
});
};
var versionOneSeven = function () {
getAttrs(["creature_sections", "dr", "dt"], function (values) {
setAttrs({
npc_sections: values.creature_sections,
damage_reduction: values.dr,
damage_threshold: values.dt,
});
});
};
var versionOneSevenOne = function () {
setAttrs({
toggle_edit_npc_edit: "0",
});
};
var versionOneThree = function () {
var fieldsToUpdate = ["repeating_actions"];
fieldsToUpdate.forEach(function (fieldset) {
getSectionIDs(fieldset, function (ids) {
var bonuses = ids.map(function (id) { return "".concat(fieldset, "_").concat(id, "_bonus"); });
getAttrs(bonuses, function (values) {
var updates = {};
bonuses.forEach(function (bonus) {
var modifier = bonus.replace("bonus", "modifier");
updates[modifier] = values[bonus] || "0";
});
setAttrs(updates);
});
});
});
};
var versionOneTwo = function () {
getAttrs(["initiative_bonus"], function (v) {
var _a;
var parsedInt = parseInt(v.initiative_bonus || "0", 10);
if (parsedInt > 0) {
var newRowId = generateRowID();
var row = "repeating_modifiers_".concat(newRowId);
setAttrs((_a = {},
_a["".concat(row, "_attribute")] = "initiative",
_a["".concat(row, "_modifier")] = v.initiative_bonus || "0",
_a["".concat(row, "_toggle_active")] = "on",
_a["".concat(row, "_source")] = "version 1.2",
_a["".concat(row, "_toggle_edit")] = false,
_a["".concat(row, "_description")] = "Migrated from initiative bonus input in combat tab.",
_a));
}
});
};
var versionOneTwoOne = function () {
getAttrs(["critical_range", "critical_range_base"], function (v) {
setAttrs({
critical_hit: v.critical_range || "20",
critical_hit_base: v.critical_range_base || "20",
critical_fail_base: "1",
critical_fail: "1",
});
});
};
on("clicked:launch_charactermancer", function () {
startCharactermancer("start");
});
[
"start",
"lineage",
"attributes",
"stats",
"background",
"profession",
"talent",
"review",
].forEach(function (step) {
on("clicked:charactermancer_".concat(step), function () {
startCharactermancer(step);
});
});
on("mancer:cancel", function (event) {
console.log("Cancel charactermancer", event);
});
on("mancerfinish:name", function (event) {
console.log("Finished charactermancer with name:", event);
});
on("page:lineage", function () {
console.log("%c Lineage page opened", "color: cyan; font-weight: bold;");
});
on("page:attributes", function () {
console.log("%c Attributes page opened", "color: cyan; font-weight: bold;");
});
on("page:review", function () {
console.log("%c Review page opened", "color: cyan; font-weight: bold;");
var charmancerData = getCharmancerData();
console.log("Charmancer:", charmancerData);
});
on("page:final", function () {
finishCharactermancer();
});
var valueCheck = function (value) {
if (value > 2)
return 2;
if (value < -3)
return -3;
if (isNaN(value))
return 0;
return value;
};
var getAttributeCap = function (level) {
if (level < 1)
throw new Error("Level must be at least 1.");
return Math.ceil(level / 2) + 1;
};
var computeAttributePointUsage = function (attrs, basePool) {
if (basePool === void 0) { basePool = 5; }
var spent = 0;
var gainedFromNegatives = 0;
for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {
var key = _a[_i];
var value = attrs[key];
if (value > 0) {
spent += value;
}
else if (value < 0) {
gainedFromNegatives += -value;
}
}
var totalPool = basePool + gainedFromNegatives;
var remaining = totalPool - spent;
return { spent: spent, gainedFromNegatives: gainedFromNegatives, totalPool: totalPool, remaining: remaining };
};
var validateAttributes = function (level, attrs) {
var errors = [];
var cap = getAttributeCap(level);
var points = computeAttributePointUsage(attrs);
for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {
var key = _a[_i];
var value = attrs[key];
if (value > cap) {
errors.push("".concat(key, " (").concat(value, ") exceeds the cap of +").concat(cap, " for level ").concat(level, "."));
}
}
if (points.remaining < 0) {
errors.push("You have overspent Attribute Points: spent ".concat(points.spent, " with a pool of ").concat(points.totalPool, "."));
}
return {
ok: errors.length === 0,
errors: errors,
cap: cap,
points: points,
};
};
function getLuckStats(luck) {
var luckPoints = luck > 0 ? Math.floor(luck / 2) : 0;
var canCrit = luck >= 0;
var critDamageBonus = luck >= 1 ? luck : 0;
var d20ModifierFromLuck = luck < 0 ? luck : 0;
var critRangeStart = 20;
if (luck >= 12) {
critRangeStart = 18;
}
else if (luck >= 6) {
critRangeStart = 19;
}
return {
luckPoints: luckPoints,
canCrit: canCrit,
critDamageBonus: critDamageBonus,
critRangeStart: critRangeStart,
d20ModifierFromLuck: d20ModifierFromLuck,
};
}
function getActionPoints(cor) {
var baseAP = 3;
var bonusFromCor = 0;
if (cor >= 0) {
bonusFromCor = Math.floor(cor / 2);
}
else if (cor === -1 || cor === -2) {
bonusFromCor = -1;
}
else if (cor <= -3) {
bonusFromCor = -2;
}
var totalAP = baseAP + bonusFromCor;
return { baseAP: baseAP, bonusFromCor: bonusFromCor, totalAP: totalAP };
}
attributes.forEach(function (attr) {
on("mancerchange:".concat(attr), function (event) {
var charmancerData = getCharmancerData();
var values = charmancerData.attributes.values;
var attrs = {};
attributes.forEach(function (attribute) {
attrs[attribute] = values[attribute]
? parseInteger(values[attribute])
: 0;
});
var level = 1;
var validation = validateAttributes(level, attrs);
if (!validation.ok) {
console.error("Invalid attributes:", validation.errors);
}
var luckStats = getLuckStats(attrs["luck"]);
var apStats = getActionPoints(attrs["coordination"]);
console.log({ validation: validation, luckStats: luckStats, apStats: apStats });
console.log({ validation: validation });
});
});
var updateAttribute = function (attribute, change) {
var _a;
var charmancerData = getCharmancerData();
var value = charmancerData.attributes.values[attribute];
var int = valueCheck(parseInteger(value) + change);
setAttrs((_a = {}, _a[attribute] = int, _a));
};
on("clicked:decrease_attribute", function (event) {
var attribute = event.htmlAttributes.value;
updateAttribute(attribute, -1);
});
on("clicked:increase_attribute", function (event) {
var attribute = event.htmlAttributes.value;
updateAttribute(attribute, 1);
});
on("mancerchange:lineage", function (event) {
var pageName = event.newValue.includes("?expansion")
? event.newValue.split("?")[0]
: event.newValue;
changeCompendiumPage("sheet-iframe", pageName);
getCompendiumPage(pageName, function (page) {
var show = [];
var hide = [];
var LINEAGE_ATTRIBUTES = [
"appearance",
"height",
"lifespan",
"size",
"speed",
"weight",
];
LINEAGE_ATTRIBUTES.forEach(function (attr) {
if (page.data[attr]) {
show.push("sheet-choice-".concat(attr));
}
else {
hide.push("sheet-choice-".concat(attr));
}
});
show.length && showChoices(show);
hide.length && hideChoices(hide);
setAttrs({ name: page.name }, { silent: true });
});
});
</script>