From 5eb5a2bb992b91027bcf39841c17d0fc68a3bcd3 Mon Sep 17 00:00:00 2001 From: Miguel Peres Date: Fri, 6 Mar 2026 08:13:38 -0300 Subject: [PATCH] fix npc drop All NPCs are dragging onto the table as a blank character sheet, not their NPC sheet. This is a fix for this issue. --- dcc_official/dcc.css | 367 ++++++++++---- dcc_official/dcc.html | 1078 +++++++++++++++++++++++++++-------------- 2 files changed, 984 insertions(+), 461 deletions(-) diff --git a/dcc_official/dcc.css b/dcc_official/dcc.css index 195185679d..fc7617463f 100644 --- a/dcc_official/dcc.css +++ b/dcc_official/dcc.css @@ -1,111 +1,4 @@ @import url("https://fonts.googleapis.com/css?family=Material+Icons|Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200|Material+Icons+Outlined|El+Messiri|IM+Fell+Double+Pica&display=swap"); -.tabs__container:not(.k-active-tab) { - display: none !important; -} - -.tabs__nav-item { - list-style: none; -} - -.tabs__nav-list { - display: flex; -} - -.ui-dialog .tab-content .charsheet { - position: relative; - top: 0; - bottom: 0; - left: 0; - right: 0; -} -.ui-dialog .tab-content .charsheet .kmodal__button { - all: initial; - display: flex; - margin: 0; - padding: 0; - cursor: pointer; -} -.ui-dialog .tab-content .charsheet .kmodal__checkbox { - display: none; -} -.ui-dialog .tab-content .charsheet .kmodal__outer { - opacity: 0; - visibility: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - text-align: left; - background: var(--kmodal-overlay-background); - transition: opacity 0.25s ease; - z-index: 999; -} -.ui-dialog .tab-content .charsheet .kmodal__background { - all: initial; - margin: 0; - padding: 0; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - cursor: pointer; -} -.ui-dialog .tab-content .charsheet .kmodal__inner { - position: fixed; - width: var(--kmodal-width); - height: var(--kmodal-height); - inset: 0; - margin: auto; - overflow: auto; - background: var(--kmodal-dialog-background); - border-radius: 5px; - padding: var(--kmodal-close-height) calc(var(--kmodal-close-width) * 3) var(--kmodal-close-height) calc(var(--kmodal-close-width) * 2); - max-width: var(--kmodal-max-width); - max-height: var(--kmodal-max-height); - transition: opacity 0.25s ease; - box-shadow: var(--kmodal-box-shadow); -} -.ui-dialog .tab-content .charsheet .kmodal__close { - position: absolute; - right: var(--kmodal-close-width); - top: var(--kmodal-close-height); - width: var(--kmodal-close-width); - height: var(--kmodal-close-height); - cursor: pointer; -} -.ui-dialog .tab-content .charsheet .kmodal__close:after, -.ui-dialog .tab-content .charsheet .kmodal__close:before { - content: ""; - position: absolute; - width: var(--kmodal-close-line-thickness); - height: var(--kmodal-close-line-length); - background: var(--kmodal-close-color); - display: block; - transform: rotate(45deg); - left: 50%; - margin: -3px 0 0 -1px; - top: 0; -} -.ui-dialog .tab-content .charsheet .kmodal__close:hover:after, -.ui-dialog .tab-content .charsheet .kmodal__close:hover:before { - background: var(--kmodal-close-hover-color); -} -.ui-dialog .tab-content .charsheet .kmodal__close:before { - transform: rotate(-45deg); -} -.ui-dialog .tab-content .charsheet .kmodal__checkbox:not(:checked) + .kmodal__outer { - display: none; -} -.ui-dialog .tab-content .charsheet .kmodal__checkbox:checked + .kmodal__outer { - opacity: 1; - visibility: visible; -} -.ui-dialog .tab-content .charsheet .kmodal__checkbox:checked + .kmodal__outer .kmodal__inner { - top: 0; -} - .sheet-rolltemplate-dcc { --font1:var(--topHeadFont); --font2:var(--topHeadFont); @@ -299,6 +192,11 @@ --error-red: var(--lm-error-red); color: var(--fontColor); font-family: var(--contentHeadFont); + position: relative; + top: 0; + bottom: 0; + left: 0; + right: 0; } .sheet-rolltemplate-dcc:not(:first-child) { margin-top: 10px; @@ -1195,6 +1093,113 @@ font-size: 12px; content: "add"; } +.sheet-rolltemplate-dcc .kmodal__button { + all: initial; + display: flex; + margin: 0; + padding: 0; + cursor: pointer; +} +.sheet-rolltemplate-dcc .kmodal__checkbox[type=checkbox] { + display: none; +} +.sheet-rolltemplate-dcc .kmodal__outer { + opacity: 0; + visibility: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + text-align: left; + background: var(--kmodal-overlay-background); + transition: opacity 0.25s ease; + z-index: 999; +} +.sheet-rolltemplate-dcc .kmodal__background { + all: initial; + margin: 0; + padding: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + cursor: pointer; +} +.sheet-rolltemplate-dcc .kmodal__inner { + position: fixed; + width: var(--kmodal-width); + height: var(--kmodal-height); + inset: 0; + margin: auto; + overflow: auto; + background: var(--kmodal-dialog-background); + border-radius: 5px; + padding: var(--kmodal-close-height) calc(var(--kmodal-close-width) * 3) var(--kmodal-close-height) calc(var(--kmodal-close-width) * 2); + max-width: var(--kmodal-max-width); + max-height: var(--kmodal-max-height); + transition: opacity 0.25s ease; + box-shadow: var(--kmodal-box-shadow); +} +.sheet-rolltemplate-dcc .kmodal__close { + position: absolute; + right: var(--kmodal-close-width); + top: var(--kmodal-close-height); + width: var(--kmodal-close-width); + height: var(--kmodal-close-height); + cursor: pointer; +} +.sheet-rolltemplate-dcc .kmodal__close:after, +.sheet-rolltemplate-dcc .kmodal__close:before { + content: ""; + position: absolute; + width: var(--kmodal-close-line-thickness); + height: var(--kmodal-close-line-length); + background: var(--kmodal-close-color); + display: block; + transform: rotate(45deg); + left: 50%; + margin: -3px 0 0 -1px; + top: 0; +} +.sheet-rolltemplate-dcc .kmodal__close:hover:after, +.sheet-rolltemplate-dcc .kmodal__close:hover:before { + background: var(--kmodal-close-hover-color); +} +.sheet-rolltemplate-dcc .kmodal__close:before { + transform: rotate(-45deg); +} +.sheet-rolltemplate-dcc .kmodal__checkbox:not(:checked) + .kmodal__outer { + display: none; +} +.sheet-rolltemplate-dcc .kmodal__checkbox:checked + .kmodal__outer { + opacity: 1; + visibility: visible; +} +.sheet-rolltemplate-dcc .kmodal__checkbox:checked + .kmodal__outer .kmodal__inner { + top: 0; +} +.sheet-rolltemplate-dcc .tabs__container:not(.k-active-tab) { + display: none !important; +} +.sheet-rolltemplate-dcc .tabs__nav-item { + list-style: none; +} +.sheet-rolltemplate-dcc .tabs__nav-list { + display: flex; +} +.sheet-rolltemplate-dcc a:not([href^="~"]):not([href^="!"]) { + color: inherit; +} +.sheet-rolltemplate-dcc a:is([href^="~"], [href^="!"]) { + padding: 0; + border: 0 solid transparent; + background-color: transparent; + color: inherit; + font-weight: 700; + font-size: 1.2em; +} .sheet-rolltemplate-dcc .userscript-roll { position: relative; } @@ -1550,6 +1555,11 @@ body .ui-dialog .nav-tabs a { font-family: var(--font3); } body .ui-dialog .tab-content .charsheet { + position: relative; + top: 0; + bottom: 0; + left: 0; + right: 0; padding: 2px; --_margin: 1rem; margin: 0; @@ -2419,6 +2429,102 @@ body .ui-dialog .tab-content .charsheet .repcontrol-button--add::before { font-size: 12px; content: "add"; } +body .ui-dialog .tab-content .charsheet .kmodal__button { + all: initial; + display: flex; + margin: 0; + padding: 0; + cursor: pointer; +} +body .ui-dialog .tab-content .charsheet .kmodal__checkbox[type=checkbox] { + display: none; +} +body .ui-dialog .tab-content .charsheet .kmodal__outer { + opacity: 0; + visibility: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + text-align: left; + background: var(--kmodal-overlay-background); + transition: opacity 0.25s ease; + z-index: 999; +} +body .ui-dialog .tab-content .charsheet .kmodal__background { + all: initial; + margin: 0; + padding: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + cursor: pointer; +} +body .ui-dialog .tab-content .charsheet .kmodal__inner { + position: fixed; + width: var(--kmodal-width); + height: var(--kmodal-height); + inset: 0; + margin: auto; + overflow: auto; + background: var(--kmodal-dialog-background); + border-radius: 5px; + padding: var(--kmodal-close-height) calc(var(--kmodal-close-width) * 3) var(--kmodal-close-height) calc(var(--kmodal-close-width) * 2); + max-width: var(--kmodal-max-width); + max-height: var(--kmodal-max-height); + transition: opacity 0.25s ease; + box-shadow: var(--kmodal-box-shadow); +} +body .ui-dialog .tab-content .charsheet .kmodal__close { + position: absolute; + right: var(--kmodal-close-width); + top: var(--kmodal-close-height); + width: var(--kmodal-close-width); + height: var(--kmodal-close-height); + cursor: pointer; +} +body .ui-dialog .tab-content .charsheet .kmodal__close:after, +body .ui-dialog .tab-content .charsheet .kmodal__close:before { + content: ""; + position: absolute; + width: var(--kmodal-close-line-thickness); + height: var(--kmodal-close-line-length); + background: var(--kmodal-close-color); + display: block; + transform: rotate(45deg); + left: 50%; + margin: -3px 0 0 -1px; + top: 0; +} +body .ui-dialog .tab-content .charsheet .kmodal__close:hover:after, +body .ui-dialog .tab-content .charsheet .kmodal__close:hover:before { + background: var(--kmodal-close-hover-color); +} +body .ui-dialog .tab-content .charsheet .kmodal__close:before { + transform: rotate(-45deg); +} +body .ui-dialog .tab-content .charsheet .kmodal__checkbox:not(:checked) + .kmodal__outer { + display: none; +} +body .ui-dialog .tab-content .charsheet .kmodal__checkbox:checked + .kmodal__outer { + opacity: 1; + visibility: visible; +} +body .ui-dialog .tab-content .charsheet .kmodal__checkbox:checked + .kmodal__outer .kmodal__inner { + top: 0; +} +body .ui-dialog .tab-content .charsheet .tabs__container:not(.k-active-tab) { + display: none !important; +} +body .ui-dialog .tab-content .charsheet .tabs__nav-item { + list-style: none; +} +body .ui-dialog .tab-content .charsheet .tabs__nav-list { + display: flex; +} body .ui-dialog .tab-content .charsheet .display-control--inverted:checked + .controlled-display, body .ui-dialog .tab-content .charsheet .display-control:not(:checked) + .controlled-display { display: none; } @@ -3253,6 +3359,53 @@ body .ui-dialog .tab-content .charsheet .mancer-create .modal-button--thick { body .ui-dialog .tab-content .charsheet .modal-button--content { place-self: center start; } +body .ui-dialog .tab-content .charsheet .progress-spinner { + position: absolute; + z-index: 1000; + inset: 0; + background-color: color-mix(in lch, black, transparent 30%); + display: grid; + place-items: center; +} +body .ui-dialog .tab-content .charsheet .progress-spinner.inactive { + display: none; +} +body .ui-dialog .tab-content .charsheet .progress-spinner:not(.inactive) .loader, body .ui-dialog .tab-content .charsheet .progress-spinner:not(.inactive) .loader:before, body .ui-dialog .tab-content .charsheet .progress-spinner:not(.inactive) .loader:after { + border-radius: 50%; + width: 2.5em; + height: 2.5em; + animation-fill-mode: both; + animation: bblFadInOut 1.8s infinite ease-in-out; +} +body .ui-dialog .tab-content .charsheet .progress-spinner:not(.inactive) .loader { + color: var(--primary-color); + font-size: 7px; + position: relative; + text-indent: -9999em; + transform: translateZ(0); + animation-delay: -0.16s; +} +body .ui-dialog .tab-content .charsheet .progress-spinner:not(.inactive) .loader:before, +body .ui-dialog .tab-content .charsheet .progress-spinner:not(.inactive) .loader:after { + content: ""; + position: absolute; + top: 0; +} +body .ui-dialog .tab-content .charsheet .progress-spinner:not(.inactive) .loader:before { + left: -3.5em; + animation-delay: -0.32s; +} +body .ui-dialog .tab-content .charsheet .progress-spinner:not(.inactive) .loader:after { + left: 3.5em; +} +@keyframes bblFadInOut { + 0%, 80%, 100% { + box-shadow: 0 2.5em 0 -1.3em; + } + 40% { + box-shadow: 0 2.5em 0 0; + } +} body .ui-dialog .tab-content .charsheet .mancer-nav-container { pointer-events: none; } diff --git a/dcc_official/dcc.html b/dcc_official/dcc.html index 383fc5d087..858b0dd1ac 100644 --- a/dcc_official/dcc.html +++ b/dcc_official/dcc.html @@ -2,6 +2,7 @@ + .
    @@ -1978,6 +1982,7 @@ +
    @@ -2243,11 +2248,12 @@
    {{computed::fumble}}
    {{computed::success}}
    {{computed::failure}}
    {{#author}} -
    {{author}}
    {{/author}} +
    {{#characterid}}[{{author}}](http://journal.roll20.net/character/{{characterid}}){{/characterid}}{{^characterid}}{{author}}{{/characterid}} +
    {{/author}}
    {{title}}
    {{#subtitle}} -
    {{subtitle}}
    {{/subtitle}} -
    : {{computed::critical}}
    -
    +
    {{subtitle}}
    {{/subtitle}}{{#^rollTotal() computed::critical 0}} +
    : {{computed::critical}}
    {{/^rollTotal() computed::critical 0}}{{#^rollTotal() computed::fumble 0}} +
    {{/^rollTotal() computed::fumble 0}}
    @@ -2258,7 +2264,10 @@
    {{formula3}}
    {{/formula3}}
    {{#description}}
    {{description}}
    {{/description}}{{#computeDescription}} -
    {{computed::computeDescription}}
    {{/computeDescription}} +
    {{computed::computeDescription}}
    {{/computeDescription}}{{#damagebutton}} +
    {{damagebutton}}
    {{/damagebutton}}{{#characterid}} +
    {{#^rollTotal() computed::tablecall 0}}{{#^rollTotal() computed::critical 0}}[](~{{characterid}}|{{computed::tablecall}}){{/^rollTotal() computed::critical 0}}{{#^rollTotal() computed::fumble 0}}[](~{{characterid}}|{{computed::tablecall}}){{/^rollTotal() computed::fumble 0}}{{/^rollTotal() computed::tablecall 0}} +
    {{/characterid}}
    @@ -2273,7 +2282,7 @@ const k = (function(){ const kFuncs = {}; - const cascades = {"attr_character_name":{"name":"character_name","type":"text","defaultValue":"","affects":[],"triggeredFuncs":["setActionCalls"],"listenerFunc":"accessSheet","listener":"change:character_name"},"act_k-network-call":{"name":"k-network-call","type":"action","triggeredFuncs":["kReceive"],"affects":[],"addFuncs":[],"listener":"clicked:k-network-call","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_character_id":{"name":"character_id","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:character_id","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_script_character_name":{"name":"script_character_name","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:script_character_name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_sheet_version":{"name":"sheet_version","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:sheet_version","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_push":{"name":"push","type":"action","triggeredFuncs":["pushRoll"],"affects":[],"addFuncs":[],"listener":"clicked:push","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_disabled":{"name":"rollmodal_disabled","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_disabled","listenerFunc":"accessSheet","defaultValue":1,"calculation":"","initialFunc":"","formula":""},"attr_is_npc":{"name":"is_npc","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:is_npc","listenerFunc":"accessSheet","defaultValue":1,"calculation":"","initialFunc":"","formula":""},"act_open-table":{"name":"open-table","type":"action","triggeredFuncs":["toggleMancer"],"affects":[],"addFuncs":[],"listener":"clicked:open-table","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"tables"},"act_refresh-mancer":{"name":"refresh-mancer","type":"action","triggeredFuncs":["toggleMancer"],"affects":[],"addFuncs":[],"listener":"clicked:refresh-mancer","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"refresh"},"attr_drop_name":{"name":"drop_name","type":"hidden","triggeredFuncs":["handleCompendiumDrop"],"affects":[],"addFuncs":[],"listener":"change:drop_name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_drop_data":{"name":"drop_data","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:drop_data","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_kmodal-mancer":{"name":"kmodal-mancer","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:kmodal-mancer","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_mancer_stage":{"name":"mancer_stage","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_stage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_confirm_wipe":{"name":"mancer_confirm_wipe","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_confirm_wipe","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_mancer-toggle":{"name":"mancer-toggle","type":"action","triggeredFuncs":["resetWipe","toggleMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-toggle","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-wipe":{"name":"mancer-wipe","type":"action","triggeredFuncs":["wipeCharacter"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-wipe","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"create"},"attr_mancer_wipe_button_text":{"name":"mancer_wipe_button_text","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_wipe_button_text","listenerFunc":"accessSheet","defaultValue":"wipe character data","calculation":"","initialFunc":"","formula":""},"act_mancer-create":{"name":"mancer-create","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-create","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"create"},"act_mancer-randomize-new":{"name":"mancer-randomize-new","type":"action","triggeredFuncs":["rollAbilityScores","determineOccupation","rollHP","rollCoinage"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-randomize-new","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-roll-ability-scores":{"name":"mancer-roll-ability-scores","type":"action","triggeredFuncs":["rollAbilityScores"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-roll-ability-scores","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-strength":{"name":"roll-pc-strength","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-strength","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"strength_modifier"}},"attr_strength_modifier_mod":{"name":"strength_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["strength_modifier","strength modifier"],"addFuncs":[],"listener":"change:strength_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_strength_modifier":{"name":"strength_modifier","type":"hidden","triggeredFuncs":[],"affects":["melee_attack","melee_damage"],"addFuncs":[],"listener":"change:strength_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_strength_total":{"name":"strength_total","type":"hidden","triggeredFuncs":[],"affects":["strength_modifier"],"addFuncs":[],"listener":"change:strength_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_strength_mod":{"name":"strength_mod","type":"hidden","triggeredFuncs":[],"affects":["strength_total"],"addFuncs":[],"listener":"change:strength_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_strength":{"name":"strength","type":"hidden","triggeredFuncs":[],"affects":["strength_total"],"addFuncs":[],"listener":"change:strength","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-agility":{"name":"roll-pc-agility","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-agility","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"agility_modifier"}},"attr_agility_modifier_mod":{"name":"agility_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["agility_modifier","agility modifier"],"addFuncs":[],"listener":"change:agility_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_agility_modifier":{"name":"agility_modifier","type":"hidden","triggeredFuncs":[],"affects":["ref_save","armor_class","missile_attack","initiative","sneak_silently","hide_in_shadows","pick_pocket","climb_sheer_surfaces","pick_lock","disable_trap","forge_document"],"addFuncs":[],"listener":"change:agility_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_agility_total":{"name":"agility_total","type":"hidden","triggeredFuncs":[],"affects":["agility_modifier"],"addFuncs":[],"listener":"change:agility_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_agility_mod":{"name":"agility_mod","type":"hidden","triggeredFuncs":[],"affects":["agility_total"],"addFuncs":[],"listener":"change:agility_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_agility":{"name":"agility","type":"hidden","triggeredFuncs":[],"affects":["agility_total"],"addFuncs":[],"listener":"change:agility","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-stamina":{"name":"roll-pc-stamina","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-stamina","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"stamina_modifier"}},"attr_stamina_modifier_mod":{"name":"stamina_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["stamina_modifier","stamina modifier"],"addFuncs":[],"listener":"change:stamina_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_stamina_modifier":{"name":"stamina_modifier","type":"hidden","triggeredFuncs":[],"affects":["fort_save"],"addFuncs":[],"listener":"change:stamina_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_stamina_total":{"name":"stamina_total","type":"hidden","triggeredFuncs":[],"affects":["stamina_modifier"],"addFuncs":[],"listener":"change:stamina_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_stamina_mod":{"name":"stamina_mod","type":"hidden","triggeredFuncs":[],"affects":["stamina_total"],"addFuncs":[],"listener":"change:stamina_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_stamina":{"name":"stamina","type":"hidden","triggeredFuncs":[],"affects":["stamina_total"],"addFuncs":[],"listener":"change:stamina","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-personality":{"name":"roll-pc-personality","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-personality","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"personality_modifier"}},"attr_personality_modifier_mod":{"name":"personality_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["personality_modifier","personality modifier"],"addFuncs":[],"listener":"change:personality_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_personality_modifier":{"name":"personality_modifier","type":"hidden","triggeredFuncs":[],"affects":["will_save","disguise_self","spell_check"],"addFuncs":[],"listener":"change:personality_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_personality_total":{"name":"personality_total","type":"hidden","triggeredFuncs":[],"affects":["personality_modifier"],"addFuncs":[],"listener":"change:personality_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_personality_mod":{"name":"personality_mod","type":"hidden","triggeredFuncs":[],"affects":["personality_total"],"addFuncs":[],"listener":"change:personality_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_personality":{"name":"personality","type":"hidden","triggeredFuncs":[],"affects":["personality_total"],"addFuncs":[],"listener":"change:personality","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-luck":{"name":"roll-pc-luck","type":"action","triggeredFuncs":["genericActionRoll","luckRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-luck","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"luck_modifier"}},"attr_luck_modifier_mod":{"name":"luck_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["luck_modifier","luck modifier"],"addFuncs":[],"listener":"change:luck_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_luck_modifier":{"name":"luck_modifier","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:luck_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_luck_total":{"name":"luck_total","type":"hidden","triggeredFuncs":[],"affects":["luck_modifier"],"addFuncs":[],"listener":"change:luck_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_luck_mod":{"name":"luck_mod","type":"hidden","triggeredFuncs":[],"affects":["luck_total"],"addFuncs":[],"listener":"change:luck_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_luck":{"name":"luck","type":"hidden","triggeredFuncs":[],"affects":["luck_total"],"addFuncs":[],"listener":"change:luck","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-intelligence":{"name":"roll-pc-intelligence","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-intelligence","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"intelligence_modifier"}},"attr_intelligence_modifier_mod":{"name":"intelligence_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["intelligence_modifier","intelligence modifier"],"addFuncs":[],"listener":"change:intelligence_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_intelligence_modifier":{"name":"intelligence_modifier","type":"hidden","triggeredFuncs":[],"affects":["base_spell_check","find_trap","read_languages","cast_spell_from_scroll"],"addFuncs":[],"listener":"change:intelligence_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_intelligence_total":{"name":"intelligence_total","type":"hidden","triggeredFuncs":[],"affects":["intelligence_modifier"],"addFuncs":[],"listener":"change:intelligence_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_intelligence_mod":{"name":"intelligence_mod","type":"hidden","triggeredFuncs":[],"affects":["intelligence_total"],"addFuncs":[],"listener":"change:intelligence_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_intelligence":{"name":"intelligence","type":"hidden","triggeredFuncs":[],"affects":["intelligence_total"],"addFuncs":[],"listener":"change:intelligence","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-roll-birth-augur":{"name":"mancer-roll-birth-augur","type":"action","triggeredFuncs":["rollAugur"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-roll-birth-augur","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_augur_mod":{"name":"mancer_augur_mod","type":"hidden","triggeredFuncs":[],"affects":["augur"],"addFuncs":[],"listener":"change:mancer_augur_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_augur":{"name":"mancer_augur","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_augur","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-roll-hp":{"name":"mancer-roll-hp","type":"action","triggeredFuncs":["rollHP"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-roll-hp","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_hp_mod":{"name":"mancer_hp_mod","type":"hidden","triggeredFuncs":[],"affects":["hp"],"addFuncs":[],"listener":"change:mancer_hp_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_hp":{"name":"mancer_hp","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_hp","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-determine-occupation":{"name":"mancer-determine-occupation","type":"action","triggeredFuncs":["determineOccupation"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-determine-occupation","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_occupation_mod":{"name":"mancer_occupation_mod","type":"hidden","triggeredFuncs":[],"affects":["occupation"],"addFuncs":[],"listener":"change:mancer_occupation_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_occupation":{"name":"mancer_occupation","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_occupation","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_weapon_mod":{"name":"mancer_weapon_mod","type":"hidden","triggeredFuncs":[],"affects":["weapon"],"addFuncs":[],"listener":"change:mancer_weapon_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_weapon":{"name":"mancer_weapon","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_weapon","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_trade_goods_mod":{"name":"mancer_trade_goods_mod","type":"hidden","triggeredFuncs":[],"affects":["trade_goods","trade goods"],"addFuncs":[],"listener":"change:mancer_trade_goods_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_trade_goods":{"name":"mancer_trade_goods","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_trade_goods","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_alignment_mod":{"name":"alignment_mod","type":"hidden","triggeredFuncs":[],"affects":["alignment"],"addFuncs":[],"listener":"change:alignment_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_alignment":{"name":"alignment","type":"hidden","triggeredFuncs":[],"affects":["title","backstab","sneak_silently","hide_in_shadows","pick_pocket","climb_sheer_surfaces","pick_lock","find_trap","disable_trap","forge_document","disguise_self","read_languages","handle_poison","cast_spell_from_scroll"],"addFuncs":[],"listener":"change:alignment","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["lawful","chaotic","neutral"]},"act_mancer-roll-coinage":{"name":"mancer-roll-coinage","type":"action","triggeredFuncs":["rollCoinage"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-roll-coinage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_starting_coin_mod":{"name":"mancer_starting_coin_mod","type":"hidden","triggeredFuncs":[],"affects":["starting_coin","starting coin"],"addFuncs":[],"listener":"change:mancer_starting_coin_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_starting_coin":{"name":"mancer_starting_coin","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_starting_coin","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-new-finish":{"name":"mancer-new-finish","type":"action","triggeredFuncs":["createCharacter"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-new-finish","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_class":{"name":"mancer_class","type":"select","triggeredFuncs":["setMancerClass"],"affects":[],"addFuncs":[],"listener":"change:mancer_class","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_ability_map":{"name":"repeating_mancer-class-options_$x_ability_map","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:ability_map","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_name":{"name":"repeating_mancer-class-options_$x_name","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_description":{"name":"repeating_mancer-class-options_$x_description","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:description","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_row_id":{"name":"repeating_mancer-class-options_$x_row_id","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:row_id","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_mancer_sub_field_control":{"name":"repeating_mancer-class-options_$x_mancer_sub_field_control","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:mancer_sub_field_control","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_select":{"name":"repeating_mancer-class-options_$x_select","type":"select","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:select","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_row_id":{"name":"repeating_mancer-class-table_$x_row_id","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:row_id","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_ability_map":{"name":"repeating_mancer-class-table_$x_ability_map","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:ability_map","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_name":{"name":"repeating_mancer-class-table_$x_name","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_1":{"name":"repeating_mancer-class-table_$x_value_1","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_1","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_2":{"name":"repeating_mancer-class-table_$x_value_2","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_2","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_3":{"name":"repeating_mancer-class-table_$x_value_3","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_3","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_4":{"name":"repeating_mancer-class-table_$x_value_4","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_4","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_5":{"name":"repeating_mancer-class-table_$x_value_5","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_5","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_6":{"name":"repeating_mancer-class-table_$x_value_6","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_6","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_7":{"name":"repeating_mancer-class-table_$x_value_7","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_7","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_8":{"name":"repeating_mancer-class-table_$x_value_8","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_8","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_9":{"name":"repeating_mancer-class-table_$x_value_9","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_9","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_10":{"name":"repeating_mancer-class-table_$x_value_10","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_10","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-class-finish":{"name":"mancer-class-finish","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-class-finish","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"level"},"attr_level_mod":{"name":"level_mod","type":"hidden","triggeredFuncs":[],"affects":["level"],"addFuncs":[],"listener":"change:level_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_level":{"name":"level","type":"hidden","triggeredFuncs":["levelUpButtonDisplay"],"affects":["ref_save","fort_save","will_save","attack","initiative","action_dice","crit_die","crit_table","luck_die","backstab","sneak_silently","hide_in_shadows","pick_pocket","climb_sheer_surfaces","pick_lock","find_trap","disable_trap","forge_document","disguise_self","read_languages","handle_poison","cast_spell_from_scroll","critical_threat_range","title","stealth","base_spell_check","spell_check"],"addFuncs":[],"listener":"change:level","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateLevel","initialFunc":"","formula":""},"attr_mancer_level":{"name":"mancer_level","type":"number","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_level","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"setLevelDiff","formula":""},"attr_hit_points_max_mod":{"name":"hit_points_max_mod","type":"hidden","triggeredFuncs":[],"affects":["hit_points_max","hit points max"],"addFuncs":[],"listener":"change:hit_points_max_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_hit_points_max":{"name":"hit_points_max","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:hit_points_max","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-change-class":{"name":"mancer-change-class","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-change-class","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"class"},"attr_mancer_has_spells":{"name":"mancer_has_spells","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_has_spells","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_mancer-finish-level-up":{"name":"mancer-finish-level-up","type":"action","triggeredFuncs":["levelUp"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-finish-level-up","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-select-spells":{"name":"mancer-select-spells","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-select-spells","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"spells"},"attr_repeating_mancer-spells_$x_level":{"name":"repeating_mancer-spells_$x_level","type":"number","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:level","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_class":{"name":"repeating_mancer-spells_$x_class","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:class","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_compendium_reference":{"name":"repeating_mancer-spells_$x_compendium_reference","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:compendium_reference","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_type":{"name":"repeating_mancer-spells_$x_type","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:type","listenerFunc":"accessSheet","defaultValue":"content","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_selectable":{"name":"repeating_mancer-spells_$x_selectable","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:selectable","listenerFunc":"accessSheet","defaultValue":1,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_selected":{"name":"repeating_mancer-spells_$x_selected","type":"checkbox","triggeredFuncs":["updateMancerSpellSelections"],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:selected","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_name":{"name":"repeating_mancer-spells_$x_name","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_compendium_link":{"name":"repeating_mancer-spells_$x_compendium_link","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:compendium_link","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_label":{"name":"repeating_mancer-spells_$x_label","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:label","listenerFunc":"accessSheet","defaultValue":"level","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_chosen":{"name":"repeating_mancer-spells_$x_chosen","type":"number","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:chosen","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_chosen_max":{"name":"repeating_mancer-spells_$x_chosen_max","type":"number","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:chosen_max","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"fieldset_repeating_rollable-tables":{"name":"repeating_rollable-tables","type":"fieldset","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"remove:repeating_rollable-tables","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_rollable-tables_$x_name":{"name":"repeating_rollable-tables_$x_name","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_rollable-tables:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_rollable-tables_$x_action":{"name":"repeating_rollable-tables_$x_action","type":"action","triggeredFuncs":["rollSheetTable"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_rollable-tables:action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_rollable-tables_$x_action":{"name":"repeating_rollable-tables_$x_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_rollable-tables:action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_rollable-tables_$x_die":{"name":"repeating_rollable-tables_$x_die","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_rollable-tables:die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_rollable-tables_$x_bonus":{"name":"repeating_rollable-tables_$x_bonus","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_rollable-tables:bonus","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_class":{"name":"class","type":"hidden","triggeredFuncs":[],"affects":["hit_die","level","ref_save","fort_save","will_save","attack","initiative","action_dice","crit_die","crit_table","luck_die","backstab","sneak_silently","hide_in_shadows","pick_pocket","climb_sheer_surfaces","pick_lock","find_trap","disable_trap","forge_document","disguise_self","read_languages","handle_poison","cast_spell_from_scroll","critical_threat_range","title","speed","stealth","base_spell_check","spell_check"],"addFuncs":[],"listener":"change:class","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["zero","cleric","dwarf","elf","halfling","thief","warrior","wizard"]},"attr_character_name_mod":{"name":"character_name_mod","type":"hidden","triggeredFuncs":[],"affects":["character_name","character name"],"addFuncs":[],"listener":"change:character_name_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_title_mod":{"name":"title_mod","type":"hidden","triggeredFuncs":[],"affects":["title"],"addFuncs":[],"listener":"change:title_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_title":{"name":"title","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:title","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateTitleValue","initialFunc":"","formula":""},"attr_title_overwritten":{"name":"title_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:title_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_occupation_mod":{"name":"occupation_mod","type":"hidden","triggeredFuncs":[],"affects":["occupation"],"addFuncs":[],"listener":"change:occupation_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_occupation":{"name":"occupation","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:occupation","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_class_mod":{"name":"class_mod","type":"hidden","triggeredFuncs":[],"affects":["class"],"addFuncs":[],"listener":"change:class_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_speed_mod":{"name":"speed_mod","type":"hidden","triggeredFuncs":[],"affects":["speed"],"addFuncs":[],"listener":"change:speed_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_speed":{"name":"speed","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:speed","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSpeedValue","initialFunc":"","formula":""},"attr_birth_augur_mod":{"name":"birth_augur_mod","type":"hidden","triggeredFuncs":[],"affects":["birth_augur","birth augur"],"addFuncs":[],"listener":"change:birth_augur_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_birth_augur":{"name":"birth_augur","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:birth_augur","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-level-up":{"name":"mancer-level-up","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-level-up","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"level"},"act_mancer-first-level":{"name":"mancer-first-level","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-first-level","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"class"},"attr_xp_mod":{"name":"xp_mod","type":"hidden","triggeredFuncs":[],"affects":["xp"],"addFuncs":[],"listener":"change:xp_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_xp":{"name":"xp","type":"hidden","triggeredFuncs":["levelUpButtonDisplay"],"affects":[],"addFuncs":[],"listener":"change:xp","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_armor_class_mod":{"name":"armor_class_mod","type":"hidden","triggeredFuncs":[],"affects":["armor_class","armor class"],"addFuncs":[],"listener":"change:armor_class_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_armor_class":{"name":"armor_class","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:armor_class","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateACValue","initialFunc":"","formula":""},"attr_armor_class_overwritten":{"name":"armor_class_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:armor_class_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_hit_points_mod":{"name":"hit_points_mod","type":"hidden","triggeredFuncs":[],"affects":["hit_points","hit points"],"addFuncs":[],"listener":"change:hit_points_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_hit_points":{"name":"hit_points","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:hit_points","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-hit-die":{"name":"roll-pc-hit-die","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-hit-die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_hit_die_mod":{"name":"hit_die_mod","type":"hidden","triggeredFuncs":[],"affects":["hit_die","hit die"],"addFuncs":[],"listener":"change:hit_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_hit_die":{"name":"hit_die","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:hit_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateHitDie","initialFunc":"","formula":""},"attr_hit_die_overwritten":{"name":"hit_die_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:hit_die_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-initiative":{"name":"roll-pc-initiative","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-initiative","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_initiative_mod":{"name":"initiative_mod","type":"hidden","triggeredFuncs":[],"affects":["initiative"],"addFuncs":[],"listener":"change:initiative_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_initiative":{"name":"initiative","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:initiative","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateInitiativeValue","initialFunc":"","formula":""},"attr_initiative_overwritten":{"name":"initiative_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:initiative_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_action_dice_mod":{"name":"action_dice_mod","type":"hidden","triggeredFuncs":[],"affects":["action_dice","action dice"],"addFuncs":[],"listener":"change:action_dice_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_action_dice":{"name":"action_dice","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:action_dice","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateActionDiceValue","initialFunc":"","formula":""},"attr_action_dice_overwritten":{"name":"action_dice_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:action_dice_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_deed_die_result":{"name":"deed_die_result","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_attack_bonus","repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:deed_die_result","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-deed":{"name":"roll-pc-deed","type":"action","triggeredFuncs":["deedRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-deed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_attack_mod":{"name":"attack_mod","type":"hidden","triggeredFuncs":[],"affects":["attack"],"addFuncs":[],"listener":"change:attack_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_attack":{"name":"attack","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["melee_attack","missile_attack","deed_die"],"addFuncs":[],"listener":"change:attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateAttackModifier","initialFunc":"","formula":""},"attr_attack_overwritten":{"name":"attack_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:attack_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-attack":{"name":"roll-pc-attack","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"act_roll-pc-crit-die":{"name":"roll-pc-crit-die","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-crit-die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_crit_die_mod":{"name":"crit_die_mod","type":"hidden","triggeredFuncs":[],"affects":["crit_die","crit die"],"addFuncs":[],"listener":"change:crit_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_crit_die":{"name":"crit_die","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:crit_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateCritDieValue","initialFunc":"","formula":""},"attr_crit_die_overwritten":{"name":"crit_die_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:crit_die_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_crit_table_mod":{"name":"crit_table_mod","type":"hidden","triggeredFuncs":[],"affects":["crit_table","crit table"],"addFuncs":[],"listener":"change:crit_table_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_crit_table":{"name":"crit_table","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["crit_die","crit die"],"addFuncs":[],"listener":"change:crit_table","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateCritTableValue","initialFunc":"","formula":"","choices":["I","II","III","IV","V"]},"attr_crit_table_overwritten":{"name":"crit_table_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:crit_table_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-ref-save":{"name":"roll-pc-ref-save","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-ref-save","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_ref_save_mod":{"name":"ref_save_mod","type":"hidden","triggeredFuncs":[],"affects":["ref_save","ref save"],"addFuncs":[],"listener":"change:ref_save_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_ref_save":{"name":"ref_save","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:ref_save","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSavingModifier","initialFunc":"","formula":""},"attr_ref_save_overwritten":{"name":"ref_save_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:ref_save_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-fort-save":{"name":"roll-pc-fort-save","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-fort-save","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_fort_save_mod":{"name":"fort_save_mod","type":"hidden","triggeredFuncs":[],"affects":["fort_save","fort save"],"addFuncs":[],"listener":"change:fort_save_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_fort_save":{"name":"fort_save","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:fort_save","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSavingModifier","initialFunc":"","formula":""},"attr_fort_save_overwritten":{"name":"fort_save_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:fort_save_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-will-save":{"name":"roll-pc-will-save","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-will-save","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_will_save_mod":{"name":"will_save_mod","type":"hidden","triggeredFuncs":[],"affects":["will_save","will save"],"addFuncs":[],"listener":"change:will_save_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_will_save":{"name":"will_save","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:will_save","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSavingModifier","initialFunc":"","formula":""},"attr_will_save_overwritten":{"name":"will_save_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:will_save_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_luck_max_mod":{"name":"luck_max_mod","type":"hidden","triggeredFuncs":[],"affects":["luck_max","luck max"],"addFuncs":[],"listener":"change:luck_max_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_luck_max":{"name":"luck_max","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:luck_max","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_lucky_roll_mod":{"name":"lucky_roll_mod","type":"hidden","triggeredFuncs":[],"affects":["lucky_roll","lucky roll"],"addFuncs":[],"listener":"change:lucky_roll_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_lucky_roll":{"name":"lucky_roll","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lucky_roll","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-melee-attack":{"name":"roll-pc-melee-attack","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-melee-attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_melee_attack_mod":{"name":"melee_attack_mod","type":"hidden","triggeredFuncs":[],"affects":["melee_attack","melee attack"],"addFuncs":[],"listener":"change:melee_attack_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_melee_attack":{"name":"melee_attack","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["repeating_weapons_$x_attack_bonus","repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:melee_attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMeleeAndMissileModifiers","initialFunc":"","formula":""},"attr_melee_attack_overwritten":{"name":"melee_attack_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:melee_attack_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_melee_damage_mod":{"name":"melee_damage_mod","type":"hidden","triggeredFuncs":[],"affects":["melee_damage","melee damage"],"addFuncs":[],"listener":"change:melee_damage_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_melee_damage":{"name":"melee_damage","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:melee_damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMeleeDamage","initialFunc":"","formula":""},"attr_melee_damage_overwritten":{"name":"melee_damage_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:melee_damage_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-missile-attack":{"name":"roll-pc-missile-attack","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-missile-attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_missile_attack_mod":{"name":"missile_attack_mod","type":"hidden","triggeredFuncs":[],"affects":["missile_attack","missile attack"],"addFuncs":[],"listener":"change:missile_attack_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_missile_attack":{"name":"missile_attack","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["repeating_weapons_$x_attack_bonus","repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:missile_attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMeleeAndMissileModifiers","initialFunc":"","formula":""},"attr_missile_attack_overwritten":{"name":"missile_attack_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:missile_attack_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_missile_damage_mod":{"name":"missile_damage_mod","type":"hidden","triggeredFuncs":[],"affects":["missile_damage","missile damage"],"addFuncs":[],"listener":"change:missile_damage_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_missile_damage":{"name":"missile_damage","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:missile_damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_character_avatar":{"name":"character_avatar","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:character_avatar","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_languages_mod":{"name":"languages_mod","type":"hidden","triggeredFuncs":[],"affects":["languages"],"addFuncs":[],"listener":"change:languages_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_languages":{"name":"languages","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:languages","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_weapon":{"name":"weapon","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:weapon","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_crit-action":{"name":"crit-action","type":"action","triggeredFuncs":["rollCrit"],"affects":[],"addFuncs":[],"listener":"clicked:crit-action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_crit_action":{"name":"crit_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:crit_action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_fumble-action":{"name":"fumble-action","type":"action","triggeredFuncs":["rollFumble"],"affects":[],"addFuncs":[],"listener":"clicked:fumble-action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_fumble_action":{"name":"fumble_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:fumble_action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_add-weapons":{"name":"add-weapons","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-weapons","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_active":{"name":"repeating_weapons_$x_active","type":"hidden","triggeredFuncs":[],"affects":["initiative"],"addFuncs":[],"listener":"change:repeating_weapons:active","listenerFunc":"accessSheet","defaultValue":"1","calculation":"calculateLinkedEquipment","initialFunc":"","formula":""},"attr_repeating_weapons_$x_name_mod":{"name":"repeating_weapons_$x_name_mod","type":"hidden","triggeredFuncs":[],"affects":["name"],"addFuncs":[],"listener":"change:repeating_weapons:name_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_name":{"name":"repeating_weapons_$x_name","type":"hidden","triggeredFuncs":["calculateEquipmentLinkedItem"],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_weapons_$x_roll-pc-attack-bonus":{"name":"repeating_weapons_$x_roll-pc-attack-bonus","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_weapons:roll-pc-attack-bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_repeating_weapons_$x_attack_bonus_mod":{"name":"repeating_weapons_$x_attack_bonus_mod","type":"hidden","triggeredFuncs":[],"affects":["attack_bonus","attack bonus"],"addFuncs":[],"listener":"change:repeating_weapons:attack_bonus_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_attack_bonus":{"name":"repeating_weapons_$x_attack_bonus","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:attack_bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateWeaponAttack","initialFunc":"","formula":""},"act_repeating_weapons_$x_roll-pc-damage":{"name":"repeating_weapons_$x_roll-pc-damage","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_weapons:roll-pc-damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_damage_mod":{"name":"repeating_weapons_$x_damage_mod","type":"hidden","triggeredFuncs":[],"affects":["damage"],"addFuncs":[],"listener":"change:repeating_weapons:damage_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_damage":{"name":"repeating_weapons_$x_damage","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateWeaponDamage","initialFunc":"","formula":""},"attr_repeating_weapons_$x_type_mod":{"name":"repeating_weapons_$x_type_mod","type":"hidden","triggeredFuncs":[],"affects":["type"],"addFuncs":[],"listener":"change:repeating_weapons:type_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_type":{"name":"repeating_weapons_$x_type","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_attack_bonus","repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:repeating_weapons:type","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["melee","missile"]},"attr_repeating_weapons_$x_range_mod":{"name":"repeating_weapons_$x_range_mod","type":"hidden","triggeredFuncs":[],"affects":["range"],"addFuncs":[],"listener":"change:repeating_weapons:range_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_range":{"name":"repeating_weapons_$x_range","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:range","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_ammunition_mod":{"name":"repeating_weapons_$x_ammunition_mod","type":"hidden","triggeredFuncs":[],"affects":["ammunition"],"addFuncs":[],"listener":"change:repeating_weapons:ammunition_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_ammunition":{"name":"repeating_weapons_$x_ammunition","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:ammunition","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_notes_mod":{"name":"repeating_weapons_$x_notes_mod","type":"hidden","triggeredFuncs":[],"affects":["notes"],"addFuncs":[],"listener":"change:repeating_weapons:notes_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_notes":{"name":"repeating_weapons_$x_notes","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:notes","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"fieldset_repeating_weapons":{"name":"repeating_weapons","type":"fieldset","triggeredFuncs":["removeEquipmentLinkedItem"],"affects":[],"addFuncs":["addEquipmentLinkedItem"],"listener":"remove:repeating_weapons","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_linked":{"name":"repeating_weapons_$x_linked","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:linked","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_attack_bonus_base_mod":{"name":"repeating_weapons_$x_attack_bonus_base_mod","type":"hidden","triggeredFuncs":[],"affects":["attack_bonus_base","attack bonus base"],"addFuncs":[],"listener":"change:repeating_weapons:attack_bonus_base_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_attack_bonus_base":{"name":"repeating_weapons_$x_attack_bonus_base","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_attack_bonus"],"addFuncs":[],"listener":"change:repeating_weapons:attack_bonus_base","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_damage_base_mod":{"name":"repeating_weapons_$x_damage_base_mod","type":"hidden","triggeredFuncs":[],"affects":["damage_base","damage base"],"addFuncs":[],"listener":"change:repeating_weapons:damage_base_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_damage_base":{"name":"repeating_weapons_$x_damage_base","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:repeating_weapons:damage_base","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_two_handed_mod":{"name":"repeating_weapons_$x_two_handed_mod","type":"hidden","triggeredFuncs":[],"affects":["two_handed","two handed"],"addFuncs":[],"listener":"change:repeating_weapons:two_handed_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_two_handed":{"name":"repeating_weapons_$x_two_handed","type":"hidden","triggeredFuncs":[],"affects":["initiative"],"addFuncs":[],"listener":"change:repeating_weapons:two_handed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["no","yes"]},"attr_treasure_mod":{"name":"treasure_mod","type":"hidden","triggeredFuncs":[],"affects":["treasure"],"addFuncs":[],"listener":"change:treasure_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_treasure":{"name":"treasure","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:treasure","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_equipment":{"name":"equipment","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:equipment","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_add-equipment":{"name":"add-equipment","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-equipment","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_active":{"name":"repeating_equipment_$x_active","type":"checkbox","triggeredFuncs":["toggleEquipment"],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:active","listenerFunc":"accessSheet","defaultValue":1,"calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_name":{"name":"repeating_equipment_$x_name","type":"span","triggeredFuncs":["calculateEquipmentLinkedItem"],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_cost":{"name":"repeating_equipment_$x_cost","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:cost","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"fieldset_repeating_equipment":{"name":"repeating_equipment","type":"fieldset","triggeredFuncs":["removeEquipmentLinkedItem"],"affects":[],"addFuncs":[],"listener":"remove:repeating_equipment","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_type":{"name":"repeating_equipment_$x_type","type":"select","triggeredFuncs":["toggleEquipmentType"],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:type","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_modifiers":{"name":"repeating_equipment_$x_modifiers","type":"text","triggeredFuncs":["calculateModifiedAttributes"],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:modifiers","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_linked":{"name":"repeating_equipment_$x_linked","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:linked","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_armor":{"name":"armor","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:armor","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_add-armor":{"name":"add-armor","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-armor","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_active":{"name":"repeating_armor_$x_active","type":"hidden","triggeredFuncs":[],"affects":["armor_class","speed"],"addFuncs":[],"listener":"change:repeating_armor:active","listenerFunc":"accessSheet","defaultValue":"1","calculation":"calculateLinkedEquipment","initialFunc":"","formula":""},"attr_repeating_armor_$x_name_mod":{"name":"repeating_armor_$x_name_mod","type":"hidden","triggeredFuncs":[],"affects":["name"],"addFuncs":[],"listener":"change:repeating_armor:name_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_name":{"name":"repeating_armor_$x_name","type":"hidden","triggeredFuncs":["calculateEquipmentLinkedItem"],"affects":[],"addFuncs":[],"listener":"change:repeating_armor:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_ac_bonus_mod":{"name":"repeating_armor_$x_ac_bonus_mod","type":"hidden","triggeredFuncs":[],"affects":["ac_bonus","ac bonus"],"addFuncs":[],"listener":"change:repeating_armor:ac_bonus_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_ac_bonus":{"name":"repeating_armor_$x_ac_bonus","type":"hidden","triggeredFuncs":[],"affects":["armor_class"],"addFuncs":[],"listener":"change:repeating_armor:ac_bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_check_penalty_mod":{"name":"repeating_armor_$x_check_penalty_mod","type":"hidden","triggeredFuncs":[],"affects":["check_penalty","check penalty"],"addFuncs":[],"listener":"change:repeating_armor:check_penalty_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_check_penalty":{"name":"repeating_armor_$x_check_penalty","type":"hidden","triggeredFuncs":[],"affects":["base_spell_check","climb_sheer_surfaces","sneak_silently"],"addFuncs":[],"listener":"change:repeating_armor:check_penalty","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_speed_mod":{"name":"repeating_armor_$x_speed_mod","type":"hidden","triggeredFuncs":[],"affects":["speed"],"addFuncs":[],"listener":"change:repeating_armor:speed_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_speed":{"name":"repeating_armor_$x_speed","type":"hidden","triggeredFuncs":[],"affects":["speed"],"addFuncs":[],"listener":"change:repeating_armor:speed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_fumble_die_mod":{"name":"repeating_armor_$x_fumble_die_mod","type":"hidden","triggeredFuncs":[],"affects":["fumble_die","fumble die"],"addFuncs":[],"listener":"change:repeating_armor:fumble_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_fumble_die":{"name":"repeating_armor_$x_fumble_die","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_armor:fumble_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["d3","d4","d5","d6","d7","d8","d10","d12","d14","d16"]},"fieldset_repeating_armor":{"name":"repeating_armor","type":"fieldset","triggeredFuncs":["removeEquipmentLinkedItem","removeArmor"],"affects":[],"addFuncs":["addEquipmentLinkedItem"],"listener":"remove:repeating_armor","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_linked":{"name":"repeating_armor_$x_linked","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_armor:linked","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_shield_mod":{"name":"repeating_armor_$x_shield_mod","type":"hidden","triggeredFuncs":[],"affects":["shield"],"addFuncs":[],"listener":"change:repeating_armor:shield_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_shield":{"name":"repeating_armor_$x_shield","type":"hidden","triggeredFuncs":[],"affects":["armor_class"],"addFuncs":[],"listener":"change:repeating_armor:shield","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["no","yes"]},"attr_deity_mod":{"name":"deity_mod","type":"hidden","triggeredFuncs":[],"affects":["deity"],"addFuncs":[],"listener":"change:deity_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_deity":{"name":"deity","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:deity","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-base-spell-check":{"name":"roll-pc-base-spell-check","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-base-spell-check","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_base_spell_check_mod":{"name":"base_spell_check_mod","type":"hidden","triggeredFuncs":[],"affects":["base_spell_check","base spell check"],"addFuncs":[],"listener":"change:base_spell_check_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_base_spell_check":{"name":"base_spell_check","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["repeating_spells_$x_total_check"],"addFuncs":[],"listener":"change:base_spell_check","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSpellCheckModifier","initialFunc":"","formula":""},"attr_base_spell_check_overwritten":{"name":"base_spell_check_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:base_spell_check_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_undefined":{"name":"undefined","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:undefined","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_roll-pc-lay-on-hands-same":{"name":"roll-pc-lay-on-hands-same","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-lay-on-hands-same","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"spell_check","title":"lay on hands","subtitle":"(same)"}},"attr_lay_on_hands_same":{"name":"lay_on_hands_same","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lay_on_hands_same","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-lay-on-hands-adjacent":{"name":"roll-pc-lay-on-hands-adjacent","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-lay-on-hands-adjacent","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"spell_check","title":"lay on hands","subtitle":"(adjacent)"}},"attr_lay_on_hands_adjacent":{"name":"lay_on_hands_adjacent","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lay_on_hands_adjacent","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-lay-on-hands-opposed":{"name":"roll-pc-lay-on-hands-opposed","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-lay-on-hands-opposed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"spell_check","title":"lay on hands","subtitle":"(opposed)"}},"attr_lay_on_hands_opposed":{"name":"lay_on_hands_opposed","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lay_on_hands_opposed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_lucky_weapon_mod":{"name":"lucky_weapon_mod","type":"hidden","triggeredFuncs":[],"affects":["lucky_weapon","lucky weapon"],"addFuncs":[],"listener":"change:lucky_weapon_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_lucky_weapon":{"name":"lucky_weapon","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lucky_weapon","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-shield-bash":{"name":"roll-pc-shield-bash","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-shield-bash","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"actionDie":"1d14","formula":"melee_attack"}},"attr_shield_bash":{"name":"shield_bash","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:shield_bash","listenerFunc":"accessSheet","defaultValue":"1d14","calculation":"","initialFunc":"","formula":""},"attr_familiar_mod":{"name":"familiar_mod","type":"hidden","triggeredFuncs":[],"affects":["familiar"],"addFuncs":[],"listener":"change:familiar_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_familiar":{"name":"familiar","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:familiar","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_patrons_mod":{"name":"patrons_mod","type":"hidden","triggeredFuncs":[],"affects":["patrons"],"addFuncs":[],"listener":"change:patrons_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_patrons":{"name":"patrons","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:patrons","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_corruption_mod":{"name":"corruption_mod","type":"hidden","triggeredFuncs":[],"affects":["corruption"],"addFuncs":[],"listener":"change:corruption_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_corruption":{"name":"corruption","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:corruption","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_other_notes_mod":{"name":"other_notes_mod","type":"hidden","triggeredFuncs":[],"affects":["other_notes","other notes"],"addFuncs":[],"listener":"change:other_notes_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_other_notes":{"name":"other_notes","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:other_notes","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-stealth":{"name":"roll-pc-stealth","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-stealth","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_stealth_mod":{"name":"stealth_mod","type":"hidden","triggeredFuncs":[],"affects":["stealth"],"addFuncs":[],"listener":"change:stealth_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_stealth":{"name":"stealth","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:stealth","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateStealthModifier","initialFunc":"","formula":""},"attr_stealth_overwritten":{"name":"stealth_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:stealth_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-luck-die":{"name":"roll-pc-luck-die","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-luck-die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_luck_die_mod":{"name":"luck_die_mod","type":"hidden","triggeredFuncs":[],"affects":["luck_die","luck die"],"addFuncs":[],"listener":"change:luck_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_luck_die":{"name":"luck_die","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:luck_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateLuckDieValue","initialFunc":"","formula":"","choices":["d3","d4","d5","d6","d7","d8","d10","d12","d14","d16"]},"attr_luck_die_overwritten":{"name":"luck_die_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:luck_die_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-disable-trap":{"name":"roll-pc-disable-trap","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-disable-trap","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_disable_trap_mod":{"name":"disable_trap_mod","type":"hidden","triggeredFuncs":[],"affects":["disable_trap","disable trap"],"addFuncs":[],"listener":"change:disable_trap_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_disable_trap":{"name":"disable_trap","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:disable_trap","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_disable_trap_overwritten":{"name":"disable_trap_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:disable_trap_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-backstab":{"name":"roll-pc-backstab","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-backstab","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_backstab_mod":{"name":"backstab_mod","type":"hidden","triggeredFuncs":[],"affects":["backstab"],"addFuncs":[],"listener":"change:backstab_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_backstab":{"name":"backstab","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:backstab","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_backstab_overwritten":{"name":"backstab_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:backstab_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-forge-document":{"name":"roll-pc-forge-document","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-forge-document","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_forge_document_mod":{"name":"forge_document_mod","type":"hidden","triggeredFuncs":[],"affects":["forge_document","forge document"],"addFuncs":[],"listener":"change:forge_document_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_forge_document":{"name":"forge_document","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:forge_document","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_forge_document_overwritten":{"name":"forge_document_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:forge_document_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-sneak-silently":{"name":"roll-pc-sneak-silently","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-sneak-silently","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_sneak_silently_mod":{"name":"sneak_silently_mod","type":"hidden","triggeredFuncs":[],"affects":["sneak_silently","sneak silently"],"addFuncs":[],"listener":"change:sneak_silently_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_sneak_silently":{"name":"sneak_silently","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:sneak_silently","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_sneak_silently_overwritten":{"name":"sneak_silently_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:sneak_silently_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-disguise-self":{"name":"roll-pc-disguise-self","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-disguise-self","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_disguise_self_mod":{"name":"disguise_self_mod","type":"hidden","triggeredFuncs":[],"affects":["disguise_self","disguise self"],"addFuncs":[],"listener":"change:disguise_self_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_disguise_self":{"name":"disguise_self","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:disguise_self","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_disguise_self_overwritten":{"name":"disguise_self_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:disguise_self_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-hide-in-shadows":{"name":"roll-pc-hide-in-shadows","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-hide-in-shadows","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_hide_in_shadows_mod":{"name":"hide_in_shadows_mod","type":"hidden","triggeredFuncs":[],"affects":["hide_in_shadows","hide in shadows"],"addFuncs":[],"listener":"change:hide_in_shadows_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_hide_in_shadows":{"name":"hide_in_shadows","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:hide_in_shadows","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_hide_in_shadows_overwritten":{"name":"hide_in_shadows_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:hide_in_shadows_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-read-languages":{"name":"roll-pc-read-languages","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-read-languages","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_read_languages_mod":{"name":"read_languages_mod","type":"hidden","triggeredFuncs":[],"affects":["read_languages","read languages"],"addFuncs":[],"listener":"change:read_languages_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_read_languages":{"name":"read_languages","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:read_languages","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_read_languages_overwritten":{"name":"read_languages_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:read_languages_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-pick-pocket":{"name":"roll-pc-pick-pocket","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-pick-pocket","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_pick_pocket_mod":{"name":"pick_pocket_mod","type":"hidden","triggeredFuncs":[],"affects":["pick_pocket","pick pocket"],"addFuncs":[],"listener":"change:pick_pocket_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_pick_pocket":{"name":"pick_pocket","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:pick_pocket","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_pick_pocket_overwritten":{"name":"pick_pocket_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:pick_pocket_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-handle-poison":{"name":"roll-pc-handle-poison","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-handle-poison","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_handle_poison_mod":{"name":"handle_poison_mod","type":"hidden","triggeredFuncs":[],"affects":["handle_poison","handle poison"],"addFuncs":[],"listener":"change:handle_poison_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_handle_poison":{"name":"handle_poison","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:handle_poison","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_handle_poison_overwritten":{"name":"handle_poison_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:handle_poison_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-climb-sheer-surfaces":{"name":"roll-pc-climb-sheer-surfaces","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-climb-sheer-surfaces","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_climb_sheer_surfaces_mod":{"name":"climb_sheer_surfaces_mod","type":"hidden","triggeredFuncs":[],"affects":["climb_sheer_surfaces","climb sheer surfaces"],"addFuncs":[],"listener":"change:climb_sheer_surfaces_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_climb_sheer_surfaces":{"name":"climb_sheer_surfaces","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:climb_sheer_surfaces","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_climb_sheer_surfaces_overwritten":{"name":"climb_sheer_surfaces_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:climb_sheer_surfaces_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-cast-spell-from-scroll":{"name":"roll-pc-cast-spell-from-scroll","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-cast-spell-from-scroll","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_cast_spell_from_scroll_mod":{"name":"cast_spell_from_scroll_mod","type":"hidden","triggeredFuncs":[],"affects":["cast_spell_from_scroll","cast spell from scroll"],"addFuncs":[],"listener":"change:cast_spell_from_scroll_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_cast_spell_from_scroll":{"name":"cast_spell_from_scroll","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:cast_spell_from_scroll","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":"","choices":["d3","d4","d5","d6","d7","d8","d10","d12","d14","d16"]},"attr_cast_spell_from_scroll_overwritten":{"name":"cast_spell_from_scroll_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:cast_spell_from_scroll_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-pick-lock":{"name":"roll-pc-pick-lock","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-pick-lock","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_pick_lock_mod":{"name":"pick_lock_mod","type":"hidden","triggeredFuncs":[],"affects":["pick_lock","pick lock"],"addFuncs":[],"listener":"change:pick_lock_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_pick_lock":{"name":"pick_lock","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:pick_lock","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_pick_lock_overwritten":{"name":"pick_lock_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:pick_lock_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-find-trap":{"name":"roll-pc-find-trap","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-find-trap","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_find_trap_mod":{"name":"find_trap_mod","type":"hidden","triggeredFuncs":[],"affects":["find_trap","find trap"],"addFuncs":[],"listener":"change:find_trap_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_find_trap":{"name":"find_trap","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:find_trap","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_find_trap_overwritten":{"name":"find_trap_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:find_trap_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_critical_threat_range_mod":{"name":"critical_threat_range_mod","type":"hidden","triggeredFuncs":[],"affects":["critical_threat_range","critical threat range"],"addFuncs":[],"listener":"change:critical_threat_range_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_critical_threat_range":{"name":"critical_threat_range","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:critical_threat_range","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThreatRangeValue","initialFunc":"","formula":""},"attr_critical_threat_range_overwritten":{"name":"critical_threat_range_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:critical_threat_range_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_spells":{"name":"spells","type":"checkbox","triggeredFuncs":[],"affects":["repeating_spells_$x_collapse","repeating_spells_$X_collapse"],"addFuncs":[],"listener":"change:spells","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr__reporder_repeating_spells":{"name":"_reporder_repeating_spells","type":"hidden","triggeredFuncs":["moveTableRows"],"affects":[],"addFuncs":[],"listener":"change:_reporder:spells","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_add-spells":{"name":"add-spells","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-spells","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"fieldset_repeating_spells":{"name":"repeating_spells","type":"fieldset","triggeredFuncs":["removeSpell"],"affects":[],"addFuncs":["addSpell"],"listener":"remove:repeating_spells","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_collapse":{"name":"repeating_spells_$x_collapse","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:collapse","listenerFunc":"accessSheet","defaultValue":0,"calculation":"collapseSpell","initialFunc":"collapseSpellTable","formula":""},"attr_repeating_spells_$x_master":{"name":"repeating_spells_$x_master","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:master","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_compendium_reference":{"name":"repeating_spells_$x_compendium_reference","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:compendium_reference","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_row_type":{"name":"repeating_spells_$x_row_type","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:row_type","listenerFunc":"accessSheet","defaultValue":"master","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_name":{"name":"repeating_spells_$x_name","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_level":{"name":"repeating_spells_$x_level","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:level","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_total_check":{"name":"repeating_spells_$x_total_check","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:total_check","listenerFunc":"accessSheet","defaultValue":0,"calculation":"calcSpellCheck","initialFunc":"","formula":""},"act_repeating_spells_$x_roll-pc-total-check":{"name":"repeating_spells_$x_roll-pc-total-check","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_spells:roll-pc-total-check","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"manipulator":"determineSpellEffects","fields":["{{computeDescription=[[0[computed value]]]}}"]}},"attr_repeating_spells_$x_notes":{"name":"repeating_spells_$x_notes","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:notes","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_description":{"name":"repeating_spells_$x_description","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:description","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_check":{"name":"repeating_spells_$x_check","type":"number","triggeredFuncs":[],"affects":["repeating_spells_$x_total_check"],"addFuncs":[],"listener":"change:repeating_spells:check","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_range":{"name":"repeating_spells_$x_range","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:range","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_casting_time":{"name":"repeating_spells_$x_casting_time","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:casting_time","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_save":{"name":"repeating_spells_$x_save","type":"select","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:save","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_duration":{"name":"repeating_spells_$x_duration","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:duration","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_manifestation":{"name":"repeating_spells_$x_manifestation","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:manifestation","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_spells_$x_corruption-action":{"name":"repeating_spells_$x_corruption-action","type":"action","triggeredFuncs":["rollStringTable"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_spells:corruption-action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_corruption_action":{"name":"repeating_spells_$x_corruption_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:corruption_action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_corruption":{"name":"repeating_spells_$x_corruption","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:corruption","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_spells_$x_misfire-action":{"name":"repeating_spells_$x_misfire-action","type":"action","triggeredFuncs":["rollStringTable"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_spells:misfire-action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_misfire_action":{"name":"repeating_spells_$x_misfire_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:misfire_action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_misfire":{"name":"repeating_spells_$x_misfire","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:misfire","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_row_collapse":{"name":"repeating_spells_$x_row_collapse","type":"checkbox","triggeredFuncs":["collapseSpellTable"],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:row_collapse","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_roll":{"name":"repeating_spells_$x_roll","type":"text","triggeredFuncs":["tableRowAdd"],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:roll","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_result":{"name":"repeating_spells_$x_result","type":"span","triggeredFuncs":["tableCleanup"],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:result","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_notes_mod":{"name":"notes_mod","type":"hidden","triggeredFuncs":[],"affects":["notes"],"addFuncs":[],"listener":"change:notes_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_notes":{"name":"notes","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:notes","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_active":{"name":"rollmodal_active","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_active","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_title":{"name":"rollmodal_title","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_title","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_subtitle":{"name":"rollmodal_subtitle","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_subtitle","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_base_formula":{"name":"rollmodal_base_formula","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_final_formula"],"addFuncs":[],"listener":"change:rollmodal_base_formula","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_source":{"name":"rollmodal_source","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_source","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_final_formula":{"name":"rollmodal_final_formula","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_final_formula","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateRollmodalFormula","initialFunc":"","formula":""},"attr_rollmodal_description":{"name":"rollmodal_description","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_description","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_has_action_die":{"name":"rollmodal_has_action_die","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_has_action_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_action_die":{"name":"rollmodal_action_die","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_final_formula"],"addFuncs":[],"listener":"change:rollmodal_action_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["1d3","1d4","1d5","1d6","1d7","1d8","1d10","1d12","1d14","1d16","1d20","1d24","1d30"]},"attr_rollmodal_base_formula_mod":{"name":"rollmodal_base_formula_mod","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_base_formula","rollmodal base formula"],"addFuncs":[],"listener":"change:rollmodal_base_formula_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_rollmodal_action_die_mod":{"name":"rollmodal_action_die_mod","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_action_die","rollmodal action die"],"addFuncs":[],"listener":"change:rollmodal_action_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_rollmodal_bonus_mod":{"name":"rollmodal_bonus_mod","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_bonus","rollmodal bonus"],"addFuncs":[],"listener":"change:rollmodal_bonus_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_rollmodal_bonus":{"name":"rollmodal_bonus","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_final_formula"],"addFuncs":[],"listener":"change:rollmodal_bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_type_mod":{"name":"rollmodal_type_mod","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_type","rollmodal type"],"addFuncs":[],"listener":"change:rollmodal_type_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_rollmodal_type":{"name":"rollmodal_type","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_type","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["public","secret"]},"act_roll-pc-rollmodal":{"name":"roll-pc-rollmodal","type":"action","triggeredFuncs":["modalRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-rollmodal","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_rollmodal-blocker":{"name":"rollmodal-blocker","type":"action","triggeredFuncs":["closeModal"],"affects":[],"addFuncs":[],"listener":"clicked:rollmodal-blocker","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_npc_collapse":{"name":"npc_collapse","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:npc_collapse","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_roll-npc-init":{"name":"roll-npc-init","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-init","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_init":{"name":"init","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:init","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_add-attacks":{"name":"add-attacks","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-attacks","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_attacks_$x_roll-npc-bonus":{"name":"repeating_attacks_$x_roll-npc-bonus","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_attacks:roll-npc-bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_attacks_$x_name":{"name":"repeating_attacks_$x_name","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_attacks:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_attacks_$x_bonus":{"name":"repeating_attacks_$x_bonus","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_attacks:bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_attacks_$x_type":{"name":"repeating_attacks_$x_type","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_attacks:type","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_attacks_$x_roll-npc-damage":{"name":"repeating_attacks_$x_roll-npc-damage","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_attacks:roll-npc-damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_attacks_$x_damage":{"name":"repeating_attacks_$x_damage","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_attacks:damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_ac":{"name":"ac","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:ac","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-npc-hd":{"name":"roll-npc-hd","type":"action","triggeredFuncs":["hpRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-hd","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_hd":{"name":"hd","type":"span","triggeredFuncs":[],"affects":["crit_die","crit die"],"addFuncs":[],"listener":"change:hd","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_add-movement":{"name":"add-movement","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-movement","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_movement_$x_name":{"name":"repeating_movement_$x_name","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_movement:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_movement_$x_speed":{"name":"repeating_movement_$x_speed","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_movement:speed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_act":{"name":"act","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:act","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_sp":{"name":"sp","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:sp","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-npc-fort":{"name":"roll-npc-fort","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-fort","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_fort":{"name":"fort","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:fort","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-npc-ref":{"name":"roll-npc-ref","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-ref","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_ref":{"name":"ref","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:ref","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-npc-will":{"name":"roll-npc-will","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-will","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_will":{"name":"will","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:will","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_description":{"name":"description","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:description","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_template_start":{"name":"template_start","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:template_start","listenerFunc":"accessSheet","defaultValue":"@{whisper}&{template:undefined} {{character_name=@{character_name}}} {{character_id=@{character_id}}}","calculation":"","initialFunc":"","formula":""}}; + const cascades = {"attr_character_name":{"name":"character_name","type":"text","defaultValue":"","affects":[],"triggeredFuncs":["setActionCalls"],"listenerFunc":"accessSheet","listener":"change:character_name"},"act_k-network-call":{"name":"k-network-call","type":"action","triggeredFuncs":["kReceive"],"affects":[],"addFuncs":[],"listener":"clicked:k-network-call","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_character_id":{"name":"character_id","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:character_id","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_compendium_detected":{"name":"compendium_detected","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:compendium_detected","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_script_character_name":{"name":"script_character_name","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:script_character_name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_sheet_version":{"name":"sheet_version","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:sheet_version","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_push":{"name":"push","type":"action","triggeredFuncs":["pushRoll"],"affects":[],"addFuncs":[],"listener":"clicked:push","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_disabled":{"name":"rollmodal_disabled","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_disabled","listenerFunc":"accessSheet","defaultValue":1,"calculation":"","initialFunc":"","formula":""},"attr_is_npc":{"name":"is_npc","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:is_npc","listenerFunc":"accessSheet","defaultValue":1,"calculation":"","initialFunc":"","formula":""},"act_open-table":{"name":"open-table","type":"action","triggeredFuncs":["toggleMancer"],"affects":[],"addFuncs":[],"listener":"clicked:open-table","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"tables"},"act_refresh-mancer":{"name":"refresh-mancer","type":"action","triggeredFuncs":["toggleMancer"],"affects":[],"addFuncs":[],"listener":"clicked:refresh-mancer","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"refresh"},"attr_drop_name":{"name":"drop_name","type":"hidden","triggeredFuncs":["handleCompendiumDrop"],"affects":[],"addFuncs":[],"listener":"change:drop_name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_drop_data":{"name":"drop_data","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:drop_data","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_kmodal-mancer":{"name":"kmodal-mancer","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:kmodal-mancer","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_mancer_stage":{"name":"mancer_stage","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_stage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_confirm_wipe":{"name":"mancer_confirm_wipe","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_confirm_wipe","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_mancer-toggle":{"name":"mancer-toggle","type":"action","triggeredFuncs":["resetWipe","toggleMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-toggle","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-wipe":{"name":"mancer-wipe","type":"action","triggeredFuncs":["wipeCharacter"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-wipe","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"create"},"attr_mancer_wipe_button_text":{"name":"mancer_wipe_button_text","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_wipe_button_text","listenerFunc":"accessSheet","defaultValue":"wipe character data","calculation":"","initialFunc":"","formula":""},"act_mancer-create":{"name":"mancer-create","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-create","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"create"},"act_mancer-randomize-new":{"name":"mancer-randomize-new","type":"action","triggeredFuncs":["randomizeAll"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-randomize-new","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-roll-ability-scores":{"name":"mancer-roll-ability-scores","type":"action","triggeredFuncs":["rollAbilityScores"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-roll-ability-scores","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-strength":{"name":"roll-pc-strength","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-strength","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"strength_modifier"}},"attr_strength_modifier_mod":{"name":"strength_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["strength_modifier","strength modifier"],"addFuncs":[],"listener":"change:strength_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_strength_modifier":{"name":"strength_modifier","type":"hidden","triggeredFuncs":[],"affects":["melee_attack","melee_damage"],"addFuncs":[],"listener":"change:strength_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_strength_total":{"name":"strength_total","type":"hidden","triggeredFuncs":[],"affects":["strength_modifier"],"addFuncs":[],"listener":"change:strength_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_strength_mod":{"name":"strength_mod","type":"hidden","triggeredFuncs":[],"affects":["strength_total"],"addFuncs":[],"listener":"change:strength_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_strength":{"name":"strength","type":"hidden","triggeredFuncs":[],"affects":["strength_total"],"addFuncs":[],"listener":"change:strength","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-agility":{"name":"roll-pc-agility","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-agility","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"agility_modifier"}},"attr_agility_modifier_mod":{"name":"agility_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["agility_modifier","agility modifier"],"addFuncs":[],"listener":"change:agility_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_agility_modifier":{"name":"agility_modifier","type":"hidden","triggeredFuncs":[],"affects":["ref_save","armor_class","missile_attack","initiative","sneak_silently","hide_in_shadows","pick_pocket","climb_sheer_surfaces","pick_lock","disable_trap","forge_document"],"addFuncs":[],"listener":"change:agility_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_agility_total":{"name":"agility_total","type":"hidden","triggeredFuncs":[],"affects":["agility_modifier"],"addFuncs":[],"listener":"change:agility_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_agility_mod":{"name":"agility_mod","type":"hidden","triggeredFuncs":[],"affects":["agility_total"],"addFuncs":[],"listener":"change:agility_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_agility":{"name":"agility","type":"hidden","triggeredFuncs":[],"affects":["agility_total"],"addFuncs":[],"listener":"change:agility","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-stamina":{"name":"roll-pc-stamina","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-stamina","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"stamina_modifier"}},"attr_stamina_modifier_mod":{"name":"stamina_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["stamina_modifier","stamina modifier"],"addFuncs":[],"listener":"change:stamina_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_stamina_modifier":{"name":"stamina_modifier","type":"hidden","triggeredFuncs":[],"affects":["fort_save"],"addFuncs":[],"listener":"change:stamina_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_stamina_total":{"name":"stamina_total","type":"hidden","triggeredFuncs":[],"affects":["stamina_modifier"],"addFuncs":[],"listener":"change:stamina_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_stamina_mod":{"name":"stamina_mod","type":"hidden","triggeredFuncs":[],"affects":["stamina_total"],"addFuncs":[],"listener":"change:stamina_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_stamina":{"name":"stamina","type":"hidden","triggeredFuncs":[],"affects":["stamina_total"],"addFuncs":[],"listener":"change:stamina","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-personality":{"name":"roll-pc-personality","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-personality","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"personality_modifier"}},"attr_personality_modifier_mod":{"name":"personality_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["personality_modifier","personality modifier"],"addFuncs":[],"listener":"change:personality_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_personality_modifier":{"name":"personality_modifier","type":"hidden","triggeredFuncs":[],"affects":["will_save","disguise_self","spell_check"],"addFuncs":[],"listener":"change:personality_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_personality_total":{"name":"personality_total","type":"hidden","triggeredFuncs":[],"affects":["personality_modifier"],"addFuncs":[],"listener":"change:personality_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_personality_mod":{"name":"personality_mod","type":"hidden","triggeredFuncs":[],"affects":["personality_total"],"addFuncs":[],"listener":"change:personality_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_personality":{"name":"personality","type":"hidden","triggeredFuncs":[],"affects":["personality_total"],"addFuncs":[],"listener":"change:personality","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-luck":{"name":"roll-pc-luck","type":"action","triggeredFuncs":["genericActionRoll","luckRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-luck","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"luck_modifier"}},"attr_luck_modifier_mod":{"name":"luck_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["luck_modifier","luck modifier"],"addFuncs":[],"listener":"change:luck_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_luck_modifier":{"name":"luck_modifier","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:luck_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_luck_total":{"name":"luck_total","type":"hidden","triggeredFuncs":[],"affects":["luck_modifier"],"addFuncs":[],"listener":"change:luck_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_luck_mod":{"name":"luck_mod","type":"hidden","triggeredFuncs":[],"affects":["luck_total"],"addFuncs":[],"listener":"change:luck_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_luck":{"name":"luck","type":"hidden","triggeredFuncs":[],"affects":["luck_total"],"addFuncs":[],"listener":"change:luck","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-intelligence":{"name":"roll-pc-intelligence","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-intelligence","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"intelligence_modifier"}},"attr_intelligence_modifier_mod":{"name":"intelligence_modifier_mod","type":"hidden","triggeredFuncs":[],"affects":["intelligence_modifier","intelligence modifier"],"addFuncs":[],"listener":"change:intelligence_modifier_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_intelligence_modifier":{"name":"intelligence_modifier","type":"hidden","triggeredFuncs":[],"affects":["base_spell_check","find_trap","read_languages","cast_spell_from_scroll"],"addFuncs":[],"listener":"change:intelligence_modifier","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateScoreModifier","initialFunc":"","formula":""},"attr_intelligence_total":{"name":"intelligence_total","type":"hidden","triggeredFuncs":[],"affects":["intelligence_modifier"],"addFuncs":[],"listener":"change:intelligence_total","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateGenericNumberFieldTotal","initialFunc":"","formula":""},"attr_intelligence_mod":{"name":"intelligence_mod","type":"hidden","triggeredFuncs":[],"affects":["intelligence_total"],"addFuncs":[],"listener":"change:intelligence_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_intelligence":{"name":"intelligence","type":"hidden","triggeredFuncs":[],"affects":["intelligence_total"],"addFuncs":[],"listener":"change:intelligence","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-roll-birth-augur":{"name":"mancer-roll-birth-augur","type":"action","triggeredFuncs":["rollAugur"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-roll-birth-augur","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_augur_mod":{"name":"mancer_augur_mod","type":"hidden","triggeredFuncs":[],"affects":["augur"],"addFuncs":[],"listener":"change:mancer_augur_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_augur":{"name":"mancer_augur","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_augur","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-roll-hp":{"name":"mancer-roll-hp","type":"action","triggeredFuncs":["rollHP"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-roll-hp","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_hp_mod":{"name":"mancer_hp_mod","type":"hidden","triggeredFuncs":[],"affects":["hp"],"addFuncs":[],"listener":"change:mancer_hp_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_hp":{"name":"mancer_hp","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_hp","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-determine-occupation":{"name":"mancer-determine-occupation","type":"action","triggeredFuncs":["determineOccupation"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-determine-occupation","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_occupation_mod":{"name":"mancer_occupation_mod","type":"hidden","triggeredFuncs":[],"affects":["occupation"],"addFuncs":[],"listener":"change:mancer_occupation_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_occupation":{"name":"mancer_occupation","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_occupation","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_weapon_mod":{"name":"mancer_weapon_mod","type":"hidden","triggeredFuncs":[],"affects":["weapon"],"addFuncs":[],"listener":"change:mancer_weapon_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_weapon":{"name":"mancer_weapon","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_weapon","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_trade_goods_mod":{"name":"mancer_trade_goods_mod","type":"hidden","triggeredFuncs":[],"affects":["trade_goods","trade goods"],"addFuncs":[],"listener":"change:mancer_trade_goods_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_trade_goods":{"name":"mancer_trade_goods","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_trade_goods","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_alignment_mod":{"name":"alignment_mod","type":"hidden","triggeredFuncs":[],"affects":["alignment"],"addFuncs":[],"listener":"change:alignment_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_alignment":{"name":"alignment","type":"hidden","triggeredFuncs":[],"affects":["title","backstab","sneak_silently","hide_in_shadows","pick_pocket","climb_sheer_surfaces","pick_lock","find_trap","disable_trap","forge_document","disguise_self","read_languages","handle_poison","cast_spell_from_scroll"],"addFuncs":[],"listener":"change:alignment","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["lawful","chaotic","neutral"]},"act_mancer-roll-coinage":{"name":"mancer-roll-coinage","type":"action","triggeredFuncs":["rollCoinage"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-roll-coinage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_starting_coin_mod":{"name":"mancer_starting_coin_mod","type":"hidden","triggeredFuncs":[],"affects":["starting_coin","starting coin"],"addFuncs":[],"listener":"change:mancer_starting_coin_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_mancer_starting_coin":{"name":"mancer_starting_coin","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_starting_coin","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-new-finish":{"name":"mancer-new-finish","type":"action","triggeredFuncs":["createCharacter"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-new-finish","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_mancer_class":{"name":"mancer_class","type":"select","triggeredFuncs":["setMancerClass"],"affects":[],"addFuncs":[],"listener":"change:mancer_class","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_ability_map":{"name":"repeating_mancer-class-options_$x_ability_map","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:ability_map","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_name":{"name":"repeating_mancer-class-options_$x_name","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_description":{"name":"repeating_mancer-class-options_$x_description","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:description","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_row_id":{"name":"repeating_mancer-class-options_$x_row_id","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:row_id","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_mancer_sub_field_control":{"name":"repeating_mancer-class-options_$x_mancer_sub_field_control","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:mancer_sub_field_control","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-options_$x_select":{"name":"repeating_mancer-class-options_$x_select","type":"select","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-options:select","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_row_id":{"name":"repeating_mancer-class-table_$x_row_id","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:row_id","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_ability_map":{"name":"repeating_mancer-class-table_$x_ability_map","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:ability_map","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_name":{"name":"repeating_mancer-class-table_$x_name","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_1":{"name":"repeating_mancer-class-table_$x_value_1","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_1","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_2":{"name":"repeating_mancer-class-table_$x_value_2","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_2","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_3":{"name":"repeating_mancer-class-table_$x_value_3","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_3","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_4":{"name":"repeating_mancer-class-table_$x_value_4","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_4","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_5":{"name":"repeating_mancer-class-table_$x_value_5","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_5","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_6":{"name":"repeating_mancer-class-table_$x_value_6","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_6","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_7":{"name":"repeating_mancer-class-table_$x_value_7","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_7","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_8":{"name":"repeating_mancer-class-table_$x_value_8","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_8","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_9":{"name":"repeating_mancer-class-table_$x_value_9","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_9","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-class-table_$x_value_10":{"name":"repeating_mancer-class-table_$x_value_10","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-class-table:value_10","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-class-finish":{"name":"mancer-class-finish","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-class-finish","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"level"},"attr_level_mod":{"name":"level_mod","type":"hidden","triggeredFuncs":[],"affects":["level"],"addFuncs":[],"listener":"change:level_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_level":{"name":"level","type":"hidden","triggeredFuncs":["levelUpButtonDisplay"],"affects":["ref_save","fort_save","will_save","attack","initiative","action_dice","crit_die","crit_table","luck_die","backstab","sneak_silently","hide_in_shadows","pick_pocket","climb_sheer_surfaces","pick_lock","find_trap","disable_trap","forge_document","disguise_self","read_languages","handle_poison","cast_spell_from_scroll","critical_threat_range","title","stealth","base_spell_check","spell_check"],"addFuncs":[],"listener":"change:level","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateLevel","initialFunc":"","formula":""},"attr_mancer_level":{"name":"mancer_level","type":"number","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_level","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"setLevelDiff","formula":""},"attr_hit_points_max_mod":{"name":"hit_points_max_mod","type":"hidden","triggeredFuncs":[],"affects":["hit_points_max","hit points max"],"addFuncs":[],"listener":"change:hit_points_max_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_hit_points_max":{"name":"hit_points_max","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:hit_points_max","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-change-class":{"name":"mancer-change-class","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-change-class","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"class"},"attr_mancer_has_spells":{"name":"mancer_has_spells","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:mancer_has_spells","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_mancer-finish-level-up":{"name":"mancer-finish-level-up","type":"action","triggeredFuncs":["levelUp"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-finish-level-up","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-select-spells":{"name":"mancer-select-spells","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-select-spells","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"spells"},"attr_repeating_mancer-spells_$x_level":{"name":"repeating_mancer-spells_$x_level","type":"number","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:level","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_class":{"name":"repeating_mancer-spells_$x_class","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:class","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_compendium_reference":{"name":"repeating_mancer-spells_$x_compendium_reference","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:compendium_reference","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_type":{"name":"repeating_mancer-spells_$x_type","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:type","listenerFunc":"accessSheet","defaultValue":"content","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_selectable":{"name":"repeating_mancer-spells_$x_selectable","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:selectable","listenerFunc":"accessSheet","defaultValue":1,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_selected":{"name":"repeating_mancer-spells_$x_selected","type":"checkbox","triggeredFuncs":["updateMancerSpellSelections"],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:selected","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_name":{"name":"repeating_mancer-spells_$x_name","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_compendium_link":{"name":"repeating_mancer-spells_$x_compendium_link","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:compendium_link","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_label":{"name":"repeating_mancer-spells_$x_label","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:label","listenerFunc":"accessSheet","defaultValue":"level","calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_chosen":{"name":"repeating_mancer-spells_$x_chosen","type":"number","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:chosen","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_mancer-spells_$x_chosen_max":{"name":"repeating_mancer-spells_$x_chosen_max","type":"number","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_mancer-spells:chosen_max","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"fieldset_repeating_rollable-tables":{"name":"repeating_rollable-tables","type":"fieldset","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"remove:repeating_rollable-tables","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_rollable-tables_$x_name":{"name":"repeating_rollable-tables_$x_name","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_rollable-tables:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_rollable-tables_$x_action":{"name":"repeating_rollable-tables_$x_action","type":"action","triggeredFuncs":["rollSheetTable"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_rollable-tables:action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_rollable-tables_$x_action":{"name":"repeating_rollable-tables_$x_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_rollable-tables:action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_rollable-tables_$x_die":{"name":"repeating_rollable-tables_$x_die","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_rollable-tables:die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_rollable-tables_$x_bonus":{"name":"repeating_rollable-tables_$x_bonus","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_rollable-tables:bonus","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_class":{"name":"class","type":"hidden","triggeredFuncs":[],"affects":["hit_die","level","ref_save","fort_save","will_save","attack","initiative","action_dice","crit_die","crit_table","luck_die","backstab","sneak_silently","hide_in_shadows","pick_pocket","climb_sheer_surfaces","pick_lock","find_trap","disable_trap","forge_document","disguise_self","read_languages","handle_poison","cast_spell_from_scroll","critical_threat_range","title","speed","stealth","base_spell_check","spell_check"],"addFuncs":[],"listener":"change:class","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["zero","cleric","dwarf","elf","halfling","thief","warrior","wizard"]},"attr_character_name_mod":{"name":"character_name_mod","type":"hidden","triggeredFuncs":[],"affects":["character_name","character name"],"addFuncs":[],"listener":"change:character_name_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_title_mod":{"name":"title_mod","type":"hidden","triggeredFuncs":[],"affects":["title"],"addFuncs":[],"listener":"change:title_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_title":{"name":"title","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:title","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateTitleValue","initialFunc":"","formula":""},"attr_title_overwritten":{"name":"title_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:title_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_occupation_mod":{"name":"occupation_mod","type":"hidden","triggeredFuncs":[],"affects":["occupation"],"addFuncs":[],"listener":"change:occupation_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_occupation":{"name":"occupation","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:occupation","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_class_mod":{"name":"class_mod","type":"hidden","triggeredFuncs":[],"affects":["class"],"addFuncs":[],"listener":"change:class_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_speed_mod":{"name":"speed_mod","type":"hidden","triggeredFuncs":[],"affects":["speed"],"addFuncs":[],"listener":"change:speed_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_speed":{"name":"speed","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:speed","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSpeedValue","initialFunc":"","formula":""},"attr_birth_augur_mod":{"name":"birth_augur_mod","type":"hidden","triggeredFuncs":[],"affects":["birth_augur","birth augur"],"addFuncs":[],"listener":"change:birth_augur_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_birth_augur":{"name":"birth_augur","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:birth_augur","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_mancer-level-up":{"name":"mancer-level-up","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-level-up","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"level"},"act_mancer-first-level":{"name":"mancer-first-level","type":"action","triggeredFuncs":["progressMancer"],"affects":[],"addFuncs":[],"listener":"clicked:mancer-first-level","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","stage":"class"},"attr_xp_mod":{"name":"xp_mod","type":"hidden","triggeredFuncs":[],"affects":["xp"],"addFuncs":[],"listener":"change:xp_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_xp":{"name":"xp","type":"hidden","triggeredFuncs":["levelUpButtonDisplay"],"affects":[],"addFuncs":[],"listener":"change:xp","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_armor_class_mod":{"name":"armor_class_mod","type":"hidden","triggeredFuncs":[],"affects":["armor_class","armor class"],"addFuncs":[],"listener":"change:armor_class_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_armor_class":{"name":"armor_class","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:armor_class","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateACValue","initialFunc":"","formula":""},"attr_armor_class_overwritten":{"name":"armor_class_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:armor_class_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_hit_points_mod":{"name":"hit_points_mod","type":"hidden","triggeredFuncs":[],"affects":["hit_points","hit points"],"addFuncs":[],"listener":"change:hit_points_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_hit_points":{"name":"hit_points","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:hit_points","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-hit-die":{"name":"roll-pc-hit-die","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-hit-die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_hit_die_mod":{"name":"hit_die_mod","type":"hidden","triggeredFuncs":[],"affects":["hit_die","hit die"],"addFuncs":[],"listener":"change:hit_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_hit_die":{"name":"hit_die","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:hit_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateHitDie","initialFunc":"","formula":""},"attr_hit_die_overwritten":{"name":"hit_die_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:hit_die_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-initiative":{"name":"roll-pc-initiative","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-initiative","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_initiative_mod":{"name":"initiative_mod","type":"hidden","triggeredFuncs":[],"affects":["initiative"],"addFuncs":[],"listener":"change:initiative_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_initiative":{"name":"initiative","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:initiative","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateInitiativeValue","initialFunc":"","formula":""},"attr_initiative_overwritten":{"name":"initiative_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:initiative_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_action_dice_mod":{"name":"action_dice_mod","type":"hidden","triggeredFuncs":[],"affects":["action_dice","action dice"],"addFuncs":[],"listener":"change:action_dice_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_action_dice":{"name":"action_dice","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:action_dice","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateActionDiceValue","initialFunc":"","formula":""},"attr_action_dice_overwritten":{"name":"action_dice_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:action_dice_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_deed_die_result":{"name":"deed_die_result","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_attack_bonus","repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:deed_die_result","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-deed":{"name":"roll-pc-deed","type":"action","triggeredFuncs":["deedRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-deed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_attack_mod":{"name":"attack_mod","type":"hidden","triggeredFuncs":[],"affects":["attack"],"addFuncs":[],"listener":"change:attack_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_attack":{"name":"attack","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["melee_attack","missile_attack","deed_die"],"addFuncs":[],"listener":"change:attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateAttackModifier","initialFunc":"","formula":""},"attr_attack_overwritten":{"name":"attack_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:attack_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-attack":{"name":"roll-pc-attack","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"act_roll-pc-crit-die":{"name":"roll-pc-crit-die","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-crit-die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_crit_die_mod":{"name":"crit_die_mod","type":"hidden","triggeredFuncs":[],"affects":["crit_die","crit die"],"addFuncs":[],"listener":"change:crit_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_crit_die":{"name":"crit_die","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:crit_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateCritDieValue","initialFunc":"","formula":""},"attr_crit_die_overwritten":{"name":"crit_die_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:crit_die_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_crit_table_mod":{"name":"crit_table_mod","type":"hidden","triggeredFuncs":[],"affects":["crit_table","crit table"],"addFuncs":[],"listener":"change:crit_table_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_crit_table":{"name":"crit_table","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["crit_die","crit die"],"addFuncs":[],"listener":"change:crit_table","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateCritTableValue","initialFunc":"","formula":"","choices":["I","II","III","IV","V"]},"attr_crit_table_overwritten":{"name":"crit_table_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:crit_table_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-ref-save":{"name":"roll-pc-ref-save","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-ref-save","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_ref_save_mod":{"name":"ref_save_mod","type":"hidden","triggeredFuncs":[],"affects":["ref_save","ref save"],"addFuncs":[],"listener":"change:ref_save_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_ref_save":{"name":"ref_save","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:ref_save","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSavingModifier","initialFunc":"","formula":""},"attr_ref_save_overwritten":{"name":"ref_save_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:ref_save_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-fort-save":{"name":"roll-pc-fort-save","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-fort-save","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_fort_save_mod":{"name":"fort_save_mod","type":"hidden","triggeredFuncs":[],"affects":["fort_save","fort save"],"addFuncs":[],"listener":"change:fort_save_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_fort_save":{"name":"fort_save","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:fort_save","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSavingModifier","initialFunc":"","formula":""},"attr_fort_save_overwritten":{"name":"fort_save_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:fort_save_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-will-save":{"name":"roll-pc-will-save","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-will-save","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_will_save_mod":{"name":"will_save_mod","type":"hidden","triggeredFuncs":[],"affects":["will_save","will save"],"addFuncs":[],"listener":"change:will_save_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_will_save":{"name":"will_save","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:will_save","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSavingModifier","initialFunc":"","formula":""},"attr_will_save_overwritten":{"name":"will_save_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:will_save_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_luck_max_mod":{"name":"luck_max_mod","type":"hidden","triggeredFuncs":[],"affects":["luck_max","luck max"],"addFuncs":[],"listener":"change:luck_max_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_luck_max":{"name":"luck_max","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:luck_max","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_lucky_roll_mod":{"name":"lucky_roll_mod","type":"hidden","triggeredFuncs":[],"affects":["lucky_roll","lucky roll"],"addFuncs":[],"listener":"change:lucky_roll_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_lucky_roll":{"name":"lucky_roll","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lucky_roll","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-melee-attack":{"name":"roll-pc-melee-attack","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-melee-attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_melee_attack_mod":{"name":"melee_attack_mod","type":"hidden","triggeredFuncs":[],"affects":["melee_attack","melee attack"],"addFuncs":[],"listener":"change:melee_attack_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_melee_attack":{"name":"melee_attack","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["repeating_weapons_$x_attack_bonus","repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:melee_attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMeleeAndMissileModifiers","initialFunc":"","formula":""},"attr_melee_attack_overwritten":{"name":"melee_attack_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:melee_attack_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_melee_damage_mod":{"name":"melee_damage_mod","type":"hidden","triggeredFuncs":[],"affects":["melee_damage","melee damage"],"addFuncs":[],"listener":"change:melee_damage_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_melee_damage":{"name":"melee_damage","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:melee_damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMeleeDamage","initialFunc":"","formula":""},"attr_melee_damage_overwritten":{"name":"melee_damage_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:melee_damage_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-missile-attack":{"name":"roll-pc-missile-attack","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-missile-attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_missile_attack_mod":{"name":"missile_attack_mod","type":"hidden","triggeredFuncs":[],"affects":["missile_attack","missile attack"],"addFuncs":[],"listener":"change:missile_attack_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_missile_attack":{"name":"missile_attack","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["repeating_weapons_$x_attack_bonus","repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:missile_attack","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMeleeAndMissileModifiers","initialFunc":"","formula":""},"attr_missile_attack_overwritten":{"name":"missile_attack_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:missile_attack_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_missile_damage_mod":{"name":"missile_damage_mod","type":"hidden","triggeredFuncs":[],"affects":["missile_damage","missile damage"],"addFuncs":[],"listener":"change:missile_damage_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_missile_damage":{"name":"missile_damage","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:missile_damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_character_avatar":{"name":"character_avatar","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:character_avatar","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_languages_mod":{"name":"languages_mod","type":"hidden","triggeredFuncs":[],"affects":["languages"],"addFuncs":[],"listener":"change:languages_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_languages":{"name":"languages","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:languages","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_weapon":{"name":"weapon","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:weapon","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_crit-action":{"name":"crit-action","type":"action","triggeredFuncs":["rollCrit"],"affects":[],"addFuncs":[],"listener":"clicked:crit-action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_crit_action":{"name":"crit_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:crit_action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_fumble-action":{"name":"fumble-action","type":"action","triggeredFuncs":["rollFumble"],"affects":[],"addFuncs":[],"listener":"clicked:fumble-action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_fumble_action":{"name":"fumble_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:fumble_action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_add-weapons":{"name":"add-weapons","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-weapons","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_active":{"name":"repeating_weapons_$x_active","type":"hidden","triggeredFuncs":[],"affects":["initiative"],"addFuncs":[],"listener":"change:repeating_weapons:active","listenerFunc":"accessSheet","defaultValue":"1","calculation":"calculateLinkedEquipment","initialFunc":"","formula":""},"attr_repeating_weapons_$x_name_mod":{"name":"repeating_weapons_$x_name_mod","type":"hidden","triggeredFuncs":[],"affects":["name"],"addFuncs":[],"listener":"change:repeating_weapons:name_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_name":{"name":"repeating_weapons_$x_name","type":"hidden","triggeredFuncs":["calculateEquipmentLinkedItem"],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_weapons_$x_roll-pc-attack-bonus":{"name":"repeating_weapons_$x_roll-pc-attack-bonus","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_weapons:roll-pc-attack-bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_repeating_weapons_$x_attack_bonus_mod":{"name":"repeating_weapons_$x_attack_bonus_mod","type":"hidden","triggeredFuncs":[],"affects":["attack_bonus","attack bonus"],"addFuncs":[],"listener":"change:repeating_weapons:attack_bonus_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_attack_bonus":{"name":"repeating_weapons_$x_attack_bonus","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:attack_bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateWeaponAttack","initialFunc":"","formula":""},"act_repeating_weapons_$x_roll-pc-damage":{"name":"repeating_weapons_$x_roll-pc-damage","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_weapons:roll-pc-damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_damage_mod":{"name":"repeating_weapons_$x_damage_mod","type":"hidden","triggeredFuncs":[],"affects":["damage"],"addFuncs":[],"listener":"change:repeating_weapons:damage_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_damage":{"name":"repeating_weapons_$x_damage","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateWeaponDamage","initialFunc":"","formula":""},"attr_repeating_weapons_$x_type_mod":{"name":"repeating_weapons_$x_type_mod","type":"hidden","triggeredFuncs":[],"affects":["type"],"addFuncs":[],"listener":"change:repeating_weapons:type_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_type":{"name":"repeating_weapons_$x_type","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_attack_bonus","repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:repeating_weapons:type","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["melee","missile"]},"attr_repeating_weapons_$x_range_mod":{"name":"repeating_weapons_$x_range_mod","type":"hidden","triggeredFuncs":[],"affects":["range"],"addFuncs":[],"listener":"change:repeating_weapons:range_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_range":{"name":"repeating_weapons_$x_range","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:range","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_ammunition_mod":{"name":"repeating_weapons_$x_ammunition_mod","type":"hidden","triggeredFuncs":[],"affects":["ammunition"],"addFuncs":[],"listener":"change:repeating_weapons:ammunition_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_ammunition":{"name":"repeating_weapons_$x_ammunition","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:ammunition","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_notes_mod":{"name":"repeating_weapons_$x_notes_mod","type":"hidden","triggeredFuncs":[],"affects":["notes"],"addFuncs":[],"listener":"change:repeating_weapons:notes_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_notes":{"name":"repeating_weapons_$x_notes","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:notes","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"fieldset_repeating_weapons":{"name":"repeating_weapons","type":"fieldset","triggeredFuncs":["removeEquipmentLinkedItem"],"affects":[],"addFuncs":["addEquipmentLinkedItem"],"listener":"remove:repeating_weapons","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_linked":{"name":"repeating_weapons_$x_linked","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_weapons:linked","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_attack_bonus_base_mod":{"name":"repeating_weapons_$x_attack_bonus_base_mod","type":"hidden","triggeredFuncs":[],"affects":["attack_bonus_base","attack bonus base"],"addFuncs":[],"listener":"change:repeating_weapons:attack_bonus_base_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_attack_bonus_base":{"name":"repeating_weapons_$x_attack_bonus_base","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_attack_bonus"],"addFuncs":[],"listener":"change:repeating_weapons:attack_bonus_base","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_damage_base_mod":{"name":"repeating_weapons_$x_damage_base_mod","type":"hidden","triggeredFuncs":[],"affects":["damage_base","damage base"],"addFuncs":[],"listener":"change:repeating_weapons:damage_base_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_damage_base":{"name":"repeating_weapons_$x_damage_base","type":"hidden","triggeredFuncs":[],"affects":["repeating_weapons_$x_damage"],"addFuncs":[],"listener":"change:repeating_weapons:damage_base","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_weapons_$x_two_handed_mod":{"name":"repeating_weapons_$x_two_handed_mod","type":"hidden","triggeredFuncs":[],"affects":["two_handed","two handed"],"addFuncs":[],"listener":"change:repeating_weapons:two_handed_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_weapons_$x_two_handed":{"name":"repeating_weapons_$x_two_handed","type":"hidden","triggeredFuncs":[],"affects":["initiative"],"addFuncs":[],"listener":"change:repeating_weapons:two_handed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["no","yes"]},"attr_treasure_mod":{"name":"treasure_mod","type":"hidden","triggeredFuncs":[],"affects":["treasure"],"addFuncs":[],"listener":"change:treasure_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_treasure":{"name":"treasure","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:treasure","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_equipment":{"name":"equipment","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:equipment","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_add-equipment":{"name":"add-equipment","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-equipment","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_active":{"name":"repeating_equipment_$x_active","type":"checkbox","triggeredFuncs":["toggleEquipment"],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:active","listenerFunc":"accessSheet","defaultValue":1,"calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_name":{"name":"repeating_equipment_$x_name","type":"span","triggeredFuncs":["calculateEquipmentLinkedItem"],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_cost":{"name":"repeating_equipment_$x_cost","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:cost","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"fieldset_repeating_equipment":{"name":"repeating_equipment","type":"fieldset","triggeredFuncs":["removeEquipmentLinkedItem"],"affects":[],"addFuncs":[],"listener":"remove:repeating_equipment","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_type":{"name":"repeating_equipment_$x_type","type":"select","triggeredFuncs":["toggleEquipmentType"],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:type","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_modifiers":{"name":"repeating_equipment_$x_modifiers","type":"text","triggeredFuncs":["calculateModifiedAttributes"],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:modifiers","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_equipment_$x_linked":{"name":"repeating_equipment_$x_linked","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_equipment:linked","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_armor":{"name":"armor","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:armor","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_add-armor":{"name":"add-armor","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-armor","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_active":{"name":"repeating_armor_$x_active","type":"hidden","triggeredFuncs":[],"affects":["armor_class","speed"],"addFuncs":[],"listener":"change:repeating_armor:active","listenerFunc":"accessSheet","defaultValue":"1","calculation":"calculateLinkedEquipment","initialFunc":"","formula":""},"attr_repeating_armor_$x_name_mod":{"name":"repeating_armor_$x_name_mod","type":"hidden","triggeredFuncs":[],"affects":["name"],"addFuncs":[],"listener":"change:repeating_armor:name_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_name":{"name":"repeating_armor_$x_name","type":"hidden","triggeredFuncs":["calculateEquipmentLinkedItem"],"affects":[],"addFuncs":[],"listener":"change:repeating_armor:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_ac_bonus_mod":{"name":"repeating_armor_$x_ac_bonus_mod","type":"hidden","triggeredFuncs":[],"affects":["ac_bonus","ac bonus"],"addFuncs":[],"listener":"change:repeating_armor:ac_bonus_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_ac_bonus":{"name":"repeating_armor_$x_ac_bonus","type":"hidden","triggeredFuncs":[],"affects":["armor_class"],"addFuncs":[],"listener":"change:repeating_armor:ac_bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_check_penalty_mod":{"name":"repeating_armor_$x_check_penalty_mod","type":"hidden","triggeredFuncs":[],"affects":["check_penalty","check penalty"],"addFuncs":[],"listener":"change:repeating_armor:check_penalty_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_check_penalty":{"name":"repeating_armor_$x_check_penalty","type":"hidden","triggeredFuncs":[],"affects":["base_spell_check","climb_sheer_surfaces","sneak_silently"],"addFuncs":[],"listener":"change:repeating_armor:check_penalty","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_speed_mod":{"name":"repeating_armor_$x_speed_mod","type":"hidden","triggeredFuncs":[],"affects":["speed"],"addFuncs":[],"listener":"change:repeating_armor:speed_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_speed":{"name":"repeating_armor_$x_speed","type":"hidden","triggeredFuncs":[],"affects":["speed"],"addFuncs":[],"listener":"change:repeating_armor:speed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_fumble_die_mod":{"name":"repeating_armor_$x_fumble_die_mod","type":"hidden","triggeredFuncs":[],"affects":["fumble_die","fumble die"],"addFuncs":[],"listener":"change:repeating_armor:fumble_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_fumble_die":{"name":"repeating_armor_$x_fumble_die","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_armor:fumble_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["d3","d4","d5","d6","d7","d8","d10","d12","d14","d16"]},"fieldset_repeating_armor":{"name":"repeating_armor","type":"fieldset","triggeredFuncs":["removeEquipmentLinkedItem","removeArmor"],"affects":[],"addFuncs":["addEquipmentLinkedItem"],"listener":"remove:repeating_armor","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_linked":{"name":"repeating_armor_$x_linked","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_armor:linked","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_armor_$x_shield_mod":{"name":"repeating_armor_$x_shield_mod","type":"hidden","triggeredFuncs":[],"affects":["shield"],"addFuncs":[],"listener":"change:repeating_armor:shield_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_repeating_armor_$x_shield":{"name":"repeating_armor_$x_shield","type":"hidden","triggeredFuncs":[],"affects":["armor_class"],"addFuncs":[],"listener":"change:repeating_armor:shield","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["no","yes"]},"attr_deity_mod":{"name":"deity_mod","type":"hidden","triggeredFuncs":[],"affects":["deity"],"addFuncs":[],"listener":"change:deity_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_deity":{"name":"deity","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:deity","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-base-spell-check":{"name":"roll-pc-base-spell-check","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-base-spell-check","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_base_spell_check_mod":{"name":"base_spell_check_mod","type":"hidden","triggeredFuncs":[],"affects":["base_spell_check","base spell check"],"addFuncs":[],"listener":"change:base_spell_check_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_base_spell_check":{"name":"base_spell_check","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":["repeating_spells_$x_total_check"],"addFuncs":[],"listener":"change:base_spell_check","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateSpellCheckModifier","initialFunc":"","formula":""},"attr_base_spell_check_overwritten":{"name":"base_spell_check_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:base_spell_check_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_undefined":{"name":"undefined","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:undefined","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_roll-pc-lay-on-hands-same":{"name":"roll-pc-lay-on-hands-same","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-lay-on-hands-same","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"spell_check","title":"lay on hands","subtitle":"(same)"}},"attr_lay_on_hands_same":{"name":"lay_on_hands_same","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lay_on_hands_same","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-lay-on-hands-adjacent":{"name":"roll-pc-lay-on-hands-adjacent","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-lay-on-hands-adjacent","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"spell_check","title":"lay on hands","subtitle":"(adjacent)"}},"attr_lay_on_hands_adjacent":{"name":"lay_on_hands_adjacent","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lay_on_hands_adjacent","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-lay-on-hands-opposed":{"name":"roll-pc-lay-on-hands-opposed","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-lay-on-hands-opposed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"formula":"spell_check","title":"lay on hands","subtitle":"(opposed)"}},"attr_lay_on_hands_opposed":{"name":"lay_on_hands_opposed","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lay_on_hands_opposed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_lucky_weapon_mod":{"name":"lucky_weapon_mod","type":"hidden","triggeredFuncs":[],"affects":["lucky_weapon","lucky weapon"],"addFuncs":[],"listener":"change:lucky_weapon_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_lucky_weapon":{"name":"lucky_weapon","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:lucky_weapon","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-shield-bash":{"name":"roll-pc-shield-bash","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-shield-bash","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"actionDie":"1d14","formula":"melee_attack"}},"attr_shield_bash":{"name":"shield_bash","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:shield_bash","listenerFunc":"accessSheet","defaultValue":"1d14","calculation":"","initialFunc":"","formula":""},"attr_familiar_mod":{"name":"familiar_mod","type":"hidden","triggeredFuncs":[],"affects":["familiar"],"addFuncs":[],"listener":"change:familiar_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_familiar":{"name":"familiar","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:familiar","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_patrons_mod":{"name":"patrons_mod","type":"hidden","triggeredFuncs":[],"affects":["patrons"],"addFuncs":[],"listener":"change:patrons_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_patrons":{"name":"patrons","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:patrons","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_corruption_mod":{"name":"corruption_mod","type":"hidden","triggeredFuncs":[],"affects":["corruption"],"addFuncs":[],"listener":"change:corruption_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_corruption":{"name":"corruption","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:corruption","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_other_notes_mod":{"name":"other_notes_mod","type":"hidden","triggeredFuncs":[],"affects":["other_notes","other notes"],"addFuncs":[],"listener":"change:other_notes_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_other_notes":{"name":"other_notes","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:other_notes","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-stealth":{"name":"roll-pc-stealth","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-stealth","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_stealth_mod":{"name":"stealth_mod","type":"hidden","triggeredFuncs":[],"affects":["stealth"],"addFuncs":[],"listener":"change:stealth_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_stealth":{"name":"stealth","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:stealth","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateStealthModifier","initialFunc":"","formula":""},"attr_stealth_overwritten":{"name":"stealth_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:stealth_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-luck-die":{"name":"roll-pc-luck-die","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-luck-die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_luck_die_mod":{"name":"luck_die_mod","type":"hidden","triggeredFuncs":[],"affects":["luck_die","luck die"],"addFuncs":[],"listener":"change:luck_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_luck_die":{"name":"luck_die","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:luck_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateLuckDieValue","initialFunc":"","formula":"","choices":["d3","d4","d5","d6","d7","d8","d10","d12","d14","d16"]},"attr_luck_die_overwritten":{"name":"luck_die_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:luck_die_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-disable-trap":{"name":"roll-pc-disable-trap","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-disable-trap","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_disable_trap_mod":{"name":"disable_trap_mod","type":"hidden","triggeredFuncs":[],"affects":["disable_trap","disable trap"],"addFuncs":[],"listener":"change:disable_trap_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_disable_trap":{"name":"disable_trap","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:disable_trap","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_disable_trap_overwritten":{"name":"disable_trap_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:disable_trap_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-backstab":{"name":"roll-pc-backstab","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-backstab","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_backstab_mod":{"name":"backstab_mod","type":"hidden","triggeredFuncs":[],"affects":["backstab"],"addFuncs":[],"listener":"change:backstab_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_backstab":{"name":"backstab","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:backstab","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_backstab_overwritten":{"name":"backstab_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:backstab_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-forge-document":{"name":"roll-pc-forge-document","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-forge-document","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_forge_document_mod":{"name":"forge_document_mod","type":"hidden","triggeredFuncs":[],"affects":["forge_document","forge document"],"addFuncs":[],"listener":"change:forge_document_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_forge_document":{"name":"forge_document","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:forge_document","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_forge_document_overwritten":{"name":"forge_document_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:forge_document_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-sneak-silently":{"name":"roll-pc-sneak-silently","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-sneak-silently","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_sneak_silently_mod":{"name":"sneak_silently_mod","type":"hidden","triggeredFuncs":[],"affects":["sneak_silently","sneak silently"],"addFuncs":[],"listener":"change:sneak_silently_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_sneak_silently":{"name":"sneak_silently","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:sneak_silently","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_sneak_silently_overwritten":{"name":"sneak_silently_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:sneak_silently_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-disguise-self":{"name":"roll-pc-disguise-self","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-disguise-self","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_disguise_self_mod":{"name":"disguise_self_mod","type":"hidden","triggeredFuncs":[],"affects":["disguise_self","disguise self"],"addFuncs":[],"listener":"change:disguise_self_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_disguise_self":{"name":"disguise_self","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:disguise_self","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_disguise_self_overwritten":{"name":"disguise_self_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:disguise_self_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-hide-in-shadows":{"name":"roll-pc-hide-in-shadows","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-hide-in-shadows","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_hide_in_shadows_mod":{"name":"hide_in_shadows_mod","type":"hidden","triggeredFuncs":[],"affects":["hide_in_shadows","hide in shadows"],"addFuncs":[],"listener":"change:hide_in_shadows_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_hide_in_shadows":{"name":"hide_in_shadows","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:hide_in_shadows","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_hide_in_shadows_overwritten":{"name":"hide_in_shadows_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:hide_in_shadows_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-read-languages":{"name":"roll-pc-read-languages","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-read-languages","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_read_languages_mod":{"name":"read_languages_mod","type":"hidden","triggeredFuncs":[],"affects":["read_languages","read languages"],"addFuncs":[],"listener":"change:read_languages_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_read_languages":{"name":"read_languages","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:read_languages","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_read_languages_overwritten":{"name":"read_languages_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:read_languages_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-pick-pocket":{"name":"roll-pc-pick-pocket","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-pick-pocket","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_pick_pocket_mod":{"name":"pick_pocket_mod","type":"hidden","triggeredFuncs":[],"affects":["pick_pocket","pick pocket"],"addFuncs":[],"listener":"change:pick_pocket_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_pick_pocket":{"name":"pick_pocket","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:pick_pocket","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_pick_pocket_overwritten":{"name":"pick_pocket_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:pick_pocket_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-handle-poison":{"name":"roll-pc-handle-poison","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-handle-poison","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_handle_poison_mod":{"name":"handle_poison_mod","type":"hidden","triggeredFuncs":[],"affects":["handle_poison","handle poison"],"addFuncs":[],"listener":"change:handle_poison_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_handle_poison":{"name":"handle_poison","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:handle_poison","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_handle_poison_overwritten":{"name":"handle_poison_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:handle_poison_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-climb-sheer-surfaces":{"name":"roll-pc-climb-sheer-surfaces","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-climb-sheer-surfaces","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_climb_sheer_surfaces_mod":{"name":"climb_sheer_surfaces_mod","type":"hidden","triggeredFuncs":[],"affects":["climb_sheer_surfaces","climb sheer surfaces"],"addFuncs":[],"listener":"change:climb_sheer_surfaces_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_climb_sheer_surfaces":{"name":"climb_sheer_surfaces","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:climb_sheer_surfaces","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_climb_sheer_surfaces_overwritten":{"name":"climb_sheer_surfaces_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:climb_sheer_surfaces_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-cast-spell-from-scroll":{"name":"roll-pc-cast-spell-from-scroll","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-cast-spell-from-scroll","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_cast_spell_from_scroll_mod":{"name":"cast_spell_from_scroll_mod","type":"hidden","triggeredFuncs":[],"affects":["cast_spell_from_scroll","cast spell from scroll"],"addFuncs":[],"listener":"change:cast_spell_from_scroll_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_cast_spell_from_scroll":{"name":"cast_spell_from_scroll","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:cast_spell_from_scroll","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":"","choices":["d3","d4","d5","d6","d7","d8","d10","d12","d14","d16"]},"attr_cast_spell_from_scroll_overwritten":{"name":"cast_spell_from_scroll_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:cast_spell_from_scroll_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-pick-lock":{"name":"roll-pc-pick-lock","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-pick-lock","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_pick_lock_mod":{"name":"pick_lock_mod","type":"hidden","triggeredFuncs":[],"affects":["pick_lock","pick lock"],"addFuncs":[],"listener":"change:pick_lock_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_pick_lock":{"name":"pick_lock","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:pick_lock","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_pick_lock_overwritten":{"name":"pick_lock_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:pick_lock_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-pc-find-trap":{"name":"roll-pc-find-trap","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-find-trap","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","actionDie":"1d20"},"attr_find_trap_mod":{"name":"find_trap_mod","type":"hidden","triggeredFuncs":[],"affects":["find_trap","find trap"],"addFuncs":[],"listener":"change:find_trap_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_find_trap":{"name":"find_trap","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:find_trap","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThiefSkillsModifiers","initialFunc":"","formula":""},"attr_find_trap_overwritten":{"name":"find_trap_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:find_trap_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_critical_threat_range_mod":{"name":"critical_threat_range_mod","type":"hidden","triggeredFuncs":[],"affects":["critical_threat_range","critical threat range"],"addFuncs":[],"listener":"change:critical_threat_range_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_critical_threat_range":{"name":"critical_threat_range","type":"hidden","triggeredFuncs":["overwriteDefaultAttributeValue"],"affects":[],"addFuncs":[],"listener":"change:critical_threat_range","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateThreatRangeValue","initialFunc":"","formula":""},"attr_critical_threat_range_overwritten":{"name":"critical_threat_range_overwritten","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:critical_threat_range_overwritten","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_spells":{"name":"spells","type":"checkbox","triggeredFuncs":[],"affects":["repeating_spells_$x_collapse","repeating_spells_$X_collapse"],"addFuncs":[],"listener":"change:spells","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr__reporder_repeating_spells":{"name":"_reporder_repeating_spells","type":"hidden","triggeredFuncs":["moveTableRows"],"affects":[],"addFuncs":[],"listener":"change:_reporder:spells","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_add-spells":{"name":"add-spells","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-spells","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"fieldset_repeating_spells":{"name":"repeating_spells","type":"fieldset","triggeredFuncs":["removeSpell"],"affects":[],"addFuncs":["addSpell"],"listener":"remove:repeating_spells","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_collapse":{"name":"repeating_spells_$x_collapse","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:collapse","listenerFunc":"accessSheet","defaultValue":0,"calculation":"collapseSpell","initialFunc":"collapseSpellTable","formula":""},"attr_repeating_spells_$x_master":{"name":"repeating_spells_$x_master","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:master","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_compendium_reference":{"name":"repeating_spells_$x_compendium_reference","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:compendium_reference","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_row_type":{"name":"repeating_spells_$x_row_type","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:row_type","listenerFunc":"accessSheet","defaultValue":"master","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_name":{"name":"repeating_spells_$x_name","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_level":{"name":"repeating_spells_$x_level","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:level","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_total_check":{"name":"repeating_spells_$x_total_check","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:total_check","listenerFunc":"accessSheet","defaultValue":0,"calculation":"calcSpellCheck","initialFunc":"","formula":""},"act_repeating_spells_$x_roll-pc-total-check":{"name":"repeating_spells_$x_roll-pc-total-check","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_spells:roll-pc-total-check","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"manipulator":"determineSpellEffects","fields":["{{computeDescription=[[0[computed value]]]}}"]}},"attr_repeating_spells_$x_notes":{"name":"repeating_spells_$x_notes","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:notes","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_description":{"name":"repeating_spells_$x_description","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:description","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_check":{"name":"repeating_spells_$x_check","type":"number","triggeredFuncs":[],"affects":["repeating_spells_$x_total_check"],"addFuncs":[],"listener":"change:repeating_spells:check","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_range":{"name":"repeating_spells_$x_range","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:range","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_casting_time":{"name":"repeating_spells_$x_casting_time","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:casting_time","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_save":{"name":"repeating_spells_$x_save","type":"select","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:save","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_duration":{"name":"repeating_spells_$x_duration","type":"text","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:duration","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_manifestation":{"name":"repeating_spells_$x_manifestation","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:manifestation","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_spells_$x_corruption-action":{"name":"repeating_spells_$x_corruption-action","type":"action","triggeredFuncs":["rollStringTable"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_spells:corruption-action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_corruption_action":{"name":"repeating_spells_$x_corruption_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:corruption_action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_corruption":{"name":"repeating_spells_$x_corruption","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:corruption","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_spells_$x_misfire-action":{"name":"repeating_spells_$x_misfire-action","type":"action","triggeredFuncs":["rollStringTable"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_spells:misfire-action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_misfire_action":{"name":"repeating_spells_$x_misfire_action","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:misfire_action","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_misfire":{"name":"repeating_spells_$x_misfire","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:misfire","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_row_collapse":{"name":"repeating_spells_$x_row_collapse","type":"checkbox","triggeredFuncs":["collapseSpellTable"],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:row_collapse","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_roll":{"name":"repeating_spells_$x_roll","type":"text","triggeredFuncs":["tableRowAdd"],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:roll","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_spells_$x_result":{"name":"repeating_spells_$x_result","type":"span","triggeredFuncs":["tableCleanup"],"affects":[],"addFuncs":[],"listener":"change:repeating_spells:result","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_notes_mod":{"name":"notes_mod","type":"hidden","triggeredFuncs":[],"affects":["notes"],"addFuncs":[],"listener":"change:notes_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_notes":{"name":"notes","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:notes","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_active":{"name":"rollmodal_active","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_active","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_title":{"name":"rollmodal_title","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_title","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_subtitle":{"name":"rollmodal_subtitle","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_subtitle","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_base_formula":{"name":"rollmodal_base_formula","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_final_formula"],"addFuncs":[],"listener":"change:rollmodal_base_formula","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_source":{"name":"rollmodal_source","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_source","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_final_formula":{"name":"rollmodal_final_formula","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_final_formula","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateRollmodalFormula","initialFunc":"","formula":""},"attr_rollmodal_description":{"name":"rollmodal_description","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_description","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_has_action_die":{"name":"rollmodal_has_action_die","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_has_action_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_action_die":{"name":"rollmodal_action_die","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_final_formula"],"addFuncs":[],"listener":"change:rollmodal_action_die","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["1d3","1d4","1d5","1d6","1d7","1d8","1d10","1d12","1d14","1d16","1d20","1d24","1d30"]},"attr_modal_settings":{"name":"modal_settings","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:modal_settings","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_base_formula_mod":{"name":"rollmodal_base_formula_mod","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_base_formula","rollmodal base formula"],"addFuncs":[],"listener":"change:rollmodal_base_formula_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_rollmodal_action_die_mod":{"name":"rollmodal_action_die_mod","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_action_die","rollmodal action die"],"addFuncs":[],"listener":"change:rollmodal_action_die_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_rollmodal_bonus_mod":{"name":"rollmodal_bonus_mod","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_bonus","rollmodal bonus"],"addFuncs":[],"listener":"change:rollmodal_bonus_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_rollmodal_bonus":{"name":"rollmodal_bonus","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_final_formula"],"addFuncs":[],"listener":"change:rollmodal_bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_rollmodal_type_mod":{"name":"rollmodal_type_mod","type":"hidden","triggeredFuncs":[],"affects":["rollmodal_type","rollmodal type"],"addFuncs":[],"listener":"change:rollmodal_type_mod","listenerFunc":"accessSheet","defaultValue":"","calculation":"calculateMods","initialFunc":"","formula":""},"attr_rollmodal_type":{"name":"rollmodal_type","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:rollmodal_type","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","choices":["public","secret"]},"act_roll-pc-rollmodal":{"name":"roll-pc-rollmodal","type":"action","triggeredFuncs":["modalRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-pc-rollmodal","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_rollmodal-blocker":{"name":"rollmodal-blocker","type":"action","triggeredFuncs":["closeModal"],"affects":[],"addFuncs":[],"listener":"clicked:rollmodal-blocker","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_npc_collapse":{"name":"npc_collapse","type":"checkbox","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:npc_collapse","listenerFunc":"accessSheet","defaultValue":0,"calculation":"","initialFunc":"","formula":""},"act_roll-npc-init":{"name":"roll-npc-init","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-init","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_init":{"name":"init","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:init","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_add-attacks":{"name":"add-attacks","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-attacks","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_attacks_$x_roll-npc-bonus":{"name":"repeating_attacks_$x_roll-npc-bonus","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_attacks:roll-npc-bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":"","settings":{"action":true,"attack":true}},"attr_repeating_attacks_$x_name":{"name":"repeating_attacks_$x_name","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_attacks:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_attacks_$x_bonus":{"name":"repeating_attacks_$x_bonus","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_attacks:bonus","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_attacks_$x_type":{"name":"repeating_attacks_$x_type","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_attacks:type","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_repeating_attacks_$x_roll-npc-damage":{"name":"repeating_attacks_$x_roll-npc-damage","type":"action","triggeredFuncs":["genericRoll"],"affects":[],"addFuncs":[],"listener":"clicked:repeating_attacks:roll-npc-damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_attacks_$x_damage":{"name":"repeating_attacks_$x_damage","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_attacks:damage","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_ac":{"name":"ac","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:ac","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-npc-hd":{"name":"roll-npc-hd","type":"action","triggeredFuncs":["hpRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-hd","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_hd":{"name":"hd","type":"span","triggeredFuncs":[],"affects":["crit_die","crit die"],"addFuncs":[],"listener":"change:hd","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_add-movement":{"name":"add-movement","type":"action","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"clicked:add-movement","listenerFunc":"addItem","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_movement_$x_name":{"name":"repeating_movement_$x_name","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_movement:name","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_repeating_movement_$x_speed":{"name":"repeating_movement_$x_speed","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:repeating_movement:speed","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_act":{"name":"act","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:act","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_sp":{"name":"sp","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:sp","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-npc-fort":{"name":"roll-npc-fort","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-fort","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_fort":{"name":"fort","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:fort","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-npc-ref":{"name":"roll-npc-ref","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-ref","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_ref":{"name":"ref","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:ref","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"act_roll-npc-will":{"name":"roll-npc-will","type":"action","triggeredFuncs":["genericActionRoll"],"affects":[],"addFuncs":[],"listener":"clicked:roll-npc-will","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_will":{"name":"will","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:will","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_description":{"name":"description","type":"span","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:description","listenerFunc":"accessSheet","defaultValue":"","calculation":"","initialFunc":"","formula":""},"attr_template_start":{"name":"template_start","type":"hidden","triggeredFuncs":[],"affects":[],"addFuncs":[],"listener":"change:template_start","listenerFunc":"accessSheet","defaultValue":"@{whisper}&{template:undefined} {{character_name=@{character_name}}} {{character_id=@{character_id}}}","calculation":"","initialFunc":"","formula":""}}; kFuncs.cascades = cascades; @@ -2312,6 +2321,14 @@ kFuncs.version = version; */ let debugMode = false; kFuncs.debugMode = debugMode; +/** + * A boolean flag that tells the script whether to output verbose logs of what is being done or not when {@link debugMode} is enabled. + * @memberof Variables + * @var + * @type {boolean} + */ +let verboseMode = false; +kFuncs.verboseMode = verboseMode; const funcs = {}; kFuncs.funcs = funcs; const updateHandlers = {}; @@ -2320,8 +2337,8 @@ const initialSetups = {}; const allHandlers = {}; const addFuncs = {}; -const kscaffoldJSVersion = '1.0.0'; -const kscaffoldPUGVersion = '1.0.0'; +const kscaffoldJSVersion = '2.7.2'; +const kscaffoldPUGVersion = '2.7.0'; /** * Defines the rollstring that rolls made using k.startRoll begin with. Defaults to "&{template:default}". * @memberof Variables @@ -2481,7 +2498,6 @@ kFuncs.capitalize = capitalize; * } */ const extractQueryResult = async function(query){ - debug('entering extractQueryResult'); const rollObj = { query:`[[0[response=?{${query}}]]]` }; @@ -2733,328 +2749,599 @@ const kReceive = function({trigger,attributes,sections,casc}) { }; funcs.kReceive = kReceive;/*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ /*jshint -W014,-W084,-W030,-W033*/ - +/** + * Detailed descriptions of the arguments that are passed to functions registered with the K-scaffold. + * @namespace Sheetworkers.Function Arguments + */ +/** + * An object that stores the rowID information for each repeating section on the sheet. + * @name sections + * @memberof Function Arguments + * @var + * @property {string[]} repeating_section_name - The row IDs of a given repeating section. The repeating section name is used **with** the `repeating_` prefix (e.g. `sections['repeating_weapons']`). + */ +/** + * Object that stores the default trigger information for all attributes. Indexed by attribute, button name, or fieldset name prefixed with `attr_`, `act_`, or `fieldset_` respectively. + * @name casc + * @memberof Function Arguments + * @var + */ +/** + * Object describing the attribute that is currently being worked on. In addition to the properties described here, the properties from the Roll20 event will also be present if the attribute was the original event. Additional properties may be present if you specified them when creating the input for the attribute. + * @name trigger + * @memberof Function Arguments + * @var + * @property {string} name - The full name of the attribute. + * @property {string[]} triggeredFuncs - Array of function names that will be called when this attribute is worked on. + * @property {string} calculation - The name of the function that is used to calculate the value of this attribute. + * @property {string} formula - The macro syntax formula to use to calculate this attributes value. + * @property {string[]} affects - Array of attribute names that this attribute might affect. + * @property {string[]} addFuncs - Functions that are called when the add row button is clicked for a customControlFieldset. + * @property {string} listener - What function was used to listen for changes to this attribute. Unless you have decided to implement your own event handling, this should always be `"accessSheet"`. + * @property {string} type - What type of thing this trigger is for (e.g. number, action). + */ //# Attribute Obj Proxy handler -const createAttrProxy = function(attrs,sections,casc){ - //creates a proxy for the attributes object so that values can be worked with more easily. - const getCascObj = function(event){ - const eventName = event.triggerName || event.sourceAttribute; - let typePrefix = eventName.startsWith('clicked:') ? - 'act_' : - event.removedInfo ? - 'fieldset_' : - 'attr_'; - let cascName = `${typePrefix}${eventName.replace(/(?:removed?|clicked):/,'')}`; - let cascObj = casc[cascName]; - k.debug({[cascName]:cascObj}); - if(event && cascObj){ - Object.assign(cascObj,event); - if(event.originalRollId){ - cascObj.rollData = RE.unescape(event.originalRollId); +/** + * A representation of the sheet's attributes. This is a proxy for the actual object and will keep track of original values and updates that have been applied. Calling an attribute directly on the attributes value will return it's current value coerced into a number if it is numeric. Setting a property on the attributes object will add it the list of updates which will be applied the next time the `set()` method is called on attributes. + * @name attributes + * @memberof Function Arguments + * @var + * @property {object} attributes - The raw original data of the character sheet. + * @property {object} updates - The raw data that will be saved to the character sheet once all operations have been completed. + * @property {function} set - Method to apply changes to the character sheet. This is called automatically at the end of the scaffold's event handling. Needs to be called manually if inside an asynchronous function, such as when using the startRoll sheetworker (or any of the scaffold aliases for startRoll). The method uses object destructuring syntax for the arguments it takes. + * @property {boolean} [set.vocal=false] - Whether the set is done silently or not. Should almost always be left at false. `attributes.set({vocal:true})` + * @property {function} [set.callback] - Callback function to be invoked once the setAttrs is complete. `attributes.set({callback(){/*do a thing}})` + * @property {any} attribute_name - Name of any attribute whose data from the character sheet you want to access. Will only return a value if the attribute was defined using the scaffold's pug mixins (e.g. +input). If the value of the attribute is numerical (e.g. `"5"`), it will be returned as a number. You can also apply changes by simply assigning a value to an attribute name (e.g. `attributes.character_name = 'New Character'`). + * @property {object} repOrders - Object showing the ordered arrays for the _reporder_ attributes for each repeating section. Indexed by repeating section name + * @property {object[]} repeating_section_name - Name of a repeating section whose data you want to access (e.g. `attributes.repeating_weapons`). The data will be returned as an array with objects describing each row in the order they are on the sheet. Objects are indexed by rowID as well. Mutating array methods are replaced by the `sort` and `move` methods. Non mutating array methods can be used as normal. + * @property {string} repeating_section_name._section - the name of the repeating section. Used internally by the scaffold. Readonly. + * @property {function} move - Method for reordering rows. + * @property {number|string} move.startingPosition - the row id or position index for the row you want to move. + * @property {number} move.destination - The position in the section where you want the row to be moved to. If the position is greater than the length of the section, the row will be moved to the last position. If the position is negative, it will be moved to the start of the section. + * @property {boolean} [move.silent=false] - Whether the reordering should trigger setSectionOrder or not. + * @property {function} sort - Alias for the default Array.sort method. Functions as the default sort method, but has an optional second argument. + * @property {function} sort.callback - The function to use for determining the sort order. See the [Array.sort documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) for details. + * @property {boolean} [sort.silent=false] - Whether to apply the sort to the display of the repeating section. + * @property {function} create - Method for creating a new row in a repeating section. Arguments for this method can be in any order. A row will not actually be created unless data is assigned to at least one attribute of the row, either at creation or later. Returns the object representing the new row. + * @property {string} [create.custom] - Custom text that replaces the starting characters of the rowID + * @property {object} [create.data] - what to set the attribute values of the row to. If not provided, the row object will be created, but no row will be created on the sheet until data is specified. + * @property {object} repeating_section_name.rowID_or_Index - Returns the object describing a row in a repeating section specified by row ID or indexed position. (e.g. `attributes.repeating_weapons[0]` returns the data for the first row in the weapons section) + * * @property {object} repeating_section_name.rowID_or_Index._id - The id of the row. Readonly. + * * @property {object} repeating_section_name.rowID_or_Index._section - The repeating section the row belongs to. Readonly. + * @property {any} repeating_section_name.rowID_or_Index.attribute_name - functions as an attribute_name call on the base attributes object. (e.g. `attributes['repeating_weapons_-jJ2soils_name']` is equivalent to `attributes.repeating_weapons['-jJ2soils'].name`). + * @type {object} + */ + const createAttrProxy = function(attrs,sections,casc){ + //creates a proxy for the attributes object so that values can be worked with more easily. + const getCascObj = function(event){ + const eventName = event.triggerName || event.sourceAttribute; + let typePrefix = eventName.startsWith('clicked:') ? + 'act_' : + event.removedInfo ? + 'fieldset_' : + 'attr_'; + let cascName = `${typePrefix}${eventName.replace(/(?:removed?|clicked):/,'')}`; + let cascObj = casc[cascName]; + if(kFuncs.verboseMode){ + debug({[cascName]:cascObj}); } - } - return cascObj || {}; - }; - - const triggerFunctions = function(obj){ - if(obj.triggeredFuncs && obj.triggeredFuncs.length){ - debug(`triggering functions for ${obj.name}`); - obj.triggeredFuncs && obj.triggeredFuncs.forEach(func=>funcs[func] ? - funcs[func]({trigger:obj,attributes,sections,casc}) : - debug(`!!!Warning!!! no function named ${func} found. Triggered function not called for ${obj.name}`,true)); - } - }; - - const initialFunction = function(obj){ - if(obj.initialFunc){ - debug(`initial functions for ${obj.name}`); - funcs[obj.initialFunc] ? - funcs[obj.initialFunc]({trigger:obj,attributes,sections}) : - debug(`!!!Warning!!! no function named ${obj.initialFunc} found. Initial function not called for ${obj.name}`,true); - } - }; - const alwaysFunctions = function(trigger){ - Object.values(allHandlers).forEach((handler)=>{ - handler({trigger,attributes,sections,casc}); - }); - }; - const processChange = function({event,trigger}){ - if(event && !trigger){ - debug(`${event.sourceAttribute} change detected. No trigger found`); - return; - } - if(!attributes || !sections || !casc){ - debug(`!!! Insufficient arguments || attributes > ${!!attributes} | sections > ${!!sections} | casc > ${!!casc} !!!`); - return; - } - debug({trigger}); - if(event){ - debug('checking for initial & always functions'); - if(Array.isArray(trigger.affects)){ - attributes.queue.push(...trigger.affects); - } - alwaysFunctions(trigger,attributes,sections,casc);//Functions that should be run for all events. - initialFunction(trigger,attributes,sections,casc);//functions that should only be run if the attribute was the thing changed by the user - - } - if(trigger){ - debug(`processing ${trigger.name}`); - triggerFunctions(trigger,attributes,sections,casc); - if(!event){ - // Handle autocalc formula - if(trigger.formula){ - attributes[trigger.name] = parseKFormula({trigger,attributes,sections,casc}); - } - // handle calculation of element - if( - trigger.calculation && - funcs[trigger.calculation] - ){ - attributes[trigger.name] = funcs[trigger.calculation]({trigger,attributes,sections,casc}); - }else if(trigger.calculation && !funcs[trigger.calculation]){ - debug(`K-Scaffold Error: No function named ${trigger.calculation} found`); + if(event && cascObj){ + Object.assign(cascObj,event); + if(event.originalRollId){ + cascObj.rollData = RE.unescape(event.originalRollId); } } - } - attributes.set(); - }; - const attrTarget = { - updates:{}, - attributes:{...attrs}, - repOrders:{}, - queue: [], - casc:{}, - alwaysFunctions, - processChange, - triggerFunctions, - initialFunction, - getCascObj - }; - const attrHandler = { - get:function(obj,prop){//gets the most value of the attribute. - //If it is a repeating order, returns the array, otherwise returns the update value or the original value - if(prop === 'toJSON'){ - return () => ({...obj.attributes,...obj.updates}); - } else if(prop === 'set'){ - return function(){ - let {callback,vocal} = arguments[0] ? arguments[0] : {}; - if(sections && casc && attributes.queue.length){ - const triggerName = attributes.queue.shift(); - const trigger = getCascObj({sourceAttribute:triggerName}); - processChange({trigger,attributes,sections,casc}); - }else{ - debug({updates:obj.updates}); - const trueCallback = Object.keys(obj.repOrders).length ? - function(){ - Object.entries(obj.repOrders).forEach(([section,order])=>{ - _setSectionOrder(section,order) - }); - callback && callback(); - }: - callback; - Object.keys(obj.updates).forEach((key)=>obj.attributes[key] = obj.updates[key]); - const update = obj.updates; - obj.updates = {}; - set(update,vocal,trueCallback); + return cascObj || {}; + }; + + const triggerFunctions = function(obj){ + if(obj.triggeredFuncs && obj.triggeredFuncs.length){ + if(kFuncs.verboseMode){ + debug(`triggering functions for ${obj.name}`); + } + obj.triggeredFuncs && obj.triggeredFuncs.forEach(func=>funcs[func] ? + funcs[func]({trigger:obj,attributes,sections,casc}) : + debug(`!!!Warning!!! no function named ${func} found. Triggered function not called for ${obj.name}`,true)); + } + }; + + const initialFunction = function(obj){ + if(obj.initialFunc){ + if(kFuncs.verboseMode){ + debug(`initial functions for ${obj.name}`); + } + funcs[obj.initialFunc] ? + funcs[obj.initialFunc]({trigger:obj,attributes,sections}) : + debug(`!!!Warning!!! no function named ${obj.initialFunc} found. Initial function not called for ${obj.name}`,true); + } + }; + const alwaysFunctions = function(trigger){ + Object.values(allHandlers).forEach((handler)=>{ + handler({trigger,attributes,sections,casc}); + }); + }; + const processChange = function({event,trigger}){ + if(event && !trigger){ + debug(`${event.sourceAttribute} change detected. No trigger found`); + return; + } + if(!attributes || !sections || !casc){ + debug(`!!! Insufficient arguments || attributes > ${!!attributes} | sections > ${!!sections} | casc > ${!!casc} !!!`); + return; + } + if(kFuncs.verboseMode){ + debug({trigger}); + } + if(event){ + if(Array.isArray(trigger.affects)){ + attributes.queue.push(...trigger.affects); + } + alwaysFunctions(trigger,attributes,sections,casc);//Functions that should be run for all events. + initialFunction(trigger,attributes,sections,casc);//functions that should only be run if the attribute was the thing changed by the user + + } + if(trigger){ + triggerFunctions(trigger,attributes,sections,casc); + if(!event){ + // Handle autocalc formula + if(trigger.formula){ + attributes[trigger.name] = parseKFormula({trigger,attributes,sections,casc}); + } + // handle calculation of element + if( + trigger.calculation && + funcs[trigger.calculation] + ){ + attributes[trigger.name] = funcs[trigger.calculation]({trigger,attributes,sections,casc}); + }else if(trigger.calculation && !funcs[trigger.calculation]){ + debug(`K-Scaffold Error: No function named ${trigger.calculation} found`); } } - }else if(Object.keys(obj).some(key=>key===prop)){ - return Reflect.get(...arguments) - }else{ - let retValue; - switch(true){ - case obj.repOrders.hasOwnProperty(prop): - retValue = obj.repOrders[prop]; - break; - case obj.updates.hasOwnProperty(prop): - retValue = obj.updates[prop]; - break; - default: - retValue = obj.attributes[prop]; - break; - } - let cascRef = `attr_${prop.replace(/(repeating_[^_]+_)[^_]+/,'$1\$X')}`.toLowerCase(); - let numRetVal = +retValue; - if(!Number.isNaN(numRetVal) && retValue !== ''){ - retValue = numRetVal; - }else if(cascades[cascRef] && (typeof cascades[cascRef].defaultValue === 'number' || cascades[cascRef].type === 'number')){ - retValue = cascades[cascRef].defaultValue; - } - return retValue; } - }, - set:function(obj,prop,value){ - //Sets the value. Also verifies that the value is a valid attribute value - //e.g. not undefined, null, or NaN - if(value || value===0 || value===''){ - if(/reporder|^repeating_[^_]+$/.test(prop)){ - let section = prop.replace(/_reporder_/,''); - obj.repOrders[section] = value; - }else if(`${obj.attributes}` !== `${value}` || - (obj.updates[prop] && `${obj.updates}` !== `${value}`) + attributes.set(); + }; + const attrTarget = { + updates:{}, + attributes:{...attrs}, + repOrders:{}, + queue: [], + casc:{}, + alwaysFunctions, + processChange, + triggerFunctions, + initialFunction, + getCascObj + }; + const repeatObjects = {}; + const repeatTargetObjects = {}; + const repeatHandler = { + get:function(obj,prop){ + const row = `${obj._section}_${obj._id}`; + if(prop === '_isProxy'){ + return true; + } + if(prop === 'toJSON'){ + return () => { + return Object.keys(obj).reduce((o,k) => { + o[k] = attributes[`${row}_${k}`]; + return o; + },{_id: obj._id,_section: obj._section}); + } + } + if(prop === 'remove'){ + return function(){ + delete attributes[obj._section][obj._id]; + } + } + return obj[prop]; + }, + set: function(obj,prop,value){ + if(prop === '_id' || prop === '_section'){ + throw new Error(`!!!Warning: cannot change the id or section of a repeating object!!!`); + }else if( prop === '_index'){ + throw new Error(`!!!Warning: Cannot reorder sections by setting the _index. Sort the repeating array or use k.setSectionOrder!!!`); + } + const fullRef = `${obj._section}_${obj._id}_${prop}`; + attributes[fullRef] = value; + obj[prop] = value; + } + }; + const repeatArrHandler = { + get(arr,prop){ + prop = typeof prop === 'string' ? + prop.replace(/^\$/,'') : + prop; + if(prop === '_isProxy'){ + return true; + } + if( + prop === 'fill' || + prop === 'shift' || + prop === 'pop' || + prop === 'unshift' || + prop === 'splice' ){ - if(sections && casc){ - const trigger = getCascObj({sourceAttribute:prop}); - if(Array.isArray(trigger.affects)){ - attributes.queue.push(...trigger.affects); + throw new Error(`The ${prop} method is not allowed on section arrays`); + } + if(prop === 'create'){ + return function(){ + const argArray = [...arguments]; + const custom = argArray.find(e => typeof e === 'string'); + const data = argArray.find(e => typeof e === 'object' && !Array.isArray(e)); + + const row = _generateRowID(arr._section,sections,custom); + const id = row.replace(/repeating_[^_]+_/,''); + arr[id] = createRepeatObj(arr._section,id); + arr.push(arr[id]); + if(data){ + Object.entries(data).forEach(([key,value]) => { + if(arr[id].hasOwnProperty(key)){ + arr[id][key] = value; + }else{ + debug(`!!!Warning: no input exists in ${obj._section} for the attribute "${key}"!!!`); + } + }); + } + return arr[id]; + } + } + if(prop === 'move'){ + return function(){ + const ref = arguments[0]; + const targ = arguments[1]; + const vocal = !arguments[2] + // TODO: add protection for missing arguments + let id; + let index; + if(sections[arr._section].includes(ref)){ + id = ref; + index = sections[arr._section].indexOf(id); + }else if(!Number.isNaN(ref)){ + index = ref; + id = sections[arr._section][index]; + } + if( + !Number.isNaN(index) && + id && + !Number.isNaN(targ) + ){ + const obj = arr.splice(index,1); + arr.splice(targ,0,obj); + sections[arr._section].splice(index,1); + sections[arr._section].splice(targ,0,id); + if(vocal){ + _setSectionOrder(arr._section,sections[arr._section]); + } } } - obj.updates[prop] = value; } - }else{ - debug(`!!!Warning: Attempted to set ${prop} to an invalid value:${value}; value not stored!!!`); + if(prop === 'sort'){ + return function(){ + const callback = arguments[0]; + const vocal = !arguments[1]; + sections[arr._section].sort((a,b) => { + const aObj = arr[a]; + const bObj = arr[b]; + const sortResult = callback(aObj,bObj); + return sortResult; + }); + arr.sort((a,b) => { + const aIndex = sections[arr._section].indexOf(a._id); + const bIndex = sections[arr._section].indexOf(b._id); + return aIndex - bIndex; + }); + // if not a silent sort, then apply the reordered section to the sheet via setSectionOrder + if(vocal){ + _setSectionOrder(arr._section,sections[arr._section]); + } + return arr; + } + } + if(arr[prop] || Number.isNaN(prop)){ + return Reflect.get(...arguments); + } + if(sections[arr._section].includes(prop)){ + arr[prop] = createRepeatObj(arr._section,prop); + arr.push(arr[prop]); + return arr[prop]; + } + }, + set(obj,prop,value){ + if(prop === 'section'){ + throw new Error('!!!Warning: Section property of a repeating section is readonly!!!') + } + }, + deleteProperty(arr,prop){ + if( + !prop.startsWith('_') && + arr[prop] && + arr[prop]._isProxy + ){ + let id; + let index; + if(typeof prop === 'string' && prop.startsWith('-')){ + id = prop; + index = sections[arr._section].indexOf(id); + }else{ + index = prop; + id = arr[index]._id; + } + delete arr[id]; + arr.splice(index,1); + sections[arr._section].splice(index,1); + const row = `${arr._section}_${id}`; + removeRepeatingRow(row); + } } - return true; - }, - deleteProperty(obj,prop){ - //removes the property from the original attributes, updates, and the reporders - Object.keys(obj).forEach((key)=>{ - delete obj[key][prop.toLowerCase()]; - }); + }; + const createRepeatObj = (prop,id) => { + const row = `${prop}_${id}`; + const fields = repeatingSectionDetails.find(o => o.section === prop).fields; + const retObj = fields.reduce((o,field) => { + o[field] = attributes[`${row}_${field}`]; + return o; + },{_id:id,_section: prop}) + repeatTargetObjects[prop] = repeatTargetObjects[prop] || {}; + repeatTargetObjects[prop][id] = retObj; + return new Proxy(retObj,repeatHandler); } + const attrHandler = { + get:function(obj,prop){//gets the most value of the attribute. + if(prop === '_isProxy'){ + return true; + } + if(prop === 'toJSON'){ + return () => ({...obj.attributes,...obj.updates}); + }else if(prop === 'set'){ + return function(){ + let {callback,vocal} = arguments[0] ? arguments[0] : {}; + if(sections && casc && attributes.queue.length){ + const triggerName = attributes.queue.shift(); + const trigger = getCascObj({sourceAttribute:triggerName}); + processChange({trigger,attributes,sections,casc}); + }else{ + if(kFuncs.verboseMode){ + debug({updates:obj.updates}); + } + const trueCallback = Object.keys(obj.repOrders).length ? + function(){ + Object.entries(obj.repOrders).forEach(([section,order])=>{ + _setSectionOrder(section,order) + }); + callback && callback(); + }: + callback; + Object.keys(obj.updates).forEach((key)=>obj.attributes[key] = obj.updates[key]); + const update = obj.updates; + obj.updates = {}; + set(update,vocal,trueCallback); + } + } + }else if(/^repeating_[^_]+$/.test(prop)){ + // if it's been lazy loaded, use it + if(!repeatObjects[prop]){ + // otherwise lazy load it + const baseArr = []; + baseArr._section = prop; + repeatObjects[prop] = new Proxy(sections[prop].reduce((arr,id,i) => { + const rowObj = createRepeatObj(prop,id,i); + arr.push(rowObj); + arr[id] = rowObj; + return arr; + },baseArr),repeatArrHandler); + } + return repeatObjects[prop]; + }else if(Object.keys(obj).some(key=>key===prop)){ + return Reflect.get(...arguments) + }else{ + let retValue; + switch(true){ + case obj.repOrders.hasOwnProperty(prop): + retValue = obj.repOrders[prop]; + break; + case obj.updates.hasOwnProperty(prop): + retValue = obj.updates[prop]; + break; + default: + retValue = obj.attributes[prop]; + break; + } + let cascRef = `attr_${prop.replace(/(repeating_[^_]+_)[^_]+/,'$1\$X')}`.toLowerCase(); + let numRetVal = +retValue; + if(!Number.isNaN(numRetVal) && retValue !== ''){ + retValue = numRetVal; + }else if(cascades[cascRef] && (typeof cascades[cascRef].defaultValue === 'number' || cascades[cascRef].type === 'number')){ + retValue = cascades[cascRef].defaultValue; + } + return retValue; + } + }, + set:function(obj,prop,value){ + //Sets the value. Also verifies that the value is a valid attribute value + //e.g. not undefined, null, or NaN + if(value || value===0 || value===''){ + if(/reporder/.test(prop)){ + let section = prop.replace(/_reporder_/,''); + obj.repOrders[section] = value; + }else if(`${obj.attributes}` !== `${value}` || + (obj.updates[prop] && `${obj.updates}` !== `${value}`) + ){ + if(sections && casc){ + let trigger = getCascObj({sourceAttribute:prop}); + if(!trigger.name){ + Object.assign(casc,expandCascade(cascades,sections)); + trigger = getCascObj({sourceAttribute:prop}); + } + if(Array.isArray(trigger.affects)){ + attributes.queue.push(...trigger.affects); + } + } + const repRx = /^(repeating_[^_]+)_([^_]+)_(.+)$/; + if(repRx.test(prop)){ + const [,section,rowID,field] = prop.match(repRx); + if(repeatObjects[section]){ + repeatObjects[section][rowID] = repeatObjects[section][rowID] || createRepeatObj(section,rowID); + repeatTargetObjects[section][rowID][field] = value; + } + } + obj.updates[prop] = value; + } + }else{ + debug(`!!!Warning: Attempted to set ${prop} to an invalid value:${value}; value not stored!!!`); + } + return true; + }, + deleteProperty(obj,prop){ + //removes the property from the original attributes, updates, and the reporders + Object.keys(obj).forEach((key)=>{ + delete obj[key][prop.toLowerCase()]; + }); + } + }; + const attributes = new Proxy(attrTarget,attrHandler); + return attributes; }; - const attributes = new Proxy(attrTarget,attrHandler); - return attributes; -}; - -/** - * Function that registers a function for being called via the funcs object. Returns true if the function was successfully registered, and false if it could not be registered for any reason. - * @memberof Utilities - * @param {object} funcObj - Object with keys that are names to register functions under and values that are functions. - * @param {object} optionsObj - Object that contains options to use for this registration. - * @param {string[]} optionsObj.type - Array that contains the types of specialized functions that apply to the functions being registered. Valid types are `"opener"`, `"updater"`, and `"default"`. `"default"` is always used, and never needs to be passed. - * @returns {boolean} - True if the registration succeeded, false if it failed. - * @example - * //Basic Registration - * const myFunc = function({trigger,attributes,sections,casc}){}; - * k.registerFuncs({myFunc}); - * - * //Register a function to run on sheet open - * const openFunc = function({trigger,attributes,sections,casc}){}; - * k.registerFuncs({openFunc},{type:['opener']}) - * - * //Register a function to run on all events - * const allFunc = function({trigger,attributes,sections,casc}){}; - * k.registerFuncs({allFunc},{type:['all']}) - */ -const registerFuncs = function(funcObj,optionsObj = {}){ - if(typeof funcObj !== 'object' || typeof optionsObj !== 'object'){ - debug(`!!!! K-scaffold error: Improper arguments to register functions !!!!`); - return false; - } - const typeArr = optionsObj.type ? ['default',...optionsObj.type] : ['default']; - const typeSwitch = { - 'opener':openHandlers, - 'updater':updateHandlers, - 'new':initialSetups, - 'all':allHandlers, - 'default':funcs + + /** + * Function that registers a function for being called via the funcs object. Returns true if the function was successfully registered, and false if it could not be registered for any reason. + * @memberof Utilities + * @param {object} funcObj - Object with keys that are names to register functions under and values that are functions. + * @param {object} optionsObj - Object that contains options to use for this registration. + * @param {string[]} optionsObj.type - Array that contains the types of specialized functions that apply to the functions being registered. Valid types are `"opener"`, `"updater"`, and `"default"`. `"default"` is always used, and never needs to be passed. + * @returns {boolean} - True if the registration succeeded, false if it failed. + * @example + * //Basic Registration + * const myFunc = function({trigger,attributes,sections,casc}){}; + * k.registerFuncs({myFunc}); + * + * //Register a function to run on sheet open + * const openFunc = function({trigger,attributes,sections,casc}){}; + * k.registerFuncs({openFunc},{type:['opener']}) + * + * //Register a function to run on all events + * const allFunc = function({trigger,attributes,sections,casc}){}; + * k.registerFuncs({allFunc},{type:['all']}) + */ + const registerFuncs = function(funcObj,optionsObj = {}){ + if(typeof funcObj !== 'object' || typeof optionsObj !== 'object'){ + debug(`!!!! K-scaffold error: Improper arguments to register functions !!!!`); + return false; + } + const typeArr = optionsObj.type ? ['default',...optionsObj.type] : ['default']; + const typeSwitch = { + 'opener':openHandlers, + 'updater':updateHandlers, + 'new':initialSetups, + 'all':allHandlers, + 'default':funcs + }; + let setState; + Object.entries(funcObj).map(([prop,value])=>{ + typeArr.forEach((type)=>{ + if(typeSwitch[type][prop]){ + debug(`!!! Duplicate function name for ${prop} as ${type}!!!`); + setState = false; + }else if(typeof value === 'function'){ + typeSwitch[type][prop] = value; + setState = setState !== false ? true : false; + }else{ + debug(`!!! K-scaffold error: Function registration requires a function. Invalid value to register as ${type} !!!`); + setState = false; + } + }); + }); + return setState; }; - let setState; - Object.entries(funcObj).map(([prop,value])=>{ - typeArr.forEach((type)=>{ - if(typeSwitch[type][prop]){ - debug(`!!! Duplicate function name for ${prop} as ${type}!!!`); - setState = false; - }else if(typeof value === 'function'){ - typeSwitch[type][prop] = value; - setState = setState !== false ? true : false; + kFuncs.registerFuncs = registerFuncs; + + /** + * Function that sets up the action calls used in the roller mixin. + * @memberof Sheetworkers + * @param {object} attributes - The attribute values of the character + * @param {object[]} sections - All the repeating section IDs + */ + const setActionCalls = function({attributes,sections}){ + actionAttributes.forEach((base)=>{ + let [section,,field] = k.parseTriggerName(base); + let fieldAction = field.replace(/_/g,'-'); + if(section){ + sections[section].forEach((id)=>{ + attributes[`${section}_${id}_${field}`] = `%{${attributes.character_name}|${section}_${id}_${fieldAction}}`; + }); }else{ - debug(`!!! K-scaffold error: Function registration requires a function. Invalid value to register as ${type} !!!`); - setState = false; + attributes[`${field}`] = `%{${attributes.character_name}|${fieldAction}}`; } }); - }); - return setState; -}; -kFuncs.registerFuncs = registerFuncs; - -/** - * Function that sets up the action calls used in the roller mixin. - * @memberof Sheetworkers - * @param {object} attributes - The attribute values of the character - * @param {object[]} sections - All the repeating section IDs - */ -const setActionCalls = function({attributes,sections}){ - actionAttributes.forEach((base)=>{ - let [section,,field] = k.parseTriggerName(base); - let fieldAction = field.replace(/_/g,'-'); - if(section){ - sections[section].forEach((id)=>{ - attributes[`${section}_${id}_${field}`] = `%{${attributes.character_name}|${section}_${id}_${fieldAction}}`; - }); + }; + funcs.setActionCalls = setActionCalls; + kFuncs.setActionCalls = setActionCalls; + + + /** + * Function that reduces Roll20 macro syntax formulas down to their calculated value. + * @memberof Sheetworkers + * @param {object} attributes - The attribute values of the character + * @param {object[]} sections - All the repeating section IDs + */ + const parseKFormula = ({trigger,attributes,sections,casc}) => { + const [baseSection,rowID,attrName] = parseTriggerName(trigger.name); + const repeatBlockRx = baseSection ? + /(@{repeating_.+?_\$X_.+?})/g : + /={([^)]*repeating_[^_]+[^)]*)}=/g; + let mutFormula = trigger.formula; + mutFormula = mutFormula.replace(repeatBlockRx,(match,repeatMacro) => { + const [section] = repeatMacro.match(/repeating_[^_]+/); + const idArray = baseSection ? + [rowID] : + sections[section]; + return idArray.map(id => { + return `(${repeatMacro.replace(/repeating_[^_]+?_[^_]+?_([^}]+)/g,`${section}_${id}_$1`)})`; + }).join( + trigger.type === 'number' ? + ' + ' : + '' + ); + }); + mutFormula = parseMacro(mutFormula,attributes) + .replace(/@{.+?}/g,'0'); + const mathKeys = ['floor','ceil','round','abs']; + mathKeys.forEach(func => mutFormula = mutFormula.replace(new RegExp(`${func}\\(`,'g'),`Math.${func}(`)); + const mathRx = new RegExp(`Math\\.(?:${mathKeys.join('|')})`,'g'); + let noAlphaStr = mutFormula + .replace(mathRx,''); + return trigger.type !== 'text' ? + ( + !noAlphaStr.match(/[a-z]/i) ? + eval(mutFormula) : + undefined + ) : + mutFormula; + }; + funcs.parseKFormula = parseKFormula; + kFuncs.parseKFormula = parseKFormula; + + /** + * Function to call a function previously registered to the funcs object. May not be used that much in actual sheets, but very useful when writing unit tests for your sheet. Either returns the function or null if no function exists. + * @memberof Sheetworkers + * @param {string} funcName - The name of the function to invoke. + * @param {...any} args - The arguments to call the function with. + * @returns {function|null} + * @example + * //Call myFunc with two arguments + * k.callFunc('myFunc','an argument','another argument'); + */ + const callFunc = function(funcName,...args){ + if(funcs[funcName]){ + if(kFuncs.verboseMode){ + debug(`calling ${funcName}`); + } + return funcs[funcName](...args); }else{ - attributes[`${field}`] = `%{${attributes.character_name}|${fieldAction}}`; + debug(`Invalid function name: ${funcName}`); + return null; } - }); -}; -funcs.setActionCalls = setActionCalls; -kFuncs.setActionCalls = setActionCalls; - - -/** - * Function that reduces Roll20 macro syntax formulas down to their calculated value. - * @memberof Sheetworkers - * @param {object} attributes - The attribute values of the character - * @param {object[]} sections - All the repeating section IDs - */ -const parseKFormula = ({trigger,attributes,sections,casc}) => { - const [baseSection,rowID,attrName] = parseTriggerName(trigger.name); - const repeatBlockRx = baseSection ? - /(@{repeating_.+?_\$X_.+?})/g : - /={([^)]*repeating_[^_]+[^)]*)}=/g; - let mutFormula = trigger.formula; - mutFormula = mutFormula.replace(repeatBlockRx,(match,repeatMacro) => { - const [section] = repeatMacro.match(/repeating_[^_]+/); - const idArray = baseSection ? - [rowID] : - sections[section]; - return idArray.map(id => { - return `(${repeatMacro.replace(/repeating_[^_]+?_[^_]+?_([^}]+)/g,`${section}_${id}_$1`)})`; - }).join( - trigger.type === 'number' ? - ' + ' : - '' - ); - }); - mutFormula = parseMacro(mutFormula,attributes) - .replace(/@{.+?}/g,'0'); - const mathKeys = ['floor','ceil','round','abs']; - mathKeys.forEach(func => mutFormula = mutFormula.replace(new RegExp(`${func}\\(`,'g'),`Math.${func}(`)); - const mathRx = new RegExp(`Math\\.(?:${mathKeys.join('|')})`,'g'); - let noAlphaStr = mutFormula - .replace(mathRx,''); - return trigger.type !== 'text' ? - ( - !noAlphaStr.match(/[a-z]/i) ? - eval(mutFormula) : - undefined - ) : - mutFormula; -}; -funcs.parseKFormula = parseKFormula; -kFuncs.parseKFormula = parseKFormula; - -/** - * Function to call a function previously registered to the funcs object. May not be used that much in actual sheets, but very useful when writing unit tests for your sheet. Either returns the function or null if no function exists. - * @memberof Sheetworkers - * @param {string} funcName - The name of the function to invoke. - * @param {...any} args - The arguments to call the function with. - * @returns {function|null} - * @example - * //Call myFunc with two arguments - * k.callFunc('myFunc','an argument','another argument'); - */ -const callFunc = function(funcName,...args){ - if(funcs[funcName]){ - debug(`calling ${funcName}`); - return funcs[funcName](...args); - }else{ - debug(`Invalid function name: ${funcName}`); - return null; - } -}; -kFuncs.callFunc = callFunc;/**@namespace Sheetworkers */ + }; + kFuncs.callFunc = callFunc;/**@namespace Sheetworkers */ /*jshint esversion: 11, laxcomma:true, eqeqeq:true*/ /*jshint -W014,-W084,-W030,-W033*/ //Sheet Updaters and styling functions @@ -3065,14 +3352,20 @@ const updateSheet = function(){ log('updating sheet'); getAllAttrs({props:['debug_mode',...baseGet],callback:(attributes,sections,casc)=>{ kFuncs.debugMode = kFuncs.debugMode || !!attributes.debug_mode; - debug({sheet_version:attributes.sheet_version}); + if(kFuncs.verboseMode){ + debug({sheet_version:attributes.sheet_version}); + } if(!attributes.sheet_version){ Object.entries(initialSetups).forEach(([funcName,handler])=>{ if(typeof funcs[funcName] === 'function'){ - debug(`running ${funcName}`); + if(kFuncs.verboseMode){ + debug(`running ${funcName}`); + } funcs[funcName]({attributes,sections,casc}); }else{ - debug(`!!!Warning!!! no function named ${funcName} found. Initial sheet setup not performed.`); + if(kFuncs.verboseMode){ + debug(`!!!Warning!!! no function named ${funcName} found. Initial sheet setup not performed.`); + } } }); }else{ @@ -3082,13 +3375,19 @@ const updateSheet = function(){ } }); } - k.debug({openHandlers}); + if(kFuncs.verboseMode){ + debug({openHandlers}); + } Object.entries(openHandlers).forEach(([funcName,func])=>{ if(typeof funcs[funcName] === 'function'){ - debug(`running ${funcName}`); + if(kFuncs.verboseMode){ + debug(`running ${funcName}`); + } funcs[funcName]({attributes,sections,casc}); }else{ - debug(`!!!Warning!!! no function named ${funcName} found. Sheet open handling not performed.`); + if(kFuncs.verboseMode){ + debug(`!!!Warning!!! no function named ${funcName} found. Sheet open handling not performed.`); + } } }); setActionCalls({attributes,sections}); @@ -3101,7 +3400,9 @@ const updateSheet = function(){ kFuncs.updateSheet = updateSheet; const initialSetup = function(attributes,sections){ - debug('Initial sheet setup'); + if(kFuncs.verboseMode){ + debug('Initial sheet setup'); + } }; /** @@ -3114,8 +3415,10 @@ const initialSetup = function(attributes,sections){ * on('change:an_attribute',k.accessSheet); */ const accessSheet = function(event){ - debug({funcs:Object.keys(funcs)}); - debug({event}); + if(kFuncs.verboseMode){ + debug({funcs:Object.keys(funcs)}); + debug({event}); + } getAllAttrs({callback:(attributes,sections,casc)=>{ let trigger = attributes.getCascObj(event,casc); attributes.processChange({event,trigger,attributes,sections,casc}); @@ -3206,7 +3509,11 @@ const _setSectionOrder = function(section,order){ let trueSection = section.replace(/repeating_/,''); setSectionOrder(trueSection,order); }; -kFuncs.setSectionOrder = _setSectionOrder; +// deprecation warning added to setSectionOrder +kFuncs.setSectionOrder = (section,order) => { + debug('###Deprecation: It is recommended to use the "move" method of the nested section info feature of the attributes object instead of setSectionOrder'); + _setSectionOrder(section,order); +}; /** * Alias for [removeRepeatingRow](https://wiki.roll20.net/Sheet_Worker_Scripts#removeRepeatingRow.28_RowID_.29) that also removes the row from the current object of attribute values and array of section IDs to ensure that erroneous updates are not issued. @@ -3228,7 +3535,6 @@ kFuncs.setSectionOrder = _setSectionOrder; * }) */ const _removeRepeatingRow = function(row,attributes,sections){ - debug(`removing ${row}`); Object.keys(attributes.attributes).forEach((key)=>{ if(key.startsWith(row)){ delete attributes[key]; @@ -3236,6 +3542,7 @@ const _removeRepeatingRow = function(row,attributes,sections){ }); let [,section,rowID] = row.match(/(repeating_[^_]+)_(.+)/,''); sections[section] = sections[section].filter((id)=>id!==rowID); + delete attributes[section][rowID]; removeRepeatingRow(row); }; kFuncs.removeRepeatingRow = _removeRepeatingRow; @@ -3403,7 +3710,10 @@ const _generateRowID = function(section,sections,customText){ sections[section].push(rowID); return `${section}_${rowID}`; }; -kFuncs.generateRowID = _generateRowID; +kFuncs.generateRowID = (section,sections,customText) => { + debug('###Deprecation: It is recommended to use the "create" method of the nested section info feature of the attributes object instead of k.generateRowID'); + return _generateRowID(section,sections,customText); +}; /** * An alias for [Roll20's getTranslationByKey](https://wiki.roll20.net/Sheet_Worker_Scripts#getTranslationByKey.28.5Bkey.5D.29) that also supports data-i18n-vars syntax replacement and returns the translation key if no value is found instead of `false`. @@ -3432,9 +3742,7 @@ kFuncs.getTranslationByKey = _getTranslationByKey; */ const assembleRoll = (rollObj,rollStart = kFuncs.defaultRollStart) => { return Object.entries(rollObj).reduce((str,[field,content])=>{ - return str += content ? - ` {{${field}=${content}}}` : - ''; + return str += ` {{${field}=${content ?? ''}}}`; },`${rollStart}`); }; @@ -3484,7 +3792,9 @@ kFuncs.baseGet = baseGet; const registerEventHandlers = function(){ on('sheet:opened',updateSheet); - debug({funcKeys:Object.keys(funcs),funcs}); + if(kFuncs.verboseMode){ + debug({funcKeys:Object.keys(funcs),funcs}); + } //Roll20 change and click listeners Object.entries(listeners).forEach(([event,funcName])=>{ if(funcs[funcName]){ @@ -3508,7 +3818,6 @@ const addItem = function(event){ getAllAttrs({ callback:(attributes,sections,casc) => { let row = _generateRowID(section,sections); - debug({row}); attributes[`${row}_name`] = ''; setActionCalls({attributes,sections}); const trigger = cascades[`fieldset_repeating_${section}`]; @@ -3566,7 +3875,7 @@ const kTabOnOpen = function({trigger,attributes,sections,casc}){ registerFuncs({ kTabOnOpen },{type:['opener']}); return kFuncs; }()); - const actionAttributes = ["repeating_rollable-tables_$X_action","crit_action","fumble_action","repeating_spells_$X_corruption_action","repeating_spells_$X_misfire_action"];const itemCategories = ["Wizard Spells","Cleric Spells","Weapons","Armor","Equipment","Attacks"];const specialCategories = {"Wizard":"Wizard Spells","wizard":"Wizard Spells","Cleric":"Cleric Spells","cleric":"Cleric Spells"};const maxAttr = [];const sectionLookup = {"Wizard":"spells","wizard":"spells","Cleric":"spells","cleric":"spells"};const scores = ["strength","agility","stamina","personality","luck","intelligence"];const levelUpAttributes = ["level"];const levelUpSections = ["mancer-class-options","mancer-class-table"];const mancerStageFuncs = {"refresh":{"load":["resetWipe"],"exit":["resetWipe"]},"startup":{"load":[],"exit":[]},"create":{"load":[],"exit":[]},"class":{"load":[],"exit":[]},"level":{"load":["setupLevelMancer"],"exit":["leaveLevelMancer"]},"spells":{"load":["loadMancerSpells"],"exit":[]},"tables":{"load":[],"exit":[]}};const dynamicSelects = {".class-select":[{"value":"","data-i18n":"none","selected":"","condition":"static"},{"value":"Category:Classes data-cs-name:*","condition":"compendium"}]};const dynamicAttributes = {".class-select":["mancer_class"]};const dynamicSources = {"compendium:class":[".class-select"]};k.version = 1.06; + const actionAttributes = ["repeating_rollable-tables_$X_action","crit_action","fumble_action","repeating_spells_$X_corruption_action","repeating_spells_$X_misfire_action"];const itemCategories = ["Wizard Spells","Cleric Spells","Weapons","Armor","Equipment","Attacks"];const specialCategories = {"Wizard":"Wizard Spells","wizard":"Wizard Spells","Cleric":"Cleric Spells","cleric":"Cleric Spells"};const maxAttr = [];const sectionLookup = {"Wizard":"spells","wizard":"spells","Cleric":"spells","cleric":"spells"};const scores = ["strength","agility","stamina","personality","luck","intelligence"];const levelUpAttributes = ["level"];const levelUpSections = ["mancer-class-options","mancer-class-table"];const mancerStageFuncs = {"refresh":{"load":["resetWipe"],"exit":["resetWipe"]},"startup":{"load":[],"exit":[]},"create":{"load":[],"exit":[]},"class":{"load":[],"exit":[]},"level":{"load":["setupLevelMancer"],"exit":["leaveLevelMancer"]},"spells":{"load":["loadMancerSpells"],"exit":[]},"tables":{"load":[],"exit":[]}};const dynamicSelects = {".class-select":[{"value":"","data-i18n":"none","selected":"","condition":"static"},{"value":"Category:Classes data-cs-name:*","condition":"compendium"}]};const dynamicAttributes = {".class-select":["mancer_class"]};const dynamicSources = {"compendium:class":[".class-select"]};k.version = 1.07; k.defaultRollStart = '&{template:dcc}'; const expandEffects = (attributes,casc,queue,recurred = []) => { @@ -4407,7 +4716,8 @@ const reduceSection = function(section, attribute, attributes, sections, criteri sections, manipulator, fields, - casc + casc, + settings: attributes.modal_settings }; if(roll.title && roll.title === 'luck') { rollLuck(rollProps); @@ -4421,8 +4731,12 @@ const reduceSection = function(section, attribute, attributes, sections, criteri closeRollmodal(); }; k.registerFuncs({modalRoll});const genericRoll = function({trigger,attributes,sections,casc}) { + const [section,rowID] = k.parseTriggerName(trigger.name); + trigger.settings = trigger.settings || {}; + trigger.settings.row = section ? `${section}_${rowID}` : null; const roll = getRoll({trigger, attributes}); - if(!forceOpenModal && attributes['rollmodal_disabled'] && attributes['rollmodal_disabled'] == 1) { + if(trigger.rollData === 'nomodal' || + (!forceOpenModal && attributes['rollmodal_disabled'])) { rollSomething({ roll, attributes, @@ -4434,7 +4748,7 @@ k.registerFuncs({modalRoll});const genericRoll = function({trigger,attributes,se }); } else { forceOpenModal = false; - + attributes.modal_settings = trigger.settings; attributes.rollmodal_active = 1; attributes.rollmodal_title = k.getTranslationByKey(roll.title); attributes.rollmodal_base_formula = roll.formula1.replace('[[','').replace(']]',''); @@ -4445,6 +4759,9 @@ k.registerFuncs({modalRoll});const genericRoll = function({trigger,attributes,se } }; k.registerFuncs({genericRoll});const genericActionRoll = function({trigger,attributes,sections,casc}) { + const [section,rowID] = k.parseTriggerName(trigger.name); + trigger.settings = trigger.settings || {}; + trigger.settings.row = section ? `${section}_${rowID}` : null; const {actionDie = '1d20'} = trigger.settings || {}; const {formula = trigger.name} = trigger.settings || {}; const {title = trigger.title} = trigger.settings || {}; @@ -4453,10 +4770,12 @@ k.registerFuncs({genericRoll});const genericActionRoll = function({trigger,attri const roll = getRoll({trigger:trigger, attributes}); const customRoll = getRoll({trigger:customTrigger, actionDie:actionDie, attributes}); const modalRoll = getRoll({trigger:customTrigger, attributes}); + //debugger; if(subtitle) customRoll.subtitle = subtitle; if(title) customRoll.title = title; - if(!forceOpenModal && attributes['rollmodal_disabled'] && attributes['rollmodal_disabled'] == 1) { + if(trigger.rollData === 'nomodal' || + (!forceOpenModal && attributes['rollmodal_disabled'])) { rollSomething({ roll:customRoll, attributes, @@ -4465,7 +4784,8 @@ k.registerFuncs({genericRoll});const genericActionRoll = function({trigger,attri action:true, source:trigger.name, manipulator:trigger?.settings?.manipulator, - fields: trigger?.settings?.fields + fields: trigger?.settings?.fields, + settings: trigger.settings }); } else { forceOpenModal = false; @@ -4473,6 +4793,7 @@ k.registerFuncs({genericRoll});const genericActionRoll = function({trigger,attri attributes.rollmodal_active= 1; attributes.rollmodal_title= k.getTranslationByKey(rollModalTitle); + attributes.modal_settings = trigger.settings; attributes.rollmodal_base_formula= modalRoll.formula1.replace('[[','').replace(']]',''); attributes.rollmodal_final_formula= modalRoll.formula1.replace('[[','').replace(']]',''); attributes.rollmodal_has_action_die= 1; @@ -4758,31 +5079,42 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { //TODO: Do some refactoring on this terrible code: if(/init/.test(settings.roll.title || '')) settings.roll.formula1 = settings.roll.formula1.replace(']]', ' &{tracker}]]'); let cs = 20; + let isAttack = (settings?.roll?.title.includes('attack') || (settings?.roll?.subtitle && settings?.roll?.subtitle.includes('attack'))) ? true : false; if( - (settings.roll.title.includes('attack') || (settings.roll.subtitle && settings.roll.subtitle.includes('attack'))) + (settings?.roll?.title.includes('attack') || (settings?.roll?.subtitle && settings?.roll?.subtitle.includes('attack'))) && settings.attributes.class && settings.attributes.class === 'warrior' && settings.attributes.critical_threat_range && !isNaN(settings.attributes.critical_threat_range) ) { cs = parseInt(settings.attributes.critical_threat_range); - } + } const query = Object.entries(settings.roll).map(([key, value]) => {return `{{${key}=${value}}}`;}); if(settings.action) { query.push(`{{critical=[[0]]}}`); query.push(`{{fumble=[[0]]}}`); + query.push(`{{tablecall=[[0]]}}`) } if(settings.fields){ query.push(...settings.fields); } + if( + settings?.settings?.row && + (settings?.settings?.attack || isAttack)){ + const damage = settings.attributes[`${settings.settings.row}_damage`]; + const buttonName = settings.attributes.is_npc ? + 'roll-npc-damage' : + 'roll-pc-damage'; + query.push(`{{damagebutton=[${damage}](~@{character_id}|${settings.settings.row}_${buttonName}||nomodal})}}`); + } const includeAuthor = true; if(includeAuthor && settings.attributes['character_name']) query.push(`{{author=${settings.attributes['character_name']}}}`); - const template = settings.type === 'secret' ? `/w gm &{template:dcc}` : `&{template:dcc}`; + const template = settings.type === 'secret' ? `/w gm &{template:dcc}` : `&{template:dcc} {{characterid=@{character_id}}}`; startRoll(`${template} ${query.join(' ')}`, (results) => { - finish = {}; + const finish = {}; Object.keys(settings.roll).forEach(roll => { if(results.results[roll]) { const originalResult = results.results[roll].result; @@ -4796,15 +5128,14 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { const actionDie = results.results.formula1.rolls[0].results[0]; if(actionDie >= cs) { finish.critical = actionDie; - finish.fumble = ''; - } - else if(actionDie === 1) { + if(settings.attributes.compendium_detected){ + finish.tablecall = 'crit-action' + } + } else if(actionDie === 1) { finish.fumble = 1; - finish.critical = ''; - } - else { - finish.fumble = ''; - finish.critical = ''; + if(settings.attributes.compendium_detected){ + finish.tablecall = 'fumble-action' + } } } if(settings.manipulator){ @@ -4966,10 +5297,11 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { * @param {object} casc - Expanded cascade object */ const critButtonDisplay = function({trigger,attributes,sections,casc}){ - const levelXP = [10,50,110,190,290,410,550,710,890,1090]; - const reqXP = levelXP[+attributes.level|| 0]; + attributes.compendium_detected = 0; getPage('Occupations',()=>{ - $20('.compendium-dependent-content').removeClass('disabled'); + attributes.compendium_detected = 1; + attributes.set(); + $20('.compendium-dependent-content').removeClass('disabled'); }) }; k.registerFuncs({critButtonDisplay},{type:['opener']}); @@ -5059,6 +5391,41 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { k.registerFuncs({mancerStartup},{type:['new']}); + /** + * + * @param {object} trigger - The trigger that caused the function to be called + * @param {object} attributes - The attribute values of the character + * @param {object[]} sections - All the repeating section IDs + * @param {object} casc - Expanded cascade object + */ + const randomizeAll = async function({trigger,attributes,sections,casc}){ + // add spinning icon styling change + $20('.progress-spinner.create-character-spinner').removeClass('inactive') + determineOccupation({trigger,attributes,sections,casc},async () => { + await rollAbilityScores({trigger,attributes,sections,casc}); + await rollHP({trigger,attributes,sections,casc}); + await rollCoinage({trigger,attributes,sections,casc}); + await determineAlignment({trigger,attributes,sections,casc}); + $20('.progress-spinner.create-character-spinner').addClass('inactive') + }) + + }; + k.registerFuncs({randomizeAll}); + /** + * + * @param {object} trigger - The trigger that caused the function to be called + * @param {object} attributes - The attribute values of the character + * @param {object[]} sections - All the repeating section IDs + * @param {object} casc - Expanded cascade object + */ + const determineAlignment = async function({trigger,attributes,sections,casc}){ + console.log('alignment'); + const aligns = ['lawful','neutral','chaotic']; + const {roll} = await k.startRoll({d3:'[[d3-1]]'},'!'); + attributes.alignment = k.capitalize(aligns[roll.results.d3.result]); + attributes.set(); + }; + k.registerFuncs({determineAlignment}); /** * Rolls for the birth augur * @param {object} trigger - The trigger that caused the function to be called @@ -5068,6 +5435,7 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { */ const rollAugur = function({trigger,attributes,sections,casc}){ getTable('Luck Score',result => { + console.log('augur'); attributes.mancer_augur = result; attributes.set(); }) @@ -5081,6 +5449,7 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { * @param {object} casc - Expanded cascade object */ const rollHP = async function({trigger,attributes,sections,casc,levels = 1,hpDie = 'd4'}){ + console.log('augur'); const {roll} = await k.startRoll({roll:`[[${levels}${hpDie}]]`},'!'); roll.finish(); attributes.mancer_hp = roll.results.roll.result; @@ -5118,12 +5487,15 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { * @param {object[]} sections - All the repeating section IDs * @param {object} casc - Expanded cascade object */ - const determineOccupation = function({trigger,attributes,sections,casc}){ + const determineOccupation = function({trigger,attributes,sections,casc},callback){ getTable('Occupations',result => { attributes.mancer_occupation = result.result; attributes.mancer_trade_goods = result.result3; attributes.mancer_weapon = result.result2; attributes.set(); + if(callback){ + callback(); + } }) }; k.registerFuncs({determineOccupation}); @@ -5194,7 +5566,6 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { delete data.data; await weaponDrop('Weapons',[data],attributes,sections,casc); propagateEffects(attributes,sections,casc); - attributes.set(); }); } if(trade){ @@ -5204,7 +5575,6 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { Object.assign(data,data.data); await processDropData({data,attributes,sections,casc,section: tradeRow}); propagateAffects(attributes,sections,casc); - attributes.set(); }) } } @@ -6007,7 +6377,7 @@ k.registerFuncs({hpRoll});const rollSomething = (customSettings = {}) => { undead: ['d4','d6','d6','d8','d8','d10','d10','d12','d12','d14','d14','d16','d16','d20','d20','d24','d24','d30','d30','d30','d30','d30'] }; const hitDieNum = calcHitDieNum(attributes); - const critTable = npcCritDice[attributes.crit_table]; + const critTable = npcCritDice[attributes.crit_table] || npcCritDice.monster; return critTable[hitDieNum] || critTable[critTable.length - 1]; }else{ const calcModifier = (level, type) => {