diff --git a/APOCTHULHU/apocthulhu.css b/APOCTHULHU/apocthulhu.css new file mode 100644 index 0000000000..f7b1c9485a --- /dev/null +++ b/APOCTHULHU/apocthulhu.css @@ -0,0 +1,1257 @@ +@import url('https://fonts.googleapis.com/css?family=Teko:wght@700&display=swap'); + +/* GLOBAL SETTINGS + ============================= */ +* { + box-sizing: border-box; + font-family: sans-serif; +} + +.charsheet { + min-width: 850px; + max-width: 950px; +} +.charsheet button:before { + display: none; +} +.charsheet button:focus > h3, .charsheet button:hover > h3, .charsheet button:active > h3 { + color: whitesmoke; + text-shadow: 1px 1px 2px black, 0 0 25px #f6efe9, 0 0 5px whitesmoke; +} +.charsheet button[type=roll], .charsheet button[type=action] { + background: #dac8d0; + border-bottom: 0.01em solid #666; + border-bottom-right-radius: 0.01em; + border-color: #b3b3b3; + border-radius: 0.25em; + border-right: 0.02em solid #333333; + border-style: outset; + margin: 0.2em !important; + padding: 0.1em !important; +} +.charsheet button[type=action] { + background: #d9d9d9; +} +.charsheet button[type=action]:focus, .charsheet button[type=action]:hover, .charsheet button[type=action]:active { + background-color: #4d4d4d; + color: whitesmoke; +} +.charsheet button[type=roll] { + background: #dac8d0; +} +.charsheet button[type=roll]:focus, .charsheet button[type=roll]:hover, .charsheet button[type=roll]:active { + background-color: #56062b; + color: whitesmoke; +} +.charsheet div { + background: transparent; + width: 100%; +} +.charsheet fieldset { + background: transparent; +} +.charsheet h1 { + text-transform: uppercase; +} +.charsheet h2 { + font-size: 0.8em; + line-height: 2em; + text-transform: uppercase; +} +.charsheet h2.sheet-label { + font-size: 1.1em; + font-weight: bold; + text-transform: capitalize; + text-align: center; + margin-left: 3%; +} +.charsheet h3 { + font-size: 0.8em; + line-height: 2em; + text-transform: capitalize; +} +.charsheet input[type=text], .charsheet input[type=number] { + background: transparent; + border: none; + border-radius: 0em; + color: black; + height: 2.1em; + text-align: center; +} +.charsheet input[type=text]:placeholder-shown, .charsheet input[type=number]:placeholder-shown { + background: #f6efe9; +} +.charsheet label { + margin-bottom: 0px; + padding-right: 0px; +} +.charsheet span { + word-break: break-word; +} +.charsheet textarea { + background: transparent; + color: black; + font-size: 1em; + font-weight: normal; + height: 50px; + margin: 0.5%; + margin-bottom: 2%; + min-height: 8em; + overflow: scroll; + overflow-wrap: break-word; + padding: 2px; + resize: vertical; + text-align: left; + vertical-align: top; + white-space: pre-line; + width: 99%; +} +.charsheet textarea:placeholder-shown { + background: #f6efe9; +} + +.repcontrol { + display: inline-grid; + grid-template-columns: 1fr 1fr; + margin: 1%; + width: 98%; +} +.repcontrol .btn { + color: transparent !important; + float: unset; + padding: 0px; + text-shadow: none; + width: 2.5em; +} +.repcontrol .repcontrol_add { + position: relative; +} +.repcontrol .repcontrol_edit:after, +.repcontrol .repcontrol_add:after { + background: transparent; + color: black; + font-family: pictos; + font-size: 1.5em; + position: relative; + width: 0.2em; +} +.repcontrol .repcontrol_edit:after { + content: "("; + left: -100%; +} +.repcontrol .repcontrol_add:after { + content: "&"; + left: -70%; +} +.repcontrol .repcontrol_edit:hover, +.repcontrol .repcontrol_add:hover, +.repcontrol .repcontrol_edit:focus, +.repcontrol .repcontrol_add:focus { + background: #06562b; +} +.repcontrol .repcontrol_edit:hover:after, +.repcontrol .repcontrol_add:hover:after, +.repcontrol .repcontrol_edit:focus:after, +.repcontrol .repcontrol_add:focus:after { + color: #f6efe9; +} + +.editmode ~ .repcontrol .repcontrol_edit:after { + content: ")"; +} + +.itemcontrol { + z-index: 10; +} +.itemcontrol .repcontrol_del, +.itemcontrol .repcontrol_move { + font-size: 1em; + height: 2em; + padding: 0px; + width: 2em; +} +.itemcontrol .repcontrol_del { + background-color: darkred; + font-family: pictos; +} +.itemcontrol .repcontrol_del:before { + display: none; +} + +div.sheet-npc .repcontrol .repcontrol_add { + left: 90%; +} + +/* ROLL TEMPLATE +============================= */ +.sheet-rolltemplate-rolls, .sheet-rolltemplate-damage, .sheet-rolltemplate-lethality, .sheet-rolltemplate-lethality_critical, .sheet-rolltemplate-sanloss, .sheet-rolltemplate-luck { + /* ROLL TEMPLATE STYLE + ----------------------------- */ +} +.sheet-rolltemplate-rolls div.sheet-template-container, .sheet-rolltemplate-damage div.sheet-template-container, .sheet-rolltemplate-lethality div.sheet-template-container, .sheet-rolltemplate-lethality_critical div.sheet-template-container, .sheet-rolltemplate-sanloss div.sheet-template-container, .sheet-rolltemplate-luck div.sheet-template-container { + border: 2px solid black; + border-radius: 0.3em; + box-shadow: inset 0px 0px 3px 1px black; + text-align: center; + /* DICE ROLL STYLES + ----------------------------- */ +} +.sheet-rolltemplate-rolls div.sheet-template-container .inlinerollresult.fullfail, +.sheet-rolltemplate-rolls div.sheet-template-container .inlinerollresult.fullcrit, +.sheet-rolltemplate-rolls div.sheet-template-container .inlinerollresult.importantroll, .sheet-rolltemplate-damage div.sheet-template-container .inlinerollresult.fullfail, +.sheet-rolltemplate-damage div.sheet-template-container .inlinerollresult.fullcrit, +.sheet-rolltemplate-damage div.sheet-template-container .inlinerollresult.importantroll, .sheet-rolltemplate-lethality div.sheet-template-container .inlinerollresult.fullfail, +.sheet-rolltemplate-lethality div.sheet-template-container .inlinerollresult.fullcrit, +.sheet-rolltemplate-lethality div.sheet-template-container .inlinerollresult.importantroll, .sheet-rolltemplate-lethality_critical div.sheet-template-container .inlinerollresult.fullfail, +.sheet-rolltemplate-lethality_critical div.sheet-template-container .inlinerollresult.fullcrit, +.sheet-rolltemplate-lethality_critical div.sheet-template-container .inlinerollresult.importantroll, .sheet-rolltemplate-sanloss div.sheet-template-container .inlinerollresult.fullfail, +.sheet-rolltemplate-sanloss div.sheet-template-container .inlinerollresult.fullcrit, +.sheet-rolltemplate-sanloss div.sheet-template-container .inlinerollresult.importantroll, .sheet-rolltemplate-luck div.sheet-template-container .inlinerollresult.fullfail, +.sheet-rolltemplate-luck div.sheet-template-container .inlinerollresult.fullcrit, +.sheet-rolltemplate-luck div.sheet-template-container .inlinerollresult.importantroll { + border: none; +} +.sheet-rolltemplate-rolls div.sheet-template-container .inlinerollresult.fullfail, .sheet-rolltemplate-rolls div.sheet-template-container .inlinerollresult.fullcrit, .sheet-rolltemplate-damage div.sheet-template-container .inlinerollresult.fullfail, .sheet-rolltemplate-damage div.sheet-template-container .inlinerollresult.fullcrit, .sheet-rolltemplate-lethality div.sheet-template-container .inlinerollresult.fullfail, .sheet-rolltemplate-lethality div.sheet-template-container .inlinerollresult.fullcrit, .sheet-rolltemplate-lethality_critical div.sheet-template-container .inlinerollresult.fullfail, .sheet-rolltemplate-lethality_critical div.sheet-template-container .inlinerollresult.fullcrit, .sheet-rolltemplate-sanloss div.sheet-template-container .inlinerollresult.fullfail, .sheet-rolltemplate-sanloss div.sheet-template-container .inlinerollresult.fullcrit, .sheet-rolltemplate-luck div.sheet-template-container .inlinerollresult.fullfail, .sheet-rolltemplate-luck div.sheet-template-container .inlinerollresult.fullcrit { + color: black; +} +.sheet-rolltemplate-rolls div.sheet-template-container .inlinerollresult, .sheet-rolltemplate-damage div.sheet-template-container .inlinerollresult, .sheet-rolltemplate-lethality div.sheet-template-container .inlinerollresult, .sheet-rolltemplate-lethality_critical div.sheet-template-container .inlinerollresult, .sheet-rolltemplate-sanloss div.sheet-template-container .inlinerollresult, .sheet-rolltemplate-luck div.sheet-template-container .inlinerollresult { + background-color: transparent; + border: none; + font-weight: unset; + font-size: unset; + padding: unset; +} +.sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-header, .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-header, .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-header, .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-header, .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-header, .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-header { + background-color: black; + border-bottom: 2px solid #4d4d4d; + padding: 2%; + text-transform: capitalize; +} +.sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-header h2 { + display: inline; + line-height: 1.2em; +} +.sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-header h1 { + color: whitesmoke; + font-variant: small-caps; + font-size: 1.6em; +} +.sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-header h2, .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-header h2 { + color: #d9d9d9; + font-size: 1.15em; +} +.sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-row, .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-body div.sheet-template-row, .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-body div.sheet-template-row, .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-body div.sheet-template-row, .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-body div.sheet-template-row, .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-body div.sheet-template-row { + background-color: whitesmoke; + padding: 3%; +} +.sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-row:nth-child(2n+0), .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-body div.sheet-template-row:nth-child(2n+0), .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-body div.sheet-template-row:nth-child(2n+0), .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-body div.sheet-template-row:nth-child(2n+0), .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-body div.sheet-template-row:nth-child(2n+0), .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-body div.sheet-template-row:nth-child(2n+0) { + background-color: #f6efe9; +} +.sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-row a[href^="~"], .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-body div.sheet-template-row a[href^="~"], .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-body div.sheet-template-row a[href^="~"], .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-body div.sheet-template-row a[href^="~"], .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-body div.sheet-template-row a[href^="~"], .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-body div.sheet-template-row a[href^="~"] { + background-color: #c8dad0 !important; + font-weight: bold !important; + color: black; + font-size: 0.8em; + border-bottom: 0.01em solid #666; + border-bottom-right-radius: 0.01em; + border-color: #b3b3b3; + border-radius: 0.25em; + border-right: 0.02em solid #333333; + border-style: outset; +} +.sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-inlinerollresult, .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-inlinerollresult, .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-inlinerollresult, .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-inlinerollresult, .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-inlinerollresult, .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-inlinerollresult { + color: black; + font-size: 1.5em; + font-weight: bold; + cursor: help; + padding: 0 3px 0 3px; +} +.sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-percent, .sheet-rolltemplate-rolls div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-template-desc, .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-percent, .sheet-rolltemplate-damage div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-template-desc, .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-percent, .sheet-rolltemplate-lethality div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-template-desc, .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-percent, .sheet-rolltemplate-lethality_critical div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-template-desc, .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-percent, .sheet-rolltemplate-sanloss div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-template-desc, .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-percent, .sheet-rolltemplate-luck div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-template-desc { + color: black; + font-size: 1.2em; +} + +.sheet-rolltemplate-stats { + /* ROLL TEMPLATE STYLE + ----------------------------- */ +} +.sheet-rolltemplate-stats div.sheet-template-container { + border: 2px solid black; + border-radius: 0.3em; + box-shadow: inset 0px 0px 3px 1px black; + text-align: center; + /* DICE ROLL STYLES + ----------------------------- */ +} +.sheet-rolltemplate-stats div.sheet-template-container .inlinerollresult.fullfail, +.sheet-rolltemplate-stats div.sheet-template-container .inlinerollresult.fullcrit, +.sheet-rolltemplate-stats div.sheet-template-container .inlinerollresult.importantroll { + border: none; +} +.sheet-rolltemplate-stats div.sheet-template-container .inlinerollresult.fullfail, .sheet-rolltemplate-stats div.sheet-template-container .inlinerollresult.fullcrit { + color: black; +} +.sheet-rolltemplate-stats div.sheet-template-container .inlinerollresult { + background-color: transparent; + border: none; + font-weight: unset; + font-size: unset; + padding: unset; +} +.sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-header { + background-color: black; + border-bottom: 2px solid #4d4d4d; + padding: 2%; + text-transform: capitalize; +} +.sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-header h1, .sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-header h2 { + display: inline; + line-height: 1.2em; +} +.sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-header h1 { + color: whitesmoke; + font-variant: small-caps; + font-size: 1.6em; +} +.sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-header h2 { + color: #d9d9d9; + font-size: 1.15em; +} +.sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-body div.sheet-template-row { + background-color: whitesmoke; + padding: 3%; +} +.sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-body div.sheet-template-row:nth-child(2n+0) { + background-color: #f6efe9; +} +.sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-body div.sheet-template-row a[href^="~"] { + background-color: #c8dad0 !important; + font-weight: bold !important; + color: black; + font-size: 0.8em; + border-bottom: 0.01em solid #666; + border-bottom-right-radius: 0.01em; + border-color: #b3b3b3; + border-radius: 0.25em; + border-right: 0.02em solid #333333; + border-style: outset; +} +.sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-inlinerollresult { + color: black; + font-size: 1.5em; + font-weight: bold; + cursor: help; + padding: 0 3px 0 3px; +} +.sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-percent, .sheet-rolltemplate-stats div.sheet-template-container div.sheet-template-body div.sheet-template-row span.sheet-template-desc { + color: black; + font-size: 1.2em; +} + +/* HIDE DIFFERENT SHEET TYPES BY DEFAULT +============================= */ +div.sheet-npc { + display: none; +} + +input.sheet-type[value=npc] ~ div.sheet-npc, +div.sheet-pc { + display: grid; +} + +/* HIDE PC SECTIONS NOT NEEDED ON NPC PAGE +----------------------------- */ +input.sheet-type[value=npc] ~ div.sheet-pc div.sheet-personal-data { + display: none; +} + +input.sheet-type[value=npc] ~ div.sheet-pc div.sheet-statistical-data { + display: none; +} + +input.sheet-type[value=npc] ~ div.sheet-pc div.sheet-pyschological-data { + display: none; +} + +input.sheet-type[value=npc] ~ div.sheet-pc div.sheet-applicable-skill-sets { + display: none; +} + +input.sheet-type[value=npc] ~ div.sheet-pc div.sheet-injuries { + display: none; +} + +input.sheet-type[value=npc] ~ div.sheet-pc div.sheet-remarks { + display: none; +} + +input.sheet-type[value=npc] ~ div.sheet-pc div.sheet-authorizing-officer { + display: none; +} + +input.sheet-type[value=npc] ~ div.sheet-pc div.sheet-section-bottom-decor { + display: none; +} + +input.sheet-type[value=npc] ~ div.sheet-pc div.sheet-equipment { + display: none; +} + +/* NPC PAGE IS NOT AS WIDE A PC +----------------------------- */ +div.sheet-npc, +input.sheet-type[value=npc] ~ div.sheet-tabs { + min-width: 850px; + max-width: 950px; +} + +/* SWITCHES +============================= */ +/* The switch - the box around the slider */ +.sheet-switch { + position: relative; + display: inline-block; + width: 50px; + height: 24px; +} + +/* Hide default HTML checkbox */ +.sheet-switch input { + opacity: 0; + width: 0; + height: 0; +} + +/* The slider */ +.sheet-slider { + -webkit-transition: 0.4s; + background-color: #ccc; + border-radius: 34px; + bottom: 0; + cursor: pointer; + left: 0; + position: absolute; + right: 0; + top: 0; + transition: 0.4s; +} + +.sheet-slider:before { + -webkit-transition: 0.4s; + background-color: white; + border-radius: 50%; + bottom: 4px; + content: ""; + height: 16px; + left: 4px; + position: absolute; + transition: 0.4s; + width: 16px; +} + +input:checked + .sheet-slider { + background-color: #c8dad0; +} + +input:focus + .sheet-slider { + box-shadow: 0 0 1px #c8dad0; +} + +input:checked + .sheet-slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); +} + +/* HIGHLIGHT BUTTONS +============================= */ +input.sheet-display_string[value*=settings] ~ div.sheet-tabs button[name=act_toggle_settings] { + background-color: #4d4d4d; + box-shadow: inset 0px 0px 3px 1px whitesmoke; + color: whitesmoke; +} + +/* GRID +============================= */ +div.sheet-grid { + display: inline-grid; +} + +div.sheet-grid-tab-inputs label:nth-of-type(1) { + grid-area: 2/2/1/1; +} +div.sheet-grid-tab-inputs span:nth-of-type(1) { + grid-area: 1/1/1/1; +} +div.sheet-grid-tab-inputs label:nth-of-type(2) { + grid-area: 2/2/2/2; +} +div.sheet-grid-tab-inputs span:nth-of-type(2) { + grid-area: 1/1/2/2; +} +div.sheet-grid-tab-inputs label:nth-of-type(3) { + grid-area: 2/2/3/3; +} +div.sheet-grid-tab-inputs span:nth-of-type(3) { + grid-area: 1/1/3/3; +} + +/* TABS & LOGO SECTION +============================= */ +div.sheet-tabs { + grid-template-columns: 8em 1fr 6em; + margin-bottom: 0.5%; + background-color: black; +} +div.sheet-tabs label > input { + width: 100%; +} +div.sheet-tabs label.sheet-switch { + grid-column: 1; + margin-left: 5%; + margin-top: 2%; +} +div.sheet-tabs img { + grid-area: 1/2/3/2; + height: 99%; +} +div.sheet-tabs button[name=attr_gm_toggle] { + grid-area: 1/1/1/1; +} +div.sheet-tabs button[name=act_toggle_character] { + grid-area: 1/3/1/3; +} +div.sheet-tabs button[name=act_toggle_npc] { + grid-area: 2/3/2/3; +} +div.sheet-tabs select { + background-color: black; + border: none; + color: whitesmoke; + font-weight: bold; + width: 4em; +} +div.sheet-tabs span { + color: whitesmoke; + font-weight: bold; +} +div.sheet-tabs span:nth-of-type(1) { + padding: 5% 1% 0px 5%; + grid-area: 1/1/1/1; +} +div.sheet-tabs span:nth-of-type(2) { + padding: 5% 1% 0px 5%; + grid-area: 1/3/1/3; +} + +/* GENERIC CLASSES +============================= */ +.sheet-border { + border: 0.15em solid black; +} + +.sheet-border-bottom { + border-bottom: 0.15em solid black; +} + +.sheet-center { + text-align: center; +} + +.sheet-header-body { + grid-template-columns: 3em 1fr; +} + +.sheet-italic { + font-style: italic; +} + +.sheet-margin-left { + margin-left: 2%; +} + +.sheet-pictos { + font-family: "pictos"; +} + +.sheet-none { + display: none; +} + +.sheet-text-align-left { + text-align: left; +} + +.sheet-short { + size: 1em; +} + +.sheet-dicefontd10 { + color: black; + font-family: "dicefontd10"; +} + +h2.sheet-aligned-left, +h3.sheet-aligned-left { + margin-left: 0.5em; + text-align: left; +} + +/* STYLED CHECKBOXES +============================= */ +label.sheet-styled-checkbox input[type=checkbox] { + height: 1.5em; + width: 1.5em; +} + +/* NPC SHEET +============================= */ +div.sheet-npc input[type=text], +div.sheet-npc input[type=number] { + width: 100%; +} +div.sheet-npc div.sheet-section-header input[name=attr_name] { + color: black; + font-size: 1.2em; + text-align: left; +} +div.sheet-npc div.sheet-section-body { + grid-template-columns: 4em 1fr 4em 1fr 4em 1fr 4em 1fr 4em 1fr 4em 1fr; + margin-left: 2%; + max-width: 98%; + /* HIT POINTS & WILLPOWER POINTS & SAN LOSS + ----------------------------- */ + /* ARMOR + ----------------------------- */ + /* SKILLS + ----------------------------- */ + /* ATTACKS + ----------------------------- */ + /* OTHER NOTES + ----------------------------- */ +} +div.sheet-npc div.sheet-section-body h1 { + font-size: 1em; +} +div.sheet-npc div.sheet-section-body h2 { + text-align: center; + text-decoration: underline; +} +div.sheet-npc div.sheet-section-body button > h1 { + font-size: 0.8em; + line-height: 1.8em; +} +div.sheet-npc div.sheet-section-body button > h1:hover, div.sheet-npc div.sheet-section-body button > h1:focus { + color: whitesmoke; +} +div.sheet-npc div.sheet-section-body input { + height: 100%; +} +div.sheet-npc div.sheet-section-body input:placeholder-shown { + border: 0.1em dashed #06562b; +} +div.sheet-npc div.sheet-section-body input[type=text] { + text-align: left; + margin-left: 1%; +} +div.sheet-npc div.sheet-section-body textarea { + grid-column: 1/13; + min-height: 4em; +} +div.sheet-npc div.sheet-section-body div.sheet-repeating-container, +div.sheet-npc div.sheet-section-body label.sheet-row { + grid-column: 1/13; +} +div.sheet-npc div.sheet-section-body h1[data-i18n=HP] { + grid-area: 3/1/3/1; +} +div.sheet-npc div.sheet-section-body label[data-i18n-title="enter hit points"] { + grid-area: 3/2/3/2; +} +div.sheet-npc div.sheet-section-body h1[data-i18n=WP] { + grid-area: 3/3/3/3; +} +div.sheet-npc div.sheet-section-body label[data-i18n-title="enter willpower points"] { + grid-area: 3/4/3/4; +} +div.sheet-npc div.sheet-section-body div.sheet-sanloss { + grid-area: 4/1/4/8; + grid-template-columns: 7em 6em 1em 6em 8em; +} +div.sheet-npc div.sheet-section-body div.sheet-sanloss button[data-i18n-title="san loss roll"] { + display: inline-block; + height: 90%; +} +div.sheet-npc div.sheet-section-body div.sheet-sanloss h1[data-i18n="SAN LOSS"] { + grid-area: 3/5/3/6; +} +div.sheet-npc div.sheet-section-body div.sheet-sanloss input[type=text] { + height: 100%; + width: 5em; + text-align: center; +} +div.sheet-npc div.sheet-section-body div.sheet-sanloss select { + height: 100%; + width: 8em; +} +div.sheet-npc div.sheet-section-body div.sheet-sanloss span.sheet-slash { + color: black; + font-size: 1.2em; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +div.sheet-npc div.sheet-section-body h1[data-i18n=armor] { + grid-area: 5/1/5/1; +} +div.sheet-npc div.sheet-section-body label[data-i18n-title="enter armor text"] { + grid-area: 5/2/5/13; + grid-column: 2/13; +} +div.sheet-npc div.sheet-section-body h1[data-i18n=skills] { + grid-area: 6/1/6/1; +} +div.sheet-npc div.sheet-section-body div.sheet-skills { + grid-row: 6/6; + margin-left: 2%; +} +div.sheet-npc div.sheet-section-body div.sheet-skills div.sheet-section-skills, +div.sheet-npc div.sheet-section-body div.sheet-skills div.sheet-section-header { + grid-column-gap: 1%; + grid-template-columns: 1fr 4em 2.5em; +} +div.sheet-npc div.sheet-section-body h1[data-i18n=attacks] { + grid-area: 7/1/7/3; +} +div.sheet-npc div.sheet-section-body div.sheet-attacks { + grid-row: 8/8; + margin-left: 2%; +} +div.sheet-npc div.sheet-section-body div.sheet-attacks input[type=text][name=attr_damage] { + text-align: center; +} +div.sheet-npc div.sheet-section-body div.sheet-attacks div.sheet-section-weapons, +div.sheet-npc div.sheet-section-body div.sheet-attacks div.sheet-section-header { + grid-column-gap: 1%; + grid-template-columns: 6em 4em 7em 4em 8em 8em 6em 6em 3em 1fr 2.5em; +} +div.sheet-npc div.sheet-section-body h1[data-i18n="other notes"] { + grid-area: 9/1/9/3; +} +div.sheet-npc div.sheet-section-body div.sheet-notes { + grid-row: 10/10; + margin-left: 2%; +} +div.sheet-npc div.sheet-section-body div.sheet-notes div.sheet-section-header, +div.sheet-npc div.sheet-section-body div.sheet-notes div.sheet-section { + grid-column-gap: 1%; + grid-template-columns: 10em 1fr; +} + +/* PC SHEET +============================= */ +div.sheet-pc { + grid-column-gap: 0.2em; + grid-row-gap: 0.2em; + grid-template-columns: 1fr 1fr; + /* PERSONAL DATA + ----------------------------- */ + /* STATISTICAL DATA + ----------------------------- */ + /* PSYCHOLOGICAL DATA + ----------------------------- */ + /* APPLICABLE SKILL SET + ----------------------------- */ + /* INJURIES + ----------------------------- */ + /* EQUIPMENT + ----------------------------- */ + /* REMARKS + ----------------------------- */ + /* AUTHORIZING OFFICER + ----------------------------- */ + /* BOTTOM DECORATION + ----------------------------- */ +} +div.sheet-pc h1 { + color: #ff6666; + font-size: 1.5em; + font-family: 'Teko', sans-serif; + text-align: center; + transform: rotate(180deg); +} +div.sheet-pc input[type=text], div.sheet-pc input[type=number] { + width: 100%; +} +div.sheet-pc div.sheet-section-header { + background-color: black; + font-weight: bold; + grid-area: 1/1/1/1; + text-orientation: sideways; + writing-mode: vertical-lr; + height: 100%; +} +div.sheet-pc div.sheet-vert-line, +div.sheet-pc div.sheet-horz-line { + background-color: black; +} +div.sheet-pc div.sheet-horz-line { + height: 2px; +} +div.sheet-pc span.sheet-para:before { + content: "("; +} +div.sheet-pc span.sheet-para:after { + content: ")"; +} +div.sheet-pc div.sheet-personal-data { + grid-column: 1/3; + /* PERSONAL DATA + ----------------------------- */ +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(1) { + grid-row: 1; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(2) { + grid-row: 1; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) { + grid-row: 1; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(1), div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(2) { + grid-template-columns: 1fr 0.155em 1fr; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(1) h2:nth-of-type(1), div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(2) h2:nth-of-type(1) { + grid-area: 1/1/1/3; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(1) label:nth-of-type(1), div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(2) label:nth-of-type(1) { + grid-area: 2/1/2/3; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(1) div.sheet-vert-line, div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(2) div.sheet-vert-line { + grid-area: 1/2/3/2; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(1) h2:nth-of-type(2), div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(2) h2:nth-of-type(2) { + grid-area: 1/3/1/5; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(1) label:nth-of-type(2), div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(2) label:nth-of-type(2) { + grid-area: 2/3/2/5; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) { + grid-template-columns: 1fr 0.155em 1fr 0.155em 2.01fr; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) h2:nth-of-type(1) { + grid-area: 1/1/1/2; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) label:nth-of-type(1) { + grid-area: 2/1/2/2; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) div.sheet-vert-line:nth-of-type(1) { + grid-area: 1/2/3/2; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) h2:nth-of-type(2) { + grid-area: 1/3/1/5; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) label:nth-of-type(2) { + grid-area: 2/3/2/5; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) div.sheet-vert-line:nth-of-type(2) { + grid-area: 1/4/3/4; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) h2:nth-of-type(3) { + grid-area: 1/5/1/5; +} +div.sheet-pc div.sheet-personal-data div.sheet-section:nth-of-type(3) label:nth-of-type(3) { + grid-area: 2/5/2/5; +} +div.sheet-pc div.sheet-personal-data input[type=text] { + text-align: left; +} +div.sheet-pc div.sheet-statistical-data { + grid-area: 2/1/2/1; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-body { + grid-template-rows: min-content; +} +div.sheet-pc div.sheet-statistical-data button[type=roll], +div.sheet-pc div.sheet-statistical-data div.sheet-derived-attr { + font-size: 1em; +} +div.sheet-pc div.sheet-statistical-data button[type=roll] span, +div.sheet-pc div.sheet-statistical-data div.sheet-derived-attr span { + font-size: 0.8em; +} +div.sheet-pc div.sheet-statistical-data h3 { + display: inline; + margin-right: 2%; + text-transform: capitalize; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-stats { + grid-template-columns: 9em 0.155em 2fr 0.155em 1fr 0.155em 14em; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-stats button[type=roll] { + text-align: left; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-stats div.sheet-horz-line { + grid-column: 1/8; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-stats span.sheet-center { + background-color: #d9d9d9; + padding-top: 25%; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-derived { + grid-template-rows: min-content; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-derived div.sheet-section { + grid-template-columns: 12em 0.155em 1fr 0.155em 1fr; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-derived div.sheet-section button[type=roll] { + text-align: left; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-derived div.sheet-section div.sheet-horz-line { + grid-column: 1/6; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-derived input[name=attr_sanity_points_max] { + padding-left: 4%; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-derived span { + padding: 4%; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-derived span.sheet-center { + background-color: #d9d9d9; +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-physical { + grid-template-rows: min-content; + /*h2 {grid-row: 1 / 1}*/ +} +div.sheet-pc div.sheet-statistical-data div.sheet-section-physical textarea { + /* grid-row: 2 / 2;*/ + min-height: 14em; + height: 100%; +} +div.sheet-pc div.sheet-pyschological-data { + grid-area: 2/2/2/2; + /*grid-template-rows: min-content; + */ +} +div.sheet-pc div.sheet-pyschological-data div.sheet-section-body { + grid-template-rows: min-content; +} +div.sheet-pc div.sheet-pyschological-data textarea { + min-height: 11.5em; +} +div.sheet-pc div.sheet-pyschological-data div.sheet-section-bonds input[type=text] { + text-align: center; +} +div.sheet-pc div.sheet-pyschological-data div.sheet-section-bonds div.sheet-max-height { + max-height: 1.8em; +} +div.sheet-pc div.sheet-pyschological-data div.sheet-section-bonds div.sheet-section { + grid-template-columns: 25em 0.155em 1fr; +} +div.sheet-pc div.sheet-pyschological-data div.sheet-section-bonds div.sheet-repeating-container { + margin-bottom: 0%; + min-height: 14.5em; +} +div.sheet-pc div.sheet-pyschological-data div.sheet-section-bonds div.sheet-repeating-container .repcontrol .repcontrol_add { + right: -84%; +} +div.sheet-pc div.sheet-pyschological-data div.sheet-incidents-body { + grid-template-columns: 6em 2em 2em 2em 4em 6em 2em 2em 2em 4em; + padding-top: 1%; +} +div.sheet-pc div.sheet-pyschological-data div.sheet-incidents-body h3 { + text-transform: capitalize; +} +div.sheet-pc div.sheet-applicable-skill-sets { + grid-column: 1/3; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body { + grid-template-columns: 1fr 1fr 1fr; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col:nth-of-type(1) { + grid-column: 1/1; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col:nth-of-type(2) { + grid-column: 2/2; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col:nth-of-type(3) { + grid-column: 3/3; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col { + grid-template-columns: 2em 15em 0.155em 2fr; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col:nth-of-type(1), div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col:nth-of-type(2) { + border-right: 0.15em solid black; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col div.sheet-horz-line { + grid-column: 1/5; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col button { + display: inline; + text-align: left; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col button h3 { + display: inline; + margin-right: 5%; + padding-left: 2%; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col button.sheet-dicefontd10[type=roll] { + text-align: center; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col input[type=number] { + height: 100%; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col input[type=checkbox] { + margin-left: 10%; + margin-top: 50%; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col span { + font-size: 0.8em; + text-align: center; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col label.sheet-custom-label { + grid-column: 1/5; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col textarea { + margin-bottom: 0em; + margin-left: 1%; + min-height: 2em; + width: 98%; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col div.sheet-repeating-container { + grid-column: 1/5; + min-height: 285px; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col div.sheet-repeating-container input[type=checkbox] { + margin-top: 20%; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col div.sheet-repeating-container .repcontrol .repcontrol_add { + right: -75%; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-skill-col div.sheet-repeating-container div.sheet-section-repeating { + grid-template-columns: 1fr 12.5em 2.5em 0.155em 2fr; +} +div.sheet-pc div.sheet-applicable-skill-sets div.sheet-section-body div.sheet-section-directions { + grid-column: 1/4; +} +div.sheet-pc div.sheet-injuries { + grid-column: 1/3; +} +div.sheet-pc div.sheet-injuries h1 { + grid-row: 1; +} +div.sheet-pc div.sheet-injuries label { + display: inline; +} +div.sheet-pc div.sheet-injuries div.border-bottom { + grid-row: 2; +} +div.sheet-pc div.sheet-equipment { + grid-column: 1/3; +} +div.sheet-pc div.sheet-armor-resources { + grid-template-columns: 60% 0.155em 39%; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-armor { + grid-column: 1; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-armor h2 { + display: inline; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-armor h3 { + display: inline; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-armor textarea { + min-height: 85%; + margin-bottom: 2%; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources { + grid-column: 3; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-perm-resources { + grid-template-columns: 12em 12em; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-perm-resources h2 { + grid-row: 1; + grid-column: 1; + font-size: 0.9em; + font-weight: bold; + text-transform: capitalize; + margin-left: 0.5em; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-perm-resources label { + grid-row: 1; + grid-column: 2; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-checks { + grid-template-columns: 8em 2em 2em 2em 7em 3em; + border-bottom: 0.3em solid; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-checks h2 { + grid-row: 1; + margin-left: 1em; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-checks label { + font-size: 1em; + display: inline; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations { + grid-template-columns: 8em 0.155em 8em 0.155em 8em; + margin-top: 0%; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-at-hand { + grid-column: 1; + grid-template-columns: 1fr 1fr; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-at-hand h3 { + line-height: 1em; + grid-row: 1; + grid-column: 1/2; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-at-hand label { + grid-row: 2; + grid-column: 1; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-at-hand button { + grid-row: 2; + grid-column: 2; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-stowed { + grid-column: 3; + grid-template-columns: 1fr 1fr; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-stowed h3 { + line-height: 1em; + grid-row: 1; + grid-column: 1/2; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-stowed label { + grid-row: 2; + grid-column: 1; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-stowed button { + grid-row: 2; + grid-column: 2; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-in-storage { + grid-column: 5; + grid-template-columns: 1fr 1fr; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-in-storage h3 { + line-height: 1em; + grid-row: 1; + grid-column: 1/2; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-in-storage label { + grid-row: 2; + grid-column: 1; +} +div.sheet-pc div.sheet-armor-resources div.sheet-section-resources div.sheet-section-resource-allocations div.sheet-section-resources-in-storage button { + grid-row: 2; + grid-column: 2; +} +div.sheet-pc div.sheet-equipment div.sheet-section-weapons { + grid-template-columns: 15em 0.155em 1.2fr 0.155em 2fr 0.155em 2fr 0.155em 2fr 0.155em 2.5fr 0.155em 2fr 0.155em 2fr 0.155em 1fr 0.155em 2em; +} +div.sheet-pc div.sheet-equipment h2:nth-of-type(1) { + margin-left: 2%; +} +div.sheet-pc div.sheet-equipment h2:nth-of-type(1n+2) { + text-align: center; +} +div.sheet-pc div.sheet-equipment div.sheet-repeating-container .repcontrol .repcontrol_add { + right: -93%; +} +div.sheet-pc div.sheet-equipment div.sheet-repeating-container input[name=attr_weapons] { + text-align: left; +} +div.sheet-pc div.sheet-remarks { + grid-column: 1/3; +} +div.sheet-pc div.sheet-remarks div.sheet-section-body textarea { + min-height: 10em; + margin-bottom: 2%; +} +div.sheet-pc div.sheet-remarks div.sheet-section-body div.sheet-section-19 { + grid-template-columns: 1fr 0.155em 1fr; +} +div.sheet-pc div.sheet-remarks div.sheet-section-body div.sheet-section-19 input[type=text][name=attr_special_training] { + text-align: left; +} +div.sheet-pc div.sheet-remarks div.sheet-section-body div.sheet-section-19 input[type=text][name=attr_skill_or_stat_used] { + text-align: center; +} +div.sheet-pc div.sheet-remarks div.sheet-section-body div.sheet-repeating-container .repcontrol .repcontrol_add { + right: -83%; +} +div.sheet-pc div.sheet-remarks div.sheet-section-directions { + grid-column: 1/4; +} +div.sheet-pc div.sheet-authorizing-officer { + grid-column: 1/3; + grid-template-columns: 1fr 0.155em 1fr; +} +div.sheet-pc div.sheet-authorizing-officer h2 { + grid-row: 1; +} +div.sheet-pc div.sheet-authorizing-officer label { + grid-row: 2; +} +div.sheet-pc div.sheet-section-bottom-decor { + grid-column: 1/3; + grid-template-columns: 3em 1fr 20em 3fr 5em; + margin-top: 2%; +} +div.sheet-pc div.sheet-section-bottom-decor span { + text-transform: uppercase; +} +div.sheet-pc div.sheet-section-bottom-decor span:nth-of-type(odd) { + color: black; + font-size: 1.5em; + font-weight: bolder; +} +div.sheet-pc div.sheet-section-bottom-decor span:nth-of-type(even) { + color: #4d4d4d; + opacity: 0.8; + text-align: center; +} + +/* PLAYS THE ROLE OF a non breaking space at the beginning of the line to circumvent pug removal*/ +div.sheet-nbsp { + text-indent: 0.5em; +} + +/* SETTINGS SHEET +============================= */ +button[name=act_sheet_select] { + height: 2em; + width: 2em; +} + +/* ACCESSIBILITY ADJUSTMENTS +============================= */ +.sheet-hidden { + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +/* REMVOE WEBKIT +============================= */ +input[type=number]::-webkit-outer-spin-button, +input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +/*# sourceMappingURL=deltagreen.css.map */ diff --git a/APOCTHULHU/apocthulhu.html b/APOCTHULHU/apocthulhu.html new file mode 100644 index 0000000000..900360dc41 --- /dev/null +++ b/APOCTHULHU/apocthulhu.html @@ -0,0 +1,3590 @@ + + + + + + + + + + + + + +
+ Sheet Type
+
+
+
+
+
| 1st: | +{{die1}} | +2nd: | +{{die2}} | +3rd: | +{{die3}} | +
| 4th: | +{{die4}} | +5th: | +{{die5}} | +6th: | +{{die6}} | +
| Timing: | +{{time}} | +
| Range: | +{{range}} | +
| Target: | +{{target}} | +
| Cost: | +{{cost}} | +
| Class: | +{{class}} | +||
| Level: | +{{level}} | +||
| Initiative: | +{{initiative}} | +||
| Senses: | +{{perception}} | +||
| ACC | +EVA | +IVC | +RES | +
| {{acc}} | +{{eva}} | +{{ivc}} | +{{res}} | +
| Guard: | +{{guard}} | +Ward: | +{{ward}} | +
| HP: | +{{HP}} | +||
| Reaction: | +{{reaction}} | +||
| Speech: | +{{speech}} | +||
| Weaknesses: | +|||
| {{weaknesses}} | +|||
| Movement: | +{{movement}} | +||
| Size: | +{{size}} | +||
When you enable the option under Setup, you can append and toggle custom code to list item rolls. Mind that the inputs are not validated; do not enter nonsense! Following is a collection of useful template hooks.
When you enable the option under Setup, you can append and toggle custom code to list item rolls. Mind that the inputs are not validated; do not enter nonsense! Following is a collection of useful template hooks.
You can show or hide skills from the list in accordance with the played Game Setting. This can also be done manually for each individual sheet in its Settings tab. There are two custom skills that can be renamed and modified within the sheet as well, for example to make specialized skills (e.g. specific weapons with custom bonus or Wild Die).
", +"defaults-function-explode-run-die": "[Function] Explode Run Die", +"defaults-function-explode-run-die-description": "Makes the run die Ace.", +"defaults-function-running-applies-fatigue": "[Function] Running Applies Fatigue", +"defaults-function-running-applies-fatigue-description": "Fatigue penalties are subtracted from the run roll.You can show or hide content blocks in accordance with the played Game Setting. This can also be done manually for each individual sheet in its Settings tab. Some blocks that were designed for Maschinenleben, such as Augmentations and Engrams, can be adapted for other purposes as well.
", +"defaults-function-running-ignores-wounds": "[Function] Running Ignores Wounds", +"defaults-function-running-ignores-wounds-description": "Wound penalties are not subtracted from the run roll.", +"defaults-rename-attribute-agi": "[Rename] Attribute: AGI to ", +"defaults-rename-attribute-agi-description": "Renamed via the attribute rename_agi.", +"defaults-rename-attribute-agility": "[Rename] Attribute: Agility to ", +"defaults-rename-attribute-agility-description": "Renamed via the attribute rename_agility.", +"defaults-rename-attribute-sma": "[Rename] Attribute: SMA to ", +"defaults-rename-attribute-sma-description": "Renamed via the attribute rename_sma.", +"defaults-rename-attribute-smarts": "[Rename] Attribute: Smarts to ", +"defaults-rename-attribute-smarts-description": "Renamed via the attribute rename_smarts.", +"defaults-rename-attribute-spi": "[Rename] Attribute: SPI to ", +"defaults-rename-attribute-spi-description": "Renamed via the attribute rename_spi.", +"defaults-rename-attribute-spirit": "[Rename] Attribute: Spirit to ", +"defaults-rename-attribute-spirit-description": "Renamed via the attribute rename_spirit.", +"defaults-rename-attribute-str": "[Rename] Attribute: STR to ", +"defaults-rename-attribute-str-description": "Renamed via the attribute rename_str.", +"defaults-rename-attribute-strength": "[Rename] Attribute: Strength to ", +"defaults-rename-attribute-strength-description": "Renamed via the attribute rename_strength.", +"defaults-rename-attribute-vig": "[Rename] Attribute: VIG to ", +"defaults-rename-attribute-vig-description": "Renamed via the attribute rename_vig.You can rename the labels of each skill, best kept below 15 characters due to layout constrains. This can also be done manually with the @{rename_attribute} for each individual sheet. Note that changing the label does not affect the reference @{attribute} for rolls. They will always be in English.
", +"defaults-rename-attribute-vigor": "[Rename] Attribute: Vigor to ", +"defaults-rename-attribute-vigor-description": "Renamed via the attribute rename_vigor.", +"defaults-rename-block-allies": "[Rename] Block: Allies to ", +"defaults-rename-block-allies-description": "Renamed via the attribute rename_block_allies.", +"defaults-rename-block-ammunition": "[Rename] Block: Ammunition to ", +"defaults-rename-block-ammunition-description": "Renamed via the attribute rename_block_ammunition.", +"defaults-rename-block-apparel": "[Rename] Block: Apparel to ", +"defaults-rename-block-apparel-description": "Renamed via the attribute rename_block_apparel.", +"defaults-rename-block-augmentations": "[Rename] Block: Augmentations to ", +"defaults-rename-block-augmentations-description": "Renamed via the attribute rename_block_augmentations.", +"defaults-rename-block-engrams": "[Rename] Block: Engrams to ", +"defaults-rename-block-engrams-description": "Renamed via the attribute rename_block_engrams.", +"defaults-rename-block-integrity": "[Rename] Block: Integrity to ", +"defaults-rename-block-integrity-description": "Renamed via the attribute rename_block_integrity.", +"defaults-rename-block-inventory": "[Rename] Block: Inventory to ", +"defaults-rename-block-inventory-description": "Renamed via the attribute rename_block_inventory.", +"defaults-rename-block-power": "[Rename] Block: Power to ", +"defaults-rename-block-power-description": "Renamed via the attribute rename_block_power.", +"defaults-rename-block-powerarmors": "[Rename] Block: Power Armors to ", +"defaults-rename-block-powerarmors-description": "Renamed via the attribute rename_block_powerarmors.", +"defaults-rename-block-powers": "[Rename] Block: Powers to ", +"defaults-rename-block-powers-description": "Renamed via the attribute rename_block_powers.", +"defaults-rename-block-quick-notes": "[Rename] Block: Quick Notes to ", +"defaults-rename-block-quick-notes-description": "Renamed via the attribute rename_block_quick_notes.", +"defaults-rename-block-vehicles": "[Rename] Block: Vehicles to ", +"defaults-rename-block-vehicles-description": "Renamed via the attribute rename_block_vehicles.", +"defaults-rename-block-walkers": "[Rename] Block: Walkers to ", +"defaults-rename-block-walkers-description": "Renamed via the attribute rename_block_walkers.", +"defaults-rename-block-weapons": "[Rename] Block: Weapons to ", +"defaults-rename-block-weapons-description": "Renamed via the attribute rename_block_weapons.You can rename the Hindrances caused by the loss of Integrity (Sanity, Purity, etc.). This can also be done manually with the @{rename_integrity-attribute} for each individual sheet. Note that they activate in intervals with each fraction of 10 below 70 — Discord triggers on 69.9 or lower, Dissonance on 59.9 or lower, and so forth.
", +"defaults-rename-integrity-alienation": "[Rename] Integrity: Alienation to ", +"defaults-rename-integrity-alienation-description": "Renamed via the attribute rename_alienation.", +"defaults-rename-integrity-depersonalization": "[Rename] Integrity: Depersonalization to ", +"defaults-rename-integrity-depersonalization-description": "Renamed via the attribute rename_depersonalization.", +"defaults-rename-integrity-derealization": "[Rename] Integrity: Derealization to ", +"defaults-rename-integrity-derealization-description": "Renamed via the attribute rename_derealization.", +"defaults-rename-integrity-discord": "[Rename] Integrity: Discord to ", +"defaults-rename-integrity-discord-description": "Renamed via the attribute rename_discord.", +"defaults-rename-integrity-dissonance": "[Rename] Integrity: Dissonance to ", +"defaults-rename-integrity-dissonance-description": "Renamed via the attribute rename_dissonance.", +"defaults-rename-integrity-ego-death": "[Rename] Integrity: Ego Death to ", +"defaults-rename-integrity-ego-death-description": "Renamed via the attribute rename_ego_death.", +"defaults-rename-integrity-psychosis": "[Rename] Integrity: Psychosis to ", +"defaults-rename-integrity-psychosis-description": "Renamed via the attribute rename_psychosis.", +"defaults-rename-integrity-seizures": "[Rename] Integrity: Seizures to ", +"defaults-rename-integrity-seizures-description": "Renamed via the attribute rename_seizures.", +"defaults-rename-label-age": "[Rename] Label: Age to ", +"defaults-rename-label-age-description": "Renamed via the attribute rename_label_age (e.g. Number or Incarnation).", +"defaults-rename-label-bits": "[Rename] Label: #Bits to ", +"defaults-rename-label-bits-description": "Renamed via the attribute rename_label_bits (e.g. Money or Gold).You can rename the blocks to better fit the Game Setting, such as \"Powers\" to \"Talismans\" or \"Walkers\" to \"Frames\". This can also be done manually with the @{rename_block_attribute} for each individual sheet.
", +"defaults-rename-label-exp": "[Rename] Label: EXP to ", +"defaults-rename-label-exp-description": "Renamed via the attribute rename_label_exp (e.g. Karma or Gems).", +"defaults-rename-label-eyes": "[Rename] Label: Eyes to ", +"defaults-rename-label-eyes-description": "Renamed via the attribute rename_label_eyes (e.g. Sensors or Optics).", +"defaults-rename-label-gender": "[Rename] Label: Gender to ", +"defaults-rename-label-gender-description": "Renamed via the attribute rename_label_gender (e.g. Sex or Version).", +"defaults-rename-label-hair": "[Rename] Label: Hair to ", +"defaults-rename-label-hair-description": "Renamed via the attribute rename_label_hair (e.g. Horns or Mane).", +"defaults-rename-label-height": "[Rename] Label: Height to ", +"defaults-rename-label-height-description": "Renamed via the attribute rename_label_height (e.g. Scale or Length).", +"defaults-rename-label-level": "[Rename] Label: Level to ", +"defaults-rename-label-level-description": "Renamed via the attribute rename_label_level (e.g. Circle or Year).", +"defaults-rename-label-name": "[Rename] Label: Name to ", +"defaults-rename-label-name-description": "Renamed via the attribute rename_label_name (e.g. Alias or Codename).", +"defaults-rename-label-origin": "[Rename] Label: Origin to ", +"defaults-rename-label-origin-description": "Renamed via the attribute rename_label_origin (e.g. Race or Species).", +"defaults-rename-label-rank": "[Rename] Label: Rank to ", +"defaults-rename-label-rank-description": "Renamed via the attribute rename_label_rank (e.g. Grade or Titel).", +"defaults-rename-label-weight": "[Rename] Label: Weight to ", +"defaults-rename-label-weight-description": "Renamed via the attribute rename_label_weight (e.g. Mass or Your Mom).", +"defaults-rename-skill-academics": "[Rename] Skill: Academics to ", +"defaults-rename-skill-academics-description": "Renamed via the attribute rename_academics.", +"defaults-rename-skill-athletics": "[Rename] Skill: Athletics to ", +"defaults-rename-skill-athletics-description": "Renamed via the attribute rename_athletics.", +"defaults-rename-skill-boating": "[Rename] Skill: Boating to ", +"defaults-rename-skill-boating-description": "Renamed via the attribute rename_boating.", +"defaults-rename-skill-common-knowledge": "[Rename] Skill: Common Knowl. to ", +"defaults-rename-skill-common-knowledge-description": "Renamed via the attribute rename_common_knowledge.", +"defaults-rename-skill-custom-skill-1": "[Rename] Skill: Custom Skill #1 to ", +"defaults-rename-skill-custom-skill-1-description": "Can be renamed directly in the sheet's Settings tab.", +"defaults-rename-skill-custom-skill-2": "[Rename] Skill: Custom Skill #2 to ", +"defaults-rename-skill-custom-skill-2-description": "Can be renamed directly in the sheet's Settings tab.You can rename the labels at the top of the sheet, such as \"Name\" to \"Alias\" or \"Origin\" to \"Race\". This can also be done manually with the @{rename_label_attribute} for each individual sheet. Note that the labels are separated from the actual fields and do not affect the references (e.g. @{name}). They will always be in English.
", +"defaults-rename-skill-driving": "[Rename] Skill: Driving to ", +"defaults-rename-skill-driving-description": "Renamed via the attribute rename_driving.", +"defaults-rename-skill-electronics": "[Rename] Skill: Electronics to ", +"defaults-rename-skill-electronics-description": "Renamed via the attribute rename_electronics.", +"defaults-rename-skill-faith": "[Rename] Skill: Faith to ", +"defaults-rename-skill-faith-description": "Renamed via the attribute rename_faith.", +"defaults-rename-skill-fighting": "[Rename] Skill: Fighting to ", +"defaults-rename-skill-fighting-description": "Renamed via the attribute rename_fighting.", +"defaults-rename-skill-focus": "[Rename] Skill: Focus to ", +"defaults-rename-skill-focus-description": "Renamed via the attribute rename_focus.", +"defaults-rename-skill-gambling": "[Rename] Skill: Gambling to ", +"defaults-rename-skill-gambling-description": "Renamed via the attribute rename_gambling.", +"defaults-rename-skill-hacking": "[Rename] Skill: Hacking to ", +"defaults-rename-skill-hacking-description": "Renamed via the attribute rename_hacking.", +"defaults-rename-skill-healing": "[Rename] Skill: Healing to ", +"defaults-rename-skill-healing-description": "Renamed via the attribute rename_healing.", +"defaults-rename-skill-intimidation": "[Rename] Skill: Intimidation to ", +"defaults-rename-skill-intimidation-description": "Renamed via the attribute rename_intimidation.", +"defaults-rename-skill-language": "[Rename] Skill: Language to ", +"defaults-rename-skill-language-description": "Renamed via the attribute rename_language.", +"defaults-rename-skill-magic": "[Rename] Skill: Magic to ", +"defaults-rename-skill-magic-description": "Renamed via the attribute rename_magic.", +"defaults-rename-skill-notice": "[Rename] Skill: Notice to ", +"defaults-rename-skill-notice-description": "Renamed via the attribute rename_notice.", +"defaults-rename-skill-occult": "[Rename] Skill: Occult to ", +"defaults-rename-skill-occult-description": "Renamed via the attribute rename_occult.", +"defaults-rename-skill-performance": "[Rename] Skill: Performance to ", +"defaults-rename-skill-performance-description": "Renamed via the attribute rename_performance.", +"defaults-rename-skill-persuasion": "[Rename] Skill: Persuasion to ", +"defaults-rename-skill-persuasion-description": "Renamed via the attribute rename_persuasion.", +"defaults-rename-skill-piloting": "[Rename] Skill: Piloting to ", +"defaults-rename-skill-piloting-description": "Renamed via the attribute rename_piloting.", +"defaults-rename-skill-psionics": "[Rename] Skill: Psionics to ", +"defaults-rename-skill-psionics-description": "Renamed via the attribute rename_psionics.", +"defaults-rename-skill-repair": "[Rename] Skill: Repair to ", +"defaults-rename-skill-repair-description": "Renamed via the attribute rename_repair.", +"defaults-rename-skill-research": "[Rename] Skill: Research to ", +"defaults-rename-skill-research-description": "Renamed via the attribute rename_research.", +"defaults-rename-skill-riding": "[Rename] Skill: Riding to ", +"defaults-rename-skill-riding-description": "Renamed via the attribute rename_riding.", +"defaults-rename-skill-science": "[Rename] Skill: Science to ", +"defaults-rename-skill-science-description": "Renamed via the attribute rename_science.", +"defaults-rename-skill-shooting": "[Rename] Skill: Shooting to ", +"defaults-rename-skill-shooting-description": "Renamed via the attribute rename_shooting.", +"defaults-rename-skill-spellcasting": "[Rename] Skill: Spellcasting to ", +"defaults-rename-skill-spellcasting-description": "Renamed via the attribute rename_spellcasting.", +"defaults-rename-skill-stealth": "[Rename] Skill: Stealth to ", +"defaults-rename-skill-stealth-description": "Renamed via the attribute rename_stealth.", +"defaults-rename-skill-survival": "[Rename] Skill: Survival to ", +"defaults-rename-skill-survival-description": "Renamed via the attribute rename_survival.", +"defaults-rename-skill-taunt": "[Rename] Skill: Taunt to ", +"defaults-rename-skill-taunt-description": "Renamed via the attribute rename_taunt.", +"defaults-rename-skill-thievery": "[Rename] Skill: Thievery to ", +"defaults-rename-skill-thievery-description": "Renamed via the attribute rename_thievery.", +"defaults-rename-skill-weird-science": "[Rename] Skill: Weird Science to ", +"defaults-rename-skill-weird-science-description": "Renamed via the attribute rename_weird_science.", +"defaults-rule-augmentation-strain": "[Rule] Augmentation Strain", +"defaults-rule-augmentation-strain-description": "Use the Strain rules from the Science Fiction Companion (SFC 29).", +"defaults-rule-no-power-points": "[Rule] No Power Points", +"defaults-rule-no-power-points-description": "Use the No Power Points Setting Rule (SWADE 140).", +"defaults-skill-show-boating": "[Skill] Show Boating Skill", +"defaults-skill-show-boating-description": "Show the Boating (Agility) skill.", +"defaults-skill-show-custom-skill-1": "[Skill] Show Custom Skill #1", +"defaults-skill-show-custom-skill-1-description": "Show the Custom Skill #1, which can be renamed further down.", +"defaults-skill-show-custom-skill-2": "[Skill] Show Custom Skill #2", +"defaults-skill-show-custom-skill-2-description": "Show the Custom Skill #2, which can be renamed further down.You can rename the labels of each attribute and its abbreviation (max. 3 characters). This can also be done manually with the @{rename_attribute} for each individual sheet. Note that changing the label does not affect the reference @{attribute} for rolls. They will always be in English.
", +"defaults-skill-show-driving": "[Skill] Show Driving Skill", +"defaults-skill-show-driving-description": "Show the Driving (Agility) skill.", +"defaults-skill-show-electronics": "[Skill] Show Electronics Skill", +"defaults-skill-show-electronics-description": "Show the Electronics (Smarts) skill.", +"defaults-skill-show-faith": "[Skill] Show Faith Skill", +"defaults-skill-show-faith-description": "Show the Faith (Spirit) skill.", +"defaults-skill-show-focus": "[Skill] Show Focus Skill", +"defaults-skill-show-focus-description": "Show the Focus (Spirit) skill.", +"defaults-skill-show-language": "[Skill] Show Language Skill", +"defaults-skill-show-language-description": "Show the Language (Smarts) skill.", +"defaults-skill-show-magic": "[Skill] Show MAGIC Skill", +"defaults-skill-show-magic-description": "Show the MAGIC (Smarts) skill. Maschinenleben.", +"defaults-skill-show-occult": "[Skill] Show Occult Skill", +"defaults-skill-show-occult-description": "Show the Occult (Smarts) skill.", +"defaults-skill-show-piloting": "[Skill] Show Piloting Skill", +"defaults-skill-show-piloting-description": "Show the Piloting (Agility) skill.", +"defaults-skill-show-psionics": "[Skill] Show Psionics Skill", +"defaults-skill-show-psionics-description": "Show the Psionics (Smarts) skill.", +"defaults-skill-show-riding": "[Skill] Show Riding Skill", +"defaults-skill-show-riding-description": "Show the Riding (Agility) skill.", +"defaults-skill-show-spellcasting": "[Skill] Show Spellcasting Skill", +"defaults-skill-show-spellcasting-description": "Show the Spellcasting (Smarts) skill.", +"defaults-skill-show-weird-science": "[Skill] Show Weird Science Skill", +"defaults-skill-show-weird-science-description": "Show the Weird Science (Smarts) skill." +``` +You can show or hide content blocks in accordance with the played Game Setting. This can also be done manually for each individual sheet in its Settings tab. Some blocks that were designed for Maschinenleben, such as Augmentations and Engrams, can be adapted for other purposes as well.
", + "descriptiontranslationkey": "defaults-function-running-applies-fatigue-description" + }, + { + "attribute": "toggle_abilities_block", + "displayname": "[Block] Show Abilities", + "displaytranslationkey": "defaults-block-show-abilities", + "type": "checkbox", + "value": "on", + "description": "List special abilities or monstrous powers.", + "descriptiontranslationkey": "defaults-block-show-abilities-description" + }, + { + "attribute": "toggle_allies_block", + "displayname": "[Block] Show Allies", + "displaytranslationkey": "defaults-block-show-allies", + "type": "checkbox", + "value": "on", + "description": "Keep track of allied characters with a barebone mini sheet.", + "descriptiontranslationkey": "defaults-block-show-allies-description" + }, + { + "attribute": "toggle_ammunition_block", + "displayname": "[Block] Show Ammunition", + "displaytranslationkey": "defaults-block-show-ammunition", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Keep track of your loaded ammunition for three weapons.", + "descriptiontranslationkey": "defaults-block-show-ammunition-description" + }, + { + "attribute": "toggle_augmentations_block", + "displayname": "[Block] Show Augmentations", + "displaytranslationkey": "defaults-block-show-augmentations", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Install augmentations/cyberware and keep track of the Loss/Strain.", + "descriptiontranslationkey": "defaults-block-show-augmentations-description" + }, + { + "attribute": "toggle_engrams_block", + "displayname": "[Block] Show Engrams", + "displaytranslationkey": "defaults-block-show-engrams", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Special programs or hardware to execute Hacking actions.", + "descriptiontranslationkey": "defaults-block-show-engrams-description" + }, + { + "attribute": "toggle_integrity_block", + "displayname": "[Block] Show Integrity", + "displaytranslationkey": "defaults-block-show-integrity", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Quantifies mental health/sanity and keeps track of mental afflictions. Maschinenleben.", + "descriptiontranslationkey": "defaults-block-show-integrity-description" + }, + { + "attribute": "toggle_power_block", + "displayname": "[Block] Show Power/Energy", + "displaytranslationkey": "defaults-block-show-power", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "The energy/mana/etc. reserves of a character.", + "descriptiontranslationkey": "defaults-block-show-power-description" + }, + { + "attribute": "toggle_powers_block", + "displayname": "[Block] Show Powers/Spells", + "displaytranslationkey": "defaults-block-show-powers", + "type": "checkbox", + "value": "on", + "description": "The known powers/spells of a character.", + "descriptiontranslationkey": "defaults-block-show-powers-description" + }, + { + "attribute": "toggle_powerarmors_block", + "displayname": "[Block] Show Power Armors", + "displaytranslationkey": "defaults-block-show-powerarmors", + "type": "checkbox", + "value": "on", + "description": "Vehicles and their modifications/weapons.", + "descriptiontranslationkey": "defaults-block-show-powerarmors-description" + }, + { + "attribute": "toggle_vehicles_block", + "displayname": "[Block] Show Vehicles", + "displaytranslationkey": "defaults-block-show-vehicles", + "type": "checkbox", + "value": "on", + "description": "Vehicles and their modifications/weapons.", + "descriptiontranslationkey": "defaults-block-show-vehicles-description" + }, + { + "attribute": "toggle_walkers_block", + "displayname": "[Block] Show Walkers", + "displaytranslationkey": "defaults-block-show-walkers", + "type": "checkbox", + "value": "on", + "description": "Walkers/Mechs and their modifications/weapons.You can show or hide skills from the list in accordance with the played Game Setting. This can also be done manually for each individual sheet in its Settings tab. There are two custom skills that can be renamed and modified within the sheet as well, for example to make specialized skills (e.g. specific weapons with custom bonus or Wild Die).
", + "descriptiontranslationkey": "defaults-block-show-walkers-description" + }, + { + "attribute": "toggle_skill_boating", + "displayname": "[Skill] Show Boating Skill", + "displaytranslationkey": "defaults-skill-show-boating", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Show the Boating (Agility) skill.", + "descriptiontranslationkey": "defaults-skill-show-boating-description" + }, + { + "attribute": "toggle_skill_driving", + "displayname": "[Skill] Show Driving Skill", + "displaytranslationkey": "defaults-skill-show-driving", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Show the Driving (Agility) skill.", + "descriptiontranslationkey": "defaults-skill-show-driving-description" + }, + { + "attribute": "toggle_skill_electronics", + "displayname": "[Skill] Show Electronics Skill", + "displaytranslationkey": "defaults-skill-show-electronics", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Show the Electronics (Smarts) skill.", + "descriptiontranslationkey": "defaults-skill-show-electronics-description" + }, + { + "attribute": "toggle_skill_faith", + "displayname": "[Skill] Show Faith Skill", + "displaytranslationkey": "defaults-skill-show-faith", + "type": "checkbox", + "value": "on", + "description": "Show the Faith (Spirit) skill.", + "descriptiontranslationkey": "defaults-skill-show-faith-description" + }, + { + "attribute": "toggle_skill_focus", + "displayname": "[Skill] Show Focus Skill", + "displaytranslationkey": "defaults-skill-show-focus", + "type": "checkbox", + "value": "on", + "description": "Show the Focus (Spirit) skill.", + "descriptiontranslationkey": "defaults-skill-show-focus-description" + }, + { + "attribute": "toggle_skill_language", + "displayname": "[Skill] Show Language Skill", + "displaytranslationkey": "defaults-skill-show-language", + "type": "checkbox", + "value": "on", + "description": "Show the Language (Smarts) skill.", + "descriptiontranslationkey": "defaults-skill-show-language-description" + }, + { + "attribute": "toggle_skill_magic", + "displayname": "[Skill] Show MAGIC Skill", + "displaytranslationkey": "defaults-skill-show-magic", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Show the MAGIC (Smarts) skill. Maschinenleben.", + "descriptiontranslationkey": "defaults-skill-show-magic-description" + }, + { + "attribute": "toggle_skill_occult", + "displayname": "[Skill] Show Occult Skill", + "displaytranslationkey": "defaults-skill-show-occult", + "type": "checkbox", + "value": "on", + "description": "Show the Occult (Smarts) skill.", + "descriptiontranslationkey": "defaults-skill-show-occult-description" + }, + { + "attribute": "toggle_skill_piloting", + "displayname": "[Skill] Show Piloting Skill", + "displaytranslationkey": "defaults-skill-show-piloting", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Show the Piloting (Agility) skill.", + "descriptiontranslationkey": "defaults-skill-show-piloting-description" + }, + { + "attribute": "toggle_skill_psionics", + "displayname": "[Skill] Show Psionics Skill", + "displaytranslationkey": "defaults-skill-show-psionics", + "type": "checkbox", + "value": "on", + "description": "Show the Psionics (Smarts) skill.", + "descriptiontranslationkey": "defaults-skill-show-psionics-description" + }, + { + "attribute": "toggle_skill_riding", + "displayname": "[Skill] Show Riding Skill", + "displaytranslationkey": "defaults-skill-show-riding", + "type": "checkbox", + "value": "on", + "checked": "checked", + "description": "Show the Riding (Agility) skill.", + "descriptiontranslationkey": "defaults-skill-show-riding-description" + }, + { + "attribute": "toggle_skill_spellcasting", + "displayname": "[Skill] Show Spellcasting Skill", + "displaytranslationkey": "defaults-skill-show-spellcasting", + "type": "checkbox", + "value": "on", + "description": "Show the Spellcasting (Smarts) skill.", + "descriptiontranslationkey": "defaults-skill-show-spellcasting-description" + }, + { + "attribute": "toggle_skill_weird_science", + "displayname": "[Skill] Show Weird Science Skill", + "displaytranslationkey": "defaults-skill-show-weird-science", + "type": "checkbox", + "value": "on", + "description": "Show the Weird Science (Smarts) skill.", + "descriptiontranslationkey": "defaults-skill-show-weird-science-description" + }, + { + "attribute": "toggle_skill_custom_skill_1", + "displayname": "[Skill] Show Custom Skill #1", + "displaytranslationkey": "defaults-skill-show-custom-skill-1", + "type": "checkbox", + "value": "on", + "description": "Show the Custom Skill #1, which can be renamed further down.", + "descriptiontranslationkey": "defaults-skill-show-custom-skill-1-description" + }, + { + "attribute": "toggle_skill_custom_skill_2", + "displayname": "[Skill] Show Custom Skill #2", + "displaytranslationkey": "defaults-skill-show-custom-skill-2", + "type": "checkbox", + "value": "on", + "description": "Show the Custom Skill #2, which can be renamed further down.You can rename the labels of each attribute and its abbreviation (max. 3 characters). This can also be done manually with the @{rename-attribute} for each individual sheet. Note that changing the label does not affect the reference @{attribute} for rolls. They will always be in English.
", + "descriptiontranslationkey": "defaults-skill-show-custom-skill-2-description" + }, + { + "attribute": "rename_agility", + "displayname": "[Rename] Attribute: Agility to ", + "displaytranslationkey": "defaults-rename-attribute-agility", + "type": "text", + "description": "Renamed via the attribute rename_agility.", + "descriptiontranslationkey": "defaults-rename-attribute-agility-description" + }, + { + "attribute": "rename_agi", + "displayname": "[Rename] Attribute: AGI to ", + "displaytranslationkey": "defaults-rename-attribute-agi", + "type": "text", + "description": "Renamed via the attribute rename_agi.", + "descriptiontranslationkey": "defaults-rename-attribute-agi-description" + }, + { + "attribute": "rename_smarts", + "displayname": "[Rename] Attribute: Smarts to ", + "displaytranslationkey": "defaults-rename-attribute-smarts", + "type": "text", + "description": "Renamed via the attribute rename_smarts.", + "descriptiontranslationkey": "defaults-rename-attribute-smarts-description" + }, + { + "attribute": "rename_sma", + "displayname": "[Rename] Attribute: SMA to ", + "displaytranslationkey": "defaults-rename-attribute-sma", + "type": "text", + "description": "Renamed via the attribute rename_sma.", + "descriptiontranslationkey": "defaults-rename-attribute-sma-description" + }, + { + "attribute": "rename_spirit", + "displayname": "[Rename] Attribute: Spirit to ", + "displaytranslationkey": "defaults-rename-attribute-spirit", + "type": "text", + "description": "Renamed via the attribute rename_spirit.", + "descriptiontranslationkey": "defaults-rename-attribute-spirit-description" + }, + { + "attribute": "rename_spi", + "displayname": "[Rename] Attribute: SPI to ", + "displaytranslationkey": "defaults-rename-attribute-spi", + "type": "text", + "description": "Renamed via the attribute rename_spi.", + "descriptiontranslationkey": "defaults-rename-attribute-spi-description" + }, + { + "attribute": "rename_strength", + "displayname": "[Rename] Attribute: Strength to ", + "displaytranslationkey": "defaults-rename-attribute-strength", + "type": "text", + "description": "Renamed via the attribute rename_strength.", + "descriptiontranslationkey": "defaults-rename-attribute-strength-description" + }, + { + "attribute": "rename_str", + "displayname": "[Rename] Attribute: STR to ", + "displaytranslationkey": "defaults-rename-attribute-str", + "type": "text", + "description": "Renamed via the attribute rename_str.", + "descriptiontranslationkey": "defaults-rename-attribute-str-description" + }, + { + "attribute": "rename_vigor", + "displayname": "[Rename] Attribute: Vigor to ", + "displaytranslationkey": "defaults-rename-attribute-vigor", + "type": "text", + "description": "Renamed via the attribute rename_vigor.", + "descriptiontranslationkey": "defaults-rename-attribute-vigor-description" + }, + { + "attribute": "rename_vig", + "displayname": "[Rename] Attribute: VIG to ", + "displaytranslationkey": "defaults-rename-attribute-vig", + "type": "text", + "description": "Renamed via the attribute rename_vig.You can rename the labels of each skill, best kept below 15 characters due to layout constrains. This can also be done manually with the @{rename-attribute} for each individual sheet. Note that changing the label does not affect the reference @{attribute} for rolls. They will always be in English.
", + "descriptiontranslationkey": "defaults-rename-attribute-vig-description" + }, + { + "attribute": "rename_academics", + "displayname": "[Rename] Skill: Academics to ", + "displaytranslationkey": "defaults-rename-skill-academics", + "type": "text", + "description": "Renamed via the attribute rename_academics.", + "descriptiontranslationkey": "defaults-rename-skill-academics-description" + }, + { + "attribute": "rename_athletics", + "displayname": "[Rename] Skill: Athletics to ", + "displaytranslationkey": "defaults-rename-skill-athletics", + "type": "text", + "description": "Renamed via the attribute rename_athletics.", + "descriptiontranslationkey": "defaults-rename-skill-athletics-description" + }, + { + "attribute": "rename_boating", + "displayname": "[Rename] Skill: Boating to ", + "displaytranslationkey": "defaults-rename-skill-boating", + "type": "text", + "description": "Renamed via the attribute rename_boating.", + "descriptiontranslationkey": "defaults-rename-skill-boating-description" + }, + { + "attribute": "rename_common_knowledge", + "displayname": "[Rename] Skill: Common Knowl. to ", + "displaytranslationkey": "defaults-rename-skill-common-knowledge", + "type": "text", + "description": "Renamed via the attribute rename_common_knowledge.", + "descriptiontranslationkey": "defaults-rename-skill-common-knowledge-description" + }, + { + "attribute": "rename_driving", + "displayname": "[Rename] Skill: Driving to ", + "displaytranslationkey": "defaults-rename-skill-driving", + "type": "text", + "description": "Renamed via the attribute rename_driving.", + "descriptiontranslationkey": "defaults-rename-skill-driving-description" + }, + { + "attribute": "rename_electronics", + "displayname": "[Rename] Skill: Electronics to ", + "displaytranslationkey": "defaults-rename-skill-electronics", + "type": "text", + "description": "Renamed via the attribute rename_electronics.", + "descriptiontranslationkey": "defaults-rename-skill-electronics-description" + }, + { + "attribute": "rename_faith", + "displayname": "[Rename] Skill: Faith to ", + "displaytranslationkey": "defaults-rename-skill-faith", + "type": "text", + "description": "Renamed via the attribute rename_faith.", + "descriptiontranslationkey": "defaults-rename-skill-faith-description" + }, + { + "attribute": "rename_fighting", + "displayname": "[Rename] Skill: Fighting to ", + "displaytranslationkey": "defaults-rename-skill-fighting", + "type": "text", + "description": "Renamed via the attribute rename_fighting.", + "descriptiontranslationkey": "defaults-rename-skill-fighting-description" + }, + { + "attribute": "rename_focus", + "displayname": "[Rename] Skill: Focus to ", + "displaytranslationkey": "defaults-rename-skill-focus", + "type": "text", + "description": "Renamed via the attribute rename_focus.", + "descriptiontranslationkey": "defaults-rename-skill-focus-description" + }, + { + "attribute": "rename_gambling", + "displayname": "[Rename] Skill: Gambling to ", + "displaytranslationkey": "defaults-rename-skill-gambling", + "type": "text", + "description": "Renamed via the attribute rename_gambling.", + "descriptiontranslationkey": "defaults-rename-skill-gambling-description" + }, + { + "attribute": "rename_hacking", + "displayname": "[Rename] Skill: Hacking to ", + "displaytranslationkey": "defaults-rename-skill-hacking", + "type": "text", + "description": "Renamed via the attribute rename_hacking.", + "descriptiontranslationkey": "defaults-rename-skill-hacking-description" + }, + { + "attribute": "rename_healing", + "displayname": "[Rename] Skill: Healing to ", + "displaytranslationkey": "defaults-rename-skill-healing", + "type": "text", + "description": "Renamed via the attribute rename_healing.", + "descriptiontranslationkey": "defaults-rename-skill-healing-description" + }, + { + "attribute": "rename_intimidation", + "displayname": "[Rename] Skill: Intimidation to ", + "displaytranslationkey": "defaults-rename-skill-intimidation", + "type": "text", + "description": "Renamed via the attribute rename_intimidation.", + "descriptiontranslationkey": "defaults-rename-skill-intimidation-description" + }, + { + "attribute": "rename_language", + "displayname": "[Rename] Skill: Language to ", + "displaytranslationkey": "defaults-rename-skill-language", + "type": "text", + "description": "Renamed via the attribute rename_language.", + "descriptiontranslationkey": "defaults-rename-skill-language-description" + }, + { + "attribute": "rename_magic", + "displayname": "[Rename] Skill: MAGIC to ", + "displaytranslationkey": "defaults-rename-skill-magic", + "type": "text", + "description": "Renamed via the attribute rename_magic.", + "descriptiontranslationkey": "defaults-rename-skill-magic-description" + }, + { + "attribute": "rename_notice", + "displayname": "[Rename] Skill: Notice to ", + "displaytranslationkey": "defaults-rename-skill-notice", + "type": "text", + "description": "Renamed via the attribute rename_notice.", + "descriptiontranslationkey": "defaults-rename-skill-notice-description" + }, + { + "attribute": "rename_occult", + "displayname": "[Rename] Skill: Occult to ", + "displaytranslationkey": "defaults-rename-skill-occult", + "type": "text", + "description": "Renamed via the attribute rename_occult.", + "descriptiontranslationkey": "defaults-rename-skill-occult-description" + }, + { + "attribute": "rename_performance", + "displayname": "[Rename] Skill: Performance to ", + "displaytranslationkey": "defaults-rename-skill-performance", + "type": "text", + "description": "Renamed via the attribute rename_performance.", + "descriptiontranslationkey": "defaults-rename-skill-performance-description" + }, + { + "attribute": "rename_persuasion", + "displayname": "[Rename] Skill: Persuasion to ", + "displaytranslationkey": "defaults-rename-skill-persuasion", + "type": "text", + "description": "Renamed via the attribute rename_persuasion.", + "descriptiontranslationkey": "defaults-rename-skill-persuasion-description" + }, + { + "attribute": "rename_piloting", + "displayname": "[Rename] Skill: Piloting to ", + "displaytranslationkey": "defaults-rename-skill-piloting", + "type": "text", + "description": "Renamed via the attribute rename_piloting.", + "descriptiontranslationkey": "defaults-rename-skill-piloting-description" + }, + { + "attribute": "rename_psionics", + "displayname": "[Rename] Skill: Psionics to ", + "displaytranslationkey": "defaults-rename-skill-psionics", + "type": "text", + "description": "Renamed via the attribute rename_psionics.", + "descriptiontranslationkey": "defaults-rename-skill-psionics-description" + }, + { + "attribute": "rename_repair", + "displayname": "[Rename] Skill: Repair to ", + "displaytranslationkey": "defaults-rename-skill-repair", + "type": "text", + "description": "Renamed via the attribute rename_repair.", + "descriptiontranslationkey": "defaults-rename-skill-repair-description" + }, + { + "attribute": "rename_research", + "displayname": "[Rename] Skill: Research to ", + "displaytranslationkey": "defaults-rename-skill-research", + "type": "text", + "description": "Renamed via the attribute rename_research.", + "descriptiontranslationkey": "defaults-rename-skill-research-description" + }, + { + "attribute": "rename_riding", + "displayname": "[Rename] Skill: Riding to ", + "displaytranslationkey": "defaults-rename-skill-riding", + "type": "text", + "description": "Renamed via the attribute rename_riding.", + "descriptiontranslationkey": "defaults-rename-skill-riding-description" + }, + { + "attribute": "rename_science", + "displayname": "[Rename] Skill: Science to ", + "displaytranslationkey": "defaults-rename-skill-science", + "type": "text", + "description": "Renamed via the attribute rename_science.", + "descriptiontranslationkey": "defaults-rename-skill-science-description" + }, + { + "attribute": "rename_shooting", + "displayname": "[Rename] Skill: Shooting to ", + "displaytranslationkey": "defaults-rename-skill-shooting", + "type": "text", + "description": "Renamed via the attribute rename_shooting.", + "descriptiontranslationkey": "defaults-rename-skill-shooting-description" + }, + { + "attribute": "rename_spellcasting", + "displayname": "[Rename] Skill: Spellcasting to ", + "displaytranslationkey": "defaults-rename-skill-spellcasting", + "type": "text", + "description": "Renamed via the attribute rename_spellcasting.", + "descriptiontranslationkey": "defaults-rename-skill-spellcasting-description" + }, + { + "attribute": "rename_stealth", + "displayname": "[Rename] Skill: Stealth to ", + "displaytranslationkey": "defaults-rename-skill-stealth", + "type": "text", + "description": "Renamed via the attribute rename_stealth.", + "descriptiontranslationkey": "defaults-rename-skill-stealth-description" + }, + { + "attribute": "rename_survival", + "displayname": "[Rename] Skill: Survival to ", + "displaytranslationkey": "defaults-rename-skill-survival", + "type": "text", + "description": "Renamed via the attribute rename_survival.", + "descriptiontranslationkey": "defaults-rename-skill-survival-description" + }, + { + "attribute": "rename_taunt", + "displayname": "[Rename] Skill: Taunt to ", + "displaytranslationkey": "defaults-rename-skill-taunt", + "type": "text", + "description": "Renamed via the attribute rename_taunt.", + "descriptiontranslationkey": "defaults-rename-skill-taunt-description" + }, + { + "attribute": "rename_thievery", + "displayname": "[Rename] Skill: Thievery to ", + "displaytranslationkey": "defaults-rename-skill-thievery", + "type": "text", + "description": "Renamed via the attribute rename_thievery.", + "descriptiontranslationkey": "defaults-rename-skill-thievery-description" + }, + { + "attribute": "rename_weird_science", + "displayname": "[Rename] Skill: Weird Science to ", + "displaytranslationkey": "defaults-rename-skill-weird-science", + "type": "text", + "description": "Renamed via the attribute rename_weird_science.", + "descriptiontranslationkey": "defaults-rename-skill-weird-science-description" + }, + { + "attribute": "rename_custom_skill_1", + "displayname": "[Rename] Skill: Custom Skill #1 to ", + "displaytranslationkey": "defaults-rename-skill-custom-skill-1", + "type": "text", + "description": "Can be renamed directly in the sheet's Settings tab.", + "descriptiontranslationkey": "defaults-rename-skill-custom-skill-1-description" + }, + { + "attribute": "rename_custom_skill_2", + "displayname": "[Rename] Skill: Custom Skill #2 to ", + "displaytranslationkey": "defaults-rename-skill-custom-skill-2", + "type": "text", + "description": "Can be renamed directly in the sheet's Settings tab.You can rename the labels at the top of the sheet, such as \"Name\" to \"Alias\" or \"Origin\" to \"Race\". This can also be done manually with the @{rename-label-attribute} for each individual sheet. Note that the labels are separated from the actual fields and do not affect the references (e.g. @{name}). They will always be in English.
", + "descriptiontranslationkey": "defaults-rename-skill-custom-skill-2-description" + }, + { + "attribute": "rename_label_name", + "displayname": "[Rename] Label: Name to ", + "displaytranslationkey": "defaults-rename-label-name", + "type": "text", + "description": "Renamed via the attribute rename_label_name (e.g. Alias or Codename).", + "descriptiontranslationkey": "defaults-rename-label-name-description" + }, + { + "attribute": "rename_label_origin", + "displayname": "[Rename] Label: Origin to ", + "displaytranslationkey": "defaults-rename-label-origin", + "type": "text", + "description": "Renamed via the attribute rename_label_origin (e.g. Race or Species).", + "descriptiontranslationkey": "defaults-rename-label-origin-description" + }, + { + "attribute": "rename_label_rank", + "displayname": "[Rename] Label: Rank to ", + "displaytranslationkey": "defaults-rename-label-rank", + "type": "text", + "description": "Renamed via the attribute rename_label_rank (e.g. Grade or Titel).", + "descriptiontranslationkey": "defaults-rename-label-rank-description" + }, + { + "attribute": "rename_label_level", + "displayname": "[Rename] Label: Level to ", + "displaytranslationkey": "defaults-rename-label-level", + "type": "text", + "description": "Renamed via the attribute rename_label_level (e.g. Circle or Year).", + "descriptiontranslationkey": "defaults-rename-label-level-description" + }, + { + "attribute": "rename_label_exp", + "displayname": "[Rename] Label: EXP to ", + "displaytranslationkey": "defaults-rename-label-exp", + "type": "text", + "description": "Renamed via the attribute rename_label_exp (e.g. Karma or Gems).", + "descriptiontranslationkey": "defaults-rename-label-exp-description" + }, + { + "attribute": "rename_label_gender", + "displayname": "[Rename] Label: Gender to ", + "displaytranslationkey": "defaults-rename-label-gender", + "type": "text", + "description": "Renamed via the attribute rename_label_gender (e.g. Sex or Version).", + "descriptiontranslationkey": "defaults-rename-label-gender-description" + }, + { + "attribute": "rename_label_age", + "displayname": "[Rename] Label: Age to ", + "displaytranslationkey": "defaults-rename-label-age", + "type": "text", + "description": "Renamed via the attribute rename_label_age (e.g. Number or Incarnation).", + "descriptiontranslationkey": "defaults-rename-label-age-description" + }, + { + "attribute": "rename_label_hair", + "displayname": "[Rename] Label: Hair to ", + "displaytranslationkey": "defaults-rename-label-hair", + "type": "text", + "description": "Renamed via the attribute rename_label_hair (e.g. Horns or Mane).", + "descriptiontranslationkey": "defaults-rename-label-hair-description" + }, + { + "attribute": "rename_label_eyes", + "displayname": "[Rename] Label: Eyes to ", + "displaytranslationkey": "defaults-rename-label-eyes", + "type": "text", + "description": "Renamed via the attribute rename_label_eyes (e.g. Sensors or Optics).", + "descriptiontranslationkey": "defaults-rename-label-eyes-description" + }, + { + "attribute": "rename_label_height", + "displayname": "[Rename] Label: Height to ", + "displaytranslationkey": "defaults-rename-label-height", + "type": "text", + "description": "Renamed via the attribute rename_label_height (e.g. Scale or Length).", + "descriptiontranslationkey": "defaults-rename-label-height-description" + }, + { + "attribute": "rename_label_weight", + "displayname": "[Rename] Label: Weight to ", + "displaytranslationkey": "defaults-rename-label-weight", + "type": "text", + "description": "Renamed via the attribute rename_label_weight (e.g. Mass or Your Mom).", + "descriptiontranslationkey": "defaults-rename-label-weight-description" + }, + { + "attribute": "rename_label_bits", + "displayname": "[Rename] Label: #Bits to ", + "displaytranslationkey": "defaults-rename-label-bits", + "type": "text", + "description": "Renamed via the attribute rename_label_bits (e.g. Money or Gold).You can rename the blocks to better fit the Game Setting, such as \"Powers\" to \"Talismans\" or \"Walkers\" to \"Frames\". This can also be done manually with the @{rename-block-attribute} for each individual sheet.
", + "descriptiontranslationkey": "defaults-rename-label-bits-description" + }, + { + "attribute": "rename_block_allies", + "displayname": "[Rename] Block: Allies to ", + "displaytranslationkey": "defaults-rename-block-allies", + "type": "text", + "description": "Renamed via the attribute rename_block_allies.", + "descriptiontranslationkey": "defaults-rename-block-allies-description" + }, + { + "attribute": "rename_block_apparel", + "displayname": "[Rename] Block: Apparel to ", + "displaytranslationkey": "defaults-rename-block-apparel", + "type": "text", + "description": "Renamed via the attribute rename_block_apparel.", + "descriptiontranslationkey": "defaults-rename-block-apparel-description" + }, + { + "attribute": "rename_block_ammunition", + "displayname": "[Rename] Block: Ammunition to ", + "displaytranslationkey": "defaults-rename-block-ammunition", + "type": "text", + "description": "Renamed via the attribute rename_block_ammunition.", + "descriptiontranslationkey": "defaults-rename-block-ammunition-description" + }, + { + "attribute": "rename_block_augmentations", + "displayname": "[Rename] Block: Augmentations to ", + "displaytranslationkey": "defaults-rename-block-augmentations", + "type": "text", + "description": "Renamed via the attribute rename_block_augmentations.", + "descriptiontranslationkey": "defaults-rename-block-augmentations-description" + }, + { + "attribute": "rename_block_engrams", + "displayname": "[Rename] Block: Engrams to ", + "displaytranslationkey": "defaults-rename-block-engrams", + "type": "text", + "description": "Renamed via the attribute rename_block_engrams.", + "descriptiontranslationkey": "defaults-rename-block-engrams-description" + }, + { + "attribute": "rename_block_integrity", + "displayname": "[Rename] Block: Integrity to ", + "displaytranslationkey": "defaults-rename-block-integrity", + "type": "text", + "description": "Renamed via the attribute rename_block_integrity.", + "descriptiontranslationkey": "defaults-rename-block-integrity-description" + }, + { + "attribute": "rename_block_inventory", + "displayname": "[Rename] Block: Inventory to ", + "displaytranslationkey": "defaults-rename-block-inventory", + "type": "text", + "description": "Renamed via the attribute rename_block_inventory.", + "descriptiontranslationkey": "defaults-rename-block-inventory-description" + }, + { + "attribute": "rename_block_power", + "displayname": "[Rename] Block: Power to ", + "displaytranslationkey": "defaults-rename-block-power", + "type": "text", + "description": "Renamed via the attribute rename_block_power.", + "descriptiontranslationkey": "defaults-rename-block-power-description" + }, + { + "attribute": "rename_block_powers", + "displayname": "[Rename] Block: Powers to ", + "displaytranslationkey": "defaults-rename-block-powers", + "type": "text", + "description": "Renamed via the attribute rename_block_powers.", + "descriptiontranslationkey": "defaults-rename-block-powers-description" + }, + { + "attribute": "rename_block_powerarmors", + "displayname": "[Rename] Block: Power Armors to ", + "displaytranslationkey": "defaults-rename-block-powerarmors", + "type": "text", + "description": "Renamed via the attribute rename_block_powerarmors.", + "descriptiontranslationkey": "defaults-rename-block-powerarmors-description" + }, + { + "attribute": "rename_block_quick_notes", + "displayname": "[Rename] Block: Quick Notes to ", + "displaytranslationkey": "defaults-rename-block-quick-notes", + "type": "text", + "description": "Renamed via the attribute rename_block_quick_notes.", + "descriptiontranslationkey": "defaults-rename-block-quick-notes-description" + }, + { + "attribute": "rename_block_vehicles", + "displayname": "[Rename] Block: Vehicles to ", + "displaytranslationkey": "defaults-rename-block-vehicles", + "type": "text", + "description": "Renamed via the attribute rename_block_vehicles.", + "descriptiontranslationkey": "defaults-rename-block-vehicles-description" + }, + { + "attribute": "rename_block_walkers", + "displayname": "[Rename] Block: Walkers to ", + "displaytranslationkey": "defaults-rename-block-walkers", + "type": "text", + "description": "Renamed via the attribute rename_block_walkers.", + "descriptiontranslationkey": "defaults-rename-block-walkers-description" + }, + { + "attribute": "rename_block_weapons", + "displayname": "[Rename] Block: Weapons to ", + "displaytranslationkey": "defaults-rename-block-weapons", + "type": "text", + "description": "Renamed via the attribute rename_block_weapons.You can rename the Hindrances caused by the loss of Integrity (Sanity, Purity, etc.). This can also be done manually with the @{rename_integrity_attribute} for each individual sheet. Note that they activate in intervals for each fraction of 10 below 70 — Discord triggers on 69.9 or lower, Dissonance on 59.9 or lower, and so forth.
", + "descriptiontranslationkey": "defaults-rename-block-weapons-description" + }, + { + "attribute": "rename_discord", + "displayname": "[Rename] Integrity: Discord to ", + "displaytranslationkey": "defaults-rename-integrity-discord", + "type": "text", + "description": "Renamed via the attribute rename_discord.", + "descriptiontranslationkey": "defaults-rename-integrity-discord-description" + }, + { + "attribute": "rename_psychosis", + "displayname": "[Rename] Integrity: Psychosis to ", + "displaytranslationkey": "defaults-rename-integrity-psychosis", + "type": "text", + "description": "Renamed via the attribute rename_psychosis.", + "descriptiontranslationkey": "defaults-rename-integrity-psychosis-description" + }, + { + "attribute": "rename_seizures", + "displayname": "[Rename] Integrity: Seizures to ", + "displaytranslationkey": "defaults-rename-integrity-seizures", + "type": "text", + "description": "Renamed via the attribute rename_seizures.", + "descriptiontranslationkey": "defaults-rename-integrity-seizures-description" + }, + { + "attribute": "rename_depersonalization", + "displayname": "[Rename] Integrity: Depersonalization to ", + "displaytranslationkey": "defaults-rename-integrity-depersonalization", + "type": "text", + "description": "Renamed via the attribute rename_depersonalization.", + "descriptiontranslationkey": "defaults-rename-integrity-depersonalization-description" + }, + { + "attribute": "rename_dissonance", + "displayname": "[Rename] Integrity: Dissonance to ", + "displaytranslationkey": "defaults-rename-integrity-dissonance", + "type": "text", + "description": "Renamed via the attribute rename_dissonance.", + "descriptiontranslationkey": "defaults-rename-integrity-dissonance-description" + }, + { + "attribute": "rename_alienation", + "displayname": "[Rename] Integrity: Alienation to ", + "displaytranslationkey": "defaults-rename-integrity-alienation", + "type": "text", + "description": "Renamed via the attribute rename_alienation.", + "descriptiontranslationkey": "defaults-rename-integrity-alienation-description" + }, + { + "attribute": "rename_derealization", + "displayname": "[Rename] Integrity: Derealization to ", + "displaytranslationkey": "defaults-rename-integrity-derealization", + "type": "text", + "description": "Renamed via the attribute rename_derealization.", + "descriptiontranslationkey": "defaults-rename-integrity-derealization-description" + }, + { + "attribute": "rename_ego_death", + "displayname": "[Rename] Integrity: Ego Death to ", + "displaytranslationkey": "defaults-rename-integrity-ego-death", + "type": "text", + "description": "Renamed via the attribute rename_ego_death.", + "descriptiontranslationkey": "defaults-rename-integrity-ego-death-description" + } + ] +} diff --git a/Savage Worlds - Graph Paper/source/scripts/workers.js b/Savage Worlds - Graph Paper/source/scripts/workers.js new file mode 100644 index 0000000000..242857fa8d --- /dev/null +++ b/Savage Worlds - Graph Paper/source/scripts/workers.js @@ -0,0 +1,822 @@ + +/* ############################################################################# +VARIABLES +############################################################################# */ + +const dice = ['', 'd4', 'd6', 'd8', 'd10', 'd12']; + +const renamedAbbr = ['rename_agi', 'rename_sma', 'rename_spi', 'rename_str', 'rename_vig']; + +var parseCodes = { agi: '@{agility}!', sma: '@{smarts}!', spi: '@{spirit}!', + str: '@{strength}!', vig: '@{vigor}!' }; + +const parseDieCodes = { d4: 'd4!', d6: 'd6!', d8: 'd8!', d10: 'd10!', d12: 'd12!' }; + +/* ############################################################################# +TRANSLATION SETUP +############################################################################# */ + +on("sheet:opened", function(e){ + // Translations for query strings + setAttrs({ + 'query_rate_of_fire': getTranslationByKey('rate-of-fire'), + 'query_modifier': getTranslationByKey('modifier'), + 'query_wild_die': getTranslationByKey('wild-die'), + 'query_roll_result': getTranslationByKey('roll-result'), + 'query_target_number': getTranslationByKey('target-number'), + 'query_damage_modifier': getTranslationByKey('damage-modifier'), + 'query_bonus_wild_die': getTranslationByKey('bonus-wild-die'), + 'none': getTranslationByKey('none') + }); + + // Include renamed Trait abbreviations + getAttrs(renamedAbbr, (values) => { + parseCodes = { agi: '@{agility}!', sma: '@{smarts}!', spi: '@{spirit}!', + str: '@{strength}!', vig: '@{vigor}!' }; + + _.each(renamedAbbr, (a) => { + // Skip if not defined + if (_.isUndefined(values[a])) return; + + // Remove erroneous whitsapces + let v = values[a].replaceAll(' ', '').toLowerCase(); + + // Skip if empty string + if (v.length < 1) return; + + parseCodes[v] = parseCodes[a.replace('rename_', '')]; + }); + }); +}); + +/* ############################################################################# +CUSTOM SHEET FUNCTIONS +############################################################################# */ + +var TETRA = TETRA || ( function() { + 'use strict'; + var version = '1.0', + + // Parse and evaluate float number + toFloat = function(number, old = 0.0) { + let n = parseFloat(number); + n = _.isUndefined(n) ? old : n; + + return isNaN(n) ? old : n; + }, + + // Parse and evaluate integer number + toInt = function(number, old = 0) { + let n = parseInt(number); + n = _.isUndefined(n) ? old : n; + + return isNaN(n) ? old : n; + }, + + parseDiceCode = function(code) { + if (_.isUndefined(code)) return ''; + + code = code.toLowerCase(); + + // Replace abbreviations with attribute references (naive) + _.each(_.keys(parseCodes), (k) => { + code = code.replaceAll(`+${k}`, `+${parseCodes[k]}`); + code = code.replaceAll(`-${k}`, `-${parseCodes[k]}`); + code = code.replaceAll(`${k}+`, `${parseCodes[k]}+`); + code = code.replaceAll(`${k}-`, `${parseCodes[k]}-`); + }); + + // Add exclamation mark (!) to make dice explode (naive) + _.each(_.keys(parseDieCodes), (k) => { + code = code.replaceAll(`${k}`, `${parseDieCodes[k]}`); + }); + + return code; + }, + + // Update the roll queries for a trait + updateTraitRoll = function(trait) { + let traitAttributes = [trait, `${trait}_wd`, `${trait}_mod`]; + + // Get trait values: die, Wild Die, and modifier + getAttrs(traitAttributes, (values) => { + let die = values[trait], + wd = values[`${trait}_wd`], + ewd = '-10000', // Extra Wild Die + mod = values[`${trait}_mod`] || '0', + untrained = '0', + code = toInt(mod); + + // Set up Wild Die + if (dice.includes(wd) && wd != '') { + ewd = wd; + } else if (wd == '') { + wd = '1d6'; + } else { + wd = '-10000'; // Rolltemplate will not show results below -1000 + } + + // Account for untrained skill + if (die == 'd4-2') { + die = 'd4'; + code -= 2; + untrained = '-2'; + } + + // Stringify code + if (code != 0) { + code = code > 0 ? `+${code}` : code.toString(); + } else { + code = ''; + } + + // Build base code + code = die + code; + + // Add custom Wild Die to code + code = ewd != '-10000' ? `${code} [${wd}]` : code; + + setAttrs({ [`${trait}_roll`]: die, + [`${trait}_wd_roll`]: wd, + [`${trait}_extra_wd_roll`]: ewd, + [`${trait}_untrained_mod`]: untrained, + [`${trait}_code`]: code }); + }); + }, + + // Apply custom function to attributes in all rows of repeating section + doWithRepList = function(section, attributes, func = (v) => { return v }) { + let fullSection = section.includes('repeating_') ? section : `repeating_${section}`; + + attributes = _.isArray(attributes) ? attributes : [attributes]; + + function process(idArray, attributes) { + let attributeArray = []; + + // List of all requested attributes from all rows + _.each(idArray, (id) => { + _.each(attributes, (a) => { + attributeArray.push(`${fullSection}_${id}_${a}`); + }); + }); + + getAttrs(attributeArray, (values) => { + func(values); // Pass all attribute values to custom function + }); + } + + getSectionIDs(fullSection, (idArray) => { + process(idArray, attributes); + }); + }; + + return { + updateTraitRoll: updateTraitRoll, + doWithRepList: doWithRepList, + toFloat: toFloat, + toInt: toInt, + parseDiceCode: parseDiceCode + }; +}()); + +/* ############################################################################# +ATTRIBUTE DICE (AND SOAK) +############################################################################# */ + +const attributes = ['agility', 'smarts', 'spirit', 'strength', 'vigor']; + +on('change:soak change:' + attributes.join(' change:'), (e) => { + // Derive target attribute and check if input value is a valid die + let value = _.isUndefined(e.newValue) ? 'd4' : e.newValue; + value = dice.includes(value) && value != '' ? value : 'd4'; + + // Set attributes to new value, silent to avoid triggering worker again + // but with a callback to update the attribute's roll query + setAttrs({ [e.sourceAttribute]: value }, + { silent: true }, + TETRA.updateTraitRoll(e.sourceAttribute)); +}); + +/* ############################################################################# +SKILL DICE +############################################################################# */ + +const skills = ['academics', 'athletics', 'battle', 'boating', 'common_knowledge', + 'driving', 'electronics', 'fighting', 'healing', 'intimidation', + 'magic', 'notice', 'performance', 'persuasion', 'piloting', + 'repair', 'research', 'riding', 'science', 'shooting', 'stealth', + 'survival', 'taunt', 'thievery', 'gambling', 'hacking', 'faith', + 'focus', 'language', 'occult', 'psionics', 'spellcasting', + 'weird_science', 'custom_skill_1', 'custom_skill_2', 'unskilled']; + +const skillDice = ['d4-2', 'd4', 'd6', 'd8', 'd10', 'd12']; + +on('change:' + skills.join(' change:'), (e) => { + // Derive target attribute and check if input value is a valid die + let value = _.isUndefined(e.newValue) ? 'd4-2' : e.newValue; + value = skillDice.includes(value) ? value : 'd4-2'; + + // Set attributes to new value, silent to avoid triggering worker again + // but with a callback to update the attribute's roll query + setAttrs({ [e.sourceAttribute]: value }, + { silent: true }, + TETRA.updateTraitRoll(e.sourceAttribute)); +}); + +/* ############################################################################# +WILD DICE +############################################################################# */ + +const wildTraits = ['soak'].concat(attributes).concat(skills).map((s) => { return `${s}_wd` }); + +on('change:' + wildTraits.join(' change:'), (e) => { + // Derive target attribute and check if input value is a valid die + let value = _.isUndefined(e.newValue) ? '' : e.newValue; + value = dice.includes(value) ? value : 'n/a'; + + // Set attributes to new value, silent to avoid triggering worker again + // but with a callback to update the attribute's roll query + setAttrs({ [e.sourceAttribute]: value }, + { silent: true }, + TETRA.updateTraitRoll(e.sourceAttribute.replace('_wd', ''))); +}); + +/* ############################################################################# +NATURAL DICE +############################################################################# */ + +const naturalTraits = attributes.map((s) => { return `${s}_natural` }); + +on('change:' + naturalTraits.join(' change:'), (e) => { + // Check if new value is valid + let value = dice.includes(e.newValue) ? e.newValue : ''; + value = _.isUndefined(e.newValue) ? 'd4' : value; + + // Set attributes to new value, silent to avoid triggering worker again + setAttrs({ [e.sourceAttribute]: value }, { silent: true }); +}); + +/* ############################################################################# +RUN DIE +############################################################################# */ + +on('change:run', (e) => { + // Check if run value is a valid die + let value = dice.includes(e.newValue) ? e.newValue : ''; + + // Update run die + value = _.isUndefined(e.newValue) ? '' : value; + + // Update run roll + let runRoll = value != '' ? value : 'd6'; + + // Set attributes to new values, silent to avoid triggering worker again + setAttrs({ [e.sourceAttribute]: value, ['run_roll']: runRoll }, + { silent: true }); +}); + +/* ############################################################################# +MODIFIERS +############################################################################# */ +const modifiers = ['soak'].concat(attributes).concat(skills).map((s) => { return `${s}_mod` }); + +on('change:' + modifiers.join(' change:'), (e) => { + // Parse input value as integer + let value = TETRA.toInt(e.newValue, ''); + + // Set 0 to empty + value = value == 0 ? '' : value; + + // Positive or negative prefix (required for roll query) + if (value != '') { + let s = String(value); + value = value > -1 && s.charAt(0) != '+' ? `+${s}` : s; + } + + // Set attribute to new value, silent to avoid triggering worker again + setAttrs({ [e.sourceAttribute]: value }, + { silent: true }, + TETRA.updateTraitRoll(e.sourceAttribute.replace('_mod', ''))); +}); + +/* ############################################################################# +SIMPLE STATISTICS +############################################################################# */ + +const simple = ['pace', 'flight', 'rads', 'power', 'power_consumed', + 'power_maximum', 'armor_head', 'armor_torso', 'armor_arms', + 'armor_legs', 'parry', 'toughness', 'integrity_maximum', + 'carry_weight_maximum']; + +on('change:' + simple.join(' change:'), (e) => { + // Parse input value as integer unless it is empty + let value = TETRA.toInt(e.newValue, ''); + + // Cannot be smaller than zero + if (value != '') { + value = value < 0 ? 0 : value; + } + + // Set attribute to new value, silent to avoid triggering worker again + setAttrs({ [e.sourceAttribute]: value }, { silent: true }); +}); + +/* ############################################################################# +WOUND BOXES +############################################################################# */ + +const woundToggles = _.range(1, 7).map((n) => { return `wound_toggle_${n.toString()}` }); + +on('change:wounds change:wound_mitigation change:' + woundToggles.join(' change:'), (e) => { + let attributes = ['wounds', 'wound_mitigation'].concat(woundToggles); + + // Get all relevant attributes + getAttrs(attributes, (values) => { + let setters = {}; + + // Get first inactive wound box + let firstInactiveWound = _.find(woundToggles, (ws) => { + return values[ws] == 'on'; + }); + + // Get number of first inactive wound box + let firstInactiveNumber = (() => { + if (_.isUndefined(firstInactiveWound)) { + return 100; + } + + let number = parseInt(firstInactiveWound.split('').pop()); + return _.isUndefined(number) ? 100 : number; + })(); + + // Deactive all subsequent wound boxes + for (var i = firstInactiveNumber + 1; i < 7; ++i) { + setters[`wound_toggle_${i}`] = 'on'; + }; + + // Limit active wounds to active wound boxes + if (values['wounds'] >= firstInactiveNumber) { + setters['wounds'] = firstInactiveNumber - 1; + } else { + setters['wounds'] = values['wounds']; + }; + + // Update wound-mitigation + let wm = isNaN(parseInt(values['wound_mitigation'])) ? '' : parseInt(values['wound_mitigation']); + + if (wm != '') { + wm = wm < 0 ? 0 : wm; + } + + setters['wound_mitigation'] = wm; + + wm = isNaN(wm) ? 0 : wm; + + // Update wound_mod + let wmod = setters['wounds'] - wm; + + setters['wound_mod'] = wmod < 0 ? 0 : wmod; + + setAttrs(setters, { silent: true }); + }); +}); + +/* ############################################################################# +FATIGUE BOXES +############################################################################# */ + +const fatigueToggles = _.range(2, 4).map((n) => { return `fatigue_toggle_${n.toString()}` }); + +on('change:fatigue change:' + fatigueToggles.join(' change:'), (e) => { + let attributes = ['fatigue'].concat(fatigueToggles); + + // Get all relevant attributes + getAttrs(attributes, (values) => { + let setters = {}; + + // Get first inactive box + let firstInactiveBox = _.find(fatigueToggles, (fs) => { + return values[fs] == 'on'; + }); + + // Get number of first inactive box + let firstInactiveNumber = (() => { + if (_.isUndefined(firstInactiveBox)) { + return 100; + } + + let number = parseInt(firstInactiveBox.split('').pop()); + return _.isUndefined(number) ? 100 : number; + })(); + + // Deactive all subsequent boxes + for (var i = firstInactiveNumber + 1; i < 4; ++i) { + setters[`fatigue_toggle_${i}`] = 'on'; + }; + + // Limit active fatigue to active boxes + if (values['fatigue'] >= firstInactiveNumber) { + setters['fatigue'] = firstInactiveNumber - 1; + } else { + setters['fatigue'] = values['fatigue']; + }; + + // Update fatigue_mod + let fmod = TETRA.toInt(setters['fatigue']); + + setters['fatigue_mod'] = fmod; + + setAttrs(setters, { silent: true }); + }); +}); + +/* ############################################################################# +AUTO SIZE EDGES + HINDRANCES +############################################################################# */ + +// 10px Roboto +// Since Roll20 does not allow DOM access, yes, this BS is necessary. +// Don't take this as something to learn from! Stars above, no! +const letters = { 'A': 6.53, 'a': 5.45, 'B': 6.23, 'b': 5.63, 'C': 6.52, + 'c': 5.23, 'D': 6.56, 'd': 5.64, 'E': 6.69, 'e': 5.31, + 'F': 5.53, 'f': 3.48, 'G': 6.81, 'g': 5.63, 'H': 7.14, + 'h': 5.52, 'I': 2.72, 'i': 2.44, 'J': 5.53, 'j': 2.39, + 'K': 6.28, 'k': 5.08, 'L': 5.39, 'l': 2.44, 'M': 8.73, + 'm': 8.77, 'N': 7.14, 'n': 5.53, 'O': 6.88, 'o': 5.70, + 'P': 6.31, 'p': 5.63, 'Q': 6.88, 'q': 5.69, 'R': 6.17, + 'r': 3.39, 'S': 5.94, 's': 5.16, 'T': 5.97, 't': 3.28, + 'U': 6.48, 'u': 5.52, 'V': 6.38, 'v': 4.84, 'W': 8.88, + 'w': 7.52, 'X': 6.28, 'x': 4.97, 'Y': 8.88, 'y': 7.52, + 'Z': 6.28, 'z': 4.97, '#': 6.17, '&': 6.22, '(': 3.42, + ')': 3.48, '+': 5.67, '-': 2.77, '=': 5.50, '*': 4.31, + '!': 2.58, '.': 2.64, ',': 1.97, '@': 8.98, ' ': 2.48, + '?': 4.73, '_': 4.52, '%': 7.33, 'Ä': 6.53, 'ä': 5.45, + 'Ö': 6.88, 'ö': 5.70, 'Ü': 6.48, 'ü': 5.52, 'ß': 5.95, + '°': 3.75, '<': 5.09, '>': 5.23, '[': 2.66, ']': 2.66, + '{': 3.39, '}': 3.39, '$': 5.63, '"': 3.20 }; + +on('change:repeating_features:feature_name', (e) => { + let target = e.sourceAttribute.replace('_feature_name', '_feature_size'); + + getAttrs([e.sourceAttribute], (value) => { + // Split string into array + let chars = value[Object.keys(value)[0]].split(''), + stringWidth = 0.0; + + // Sum up the width of each character + _.each(chars, (c) => { + stringWidth += _.has(letters, c) ? letters[c] : 5.0; + }); + + // Remove decimal points by rounding up + stringWidth = Math.ceil(stringWidth); + + let offset = 4 - (stringWidth % 4), + elementWidth = stringWidth + offset; + + // Maximum/minimum width + elementWidth = elementWidth > 180 ? 180 : elementWidth; + elementWidth = elementWidth < 32 ? 32 : elementWidth; + + setAttrs({ [target]: elementWidth }, { silent: true }); + }); +}); + +/* ############################################################################# +LOSS PROGRESS +############################################################################# */ + +on('change:integrity', (e) => { + // Parse as float or keep old value if invalid + let value = TETRA.toFloat(e.newValue, e.previousValue), + progress = Math.ceil(value), + setters = { integrity: value.toFixed(1) }; + + // Bar can only take numbers between 0 and 80 + progress = progress > 80 ? 80 : progress; + progress = progress < 0 ? 0 : progress; + setters['integrity_bar_size'] = progress; + + // Set corresponding psychological states + setters['discord'] = value < 70 ? 'on' : 'off'; + setters['dissonance'] = value < 60 ? 'on' : 'off'; + setters['psychosis'] = value < 50 ? 'on' : 'off'; + setters['alienation'] = value < 40 ? 'on' : 'off'; + setters['seizures'] = value < 30 ? 'on' : 'off'; + setters['derealization'] = value < 20 ? 'on' : 'off'; + setters['depersonalization'] = value < 10 ? 'on' : 'off'; + setters['ego_death'] = value < 1 ? 'on' : 'off'; + + setAttrs(setters, { silent: true }); +}); + +/* ############################################################################# +REPEATING WEIGHT +############################################################################# */ + +function twoColSum(values, target, multi = false) { + let sum = 0.0; + + // Turn into two-dimensional array + values = Object.entries(values); + + // Continue to remove items from the array + while (values.length > 0) { + // Values must be in order of weight, toggle, multiplier! + let value = TETRA.toFloat(values.shift()[1]), + toggle = values.shift()[1], + multiplier = 1; + + if (multi) { + multiplier = TETRA.toFloat(values.shift()[1]); + } + + sum += toggle == 'on' ? value * multiplier : 0.0; + } + + setAttrs({ [target]: sum.toFixed(1) }); +} + +on('remove:repeating_weapons change:repeating_weapons:weapon_weight change:repeating_weapons:weapon_weight_toggle', (e) => { + TETRA.doWithRepList('weapons', + ['weapon_weight', 'weapon_weight_toggle'], + (v) => { twoColSum(v, 'carry_weight_weapons') }); +}); + +on('remove:repeating_apparel change:repeating_apparel:apparel_weight change:repeating_apparel:apparel_weight_toggle', (e) => { + TETRA.doWithRepList('apparel', + ['apparel_weight', 'apparel_weight_toggle'], + (v) => { twoColSum(v, 'carry_weight_apparel') }); +}); + +on('remove:repeating_inventory change:repeating_inventory:inventory_weight change:repeating_inventory:inventory_weight_toggle change:repeating_inventory:inventory_amount', (e) => { + TETRA.doWithRepList('inventory', + ['inventory_weight', 'inventory_weight_toggle', 'inventory_amount'], + (v) => { twoColSum(v, 'carry_weight_inventory', true) }); +}); + +const carryWeights = ['carry_weight_apparel', 'carry_weight_weapons', + 'carry_weight_inventory', 'carry_weight_maximum']; + +on('change:' + carryWeights.join(' change:'), (e) => { + getAttrs(carryWeights, (value) => { + let weapons = TETRA.toFloat(value['carry_weight_weapons']), + apparel = TETRA.toFloat(value['carry_weight_apparel']), + inventory = TETRA.toFloat(value['carry_weight_inventory']), + total = (weapons + apparel + inventory).toFixed(1); + + setAttrs({ ['carry_weight']: total }, { silent: true }); + }); +}); + +/* ############################################################################# +LOSS +############################################################################# */ + +on('change:repeating_augmentations remove:repeating_augmentations', (e) => { + TETRA.doWithRepList('augmentations', + ['augmentation_loss', 'augmentation_loss_toggle', 'augmentation_multiplier'], + (v) => { twoColSum(v, 'augmentations_total_loss', true) }); +}); + +/* ############################################################################# +INTEGRITY MOD +############################################################################# */ + +on('change:integrity_mod', (e) => { + setAttrs({ ['integrity_mod']: TETRA.toInt(e.newValue, '') }); +}); + +/* ############################################################################# +INTEGRITY CALCULATION +############################################################################# */ + +on('change:augmentations_total_loss change:integrity_maximum change:integrity_mod', (e) => { + getAttrs(['augmentations_total_loss', 'integrity_maximum', 'integrity_mod'], (values) => { + let loss = TETRA.toFloat(values['augmentations_total_loss']), + max = TETRA.toFloat(values['integrity_maximum'], 80), + mod = TETRA.toFloat(values['integrity_mod']); + + setAttrs({ integrity: (max - loss + mod).toFixed(1) }); + }); +}); + +/* ############################################################################# +REAPTING VEHICLE WEAPONS & SILHOUETTES +############################################################################# */ + +on('change:repeating_vehicles change:repeating_powerarmors', (e) => { + // Weapon count was changed + if (e.sourceAttribute.includes('weapons_count')) { + let value = TETRA.toInt(e.newValue, 0); + + // Value must be between 0 and 10 + value = value < 0 ? 0 : value; + value = value > 10 ? 10 : value; + + setAttrs({ [e.sourceAttribute]: value }, { silent: true }); + } + + // Silhouette was changed + if (e.sourceAttribute.includes('silhouette')) { + let target = e.sourceAttribute.replace('_vehicle_silhouette_cycle', '_vehicle_silhouette'); + + getAttrs([target], (values) => { + let silhouette = TETRA.toInt(_.values(values)[0], 0); + + setAttrs({ [target]: (silhouette + 1) % 17 }, { silent: true }); + }); + } +}); + +/* ############################################################################# +AMMUNITION & BUTTONS +############################################################################# */ + +const ammoMods = ['1', '3', '5', '10']; + +function changeAmmo(triggerName) { + let mod = TETRA.toInt(triggerName.replace('clicked:ammunition_', '')), + attributes = ['ammunition_select', + 'ammunition_container_1', + 'ammunition_container_2', + 'ammunition_container_3']; + + getAttrs(attributes, (values) => { + let target = values['ammunition_select'], + current = TETRA.toInt(values[target]); // The selector value is the attribute name of the box + + // Add ammunition modifier + updated = current + mod; + + // No negative ammunition + updated = updated < 0 ? 0 : updated; + + setAttrs({ [target]: updated }, { silent: true }); + }); +} + +on(`clicked:${ammoMods.map((s) => { return `ammunition_+${s}` }).join(' clicked:')}`, (e) => { + changeAmmo(e.triggerName); +}); + +on(`clicked:${ammoMods.map((s) => { return `ammunition_-${s}` }).join(' clicked:')}`, (e) => { + changeAmmo(e.triggerName); +}); + +on(`clicked:ammunition_set`, (e) => { + getAttrs(['ammunition_select'], (value) => { + let target = `${value['ammunition_select']}_max`; + + getAttrs([value['ammunition_select']], (current) => { + update = TETRA.toInt(current[value['ammunition_select']]); + + setAttrs({ [target]: update }, { silent: true }); + }); + }); +}); + +on(`clicked:ammunition_reset`, (e) => { + getAttrs(['ammunition_select'], (value) => { + let target = value['ammunition_select']; + + getAttrs([`${target}_max`], (max) => { + update = TETRA.toInt(max[`${target}_max`]); + + setAttrs({ [target]: update }, { silent: true }); + }); + }); +}); + +/* ############################################################################# +REPEATING LISTS & OPTIONS +############################################################################# */ + +const listItems = ['engram', 'power', 'weapon']; + +on(listItems.map(s => `change:repeating_${s}s:${s}_damage`).join(' '), (e) => { + let code = TETRA.parseDiceCode(e.newValue); + + code = code.replaceAll('!', '@{explode_damage}'); // Toggle exploding damage dice + code = code == '' ? '0' : code; + + setAttrs({ [`${e.sourceAttribute}_roll`]: code }, { silent: true }); +}); + +on(listItems.map(s => `change:repeating_${s}s:skill_name`).join(' '), (e) => { + let array = skills.map((s) => { return `rename_${s}` }), + id = e.sourceAttribute.replace('skill_name', ''); // All rename_When you enable the option under Setup, you can append and toggle custom code to list item rolls. Mind that the inputs are not validated; do not enter nonsense! Following is a collection of useful template hooks.
You can show or hide skills from the list in accordance with the played Game Setting. This can also be done manually for each individual sheet in its Settings tab. There are two custom skills that can be renamed and modified within the sheet as well, for example to make specialized skills (e.g. specific weapons with custom bonus or Wild Die).
", + "defaults-function-explode-run-die": "[Function] Explode Run Die", + "defaults-function-explode-run-die-description": "Makes the run die Ace.", + "defaults-function-running-applies-fatigue": "[Function] Running Applies Fatigue", + "defaults-function-running-applies-fatigue-description": "Fatigue penalties are subtracted from the run roll.You can show or hide content blocks in accordance with the played Game Setting. This can also be done manually for each individual sheet in its Settings tab. Some blocks that were designed for Maschinenleben, such as Augmentations and Engrams, can be adapted for other purposes as well.
", + "defaults-function-running-ignores-wounds": "[Function] Running Ignores Wounds", + "defaults-function-running-ignores-wounds-description": "Wound penalties are not subtracted from the run roll.", + "defaults-rename-attribute-agi": "[Rename] Attribute: AGI to ", + "defaults-rename-attribute-agi-description": "Renamed via the attribute rename_agi.", + "defaults-rename-attribute-agility": "[Rename] Attribute: Agility to ", + "defaults-rename-attribute-agility-description": "Renamed via the attribute rename_agility.", + "defaults-rename-attribute-sma": "[Rename] Attribute: SMA to ", + "defaults-rename-attribute-sma-description": "Renamed via the attribute rename_sma.", + "defaults-rename-attribute-smarts": "[Rename] Attribute: Smarts to ", + "defaults-rename-attribute-smarts-description": "Renamed via the attribute rename_smarts.", + "defaults-rename-attribute-spi": "[Rename] Attribute: SPI to ", + "defaults-rename-attribute-spi-description": "Renamed via the attribute rename_spi.", + "defaults-rename-attribute-spirit": "[Rename] Attribute: Spirit to ", + "defaults-rename-attribute-spirit-description": "Renamed via the attribute rename_spirit.", + "defaults-rename-attribute-str": "[Rename] Attribute: STR to ", + "defaults-rename-attribute-str-description": "Renamed via the attribute rename_str.", + "defaults-rename-attribute-strength": "[Rename] Attribute: Strength to ", + "defaults-rename-attribute-strength-description": "Renamed via the attribute rename_strength.", + "defaults-rename-attribute-vig": "[Rename] Attribute: VIG to ", + "defaults-rename-attribute-vig-description": "Renamed via the attribute rename_vig.You can rename the labels of each skill, best kept below 15 characters due to layout constrains. This can also be done manually with the @{rename_attribute} for each individual sheet. Note that changing the label does not affect the reference @{attribute} for rolls. They will always be in English.
", + "defaults-rename-attribute-vigor": "[Rename] Attribute: Vigor to ", + "defaults-rename-attribute-vigor-description": "Renamed via the attribute rename_vigor.", + "defaults-rename-block-allies": "[Rename] Block: Allies to ", + "defaults-rename-block-allies-description": "Renamed via the attribute rename_block_allies.", + "defaults-rename-block-ammunition": "[Rename] Block: Ammunition to ", + "defaults-rename-block-ammunition-description": "Renamed via the attribute rename_block_ammunition.", + "defaults-rename-block-apparel": "[Rename] Block: Apparel to ", + "defaults-rename-block-apparel-description": "Renamed via the attribute rename_block_apparel.", + "defaults-rename-block-augmentations": "[Rename] Block: Augmentations to ", + "defaults-rename-block-augmentations-description": "Renamed via the attribute rename_block_augmentations.", + "defaults-rename-block-engrams": "[Rename] Block: Engrams to ", + "defaults-rename-block-engrams-description": "Renamed via the attribute rename_block_engrams.", + "defaults-rename-block-integrity": "[Rename] Block: Integrity to ", + "defaults-rename-block-integrity-description": "Renamed via the attribute rename_block_integrity.", + "defaults-rename-block-inventory": "[Rename] Block: Inventory to ", + "defaults-rename-block-inventory-description": "Renamed via the attribute rename_block_inventory.", + "defaults-rename-block-power": "[Rename] Block: Power to ", + "defaults-rename-block-power-description": "Renamed via the attribute rename_block_power.", + "defaults-rename-block-powerarmors": "[Rename] Block: Power Armors to ", + "defaults-rename-block-powerarmors-description": "Renamed via the attribute rename_block_powerarmors.", + "defaults-rename-block-powers": "[Rename] Block: Powers to ", + "defaults-rename-block-powers-description": "Renamed via the attribute rename_block_powers.", + "defaults-rename-block-quick-notes": "[Rename] Block: Quick Notes to ", + "defaults-rename-block-quick-notes-description": "Renamed via the attribute rename_block_quick_notes.", + "defaults-rename-block-vehicles": "[Rename] Block: Vehicles to ", + "defaults-rename-block-vehicles-description": "Renamed via the attribute rename_block_vehicles.", + "defaults-rename-block-walkers": "[Rename] Block: Walkers to ", + "defaults-rename-block-walkers-description": "Renamed via the attribute rename_block_walkers.", + "defaults-rename-block-weapons": "[Rename] Block: Weapons to ", + "defaults-rename-block-weapons-description": "Renamed via the attribute rename_block_weapons.You can rename the Hindrances caused by the loss of Integrity (Sanity, Purity, etc.). This can also be done manually with the @{rename_integrity-attribute} for each individual sheet. Note that they activate in intervals with each fraction of 10 below 70 — Discord triggers on 69.9 or lower, Dissonance on 59.9 or lower, and so forth.
", + "defaults-rename-integrity-alienation": "[Rename] Integrity: Alienation to ", + "defaults-rename-integrity-alienation-description": "Renamed via the attribute rename_alienation.", + "defaults-rename-integrity-depersonalization": "[Rename] Integrity: Depersonalization to ", + "defaults-rename-integrity-depersonalization-description": "Renamed via the attribute rename_depersonalization.", + "defaults-rename-integrity-derealization": "[Rename] Integrity: Derealization to ", + "defaults-rename-integrity-derealization-description": "Renamed via the attribute rename_derealization.", + "defaults-rename-integrity-discord": "[Rename] Integrity: Discord to ", + "defaults-rename-integrity-discord-description": "Renamed via the attribute rename_discord.", + "defaults-rename-integrity-dissonance": "[Rename] Integrity: Dissonance to ", + "defaults-rename-integrity-dissonance-description": "Renamed via the attribute rename_dissonance.", + "defaults-rename-integrity-ego-death": "[Rename] Integrity: Ego Death to ", + "defaults-rename-integrity-ego-death-description": "Renamed via the attribute rename_ego_death.", + "defaults-rename-integrity-psychosis": "[Rename] Integrity: Psychosis to ", + "defaults-rename-integrity-psychosis-description": "Renamed via the attribute rename_psychosis.", + "defaults-rename-integrity-seizures": "[Rename] Integrity: Seizures to ", + "defaults-rename-integrity-seizures-description": "Renamed via the attribute rename_seizures.", + "defaults-rename-label-age": "[Rename] Label: Age to ", + "defaults-rename-label-age-description": "Renamed via the attribute rename_label_age (e.g. Number or Incarnation).", + "defaults-rename-label-bits": "[Rename] Label: #Bits to ", + "defaults-rename-label-bits-description": "Renamed via the attribute rename_label_bits (e.g. Money or Gold).You can rename the blocks to better fit the Game Setting, such as \"Powers\" to \"Talismans\" or \"Walkers\" to \"Frames\". This can also be done manually with the @{rename_block_attribute} for each individual sheet.
", + "defaults-rename-label-exp": "[Rename] Label: EXP to ", + "defaults-rename-label-exp-description": "Renamed via the attribute rename_label_exp (e.g. Karma or Gems).", + "defaults-rename-label-eyes": "[Rename] Label: Eyes to ", + "defaults-rename-label-eyes-description": "Renamed via the attribute rename_label_eyes (e.g. Sensors or Optics).", + "defaults-rename-label-gender": "[Rename] Label: Gender to ", + "defaults-rename-label-gender-description": "Renamed via the attribute rename_label_gender (e.g. Sex or Version).", + "defaults-rename-label-hair": "[Rename] Label: Hair to ", + "defaults-rename-label-hair-description": "Renamed via the attribute rename_label_hair (e.g. Horns or Mane).", + "defaults-rename-label-height": "[Rename] Label: Height to ", + "defaults-rename-label-height-description": "Renamed via the attribute rename_label_height (e.g. Scale or Length).", + "defaults-rename-label-level": "[Rename] Label: Level to ", + "defaults-rename-label-level-description": "Renamed via the attribute rename_label_level (e.g. Circle or Year).", + "defaults-rename-label-name": "[Rename] Label: Name to ", + "defaults-rename-label-name-description": "Renamed via the attribute rename_label_name (e.g. Alias or Codename).", + "defaults-rename-label-origin": "[Rename] Label: Origin to ", + "defaults-rename-label-origin-description": "Renamed via the attribute rename_label_origin (e.g. Race or Species).", + "defaults-rename-label-rank": "[Rename] Label: Rank to ", + "defaults-rename-label-rank-description": "Renamed via the attribute rename_label_rank (e.g. Grade or Titel).", + "defaults-rename-label-weight": "[Rename] Label: Weight to ", + "defaults-rename-label-weight-description": "Renamed via the attribute rename_label_weight (e.g. Mass or Your Mom).", + "defaults-rename-skill-academics": "[Rename] Skill: Academics to ", + "defaults-rename-skill-academics-description": "Renamed via the attribute rename_academics.", + "defaults-rename-skill-athletics": "[Rename] Skill: Athletics to ", + "defaults-rename-skill-athletics-description": "Renamed via the attribute rename_athletics.", + "defaults-rename-skill-boating": "[Rename] Skill: Boating to ", + "defaults-rename-skill-boating-description": "Renamed via the attribute rename_boating.", + "defaults-rename-skill-common-knowledge": "[Rename] Skill: Common Knowl. to ", + "defaults-rename-skill-common-knowledge-description": "Renamed via the attribute rename_common_knowledge.", + "defaults-rename-skill-custom-skill-1": "[Rename] Skill: Custom Skill #1 to ", + "defaults-rename-skill-custom-skill-1-description": "Can be renamed directly in the sheet's Settings tab.", + "defaults-rename-skill-custom-skill-2": "[Rename] Skill: Custom Skill #2 to ", + "defaults-rename-skill-custom-skill-2-description": "Can be renamed directly in the sheet's Settings tab.You can rename the labels at the top of the sheet, such as \"Name\" to \"Alias\" or \"Origin\" to \"Race\". This can also be done manually with the @{rename_label_attribute} for each individual sheet. Note that the labels are separated from the actual fields and do not affect the references (e.g. @{name}). They will always be in English.
", + "defaults-rename-skill-driving": "[Rename] Skill: Driving to ", + "defaults-rename-skill-driving-description": "Renamed via the attribute rename_driving.", + "defaults-rename-skill-electronics": "[Rename] Skill: Electronics to ", + "defaults-rename-skill-electronics-description": "Renamed via the attribute rename_electronics.", + "defaults-rename-skill-faith": "[Rename] Skill: Faith to ", + "defaults-rename-skill-faith-description": "Renamed via the attribute rename_faith.", + "defaults-rename-skill-fighting": "[Rename] Skill: Fighting to ", + "defaults-rename-skill-fighting-description": "Renamed via the attribute rename_fighting.", + "defaults-rename-skill-focus": "[Rename] Skill: Focus to ", + "defaults-rename-skill-focus-description": "Renamed via the attribute rename_focus.", + "defaults-rename-skill-gambling": "[Rename] Skill: Gambling to ", + "defaults-rename-skill-gambling-description": "Renamed via the attribute rename_gambling.", + "defaults-rename-skill-hacking": "[Rename] Skill: Hacking to ", + "defaults-rename-skill-hacking-description": "Renamed via the attribute rename_hacking.", + "defaults-rename-skill-healing": "[Rename] Skill: Healing to ", + "defaults-rename-skill-healing-description": "Renamed via the attribute rename_healing.", + "defaults-rename-skill-intimidation": "[Rename] Skill: Intimidation to ", + "defaults-rename-skill-intimidation-description": "Renamed via the attribute rename_intimidation.", + "defaults-rename-skill-language": "[Rename] Skill: Language to ", + "defaults-rename-skill-language-description": "Renamed via the attribute rename_language.", + "defaults-rename-skill-magic": "[Rename] Skill: Magic to ", + "defaults-rename-skill-magic-description": "Renamed via the attribute rename_magic.", + "defaults-rename-skill-notice": "[Rename] Skill: Notice to ", + "defaults-rename-skill-notice-description": "Renamed via the attribute rename_notice.", + "defaults-rename-skill-occult": "[Rename] Skill: Occult to ", + "defaults-rename-skill-occult-description": "Renamed via the attribute rename_occult.", + "defaults-rename-skill-performance": "[Rename] Skill: Performance to ", + "defaults-rename-skill-performance-description": "Renamed via the attribute rename_performance.", + "defaults-rename-skill-persuasion": "[Rename] Skill: Persuasion to ", + "defaults-rename-skill-persuasion-description": "Renamed via the attribute rename_persuasion.", + "defaults-rename-skill-piloting": "[Rename] Skill: Piloting to ", + "defaults-rename-skill-piloting-description": "Renamed via the attribute rename_piloting.", + "defaults-rename-skill-psionics": "[Rename] Skill: Psionics to ", + "defaults-rename-skill-psionics-description": "Renamed via the attribute rename_psionics.", + "defaults-rename-skill-repair": "[Rename] Skill: Repair to ", + "defaults-rename-skill-repair-description": "Renamed via the attribute rename_repair.", + "defaults-rename-skill-research": "[Rename] Skill: Research to ", + "defaults-rename-skill-research-description": "Renamed via the attribute rename_research.", + "defaults-rename-skill-riding": "[Rename] Skill: Riding to ", + "defaults-rename-skill-riding-description": "Renamed via the attribute rename_riding.", + "defaults-rename-skill-science": "[Rename] Skill: Science to ", + "defaults-rename-skill-science-description": "Renamed via the attribute rename_science.", + "defaults-rename-skill-shooting": "[Rename] Skill: Shooting to ", + "defaults-rename-skill-shooting-description": "Renamed via the attribute rename_shooting.", + "defaults-rename-skill-spellcasting": "[Rename] Skill: Spellcasting to ", + "defaults-rename-skill-spellcasting-description": "Renamed via the attribute rename_spellcasting.", + "defaults-rename-skill-stealth": "[Rename] Skill: Stealth to ", + "defaults-rename-skill-stealth-description": "Renamed via the attribute rename_stealth.", + "defaults-rename-skill-survival": "[Rename] Skill: Survival to ", + "defaults-rename-skill-survival-description": "Renamed via the attribute rename_survival.", + "defaults-rename-skill-taunt": "[Rename] Skill: Taunt to ", + "defaults-rename-skill-taunt-description": "Renamed via the attribute rename_taunt.", + "defaults-rename-skill-thievery": "[Rename] Skill: Thievery to ", + "defaults-rename-skill-thievery-description": "Renamed via the attribute rename_thievery.", + "defaults-rename-skill-weird-science": "[Rename] Skill: Weird Science to ", + "defaults-rename-skill-weird-science-description": "Renamed via the attribute rename_weird_science.", + "defaults-rule-augmentation-strain": "[Rule] Augmentation Strain", + "defaults-rule-augmentation-strain-description": "Use the Strain rules from the Science Fiction Companion (SFC 29).", + "defaults-rule-no-power-points": "[Rule] No Power Points", + "defaults-rule-no-power-points-description": "Use the No Power Points Setting Rule (SWADE 140).", + "defaults-skill-show-boating": "[Skill] Show Boating Skill", + "defaults-skill-show-boating-description": "Show the Boating (Agility) skill.", + "defaults-skill-show-custom-skill-1": "[Skill] Show Custom Skill #1", + "defaults-skill-show-custom-skill-1-description": "Show the Custom Skill #1, which can be renamed further down.", + "defaults-skill-show-custom-skill-2": "[Skill] Show Custom Skill #2", + "defaults-skill-show-custom-skill-2-description": "Show the Custom Skill #2, which can be renamed further down.You can rename the labels of each attribute and its abbreviation (max. 3 characters). This can also be done manually with the @{rename_attribute} for each individual sheet. Note that changing the label does not affect the reference @{attribute} for rolls. They will always be in English.
", + "defaults-skill-show-driving": "[Skill] Show Driving Skill", + "defaults-skill-show-driving-description": "Show the Driving (Agility) skill.", + "defaults-skill-show-electronics": "[Skill] Show Electronics Skill", + "defaults-skill-show-electronics-description": "Show the Electronics (Smarts) skill.", + "defaults-skill-show-faith": "[Skill] Show Faith Skill", + "defaults-skill-show-faith-description": "Show the Faith (Spirit) skill.", + "defaults-skill-show-focus": "[Skill] Show Focus Skill", + "defaults-skill-show-focus-description": "Show the Focus (Spirit) skill.", + "defaults-skill-show-language": "[Skill] Show Language Skill", + "defaults-skill-show-language-description": "Show the Language (Smarts) skill.", + "defaults-skill-show-magic": "[Skill] Show MAGIC Skill", + "defaults-skill-show-magic-description": "Show the MAGIC (Smarts) skill. Maschinenleben.", + "defaults-skill-show-occult": "[Skill] Show Occult Skill", + "defaults-skill-show-occult-description": "Show the Occult (Smarts) skill.", + "defaults-skill-show-piloting": "[Skill] Show Piloting Skill", + "defaults-skill-show-piloting-description": "Show the Piloting (Agility) skill.", + "defaults-skill-show-psionics": "[Skill] Show Psionics Skill", + "defaults-skill-show-psionics-description": "Show the Psionics (Smarts) skill.", + "defaults-skill-show-riding": "[Skill] Show Riding Skill", + "defaults-skill-show-riding-description": "Show the Riding (Agility) skill.", + "defaults-skill-show-spellcasting": "[Skill] Show Spellcasting Skill", + "defaults-skill-show-spellcasting-description": "Show the Spellcasting (Smarts) skill.", + "defaults-skill-show-weird-science": "[Skill] Show Weird Science Skill", + "defaults-skill-show-weird-science-description": "Show the Weird Science (Smarts) skill.", + "dice-roller-code-placeholder": "2d6!+2", + "dice-roller-damage": "Damage", + "dice-roller-hidden": "Hidden", + "dice-roller-roll": "Roll", + "dice-roller-run": "Run", + "dice-roller-run-ace": "Run!", + "die-button-number-10": "10", + "die-button-number-12": "12", + "die-button-number-2": "2", + "die-button-number-4": "4", + "die-button-number-6": "6", + "die-button-number-8": "8", + "edges-and-hindrances": "Edges & Hindrances", + "engrams": "Engrams", + "engrams-description": "Description", + "engrams-description-placeholder": "e.g. entangle (SWADE 161) power but resisted by Smarts", + "engrams-name-placeholder": "Engram", + "engrams-note-box-placeholder": "Notes", + "engrams-notes-placeholder": "Effect/Description", + "engrams-penalty": "Penalty", + "engrams-skill-placeholder": "Hacking", + "exclamation-mark": "!", + "exp": "EXP", + "extra-fatigue": "FTG", + "extra-trait-mod-placeholder": "+/−", + "extra-trait-wd-placeholder": "WD", + "extra-wounds": "WDS", + "eyes": "Eyes", + "fatigue": "Fatigue", + "feature-name-new": "New", + "flight": "Flight", + "gender": "Gender", + "gm-roll": "GM Roll", + "hair": "Hair", + "integrity": "Integrity", + "integrity-alienation": "Alienation", + "integrity-depersonalization": "Depersonalization", + "integrity-derealization": "Derealization", + "integrity-discord": "Discord", + "integrity-dissonance": "Dissonance", + "integrity-ego-death": "Ego Death", + "integrity-maximum": "Max", + "integrity-mod": "Mod", + "integrity-psychosis": "Psychosis", + "integrity-seizures": "Seizures", + "inventory": "Inventory", + "inventory-name-placeholder": "Item", + "inventory-note-box-placeholder": "Notes", + "inventory-notes-placeholder": "About this item...", + "inventory-total-weight": "Total Weight: ", + "inventory-weight-placeholder-u": "WGT", + "inventory-weight-toggle-title": "Weight On/Off", + "inventory-weight-u": "WGT", + "level": "Level", + "mod": "Mod", + "modifier": "Modifier", + "multiplier": "Multiplier", + "name": "Name", + "none": "None", + "notes": "Notes", + "origin": "Origin", + "pace": "Pace", + "parry": "Parry", + "penalty": "Penalty", + "power": "Power", + "power-consumed": "Consumed", + "power-energy": "Power", + "power-maximum": "Max", + "powerarmor": "Power Armor", + "powerarmors": "Power Armors", + "powerarmors-armor": "Armor", + "powerarmors-build-placeholder": "Chassis | Modifications, Notes, etc.", + "powerarmors-mods": "Mods", + "powerarmors-mods-placeholder": "0/5", + "powerarmors-name-placeholder": "Power Armor Type", + "powerarmors-pace": "Pace", + "powerarmors-size": "Size", + "powerarmors-weapons": "Weap.", + "powerarmors-weight": "Weight", + "powerarmors-weight-placeholder": "500", + "powers": "Powers", + "powers-ap": "AP", + "powers-damage": "Damage", + "powers-damage-placeholder": "2d6", + "powers-duration": "Duration", + "powers-duration-placeholder": "Duration", + "powers-name-placeholder": "Power", + "powers-note-box-placeholder": "Notes", + "powers-notes-placeholder": "Effect/Description", + "powers-penalty": "Penalty", + "powers-pp": "PP", + "powers-pp-placeholder": "2", + "powers-range": "Range", + "powers-range-placeholder": "Range/Melee", + "powers-skill-placeholder": "Spellcasting", + "powers-trapping-placeholder": "Fire, Light, etc.", + "query-rof": "Query RoF", + "query-wd": "Query WD", + "quick-notes": "Quick Notes", + "rads": "Rads", + "raise-calculator": "Raise Calculator", + "raises": "raises", + "rank": "Rank", + "rate-of-fire": "Rate of Fire", + "roll-button": "Roll Button", + "roll-description": "Description", + "roll-description-placeholder": "Narrative or functional description below the header in the Roll Template. Leave empty to disable.", + "roll-injection": "Roll Injection", + "roll-injection-placeholder": "{{source_label=}} {{source=}} {{custom3_label=}} {{custom3=}} {{rof=[[ 1 ]]}} {{traitroll8=}}", + "roll-of": "Roll of", + "roll-result": "Roll Result", + "roll-tooltip-prefix": "Roll ", + "roll-tooltip-suffix": "RoF ", + "rolls": "rolls", + "rolltemplate-armor-piercing": "Armor Piercing", + "rolltemplate-bonus-wild-die": "Bonus Wild Die", + "rolltemplate-commander": "Commander", + "rolltemplate-damage": "Damage", + "rolltemplate-damage-modifier": "Damage Modifier", + "rolltemplate-damage-title": "Roll Damage", + "rolltemplate-dice-rof": "Dice/RoF", + "rolltemplate-fatigue": "Fatigue", + "rolltemplate-hits-rof": "Hits/RoF", + "rolltemplate-modifier": "Modifier", + "rolltemplate-range": "Range", + "rolltemplate-reroll-title": "Reroll", + "rolltemplate-trapping": "Trapping", + "rolltemplate-wild-die": "Wild Die", + "rolltemplate-wound-penalty": "Wound Penalty", + "run": "Run", + "runs-ellipsis": "runs...", + "settings-abilities-label": "[Abilities]", + "settings-allies-label": "[Allies]", + "settings-ammunition-container-1-label": "[Ammo #1]", + "settings-ammunition-container-1-placeholder": "Ammo #1", + "settings-ammunition-container-2-label": "[Ammo #2]", + "settings-ammunition-container-2-placeholder": "Ammo #2", + "settings-ammunition-container-3-label": "[Ammo #3]", + "settings-ammunition-container-3-placeholder": "Ammo #3", + "settings-ammunition-label": "[Ammunition]", + "settings-augmentations-label": "[Augmentations]", + "settings-custom-button-1-label": "[Custom Button #1]", + "settings-custom-button-2-label": "[Custom Button #2]", + "settings-custom-button-3-label": "[Custom Button #3]", + "settings-custom-buttons-placeholder": "UnShake/Detox/etc.", + "settings-custom-skill-1-label": "[Custom Skill #1]", + "settings-custom-skill-1-placeholder": "Custom Skill 1", + "settings-custom-skill-2-label": "[Custom Skill #2]", + "settings-custom-skill-2-placeholder": "Custom Skill 2", + "settings-engrams-label": "[Engrams]", + "settings-function-augmentation-markers": "Augmentation Markers", + "settings-function-explode-run-die": "Explode Run Die", + "settings-function-roll-description-inputs": "List Roll Description Inputs", + "settings-function-roll-injection-inputs": "List Roll Injection Inputs", + "settings-function-running-applies-fatigue": "Running Applies Fatigue", + "settings-function-running-ignores-wounds": "Running Ignores Wounds", + "settings-function-silhouette-markers": "Silhouette Markers", + "settings-function-skill-markers": "Skill Markers", + "settings-help-ammunition": "Ammunition", + "settings-help-ammunition-description": "You can keep track of up to three named \"magazines\" in the Ammunition block. The buttons allow you to quickly add to or subtract from the values. You can save a value with [S] and restore it with [R].", + "settings-help-armor-and-notes": "Armor & Notes", + "settings-help-armor-and-notes-description": "Enter your Armor ratings for the corresponding limbs. They are not self-calculating since there are too many factors; this is more convenient. You can add notes for Resistances, circumstance modifiers, or relevant augmentations such as subdermal armor to keep things in one place.", + "settings-help-attribute-reference": "Attribute Reference", + "settings-help-attribute-reference-description": "The attributes of this sheet follow a simple naming pattern and can be easily derived from their labels. Just remove any dots or special characters, expand abbreviations, convert to lowercase, and replace whitespaces with underscores (_). Adjacent/Sibling attributes are appended like this as well. Agility becomes @{agility}, @{agility_mod}, @{agility_wd}, @{agility_extra_wd} (for Extras only), and @{agility_natural}. Tough. expands @{toughness} and Armor is referenced with @{armor_head|_torso|_arms|_legs}. English only!", + "settings-help-edges-and-hindrances": "Edges & Hindrances", + "settings-help-edges-and-hindrances-description": "Manage your Edges and Hindrances here. They follow a horizontal masonry layout to save space and remain visible for convenience. The width is automatically adjusted once you press enter and you can cycle through colored labels to indicate Rank, type, and more. Sorting is wonky though.", + "settings-help-extra-sheet": "Extra Sheet", + "settings-help-extra-sheet-description": "For non-player characters, you can change the layout to a more compact alternative with the switch right above the sheet. This version lacks many features but is primed for Extras without Wild Die. Of course, you can add Wild Dice if needed. Edit Traits by clicking on their die, opening a small menu, and roll with the label. Hovering reveals buttons for direct die rolls. Add skills by clicking the framed pencil icon in the header. Lists work as usual.", + "settings-help-helper-buttons": "Helper Buttons", + "settings-help-helper-buttons-description": "The buttons above the skill section provide selected actions and convenience functions. The dice roller input is parsed, so you can write codes like \"Sma+2d6\". You may also use references such as @{athletics} or macros, but beware that the parser is not smart. Hidden rolls are sent only to the GM. The toggles can enable/disable additional roll queries for the whole sheet.", + "settings-help-hexagon-fields": "Hexagon Fields", + "settings-help-hexagon-fields-description": "Your attributes and secondary statistics. They either accept dice codes (d4 to d12) or integers. Positive modifiers are automatically prefixed. Hovering reveals additional fields that are otherwise invisible until relevant. You can leave them empty to use defaults, such as a d6 as Wild Die. The Wild Die can be disabled with \"n/a\". The labels act as roll buttons.", + "settings-help-list-item-options": "List Item Options", + "settings-help-list-item-options-description": "Interactive list items, such as weapons and powers, come with options. When the item is folded out, you can access them via the gear icon. Typical options include toggles for buttons and fields, but some also allow to override the Wild Die and more. Mind that the inputs are not validated; do not enter nonsense!", + "settings-help-raise-damage": "Raise Damage", + "settings-help-raise-damage-description": "There is no general function or field to apply raise damage since this modifier is too flexible. But nothing stops you from entering \"1d6\" when prompted to add a damage modifier. You could also add \"2d4+2\" or whatever modifier may apply.", + "settings-help-rate-of-fire": "Rate of Fire (Multiple Dice)", + "settings-help-rate-of-fire-description": "To roll multiple skill dice, you have two options. If you lock the skills, you can click directly on the desired die bubble, always prompting you to enter the Rate of Fire. Alternatively, you can toggle the [Query RoF] helper button, enabling the feature for the whole sheet.", + "settings-help-roll-injections": "Roll Injections", + "settings-help-roll-injections-description": "When you enable the option under Setup, you can append and toggle custom code to list item rolls. Mind that the inputs are not validated; do not enter nonsense! Following is a collection of useful template hooks.
+
+