mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 11:42:29 +00:00
1267 lines
170 KiB
HTML
1267 lines
170 KiB
HTML
<input name="attr_version" type="hidden" value="1.41"/><!-- This need an even handler as well to update damage roll when effect is added but damage is empty--><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 pregens 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="awa" 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="coo" 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 & 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" 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 action 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 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="awa" 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="coo" 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="for"></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 & 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_roll_formula" value="{{dice=[[1d20+@{attribute}[attribute]+(@{modifier}[modifier])+(?{TA/TD|0}[tactical bonus])+(@{luck_negative_modifier}[negative luck modifier])cs@{critical_hit}cf@{critical_fail}]]}} {{damage=[Damage](~repeating_attacks-roll_damage)}}"/><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} Damage}} {{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="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"><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 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 gap-2 col-auto-fr items-center"><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></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} Damage}} {{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></select></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="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-creature" type="hidden" name="attr_toggle_creature_settings"/><input class="edit-creature" type="hidden" name="attr_toggle_edit_creature_edit" value="true"/><input class="sections" type="hidden" name="attr_creature_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_creature_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_creature_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="awa" 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="coo" 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="for"></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 grid-flow-col stats"><div class="grid auto-rows-min"><div class="grid gap-1 grid-flow-col col-auto-fr items-center 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 class="grid gap-1 grid-flow-col col-auto-fr items-center display-span"><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-1 grid-flow-col col-auto-fr items-center display-span"><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 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 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><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 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 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 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"/><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"/><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" data-i18n="hit"></span><button class="ellipsis font-weight-bold text-center" name="roll_damage" type="roll" value="&{template:rolls} {{header=@{name} Damage}} {{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 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"/><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" 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} Damage}} {{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"/><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"/><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} Damage}} {{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></select></div></div></div></div></div><div class="compendium_warning"><span 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}}
|
|
{{#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 __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;
|
|
return g = { next: verb(0), "throw": verb(1), "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 __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 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);
|
|
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;
|
|
var repeatingSections = [
|
|
"skills",
|
|
"features",
|
|
"actions",
|
|
"reactions",
|
|
"spells",
|
|
];
|
|
switch (Category) {
|
|
case "Creatures":
|
|
handle_creature(page);
|
|
break;
|
|
case "Conditions":
|
|
handle_conditions(page);
|
|
break;
|
|
case "Backgrounds":
|
|
handle_bop(page);
|
|
break;
|
|
case "Professions":
|
|
handle_profession(page);
|
|
break;
|
|
case "Equipment":
|
|
handle_equipment(page);
|
|
break;
|
|
case "Features":
|
|
handle_feature(page);
|
|
break;
|
|
case "Lineages":
|
|
handle_lineage(page);
|
|
break;
|
|
case "Skills":
|
|
handle_skills(page);
|
|
break;
|
|
case "Spells":
|
|
handle_spell(page);
|
|
break;
|
|
case "Talents":
|
|
handle_talent(page);
|
|
break;
|
|
default:
|
|
dropWarning("Unknown category: ".concat(Category));
|
|
}
|
|
setDropAttrs({
|
|
drop_name: "",
|
|
drop_data: "",
|
|
drop_content: "",
|
|
drop_category: ""
|
|
});
|
|
});
|
|
};
|
|
["data"].forEach(function (attr) {
|
|
on("change:drop_".concat(attr), function () {
|
|
handle_drop();
|
|
});
|
|
});
|
|
[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);
|
|
});
|
|
on("remove:repeating_".concat(fieldset), function (_a) {
|
|
var _b;
|
|
var sourceAttribute = _a.sourceAttribute, removedInfo = _a.removedInfo;
|
|
var link = removedInfo["".concat(sourceAttribute, "_link")];
|
|
if (link) {
|
|
var update = (_b = {}, _b["".concat(link, "_link")] = "", _b);
|
|
setAttrs(update, { silent: true });
|
|
}
|
|
});
|
|
});
|
|
["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 (_a) {
|
|
var _b;
|
|
var sourceAttribute = _a.sourceAttribute, removedInfo = _a.removedInfo;
|
|
var link = removedInfo["".concat(sourceAttribute, "_link")];
|
|
if (link) {
|
|
var update = (_b = {}, _b["".concat(link, "_link")] = "", _b);
|
|
setAttrs(update, { silent: true });
|
|
}
|
|
});
|
|
});
|
|
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(["creature_sections"], function (values) {
|
|
var sections = values.creature_sections
|
|
? values.creature_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({ creature_sections: sections.join(",") });
|
|
});
|
|
});
|
|
});
|
|
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>@{critical_range}]]}} {{damage=[Damage](~repeating_spells-roll_damage)}} {{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 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 = hit < 16 ? 16 : hit > 20 ? 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 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 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;
|
|
default:
|
|
console.log("%c Sheet is update to date.", "color: green; font-weight:bold");
|
|
setAttrs({ version: version });
|
|
}
|
|
return [2];
|
|
});
|
|
}); };
|
|
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;
|
|
if ((_a = page[attr]) !== null && _a !== void 0 ? _a : page.data[attr]) {
|
|
update[sheetAttr] = (_b = page[attr]) !== null && _b !== void 0 ? _b : roll20Attribute(attr, page.data[attr]);
|
|
}
|
|
});
|
|
if (repeatingRow) {
|
|
update["".concat(repeatingRow, "_toggle_edit")] = false;
|
|
}
|
|
return update;
|
|
};
|
|
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 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) {
|
|
if (attr === "attribute" && 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 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) {
|
|
var attrs = [
|
|
"action_description",
|
|
"anticipation",
|
|
"armor_rating",
|
|
"awareness",
|
|
"charisma",
|
|
"description",
|
|
"dexterity",
|
|
"dr",
|
|
"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_creature_setting = false;
|
|
update.toggle_edit_creature_edit = false;
|
|
var creature_sections = [];
|
|
var isDataArray = function (data) {
|
|
return Array.isArray(data) || (typeof data === "string" && data.startsWith("["));
|
|
};
|
|
var sections = ["skills", "features", "actions", "reactions", "spells"];
|
|
sections.forEach(function (section) {
|
|
var sectionData = page.data[section];
|
|
if (sectionData && isDataArray(sectionData)) {
|
|
creature_sections.push(section);
|
|
var processed = processDataArrays(sectionData, function (data) {
|
|
return getUpdate(Object.keys(data), data, getRow(section));
|
|
});
|
|
Object.assign(update, processed);
|
|
}
|
|
});
|
|
update.creature_sections = creature_sections.join(",");
|
|
console.log("%c Creature Drop for ".concat(page.name), "color: orange;");
|
|
Object.entries(__assign({}, update)).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")]
|
|
});
|
|
}
|
|
if (key.endsWith("_modifier")) {
|
|
var int = parseInteger("".concat(value));
|
|
update["".concat(row, "_modifier")] = int > 0 ? "+".concat(int) : "".concat(int);
|
|
}
|
|
if (key.endsWith("_attribute")) {
|
|
update["".concat(row, "_attribute")] = "@{".concat(value, "}");
|
|
var abbr = getAttributeAbbreviation("".concat(value));
|
|
update["".concat(row, "_attribute_abbreviation")] = "(".concat(abbr, ")");
|
|
}
|
|
});
|
|
var hasDefenses = defenses.some(function (attr) { return page.data[attr]; });
|
|
var silent = hasDefenses ? true : false;
|
|
setDropAttrs(update, { silent: silent });
|
|
};
|
|
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;
|
|
if (page.data.subcategory === "weapon") {
|
|
var attackRow = getRow("attacks");
|
|
update["".concat(row, "_link")] = attackRow;
|
|
handle_weapon(page, attackRow, row);
|
|
}
|
|
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_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 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 attrs = [
|
|
"apc",
|
|
"cost",
|
|
"damage_type",
|
|
"damage",
|
|
"damage_attribute",
|
|
"name",
|
|
"range",
|
|
"reload",
|
|
"size",
|
|
"subcategory",
|
|
"tags",
|
|
"type",
|
|
"weight",
|
|
];
|
|
var row = attackRow ? attackRow : getRow("attacks");
|
|
var update = getUpdate(attrs, page, row);
|
|
update["".concat(row, "_category")] = page.data.Category;
|
|
update["".concat(row, "_modifier")] = (_a = page.data.modifier) !== null && _a !== void 0 ? _a : 0;
|
|
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);
|
|
};
|
|
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 === "luck") {
|
|
return attribute;
|
|
}
|
|
if (attribute.charAt(0) === "@") {
|
|
attribute = attribute.substring(2, attribute.length - 1);
|
|
}
|
|
var abbreviation = attribute.substring(0, 3);
|
|
if (attribute === "awareness" || attribute === "coordination") {
|
|
var key = getTranslationByKey(abbreviation);
|
|
if (key) {
|
|
return key;
|
|
}
|
|
else {
|
|
console.warn("Key not found for ".concat(attribute, " abbreviation: ").concat(abbreviation));
|
|
}
|
|
}
|
|
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 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"
|
|
});
|
|
});
|
|
};
|
|
</script> |